@opengeoweb/soundings 19.1.0 → 19.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/README.md +59 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.esm.js +7830 -0
  4. package/dist/src/index.d.ts +10 -0
  5. package/dist/src/lib/api/edr-api/api.d.ts +14 -0
  6. package/dist/src/lib/api/edr-api/fakeApi.d.ts +16 -0
  7. package/dist/src/lib/api/edr-api/hooks.d.ts +98 -0
  8. package/dist/src/lib/api/edr-api/types.d.ts +38 -0
  9. package/dist/src/lib/api/edr-api/utils.d.ts +21 -0
  10. package/dist/src/lib/components/Hodograph/Hodograph.d.ts +6 -0
  11. package/dist/src/lib/components/Hodograph/HodographCollection.d.ts +6 -0
  12. package/dist/src/lib/components/Hodograph/HodographLegend.d.ts +2 -0
  13. package/dist/src/lib/components/Hodograph/drawUtils.d.ts +53 -0
  14. package/dist/src/lib/components/MenuBar/LocationsMenu.d.ts +20 -0
  15. package/dist/src/lib/components/MenuBar/LocationsMenuConnect.d.ts +7 -0
  16. package/dist/src/lib/components/MenuBar/MenuBar.d.ts +16 -0
  17. package/dist/src/lib/components/MenuBar/MenuBarConnect.d.ts +8 -0
  18. package/dist/src/lib/components/MenuBar/SoundingsMarkersSwitch.d.ts +6 -0
  19. package/dist/src/lib/components/MenuBar/SoundingsProfileDataDialogConnect.d.ts +2 -0
  20. package/dist/src/lib/components/MenuBar/SoundingsProfileDataMenu.d.ts +11 -0
  21. package/dist/src/lib/components/MenuBar/SoundingsSourceDialogConnect.d.ts +7 -0
  22. package/dist/src/lib/components/MenuBar/SoundingsSourceMenu.d.ts +16 -0
  23. package/dist/src/lib/components/MenuBar/SoundingsTopRowButton.d.ts +9 -0
  24. package/dist/src/lib/components/Providers/Providers.d.ts +12 -0
  25. package/dist/src/lib/components/ResizablePanel/MultipleResizablePanelsDemo.d.ts +2 -0
  26. package/dist/src/lib/components/ResizablePanel/ResizablePanel.d.ts +18 -0
  27. package/dist/src/lib/components/ResizablePanel/ResizablePanelStandalone.d.ts +25 -0
  28. package/dist/src/lib/components/SortablePanels/SortablePanels.d.ts +30 -0
  29. package/dist/src/lib/components/SoundingPanelPlaceholder/SoundingPanelPlaceholder.d.ts +5 -0
  30. package/dist/src/lib/components/SoundingPanelPlaceholder/index.d.ts +1 -0
  31. package/dist/src/lib/components/Soundings/DiagramTypeButton.d.ts +8 -0
  32. package/dist/src/lib/components/Soundings/SharedMouseYProvider.d.ts +13 -0
  33. package/dist/src/lib/components/Soundings/Soundings.d.ts +15 -0
  34. package/dist/src/lib/components/Soundings/SoundingsConnect.d.ts +8 -0
  35. package/dist/src/lib/components/Soundings/SoundingsLegend.d.ts +13 -0
  36. package/dist/src/lib/components/Soundings/WindBarbs.d.ts +16 -0
  37. package/dist/src/lib/components/Soundings/animateResizeTransform.d.ts +4 -0
  38. package/dist/src/lib/components/Soundings/constants.d.ts +20 -0
  39. package/dist/src/lib/components/Soundings/drawUtils.d.ts +45 -0
  40. package/dist/src/lib/components/Soundings/timeMismatchUtils.d.ts +4 -0
  41. package/dist/src/lib/components/Soundings/types.d.ts +6 -0
  42. package/dist/src/lib/components/Soundings/useSoundingsDiagramSize.d.ts +2 -0
  43. package/dist/src/lib/components/SoundingsManager/SoundingManagerListItem.d.ts +6 -0
  44. package/dist/src/lib/components/SoundingsManager/SoundingsManager.d.ts +17 -0
  45. package/dist/src/lib/components/SoundingsManager/SoundingsManagerConnect.d.ts +2 -0
  46. package/dist/src/lib/components/SoundingsPanels/SoundingsPanelConnect.d.ts +3 -0
  47. package/dist/src/lib/components/SoundingsPanels/SoundingsPanels.d.ts +20 -0
  48. package/dist/src/lib/components/SoundingsProfileDataTable/SoundingsProfileDataTable.d.ts +9 -0
  49. package/dist/src/lib/components/SoundingsTimeSlider/SoundingsTimeSlider.d.ts +8 -0
  50. package/dist/src/lib/components/SoundingsTimeSlider/SoundingsTimeSliderConnect.d.ts +8 -0
  51. package/dist/src/lib/components/SoundingsTimeSlider/index.d.ts +2 -0
  52. package/dist/src/lib/components/SoundingsTooltip/utils.d.ts +31 -0
  53. package/dist/src/lib/components/StaticLines/bijvoetUtils.d.ts +6 -0
  54. package/dist/src/lib/components/StaticLines/drawDryAdiabats.d.ts +23 -0
  55. package/dist/src/lib/components/StaticLines/drawIsobars.d.ts +14 -0
  56. package/dist/src/lib/components/StaticLines/drawIsohumes.d.ts +23 -0
  57. package/dist/src/lib/components/StaticLines/drawIsotherms.d.ts +23 -0
  58. package/dist/src/lib/components/StaticLines/drawMoistAdiabats.d.ts +29 -0
  59. package/dist/src/lib/components/StaticLines/utils.d.ts +19 -0
  60. package/dist/src/lib/components/WindBarbs/utils.d.ts +22 -0
  61. package/dist/src/lib/components/WindBarbs/windsymbols.d.ts +5 -0
  62. package/dist/src/lib/components/index.d.ts +20 -0
  63. package/dist/src/lib/components/utils.d.ts +36 -0
  64. package/dist/src/lib/store/reducer.d.ts +44 -0
  65. package/dist/src/lib/store/selectors.d.ts +339 -0
  66. package/dist/src/lib/store/store.d.ts +8 -0
  67. package/dist/src/lib/store/types.d.ts +108 -0
  68. package/dist/src/lib/store/utils.d.ts +10 -0
  69. package/dist/src/lib/utils/i18n.d.ts +7 -0
  70. package/dist/src/lib/utils/profileDataPreferences.d.ts +50 -0
  71. package/dist/src/lib/utils/soundingsLookUp.d.ts +9 -0
  72. package/package.json +2 -1
@@ -0,0 +1,10 @@
1
+ import soundingsTranslations from '../locales/soundingsTranslations.json';
2
+ export { soundingsTranslations };
3
+ export * from './lib/components';
4
+ export * from './lib/utils/soundingsLookUp';
5
+ export * from './lib/api/edr-api/types';
6
+ export * from './lib/store/store';
7
+ export * from './lib/utils/i18n';
8
+ export * as SoundingsTypes from './lib/store/types';
9
+ export { SoundingsActionOrigin } from './lib/store/types';
10
+ export type { SoundingsRootState } from './lib/store/types';
@@ -0,0 +1,14 @@
1
+ import type { Coverage, CoverageCollection, VerticalProfileDomain } from '@opengeoweb/shared';
2
+ import type { CollectionDetails, LocationsResponseFromBE, SoundingsInstance, SoundingsInstances } from './types';
3
+ export declare const getCollectionLocations: (collectionId: string, baseUrl: string) => Promise<LocationsResponseFromBE>;
4
+ export declare const getCollectionInstances: (collectionId: string, baseUrl: string) => Promise<SoundingsInstances>;
5
+ export declare const getCollectionDetails: (collectionId: string, baseUrl: string) => Promise<CollectionDetails>;
6
+ export declare const getInstanceDetails: (collectionId: string, instanceId: string, baseUrl: string) => Promise<SoundingsInstance>;
7
+ export declare const getEdrCollectionForLocation: (collectionId: string, baseUrl: string, instanceId: string | undefined, locationId: string, parameters: string[], datetime: string, verticalRange: string) => Promise<CoverageCollection<VerticalProfileDomain> | Coverage<VerticalProfileDomain>>;
8
+ export declare const getEdrCollectionForPosition: (collectionId: string, baseUrl: string, instanceId: string | undefined, coordinates: [number, number], parameters: string[], datetime: string, verticalRange: string) => Promise<CoverageCollection<VerticalProfileDomain> | Coverage<VerticalProfileDomain>>;
9
+ /**
10
+ * EDR radius query to fetch data from grid points within a radius around a center point.
11
+ * The radius should be set close to the source grid resolution to capture nearby grid points.
12
+ * Returns a CoverageCollection with coverages for each grid point within the radius.
13
+ */
14
+ export declare const getEdrCollectionForRadius: (collectionId: string, baseUrl: string, instanceId: string | undefined, centerCoordinates: [number, number], radiusKm: number, parameters: string[], datetime: string, verticalRange: string) => Promise<CoverageCollection<VerticalProfileDomain> | Coverage<VerticalProfileDomain>>;
@@ -0,0 +1,16 @@
1
+ export declare const helsinkiLat = 60.192059;
2
+ export declare const helsinkiLon = 24.945831;
3
+ export declare const helsinki = "Helsinki";
4
+ export declare const mockLocations: {
5
+ features: {
6
+ id: string;
7
+ geometry: {
8
+ type: string;
9
+ coordinates: number[];
10
+ };
11
+ properties: {
12
+ name: string;
13
+ };
14
+ }[];
15
+ };
16
+ export declare const fmiEdrCollectionsHandlers: import("msw").HttpHandler[];
@@ -0,0 +1,98 @@
1
+ import type { Coordinates, SoundingsCollection } from '@opengeoweb/shared';
2
+ import type { SoundingFeature } from './types';
3
+ import type { ServiceWithLocations } from '../../components/MenuBar/LocationsMenu';
4
+ import type { SoundingsCollectionsWithInstances } from '../../components/Soundings/types';
5
+ import type { SourceType } from '../../store/types';
6
+ export declare const sortSoundingFeatures: (data: SoundingFeature[]) => SoundingFeature[];
7
+ export declare const defaultParameterMappings: {
8
+ temperature: string;
9
+ windDirection: string;
10
+ windSpeed: string;
11
+ windU: string;
12
+ windV: string;
13
+ pressure: string;
14
+ dewpoint: string;
15
+ humidity: string;
16
+ specificHumidity: string;
17
+ relativeHumidity: string;
18
+ };
19
+ export declare const getParameterMappings: (parameterMappings: Record<string, string>) => string[];
20
+ export declare const useMultipleSources: (sources: SourceType[], locations: Record<string, string | undefined | Coordinates>, datetime?: string) => {
21
+ data: SoundingFeature[][];
22
+ isPending: boolean;
23
+ error: Error | null | undefined;
24
+ };
25
+ /**
26
+ * Resolve relative reference-time tokens ("latest-N") on the given sources to
27
+ * concrete instance ids against the freshest instance list, recomputing the
28
+ * vertical range from the resolved instance. Sources with an absolute instance
29
+ * id pass through unchanged. Re-resolving on every refetch is what makes a
30
+ * "Latest" selection follow newly published model runs.
31
+ */
32
+ export declare const useResolvedSourceSelections: (sources: SourceType[]) => SourceType[];
33
+ export declare const useTimesteps: (sourceSelections: SourceType[]) => {
34
+ data: string[][];
35
+ error: Error | null;
36
+ isPending: boolean;
37
+ };
38
+ export declare const useGetCollectionsInstances: (collections?: SoundingsCollection[], isDialogOpen?: boolean) => {
39
+ data: SoundingsCollectionsWithInstances[] | undefined;
40
+ isPending: boolean;
41
+ error: Error | null | undefined;
42
+ };
43
+ export declare const useGetCollectionLocations: <SoundingsCollectionLike extends {
44
+ id: string;
45
+ url: string;
46
+ name: string;
47
+ }>(collections: SoundingsCollectionLike[], enabled?: boolean) => {
48
+ data: ServiceWithLocations[] | undefined;
49
+ isPending: boolean;
50
+ error: Error | null | undefined;
51
+ };
52
+ /**
53
+ * Hook to check whether EDR position queries are supported for each source.
54
+ * Returns a record mapping collectionId to boolean indicating position support.
55
+ *
56
+ * This is used to determine whether to use position queries (exact coordinates)
57
+ * or fall back to location queries (nearest station marker).
58
+ */
59
+ export declare const useCheckPositionQuerySupportBySource: (sources: SourceType[]) => {
60
+ data: Record<string, boolean>;
61
+ isPending: boolean;
62
+ };
63
+ /**
64
+ * Hook to check whether EDR radius queries are supported for each source.
65
+ * Returns a record mapping collectionId to boolean indicating radius support.
66
+ *
67
+ * This is used to determine whether we can fetch grid points within a radius
68
+ * around the clicked position to show source-specific grid point markers.
69
+ */
70
+ export declare const useCheckRadiusQuerySupportBySource: (sources: SourceType[]) => {
71
+ data: Record<string, boolean>;
72
+ isPending: boolean;
73
+ };
74
+ /**
75
+ * Grid point data returned by useGridPointsFromRadius hook.
76
+ * Contains the nearest grid point coordinates for each source.
77
+ */
78
+ export interface GridPointData {
79
+ sourceId: string;
80
+ gridPoint: [number, number] | undefined;
81
+ allGridPoints: [number, number][];
82
+ }
83
+ /**
84
+ * Hook to fetch grid points within a radius around a center position for each source.
85
+ * Uses EDR radius queries to find actual grid point positions.
86
+ * Returns the nearest grid point to the center for each source.
87
+ *
88
+ * @param sources - Array of source configurations
89
+ * @param radiusSupport - Record mapping collectionId to boolean indicating radius support
90
+ * @param centerCoordinates - The clicked position [lon, lat]
91
+ * @param datetime - Selected datetime for the query
92
+ * @param enabled - Whether to run the queries
93
+ */
94
+ export declare const useGridPointsFromRadius: (sources: SourceType[], radiusSupport: Record<string, boolean>, centerCoordinates: [number, number] | undefined, datetime: string | undefined, enabled?: boolean) => {
95
+ data: Record<string, GridPointData>;
96
+ isPending: boolean;
97
+ error: Error | null;
98
+ };
@@ -0,0 +1,38 @@
1
+ import type { Geometry } from 'geojson';
2
+ import type { EDRInstance, EdrParameter } from '@opengeoweb/shared';
3
+ export interface FeaturesFromBE {
4
+ id: string;
5
+ type: string;
6
+ geometry: Geometry;
7
+ properties: {
8
+ datetime: string;
9
+ detail: string;
10
+ name: string;
11
+ };
12
+ }
13
+ export interface LocationsResponseFromBE {
14
+ features: FeaturesFromBE[];
15
+ type: string;
16
+ }
17
+ export interface SoundingFeatureProperties {
18
+ time: string;
19
+ temp: number;
20
+ dewpoint: number;
21
+ pressure: number;
22
+ windSpeed: number;
23
+ windDirection: number;
24
+ }
25
+ export interface SoundingFeature {
26
+ type: 'Feature';
27
+ geometry: Geometry;
28
+ properties: SoundingFeatureProperties;
29
+ }
30
+ export type SoundingsInstance = EDRInstance;
31
+ export interface SoundingsInstances {
32
+ instances: SoundingsInstance[];
33
+ }
34
+ export interface CollectionDetails extends EDRInstance {
35
+ parameter_names: Record<string, EdrParameter>;
36
+ }
37
+ export declare const soundingDiagrams: readonly ["SKEWT", "BIJVOET", "EMAGRAM"];
38
+ export type SoundingDiagramType = (typeof soundingDiagrams)[number];
@@ -0,0 +1,21 @@
1
+ import type { Coverage, CoverageCollection, VerticalProfileDomain } from '@opengeoweb/shared';
2
+ import type { CollectionDetails, SoundingFeature, SoundingsInstance } from './types';
3
+ export declare const getWindSpeedInKts: (windSpeed: number, windSpeedUnit: string) => number;
4
+ export declare const getNearestTimestep: (requestedDatetime: string, availableTimesteps: string[]) => string;
5
+ export declare function parseCoverageCollection(response: CoverageCollection<VerticalProfileDomain> | Coverage<VerticalProfileDomain>, parameterMappings: Record<string, string>, windSpeedUnit: string): SoundingFeature[];
6
+ export declare const buildIntervalDatetime: (timesteps: string[]) => string;
7
+ /**
8
+ * Parse duration with repeats
9
+ * @param dateString e.g. 'R67/2025-04-22T09:00:00Z/PT60M'
10
+ * @returns Array of ISO datetime strings, e.g., ['2025-04-22T09:00:00.000Z', ...]
11
+ */
12
+ export declare const parseDurationWithRepeats: (dateString: string) => string[];
13
+ export declare const getTimestepsFromInstanceOrCollection: (instanceOrCollection?: SoundingsInstance | CollectionDetails) => string[];
14
+ export declare const getVerticalRangeFromInstance: (instance: SoundingsInstance | undefined) => string;
15
+ /**
16
+ * Extract unique grid point coordinates from a coverage collection response.
17
+ * Used to find the actual grid point positions returned by radius queries.
18
+ * @param response - CoverageCollection or single Coverage response from EDR API
19
+ * @returns Array of [lon, lat] coordinate pairs for each unique grid point
20
+ */
21
+ export declare function extractGridPointsFromCoverage(response: CoverageCollection<VerticalProfileDomain> | Coverage<VerticalProfileDomain>): [number, number][];
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { SoundingFeature } from '../../api/edr-api/types';
3
+ export interface HodographProps {
4
+ data: SoundingFeature[][];
5
+ }
6
+ export declare const Hodograph: React.FC<HodographProps>;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { SoundingFeature } from '../../api/edr-api/types';
3
+ export interface HodographCollectionProps {
4
+ data: SoundingFeature[][];
5
+ }
6
+ export declare const HodographCollection: React.FC<HodographCollectionProps>;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const HodographLegend: () => React.ReactElement;
@@ -0,0 +1,53 @@
1
+ import * as d3 from 'd3';
2
+ import type { ScalesType } from '../Soundings/types';
3
+ interface InitializeSvg {
4
+ svgRef: React.RefObject<SVGSVGElement | null>;
5
+ widthHeight: number;
6
+ }
7
+ export declare const initializeSvg: ({ svgRef, widthHeight, }: InitializeSvg) => d3.Selection<SVGSVGElement | null, unknown, null, undefined>;
8
+ export declare const createScales: (widthHeight: number) => [ScalesType, ScalesType];
9
+ interface DrawAxis {
10
+ svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, undefined>;
11
+ scaleRadius: ScalesType;
12
+ scaleAngle: ScalesType;
13
+ widthHeight: number;
14
+ }
15
+ export declare const drawAxes: ({ svg, scaleRadius, scaleAngle, widthHeight, }: DrawAxis) => void;
16
+ export declare const filterDomainRangeForHodograph: (pressureDomain: number[], parameterDomain: [number, number][]) => [number[], [number, number][]];
17
+ type PathSegments = [
18
+ [
19
+ number,
20
+ number
21
+ ][],
22
+ [
23
+ number,
24
+ number
25
+ ][],
26
+ [
27
+ number,
28
+ number
29
+ ][],
30
+ [
31
+ number,
32
+ number
33
+ ][],
34
+ [
35
+ number,
36
+ number
37
+ ][]
38
+ ];
39
+ export declare const altitudeBarometricFromPressure: (pressure: number) => number;
40
+ export declare const generateSegmentsBasedOnLevel: (pressure: number[], windValues: [number, number][]) => PathSegments;
41
+ export declare const HODOGRAPH_COLORS: string[];
42
+ export declare const getColorForSegment: (index: number) => string;
43
+ interface PlotHodograph {
44
+ windValues: [number, number][];
45
+ pressureValues: number[];
46
+ scaleAngle: ScalesType;
47
+ scaleRadius: ScalesType;
48
+ widthHeight: number;
49
+ svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, undefined>;
50
+ index: number;
51
+ }
52
+ export declare const plotHodograph: ({ windValues, pressureValues, scaleAngle, scaleRadius, widthHeight, svg, index, }: PlotHodograph) => void;
53
+ export {};
@@ -0,0 +1,20 @@
1
+ import type { Coordinates } from '@opengeoweb/shared';
2
+ import type { LocationsResponseFromBE } from '../../api/edr-api/types';
3
+ export type ServiceWithLocations = LocationsResponseFromBE & {
4
+ id: string;
5
+ name: string;
6
+ };
7
+ interface Props {
8
+ services: ServiceWithLocations[];
9
+ selectedSourcesAmount: number;
10
+ selectedLocations: Record<string, string | Coordinates | undefined>;
11
+ isOpen: boolean;
12
+ onClose: () => void;
13
+ updateSelectedLocation: (sourceId: string, locationId: string | undefined) => void;
14
+ onMouseDown?: () => void;
15
+ order?: number;
16
+ isLoading?: boolean;
17
+ error?: Error | null;
18
+ }
19
+ export declare const LocationsMenu: ({ services, selectedSourcesAmount, selectedLocations, isOpen, onClose, updateSelectedLocation, onMouseDown, order, isLoading, error, }: Props) => React.ReactElement;
20
+ export {};
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { SoundingsCollection } from '@opengeoweb/shared';
3
+ interface Props {
4
+ soundingsCollections?: SoundingsCollection[];
5
+ }
6
+ export declare const LocationsMenuConnect: ({ soundingsCollections, }: Props) => React.ReactElement;
7
+ export {};
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ export declare enum MenuOptions {
3
+ soundingsManager = "Sd Manager",
4
+ sources = "sources",
5
+ locations = "locations",
6
+ profileData = "profileData"
7
+ }
8
+ interface SoundingsMenuBarProps {
9
+ handleClick: (menuType: MenuOptions) => void;
10
+ isOpen: Record<MenuOptions, boolean>;
11
+ selectedSourcesAmount?: number;
12
+ shouldHideMarkers: boolean;
13
+ toggleMarkers: (shouldHideMarkers: boolean) => void;
14
+ }
15
+ export declare const SoundingsMenuBar: ({ handleClick, isOpen, selectedSourcesAmount, shouldHideMarkers, toggleMarkers, }: SoundingsMenuBarProps) => React.ReactElement;
16
+ export {};
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { uiTypes } from '@opengeoweb/store';
3
+ interface MenuBarConnectProps {
4
+ viewId: string;
5
+ source?: uiTypes.Source;
6
+ }
7
+ export declare const MenuBarConnect: ({ viewId, source, }: MenuBarConnectProps) => React.ReactElement;
8
+ export {};
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface SoundingsMarkersSwitchProps {
3
+ shouldHideMarkers: boolean;
4
+ toggleMarkers: (shouldHideMarkers: boolean) => void;
5
+ }
6
+ export declare const SoundingsMarkersSwitch: React.FC<SoundingsMarkersSwitchProps>;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SoundingsProfileDataDialogConnect: () => React.ReactElement;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { SoundingsProfileDataPreferences } from '../../utils/profileDataPreferences';
3
+ export interface SoundingsProfileDataMenuProps {
4
+ preferences: SoundingsProfileDataPreferences;
5
+ onPreferencesChange: (next: SoundingsProfileDataPreferences) => void;
6
+ isOpen?: boolean;
7
+ handleClose: () => void;
8
+ onMouseDown?: () => void;
9
+ order?: number;
10
+ }
11
+ export declare const SoundingsProfileDataMenu: ({ preferences, onPreferencesChange, isOpen, handleClose, onMouseDown, order, }: SoundingsProfileDataMenuProps) => React.ReactElement;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { SoundingsCollection } from '@opengeoweb/shared';
3
+ interface SoundingsSourceDialogConnectProps {
4
+ soundingsCollections: SoundingsCollection[] | undefined;
5
+ }
6
+ export declare const SoundingsSourceDialogConnect: ({ soundingsCollections, }: SoundingsSourceDialogConnectProps) => React.ReactElement;
7
+ export {};
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { SourceSelection } from '@opengeoweb/shared';
3
+ import type { SoundingsCollectionsWithInstances } from '../Soundings/types';
4
+ interface SoundingsSourceMenuProps {
5
+ soundingsCollections: SoundingsCollectionsWithInstances[] | undefined;
6
+ isOpen?: boolean;
7
+ handleClose: () => void;
8
+ updateCollection: (sourceId: string, value: SourceSelection) => void;
9
+ sourceSelections: Record<string, SourceSelection>;
10
+ onMouseDown?: () => void;
11
+ order?: number;
12
+ isLoading?: boolean;
13
+ error?: Error | null;
14
+ }
15
+ export declare const SoundingsSourceMenu: ({ soundingsCollections, isOpen, handleClose, updateCollection, sourceSelections, onMouseDown, order, isLoading, error, }: SoundingsSourceMenuProps) => React.ReactElement;
16
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { CustomToggleButtonProps } from '@opengeoweb/shared';
3
+ interface SoundingsButtonProps extends CustomToggleButtonProps {
4
+ icon: React.ReactNode;
5
+ shortText?: string;
6
+ longText: string;
7
+ }
8
+ export declare const SoundingsTopRowButton: import("@emotion/styled").StyledComponent<Omit<SoundingsButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
9
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { Store } from '@reduxjs/toolkit';
2
+ interface SoundingsTranslationsWrapperProps {
3
+ children: React.ReactNode;
4
+ }
5
+ export declare const SoundingsI18nProvider: React.FC<SoundingsTranslationsWrapperProps>;
6
+ interface SoundingsStoreWrapperProps {
7
+ children: React.ReactNode;
8
+ store?: Store;
9
+ }
10
+ export declare const SoundingsStoreProvider: React.FC<SoundingsStoreWrapperProps>;
11
+ export declare const SoundingsStoryStoreProvider: React.FC<SoundingsStoreWrapperProps>;
12
+ export {};
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const MultipleResizablePanelsDemo: () => React.JSX.Element;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export interface ResizablePanelProps {
3
+ name: string;
4
+ minWidth?: number;
5
+ maxWidth?: number;
6
+ isOpen?: boolean;
7
+ headerAction?: React.ReactElement;
8
+ handleButtonComponent?: React.ReactElement;
9
+ children?: React.ReactNode;
10
+ onSetIsOpen?: (isOpen: boolean) => void;
11
+ onSetCustomWidth?: (width: number) => void;
12
+ onResizeStart?: () => void;
13
+ onResizeEnd?: () => void;
14
+ customWidth?: number;
15
+ isDisplayed?: boolean;
16
+ resizeOnViewCloseSignal?: number;
17
+ }
18
+ export declare const ResizablePanel: React.ForwardRefExoticComponent<ResizablePanelProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export interface ResizablePanelWrapperProps {
3
+ name: string;
4
+ children: React.ReactNode;
5
+ isDisplayed: boolean;
6
+ /**
7
+ * Optional. Only used by redux-aware panel components (e.g.
8
+ * SoundingsPanelConnect) to key external state. Standalone usage ignores it.
9
+ */
10
+ panelId?: string;
11
+ /**
12
+ * Optional. Only used by redux-aware panel components to key external state
13
+ * by parent view. Standalone usage ignores it.
14
+ */
15
+ viewId?: string;
16
+ headerAction?: React.ReactElement;
17
+ handleButtonComponent?: React.ReactElement;
18
+ maxWidth?: number;
19
+ minWidth?: number;
20
+ onOpenChange?: (isOpen: boolean) => void;
21
+ onResizeStart?: () => void;
22
+ onResizeEnd?: () => void;
23
+ }
24
+ export type ResizablePanelComponent = React.ForwardRefExoticComponent<ResizablePanelWrapperProps & React.RefAttributes<HTMLDivElement>>;
25
+ export declare const ResizablePanelStandalone: React.ForwardRefExoticComponent<ResizablePanelWrapperProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import type { ResizablePanelComponent } from '../ResizablePanel/ResizablePanelStandalone';
3
+ export interface SortablePanelItem {
4
+ id: string;
5
+ name: string;
6
+ isDisplayed: boolean;
7
+ minWidth?: number;
8
+ maxWidth?: number;
9
+ headerAction?: React.ReactElement;
10
+ render: () => React.ReactNode;
11
+ panelRef?: React.Ref<HTMLDivElement>;
12
+ onOpenChange?: (isOpen: boolean) => void;
13
+ onResizeStart?: () => void;
14
+ onResizeEnd?: () => void;
15
+ }
16
+ export interface SortablePanelsProps {
17
+ panels: SortablePanelItem[];
18
+ onOrderChange: (newOrder: {
19
+ id: string;
20
+ name: string;
21
+ isDisplayed: boolean;
22
+ }[]) => void;
23
+ panelComponent?: ResizablePanelComponent;
24
+ /**
25
+ * Optional. Forwarded to each rendered panel component. Redux-aware panel
26
+ * components use it to scope their external state by parent view.
27
+ */
28
+ viewId?: string;
29
+ }
30
+ export declare const SortablePanels: ({ panels, onOrderChange, panelComponent: PanelComponent, viewId, }: SortablePanelsProps) => React.ReactElement;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export interface SoundingPanelPlaceholderProps {
3
+ panelName: string;
4
+ }
5
+ export declare const SoundingPanelPlaceholder: React.FC<SoundingPanelPlaceholderProps>;
@@ -0,0 +1 @@
1
+ export * from './SoundingPanelPlaceholder';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { SoundingDiagramType } from '../../api/edr-api/types';
3
+ interface DiagramTypeButtonProps {
4
+ diagramType: SoundingDiagramType;
5
+ setDiagramType: (diagramType: SoundingDiagramType) => void;
6
+ }
7
+ export declare const DiagramTypeButton: ({ diagramType, setDiagramType, }: DiagramTypeButtonProps) => React.ReactElement;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ interface MouseYCtx {
3
+ clientY: number | null;
4
+ }
5
+ export declare const useSharedMouseY: () => MouseYCtx;
6
+ /**
7
+ * Wraps the area containing Soundings + WindBarbs so both can react
8
+ * to the same vertical mouse position (X ignored).
9
+ */
10
+ export declare const SharedMouseYProvider: React.FC<{
11
+ children: React.ReactNode;
12
+ }>;
13
+ export {};
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { Margin } from './drawUtils';
3
+ import type { SoundingFeature, SoundingDiagramType } from '../../api/edr-api/types';
4
+ export interface SoundingProps {
5
+ d3GraphId: string;
6
+ data: SoundingFeature[][];
7
+ svgDimensions: {
8
+ width: number;
9
+ height: number;
10
+ margin: Margin;
11
+ };
12
+ showTooltip?: boolean;
13
+ diagramType?: SoundingDiagramType;
14
+ }
15
+ export declare const Soundings: React.FC<SoundingProps>;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { SoundingsViewState } from '../../store/types';
3
+ interface SoundingsConnectProps {
4
+ viewId: string;
5
+ soundingsPreset?: SoundingsViewState;
6
+ }
7
+ export declare const SoundingsConnect: ({ viewId, soundingsPreset, }: SoundingsConnectProps) => React.ReactElement;
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { SourceType } from '../../store/types';
3
+ export declare const getLegendTitle: (source: SourceType, resolvedInstanceId?: string) => string;
4
+ export declare const getLegendTooltipLines: (source: SourceType, gridPoint: [number, number] | undefined, selectedPoint: [number, number] | undefined, locationName?: string, resolvedInstanceId?: string) => string[];
5
+ interface SoundingsLegendProps {
6
+ sourceSelections: SourceType[];
7
+ sourceGridPoints?: Record<string, [number, number] | undefined>;
8
+ sourceLocationNames?: Record<string, string | undefined>;
9
+ sourceResolvedInstanceIds?: Record<string, string>;
10
+ selectedPoint?: [number, number];
11
+ }
12
+ export declare const SoundingsLegend: ({ sourceSelections, sourceGridPoints, sourceLocationNames, sourceResolvedInstanceIds, selectedPoint, }: SoundingsLegendProps) => React.ReactElement;
13
+ export {};
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { Margin } from './drawUtils';
3
+ import type { SoundingDiagramType, SoundingFeature } from '../../api/edr-api/types';
4
+ export interface WindBarbsProps {
5
+ d3GraphId: string;
6
+ data: SoundingFeature[][];
7
+ svgDimensions: {
8
+ width: number;
9
+ height: number;
10
+ margin: Margin;
11
+ };
12
+ showTooltip?: boolean;
13
+ diagramType?: SoundingDiagramType;
14
+ animateResize?: boolean;
15
+ }
16
+ export declare const WindBarbs: React.FC<WindBarbsProps>;
@@ -0,0 +1,4 @@
1
+ import type * as d3 from 'd3';
2
+ import type { RefObject } from 'react';
3
+ import type { Margin } from './drawUtils';
4
+ export declare const animateResizeTransform: (svg: d3.Selection<SVGElement, unknown, HTMLElement, unknown>, marginLocal: Margin, innerHeight: number, prevInnerHeightRef: RefObject<number | null>) => void;
@@ -0,0 +1,20 @@
1
+ export declare const maxPressure = 1050;
2
+ export declare const minPressure = 150;
3
+ export declare const staticPressureArray: number[];
4
+ export declare const dp = -5;
5
+ export declare const minEmagramTemperature = -80;
6
+ export declare const minTemperature = -40;
7
+ export declare const maxTemperature = 40.6;
8
+ export declare const T_KAPPA = 0.2857;
9
+ export declare const T_KTHETA = 332;
10
+ export declare const KELVIN = 273.156;
11
+ export declare const WV_CA = 17.56881;
12
+ export declare const WV_CB = 241.8945;
13
+ export declare const WV_CE = 610.7;
14
+ export declare const EPSILON = 0.622;
15
+ export declare const R_AIR = 287.04;
16
+ export declare const HEATCP = 1005;
17
+ export declare const REFERENCE_PRESSURE: number;
18
+ export declare const EARTH_MEAN_RADIUS = 6371;
19
+ export declare const MAX_PROXIMITY_RADIUS = 100;
20
+ export declare const SAME_POINT_DISTANCE_KM = 0.05;