@accelint/map-toolkit 1.5.0 → 3.0.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 +83 -0
- package/README.md +8 -1
- package/catalog-info.yaml +9 -6
- package/dist/camera/events.js +1 -1
- package/dist/camera/index.d.ts +1 -1
- package/dist/camera/index.js +1 -1
- package/dist/camera/store.d.ts +1 -1
- package/dist/camera/store.js +3 -5
- package/dist/camera/store.js.map +1 -1
- package/dist/camera/types.d.ts +1 -1
- package/dist/camera/types.js +1 -1
- package/dist/cursor-coordinates/constants.js +1 -1
- package/dist/cursor-coordinates/index.d.ts +1 -1
- package/dist/cursor-coordinates/index.js +1 -1
- package/dist/cursor-coordinates/store.d.ts +1 -1
- package/dist/cursor-coordinates/store.js +1 -1
- package/dist/cursor-coordinates/types.d.ts +1 -1
- package/dist/cursor-coordinates/types.js +1 -1
- package/dist/cursor-coordinates/use-cursor-coordinates.d.ts +1 -1
- package/dist/cursor-coordinates/use-cursor-coordinates.js +4 -9
- package/dist/cursor-coordinates/use-cursor-coordinates.js.map +1 -1
- package/dist/deckgl/base-map/constants.js +1 -1
- package/dist/deckgl/base-map/controls.d.ts +1 -1
- package/dist/deckgl/base-map/controls.js +1 -1
- package/dist/deckgl/base-map/events.js +1 -1
- package/dist/deckgl/base-map/index.d.ts +3 -3
- package/dist/deckgl/base-map/index.js +1 -1
- package/dist/deckgl/base-map/provider.d.ts +1 -1
- package/dist/deckgl/base-map/provider.js +1 -1
- package/dist/deckgl/base-map/types.d.ts +1 -1
- package/dist/deckgl/base-map/types.js +1 -1
- package/dist/deckgl/extensions/coffin-corner/coffin-corner-extension.d.ts +144 -0
- package/dist/deckgl/extensions/coffin-corner/coffin-corner-extension.js +535 -0
- package/dist/deckgl/extensions/coffin-corner/coffin-corner-extension.js.map +1 -0
- package/dist/deckgl/extensions/coffin-corner/index.d.ts +17 -0
- package/dist/deckgl/extensions/coffin-corner/index.js +19 -0
- package/dist/deckgl/extensions/coffin-corner/store.d.ts +96 -0
- package/dist/deckgl/extensions/coffin-corner/store.js +173 -0
- package/dist/deckgl/extensions/coffin-corner/store.js.map +1 -0
- package/dist/deckgl/extensions/coffin-corner/types.d.ts +76 -0
- package/dist/deckgl/extensions/coffin-corner/types.js +27 -0
- package/dist/deckgl/extensions/coffin-corner/types.js.map +1 -0
- package/dist/deckgl/extensions/coffin-corner/use-coffin-corner.d.ts +81 -0
- package/dist/deckgl/extensions/coffin-corner/use-coffin-corner.js +75 -0
- package/dist/deckgl/extensions/coffin-corner/use-coffin-corner.js.map +1 -0
- package/dist/deckgl/extensions/index.d.ts +15 -0
- package/dist/deckgl/extensions/index.js +16 -0
- package/dist/deckgl/index.d.ts +9 -4
- package/dist/deckgl/index.js +6 -2
- package/dist/deckgl/saved-viewports/index.d.ts +1 -1
- package/dist/deckgl/saved-viewports/index.js +1 -1
- package/dist/deckgl/saved-viewports/storage.d.ts +1 -1
- package/dist/deckgl/saved-viewports/storage.js +5 -10
- package/dist/deckgl/saved-viewports/storage.js.map +1 -1
- package/dist/deckgl/shapes/display-shape-layer/constants.js +70 -26
- package/dist/deckgl/shapes/display-shape-layer/constants.js.map +1 -1
- package/dist/deckgl/shapes/display-shape-layer/fiber.d.ts +1 -1
- package/dist/deckgl/shapes/display-shape-layer/fiber.js +1 -1
- package/dist/deckgl/shapes/display-shape-layer/index.d.ts +93 -38
- package/dist/deckgl/shapes/display-shape-layer/index.js +433 -187
- package/dist/deckgl/shapes/display-shape-layer/index.js.map +1 -1
- package/dist/deckgl/shapes/display-shape-layer/shape-label-layer.js +1 -1
- package/dist/deckgl/shapes/display-shape-layer/store.js +1 -1
- package/dist/deckgl/shapes/display-shape-layer/types.d.ts +116 -19
- package/dist/deckgl/shapes/display-shape-layer/types.js +1 -1
- package/dist/deckgl/shapes/display-shape-layer/use-select-shape.d.ts +1 -1
- package/dist/deckgl/shapes/display-shape-layer/use-select-shape.js +1 -1
- package/dist/deckgl/shapes/display-shape-layer/utils/display-style.js +66 -36
- package/dist/deckgl/shapes/display-shape-layer/utils/display-style.js.map +1 -1
- package/dist/deckgl/shapes/display-shape-layer/utils/elevation.js +407 -0
- package/dist/deckgl/shapes/display-shape-layer/utils/elevation.js.map +1 -0
- package/dist/deckgl/shapes/display-shape-layer/utils/icon-config.js +106 -0
- package/dist/deckgl/shapes/display-shape-layer/utils/icon-config.js.map +1 -0
- package/dist/deckgl/shapes/display-shape-layer/utils/labels.d.ts +1 -1
- package/dist/deckgl/shapes/display-shape-layer/utils/labels.js +28 -39
- package/dist/deckgl/shapes/display-shape-layer/utils/labels.js.map +1 -1
- package/dist/deckgl/shapes/display-shape-layer/utils/radius-label.js +53 -0
- package/dist/deckgl/shapes/display-shape-layer/utils/radius-label.js.map +1 -0
- package/dist/deckgl/shapes/draw-shape-layer/constants.js +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/events.d.ts +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/events.js +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/fiber.js +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/index.d.ts +8 -4
- package/dist/deckgl/shapes/draw-shape-layer/index.js +11 -17
- package/dist/deckgl/shapes/draw-shape-layer/index.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-circle-mode-with-tooltip.js +6 -5
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-circle-mode-with-tooltip.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-ellipse-mode-with-tooltip.js +4 -3
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-ellipse-mode-with-tooltip.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-line-string-mode-with-tooltip.js +6 -20
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-line-string-mode-with-tooltip.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-polygon-mode-with-tooltip.js +6 -33
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-polygon-mode-with-tooltip.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-rectangle-mode-with-tooltip.js +16 -12
- package/dist/deckgl/shapes/draw-shape-layer/modes/draw-rectangle-mode-with-tooltip.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/modes/index.js +2 -32
- package/dist/deckgl/shapes/draw-shape-layer/modes/index.js.map +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/store.js +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/types.d.ts +3 -3
- package/dist/deckgl/shapes/draw-shape-layer/types.js +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/use-draw-shape.d.ts +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/use-draw-shape.js +1 -1
- package/dist/deckgl/shapes/draw-shape-layer/utils/feature-conversion.js +3 -8
- package/dist/deckgl/shapes/draw-shape-layer/utils/feature-conversion.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/constants.js +17 -2
- package/dist/deckgl/shapes/edit-shape-layer/constants.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/events.d.ts +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/events.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/fiber.d.ts +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/fiber.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/index.d.ts +12 -6
- package/dist/deckgl/shapes/edit-shape-layer/index.js +72 -27
- package/dist/deckgl/shapes/edit-shape-layer/index.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/base-transform-mode.js +4 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/base-transform-mode.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/bounding-transform-mode.js +4 -3
- package/dist/deckgl/shapes/edit-shape-layer/modes/bounding-transform-mode.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/circle-transform-mode.js +5 -3
- package/dist/deckgl/shapes/edit-shape-layer/modes/circle-transform-mode.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/index.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/point-translate-mode.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/point-translate-mode.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/rotate-mode-with-snap.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/rotate-mode-with-snap.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/scale-mode-with-free-transform.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/scale-mode-with-free-transform.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/vertex-transform-mode.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/modes/vertex-transform-mode.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/store.js +83 -14
- package/dist/deckgl/shapes/edit-shape-layer/store.js.map +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/types.d.ts +18 -4
- package/dist/deckgl/shapes/edit-shape-layer/types.js +1 -1
- package/dist/deckgl/shapes/edit-shape-layer/use-edit-shape.d.ts +2 -2
- package/dist/deckgl/shapes/edit-shape-layer/use-edit-shape.js +8 -4
- package/dist/deckgl/shapes/edit-shape-layer/use-edit-shape.js.map +1 -1
- package/dist/deckgl/shapes/index.d.ts +5 -4
- package/dist/deckgl/shapes/index.js +3 -2
- package/dist/deckgl/shapes/shared/constants.d.ts +4 -3
- package/dist/deckgl/shapes/shared/constants.js +51 -11
- package/dist/deckgl/shapes/shared/constants.js.map +1 -1
- package/dist/deckgl/shapes/shared/events.d.ts +5 -1
- package/dist/deckgl/shapes/shared/events.js +1 -1
- package/dist/deckgl/shapes/shared/events.js.map +1 -1
- package/dist/deckgl/shapes/shared/hooks/use-shift-zoom-disable.js +19 -16
- package/dist/deckgl/shapes/shared/hooks/use-shift-zoom-disable.js.map +1 -1
- package/dist/deckgl/shapes/shared/types.d.ts +182 -54
- package/dist/deckgl/shapes/shared/types.js +155 -2
- package/dist/deckgl/shapes/shared/types.js.map +1 -1
- package/dist/deckgl/shapes/shared/utils/duplicate-shape.d.ts +56 -0
- package/dist/deckgl/shapes/shared/utils/duplicate-shape.js +131 -0
- package/dist/deckgl/shapes/shared/utils/duplicate-shape.js.map +1 -0
- package/dist/deckgl/shapes/shared/utils/geometry-measurements.js +29 -24
- package/dist/deckgl/shapes/shared/utils/geometry-measurements.js.map +1 -1
- package/dist/deckgl/shapes/shared/utils/layer-config.js +15 -9
- package/dist/deckgl/shapes/shared/utils/layer-config.js.map +1 -1
- package/dist/deckgl/shapes/shared/utils/mode-utils.js +50 -20
- package/dist/deckgl/shapes/shared/utils/mode-utils.js.map +1 -1
- package/dist/deckgl/shapes/shared/utils/pick-filtering.js +22 -15
- package/dist/deckgl/shapes/shared/utils/pick-filtering.js.map +1 -1
- package/dist/deckgl/shapes/shared/utils/style-utils.d.ts +38 -14
- package/dist/deckgl/shapes/shared/utils/style-utils.js +43 -32
- package/dist/deckgl/shapes/shared/utils/style-utils.js.map +1 -1
- package/dist/deckgl/symbol-layer/fiber.d.ts +4 -2
- package/dist/deckgl/symbol-layer/fiber.js +1 -1
- package/dist/deckgl/symbol-layer/fiber.js.map +1 -1
- package/dist/deckgl/symbol-layer/index.d.ts +1 -1
- package/dist/deckgl/symbol-layer/index.js +1 -1
- package/dist/deckgl/text-layer/character-sets.js +1 -1
- package/dist/deckgl/text-layer/default-settings.d.ts +1 -1
- package/dist/deckgl/text-layer/default-settings.js +1 -1
- package/dist/deckgl/text-layer/fiber.d.ts +1 -1
- package/dist/deckgl/text-layer/fiber.js +1 -1
- package/dist/deckgl/text-layer/index.d.ts +1 -1
- package/dist/deckgl/text-layer/index.js +1 -1
- package/dist/deckgl/text-settings.d.ts +3 -3
- package/dist/deckgl/text-settings.js +1 -1
- package/dist/map-cursor/events.js +1 -1
- package/dist/map-cursor/index.d.ts +1 -1
- package/dist/map-cursor/index.js +1 -1
- package/dist/map-cursor/store.d.ts +1 -1
- package/dist/map-cursor/store.js +1 -1
- package/dist/map-cursor/types.d.ts +1 -1
- package/dist/map-cursor/types.js +1 -1
- package/dist/map-cursor/use-map-cursor.d.ts +1 -1
- package/dist/map-cursor/use-map-cursor.js +1 -1
- package/dist/map-mode/events.js +1 -1
- package/dist/map-mode/index.d.ts +1 -1
- package/dist/map-mode/index.js +1 -1
- package/dist/map-mode/store.d.ts +1 -1
- package/dist/map-mode/store.js +3 -8
- package/dist/map-mode/store.js.map +1 -1
- package/dist/map-mode/types.d.ts +1 -1
- package/dist/map-mode/types.js +1 -1
- package/dist/map-mode/use-map-mode.d.ts +1 -1
- package/dist/map-mode/use-map-mode.js +1 -1
- package/dist/maplibre/hooks/use-maplibre.d.ts +1 -1
- package/dist/maplibre/hooks/use-maplibre.js +1 -1
- package/dist/maplibre/index.d.ts +1 -1
- package/dist/maplibre/index.js +1 -1
- package/dist/shared/cleanup.d.ts +1 -1
- package/dist/shared/cleanup.js +1 -1
- package/dist/shared/constants.js +1 -1
- package/dist/shared/create-map-store.d.ts +1 -1
- package/dist/shared/create-map-store.js +1 -1
- package/dist/shared/logger.js +31 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/units.d.ts +15 -56
- package/dist/shared/units.js +2 -53
- package/dist/shared/units.js.map +1 -1
- package/dist/viewport/index.d.ts +3 -4
- package/dist/viewport/index.js +2 -3
- package/dist/viewport/store.d.ts +1 -1
- package/dist/viewport/store.js +1 -1
- package/dist/viewport/types.d.ts +9 -5
- package/dist/viewport/types.js +1 -1
- package/dist/viewport/utils.d.ts +4 -4
- package/dist/viewport/utils.js +17 -9
- package/dist/viewport/utils.js.map +1 -1
- package/dist/viewport/viewport-size.d.ts +7 -6
- package/dist/viewport/viewport-size.js +3 -3
- package/dist/viewport/viewport-size.js.map +1 -1
- package/package.json +29 -20
- package/dist/hotkey-manager/dist/react/use-hotkey.js +0 -39
- package/dist/hotkey-manager/dist/react/use-hotkey.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
'use client';
|
|
15
|
+
|
|
16
|
+
import { coffinCornerStore } from "./store.js";
|
|
17
|
+
import { useEffect } from "react";
|
|
18
|
+
|
|
19
|
+
//#region src/deckgl/extensions/coffin-corner/use-coffin-corner.ts
|
|
20
|
+
/**
|
|
21
|
+
* Hook to manage coffin corner entity selection state.
|
|
22
|
+
*
|
|
23
|
+
* Automatically subscribes to map bus events for the given map and layer,
|
|
24
|
+
* so you don't need onClick/onHover callbacks on the layer.
|
|
25
|
+
*
|
|
26
|
+
* @param mapId - The BaseMap instance ID
|
|
27
|
+
* @param layerId - The deck.gl layer ID to listen for interactions on
|
|
28
|
+
* @param options - Optional configuration for entity ID extraction
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* import { useCoffinCorner } from '@accelint/map-toolkit/deckgl/extensions/coffin-corner';
|
|
33
|
+
*
|
|
34
|
+
* function MapWithIcons({ mapId }) {
|
|
35
|
+
* const { selectedId, hoveredId } = useCoffinCorner(mapId, 'base-icons');
|
|
36
|
+
*
|
|
37
|
+
* return (
|
|
38
|
+
* <iconLayer
|
|
39
|
+
* id="base-icons"
|
|
40
|
+
* pickable
|
|
41
|
+
* extensions={[coffinCornerExtension]}
|
|
42
|
+
* selectedEntityId={selectedId}
|
|
43
|
+
* hoveredEntityId={hoveredId}
|
|
44
|
+
* />
|
|
45
|
+
* );
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @example Custom entity ID accessor
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const { selectedId, hoveredId } = useCoffinCorner(mapId, 'geojson-icons', {
|
|
52
|
+
* getEntityId: (d) => d.properties?.shapeId,
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
function useCoffinCorner(mapId, layerId, options) {
|
|
57
|
+
const { state, setSelectedId, deselect, setLayerId, setGetEntityId } = coffinCornerStore.use(mapId);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
setLayerId(layerId);
|
|
60
|
+
}, [setLayerId, layerId]);
|
|
61
|
+
const getEntityId = options?.getEntityId;
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (getEntityId) setGetEntityId(getEntityId);
|
|
64
|
+
}, [setGetEntityId, getEntityId]);
|
|
65
|
+
return {
|
|
66
|
+
selectedId: state.selectedId,
|
|
67
|
+
hoveredId: state.hoveredId,
|
|
68
|
+
setSelectedId,
|
|
69
|
+
deselect
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
export { useCoffinCorner };
|
|
75
|
+
//# sourceMappingURL=use-coffin-corner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-coffin-corner.js","names":[],"sources":["../../../../src/deckgl/extensions/coffin-corner/use-coffin-corner.ts"],"sourcesContent":["/*\n * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport { useEffect } from 'react';\nimport { coffinCornerStore } from './store';\nimport type { UniqueId } from '@accelint/core';\nimport type { EntityId } from './types';\n\n/**\n * Return type for useCoffinCorner hook\n */\nexport type UseCoffinCornerReturn = {\n /** Currently selected entity ID, or undefined if nothing selected */\n selectedId: EntityId | undefined;\n /** Currently hovered entity ID, or undefined if nothing hovered */\n hoveredId: EntityId | undefined;\n /** Set the selected entity ID */\n setSelectedId: (id: EntityId | undefined) => void;\n /** Clear the current selection */\n deselect: () => void;\n};\n\n/**\n * Options for the useCoffinCorner hook.\n */\nexport type UseCoffinCornerOptions = {\n /**\n * Accessor to extract an entity ID from a picked data item.\n * Must match the `getEntityId` prop passed to the CoffinCornerExtension.\n * Should be a stable reference (module-level or `useCallback`) to avoid unnecessary store updates on every render.\n * @default (item) => item.id\n */\n // biome-ignore lint/suspicious/noExplicitAny: Data type is unknown at hook level.\n getEntityId?: (item: any) => EntityId;\n};\n\n/**\n * Hook to manage coffin corner entity selection state.\n *\n * Automatically subscribes to map bus events for the given map and layer,\n * so you don't need onClick/onHover callbacks on the layer.\n *\n * @param mapId - The BaseMap instance ID\n * @param layerId - The deck.gl layer ID to listen for interactions on\n * @param options - Optional configuration for entity ID extraction\n *\n * @example\n * ```tsx\n * import { useCoffinCorner } from '@accelint/map-toolkit/deckgl/extensions/coffin-corner';\n *\n * function MapWithIcons({ mapId }) {\n * const { selectedId, hoveredId } = useCoffinCorner(mapId, 'base-icons');\n *\n * return (\n * <iconLayer\n * id=\"base-icons\"\n * pickable\n * extensions={[coffinCornerExtension]}\n * selectedEntityId={selectedId}\n * hoveredEntityId={hoveredId}\n * />\n * );\n * }\n * ```\n *\n * @example Custom entity ID accessor\n * ```tsx\n * const { selectedId, hoveredId } = useCoffinCorner(mapId, 'geojson-icons', {\n * getEntityId: (d) => d.properties?.shapeId,\n * });\n * ```\n */\nexport function useCoffinCorner(\n mapId: UniqueId,\n layerId: string,\n options?: UseCoffinCornerOptions,\n): UseCoffinCornerReturn {\n const { state, setSelectedId, deselect, setLayerId, setGetEntityId } =\n coffinCornerStore.use(mapId);\n\n // Unlike a CompositeLayer, CoffinCornerExtension is a shader-only plugin\n // with no picking handlers. The store must filter raw map bus events by\n // layerId to know which clicks/hovers belong to this extension's layer.\n useEffect(() => {\n setLayerId(layerId);\n }, [setLayerId, layerId]);\n\n const getEntityId = options?.getEntityId;\n\n useEffect(() => {\n if (getEntityId) {\n setGetEntityId(getEntityId);\n }\n }, [setGetEntityId, getEntityId]);\n\n return {\n selectedId: state.selectedId,\n hoveredId: state.hoveredId,\n setSelectedId,\n deselect,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,SAAgB,gBACd,OACA,SACA,SACuB;CACvB,MAAM,EAAE,OAAO,eAAe,UAAU,YAAY,mBAClD,kBAAkB,IAAI,MAAM;AAK9B,iBAAgB;AACd,aAAW,QAAQ;IAClB,CAAC,YAAY,QAAQ,CAAC;CAEzB,MAAM,cAAc,SAAS;AAE7B,iBAAgB;AACd,MAAI,YACF,gBAAe,YAAY;IAE5B,CAAC,gBAAgB,YAAY,CAAC;AAEjC,QAAO;EACL,YAAY,MAAM;EAClB,WAAW,MAAM;EACjB;EACA;EACD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { CoffinCornerExtensionProps } from "./coffin-corner/types.js";
|
|
14
|
+
import { CoffinCornerExtension } from "./coffin-corner/coffin-corner-extension.js";
|
|
15
|
+
export { CoffinCornerExtension, type CoffinCornerExtensionProps };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
import { CoffinCornerExtension } from "./coffin-corner/coffin-corner-extension.js";
|
|
15
|
+
|
|
16
|
+
export { CoffinCornerExtension };
|
package/dist/deckgl/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -14,12 +14,17 @@ import { MapEvents, MapEventsNamespace } from "./base-map/events.js";
|
|
|
14
14
|
import { BaseMapProps, MapClickEvent, MapClickPayload, MapControlPayload, MapDisablePanEvent, MapDisableZoomEvent, MapEnablePanEvent, MapEnableZoomEvent, MapEventType, MapHoverEvent, MapHoverPayload } from "./base-map/types.js";
|
|
15
15
|
import { DARK_BASE_MAP_STYLE, LIGHT_BASE_MAP_STYLE, PARAMETERS } from "./base-map/constants.js";
|
|
16
16
|
import { BaseMap } from "./base-map/index.js";
|
|
17
|
+
import { CoffinCornerDeselectedEvent, CoffinCornerEvent, CoffinCornerEventType, CoffinCornerEvents, CoffinCornerExtensionProps, CoffinCornerHoveredEvent, CoffinCornerSelectedEvent, EntityId } from "./extensions/coffin-corner/types.js";
|
|
18
|
+
import { CoffinCornerExtension } from "./extensions/coffin-corner/coffin-corner-extension.js";
|
|
19
|
+
import { clearSelection, coffinCornerStore, getHoveredEntityId, getSelectedEntityId } from "./extensions/coffin-corner/store.js";
|
|
20
|
+
import { UseCoffinCornerReturn, useCoffinCorner } from "./extensions/coffin-corner/use-coffin-corner.js";
|
|
21
|
+
import "./extensions/coffin-corner/index.js";
|
|
17
22
|
import { SavedViewportOptions, createSavedViewport } from "./saved-viewports/index.js";
|
|
18
|
-
import { CircleProperties, CircleRadius, EllipseProperties, Shape, ShapeFeature, ShapeFeatureProperties, ShapeFeatureType,
|
|
19
|
-
import { DisplayShapeLayerProps
|
|
23
|
+
import { CircleProperties, CircleRadius, EllipseProperties, Shape, ShapeFeature, ShapeFeatureProperties, ShapeFeatureType, ShapeId, StyleProperties, StyledFeature, StyledFeatureProperties } from "./shapes/shared/types.js";
|
|
24
|
+
import { DisplayShapeLayerProps } from "./shapes/display-shape-layer/types.js";
|
|
20
25
|
import { DisplayShapeLayer } from "./shapes/display-shape-layer/index.js";
|
|
21
26
|
import { DASH_ARRAYS, DEFAULT_COLORS, DEFAULT_STYLE_PROPERTIES, LINE_PATTERNS, LINE_WIDTHS, SHAPE_LAYER_IDS } from "./shapes/shared/constants.js";
|
|
22
27
|
import { ShapeEventType, ShapeEvents } from "./shapes/shared/events.js";
|
|
23
28
|
import "./shapes/index.js";
|
|
24
29
|
import { SymbolLayer, SymbolLayerProps } from "./symbol-layer/index.js";
|
|
25
|
-
export { BaseMap, type BaseMapProps, type CircleProperties, type CircleRadius, DARK_BASE_MAP_STYLE, DASH_ARRAYS, DEFAULT_COLORS, DEFAULT_STYLE_PROPERTIES, DisplayShapeLayer, type DisplayShapeLayerProps, type EllipseProperties, LIGHT_BASE_MAP_STYLE, LINE_PATTERNS, LINE_WIDTHS, type MapClickEvent, type MapClickPayload, type MapControlPayload, type MapDisablePanEvent, type MapDisableZoomEvent, type MapEnablePanEvent, type MapEnableZoomEvent, type MapEventType, MapEvents, MapEventsNamespace, type MapHoverEvent, type MapHoverPayload, PARAMETERS, SHAPE_LAYER_IDS, type SavedViewportOptions, type Shape, type ShapeEventType, ShapeEvents, type ShapeFeature, type ShapeFeatureProperties, ShapeFeatureType, type
|
|
30
|
+
export { BaseMap, type BaseMapProps, type CircleProperties, type CircleRadius, type CoffinCornerDeselectedEvent, type CoffinCornerEvent, type CoffinCornerEventType, CoffinCornerEvents, CoffinCornerExtension, type CoffinCornerExtensionProps, type CoffinCornerHoveredEvent, type CoffinCornerSelectedEvent, DARK_BASE_MAP_STYLE, DASH_ARRAYS, DEFAULT_COLORS, DEFAULT_STYLE_PROPERTIES, DisplayShapeLayer, type DisplayShapeLayerProps, type EllipseProperties, type EntityId, LIGHT_BASE_MAP_STYLE, LINE_PATTERNS, LINE_WIDTHS, type MapClickEvent, type MapClickPayload, type MapControlPayload, type MapDisablePanEvent, type MapDisableZoomEvent, type MapEnablePanEvent, type MapEnableZoomEvent, type MapEventType, MapEvents, MapEventsNamespace, type MapHoverEvent, type MapHoverPayload, PARAMETERS, SHAPE_LAYER_IDS, type SavedViewportOptions, type Shape, type ShapeEventType, ShapeEvents, type ShapeFeature, type ShapeFeatureProperties, ShapeFeatureType, type ShapeId, type StyleProperties, type StyledFeature, type StyledFeatureProperties, SymbolLayer, type SymbolLayerProps, type UseCoffinCornerReturn, clearSelection, coffinCornerStore, createSavedViewport, getHoveredEntityId, getSelectedEntityId, useCoffinCorner };
|
package/dist/deckgl/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -17,8 +17,12 @@ import { ShapeFeatureType } from "./shapes/shared/types.js";
|
|
|
17
17
|
import { DASH_ARRAYS, DEFAULT_COLORS, DEFAULT_STYLE_PROPERTIES, LINE_PATTERNS, LINE_WIDTHS, SHAPE_LAYER_IDS } from "./shapes/shared/constants.js";
|
|
18
18
|
import { DARK_BASE_MAP_STYLE, LIGHT_BASE_MAP_STYLE, PARAMETERS } from "./base-map/constants.js";
|
|
19
19
|
import { BaseMap } from "./base-map/index.js";
|
|
20
|
+
import { CoffinCornerExtension } from "./extensions/coffin-corner/coffin-corner-extension.js";
|
|
21
|
+
import { CoffinCornerEvents } from "./extensions/coffin-corner/types.js";
|
|
22
|
+
import { clearSelection, coffinCornerStore, getHoveredEntityId, getSelectedEntityId } from "./extensions/coffin-corner/store.js";
|
|
23
|
+
import { useCoffinCorner } from "./extensions/coffin-corner/use-coffin-corner.js";
|
|
20
24
|
import { createSavedViewport } from "./saved-viewports/index.js";
|
|
21
25
|
import { DisplayShapeLayer } from "./shapes/display-shape-layer/index.js";
|
|
22
26
|
import { SymbolLayer } from "./symbol-layer/index.js";
|
|
23
27
|
|
|
24
|
-
export { BaseMap, DARK_BASE_MAP_STYLE, DASH_ARRAYS, DEFAULT_COLORS, DEFAULT_STYLE_PROPERTIES, DisplayShapeLayer, LIGHT_BASE_MAP_STYLE, LINE_PATTERNS, LINE_WIDTHS, MapEvents, MapEventsNamespace, PARAMETERS, SHAPE_LAYER_IDS, ShapeEvents, ShapeFeatureType, SymbolLayer, createSavedViewport };
|
|
28
|
+
export { BaseMap, CoffinCornerEvents, CoffinCornerExtension, DARK_BASE_MAP_STYLE, DASH_ARRAYS, DEFAULT_COLORS, DEFAULT_STYLE_PROPERTIES, DisplayShapeLayer, LIGHT_BASE_MAP_STYLE, LINE_PATTERNS, LINE_WIDTHS, MapEvents, MapEventsNamespace, PARAMETERS, SHAPE_LAYER_IDS, ShapeEvents, ShapeFeatureType, SymbolLayer, clearSelection, coffinCornerStore, createSavedViewport, getHoveredEntityId, getSelectedEntityId, useCoffinCorner };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -11,15 +11,10 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { createLoggerDomain } from "../../shared/logger.js";
|
|
15
15
|
|
|
16
16
|
//#region src/deckgl/saved-viewports/storage.ts
|
|
17
|
-
const logger =
|
|
18
|
-
enabled: process.env.NODE_ENV !== "production" && process.env.NODE_ENV !== "test",
|
|
19
|
-
level: "warn",
|
|
20
|
-
prefix: "[SavedViewports]",
|
|
21
|
-
pretty: true
|
|
22
|
-
});
|
|
17
|
+
const logger = createLoggerDomain("[SavedViewports]");
|
|
23
18
|
/**
|
|
24
19
|
* Base storage key for saved viewports in localStorage.
|
|
25
20
|
*/
|
|
@@ -41,8 +36,8 @@ const getContainerKey = (uniqueIdentifier) => uniqueIdentifier ? `${STORAGE_ID}-
|
|
|
41
36
|
const getContainer = (containerKey) => {
|
|
42
37
|
try {
|
|
43
38
|
return JSON.parse(localStorage.getItem(containerKey) ?? "{}");
|
|
44
|
-
} catch {
|
|
45
|
-
logger.
|
|
39
|
+
} catch (err) {
|
|
40
|
+
logger.withError(err).error(`Failed to parse storage container for key: ${containerKey}, returning empty container.`);
|
|
46
41
|
return {};
|
|
47
42
|
}
|
|
48
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","names":[],"sources":["../../../src/deckgl/saved-viewports/storage.ts"],"sourcesContent":["/*\n * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"storage.js","names":[],"sources":["../../../src/deckgl/saved-viewports/storage.ts"],"sourcesContent":["/*\n * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { createLoggerDomain } from '@/shared/logger';\nimport type { MapViewState } from '@deck.gl/core';\n\nconst logger = createLoggerDomain('[SavedViewports]');\n\n/**\n * Base storage key for saved viewports in localStorage.\n */\nexport const STORAGE_ID = 'deckgl-saved-viewports';\n\n/**\n * Generates a storage key, optionally namespaced by unique identifier.\n *\n * @param uniqueIdentifier - Optional namespace for multiple map instances\n * @returns Storage key string\n */\nconst getContainerKey = (uniqueIdentifier?: string) =>\n uniqueIdentifier ? `${STORAGE_ID}-${uniqueIdentifier}` : STORAGE_ID;\n\n/**\n * Retrieves the storage container from localStorage.\n * Returns empty object if parsing fails or key doesn't exist.\n *\n * @param containerKey - The storage key to retrieve\n * @returns Parsed storage container object\n */\nconst getContainer = (containerKey: string) => {\n try {\n return JSON.parse(localStorage.getItem(containerKey) ?? '{}');\n } catch (err) {\n logger\n .withError(err)\n .error(\n `Failed to parse storage container for key: ${containerKey}, returning empty container.`,\n );\n\n return {};\n }\n};\n\n/**\n * Persists a viewport state to localStorage.\n *\n * Saves the viewport under the given ID within a namespaced container.\n * If the container doesn't exist, creates it. If the ID already exists, overwrites it.\n *\n * @param id - Unique identifier for this viewport (typically a key combination ID)\n * @param obj - The MapViewState to persist\n * @param uniqueIdentifier - Optional namespace for multiple map instances\n *\n * @example\n * ```typescript\n * import { persist } from '@accelint/map-toolkit/deckgl/saved-viewports/storage';\n *\n * const viewport = {\n * latitude: 38.9072,\n * longitude: -77.0369,\n * zoom: 10,\n * pitch: 0,\n * bearing: 0,\n * };\n *\n * persist('Digit1', viewport);\n * persist('Digit2', viewport, 'main-map');\n * ```\n */\nexport const persist = (\n id: string,\n obj: MapViewState,\n uniqueIdentifier?: string,\n) => {\n const containerKey = getContainerKey(uniqueIdentifier);\n const container = getContainer(containerKey);\n container[id] = obj;\n localStorage.setItem(containerKey, JSON.stringify(container));\n};\n\n/**\n * Retrieves a saved viewport state from localStorage.\n *\n * Returns the viewport associated with the given ID, or undefined if not found.\n * Logs a warning if the viewport doesn't exist.\n *\n * @param id - Unique identifier for the viewport to retrieve\n * @param uniqueIdentifier - Optional namespace for multiple map instances\n * @returns The saved MapViewState or undefined if not found\n *\n * @example\n * ```typescript\n * import { retrieve } from '@accelint/map-toolkit/deckgl/saved-viewports/storage';\n *\n * const viewport = retrieve('Digit1');\n * if (viewport) {\n * console.log('Restored viewport:', viewport);\n * }\n *\n * const mainMapViewport = retrieve('Digit1', 'main-map');\n * ```\n */\nexport const retrieve = (id: string, uniqueIdentifier?: string) => {\n const containerKey = getContainerKey(uniqueIdentifier);\n const container = getContainer(containerKey);\n const obj = container[id];\n if (!obj) {\n logger.warn(`Object with id: ${id} does not exist`);\n }\n return obj;\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,MAAM,SAAS,mBAAmB,mBAAmB;;;;AAKrD,MAAa,aAAa;;;;;;;AAQ1B,MAAM,mBAAmB,qBACvB,mBAAmB,GAAG,WAAW,GAAG,qBAAqB;;;;;;;;AAS3D,MAAM,gBAAgB,iBAAyB;AAC7C,KAAI;AACF,SAAO,KAAK,MAAM,aAAa,QAAQ,aAAa,IAAI,KAAK;UACtD,KAAK;AACZ,SACG,UAAU,IAAI,CACd,MACC,8CAA8C,aAAa,8BAC5D;AAEH,SAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8Bb,MAAa,WACX,IACA,KACA,qBACG;CACH,MAAM,eAAe,gBAAgB,iBAAiB;CACtD,MAAM,YAAY,aAAa,aAAa;AAC5C,WAAU,MAAM;AAChB,cAAa,QAAQ,cAAc,KAAK,UAAU,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AAyB/D,MAAa,YAAY,IAAY,qBAA8B;CAGjE,MAAM,MADY,aADG,gBAAgB,iBAAiB,CACV,CACtB;AACtB,KAAI,CAAC,IACH,QAAO,KAAK,mBAAmB,GAAG,iBAAiB;AAErD,QAAO"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
'use client';
|
|
15
15
|
|
|
16
16
|
import { DEFAULT_COLORS } from "../shared/constants.js";
|
|
17
|
+
import { CoffinCornerExtension } from "../../extensions/coffin-corner/coffin-corner-extension.js";
|
|
18
|
+
import { PathStyleExtension } from "@deck.gl/extensions";
|
|
17
19
|
|
|
18
20
|
//#region src/deckgl/shapes/display-shape-layer/constants.ts
|
|
19
21
|
/**
|
|
@@ -28,29 +30,6 @@ const MAP_INTERACTION = {
|
|
|
28
30
|
ICON_HOVER_SIZE_INCREASE: 5
|
|
29
31
|
};
|
|
30
32
|
/**
|
|
31
|
-
* Selection highlight configuration.
|
|
32
|
-
*
|
|
33
|
-
* Controls the appearance of selected shapes, including highlight color
|
|
34
|
-
* and icon size adjustments for Point shapes.
|
|
35
|
-
*/
|
|
36
|
-
const SELECTION_HIGHLIGHT = {
|
|
37
|
-
COLOR: DEFAULT_COLORS.highlight,
|
|
38
|
-
ICON_SIZE_INCREASE: 8
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Coffin corners configuration for Point selection/hover feedback.
|
|
42
|
-
*
|
|
43
|
-
* Coffin corners are bracket-like corners that appear around Point shapes
|
|
44
|
-
* with icons to indicate hover and selection states. They provide visual
|
|
45
|
-
* feedback without obscuring the icon itself.
|
|
46
|
-
*/
|
|
47
|
-
const COFFIN_CORNERS = {
|
|
48
|
-
HOVER_ICON: "coffin-corners-hover",
|
|
49
|
-
SELECTED_ICON: "coffin-corners-selected",
|
|
50
|
-
SELECTED_HOVER_ICON: "coffin-corners-selected-hover",
|
|
51
|
-
SIZE: 38
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
33
|
* Default props for DisplayShapeLayer.
|
|
55
34
|
*
|
|
56
35
|
* Provides sensible defaults for interactive shape display with labels,
|
|
@@ -62,9 +41,74 @@ const DEFAULT_DISPLAY_PROPS = {
|
|
|
62
41
|
showLabels: "always",
|
|
63
42
|
showHighlight: false,
|
|
64
43
|
applyBaseOpacity: true,
|
|
65
|
-
highlightColor:
|
|
44
|
+
highlightColor: DEFAULT_COLORS.highlight
|
|
66
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Material settings for lighting effects on polygon shapes.
|
|
48
|
+
* Controls fill brightness for hover and selection overlay layers.
|
|
49
|
+
* Keys mirror BRIGHTNESS_FACTOR for consistency.
|
|
50
|
+
*/
|
|
51
|
+
const MATERIAL_SETTINGS = {
|
|
52
|
+
NORMAL: {
|
|
53
|
+
ambient: .35,
|
|
54
|
+
diffuse: .6,
|
|
55
|
+
shininess: 32,
|
|
56
|
+
specularColor: [
|
|
57
|
+
255,
|
|
58
|
+
255,
|
|
59
|
+
255
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
HOVER_OR_SELECT: {
|
|
63
|
+
ambient: .6,
|
|
64
|
+
diffuse: .8,
|
|
65
|
+
shininess: 64,
|
|
66
|
+
specularColor: [
|
|
67
|
+
255,
|
|
68
|
+
255,
|
|
69
|
+
255
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
HOVER_AND_SELECT: {
|
|
73
|
+
ambient: .75,
|
|
74
|
+
diffuse: .95,
|
|
75
|
+
shininess: 80,
|
|
76
|
+
specularColor: [
|
|
77
|
+
255,
|
|
78
|
+
255,
|
|
79
|
+
255
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Brightness multipliers for interaction state feedback.
|
|
85
|
+
* Applied via brightenColor() to line colors, curtains, and elevation indicators.
|
|
86
|
+
* - HOVER_OR_SELECT: shape is hovered or selected (single active state)
|
|
87
|
+
* - HOVER_AND_SELECT: shape is both hovered and selected simultaneously
|
|
88
|
+
*/
|
|
89
|
+
const BRIGHTNESS_FACTOR = {
|
|
90
|
+
HOVER_OR_SELECT: 1.4,
|
|
91
|
+
HOVER_AND_SELECT: 1.7
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Opacity multiplier for interaction overlay layers (hover, select).
|
|
95
|
+
* Applied to the shape's fill alpha — sits between the base opacity (0.2)
|
|
96
|
+
* and full opacity (1.0) so the overlay reads clearly without being too solid.
|
|
97
|
+
*/
|
|
98
|
+
const OVERLAY_FILL_OPACITY = .25;
|
|
99
|
+
/** Reusable deck.gl PathStyleExtension enabling dash patterns on GeoJsonLayer lines. */
|
|
100
|
+
const DASH_EXTENSION = new PathStyleExtension({ dash: true });
|
|
101
|
+
const COFFIN_CORNER_EXTENSION = new CoffinCornerExtension();
|
|
102
|
+
/** Stable extensions array for GeoJsonLayer — avoids new reference per render triggering getShaders() re-evaluation. */
|
|
103
|
+
const DISPLAY_EXTENSIONS = [DASH_EXTENSION, COFFIN_CORNER_EXTENSION];
|
|
104
|
+
/** Readonly [r, g, b, a] tuple of DEFAULT_COLORS.highlight, pre-spread at module load for hot-path usage. */
|
|
105
|
+
const HIGHLIGHT_COLOR_TUPLE = [
|
|
106
|
+
DEFAULT_COLORS.highlight[0],
|
|
107
|
+
DEFAULT_COLORS.highlight[1],
|
|
108
|
+
DEFAULT_COLORS.highlight[2],
|
|
109
|
+
DEFAULT_COLORS.highlight[3] ?? 255
|
|
110
|
+
];
|
|
67
111
|
|
|
68
112
|
//#endregion
|
|
69
|
-
export {
|
|
113
|
+
export { BRIGHTNESS_FACTOR, DEFAULT_DISPLAY_PROPS, DISPLAY_EXTENSIONS, HIGHLIGHT_COLOR_TUPLE, MAP_INTERACTION, MATERIAL_SETTINGS, OVERLAY_FILL_OPACITY };
|
|
70
114
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":[],"sources":["../../../../src/deckgl/shapes/display-shape-layer/constants.ts"],"sourcesContent":["/*\n * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\
|
|
1
|
+
{"version":3,"file":"constants.js","names":["HIGHLIGHT_COLOR_TUPLE: Rgba255Tuple"],"sources":["../../../../src/deckgl/shapes/display-shape-layer/constants.ts"],"sourcesContent":["/*\n * Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\nimport { PathStyleExtension } from '@deck.gl/extensions';\nimport { CoffinCornerExtension } from '../../extensions/coffin-corner/coffin-corner-extension';\nimport { DEFAULT_COLORS } from '../shared/constants';\nimport type { Rgba255Tuple } from '@accelint/predicates';\n\n/**\n * Map interaction constants.\n *\n * Values derived from ngc2 for consistency with existing UI patterns.\n * Controls sizing and interaction feedback for shape rendering.\n */\nexport const MAP_INTERACTION = {\n LINE_WIDTH_MIN_PIXELS: 1,\n ICON_SIZE: 38,\n ICON_HOVER_SIZE_INCREASE: 5,\n} as const;\n\n/**\n * Default props for DisplayShapeLayer.\n *\n * Provides sensible defaults for interactive shape display with labels,\n * standard opacity handling, and minimal visual feedback. These can be\n * overridden via layer props.\n */\nexport const DEFAULT_DISPLAY_PROPS = {\n pickable: true,\n showLabels: 'always' as const,\n showHighlight: false,\n applyBaseOpacity: true,\n highlightColor: DEFAULT_COLORS.highlight,\n};\n\n/**\n * Material settings for lighting effects on polygon shapes.\n * Controls fill brightness for hover and selection overlay layers.\n * Keys mirror BRIGHTNESS_FACTOR for consistency.\n */\nexport const MATERIAL_SETTINGS = {\n // Normal state - standard lighting\n NORMAL: {\n ambient: 0.35,\n diffuse: 0.6,\n shininess: 32,\n specularColor: [255, 255, 255] as [number, number, number],\n },\n // Hovered or selected (single active state)\n HOVER_OR_SELECT: {\n ambient: 0.6,\n diffuse: 0.8,\n shininess: 64,\n specularColor: [255, 255, 255] as [number, number, number],\n },\n // Hovered and selected simultaneously - brighter\n HOVER_AND_SELECT: {\n ambient: 0.75,\n diffuse: 0.95,\n shininess: 80,\n specularColor: [255, 255, 255] as [number, number, number],\n },\n} as const;\n\n/**\n * Brightness multipliers for interaction state feedback.\n * Applied via brightenColor() to line colors, curtains, and elevation indicators.\n * - HOVER_OR_SELECT: shape is hovered or selected (single active state)\n * - HOVER_AND_SELECT: shape is both hovered and selected simultaneously\n */\nexport const BRIGHTNESS_FACTOR = {\n HOVER_OR_SELECT: 1.4,\n HOVER_AND_SELECT: 1.7,\n} as const;\n\n/**\n * Opacity multiplier for interaction overlay layers (hover, select).\n * Applied to the shape's fill alpha — sits between the base opacity (0.2)\n * and full opacity (1.0) so the overlay reads clearly without being too solid.\n */\nexport const OVERLAY_FILL_OPACITY = 0.25;\n\n/** Reusable deck.gl PathStyleExtension enabling dash patterns on GeoJsonLayer lines. */\nexport const DASH_EXTENSION = new PathStyleExtension({ dash: true });\n\nexport const COFFIN_CORNER_EXTENSION = new CoffinCornerExtension();\n\n/** Stable extensions array for GeoJsonLayer — avoids new reference per render triggering getShaders() re-evaluation. */\nexport const DISPLAY_EXTENSIONS = [DASH_EXTENSION, COFFIN_CORNER_EXTENSION];\n\n/** Readonly [r, g, b, a] tuple of DEFAULT_COLORS.highlight, pre-spread at module load for hot-path usage. */\nexport const HIGHLIGHT_COLOR_TUPLE: Rgba255Tuple = [\n DEFAULT_COLORS.highlight[0],\n DEFAULT_COLORS.highlight[1],\n DEFAULT_COLORS.highlight[2],\n DEFAULT_COLORS.highlight[3] ?? 255,\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAa,kBAAkB;CAC7B,uBAAuB;CACvB,WAAW;CACX,0BAA0B;CAC3B;;;;;;;;AASD,MAAa,wBAAwB;CACnC,UAAU;CACV,YAAY;CACZ,eAAe;CACf,kBAAkB;CAClB,gBAAgB,eAAe;CAChC;;;;;;AAOD,MAAa,oBAAoB;CAE/B,QAAQ;EACN,SAAS;EACT,SAAS;EACT,WAAW;EACX,eAAe;GAAC;GAAK;GAAK;GAAI;EAC/B;CAED,iBAAiB;EACf,SAAS;EACT,SAAS;EACT,WAAW;EACX,eAAe;GAAC;GAAK;GAAK;GAAI;EAC/B;CAED,kBAAkB;EAChB,SAAS;EACT,SAAS;EACT,WAAW;EACX,eAAe;GAAC;GAAK;GAAK;GAAI;EAC/B;CACF;;;;;;;AAQD,MAAa,oBAAoB;CAC/B,iBAAiB;CACjB,kBAAkB;CACnB;;;;;;AAOD,MAAa,uBAAuB;;AAGpC,MAAa,iBAAiB,IAAI,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEpE,MAAa,0BAA0B,IAAI,uBAAuB;;AAGlE,MAAa,qBAAqB,CAAC,gBAAgB,wBAAwB;;AAG3E,MAAaA,wBAAsC;CACjD,eAAe,UAAU;CACzB,eAAe,UAAU;CACzB,eAAe,UAAU;CACzB,eAAe,UAAU,MAAM;CAChC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2026 Hypergiant Galactic Systems Inc. All rights reserved.
|
|
3
3
|
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
5
|
* of the License at https://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -10,23 +10,12 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
14
|
-
import { DisplayShapeLayerProps } from "./types.js";
|
|
13
|
+
import { DisplayShapeLayerProps, DisplayShapeLayerState } from "./types.js";
|
|
15
14
|
import * as _deck_gl_core0 from "@deck.gl/core";
|
|
16
15
|
import { CompositeLayer, Layer, PickingInfo } from "@deck.gl/core";
|
|
17
16
|
|
|
18
17
|
//#region src/deckgl/shapes/display-shape-layer/index.d.ts
|
|
19
|
-
|
|
20
|
-
* State type for DisplayShapeLayer
|
|
21
|
-
*/
|
|
22
|
-
type DisplayShapeLayerState = {
|
|
23
|
-
/** Index of currently hovered shape, undefined when not hovering */
|
|
24
|
-
hoverIndex?: number;
|
|
25
|
-
/** ID of the last hovered shape for event deduplication */
|
|
26
|
-
lastHoveredId?: ShapeId | null;
|
|
27
|
-
/** Allow additional properties from base layer state */
|
|
28
|
-
[key: string]: unknown;
|
|
29
|
-
};
|
|
18
|
+
|
|
30
19
|
/**
|
|
31
20
|
* DisplayShapeLayer - Read-only shapes visualization layer
|
|
32
21
|
*
|
|
@@ -36,24 +25,28 @@ type DisplayShapeLayerState = {
|
|
|
36
25
|
* ## Features
|
|
37
26
|
* - **Multiple geometry types**: Point, LineString, Polygon, and Circle
|
|
38
27
|
* - **Icon support**: Custom icons for Point geometries via icon atlases
|
|
39
|
-
* - **Interactive selection**: Click handling with
|
|
40
|
-
* - **Hover effects**:
|
|
28
|
+
* - **Interactive selection**: Click handling with brightness overlay on polygon select, optional highlight outline for non-Point shapes (if showHighlight=true). Point geometries use coffin corner brackets instead.
|
|
29
|
+
* - **Hover effects**: Polygon fills brighten via material lighting; outline width increases by 2px on hover
|
|
41
30
|
* - **Customizable labels**: Flexible label positioning with per-shape or global options
|
|
42
31
|
* - **Style properties**: Full control over colors, border/outline patterns, and opacity
|
|
43
32
|
* - **Event bus integration**: Automatically emits shape events via @accelint/bus
|
|
44
33
|
* - **Multi-map support**: Events include map instance ID for isolation
|
|
45
34
|
*
|
|
46
|
-
* ##
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* -
|
|
35
|
+
* ## Interaction Philosophy
|
|
36
|
+
* Interactions never modify a shape's innate styling. Hover and selection are always
|
|
37
|
+
* additive overlays rendered apart from the main layer using opacity-scaled fill colors
|
|
38
|
+
* and material-based brightness — the base shape is never altered.
|
|
50
39
|
*
|
|
51
40
|
* ## Layer Structure
|
|
52
|
-
* Renders
|
|
53
|
-
* 1. **Highlight layer**: Selection
|
|
54
|
-
* 2. **
|
|
55
|
-
* 3. **
|
|
56
|
-
* 4. **
|
|
41
|
+
* Renders sublayers in this order (bottom to top):
|
|
42
|
+
* 1. **Highlight layer**: Selection outline for non-polygon, non-Point shapes (when showHighlight enabled)
|
|
43
|
+
* 2. **Select layer**: Selection brightness overlay for polygon shapes
|
|
44
|
+
* 3. **Hover layer**: Hover brightness overlay for polygon shapes
|
|
45
|
+
* 4. **Elevation visualization**: Curtains (LineStrings) or wireframes (polygons) — elevation only
|
|
46
|
+
* 5. **Elevation indicators**: Vertical strut lines for elevated non-polygon shapes — elevation only
|
|
47
|
+
* 6. **Main GeoJsonLayer**: Shape geometries with styling and interaction; includes CoffinCornerExtension
|
|
48
|
+
* which propagates to the icon/scatterplot sublayer for Point hover/select bracket feedback
|
|
49
|
+
* 7. **Label layer**: Text labels (if showLabels enabled)
|
|
57
50
|
*
|
|
58
51
|
* ## Icon Atlas Constraint
|
|
59
52
|
* When using icons for Point geometries, all shapes in a single layer must share the
|
|
@@ -115,6 +108,12 @@ declare class DisplayShapeLayer extends CompositeLayer<DisplayShapeLayerProps> {
|
|
|
115
108
|
state: DisplayShapeLayerState;
|
|
116
109
|
/** Cache for transformed features to avoid recreating objects on every render */
|
|
117
110
|
private featuresCache;
|
|
111
|
+
/** Cache for elevation classification and curtain features */
|
|
112
|
+
private elevationCache;
|
|
113
|
+
/** Cache for elevation indicator line segments */
|
|
114
|
+
private indicatorCache;
|
|
115
|
+
/** Cached coffin corner color tuple — avoids new array reference per render when highlight hasn't changed. */
|
|
116
|
+
private coffinCornerColorCache;
|
|
118
117
|
static layerName: string;
|
|
119
118
|
static defaultProps: {
|
|
120
119
|
pickable: boolean;
|
|
@@ -127,6 +126,23 @@ declare class DisplayShapeLayer extends CompositeLayer<DisplayShapeLayerProps> {
|
|
|
127
126
|
* Clean up state and caches when layer is destroyed
|
|
128
127
|
*/
|
|
129
128
|
finalizeState(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Resolved highlight color — uses prop if provided, falls back to default.
|
|
131
|
+
*/
|
|
132
|
+
private get resolvedHighlight();
|
|
133
|
+
/**
|
|
134
|
+
* Coffin corner bracket color derived from resolvedHighlight with forced full opacity.
|
|
135
|
+
* Cached to avoid a new array reference per render triggering deck.gl prop-change detection.
|
|
136
|
+
*/
|
|
137
|
+
private get coffinCornerColor();
|
|
138
|
+
/**
|
|
139
|
+
* Handle picking events from the main shapes layer
|
|
140
|
+
*/
|
|
141
|
+
private handleMainLayerPick;
|
|
142
|
+
/**
|
|
143
|
+
* Handle picking events from curtain layers and map back to original LineString
|
|
144
|
+
*/
|
|
145
|
+
private handleCurtainPick;
|
|
130
146
|
/**
|
|
131
147
|
* Override getPickingInfo to handle events from sublayers
|
|
132
148
|
* This is the correct pattern for CompositeLayer event handling
|
|
@@ -138,7 +154,7 @@ declare class DisplayShapeLayer extends CompositeLayer<DisplayShapeLayerProps> {
|
|
|
138
154
|
}: {
|
|
139
155
|
info: PickingInfo;
|
|
140
156
|
mode?: string;
|
|
141
|
-
sourceLayer?:
|
|
157
|
+
sourceLayer?: Layer | null;
|
|
142
158
|
}): {
|
|
143
159
|
color: Uint8Array | null;
|
|
144
160
|
layer: Layer | null;
|
|
@@ -165,29 +181,38 @@ declare class DisplayShapeLayer extends CompositeLayer<DisplayShapeLayerProps> {
|
|
|
165
181
|
*/
|
|
166
182
|
private getShapeById;
|
|
167
183
|
/**
|
|
168
|
-
* Handle shape click
|
|
184
|
+
* Handle shape click — emits `shapes:selected` via bus and calls `onShapeClick` callback.
|
|
185
|
+
* @param info - deck.gl picking info from the clicked sublayer.
|
|
169
186
|
*/
|
|
170
187
|
private handleShapeClick;
|
|
171
188
|
/**
|
|
172
|
-
* Handle shape hover
|
|
189
|
+
* Handle shape hover — emits `shapes:hovered` via bus (deduplicated by shapeId) and calls `onShapeHover` callback.
|
|
190
|
+
* @param info - deck.gl picking info from the hovered sublayer.
|
|
173
191
|
*/
|
|
174
192
|
private handleShapeHover;
|
|
175
193
|
/**
|
|
176
|
-
*
|
|
177
|
-
*
|
|
194
|
+
* Get or compute elevation-derived data (feature classification + curtain features).
|
|
195
|
+
* Cached on features identity and applyBaseOpacity to avoid per-frame recomputation.
|
|
196
|
+
*/
|
|
197
|
+
private getElevationData;
|
|
198
|
+
/**
|
|
199
|
+
* Render highlight sublayer (underneath main layer).
|
|
200
|
+
* Point geometries skip this layer — they use coffin corner brackets
|
|
201
|
+
* via CoffinCornerExtension on the main layer's icon/scatterplot sublayer instead.
|
|
178
202
|
*/
|
|
179
203
|
private renderHighlightLayer;
|
|
180
204
|
/**
|
|
181
|
-
* Render
|
|
182
|
-
*
|
|
205
|
+
* Render selection overlay layer for polygon shapes.
|
|
206
|
+
* Mirrors renderHoverLayer but triggers on selectedShapeId instead of hover.
|
|
207
|
+
* When a shape is both selected and hovered, both layers stack for a brighter combined effect.
|
|
183
208
|
*/
|
|
184
|
-
private
|
|
209
|
+
private renderSelectLayer;
|
|
185
210
|
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
211
|
+
* Render hover layer for all polygon shapes (2D and 3D).
|
|
212
|
+
* Overlays the shape's base fill with brighter material lighting.
|
|
213
|
+
* Stacks with other interaction layers (e.g. selection highlight underneath).
|
|
189
214
|
*/
|
|
190
|
-
private
|
|
215
|
+
private renderHoverLayer;
|
|
191
216
|
/**
|
|
192
217
|
* Render main shapes layer
|
|
193
218
|
*/
|
|
@@ -201,7 +226,37 @@ declare class DisplayShapeLayer extends CompositeLayer<DisplayShapeLayerProps> {
|
|
|
201
226
|
*/
|
|
202
227
|
private renderLabelsLayer;
|
|
203
228
|
/**
|
|
204
|
-
* Render
|
|
229
|
+
* Render radius label layer for hovered circle shapes.
|
|
230
|
+
* Shows the circle's radius value converted to the configured display unit.
|
|
231
|
+
*
|
|
232
|
+
* Positioning relative to the shape's label:
|
|
233
|
+
* - When showLabels is 'always' or 'hover': appears below the label
|
|
234
|
+
* - When showLabels is 'never': appears in the label's position
|
|
235
|
+
*/
|
|
236
|
+
private renderRadiusLabelLayer;
|
|
237
|
+
/**
|
|
238
|
+
* Render vertical elevation indicator lines for non-polygon shapes.
|
|
239
|
+
* Creates vertical "strut" lines from ground level to elevated features.
|
|
240
|
+
* For LineStrings, creates a "curtain" effect with vertical lines at each coordinate.
|
|
241
|
+
* Polygons use wireframe extrusion instead.
|
|
242
|
+
*/
|
|
243
|
+
private renderElevationIndicatorLayer;
|
|
244
|
+
/**
|
|
245
|
+
* Create a single curtain GeoJsonLayer with shared configuration.
|
|
246
|
+
*/
|
|
247
|
+
private createCurtainGeoJsonLayer;
|
|
248
|
+
/**
|
|
249
|
+
* Render curtain layers for elevated LineStrings.
|
|
250
|
+
* Creates three separate layers for main, hovered, and selected states.
|
|
251
|
+
*/
|
|
252
|
+
private renderCurtainLayers;
|
|
253
|
+
/**
|
|
254
|
+
* Render elevation visualization layers (curtains for lines, wireframes for polygons).
|
|
255
|
+
*/
|
|
256
|
+
private renderElevationVisualizationLayer;
|
|
257
|
+
/**
|
|
258
|
+
* Render all sublayers.
|
|
259
|
+
* @returns Ordered array of sublayers (highlight, select, hover, elevation, main, labels) from bottom to top.
|
|
205
260
|
*/
|
|
206
261
|
renderLayers(): Layer[];
|
|
207
262
|
}
|