From 07d160bbfdcb75234b6d3ff90b77005902a0774f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gunnar=20Ingi=20Stef=C3=A1nsson?= Date: Thu, 7 Nov 2024 15:59:25 +0100 Subject: [PATCH] - snapping - adjusts the height of the volum and origin visualization to match the selections height --- app/components/arcgis/sketch/sketch.tsx | 55 +- .../sketch/tools/create-extent-tool.tsx | 13 +- .../arcgis/sketch/tools/create-point-tool.tsx | 4 + .../selection/selection-graphic.tsx | 30 +- .../selection-tools/create-selection-tool.tsx | 12 +- .../selection-tools/update-origin-tool.tsx | 29 +- app/hooks/queries/elevation-query.tsx | 42 +- app/symbology/symbology.tsx | 25 +- package-lock.json | 477 +++++++++++------- package.json | 6 +- tsconfig.json | 2 +- 11 files changed, 478 insertions(+), 217 deletions(-) diff --git a/app/components/arcgis/sketch/sketch.tsx b/app/components/arcgis/sketch/sketch.tsx index ea95c82..1a9a296 100644 --- a/app/components/arcgis/sketch/sketch.tsx +++ b/app/components/arcgis/sketch/sketch.tsx @@ -4,6 +4,18 @@ import { useSceneView } from "../views/scene-view/scene-view-context"; import { ForwardedRef, PropsWithChildren, createContext, memo, useContext, useEffect } from "react"; import useProvideRef from "~/hooks/useProvideRef"; import { SketchToolManager } from "./tools/create-tool"; +import FeatureSnappingLayerSource from "@arcgis/core/views/interactive/snapping/FeatureSnappingLayerSource.js"; +import Layer from "@arcgis/core/layers/Layer"; +import type BuildingSceneLayer from '@arcgis/core/layers/BuildingSceneLayer'; +import type CSVLayer from '@arcgis/core/layers/CSVLayer'; +import type FeatureLayer from '@arcgis/core/layers/FeatureLayer'; +import type GeoJSONLayer from '@arcgis/core/layers/GeoJSONLayer'; +import type GraphicsLayer from '@arcgis/core/layers/GraphicsLayer'; +import type MapNotesLayer from '@arcgis/core/layers/MapNotesLayer'; +import type SceneLayer from '@arcgis/core/layers/SceneLayer'; +import type WFSLayer from '@arcgis/core/layers/WFSLayer'; +import { useWatch } from "~/hooks/reactive"; +import Collection from '@arcgis/core/core/Collection'; interface SketchProps { ref?: ForwardedRef; @@ -61,7 +73,11 @@ export default function Sketch({ ref, children, disableZ = false }: PropsWithChi */ defaultCreateOptions: { hasZ: !disableZ - } + }, + snappingOptions: { + featureEnabled: true, + }, + updateOnGraphicClick: false, })); useEffect(() => { @@ -75,6 +91,18 @@ export default function Sketch({ ref, children, disableZ = false }: PropsWithChi sketch.layer = layer; }, [view, layer, sketch]); + useWatch(() => { + const layers = view.map.allLayers.filter(layer => isSnappableLayer(layer)) as Collection; + const sources = layers.map(layer => new FeatureSnappingLayerSource({ + layer, + enabled: true + })) + + return sources + }, (layers, previous) => { + if (previous) sketch.snappingOptions?.featureSources.removeMany(previous); + sketch.snappingOptions?.featureSources.addMany(layers); + }) useEffect(() => { const handle = sketch.on("create", (event) => { @@ -92,3 +120,28 @@ export default function Sketch({ ref, children, disableZ = false }: PropsWithChi ); } + +const snappableLayerTypes = [ + "building-scene", + "csv", + "feature", + "geojson", + "graphics", + "map-notes", + "scene", + "wfs" +] as const satisfies Layer['type'][]; + +type SnappableLayer = + | BuildingSceneLayer + | CSVLayer + | FeatureLayer + | GeoJSONLayer + | GraphicsLayer + | MapNotesLayer + | SceneLayer + | WFSLayer + +function isSnappableLayer(layer: Layer): layer is SnappableLayer { + return snappableLayerTypes.includes(layer.type as any); +} diff --git a/app/components/arcgis/sketch/tools/create-extent-tool.tsx b/app/components/arcgis/sketch/tools/create-extent-tool.tsx index 63076e2..7c9a070 100644 --- a/app/components/arcgis/sketch/tools/create-extent-tool.tsx +++ b/app/components/arcgis/sketch/tools/create-extent-tool.tsx @@ -3,10 +3,11 @@ import * as reactiveUtils from "@arcgis/core/core/reactiveUtils"; import { Point, Polygon } from "@arcgis/core/geometry"; import CoreGraphic from "@arcgis/core/Graphic"; import { CreateTool, ToolEvent } from "./create-tool"; -import { ReactNode, useEffect } from "react"; +import { forwardRef, ReactNode, useEffect } from "react"; import useInstance from "~/hooks/useInstance"; import { useSketch } from "../sketch"; import { useAccessorValue } from "~/hooks/reactive"; +import useProvideRef from "~/hooks/useProvideRef"; interface ExtentToolProps { onStart?: (point?: Polygon) => void; @@ -16,13 +17,13 @@ interface ExtentToolProps { children: ({ start }: { start: () => void; cancel: () => void, state: CreateExtentToolManager['state'] }) => ReactNode; } -export default function CreateExtentTool({ +const CreateExtentTool = forwardRef(function CreateExtentTool({ children, onStart, onActive, onComplete, onCancel, -}: ExtentToolProps) { +}, ref) { const sketch = useSketch(); const manager = useInstance(() => new CreateExtentToolManager()); @@ -43,6 +44,8 @@ export default function CreateExtentTool({ const state = useAccessorValue(() => manager.state) ?? 'disabled' + useProvideRef(manager, ref); + return ( children({ start: () => manager.start(), @@ -50,7 +53,9 @@ export default function CreateExtentTool({ state }) ); -} +}) + +export default CreateExtentTool; @subclass() class CreateExtentToolManager extends CreateTool { diff --git a/app/components/arcgis/sketch/tools/create-point-tool.tsx b/app/components/arcgis/sketch/tools/create-point-tool.tsx index 799b0d9..1113cf0 100644 --- a/app/components/arcgis/sketch/tools/create-point-tool.tsx +++ b/app/components/arcgis/sketch/tools/create-point-tool.tsx @@ -79,6 +79,9 @@ class CreatePointToolManager extends CreateTool { "active", { tool: "point", state: 'active', graphic: this.manager!.createGraphic!, toolEventInfo: null!, type: 'create' } ) + if (geometry == null && previous != null) { + this.manager.snappingOptions.enabled = false; + } }), ]) } @@ -87,6 +90,7 @@ class CreatePointToolManager extends CreateTool { if (this.state === 'ready') { this.manager!.pointSymbol = this.createSymbol!; this.manager!.activeToolId = this.id; + this.manager!.snappingOptions.enabled = true; this.manager!.create("point", options) } } diff --git a/app/components/selection/selection-graphic.tsx b/app/components/selection/selection-graphic.tsx index 14f7586..ead9594 100644 --- a/app/components/selection/selection-graphic.tsx +++ b/app/components/selection/selection-graphic.tsx @@ -1,12 +1,12 @@ -import { memo, useMemo } from "react"; +import { memo, useDeferredValue, useMemo } from "react"; import { Polygon } from "@arcgis/core/geometry"; import Graphic from "~/components/arcgis/graphic"; import { ExtrudeSymbol3DLayer, FillSymbol3DLayer, PolygonSymbol3D } from "@arcgis/core/symbols"; import FeatureFilterHighlights from "./scene-filter-highlights"; import GraphicsLayer from "../arcgis/graphics-layer"; -import { OriginSymbol, SymbologyColors } from "~/symbology/symbology"; +import { createOriginSymbol, SymbologyColors } from "~/symbology/symbology"; import { useSelectionState } from "~/data/selection-store"; -import { useOriginElevationInfo, useSelectionElevationInfo } from "../../hooks/queries/elevation-query"; +import { useOriginElevationInfo, useSelectionVolumeExtent } from "../../hooks/queries/elevation-query"; import SolidEdges3D from "@arcgis/core/symbols/edges/SolidEdges3D.js"; import { useAccessorValue } from "~/hooks/reactive"; @@ -39,14 +39,24 @@ function InternalSelectionGraphic() { function Origin() { const store = useSelectionState(); const origin = useAccessorValue(() => store.modelOrigin ?? store.selectionOrigin); + const selection = useAccessorValue(() => store.selection); const originElevationInfo = useOriginElevationInfo().data; const elevatedOrigin = origin?.clone(); - if (originElevationInfo && elevatedOrigin) elevatedOrigin.z = originElevationInfo.z + if (originElevationInfo && elevatedOrigin) elevatedOrigin.z = originElevationInfo.z; + + const { data } = useSelectionVolumeExtent(); + + const volumeExtent = useDeferredValue(data ?? selection?.extent) + const height = (volumeExtent?.zmax ?? 0) - (volumeExtent?.zmin ?? 0); + const symbol = useMemo(() => createOriginSymbol(height), [height]) return ( elevatedOrigin ? ( - + ) : null ) } @@ -54,13 +64,15 @@ function Origin() { function Volume() { const store = useSelectionState(); const selection = useAccessorValue(() => store.selection); - const elevationQuery = useSelectionElevationInfo() - const zmin = elevationQuery.data?.minElevation ?? 0; - const zmax = elevationQuery.data?.maxElevation ?? 0; + const { data } = useSelectionVolumeExtent(); + + const zmin = data?.zmin ?? 0 + const zmax = data?.zmax ?? 0 const bufferedZmin = zmin - 100; - const height = (zmax - bufferedZmin) + 200; + const bufferedZmax = zmax + 5; + const height = (bufferedZmax - bufferedZmin); const VolumeSymbol = useMemo(() => new PolygonSymbol3D({ symbolLayers: [ diff --git a/app/components/selection/selection-tools/create-selection-tool.tsx b/app/components/selection/selection-tools/create-selection-tool.tsx index a1eb24c..550325e 100644 --- a/app/components/selection/selection-tools/create-selection-tool.tsx +++ b/app/components/selection/selection-tools/create-selection-tool.tsx @@ -5,7 +5,7 @@ import { SketchTooltip } from "~/components/arcgis/sketch/sketch" import CreateExtentTool from "~/components/arcgis/sketch/tools/create-extent-tool" import { useSceneView } from "~/components/arcgis/views/scene-view/scene-view-context" import { useSelectionState } from "~/data/selection-store" -import { useAccessorValue } from "~/hooks/reactive" +import { useAccessorValue, useWatch } from "~/hooks/reactive" import { useReferenceElementId } from "../walk-through-context" export function CreateSelectionTool() { @@ -20,11 +20,21 @@ export function CreateSelectionTool() { const store = useSelectionState(); + const toolRef = useRef(null) + useWatch(() => store.editingState, (next,) => { + if (next === 'creating') { + toolRef.current?.start(); + } else { + toolRef.current?.cancel() + } + }, { initial: false }) + const previousSelection = useRef(null); return ( <> { store.editingState = 'creating' previousSelection.current = store.selection; diff --git a/app/components/selection/selection-tools/update-origin-tool.tsx b/app/components/selection/selection-tools/update-origin-tool.tsx index 899675d..995217a 100644 --- a/app/components/selection/selection-tools/update-origin-tool.tsx +++ b/app/components/selection/selection-tools/update-origin-tool.tsx @@ -1,35 +1,50 @@ import { Point } from "@arcgis/core/geometry"; import { CalciteDropdownGroup, CalciteDropdownItem, CalciteSplitButton } from "@esri/calcite-components-react"; -import { useRef } from "react"; +import { useRef, useMemo, useDeferredValue } from "react"; import { SketchTooltip } from "~/components/arcgis/sketch/sketch"; import CreatePointTool from "~/components/arcgis/sketch/tools/create-point-tool"; import { useSelectionState } from "~/data/selection-store"; -import { OriginSymbol } from "~/symbology/symbology"; +import { createOriginSymbol } from "~/symbology/symbology"; +import { useSelectionVolumeExtent } from "~/hooks/queries/elevation-query"; +import { useAccessorValue } from "~/hooks/reactive"; export function UpdateOriginTool() { const store = useSelectionState(); - const previousSelection = useRef(null); + const selection = useAccessorValue(() => store.selection); + const hasSelection = selection != null; + const previousOrigin = useRef(null); const previousEditingState = useRef(store.editingState); + const { data } = useSelectionVolumeExtent(); + // Get elevation info for dynamic symbol height + + const volumeExtent = useDeferredValue(data ?? selection?.extent) + const height = (volumeExtent?.zmax ?? 0) - (volumeExtent?.zmin ?? 0); + // Create symbol with dynamic height + const symbol = useMemo(() => createOriginSymbol(height), [height]); + return ( { + console.log(store.editingState); previousEditingState.current = store.editingState; - previousSelection.current = store.modelOrigin; + previousOrigin.current = store.modelOrigin; store.editingState = 'updating-origin'; }} onActive={(point) => { store.modelOrigin = point; }} onComplete={() => { - store.editingState = 'updating-selection'; + store.editingState = hasSelection + ? 'updating-selection' + : 'creating' }} onCancel={() => { store.editingState = previousEditingState.current; - store.modelOrigin = previousSelection.current; + store.modelOrigin = previousOrigin.current; }} - createSymbol={OriginSymbol} + createSymbol={symbol} > {({ start, cancel, state }) => ( <> diff --git a/app/hooks/queries/elevation-query.tsx b/app/hooks/queries/elevation-query.tsx index 52d36a2..36651fe 100644 --- a/app/hooks/queries/elevation-query.tsx +++ b/app/hooks/queries/elevation-query.tsx @@ -1,16 +1,50 @@ -import { useSceneView } from "~/components/arcgis/views/scene-view/scene-view-context"; import { useSelectionState } from "~/data/selection-store"; import { useAccessorValue } from "~/hooks/reactive"; -import { Multipoint, Point } from "@arcgis/core/geometry"; +import { useSceneView } from "~/components/arcgis/views/scene-view/scene-view-context"; +import { Extent, Multipoint, Point } from "@arcgis/core/geometry"; import { useQuery } from '@tanstack/react-query'; +import { useSceneLayerViews } from "../useSceneLayers"; + +export function useSelectionVolumeExtent() { + const view = useSceneView(); + const ground = useAccessorValue(() => view.groundView.elevationSampler)!; + const store = useSelectionState(); + const selection = useAccessorValue(() => store.selection) ?? null + + const lvs = useSceneLayerViews() ?? []; + + const query = useQuery({ + queryKey: ['selection', 'elevation', selection?.toJSON()], + queryFn: async ({ signal }) => { + let extent: Extent | null = null; + for (const lv of lvs) { + const query = lv.createQuery(); + query.spatialRelationship = 'intersects' + query.geometry = selection!.extent; + + const results = await lv.queryExtent(query, { signal }); + if (results.count > 0) { + extent ??= results.extent; + extent!.union(results.extent); + } + } + + return extent; + }, + enabled: ground != null && selection != null, + }); + + return query; +} export function useSelectionElevationInfo() { const view = useSceneView(); + const ground = useAccessorValue(() => view.map.ground)!; const store = useSelectionState(); const selection = useAccessorValue(() => store.selection) ?? null - return useQuery({ + const query = useQuery({ queryKey: ['selection', 'elevation', ground?.toJSON(), selection?.toJSON()], queryFn: async ({ signal }) => { const multipoint = new Multipoint({ @@ -36,6 +70,8 @@ export function useSelectionElevationInfo() { }, enabled: ground != null && selection != null, }); + + return query; } export function useOriginElevationInfo() { diff --git a/app/symbology/symbology.tsx b/app/symbology/symbology.tsx index 9b4d880..7141568 100644 --- a/app/symbology/symbology.tsx +++ b/app/symbology/symbology.tsx @@ -17,17 +17,18 @@ export const SymbologyColors = { } } as const; -const height = 200; const diamondSize = 7.5; const cylinderSize = 2; -export const OriginSymbol = new PointSymbol3D({ - symbolLayers: [ + +export function createOriginSymbol(height: number) { + const heightWithFallback = height || 50 + const layers = [ new ObjectSymbol3DLayer({ material: { color: SymbologyColors.measurements() }, resource: { primitive: 'cylinder' }, width: cylinderSize, depth: cylinderSize, - height, + height: heightWithFallback, }), new ObjectSymbol3DLayer({ material: { color: SymbologyColors.measurements() }, @@ -37,19 +38,25 @@ export const OriginSymbol = new PointSymbol3D({ height: diamondSize, anchor: 'relative', anchorPosition: { x: 0, y: 0, z: -(height / diamondSize) } - }), + }) ] -}) -export async function createOriginMarker(origin: Point) { + return new PointSymbol3D({ + symbolLayers: layers + }) +} + +export async function createOriginMarker(origin: Point, meshHeight: number) { + const markerHeight = meshHeight; + const box = (await Mesh.createFromGLTF(origin, Diamond)) .scale(diamondSize) - .offset(0, 0, height); + .offset(0, 0, markerHeight); const cylender = Mesh.createCylinder(origin) const transform = cylender.transform?.clone() ?? {}; - transform.scale = [cylinderSize, cylinderSize, height]; + transform.scale = [cylinderSize, cylinderSize, markerHeight]; cylender.transform = transform; const mesh = meshUtils.merge([box, cylender]); diff --git a/package-lock.json b/package-lock.json index 58af04a..eb9ffbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,8 +6,8 @@ "": { "name": "my-remix-app", "dependencies": { - "@arcgis/core": "^4.30.0-next.20240615", - "@esri/calcite-components-react": "^2.9.0", + "@arcgis/core": "^4.32.0-next.20241106", + "@esri/calcite-components-react": "^3.0.0-next.7", "@remix-run/node": "^2.9.2", "@remix-run/react": "^2.9.2", "@tanstack/react-query": "^5.52.2", @@ -34,7 +34,7 @@ "postcss": "^8.4.38", "prettier": "3.3.2", "tailwindcss": "^3.4.4", - "typescript": "^5.4.5", + "typescript": "^5.6.3", "vite": "^5.3.1", "vite-plugin-static-copy": "^1.0.5", "vite-tsconfig-paths": "^4.3.2" @@ -69,18 +69,19 @@ } }, "node_modules/@arcgis/core": { - "version": "4.30.0-next.20240615", - "resolved": "https://registry.npmjs.org/@arcgis/core/-/core-4.30.0-next.20240615.tgz", - "integrity": "sha512-6rJVDb3MP4rnP47yq9BGQrgCqVx8ThUBl/ffbkpnRDvSWOLifKCrvHVf28+OjzP3B+boDbMM6GwE0PzIYb4jmw==", + "version": "4.32.0-next.20241106", + "resolved": "https://registry.npmjs.org/@arcgis/core/-/core-4.32.0-next.20241106.tgz", + "integrity": "sha512-CXgjaEkbAUOSIzKjDqUatgEhK+cJZIf4ih5DYnpVwz3tqHvNbLYo5f3NVVvZf0wx+VxLjHIs3t4zHMoR7quK2g==", + "license": "SEE LICENSE IN copyright.txt", "dependencies": { - "@esri/arcgis-html-sanitizer": "~4.0.1", + "@esri/arcgis-html-sanitizer": "~4.1.0-next.4", "@esri/calcite-colors": "~6.1.0", - "@esri/calcite-components": "^2.8.5", - "@vaadin/grid": "~24.3.13", - "@zip.js/zip.js": "~2.7.44", - "luxon": "~3.4.4", - "marked": "~12.0.2", - "sortablejs": "~1.15.2" + "@esri/calcite-components": "^2.13.0", + "@vaadin/grid": "~24.5.0", + "@zip.js/zip.js": "~2.7.52", + "luxon": "~3.5.0", + "marked": "~14.1.3", + "sortablejs": "~1.15.3" } }, "node_modules/@babel/code-frame": { @@ -1163,9 +1164,10 @@ } }, "node_modules/@esri/arcgis-html-sanitizer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@esri/arcgis-html-sanitizer/-/arcgis-html-sanitizer-4.0.1.tgz", - "integrity": "sha512-6m/qIGmmbWWB2RXtyGcCBMIE/FkfM+dF9VzvW+kVH8ddvSjTtWiKcDrQXfDI73OyYPe2fDtANNPP9amu0L4sMQ==", + "version": "4.1.0-next.4", + "resolved": "https://registry.npmjs.org/@esri/arcgis-html-sanitizer/-/arcgis-html-sanitizer-4.1.0-next.4.tgz", + "integrity": "sha512-CFDBFVgCLLaY6qBS70oozzIPXkTTCVkG/KFkjAZHIPYMgxgFtYPMBETRutELQQWDJa0Tv1QNK1N/7NyaKfsPvQ==", + "license": "Apache-2.0", "dependencies": { "xss": "1.0.13" }, @@ -1179,39 +1181,82 @@ "integrity": "sha512-wHQYWFtDa6c328EraXEVZvgOiaQyYr0yuaaZ0G3cB4C3lSkWefW34L/e5TLAhtuG3zJ/wR6pl5X1YYNfBc0/4Q==" }, "node_modules/@esri/calcite-components": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@esri/calcite-components/-/calcite-components-2.9.0.tgz", - "integrity": "sha512-caFnI1lTtpHzm4SRx6VHETRKIoe3UeytV7m6DrwTMnwAosIgfv86ttJ2rhxgXXcnqptCesJSf2TxUiOqc/vc+g==", - "dependencies": { - "@floating-ui/dom": "1.6.5", - "@stencil/core": "4.18.2", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/@esri/calcite-components/-/calcite-components-2.13.2.tgz", + "integrity": "sha512-90v4H8zs2wEzUXQGmZ+joHhP7ulFUHmQjDlIwXylJiDvoChhnEm38iv7eeG+X8im06biIHEDGRB8LLszlQQ7jw==", + "license": "SEE LICENSE.md", + "dependencies": { + "@esri/calcite-ui-icons": "3.32.0", + "@floating-ui/dom": "1.6.11", + "@stencil/core": "4.20.0", "@types/color": "3.0.6", + "@types/sortablejs": "1.15.8", "color": "4.2.3", - "composed-offset-position": "0.0.4", - "dayjs": "1.11.10", - "focus-trap": "7.5.4", + "composed-offset-position": "0.0.6", + "dayjs": "1.11.13", + "focus-trap": "7.6.0", + "interactjs": "1.10.27", "lodash-es": "4.17.21", - "sortablejs": "1.15.1", - "timezone-groups": "0.8.0", + "sortablejs": "1.15.3", + "timezone-groups": "0.10.2", "type-fest": "4.18.2" } }, "node_modules/@esri/calcite-components-react": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@esri/calcite-components-react/-/calcite-components-react-2.9.0.tgz", - "integrity": "sha512-12ejLhBjG85KkiV7LqZe6kGLXZrYoYApwBXPyRKWET0F8HW8veHIodCOsY1BRPEIv/HUVt2Iz81KFTPjv0CJqQ==", + "version": "3.0.0-next.7", + "resolved": "https://registry.npmjs.org/@esri/calcite-components-react/-/calcite-components-react-3.0.0-next.7.tgz", + "integrity": "sha512-iRf/qBkKmhlD5xXo38ZRYElnC2Z+VOWfwyVMsXrtTV+XGNTU0+UFufdAW9y6k+98k19B6cymz09U60jlLbkl+Q==", + "license": "SEE LICENSE.md", "dependencies": { - "@esri/calcite-components": "^2.9.0" + "@esri/calcite-components": "3.0.0-next.7" }, "peerDependencies": { "react": ">=16.7", "react-dom": ">=16.7" } }, - "node_modules/@esri/calcite-components/node_modules/sortablejs": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.1.tgz", - "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==" + "node_modules/@esri/calcite-components-react/node_modules/@esri/calcite-components": { + "version": "3.0.0-next.7", + "resolved": "https://registry.npmjs.org/@esri/calcite-components/-/calcite-components-3.0.0-next.7.tgz", + "integrity": "sha512-DT6Tkx5we+9/iFfUzUgk1LDmrnGJxrSN3HagWajwoi0PXaEmfJA1GBw1NEQ+rzrvnuHMXAVAdKW+kV2IOJtelg==", + "license": "SEE LICENSE.md", + "dependencies": { + "@esri/calcite-ui-icons": "3.33.0-next.8", + "@floating-ui/dom": "1.6.11", + "@stencil/core": "4.20.0", + "@types/color": "3.0.6", + "@types/sortablejs": "1.15.8", + "color": "4.2.3", + "composed-offset-position": "0.0.6", + "dayjs": "1.11.13", + "focus-trap": "7.6.0", + "interactjs": "1.10.27", + "lodash-es": "4.17.21", + "sortablejs": "1.15.3", + "timezone-groups": "0.10.2", + "type-fest": "4.18.2" + } + }, + "node_modules/@esri/calcite-components-react/node_modules/@esri/calcite-ui-icons": { + "version": "3.33.0-next.8", + "resolved": "https://registry.npmjs.org/@esri/calcite-ui-icons/-/calcite-ui-icons-3.33.0-next.8.tgz", + "integrity": "sha512-sVnsorjT92CZ8nKoGpQta3bh5n+BL1UrJ97vAkRwGl4D1+mi7WT1FyoEVliCsBFxmmjE/4UBBsZ9zf0MSuKCKw==", + "license": "SEE LICENSE.md", + "bin": { + "spriter": "bin/spriter.js" + } + }, + "node_modules/@esri/calcite-components-react/node_modules/type-fest": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz", + "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/@esri/calcite-components/node_modules/type-fest": { "version": "4.18.2", @@ -1224,27 +1269,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@esri/calcite-ui-icons": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@esri/calcite-ui-icons/-/calcite-ui-icons-3.32.0.tgz", + "integrity": "sha512-2UEddEeSnpXVWp/uNrgym3mrb8lZ5+vXFbtmvXv5NiE32nQGw2MFZD52L5Z+FsxqHJ9vVrtl/X6pTIgkd0c8jA==", + "license": "SEE LICENSE.md", + "bin": { + "spriter": "bin/spriter.js" + } + }, "node_modules/@floating-ui/core": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", - "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -1303,6 +1360,12 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@interactjs/types": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.27.tgz", + "integrity": "sha512-BUdv0cvs4H5ODuwft2Xp4eL8Vmi3LcihK42z0Ft/FbVJZoRioBsxH+LlsBdK4tAie7PqlKGy+1oyOncu1nQ6eA==", + "license": "MIT" + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -1402,14 +1465,16 @@ "dev": true }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", - "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "license": "BSD-3-Clause" }, "node_modules/@lit/reactive-element": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0" } @@ -1551,7 +1616,8 @@ "node_modules/@open-wc/dedupe-mixin": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz", - "integrity": "sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==" + "integrity": "sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==", + "license": "MIT" }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", @@ -1564,9 +1630,10 @@ } }, "node_modules/@polymer/polymer": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.5.1.tgz", - "integrity": "sha512-JlAHuy+1qIC6hL1ojEUfIVD58fzTpJAoCxFwV5yr0mYTXV1H8bz5zy0+rC963Cgr9iNXQ4T9ncSjC2fkF9BQfw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.5.2.tgz", + "integrity": "sha512-fWwImY/UH4bb2534DVSaX+Azs2yKg8slkMBHOyGeU2kKx7Xmxp6Lee0jP8p6B3d7c1gFUPB2Z976dTUtX81pQA==", + "license": "BSD-3-Clause", "dependencies": { "@webcomponents/shadycss": "^1.9.1" } @@ -2047,9 +2114,10 @@ ] }, "node_modules/@stencil/core": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.18.2.tgz", - "integrity": "sha512-GLYbzv3Bq/oUbQk3CH09zkjISANccyE5/A1C7+1JZhdnWUx1MRuWQR9/2uzSPR7kF0sdppwzXvArl7VqYCxLOQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.20.0.tgz", + "integrity": "sha512-WPrTHFngvN081RY+dJPneKQLwnOFD60OMCOQGmmSHfCW0f4ujPMzzhwWU1gcSwXPWXz5O+8cBiiCaxAbJU7kAg==", + "license": "MIT", "bin": { "stencil": "bin/stencil" }, @@ -2230,6 +2298,12 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "license": "MIT" + }, "node_modules/@types/stats.js": { "version": "0.17.3", "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", @@ -2250,7 +2324,8 @@ "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" }, "node_modules/@types/unist": { "version": "2.0.10", @@ -2475,36 +2550,39 @@ "dev": true }, "node_modules/@vaadin/a11y-base": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.3.13.tgz", - "integrity": "sha512-7iEbJiJM/+YIC/D7HzQUuU3OX27MhcNoX8k3mWLBQu8SCVGDerCZUlHCHfeFpbJc76aWDNUrvEhAzBVrM/mn+A==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.5.2.tgz", + "integrity": "sha512-pbLYwnt3yoHTShDvGYR9mdcfnx1bO/aqEedVkmF+misvSQmrMF+tiFBJbic0VipAiM8dHHgRSjLimwaFqWhWng==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.3.13", + "@vaadin/component-base": "~24.5.2", "lit": "^3.0.0" } }, "node_modules/@vaadin/checkbox": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.3.13.tgz", - "integrity": "sha512-YT67/M31Dq7UKwtZ+hEUjOrVHnje+7wpf4aBYAeKoEqa57uw2Q9+lGTwoWgviVzXKtXhoQd/oLiNUaxeOVcNzA==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.5.2.tgz", + "integrity": "sha512-eC4DQ5gyt7oKXRXCSzSVSRxo0YeNAtXWiSinlwVH5z9+ufi7j007VYfleAthAanSMgRvQyhjxyRgKWbzWaozhQ==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.3.13", - "@vaadin/component-base": "~24.3.13", - "@vaadin/field-base": "~24.3.13", - "@vaadin/vaadin-lumo-styles": "~24.3.13", - "@vaadin/vaadin-material-styles": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13", + "@vaadin/a11y-base": "~24.5.2", + "@vaadin/component-base": "~24.5.2", + "@vaadin/field-base": "~24.5.2", + "@vaadin/vaadin-lumo-styles": "~24.5.2", + "@vaadin/vaadin-material-styles": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2", "lit": "^3.0.0" } }, "node_modules/@vaadin/component-base": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.3.13.tgz", - "integrity": "sha512-UjokKlcs3NVnUATmv03Av55dZGCqvRXEaY2N1PO0C5OYATNekF5wlnz2nQ1+j1Tvk9eI+bzZKN28Yu0S3kvl0A==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.5.2.tgz", + "integrity": "sha512-w712CMAOqIJa6YSzHYtVCOFAy6K8CCuH7+bKuEieWd7jcA8BOEj55skruYlMbpA/7o6BUURpw5FqwlyXZS7GcA==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", @@ -2514,125 +2592,137 @@ } }, "node_modules/@vaadin/field-base": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.3.13.tgz", - "integrity": "sha512-Qc2OUaBDGbskBnnSlDNhQd682tL8QlpqFfoS9lrZhRV286OlkfEiQ06kMZc75Q9fIeVIz3S2BPhtdoxd/8Tc4w==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.5.2.tgz", + "integrity": "sha512-J29LsnlbMfT51HFF2NZpgHxtweQP+lXTNv/GaJWsgdj26n/XMtDNrfQe35WDjTLY4MdM277tqJwik177zkiY6w==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.3.13", - "@vaadin/component-base": "~24.3.13", + "@vaadin/a11y-base": "~24.5.2", + "@vaadin/component-base": "~24.5.2", "lit": "^3.0.0" } }, "node_modules/@vaadin/grid": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.3.13.tgz", - "integrity": "sha512-oRNP9V6d7khFlB49wDfPfHG1fHFImc9dagX9Tlatpo3j1TLJ9JlfkrdWsuYY1aYtYnx5huvH3iOAV93fV1CFFg==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.5.2.tgz", + "integrity": "sha512-+Pphae76Bw0MYmtUM0T5BgPbvR1jw4f3oxVu1ofdZ6sI8/thS3BogL+n3PdqaAJyl0RC+9BNtl42oMG7Nceg6A==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.3.13", - "@vaadin/checkbox": "~24.3.13", - "@vaadin/component-base": "~24.3.13", - "@vaadin/lit-renderer": "~24.3.13", - "@vaadin/text-field": "~24.3.13", - "@vaadin/vaadin-lumo-styles": "~24.3.13", - "@vaadin/vaadin-material-styles": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13" + "@vaadin/a11y-base": "~24.5.2", + "@vaadin/checkbox": "~24.5.2", + "@vaadin/component-base": "~24.5.2", + "@vaadin/lit-renderer": "~24.5.2", + "@vaadin/text-field": "~24.5.2", + "@vaadin/vaadin-lumo-styles": "~24.5.2", + "@vaadin/vaadin-material-styles": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2", + "lit": "^3.0.0" } }, "node_modules/@vaadin/icon": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.3.13.tgz", - "integrity": "sha512-uH28N3fYJO6FObz+WLNfqHLm2VPbL1hNkmoU/yDiMldfIyTqpbSO2DlwNMXbsm3T8xkJRlHM+LWATheMsIynOw==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.5.2.tgz", + "integrity": "sha512-4wUqkP0a0drmyi/C82yQAsNBUWRHJjKKHONvomrcsBmUpfKEHbbU08k3eSiFOH3dX5I+xZeCgO2365t0nCIALA==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.3.13", - "@vaadin/vaadin-lumo-styles": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13", + "@vaadin/component-base": "~24.5.2", + "@vaadin/vaadin-lumo-styles": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2", "lit": "^3.0.0" } }, "node_modules/@vaadin/input-container": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.3.13.tgz", - "integrity": "sha512-Rg77JYKwxMdnTqxTIQWkaiNCZGiI4sIP3V6sxYJxqn0v1Nwwy80OQ5nzGQj+KyNk4B6SajmAwgHbu+IcFthN1A==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.5.2.tgz", + "integrity": "sha512-qoRonlIOc901wxWAxmb26XvuHaOk0SpE6Pm7aZJvtwK1taXQH9mq626X1CnbcQZLw0TlkJSyDavyP1FM7IECUQ==", + "license": "Apache-2.0", "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.3.13", - "@vaadin/vaadin-lumo-styles": "~24.3.13", - "@vaadin/vaadin-material-styles": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13", + "@vaadin/component-base": "~24.5.2", + "@vaadin/vaadin-lumo-styles": "~24.5.2", + "@vaadin/vaadin-material-styles": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2", "lit": "^3.0.0" } }, "node_modules/@vaadin/lit-renderer": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.3.13.tgz", - "integrity": "sha512-5/qtyj6YfdM7BjwH9cpA1y0rPRdKQYr2s6Ze/Ocgfb26DUR6n4daXzilB3TceUanvAFFScGx16CqlA/my1cozQ==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.5.2.tgz", + "integrity": "sha512-4vtB1L/4pGhfaN12jzcX37WTv63mwBEl71l38Q8p7v8hWBqS4aZuZemln9qQ8U/AmpEI6Ez1oEPNLYC5F1VoHA==", + "license": "Apache-2.0", "dependencies": { "lit": "^3.0.0" } }, "node_modules/@vaadin/text-field": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.3.13.tgz", - "integrity": "sha512-+f0DGrD+KmVw6s75Gdprugb01LYhsCdLgc2QLTrNjmyx/kvNfw76jTHZEeUuYYjxTMVyKXVstcWxG/oWt/sZSQ==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.5.2.tgz", + "integrity": "sha512-4tHBbfEFvQnYdWuMb33MzDzL7FNS4fLVBNMfDNjxGWY2y4w1U5dUG/d70Fe4+X1M+Yc6rV3ZZ6u6Jh97yfACug==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.3.13", - "@vaadin/component-base": "~24.3.13", - "@vaadin/field-base": "~24.3.13", - "@vaadin/input-container": "~24.3.13", - "@vaadin/vaadin-lumo-styles": "~24.3.13", - "@vaadin/vaadin-material-styles": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13", + "@vaadin/a11y-base": "~24.5.2", + "@vaadin/component-base": "~24.5.2", + "@vaadin/field-base": "~24.5.2", + "@vaadin/input-container": "~24.5.2", + "@vaadin/vaadin-lumo-styles": "~24.5.2", + "@vaadin/vaadin-material-styles": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2", "lit": "^3.0.0" } }, "node_modules/@vaadin/vaadin-development-mode-detector": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@vaadin/vaadin-development-mode-detector/-/vaadin-development-mode-detector-2.0.7.tgz", - "integrity": "sha512-9FhVhr0ynSR3X2ao+vaIEttcNU5XfzCbxtmYOV8uIRnUCtNgbvMOIcyGBvntsX9I5kvIP2dV3cFAOG9SILJzEA==" + "integrity": "sha512-9FhVhr0ynSR3X2ao+vaIEttcNU5XfzCbxtmYOV8uIRnUCtNgbvMOIcyGBvntsX9I5kvIP2dV3cFAOG9SILJzEA==", + "license": "Apache-2.0" }, "node_modules/@vaadin/vaadin-lumo-styles": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.3.13.tgz", - "integrity": "sha512-43h6sKTVdNJ2Gv3mTcD1oVHjrNKj28Zs+VqcTUS5Vn2bxmGsIm3V5qLMdSe5GWNeZPbl+5dFa1VjFUjQWElMYw==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.5.2.tgz", + "integrity": "sha512-qg+EOxN+X5s5V2nY1rKV06M44rPZFfg+9ee+nx9+JhT1oVu/NM+85li8mi4YwedhKbthkbDQp/3UK6iOMgWSBw==", + "license": "Apache-2.0", "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.3.13", - "@vaadin/icon": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13" + "@vaadin/component-base": "~24.5.2", + "@vaadin/icon": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2" } }, "node_modules/@vaadin/vaadin-material-styles": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.3.13.tgz", - "integrity": "sha512-TG+y/YPI4M2rXkkyzbb6EzLl2dFaf+sNEH7tZXz4RLAUciKC7QHgpEESwQ0mfdonov2xP9Op48eBhkWalhKxDA==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.5.2.tgz", + "integrity": "sha512-a/xFOmBRPRu0MpahPdE1sKffOYZS79ofxUS3JQtN5NC38KhA7dxbMdUts3/Ft833/QKirxY+l1jjQ6ljiFDRzg==", + "license": "Apache-2.0", "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.3.13", - "@vaadin/vaadin-themable-mixin": "~24.3.13" + "@vaadin/component-base": "~24.5.2", + "@vaadin/vaadin-themable-mixin": "~24.5.2" } }, "node_modules/@vaadin/vaadin-themable-mixin": { - "version": "24.3.13", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.3.13.tgz", - "integrity": "sha512-OmDLX92U1tefwgnmlP/OBsf/z/GGjy3IOoEUqEPCgf01+xB6wM6uCRaY1dBU8NgHQeaJq80YzQjP0z5D+SqTkA==", + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.5.2.tgz", + "integrity": "sha512-XCviPYq3nYg+DAArBpRQPFdRgziT2bQRntvqTXY2BeWImffiwZiZaf3UIy1h4j2hl4u+Kpu2qJ4MXYw8IZ0JCQ==", + "license": "Apache-2.0", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "lit": "^3.0.0" } }, "node_modules/@vaadin/vaadin-usage-statistics": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-usage-statistics/-/vaadin-usage-statistics-2.1.2.tgz", - "integrity": "sha512-xKs1PvRfTXsG0eWWcImLXWjv7D+f1vfoIvovppv6pZ5QX8xgcxWUdNgERlOOdGt3CTuxQXukTBW3+Qfva+OXSg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-usage-statistics/-/vaadin-usage-statistics-2.1.3.tgz", + "integrity": "sha512-8r4TNknD7OJQADe3VygeofFR7UNAXZ2/jjBFP5dgI8+2uMfnuGYgbuHivasKr9WSQ64sPej6m8rDoM1uSllXjQ==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@vaadin/vaadin-development-mode-detector": "^2.0.0" }, @@ -2703,12 +2793,14 @@ "node_modules/@webcomponents/shadycss": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.2.tgz", - "integrity": "sha512-vRq+GniJAYSBmTRnhCYPAPq6THYqovJ/gzGThWbgEZUQaBccndGTi1hdiUP15HzEco0I6t4RCtXyX0rsSmwgPw==" + "integrity": "sha512-vRq+GniJAYSBmTRnhCYPAPq6THYqovJ/gzGThWbgEZUQaBccndGTi1hdiUP15HzEco0I6t4RCtXyX0rsSmwgPw==", + "license": "BSD-3-Clause" }, "node_modules/@zip.js/zip.js": { - "version": "2.7.45", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.45.tgz", - "integrity": "sha512-Mm2EXF33DJQ/3GWWEWeP1UCqzpQ5+fiMvT3QWspsXY05DyqqxWu7a9awSzU4/spHMHVFrTjani1PR0vprgZpow==", + "version": "2.7.53", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.53.tgz", + "integrity": "sha512-G6Bl5wN9EXXVaTUIox71vIX5Z454zEBe+akKpV4m1tUboIctT5h7ID3QXCJd/Lfy2rSvmkTmZIucf1jGRR4f5A==", + "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", "deno": ">=1.0.0", @@ -3613,9 +3705,13 @@ } }, "node_modules/composed-offset-position": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.4.tgz", - "integrity": "sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.6.tgz", + "integrity": "sha512-Q7dLompI6lUwd7LWyIcP66r4WcS9u7AL2h8HaeipiRfCRPLMWqRx8fYsjb4OHi6UQFifO7XtNC2IlEJ1ozIFxw==", + "license": "MIT", + "peerDependencies": { + "@floating-ui/utils": "^0.2.5" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -3734,7 +3830,8 @@ "node_modules/cssfilter": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "license": "MIT" }, "node_modules/csstype": { "version": "3.1.3", @@ -3808,9 +3905,10 @@ } }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/debug": { "version": "4.3.5", @@ -5261,9 +5359,10 @@ "dev": true }, "node_modules/focus-trap": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", - "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.0.tgz", + "integrity": "sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==", + "license": "MIT", "dependencies": { "tabbable": "^6.2.0" } @@ -5913,6 +6012,15 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", "dev": true }, + "node_modules/interactjs": { + "version": "1.10.27", + "resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.10.27.tgz", + "integrity": "sha512-y/8RcCftGAF24gSp76X2JS3XpHiUvDQyhF8i7ujemBz77hwiHDuJzftHx7thY8cxGogwGiPJ+o97kWB6eAXnsA==", + "license": "MIT", + "dependencies": { + "@interactjs/types": "1.10.27" + } + }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -6678,29 +6786,32 @@ "dev": true }, "node_modules/lit": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.4.tgz", - "integrity": "sha512-q6qKnKXHy2g1kjBaNfcoLlgbI3+aSOZ9Q4tiGa9bGYXq5RBXxkVTqTIVmP2VWMp29L4GyvCFm8ZQ2o56eUAMyA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", + "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "license": "BSD-3-Clause", "dependencies": { "@lit/reactive-element": "^2.0.4", - "lit-element": "^4.0.4", - "lit-html": "^3.1.2" + "lit-element": "^4.1.0", + "lit-html": "^3.2.0" } }, "node_modules/lit-element": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.6.tgz", - "integrity": "sha512-U4sdJ3CSQip7sLGZ/uJskO5hGiqtlpxndsLr6mt3IQIjheg93UKYeGQjWMRql1s/cXNOaRrCzC2FQwjIwSUqkg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "license": "BSD-3-Clause", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0", "@lit/reactive-element": "^2.0.4", - "lit-html": "^3.1.2" + "lit-html": "^3.2.0" } }, "node_modules/lit-html": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.4.tgz", - "integrity": "sha512-yKKO2uVv7zYFHlWMfZmqc+4hkmSbFp8jgjdZY9vvR9jr4J8fH6FUMXhr+ljfELgmjpvlF7Z1SJ5n5/Jeqtc9YA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -6822,9 +6933,10 @@ } }, "node_modules/luxon": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", - "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "license": "MIT", "engines": { "node": ">=12" } @@ -6839,9 +6951,10 @@ } }, "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.1.3.tgz", + "integrity": "sha512-ZibJqTULGlt9g5k4VMARAktMAjXoVnnr+Y3aCqW1oDftcV4BA3UmrBifzXoZyenHRk75csiPu9iwsTj4VNBT0g==", + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -9699,9 +9812,10 @@ } }, "node_modules/sortablejs": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz", - "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", + "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==", + "license": "MIT" }, "node_modules/source-map": { "version": "0.7.4", @@ -10093,7 +10207,8 @@ "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" }, "node_modules/tailwindcss": { "version": "3.4.4", @@ -10341,11 +10456,12 @@ } }, "node_modules/timezone-groups": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/timezone-groups/-/timezone-groups-0.8.0.tgz", - "integrity": "sha512-t7E/9sPfCU0m0ZbS7Cqw52D6CB/UyeaiIBmyJCokI1SyOyOgA/ESiQ/fbreeFaUG9QSenGlZSSk/7rEbkipbOA==", - "bin": { - "timezone-groups": "dist/cli.cjs" + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/timezone-groups/-/timezone-groups-0.10.2.tgz", + "integrity": "sha512-01G9JdlIybA9Njp0wJcGenXKWAw+woWbv6W/oMexWyPs7Nr/S2p2n1NRrMHbHaFzdf+PNNStQp1WILdnAGjYXQ==", + "license": "MIT", + "engines": { + "node": ">=18.12.0" } }, "node_modules/tiny-invariant": { @@ -10577,10 +10693,11 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11717,6 +11834,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz", "integrity": "sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==", + "license": "MIT", "dependencies": { "commander": "^2.20.3", "cssfilter": "0.0.10" @@ -11731,7 +11849,8 @@ "node_modules/xss/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/xtend": { "version": "4.0.2", diff --git a/package.json b/package.json index c2597a3..2abae15 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "typecheck": "tsc" }, "dependencies": { - "@arcgis/core": "^4.30.0-next.20240615", - "@esri/calcite-components-react": "^2.9.0", + "@arcgis/core": "^4.32.0-next.20241106", + "@esri/calcite-components-react": "^3.0.0-next.7", "@remix-run/node": "^2.9.2", "@remix-run/react": "^2.9.2", "@tanstack/react-query": "^5.52.2", @@ -39,7 +39,7 @@ "postcss": "^8.4.38", "prettier": "3.3.2", "tailwindcss": "^3.4.4", - "typescript": "^5.4.5", + "typescript": "^5.6.3", "vite": "^5.3.1", "vite-plugin-static-copy": "^1.0.5", "vite-tsconfig-paths": "^4.3.2" diff --git a/tsconfig.json b/tsconfig.json index f37e972..f104da7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "include": ["env.d.ts", "**/*.ts", "**/*.tsx", "app/utility-types.mts"], "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2022"], + "lib": ["DOM", "DOM.Iterable", "ESNext"], "types": ["@remix-run/node", "vite/client"], "experimentalDecorators": true, "useDefineForClassFields": false,