@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 CHANGED
@@ -1,10 +1,14 @@
1
1
  # @open-pioneer/selection
2
2
 
3
- ## 1.4.0-dev.20260625074633
3
+ ## 1.4.0-dev.20260727093741
4
4
 
5
5
  ### Minor Changes
6
6
 
7
- - c30396d: Update Chakra to 3.36.0
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
 
@@ -7,13 +7,7 @@ interface InteractionResource extends Resource {
7
7
  interaction: PointerInteraction;
8
8
  }
9
9
  export declare class DragController {
10
- private tooltip;
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.olMap = map.olMap;
19
- const viewPort = this.initViewport(this.olMap);
20
- this.interactionResources.push(
21
- this.createDragBox(this.olMap, onExtentSelected, viewPort, this.interactionResources)
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.interactionResources.push(
24
- this.createDrag(this.olMap, viewPort, this.interactionResources)
23
+ this.#interactionResources.push(
24
+ this.#createDrag(this.#olMap, viewPort, this.#interactionResources)
25
25
  );
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],
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.tooltip.setContent(tooltipContent);
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.tooltipSync?.destroy();
58
- this.tooltipSync = void 0;
59
- this.tooltip.destroy();
60
- this.interactionResources.forEach((interaction) => {
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.isActive.value;
69
- return isActive ? this.tooltipMessage : this.tooltipDisabledMessage;
68
+ const isActive = this.#isActive.value;
69
+ return isActive ? this.#tooltipMessage : this.#tooltipDisabledMessage;
70
70
  }
71
71
  setActive(isActive) {
72
- if (this.isActive.value === isActive) {
72
+ if (this.#isActive.value === isActive) {
73
73
  return;
74
74
  }
75
75
  if (isActive) {
76
- this.interactionResources.forEach(
77
- (interaction) => this.olMap.addInteraction(interaction.interaction)
76
+ this.#interactionResources.forEach(
77
+ (interaction) => this.#olMap.addInteraction(interaction.interaction)
78
78
  );
79
- this.isActive.value = true;
79
+ this.#isActive.value = true;
80
80
  } else {
81
- this.interactionResources.forEach(
82
- (interaction) => this.olMap.removeInteraction(interaction.interaction)
81
+ this.#interactionResources.forEach(
82
+ (interaction) => this.#olMap.removeInteraction(interaction.interaction)
83
83
  );
84
- this.isActive.value = false;
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.interactionResources.find(
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.interactionResources.find(
168
+ return this.#interactionResources.find(
169
169
  (interactionResource) => interactionResource.interaction instanceof DragPan
170
170
  );
171
171
  }
@@ -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.20260625074633",
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.0",
18
- "@open-pioneer/core": "4.7.0-dev.20260624141040",
19
- "@open-pioneer/notifier": "4.7.0-dev.20260624141040",
20
- "@open-pioneer/react-utils": "4.7.0-dev.20260624141040",
21
- "@open-pioneer/runtime": "4.7.0-dev.20260624141040",
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.7",
24
- "react-icons": "^5.6.0",
25
- "uuid": "^14.0.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.20260624141040",
28
- "@open-pioneer/chakra-snippets": "4.7.0-dev.20260624141040",
29
- "@open-pioneer/map": "1.4.0-dev.20260625074633"
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",