@accelint/map-toolkit 0.0.2 → 0.2.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +92 -16
  3. package/catalog-info.yaml +44 -0
  4. package/dist/deckgl/base-map/constants.d.ts +16 -0
  5. package/dist/deckgl/base-map/constants.js +18 -0
  6. package/dist/deckgl/base-map/constants.js.map +1 -0
  7. package/dist/deckgl/base-map/events.d.ts +7 -0
  8. package/dist/deckgl/base-map/events.js +9 -0
  9. package/dist/deckgl/base-map/events.js.map +1 -0
  10. package/dist/deckgl/base-map/index.d.ts +98 -0
  11. package/dist/deckgl/base-map/index.js +99 -0
  12. package/dist/deckgl/base-map/index.js.map +1 -0
  13. package/dist/deckgl/base-map/provider.d.ts +133 -0
  14. package/dist/deckgl/base-map/provider.js +22 -0
  15. package/dist/deckgl/base-map/provider.js.map +1 -0
  16. package/dist/deckgl/base-map/types.d.ts +61 -0
  17. package/dist/deckgl/base-map/types.js +3 -0
  18. package/dist/deckgl/base-map/types.js.map +1 -0
  19. package/dist/deckgl/index.d.ts +13 -0
  20. package/dist/deckgl/index.js +6 -0
  21. package/dist/{index.js.map → deckgl/index.js.map} +1 -1
  22. package/dist/deckgl/symbol-layer/fiber.d.ts +14 -0
  23. package/dist/deckgl/symbol-layer/fiber.js +6 -0
  24. package/dist/deckgl/symbol-layer/fiber.js.map +1 -0
  25. package/dist/deckgl/symbol-layer/index.d.ts +63 -0
  26. package/dist/deckgl/symbol-layer/index.js +92 -0
  27. package/dist/deckgl/symbol-layer/index.js.map +1 -0
  28. package/dist/deckgl/text-layer/character-sets.d.ts +20 -0
  29. package/dist/deckgl/text-layer/character-sets.js +36 -0
  30. package/dist/deckgl/text-layer/character-sets.js.map +1 -0
  31. package/dist/deckgl/text-layer/default-settings.d.ts +5 -0
  32. package/dist/deckgl/text-layer/default-settings.js +23 -0
  33. package/dist/deckgl/text-layer/default-settings.js.map +1 -0
  34. package/dist/deckgl/text-layer/fiber.d.ts +31 -0
  35. package/dist/deckgl/text-layer/fiber.js +6 -0
  36. package/dist/deckgl/text-layer/fiber.js.map +1 -0
  37. package/dist/deckgl/text-layer/index.d.ts +43 -0
  38. package/dist/deckgl/text-layer/index.js +33 -0
  39. package/dist/deckgl/text-layer/index.js.map +1 -0
  40. package/dist/decorators/deckgl.d.ts +5 -0
  41. package/dist/decorators/deckgl.js +14 -0
  42. package/dist/decorators/deckgl.js.map +1 -0
  43. package/dist/map-mode/events.d.ts +37 -0
  44. package/dist/map-mode/events.js +15 -0
  45. package/dist/map-mode/events.js.map +1 -0
  46. package/dist/map-mode/index.d.ts +6 -0
  47. package/dist/map-mode/index.js +5 -0
  48. package/dist/map-mode/index.js.map +1 -0
  49. package/dist/map-mode/store.d.ts +122 -0
  50. package/dist/map-mode/store.js +327 -0
  51. package/dist/map-mode/store.js.map +1 -0
  52. package/dist/map-mode/types.d.ts +83 -0
  53. package/dist/map-mode/types.js +3 -0
  54. package/dist/map-mode/types.js.map +1 -0
  55. package/dist/map-mode/use-map-mode.d.ts +54 -0
  56. package/dist/map-mode/use-map-mode.js +31 -0
  57. package/dist/map-mode/use-map-mode.js.map +1 -0
  58. package/dist/maplibre/constants.d.ts +11 -0
  59. package/dist/maplibre/constants.js +13 -0
  60. package/dist/maplibre/constants.js.map +1 -0
  61. package/dist/maplibre/hooks/use-maplibre.d.ts +39 -0
  62. package/dist/maplibre/hooks/use-maplibre.js +37 -0
  63. package/dist/maplibre/hooks/use-maplibre.js.map +1 -0
  64. package/dist/maplibre/index.d.ts +3 -0
  65. package/dist/maplibre/index.js +4 -0
  66. package/dist/maplibre/index.js.map +1 -0
  67. package/dist/metafile-esm.json +1 -1
  68. package/package.json +91 -17
  69. package/dist/index.d.ts +0 -2
  70. package/dist/index.js +0 -3
  71. package/dist/test/setup.d.ts +0 -2
  72. package/dist/test/setup.js +0 -10
  73. package/dist/test/setup.js.map +0 -1
@@ -0,0 +1,54 @@
1
+ import { UniqueId } from '@accelint/core';
2
+
3
+ /**
4
+ * Return value for the useMapMode hook
5
+ */
6
+ type UseMapModeReturn = {
7
+ /** The current active map mode */
8
+ mode: string;
9
+ /** Function to request a mode change with ownership */
10
+ requestModeChange: (desiredMode: string, requestOwner: string) => void;
11
+ };
12
+ /**
13
+ * Hook to access the map mode state and actions.
14
+ *
15
+ * This hook uses `useSyncExternalStore` to subscribe to the external `MapModeStore`,
16
+ * providing concurrent-safe mode state updates. The hybrid architecture separates:
17
+ * - Map instance identity (from `MapContext` or parameter)
18
+ * - Mode state management (from `MapModeStore` via `useSyncExternalStore`)
19
+ *
20
+ * @param id - Optional map instance ID. If not provided, will use the ID from `MapContext`.
21
+ * @returns The current map mode and requestModeChange function
22
+ * @throws Error if no `id` is provided and hook is used outside of `MapProvider`
23
+ * @throws Error if store doesn't exist for the given map ID
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * // Inside MapProvider (within BaseMap children) - uses context
28
+ * // Only Deck.gl layer components can be children
29
+ * function CustomDeckLayer() {
30
+ * const { mode, requestModeChange } = useMapMode();
31
+ *
32
+ * const handleClick = (info: PickingInfo) => {
33
+ * requestModeChange('editing', 'custom-layer-id');
34
+ * };
35
+ *
36
+ * return <ScatterplotLayer onClick={handleClick} />;
37
+ * }
38
+ * ```
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * // Outside MapProvider - pass id directly
43
+ * function ExternalControl({ mapId }: { mapId: UniqueId }) {
44
+ * const { mode, requestModeChange } = useMapMode(mapId);
45
+ *
46
+ * return <button onClick={() => requestModeChange('default', 'external')}>
47
+ * Reset to Default (current: {mode})
48
+ * </button>;
49
+ * }
50
+ * ```
51
+ */
52
+ declare function useMapMode(id?: UniqueId): UseMapModeReturn;
53
+
54
+ export { type UseMapModeReturn, useMapMode };
@@ -0,0 +1,31 @@
1
+ import { useContext, useSyncExternalStore, useMemo } from 'react';
2
+ import { MapContext } from '../deckgl/base-map/provider.js';
3
+ import { getStore } from './store.js';
4
+
5
+ function useMapMode(id) {
6
+ const contextId = useContext(MapContext);
7
+ const actualId = id ?? contextId;
8
+ if (!actualId) {
9
+ throw new Error(
10
+ "useMapMode requires either an id parameter or to be used within a MapProvider"
11
+ );
12
+ }
13
+ const store = getStore(actualId);
14
+ if (!store) {
15
+ throw new Error(
16
+ `MapModeStore not found for map instance: ${actualId}. Ensure a store has been created for this map instance (e.g., via MapProvider or getOrCreateStore).`
17
+ );
18
+ }
19
+ const mode = useSyncExternalStore(store.subscribe, store.getSnapshot);
20
+ return useMemo(
21
+ () => ({
22
+ mode,
23
+ requestModeChange: store.requestModeChange
24
+ }),
25
+ [mode, store]
26
+ );
27
+ }
28
+
29
+ export { useMapMode };
30
+ //# sourceMappingURL=use-map-mode.js.map
31
+ //# sourceMappingURL=use-map-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/map-mode/use-map-mode.ts"],"names":[],"mappings":";;;;AAmEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,MAAM,SAAA,GAAY,WAAW,UAAU,CAAA;AACvC,EAAA,MAAM,WAAW,EAAA,IAAM,SAAA;AAEvB,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,KAAA,GAAQ,SAAS,QAAQ,CAAA;AAE/B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,4CAA4C,QAAQ,CAAA,oGAAA;AAAA,KACtD;AAAA,EACF;AAGA,EAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,KAAA,CAAM,SAAA,EAAW,MAAM,WAAW,CAAA;AAGpE,EAAA,OAAO,OAAA;AAAA,IACL,OAAO;AAAA,MACL,IAAA;AAAA,MACA,mBAAmB,KAAA,CAAM;AAAA,KAC3B,CAAA;AAAA,IACA,CAAC,MAAM,KAAK;AAAA,GACd;AACF","file":"use-map-mode.js","sourcesContent":["/*\n * Copyright 2025 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 { useContext, useMemo, useSyncExternalStore } from 'react';\nimport { MapContext } from '../deckgl/base-map/provider';\nimport { getStore } from './store';\nimport type { UniqueId } from '@accelint/core';\n\n/**\n * Return value for the useMapMode hook\n */\nexport type UseMapModeReturn = {\n /** The current active map mode */\n mode: string;\n /** Function to request a mode change with ownership */\n requestModeChange: (desiredMode: string, requestOwner: string) => void;\n};\n\n/**\n * Hook to access the map mode state and actions.\n *\n * This hook uses `useSyncExternalStore` to subscribe to the external `MapModeStore`,\n * providing concurrent-safe mode state updates. The hybrid architecture separates:\n * - Map instance identity (from `MapContext` or parameter)\n * - Mode state management (from `MapModeStore` via `useSyncExternalStore`)\n *\n * @param id - Optional map instance ID. If not provided, will use the ID from `MapContext`.\n * @returns The current map mode and requestModeChange function\n * @throws Error if no `id` is provided and hook is used outside of `MapProvider`\n * @throws Error if store doesn't exist for the given map ID\n *\n * @example\n * ```tsx\n * // Inside MapProvider (within BaseMap children) - uses context\n * // Only Deck.gl layer components can be children\n * function CustomDeckLayer() {\n * const { mode, requestModeChange } = useMapMode();\n *\n * const handleClick = (info: PickingInfo) => {\n * requestModeChange('editing', 'custom-layer-id');\n * };\n *\n * return <ScatterplotLayer onClick={handleClick} />;\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Outside MapProvider - pass id directly\n * function ExternalControl({ mapId }: { mapId: UniqueId }) {\n * const { mode, requestModeChange } = useMapMode(mapId);\n *\n * return <button onClick={() => requestModeChange('default', 'external')}>\n * Reset to Default (current: {mode})\n * </button>;\n * }\n * ```\n */\nexport function useMapMode(id?: UniqueId): UseMapModeReturn {\n const contextId = useContext(MapContext);\n const actualId = id ?? contextId;\n\n if (!actualId) {\n throw new Error(\n 'useMapMode requires either an id parameter or to be used within a MapProvider',\n );\n }\n\n // Get the store for this map instance\n const store = getStore(actualId);\n\n if (!store) {\n throw new Error(\n `MapModeStore not found for map instance: ${actualId}. Ensure a store has been created for this map instance (e.g., via MapProvider or getOrCreateStore).`,\n );\n }\n\n // Subscribe to store using useSyncExternalStore\n const mode = useSyncExternalStore(store.subscribe, store.getSnapshot);\n\n // Memoize the return value to prevent unnecessary re-renders\n return useMemo(\n () => ({\n mode,\n requestModeChange: store.requestModeChange,\n }),\n [mode, store],\n );\n}\n"]}
@@ -0,0 +1,11 @@
1
+ declare const INITIAL_VIEW_STATE: {
2
+ longitude: number;
3
+ latitude: number;
4
+ zoom: number;
5
+ minZoom: number;
6
+ maxZoom: number;
7
+ pitch: number;
8
+ bearing: number;
9
+ };
10
+
11
+ export { INITIAL_VIEW_STATE };
@@ -0,0 +1,13 @@
1
+ const INITIAL_VIEW_STATE = {
2
+ longitude: -77.0369,
3
+ latitude: 38.9072,
4
+ zoom: 4,
5
+ minZoom: 1,
6
+ maxZoom: 22,
7
+ pitch: 0,
8
+ bearing: 0
9
+ };
10
+
11
+ export { INITIAL_VIEW_STATE };
12
+ //# sourceMappingURL=constants.js.map
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/maplibre/constants.ts"],"names":[],"mappings":"AAcO,MAAM,kBAAA,GAAqB;AAAA,EAChC,SAAA,EAAW,QAAA;AAAA,EACX,QAAA,EAAU,OAAA;AAAA,EACV,IAAA,EAAM,CAAA;AAAA,EACN,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,KAAA,EAAO,CAAA;AAAA,EACP,OAAA,EAAS;AACX","file":"constants.js","sourcesContent":["/*\n * Copyright 2025 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// __private-exports\n\nexport const INITIAL_VIEW_STATE = {\n longitude: -77.0369,\n latitude: 38.9072,\n zoom: 4,\n minZoom: 1,\n maxZoom: 22,\n pitch: 0,\n bearing: 0,\n};\n"]}
@@ -0,0 +1,39 @@
1
+ import { IControl, MapOptions, Map } from 'maplibre-gl';
2
+
3
+ /**
4
+ * Hook to integrate a MapLibre GL map with a Deck.gl instance.
5
+ *
6
+ * This hook manages the lifecycle of a MapLibre map, including initialization,
7
+ * style updates, and cleanup. It ensures the Deck.gl control is properly added
8
+ * to the map and handles cleanup when the component unmounts.
9
+ *
10
+ * @param deck - The Deck.gl IControl instance to add to the map
11
+ * @param styleUrl - The MapLibre style URL to use for the map
12
+ * @param options - MapLibre map options (container, center, zoom, etc.)
13
+ * @returns The MapLibre map instance, or null if not yet initialized
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * function MapComponent() {
18
+ * const deckglInstance = useDeckgl();
19
+ * const container = useId();
20
+ *
21
+ * const mapOptions = useMemo(() => ({
22
+ * container,
23
+ * center: [-122.4, 37.8],
24
+ * zoom: 12,
25
+ * }), [container]);
26
+ *
27
+ * useMapLibre(
28
+ * deckglInstance as IControl,
29
+ * 'https://tiles.example.com/style.json',
30
+ * mapOptions
31
+ * );
32
+ *
33
+ * return <div id={container} />;
34
+ * }
35
+ * ```
36
+ */
37
+ declare function useMapLibre(deck: IControl | null, styleUrl: string, options: MapOptions): Map | null;
38
+
39
+ export { useMapLibre };
@@ -0,0 +1,37 @@
1
+ import { Map } from 'maplibre-gl';
2
+ import { useRef, useEffect } from 'react';
3
+
4
+ function useMapLibre(deck, styleUrl, options) {
5
+ const mapRef = useRef(null);
6
+ const optionsRef = useRef(options);
7
+ const styleRef = useRef(styleUrl);
8
+ useEffect(() => {
9
+ if (deck && !mapRef.current) {
10
+ mapRef.current = new Map({
11
+ ...optionsRef.current,
12
+ style: styleRef.current
13
+ });
14
+ mapRef.current.once("style.load", () => {
15
+ mapRef.current?.setProjection({ type: "mercator" });
16
+ mapRef.current?.addControl(deck);
17
+ });
18
+ return () => {
19
+ if (mapRef.current) {
20
+ mapRef.current.removeControl(deck);
21
+ mapRef.current.remove();
22
+ mapRef.current = null;
23
+ }
24
+ };
25
+ }
26
+ }, [deck]);
27
+ useEffect(() => {
28
+ if (mapRef.current) {
29
+ mapRef.current.setStyle(styleUrl);
30
+ }
31
+ }, [styleUrl]);
32
+ return mapRef.current;
33
+ }
34
+
35
+ export { useMapLibre };
36
+ //# sourceMappingURL=use-maplibre.js.map
37
+ //# sourceMappingURL=use-maplibre.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/maplibre/hooks/use-maplibre.ts"],"names":["MapLibre"],"mappings":";;;AAiDO,SAAS,WAAA,CACd,IAAA,EACA,QAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,OAAwB,IAAI,CAAA;AAG3C,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AAEjC,EAAA,MAAM,QAAA,GAAW,OAAO,QAAQ,CAAA;AAGhC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,IAAQ,CAAC,MAAA,CAAO,OAAA,EAAS;AAC3B,MAAA,MAAA,CAAO,OAAA,GAAU,IAAIA,GAAA,CAAS;AAAA,QAC5B,GAAG,UAAA,CAAW,OAAA;AAAA,QACd,OAAO,QAAA,CAAS;AAAA,OACjB,CAAA;AAED,MAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,YAAA,EAAc,MAAM;AACtC,QAAA,MAAA,CAAO,OAAA,EAAS,aAAA,CAAc,EAAE,IAAA,EAAM,YAAY,CAAA;AAClD,QAAA,MAAA,CAAO,OAAA,EAAS,WAAW,IAAI,CAAA;AAAA,MACjC,CAAC,CAAA;AAED,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,OAAO,OAAA,EAAS;AAClB,UAAA,MAAA,CAAO,OAAA,CAAQ,cAAc,IAAI,CAAA;AACjC,UAAA,MAAA,CAAO,QAAQ,MAAA,EAAO;AACtB,UAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO,MAAA,CAAO,OAAA;AAChB","file":"use-maplibre.js","sourcesContent":["/*\n * Copyright 2025 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 { type IControl, Map as MapLibre, type MapOptions } from 'maplibre-gl';\nimport { useEffect, useRef } from 'react';\n\n/**\n * Hook to integrate a MapLibre GL map with a Deck.gl instance.\n *\n * This hook manages the lifecycle of a MapLibre map, including initialization,\n * style updates, and cleanup. It ensures the Deck.gl control is properly added\n * to the map and handles cleanup when the component unmounts.\n *\n * @param deck - The Deck.gl IControl instance to add to the map\n * @param styleUrl - The MapLibre style URL to use for the map\n * @param options - MapLibre map options (container, center, zoom, etc.)\n * @returns The MapLibre map instance, or null if not yet initialized\n *\n * @example\n * ```tsx\n * function MapComponent() {\n * const deckglInstance = useDeckgl();\n * const container = useId();\n *\n * const mapOptions = useMemo(() => ({\n * container,\n * center: [-122.4, 37.8],\n * zoom: 12,\n * }), [container]);\n *\n * useMapLibre(\n * deckglInstance as IControl,\n * 'https://tiles.example.com/style.json',\n * mapOptions\n * );\n *\n * return <div id={container} />;\n * }\n * ```\n */\nexport function useMapLibre(\n deck: IControl | null,\n styleUrl: string,\n options: MapOptions,\n) {\n const mapRef = useRef<MapLibre | null>(null);\n // Using a ref for options to avoid re-creating the map when options object reference changes\n // The map is only created once on mount, options changes after that are ignored\n const optionsRef = useRef(options);\n // using a ref in the initial setup so that it doesn't cause a re-run of the effect on change\n const styleRef = useRef(styleUrl);\n\n // Initialize MapLibre instance once\n useEffect(() => {\n if (deck && !mapRef.current) {\n mapRef.current = new MapLibre({\n ...optionsRef.current,\n style: styleRef.current,\n });\n\n mapRef.current.once('style.load', () => {\n mapRef.current?.setProjection({ type: 'mercator' });\n mapRef.current?.addControl(deck);\n });\n\n return () => {\n if (mapRef.current) {\n mapRef.current.removeControl(deck);\n mapRef.current.remove();\n mapRef.current = null;\n }\n };\n }\n }, [deck]);\n\n // Update style when it changes\n useEffect(() => {\n if (mapRef.current) {\n mapRef.current.setStyle(styleUrl);\n }\n }, [styleUrl]);\n\n return mapRef.current;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { INITIAL_VIEW_STATE } from './constants.js';
2
+ export { useMapLibre } from './hooks/use-maplibre.js';
3
+ import 'maplibre-gl';
@@ -0,0 +1,4 @@
1
+ export { INITIAL_VIEW_STATE } from './constants.js';
2
+ export { useMapLibre } from './hooks/use-maplibre.js';
3
+ //# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -1 +1 @@
1
- {"inputs":{"src/index.ts":{"bytes":858,"imports":[],"format":"esm"},"src/test/setup.ts":{"bytes":868,"imports":[],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/index.js":{"imports":[],"exports":[],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0}},"bytes":0},"dist/test/setup.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1122},"dist/test/setup.js":{"imports":[{"path":"@testing-library/jest-dom/matchers","kind":"import-statement","external":true},{"path":"@testing-library/react","kind":"import-statement","external":true},{"path":"vitest","kind":"import-statement","external":true}],"exports":[],"entryPoint":"src/test/setup.ts","inputs":{"src/test/setup.ts":{"bytesInOutput":218}},"bytes":218}}}
1
+ {"inputs":{"src/deckgl/index.ts":{"bytes":1037,"imports":[],"format":"esm"},"src/decorators/deckgl.tsx":{"bytes":1096,"imports":[],"format":"esm"},"src/map-mode/events.ts":{"bytes":1961,"imports":[],"format":"esm"},"src/map-mode/index.ts":{"bytes":1142,"imports":[],"format":"esm"},"src/map-mode/store.ts":{"bytes":14668,"imports":[],"format":"esm"},"src/map-mode/types.ts":{"bytes":3586,"imports":[],"format":"esm"},"src/map-mode/use-map-mode.ts":{"bytes":3446,"imports":[],"format":"esm"},"src/deckgl/base-map/constants.ts":{"bytes":1129,"imports":[],"format":"esm"},"src/deckgl/base-map/events.ts":{"bytes":809,"imports":[],"format":"esm"},"src/deckgl/base-map/index.tsx":{"bytes":7788,"imports":[],"format":"esm"},"src/deckgl/base-map/provider.tsx":{"bytes":6766,"imports":[],"format":"esm"},"src/deckgl/base-map/types.ts":{"bytes":3327,"imports":[],"format":"esm"},"src/deckgl/symbol-layer/fiber.ts":{"bytes":1020,"imports":[],"format":"esm"},"src/deckgl/symbol-layer/index.ts":{"bytes":4786,"imports":[],"format":"esm"},"src/maplibre/constants.ts":{"bytes":819,"imports":[],"format":"esm"},"src/maplibre/index.ts":{"bytes":750,"imports":[],"format":"esm"},"src/deckgl/text-layer/character-sets.ts":{"bytes":2052,"imports":[],"format":"esm"},"src/deckgl/text-layer/default-settings.ts":{"bytes":1198,"imports":[],"format":"esm"},"src/deckgl/text-layer/fiber.ts":{"bytes":1516,"imports":[],"format":"esm"},"src/deckgl/text-layer/index.ts":{"bytes":2455,"imports":[],"format":"esm"},"src/maplibre/hooks/use-maplibre.ts":{"bytes":3030,"imports":[],"format":"esm"}},"outputs":{"dist/deckgl/text-layer/character-sets.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3258},"dist/deckgl/text-layer/character-sets.js":{"imports":[],"exports":["CHARACTER_SETS"],"entryPoint":"src/deckgl/text-layer/character-sets.ts","inputs":{"src/deckgl/text-layer/character-sets.ts":{"bytesInOutput":1507}},"bytes":1536},"dist/deckgl/text-layer/default-settings.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1712},"dist/deckgl/text-layer/default-settings.js":{"imports":[],"exports":["defaultSettings"],"entryPoint":"src/deckgl/text-layer/default-settings.ts","inputs":{"src/deckgl/text-layer/default-settings.ts":{"bytesInOutput":389}},"bytes":419},"dist/deckgl/text-layer/fiber.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1761},"dist/deckgl/text-layer/fiber.js":{"imports":[{"path":"@deckgl-fiber-renderer/dom","kind":"import-statement","external":true},{"path":"./index","kind":"import-statement","external":true}],"exports":[],"entryPoint":"src/deckgl/text-layer/fiber.ts","inputs":{"src/deckgl/text-layer/fiber.ts":{"bytesInOutput":113}},"bytes":113},"dist/deckgl/text-layer/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3088},"dist/deckgl/text-layer/index.js":{"imports":[{"path":"@deck.gl/layers","kind":"import-statement","external":true},{"path":"./character-sets.js","kind":"import-statement","external":true},{"path":"./default-settings.js","kind":"import-statement","external":true}],"exports":["TextLayer"],"entryPoint":"src/deckgl/text-layer/index.ts","inputs":{"src/deckgl/text-layer/index.ts":{"bytesInOutput":832}},"bytes":856},"dist/maplibre/hooks/use-maplibre.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3948},"dist/maplibre/hooks/use-maplibre.js":{"imports":[{"path":"maplibre-gl","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["useMapLibre"],"entryPoint":"src/maplibre/hooks/use-maplibre.ts","inputs":{"src/maplibre/hooks/use-maplibre.ts":{"bytesInOutput":913}},"bytes":939},"dist/deckgl/base-map/events.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1061},"dist/deckgl/base-map/events.js":{"imports":[],"exports":["MapEvents","MapEventsNamespace"],"entryPoint":"src/deckgl/base-map/events.ts","inputs":{"src/deckgl/base-map/events.ts":{"bytesInOutput":136}},"bytes":182},"dist/deckgl/base-map/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":9708},"dist/deckgl/base-map/index.js":{"imports":[{"path":"react/jsx-runtime","kind":"import-statement","external":true},{"path":"client-only","kind":"import-statement","external":true},{"path":"@accelint/bus/react","kind":"import-statement","external":true},{"path":"@deckgl-fiber-renderer/dom","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"../../maplibre/constants","kind":"import-statement","external":true},{"path":"../../maplibre/hooks/use-maplibre","kind":"import-statement","external":true},{"path":"./constants","kind":"import-statement","external":true},{"path":"./events","kind":"import-statement","external":true},{"path":"./provider","kind":"import-statement","external":true}],"exports":["BaseMap"],"entryPoint":"src/deckgl/base-map/index.tsx","inputs":{"src/deckgl/base-map/index.tsx":{"bytesInOutput":2484}},"bytes":2520},"dist/deckgl/base-map/provider.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":7459},"dist/deckgl/base-map/provider.js":{"imports":[{"path":"react/jsx-runtime","kind":"import-statement","external":true},{"path":"client-only","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"../../map-mode/store","kind":"import-statement","external":true}],"exports":["MapContext","MapProvider"],"entryPoint":"src/deckgl/base-map/provider.tsx","inputs":{"src/deckgl/base-map/provider.tsx":{"bytesInOutput":573}},"bytes":627},"dist/deckgl/base-map/types.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/deckgl/base-map/types.js":{"imports":[],"exports":[],"entryPoint":"src/deckgl/base-map/types.ts","inputs":{"src/deckgl/base-map/types.ts":{"bytesInOutput":0}},"bytes":0},"dist/deckgl/symbol-layer/fiber.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1248},"dist/deckgl/symbol-layer/fiber.js":{"imports":[{"path":"@deckgl-fiber-renderer/dom","kind":"import-statement","external":true},{"path":"./index","kind":"import-statement","external":true}],"exports":[],"entryPoint":"src/deckgl/symbol-layer/fiber.ts","inputs":{"src/deckgl/symbol-layer/fiber.ts":{"bytesInOutput":117}},"bytes":117},"dist/deckgl/symbol-layer/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":6569},"dist/deckgl/symbol-layer/index.js":{"imports":[{"path":"@deck.gl/layers","kind":"import-statement","external":true},{"path":"milsymbol","kind":"import-statement","external":true}],"exports":["SymbolLayer"],"entryPoint":"src/deckgl/symbol-layer/index.ts","inputs":{"src/deckgl/symbol-layer/index.ts":{"bytesInOutput":2593}},"bytes":2619},"dist/maplibre/constants.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1102},"dist/maplibre/constants.js":{"imports":[],"exports":["INITIAL_VIEW_STATE"],"entryPoint":"src/maplibre/constants.ts","inputs":{"src/maplibre/constants.ts":{"bytesInOutput":141}},"bytes":174},"dist/maplibre/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":927},"dist/maplibre/index.js":{"imports":[{"path":"./constants","kind":"import-statement","external":true},{"path":"./hooks/use-maplibre","kind":"import-statement","external":true}],"exports":["INITIAL_VIEW_STATE","useMapLibre"],"entryPoint":"src/maplibre/index.ts","inputs":{"src/maplibre/index.ts":{"bytesInOutput":102}},"bytes":150},"dist/deckgl/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1268},"dist/deckgl/index.js":{"imports":[{"path":"./base-map","kind":"import-statement","external":true},{"path":"./base-map/constants","kind":"import-statement","external":true},{"path":"./base-map/events","kind":"import-statement","external":true},{"path":"./symbol-layer","kind":"import-statement","external":true}],"exports":["BASE_MAP_STYLE","BaseMap","MapEvents","MapEventsNamespace","PARAMETERS","SymbolLayer"],"entryPoint":"src/deckgl/index.ts","inputs":{"src/deckgl/index.ts":{"bytesInOutput":218}},"bytes":322},"dist/decorators/deckgl.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1436},"dist/decorators/deckgl.js":{"imports":[{"path":"react/jsx-runtime","kind":"import-statement","external":true},{"path":"@accelint/core","kind":"import-statement","external":true},{"path":"../deckgl/base-map","kind":"import-statement","external":true}],"exports":["withDeckGL"],"entryPoint":"src/decorators/deckgl.tsx","inputs":{"src/decorators/deckgl.tsx":{"bytesInOutput":351}},"bytes":376},"dist/map-mode/events.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2316},"dist/map-mode/events.js":{"imports":[],"exports":["MapModeEvents","MapModeEventsNamespace"],"entryPoint":"src/map-mode/events.ts","inputs":{"src/map-mode/events.ts":{"bytesInOutput":570}},"bytes":624},"dist/map-mode/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1396},"dist/map-mode/index.js":{"imports":[{"path":"./events","kind":"import-statement","external":true},{"path":"./store","kind":"import-statement","external":true},{"path":"./use-map-mode","kind":"import-statement","external":true}],"exports":["MapModeEvents","MapModeEventsNamespace","MapModeStore","destroyStore","getOrCreateStore","getStore","useMapMode"],"entryPoint":"src/map-mode/index.ts","inputs":{"src/map-mode/index.ts":{"bytesInOutput":201}},"bytes":333},"dist/map-mode/store.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":20593},"dist/map-mode/store.js":{"imports":[{"path":"@accelint/bus","kind":"import-statement","external":true},{"path":"@accelint/core","kind":"import-statement","external":true},{"path":"./events","kind":"import-statement","external":true}],"exports":["MapModeStore","destroyStore","getOrCreateStore","getStore"],"entryPoint":"src/map-mode/store.ts","inputs":{"src/map-mode/store.ts":{"bytesInOutput":10062}},"bytes":10137},"dist/map-mode/types.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/map-mode/types.js":{"imports":[],"exports":[],"entryPoint":"src/map-mode/types.ts","inputs":{"src/map-mode/types.ts":{"bytesInOutput":0}},"bytes":0},"dist/map-mode/use-map-mode.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":4133},"dist/map-mode/use-map-mode.js":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"../deckgl/base-map/provider","kind":"import-statement","external":true},{"path":"./store","kind":"import-statement","external":true}],"exports":["useMapMode"],"entryPoint":"src/map-mode/use-map-mode.ts","inputs":{"src/map-mode/use-map-mode.ts":{"bytesInOutput":847}},"bytes":872},"dist/deckgl/base-map/constants.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1523},"dist/deckgl/base-map/constants.js":{"imports":[],"exports":["BASE_MAP_STYLE","PARAMETERS"],"entryPoint":"src/deckgl/base-map/constants.ts","inputs":{"src/deckgl/base-map/constants.ts":{"bytesInOutput":442}},"bytes":485}}}
package/package.json CHANGED
@@ -1,6 +1,18 @@
1
1
  {
2
+ "$schema": "https://json.schemastore.org/package",
2
3
  "name": "@accelint/map-toolkit",
3
- "version": "0.0.2",
4
+ "title": "Accelint Map Toolkit",
5
+ "description": "A collection of components and utilities to simplify visualizing and working with geospatial data.",
6
+ "author": "https://hypergiant.com",
7
+ "owner": "default/pathfinder",
8
+ "keywords": [
9
+ "deckgl",
10
+ "geospatial",
11
+ "map-tk",
12
+ "maplibre"
13
+ ],
14
+ "subPath": "packages/map-toolkit",
15
+ "version": "0.2.0",
4
16
  "private": false,
5
17
  "license": "Apache-2.0",
6
18
  "repository": {
@@ -9,7 +21,11 @@
9
21
  },
10
22
  "type": "module",
11
23
  "files": [
12
- "dist/**"
24
+ "./dist/**",
25
+ "./catalog-info.yaml",
26
+ "./CHANGELOG.md",
27
+ "./package.json",
28
+ "./README.md"
13
29
  ],
14
30
  "types": "./dist/index.d.ts",
15
31
  "exports": {
@@ -20,29 +36,85 @@
20
36
  },
21
37
  "default": "./dist/*/index.js"
22
38
  },
23
- "./package.json": "./package.json"
39
+ "./*/fiber": {
40
+ "import": {
41
+ "types": "./dist/*/fiber.d.ts",
42
+ "default": "./dist/*/fiber.js"
43
+ },
44
+ "default": "./dist/*/fiber.js"
45
+ }
24
46
  },
25
47
  "devDependencies": {
48
+ "@deck.gl/core": "^9.1.14",
49
+ "@deck.gl/extensions": "^9.1.14",
50
+ "@deck.gl/geo-layers": "^9.1.14",
51
+ "@deck.gl/layers": "^9.1.14",
52
+ "@deck.gl/mapbox": "^9.1.14",
53
+ "@deck.gl/mesh-layers": "^9.1.14",
54
+ "@deck.gl/widgets": "^9.1.14",
55
+ "@deckgl-fiber-renderer/dom": "^1.4.0",
56
+ "@deckgl-fiber-renderer/shared": "^1.4.0",
57
+ "@deckgl-fiber-renderer/types": "^1.4.0",
58
+ "@storybook/addon-actions": "^8.6.14",
59
+ "@storybook/addon-essentials": "^8.6.14",
60
+ "@storybook/addon-storysource": "^8.6.14",
61
+ "@storybook/addon-themes": "^8.6.14",
62
+ "@storybook/blocks": "^8.6.14",
63
+ "@storybook/builder-vite": "^8.6.14",
64
+ "@storybook/manager-api": "^8.6.14",
65
+ "@storybook/react": "^8.6.14",
66
+ "@storybook/react-vite": "^8.6.14",
67
+ "@storybook/theming": "^8.6.14",
68
+ "@tailwindcss/vite": "^4.1.11",
26
69
  "@testing-library/dom": "^10.4.1",
27
70
  "@testing-library/jest-dom": "^6.6.4",
28
71
  "@testing-library/react": "^16.3.0",
29
- "@types/react": "^19.1.9",
30
- "esbuild-fix-imports-plugin": "1.0.21",
31
- "react": "^19.0.0",
72
+ "@testing-library/user-event": "^14.6.1",
73
+ "@types/node": "^24.9.0",
74
+ "@types/react": "19.1.13",
75
+ "@types/react-dom": "19.1.11",
76
+ "client-only": "^0.0.1",
77
+ "esbuild-fix-imports-plugin": "^1.0.23",
78
+ "maplibre-gl": "^5.7.1",
79
+ "milsymbol": "^3.0.2",
80
+ "mjolnir.js": "^3.0.0",
81
+ "node-fetch": "^2.6.7",
82
+ "react": "19.0.0",
83
+ "react-dom": "19.0.0",
84
+ "storybook": "^8.6.14",
85
+ "tailwindcss": "^4.1.11",
32
86
  "tsup": "8.5.0",
33
- "vitest": "2.1.3",
34
- "vitest-broadcast-channel-mock": "0.1.0",
35
- "@accelint/typescript-config": "0.1.2",
36
- "@accelint/vitest-config": "0.1.3"
37
- },
38
- "dependencies": {
39
- "typescript": "^5.8.3"
87
+ "type-fest": "^4.41.0",
88
+ "typescript": "5.8.3",
89
+ "vite": "^5.4.9",
90
+ "vitest": "^2.1.9",
91
+ "vitest-broadcast-channel-mock": "^0.1.0",
92
+ "@accelint/biome-config": "1.0.2",
93
+ "@accelint/bus": "2.0.0",
94
+ "@accelint/constellation-tracker": "1.0.1",
95
+ "@accelint/core": "0.5.0",
96
+ "@accelint/design-toolkit": "7.0.0",
97
+ "@accelint/typescript-config": "0.1.4",
98
+ "@accelint/vitest-config": "0.1.5"
40
99
  },
41
100
  "optionalDependencies": {
42
- "react": "^19.0.0"
101
+ "@deck.gl/core": "9.1.14",
102
+ "@deck.gl/extensions": "9.1.14",
103
+ "@deck.gl/geo-layers": "9.1.14",
104
+ "@deck.gl/layers": "9.1.14",
105
+ "@deck.gl/mapbox": "9.1.14",
106
+ "@deck.gl/mesh-layers": "9.1.14",
107
+ "@deck.gl/widgets": "9.1.14",
108
+ "@deckgl-fiber-renderer/dom": "1.4.0",
109
+ "@deckgl-fiber-renderer/shared": "^1.4.0",
110
+ "@deckgl-fiber-renderer/types": "^1.4.0",
111
+ "maplibre-gl": "^5.7.1",
112
+ "milsymbol": "3.0.2",
113
+ "mjolnir.js": "^3.0.0",
114
+ "react": "19.0.0",
115
+ "@accelint/bus": "2.0.0",
116
+ "@accelint/core": "0.5.0"
43
117
  },
44
- "$schema": "https://json.schemastore.org/package",
45
- "author": "https://hypergiant.com",
46
118
  "publishConfig": {
47
119
  "access": "public"
48
120
  },
@@ -50,9 +122,11 @@
50
122
  "scripts": {
51
123
  "bench": "pnpm vitest bench --run --dir src",
52
124
  "build": "pnpm tsup",
125
+ "build-storybook": "pnpm storybook build",
126
+ "constellation-tracker": "constellation-tracker",
53
127
  "dev": "pnpm tsc --watch",
54
- "index": "pnpm zx ../../scripts/indexer.mjs packages/map-toolkit",
55
128
  "lint": "pnpm biome lint",
129
+ "preview": "pnpm storybook dev -p 6006",
56
130
  "test": "pnpm vitest --dir=src",
57
131
  "test:watch": "pnpm vitest --dir=src --watch"
58
132
  }
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
-
2
- export { }
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
-
2
- //# sourceMappingURL=index.js.map
3
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
-
2
- export { }
@@ -1,10 +0,0 @@
1
- import * as matchers from '@testing-library/jest-dom/matchers';
2
- import { cleanup } from '@testing-library/react';
3
- import { expect, afterEach } from 'vitest';
4
-
5
- expect.extend(matchers);
6
- afterEach(() => {
7
- cleanup();
8
- });
9
- //# sourceMappingURL=setup.js.map
10
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/test/setup.ts"],"names":[],"mappings":";;;;AAgBA,MAAA,CAAO,OAAO,QAAQ,CAAA;AAEtB,SAAA,CAAU,MAAM;AACd,EAAA,OAAA,EAAQ;AACV,CAAC,CAAA","file":"setup.js","sourcesContent":["/*\n * Copyright 2025 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 * as matchers from '@testing-library/jest-dom/matchers';\nimport { cleanup } from '@testing-library/react';\nimport { afterEach, expect } from 'vitest';\n\nexpect.extend(matchers);\n\nafterEach(() => {\n cleanup();\n});\n"]}