diff --git a/apps/web/src/features/trackReplay/layers/replayLayers.ts b/apps/web/src/features/trackReplay/layers/replayLayers.ts index 013c4ba..c297e3e 100644 --- a/apps/web/src/features/trackReplay/layers/replayLayers.ts +++ b/apps/web/src/features/trackReplay/layers/replayLayers.ts @@ -3,7 +3,7 @@ import type { Layer } from '@deck.gl/core'; import type { ProcessedTrack } from '../model/track.types'; import { getShipKindColor } from '../lib/adapters'; import { TRACK_REPLAY_LAYER_IDS } from './trackLayers'; -import { DEPTH_DISABLED_PARAMS } from '../../../widgets/map3d/constants'; +import { DEPTH_DISABLED_PARAMS } from '../../../shared/lib/map/mapConstants'; interface ReplayTrip { vesselId: string; diff --git a/apps/web/src/features/trackReplay/layers/trackLayers.ts b/apps/web/src/features/trackReplay/layers/trackLayers.ts index 206e3d0..640d4ea 100644 --- a/apps/web/src/features/trackReplay/layers/trackLayers.ts +++ b/apps/web/src/features/trackReplay/layers/trackLayers.ts @@ -1,6 +1,6 @@ import { IconLayer, PathLayer, ScatterplotLayer, TextLayer } from '@deck.gl/layers'; import type { Layer, PickingInfo } from '@deck.gl/core'; -import { DEPTH_DISABLED_PARAMS, SHIP_ICON_MAPPING } from '../../../widgets/map3d/constants'; +import { DEPTH_DISABLED_PARAMS, SHIP_ICON_MAPPING } from '../../../shared/lib/map/mapConstants'; import { getCachedShipIcon } from '../../../widgets/map3d/lib/shipIconCache'; import { getShipKindColor } from '../lib/adapters'; import type { CurrentVesselPosition, ProcessedTrack } from '../model/track.types'; diff --git a/apps/web/src/features/weatherOverlay/useWeatherOverlay.ts b/apps/web/src/features/weatherOverlay/useWeatherOverlay.ts index 2262708..ea95aea 100644 --- a/apps/web/src/features/weatherOverlay/useWeatherOverlay.ts +++ b/apps/web/src/features/weatherOverlay/useWeatherOverlay.ts @@ -9,7 +9,7 @@ import { RadarLayer, ColorRamp, } from '@maptiler/weather'; -import { getMapTilerKey } from '../../widgets/map3d/lib/mapCore'; +import { getMapTilerKey } from '../../shared/lib/map/mapTilerKey'; /** 6종 기상 레이어 ID */ export type WeatherLayerId = diff --git a/apps/web/src/shared/lib/map/mapConstants.ts b/apps/web/src/shared/lib/map/mapConstants.ts new file mode 100644 index 0000000..f17991a --- /dev/null +++ b/apps/web/src/shared/lib/map/mapConstants.ts @@ -0,0 +1,20 @@ +// ── Shared map constants ── +// Moved from widgets/map3d/constants.ts to resolve FSD layer violation +// (features/ must not import from widgets/). + +export const SHIP_ICON_MAPPING = { + ship: { + x: 0, + y: 0, + width: 128, + height: 128, + anchorX: 64, + anchorY: 64, + mask: true, + }, +} as const; + +export const DEPTH_DISABLED_PARAMS = { + depthCompare: 'always', + depthWriteEnabled: false, +} as const; diff --git a/apps/web/src/shared/lib/map/mapTilerKey.ts b/apps/web/src/shared/lib/map/mapTilerKey.ts new file mode 100644 index 0000000..16e6af9 --- /dev/null +++ b/apps/web/src/shared/lib/map/mapTilerKey.ts @@ -0,0 +1,9 @@ +// Moved from widgets/map3d/lib/mapCore.ts to resolve FSD layer violation +// (features/ must not import from widgets/). + +export function getMapTilerKey(): string | null { + const k = import.meta.env.VITE_MAPTILER_KEY; + if (typeof k !== 'string') return null; + const v = k.trim(); + return v ? v : null; +} diff --git a/apps/web/src/widgets/map3d/constants.ts b/apps/web/src/widgets/map3d/constants.ts index 3da1d96..c29a7bc 100644 --- a/apps/web/src/widgets/map3d/constants.ts +++ b/apps/web/src/widgets/map3d/constants.ts @@ -15,18 +15,9 @@ const OVERLAY_FLEET_RANGE_RGB = OVERLAY_RGB.fleetRange; const OVERLAY_SUSPICIOUS_RGB = OVERLAY_RGB.suspicious; // ── Ship icon mapping (Deck.gl IconLayer) ── +// Canonical source: shared/lib/map/mapConstants.ts (re-exported for local usage) -export const SHIP_ICON_MAPPING = { - ship: { - x: 0, - y: 0, - width: 128, - height: 128, - anchorX: 64, - anchorY: 64, - mask: true, - }, -} as const; +export { SHIP_ICON_MAPPING } from '../../shared/lib/map/mapConstants'; // ── Ship constants ── @@ -70,10 +61,8 @@ export const DECK_VIEW_ID = 'mapbox'; // ── Depth params ── -export const DEPTH_DISABLED_PARAMS = { - depthCompare: 'always', - depthWriteEnabled: false, -} as const; +// Canonical source: shared/lib/map/mapConstants.ts (re-exported for local usage) +export { DEPTH_DISABLED_PARAMS } from '../../shared/lib/map/mapConstants'; export const GLOBE_OVERLAY_PARAMS = { depthCompare: 'less-equal', diff --git a/apps/web/src/widgets/map3d/lib/mapCore.ts b/apps/web/src/widgets/map3d/lib/mapCore.ts index 1a35be3..e95616e 100644 --- a/apps/web/src/widgets/map3d/lib/mapCore.ts +++ b/apps/web/src/widgets/map3d/lib/mapCore.ts @@ -83,12 +83,8 @@ export function extractProjectionType(map: maplibregl.Map): MapProjectionId | un return undefined; } -export function getMapTilerKey(): string | null { - const k = import.meta.env.VITE_MAPTILER_KEY; - if (typeof k !== 'string') return null; - const v = k.trim(); - return v ? v : null; -} +// Canonical source: shared/lib/map/mapTilerKey.ts (re-exported for local usage) +export { getMapTilerKey } from '../../../shared/lib/map/mapTilerKey'; export function getLayerId(value: unknown): string | null { if (!value || typeof value !== 'object') return null;