@open-pioneer/coordinate-viewer 1.5.0-dev.20260911123645 → 1.5.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.
package/CHANGELOG.md CHANGED
@@ -1,10 +1,11 @@
1
1
  # @open-pioneer/coordinate-viewer
2
2
 
3
- ## 1.5.0-dev.20260911123645
3
+ ## 1.5.0
4
4
 
5
5
  ### Minor Changes
6
6
 
7
7
  - f790fda: Update to Chakra 3.37.0
8
+ - a186f5d: Update core packages to 4.8.0.
8
9
 
9
10
  ### Patch Changes
10
11
 
@@ -76,17 +77,17 @@
76
77
  - 193068a: Deprecate the `mapId` property on React components.
77
78
  Use the `MapModel` directly instead to pass a reference to the map.
78
79
 
79
- Example:
80
+ Example:
80
81
 
81
- ```tsx
82
- // Default map for entire component tree
83
- <DefaultMapProvider map={mapModel}>
84
- <Toc />
85
- </DefaultMapProvider>
82
+ ```tsx
83
+ // Default map for entire component tree
84
+ <DefaultMapProvider map={mapModel}>
85
+ <Toc />
86
+ </DefaultMapProvider>
86
87
 
87
- // Map for specific component
88
- <Toc map={mapModel} />
89
- ```
88
+ // Map for specific component
89
+ <Toc map={mapModel} />
90
+ ```
90
91
 
91
92
  ### Patch Changes
92
93
 
@@ -105,9 +106,9 @@
105
106
  ### Minor Changes
106
107
 
107
108
  - 2fa8020: Update trails core package dependencies.
108
- - Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
109
- - Removes any obsolete references to `@chakra-ui/system`.
110
- This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
109
+ - Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
110
+ - Removes any obsolete references to `@chakra-ui/system`.
111
+ This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
111
112
 
112
113
  ### Patch Changes
113
114
 
@@ -126,16 +127,16 @@
126
127
  - 583f1d6: The `mapId` or `map` properties are now optional on individual components.
127
128
  You can use the `DefaultMapProvider` to configure an implicit default value.
128
129
 
129
- Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
130
+ Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
130
131
 
131
132
  - 583f1d6: All UI components in this project now accept the `mapId` (a `string`) _or_ the `map` (a `MapModel`) directly.
132
133
  - a8b3449: Switch to a new versioning strategy.
133
134
  From now on, packages released by this repository share a common version number.
134
135
  - 6b59779: Added option to display geographic coordinates in angle format (DMS) in CoordinateViewer:
135
136
 
136
- ```jsx
137
- <CoordinateViewer mapId="map_id" format="degree" />
138
- ```
137
+ ```jsx
138
+ <CoordinateViewer mapId="map_id" format="degree" />
139
+ ```
139
140
 
140
141
  - 900eb11: Update dependencies.
141
142
 
@@ -179,15 +180,11 @@
179
180
 
180
181
  - 66f5733: add optional property for display coordinate projection
181
182
 
182
- example (show WGS84 coordinates on display):
183
+ example (show WGS84 coordinates on display):
183
184
 
184
- ```jsx
185
- <CoordinateViewer
186
- mapId={MAP_ID}
187
- precision={2}
188
- displayProjectionCode="EPSG:4326"
189
- />
190
- ```
185
+ ```jsx
186
+ <CoordinateViewer mapId={MAP_ID} precision={2} displayProjectionCode="EPSG:4326" />
187
+ ```
191
188
 
192
189
  ## 0.3.0
193
190
 
@@ -1 +1 @@
1
- {"version":3,"file":"CoordinateViewer.js","sources":["CoordinateViewer.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { MapModel, MapModelProps, useMapModelValue } from \"@open-pioneer/map\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { Coordinate } from \"ol/coordinate\";\nimport { EventsKey } from \"ol/events\";\nimport { unByKey } from \"ol/Observable\";\nimport { transform } from \"ol/proj\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { FC, useEffect, useMemo, useState } from \"react\";\nimport { formatCoordinates } from \"./formatCoordinates\";\n\n/**\n * These are special properties for the CoordinateViewer.\n */\nexport interface CoordinateViewerProps extends CommonComponentProps, MapModelProps {\n /**\n * Number of decimal places shown for coordinates.\n */\n precision?: number;\n\n /**\n * Projection of the coordinates shown in the rendered HTML, does not affect the map projection\n */\n displayProjectionCode?: string;\n\n /**\n * Configures the display format.\n * By default, the current coordinates are shown as decimal numbers (format: \"decimal\").\n *\n * If the format is set to \"degree\", the coordinates are shown in angular degrees (DMS).\n * This can only be used meaningfully (at this time) if the underlying projection provides lat/lon coordinates.\n */\n format?: \"decimal\" | \"degree\";\n}\n\n/**\n * The `CoordinateViewer` component can be used in an app to render the coordinates at the current mouse position.\n */\nexport const CoordinateViewer: FC<CoordinateViewerProps> = (props) => {\n const { precision, displayProjectionCode, format } = props;\n const { containerProps } = useCommonComponentProps(\"coordinate-viewer\", props);\n const map = useMapModelValue(props);\n const intl = useIntl();\n const { coordinates, projectionCode } = useCoordinates(map, displayProjectionCode);\n\n const coordinatesString = useMemo(() => {\n if (!coordinates) {\n return \"\";\n }\n return formatCoordinates(coordinates, precision, intl, format);\n }, [coordinates, precision, format, intl]);\n\n let displayString = \"\";\n if (coordinatesString) {\n displayString = `${coordinatesString} ${projectionCode}`;\n }\n\n return (\n <Box {...containerProps}>\n <Text className=\"coordinate-viewer-text\">{displayString}</Text>\n </Box>\n );\n};\n\nfunction useCoordinates(map: MapModel, displayProjectionCode: string | undefined) {\n const [coordinates, setCoordinates] = useState<Coordinate | undefined>();\n const mapProjectionCode = useReactiveSnapshot(() => {\n return map?.projection.getCode() ?? \"\";\n }, [map]);\n\n useEffect(() => {\n const eventsKey: EventsKey = map.olMap.on(\"pointermove\", (evt) => {\n setCoordinates(evt.coordinate);\n });\n return () => unByKey(eventsKey);\n }, [map]);\n\n const finalCoordinates = useMemo(() => {\n if (coordinates && displayProjectionCode) {\n return transformCoordinates(coordinates, mapProjectionCode, displayProjectionCode);\n }\n return coordinates;\n }, [coordinates, mapProjectionCode, displayProjectionCode]);\n const projectionCode = displayProjectionCode ? displayProjectionCode : mapProjectionCode;\n return { coordinates: finalCoordinates, projectionCode };\n}\n\nfunction transformCoordinates(\n coordinates: number[],\n source: string,\n destination: string\n): number[] {\n const transformed = transform(coordinates, source, destination);\n return transformed;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA0CO,MAAM,gBAAA,GAA8C,CAAC,KAAA,KAAU;AAClE,EAAA,MAAM,EAAE,SAAA,EAAW,qBAAA,EAAuB,MAAA,EAAO,GAAI,KAAA;AACrD,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,uBAAA,CAAwB,qBAAqB,KAAK,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,iBAAiB,KAAK,CAAA;AAClC,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAe,GAAI,cAAA,CAAe,KAAK,qBAAqB,CAAA;AAEjF,EAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,OAAO,EAAA;AAAA,IACX;AACA,IAAA,OAAO,iBAAA,CAAkB,WAAA,EAAa,SAAA,EAAW,IAAA,EAAM,MAAM,CAAA;AAAA,EACjE,GAAG,CAAC,WAAA,EAAa,SAAA,EAAW,MAAA,EAAQ,IAAI,CAAC,CAAA;AAEzC,EAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,EAAA,IAAI,iBAAA,EAAmB;AACnB,IAAA,aAAA,GAAgB,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA;AAAA,EAC1D;AAEA,EAAA,uBACI,GAAA,CAAC,OAAK,GAAG,cAAA,EACL,8BAAC,IAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,aAAA,EAAc,CAAA,EAC5D,CAAA;AAER;AAEA,SAAS,cAAA,CAAe,KAAe,qBAAA,EAA2C;AAC9E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,EAAiC;AACvE,EAAA,MAAM,iBAAA,GAAoB,oBAAoB,MAAM;AAChD,IAAA,OAAO,GAAA,EAAK,UAAA,CAAW,OAAA,EAAQ,IAAK,EAAA;AAAA,EACxC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,YAAuB,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,aAAA,EAAe,CAAC,GAAA,KAAQ;AAC9D,MAAA,cAAA,CAAe,IAAI,UAAU,CAAA;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,OAAO,MAAM,QAAQ,SAAS,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACnC,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACtC,MAAA,OAAO,oBAAA,CAAqB,WAAA,EAAa,iBAAA,EAAmB,qBAAqB,CAAA;AAAA,IACrF;AACA,IAAA,OAAO,WAAA;AAAA,EACX,CAAA,EAAG,CAAC,WAAA,EAAa,iBAAA,EAAmB,qBAAqB,CAAC,CAAA;AAC1D,EAAA,MAAM,cAAA,GAAiB,wBAAwB,qBAAA,GAAwB,iBAAA;AACvE,EAAA,OAAO,EAAE,WAAA,EAAa,gBAAA,EAAkB,cAAA,EAAe;AAC3D;AAEA,SAAS,oBAAA,CACL,WAAA,EACA,MAAA,EACA,WAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,WAAA,EAAa,MAAA,EAAQ,WAAW,CAAA;AAC9D,EAAA,OAAO,WAAA;AACX;;;;"}
1
+ {"version":3,"file":"CoordinateViewer.js","sources":["CoordinateViewer.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { MapModel, MapModelProps, useMapModelValue } from \"@open-pioneer/map\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { Coordinate } from \"ol/coordinate\";\nimport { EventsKey } from \"ol/events\";\nimport { unByKey } from \"ol/Observable\";\nimport { transform } from \"ol/proj\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { FC, useEffect, useMemo, useState } from \"react\";\nimport { formatCoordinates } from \"./formatCoordinates\";\n\n/**\n * These are special properties for the CoordinateViewer.\n */\nexport interface CoordinateViewerProps extends CommonComponentProps, MapModelProps {\n /**\n * Number of decimal places shown for coordinates.\n */\n precision?: number;\n\n /**\n * Projection of the coordinates shown in the rendered HTML, does not affect the map projection\n */\n displayProjectionCode?: string;\n\n /**\n * Configures the display format.\n * By default, the current coordinates are shown as decimal numbers (format: \"decimal\").\n *\n * If the format is set to \"degree\", the coordinates are shown in angular degrees (DMS).\n * This can only be used meaningfully (at this time) if the underlying projection provides lat/lon coordinates.\n */\n format?: \"decimal\" | \"degree\";\n}\n\n/**\n * The `CoordinateViewer` component can be used in an app to render the coordinates at the current mouse position.\n */\nexport const CoordinateViewer: FC<CoordinateViewerProps> = (props) => {\n const { precision, displayProjectionCode, format } = props;\n const { containerProps } = useCommonComponentProps(\"coordinate-viewer\", props);\n const map = useMapModelValue(props);\n const intl = useIntl();\n const { coordinates, projectionCode } = useCoordinates(map, displayProjectionCode);\n\n const coordinatesString = useMemo(() => {\n if (!coordinates) {\n return \"\";\n }\n return formatCoordinates(coordinates, precision, intl, format);\n }, [coordinates, precision, format, intl]);\n\n let displayString = \"\";\n if (coordinatesString) {\n displayString = `${coordinatesString} ${projectionCode}`;\n }\n\n return (\n <Box {...containerProps}>\n <Text className=\"coordinate-viewer-text\">{displayString}</Text>\n </Box>\n );\n};\n\nfunction useCoordinates(map: MapModel, displayProjectionCode: string | undefined) {\n const [coordinates, setCoordinates] = useState<Coordinate | undefined>();\n const mapProjectionCode = useReactiveSnapshot(() => {\n return map?.projection.getCode() ?? \"\";\n }, [map]);\n\n useEffect(() => {\n const eventsKey: EventsKey = map.olMap.on(\"pointermove\", (evt) => {\n setCoordinates(evt.coordinate);\n });\n return () => unByKey(eventsKey);\n }, [map]);\n\n const finalCoordinates = useMemo(() => {\n if (coordinates && displayProjectionCode) {\n return transformCoordinates(coordinates, mapProjectionCode, displayProjectionCode);\n }\n return coordinates;\n }, [coordinates, mapProjectionCode, displayProjectionCode]);\n const projectionCode = displayProjectionCode ? displayProjectionCode : mapProjectionCode;\n return { coordinates: finalCoordinates, projectionCode };\n}\n\nfunction transformCoordinates(\n coordinates: number[],\n source: string,\n destination: string\n): number[] {\n const transformed = transform(coordinates, source, destination);\n return transformed;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA0CO,MAAM,gBAAA,GAA8C,CAAC,KAAA,KAAU;AAClE,EAAA,MAAM,EAAE,SAAA,EAAW,qBAAA,EAAuB,MAAA,EAAO,GAAI,KAAA;AACrD,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,uBAAA,CAAwB,qBAAqB,KAAK,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,iBAAiB,KAAK,CAAA;AAClC,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAe,GAAI,cAAA,CAAe,KAAK,qBAAqB,CAAA;AAEjF,EAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,OAAO,EAAA;AAAA,IACX;AACA,IAAA,OAAO,iBAAA,CAAkB,WAAA,EAAa,SAAA,EAAW,IAAA,EAAM,MAAM,CAAA;AAAA,EACjE,GAAG,CAAC,WAAA,EAAa,SAAA,EAAW,MAAA,EAAQ,IAAI,CAAC,CAAA;AAEzC,EAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,EAAA,IAAI,iBAAA,EAAmB;AACnB,IAAA,aAAA,GAAgB,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA;AAAA,EAC1D;AAEA,EAAA,uBACI,GAAA,CAAC,OAAK,GAAG,cAAA,EACL,8BAAC,IAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,aAAA,EAAc,CAAA,EAC5D,CAAA;AAER;AAEA,SAAS,cAAA,CAAe,KAAe,qBAAA,EAA2C;AAC9E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,EAAiC;AACvE,EAAA,MAAM,iBAAA,GAAoB,oBAAoB,MAAM;AAChD,IAAA,OAAO,GAAA,EAAK,UAAA,CAAW,OAAA,EAAQ,IAAK,EAAA;AAAA,EACxC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,YAAuB,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,aAAA,EAAe,CAAC,GAAA,KAAQ;AAC9D,MAAA,cAAA,CAAe,IAAI,UAAU,CAAA;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,OAAO,MAAM,QAAQ,SAAS,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACnC,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACtC,MAAA,OAAO,oBAAA,CAAqB,WAAA,EAAa,iBAAA,EAAmB,qBAAqB,CAAA;AAAA,IACrF;AACA,IAAA,OAAO,WAAA;AAAA,EACX,CAAA,EAAG,CAAC,WAAA,EAAa,iBAAA,EAAmB,qBAAqB,CAAC,CAAA;AAC1D,EAAA,MAAM,cAAA,GAAiB,wBAAwB,qBAAA,GAAwB,iBAAA;AACvE,EAAA,OAAO,EAAE,WAAA,EAAa,gBAAA,EAAkB,cAAA,EAAe;AAC3D;AAEA,SAAS,oBAAA,CACL,WAAA,EACA,MAAA,EACA,WAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,WAAA,EAAa,MAAA,EAAQ,WAAW,CAAA;AAC9D,EAAA,OAAO,WAAA;AACX;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"hooks.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatCoordinates.js","sources":["formatCoordinates.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport type { CoordinateViewerProps } from \"./CoordinateViewer\";\n\nconst DEFAULT_PRECISION = 4;\nconst DEFAULT_DISPLAY_FORMAT = \"decimal\";\n\nexport function formatCoordinates(\n coordinates: number[],\n configuredPrecision: number | undefined,\n intl: PackageIntl,\n configuredFormat: CoordinateViewerProps[\"format\"]\n) {\n if (coordinates[0] == null || coordinates[1] == null) {\n return \"\";\n }\n\n const precision = configuredPrecision ?? DEFAULT_PRECISION;\n const format = configuredFormat ?? DEFAULT_DISPLAY_FORMAT;\n const [x, y] = coordinates;\n\n let str;\n // oxlint-disable-next-line oxc/branches-sharing-code\n if (format === \"degree\" && isFinite(x) && isFinite(y)) {\n const [xHour, xMin, xSek] = toDegree(x, intl, precision);\n const [yHour, yMin, ySek] = toDegree(y, intl, precision);\n\n const xString = `${Math.abs(xHour)}°${xMin}'${xSek}\"${0 <= xHour ? \"(E)\" : \"(W)\"}`;\n const yString = `${Math.abs(yHour)}°${yMin}'${ySek}\"${0 <= yHour ? \"(N)\" : \"(S)\"}`;\n\n str = xString + \" \" + yString;\n } else {\n const xString = intl.formatNumber(x, {\n maximumFractionDigits: precision,\n minimumFractionDigits: precision\n });\n const yString = intl.formatNumber(y, {\n maximumFractionDigits: precision,\n minimumFractionDigits: precision\n });\n str = xString + \" \" + yString;\n }\n return str;\n}\n\nfunction toDegree(\n coordPart: number,\n intl: PackageIntl,\n precision: number\n): [number, number, string] {\n const cHour = Math.floor(coordPart);\n const cNach = coordPart - cHour;\n\n const cMin = Math.floor(60 * cNach);\n const cMinNach = 60 * cNach - cMin;\n\n const cSek = 60 * cMinNach;\n const cSekRounded = intl.formatNumber(cSek, {\n maximumFractionDigits: precision,\n minimumFractionDigits: precision\n });\n\n return [cHour, cMin, cSekRounded];\n}\n"],"names":[],"mappings":"AAMA,MAAM,iBAAA,GAAoB,CAAA;AAC1B,MAAM,sBAAA,GAAyB,SAAA;AAExB,SAAS,iBAAA,CACZ,WAAA,EACA,mBAAA,EACA,IAAA,EACA,gBAAA,EACF;AACE,EAAA,IAAI,YAAY,CAAC,CAAA,IAAK,QAAQ,WAAA,CAAY,CAAC,KAAK,IAAA,EAAM;AAClD,IAAA,OAAO,EAAA;AAAA,EACX;AAEA,EAAA,MAAM,YAAY,mBAAA,IAAuB,iBAAA;AACzC,EAAA,MAAM,SAAS,gBAAA,IAAoB,sBAAA;AACnC,EAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,WAAA;AAEf,EAAA,IAAI,GAAA;AAEJ,EAAA,IAAI,WAAW,QAAA,IAAY,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AACnD,IAAA,MAAM,CAAC,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,CAAS,CAAA,EAAG,MAAM,SAAS,CAAA;AACvD,IAAA,MAAM,CAAC,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,CAAS,CAAA,EAAG,MAAM,SAAS,CAAA;AAEvD,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,IAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,CAAA,IAAK,KAAA,GAAQ,QAAQ,KAAK,CAAA,CAAA;AAChF,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,IAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,CAAA,IAAK,KAAA,GAAQ,QAAQ,KAAK,CAAA,CAAA;AAEhF,IAAA,GAAA,GAAM,UAAU,GAAA,GAAM,OAAA;AAAA,EAC1B,CAAA,MAAO;AACH,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,CAAA,EAAG;AAAA,MACjC,qBAAA,EAAuB,SAAA;AAAA,MACvB,qBAAA,EAAuB;AAAA,KAC1B,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,CAAA,EAAG;AAAA,MACjC,qBAAA,EAAuB,SAAA;AAAA,MACvB,qBAAA,EAAuB;AAAA,KAC1B,CAAA;AACD,IAAA,GAAA,GAAM,UAAU,GAAA,GAAM,OAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACX;AAEA,SAAS,QAAA,CACL,SAAA,EACA,IAAA,EACA,SAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAClC,EAAA,MAAM,QAAQ,SAAA,GAAY,KAAA;AAE1B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,KAAK,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,GAAQ,IAAA;AAE9B,EAAA,MAAM,OAAO,EAAA,GAAK,QAAA;AAClB,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM;AAAA,IACxC,qBAAA,EAAuB,SAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GAC1B,CAAA;AAED,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,WAAW,CAAA;AACpC;;;;"}
1
+ {"version":3,"file":"formatCoordinates.js","sources":["formatCoordinates.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport type { CoordinateViewerProps } from \"./CoordinateViewer\";\n\nconst DEFAULT_PRECISION = 4;\nconst DEFAULT_DISPLAY_FORMAT = \"decimal\";\n\nexport function formatCoordinates(\n coordinates: number[],\n configuredPrecision: number | undefined,\n intl: PackageIntl,\n configuredFormat: CoordinateViewerProps[\"format\"]\n) {\n if (coordinates[0] == null || coordinates[1] == null) {\n return \"\";\n }\n\n const precision = configuredPrecision ?? DEFAULT_PRECISION;\n const format = configuredFormat ?? DEFAULT_DISPLAY_FORMAT;\n const [x, y] = coordinates;\n\n let str;\n // oxlint-disable-next-line oxc/branches-sharing-code\n if (format === \"degree\" && isFinite(x) && isFinite(y)) {\n const [xHour, xMin, xSek] = toDegree(x, intl, precision);\n const [yHour, yMin, ySek] = toDegree(y, intl, precision);\n\n const xString = `${Math.abs(xHour)}°${xMin}'${xSek}\"${0 <= xHour ? \"(E)\" : \"(W)\"}`;\n const yString = `${Math.abs(yHour)}°${yMin}'${ySek}\"${0 <= yHour ? \"(N)\" : \"(S)\"}`;\n\n str = xString + \" \" + yString;\n } else {\n const xString = intl.formatNumber(x, {\n maximumFractionDigits: precision,\n minimumFractionDigits: precision\n });\n const yString = intl.formatNumber(y, {\n maximumFractionDigits: precision,\n minimumFractionDigits: precision\n });\n str = xString + \" \" + yString;\n }\n return str;\n}\n\nfunction toDegree(\n coordPart: number,\n intl: PackageIntl,\n precision: number\n): [number, number, string] {\n const cHour = Math.floor(coordPart);\n const cNach = coordPart - cHour;\n\n const cMin = Math.floor(60 * cNach);\n const cMinNach = 60 * cNach - cMin;\n\n const cSek = 60 * cMinNach;\n const cSekRounded = intl.formatNumber(cSek, {\n maximumFractionDigits: precision,\n minimumFractionDigits: precision\n });\n\n return [cHour, cMin, cSekRounded];\n}\n"],"names":[],"mappings":"AAMA,MAAM,iBAAA,GAAoB,CAAA;AAC1B,MAAM,sBAAA,GAAyB,SAAA;AAExB,SAAS,iBAAA,CACZ,WAAA,EACA,mBAAA,EACA,IAAA,EACA,gBAAA,EACF;AACE,EAAA,IAAI,YAAY,CAAC,CAAA,IAAK,QAAQ,WAAA,CAAY,CAAC,KAAK,IAAA,EAAM;AAClD,IAAA,OAAO,EAAA;AAAA,EACX;AAEA,EAAA,MAAM,YAAY,mBAAA,IAAuB,iBAAA;AACzC,EAAA,MAAM,SAAS,gBAAA,IAAoB,sBAAA;AACnC,EAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,WAAA;AAEf,EAAA,IAAI,GAAA;AAEJ,EAAA,IAAI,WAAW,QAAA,IAAY,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG;AACnD,IAAA,MAAM,CAAC,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,CAAS,CAAA,EAAG,MAAM,SAAS,CAAA;AACvD,IAAA,MAAM,CAAC,OAAO,IAAA,EAAM,IAAI,IAAI,QAAA,CAAS,CAAA,EAAG,MAAM,SAAS,CAAA;AAEvD,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,IAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,CAAA,IAAK,KAAA,GAAQ,QAAQ,KAAK,CAAA,CAAA;AAChF,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA,IAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,CAAA,IAAK,KAAA,GAAQ,QAAQ,KAAK,CAAA,CAAA;AAEhF,IAAA,GAAA,GAAM,UAAU,GAAA,GAAM,OAAA;AAAA,EAC1B,CAAA,MAAO;AACH,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,CAAA,EAAG;AAAA,MACjC,qBAAA,EAAuB,SAAA;AAAA,MACvB,qBAAA,EAAuB;AAAA,KAC1B,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,CAAA,EAAG;AAAA,MACjC,qBAAA,EAAuB,SAAA;AAAA,MACvB,qBAAA,EAAuB;AAAA,KAC1B,CAAA;AACD,IAAA,GAAA,GAAM,UAAU,GAAA,GAAM,OAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACX;AAEA,SAAS,QAAA,CACL,SAAA,EACA,IAAA,EACA,SAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAClC,EAAA,MAAM,QAAQ,SAAA,GAAY,KAAA;AAE1B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,KAAK,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,GAAQ,IAAA;AAE9B,EAAA,MAAM,OAAO,EAAA,GAAK,QAAA;AAClB,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM;AAAA,IACxC,qBAAA,EAAuB,SAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GAC1B,CAAA;AAED,EAAA,OAAO,CAAC,KAAA,EAAO,IAAA,EAAM,WAAW,CAAA;AACpC;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@open-pioneer/coordinate-viewer",
4
- "version": "1.5.0-dev.20260911123645",
4
+ "version": "1.5.0",
5
5
  "description": "This package provides a UI component to show the current coordinates at the users current mouse position.",
6
6
  "keywords": [
7
7
  "open-pioneer-trails"
@@ -15,12 +15,12 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@chakra-ui/react": "^3.37.0",
18
- "@open-pioneer/map": "1.5.0-dev.20260911123645",
19
- "@open-pioneer/react-utils": "4.8.0-dev.20260910101405",
20
- "@open-pioneer/reactivity": "4.8.0-dev.20260910101405",
21
- "@open-pioneer/runtime": "4.8.0-dev.20260910101405",
18
+ "@open-pioneer/map": "1.5.0",
19
+ "@open-pioneer/react-utils": "^4.8.0",
20
+ "@open-pioneer/reactivity": "^4.8.0",
21
+ "@open-pioneer/runtime": "^4.8.0",
22
22
  "ol": "^10.10.0",
23
- "react": "^19.2.8"
23
+ "react": "^19.3.0"
24
24
  },
25
25
  "publishConfig": {
26
26
  "directory": "dist",