@deck.gl-community/infovis-layers 9.2.0-beta.6 → 9.2.0-beta.8

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.
Files changed (48) hide show
  1. package/dist/index.cjs +11 -471
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/index.d.ts +0 -6
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +0 -4
  6. package/dist/index.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/index.ts +0 -6
  9. package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.d.ts +0 -23
  10. package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.d.ts.map +0 -1
  11. package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.js +0 -33
  12. package/dist/layers/horizon-graph-layer/horizon-graph-layer-uniforms.js.map +0 -1
  13. package/dist/layers/horizon-graph-layer/horizon-graph-layer.d.ts +0 -38
  14. package/dist/layers/horizon-graph-layer/horizon-graph-layer.d.ts.map +0 -1
  15. package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.d.ts +0 -3
  16. package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.d.ts.map +0 -1
  17. package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.js +0 -53
  18. package/dist/layers/horizon-graph-layer/horizon-graph-layer.fs.js.map +0 -1
  19. package/dist/layers/horizon-graph-layer/horizon-graph-layer.js +0 -138
  20. package/dist/layers/horizon-graph-layer/horizon-graph-layer.js.map +0 -1
  21. package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.d.ts +0 -3
  22. package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.d.ts.map +0 -1
  23. package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.js +0 -24
  24. package/dist/layers/horizon-graph-layer/horizon-graph-layer.vs.js.map +0 -1
  25. package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.d.ts +0 -23
  26. package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.d.ts.map +0 -1
  27. package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.js +0 -100
  28. package/dist/layers/horizon-graph-layer/multi-horizon-graph-layer.js.map +0 -1
  29. package/dist/layers/time-axis-layer.d.ts +0 -56
  30. package/dist/layers/time-axis-layer.d.ts.map +0 -1
  31. package/dist/layers/time-axis-layer.js +0 -78
  32. package/dist/layers/time-axis-layer.js.map +0 -1
  33. package/dist/layers/vertical-grid-layer.d.ts +0 -41
  34. package/dist/layers/vertical-grid-layer.d.ts.map +0 -1
  35. package/dist/layers/vertical-grid-layer.js +0 -43
  36. package/dist/layers/vertical-grid-layer.js.map +0 -1
  37. package/dist/utils/tick-utils.d.ts +0 -10
  38. package/dist/utils/tick-utils.d.ts.map +0 -1
  39. package/dist/utils/tick-utils.js +0 -32
  40. package/dist/utils/tick-utils.js.map +0 -1
  41. package/src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts +0 -47
  42. package/src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts +0 -53
  43. package/src/layers/horizon-graph-layer/horizon-graph-layer.ts +0 -202
  44. package/src/layers/horizon-graph-layer/horizon-graph-layer.vs.ts +0 -24
  45. package/src/layers/horizon-graph-layer/multi-horizon-graph-layer.ts +0 -164
  46. package/src/layers/time-axis-layer.ts +0 -102
  47. package/src/layers/vertical-grid-layer.ts +0 -69
  48. package/src/utils/tick-utils.ts +0 -41
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/layers/time-axis-layer.ts", "../src/utils/format-utils.ts", "../src/utils/tick-utils.ts", "../src/layers/vertical-grid-layer.ts", "../src/layers/time-delta-layer.ts", "../src/layers/horizon-graph-layer/horizon-graph-layer.ts", "../src/layers/horizon-graph-layer/horizon-graph-layer.vs.ts", "../src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts", "../src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts", "../src/layers/horizon-graph-layer/multi-horizon-graph-layer.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 {TimeAxisLayer, type TimeAxisLayerProps} from './layers/time-axis-layer';\nexport {VerticalGridLayer, type VerticalGridLayerProps} from './layers/vertical-grid-layer';\nexport {TimeDeltaLayer, type TimeDeltaLayerProps} from './layers/time-delta-layer';\nexport type {HorizonGraphLayerProps} from './layers/horizon-graph-layer/horizon-graph-layer';\nexport {HorizonGraphLayer} from './layers/horizon-graph-layer/horizon-graph-layer';\nexport type {MultiHorizonGraphLayerProps} from './layers/horizon-graph-layer/multi-horizon-graph-layer';\nexport {MultiHorizonGraphLayer} from './layers/horizon-graph-layer/multi-horizon-graph-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 CompositeLayerProps, type UpdateParameters} from '@deck.gl/core';\nimport {LineLayer, TextLayer} from '@deck.gl/layers';\n\nimport {formatTimeMs} from '../utils/format-utils';\nimport {getPrettyTicks, getZoomedRange} from '../utils/tick-utils';\n\nexport type TimeAxisLayerProps = CompositeLayerProps & {\n unit: 'timestamp' | 'milliseconds';\n /** Start time in milliseconds since epoch */\n startTimeMs: number;\n /** End time in milliseconds since epoch */\n endTimeMs: number;\n /** Optional: Number of tick marks (default: 5) */\n tickCount?: number;\n /** Optional: Y-coordinate for the axis line (default: 0) */\n y?: number;\n /** Optional: RGBA color for axis and ticks (default: [0, 0, 0, 255]) */\n color?: [number, number, number, number];\n /** Optional: Bounds for the axis line (default: viewport bounds) */\n bounds?: [number, number, number, number];\n};\n\nexport class TimeAxisLayer extends CompositeLayer<TimeAxisLayerProps> {\n static override layerName = 'TimeAxisLayer';\n static override defaultProps: Required<Omit<TimeAxisLayerProps, keyof CompositeLayerProps>> = {\n startTimeMs: 0,\n endTimeMs: 100,\n tickCount: 5,\n y: 0,\n color: [0, 0, 0, 255],\n unit: 'timestamp',\n bounds: undefined!\n };\n\n // Called whenever props/data/viewports change\n override shouldUpdateState(params: UpdateParameters<TimeAxisLayer>): boolean {\n return params.changeFlags.viewportChanged || super.shouldUpdateState(params);\n }\n\n override renderLayers() {\n const {startTimeMs, endTimeMs, tickCount = 10, y = 0, color = [0, 0, 0, 255]} = this.props;\n\n let bounds: [number, number, number, number];\n try {\n bounds = this.context.viewport.getBounds();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log('Error getting bounds from viewport:', error);\n throw error;\n }\n const [startTimeZoomed, endTimeZoomed] = getZoomedRange(startTimeMs, endTimeMs, bounds);\n // Generate tick positions and labels\n const ticks = getPrettyTicks(startTimeZoomed, endTimeZoomed, tickCount);\n\n const tickLines = ticks.map((x) => ({\n sourcePosition: [x, y - 5],\n targetPosition: [x, y + 5]\n }));\n\n const tickLabels = ticks.map((x) => ({\n position: [x, y - 10],\n text:\n this.props.unit === 'timestamp' ? new Date(x).toLocaleTimeString() : formatTimeMs(x, false)\n }));\n\n return [\n // Axis line\n new LineLayer({\n id: 'axis-line',\n data: [{sourcePosition: [startTimeZoomed, y], targetPosition: [endTimeZoomed, y]}],\n getSourcePosition: (d) => d.sourcePosition,\n getTargetPosition: (d) => d.targetPosition,\n getColor: color,\n getWidth: 2\n }),\n // Tick marks\n new LineLayer({\n id: 'tick-marks',\n data: tickLines,\n getSourcePosition: (d) => d.sourcePosition,\n getTargetPosition: (d) => d.targetPosition,\n getColor: color,\n getWidth: 1\n }),\n // Tick labels\n new TextLayer({\n id: 'tick-labels',\n data: tickLabels,\n getPosition: (d) => d.position,\n getText: (d) => d.text,\n getSize: 12,\n getColor: color,\n getTextAnchor: 'middle',\n getAlignmentBaseline: 'top'\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\nexport function getZoomedRange(\n startTime: number,\n endTime: number,\n bounds: [number, number, number, number]\n) {\n const [startTimeZoomed, , endTimeZoomed] = bounds;\n // console.log(`startTimeZoomed: ${startTimeZoomed}, endTimeZoomed: ${endTimeZoomed}, tickInterval: ${tickInterval} tickCountZoomed: ${tickCountZoomed}`);\n return [Math.max(startTime, startTimeZoomed), Math.min(endTime, endTimeZoomed)];\n}\n\n/**\n * Get nicely rounded tick close to the natural spacing\n * @param startTime\n * @param endTime\n * @param tickCount\n * @returns\n */\nexport function getPrettyTicks(startTime: number, endTime: number, tickCount: number = 5) {\n const range = endTime - startTime;\n const roughStep = range / (tickCount - 1);\n const exponent = Math.floor(Math.log10(roughStep));\n const base = Math.pow(10, exponent);\n const multiples = [1, 2, 5, 10];\n\n // Find the smallest multiple that is greater than or equal to roughStep\n const niceStep = multiples.find((m) => base * m >= roughStep) * base;\n\n const niceStart = Math.ceil(startTime / niceStep) * niceStep;\n const niceEnd = Math.floor(endTime / niceStep) * niceStep;\n\n const ticks = [];\n for (let t = niceStart; t <= niceEnd; t += niceStep) {\n ticks.push(t);\n }\n\n return ticks;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer, type CompositeLayerProps, type UpdateParameters} from '@deck.gl/core';\nimport {LineLayer} from '@deck.gl/layers';\n\nimport {getPrettyTicks, getZoomedRange} from '../utils/tick-utils';\n\nexport type VerticalGridLayerProps = CompositeLayerProps & {\n /** Start time in milliseconds since epoch */\n xMin: number;\n /** End time in milliseconds since epoch */\n xMax: number;\n /** Optional: Number of tick marks (default: 5) */\n tickCount?: number;\n /** Minimum Y-coordinate for grid lines */\n yMin?: number;\n /** Maximum Y-coordinate for grid lines */\n yMax?: number;\n /** Optional: Width of the grid lines (default: 1) */\n width?: number;\n /** Optional: RGBA color for grid lines (default: [200, 200, 200, 255]) */\n color?: [number, number, number, number];\n};\n\nexport class VerticalGridLayer extends CompositeLayer<VerticalGridLayerProps> {\n static override layerName = 'VerticalGridLayer';\n static override defaultProps = {\n yMin: -1e6,\n yMax: 1e6,\n tickCount: 5,\n width: 1,\n color: [200, 200, 200, 255]\n };\n\n override shouldUpdateState(params: UpdateParameters<VerticalGridLayer>): boolean {\n return params.changeFlags.viewportChanged || super.shouldUpdateState(params);\n }\n\n override renderLayers() {\n const {xMin, xMax, tickCount = 5, yMin, yMax, color} = this.props;\n\n // Access the current viewport\n const viewport = this.context.viewport;\n const bounds = viewport.getBounds(); // Returns [minX, minY, maxX, maxY]\n\n // Calculate the visible time range based on the viewport bounds\n const [startTimeZoomed, endTimeZoomed] = getZoomedRange(xMin, xMax, bounds);\n\n // Generate tick positions\n const tickPositions = getPrettyTicks(startTimeZoomed, endTimeZoomed, tickCount);\n\n // Create vertical grid lines at each tick position\n const gridLines = tickPositions.map((x) => ({\n sourcePosition: [x, yMin],\n targetPosition: [x, yMax]\n }));\n\n return new LineLayer({\n id: `${this.props.id}-lines`,\n data: gridLines,\n getSourcePosition: (d) => d.sourcePosition,\n getTargetPosition: (d) => d.targetPosition,\n getColor: color,\n getWidth: 1\n });\n }\n}\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 an update of monorepo root files\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\nimport type {DefaultProps, LayerProps, Color, LayerContext, UpdateParameters} from '@deck.gl/core';\nimport {Layer, project32} from '@deck.gl/core';\nimport {Model, Geometry} from '@luma.gl/engine';\nimport vs from './horizon-graph-layer.vs';\nimport fs from './horizon-graph-layer.fs';\nimport {Texture} from '@luma.gl/core';\nimport {horizonLayerUniforms} from './horizon-graph-layer-uniforms';\n\nexport type _HorizonGraphLayerProps = {\n data: number[] | Float32Array;\n\n yAxisScale?: number;\n\n bands?: number;\n\n positiveColor?: Color;\n negativeColor?: Color;\n\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n};\n\nexport type HorizonGraphLayerProps = _HorizonGraphLayerProps & LayerProps;\n\nconst defaultProps: DefaultProps<HorizonGraphLayerProps> = {\n yAxisScale: {type: 'number', value: 1000},\n\n bands: {type: 'number', value: 2},\n\n positiveColor: {type: 'color', value: [0, 128, 0]},\n negativeColor: {type: 'color', value: [0, 0, 255]},\n\n x: {type: 'number', value: 0},\n y: {type: 'number', value: 0},\n width: {type: 'number', value: 800},\n height: {type: 'number', value: 300}\n};\n\nexport class HorizonGraphLayer<ExtraProps extends {} = {}> extends Layer<\n ExtraProps & Required<_HorizonGraphLayerProps>\n> {\n static layerName = 'HorizonGraphLayer';\n static defaultProps = defaultProps;\n\n state: {\n model?: Model;\n dataTexture?: Texture;\n dataTextureSize?: number;\n dataTextureCount?: number;\n } = {};\n\n initializeState() {\n this.state = {};\n }\n\n getShaders() {\n return super.getShaders({\n vs,\n fs,\n modules: [project32, horizonLayerUniforms]\n });\n }\n\n _createDataTexture(seriesData: Float32Array | number[]): {\n dataTexture: Texture;\n dataTextureSize: number;\n dataTextureCount: number;\n } {\n const _data = seriesData instanceof Float32Array ? seriesData : new Float32Array(seriesData);\n\n const {device} = this.context;\n const count = _data.length;\n\n let dataTextureSize = 32;\n while (count > dataTextureSize * dataTextureSize) {\n dataTextureSize *= 2;\n }\n\n // TODO: use the right way to only submit the minimum amount of data\n const data = new Float32Array(dataTextureSize * dataTextureSize);\n data.set(_data, 0);\n\n return {\n dataTexture: device.createTexture({\n data,\n format: 'r32float',\n dimension: '2d',\n width: dataTextureSize,\n height: dataTextureSize,\n sampler: {\n minFilter: 'nearest',\n magFilter: 'nearest',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n }),\n dataTextureSize,\n dataTextureCount: count\n };\n }\n\n _createModel() {\n const {x, y, width, height} = this.props;\n\n // Create a rectangle using triangle strip (4 vertices)\n // Order: bottom-left, bottom-right, top-left, top-right\n const positions = [\n x,\n y,\n 0.0,\n\n x + width,\n y,\n 0.0,\n\n x,\n y + height,\n 0.0,\n\n x + width,\n y + height,\n 0.0\n ];\n\n const uv = [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0];\n\n const geometry = new Geometry({\n topology: 'triangle-strip',\n attributes: {\n positions: {value: new Float32Array(positions), size: 3},\n uv: {value: new Float32Array(uv), size: 2}\n }\n });\n\n return new Model(this.context.device, {\n ...this.getShaders(),\n geometry,\n bufferLayout: this.getAttributeManager().getBufferLayouts()\n });\n }\n\n updateState(params: UpdateParameters<Layer<ExtraProps & Required<_HorizonGraphLayerProps>>>) {\n super.updateState(params);\n\n const {changeFlags} = params;\n\n if (changeFlags.dataChanged) {\n this.state.dataTexture?.destroy();\n this.setState(this._createDataTexture(this.props.data));\n }\n\n if (changeFlags.extensionsChanged || changeFlags.propsChanged) {\n this.state.model?.destroy();\n this.setState({model: this._createModel()});\n }\n }\n\n draw() {\n const {model, dataTexture} = this.state;\n\n if (!model) {\n this.setState({model: this._createModel()});\n return;\n }\n\n if (!dataTexture) {\n this.setState(this._createDataTexture(this.props.data));\n return;\n }\n\n const {bands, yAxisScale, positiveColor, negativeColor} = this.props;\n\n model.shaderInputs.setProps({\n horizonLayer: {\n dataTexture: this.state.dataTexture,\n dataTextureSize: this.state.dataTextureSize,\n dataTextureSizeInv: 1.0 / this.state.dataTextureSize,\n dataTextureCount: this.state.dataTextureCount,\n\n bands,\n bandsInv: 1.0 / bands,\n yAxisScaleInv: 1.0 / yAxisScale,\n\n positiveColor: positiveColor.map((c) => c / 255),\n negativeColor: negativeColor.map((c) => c / 255)\n }\n });\n model.draw(this.context.renderPass);\n }\n\n finalizeState(context: LayerContext): void {\n this.state.model?.destroy();\n this.state.dataTexture?.destroy();\n super.finalizeState(context);\n }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport default `#version 300 es\n#define SHADER_NAME horizon-graph-layer-vertex-shader\n\nin vec3 positions;\nin vec2 uv;\n\nout vec2 v_uv;\n\nvoid main(void) {\n geometry.worldPosition = positions;\n \n vec4 position_commonspace = project_position(vec4(positions.xy, 0.0, 1.0));\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n geometry.position = position_commonspace;\n \n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n \n v_uv = uv;\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport default `#version 300 es\n#define SHADER_NAME horizon-graph-layer-fragment-shader\n\nprecision highp float;\nprecision highp int;\n\n/******* UNIFORM *******/\n\nuniform sampler2D dataTexture;\n\n/******* IN *******/\n\nin vec2 v_uv;\n\n/******* OUT *******/\n\nout vec4 fragColor;\n\n\n/******* MAIN *******/\n\nvoid main(void) {\n // horizontal position to sample index\n float idx = v_uv.x * horizonLayer.dataTextureCount;\n // idx = clamp(idx, 0.0, horizonLayer.dataTextureCount - 1.0); // NEEDED???\n\n // fetch single data point & normalize (-1,+1)\n float fy = floor(idx * horizonLayer.dataTextureSizeInv);\n float fx = idx - fy * horizonLayer.dataTextureSize;\n float val = texelFetch(dataTexture, ivec2(int(fx), int(fy)), 0).r;\n val *= horizonLayer.yAxisScaleInv;\n\n // band layering\n float fband = abs(val) * horizonLayer.bands;\n float bandIdx = clamp(floor(fband), 0.0, horizonLayer.bands - 1.0);\n float bandFrac = fract(fband);\n\n // calc our position value and find out color (using mix+step instead of if...else)\n float positive = step(0.0, val); // 1 if pos, else 0\n vec3 baseCol = mix(horizonLayer.negativeColor, horizonLayer.positiveColor, positive);\n float curPos = mix(v_uv.y, 1.0 - v_uv.y, positive);\n float addOne = step(curPos, bandFrac);\n\n float band = bandIdx + addOne;\n float whiten = 1.0 - band * horizonLayer.bandsInv;\n\n fragColor = vec4(mix(baseCol, vec3(1.0), whiten), 1.0);\n}\n`;\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\nimport {Texture} from '@luma.gl/core';\n\nconst uniformBlock = `\\\nlayout(std140) uniform horizonLayerUniforms {\n float dataTextureSize; // width = height of the POT texture\n float dataTextureSizeInv;\n float dataTextureCount; // actual number of data points\n\n float bands;\n float bandsInv;\n float yAxisScaleInv;\n\n vec3 positiveColor;\n vec3 negativeColor;\n} horizonLayer;\n`;\n\ntype HorizonLayerBindingProps = {\n dataTexture: Texture;\n};\n\ntype HorizonLayerUniformProps = {};\n\nexport type HorizonLayerProps = HorizonLayerBindingProps & HorizonLayerUniformProps;\n\nexport const horizonLayerUniforms = {\n name: 'horizonLayer',\n vs: uniformBlock,\n fs: uniformBlock,\n uniformTypes: {\n dataTextureSize: 'f32',\n dataTextureSizeInv: 'f32',\n dataTextureCount: 'f32',\n\n bands: 'f32',\n bandsInv: 'f32',\n yAxisScaleInv: 'f32',\n\n positiveColor: 'vec3<f32>',\n negativeColor: 'vec3<f32>'\n }\n} as const satisfies ShaderModule<HorizonLayerProps>;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {DefaultProps, LayerProps, Color, LayerDataSource, Accessor} from '@deck.gl/core';\nimport {CompositeLayer} from '@deck.gl/core';\nimport {SolidPolygonLayer} from '@deck.gl/layers';\nimport {HorizonGraphLayer} from './horizon-graph-layer';\n\nexport type _MultiHorizonGraphLayerProps<DataT> = {\n data: LayerDataSource<DataT>;\n getSeries: Accessor<DataT, number[] | Float32Array>;\n getScale: Accessor<DataT, number>;\n\n bands?: number;\n\n positiveColor?: Color;\n negativeColor?: Color;\n\n dividerColor?: Color;\n dividerWidth?: number;\n\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n};\n\nexport type MultiHorizonGraphLayerProps<DataT = unknown> = _MultiHorizonGraphLayerProps<DataT> &\n LayerProps;\n\nconst defaultProps: DefaultProps<MultiHorizonGraphLayerProps> = {\n getSeries: {type: 'accessor', value: (series: any) => series.values},\n getScale: {type: 'accessor', value: (series: any) => series.scale},\n\n bands: {type: 'number', value: 2},\n\n positiveColor: {type: 'color', value: [0, 128, 0]},\n negativeColor: {type: 'color', value: [0, 0, 255]},\n\n dividerColor: {type: 'color', value: [0, 0, 0]},\n dividerWidth: {type: 'number', value: 2},\n\n x: {type: 'number', value: 0},\n y: {type: 'number', value: 0},\n width: {type: 'number', value: 800},\n height: {type: 'number', value: 300}\n};\n\nexport class MultiHorizonGraphLayer<DataT = any, ExtraProps extends {} = {}> extends CompositeLayer<\n ExtraProps & Required<_MultiHorizonGraphLayerProps<DataT>>\n> {\n static layerName = 'MultiHorizonGraphLayer';\n static defaultProps = defaultProps;\n\n renderLayers() {\n const {\n data,\n getSeries,\n getScale,\n bands,\n positiveColor,\n negativeColor,\n dividerColor,\n dividerWidth,\n x,\n y,\n width,\n height\n } = this.props;\n\n const seriesCount = (data as any).length;\n\n if (!seriesCount) {\n return [];\n }\n\n // Calculate layout dimensions\n const totalDividerSpace = dividerWidth * (seriesCount + 1);\n const availableHeight = height - totalDividerSpace;\n const seriesHeight = availableHeight / seriesCount;\n\n const layers = [];\n\n // Create divider rectangles\n if (dividerWidth > 0) {\n const dividerData = [];\n\n // Top divider\n dividerData.push({\n polygon: [\n [x, y],\n [x + width, y],\n [x + width, y + dividerWidth],\n [x, y + dividerWidth]\n ]\n });\n\n // Dividers between series\n for (let i = 0; i < seriesCount - 1; i++) {\n const dividerY = y + dividerWidth + (i + 1) * seriesHeight + i * dividerWidth;\n dividerData.push({\n polygon: [\n [x, dividerY],\n [x + width, dividerY],\n [x + width, dividerY + dividerWidth],\n [x, dividerY + dividerWidth]\n ]\n });\n }\n\n // Bottom divider\n const bottomDividerY = y + height - dividerWidth;\n dividerData.push({\n polygon: [\n [x, bottomDividerY],\n [x + width, bottomDividerY],\n [x + width, y + height],\n [x, y + height]\n ]\n });\n\n layers.push(\n new SolidPolygonLayer({\n id: `${this.props.id}-dividers`,\n data: dividerData,\n getPolygon: (d: any) => d.polygon,\n getFillColor: dividerColor,\n pickable: false\n })\n );\n }\n\n // Create horizon graph layers for each series\n (data as any).forEach((series, index) => {\n const seriesData = (getSeries as any)(series);\n\n if (!seriesData || seriesData.length === 0) {\n return;\n }\n\n const seriesY = y + dividerWidth + index * (seriesHeight + dividerWidth);\n\n const yAxisScale = (getScale as any)(series);\n\n layers.push(\n new HorizonGraphLayer({\n id: `${this.props.id}-series-${index}`,\n data: seriesData,\n yAxisScale,\n bands,\n positiveColor,\n negativeColor,\n x,\n y: seriesY,\n width,\n height: seriesHeight\n })\n );\n });\n\n return layers;\n }\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
- "names": ["import_core", "import_layers", "import_core", "import_layers", "timeLines", "import_core", "import_core", "import_layers", "defaultProps", "import_core"]
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 an update of monorepo root files\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
+ "names": ["timeLines", "import_core"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -1,10 +1,4 @@
1
- export { TimeAxisLayer, type TimeAxisLayerProps } from "./layers/time-axis-layer.js";
2
- export { VerticalGridLayer, type VerticalGridLayerProps } from "./layers/vertical-grid-layer.js";
3
1
  export { TimeDeltaLayer, type TimeDeltaLayerProps } from "./layers/time-delta-layer.js";
4
- export type { HorizonGraphLayerProps } from "./layers/horizon-graph-layer/horizon-graph-layer.js";
5
- export { HorizonGraphLayer } from "./layers/horizon-graph-layer/horizon-graph-layer.js";
6
- export type { MultiHorizonGraphLayerProps } from "./layers/horizon-graph-layer/multi-horizon-graph-layer.js";
7
- export { MultiHorizonGraphLayer } from "./layers/horizon-graph-layer/multi-horizon-graph-layer.js";
8
2
  export { fitBoundsOrthographic } from "./views/orthographic-utils.js";
9
3
  export { formatTimeMs, formatTimeRangeMs } from "./utils/format-utils.js";
10
4
  export { validateViewState, mergeViewStates, type OptionalViewState } from "./views/view-state-utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAE,KAAK,kBAAkB,EAAC,oCAAiC;AAChF,OAAO,EAAC,iBAAiB,EAAE,KAAK,sBAAsB,EAAC,wCAAqC;AAC5F,OAAO,EAAC,cAAc,EAAE,KAAK,mBAAmB,EAAC,qCAAkC;AACnF,YAAY,EAAC,sBAAsB,EAAC,4DAAyD;AAC7F,OAAO,EAAC,iBAAiB,EAAC,4DAAyD;AACnF,YAAY,EAAC,2BAA2B,EAAC,kEAA+D;AACxG,OAAO,EAAC,sBAAsB,EAAC,kEAA+D;AAE9F,OAAO,EAAC,qBAAqB,EAAC,sCAAmC;AACjE,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,gCAA6B;AACrE,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAC,oCAAiC;AACpG,OAAO,EAAC,eAAe,EAAC,gCAA6B;AAErD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EAClC,mDAAgD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,mBAAmB,EAAC,qCAAkC;AAEnF,OAAO,EAAC,qBAAqB,EAAC,sCAAmC;AACjE,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,gCAA6B;AACrE,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAC,oCAAiC;AACpG,OAAO,EAAC,eAAe,EAAC,gCAA6B;AAErD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EAClC,mDAAgD"}
package/dist/index.js CHANGED
@@ -1,11 +1,7 @@
1
1
  // deck.gl-community
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- export { TimeAxisLayer } from "./layers/time-axis-layer.js";
5
- export { VerticalGridLayer } from "./layers/vertical-grid-layer.js";
6
4
  export { TimeDeltaLayer } from "./layers/time-delta-layer.js";
7
- export { HorizonGraphLayer } from "./layers/horizon-graph-layer/horizon-graph-layer.js";
8
- export { MultiHorizonGraphLayer } from "./layers/horizon-graph-layer/multi-horizon-graph-layer.js";
9
5
  export { fitBoundsOrthographic } from "./views/orthographic-utils.js";
10
6
  export { formatTimeMs, formatTimeRangeMs } from "./utils/format-utils.js";
11
7
  export { validateViewState, mergeViewStates } from "./views/view-state-utils.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,aAAa,EAA0B,oCAAiC;AAChF,OAAO,EAAC,iBAAiB,EAA8B,wCAAqC;AAC5F,OAAO,EAAC,cAAc,EAA2B,qCAAkC;AAEnF,OAAO,EAAC,iBAAiB,EAAC,4DAAyD;AAEnF,OAAO,EAAC,sBAAsB,EAAC,kEAA+D;AAE9F,OAAO,EAAC,qBAAqB,EAAC,sCAAmC;AACjE,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,gCAA6B;AACrE,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAyB,oCAAiC;AACpG,OAAO,EAAC,eAAe,EAAC,gCAA6B;AAErD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EAClC,mDAAgD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,EAA2B,qCAAkC;AAEnF,OAAO,EAAC,qBAAqB,EAAC,sCAAmC;AACjE,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,gCAA6B;AACrE,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAyB,oCAAiC;AACpG,OAAO,EAAC,eAAe,EAAC,gCAA6B;AAErD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EAClC,mDAAgD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deck.gl-community/infovis-layers",
3
- "version": "9.2.0-beta.6",
3
+ "version": "9.2.0-beta.8",
4
4
  "description": "Infovis layers (non-geospatial) for deck.gl",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -44,5 +44,5 @@
44
44
  "@luma.gl/webgpu": "~9.2.0",
45
45
  "@probe.gl/test-utils": "^4.0.4"
46
46
  },
47
- "gitHead": "c72a43fa7f8edfb9456b37656b095d036946b3a4"
47
+ "gitHead": "cc866d0fda6b21627421d6168d2f0abec86ab425"
48
48
  }
package/src/index.ts CHANGED
@@ -2,13 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- export {TimeAxisLayer, type TimeAxisLayerProps} from './layers/time-axis-layer';
6
- export {VerticalGridLayer, type VerticalGridLayerProps} from './layers/vertical-grid-layer';
7
5
  export {TimeDeltaLayer, type TimeDeltaLayerProps} from './layers/time-delta-layer';
8
- export type {HorizonGraphLayerProps} from './layers/horizon-graph-layer/horizon-graph-layer';
9
- export {HorizonGraphLayer} from './layers/horizon-graph-layer/horizon-graph-layer';
10
- export type {MultiHorizonGraphLayerProps} from './layers/horizon-graph-layer/multi-horizon-graph-layer';
11
- export {MultiHorizonGraphLayer} from './layers/horizon-graph-layer/multi-horizon-graph-layer';
12
6
 
13
7
  export {fitBoundsOrthographic} from './views/orthographic-utils';
14
8
  export {formatTimeMs, formatTimeRangeMs} from './utils/format-utils';
@@ -1,23 +0,0 @@
1
- import { Texture } from '@luma.gl/core';
2
- type HorizonLayerBindingProps = {
3
- dataTexture: Texture;
4
- };
5
- type HorizonLayerUniformProps = {};
6
- export type HorizonLayerProps = HorizonLayerBindingProps & HorizonLayerUniformProps;
7
- export declare const horizonLayerUniforms: {
8
- readonly name: "horizonLayer";
9
- readonly vs: "layout(std140) uniform horizonLayerUniforms {\n float dataTextureSize; // width = height of the POT texture\n float dataTextureSizeInv;\n float dataTextureCount; // actual number of data points\n\n float bands;\n float bandsInv;\n float yAxisScaleInv;\n\n vec3 positiveColor;\n vec3 negativeColor;\n} horizonLayer;\n";
10
- readonly fs: "layout(std140) uniform horizonLayerUniforms {\n float dataTextureSize; // width = height of the POT texture\n float dataTextureSizeInv;\n float dataTextureCount; // actual number of data points\n\n float bands;\n float bandsInv;\n float yAxisScaleInv;\n\n vec3 positiveColor;\n vec3 negativeColor;\n} horizonLayer;\n";
11
- readonly uniformTypes: {
12
- readonly dataTextureSize: "f32";
13
- readonly dataTextureSizeInv: "f32";
14
- readonly dataTextureCount: "f32";
15
- readonly bands: "f32";
16
- readonly bandsInv: "f32";
17
- readonly yAxisScaleInv: "f32";
18
- readonly positiveColor: "vec3<f32>";
19
- readonly negativeColor: "vec3<f32>";
20
- };
21
- };
22
- export {};
23
- //# sourceMappingURL=horizon-graph-layer-uniforms.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer-uniforms.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAiBtC,KAAK,wBAAwB,GAAG;IAC9B,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,wBAAwB,GAAG,EAAE,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,wBAAwB,CAAC;AAEpF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAgBmB,CAAC"}
@@ -1,33 +0,0 @@
1
- // deck.gl
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
- const uniformBlock = `\
5
- layout(std140) uniform horizonLayerUniforms {
6
- float dataTextureSize; // width = height of the POT texture
7
- float dataTextureSizeInv;
8
- float dataTextureCount; // actual number of data points
9
-
10
- float bands;
11
- float bandsInv;
12
- float yAxisScaleInv;
13
-
14
- vec3 positiveColor;
15
- vec3 negativeColor;
16
- } horizonLayer;
17
- `;
18
- export const horizonLayerUniforms = {
19
- name: 'horizonLayer',
20
- vs: uniformBlock,
21
- fs: uniformBlock,
22
- uniformTypes: {
23
- dataTextureSize: 'f32',
24
- dataTextureSizeInv: 'f32',
25
- dataTextureCount: 'f32',
26
- bands: 'f32',
27
- bandsInv: 'f32',
28
- yAxisScaleInv: 'f32',
29
- positiveColor: 'vec3<f32>',
30
- negativeColor: 'vec3<f32>'
31
- }
32
- };
33
- //# sourceMappingURL=horizon-graph-layer-uniforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer-uniforms.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer-uniforms.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,MAAM,YAAY,GAAG;;;;;;;;;;;;;CAapB,CAAC;AAUF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,cAAc;IACpB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,YAAY,EAAE;QACZ,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,KAAK;QAEvB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,KAAK;QAEpB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,WAAW;KAC3B;CACiD,CAAC"}
@@ -1,38 +0,0 @@
1
- import type { DefaultProps, LayerProps, Color, LayerContext, UpdateParameters } from '@deck.gl/core';
2
- import { Layer } from '@deck.gl/core';
3
- import { Model } from '@luma.gl/engine';
4
- import { Texture } from '@luma.gl/core';
5
- export type _HorizonGraphLayerProps = {
6
- data: number[] | Float32Array;
7
- yAxisScale?: number;
8
- bands?: number;
9
- positiveColor?: Color;
10
- negativeColor?: Color;
11
- x?: number;
12
- y?: number;
13
- width?: number;
14
- height?: number;
15
- };
16
- export type HorizonGraphLayerProps = _HorizonGraphLayerProps & LayerProps;
17
- export declare class HorizonGraphLayer<ExtraProps extends {} = {}> extends Layer<ExtraProps & Required<_HorizonGraphLayerProps>> {
18
- static layerName: string;
19
- static defaultProps: DefaultProps<HorizonGraphLayerProps>;
20
- state: {
21
- model?: Model;
22
- dataTexture?: Texture;
23
- dataTextureSize?: number;
24
- dataTextureCount?: number;
25
- };
26
- initializeState(): void;
27
- getShaders(): any;
28
- _createDataTexture(seriesData: Float32Array | number[]): {
29
- dataTexture: Texture;
30
- dataTextureSize: number;
31
- dataTextureCount: number;
32
- };
33
- _createModel(): Model;
34
- updateState(params: UpdateParameters<Layer<ExtraProps & Required<_HorizonGraphLayerProps>>>): void;
35
- draw(): void;
36
- finalizeState(context: LayerContext): void;
37
- }
38
- //# sourceMappingURL=horizon-graph-layer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AACnG,OAAO,EAAC,KAAK,EAAY,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,KAAK,EAAW,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAGtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;IAE9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,UAAU,CAAC;AAgB1E,qBAAa,iBAAiB,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,KAAK,CACtE,UAAU,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAC/C;IACC,MAAM,CAAC,SAAS,SAAuB;IACvC,MAAM,CAAC,YAAY,uCAAgB;IAEnC,KAAK,EAAE;QACL,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAM;IAEP,eAAe;IAIf,UAAU;IAQV,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG;QACvD,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAkCD,YAAY;IAwCZ,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAgB3F,IAAI;IAiCJ,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;CAK3C"}
@@ -1,3 +0,0 @@
1
- declare const _default: "#version 300 es\n#define SHADER_NAME horizon-graph-layer-fragment-shader\n\nprecision highp float;\nprecision highp int;\n\n/******* UNIFORM *******/\n\nuniform sampler2D dataTexture;\n\n/******* IN *******/\n\nin vec2 v_uv;\n\n/******* OUT *******/\n\nout vec4 fragColor;\n\n\n/******* MAIN *******/\n\nvoid main(void) {\n // horizontal position to sample index\n float idx = v_uv.x * horizonLayer.dataTextureCount;\n // idx = clamp(idx, 0.0, horizonLayer.dataTextureCount - 1.0); // NEEDED???\n\n // fetch single data point & normalize (-1,+1)\n float fy = floor(idx * horizonLayer.dataTextureSizeInv);\n float fx = idx - fy * horizonLayer.dataTextureSize;\n float val = texelFetch(dataTexture, ivec2(int(fx), int(fy)), 0).r;\n val *= horizonLayer.yAxisScaleInv;\n\n // band layering\n float fband = abs(val) * horizonLayer.bands;\n float bandIdx = clamp(floor(fband), 0.0, horizonLayer.bands - 1.0);\n float bandFrac = fract(fband);\n\n // calc our position value and find out color (using mix+step instead of if...else)\n float positive = step(0.0, val); // 1 if pos, else 0\n vec3 baseCol = mix(horizonLayer.negativeColor, horizonLayer.positiveColor, positive);\n float curPos = mix(v_uv.y, 1.0 - v_uv.y, positive);\n float addOne = step(curPos, bandFrac);\n\n float band = bandIdx + addOne;\n float whiten = 1.0 - band * horizonLayer.bandsInv;\n\n fragColor = vec4(mix(baseCol, vec3(1.0), whiten), 1.0);\n}\n";
2
- export default _default;
3
- //# sourceMappingURL=horizon-graph-layer.fs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts"],"names":[],"mappings":";AAIA,wBAgDE"}
@@ -1,53 +0,0 @@
1
- // deck.gl-community
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
- export default `#version 300 es
5
- #define SHADER_NAME horizon-graph-layer-fragment-shader
6
-
7
- precision highp float;
8
- precision highp int;
9
-
10
- /******* UNIFORM *******/
11
-
12
- uniform sampler2D dataTexture;
13
-
14
- /******* IN *******/
15
-
16
- in vec2 v_uv;
17
-
18
- /******* OUT *******/
19
-
20
- out vec4 fragColor;
21
-
22
-
23
- /******* MAIN *******/
24
-
25
- void main(void) {
26
- // horizontal position to sample index
27
- float idx = v_uv.x * horizonLayer.dataTextureCount;
28
- // idx = clamp(idx, 0.0, horizonLayer.dataTextureCount - 1.0); // NEEDED???
29
-
30
- // fetch single data point & normalize (-1,+1)
31
- float fy = floor(idx * horizonLayer.dataTextureSizeInv);
32
- float fx = idx - fy * horizonLayer.dataTextureSize;
33
- float val = texelFetch(dataTexture, ivec2(int(fx), int(fy)), 0).r;
34
- val *= horizonLayer.yAxisScaleInv;
35
-
36
- // band layering
37
- float fband = abs(val) * horizonLayer.bands;
38
- float bandIdx = clamp(floor(fband), 0.0, horizonLayer.bands - 1.0);
39
- float bandFrac = fract(fband);
40
-
41
- // calc our position value and find out color (using mix+step instead of if...else)
42
- float positive = step(0.0, val); // 1 if pos, else 0
43
- vec3 baseCol = mix(horizonLayer.negativeColor, horizonLayer.positiveColor, positive);
44
- float curPos = mix(v_uv.y, 1.0 - v_uv.y, positive);
45
- float addOne = step(curPos, bandFrac);
46
-
47
- float band = bandIdx + addOne;
48
- float whiten = 1.0 - band * horizonLayer.bandsInv;
49
-
50
- fragColor = vec4(mix(baseCol, vec3(1.0), whiten), 1.0);
51
- }
52
- `;
53
- //# sourceMappingURL=horizon-graph-layer.fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer.fs.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.fs.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDd,CAAC"}
@@ -1,138 +0,0 @@
1
- // deck.gl-community
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
- import { Layer, project32 } from '@deck.gl/core';
5
- import { Model, Geometry } from '@luma.gl/engine';
6
- import vs from './horizon-graph-layer.vs';
7
- import fs from './horizon-graph-layer.fs';
8
- import { horizonLayerUniforms } from "./horizon-graph-layer-uniforms.js";
9
- const defaultProps = {
10
- yAxisScale: { type: 'number', value: 1000 },
11
- bands: { type: 'number', value: 2 },
12
- positiveColor: { type: 'color', value: [0, 128, 0] },
13
- negativeColor: { type: 'color', value: [0, 0, 255] },
14
- x: { type: 'number', value: 0 },
15
- y: { type: 'number', value: 0 },
16
- width: { type: 'number', value: 800 },
17
- height: { type: 'number', value: 300 }
18
- };
19
- export class HorizonGraphLayer extends Layer {
20
- static layerName = 'HorizonGraphLayer';
21
- static defaultProps = defaultProps;
22
- state = {};
23
- initializeState() {
24
- this.state = {};
25
- }
26
- getShaders() {
27
- return super.getShaders({
28
- vs,
29
- fs,
30
- modules: [project32, horizonLayerUniforms]
31
- });
32
- }
33
- _createDataTexture(seriesData) {
34
- const _data = seriesData instanceof Float32Array ? seriesData : new Float32Array(seriesData);
35
- const { device } = this.context;
36
- const count = _data.length;
37
- let dataTextureSize = 32;
38
- while (count > dataTextureSize * dataTextureSize) {
39
- dataTextureSize *= 2;
40
- }
41
- // TODO: use the right way to only submit the minimum amount of data
42
- const data = new Float32Array(dataTextureSize * dataTextureSize);
43
- data.set(_data, 0);
44
- return {
45
- dataTexture: device.createTexture({
46
- data,
47
- format: 'r32float',
48
- dimension: '2d',
49
- width: dataTextureSize,
50
- height: dataTextureSize,
51
- sampler: {
52
- minFilter: 'nearest',
53
- magFilter: 'nearest',
54
- addressModeU: 'clamp-to-edge',
55
- addressModeV: 'clamp-to-edge'
56
- }
57
- }),
58
- dataTextureSize,
59
- dataTextureCount: count
60
- };
61
- }
62
- _createModel() {
63
- const { x, y, width, height } = this.props;
64
- // Create a rectangle using triangle strip (4 vertices)
65
- // Order: bottom-left, bottom-right, top-left, top-right
66
- const positions = [
67
- x,
68
- y,
69
- 0.0,
70
- x + width,
71
- y,
72
- 0.0,
73
- x,
74
- y + height,
75
- 0.0,
76
- x + width,
77
- y + height,
78
- 0.0
79
- ];
80
- const uv = [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0];
81
- const geometry = new Geometry({
82
- topology: 'triangle-strip',
83
- attributes: {
84
- positions: { value: new Float32Array(positions), size: 3 },
85
- uv: { value: new Float32Array(uv), size: 2 }
86
- }
87
- });
88
- return new Model(this.context.device, {
89
- ...this.getShaders(),
90
- geometry,
91
- bufferLayout: this.getAttributeManager().getBufferLayouts()
92
- });
93
- }
94
- updateState(params) {
95
- super.updateState(params);
96
- const { changeFlags } = params;
97
- if (changeFlags.dataChanged) {
98
- this.state.dataTexture?.destroy();
99
- this.setState(this._createDataTexture(this.props.data));
100
- }
101
- if (changeFlags.extensionsChanged || changeFlags.propsChanged) {
102
- this.state.model?.destroy();
103
- this.setState({ model: this._createModel() });
104
- }
105
- }
106
- draw() {
107
- const { model, dataTexture } = this.state;
108
- if (!model) {
109
- this.setState({ model: this._createModel() });
110
- return;
111
- }
112
- if (!dataTexture) {
113
- this.setState(this._createDataTexture(this.props.data));
114
- return;
115
- }
116
- const { bands, yAxisScale, positiveColor, negativeColor } = this.props;
117
- model.shaderInputs.setProps({
118
- horizonLayer: {
119
- dataTexture: this.state.dataTexture,
120
- dataTextureSize: this.state.dataTextureSize,
121
- dataTextureSizeInv: 1.0 / this.state.dataTextureSize,
122
- dataTextureCount: this.state.dataTextureCount,
123
- bands,
124
- bandsInv: 1.0 / bands,
125
- yAxisScaleInv: 1.0 / yAxisScale,
126
- positiveColor: positiveColor.map((c) => c / 255),
127
- negativeColor: negativeColor.map((c) => c / 255)
128
- }
129
- });
130
- model.draw(this.context.renderPass);
131
- }
132
- finalizeState(context) {
133
- this.state.model?.destroy();
134
- this.state.dataTexture?.destroy();
135
- super.finalizeState(context);
136
- }
137
- }
138
- //# sourceMappingURL=horizon-graph-layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer.js","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- declare const _default: "#version 300 es\n#define SHADER_NAME horizon-graph-layer-vertex-shader\n\nin vec3 positions;\nin vec2 uv;\n\nout vec2 v_uv;\n\nvoid main(void) {\n geometry.worldPosition = positions;\n \n vec4 position_commonspace = project_position(vec4(positions.xy, 0.0, 1.0));\n gl_Position = project_common_position_to_clipspace(position_commonspace);\n geometry.position = position_commonspace;\n \n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n \n v_uv = uv;\n}\n";
2
- export default _default;
3
- //# sourceMappingURL=horizon-graph-layer.vs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"horizon-graph-layer.vs.d.ts","sourceRoot":"","sources":["../../../src/layers/horizon-graph-layer/horizon-graph-layer.vs.ts"],"names":[],"mappings":";AAIA,wBAmBE"}