@open-pioneer/coordinate-viewer 1.4.0-dev.20260727093741 → 1.5.0-dev.20260910103330

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,25 @@
1
1
  # @open-pioneer/coordinate-viewer
2
2
 
3
- ## 1.4.0-dev.20260727093741
3
+ ## 1.5.0-dev.20260910103330
4
+
5
+ ### Minor Changes
6
+
7
+ - f790fda: Update to Chakra 3.37.0
8
+
9
+ ### Patch Changes
10
+
11
+ - 09ec7c7: Updated dependencies
12
+
13
+ ## 1.4.0
4
14
 
5
15
  ### Minor Changes
6
16
 
7
17
  - c30396d: Update Chakra to 3.36.1
18
+ - d862003: Update to trails core-packages 4.7.0
19
+
20
+ ### Patch Changes
21
+
22
+ - c16a401: Migrated from eslint to oxlint and from prettier to oxfmt.
8
23
 
9
24
  ## 1.3.0
10
25
 
@@ -61,17 +76,17 @@
61
76
  - 193068a: Deprecate the `mapId` property on React components.
62
77
  Use the `MapModel` directly instead to pass a reference to the map.
63
78
 
64
- Example:
79
+ Example:
65
80
 
66
- ```tsx
67
- // Default map for entire component tree
68
- <DefaultMapProvider map={mapModel}>
69
- <Toc />
70
- </DefaultMapProvider>
81
+ ```tsx
82
+ // Default map for entire component tree
83
+ <DefaultMapProvider map={mapModel}>
84
+ <Toc />
85
+ </DefaultMapProvider>
71
86
 
72
- // Map for specific component
73
- <Toc map={mapModel} />
74
- ```
87
+ // Map for specific component
88
+ <Toc map={mapModel} />
89
+ ```
75
90
 
76
91
  ### Patch Changes
77
92
 
@@ -90,9 +105,9 @@
90
105
  ### Minor Changes
91
106
 
92
107
  - 2fa8020: Update trails core package dependencies.
93
- - Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
94
- - Removes any obsolete references to `@chakra-ui/system`.
95
- This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
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.
96
111
 
97
112
  ### Patch Changes
98
113
 
@@ -111,16 +126,16 @@
111
126
  - 583f1d6: The `mapId` or `map` properties are now optional on individual components.
112
127
  You can use the `DefaultMapProvider` to configure an implicit default value.
113
128
 
114
- Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
129
+ Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
115
130
 
116
131
  - 583f1d6: All UI components in this project now accept the `mapId` (a `string`) _or_ the `map` (a `MapModel`) directly.
117
132
  - a8b3449: Switch to a new versioning strategy.
118
133
  From now on, packages released by this repository share a common version number.
119
134
  - 6b59779: Added option to display geographic coordinates in angle format (DMS) in CoordinateViewer:
120
135
 
121
- ```jsx
122
- <CoordinateViewer mapId="map_id" format="degree" />
123
- ```
136
+ ```jsx
137
+ <CoordinateViewer mapId="map_id" format="degree" />
138
+ ```
124
139
 
125
140
  - 900eb11: Update dependencies.
126
141
 
@@ -164,11 +179,15 @@
164
179
 
165
180
  - 66f5733: add optional property for display coordinate projection
166
181
 
167
- example (show WGS84 coordinates on display):
182
+ example (show WGS84 coordinates on display):
168
183
 
169
- ```jsx
170
- <CoordinateViewer mapId={MAP_ID} precision={2} displayProjectionCode="EPSG:4326" />
171
- ```
184
+ ```jsx
185
+ <CoordinateViewer
186
+ mapId={MAP_ID}
187
+ precision={2}
188
+ displayProjectionCode="EPSG:4326"
189
+ />
190
+ ```
172
191
 
173
192
  ## 0.3.0
174
193
 
@@ -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\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 { unByKey } from \"ol/Observable\";\nimport { Coordinate } from \"ol/coordinate\";\nimport { EventsKey } from \"ol/events\";\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":";;;;;;;;;;;AAyCO,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":"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\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 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":"AAKA,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;AACJ,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.4.0-dev.20260727093741",
4
+ "version": "1.5.0-dev.20260910103330",
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"
@@ -14,13 +14,17 @@
14
14
  "directory": "src/packages/coordinate-viewer"
15
15
  },
16
16
  "dependencies": {
17
- "@chakra-ui/react": "^3.36.1",
18
- "@open-pioneer/react-utils": "4.7.0-dev.20260727091735",
19
- "@open-pioneer/runtime": "4.7.0-dev.20260727091735",
20
- "@open-pioneer/reactivity": "4.7.0-dev.20260727091735",
21
- "ol": "^10.9.0",
22
- "react": "^19.2.8",
23
- "@open-pioneer/map": "1.4.0-dev.20260727093741"
17
+ "@chakra-ui/react": "^3.37.0",
18
+ "@open-pioneer/map": "1.5.0-dev.20260910103330",
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",
22
+ "ol": "^10.10.0",
23
+ "react": "^19.2.8"
24
+ },
25
+ "publishConfig": {
26
+ "directory": "dist",
27
+ "linkDirectory": false
24
28
  },
25
29
  "exports": {
26
30
  "./package.json": "./package.json",