@open-pioneer/selection 1.4.0-dev.20260625074633 → 1.4.0-dev.20260727093741
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 +6 -2
- package/DragController.d.ts +1 -19
- package/DragController.js +37 -37
- package/DragController.js.map +1 -1
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# @open-pioneer/selection
|
|
2
2
|
|
|
3
|
-
## 1.4.0-dev.
|
|
3
|
+
## 1.4.0-dev.20260727093741
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
-
- c30396d: Update Chakra to 3.36.
|
|
7
|
+
- c30396d: Update Chakra to 3.36.1
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 078bef5: Use private JavaScript properties (#) instead of TypeScript keyword.
|
|
8
12
|
|
|
9
13
|
## 1.3.0
|
|
10
14
|
|
package/DragController.d.ts
CHANGED
|
@@ -7,13 +7,7 @@ interface InteractionResource extends Resource {
|
|
|
7
7
|
interaction: PointerInteraction;
|
|
8
8
|
}
|
|
9
9
|
export declare class DragController {
|
|
10
|
-
private
|
|
11
|
-
private interactionResources;
|
|
12
|
-
private olMap;
|
|
13
|
-
private isActive;
|
|
14
|
-
private tooltipMessage;
|
|
15
|
-
private tooltipDisabledMessage;
|
|
16
|
-
private tooltipSync;
|
|
10
|
+
#private;
|
|
17
11
|
constructor(map: MapModel, tooltipMessage: string, tooltipDisabledMessage: string, onExtentSelected: (geometry: Geometry) => void);
|
|
18
12
|
initViewport(olMap: OlMap): HTMLElement;
|
|
19
13
|
/**
|
|
@@ -25,18 +19,6 @@ export declare class DragController {
|
|
|
25
19
|
*/
|
|
26
20
|
get tooltipText(): string;
|
|
27
21
|
setActive(isActive: boolean): void;
|
|
28
|
-
/**
|
|
29
|
-
* Method to create a simple extent-selection
|
|
30
|
-
*/
|
|
31
|
-
private createDragBox;
|
|
32
|
-
/**
|
|
33
|
-
* Method to activate pan with right-mouse-click
|
|
34
|
-
*/
|
|
35
|
-
private createDrag;
|
|
36
|
-
/**
|
|
37
|
-
* Method to generate a tooltip on the mouse cursor
|
|
38
|
-
*/
|
|
39
|
-
private createHelpTooltip;
|
|
40
22
|
/**
|
|
41
23
|
* Method for testing purposes only
|
|
42
24
|
* @returns InteractionResource of class DragBox
|
package/DragController.js
CHANGED
|
@@ -7,32 +7,32 @@ import { SelectionTooltipContent } from './SelectionTooltipContent.js';
|
|
|
7
7
|
const ACTIVE_CLASS = "selection-active";
|
|
8
8
|
const INACTIVE_CLASS = "selection-inactive";
|
|
9
9
|
class DragController {
|
|
10
|
-
tooltip;
|
|
11
|
-
interactionResources = [];
|
|
12
|
-
olMap;
|
|
13
|
-
isActive = reactive(true);
|
|
14
|
-
tooltipMessage;
|
|
15
|
-
tooltipDisabledMessage;
|
|
16
|
-
tooltipSync;
|
|
10
|
+
#tooltip;
|
|
11
|
+
#interactionResources = [];
|
|
12
|
+
#olMap;
|
|
13
|
+
#isActive = reactive(true);
|
|
14
|
+
#tooltipMessage;
|
|
15
|
+
#tooltipDisabledMessage;
|
|
16
|
+
#tooltipSync;
|
|
17
17
|
constructor(map, tooltipMessage, tooltipDisabledMessage, onExtentSelected) {
|
|
18
|
-
this
|
|
19
|
-
const viewPort = this.initViewport(this
|
|
20
|
-
this
|
|
21
|
-
this
|
|
18
|
+
this.#olMap = map.olMap;
|
|
19
|
+
const viewPort = this.initViewport(this.#olMap);
|
|
20
|
+
this.#interactionResources.push(
|
|
21
|
+
this.#createDragBox(this.#olMap, onExtentSelected, viewPort, this.#interactionResources)
|
|
22
22
|
);
|
|
23
|
-
this
|
|
24
|
-
this
|
|
23
|
+
this.#interactionResources.push(
|
|
24
|
+
this.#createDrag(this.#olMap, viewPort, this.#interactionResources)
|
|
25
25
|
);
|
|
26
|
-
this
|
|
27
|
-
this
|
|
28
|
-
this
|
|
29
|
-
this
|
|
30
|
-
() => [this
|
|
26
|
+
this.#tooltip = this.#createHelpTooltip(map, tooltipMessage);
|
|
27
|
+
this.#tooltipMessage = tooltipMessage;
|
|
28
|
+
this.#tooltipDisabledMessage = tooltipDisabledMessage;
|
|
29
|
+
this.#tooltipSync = watch(
|
|
30
|
+
() => [this.#isActive.value, this.tooltipText],
|
|
31
31
|
([isActive, tooltipText]) => {
|
|
32
32
|
const tooltipContent = createElement(SelectionTooltipContent, {
|
|
33
33
|
content: tooltipText
|
|
34
34
|
});
|
|
35
|
-
this
|
|
35
|
+
this.#tooltip.setContent(tooltipContent);
|
|
36
36
|
viewPort.classList.toggle(ACTIVE_CLASS, isActive);
|
|
37
37
|
viewPort.classList.toggle(INACTIVE_CLASS, !isActive);
|
|
38
38
|
},
|
|
@@ -54,10 +54,10 @@ class DragController {
|
|
|
54
54
|
* Method for destroying the controller when it is no longer needed
|
|
55
55
|
*/
|
|
56
56
|
destroy() {
|
|
57
|
-
this
|
|
58
|
-
this
|
|
59
|
-
this
|
|
60
|
-
this
|
|
57
|
+
this.#tooltipSync?.destroy();
|
|
58
|
+
this.#tooltipSync = void 0;
|
|
59
|
+
this.#tooltip.destroy();
|
|
60
|
+
this.#interactionResources.forEach((interaction) => {
|
|
61
61
|
interaction.destroy();
|
|
62
62
|
});
|
|
63
63
|
}
|
|
@@ -65,29 +65,29 @@ class DragController {
|
|
|
65
65
|
* The current tooltip text shown to the user.
|
|
66
66
|
*/
|
|
67
67
|
get tooltipText() {
|
|
68
|
-
const isActive = this
|
|
69
|
-
return isActive ? this
|
|
68
|
+
const isActive = this.#isActive.value;
|
|
69
|
+
return isActive ? this.#tooltipMessage : this.#tooltipDisabledMessage;
|
|
70
70
|
}
|
|
71
71
|
setActive(isActive) {
|
|
72
|
-
if (this
|
|
72
|
+
if (this.#isActive.value === isActive) {
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
75
|
if (isActive) {
|
|
76
|
-
this
|
|
77
|
-
(interaction) => this
|
|
76
|
+
this.#interactionResources.forEach(
|
|
77
|
+
(interaction) => this.#olMap.addInteraction(interaction.interaction)
|
|
78
78
|
);
|
|
79
|
-
this
|
|
79
|
+
this.#isActive.value = true;
|
|
80
80
|
} else {
|
|
81
|
-
this
|
|
82
|
-
(interaction) => this
|
|
81
|
+
this.#interactionResources.forEach(
|
|
82
|
+
(interaction) => this.#olMap.removeInteraction(interaction.interaction)
|
|
83
83
|
);
|
|
84
|
-
this
|
|
84
|
+
this.#isActive.value = false;
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
88
|
* Method to create a simple extent-selection
|
|
89
89
|
*/
|
|
90
|
-
createDragBox(olMap, onExtentSelected, viewPort, interactionResources) {
|
|
90
|
+
#createDragBox(olMap, onExtentSelected, viewPort, interactionResources) {
|
|
91
91
|
const dragBox = new DragBox({
|
|
92
92
|
className: "selection-drag-box",
|
|
93
93
|
condition: mouseActionButton
|
|
@@ -112,7 +112,7 @@ class DragController {
|
|
|
112
112
|
/**
|
|
113
113
|
* Method to activate pan with right-mouse-click
|
|
114
114
|
*/
|
|
115
|
-
createDrag(olMap, viewPort, interactionResources) {
|
|
115
|
+
#createDrag(olMap, viewPort, interactionResources) {
|
|
116
116
|
const condition = function(mapBrowserEvent) {
|
|
117
117
|
const originalEvent = mapBrowserEvent.originalEvent;
|
|
118
118
|
return "button" in originalEvent && originalEvent.button == 2;
|
|
@@ -137,7 +137,7 @@ class DragController {
|
|
|
137
137
|
/**
|
|
138
138
|
* Method to generate a tooltip on the mouse cursor
|
|
139
139
|
*/
|
|
140
|
-
createHelpTooltip(map, message) {
|
|
140
|
+
#createHelpTooltip(map, message) {
|
|
141
141
|
const tooltipContent = createElement(SelectionTooltipContent, {
|
|
142
142
|
content: message
|
|
143
143
|
});
|
|
@@ -156,7 +156,7 @@ class DragController {
|
|
|
156
156
|
* @returns InteractionResource of class DragBox
|
|
157
157
|
*/
|
|
158
158
|
getDragboxInteraction() {
|
|
159
|
-
return this
|
|
159
|
+
return this.#interactionResources.find(
|
|
160
160
|
(interactionResource) => interactionResource.interaction instanceof DragBox
|
|
161
161
|
);
|
|
162
162
|
}
|
|
@@ -165,7 +165,7 @@ class DragController {
|
|
|
165
165
|
* @returns InteractionResource of class DragPan
|
|
166
166
|
*/
|
|
167
167
|
getDragPanInteraction() {
|
|
168
|
-
return this
|
|
168
|
+
return this.#interactionResources.find(
|
|
169
169
|
(interactionResource) => interactionResource.interaction instanceof DragPan
|
|
170
170
|
);
|
|
171
171
|
}
|
package/DragController.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragController.js","sources":["DragController.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { reactive, watch } from \"@conterra/reactivity-core\";\nimport { Resource } from \"@open-pioneer/core\";\nimport { MapModel, Overlay } from \"@open-pioneer/map\";\nimport { MapBrowserEvent } from \"ol\";\nimport OlMap from \"ol/Map\";\nimport { mouseActionButton } from \"ol/events/condition\";\nimport Geometry from \"ol/geom/Geometry\";\nimport { DragBox, DragPan } from \"ol/interaction\";\nimport PointerInteraction from \"ol/interaction/Pointer\";\nimport { createElement } from \"react\";\nimport { SelectionTooltipContent } from \"./SelectionTooltipContent\";\n\ninterface InteractionResource extends Resource {\n interaction: PointerInteraction;\n}\n\nconst ACTIVE_CLASS = \"selection-active\";\nconst INACTIVE_CLASS = \"selection-inactive\";\n\nexport class DragController {\n private tooltip: Overlay;\n private interactionResources: InteractionResource[] = [];\n private olMap: OlMap;\n private isActive = reactive(true);\n private tooltipMessage: string;\n private tooltipDisabledMessage: string;\n private tooltipSync: Resource | undefined;\n\n constructor(\n map: MapModel,\n tooltipMessage: string,\n tooltipDisabledMessage: string,\n onExtentSelected: (geometry: Geometry) => void\n ) {\n this.olMap = map.olMap;\n const viewPort = this.initViewport(this.olMap);\n this.interactionResources.push(\n this.createDragBox(this.olMap, onExtentSelected, viewPort, this.interactionResources)\n );\n this.interactionResources.push(\n this.createDrag(this.olMap, viewPort, this.interactionResources)\n );\n\n this.tooltip = this.createHelpTooltip(map, tooltipMessage);\n this.tooltipMessage = tooltipMessage;\n this.tooltipDisabledMessage = tooltipDisabledMessage;\n\n this.tooltipSync = watch(\n () => [this.isActive.value, this.tooltipText],\n ([isActive, tooltipText]) => {\n const tooltipContent = createElement(SelectionTooltipContent, {\n content: tooltipText\n });\n this.tooltip.setContent(tooltipContent);\n viewPort.classList.toggle(ACTIVE_CLASS, isActive);\n viewPort.classList.toggle(INACTIVE_CLASS, !isActive);\n },\n {\n immediate: true\n }\n );\n }\n\n initViewport(olMap: OlMap) {\n const viewPort = olMap.getViewport();\n viewPort.classList.add(ACTIVE_CLASS);\n\n viewPort.oncontextmenu = (e) => {\n e.preventDefault();\n return false;\n };\n return viewPort;\n }\n\n /**\n * Method for destroying the controller when it is no longer needed\n */\n destroy() {\n this.tooltipSync?.destroy();\n this.tooltipSync = undefined;\n\n this.tooltip.destroy();\n this.interactionResources.forEach((interaction) => {\n interaction.destroy();\n });\n }\n\n /**\n * The current tooltip text shown to the user.\n */\n get tooltipText(): string {\n const isActive = this.isActive.value;\n return isActive ? this.tooltipMessage : this.tooltipDisabledMessage;\n }\n\n setActive(isActive: boolean) {\n if (this.isActive.value === isActive) {\n return;\n }\n\n if (isActive) {\n this.interactionResources.forEach((interaction) =>\n this.olMap.addInteraction(interaction.interaction)\n );\n this.isActive.value = true;\n } else {\n this.interactionResources.forEach((interaction) =>\n this.olMap.removeInteraction(interaction.interaction)\n );\n this.isActive.value = false;\n }\n }\n\n /**\n * Method to create a simple extent-selection\n */\n private createDragBox(\n olMap: OlMap,\n onExtentSelected: (geometry: Geometry) => void,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const dragBox = new DragBox({\n className: \"selection-drag-box\",\n condition: mouseActionButton\n });\n\n olMap.addInteraction(dragBox);\n dragBox.on(\"boxend\", function () {\n onExtentSelected(dragBox.getGeometry());\n });\n\n const interactionResource: InteractionResource = {\n interaction: dragBox,\n destroy() {\n olMap.removeInteraction(dragBox);\n interactionResources.splice(interactionResources.indexOf(this));\n dragBox.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n return interactionResource;\n }\n\n /**\n * Method to activate pan with right-mouse-click\n */\n private createDrag(\n olMap: OlMap,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const condition = function (mapBrowserEvent: MapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return \"button\" in originalEvent && originalEvent.button == 2;\n };\n const drag = new DragPan({\n condition: condition\n });\n\n olMap.addInteraction(drag);\n\n const interactionResource: InteractionResource = {\n interaction: drag,\n destroy() {\n olMap.removeInteraction(drag);\n interactionResources.splice(interactionResources.indexOf(this));\n drag.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n\n return interactionResource;\n }\n\n /**\n * Method to generate a tooltip on the mouse cursor\n */\n private createHelpTooltip(map: MapModel, message: string): Overlay {\n const tooltipContent = createElement(SelectionTooltipContent, {\n content: message\n });\n const tooltipOverlay = map.overlays.add({\n content: tooltipContent,\n position: \"follow-pointer\",\n offset: [15, 0],\n positioning: \"center-left\",\n ariaRole: \"tooltip\",\n className: \"selection-tooltip printing-hide\"\n });\n\n return tooltipOverlay;\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragBox\n */\n getDragboxInteraction() {\n return this.interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragBox\n );\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragPan\n */\n getDragPanInteraction() {\n return this.interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragPan\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DragController.js","sources":["DragController.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { reactive, watch } from \"@conterra/reactivity-core\";\nimport { Resource } from \"@open-pioneer/core\";\nimport { MapModel, Overlay } from \"@open-pioneer/map\";\nimport { MapBrowserEvent } from \"ol\";\nimport OlMap from \"ol/Map\";\nimport { mouseActionButton } from \"ol/events/condition\";\nimport Geometry from \"ol/geom/Geometry\";\nimport { DragBox, DragPan } from \"ol/interaction\";\nimport PointerInteraction from \"ol/interaction/Pointer\";\nimport { createElement } from \"react\";\nimport { SelectionTooltipContent } from \"./SelectionTooltipContent\";\n\ninterface InteractionResource extends Resource {\n interaction: PointerInteraction;\n}\n\nconst ACTIVE_CLASS = \"selection-active\";\nconst INACTIVE_CLASS = \"selection-inactive\";\n\nexport class DragController {\n #tooltip: Overlay;\n #interactionResources: InteractionResource[] = [];\n #olMap: OlMap;\n #isActive = reactive(true);\n #tooltipMessage: string;\n #tooltipDisabledMessage: string;\n #tooltipSync: Resource | undefined;\n\n constructor(\n map: MapModel,\n tooltipMessage: string,\n tooltipDisabledMessage: string,\n onExtentSelected: (geometry: Geometry) => void\n ) {\n this.#olMap = map.olMap;\n const viewPort = this.initViewport(this.#olMap);\n this.#interactionResources.push(\n this.#createDragBox(this.#olMap, onExtentSelected, viewPort, this.#interactionResources)\n );\n this.#interactionResources.push(\n this.#createDrag(this.#olMap, viewPort, this.#interactionResources)\n );\n\n this.#tooltip = this.#createHelpTooltip(map, tooltipMessage);\n this.#tooltipMessage = tooltipMessage;\n this.#tooltipDisabledMessage = tooltipDisabledMessage;\n\n this.#tooltipSync = watch(\n () => [this.#isActive.value, this.tooltipText],\n ([isActive, tooltipText]) => {\n const tooltipContent = createElement(SelectionTooltipContent, {\n content: tooltipText\n });\n this.#tooltip.setContent(tooltipContent);\n viewPort.classList.toggle(ACTIVE_CLASS, isActive);\n viewPort.classList.toggle(INACTIVE_CLASS, !isActive);\n },\n {\n immediate: true\n }\n );\n }\n\n initViewport(olMap: OlMap) {\n const viewPort = olMap.getViewport();\n viewPort.classList.add(ACTIVE_CLASS);\n\n viewPort.oncontextmenu = (e) => {\n e.preventDefault();\n return false;\n };\n return viewPort;\n }\n\n /**\n * Method for destroying the controller when it is no longer needed\n */\n destroy() {\n this.#tooltipSync?.destroy();\n this.#tooltipSync = undefined;\n\n this.#tooltip.destroy();\n this.#interactionResources.forEach((interaction) => {\n interaction.destroy();\n });\n }\n\n /**\n * The current tooltip text shown to the user.\n */\n get tooltipText(): string {\n const isActive = this.#isActive.value;\n return isActive ? this.#tooltipMessage : this.#tooltipDisabledMessage;\n }\n\n setActive(isActive: boolean) {\n if (this.#isActive.value === isActive) {\n return;\n }\n\n if (isActive) {\n this.#interactionResources.forEach((interaction) =>\n this.#olMap.addInteraction(interaction.interaction)\n );\n this.#isActive.value = true;\n } else {\n this.#interactionResources.forEach((interaction) =>\n this.#olMap.removeInteraction(interaction.interaction)\n );\n this.#isActive.value = false;\n }\n }\n\n /**\n * Method to create a simple extent-selection\n */\n #createDragBox(\n olMap: OlMap,\n onExtentSelected: (geometry: Geometry) => void,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const dragBox = new DragBox({\n className: \"selection-drag-box\",\n condition: mouseActionButton\n });\n\n olMap.addInteraction(dragBox);\n dragBox.on(\"boxend\", function () {\n onExtentSelected(dragBox.getGeometry());\n });\n\n const interactionResource: InteractionResource = {\n interaction: dragBox,\n destroy() {\n olMap.removeInteraction(dragBox);\n interactionResources.splice(interactionResources.indexOf(this));\n dragBox.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n return interactionResource;\n }\n\n /**\n * Method to activate pan with right-mouse-click\n */\n #createDrag(\n olMap: OlMap,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const condition = function (mapBrowserEvent: MapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return \"button\" in originalEvent && originalEvent.button == 2;\n };\n const drag = new DragPan({\n condition: condition\n });\n\n olMap.addInteraction(drag);\n\n const interactionResource: InteractionResource = {\n interaction: drag,\n destroy() {\n olMap.removeInteraction(drag);\n interactionResources.splice(interactionResources.indexOf(this));\n drag.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n\n return interactionResource;\n }\n\n /**\n * Method to generate a tooltip on the mouse cursor\n */\n #createHelpTooltip(map: MapModel, message: string): Overlay {\n const tooltipContent = createElement(SelectionTooltipContent, {\n content: message\n });\n const tooltipOverlay = map.overlays.add({\n content: tooltipContent,\n position: \"follow-pointer\",\n offset: [15, 0],\n positioning: \"center-left\",\n ariaRole: \"tooltip\",\n className: \"selection-tooltip printing-hide\"\n });\n\n return tooltipOverlay;\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragBox\n */\n getDragboxInteraction() {\n return this.#interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragBox\n );\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragPan\n */\n getDragPanInteraction() {\n return this.#interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragPan\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/selection",
|
|
4
|
-
"version": "1.4.0-dev.
|
|
4
|
+
"version": "1.4.0-dev.20260727093741",
|
|
5
5
|
"description": "This package provides a UI component to perform a selection on given selection sources from the map.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -14,19 +14,19 @@
|
|
|
14
14
|
"directory": "src/packages/selection"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@chakra-ui/react": "^3.36.
|
|
18
|
-
"@open-pioneer/core": "4.7.0-dev.
|
|
19
|
-
"@open-pioneer/notifier": "4.7.0-dev.
|
|
20
|
-
"@open-pioneer/react-utils": "4.7.0-dev.
|
|
21
|
-
"@open-pioneer/runtime": "4.7.0-dev.
|
|
17
|
+
"@chakra-ui/react": "^3.36.1",
|
|
18
|
+
"@open-pioneer/core": "4.7.0-dev.20260727091735",
|
|
19
|
+
"@open-pioneer/notifier": "4.7.0-dev.20260727091735",
|
|
20
|
+
"@open-pioneer/react-utils": "4.7.0-dev.20260727091735",
|
|
21
|
+
"@open-pioneer/runtime": "4.7.0-dev.20260727091735",
|
|
22
22
|
"ol": "^10.9.0",
|
|
23
|
-
"react": "^19.2.
|
|
24
|
-
"react-icons": "^5.
|
|
25
|
-
"uuid": "^14.0.
|
|
23
|
+
"react": "^19.2.8",
|
|
24
|
+
"react-icons": "^5.7.0",
|
|
25
|
+
"uuid": "^14.0.1",
|
|
26
26
|
"@conterra/reactivity-core": "^0.8.6",
|
|
27
|
-
"@open-pioneer/reactivity": "4.7.0-dev.
|
|
28
|
-
"@open-pioneer/chakra-snippets": "4.7.0-dev.
|
|
29
|
-
"@open-pioneer/map": "1.4.0-dev.
|
|
27
|
+
"@open-pioneer/reactivity": "4.7.0-dev.20260727091735",
|
|
28
|
+
"@open-pioneer/chakra-snippets": "4.7.0-dev.20260727091735",
|
|
29
|
+
"@open-pioneer/map": "1.4.0-dev.20260727093741"
|
|
30
30
|
},
|
|
31
31
|
"exports": {
|
|
32
32
|
"./package.json": "./package.json",
|