From 2e1eabf09c52b461f2b49755cccce5512210f288 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 21 Jan 2026 10:35:34 -0500 Subject: [PATCH 01/31] CDP #428 - Updating Typesense utils to accept hash map of geometry data --- packages/core-data/src/utils/Typesense.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 6318b0888..f62beed01 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -227,7 +227,16 @@ const toFeatureCollection = (results: Array, path: string, options: Options } _.each(geometryObjects, (geometryObject) => { - const geometry = _.get(geometryObject, geometryPath); + let geometry; + let transform = false; + + // TODO: Comment me! + if (geometryPath) { + geometry = _.get(geometryObject, geometryPath); + transform = true; + } else if (options.geometries) { + geometry = options.geometries[geometryObject.uuid]; + } const include = geometry && (!options.type || geometry.type === options.type); @@ -238,7 +247,7 @@ const toFeatureCollection = (results: Array, path: string, options: Options const relatedRecords = _.get(result, objectPath); - if (relatedRecords) { + if (relatedRecords && transform) { trimmedResult = ObjectUtils.setNestedValue( result, objectPath, From e96ee5081f8397d622f9ba5275f50a1c222c243a Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 21 Jan 2026 10:47:17 -0500 Subject: [PATCH 02/31] CDP #428 - Updating Typesense utils to accept hash map of geometry data --- packages/core-data/src/utils/Typesense.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index f62beed01..88916e7ff 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -235,7 +235,8 @@ const toFeatureCollection = (results: Array, path: string, options: Options geometry = _.get(geometryObject, geometryPath); transform = true; } else if (options.geometries) { - geometry = options.geometries[geometryObject.uuid]; + const object = options.geometries[geometryObject.uuid]; + geometry = object?.geometry; } const include = geometry && (!options.type || geometry.type === options.type); From d2d96d3206cc52b64b347446c6be8b92a4484435 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 21 Jan 2026 11:19:16 -0500 Subject: [PATCH 03/31] CDP #428 - Switching logic for retrieving geometry data --- packages/core-data/src/utils/Typesense.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 88916e7ff..6d9b34c48 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -9,6 +9,9 @@ import type { Event as EventType } from '../types/Event'; import type { TypesenseSearchResult } from '../types/typesense/SearchResult'; type Options = { + geometries: { + [uuid: string]: any + }, type?: string }; @@ -231,12 +234,12 @@ const toFeatureCollection = (results: Array, path: string, options: Options let transform = false; // TODO: Comment me! - if (geometryPath) { - geometry = _.get(geometryObject, geometryPath); - transform = true; - } else if (options.geometries) { + if (options.geometries) { const object = options.geometries[geometryObject.uuid]; geometry = object?.geometry; + } else { + geometry = _.get(geometryObject, geometryPath); + transform = true; } const include = geometry && (!options.type || geometry.type === options.type); From 366b68d967a4d0a0f20a33bc0f107319dc89222d Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 21 Jan 2026 11:55:33 -0500 Subject: [PATCH 04/31] CDP #428 - Adding check for geometryObject --- packages/core-data/src/utils/Typesense.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 6d9b34c48..9a8748b45 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -234,8 +234,8 @@ const toFeatureCollection = (results: Array, path: string, options: Options let transform = false; // TODO: Comment me! - if (options.geometries) { - const object = options.geometries[geometryObject.uuid]; + if (options.geometries) { // TODO: Check for empty + const object = options.geometries[geometryObject?.uuid]; geometry = object?.geometry; } else { geometry = _.get(geometryObject, geometryPath); From cfd0ff2da4e764155ffde1e70e5ac5b6aceb536f Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 21 Jan 2026 13:07:32 -0500 Subject: [PATCH 05/31] CDP #428 - Updating to truncate coordinate precision --- packages/core-data/src/utils/Typesense.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 9a8748b45..f7a9ce57c 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -1,7 +1,7 @@ // @flow import { ObjectJs as ObjectUtils } from '@performant-software/shared-components'; -import { feature, featureCollection } from '@turf/turf'; +import { feature, featureCollection, truncate } from '@turf/turf'; import { history } from 'instantsearch.js/es/lib/routers'; import TypesenseInstantsearchAdapter from 'typesense-instantsearch-adapter'; import _ from 'underscore'; @@ -204,7 +204,9 @@ const toFeature = (record: any, item: any, geometry: any) => { }; const id = parseInt(record.record_id, 10); - return feature(geometry, properties, { id }); + const data = feature(geometry, properties, { id }); + + return truncate(data, { precision: 3, coordinates: 2 }); }; /** From 5b197b264d14b2637abd170d5f9fbbd519b53c15 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 10:45:30 -0500 Subject: [PATCH 06/31] CDP #428 - Adding experimental getFeatures function to Typesense utils --- packages/core-data/src/utils/Typesense.js | 64 +++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index f7a9ce57c..f9dcdb5f2 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -280,11 +280,75 @@ const toFeatureCollection = (results: Array, path: string, options: Options return featureCollection(features); }; +const getFeatures = (features, results, path, options) => { + const newFeatures = [...features]; + + const objectPath = path.substring(0, path.lastIndexOf(ATTRIBUTE_DELIMITER)); + const geometryPath = path.substring(path.lastIndexOf(ATTRIBUTE_DELIMITER) + 1, path.length); + + _.each(results, (result) => { + const places = _.isEmpty(objectPath) ? result : ObjectUtils.getNestedValue(result, objectPath); + + _.each(places, (place) => { + let geometry; + + if (options.geometries) { + geometry = getGeometryByHash(place, options.geometries); + } else { + geometry = getGeometryByPath(place, geometryPath); + } + + const include = geometry && (!options.type || geometry.type === options.type); + + if (include) { + const trimmedResult = trimResult(result, objectPath); + + const record = _.find(newFeatures, (f) => f.properties?.uuid === place.uuid); + + if (record) { + record.properties?.items.push(trimmedResult); + } else { + newFeatures.push(toFeature(place, trimmedResult, geometry)); + } + } + }); + }); + + return newFeatures; +}; + +const getGeometryByPath = (place, path) => { + return _.get(path, path); +}; + +const getGeometryByHash = (place, hash) => { + const object = hash[place?.uuid]; + return object?.geometry; +}; + +const trimResult = (result, objectPath) => { + let value = { ...result }; + + const relatedRecords = _.get(result, objectPath); + + if (relatedRecords) { + const trimmedPlaces = _.map(relatedRecords, (r) => ({ ...r, geometry: undefined })); + value = ObjectUtils.setNestedValue(value, objectPath, trimmedPlaces); + } + + value._rawTypesenseHit = undefined; + value._snippetResult = undefined; + value._highlightResult = undefined; + + return value; +}; + export default { createCachedHits, createRouting, createTypesenseAdapter, getDate, + getFeatures, getFieldId, getRelationshipId, toFeature, From 39dc33e41164af440b145f462919cc8e0765600e Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 13:00:40 -0500 Subject: [PATCH 07/31] CDP #428 - Adding experimental createFeatureCollection function --- packages/core-data/src/utils/Typesense.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index f9dcdb5f2..8fc6c8179 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -317,6 +317,8 @@ const getFeatures = (features, results, path, options) => { return newFeatures; }; +const createFeatureCollection = (features) => featureCollection(features); + const getGeometryByPath = (place, path) => { return _.get(path, path); }; @@ -345,6 +347,7 @@ const trimResult = (result, objectPath) => { export default { createCachedHits, + createFeatureCollection, createRouting, createTypesenseAdapter, getDate, From 192bca39989b805942741ab4dff0743d3dfb2782 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 13:35:47 -0500 Subject: [PATCH 08/31] CDP #428 - Updating Typesense utils getFeatures function to remove places that are no longer part of the results set --- packages/core-data/src/utils/Typesense.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 8fc6c8179..3cac38741 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -286,10 +286,15 @@ const getFeatures = (features, results, path, options) => { const objectPath = path.substring(0, path.lastIndexOf(ATTRIBUTE_DELIMITER)); const geometryPath = path.substring(path.lastIndexOf(ATTRIBUTE_DELIMITER) + 1, path.length); + // TODO: How to remove items that are no longer in the results? + const placeIds = []; + _.each(results, (result) => { const places = _.isEmpty(objectPath) ? result : ObjectUtils.getNestedValue(result, objectPath); _.each(places, (place) => { + placeIds.push(place.uuid); + let geometry; if (options.geometries) { @@ -314,13 +319,13 @@ const getFeatures = (features, results, path, options) => { }); }); - return newFeatures; + return _.filter(newFeatures, (feature) => placeIds.includes(feature.properties.uuid)); }; const createFeatureCollection = (features) => featureCollection(features); const getGeometryByPath = (place, path) => { - return _.get(path, path); + return _.get(place, path); }; const getGeometryByHash = (place, hash) => { From 25a76afc963285c1fc2399dc096e6ceb73140f79 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 14:28:00 -0500 Subject: [PATCH 09/31] CDP #428 - Updating getFeatures function to remove records from "items" array --- packages/core-data/src/utils/Typesense.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 3cac38741..eda4952d4 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -288,8 +288,11 @@ const getFeatures = (features, results, path, options) => { // TODO: How to remove items that are no longer in the results? const placeIds = []; + const recordIds = []; _.each(results, (result) => { + recordIds.push(result.uuid); + const places = _.isEmpty(objectPath) ? result : ObjectUtils.getNestedValue(result, objectPath); _.each(places, (place) => { @@ -319,7 +322,16 @@ const getFeatures = (features, results, path, options) => { }); }); - return _.filter(newFeatures, (feature) => placeIds.includes(feature.properties.uuid)); + return _.chain(newFeatures) + .filter((feature) => placeIds.includes(feature.properties.uuid)) + .map((feature) => ({ + ...feature, + properties: { + ...feature.properties, + items: _.filter(feature.properties.items, (item) => recordIds.includes(item.uuid)) + } + })) + .value(); }; const createFeatureCollection = (features) => featureCollection(features); From 91b79fd87f0e53eebfc8609f34c153db1f174517 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 14:37:45 -0500 Subject: [PATCH 10/31] CDP #428 - Updating to only include items in the feature if not already added --- packages/core-data/src/utils/Typesense.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index eda4952d4..bf1a0ca50 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -312,8 +312,9 @@ const getFeatures = (features, results, path, options) => { const trimmedResult = trimResult(result, objectPath); const record = _.find(newFeatures, (f) => f.properties?.uuid === place.uuid); + const item = _.find(record.properties?.items, (item) => item.uuid === trimmedResult.uuid); - if (record) { + if (record && !item) { record.properties?.items.push(trimmedResult); } else { newFeatures.push(toFeature(place, trimmedResult, geometry)); From aa4b6b1e17c6fe019abb3f2fd0e23f631b786378 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 14:50:37 -0500 Subject: [PATCH 11/31] CDP #428 - Adding check for record before getting items --- packages/core-data/src/utils/Typesense.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index bf1a0ca50..22bc7946a 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -312,10 +312,13 @@ const getFeatures = (features, results, path, options) => { const trimmedResult = trimResult(result, objectPath); const record = _.find(newFeatures, (f) => f.properties?.uuid === place.uuid); - const item = _.find(record.properties?.items, (item) => item.uuid === trimmedResult.uuid); - if (record && !item) { - record.properties?.items.push(trimmedResult); + if (record) { + const item = _.find(record.properties?.items, (item) => item.uuid === trimmedResult.uuid); + + if (!item) { + record.properties?.items.push(trimmedResult); + } } else { newFeatures.push(toFeature(place, trimmedResult, geometry)); } From e3c5d5402c92552d59b47071e06109fc1f4e0efa Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 22 Jan 2026 15:21:42 -0500 Subject: [PATCH 12/31] CDP #428 - Updating Typesense util trimResult function to be more aggressive --- packages/core-data/src/utils/Typesense.js | 29 ++++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 22bc7946a..efc5481a1 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -350,20 +350,21 @@ const getGeometryByHash = (place, hash) => { }; const trimResult = (result, objectPath) => { - let value = { ...result }; - - const relatedRecords = _.get(result, objectPath); - - if (relatedRecords) { - const trimmedPlaces = _.map(relatedRecords, (r) => ({ ...r, geometry: undefined })); - value = ObjectUtils.setNestedValue(value, objectPath, trimmedPlaces); - } - - value._rawTypesenseHit = undefined; - value._snippetResult = undefined; - value._highlightResult = undefined; - - return value; + return _.pick(result, 'id', 'uuid', 'record_id', 'name', 'names'); + // let value = { ...result }; + // + // const relatedRecords = _.get(result, objectPath); + // + // if (relatedRecords) { + // const trimmedPlaces = _.map(relatedRecords, (r) => ({ ...r, geometry: undefined })); + // value = ObjectUtils.setNestedValue(value, objectPath, trimmedPlaces); + // } + // + // value._rawTypesenseHit = undefined; + // value._snippetResult = undefined; + // value._highlightResult = undefined; + // + // return value; }; export default { From 714ab7a3240c95e70fc0d2bf0ef1158b08339cfd Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 10:03:12 -0500 Subject: [PATCH 13/31] CDP #428 - Updating Typesense utils getFeatures function to include a property for whether or not a feature is visible --- packages/core-data/src/utils/Typesense.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index efc5481a1..9dba210bc 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -326,16 +326,14 @@ const getFeatures = (features, results, path, options) => { }); }); - return _.chain(newFeatures) - .filter((feature) => placeIds.includes(feature.properties.uuid)) - .map((feature) => ({ - ...feature, - properties: { - ...feature.properties, - items: _.filter(feature.properties.items, (item) => recordIds.includes(item.uuid)) - } - })) - .value(); + return _.map(newFeatures, (feature) => ({ + ...feature, + properties: { + ...feature.properties, + visible: placeIds.includes(feature.properties.uuid), + items: _.filter(feature.properties.items, (item) => recordIds.includes(item.uuid)) + } + })); }; const createFeatureCollection = (features) => featureCollection(features); From 9ceeecb3c7048e1f524de32a89ee316cff23deb4 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 10:10:17 -0500 Subject: [PATCH 14/31] CDP #428 - Adding visible prop to LocationMarkers --- packages/geospatial/src/components/LocationMarkers.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/geospatial/src/components/LocationMarkers.js b/packages/geospatial/src/components/LocationMarkers.js index 8b5d5b8a2..ebfadc7f2 100644 --- a/packages/geospatial/src/components/LocationMarkers.js +++ b/packages/geospatial/src/components/LocationMarkers.js @@ -86,7 +86,12 @@ type Props = { /** * GeoJSON layer stroke style */ - strokeStyle?: { [key: string]: any } + strokeStyle?: { [key: string]: any }, + + /** + * If true, the layer will be visible on the map. + */ + visible?: boolean }; const DEFAULT_BUFFER = 2; @@ -141,6 +146,7 @@ const LocationMarkers = (props: Props) => { interactive={props.interactive} strokeStyle={props.strokeStyle} pointStyle={props.pointStyle} + visible={props.visible} /> ); From 2507233887b783d1c5e33535a1a094aafacb2210 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 11:17:48 -0500 Subject: [PATCH 15/31] CDP #428 - Adding GeoJSONLayerTest component to test Peripleo bug --- .../src/components/GeoJSONLayerTest.js | 181 ++++++++++++++++++ .../src/components/LocationMarkers.js | 3 +- 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 packages/geospatial/src/components/GeoJSONLayerTest.js diff --git a/packages/geospatial/src/components/GeoJSONLayerTest.js b/packages/geospatial/src/components/GeoJSONLayerTest.js new file mode 100644 index 000000000..deec94b30 --- /dev/null +++ b/packages/geospatial/src/components/GeoJSONLayerTest.js @@ -0,0 +1,181 @@ +// @flow + +import React, { type ReactNode, useEffect, useState } from 'react'; +import { Map } from 'maplibre-gl'; +import { + Tooltip, + removeLayerIfExists, + removeSourceIfExists, + useLoadedMap +} from '@peripleo/maplibre'; +import MapStyles from '../utils/MapStyles'; + +type Props = { + + cluster?: boolean, + + clusterMaxZoom?: number, + + clusterMinPoints?: number, + + clusterProperties?: any, + + clusterRadius?: number, + + data: any, + + fillStyle?: Object, + + id: string, + + interactive?: boolean, + + pointStyle?: Object, + + tooltip?: (hoverState: any) => ReactNode, + + strokeStyle?: Object, + + visible?: boolean, + + onLoad?: () => void + +}; + +const setStyle = (map: typeof Map, layerId: string, style: any) => { + if (!map) return; + + Object + .entries(style.paint) + .forEach(([key, value]) => + map.setPaintProperty(layerId, key, value)); +}; + +const GeoJSONLayerTest = (props: Props) => { + + const { id, data } = props; + + const visible = props.visible === undefined ? true : props.visible; + + const fillStyle = props.fillStyle || MapStyles.fill; + + const strokeStyle = props.strokeStyle || MapStyles.stroke; + + const pointStyle = props.pointStyle || MapStyles.point; + + const map = useLoadedMap(); + + const [sourceId, setSourceId] = useState(); + + useEffect(() => { + if (map) { + const layerIds = new Set(map.getStyle().layers.map(l => l.id)); + + if (layerIds.has(`layer-${props.id}-fill`)) { + map.setLayoutProperty(`layer-${props.id}-fill`, 'visibility', visible ? 'visible' : 'none'); + } + + if (layerIds.has(`layer-${props.id}-line`)) { + map.setLayoutProperty(`layer-${props.id}-fill`, 'visibility', visible ? 'visible' : 'none'); + } + + if (layerIds.has(`layer-${props.id}-point`)) { + map.setLayoutProperty(`layer-${props.id}-fill`, 'visibility', visible ? 'visible' : 'none'); + } + } + }, [visible, map]); + + useEffect(() => { + if (!map) return; + + const sourceId = `source-${id}`; + + map.addSource(sourceId, { + type: 'geojson', + // @ts-ignore + data, + // Note that mapLibre checks by key, and will fail if cluster args + // are undefined. Therefore we need to add on demand. + ...(props.cluster && { cluster: true }), + ...(props.clusterRadius !== undefined && { clusterRadius: props.clusterRadius }), + ...(props.clusterMaxZoom !== undefined && { clusterMaxZoom: props.clusterMaxZoom }), + ...(props.clusterMinPoints !== undefined && { clusterMinPoints: props.clusterMinPoints }), + ...(props.clusterProperties !== undefined && { clusterProperties: props.clusterProperties }) + }); + + // Map emits 'IDLE' event when the source is fully loaded + if (props.onLoad) + map.once('idle', () => props.onLoad()); + + if (!props.cluster) { + map.addLayer({ + id: `layer-${id}-fill`, + ...fillStyle, + source: `source-${id}`, + filter: ['!=', '$type', 'Point'], + metadata: { + interactive: props.interactive + } + }); + + map.addLayer({ + id: `layer-${id}-line`, + ...strokeStyle, + source: `source-${id}`, + filter: ['!=', '$type', 'Point'] + }); + } + + map.addLayer({ + id: `layer-${id}-point`, + ...pointStyle, + filter: ['==', '$type', 'Point'], + source: `source-${id}`, + metadata: { + interactive: props.interactive + } + }); + + setSourceId(sourceId); + + setTimeout(() => map.moveLayer(`layer-${id}-point`), 10); + + return () => { + removeLayerIfExists(map, `layer-${id}-point`); + removeLayerIfExists(map, `layer-${id}-line`); + removeLayerIfExists(map, `layer-${id}-fill`); + + removeSourceIfExists(map, sourceId); + }; + }, [map]); + + useEffect(() => { + if (!sourceId) return; + + // @ts-ignore + map.getSource(sourceId).setData(data); + }, [sourceId, data]); + + useEffect(() => { + if (!props.cluster) + setStyle(map, `layer-${id}-fill`, props.fillStyle|| MapStyles.fill); + }, [props.fillStyle, props.cluster]); + + useEffect(() => { + if (!props.cluster) + setStyle(map, `layer-${id}-line`, props.strokeStyle|| MapStyles.stroke); + }, [props.strokeStyle, props.cluster]); + + useEffect(() => { + setStyle(map, `layer-${id}-point`, props.pointStyle|| MapStyles.point); + }, [props.pointStyle]); + + return props.tooltip ? ( + + ) : null; + +}; + +export default GeoJSONLayerTest; \ No newline at end of file diff --git a/packages/geospatial/src/components/LocationMarkers.js b/packages/geospatial/src/components/LocationMarkers.js index ebfadc7f2..ce4ac3a4a 100644 --- a/packages/geospatial/src/components/LocationMarkers.js +++ b/packages/geospatial/src/components/LocationMarkers.js @@ -1,6 +1,7 @@ // @flow -import { GeoJSONLayer, PulsingMarkerLayer, useLoadedMap } from '@peripleo/maplibre'; +import { PulsingMarkerLayer, useLoadedMap } from '@peripleo/maplibre'; +import GeoJSONLayer from './GeoJSONLayerTest'; import React, { useEffect, useMemo } from 'react'; import _ from 'underscore'; import MapStyles from '../utils/MapStyles'; From ce366314f54fd6325a1f1799503a965a6af7204c Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 11:25:30 -0500 Subject: [PATCH 16/31] CDP #428 - Updating Peripleo version --- packages/controlled-vocabulary/package.json | 6 +- packages/core-data/package.json | 10 +- packages/geospatial/package.json | 4 +- .../src/components/GeoJSONLayerTest.js | 4 +- packages/semantic-ui/package.json | 4 +- packages/shared/package.json | 2 +- packages/storybook/package.json | 4 +- packages/user-defined-fields/package.json | 6 +- packages/visualize/package.json | 2 +- yarn.lock | 444 ++++++++++++++---- 10 files changed, 384 insertions(+), 102 deletions(-) diff --git a/packages/controlled-vocabulary/package.json b/packages/controlled-vocabulary/package.json index 2c64ce417..2d28acd6d 100644 --- a/packages/controlled-vocabulary/package.json +++ b/packages/controlled-vocabulary/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/controlled-vocabulary", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of components to allow user to configure dropdown elements. Use with the \"controlled_vocabulary\" gem.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -23,8 +23,8 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@performant-software/semantic-components": "^3.1.12", - "@performant-software/shared-components": "^3.1.12", + "@performant-software/semantic-components": "^3.1.13-beta.14", + "@performant-software/shared-components": "^3.1.13-beta.14", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/core-data/package.json b/packages/core-data/package.json index 60721e93b..c8874bef6 100644 --- a/packages/core-data/package.json +++ b/packages/core-data/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/core-data", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of components used with the Core Data platform.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -48,10 +48,10 @@ "underscore": "^1.13.2" }, "peerDependencies": { - "@performant-software/geospatial": "^3.1.12", - "@performant-software/shared-components": "^3.1.12", - "@peripleo/maplibre": "^0.8.7", - "@peripleo/peripleo": "^0.8.7", + "@performant-software/geospatial": "^3.1.13-beta.14", + "@performant-software/shared-components": "^3.1.13-beta.14", + "@peripleo/maplibre": "^0.8.8", + "@peripleo/peripleo": "^0.8.8", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0", "tailwindcss": "^4.1.4" diff --git a/packages/geospatial/package.json b/packages/geospatial/package.json index 2e2a66475..9b4c05556 100644 --- a/packages/geospatial/package.json +++ b/packages/geospatial/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/geospatial", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of components for all things map-related.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -29,7 +29,7 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@peripleo/maplibre": "^0.8.7", + "@peripleo/maplibre": "^0.8.8", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/geospatial/src/components/GeoJSONLayerTest.js b/packages/geospatial/src/components/GeoJSONLayerTest.js index deec94b30..300ac6bff 100644 --- a/packages/geospatial/src/components/GeoJSONLayerTest.js +++ b/packages/geospatial/src/components/GeoJSONLayerTest.js @@ -3,7 +3,7 @@ import React, { type ReactNode, useEffect, useState } from 'react'; import { Map } from 'maplibre-gl'; import { - Tooltip, + HoverTooltip, removeLayerIfExists, removeSourceIfExists, useLoadedMap @@ -171,7 +171,7 @@ const GeoJSONLayerTest = (props: Props) => { }, [props.pointStyle]); return props.tooltip ? ( - ) : null; diff --git a/packages/semantic-ui/package.json b/packages/semantic-ui/package.json index 02476913c..462d5902b 100644 --- a/packages/semantic-ui/package.json +++ b/packages/semantic-ui/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/semantic-components", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of shared components based on the Semantic UI Framework.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -35,7 +35,7 @@ "zotero-translation-client": "^5.0.1" }, "peerDependencies": { - "@performant-software/shared-components": "^3.1.12", + "@performant-software/shared-components": "^3.1.13-beta.14", "@samvera/clover-iiif": "^2.3.2", "react": ">= 16.13.1 < 19.0.0", "react-dnd": "^16.0.1", diff --git a/packages/shared/package.json b/packages/shared/package.json index d833712c4..3473639b9 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/shared-components", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of shared, framework agnostic, components.", "license": "MIT", "main": "./dist/index.cjs.js", diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 338001670..40c3aeb92 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -17,8 +17,8 @@ "@bunchtogether/vite-plugin-flow": "^1.0.2", "@faker-js/faker": "^8.0.2", "@headlessui/react": "^1.7.18", - "@peripleo/maplibre": "^0.4.2", - "@peripleo/peripleo": "^0.4.2", + "@peripleo/maplibre": "^0.8.8", + "@peripleo/peripleo": "^0.8.8", "@storybook/addon-a11y": "9.0.17", "@storybook/addon-docs": "9.0.17", "@storybook/addon-links": "9.0.17", diff --git a/packages/user-defined-fields/package.json b/packages/user-defined-fields/package.json index dd2420666..0e57ce4fe 100644 --- a/packages/user-defined-fields/package.json +++ b/packages/user-defined-fields/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/user-defined-fields", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of components used for allowing end users to define fields on models. Use with the \"user_defined_fields\" gem.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -23,8 +23,8 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@performant-software/semantic-components": "^3.1.12", - "@performant-software/shared-components": "^3.1.12", + "@performant-software/semantic-components": "^3.1.13-beta.14", + "@performant-software/shared-components": "^3.1.13-beta.14", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/visualize/package.json b/packages/visualize/package.json index 533a4eb7e..b6b20f0c5 100644 --- a/packages/visualize/package.json +++ b/packages/visualize/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/visualize", - "version": "3.1.12", + "version": "3.1.13-beta.14", "description": "A package of components used for data visualization", "license": "MIT", "main": "./dist/index.cjs.js", diff --git a/yarn.lock b/yarn.lock index 034672249..187bc1d52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2269,6 +2269,13 @@ dependencies: "@floating-ui/utils" "^0.2.9" +"@floating-ui/core@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" + integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w== + dependencies: + "@floating-ui/utils" "^0.2.10" + "@floating-ui/dom@^1.0.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.1.tgz#76a4e3cbf7a08edf40c34711cf64e0cc8053d912" @@ -2285,6 +2292,14 @@ "@floating-ui/core" "^1.6.0" "@floating-ui/utils" "^0.2.1" +"@floating-ui/dom@^1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77" + integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA== + dependencies: + "@floating-ui/core" "^1.7.3" + "@floating-ui/utils" "^0.2.10" + "@floating-ui/react-dom@^2.0.0": version "2.0.8" resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" @@ -2299,6 +2314,13 @@ dependencies: "@floating-ui/dom" "^1.0.0" +"@floating-ui/react-dom@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.6.tgz#189f681043c1400561f62972f461b93f01bf2231" + integrity sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw== + dependencies: + "@floating-ui/dom" "^1.7.4" + "@floating-ui/react@^0.26.16": version "0.26.28" resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7" @@ -2308,11 +2330,25 @@ "@floating-ui/utils" "^0.2.8" tabbable "^6.0.0" +"@floating-ui/react@^0.27.16": + version "0.27.16" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.27.16.tgz#6e485b5270b7a3296fdc4d0faf2ac9abf955a2f7" + integrity sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g== + dependencies: + "@floating-ui/react-dom" "^2.1.6" + "@floating-ui/utils" "^0.2.10" + tabbable "^6.0.0" + "@floating-ui/utils@^0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== +"@floating-ui/utils@^0.2.10": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c" + integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== + "@floating-ui/utils@^0.2.8", "@floating-ui/utils@^0.2.9": version "0.2.9" resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" @@ -2875,7 +2911,7 @@ resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== -"@maplibre/maplibre-gl-style-spec@^19.2.1", "@maplibre/maplibre-gl-style-spec@^19.3.3": +"@maplibre/maplibre-gl-style-spec@^19.2.1": version "19.3.3" resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz#a106248bd2e25e77c963a362aeaf630e00f924e9" integrity sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw== @@ -2901,6 +2937,19 @@ sort-object "^3.0.3" tinyqueue "^2.0.3" +"@maplibre/maplibre-gl-style-spec@^20.3.1": + version "20.4.0" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz#408339e051fb51e022b40af2235e0beb037937ea" + integrity sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw== + dependencies: + "@mapbox/jsonlint-lines-primitives" "~2.0.2" + "@mapbox/unitbezier" "^0.0.1" + json-stringify-pretty-compact "^4.0.0" + minimist "^1.2.8" + quickselect "^2.0.0" + rw "^1.3.3" + tinyqueue "^3.0.0" + "@maplibre/maplibre-gl-style-spec@^23.3.0": version "23.3.0" resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.3.0.tgz#b69ab48cb3abead4e49213396c8f83492638b97c" @@ -3057,40 +3106,26 @@ remark-rehype "^11.1.0" unified "^11.0.4" -"@peripleo/maplibre@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@peripleo/maplibre/-/maplibre-0.4.2.tgz#fb20c66f5fd3219ed1690b5c47f03ecee4c354f4" - integrity sha512-6DGAUarFTqHrGvjRgPMgSivlcxCGrgiiCT6BqHlecQyOt0jAfT2lKhH4nw2xq6dOxTsnYg4xQTBYO808Zy1ELw== +"@peripleo/maplibre@^0.8.8": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@peripleo/maplibre/-/maplibre-0.8.8.tgz#4b1fda3c2e7aa62b38950d2258d906ac62a55fb0" + integrity sha512-PjyxyI9Fa1Q37ly63AolTOkYS/UuIc7uuBRnTR/v69LwxwuU5K5IzB8lo9Bu7O4jNbVtukm63dydVgq12TWQZQ== dependencies: - "@phosphor-icons/react" "^2.0.15" - "@radix-ui/react-dropdown-menu" "^2.0.6" - "@radix-ui/react-popover" "^1.0.7" - "@turf/bbox" "^6.5.0" - chroma-js "^2.4.2" - maplibre-gl "^3.6.2" - nanoid "^5.0.4" - react-draggable "^4.4.6" - react-resizable "^3.0.5" - -"@peripleo/peripleo@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@peripleo/peripleo/-/peripleo-0.4.2.tgz#33b4989017567f2b12e1595eebf079d1ba587c73" - integrity sha512-UCYzA+j4KaeWL6kiuPww9KnQR5i+ZyluZImKlocLEVxRhEiEndTHFiLi7be1znrT5SHatxJQpfAOhmyhgdThag== - dependencies: - "@phosphor-icons/react" "^2.0.15" - "@radix-ui/react-dropdown-menu" "^2.0.6" - "@radix-ui/react-popover" "^1.0.7" - "@turf/bbox" "^6.5.0" - chroma-js "^2.4.2" - maplibre-gl "^3.6.2" - nanoid "^5.0.4" - react-draggable "^4.4.6" - react-resizable "^3.0.5" + "@floating-ui/react" "^0.27.16" + "@phosphor-icons/react" "^2.1.10" + "@radix-ui/react-dropdown-menu" "^2.1.16" + maplibre-gl "^4.7.1" + nanoid "^5.1.6" + +"@peripleo/peripleo@^0.8.8": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@peripleo/peripleo/-/peripleo-0.8.8.tgz#721d01cc567c4fbb0408a6fcf42d588ad0c7eb4e" + integrity sha512-4Jh9dxdsUTJWnFyQGVUlfZ3hpyqZ1DxYynGEaxJw3ebrezmgPlzG2ojPEeSzN5l+iHhW/Z6Yx0TG3IRbF9ZhVA== -"@phosphor-icons/react@^2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@phosphor-icons/react/-/react-2.0.15.tgz#4d8e28484d45649f53a6cd75db161cf8b8379e1d" - integrity sha512-PQKNcRrfERlC8gJGNz0su0i9xVmeubXSNxucPcbCLDd9u0cwJVTEyYK87muul/svf0UXFdL2Vl6bbeOhT1Mwow== +"@phosphor-icons/react@^2.1.10": + version "2.1.10" + resolved "https://registry.yarnpkg.com/@phosphor-icons/react/-/react-2.1.10.tgz#3a97ec5b7a4b8d53afeb29125bc17e74ed2daf92" + integrity sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA== "@pkgjs/parseargs@^0.11.0": version "0.11.0" @@ -3131,6 +3166,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2" integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== +"@radix-ui/primitive@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.3.tgz#e2dbc13bdc5e4168f4334f75832d7bdd3e2de5ba" + integrity sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg== + "@radix-ui/react-accordion@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz#738441f7343e5142273cdef94d12054c3287966f" @@ -3162,6 +3202,13 @@ dependencies: "@radix-ui/react-primitive" "2.0.0" +"@radix-ui/react-arrow@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09" + integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-aspect-ratio@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.0.3.tgz#d1a15d6953203e6fd7f5b569fae77c88c1880125" @@ -3221,6 +3268,16 @@ "@radix-ui/react-primitive" "2.0.0" "@radix-ui/react-slot" "1.1.0" +"@radix-ui/react-collection@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec" + integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-compose-refs@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" @@ -3233,6 +3290,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74" integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw== +"@radix-ui/react-compose-refs@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== + "@radix-ui/react-context@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" @@ -3245,6 +3307,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8" integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A== +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + "@radix-ui/react-dialog@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz#4906507f7b4ad31e22d7dad69d9330c87c431d44" @@ -3277,6 +3344,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== +"@radix-ui/react-direction@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" + integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== + "@radix-ui/react-dismissable-layer@1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz#3f98425b82b9068dfbab5db5fff3df6ebf48b9d4" @@ -3300,6 +3372,17 @@ "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-escape-keydown" "1.1.0" +"@radix-ui/react-dismissable-layer@1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz#e33ab6f6bdaa00f8f7327c408d9f631376b88b37" + integrity sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" + "@radix-ui/react-dropdown-menu@^2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz#cdf13c956c5e263afe4e5f3587b3071a25755b63" @@ -3314,6 +3397,19 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-controllable-state" "1.0.1" +"@radix-ui/react-dropdown-menu@^2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz#5ee045c62bad8122347981c479d92b1ff24c7254" + integrity sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-menu" "2.1.16" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-focus-guards@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" @@ -3326,6 +3422,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz#8e9abb472a9a394f59a1b45f3dd26cfe3fc6da13" integrity sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw== +"@radix-ui/react-focus-guards@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz#2a5669e464ad5fde9f86d22f7fdc17781a4dfa7f" + integrity sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw== + "@radix-ui/react-focus-scope@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz#2ac45fce8c5bb33eb18419cdc1905ef4f1906525" @@ -3345,6 +3446,15 @@ "@radix-ui/react-primitive" "2.0.0" "@radix-ui/react-use-callback-ref" "1.1.0" +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-form@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-form/-/react-form-0.0.3.tgz#328e7163e723ccc748459d66a2d685d7b4f85d5a" @@ -3373,6 +3483,13 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" +"@radix-ui/react-id@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-label@2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.0.2.tgz#9c72f1d334aac996fdc27b48a8bdddd82108fb6d" @@ -3406,6 +3523,30 @@ aria-hidden "^1.1.1" react-remove-scroll "2.5.5" +"@radix-ui/react-menu@2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.16.tgz#528a5a973c3a7413d3d49eb9ccd229aa52402911" + integrity sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.11" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + "@radix-ui/react-popover@^1.0.7": version "1.0.7" resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.0.7.tgz#23eb7e3327330cb75ec7b4092d685398c1654e3c" @@ -3482,6 +3623,22 @@ "@radix-ui/react-use-size" "1.1.0" "@radix-ui/rect" "1.1.0" +"@radix-ui/react-popper@1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.8.tgz#a79f39cdd2b09ab9fb50bf95250918422c4d9602" + integrity sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-rect" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + "@radix-ui/rect" "1.1.1" + "@radix-ui/react-portal@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.4.tgz#df4bfd353db3b1e84e639e9c63a5f2565fb00e15" @@ -3498,6 +3655,14 @@ "@radix-ui/react-primitive" "2.0.0" "@radix-ui/react-use-layout-effect" "1.1.0" +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-presence@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.1.tgz#491990ba913b8e2a5db1b06b203cb24b5cdef9ba" @@ -3515,6 +3680,14 @@ "@radix-ui/react-compose-refs" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" +"@radix-ui/react-presence@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.5.tgz#5d8f28ac316c32f078afce2996839250c10693db" + integrity sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-primitive@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" @@ -3530,6 +3703,13 @@ dependencies: "@radix-ui/react-slot" "1.1.0" +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== + dependencies: + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-radio-group@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-1.1.3.tgz#3197f5dcce143bcbf961471bf89320735c0212d3" @@ -3563,6 +3743,21 @@ "@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-controllable-state" "1.0.1" +"@radix-ui/react-roving-focus@1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz#ef54384b7361afc6480dcf9907ef2fedb5080fd9" + integrity sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-select@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.0.0.tgz#a3511792a51a7018d6559357323a7f52e0e38887" @@ -3623,6 +3818,13 @@ dependencies: "@radix-ui/react-compose-refs" "1.1.0" +"@radix-ui/react-slot@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-switch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.0.3.tgz#6119f16656a9eafb4424c600fdb36efa5ec5837e" @@ -3682,6 +3884,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== + "@radix-ui/react-use-controllable-state@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" @@ -3697,6 +3904,21 @@ dependencies: "@radix-ui/react-use-callback-ref" "1.1.0" +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== + dependencies: + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-escape-keydown@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" @@ -3712,6 +3934,13 @@ dependencies: "@radix-ui/react-use-callback-ref" "1.1.0" +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" @@ -3724,6 +3953,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + "@radix-ui/react-use-previous@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66" @@ -3751,6 +3985,13 @@ dependencies: "@radix-ui/rect" "1.1.0" +"@radix-ui/react-use-rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" + integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== + dependencies: + "@radix-ui/rect" "1.1.1" + "@radix-ui/react-use-size@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" @@ -3766,6 +4007,13 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" +"@radix-ui/react-use-size@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" + integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-visually-hidden@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" @@ -3793,6 +4041,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== +"@radix-ui/rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" + integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== + "@rails/activestorage@^8.0.201": version "8.0.201" resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-8.0.201.tgz#2d6dd9e7be24b2d57c83124d8189a06f27c8278b" @@ -7187,7 +7440,7 @@ dependencies: "@types/geojson" "*" -"@types/geojson@*", "@types/geojson@^7946.0.13", "@types/geojson@^7946.0.7", "@types/geojson@^7946.0.8": +"@types/geojson@*", "@types/geojson@^7946.0.7", "@types/geojson@^7946.0.8": version "7946.0.13" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.13.tgz#e6e77ea9ecf36564980a861e24e62a095988775e" integrity sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ== @@ -8074,6 +8327,13 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" +aria-hidden@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== + dependencies: + tslib "^2.0.0" + aria-query@^5.0.0, aria-query@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" @@ -8867,11 +9127,6 @@ chownr@^2.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -chroma-js@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.4.2.tgz#dffc214ed0c11fa8eefca2c36651d8e57cbfb2b0" - integrity sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A== - chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -9712,6 +9967,11 @@ earcut@^2.0.0, earcut@^2.2.4: resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== +earcut@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-3.0.2.tgz#d478a29aaf99acf418151493048aa197d0512248" + integrity sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ== + earcut@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/earcut/-/earcut-3.0.1.tgz#f60b3f671c5657cca9d3e131c5527c5dde00ef38" @@ -10837,11 +11097,6 @@ geojson-rbush@3.x: "@types/geojson" "7946.0.8" rbush "^3.0.1" -geojson-vt@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" - integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== - geojson-vt@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-4.0.2.tgz#1162f6c7d61a0ba305b1030621e6e111f847828a" @@ -13087,10 +13342,10 @@ makeerror@1.0.12: resolved "https://registry.yarnpkg.com/empty-npm-package/-/empty-npm-package-1.0.0.tgz#fda29eb6de5efa391f73d578697853af55f6793a" integrity sha512-q4Mq/+XO7UNDdMiPpR/LIBIW1Zl4V0Z6UT9aKGqIAnBCtCb3lvZJM1KbDbdzdC8fKflwflModfjR29Nt0EpcwA== -maplibre-gl@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-3.6.2.tgz#abc2f34bddecabef8c20028eff06d62e36d75ccc" - integrity sha512-krg2KFIdOpLPngONDhP6ixCoWl5kbdMINP0moMSJFVX7wX1Clm2M9hlNKXS8vBGlVWwR5R3ZfI6IPrYz7c+aCQ== +maplibre-gl@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-4.5.0.tgz#aa5e6e214cb0cd35bc9a9f3c7417cb2092d96c58" + integrity sha512-qOS1hn4d/pn2i0uva4S5Oz+fACzTkgBKq+NpwT/Tqzi4MSyzcWNtDELzLUSgWqHfNIkGCl5CZ/w7dtis+t4RCw== dependencies: "@mapbox/geojson-rewind" "^0.5.2" "@mapbox/jsonlint-lines-primitives" "^2.0.2" @@ -13099,14 +13354,16 @@ maplibre-gl@^3.6.2: "@mapbox/unitbezier" "^0.0.1" "@mapbox/vector-tile" "^1.3.1" "@mapbox/whoots-js" "^3.1.0" - "@maplibre/maplibre-gl-style-spec" "^19.3.3" - "@types/geojson" "^7946.0.13" + "@maplibre/maplibre-gl-style-spec" "^20.3.0" + "@types/geojson" "^7946.0.14" + "@types/geojson-vt" "3.2.5" + "@types/junit-report-builder" "^3.0.2" "@types/mapbox__point-geometry" "^0.1.4" "@types/mapbox__vector-tile" "^1.3.4" "@types/pbf" "^3.0.5" "@types/supercluster" "^7.1.3" earcut "^2.2.4" - geojson-vt "^3.2.1" + geojson-vt "^4.0.2" gl-matrix "^3.4.3" global-prefix "^3.0.0" kdbush "^4.0.2" @@ -13118,10 +13375,10 @@ maplibre-gl@^3.6.2: tinyqueue "^2.0.3" vt-pbf "^3.1.3" -maplibre-gl@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-4.5.0.tgz#aa5e6e214cb0cd35bc9a9f3c7417cb2092d96c58" - integrity sha512-qOS1hn4d/pn2i0uva4S5Oz+fACzTkgBKq+NpwT/Tqzi4MSyzcWNtDELzLUSgWqHfNIkGCl5CZ/w7dtis+t4RCw== +maplibre-gl@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-4.7.1.tgz#06a524438ee2aafbe8bcd91002a4e01468ea5486" + integrity sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA== dependencies: "@mapbox/geojson-rewind" "^0.5.2" "@mapbox/jsonlint-lines-primitives" "^2.0.2" @@ -13130,25 +13387,24 @@ maplibre-gl@^4.0.0: "@mapbox/unitbezier" "^0.0.1" "@mapbox/vector-tile" "^1.3.1" "@mapbox/whoots-js" "^3.1.0" - "@maplibre/maplibre-gl-style-spec" "^20.3.0" + "@maplibre/maplibre-gl-style-spec" "^20.3.1" "@types/geojson" "^7946.0.14" "@types/geojson-vt" "3.2.5" - "@types/junit-report-builder" "^3.0.2" "@types/mapbox__point-geometry" "^0.1.4" "@types/mapbox__vector-tile" "^1.3.4" "@types/pbf" "^3.0.5" "@types/supercluster" "^7.1.3" - earcut "^2.2.4" + earcut "^3.0.0" geojson-vt "^4.0.2" gl-matrix "^3.4.3" - global-prefix "^3.0.0" + global-prefix "^4.0.0" kdbush "^4.0.2" murmurhash-js "^1.0.0" - pbf "^3.2.1" + pbf "^3.3.0" potpack "^2.0.0" - quickselect "^2.0.0" + quickselect "^3.0.0" supercluster "^8.0.1" - tinyqueue "^2.0.3" + tinyqueue "^3.0.0" vt-pbf "^3.1.3" maplibre-gl@^5.6.1: @@ -13864,10 +14120,10 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== -nanoid@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.4.tgz#d2b608d8169d7da669279127615535705aa52edf" - integrity sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig== +nanoid@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.6.tgz#30363f664797e7d40429f6c16946d6bd7a3f26c9" + integrity sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg== napi-postinstall@^0.3.0: version "0.3.0" @@ -14642,7 +14898,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -14923,14 +15179,6 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-draggable@^4.0.3, react-draggable@^4.4.6: - version "4.4.6" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.6.tgz#63343ee945770881ca1256a5b6fa5c9f5983fe1e" - integrity sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw== - dependencies: - clsx "^1.1.1" - prop-types "^15.8.1" - react-error-boundary@^4.0.12: version "4.0.12" resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.12.tgz#59f8f1dbc53bbbb34fc384c8db7cf4082cb63e2c" @@ -15049,6 +15297,14 @@ react-remove-scroll-bar@^2.3.4: react-style-singleton "^2.2.1" tslib "^2.0.0" +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== + dependencies: + react-style-singleton "^2.2.2" + tslib "^2.0.0" + react-remove-scroll@2.5.5: version "2.5.5" resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" @@ -15071,13 +15327,16 @@ react-remove-scroll@2.5.7: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-resizable@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" - integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w== +react-remove-scroll@^2.6.3: + version "2.7.2" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz#6442da56791117661978ae99cd29be9026fecca0" + integrity sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q== dependencies: - prop-types "15.x" - react-draggable "^4.0.3" + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.3" + tslib "^2.1.0" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.3" react-style-singleton@^2.2.1: version "2.2.1" @@ -15088,6 +15347,14 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" +react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== + dependencies: + get-nonce "^1.0.0" + tslib "^2.0.0" + react-syntax-highlighter@^15.6.1: version "15.6.1" resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz#fa567cb0a9f96be7bbccf2c13a3c4b5657d9543e" @@ -16992,6 +17259,13 @@ use-callback-ref@^1.3.0: dependencies: tslib "^2.0.0" +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== + dependencies: + tslib "^2.0.0" + use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" @@ -17000,6 +17274,14 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" +use-sidecar@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" + integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + use-sync-external-store@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" From 4864a9e8f7a46d9daf13c9ababccbd9681e6bd12 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 11:39:19 -0500 Subject: [PATCH 17/31] CDP #428 - Removing Zoom component from stories --- .../src/core-data/EventDetails.stories.js | 9 +---- .../core-data/PlaceLayersSelector.stories.js | 9 +---- .../src/core-data/PlaceMarkers.stories.js | 19 +-------- .../core-data/RelatedPlacesLayer.stories.js | 9 +---- .../src/geospatial/LocationMarkers.stories.js | 39 +------------------ .../WarpedImageLayerPeripleo.stories.js | 9 +---- 6 files changed, 12 insertions(+), 82 deletions(-) diff --git a/packages/storybook/src/core-data/EventDetails.stories.js b/packages/storybook/src/core-data/EventDetails.stories.js index b223c340b..876b4ed1d 100644 --- a/packages/storybook/src/core-data/EventDetails.stories.js +++ b/packages/storybook/src/core-data/EventDetails.stories.js @@ -1,8 +1,8 @@ // @flow import { faker } from '@faker-js/faker'; -import { Map, Zoom } from '@peripleo/maplibre'; -import { Controls, Peripleo } from '@peripleo/peripleo'; +import { Map } from '@peripleo/maplibre'; +import { Peripleo } from '@peripleo/peripleo'; import { action } from 'storybook/actions'; import React from 'react'; import _ from 'underscore'; @@ -48,11 +48,6 @@ export const RelatedRecords = withCoreDataContextProvider(() => { - - -
( - - -
( - - -
( - - -
( - - -
{ - - -
( - - -
( - - -
( - - -
( - - -
( - - -
( - - -
( - - -
( ]} style={mapStyle} > - - -
Date: Fri, 23 Jan 2026 11:45:59 -0500 Subject: [PATCH 18/31] CDP #428 - Fixing typos in GeoJSONLayer Test --- packages/geospatial/src/components/GeoJSONLayerTest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/geospatial/src/components/GeoJSONLayerTest.js b/packages/geospatial/src/components/GeoJSONLayerTest.js index 300ac6bff..c0ee82542 100644 --- a/packages/geospatial/src/components/GeoJSONLayerTest.js +++ b/packages/geospatial/src/components/GeoJSONLayerTest.js @@ -76,11 +76,11 @@ const GeoJSONLayerTest = (props: Props) => { } if (layerIds.has(`layer-${props.id}-line`)) { - map.setLayoutProperty(`layer-${props.id}-fill`, 'visibility', visible ? 'visible' : 'none'); + map.setLayoutProperty(`layer-${props.id}-line`, 'visibility', visible ? 'visible' : 'none'); } if (layerIds.has(`layer-${props.id}-point`)) { - map.setLayoutProperty(`layer-${props.id}-fill`, 'visibility', visible ? 'visible' : 'none'); + map.setLayoutProperty(`layer-${props.id}-point`, 'visibility', visible ? 'visible' : 'none'); } } }, [visible, map]); From 6836841e18fd50cc5cbfdb4be777b422646dd85f Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 13:49:17 -0500 Subject: [PATCH 19/31] CDP #428 - Updating Typesense utils getFeatures to expect geometries to be a hash of URLs --- packages/core-data/src/utils/Typesense.js | 40 +++++++---------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 9dba210bc..8e2492642 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -200,7 +200,8 @@ const toFeature = (record: any, item: any, geometry: any) => { name: record.name, names: record.names?.map((toponym: string) => ({ toponym })), type: record.type, - items: [item] + items: [item], + url: record.url }; const id = parseInt(record.record_id, 10); @@ -286,7 +287,6 @@ const getFeatures = (features, results, path, options) => { const objectPath = path.substring(0, path.lastIndexOf(ATTRIBUTE_DELIMITER)); const geometryPath = path.substring(path.lastIndexOf(ATTRIBUTE_DELIMITER) + 1, path.length); - // TODO: How to remove items that are no longer in the results? const placeIds = []; const recordIds = []; @@ -299,19 +299,19 @@ const getFeatures = (features, results, path, options) => { placeIds.push(place.uuid); let geometry; + let geometryUrl; if (options.geometries) { - geometry = getGeometryByHash(place, options.geometries); + geometryUrl = getGeometryUrl(place, options.geometries); } else { - geometry = getGeometryByPath(place, geometryPath); + geometry = getGeometry(place, geometryPath); } - const include = geometry && (!options.type || geometry.type === options.type); + const include = geometryUrl || (geometry && (!options.type || geometry.type === options.type)); if (include) { - const trimmedResult = trimResult(result, objectPath); - const record = _.find(newFeatures, (f) => f.properties?.uuid === place.uuid); + const trimmedResult = trimResult(result, objectPath); if (record) { const item = _.find(record.properties?.items, (item) => item.uuid === trimmedResult.uuid); @@ -320,7 +320,7 @@ const getFeatures = (features, results, path, options) => { record.properties?.items.push(trimmedResult); } } else { - newFeatures.push(toFeature(place, trimmedResult, geometry)); + newFeatures.push(toFeature({ ...place, url: geometryUrl }, trimmedResult, geometry)); } } }); @@ -338,32 +338,16 @@ const getFeatures = (features, results, path, options) => { const createFeatureCollection = (features) => featureCollection(features); -const getGeometryByPath = (place, path) => { +const getGeometry = (place, path) => { return _.get(place, path); }; -const getGeometryByHash = (place, hash) => { +const getGeometryUrl = (place, hash) => { const object = hash[place?.uuid]; - return object?.geometry; + return object?.url; }; -const trimResult = (result, objectPath) => { - return _.pick(result, 'id', 'uuid', 'record_id', 'name', 'names'); - // let value = { ...result }; - // - // const relatedRecords = _.get(result, objectPath); - // - // if (relatedRecords) { - // const trimmedPlaces = _.map(relatedRecords, (r) => ({ ...r, geometry: undefined })); - // value = ObjectUtils.setNestedValue(value, objectPath, trimmedPlaces); - // } - // - // value._rawTypesenseHit = undefined; - // value._snippetResult = undefined; - // value._highlightResult = undefined; - // - // return value; -}; +const trimResult = (result) => _.pick(result, 'id', 'uuid', 'record_id', 'name', 'names'); export default { createCachedHits, From 68e5d1689b57669cea1f18d4872d33a9f8c5e3ce Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 13:54:46 -0500 Subject: [PATCH 20/31] CDP #428 - Updating Typesense utils to not truncate empty geometries --- packages/core-data/src/utils/Typesense.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 8e2492642..fdbc643c8 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -205,9 +205,13 @@ const toFeature = (record: any, item: any, geometry: any) => { }; const id = parseInt(record.record_id, 10); - const data = feature(geometry, properties, { id }); + let data = feature(geometry, properties, { id }); - return truncate(data, { precision: 3, coordinates: 2 }); + if (geometry) { + data = truncate(data, { precision: 3, coordinates: 2 }); + } + + return data; }; /** From c441334ddae53f262ca875a218478cbfbed2fd1d Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 23 Jan 2026 14:33:17 -0500 Subject: [PATCH 21/31] CDP #428 - Adding visibility prop to GeoJSONLayerTest --- .../geospatial/src/components/GeoJSONLayerTest.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/geospatial/src/components/GeoJSONLayerTest.js b/packages/geospatial/src/components/GeoJSONLayerTest.js index c0ee82542..5f5d663e7 100644 --- a/packages/geospatial/src/components/GeoJSONLayerTest.js +++ b/packages/geospatial/src/components/GeoJSONLayerTest.js @@ -113,6 +113,9 @@ const GeoJSONLayerTest = (props: Props) => { ...fillStyle, source: `source-${id}`, filter: ['!=', '$type', 'Point'], + layout: { + visibility: visible ? 'visible' : 'none' + }, metadata: { interactive: props.interactive } @@ -122,7 +125,10 @@ const GeoJSONLayerTest = (props: Props) => { id: `layer-${id}-line`, ...strokeStyle, source: `source-${id}`, - filter: ['!=', '$type', 'Point'] + filter: ['!=', '$type', 'Point'], + layout: { + visibility: visible ? 'visible' : 'none' + } }); } @@ -131,6 +137,9 @@ const GeoJSONLayerTest = (props: Props) => { ...pointStyle, filter: ['==', '$type', 'Point'], source: `source-${id}`, + layout: { + visibility: visible ? 'visible' : 'none' + }, metadata: { interactive: props.interactive } From f437ea3c8e2116938d8a3d4d6e489a16921dddeb Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Tue, 27 Jan 2026 15:44:53 -0500 Subject: [PATCH 22/31] CDP #428 - Adding layerId property to features --- packages/core-data/src/utils/Typesense.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index fdbc643c8..c7216ae31 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -304,11 +304,14 @@ const getFeatures = (features, results, path, options) => { let geometry; let geometryUrl; + let layerId; if (options.geometries) { geometryUrl = getGeometryUrl(place, options.geometries); + layerId = `layer-${place.uuid}-fill`; } else { geometry = getGeometry(place, geometryPath); + layerId = `layer-${place.uuid}-point`; } const include = geometryUrl || (geometry && (!options.type || geometry.type === options.type)); @@ -324,7 +327,7 @@ const getFeatures = (features, results, path, options) => { record.properties?.items.push(trimmedResult); } } else { - newFeatures.push(toFeature({ ...place, url: geometryUrl }, trimmedResult, geometry)); + newFeatures.push(toFeature({ ...place, layerId, url: geometryUrl }, trimmedResult, geometry)); } } }); From 3a0e474e04303dcea552776c3555680eb0eb09e8 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Tue, 27 Jan 2026 15:50:02 -0500 Subject: [PATCH 23/31] CDP #428 - Adding layerId property to features --- packages/core-data/src/utils/Typesense.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index c7216ae31..6577061b5 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -201,7 +201,8 @@ const toFeature = (record: any, item: any, geometry: any) => { names: record.names?.map((toponym: string) => ({ toponym })), type: record.type, items: [item], - url: record.url + url: record.url, + layerId: record.layerId }; const id = parseInt(record.record_id, 10); From c5b8ed80c880b1619eada90d993c67fb3f00cf2b Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 28 Jan 2026 11:46:40 -0500 Subject: [PATCH 24/31] CDP #428 - Refactoring utility classes --- packages/core-data/src/utils/Typesense.js | 75 +++++++++++++++-------- packages/geospatial/src/utils/Map.js | 38 +++++++++++- 2 files changed, 87 insertions(+), 26 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 6577061b5..1ac957f60 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -1,6 +1,7 @@ // @flow import { ObjectJs as ObjectUtils } from '@performant-software/shared-components'; +import { Map as MapUtils } from '@performant-software/geospatial'; import { feature, featureCollection, truncate } from '@turf/turf'; import { history } from 'instantsearch.js/es/lib/routers'; import TypesenseInstantsearchAdapter from 'typesense-instantsearch-adapter'; @@ -166,6 +167,31 @@ const getFieldId = (attribute: string) => { return value; }; +/** + * Returns the geometry object for the passed place/path. + * + * @param place + * @param path + * + * @returns {*} + */ +const getGeometry = (place, path) => { + return _.get(place, path); +}; + +/** + * Returns the geometry URL for the passed place. + * + * @param place + * @param hash + * + * @returns {*} + */ +const getGeometryUrl = (place, hash) => { + const object = hash[place?.uuid]; + return object?.url; +}; + /** * Takes a ._facet formatted attribute and returns the parsed relationship UUID. * @@ -189,6 +215,8 @@ const getRelationshipId = (attribute: string) => { * @param geometry * * @returns {Feature<*, {ccode: [], record_id: *, names: *, name: *, id: *, title: *, type: *, uuid: *, items: [*]}>} + * + * @deprecated */ const toFeature = (record: any, item: any, geometry: any) => { const properties = { @@ -223,6 +251,8 @@ const toFeature = (record: any, item: any, geometry: any) => { * @param options * * @returns {FeatureCollection} + * + * @deprecated */ const toFeatureCollection = (results: Array, path: string, options: Options = {}) => { const features = []; @@ -238,17 +268,7 @@ const toFeatureCollection = (results: Array, path: string, options: Options } _.each(geometryObjects, (geometryObject) => { - let geometry; - let transform = false; - - // TODO: Comment me! - if (options.geometries) { // TODO: Check for empty - const object = options.geometries[geometryObject?.uuid]; - geometry = object?.geometry; - } else { - geometry = _.get(geometryObject, geometryPath); - transform = true; - } + const geometry = _.get(geometryObject, geometryPath); const include = geometry && (!options.type || geometry.type === options.type); @@ -259,7 +279,7 @@ const toFeatureCollection = (results: Array, path: string, options: Options const relatedRecords = _.get(result, objectPath); - if (relatedRecords && transform) { + if (relatedRecords) { trimmedResult = ObjectUtils.setNestedValue( result, objectPath, @@ -286,6 +306,16 @@ const toFeatureCollection = (results: Array, path: string, options: Options return featureCollection(features); }; +/** + * Returns a set of GeoJSON features for the passed results. + * + * @param features + * @param results + * @param path + * @param options + * + * @returns {*} + */ const getFeatures = (features, results, path, options) => { const newFeatures = [...features]; @@ -328,7 +358,7 @@ const getFeatures = (features, results, path, options) => { record.properties?.items.push(trimmedResult); } } else { - newFeatures.push(toFeature({ ...place, layerId, url: geometryUrl }, trimmedResult, geometry)); + newFeatures.push(MapUtils.toFeature({ ...place, layerId, url: geometryUrl }, trimmedResult, geometry)); } } }); @@ -344,22 +374,17 @@ const getFeatures = (features, results, path, options) => { })); }; -const createFeatureCollection = (features) => featureCollection(features); - -const getGeometry = (place, path) => { - return _.get(place, path); -}; - -const getGeometryUrl = (place, hash) => { - const object = hash[place?.uuid]; - return object?.url; -}; - +/** + * Trims the Typesense document to only include data needed for map visualizations. + * + * @param result + * + * @returns {*} + */ const trimResult = (result) => _.pick(result, 'id', 'uuid', 'record_id', 'name', 'names'); export default { createCachedHits, - createFeatureCollection, createRouting, createTypesenseAdapter, getDate, diff --git a/packages/geospatial/src/utils/Map.js b/packages/geospatial/src/utils/Map.js index bd039578a..6d599627b 100644 --- a/packages/geospatial/src/utils/Map.js +++ b/packages/geospatial/src/utils/Map.js @@ -1,7 +1,7 @@ // @flow import { WarpedMapLayer } from '@allmaps/maplibre'; -import { bbox, bboxPolygon, buffer } from '@turf/turf'; +import { bbox, bboxPolygon, buffer, feature, featureCollection, truncate } from '@turf/turf'; import _ from 'underscore'; const MIN_LATITUDE = -90; @@ -73,6 +73,40 @@ const getBoundingBox = (data, bufferDistance = null) => { */ const removeLayer = (map, layerId) => map && map.removeLayer(layerId); +const toFeature = (record: any, item: any, geometry: any) => { + const properties = { + id: record.record_id, + ccode: [], + title: record.name, + uuid: record.uuid, + record_id: record.record_id, + name: record.name, + names: record.names?.map((toponym: string) => ({ toponym })), + type: record.type, + items: [item], + url: record.url, + layerId: record.layerId + }; + + const id = parseInt(record.record_id, 10); + let data = feature(geometry, properties, { id }); + + if (geometry) { + data = truncate(data, { precision: 3, coordinates: 2 }); + } + + return data; +}; + +/** + * Returns a feature collection for the passed set of features. + * + * @param features + * + * @returns {FeatureCollection} + */ +const toFeatureCollection = (features: Array) => featureCollection(features); + /** * Validates that the passed bounding box contains finite coordinates. * @@ -108,6 +142,8 @@ export default { addGeoreferenceLayer, getBoundingBox, removeLayer, + toFeature, + toFeatureCollection, validateBoundingBox, validateCoordinates }; From cabdfda413aa2aba2aee2cc3d4507c32a035b66b Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 28 Jan 2026 14:45:03 -0500 Subject: [PATCH 25/31] CDP #428 - Making getFeatures options argument optional --- packages/core-data/src/utils/Typesense.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 1ac957f60..bffda0e25 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -316,7 +316,7 @@ const toFeatureCollection = (results: Array, path: string, options: Options * * @returns {*} */ -const getFeatures = (features, results, path, options) => { +const getFeatures = (features, results, path, options = {}) => { const newFeatures = [...features]; const objectPath = path.substring(0, path.lastIndexOf(ATTRIBUTE_DELIMITER)); From 573500cb5060d3dbc39e0cdae3013fd13b096650 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 28 Jan 2026 16:27:35 -0500 Subject: [PATCH 26/31] CDP #428 - Updating toFeature function to truncate geometry data, rather than feature --- packages/geospatial/src/utils/Map.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/geospatial/src/utils/Map.js b/packages/geospatial/src/utils/Map.js index 6d599627b..111bccba8 100644 --- a/packages/geospatial/src/utils/Map.js +++ b/packages/geospatial/src/utils/Map.js @@ -89,13 +89,9 @@ const toFeature = (record: any, item: any, geometry: any) => { }; const id = parseInt(record.record_id, 10); - let data = feature(geometry, properties, { id }); + const data = geometry ? truncate(geometry, { precision: 3, coordinates: 2 }) : geometry; - if (geometry) { - data = truncate(data, { precision: 3, coordinates: 2 }); - } - - return data; + return feature(data, properties, { id }); }; /** From d5507da6f52629f2561a6887a2f75ee05a9d2e00 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Wed, 28 Jan 2026 21:06:43 -0500 Subject: [PATCH 27/31] CDP #428 - Fixing an issue with place geometries in getFeatures --- packages/core-data/src/utils/Typesense.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index bffda0e25..8fa5bee51 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -328,7 +328,7 @@ const getFeatures = (features, results, path, options = {}) => { _.each(results, (result) => { recordIds.push(result.uuid); - const places = _.isEmpty(objectPath) ? result : ObjectUtils.getNestedValue(result, objectPath); + const places = _.isEmpty(objectPath) ? [result] : ObjectUtils.getNestedValue(result, objectPath); _.each(places, (place) => { placeIds.push(place.uuid); From a91f06e98b962ba339b3e4f6726942fbdef9429a Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 29 Jan 2026 12:33:11 -0500 Subject: [PATCH 28/31] CDP #428 - Removing GeoJSONLayerTest component; Updating Peripleo packages --- packages/controlled-vocabulary/package.json | 6 +- packages/core-data/package.json | 10 +- packages/core-data/src/utils/Typesense.js | 2 - packages/geospatial/package.json | 4 +- .../src/components/GeoJSONLayerTest.js | 190 ------------------ .../src/components/LocationMarkers.js | 3 +- packages/geospatial/src/utils/Map.js | 23 ++- packages/semantic-ui/package.json | 4 +- packages/shared/package.json | 2 +- packages/user-defined-fields/package.json | 6 +- packages/visualize/package.json | 2 +- 11 files changed, 39 insertions(+), 213 deletions(-) delete mode 100644 packages/geospatial/src/components/GeoJSONLayerTest.js diff --git a/packages/controlled-vocabulary/package.json b/packages/controlled-vocabulary/package.json index 2d28acd6d..7061315f0 100644 --- a/packages/controlled-vocabulary/package.json +++ b/packages/controlled-vocabulary/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/controlled-vocabulary", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of components to allow user to configure dropdown elements. Use with the \"controlled_vocabulary\" gem.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -23,8 +23,8 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@performant-software/semantic-components": "^3.1.13-beta.14", - "@performant-software/shared-components": "^3.1.13-beta.14", + "@performant-software/semantic-components": "^3.1.13-beta.25", + "@performant-software/shared-components": "^3.1.13-beta.25", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/core-data/package.json b/packages/core-data/package.json index c8874bef6..95855f622 100644 --- a/packages/core-data/package.json +++ b/packages/core-data/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/core-data", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of components used with the Core Data platform.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -48,10 +48,10 @@ "underscore": "^1.13.2" }, "peerDependencies": { - "@performant-software/geospatial": "^3.1.13-beta.14", - "@performant-software/shared-components": "^3.1.13-beta.14", - "@peripleo/maplibre": "^0.8.8", - "@peripleo/peripleo": "^0.8.8", + "@performant-software/geospatial": "^3.1.13-beta.25", + "@performant-software/shared-components": "^3.1.13-beta.25", + "@peripleo/maplibre": "^0.8.9", + "@peripleo/peripleo": "^0.8.9", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0", "tailwindcss": "^4.1.4" diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 8fa5bee51..2d950e6d2 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -339,10 +339,8 @@ const getFeatures = (features, results, path, options = {}) => { if (options.geometries) { geometryUrl = getGeometryUrl(place, options.geometries); - layerId = `layer-${place.uuid}-fill`; } else { geometry = getGeometry(place, geometryPath); - layerId = `layer-${place.uuid}-point`; } const include = geometryUrl || (geometry && (!options.type || geometry.type === options.type)); diff --git a/packages/geospatial/package.json b/packages/geospatial/package.json index 9b4c05556..ff8a0df09 100644 --- a/packages/geospatial/package.json +++ b/packages/geospatial/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/geospatial", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of components for all things map-related.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -29,7 +29,7 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@peripleo/maplibre": "^0.8.8", + "@peripleo/maplibre": "^0.8.9", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/geospatial/src/components/GeoJSONLayerTest.js b/packages/geospatial/src/components/GeoJSONLayerTest.js deleted file mode 100644 index 5f5d663e7..000000000 --- a/packages/geospatial/src/components/GeoJSONLayerTest.js +++ /dev/null @@ -1,190 +0,0 @@ -// @flow - -import React, { type ReactNode, useEffect, useState } from 'react'; -import { Map } from 'maplibre-gl'; -import { - HoverTooltip, - removeLayerIfExists, - removeSourceIfExists, - useLoadedMap -} from '@peripleo/maplibre'; -import MapStyles from '../utils/MapStyles'; - -type Props = { - - cluster?: boolean, - - clusterMaxZoom?: number, - - clusterMinPoints?: number, - - clusterProperties?: any, - - clusterRadius?: number, - - data: any, - - fillStyle?: Object, - - id: string, - - interactive?: boolean, - - pointStyle?: Object, - - tooltip?: (hoverState: any) => ReactNode, - - strokeStyle?: Object, - - visible?: boolean, - - onLoad?: () => void - -}; - -const setStyle = (map: typeof Map, layerId: string, style: any) => { - if (!map) return; - - Object - .entries(style.paint) - .forEach(([key, value]) => - map.setPaintProperty(layerId, key, value)); -}; - -const GeoJSONLayerTest = (props: Props) => { - - const { id, data } = props; - - const visible = props.visible === undefined ? true : props.visible; - - const fillStyle = props.fillStyle || MapStyles.fill; - - const strokeStyle = props.strokeStyle || MapStyles.stroke; - - const pointStyle = props.pointStyle || MapStyles.point; - - const map = useLoadedMap(); - - const [sourceId, setSourceId] = useState(); - - useEffect(() => { - if (map) { - const layerIds = new Set(map.getStyle().layers.map(l => l.id)); - - if (layerIds.has(`layer-${props.id}-fill`)) { - map.setLayoutProperty(`layer-${props.id}-fill`, 'visibility', visible ? 'visible' : 'none'); - } - - if (layerIds.has(`layer-${props.id}-line`)) { - map.setLayoutProperty(`layer-${props.id}-line`, 'visibility', visible ? 'visible' : 'none'); - } - - if (layerIds.has(`layer-${props.id}-point`)) { - map.setLayoutProperty(`layer-${props.id}-point`, 'visibility', visible ? 'visible' : 'none'); - } - } - }, [visible, map]); - - useEffect(() => { - if (!map) return; - - const sourceId = `source-${id}`; - - map.addSource(sourceId, { - type: 'geojson', - // @ts-ignore - data, - // Note that mapLibre checks by key, and will fail if cluster args - // are undefined. Therefore we need to add on demand. - ...(props.cluster && { cluster: true }), - ...(props.clusterRadius !== undefined && { clusterRadius: props.clusterRadius }), - ...(props.clusterMaxZoom !== undefined && { clusterMaxZoom: props.clusterMaxZoom }), - ...(props.clusterMinPoints !== undefined && { clusterMinPoints: props.clusterMinPoints }), - ...(props.clusterProperties !== undefined && { clusterProperties: props.clusterProperties }) - }); - - // Map emits 'IDLE' event when the source is fully loaded - if (props.onLoad) - map.once('idle', () => props.onLoad()); - - if (!props.cluster) { - map.addLayer({ - id: `layer-${id}-fill`, - ...fillStyle, - source: `source-${id}`, - filter: ['!=', '$type', 'Point'], - layout: { - visibility: visible ? 'visible' : 'none' - }, - metadata: { - interactive: props.interactive - } - }); - - map.addLayer({ - id: `layer-${id}-line`, - ...strokeStyle, - source: `source-${id}`, - filter: ['!=', '$type', 'Point'], - layout: { - visibility: visible ? 'visible' : 'none' - } - }); - } - - map.addLayer({ - id: `layer-${id}-point`, - ...pointStyle, - filter: ['==', '$type', 'Point'], - source: `source-${id}`, - layout: { - visibility: visible ? 'visible' : 'none' - }, - metadata: { - interactive: props.interactive - } - }); - - setSourceId(sourceId); - - setTimeout(() => map.moveLayer(`layer-${id}-point`), 10); - - return () => { - removeLayerIfExists(map, `layer-${id}-point`); - removeLayerIfExists(map, `layer-${id}-line`); - removeLayerIfExists(map, `layer-${id}-fill`); - - removeSourceIfExists(map, sourceId); - }; - }, [map]); - - useEffect(() => { - if (!sourceId) return; - - // @ts-ignore - map.getSource(sourceId).setData(data); - }, [sourceId, data]); - - useEffect(() => { - if (!props.cluster) - setStyle(map, `layer-${id}-fill`, props.fillStyle|| MapStyles.fill); - }, [props.fillStyle, props.cluster]); - - useEffect(() => { - if (!props.cluster) - setStyle(map, `layer-${id}-line`, props.strokeStyle|| MapStyles.stroke); - }, [props.strokeStyle, props.cluster]); - - useEffect(() => { - setStyle(map, `layer-${id}-point`, props.pointStyle|| MapStyles.point); - }, [props.pointStyle]); - - return props.tooltip ? ( - - ) : null; - -}; - -export default GeoJSONLayerTest; \ No newline at end of file diff --git a/packages/geospatial/src/components/LocationMarkers.js b/packages/geospatial/src/components/LocationMarkers.js index ce4ac3a4a..ebfadc7f2 100644 --- a/packages/geospatial/src/components/LocationMarkers.js +++ b/packages/geospatial/src/components/LocationMarkers.js @@ -1,7 +1,6 @@ // @flow -import { PulsingMarkerLayer, useLoadedMap } from '@peripleo/maplibre'; -import GeoJSONLayer from './GeoJSONLayerTest'; +import { GeoJSONLayer, PulsingMarkerLayer, useLoadedMap } from '@peripleo/maplibre'; import React, { useEffect, useMemo } from 'react'; import _ from 'underscore'; import MapStyles from '../utils/MapStyles'; diff --git a/packages/geospatial/src/utils/Map.js b/packages/geospatial/src/utils/Map.js index 111bccba8..00fabfbb0 100644 --- a/packages/geospatial/src/utils/Map.js +++ b/packages/geospatial/src/utils/Map.js @@ -73,6 +73,26 @@ const getBoundingBox = (data, bufferDistance = null) => { */ const removeLayer = (map, layerId) => map && map.removeLayer(layerId); +/** + * Wraps the passed record in a feature. + * + * @param record + * @param item + * @param geometry + * + * @returns {Feature} + */ const toFeature = (record: any, item: any, geometry: any) => { const properties = { id: record.record_id, @@ -84,8 +104,7 @@ const toFeature = (record: any, item: any, geometry: any) => { names: record.names?.map((toponym: string) => ({ toponym })), type: record.type, items: [item], - url: record.url, - layerId: record.layerId + url: record.url }; const id = parseInt(record.record_id, 10); diff --git a/packages/semantic-ui/package.json b/packages/semantic-ui/package.json index 462d5902b..d9e0e1145 100644 --- a/packages/semantic-ui/package.json +++ b/packages/semantic-ui/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/semantic-components", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of shared components based on the Semantic UI Framework.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -35,7 +35,7 @@ "zotero-translation-client": "^5.0.1" }, "peerDependencies": { - "@performant-software/shared-components": "^3.1.13-beta.14", + "@performant-software/shared-components": "^3.1.13-beta.25", "@samvera/clover-iiif": "^2.3.2", "react": ">= 16.13.1 < 19.0.0", "react-dnd": "^16.0.1", diff --git a/packages/shared/package.json b/packages/shared/package.json index 3473639b9..951bf7295 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/shared-components", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of shared, framework agnostic, components.", "license": "MIT", "main": "./dist/index.cjs.js", diff --git a/packages/user-defined-fields/package.json b/packages/user-defined-fields/package.json index 0e57ce4fe..718c619cb 100644 --- a/packages/user-defined-fields/package.json +++ b/packages/user-defined-fields/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/user-defined-fields", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of components used for allowing end users to define fields on models. Use with the \"user_defined_fields\" gem.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -23,8 +23,8 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@performant-software/semantic-components": "^3.1.13-beta.14", - "@performant-software/shared-components": "^3.1.13-beta.14", + "@performant-software/semantic-components": "^3.1.13-beta.25", + "@performant-software/shared-components": "^3.1.13-beta.25", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/visualize/package.json b/packages/visualize/package.json index b6b20f0c5..13705f738 100644 --- a/packages/visualize/package.json +++ b/packages/visualize/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/visualize", - "version": "3.1.13-beta.14", + "version": "3.1.13-beta.25", "description": "A package of components used for data visualization", "license": "MIT", "main": "./dist/index.cjs.js", From 4514180a8d8410f2390c1cb20fa571671e8bf779 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 29 Jan 2026 12:54:45 -0500 Subject: [PATCH 29/31] CDP #428 - Reverting beta package versions --- packages/controlled-vocabulary/package.json | 6 +++--- packages/core-data/package.json | 6 +++--- packages/geospatial/package.json | 2 +- packages/semantic-ui/package.json | 4 ++-- packages/shared/package.json | 2 +- packages/user-defined-fields/package.json | 6 +++--- packages/visualize/package.json | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/controlled-vocabulary/package.json b/packages/controlled-vocabulary/package.json index 7061315f0..2c64ce417 100644 --- a/packages/controlled-vocabulary/package.json +++ b/packages/controlled-vocabulary/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/controlled-vocabulary", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of components to allow user to configure dropdown elements. Use with the \"controlled_vocabulary\" gem.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -23,8 +23,8 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@performant-software/semantic-components": "^3.1.13-beta.25", - "@performant-software/shared-components": "^3.1.13-beta.25", + "@performant-software/semantic-components": "^3.1.12", + "@performant-software/shared-components": "^3.1.12", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/core-data/package.json b/packages/core-data/package.json index 95855f622..ede3afdde 100644 --- a/packages/core-data/package.json +++ b/packages/core-data/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/core-data", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of components used with the Core Data platform.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -48,8 +48,8 @@ "underscore": "^1.13.2" }, "peerDependencies": { - "@performant-software/geospatial": "^3.1.13-beta.25", - "@performant-software/shared-components": "^3.1.13-beta.25", + "@performant-software/geospatial": "^3.1.12", + "@performant-software/shared-components": "^3.1.12", "@peripleo/maplibre": "^0.8.9", "@peripleo/peripleo": "^0.8.9", "react": ">= 16.13.1 < 19.0.0", diff --git a/packages/geospatial/package.json b/packages/geospatial/package.json index ff8a0df09..f92a9c515 100644 --- a/packages/geospatial/package.json +++ b/packages/geospatial/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/geospatial", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of components for all things map-related.", "license": "MIT", "main": "./dist/index.cjs.js", diff --git a/packages/semantic-ui/package.json b/packages/semantic-ui/package.json index d9e0e1145..02476913c 100644 --- a/packages/semantic-ui/package.json +++ b/packages/semantic-ui/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/semantic-components", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of shared components based on the Semantic UI Framework.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -35,7 +35,7 @@ "zotero-translation-client": "^5.0.1" }, "peerDependencies": { - "@performant-software/shared-components": "^3.1.13-beta.25", + "@performant-software/shared-components": "^3.1.12", "@samvera/clover-iiif": "^2.3.2", "react": ">= 16.13.1 < 19.0.0", "react-dnd": "^16.0.1", diff --git a/packages/shared/package.json b/packages/shared/package.json index 951bf7295..d833712c4 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/shared-components", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of shared, framework agnostic, components.", "license": "MIT", "main": "./dist/index.cjs.js", diff --git a/packages/user-defined-fields/package.json b/packages/user-defined-fields/package.json index 718c619cb..dd2420666 100644 --- a/packages/user-defined-fields/package.json +++ b/packages/user-defined-fields/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/user-defined-fields", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of components used for allowing end users to define fields on models. Use with the \"user_defined_fields\" gem.", "license": "MIT", "main": "./dist/index.cjs.js", @@ -23,8 +23,8 @@ "underscore": "^1.13.7" }, "peerDependencies": { - "@performant-software/semantic-components": "^3.1.13-beta.25", - "@performant-software/shared-components": "^3.1.13-beta.25", + "@performant-software/semantic-components": "^3.1.12", + "@performant-software/shared-components": "^3.1.12", "react": ">= 16.13.1 < 19.0.0", "react-dom": ">= 16.13.1 < 19.0.0" }, diff --git a/packages/visualize/package.json b/packages/visualize/package.json index 13705f738..533a4eb7e 100644 --- a/packages/visualize/package.json +++ b/packages/visualize/package.json @@ -1,6 +1,6 @@ { "name": "@performant-software/visualize", - "version": "3.1.13-beta.25", + "version": "3.1.12", "description": "A package of components used for data visualization", "license": "MIT", "main": "./dist/index.cjs.js", From e370d4fd160eb450945d381d771c514a316f480d Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Thu, 29 Jan 2026 12:56:45 -0500 Subject: [PATCH 30/31] CDP #428 - Updating Storybook Peripleo dependency to the latest version --- packages/storybook/package.json | 4 ++-- yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 40c3aeb92..a9833519f 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -17,8 +17,8 @@ "@bunchtogether/vite-plugin-flow": "^1.0.2", "@faker-js/faker": "^8.0.2", "@headlessui/react": "^1.7.18", - "@peripleo/maplibre": "^0.8.8", - "@peripleo/peripleo": "^0.8.8", + "@peripleo/maplibre": "^0.8.9", + "@peripleo/peripleo": "^0.8.9", "@storybook/addon-a11y": "9.0.17", "@storybook/addon-docs": "9.0.17", "@storybook/addon-links": "9.0.17", diff --git a/yarn.lock b/yarn.lock index 187bc1d52..f1baa62af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3106,10 +3106,10 @@ remark-rehype "^11.1.0" unified "^11.0.4" -"@peripleo/maplibre@^0.8.8": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@peripleo/maplibre/-/maplibre-0.8.8.tgz#4b1fda3c2e7aa62b38950d2258d906ac62a55fb0" - integrity sha512-PjyxyI9Fa1Q37ly63AolTOkYS/UuIc7uuBRnTR/v69LwxwuU5K5IzB8lo9Bu7O4jNbVtukm63dydVgq12TWQZQ== +"@peripleo/maplibre@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@peripleo/maplibre/-/maplibre-0.8.9.tgz#62c9d74e120a4a71077c747e58fbf454c15dfcac" + integrity sha512-+eUjeO49e/Hdvcp95RiFLMxCFiHv2gcgNhGbqdAgSS3qWq7C3eII8hOIZdCpUgj+y80sR4i26mZl64P64lqTZQ== dependencies: "@floating-ui/react" "^0.27.16" "@phosphor-icons/react" "^2.1.10" @@ -3117,10 +3117,10 @@ maplibre-gl "^4.7.1" nanoid "^5.1.6" -"@peripleo/peripleo@^0.8.8": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@peripleo/peripleo/-/peripleo-0.8.8.tgz#721d01cc567c4fbb0408a6fcf42d588ad0c7eb4e" - integrity sha512-4Jh9dxdsUTJWnFyQGVUlfZ3hpyqZ1DxYynGEaxJw3ebrezmgPlzG2ojPEeSzN5l+iHhW/Z6Yx0TG3IRbF9ZhVA== +"@peripleo/peripleo@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@peripleo/peripleo/-/peripleo-0.8.9.tgz#ccd638dfba13496975fb362071b89ea77f335d2a" + integrity sha512-t3S3AZW92wbNIwAK8kn1icim7ILLHnKG0FJCaiDQ4gcor150Ez9OfbyPWDsKUZIH9o5+QzYbVB9R9M8fAe70Og== "@phosphor-icons/react@^2.1.10": version "2.1.10" From 16b91fa3690f4ca32f89ebcd7dfb8951297c1030 Mon Sep 17 00:00:00 2001 From: dleadbetter Date: Fri, 30 Jan 2026 08:48:22 -0500 Subject: [PATCH 31/31] CDP #428 - Removing truncate function from deprecated function; Code cleanup --- packages/core-data/src/utils/Typesense.js | 8 +------- packages/geospatial/src/utils/Map.js | 9 ++++++++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/core-data/src/utils/Typesense.js b/packages/core-data/src/utils/Typesense.js index 2d950e6d2..77af2bd7d 100644 --- a/packages/core-data/src/utils/Typesense.js +++ b/packages/core-data/src/utils/Typesense.js @@ -234,13 +234,7 @@ const toFeature = (record: any, item: any, geometry: any) => { }; const id = parseInt(record.record_id, 10); - let data = feature(geometry, properties, { id }); - - if (geometry) { - data = truncate(data, { precision: 3, coordinates: 2 }); - } - - return data; + return feature(geometry, properties, { id }); }; /** diff --git a/packages/geospatial/src/utils/Map.js b/packages/geospatial/src/utils/Map.js index 00fabfbb0..fdd055b37 100644 --- a/packages/geospatial/src/utils/Map.js +++ b/packages/geospatial/src/utils/Map.js @@ -1,7 +1,14 @@ // @flow import { WarpedMapLayer } from '@allmaps/maplibre'; -import { bbox, bboxPolygon, buffer, feature, featureCollection, truncate } from '@turf/turf'; +import { + bbox, + bboxPolygon, + buffer, + feature, + featureCollection, + truncate +} from '@turf/turf'; import _ from 'underscore'; const MIN_LATITUDE = -90;