@deck.gl-community/infovis-layers 9.3.2 → 9.3.5

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/layers/time-delta-layer.ts", "../src/utils/format-utils.ts", "../src/views/orthographic-utils.ts", "../src/views/view-state-utils.ts", "../src/views/layer-filter.ts", "../src/synchronized-views/synchronized-views.ts"],
4
- "sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {TimeDeltaLayer, type TimeDeltaLayerProps} from './layers/time-delta-layer';\n\nexport {fitBoundsOrthographic} from './views/orthographic-utils';\nexport {formatTimeMs, formatTimeRangeMs} from './utils/format-utils';\nexport {validateViewState, mergeViewStates, type OptionalViewState} from './views/view-state-utils';\nexport {makeLayerFilter} from './views/layer-filter';\n\nexport {\n HEADER_VIEW_HEIGHT,\n LEGEND_VIEW_WIDTH,\n SYNCHRONIZED_VIEWS,\n SYNCHRONIZED_VIEW_STATE_CONSTRAINTS,\n getSynchronizedViewStates,\n fitSynchronizedViewStatesToBounds\n} from './synchronized-views/synchronized-views';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, type LayerProps} from '@deck.gl/core';\nimport {LineLayer, TextLayer} from '@deck.gl/layers';\n\n// import {PathStyleExtension} from '@deck.gl/extensions';\n\nimport {formatTimeMs} from '../utils/format-utils';\n\nexport type TimeDeltaLayerProps = LayerProps & {\n unit: 'timestamp' | 'milliseconds';\n minTimeMs: number;\n maxTimeMs: number;\n /** Start time in milliseconds since epoch */\n startTimeMs: number;\n /** End time in milliseconds since epoch */\n endTimeMs: number;\n /** Optional: Y-coordinate for the axis line (default: 0) */\n y?: number;\n header: boolean;\n\n /** Optional: RGBA color for axis and ticks (default: [0, 0, 0, 255]) */\n color?: [number, number, number, number];\n /** Minimum Y-coordinate for grid lines. @todo (ib) Remve and calculate from viewport? */\n yMin?: number;\n /** Maximum Y-coordinate for grid lines. @todo (ib) Remve and calculate from viewport? */\n yMax?: number;\n};\n\nexport class TimeDeltaLayer extends CompositeLayer<TimeDeltaLayerProps> {\n static override layerName = 'TimeDeltaLayer';\n static override defaultProps: Required<Omit<TimeDeltaLayerProps, keyof LayerProps>> = {\n header: false,\n minTimeMs: 0,\n maxTimeMs: 100,\n startTimeMs: 0,\n endTimeMs: 100,\n y: 0,\n color: [0, 0, 0, 255],\n unit: 'timestamp',\n yMin: -1e6, // Should cover full viewport height in most cases\n yMax: 1e6 // Should cover full viewport height in most cases\n };\n\n override renderLayers() {\n const {startTimeMs, endTimeMs, color = [0, 0, 0, 255], yMin, yMax} = this.props;\n\n const timeDeltaPosition = [(startTimeMs + endTimeMs) / 2, 10];\n const timeDeltaMs = Math.abs(endTimeMs - startTimeMs);\n const timeDeltaLabel = formatTimeMs(timeDeltaMs, false);\n\n if (!this.props.header) {\n const timeLines = [\n {\n sourcePosition: [startTimeMs, yMin],\n targetPosition: [startTimeMs, yMax]\n },\n {\n sourcePosition: [endTimeMs, yMin],\n targetPosition: [endTimeMs, yMax]\n }\n ];\n return [\n // Interval end lines\n new LineLayer({\n id: 'time-delta-side-bars',\n data: timeLines,\n getSourcePosition: (d) => d.sourcePosition,\n getTargetPosition: (d) => d.targetPosition,\n getColor: color,\n getWidth: 4,\n widthUnits: 'pixels'\n })\n ];\n }\n\n // // Tick marks\n // new LineLayer({\n // id: 'time-delta-marks',\n // data: tickLines,\n // getSourcePosition: (d) => d.sourcePosition,\n // getTargetPosition: (d) => d.targetPosition,\n // getColor: color,\n // getWidth: 1,\n // }),\n\n // TODO - triggers broader root-level file updates\n // new PathLayer({\n // id: 'dotted-path',\n // data: route,\n // getPath: d => d.path,\n // getWidth: 4,\n // getColor: [255, 0, 0],\n\n // // Enable rounded caps on each dash\n // rounded: true,\n\n // // Add the dash extension\n // extensions: [\n // new PathStyleExtension({\n // dash: true,\n // // highPrecisionDash: true, // uncomment for finer control at low zoom\n // capRounded: true // draw dash ends as semicircles\n // })\n // ],\n\n // // [dashLength, gapLength] in pixels\n // // small dash + equal or larger gap = dotted effect\n // getDashArray: () => [2, 6]\n // })\n // ]\n const HEADER_Y = 12;\n const timeLines = [\n {\n sourcePosition: [startTimeMs, -100],\n targetPosition: [startTimeMs, HEADER_Y]\n },\n {\n sourcePosition: [endTimeMs, -100],\n targetPosition: [endTimeMs, HEADER_Y]\n }\n ];\n\n return [\n // Interval end lines\n new LineLayer({\n id: 'header-time-delta-side-bars',\n data: timeLines,\n getSourcePosition: (d) => d.sourcePosition,\n getTargetPosition: (d) => d.targetPosition,\n getColor: color,\n getWidth: 4,\n widthUnits: 'pixels'\n }),\n\n // Interval center\n new LineLayer({\n id: 'header-time-delta-dotted-line',\n data: [\n {\n sourcePosition: [startTimeMs, HEADER_Y - 7],\n targetPosition: [endTimeMs, HEADER_Y - 7]\n }\n ],\n getSourcePosition: (d) => d.sourcePosition,\n getTargetPosition: (d) => d.targetPosition,\n getColor: color,\n getWidth: 1,\n widthUnits: 'pixels'\n }),\n\n // Label\n new TextLayer({\n id: 'header-time-delta-label',\n data: [{position: timeDeltaPosition, text: timeDeltaLabel}],\n getPosition: (d) => d.position,\n getText: (d) => d.text,\n getSize: 12,\n getColor: color,\n getTextAnchor: 'middle',\n getAlignmentBaseline: 'top',\n background: true,\n getBackgroundColor: [255, 255, 255, 255], // Solid green background\n backgroundPadding: [4, 2] // Horizontal and vertical padding\n })\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/**\n * Convert a time in microseconds to a human-readable string\n * @param us Time in microseconds\n */\nexport function formatTimeMs(timeMs: number, space: boolean = true): string {\n const sep = space ? ' ' : '';\n const us = timeMs * 1000;\n if (us === 0) {\n return '0s';\n }\n if (Math.abs(us) < 1000) {\n return `${floatToStr(us)}${sep}\u00B5s`;\n }\n const ms = us / 1000;\n if (Math.abs(ms) < 1000) {\n return `${floatToStr(ms)}${sep} ms`;\n }\n const s = ms / 1000;\n if (Math.abs(s) < 60) {\n return `${floatToStr(s)}${sep} s`;\n }\n const m = s / 60;\n if (Math.abs(m) < 60) {\n return `${floatToStr(m)}${sep} min`;\n }\n const h = m / 60;\n if (Math.abs(h) < 24) {\n return `${floatToStr(h)}${sep} hrs`;\n }\n const d = h / 24;\n return `${floatToStr(d)}${sep} days`;\n}\n\nexport function formatTimeRangeMs(startMs: number, endMs: number): string {\n return `${formatTimeMs(startMs)} - ${formatTimeMs(endMs)}`;\n}\n\n/**\n * Convert a float to a string\n */\nfunction floatToStr(f: number, roundDigits: number = 5): string {\n if (Number.isInteger(f)) {\n return f.toString();\n }\n\n for (let i = 1; i < roundDigits - 1; i++) {\n const rounded = parseFloat(f.toPrecision(i));\n if (rounded === f) {\n return rounded.toPrecision(i);\n }\n }\n\n return f.toPrecision(roundDigits);\n}\n\n// export function formatTimesUs(ticks: number[]): string {\n// // Try from 0 up to a reasonable max (e.g. 20)\n// for (let d = 0; d <= 20; d++) {\n// const seen = new Set<string>();\n// let allDistinct = true;\n// for (const t of ticks) {\n// // Format each tick with d decimals\n// const str = t.toFixed(d);\n// if (seen.has(str)) {\n// allDistinct = false;\n// break;\n// }\n// seen.add(str);\n// }\n// if (allDistinct) {\n// return d;\n// }\n// }\n// // Fallback if somehow not distinct even at 20 decimals\n// return 20;\n// }\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\ntype Bounds = [[number, number], [number, number]];\n\nexport function fitBoundsOrthographic(\n width: number,\n height: number,\n bounds: Readonly<Bounds>,\n zoomMode: 'single'\n): {target: [number, number]; zoom: number};\n\nexport function fitBoundsOrthographic(\n width: number,\n height: number,\n bounds: Readonly<Bounds>,\n zoomMode: 'per-axis'\n): {target: [number, number]; zoom: [number, number]};\n\n/**\n * Compute center & zoom for an OrthographicViewport so that `bounds` fills the viewport.\n * @param width viewport width in px\n * @param height viewport height in px\n * @param bounds [[minX,minY],[maxX,maxY]] in the same world units you\u2019re rendering\n * @returns { target: [number, number], zoom: number }\n * target: center of the viewport in world units\n * zoom: deck.gl orthographic zoom level (log2(scale))\n * (deck.gl orthographic zoom is the log2 of the scale factor)\n */\nexport function fitBoundsOrthographic(\n width: number,\n height: number,\n bounds: Readonly<Bounds>,\n zoomMode: 'single' | 'per-axis' = 'per-axis'\n): {target: [number, number]; zoom: number | [number, number]} {\n const [[minX, minY], [maxX, maxY]] = bounds;\n\n // center of the box\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n\n // size of the box\n const boxW = maxX - minX;\n const boxH = maxY - minY;\n\n // scale (world units \u2192 screen pixels)\n const scaleX = width / boxW;\n const scaleY = height / boxH;\n\n // pick the smaller scale so the whole box fits\n const scale = Math.min(scaleX, scaleY);\n\n // deck.gl orthographic zoom is log2(scale)\n const zoom = Math.log2(scale);\n\n // 3) axis\u2010specific zooms (deck.gl\u2019s orthographic zoom = log2(scale))\n const zoomX = Math.log2(scaleX);\n const zoomY = Math.log2(scaleY);\n\n if (Number.isNaN(zoom) || Number.isNaN(zoomX) || Number.isNaN(zoom)) {\n // eslint-disable-next-line no-console\n console.warn('Invalid zoom values:', {zoom, zoomX, zoomY});\n }\n\n return {\n target: [centerX, centerY],\n zoom: zoomMode === 'single' ? zoom : [zoomX, zoomY]\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type OrthographicViewState} from '@deck.gl/core';\n\nexport type OptionalizedViewState<T> = {\n [K in keyof T]: T[K] extends [number, number] | undefined\n ? [number | undefined, number | undefined] | undefined\n : T[K] extends [number, number, number] | undefined\n ? [number | undefined, number | undefined, number | undefined] | undefined\n : T[K] extends [number, number] | number | undefined\n ? [number | undefined, number | undefined] | undefined\n : T[K] extends [number, number, number] | [number, number] | undefined\n ?\n | [number | undefined, number | undefined, number | undefined]\n | [number | undefined, number | undefined]\n | undefined\n : T[K];\n};\n\nexport type OptionalViewState = OptionalizedViewState<OrthographicViewState>;\n\nexport function mergeViewStates(\n viewState1: OrthographicViewState,\n viewState2: OptionalViewState\n): OrthographicViewState {\n const target1 = viewState1.target ?? [0, 0];\n const zoom1 = viewState1.zoom ?? [1, 1];\n const mergedViewState = {\n ...viewState1,\n ...viewState2,\n target: [viewState2.target?.[0] ?? target1[0], viewState2.target?.[1] ?? target1[1]],\n zoom: [\n // ts-expect-error view state typing is awfully optional\n viewState2.zoom?.[0] ?? zoom1[0],\n // ts-expect-error view state typing is awfully optional\n viewState2.zoom?.[1] ?? zoom1[1]\n ]\n };\n // @ts-expect-error view state typing is awfully optional\n validateViewState(mergedViewState);\n // @ts-expect-error view state typing is awfully optional\n return mergedViewState;\n}\n\n// eslint-disable-next-line complexity\nexport function validateViewState(\n viewState: OrthographicViewState\n): viewState is OrthographicViewState {\n const isTargetValid =\n Array.isArray(viewState.target) &&\n viewState.target[0] !== undefined &&\n !Number.isNaN(viewState.target[0]) &&\n viewState.target[1] !== undefined &&\n !Number.isNaN(viewState.target[1]);\n const isZoomValid =\n Array.isArray(viewState.zoom) &&\n viewState.zoom[0] !== undefined &&\n !Number.isNaN(viewState.zoom[0]) &&\n viewState.zoom[1] !== undefined &&\n !Number.isNaN(viewState.zoom[1]);\n\n if (!isTargetValid || !isZoomValid) {\n // eslint-disable-next-line no-console\n console.warn('Invalid viewState:', viewState);\n }\n\n return isTargetValid && isZoomValid;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type FilterContext} from '@deck.gl/core';\n\nexport type DeclarativeLayerFilter = Record<\n string,\n | {\n include: string[];\n }\n | {\n exclude: string[];\n }\n>;\n\ntype RegexpLayerFilter = Record<\n string,\n | {\n include: RegExp[];\n }\n | {\n exclude: RegExp[];\n }\n>;\n\nexport function makeLayerFilter(\n filters: DeclarativeLayerFilter\n): (context: FilterContext) => boolean {\n // Pre-compile the regexps for performance\n const regexpFilters: RegexpLayerFilter = {};\n for (const [key, value] of Object.entries(filters)) {\n if ('include' in value) {\n regexpFilters[key] = {\n include: value.include.map((v) => new RegExp(v))\n };\n } else {\n regexpFilters[key] = {\n exclude: value.exclude.map((v) => new RegExp(v))\n };\n }\n }\n\n // Return a function that checks if a layer matches the filter\n return ({viewport, layer}: FilterContext) => {\n let visible = true;\n const viewFilters = regexpFilters[viewport.id] || ({} as Record<string, RegExp[]>);\n // Check if the layer matches the filters for this viewport\n if ('include' in viewFilters) {\n if (!viewFilters.include.some((regexp) => regexp.test(layer.id))) {\n visible = false;\n }\n }\n if ('exclude' in viewFilters) {\n if (viewFilters.exclude.some((regexp) => regexp.test(layer.id))) {\n visible = false;\n }\n }\n // if (!visible) {\n // console.log(`Viewport ${viewport.id}: filtering out layer ${layer.id}`);\n // }\n return visible;\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {OrthographicController, OrthographicView} from '@deck.gl/core';\n\nimport {fitBoundsOrthographic} from '../views/orthographic-utils';\nimport {mergeViewStates} from '../views/view-state-utils';\n\nimport type {OptionalViewState} from '../views/view-state-utils';\nimport type {OrthographicViewState} from '@deck.gl/core';\n\nexport const HEADER_VIEW_HEIGHT = 50;\nexport const LEGEND_VIEW_WIDTH = 150;\n\nexport const SYNCHRONIZED_VIEWS = [\n new OrthographicView({\n id: 'main',\n flipY: false,\n clear: true, // [1, 1, 1, 1],\n x: LEGEND_VIEW_WIDTH,\n width: `calc(100% - ${LEGEND_VIEW_WIDTH}px`,\n y: HEADER_VIEW_HEIGHT,\n height: `calc(100% - ${HEADER_VIEW_HEIGHT}px)`,\n controller: {\n type: OrthographicController,\n // @ts-expect-error Specific to OrthographicController\n zoomAxis: 'X',\n inertia: false,\n scrollZoom: true\n }\n }),\n new OrthographicView({\n id: 'header',\n flipY: false,\n clear: true, // [1, 1, 1, 1],\n x: LEGEND_VIEW_WIDTH,\n width: `calc(100% - ${LEGEND_VIEW_WIDTH}px)`,\n height: 50,\n controller: false\n }),\n new OrthographicView({\n id: 'legend',\n flipY: false,\n clear: true, // [1, 1, 1, 1],\n x: 0,\n width: LEGEND_VIEW_WIDTH,\n y: HEADER_VIEW_HEIGHT,\n height: `calc(100% - ${HEADER_VIEW_HEIGHT}px)`,\n controller: false\n })\n];\n\nexport const SYNCHRONIZED_VIEW_STATE_CONSTRAINTS = {\n header: {target: [undefined, 20], zoom: [undefined, 0]} satisfies OptionalViewState,\n legend: {target: [-30, undefined], zoom: [1, undefined]} satisfies OptionalViewState\n};\n\nexport function getSynchronizedViewStates(viewState: OrthographicViewState) {\n return {\n header: mergeViewStates(viewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.header),\n legend: mergeViewStates(viewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.legend),\n main: viewState\n };\n}\n\nexport function fitSynchronizedViewStatesToBounds(props: {\n viewState: {\n header: OrthographicViewState;\n legend: OrthographicViewState;\n main: OrthographicViewState;\n };\n width: number;\n height: number;\n bounds: [[xMin: number, yMin: number], [xMax: number, yMax: number]];\n /** App should set to true on first call */\n initialize: boolean;\n headerHeight?: number;\n legendWidth?: number;\n}): {\n header: OrthographicViewState;\n legend: OrthographicViewState;\n main: OrthographicViewState;\n} {\n const {viewState, initialize} = props;\n const {headerHeight = HEADER_VIEW_HEIGHT, legendWidth = LEGEND_VIEW_WIDTH} = props;\n\n // Handle cases where the window size is too small for the header and/or legend\n const width = Math.max(props.width - legendWidth, 1);\n const height = Math.max(props.height - headerHeight, 1);\n\n const {target, zoom} = fitBoundsOrthographic(width, height, props.bounds, 'per-axis');\n target[1] = target[1] - 1.5; // ADD SOME TIME SPACE\n\n let mainViewState: OrthographicViewState;\n // Avoid messing with y axis if we have already fitted the view state\n if (initialize) {\n mainViewState = {...viewState.main, target, zoom};\n } else {\n mainViewState = {\n ...viewState.main,\n target: [viewState.main.target[0], target[1]],\n zoom: [(viewState.main.zoom as [number, number])[0], zoom[1]]\n };\n }\n const newViewState = {\n ...viewState,\n main: mainViewState,\n header: mergeViewStates(mainViewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.header),\n legend: mergeViewStates(mainViewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.legend)\n };\n return newViewState;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {TimeDeltaLayer, type TimeDeltaLayerProps} from './layers/time-delta-layer';\n\nexport {fitBoundsOrthographic} from './views/orthographic-utils';\nexport {formatTimeMs, formatTimeRangeMs} from './utils/format-utils';\nexport {validateViewState, mergeViewStates, type OptionalViewState} from './views/view-state-utils';\nexport {makeLayerFilter} from './views/layer-filter';\n\nexport {\n HEADER_VIEW_HEIGHT,\n LEGEND_VIEW_WIDTH,\n SYNCHRONIZED_VIEWS,\n SYNCHRONIZED_VIEW_STATE_CONSTRAINTS,\n getSynchronizedViewStates,\n fitSynchronizedViewStatesToBounds\n} from './synchronized-views/synchronized-views';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, type LayerProps} from '@deck.gl/core';\nimport {LineLayer, TextLayer} from '@deck.gl/layers';\n\n// import {PathStyleExtension} from '@deck.gl/extensions';\n\nimport {formatTimeMs} from '../utils/format-utils';\n\nexport type TimeDeltaLayerProps = LayerProps & {\n unit: 'timestamp' | 'milliseconds';\n minTimeMs: number;\n maxTimeMs: number;\n /** Start time in milliseconds since epoch */\n startTimeMs: number;\n /** End time in milliseconds since epoch */\n endTimeMs: number;\n /** Optional: Y-coordinate for the axis line (default: 0) */\n y?: number;\n header: boolean;\n\n /** Optional: RGBA color for axis and ticks (default: [0, 0, 0, 255]) */\n color?: [number, number, number, number];\n /** Minimum Y-coordinate for grid lines. @todo (ib) Remve and calculate from viewport? */\n yMin?: number;\n /** Maximum Y-coordinate for grid lines. @todo (ib) Remve and calculate from viewport? */\n yMax?: number;\n};\n\nexport class TimeDeltaLayer extends CompositeLayer<TimeDeltaLayerProps> {\n static override layerName = 'TimeDeltaLayer';\n static override defaultProps: Required<Omit<TimeDeltaLayerProps, keyof LayerProps>> = {\n header: false,\n minTimeMs: 0,\n maxTimeMs: 100,\n startTimeMs: 0,\n endTimeMs: 100,\n y: 0,\n color: [0, 0, 0, 255],\n unit: 'timestamp',\n yMin: -1e6, // Should cover full viewport height in most cases\n yMax: 1e6 // Should cover full viewport height in most cases\n };\n\n override renderLayers() {\n const {startTimeMs, endTimeMs, color = [0, 0, 0, 255], yMin, yMax} = this.props;\n\n const timeDeltaPosition = [(startTimeMs + endTimeMs) / 2, 10];\n const timeDeltaMs = Math.abs(endTimeMs - startTimeMs);\n const timeDeltaLabel = formatTimeMs(timeDeltaMs, false);\n\n if (!this.props.header) {\n const timeLines = [\n {\n sourcePosition: [startTimeMs, yMin],\n targetPosition: [startTimeMs, yMax]\n },\n {\n sourcePosition: [endTimeMs, yMin],\n targetPosition: [endTimeMs, yMax]\n }\n ];\n return [\n // Interval end lines\n new LineLayer({\n id: 'time-delta-side-bars',\n data: timeLines,\n getSourcePosition: d => d.sourcePosition,\n getTargetPosition: d => d.targetPosition,\n getColor: color,\n getWidth: 4,\n widthUnits: 'pixels'\n })\n ];\n }\n\n // // Tick marks\n // new LineLayer({\n // id: 'time-delta-marks',\n // data: tickLines,\n // getSourcePosition: (d) => d.sourcePosition,\n // getTargetPosition: (d) => d.targetPosition,\n // getColor: color,\n // getWidth: 1,\n // }),\n\n // TODO - triggers broader root-level file updates\n // new PathLayer({\n // id: 'dotted-path',\n // data: route,\n // getPath: d => d.path,\n // getWidth: 4,\n // getColor: [255, 0, 0],\n\n // // Enable rounded caps on each dash\n // rounded: true,\n\n // // Add the dash extension\n // extensions: [\n // new PathStyleExtension({\n // dash: true,\n // // highPrecisionDash: true, // uncomment for finer control at low zoom\n // capRounded: true // draw dash ends as semicircles\n // })\n // ],\n\n // // [dashLength, gapLength] in pixels\n // // small dash + equal or larger gap = dotted effect\n // getDashArray: () => [2, 6]\n // })\n // ]\n const HEADER_Y = 12;\n const timeLines = [\n {\n sourcePosition: [startTimeMs, -100],\n targetPosition: [startTimeMs, HEADER_Y]\n },\n {\n sourcePosition: [endTimeMs, -100],\n targetPosition: [endTimeMs, HEADER_Y]\n }\n ];\n\n return [\n // Interval end lines\n new LineLayer({\n id: 'header-time-delta-side-bars',\n data: timeLines,\n getSourcePosition: d => d.sourcePosition,\n getTargetPosition: d => d.targetPosition,\n getColor: color,\n getWidth: 4,\n widthUnits: 'pixels'\n }),\n\n // Interval center\n new LineLayer({\n id: 'header-time-delta-dotted-line',\n data: [\n {\n sourcePosition: [startTimeMs, HEADER_Y - 7],\n targetPosition: [endTimeMs, HEADER_Y - 7]\n }\n ],\n getSourcePosition: d => d.sourcePosition,\n getTargetPosition: d => d.targetPosition,\n getColor: color,\n getWidth: 1,\n widthUnits: 'pixels'\n }),\n\n // Label\n new TextLayer({\n id: 'header-time-delta-label',\n data: [{position: timeDeltaPosition, text: timeDeltaLabel}],\n getPosition: d => d.position,\n getText: d => d.text,\n getSize: 12,\n getColor: color,\n getTextAnchor: 'middle',\n getAlignmentBaseline: 'top',\n background: true,\n getBackgroundColor: [255, 255, 255, 255], // Solid green background\n backgroundPadding: [4, 2] // Horizontal and vertical padding\n })\n ];\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/**\n * Convert a time in microseconds to a human-readable string\n * @param us Time in microseconds\n */\nexport function formatTimeMs(timeMs: number, space: boolean = true): string {\n const sep = space ? ' ' : '';\n const us = timeMs * 1000;\n if (us === 0) {\n return '0s';\n }\n if (Math.abs(us) < 1000) {\n return `${floatToStr(us)}${sep}\u00B5s`;\n }\n const ms = us / 1000;\n if (Math.abs(ms) < 1000) {\n return `${floatToStr(ms)}${sep} ms`;\n }\n const s = ms / 1000;\n if (Math.abs(s) < 60) {\n return `${floatToStr(s)}${sep} s`;\n }\n const m = s / 60;\n if (Math.abs(m) < 60) {\n return `${floatToStr(m)}${sep} min`;\n }\n const h = m / 60;\n if (Math.abs(h) < 24) {\n return `${floatToStr(h)}${sep} hrs`;\n }\n const d = h / 24;\n return `${floatToStr(d)}${sep} days`;\n}\n\nexport function formatTimeRangeMs(startMs: number, endMs: number): string {\n return `${formatTimeMs(startMs)} - ${formatTimeMs(endMs)}`;\n}\n\n/**\n * Convert a float to a string\n */\nfunction floatToStr(f: number, roundDigits: number = 5): string {\n if (Number.isInteger(f)) {\n return f.toString();\n }\n\n for (let i = 1; i < roundDigits - 1; i++) {\n const rounded = parseFloat(f.toPrecision(i));\n if (rounded === f) {\n return rounded.toPrecision(i);\n }\n }\n\n return f.toPrecision(roundDigits);\n}\n\n// export function formatTimesUs(ticks: number[]): string {\n// // Try from 0 up to a reasonable max (e.g. 20)\n// for (let d = 0; d <= 20; d++) {\n// const seen = new Set<string>();\n// let allDistinct = true;\n// for (const t of ticks) {\n// // Format each tick with d decimals\n// const str = t.toFixed(d);\n// if (seen.has(str)) {\n// allDistinct = false;\n// break;\n// }\n// seen.add(str);\n// }\n// if (allDistinct) {\n// return d;\n// }\n// }\n// // Fallback if somehow not distinct even at 20 decimals\n// return 20;\n// }\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\ntype Bounds = [[number, number], [number, number]];\n\nexport function fitBoundsOrthographic(\n width: number,\n height: number,\n bounds: Readonly<Bounds>,\n zoomMode: 'single'\n): {target: [number, number]; zoom: number};\n\nexport function fitBoundsOrthographic(\n width: number,\n height: number,\n bounds: Readonly<Bounds>,\n zoomMode: 'per-axis'\n): {target: [number, number]; zoom: [number, number]};\n\n/**\n * Compute center & zoom for an OrthographicViewport so that `bounds` fills the viewport.\n * @param width viewport width in px\n * @param height viewport height in px\n * @param bounds [[minX,minY],[maxX,maxY]] in the same world units you\u2019re rendering\n * @returns { target: [number, number], zoom: number }\n * target: center of the viewport in world units\n * zoom: deck.gl orthographic zoom level (log2(scale))\n * (deck.gl orthographic zoom is the log2 of the scale factor)\n */\nexport function fitBoundsOrthographic(\n width: number,\n height: number,\n bounds: Readonly<Bounds>,\n zoomMode: 'single' | 'per-axis' = 'per-axis'\n): {target: [number, number]; zoom: number | [number, number]} {\n const [[minX, minY], [maxX, maxY]] = bounds;\n\n // center of the box\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n\n // size of the box\n const boxW = maxX - minX;\n const boxH = maxY - minY;\n\n // scale (world units \u2192 screen pixels)\n const scaleX = width / boxW;\n const scaleY = height / boxH;\n\n // pick the smaller scale so the whole box fits\n const scale = Math.min(scaleX, scaleY);\n\n // deck.gl orthographic zoom is log2(scale)\n const zoom = Math.log2(scale);\n\n // 3) axis\u2010specific zooms (deck.gl\u2019s orthographic zoom = log2(scale))\n const zoomX = Math.log2(scaleX);\n const zoomY = Math.log2(scaleY);\n\n if (Number.isNaN(zoom) || Number.isNaN(zoomX) || Number.isNaN(zoom)) {\n // eslint-disable-next-line no-console\n console.warn('Invalid zoom values:', {zoom, zoomX, zoomY});\n }\n\n return {\n target: [centerX, centerY],\n zoom: zoomMode === 'single' ? zoom : [zoomX, zoomY]\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type OrthographicViewState} from '@deck.gl/core';\n\nexport type OptionalizedViewState<T> = {\n [K in keyof T]: T[K] extends [number, number] | undefined\n ? [number | undefined, number | undefined] | undefined\n : T[K] extends [number, number, number] | undefined\n ? [number | undefined, number | undefined, number | undefined] | undefined\n : T[K] extends [number, number] | number | undefined\n ? [number | undefined, number | undefined] | undefined\n : T[K] extends [number, number, number] | [number, number] | undefined\n ?\n | [number | undefined, number | undefined, number | undefined]\n | [number | undefined, number | undefined]\n | undefined\n : T[K];\n};\n\nexport type OptionalViewState = OptionalizedViewState<OrthographicViewState>;\n\nexport function mergeViewStates(\n viewState1: OrthographicViewState,\n viewState2: OptionalViewState\n): OrthographicViewState {\n const target1 = viewState1.target ?? [0, 0];\n const zoom1 = viewState1.zoom ?? [1, 1];\n const mergedViewState = {\n ...viewState1,\n ...viewState2,\n target: [viewState2.target?.[0] ?? target1[0], viewState2.target?.[1] ?? target1[1]],\n zoom: [\n // ts-expect-error view state typing is awfully optional\n viewState2.zoom?.[0] ?? zoom1[0],\n // ts-expect-error view state typing is awfully optional\n viewState2.zoom?.[1] ?? zoom1[1]\n ]\n };\n // @ts-expect-error view state typing is awfully optional\n validateViewState(mergedViewState);\n // @ts-expect-error view state typing is awfully optional\n return mergedViewState;\n}\n\n// eslint-disable-next-line complexity\nexport function validateViewState(\n viewState: OrthographicViewState\n): viewState is OrthographicViewState {\n const isTargetValid =\n Array.isArray(viewState.target) &&\n viewState.target[0] !== undefined &&\n !Number.isNaN(viewState.target[0]) &&\n viewState.target[1] !== undefined &&\n !Number.isNaN(viewState.target[1]);\n const isZoomValid =\n Array.isArray(viewState.zoom) &&\n viewState.zoom[0] !== undefined &&\n !Number.isNaN(viewState.zoom[0]) &&\n viewState.zoom[1] !== undefined &&\n !Number.isNaN(viewState.zoom[1]);\n\n if (!isTargetValid || !isZoomValid) {\n // eslint-disable-next-line no-console\n console.warn('Invalid viewState:', viewState);\n }\n\n return isTargetValid && isZoomValid;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {type FilterContext} from '@deck.gl/core';\n\nexport type DeclarativeLayerFilter = Record<\n string,\n | {\n include: string[];\n }\n | {\n exclude: string[];\n }\n>;\n\ntype RegexpLayerFilter = Record<\n string,\n | {\n include: RegExp[];\n }\n | {\n exclude: RegExp[];\n }\n>;\n\nexport function makeLayerFilter(\n filters: DeclarativeLayerFilter\n): (context: FilterContext) => boolean {\n // Pre-compile the regexps for performance\n const regexpFilters: RegexpLayerFilter = {};\n for (const [key, value] of Object.entries(filters)) {\n if ('include' in value) {\n regexpFilters[key] = {\n include: value.include.map(v => new RegExp(v))\n };\n } else {\n regexpFilters[key] = {\n exclude: value.exclude.map(v => new RegExp(v))\n };\n }\n }\n\n // Return a function that checks if a layer matches the filter\n return ({viewport, layer}: FilterContext) => {\n let visible = true;\n const viewFilters = regexpFilters[viewport.id] || ({} as Record<string, RegExp[]>);\n // Check if the layer matches the filters for this viewport\n if ('include' in viewFilters) {\n if (!viewFilters.include.some(regexp => regexp.test(layer.id))) {\n visible = false;\n }\n }\n if ('exclude' in viewFilters) {\n if (viewFilters.exclude.some(regexp => regexp.test(layer.id))) {\n visible = false;\n }\n }\n // if (!visible) {\n // console.log(`Viewport ${viewport.id}: filtering out layer ${layer.id}`);\n // }\n return visible;\n };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {OrthographicController, OrthographicView} from '@deck.gl/core';\n\nimport {fitBoundsOrthographic} from '../views/orthographic-utils';\nimport {mergeViewStates} from '../views/view-state-utils';\n\nimport type {OptionalViewState} from '../views/view-state-utils';\nimport type {OrthographicViewState} from '@deck.gl/core';\n\nexport const HEADER_VIEW_HEIGHT = 50;\nexport const LEGEND_VIEW_WIDTH = 150;\n\nexport const SYNCHRONIZED_VIEWS = [\n new OrthographicView({\n id: 'main',\n flipY: false,\n clear: true, // [1, 1, 1, 1],\n x: LEGEND_VIEW_WIDTH,\n width: `calc(100% - ${LEGEND_VIEW_WIDTH}px`,\n y: HEADER_VIEW_HEIGHT,\n height: `calc(100% - ${HEADER_VIEW_HEIGHT}px)`,\n controller: {\n type: OrthographicController,\n // @ts-expect-error Specific to OrthographicController\n zoomAxis: 'X',\n inertia: false,\n scrollZoom: true\n }\n }),\n new OrthographicView({\n id: 'header',\n flipY: false,\n clear: true, // [1, 1, 1, 1],\n x: LEGEND_VIEW_WIDTH,\n width: `calc(100% - ${LEGEND_VIEW_WIDTH}px)`,\n height: 50,\n controller: false\n }),\n new OrthographicView({\n id: 'legend',\n flipY: false,\n clear: true, // [1, 1, 1, 1],\n x: 0,\n width: LEGEND_VIEW_WIDTH,\n y: HEADER_VIEW_HEIGHT,\n height: `calc(100% - ${HEADER_VIEW_HEIGHT}px)`,\n controller: false\n })\n];\n\nexport const SYNCHRONIZED_VIEW_STATE_CONSTRAINTS = {\n header: {target: [undefined, 20], zoom: [undefined, 0]} satisfies OptionalViewState,\n legend: {target: [-30, undefined], zoom: [1, undefined]} satisfies OptionalViewState\n};\n\nexport function getSynchronizedViewStates(viewState: OrthographicViewState) {\n return {\n header: mergeViewStates(viewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.header),\n legend: mergeViewStates(viewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.legend),\n main: viewState\n };\n}\n\nexport function fitSynchronizedViewStatesToBounds(props: {\n viewState: {\n header: OrthographicViewState;\n legend: OrthographicViewState;\n main: OrthographicViewState;\n };\n width: number;\n height: number;\n bounds: [[xMin: number, yMin: number], [xMax: number, yMax: number]];\n /** App should set to true on first call */\n initialize: boolean;\n headerHeight?: number;\n legendWidth?: number;\n}): {\n header: OrthographicViewState;\n legend: OrthographicViewState;\n main: OrthographicViewState;\n} {\n const {viewState, initialize} = props;\n const {headerHeight = HEADER_VIEW_HEIGHT, legendWidth = LEGEND_VIEW_WIDTH} = props;\n\n // Handle cases where the window size is too small for the header and/or legend\n const width = Math.max(props.width - legendWidth, 1);\n const height = Math.max(props.height - headerHeight, 1);\n\n const {target, zoom} = fitBoundsOrthographic(width, height, props.bounds, 'per-axis');\n target[1] = target[1] - 1.5; // ADD SOME TIME SPACE\n\n let mainViewState: OrthographicViewState;\n // Avoid messing with y axis if we have already fitted the view state\n if (initialize) {\n mainViewState = {...viewState.main, target, zoom};\n } else {\n mainViewState = {\n ...viewState.main,\n target: [viewState.main.target[0], target[1]],\n zoom: [(viewState.main.zoom as [number, number])[0], zoom[1]]\n };\n }\n const newViewState = {\n ...viewState,\n main: mainViewState,\n header: mergeViewStates(mainViewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.header),\n legend: mergeViewStates(mainViewState, SYNCHRONIZED_VIEW_STATE_CONSTRAINTS.legend)\n };\n return newViewState;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["timeLines", "import_core"]
7
7
  }
@@ -40,8 +40,8 @@ export class TimeDeltaLayer extends CompositeLayer {
40
40
  new LineLayer({
41
41
  id: 'time-delta-side-bars',
42
42
  data: timeLines,
43
- getSourcePosition: (d) => d.sourcePosition,
44
- getTargetPosition: (d) => d.targetPosition,
43
+ getSourcePosition: d => d.sourcePosition,
44
+ getTargetPosition: d => d.targetPosition,
45
45
  getColor: color,
46
46
  getWidth: 4,
47
47
  widthUnits: 'pixels'
@@ -95,8 +95,8 @@ export class TimeDeltaLayer extends CompositeLayer {
95
95
  new LineLayer({
96
96
  id: 'header-time-delta-side-bars',
97
97
  data: timeLines,
98
- getSourcePosition: (d) => d.sourcePosition,
99
- getTargetPosition: (d) => d.targetPosition,
98
+ getSourcePosition: d => d.sourcePosition,
99
+ getTargetPosition: d => d.targetPosition,
100
100
  getColor: color,
101
101
  getWidth: 4,
102
102
  widthUnits: 'pixels'
@@ -110,8 +110,8 @@ export class TimeDeltaLayer extends CompositeLayer {
110
110
  targetPosition: [endTimeMs, HEADER_Y - 7]
111
111
  }
112
112
  ],
113
- getSourcePosition: (d) => d.sourcePosition,
114
- getTargetPosition: (d) => d.targetPosition,
113
+ getSourcePosition: d => d.sourcePosition,
114
+ getTargetPosition: d => d.targetPosition,
115
115
  getColor: color,
116
116
  getWidth: 1,
117
117
  widthUnits: 'pixels'
@@ -120,8 +120,8 @@ export class TimeDeltaLayer extends CompositeLayer {
120
120
  new TextLayer({
121
121
  id: 'header-time-delta-label',
122
122
  data: [{ position: timeDeltaPosition, text: timeDeltaLabel }],
123
- getPosition: (d) => d.position,
124
- getText: (d) => d.text,
123
+ getPosition: d => d.position,
124
+ getText: d => d.text,
125
125
  getSize: 12,
126
126
  getColor: color,
127
127
  getTextAnchor: 'middle',
@@ -1 +1 @@
1
- {"version":3,"file":"time-delta-layer.js","sourceRoot":"","sources":["../../src/layers/time-delta-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time-delta-layer.js","sourceRoot":"","sources":["../../src/layers/time-delta-layer.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,12 @@ export function makeLayerFilter(filters) {
7
7
  for (const [key, value] of Object.entries(filters)) {
8
8
  if ('include' in value) {
9
9
  regexpFilters[key] = {
10
- include: value.include.map((v) => new RegExp(v))
10
+ include: value.include.map(v => new RegExp(v))
11
11
  };
12
12
  }
13
13
  else {
14
14
  regexpFilters[key] = {
15
- exclude: value.exclude.map((v) => new RegExp(v))
15
+ exclude: value.exclude.map(v => new RegExp(v))
16
16
  };
17
17
  }
18
18
  }
@@ -22,12 +22,12 @@ export function makeLayerFilter(filters) {
22
22
  const viewFilters = regexpFilters[viewport.id] || {};
23
23
  // Check if the layer matches the filters for this viewport
24
24
  if ('include' in viewFilters) {
25
- if (!viewFilters.include.some((regexp) => regexp.test(layer.id))) {
25
+ if (!viewFilters.include.some(regexp => regexp.test(layer.id))) {
26
26
  visible = false;
27
27
  }
28
28
  }
29
29
  if ('exclude' in viewFilters) {
30
- if (viewFilters.exclude.some((regexp) => regexp.test(layer.id))) {
30
+ if (viewFilters.exclude.some(regexp => regexp.test(layer.id))) {
31
31
  visible = false;
32
32
  }
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"layer-filter.js","sourceRoot":"","sources":["../../src/views/layer-filter.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAwBpC,MAAM,UAAU,eAAe,CAC7B,OAA+B;IAE/B,0CAA0C;IAC1C,MAAM,aAAa,GAAsB,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,aAAa,CAAC,GAAG,CAAC,GAAG;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;aACjD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,GAAG,CAAC,GAAG;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;aACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAgB,EAAE,EAAE;QAC1C,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAK,EAA+B,CAAC;QACnF,2DAA2D;QAC3D,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjE,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAChE,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,kBAAkB;QAClB,6EAA6E;QAC7E,IAAI;QACJ,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"layer-filter.js","sourceRoot":"","sources":["../../src/views/layer-filter.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAwBpC,MAAM,UAAU,eAAe,CAC7B,OAA+B;IAE/B,0CAA0C;IAC1C,MAAM,aAAa,GAAsB,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,aAAa,CAAC,GAAG,CAAC,GAAG;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,GAAG,CAAC,GAAG;gBACnB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAgB,EAAE,EAAE;QAC1C,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAK,EAA+B,CAAC;QACnF,2DAA2D;QAC3D,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC/D,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9D,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QACD,kBAAkB;QAClB,6EAA6E;QAC7E,IAAI;QACJ,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deck.gl-community/infovis-layers",
3
- "version": "9.3.2",
3
+ "version": "9.3.5",
4
4
  "description": "Infovis layers (non-geospatial) for deck.gl",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -42,9 +42,12 @@
42
42
  "@luma.gl/engine": "~9.3.2"
43
43
  },
44
44
  "devDependencies": {
45
+ "@deck.gl/core": "~9.3.0",
45
46
  "@deck.gl/test-utils": "~9.3.0",
47
+ "@luma.gl/core": "~9.3.2",
48
+ "@luma.gl/engine": "~9.3.2",
46
49
  "@luma.gl/webgpu": "~9.3.2",
47
- "@probe.gl/test-utils": "^4.0.4"
50
+ "@probe.gl/test-utils": "^4.1.1"
48
51
  },
49
- "gitHead": "a3b0839c215a925e2983b6c2df924c935fede439"
52
+ "gitHead": "3857a818efeabf0ea12ba9a71ea3d124db30fec8"
50
53
  }
@@ -67,8 +67,8 @@ export class TimeDeltaLayer extends CompositeLayer<TimeDeltaLayerProps> {
67
67
  new LineLayer({
68
68
  id: 'time-delta-side-bars',
69
69
  data: timeLines,
70
- getSourcePosition: (d) => d.sourcePosition,
71
- getTargetPosition: (d) => d.targetPosition,
70
+ getSourcePosition: d => d.sourcePosition,
71
+ getTargetPosition: d => d.targetPosition,
72
72
  getColor: color,
73
73
  getWidth: 4,
74
74
  widthUnits: 'pixels'
@@ -128,8 +128,8 @@ export class TimeDeltaLayer extends CompositeLayer<TimeDeltaLayerProps> {
128
128
  new LineLayer({
129
129
  id: 'header-time-delta-side-bars',
130
130
  data: timeLines,
131
- getSourcePosition: (d) => d.sourcePosition,
132
- getTargetPosition: (d) => d.targetPosition,
131
+ getSourcePosition: d => d.sourcePosition,
132
+ getTargetPosition: d => d.targetPosition,
133
133
  getColor: color,
134
134
  getWidth: 4,
135
135
  widthUnits: 'pixels'
@@ -144,8 +144,8 @@ export class TimeDeltaLayer extends CompositeLayer<TimeDeltaLayerProps> {
144
144
  targetPosition: [endTimeMs, HEADER_Y - 7]
145
145
  }
146
146
  ],
147
- getSourcePosition: (d) => d.sourcePosition,
148
- getTargetPosition: (d) => d.targetPosition,
147
+ getSourcePosition: d => d.sourcePosition,
148
+ getTargetPosition: d => d.targetPosition,
149
149
  getColor: color,
150
150
  getWidth: 1,
151
151
  widthUnits: 'pixels'
@@ -155,8 +155,8 @@ export class TimeDeltaLayer extends CompositeLayer<TimeDeltaLayerProps> {
155
155
  new TextLayer({
156
156
  id: 'header-time-delta-label',
157
157
  data: [{position: timeDeltaPosition, text: timeDeltaLabel}],
158
- getPosition: (d) => d.position,
159
- getText: (d) => d.text,
158
+ getPosition: d => d.position,
159
+ getText: d => d.text,
160
160
  getSize: 12,
161
161
  getColor: color,
162
162
  getTextAnchor: 'middle',
@@ -32,11 +32,11 @@ export function makeLayerFilter(
32
32
  for (const [key, value] of Object.entries(filters)) {
33
33
  if ('include' in value) {
34
34
  regexpFilters[key] = {
35
- include: value.include.map((v) => new RegExp(v))
35
+ include: value.include.map(v => new RegExp(v))
36
36
  };
37
37
  } else {
38
38
  regexpFilters[key] = {
39
- exclude: value.exclude.map((v) => new RegExp(v))
39
+ exclude: value.exclude.map(v => new RegExp(v))
40
40
  };
41
41
  }
42
42
  }
@@ -47,12 +47,12 @@ export function makeLayerFilter(
47
47
  const viewFilters = regexpFilters[viewport.id] || ({} as Record<string, RegExp[]>);
48
48
  // Check if the layer matches the filters for this viewport
49
49
  if ('include' in viewFilters) {
50
- if (!viewFilters.include.some((regexp) => regexp.test(layer.id))) {
50
+ if (!viewFilters.include.some(regexp => regexp.test(layer.id))) {
51
51
  visible = false;
52
52
  }
53
53
  }
54
54
  if ('exclude' in viewFilters) {
55
- if (viewFilters.exclude.some((regexp) => regexp.test(layer.id))) {
55
+ if (viewFilters.exclude.some(regexp => regexp.test(layer.id))) {
56
56
  visible = false;
57
57
  }
58
58
  }