@konce-pt/angular 0.7.12 → 0.8.1
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 +79 -0
- package/README.md +4 -4
- package/charts/src/lib/llms.txt +2 -1
- package/fesm2022/konce-pt-angular-charts.mjs +7 -498
- package/fesm2022/konce-pt-angular-charts.mjs.map +1 -1
- package/fesm2022/konce-pt-angular-icons.mjs +7 -5136
- package/fesm2022/konce-pt-angular-icons.mjs.map +1 -1
- package/fesm2022/konce-pt-angular-map.mjs +14 -1298
- package/fesm2022/konce-pt-angular-map.mjs.map +1 -1
- package/fesm2022/konce-pt-angular-roadmap.mjs +8 -1269
- package/fesm2022/konce-pt-angular-roadmap.mjs.map +1 -1
- package/fesm2022/konce-pt-angular.mjs +179 -1455
- package/fesm2022/konce-pt-angular.mjs.map +1 -1
- package/map/src/lib/llms.txt +2 -1
- package/package.json +9 -2
- package/roadmap/src/lib/llms.txt +1 -0
- package/src/lib/datepicker/llms.txt +4 -0
- package/src/lib/i18n/llms.txt +8 -2
- package/src/lib/icon-button/llms.txt +1 -0
- package/src/lib/rating/llms.txt +4 -0
- package/types/konce-pt-angular-charts.d.ts +10 -199
- package/types/konce-pt-angular-charts.d.ts.map +1 -1
- package/types/konce-pt-angular-icons.d.ts +2 -4
- package/types/konce-pt-angular-icons.d.ts.map +1 -1
- package/types/konce-pt-angular-map.d.ts +4 -609
- package/types/konce-pt-angular-map.d.ts.map +1 -1
- package/types/konce-pt-angular-roadmap.d.ts +6 -541
- package/types/konce-pt-angular-roadmap.d.ts.map +1 -1
- package/types/konce-pt-angular.d.ts +57 -529
- package/types/konce-pt-angular.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"konce-pt-angular-map.mjs","sources":["../../map/src/core/geo.ts","../../map/src/core/cluster.ts","../../map/src/core/countries.ts","../../map/src/core/engine.ts","../../map/src/core/marker-html.ts","../../map/src/core/types.ts","../../map/src/core/hours.ts","../../map/src/lib/geocoder.port.ts","../../map/src/lib/map-hours-field.component.html","../../map/src/lib/map-hours-field.component.ts","../../map/src/lib/map-image-field.component.html","../../map/src/lib/map-image-field.component.ts","../../map/src/lib/map-create-dialog.component.html","../../map/src/lib/map-create-dialog.component.ts","../../map/src/lib/map-legend.component.html","../../map/src/lib/map-legend.component.ts","../../map/src/lib/map-search.component.html","../../map/src/lib/map-search.component.ts","../../map/src/lib/map-templates.directive.ts","../../map/src/lib/geolocation.port.ts","../../map/src/engines/google.engine.ts","../../map/src/engines/leaflet.engine.ts","../../map/src/lib/map.providers.ts","../../map/src/lib/map.component.html","../../map/src/lib/map.component.ts","../../map/src/core/format.ts","../../map/src/core/url.ts","../../map/src/lib/map-poi-card.component.html","../../map/src/lib/map-poi-card.component.ts","../../map/src/public-api.ts","../../map/src/konce-pt-angular-map.ts"],"sourcesContent":["/*\r\n * Projekcja Web Mercator i geometria — pure TS, bez zależności.\r\n * Ta sama matematyka, której używa Leaflet i Google Maps: dzięki temu grupy policzone\r\n * w rdzeniu trafiają dokładnie tam, gdzie silnik je narysuje.\r\n */\r\nimport type { KptLatLng, KptMapBounds, KptMapPoint } from './types';\r\n\r\n/** Bok kafla w pikselach — stała obu silników. */\r\nexport const KPT_TILE_SIZE = 256;\r\n\r\n/**\r\n * Granica szerokości w Mercatorze. Powyżej niej projekcja ucieka do nieskończoności,\r\n * więc obie biblioteki przycinają świat dokładnie w tym miejscu.\r\n */\r\nexport const KPT_MAX_LATITUDE = 85.051_128_779_806_59;\r\n\r\n/** Promień Ziemi w metrach (sfera, jak w Leaflet `L.CRS.Earth`). */\r\nexport const KPT_EARTH_RADIUS = 6_378_137;\r\n\r\n/** Przycina szerokość do zakresu obsługiwanego przez Mercator. */\r\nexport function clampLat(lat: number): number {\r\n return Math.max(-KPT_MAX_LATITUDE, Math.min(KPT_MAX_LATITUDE, lat));\r\n}\r\n\r\n/**\r\n * Zawija długość geograficzną do zakresu [-180, 180].\r\n *\r\n * Wartości już w zakresie wracają nietknięte — także -180, bo w projekcji jest to\r\n * lewa krawędź świata (x = 0), a nie ta sama kolumna pikseli co +180. Zawijanie\r\n * dotyczy wyłącznie tego, co wychodzi poza zakres: 540° to ten sam południk co 180°.\r\n */\r\nexport function normalizeLng(lng: number): number {\r\n if (lng >= -180 && lng <= 180) return lng;\r\n const wrapped = ((lng + 180) % 360 + 360) % 360 - 180;\r\n return wrapped === -180 ? 180 : wrapped;\r\n}\r\n\r\n/** Liczba pikseli świata na danym zoomie. */\r\nexport function worldSize(zoom: number): number {\r\n return KPT_TILE_SIZE * Math.pow(2, zoom);\r\n}\r\n\r\n/** Współrzędne → piksele świata na danym zoomie (origin w lewym górnym rogu). */\r\nexport function project(at: KptLatLng, zoom: number): KptMapPoint {\r\n const size = worldSize(zoom);\r\n const lat = clampLat(at.lat);\r\n const sin = Math.sin((lat * Math.PI) / 180);\r\n return {\r\n x: size * (normalizeLng(at.lng) / 360 + 0.5),\r\n y: size * (0.5 - Math.log((1 + sin) / (1 - sin)) / (4 * Math.PI)),\r\n };\r\n}\r\n\r\n/** Piksele świata → współrzędne. Odwrotność `project`. */\r\nexport function unproject(point: KptMapPoint, zoom: number): KptLatLng {\r\n const size = worldSize(zoom);\r\n const lng = (point.x / size - 0.5) * 360;\r\n const n = Math.PI * (1 - 2 * (point.y / size));\r\n const lat = (180 / Math.PI) * Math.atan(Math.sinh(n));\r\n return { lat, lng };\r\n}\r\n\r\n/** Najmniejszy prostokąt obejmujący wszystkie punkty. Pusta lista → `null`. */\r\nexport function boundsOf(points: readonly KptLatLng[]): KptMapBounds | null {\r\n if (points.length === 0) return null;\r\n let south = Infinity;\r\n let north = -Infinity;\r\n let west = Infinity;\r\n let east = -Infinity;\r\n for (const p of points) {\r\n if (p.lat < south) south = p.lat;\r\n if (p.lat > north) north = p.lat;\r\n if (p.lng < west) west = p.lng;\r\n if (p.lng > east) east = p.lng;\r\n }\r\n return { south, west, north, east };\r\n}\r\n\r\n/**\r\n * Najmniejszy zasięg w stopniach, przy którym `fitBounds` ma jeszcze sens (~100 m).\r\n *\r\n * Geokodery obrysowują pojedynczy adres prostokątem rzędu 0,0001°. Wpasowanie takiego\r\n * w kadr wjeżdża na górny limit zoomu, a wynik zależy od tego, jak dostawca obrysował\r\n * budynek — dwa sąsiednie adresy lądują w różnych przybliżeniach.\r\n */\r\nexport const KPT_MIN_FIT_SPAN = 0.001;\r\n\r\n/**\r\n * Czy prostokąt warto wpasowywać w kadr, zamiast potraktować go jak punkt.\r\n *\r\n * `false` dla zasięgu zdegenerowanego albo ciaśniejszego niż `minSpan` w OBU osiach —\r\n * długa, wąska ulica ma jeden wymiar mikroskopijny i dalej zasługuje na `fitBounds`.\r\n */\r\nexport function isFittableBounds(bounds: KptMapBounds, minSpan = KPT_MIN_FIT_SPAN): boolean {\r\n const lat = bounds.north - bounds.south;\r\n const lng = bounds.east - bounds.west;\r\n if (!Number.isFinite(lat) || !Number.isFinite(lng) || lat < 0 || lng < 0) return false;\r\n return lat >= minSpan || lng >= minSpan;\r\n}\r\n\r\n/** Środek prostokąta. */\r\nexport function boundsCenter(bounds: KptMapBounds): KptLatLng {\r\n return { lat: (bounds.south + bounds.north) / 2, lng: (bounds.west + bounds.east) / 2 };\r\n}\r\n\r\n/** Czy punkt leży w prostokącie (granice włącznie). */\r\nexport function boundsContain(bounds: KptMapBounds, at: KptLatLng): boolean {\r\n return at.lat >= bounds.south && at.lat <= bounds.north && at.lng >= bounds.west && at.lng <= bounds.east;\r\n}\r\n\r\n/** Rozszerza prostokąt o zadaną liczbę stopni w każdą stronę. */\r\nexport function padBounds(bounds: KptMapBounds, degrees: number): KptMapBounds {\r\n return {\r\n south: clampLat(bounds.south - degrees),\r\n north: clampLat(bounds.north + degrees),\r\n west: bounds.west - degrees,\r\n east: bounds.east + degrees,\r\n };\r\n}\r\n\r\n/** Odległość po wielkim kole w metrach. */\r\nexport function haversine(a: KptLatLng, b: KptLatLng): number {\r\n const toRad = Math.PI / 180;\r\n const dLat = (b.lat - a.lat) * toRad;\r\n const dLng = (b.lng - a.lng) * toRad;\r\n const s =\r\n Math.sin(dLat / 2) ** 2 +\r\n Math.cos(a.lat * toRad) * Math.cos(b.lat * toRad) * Math.sin(dLng / 2) ** 2;\r\n return 2 * KPT_EARTH_RADIUS * Math.asin(Math.min(1, Math.sqrt(s)));\r\n}\r\n\r\n/**\r\n * Ile metrów przypada na piksel na danej szerokości i zoomie.\r\n * Potrzebne, żeby krąg dokładności geolokalizacji miał realny promień.\r\n */\r\nexport function metersPerPixel(lat: number, zoom: number): number {\r\n return (Math.cos((clampLat(lat) * Math.PI) / 180) * 2 * Math.PI * KPT_EARTH_RADIUS) / worldSize(zoom);\r\n}\r\n\r\n/**\r\n * Największy zoom, przy którym `bounds` mieści się w kontenerze o zadanym rozmiarze.\r\n * Zwraca liczbę zmiennoprzecinkową — zaokrąglenie w dół zostawiamy wołającemu.\r\n */\r\nexport function zoomForBounds(\r\n bounds: KptMapBounds,\r\n size: { width: number; height: number },\r\n paddingPx = 0,\r\n): number {\r\n const w = Math.max(1, size.width - paddingPx * 2);\r\n const h = Math.max(1, size.height - paddingPx * 2);\r\n // Rozpiętość liczona na zoomie 0, potem skalowana logarytmicznie.\r\n const sw = project({ lat: bounds.south, lng: bounds.west }, 0);\r\n const ne = project({ lat: bounds.north, lng: bounds.east }, 0);\r\n const dx = Math.max(1e-9, Math.abs(ne.x - sw.x));\r\n const dy = Math.max(1e-9, Math.abs(sw.y - ne.y));\r\n return Math.min(Math.log2(w / dx), Math.log2(h / dy));\r\n}\r\n","/*\r\n * Grupowanie znaczników — siatka w przestrzeni pikseli, O(n), deterministyczna.\r\n * Pure TS: ten sam kod obsługuje silnik Leaflet i Google Maps, i przenosi się do Reacta.\r\n */\r\nimport { boundsOf, project, unproject } from './geo';\r\nimport type { KptMapCluster, KptMapClusterEntry, KptMapLocation } from './types';\r\n\r\nexport interface KptClusterOptions {\r\n /** Aktualny zoom mapy — decyduje o gęstości siatki. */\r\n zoom: number;\r\n /** Bok komórki siatki w pikselach ekranu. Domyślnie 60. */\r\n gridSize?: number;\r\n /** Powyżej tego zoomu grupowanie jest wyłączone. Domyślnie 16. */\r\n maxZoom?: number;\r\n /** Ile punktów musi trafić do komórki, żeby powstała grupa. Domyślnie 2. */\r\n minPoints?: number;\r\n /**\r\n * Kolejność kategorii — rozstrzyga remis przy wyborze kategorii dominującej.\r\n * Bez niej remis rozstrzyga kolejność wystąpienia w danych.\r\n */\r\n categoryOrder?: readonly string[];\r\n}\r\n\r\nexport const KPT_CLUSTER_DEFAULTS = {\r\n gridSize: 60,\r\n maxZoom: 16,\r\n minPoints: 2,\r\n} as const;\r\n\r\ninterface Cell<T> {\r\n cellX: number;\r\n cellY: number;\r\n items: KptMapLocation<T>[];\r\n /** Suma pozycji w pikselach — środek liczymy w pikselach, nie w stopniach. */\r\n sumX: number;\r\n sumY: number;\r\n}\r\n\r\n/**\r\n * Zwija bliskie sobie lokalizacje w grupy. Zwraca listę mieszaną: grupy i pojedyncze punkty.\r\n *\r\n * Środek grupy uśredniamy w przestrzeni pikseli, nie w stopniach. Mercator rozciąga\r\n * stopnie tym mocniej, im dalej od równika, więc średnia w stopniach wypada obok\r\n * wizualnego środka kropek na ekranie — a to jego ma pilnować znacznik grupy.\r\n */\r\nexport function clusterLocations<T>(\r\n locations: readonly KptMapLocation<T>[],\r\n options: KptClusterOptions,\r\n): KptMapClusterEntry<T>[] {\r\n const gridSize = options.gridSize ?? KPT_CLUSTER_DEFAULTS.gridSize;\r\n const maxZoom = options.maxZoom ?? KPT_CLUSTER_DEFAULTS.maxZoom;\r\n const minPoints = Math.max(2, options.minPoints ?? KPT_CLUSTER_DEFAULTS.minPoints);\r\n const zoom = options.zoom;\r\n\r\n if (locations.length === 0) return [];\r\n // Powyżej progu pokazujemy wszystko osobno — użytkownik przybliżył się celowo.\r\n if (zoom > maxZoom || gridSize <= 0) return [...locations];\r\n\r\n const cells = new Map<string, Cell<T>>();\r\n for (const loc of locations) {\r\n const p = project(loc.at, zoom);\r\n const cellX = Math.floor(p.x / gridSize);\r\n const cellY = Math.floor(p.y / gridSize);\r\n const key = `${cellX}:${cellY}`;\r\n const cell = cells.get(key);\r\n if (cell) {\r\n cell.items.push(loc);\r\n cell.sumX += p.x;\r\n cell.sumY += p.y;\r\n } else {\r\n cells.set(key, { cellX, cellY, items: [loc], sumX: p.x, sumY: p.y });\r\n }\r\n }\r\n\r\n const out: KptMapClusterEntry<T>[] = [];\r\n for (const cell of cells.values()) {\r\n if (cell.items.length < minPoints) {\r\n out.push(...cell.items);\r\n continue;\r\n }\r\n const center = unproject({ x: cell.sumX / cell.items.length, y: cell.sumY / cell.items.length }, zoom);\r\n out.push({\r\n id: `c:${zoom}:${cell.cellX}:${cell.cellY}`,\r\n at: center,\r\n count: cell.items.length,\r\n dominantCategoryId: dominantCategory(cell.items, options.categoryOrder),\r\n items: cell.items,\r\n // Punkty w komórce zawsze istnieją, więc `boundsOf` nie zwróci tu null.\r\n bounds: boundsOf(cell.items.map((i) => i.at))!,\r\n });\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * Najliczniejsza kategoria w grupie. Remis rozstrzyga `categoryOrder`, a bez niej\r\n * kolejność pierwszego wystąpienia — w obu wypadkach wynik jest deterministyczny.\r\n */\r\nexport function dominantCategory<T>(\r\n items: readonly KptMapLocation<T>[],\r\n categoryOrder?: readonly string[],\r\n): string {\r\n const counts = new Map<string, number>();\r\n const firstSeen = new Map<string, number>();\r\n items.forEach((item, index) => {\r\n counts.set(item.categoryId, (counts.get(item.categoryId) ?? 0) + 1);\r\n if (!firstSeen.has(item.categoryId)) firstSeen.set(item.categoryId, index);\r\n });\r\n\r\n let best = items[0].categoryId;\r\n let bestCount = -1;\r\n for (const [id, count] of counts) {\r\n if (count > bestCount) {\r\n best = id;\r\n bestCount = count;\r\n continue;\r\n }\r\n if (count < bestCount) continue;\r\n // Remis — niższy indeks w `categoryOrder` wygrywa, a poza nią wcześniejsze wystąpienie.\r\n const rank = (c: string) => {\r\n const i = categoryOrder?.indexOf(c) ?? -1;\r\n return i >= 0 ? i : Number.MAX_SAFE_INTEGER;\r\n };\r\n const byOrder = rank(id) - rank(best);\r\n if (byOrder < 0 || (byOrder === 0 && firstSeen.get(id)! < firstSeen.get(best)!)) best = id;\r\n }\r\n return best;\r\n}\r\n\r\n/** Zlicza lokalizacje w rozbiciu na kategorie — licznik obok pozycji legendy. */\r\nexport function countByCategory<T>(locations: readonly KptMapLocation<T>[]): Record<string, number> {\r\n const out: Record<string, number> = {};\r\n for (const loc of locations) out[loc.categoryId] = (out[loc.categoryId] ?? 0) + 1;\r\n return out;\r\n}\r\n\r\n/**\r\n * Czy grupa da się rozbić przybliżeniem. Punkty o tej samej współrzędnej zostaną razem\r\n * na każdym zoomie — wtedy kliknięcie ma otworzyć listę zamiast zoomować w nieskończoność.\r\n */\r\nexport function isSplittable<T>(cluster: KptMapCluster<T>): boolean {\r\n const { south, west, north, east } = cluster.bounds;\r\n return north - south > 1e-7 || east - west > 1e-7;\r\n}\r\n","/*\n * Presety widoku bazowego — pure TS. Domyślny kraj to Polska.\n * Kto potrzebuje kraju spoza listy, podaje `[view]` albo `[bounds]` wprost.\n */\nimport { boundsCenter } from './geo';\nimport type { KptLatLng, KptMapBounds } from './types';\n\nexport interface KptMapCountryPreset {\n /** Kod ISO 3166-1 alpha-2 (albo `EU` dla całego kontynentu). */\n code: string;\n center: KptLatLng;\n /** Zoom, przy którym kraj mieści się na typowym kontenerze (~1000×600 px). */\n zoom: number;\n bounds: KptMapBounds;\n}\n\n/** Kod kraju użyty, gdy aplikacja nie poda żadnego. */\nexport const KPT_MAP_DEFAULT_COUNTRY = 'PL';\n\n/**\n * Zasięgi lądowe (bez terytoriów zamorskich) zaokrąglone do dwóch miejsc —\n * to widok startowy, nie granica administracyjna.\n */\nexport const KPT_MAP_COUNTRIES: Record<string, KptMapCountryPreset> = {\n PL: { code: 'PL', center: { lat: 52.07, lng: 19.48 }, zoom: 6, bounds: { south: 49.0, west: 14.07, north: 54.84, east: 24.15 } },\n DE: { code: 'DE', center: { lat: 51.17, lng: 10.45 }, zoom: 6, bounds: { south: 47.27, west: 5.87, north: 55.06, east: 15.04 } },\n CZ: { code: 'CZ', center: { lat: 49.82, lng: 15.47 }, zoom: 7, bounds: { south: 48.55, west: 12.09, north: 51.06, east: 18.86 } },\n SK: { code: 'SK', center: { lat: 48.67, lng: 19.7 }, zoom: 7, bounds: { south: 47.73, west: 16.83, north: 49.61, east: 22.57 } },\n UA: { code: 'UA', center: { lat: 48.38, lng: 31.17 }, zoom: 6, bounds: { south: 44.39, west: 22.14, north: 52.38, east: 40.23 } },\n LT: { code: 'LT', center: { lat: 55.17, lng: 23.88 }, zoom: 7, bounds: { south: 53.9, west: 20.94, north: 56.45, east: 26.84 } },\n LV: { code: 'LV', center: { lat: 56.88, lng: 24.6 }, zoom: 7, bounds: { south: 55.67, west: 20.97, north: 58.09, east: 28.24 } },\n GB: { code: 'GB', center: { lat: 54.0, lng: -2.9 }, zoom: 5, bounds: { south: 49.9, west: -8.65, north: 60.86, east: 1.77 } },\n FR: { code: 'FR', center: { lat: 46.6, lng: 2.45 }, zoom: 6, bounds: { south: 41.33, west: -5.14, north: 51.09, east: 9.56 } },\n ES: { code: 'ES', center: { lat: 40.2, lng: -3.3 }, zoom: 6, bounds: { south: 35.95, west: -9.3, north: 43.79, east: 3.32 } },\n IT: { code: 'IT', center: { lat: 42.5, lng: 12.5 }, zoom: 6, bounds: { south: 36.65, west: 6.63, north: 47.09, east: 18.52 } },\n NL: { code: 'NL', center: { lat: 52.2, lng: 5.5 }, zoom: 7, bounds: { south: 50.75, west: 3.36, north: 53.56, east: 7.23 } },\n BE: { code: 'BE', center: { lat: 50.64, lng: 4.66 }, zoom: 8, bounds: { south: 49.5, west: 2.54, north: 51.5, east: 6.41 } },\n AT: { code: 'AT', center: { lat: 47.7, lng: 13.35 }, zoom: 7, bounds: { south: 46.37, west: 9.53, north: 49.02, east: 17.16 } },\n SE: { code: 'SE', center: { lat: 62.2, lng: 16.3 }, zoom: 4, bounds: { south: 55.34, west: 11.11, north: 69.06, east: 24.16 } },\n NO: { code: 'NO', center: { lat: 64.5, lng: 12.0 }, zoom: 4, bounds: { south: 57.98, west: 4.65, north: 71.19, east: 31.08 } },\n US: { code: 'US', center: { lat: 39.5, lng: -98.35 }, zoom: 4, bounds: { south: 24.4, west: -125.0, north: 49.38, east: -66.93 } },\n EU: { code: 'EU', center: { lat: 54.0, lng: 15.0 }, zoom: 4, bounds: { south: 34.8, west: -11.0, north: 71.2, east: 40.2 } },\n};\n\n/** Preset kraju po kodzie (wielkość liter bez znaczenia); `undefined`, gdy nieznany. */\nexport function countryPreset(code: string): KptMapCountryPreset | undefined {\n return KPT_MAP_COUNTRIES[code?.toUpperCase()];\n}\n\n/** Kody wszystkich presetów — do listy wyboru w aplikacji. */\nexport function countryCodes(): string[] {\n return Object.keys(KPT_MAP_COUNTRIES);\n}\n\n/**\n * Widok startowy: preset kraju, a przy nieznanym kodzie preset domyślny.\n * Zawsze zwraca coś sensownego — mapa nigdy nie startuje na `[0, 0]`.\n */\nexport function resolveCountryView(code: string | null | undefined): KptMapCountryPreset {\n return (code ? countryPreset(code) : undefined) ?? KPT_MAP_COUNTRIES[KPT_MAP_DEFAULT_COUNTRY];\n}\n\n/** Środek prostokąta kraju — pomocnicze przy własnych `bounds`. */\nexport function centerOfBounds(bounds: KptMapBounds): KptLatLng {\n return boundsCenter(bounds);\n}\n","/*\n * Kontrakt silnika mapy. Spełnia go Leaflet dziś i Google Maps w Fazie 2 —\n * w sygnaturach nie ma ani jednego typu z biblioteki zewnętrznej, więc komponent\n * nie wie, co go renderuje.\n */\nimport type {\n KptLatLng,\n KptMapBounds,\n KptMapPoint,\n KptMapUserPosition,\n} from './types';\n\n/** Rodzaj silnika — trafia do `data-engine` na hoście, przydatne w testach i stylach. */\nexport type KptMapEngineKind = 'leaflet' | 'google';\n\nexport interface KptMapEngineInit {\n center: KptLatLng;\n zoom: number;\n minZoom?: number;\n maxZoom?: number;\n /** Blokada panningu poza prostokąt. */\n maxBounds?: KptMapBounds | null;\n /** Szablon URL kafli, np. `https://tile.openstreetmap.org/{z}/{x}/{y}.png`. */\n tileUrl: string;\n /** Tekst atrybucji — wymagany licencyjnie przy OSM. */\n attribution: string;\n /** Silnik nie rysuje własnych kontrolek zoomu — robi to warstwa Angulara. */\n interactive?: boolean;\n}\n\n/** Znacznik gotowy do narysowania — HTML pochodzi z `marker-html.ts`. */\nexport interface KptMapRenderedMarker {\n /** Stabilne id: `id` lokalizacji albo `id` grupy. */\n id: string;\n at: KptLatLng;\n html: string;\n /** Rozmiar ikony w pikselach — silnik potrzebuje go do zakotwiczenia. */\n size: { width: number; height: number };\n /** Punkt zakotwiczenia względem lewego górnego rogu ikony. */\n anchor: KptMapPoint;\n /** Kolejność rysowania — grupy nad pojedynczymi punktami. */\n zIndex?: number;\n}\n\nexport interface KptMapPointerEvent {\n at: KptLatLng;\n /** Piksele względem kontenera mapy. */\n point: KptMapPoint;\n /** Zdarzenie źródłowe, gdy trzeba zatrzymać propagację. */\n originalEvent?: Event;\n}\n\nexport interface KptMapEngineEvents {\n /** Pan i zoom w toku — używane do przeliczania pozycji popupu. */\n move: () => void;\n /** Koniec ruchu — dopiero tu warto emitować `viewChange`. */\n moveend: () => void;\n zoomend: () => void;\n click: (event: KptMapPointerEvent) => void;\n contextmenu: (event: KptMapPointerEvent) => void;\n /** Kliknięcie w znacznik; `id` jak w `KptMapRenderedMarker`. */\n markerclick: (id: string, event: KptMapPointerEvent) => void;\n}\n\nexport interface KptMapEngine {\n readonly kind: KptMapEngineKind;\n\n /** Tworzy mapę w kontenerze. Wywoływane po pierwszym renderze, nigdy na SSR. */\n init(host: HTMLElement, opts: KptMapEngineInit): Promise<void>;\n destroy(): void;\n\n setView(center: KptLatLng, zoom: number, animate?: boolean): void;\n fitBounds(bounds: KptMapBounds, paddingPx?: number): void;\n panBy(offset: KptMapPoint): void;\n\n getCenter(): KptLatLng;\n getZoom(): number;\n getBounds(): KptMapBounds;\n getSize(): { width: number; height: number };\n\n /** Współrzędne → piksele WZGLĘDEM kontenera (pozycjonowanie popupu). */\n project(at: KptLatLng): KptMapPoint;\n unproject(point: KptMapPoint): KptLatLng;\n\n /** Pełna wymiana zestawu znaczników; diff po `id` robi implementacja. */\n setMarkers(markers: readonly KptMapRenderedMarker[]): void;\n /** `null` chowa znacznik użytkownika i krąg dokładności. */\n setUserPosition(position: KptMapUserPosition | null, html: string): void;\n\n setTileSource(tileUrl: string, attribution: string): void;\n setMaxBounds(bounds: KptMapBounds | null): void;\n\n /** Kontener zmienił rozmiar — bez tego Leaflet zostawia szare pola. */\n invalidateSize(): void;\n\n on<K extends keyof KptMapEngineEvents>(event: K, handler: KptMapEngineEvents[K]): void;\n}\n\n/** Fabryka silnika — to ją dostarcza DI, żeby każda mapa miała własną instancję. */\nexport type KptMapEngineFactory = () => KptMapEngine;\n\n/** Domyślne źródło kafli. Do produkcji podstaw własny serwer — patrz llms.txt. */\nexport const KPT_MAP_DEFAULT_TILE_URL = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';\nexport const KPT_MAP_DEFAULT_ATTRIBUTION =\n '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors';\n","/*\n * Znacznik i grupa jako HTML — pure TS. Wynik trafia do `L.divIcon` (Leaflet)\n * albo `AdvancedMarkerElement.content` (Google), więc nie może zależeć od Angulara.\n *\n * Ikonę przyjmujemy jako gotowy inner-SVG z rejestru — ten plik nie zna `KptIconRegistry`.\n */\nimport type { KptMapColor, KptMapColorRole, KptMapMarkerShape } from './types';\n\nconst ROLE_VARS: Record<KptMapColorRole, string> = {\n primary: 'var(--kpt-color-primary)',\n success: 'var(--kpt-color-success)',\n warning: 'var(--kpt-color-warning)',\n danger: 'var(--kpt-color-danger)',\n info: 'var(--kpt-color-info)',\n muted: 'var(--kpt-color-muted)',\n};\n\nconst ROLE_CONTRAST_VARS: Record<KptMapColorRole, string> = {\n primary: 'var(--kpt-color-primary-contrast)',\n success: 'var(--kpt-color-success-contrast)',\n warning: 'var(--kpt-color-warning-contrast)',\n danger: 'var(--kpt-color-danger-contrast)',\n info: 'var(--kpt-color-info-contrast)',\n muted: 'var(--kpt-color-on-muted)',\n};\n\n/**\n * Kształt jedynego wejścia spoza znanej roli, jakie kontrakt `KptMapColor` dopuszcza —\n * gotowy token `var(--kpt-*)`. Dane runtime (JSON/CMS) nie są tym kontraktem związane, więc\n * zanim trafią do atrybutu `style=\"...\"` budowanego konkatenacją stringów w `renderMarkerHtml`/\n * `renderClusterHtml`, muszą zostać zweryfikowane — inaczej cudzysłów/`>` wyrywa się z atrybutu\n * (HTML injection), a średnik wstrzykuje dodatkową deklarację CSS.\n */\nconst SAFE_VAR_TOKEN = /^var\\(--kpt-[\\w-]+\\)$/;\n\n/** Rola koloru → zmienna CSS. Gotowe `var(--kpt-*)` przechodzi bez zmian; cokolwiek spoza tego\n * kontraktu dostaje bezpieczny fallback zamiast trafić surowo do wyjścia. */\nexport function colorVarOf(color: KptMapColor): string {\n const known = ROLE_VARS[color as KptMapColorRole];\n if (known) return known;\n return SAFE_VAR_TOKEN.test(color) ? color : ROLE_VARS.muted;\n}\n\n/** Kolor treści na tle `color` — dla ról znany, dla własnych zmiennych fallback na biel tokenową. */\nexport function contrastVarOf(color: KptMapColor): string {\n return ROLE_CONTRAST_VARS[color as KptMapColorRole] ?? 'var(--kpt-color-text-inverse)';\n}\n\n/**\n * Kolor **glifu stojącego wprost na powierzchni**, bez własnego tła.\n *\n * Różni się od `colorVarOf()` tylko dla roli `muted`: `--kpt-color-muted` to neutral-100,\n * czyli token tła, a nie treści — goły znak w tym kolorze na jasnej powierzchni jest\n * niewidoczny. Bierzemy więc czytelny szary tekstowy. Pozostałe role są nasycone\n * i jako treść czytają się bez zmian.\n */\nconst ROLE_FOREGROUND_VARS: Record<KptMapColorRole, string> = {\n ...ROLE_VARS,\n muted: 'var(--kpt-color-on-surface-muted)',\n};\n\nexport function foregroundVarOf(color: KptMapColor): string {\n const known = ROLE_FOREGROUND_VARS[color as KptMapColorRole];\n if (known) return known;\n return SAFE_VAR_TOKEN.test(color) ? color : ROLE_FOREGROUND_VARS.muted;\n}\n\n/** Ucieka znaki, które rozbiłyby atrybut albo wstrzyknęły znacznik. */\nexport function escapeHtml(value: string): string {\n return value\n .replaceAll('&', '&')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", ''');\n}\n\nexport interface KptMarkerHtmlInput {\n shape?: KptMapMarkerShape;\n color: KptMapColor;\n /** Inner-SVG ikony (bez wrappera `<svg>`); bez niego znacznik nie ma glifu. */\n iconSvgInner?: string;\n /** Tekst dla czytnika ekranu — zwykle tytuł lokalizacji. */\n label: string;\n /** Znacznik wybrany (otwarty popup) — dostaje klasę modyfikującą. */\n selected?: boolean;\n}\n\n/**\n * Pinezka o wysokości `--kpt-map-marker-size`, zakotwiczona czubkiem w punkcie.\n * `viewBox` 24×32: 24 szerokości koła + ogon do 32.\n */\nconst PIN_PATH =\n 'M12 0C5.8 0 .8 5 .8 11.2c0 8 9.9 19.4 10.3 19.9a1.2 1.2 0 0 0 1.8 0c.4-.5 10.3-11.9 10.3-19.9C23.2 5 18.2 0 12 0z';\n\nexport function renderMarkerHtml(input: KptMarkerHtmlInput): string {\n // `shape` trafia do atrybutu `class=\"...\"` konkatenacją stringów — `KptMapMarkerShape` ogranicza\n // to tylko compile-time, dane runtime (JSON/CMS) nie są tym związane (ten sam powód, dla którego\n // `color`/`contrast` dostały escapowanie/whitelistę wyżej w pliku).\n const shape = escapeHtml(input.shape ?? 'pin');\n const color = colorVarOf(input.color);\n const contrast = contrastVarOf(input.color);\n const label = escapeHtml(input.label);\n const cls = `kpt-map__marker kpt-map__marker--${shape}${input.selected ? ' kpt-map__marker--selected' : ''}`;\n const glyph = input.iconSvgInner\n ? `<svg class=\"kpt-map__marker-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"` +\n ` stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${input.iconSvgInner}</svg>`\n : '';\n\n const body =\n shape === 'pin'\n ? `<svg class=\"kpt-map__marker-shape\" viewBox=\"0 0 24 32\" aria-hidden=\"true\">` +\n `<path d=\"${PIN_PATH}\" /></svg><span class=\"kpt-map__marker-glyph\">${glyph}</span>`\n : `<span class=\"kpt-map__marker-glyph\">${glyph}</span>`;\n\n return (\n `<div class=\"${cls}\" role=\"img\" aria-label=\"${label}\" title=\"${label}\"` +\n ` style=\"--_kpt-map-marker-bg:${color};--_kpt-map-marker-fg:${contrast}\">${body}</div>`\n );\n}\n\nexport interface KptClusterHtmlInput {\n count: number;\n color: KptMapColor;\n /** Gotowy tekst dla czytnika (i18n rozwiązane po stronie Angulara). */\n label: string;\n}\n\n/** Koło z licznikiem; rozmiar rośnie schodkowo z liczebnością grupy. */\nexport function renderClusterHtml(input: KptClusterHtmlInput): string {\n const color = colorVarOf(input.color);\n const contrast = contrastVarOf(input.color);\n const label = escapeHtml(input.label);\n const tier = clusterTier(input.count);\n return (\n `<div class=\"kpt-map__cluster kpt-map__cluster--${tier}\" role=\"img\" aria-label=\"${label}\" title=\"${label}\"` +\n ` style=\"--_kpt-map-cluster-bg:${color};--_kpt-map-cluster-fg:${contrast}\">` +\n `<span class=\"kpt-map__cluster-count\">${formatCount(input.count)}</span></div>`\n );\n}\n\n/** Próg wielkości grupy — trzy stopnie wystarczą, żeby zobaczyć różnicę bez skalowania ciągłego. */\nexport function clusterTier(count: number): 'sm' | 'md' | 'lg' {\n if (count < 10) return 'sm';\n if (count < 100) return 'md';\n return 'lg';\n}\n\n/** Powyżej 999 licznik przestaje się mieścić — skracamy. */\nexport function formatCount(count: number): string {\n return count > 999 ? '999+' : String(count);\n}\n\n/** Znacznik pozycji użytkownika — ikona podawana z zewnątrz, jak przy zwykłym znaczniku. */\nexport function renderUserMarkerHtml(input: { label: string; iconSvgInner?: string }): string {\n const label = escapeHtml(input.label);\n const glyph = input.iconSvgInner\n ? `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"` +\n ` stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${input.iconSvgInner}</svg>`\n : '';\n return `<div class=\"kpt-map__user-marker\" role=\"img\" aria-label=\"${label}\" title=\"${label}\">${glyph}</div>`;\n}\n","/*\n * Typy rdzenia mapy — pure TS, zero Angulara i zero silnika mapowego.\n * Ten plik przenosi się do portu React bez zmian.\n */\n\n/** Punkt geograficzny w stopniach (WGS 84). */\nexport interface KptLatLng {\n lat: number;\n lng: number;\n}\n\n/** Prostokąt geograficzny. `south < north`; `west`/`east` w stopniach. */\nexport interface KptMapBounds {\n south: number;\n west: number;\n north: number;\n east: number;\n}\n\n/** Punkt w pikselach — kontenera mapy albo świata, zależnie od kontekstu. */\nexport interface KptMapPoint {\n x: number;\n y: number;\n}\n\n/**\n * Kolor znacznika: rola z warstwy semantycznej tokenów albo gotowe `var(--kpt-*)`.\n * Literały (`#c00`, `rgb(...)`) są celowo niedozwolone — kontrakt repo wymaga tokenów.\n */\nexport type KptMapColorRole = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'muted';\nexport type KptMapColor = KptMapColorRole | `var(--kpt-${string})`;\n\n/** Kształt znacznika. */\nexport type KptMapMarkerShape = 'pin' | 'dot' | 'square';\n\n/** Typ pola w schemie formularza „dodaj lokalizację\". */\nexport type KptMapFieldType =\n | 'text'\n | 'textarea'\n | 'number'\n | 'date'\n | 'select'\n | 'multiselect'\n | 'checkbox'\n | 'tel'\n | 'email'\n | 'url'\n /** Zdjęcie: wybór pliku (wartość jako `data:`) albo wklejony adres. */\n | 'image'\n /** Tygodniowy rozkład godzin otwarcia; wartość to `KptMapOpeningHours`. */\n | 'hours';\n\n/** Opcja listy wyboru w polu `select` / `multiselect`. */\nexport interface KptMapFieldOption {\n value: unknown;\n label: string;\n}\n\n/** Definicja jednego pola formularza dodawania lokalizacji. */\nexport interface KptMapFieldDef {\n /** Klucz w obiekcie wartości formularza. */\n key: string;\n type: KptMapFieldType;\n label: string;\n required?: boolean;\n placeholder?: string;\n /** Tekst pomocniczy pod polem. */\n hint?: string;\n /** Wymagane dla `select` i `multiselect`. */\n options?: KptMapFieldOption[];\n /** Dolna granica dla `number`; dla `date` data w formacie ISO. */\n min?: number | string;\n /** Górna granica dla `number`; dla `date` data w formacie ISO. */\n max?: number | string;\n /** Wartość początkowa; bez niej pole startuje puste (`''`, `null`, `[]`, `false`). */\n initial?: unknown;\n /**\n * Część adresu, którą wypełnić z geokodowania wstecznego współrzędnych kliknięcia.\n * Działa tylko dla pól tekstowych i tylko gdy aplikacja poda port `KPT_MAP_GEOCODER`.\n * Nigdy nie nadpisuje tego, co użytkownik już wpisał.\n */\n autofill?: KptMapAddressPart;\n}\n\n/** Rozbiór adresu zwracany przez geokoder. Wszystko opcjonalne — źródła bywają dziurawe. */\nexport interface KptMapAddress {\n /** Nazwa ulicy bez numeru. */\n street?: string;\n houseNumber?: string;\n /** Ulica z numerem, gotowa do jednego pola „Adres\". */\n address?: string;\n city?: string;\n postcode?: string;\n /** Województwo / region. */\n state?: string;\n /** Powiat / hrabstwo. */\n county?: string;\n country?: string;\n /** Kod ISO 3166-1 alpha-2, wielkimi literami. */\n countryCode?: string;\n /** Pełny adres jednym ciągiem, tak jak podał go geokoder. */\n label?: string;\n}\n\n/** Pole `KptMapAddress`, którym można wypełnić kontrolkę formularza. */\nexport type KptMapAddressPart = keyof KptMapAddress;\n\n/**\n * Podpowiedź z listy wyszukiwarki adresów (geokodowanie wprost: tekst → miejsce).\n *\n * Pochodzi z portu `KPT_MAP_GEOCODER`, więc kształt jest wspólny dla dowolnego\n * dostawcy — Nominatim, instancji własnej i komercyjnej.\n */\nexport interface KptMapSuggestion {\n /** Stabilny w obrębie jednej odpowiedzi — służy za klucz `track` listy podpowiedzi. */\n id: string;\n /** Pełna nazwa jednym ciągiem; to widzi użytkownik na liście. */\n label: string;\n /**\n * Współrzędne, **gdy dostawca podaje je już na liście** — tak robi każdy geokoder\n * pytany wprost (Nominatim, Photon, Google Geocoding API).\n *\n * Brak wartości znaczy, że podpowiedź trzeba jeszcze uzupełnić metodą `resolve()`\n * portu. Tak działa Google Places Autocomplete: zwraca `placeId` i tekst, a `lat`/`lng`\n * dociąga się osobnym Place Details — jedno wywołanie na *wybór* użytkownika, a nie\n * na każdy naciśnięty klawisz. Na tym stoi jego rozliczanie sesyjne, więc to nie jest\n * dziwactwo jednego dostawcy, tylko wzorzec, który port musi umieć wyrazić.\n */\n at?: KptLatLng;\n /**\n * Zasięg obiektu, gdy dostawca go podaje. Miasto trafia wtedy w kadr w całości,\n * zamiast dostać punktowy zoom w środek rynku.\n */\n bounds?: KptMapBounds;\n /** Rozbiór adresu, gdy dostawca go podaje — ten sam typ, co przy geokodowaniu wstecznym. */\n address?: KptMapAddress;\n}\n\n/**\n * Wybrane miejsce — podpowiedź z **pewnymi** współrzędnymi.\n *\n * To ten typ wychodzi z `selected` pola wyszukiwania i z `searchSelect` mapy: zanim\n * zdarzenie poleci, brakujące `at` zostaje dociągnięte przez `resolve()`. Aplikacja\n * nigdy nie musi sprawdzać, czy współrzędne są.\n */\nexport interface KptMapSearchResult extends KptMapSuggestion {\n at: KptLatLng;\n}\n\n/** Kategoria obiektu — kolor, ikona i schema formularza. */\nexport interface KptMapCategory {\n id: string;\n /** Etykieta w legendzie i domyślnym popupie. */\n label: string;\n color: KptMapColor;\n /** Nazwa ikony z `KptIconRegistry`; bez niej znacznik nie ma glifu. */\n icon?: string;\n /** Domyślnie `'pin'`. */\n shape?: KptMapMarkerShape;\n /** Schema formularza „dodaj lokalizację\" dla tej kategorii. */\n fields?: KptMapFieldDef[];\n /** Pokazać w legendzie. Domyślnie `true`. */\n legend?: boolean;\n}\n\n/** Pojedyncza lokalizacja na mapie. */\nexport interface KptMapLocation<T = unknown> {\n id: string;\n at: KptLatLng;\n categoryId: string;\n /** Tytuł w popupie oraz `aria-label` znacznika — bez niego znacznik jest niedostępny. */\n title: string;\n /** Dowolne dane aplikacji; trafiają do szablonu popupu jako `data`. */\n data?: T;\n}\n\n/** Grupa lokalizacji zwinięta w jeden znacznik z licznikiem. */\nexport interface KptMapCluster<T = unknown> {\n /** Stabilny w obrębie zoomu: `c:{zoom}:{cellX}:{cellY}`. */\n id: string;\n /** Środek ciężkości grupy. */\n at: KptLatLng;\n count: number;\n /** Najliczniejsza kategoria w grupie — źródło koloru przy `clusterColorBy: 'dominant'`. */\n dominantCategoryId: string;\n items: KptMapLocation<T>[];\n /** Zasięg grupy — do `fitBounds` po kliknięciu. */\n bounds: KptMapBounds;\n}\n\n/** Element wyniku grupowania: albo grupa, albo pojedyncza lokalizacja. */\nexport type KptMapClusterEntry<T = unknown> = KptMapCluster<T> | KptMapLocation<T>;\n\n/** Zawęża wynik `clusterLocations` do grupy. */\nexport function isCluster<T>(entry: KptMapClusterEntry<T>): entry is KptMapCluster<T> {\n return (entry as KptMapCluster<T>).count !== undefined;\n}\n\n/** Pozycja użytkownika z geolokalizacji. */\nexport interface KptMapUserPosition {\n at: KptLatLng;\n /** Promień niepewności w metrach (`GeolocationCoordinates.accuracy`). */\n accuracy: number;\n /** Znacznik czasu odczytu. */\n timestamp: number;\n}\n\n/** Powód niepowodzenia geolokalizacji. */\nexport type KptMapGeolocationErrorKind = 'denied' | 'unavailable' | 'timeout' | 'unsupported';\n\nexport interface KptMapGeolocationError {\n kind: KptMapGeolocationErrorKind;\n message: string;\n}\n\n/** Zdarzenie utworzenia lokalizacji przez formularz. */\nexport interface KptMapCreateEvent {\n at: KptLatLng;\n categoryId: string;\n /** Wartości pól wg schemy kategorii (albo z własnego szablonu formularza). */\n value: Record<string, unknown>;\n}\n\n/** Widok mapy — środek i zoom. */\nexport interface KptMapView {\n center: KptLatLng;\n zoom: number;\n}\n\n/* ── Godziny otwarcia ───────────────────────────────────────────────────── */\n\n/** Dzień tygodnia wg ISO-8601: 1 = poniedziałek … 7 = niedziela. */\nexport type KptMapWeekday = 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n/**\n * Przedział otwarcia w dobie, `HH:MM` w czasie lokalnym miejsca.\n *\n * `to` mniejsze albo równe `from` znaczy „przez północ\" — przedział kończy się\n * następnego dnia. `24:00` to prawidłowy koniec doby i nie jest przejściem przez północ.\n */\nexport interface KptMapHoursRange {\n from: string;\n to: string;\n}\n\n/** Godziny jednego dnia tygodnia. */\nexport interface KptMapDayHours {\n day: KptMapWeekday;\n /** Zamknięte przez całą dobę — `ranges` jest wtedy ignorowane. */\n closed?: boolean;\n ranges: KptMapHoursRange[];\n}\n\n/** Tygodniowy rozkład godzin. Brakujący dzień znaczy „zamknięte\". */\nexport type KptMapOpeningHours = KptMapDayHours[];\n\n/* ── Karta miejsca ──────────────────────────────────────────────────────── */\n\n/** Wiersz „ikona + etykieta + wartość\" w karcie miejsca. */\nexport interface KptMapPoiFact {\n /** Nazwa ikony z `KptIconRegistry`; bez niej wiersz jest bez glifu. */\n icon?: string;\n label: string;\n value: string;\n}\n\n/**\n * Dane karty miejsca (`kpt-map-poi-card`). Aplikacja mapuje na to swój\n * `KptMapLocation.data` — biblioteka nie narzuca kształtu danych domenowych.\n */\nexport interface KptMapPoi {\n title: string;\n /** Drugi wiersz nagłówka, obok dystansu. */\n address?: string;\n /** Adres zdjęcia albo `data:`; karta nie rozróżnia. Puste = zastępnik z ikoną. */\n photo?: string;\n photoAlt?: string;\n hours?: KptMapOpeningHours;\n phone?: string;\n email?: string;\n website?: string;\n /** Wiersz współrzędnych; bez tego się nie renderuje. */\n at?: KptLatLng;\n /** Dodatkowe wiersze informacyjne, bez akcji. */\n facts?: KptMapPoiFact[];\n}\n","/*\n * Godziny otwarcia — pure TS, bez Angulara i bez silnika mapowego.\n * Ten plik przenosi się do portu React bez zmian.\n *\n * Umowa o czasie: `HH:MM` w czasie lokalnym miejsca, a porównania robimy\n * na lokalnym czasie przeglądarki. Miejsce w innej strefie niż użytkownik\n * pokaże więc status wg zegara użytkownika — to świadome uproszczenie,\n * bo model nie niesie strefy. Kto potrzebuje inaczej, liczy status u siebie.\n */\n\nimport type { KptMapDayHours, KptMapHoursRange, KptMapOpeningHours, KptMapWeekday } from './types';\n\n/** Minuta doby dla `HH:MM`; `24:00` to 1440. `null`, gdy zapis jest nieprawidłowy. */\nexport function parseTime(value: string): number | null {\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(value.trim());\n if (!match) return null;\n const hours = Number(match[1]);\n const minutes = Number(match[2]);\n if (minutes > 59) return null;\n const total = hours * 60 + minutes;\n return total > 1440 ? null : total;\n}\n\n/** `HH:MM` z minuty doby. 1440 wraca jako `24:00`, nie `00:00`. */\nexport function formatTime(minutes: number): string {\n const m = Math.max(0, Math.min(1440, Math.round(minutes)));\n return `${String(Math.floor(m / 60)).padStart(2, '0')}:${String(m % 60).padStart(2, '0')}`;\n}\n\n/** Dzień tygodnia wg ISO (1 = poniedziałek) z natywnej daty. */\nexport function isoWeekday(date: Date): KptMapWeekday {\n const day = date.getDay();\n return (day === 0 ? 7 : day) as KptMapWeekday;\n}\n\nfunction previousDay(day: KptMapWeekday): KptMapWeekday {\n return (day === 1 ? 7 : day - 1) as KptMapWeekday;\n}\n\nfunction dayOf(hours: KptMapOpeningHours, day: KptMapWeekday): KptMapDayHours | undefined {\n return hours.find((entry) => entry.day === day);\n}\n\n/** Przedział przechodzi przez północ, gdy kończy się nie później niż zaczyna. */\nfunction crossesMidnight(range: KptMapHoursRange): boolean {\n const from = parseTime(range.from);\n const to = parseTime(range.to);\n return from !== null && to !== null && to <= from;\n}\n\nfunction usableRanges(entry: KptMapDayHours | undefined): KptMapHoursRange[] {\n if (!entry || entry.closed) return [];\n return entry.ranges.filter((r) => parseTime(r.from) !== null && parseTime(r.to) !== null);\n}\n\n/**\n * Czy miejsce jest otwarte w danym momencie.\n *\n * Sprawdza dwa dni: bieżący oraz poprzedni, bo przedział przez północ\n * (`22:00 – 01:00`) obejmuje wczesne godziny dnia następnego.\n */\nexport function isOpenAt(hours: KptMapOpeningHours | undefined, date: Date): boolean {\n if (!hours || hours.length === 0) return false;\n const minute = date.getHours() * 60 + date.getMinutes();\n const today = isoWeekday(date);\n\n for (const range of usableRanges(dayOf(hours, today))) {\n const from = parseTime(range.from)!;\n const to = parseTime(range.to)!;\n if (to > from ? minute >= from && minute < to : minute >= from) return true;\n }\n\n for (const range of usableRanges(dayOf(hours, previousDay(today)))) {\n if (!crossesMidnight(range)) continue;\n if (minute < parseTime(range.to)!) return true;\n }\n\n return false;\n}\n\n/** Czy rozkład to pełna doba przez siedem dni — wtedy karta pisze po prostu „24/7\". */\nexport function isAlwaysOpen(hours: KptMapOpeningHours | undefined): boolean {\n if (!hours) return false;\n for (let day = 1; day <= 7; day++) {\n const ranges = usableRanges(dayOf(hours, day as KptMapWeekday));\n const full = ranges.some((r) => parseTime(r.from) === 0 && parseTime(r.to) === 1440);\n if (!full) return false;\n }\n return true;\n}\n\n/** Najbliższa zmiana stanu otwarte/zamknięte albo `null`, gdy w ciągu tygodnia jej nie ma. */\nexport function nextChange(\n hours: KptMapOpeningHours | undefined,\n date: Date,\n): { open: boolean; at: Date } | null {\n if (!hours || hours.length === 0) return null;\n const now = isOpenAt(hours, date);\n\n // Granice przedziałów na najbliższe osiem dób; pierwsza różnica wygrywa.\n for (let offset = 0; offset <= 8; offset++) {\n const base = new Date(date);\n base.setHours(0, 0, 0, 0);\n base.setDate(base.getDate() + offset);\n const day = isoWeekday(base);\n\n const minutes = new Set<number>();\n for (const range of usableRanges(dayOf(hours, day))) {\n minutes.add(parseTime(range.from)!);\n const to = parseTime(range.to)!;\n if (to > parseTime(range.from)!) minutes.add(to);\n }\n for (const range of usableRanges(dayOf(hours, previousDay(day)))) {\n if (crossesMidnight(range)) minutes.add(parseTime(range.to)!);\n }\n\n for (const minute of [...minutes].sort((a, b) => a - b)) {\n const at = new Date(base);\n at.setMinutes(minute);\n if (at.getTime() <= date.getTime()) continue;\n const open = isOpenAt(hours, at);\n if (open !== now) return { open, at };\n }\n }\n\n return null;\n}\n\n/** Skrócona nazwa dnia z `Intl` — bez słownika, więc działa dla dowolnego locale. */\nexport function weekdayName(day: KptMapWeekday, locale: string): string {\n // 2024-01-01 był poniedziałkiem, więc dzień ISO wypada na tę samą liczbę w miesiącu.\n const date = new Date(Date.UTC(2024, 0, day));\n return new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'UTC' }).format(date);\n}\n\n/** Wiersz rozkładu: jeden dzień albo sklejony zakres dni o identycznych godzinach. */\nexport interface KptMapHoursGroup {\n /** `pon.` albo `wt.–sob.`, wg locale. */\n label: string;\n days: KptMapWeekday[];\n closed: boolean;\n /** Sformatowane przedziały, np. `['11:00 – 24:00']`. Puste, gdy zamknięte. */\n ranges: string[];\n}\n\nfunction signatureOf(entry: KptMapDayHours | undefined): string {\n const ranges = usableRanges(entry);\n if (ranges.length === 0) return 'closed';\n return ranges.map((r) => `${parseTime(r.from)}-${parseTime(r.to)}`).join(',');\n}\n\n/**\n * Rozkład tygodnia z sąsiadującymi dniami sklejonymi w jeden wiersz.\n *\n * Niedziela i poniedziałek się nie sklejają, choć w tablicy sąsiadują — tydzień\n * czyta się liniowo od poniedziałku i zawijanie byłoby mylące.\n */\nexport function groupWeek(\n hours: KptMapOpeningHours | undefined,\n locale: string,\n separator = ' – ',\n): KptMapHoursGroup[] {\n if (!hours || hours.length === 0) return [];\n const groups: KptMapHoursGroup[] = [];\n let signature: string | null = null;\n\n for (let day = 1; day <= 7; day++) {\n const entry = dayOf(hours, day as KptMapWeekday);\n const current = signatureOf(entry);\n const previous = groups[groups.length - 1];\n\n if (current === signature && previous) {\n previous.days.push(day as KptMapWeekday);\n continue;\n }\n\n signature = current;\n const ranges = usableRanges(entry);\n groups.push({\n label: '',\n days: [day as KptMapWeekday],\n closed: ranges.length === 0,\n ranges: ranges.map((r) => `${r.from}${separator}${r.to}`),\n });\n }\n\n for (const group of groups) {\n const first = weekdayName(group.days[0], locale);\n const last = weekdayName(group.days[group.days.length - 1], locale);\n group.label = group.days.length === 1 ? first : `${first}–${last}`;\n }\n\n return groups;\n}\n\n/** Siedem dni oznaczonych jako zamknięte — wartość startowa pola `hours` w formularzu. */\nexport function emptyWeek(): KptMapOpeningHours {\n return Array.from({ length: 7 }, (_, i) => ({\n day: (i + 1) as KptMapWeekday,\n closed: true,\n ranges: [],\n }));\n}\n","import { InjectionToken, type Provider } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { isFittableBounds } from '../core/geo';\nimport type {\n KptLatLng,\n KptMapAddress,\n KptMapBounds,\n KptMapSearchResult,\n KptMapSuggestion,\n} from '../core/types';\n\n/**\n * Geokodowanie wsteczne: współrzędne → adres. Port, a nie sztywne wywołanie usługi —\n * biblioteka nie może po cichu odpytywać cudzego serwera, a aplikacje mają własnych dostawców.\n *\n * Nie jest rejestrowany domyślnie. Bez niego formularz „dodaj lokalizację\" po prostu\n * nie podpowiada adresu.\n */\nexport interface KptMapSearchOptions {\n /** Język odpowiedzi. Domyślnie to, co ustawi dostawca. */\n language?: string;\n signal?: AbortSignal;\n /** Ile wyników najwyżej. Domyślnie 5 — to lista podpowiedzi, nie wyszukiwarka pełnotekstowa. */\n limit?: number;\n /**\n * Preferuj wyniki z tego prostokąta. **Nie odcina** reszty świata — adres z zagranicy\n * dalej da się znaleźć, tylko wypada niżej na liście.\n */\n viewbox?: KptMapBounds;\n /** Twarde zawężenie do krajów (ISO 3166-1 alpha-2). Wyniki spoza nich nie wrócą wcale. */\n countryCodes?: readonly string[];\n}\n\nexport interface KptMapGeocoderPort {\n /** `null` = nie udało się ustalić adresu. Strumień powinien dać jedną wartość i zakończyć się. */\n reverse(at: KptLatLng, options?: { language?: string; signal?: AbortSignal }): Observable<KptMapAddress | null>;\n\n /**\n * Geokodowanie wprost: tekst → miejsca. Metoda jest **opcjonalna**, żeby porty napisane\n * przed jej powstaniem dalej się kompilowały — bez niej `kpt-map` po prostu nie pokazuje\n * wyszukiwarki. Strumień powinien dać jedną wartość i zakończyć się.\n *\n * Zwracać `KptMapSearchResult[]` (ze współrzędnymi) wolno i jest to najprostsza droga —\n * `KptMapSuggestion` jest tylko szerszy o brak `at`. Jeśli Twój dostawca współrzędnych\n * na liście nie podaje, **musisz** dopisać `resolve()`.\n */\n search?(query: string, options?: KptMapSearchOptions): Observable<readonly KptMapSuggestion[]>;\n\n /**\n * Uzupełnia podpowiedź o współrzędne. Wołane **raz, po wybraniu pozycji z listy** —\n * nigdy w trakcie pisania.\n *\n * Wymagane wyłącznie od dostawców, których `search()` nie zwraca `at` (Google Places:\n * Autocomplete daje `placeId`, Place Details dokłada `lat`/`lng`). Kto zwraca współrzędne\n * od razu, tej metody nie potrzebuje — pole wyszukiwania nawet jej nie zawoła.\n *\n * `null` = nie udało się ustalić miejsca. Strumień powinien dać jedną wartość i zakończyć się.\n */\n resolve?(\n suggestion: KptMapSuggestion,\n options?: { language?: string; signal?: AbortSignal },\n ): Observable<KptMapSearchResult | null>;\n}\n\nexport const KPT_MAP_GEOCODER = new InjectionToken<KptMapGeocoderPort>('KPT_MAP_GEOCODER');\n\nexport interface KptNominatimOptions {\n /**\n * Adres instancji Nominatim. Domyślnie publiczna instancja OSM — patrz ostrzeżenie\n * przy `provideKptNominatimGeocoder`.\n */\n baseUrl?: string;\n /** Język odpowiedzi (`Accept-Language`). Domyślnie język przeglądarki. */\n language?: string;\n /**\n * Szczegółowość: 18 to poziom budynku, 16 ulicy, 10 miasta.\n * Domyślnie 18 — potrzebujemy numeru domu.\n */\n zoom?: number;\n /**\n * Najmniejszy odstęp między zapytaniami w milisekundach.\n *\n * Sekunda nie jest cechą Nominatima, tylko wymogiem regulaminu **publicznej instancji\n * OSM** — dlatego domyślna zależy od `baseUrl`: bez niego 1000 ms, z własnym adresem 0.\n * Na swoim serwerze nie ma czego respektować, a przy podpowiadaniu w trakcie pisania\n * sekundowa zwłoka jest różnicą między „działa\" a „zacina się\".\n *\n * `0` zdejmuje też kolejkowanie — zapytania lecą równolegle. Podstawiając cudzą,\n * współdzieloną instancję ustaw wartość jawnie.\n */\n minIntervalMs?: number;\n}\n\n/** Publiczna instancja OSM. Ma twardą politykę użycia — patrz JSDoc providera. */\nconst NOMINATIM_URL = 'https://nominatim.openstreetmap.org';\n\n/** Polityka publicznej instancji Nominatim: maksymalnie jedno zapytanie na sekundę. */\nconst NOMINATIM_MIN_INTERVAL_MS = 1000;\n\ninterface NominatimAddress {\n road?: string;\n house_number?: string;\n city?: string;\n town?: string;\n village?: string;\n municipality?: string;\n hamlet?: string;\n postcode?: string;\n state?: string;\n county?: string;\n country?: string;\n country_code?: string;\n}\n\ninterface NominatimPlace {\n place_id?: number | string;\n osm_type?: string;\n osm_id?: number | string;\n display_name?: string;\n lat?: string;\n lon?: string;\n /** `[south, north, west, east]` — Nominatim podaje je jako napisy. */\n boundingbox?: [string, string, string, string];\n address?: NominatimAddress;\n}\n\n/**\n * Adapter Nominatim (OpenStreetMap). Kolejkuje zapytania z odstępem sekundy, żeby\n * nie łamać polityki użycia, i przerywa je, gdy subskrybent zniknie.\n */\nexport class KptNominatimGeocoder implements KptMapGeocoderPort {\n /** Ogon kolejki — każde kolejne zapytanie czeka na swoją kolej. */\n private next = Promise.resolve();\n /** Kiedy wystrzeliło poprzednie zapytanie. `0` = jeszcze żadne. */\n private lastAt = 0;\n\n /**\n * Rozstrzygnięty odstęp między zapytaniami. Liczony raz, w konstruktorze: własny\n * `baseUrl` nie dziedziczy regulaminu publicznej instancji OSM.\n */\n private readonly minInterval: number;\n\n constructor(private readonly options: KptNominatimOptions = {}) {\n this.minInterval = options.minIntervalMs ?? (options.baseUrl ? 0 : NOMINATIM_MIN_INTERVAL_MS);\n }\n\n /**\n * Rezerwuje miejsce w kolejce: czeka na poprzednie zapytanie, a potem tylko tyle,\n * ile brakuje do pełnego odstępu od jego wystrzału.\n *\n * Odstęp liczony od zegara, a nie stałym `delay()` przed każdym zapytaniem —\n * inaczej pierwsza podpowiedź po minucie bezczynności też płaciłaby sekundę, a przy\n * podpowiadaniu w trakcie pisania to jest różnica między „działa\" a „zacina się\".\n * Górna granica jednego zapytania na sekundę zostaje nienaruszona.\n *\n * Bez odstępu nie ma czego kolejkować: łańcuch obietnic zostaje nietknięty, żeby\n * podpowiedzi z własnej instancji nie ustawiały się jedna za drugą bez powodu.\n */\n private slot(): Promise<void> {\n if (this.minInterval <= 0) return Promise.resolve();\n\n const mine = this.next.then(async () => {\n const wait = this.lastAt + this.minInterval - Date.now();\n if (wait > 0) await delay(wait);\n this.lastAt = Date.now();\n });\n this.next = mine;\n return mine;\n }\n\n reverse(at: KptLatLng, options?: { language?: string; signal?: AbortSignal }): Observable<KptMapAddress | null> {\n if (typeof fetch === 'undefined') return of(null);\n\n return new Observable<KptMapAddress | null>((subscriber) => {\n const controller = new AbortController();\n const external = options?.signal;\n external?.addEventListener('abort', () => controller.abort(), { once: true });\n\n // Wpinamy się w kolejkę: własne miejsce zajmujemy od razu, ale start dopiero po odstępie.\n const mine = this.slot();\n\n mine\n .then(() => {\n if (controller.signal.aborted) return null;\n return this.fetchAddress(at, controller.signal, options?.language);\n })\n .then((address) => {\n if (controller.signal.aborted) return;\n subscriber.next(address);\n subscriber.complete();\n })\n .catch((error) => {\n if (controller.signal.aborted || (error as Error)?.name === 'AbortError') return;\n // Brak adresu to nie awaria formularza — pole zostaje puste.\n subscriber.next(null);\n subscriber.complete();\n });\n\n return () => controller.abort();\n });\n }\n\n /**\n * Podpowiedzi adresowe. Wchodzi w **tę samą** kolejkę co `reverse()` — polityka Nominatim\n * liczy jedno zapytanie na sekundę na całego klienta, a nie na metodę.\n */\n search(query: string, options?: KptMapSearchOptions): Observable<readonly KptMapSearchResult[]> {\n const q = query.trim();\n if (typeof fetch === 'undefined' || !q) return of([]);\n\n return new Observable<readonly KptMapSearchResult[]>((subscriber) => {\n const controller = new AbortController();\n const external = options?.signal;\n external?.addEventListener('abort', () => controller.abort(), { once: true });\n\n const mine = this.slot();\n\n mine\n .then(() => {\n if (controller.signal.aborted) return [];\n return this.fetchPlaces(q, controller.signal, options);\n })\n .then((results) => {\n if (controller.signal.aborted) return;\n subscriber.next(results);\n subscriber.complete();\n })\n .catch((error) => {\n if (controller.signal.aborted || (error as Error)?.name === 'AbortError') return;\n // Nieudane zapytanie to pusta lista, a nie wywrotka pola wyszukiwania.\n subscriber.next([]);\n subscriber.complete();\n });\n\n return () => controller.abort();\n });\n }\n\n private async fetchPlaces(\n query: string,\n signal: AbortSignal,\n options?: KptMapSearchOptions,\n ): Promise<readonly KptMapSearchResult[]> {\n const base = this.options.baseUrl ?? NOMINATIM_URL;\n const url = new URL('/search', base);\n url.searchParams.set('format', 'jsonv2');\n url.searchParams.set('q', query);\n url.searchParams.set('addressdetails', '1');\n url.searchParams.set('limit', String(options?.limit ?? 5));\n\n const box = options?.viewbox;\n if (box) {\n // Nominatim czyta viewbox jako `lewo,góra,prawo,dół`, czyli lon/lat, nie lat/lon.\n url.searchParams.set('viewbox', [box.west, box.north, box.east, box.south].join(','));\n }\n const countries = options?.countryCodes;\n if (countries?.length) {\n url.searchParams.set('countrycodes', countries.join(',').toLowerCase());\n }\n\n const lang = options?.language ?? this.options.language;\n const headers: Record<string, string> = { Accept: 'application/json' };\n if (lang) headers['Accept-Language'] = lang;\n\n const response = await fetch(url, { signal, headers });\n if (!response.ok) return [];\n\n const data = (await response.json()) as NominatimPlace[];\n return Array.isArray(data) ? data.map(mapPlace).filter((r): r is KptMapSearchResult => r !== null) : [];\n }\n\n private async fetchAddress(at: KptLatLng, signal: AbortSignal, language?: string): Promise<KptMapAddress | null> {\n const base = this.options.baseUrl ?? NOMINATIM_URL;\n const url = new URL('/reverse', base);\n url.searchParams.set('format', 'jsonv2');\n url.searchParams.set('lat', String(at.lat));\n url.searchParams.set('lon', String(at.lng));\n url.searchParams.set('zoom', String(this.options.zoom ?? 18));\n url.searchParams.set('addressdetails', '1');\n\n const lang = language ?? this.options.language;\n const headers: Record<string, string> = { Accept: 'application/json' };\n if (lang) headers['Accept-Language'] = lang;\n\n const response = await fetch(url, { signal, headers });\n if (!response.ok) return null;\n\n const data = (await response.json()) as { address?: NominatimAddress; display_name?: string };\n return data.address ? mapNominatim(data.address, data.display_name) : null;\n }\n}\n\nfunction mapNominatim(a: NominatimAddress, label?: string): KptMapAddress {\n const street = a.road;\n const houseNumber = a.house_number;\n return {\n street,\n houseNumber,\n // Jedno pole „Adres\" chce ulicy z numerem; bez ulicy nie ma czego sklejać.\n address: street ? [street, houseNumber].filter(Boolean).join(' ') : undefined,\n // Nominatim rozrzuca miejscowość po kilku kluczach zależnie od jej wielkości.\n city: a.city ?? a.town ?? a.village ?? a.municipality ?? a.hamlet,\n postcode: a.postcode,\n state: a.state,\n county: a.county,\n country: a.country,\n countryCode: a.country_code?.toUpperCase(),\n label,\n };\n}\n\nfunction mapPlace(place: NominatimPlace, index: number): KptMapSearchResult | null {\n const lat = Number(place.lat);\n const lng = Number(place.lon);\n // Wynik bez współrzędnych jest bezużyteczny — nie ma dokąd polecieć.\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) return null;\n\n return {\n // `place_id` bywa niestabilne między instancjami, ale w obrębie jednej odpowiedzi\n // wystarcza za klucz listy; `osm_id` i indeks są zapasem, gdy go w ogóle nie ma.\n id: String(place.place_id ?? `${place.osm_type ?? 'p'}:${place.osm_id ?? index}`),\n label: place.display_name ?? `${lat}, ${lng}`,\n at: { lat, lng },\n bounds: mapBoundingBox(place.boundingbox),\n address: place.address ? mapNominatim(place.address, place.display_name) : undefined,\n };\n}\n\n/**\n * `[south, north, west, east]` jako napisy → `KptMapBounds`.\n *\n * `undefined` dla zasięgu zbyt ciasnego, żeby go wpasowywać w kadr — pojedynczy adres\n * dostaje wtedy `[searchZoom]` mapy i ląduje w powtarzalnym zbliżeniu, zamiast\n * w przypadkowym, zależnym od tego, jak dostawca obrysował budynek. Regułę trzyma\n * `isFittableBounds()` z rdzenia — jest testowana i wspólna dla wszystkich adapterów.\n */\nfunction mapBoundingBox(box: NominatimPlace['boundingbox']): KptMapBounds | undefined {\n if (!box || box.length !== 4) return undefined;\n const [south, north, west, east] = box.map(Number);\n if (![south, north, west, east].every(Number.isFinite)) return undefined;\n const bounds = { south, west, north, east };\n return isFittableBounds(bounds) ? bounds : undefined;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Włącza podpowiadanie adresu z Nominatim (OpenStreetMap) w formularzu „dodaj lokalizację\".\n *\n * **Polityka użycia.** Publiczna instancja `nominatim.openstreetmap.org` dopuszcza\n * maksymalnie jedno zapytanie na sekundę, wymaga rozpoznawalnego `Referer`/`User-Agent`\n * i zabrania masowego odpytywania; ruch może zostać zablokowany bez uprzedzenia,\n * w szczególności komercyjny. Adapter sam trzyma odstęp sekundy, ale do produkcji\n * podstaw własną instancję (`baseUrl`) albo komercyjnego dostawcę przez własny\n * `KPT_MAP_GEOCODER`.\n *\n * Podanie `baseUrl` **zdejmuje sekundowy odstęp** (`minIntervalMs` domyślnie 0) — regulamin\n * publicznej instancji nie obowiązuje na Twoim serwerze. Cudzą, współdzieloną instancję\n * podstawiaj z jawnym `minIntervalMs`.\n *\n * @example\n * providers: [provideKptLeafletMap(), provideKptNominatimGeocoder({ language: 'pl' })]\n *\n * @example\n * // Własna instancja: bez odstępu, podpowiedzi lecą od razu.\n * provideKptNominatimGeocoder({ baseUrl: 'https://geo.firma.local', language: 'pl' })\n */\nexport function provideKptNominatimGeocoder(options: KptNominatimOptions = {}): Provider {\n return { provide: KPT_MAP_GEOCODER, useValue: new KptNominatimGeocoder(options) };\n}\n\nexport interface KptMapGeocoderStubOptions {\n /**\n * Udawaj dostawcę, który nie podaje współrzędnych na liście (Google Places Autocomplete):\n * `search()` oddaje podpowiedzi bez `at`, a dopiero `resolve()` je dokłada.\n *\n * Bez tego ścieżki leniwej nie da się pokazać ani przejechać bez prawdziwego klucza API.\n */\n deferCoordinates?: boolean;\n}\n\n/**\n * Stały adres i stała lista podpowiedzi — Storybook i testy, bez ruchu sieciowego.\n *\n * Podpowiedzi filtruje po `label` bez znaków diakrytycznych, żeby „warszawa\" trafiało\n * w „Warszawa\". Prawdziwy geokoder dopasowuje po swojemu — atrapa tylko udaje, że umie.\n */\nexport class KptMapGeocoderStub implements KptMapGeocoderPort {\n constructor(\n private readonly address: KptMapAddress | null,\n private readonly results: readonly KptMapSearchResult[] = [],\n private readonly options: KptMapGeocoderStubOptions = {},\n ) {}\n\n reverse(): Observable<KptMapAddress | null> {\n return of(this.address);\n }\n\n search(query: string, options?: KptMapSearchOptions): Observable<readonly KptMapSuggestion[]> {\n const q = fold(query);\n if (!q) return of([]);\n const hits = this.results.filter((r) => fold(r.label).includes(q)).slice(0, options?.limit ?? 5);\n if (!this.options.deferCoordinates) return of(hits);\n // Współrzędne i zasięg zostają po stronie atrapy — pole ma po nie sięgnąć `resolve()`.\n return of(hits.map(({ at: _at, bounds: _bounds, ...rest }) => rest));\n }\n\n resolve(suggestion: KptMapSuggestion): Observable<KptMapSearchResult | null> {\n // Podpowiedź ze współrzędnymi wraca nietknięta — tak samo zachowa się prawdziwy adapter.\n if (suggestion.at) return of(suggestion as KptMapSearchResult);\n return of(this.results.find((r) => r.id === suggestion.id) ?? null);\n }\n}\n\n/** Bez znaków diakrytycznych i wielkości liter — tylko na potrzeby atrapy. */\nfunction fold(value: string): string {\n return value.trim().toLowerCase().normalize('NFD').replace(/\\p{Diacritic}/gu, '');\n}\n\nexport function provideKptMapGeocoderStub(\n address: KptMapAddress | null,\n results: readonly KptMapSearchResult[] = [],\n options: KptMapGeocoderStubOptions = {},\n): Provider {\n return { provide: KPT_MAP_GEOCODER, useValue: new KptMapGeocoderStub(address, results, options) };\n}\n","<kpt-checkbox\n class=\"kpt-map-hours-field__same\"\n [checked]=\"sameAllWeek()\"\n (checkedChange)=\"onSameAllWeek($event)\"\n [disabled]=\"disabled() || readonly()\"\n [label]=\"i18n.t('map.field.hoursSameAllWeek')\"\n/>\n\n<ul class=\"kpt-map-hours-field__week\">\n @for (row of rows(); track row.day) {\n <li class=\"kpt-map-hours-field__day\" [attr.data-locked]=\"locked(row) ? '' : null\">\n <span class=\"kpt-map-hours-field__name\">{{ row.name }}</span>\n\n <!-- Przy zamkniętym dniu kolumna godzin zostaje pusta: „zamknięte\" mówi już checkbox. -->\n <div class=\"kpt-map-hours-field__ranges\">\n @if (!row.closed) {\n @for (range of row.ranges; track $index) {\n <div class=\"kpt-map-hours-field__range\">\n <kpt-datepicker\n selectionMode=\"time\"\n [minuteStep]=\"minuteStep\"\n [value]=\"range.from\"\n (valueChange)=\"setTime(row, $index, 'from', $event)\"\n [disabled]=\"locked(row)\"\n [ariaLabel]=\"i18n.t('map.field.hoursFrom') + ' — ' + row.name\"\n (touch)=\"touch.emit()\"\n />\n <span class=\"kpt-map-hours-field__dash\" aria-hidden=\"true\">–</span>\n <kpt-datepicker\n selectionMode=\"time\"\n [minuteStep]=\"minuteStep\"\n [value]=\"range.to\"\n (valueChange)=\"setTime(row, $index, 'to', $event)\"\n [disabled]=\"locked(row)\"\n [ariaLabel]=\"i18n.t('map.field.hoursTo') + ' — ' + row.name\"\n (touch)=\"touch.emit()\"\n />\n @if (row.ranges.length > 1) {\n <kpt-icon-button\n variant=\"text\"\n size=\"sm\"\n [disabled]=\"locked(row)\"\n [ariaLabel]=\"i18n.t('map.field.hoursRemoveRange')\"\n (click)=\"removeRange(row, $index)\"\n >\n <kpt-icon name=\"minus\" />\n </kpt-icon-button>\n }\n </div>\n }\n\n @if (row.ranges.length < maxRanges) {\n <button\n class=\"kpt-map-hours-field__add\"\n type=\"button\"\n [disabled]=\"locked(row)\"\n (click)=\"addRange(row)\"\n >\n <kpt-icon name=\"plus\" />\n {{ i18n.t('map.field.hoursAddRange') }}\n </button>\n }\n }\n </div>\n\n <kpt-checkbox\n class=\"kpt-map-hours-field__closed\"\n [checked]=\"row.closed\"\n (checkedChange)=\"setClosed(row, $event)\"\n [disabled]=\"locked(row)\"\n [label]=\"i18n.t('map.field.hoursClosed')\"\n />\n </li>\n }\n</ul>\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { KptCheckbox, KptDatepicker, KptI18n, KptIconButton, KptIcon } from '@konce-pt/angular';\nimport { emptyWeek, weekdayName } from '../core/hours';\nimport type { KptMapDayHours, KptMapOpeningHours, KptMapWeekday } from '../core/types';\n\n/** Ile przedziałów na dobę dopuszczamy. Dwa pokrywają przerwę i dobę przez północ. */\nconst MAX_RANGES = 2;\n\n/**\n * Snap minut na tarczy zegara. Godziny otwarcia chodzą co kwadrans, a nie co minutę —\n * krok 5 daje trafienie w 07:30 czy 22:45 bez celowania w pojedynczą minutę.\n */\nconst MINUTE_STEP = 5;\n\n/** Wiersz edytora — dzień z nazwą i przedziałami dopełnionymi do pustych pól. */\ninterface HoursRow {\n day: KptMapWeekday;\n name: string;\n closed: boolean;\n ranges: { from: string; to: string }[];\n}\n\n/**\n * Pole „godziny otwarcia\" formularza dodawania lokalizacji (`type: 'hours'` w schemie).\n *\n * Siedem wierszy od poniedziałku, każdy z parą godzin i znacznikiem „zamknięte\".\n * Skrót „tak samo przez cały tydzień\" kopiuje poniedziałek na pozostałe dni — to\n * najczęstszy przypadek, a bez niego wypełnienie formularza to czternaście pól.\n *\n * Nazwy dni idą z `Intl`, nie ze słownika `KptMessages`: rozkład tygodnia jest\n * uniwersalny, a tłumaczenie nazw dni przeglądarka ma już zrobione.\n */\n@Component({\n selector: 'kpt-map-hours-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptCheckbox, KptDatepicker, KptIcon, KptIconButton],\n templateUrl: './map-hours-field.component.html',\n styleUrl: './map-hours-field.component.scss',\n host: { class: 'kpt-map-hours-field' },\n})\nexport class KptMapHoursField implements FormValueControl<KptMapOpeningHours> {\n readonly value = model<KptMapOpeningHours>(emptyWeek());\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n\n readonly touch = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n protected readonly maxRanges = MAX_RANGES;\n protected readonly minuteStep = MINUTE_STEP;\n\n /** Skrót „tak samo przez cały tydzień\" — trzymany w modelu, nie w wartości. */\n readonly sameAllWeek = model(false);\n\n protected readonly rows = computed<HoursRow[]>(() => {\n const locale = this.i18n.locale();\n const week = this.value();\n return Array.from({ length: 7 }, (_, i) => {\n const day = (i + 1) as KptMapWeekday;\n const entry = week.find((d) => d.day === day);\n return {\n day,\n name: weekdayName(day, locale),\n closed: entry?.closed ?? !entry,\n ranges: (entry?.ranges ?? []).map((r) => ({ from: r.from, to: r.to })),\n };\n });\n });\n\n /** Dni poza poniedziałkiem są zablokowane, gdy tydzień jest jednakowy. */\n protected locked(row: HoursRow): boolean {\n return this.disabled() || this.readonly() || (this.sameAllWeek() && row.day !== 1);\n }\n\n protected onSameAllWeek(same: boolean): void {\n this.sameAllWeek.set(same);\n if (!same) return;\n const monday = this.rows()[0];\n this.write((week) =>\n week.map((day) =>\n day.day === 1\n ? day\n : { day: day.day, closed: monday.closed, ranges: monday.ranges.map((r) => ({ ...r })) },\n ),\n );\n }\n\n protected setClosed(row: HoursRow, closed: boolean): void {\n this.patch(row.day, (day) => ({\n ...day,\n closed,\n // Przy odznaczeniu dajemy jeden pusty przedział, żeby było co wypełnić.\n ranges: closed ? [] : day.ranges.length ? day.ranges : [{ from: '', to: '' }],\n }));\n }\n\n protected setTime(row: HoursRow, index: number, edge: 'from' | 'to', time: string): void {\n this.patch(row.day, (day) => {\n const ranges = day.ranges.map((r) => ({ ...r }));\n while (ranges.length <= index) ranges.push({ from: '', to: '' });\n ranges[index][edge] = time;\n return { ...day, closed: false, ranges };\n });\n }\n\n protected addRange(row: HoursRow): void {\n this.patch(row.day, (day) => ({\n ...day,\n closed: false,\n ranges: [...day.ranges.map((r) => ({ ...r })), { from: '', to: '' }],\n }));\n }\n\n protected removeRange(row: HoursRow, index: number): void {\n this.patch(row.day, (day) => ({\n ...day,\n ranges: day.ranges.filter((_, i) => i !== index).map((r) => ({ ...r })),\n }));\n }\n\n /** Zmiana jednego dnia; przy jednakowym tygodniu poniedziałek rozlewa się na resztę. */\n private patch(day: KptMapWeekday, change: (entry: KptMapDayHours) => KptMapDayHours): void {\n this.write((week) => {\n const next = week.map((entry) => (entry.day === day ? change(entry) : entry));\n if (!this.sameAllWeek() || day !== 1) return next;\n const monday = next[0];\n return next.map((entry) =>\n entry.day === 1\n ? entry\n : { day: entry.day, closed: monday.closed, ranges: monday.ranges.map((r) => ({ ...r })) },\n );\n });\n }\n\n /** Zapis zawsze przez pełny, uporządkowany tydzień — model nie ma dziur. */\n private write(change: (week: KptMapOpeningHours) => KptMapOpeningHours): void {\n const current = this.value();\n const base = emptyWeek().map((day) => current.find((d) => d.day === day.day) ?? day);\n this.value.set(change(base));\n this.touch.emit();\n }\n}\n","<kpt-file-upload\n accept=\"image/*\"\n [value]=\"files()\"\n (valueChange)=\"onFiles($event)\"\n [disabled]=\"disabled() || readonly()\"\n [invalid]=\"invalid()\"\n [touched]=\"touched()\"\n/>\n\n<label class=\"kpt-map-image-field__url\">\n <span class=\"kpt-map-image-field__url-label\">{{ i18n.t('map.field.orPasteUrl') }}</span>\n <kpt-input\n type=\"url\"\n [value]=\"urlValue()\"\n (valueChange)=\"onUrl($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (touch)=\"touch.emit()\"\n placeholder=\"https://\"\n />\n</label>\n\n@if (sizeError(); as error) {\n <p class=\"kpt-map-image-field__error\" aria-live=\"polite\">{{ error }}</p>\n}\n\n@if (preview(); as src) {\n <figure class=\"kpt-map-image-field__preview\">\n <img [src]=\"src\" [alt]=\"i18n.t('map.field.imagePreview')\" />\n <button\n class=\"kpt-map-image-field__clear\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.field.removeImage')\"\n [title]=\"i18n.t('map.field.removeImage')\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"clear()\"\n >\n <kpt-icon name=\"x\" />\n </button>\n </figure>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { KptFileUpload, KptI18n, KptIcon, KptInput } from '@konce-pt/angular';\n\n/** Domyślny limit pliku. Data URL puchnie o ~⅓, a wartość leci w `locationCreate`. */\nconst DEFAULT_MAX_BYTES = 2 * 1024 * 1024;\n\n/**\n * Pole „zdjęcie\" formularza dodawania lokalizacji (`type: 'image'` w schemie kategorii).\n *\n * Wartością jest zawsze **string**: albo `data:` z wybranego pliku, albo adres wklejony\n * przez użytkownika. Karta miejsca nie rozróżnia jednego od drugiego, więc formularz\n * nie musi decydować za aplikację, gdzie zdjęcia mieszkają.\n *\n * Plik czytamy w przeglądarce i nigdzie nie wysyłamy — biblioteka nie ma i nie chce\n * mieć wiedzy o storage'u aplikacji.\n */\n@Component({\n selector: 'kpt-map-image-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptFileUpload, KptIcon, KptInput],\n templateUrl: './map-image-field.component.html',\n styleUrl: './map-image-field.component.scss',\n host: { class: 'kpt-map-image-field' },\n})\nexport class KptMapImageField implements FormValueControl<string> {\n readonly value = model<string>('');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n /** Górny limit pliku w bajtach. */\n readonly maxBytes = input(DEFAULT_MAX_BYTES);\n\n readonly touch = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n\n /** Pliki trzymane wyłącznie po to, żeby `kpt-file-upload` miał co pokazać. */\n protected readonly files = model<File[]>([]);\n /** Komunikat o zbyt dużym pliku; walidacja rozmiaru nie ma sensu w schemie. */\n protected readonly sizeError = signal<string | null>(null);\n\n protected readonly urlValue = computed(() => (this.value().startsWith('data:') ? '' : this.value()));\n protected readonly preview = computed(() => this.value() || null);\n\n protected readonly maxLabel = computed(\n () => `${Math.round(this.maxBytes() / (1024 * 1024))} MB`,\n );\n\n protected onFiles(files: File[]): void {\n const file = files[0];\n this.files.set(file ? [file] : []);\n this.sizeError.set(null);\n this.touch.emit();\n\n if (!file) {\n // Usunięcie pliku czyści wartość tylko wtedy, gdy to plik ją ustawił.\n if (this.value().startsWith('data:')) this.value.set('');\n return;\n }\n\n if (file.size > this.maxBytes()) {\n this.sizeError.set(this.i18n.t('map.field.imageTooLarge', { max: this.maxLabel() }));\n this.files.set([]);\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => this.value.set(String(reader.result ?? ''));\n reader.onerror = () => this.sizeError.set(this.i18n.t('map.field.imageTooLarge', { max: this.maxLabel() }));\n reader.readAsDataURL(file);\n }\n\n protected onUrl(url: string): void {\n // Adres i plik wykluczają się — dwa źródła jednej wartości myliłyby użytkownika.\n if (url) this.files.set([]);\n this.sizeError.set(null);\n this.value.set(url);\n }\n\n protected clear(): void {\n this.files.set([]);\n this.sizeError.set(null);\n this.value.set('');\n this.touch.emit();\n }\n}\n","@if (formRoot(); as root) {\n<form class=\"kpt-map-create__form\" [formRoot]=\"root\" (submit)=\"onSubmit()\">\n <p class=\"kpt-map-create__coords\">\n <span>{{ i18n.t('map.latitude') }}: <strong>{{ coords().lat }}</strong></span>\n <span>{{ i18n.t('map.longitude') }}: <strong>{{ coords().lng }}</strong></span>\n </p>\n\n @if (geocoding()) {\n <p class=\"kpt-map-create__geo\" aria-live=\"polite\">{{ i18n.t('map.lookingUpAddress') }}</p>\n } @else if (address(); as adres) {\n @if (adres.label) {\n <p class=\"kpt-map-create__geo\" aria-live=\"polite\">{{ adres.label }}</p>\n }\n } @else if (hasAutofill()) {\n <p class=\"kpt-map-create__geo\" aria-live=\"polite\">{{ i18n.t('map.addressNotFound') }}</p>\n }\n\n @for (def of fields(); track def.key) {\n <kpt-form-field\n [label]=\"def.label\"\n [hint]=\"def.hint ?? ''\"\n [error]=\"errorOf(def.key)\"\n [required]=\"!!def.required\"\n [controlId]=\"hasOwnInput(def) ? controlId(def) : ''\"\n >\n @switch (def.type) {\n @case ('textarea') {\n <kpt-textarea [formField]=\"$any(fieldOf(def.key))\" [placeholder]=\"def.placeholder ?? ''\" />\n }\n @case ('number') {\n <!-- Bez [min]/[max]: FormField wyprowadza je z walidatorów `min()`/`max()`\n zadeklarowanych w schemie i zabrania jawnego wiązania (NG8022). -->\n <kpt-input-number [formField]=\"$any(fieldOf(def.key))\" [placeholder]=\"def.placeholder ?? ''\" />\n }\n @case ('date') {\n <kpt-datepicker\n [formField]=\"$any(fieldOf(def.key))\"\n [placeholder]=\"def.placeholder ?? ''\"\n [minDate]=\"$any(def.min ?? null)\"\n [maxDate]=\"$any(def.max ?? null)\"\n />\n }\n @case ('select') {\n <kpt-select\n [formField]=\"$any(fieldOf(def.key))\"\n [options]=\"optionsOf(def)\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n @case ('multiselect') {\n <kpt-select\n [formField]=\"$any(fieldOf(def.key))\"\n [options]=\"optionsOf(def)\"\n [placeholder]=\"def.placeholder ?? ''\"\n multiple\n />\n }\n @case ('checkbox') {\n <kpt-checkbox [formField]=\"$any(fieldOf(def.key))\" [label]=\"def.placeholder ?? ''\" />\n }\n @case ('tel') {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n type=\"tel\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n @case ('email') {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n type=\"email\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n @case ('url') {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n type=\"url\"\n [placeholder]=\"def.placeholder ?? 'https://'\"\n />\n }\n @case ('image') {\n <kpt-map-image-field [formField]=\"$any(fieldOf(def.key))\" />\n }\n @case ('hours') {\n <kpt-map-hours-field [formField]=\"$any(fieldOf(def.key))\" />\n }\n @default {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n }\n </kpt-form-field>\n }\n\n <div class=\"kpt-map-create__actions\">\n <kpt-button type=\"button\" variant=\"text\" (click)=\"cancelled.emit()\">\n {{ i18n.t('map.cancel') }}\n </kpt-button>\n <kpt-button type=\"submit\" [disabled]=\"formInvalid()\">{{ i18n.t('map.save') }}</kpt-button>\n </div>\n</form>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n runInInjectionContext,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport {\n FormField,\n FormRoot,\n email,\n form,\n max,\n min,\n pattern,\n required,\n submit,\n validate,\n} from '@angular/forms/signals';\nimport {\n KptButton,\n KptCheckbox,\n KptDatepicker,\n KptFormField,\n KptI18n,\n KptInput,\n KptInputNumber,\n KptSelect,\n KptTextarea,\n type KptOption,\n} from '@konce-pt/angular';\nimport { emptyWeek, parseTime, weekdayName } from '../core/hours';\nimport type {\n KptLatLng,\n KptMapAddress,\n KptMapCategory,\n KptMapFieldDef,\n KptMapFieldType,\n KptMapOpeningHours,\n} from '../core/types';\nimport { KPT_MAP_GEOCODER, type KptMapGeocoderPort } from './geocoder.port';\nimport { KptMapHoursField } from './map-hours-field.component';\nimport { KptMapImageField } from './map-image-field.component';\n\n/** Pusta wartość właściwa dla typu pola — formularz startuje bez `undefined`. */\nfunction initialValue(def: KptMapFieldDef): unknown {\n if (def.initial !== undefined) return def.initial;\n switch (def.type) {\n case 'number':\n return null;\n case 'checkbox':\n return false;\n case 'multiselect':\n return [];\n case 'select':\n return null;\n case 'hours':\n return emptyWeek();\n default:\n return '';\n }\n}\n\n/** Typy pól, które przyjmą fragment adresu. Data czy liczba nie mają z nim nic wspólnego. */\nconst TEKSTOWE = new Set<KptMapFieldType>(['text', 'textarea']);\n\nfunction initialModel(fields: readonly KptMapFieldDef[]): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const def of fields) out[def.key] = initialValue(def);\n return out;\n}\n\n/**\n * Treść dialogu „dodaj lokalizację\" budowana ze schemy kategorii (`category.fields`).\n *\n * Przy dynamicznej schemie typowanie pól znika — model to `Record<string, unknown>`,\n * a ścieżki walidatorów trzeba rzutować. Reszta kontraktu Signal Forms zostaje bez zmian:\n * walidatory deklarujemy raz, a bramka „nie strasz czerwienią\" siedzi w prezentacji.\n */\n@Component({\n selector: 'kpt-map-create-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n FormRoot,\n FormField,\n KptFormField,\n KptInput,\n KptTextarea,\n KptInputNumber,\n KptDatepicker,\n KptSelect,\n KptCheckbox,\n KptButton,\n KptMapHoursField,\n KptMapImageField,\n ],\n templateUrl: './map-create-dialog.component.html',\n styleUrl: './map-create-dialog.component.scss',\n host: { class: 'kpt-map-create' },\n})\nexport class KptMapCreateDialog {\n readonly category = input.required<KptMapCategory>();\n readonly at = input.required<KptLatLng>();\n\n /**\n * Geokoder tego formularza. Podany wygrywa nad `KPT_MAP_GEOCODER` z DI — `kpt-map` podaje\n * tędy port swojej mapy, bo geokoder jest per mapa, a nie per aplikacja.\n */\n readonly geocoder = input<KptMapGeocoderPort | null>(null);\n\n readonly save = output<Record<string, unknown>>();\n readonly cancelled = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n private readonly injector = inject(Injector);\n /** Opcjonalny — wejście `[geocoder]` i tak ma nad nim pierwszeństwo. */\n private readonly injectedGeocoder = inject(KPT_MAP_GEOCODER, { optional: true });\n\n /** Rozstrzygnięty port: wejście przed DI. Bez obu formularz po prostu nie podpowiada adresu. */\n private readonly port = computed(() => this.geocoder() ?? this.injectedGeocoder);\n\n /** Trwa zapytanie do geokodera — szablon pokazuje wtedy notkę zamiast ciszy. */\n protected readonly geocoding = signal(false);\n /** Ostatnio ustalony adres; `label` bywa czytelniejszy niż suma pól. */\n protected readonly address = signal<KptMapAddress | null>(null);\n\n protected readonly fields = computed<readonly KptMapFieldDef[]>(() => this.category().fields ?? []);\n\n /** Czy kategoria ma pola do podpowiedzenia i jest czym je podpowiedzieć. */\n protected readonly hasAutofill = computed(\n () => !!this.port() && this.fields().some((f) => f.autofill && TEKSTOWE.has(f.type)),\n );\n\n /**\n * Model i formularz dla aktualnej kategorii. Budowane w efekcie, nie w `computed()`,\n * bo `form()` zakłada dwie rzeczy, których ciało `computed()` nie spełnia:\n *\n * - wstrzykuje sobie zależności → stąd `runInInjectionContext`;\n * - zakłada własny `effect()`, a tego nie wolno tworzyć w kontekście reaktywnym\n * (NG0602) → stąd `untracked`, które zdejmuje aktywnego konsumenta.\n *\n * Zależność od `fields()` zostaje śledzona na zewnątrz `untracked`, więc zmiana\n * kategorii przebudowuje formularz — inny zestaw pól to inny formularz, a Signal Forms\n * wiąże schemę tylko raz, przy tworzeniu.\n */\n private readonly built = signal<{\n model: WritableSignal<Record<string, unknown>>;\n form: ReturnType<typeof form<Record<string, unknown>>>;\n } | null>(null);\n\n constructor() {\n effect(() => {\n const fields = this.fields();\n untracked(() => {\n const model = signal(initialModel(fields));\n const f = runInInjectionContext(this.injector, () =>\n form(model, (path) => {\n // Ścieżki są dynamiczne, więc indeksujemy proxy po kluczu — stąd rzutowanie.\n const paths = path as unknown as Record<string, never>;\n for (const def of fields) {\n const node = paths[def.key];\n if (!node) continue;\n if (def.required) {\n required(node, { message: this.i18n.t('map.fieldRequired', { label: def.label }) });\n }\n if (def.type === 'number') {\n if (typeof def.min === 'number') min(node, def.min);\n if (typeof def.max === 'number') max(node, def.max);\n }\n if (def.type === 'email') {\n email(node, { message: this.i18n.t('map.field.invalidEmail') });\n }\n if (def.type === 'url') {\n pattern(node, /^https?:\\/\\/\\S+$/i, {\n message: this.i18n.t('map.field.invalidUrl'),\n });\n }\n if (def.type === 'hours') {\n validate(node, (ctx) => this.hoursError(ctx.value() as KptMapOpeningHours));\n }\n }\n }),\n );\n this.built.set({ model, form: f });\n });\n });\n\n this.watchGeocoder();\n }\n\n /**\n * Podpowiada adres z geokodowania wstecznego współrzędnych kliknięcia.\n *\n * Wypełnia wyłącznie pola z `autofill` i wyłącznie te, które są jeszcze puste —\n * podpowiedź nigdy nie kasuje tego, co użytkownik zdążył wpisać. Brak portu\n * `KPT_MAP_GEOCODER` albo nieudane zapytanie to nie błąd: pola zostają puste.\n */\n private watchGeocoder(): void {\n effect((onCleanup) => {\n const geocoder = this.port();\n const at = this.at();\n const fields = this.fields();\n const built = this.built();\n if (!geocoder || !built) return;\n\n const doUzupelnienia = fields.filter((f) => f.autofill && TEKSTOWE.has(f.type));\n if (doUzupelnienia.length === 0) return;\n\n this.geocoding.set(true);\n const subscription = geocoder\n .reverse(at, { language: this.i18n.locale() })\n .subscribe({\n next: (address) => {\n this.geocoding.set(false);\n this.address.set(address);\n if (!address) return;\n built.model.update((current) => {\n const next = { ...current };\n for (const def of doUzupelnienia) {\n const wartosc = address[def.autofill!];\n // Puste pole = to, czego użytkownik nie tknął.\n if (typeof wartosc === 'string' && wartosc && !next[def.key]) next[def.key] = wartosc;\n }\n return next;\n });\n },\n error: () => this.geocoding.set(false),\n });\n onCleanup(() => {\n subscription.unsubscribe();\n this.geocoding.set(false);\n });\n });\n }\n\n /** `null` tylko między utworzeniem komponentu a pierwszym przebiegiem efektu. */\n protected readonly formRoot = computed(() => this.built()?.form ?? null);\n protected readonly formInvalid = computed(() => this.formRoot()?.().invalid() ?? true);\n\n /** Kontrolka pola po kluczu — szablon podaje ją do `[formField]`. */\n protected fieldOf(key: string): unknown {\n return (this.formRoot() as unknown as Record<string, unknown> | null)?.[key];\n }\n\n /** Komunikat pokazujemy dopiero po dotknięciu pola — bramka żyje w prezentacji. */\n protected errorOf(key: string): string | null {\n const node = this.fieldOf(key) as (() => { touched(): boolean; invalid(): boolean; errors(): { message?: string }[] }) | undefined;\n if (!node) return null;\n const state = node();\n if (!state.touched() || !state.invalid()) return null;\n return state.errors()[0]?.message ?? null;\n }\n\n /**\n * Dzień otwarty musi mieć obie godziny i różne od siebie. Dzień oznaczony jako\n * zamknięty przechodzi bez zastrzeżeń — to prawidłowa odpowiedź, a nie brak danych.\n */\n private hoursError(week: KptMapOpeningHours | undefined) {\n if (!week) return null;\n for (const day of week) {\n if (day.closed) continue;\n for (const range of day.ranges) {\n const from = parseTime(range.from);\n const to = parseTime(range.to);\n if (from === null || to === null || from === to) {\n return {\n kind: 'kptMapHoursIncomplete',\n message: this.i18n.t('map.field.hoursIncomplete', {\n day: weekdayName(day.day, this.i18n.locale()),\n }),\n };\n }\n }\n if (day.ranges.length === 0) {\n return {\n kind: 'kptMapHoursIncomplete',\n message: this.i18n.t('map.field.hoursIncomplete', {\n day: weekdayName(day.day, this.i18n.locale()),\n }),\n };\n }\n }\n return null;\n }\n\n protected optionsOf(def: KptMapFieldDef): KptOption<unknown>[] {\n return (def.options ?? []).map((o) => ({ value: o.value, label: o.label }));\n }\n\n protected controlId(def: KptMapFieldDef): string {\n return `kpt-map-field-${def.key}`;\n }\n\n /** Czy pole renderuje jeden `<input>`, na który może wskazać `label[for]`. */\n protected hasOwnInput(def: KptMapFieldDef): boolean {\n return def.type === 'text' || def.type === 'tel' || def.type === 'email' || def.type === 'url';\n }\n\n /** Współrzędne z prawego kliknięcia — pokazujemy je, ale nie pozwalamy edytować. */\n protected readonly coords = computed(() => {\n const at = this.at();\n return { lat: at.lat.toFixed(5), lng: at.lng.toFixed(5) };\n });\n\n protected async onSubmit(): Promise<void> {\n const built = this.built();\n if (!built) return;\n const { model, form: f } = built;\n // `submit()` sam oznacza całe drzewo jako dotknięte, więc błędy pokażą się od razu.\n await submit(f, {\n action: async () => {\n if (f().invalid()) return;\n this.save.emit({ ...model() });\n },\n });\n }\n}\n","@for (entry of entries(); track entry.category.id) {\n <button\n class=\"kpt-map-legend__item\"\n type=\"button\"\n [style.--_kpt-legend-color]=\"entry.colorVar\"\n [style.--_kpt-legend-fg]=\"entry.contrastVar\"\n [class.kpt-map-legend__item--off]=\"entry.hidden\"\n [attr.aria-pressed]=\"interactive() ? !entry.hidden : null\"\n [attr.aria-label]=\"interactive() ? label(entry) : null\"\n [disabled]=\"!interactive()\"\n (click)=\"toggle(entry)\"\n >\n <span class=\"kpt-map-legend__swatch\" aria-hidden=\"true\">\n @if (entry.category.icon) {\n <kpt-icon [name]=\"entry.category.icon\" />\n }\n </span>\n <span class=\"kpt-map-legend__label\">{{ entry.category.label }}</span>\n @if (entry.count !== null) {\n <span class=\"kpt-map-legend__count\">{{ entry.count }}</span>\n }\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { KptI18n, KptIcon } from '@konce-pt/angular';\nimport { colorVarOf, contrastVarOf } from '../core/marker-html';\nimport type { KptMapCategory } from '../core/types';\n\ninterface LegendEntry {\n category: KptMapCategory;\n colorVar: string;\n /** Kolor glifu na tle `colorVar`. Zaszyta biel gubi się na jasnych rolach (`muted`). */\n contrastVar: string;\n hidden: boolean;\n count: number | null;\n}\n\n/**\n * Legenda mapy — lista kategorii ze znacznikiem koloru i ikoną. Pozycje są przyciskami:\n * kliknięcie chowa i pokazuje kategorię (`hidden` dwukierunkowe).\n *\n * `kpt-map` renderuje ją sam pod mapą przy `[legend]=\"true\"`; kto chce ją gdzie indziej,\n * wyłącza tamto i wstawia ten komponent ręcznie.\n *\n * @example\n * <kpt-map-legend [categories]=\"categories\" [(hidden)]=\"hiddenCategories\" [counts]=\"counts\" />\n */\n@Component({\n selector: 'kpt-map-legend',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptIcon],\n templateUrl: './map-legend.component.html',\n styleUrl: './map-legend.component.scss',\n host: {\n class: 'kpt-map-legend',\n '[attr.data-orientation]': 'orientation()',\n role: 'group',\n '[attr.aria-label]': 'i18n.t(\"map.legend\")',\n },\n})\nexport class KptMapLegend {\n readonly categories = input.required<readonly KptMapCategory[]>();\n /** Identyfikatory ukrytych kategorii (dwukierunkowe). */\n readonly hidden = model<string[]>([]);\n /** Opcjonalne liczniki `{ categoryId: liczba }` — pokazywane przy etykiecie. */\n readonly counts = input<Record<string, number> | null>(null);\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n /** Wyłącza chowanie kategorii — legenda staje się czysto informacyjna. */\n readonly interactive = input(true);\n\n protected readonly i18n = inject(KptI18n);\n\n protected readonly entries = computed<LegendEntry[]>(() => {\n const hidden = new Set(this.hidden());\n const counts = this.counts();\n return this.categories()\n .filter((c) => c.legend !== false)\n .map((category) => ({\n category,\n colorVar: colorVarOf(category.color),\n contrastVar: contrastVarOf(category.color),\n hidden: hidden.has(category.id),\n count: counts ? (counts[category.id] ?? 0) : null,\n }));\n });\n\n protected toggle(entry: LegendEntry): void {\n if (!this.interactive()) return;\n const id = entry.category.id;\n this.hidden.update((current) =>\n current.includes(id) ? current.filter((c) => c !== id) : [...current, id],\n );\n }\n\n protected label(entry: LegendEntry): string {\n const key = entry.hidden ? 'map.showCategory' : 'map.hideCategory';\n return this.i18n.t(key, { category: entry.category.label });\n }\n}\n","<div class=\"kpt-map-search__field\">\n <span class=\"kpt-map-search__icon\" aria-hidden=\"true\">\n <kpt-icon name=\"search\" />\n </span>\n\n <input\n class=\"kpt-map-search__input\"\n type=\"text\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n [id]=\"uid\"\n [value]=\"query()\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"disabled() || !canSearch()\"\n [attr.aria-label]=\"i18n.t('map.search.label')\"\n [attr.aria-expanded]=\"hasPanel()\"\n [attr.aria-busy]=\"busy() ? 'true' : null\"\n [attr.aria-controls]=\"hasPanel() ? uid + '-panel' : null\"\n [attr.aria-activedescendant]=\"activeIndex() >= 0 ? optionId(activeIndex()) : null\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n\n @if (query()) {\n <button\n class=\"kpt-map-search__clear\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.search.clear')\"\n [title]=\"i18n.t('map.search.clear')\"\n (click)=\"clear()\"\n >\n <!-- `kpt-icon` sam ustawia sobie aria-hidden; nazwę niesie aria-label przycisku. -->\n <kpt-icon name=\"x\" />\n </button>\n }\n</div>\n\n@if (hasPanel()) {\n <div class=\"kpt-map-search__panel\" [id]=\"uid + '-panel'\">\n @if (tooShort()) {\n <p class=\"kpt-map-search__note\">{{ i18n.t('map.search.minLength', { count: minLength() }) }}</p>\n } @else if (busy()) {\n <!-- Ta sama nota dla listy i dla dociągania współrzędnych wybranej pozycji. -->\n <p class=\"kpt-map-search__note\">{{ i18n.t('map.search.searching') }}</p>\n } @else if (results().length) {\n <!-- Panel stoi w DOM obok pola, więc aktywną pozycję wskazuje `aria-activedescendant`. -->\n <ul class=\"kpt-map-search__list\" role=\"listbox\" [attr.aria-label]=\"i18n.t('map.search.results')\">\n @for (result of results(); track result.id; let i = $index) {\n <li\n class=\"kpt-map-search__option\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [class.is-active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"i === activeIndex()\"\n (mousedown)=\"$event.preventDefault(); pick(result)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n <span class=\"kpt-map-search__pin\" aria-hidden=\"true\">\n <kpt-icon name=\"map-pin\" />\n </span>\n <span class=\"kpt-map-search__label\">{{ result.label }}</span>\n </li>\n }\n </ul>\n } @else {\n <p class=\"kpt-map-search__note\">{{ i18n.t('map.search.noResults') }}</p>\n }\n </div>\n}\n\n<!-- Stan wyszukiwania dla czytnika — wzrokowo niesie go panel. -->\n<p class=\"kpt-map-search__status\" aria-live=\"polite\">{{ status() }}</p>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { KptI18n, KptIcon } from '@konce-pt/angular';\nimport type { Subscription } from 'rxjs';\nimport type { KptMapBounds, KptMapSearchResult, KptMapSuggestion } from '../core/types';\nimport { KPT_MAP_GEOCODER, type KptMapGeocoderPort } from './geocoder.port';\n\n/** Identyfikatory pozycji listy dla `aria-activedescendant` — muszą być unikalne w dokumencie. */\nlet nextId = 0;\n\n/**\n * Wyszukiwarka adresów: pole z podpowiedziami z geokodera. Wynik wyboru leci w `selected`,\n * a co z nim zrobić — decyduje rodzic (`kpt-map` przenosi na niego widok).\n *\n * Wymaga portu `KPT_MAP_GEOCODER` **z metodą `search()`** — biblioteka nie odpytuje cudzego\n * serwera bez zgody aplikacji. Bez portu pole renderuje się wyłączone, zamiast udawać, że\n * coś znajdzie; `kpt-map` idzie dalej i w ogóle go wtedy nie pokazuje.\n *\n * Świadomie **nie** stoi na `kpt-autocomplete`: tamten filtruje opcje po stronie klienta\n * (wyniki geokodera, tolerancyjne na literówki, wypadałyby z listy), jego wartością jest\n * sam `string` (nie ma czym przewieźć współrzędnych) i wymaga CDK Overlay, którego mapa\n * poza tym nie potrzebuje.\n *\n * @example\n * <kpt-map-search [viewbox]=\"bounds\" (selected)=\"goTo($event)\" />\n */\n@Component({\n selector: 'kpt-map-search',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptIcon],\n templateUrl: './map-search.component.html',\n styleUrl: './map-search.component.scss',\n host: { class: 'kpt-map-search' },\n})\nexport class KptMapSearch {\n /** Podpowiedź w pustym polu. Pusta oddaje głos słownikowi `map.search.placeholder`. */\n readonly placeholder = input<string>('');\n /** Od ilu znaków pytać geokoder. Krótsze frazy zwracają pół świata. */\n readonly minLength = input(3, { transform: numberAttribute });\n /** Ile milisekund ciszy przed zapytaniem. */\n readonly debounce = input(300, { transform: numberAttribute });\n /** Ile podpowiedzi najwyżej. */\n readonly limit = input(5, { transform: numberAttribute });\n /** Zawężenie twarde do krajów (ISO 3166-1 alpha-2) — wyniki spoza nich nie wrócą. */\n readonly countryCodes = input<readonly string[] | null>(null);\n /** Preferowany prostokąt wyników. Nie odcina reszty świata, tylko przesuwa ją niżej. */\n readonly viewbox = input<KptMapBounds | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Geokoder tego pola. Podany wygrywa nad `KPT_MAP_GEOCODER` z DI — `kpt-map` podaje tędy\n * port swojej mapy, bo geokoder jest per mapa, a nie per aplikacja. Bez niego wszystko\n * działa jak dotąd: port przychodzi z DI.\n */\n readonly geocoder = input<KptMapGeocoderPort | null>(null);\n\n /**\n * Wybrano miejsce. **Zawsze ze współrzędnymi**: podpowiedź, której dostawca ich nie podał,\n * pole najpierw uzupełnia przez `resolve()` portu, a dopiero potem emituje.\n */\n readonly selected = output<KptMapSearchResult>();\n /** Pole wyczyszczone — rodzic sprząta po sobie (np. chowa tymczasową pinezkę). */\n readonly cleared = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n private readonly injectedGeocoder = inject(KPT_MAP_GEOCODER, { optional: true });\n\n /** Rozstrzygnięty port: wejście przed DI. Czytany reaktywnie, bo mapa może go podmienić. */\n private readonly port = computed(() => this.geocoder() ?? this.injectedGeocoder);\n\n protected readonly uid = `kpt-map-search-${++nextId}`;\n\n /** Tekst widoczny w polu. Wybór podpowiedzi wpisuje tu jej etykietę. */\n protected readonly query = signal('');\n /**\n * Fraza do odpytania geokodera. Osobna od `query`, bo wybór podpowiedzi zmienia treść\n * pola — a to nie może wywołać kolejnego zapytania o coś, co już znaleźliśmy.\n */\n private readonly term = signal('');\n\n protected readonly results = signal<readonly KptMapSuggestion[]>([]);\n protected readonly loading = signal(false);\n /**\n * Trwa dociąganie współrzędnych wybranej podpowiedzi (`resolve()` portu). Osobne od\n * `loading`, bo to inny moment: tam czekamy na listę, tu na jedno konkretne miejsce.\n */\n protected readonly resolving = signal(false);\n /** Subskrypcja `resolve()` w locie — kolejny wybór i czyszczenie pola ją przerywają. */\n private pending: Subscription | null = null;\n /** Czy jakieś zapytanie już wróciło — bez tego „brak wyników\" mignąłby przed pierwszym. */\n protected readonly searched = signal(false);\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n\n /** Fraza za krótka, ale niepusta — zamiast ciszy pokazujemy, ile znaków brakuje. */\n protected readonly tooShort = computed(() => {\n const length = this.query().trim().length;\n return length > 0 && length < this.minLength();\n });\n\n protected readonly hasPanel = computed(\n () =>\n this.open() &&\n (this.tooShort() || this.busy() || this.results().length > 0 || this.searched()),\n );\n\n /** Cokolwiek leci do geokodera — lista albo pojedyncze miejsce. Jeden stan dla szablonu. */\n protected readonly busy = computed(() => this.loading() || this.resolving());\n\n protected readonly canSearch = computed(() => !!this.port()?.search);\n\n /** Nie udało się ustalić miejsca wybranej podpowiedzi — komunikat zamiast cichej ciszy. */\n private readonly unresolved = signal(false);\n\n /** Komunikat dla `aria-live` — czytnik dostaje stan, którego wzrokowo nie da się przegapić. */\n protected readonly status = computed(() => {\n if (this.tooShort()) return this.i18n.t('map.search.minLength', { count: this.minLength() });\n if (this.busy()) return this.i18n.t('map.search.searching');\n if (this.unresolved()) return this.i18n.t('map.search.noResults');\n if (!this.searched()) return '';\n const count = this.results().length;\n return count === 0\n ? this.i18n.t('map.search.noResults')\n : this.i18n.t('map.search.found', { count });\n });\n\n protected readonly placeholderText = computed(\n () => this.placeholder() || this.i18n.t('map.search.placeholder'),\n );\n\n constructor() {\n this.watchTerm();\n inject(DestroyRef).onDestroy(() => this.pending?.unsubscribe());\n }\n\n /**\n * Odpytuje geokoder po odczekaniu `debounce` od ostatniego znaku.\n *\n * Debounce stoi na `setTimeout`, a nie na operatorach rxjs: porty tego pakietu używają\n * wyłącznie `Observable`/`of`, a rxjs nie jest zadeklarowany jako `peerDependency`\n * biblioteki (wchodzi tranzytywnie przez `@angular/core`). `onCleanup` kasuje zarówno\n * niewystrzelony timer, jak i zapytanie w locie — adapter Nominatim przerywa wtedy\n * `fetch` własnym `AbortController`.\n */\n private watchTerm(): void {\n effect((onCleanup) => {\n const term = this.term().trim();\n const geocoder = this.port();\n\n if (!geocoder?.search || term.length < this.minLength()) {\n this.results.set([]);\n this.loading.set(false);\n this.searched.set(false);\n this.activeIndex.set(-1);\n return;\n }\n\n // Reszta opcji czytana bez śledzenia: zapytanie i tak leci po każdym znaku,\n // a tablica wpisana wprost w szablonie rodzica jest przy każdym przebiegu nowa\n // i sama w sobie wywoływałaby ten efekt w kółko.\n const [wait, options] = untracked(() => [\n this.debounce(),\n {\n language: this.i18n.locale(),\n limit: this.limit(),\n viewbox: this.viewbox() ?? undefined,\n countryCodes: this.countryCodes() ?? undefined,\n },\n ]);\n\n this.loading.set(true);\n let subscription: Subscription | null = null;\n\n const timer = setTimeout(() => {\n subscription = geocoder.search!(term, options).subscribe({\n next: (results) => this.applyResults(results),\n // Nieudane zapytanie to pusta lista, a nie wywrotka pola.\n error: () => this.applyResults([]),\n });\n }, wait);\n\n onCleanup(() => {\n clearTimeout(timer);\n subscription?.unsubscribe();\n });\n });\n }\n\n private applyResults(results: readonly KptMapSuggestion[]): void {\n // Podpowiedź bez współrzędnych jest do czegokolwiek dobra tylko wtedy, gdy port umie\n // ją uzupełnić. Bez `resolve()` kliknięcie w nią nie miałoby dokąd polecieć, a pozycja,\n // która nic nie robi, jest gorsza od jej braku — więc taka nie trafia na listę.\n this.results.set(this.port()?.resolve ? results : results.filter((r) => r.at));\n this.loading.set(false);\n this.searched.set(true);\n this.activeIndex.set(-1);\n this.open.set(true);\n }\n\n protected optionId(index: number): string {\n return `${this.uid}-opt-${index}`;\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.query.set(value);\n this.term.set(value);\n this.open.set(true);\n this.unresolved.set(false);\n }\n\n protected onFocus(): void {\n this.open.set(true);\n }\n\n protected onBlur(): void {\n this.open.set(false);\n }\n\n /**\n * Wybór podpowiedzi. Dostawca, który podał współrzędne na liście, emituje natychmiast —\n * dla Nominatima i każdego geokodera pytanego wprost nic się nie zmienia.\n *\n * Podpowiedź bez `at` (Google Places Autocomplete) trzeba najpierw uzupełnić: jedno\n * wywołanie `resolve()` na *wybór*, nigdy w trakcie pisania. Panel zostaje otwarty\n * z komunikatem „Szukam…\", żeby czekanie nie wyglądało na zawieszenie pola.\n */\n protected pick(suggestion: KptMapSuggestion): void {\n // Etykieta wraca do pola, ale `term` zostaje — inaczej wybór odpaliłby kolejne zapytanie.\n this.query.set(suggestion.label);\n this.activeIndex.set(-1);\n this.unresolved.set(false);\n this.pending?.unsubscribe();\n this.pending = null;\n\n if (suggestion.at) {\n this.open.set(false);\n this.resolving.set(false);\n this.selected.emit(suggestion as KptMapSearchResult);\n return;\n }\n\n const geocoder = this.port();\n // Do listy trafiają tylko pozycje możliwe do obsłużenia, więc tu już nie ma czego ratować.\n if (!geocoder?.resolve) return;\n\n this.resolving.set(true);\n this.pending = geocoder.resolve(suggestion, { language: this.i18n.locale() }).subscribe({\n next: (result) => this.applyResolved(result),\n // Nieudane dociągnięcie to komunikat, a nie wywrotka pola.\n error: () => this.applyResolved(null),\n });\n }\n\n private applyResolved(result: KptMapSearchResult | null): void {\n this.resolving.set(false);\n this.pending = null;\n if (!result) {\n // Etykieta zostaje w polu, żeby dało się poprawić frazę zamiast pisać ją od zera.\n this.unresolved.set(true);\n this.open.set(true);\n return;\n }\n this.open.set(false);\n this.selected.emit(result);\n }\n\n protected clear(): void {\n this.pending?.unsubscribe();\n this.pending = null;\n this.resolving.set(false);\n this.unresolved.set(false);\n this.query.set('');\n this.term.set('');\n this.results.set([]);\n this.searched.set(false);\n this.activeIndex.set(-1);\n this.open.set(false);\n this.cleared.emit();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const results = this.results();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.open.set(true);\n this.activeIndex.set(Math.min(this.activeIndex() + 1, results.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.activeIndex.set(Math.max(this.activeIndex() - 1, 0));\n break;\n case 'Enter': {\n const result = results[this.activeIndex()];\n if (result) {\n // Pole bywa w formularzu aplikacji — Enter nie ma go wysyłać.\n event.preventDefault();\n this.pick(result);\n }\n break;\n }\n case 'Escape':\n // Pierwszy Esc zamyka listę, drugi czyści pole — jak w polu wyszukiwania przeglądarki.\n if (this.open()) this.open.set(false);\n else if (this.query()) this.clear();\n break;\n default:\n break;\n }\n }\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport type { KptLatLng, KptMapCategory, KptMapLocation } from '../core/types';\n\n/** Kontekst szablonu popupu — `$implicit` to lokalizacja. */\nexport interface KptMapPopupContext<T = unknown> {\n $implicit: KptMapLocation<T>;\n /** Skrót do `location.data`, żeby nie pisać `loc.data.x` w każdym wierszu. */\n data: T | undefined;\n category: KptMapCategory | undefined;\n /**\n * Odległość punktu w metrach od `[distanceFrom]`, a bez niego od pozycji użytkownika.\n * `null`, gdy nie ma punktu odniesienia — geolokalizacja jest wyłączona albo odmówiona.\n */\n distance: number | null;\n close: () => void;\n}\n\n/**\n * Szablon popupu szczegółów. Bez atrybutu `category` służy za wariant zapasowy\n * dla kategorii, które własnego szablonu nie mają.\n *\n * Typ `data` domyślnie jest luźny (jak `let-row` w tabeli CDK), bo Angular nie potrafi\n * przenieść generyka z `kpt-map` na dyrektywę osadzoną w jego treści. Kto chce pełnego\n * wnioskowania, wiąże `[kptMapPopupTypeFor]` z tą samą tablicą, którą karmi mapę —\n * wtedy `data` dostaje konkretny typ.\n *\n * @example\n * <ng-template kptMapPopup category=\"closure\" let-loc let-data=\"data\" let-dist=\"distance\">\n * <strong>{{ loc.title }}</strong>\n * <p>{{ data.address }}</p>\n * </ng-template>\n *\n * @example\n * // z wnioskowaniem typu\n * <ng-template kptMapPopup [kptMapPopupTypeFor]=\"locations()\" let-data=\"data\">\n * <p>{{ data.address }}</p>\n * </ng-template>\n */\n@Directive({ selector: 'ng-template[kptMapPopup]' })\nexport class KptMapPopupTemplate<T = any> {\n /** Kategoria, do której szablon się stosuje; pusta wartość = szablon zapasowy. */\n readonly category = input<string>('', { alias: 'category' });\n\n /**\n * Nośnik typu — w runtime nieużywany. Jedyne zadanie: pozwolić Angularowi wywnioskować\n * `T` z tablicy lokalizacji, tak jak `ngFor` wnioskuje typ elementu z bindowanej kolekcji.\n */\n readonly typeFor = input<readonly KptMapLocation<T>[] | undefined>(undefined, {\n alias: 'kptMapPopupTypeFor',\n });\n\n readonly templateRef = inject<TemplateRef<KptMapPopupContext<T>>>(TemplateRef);\n\n /** Zawęża typ kontekstu w szablonie (`strictTemplates`). */\n static ngTemplateContextGuard<T>(\n _dir: KptMapPopupTemplate<T>,\n _ctx: unknown,\n ): _ctx is KptMapPopupContext<T> {\n return true;\n }\n}\n\n/** Kontekst szablonu formularza dodawania lokalizacji. */\nexport interface KptMapCreateFormContext {\n $implicit: KptMapCreateFormApi;\n at: KptLatLng;\n category: KptMapCategory | undefined;\n}\n\nexport interface KptMapCreateFormApi {\n at: KptLatLng;\n category: KptMapCategory | undefined;\n /** Zamyka dialog bez zapisu. */\n close: () => void;\n /** Zamyka dialog i emituje `locationCreate` z podanymi wartościami. */\n submit: (value: Record<string, unknown>) => void;\n}\n\n/**\n * Własny formularz „dodaj lokalizację\". Jego obecność wyłącza formularz budowany\n * ze schemy kategorii.\n *\n * @example\n * <ng-template kptMapCreateForm let-api>\n * <button (click)=\"api.submit({ title: 'Nowy punkt' })\">Zapisz</button>\n * </ng-template>\n */\n@Directive({ selector: 'ng-template[kptMapCreateForm]' })\nexport class KptMapCreateFormTemplate {\n readonly templateRef = inject<TemplateRef<KptMapCreateFormContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: KptMapCreateFormTemplate,\n _ctx: unknown,\n ): _ctx is KptMapCreateFormContext {\n return true;\n }\n}\n","import { InjectionToken, type Provider } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport type { KptLatLng, KptMapGeolocationError, KptMapUserPosition } from '../core/types';\n\n/**\n * Źródło pozycji użytkownika. Port, a nie bezpośrednie `navigator.geolocation` — dzięki\n * temu Storybook i testy podstawiają stałą pozycję zamiast pytać przeglądarkę o zgodę.\n */\nexport interface KptMapGeolocationPort {\n /**\n * Strumień pozycji. `null` oznacza brak odczytu (brak zgody, wyłączony GPS, SSR).\n * Subskrypcja rozpoczyna nasłuch, a jej zamknięcie go kończy.\n */\n watch(options?: PositionOptions): Observable<KptMapUserPosition | null>;\n}\n\nexport const KPT_MAP_GEOLOCATION = new InjectionToken<KptMapGeolocationPort>('KPT_MAP_GEOLOCATION');\n\n/** Błąd geolokalizacji rozpoznany po kodzie — rzucany strumieniem, nie wyjątkiem. */\nexport class KptMapGeolocationFailure extends Error {\n constructor(readonly detail: KptMapGeolocationError) {\n super(detail.message);\n this.name = 'KptMapGeolocationFailure';\n }\n}\n\nconst DEFAULT_OPTIONS: PositionOptions = {\n enableHighAccuracy: true,\n // Pozycja starsza niż pół minuty jest już bezużyteczna dla „gdzie jestem\".\n maximumAge: 30_000,\n timeout: 15_000,\n};\n\n/**\n * Domyślna implementacja na `navigator.geolocation.watchPosition`.\n *\n * Uwaga: Geolocation API działa wyłącznie w bezpiecznym kontekście (HTTPS albo\n * `localhost`). Na `http://` z adresem IP przeglądarka odmówi — to nie jest błąd mapy.\n */\nexport class KptBrowserGeolocation implements KptMapGeolocationPort {\n watch(options?: PositionOptions): Observable<KptMapUserPosition | null> {\n // SSR i przeglądarki bez API: strumień kończy się jednym `null`, bez błędu.\n if (typeof navigator === 'undefined' || !navigator.geolocation) {\n return of(null);\n }\n\n return new Observable<KptMapUserPosition | null>((subscriber) => {\n const id = navigator.geolocation.watchPosition(\n (position) =>\n subscriber.next({\n at: { lat: position.coords.latitude, lng: position.coords.longitude },\n accuracy: position.coords.accuracy,\n timestamp: position.timestamp,\n }),\n (error) => subscriber.error(new KptMapGeolocationFailure(describeError(error))),\n { ...DEFAULT_OPTIONS, ...options },\n );\n return () => navigator.geolocation.clearWatch(id);\n });\n }\n}\n\nfunction describeError(error: GeolocationPositionError): KptMapGeolocationError {\n switch (error.code) {\n case error.PERMISSION_DENIED:\n return { kind: 'denied', message: error.message };\n case error.POSITION_UNAVAILABLE:\n return { kind: 'unavailable', message: error.message };\n case error.TIMEOUT:\n return { kind: 'timeout', message: error.message };\n default:\n return { kind: 'unsupported', message: error.message };\n }\n}\n\n/** Stała pozycja — Storybook, testy, demo bez pytania o zgodę. */\nexport class KptMapGeolocationStub implements KptMapGeolocationPort {\n constructor(\n private readonly at: KptLatLng,\n private readonly accuracy = 50,\n ) {}\n\n watch(): Observable<KptMapUserPosition | null> {\n return of({ at: this.at, accuracy: this.accuracy, timestamp: Date.now() });\n }\n}\n\n/**\n * Podstawia stałą pozycję zamiast prawdziwej geolokalizacji.\n *\n * @example\n * providers: [provideKptMapGeolocationStub({ lat: 52.23, lng: 21.01 })]\n */\nexport function provideKptMapGeolocationStub(at: KptLatLng, accuracy = 50): Provider {\n return { provide: KPT_MAP_GEOLOCATION, useValue: new KptMapGeolocationStub(at, accuracy) };\n}\n","/*\n * Adapter Google Maps. Jedyne miejsce w bibliotece, które zna `google.maps` — reszta kodu\n * rozmawia wyłącznie przez `KptMapEngine`, tak samo jak z Leafletem.\n *\n * API Google ładujemy dopiero przy pierwszej mapie, wstrzykując skrypt do dokumentu:\n * kto nie użyje tego silnika, nie pobierze ani bajta. Zero zależności npm — bootstrap\n * Google to kilkanaście linijek, a paczka `@googlemaps/js-api-loader` dokładałaby wersję\n * do pilnowania w zamian za to samo.\n *\n * **Licencja.** Ten silnik jest warunkiem, pod którym wolno w ogóle użyć geokodera Google:\n * Service Specific Terms §6.2 i §14.2 zabraniają pokazywać wyniki Geocoding API i Places API\n * „in conjunction with a non-Google map\". Z silnikiem `leaflet` adapter Google jest niezgodny\n * z umową — z tym jest w porządku.\n */\nimport type {\n KptMapEngine,\n KptMapEngineEvents,\n KptMapEngineInit,\n KptMapPointerEvent,\n KptMapRenderedMarker,\n} from '../core/engine';\nimport { metersPerPixel, project, unproject } from '../core/geo';\nimport type { KptLatLng, KptMapBounds, KptMapPoint, KptMapUserPosition } from '../core/types';\n\n/**\n * Namespace `google.maps`. Świadomie `any` — pełne typy przychodzą z opcjonalnego\n * `@types/google.maps`, a biblioteka nie może od nich zależeć przy kompilacji.\n */\nexport type KptGoogleMapsApi = any;\ntype GoogleMaps = KptGoogleMapsApi;\n\nexport interface KptGoogleOptions {\n /** Klucz API z Google Cloud. Wymagany. */\n apiKey: string;\n /**\n * Identyfikator stylu mapy z konsoli Google (*Map management → Create Map ID*).\n *\n * **Wymagany.** Bez niego nie działa `AdvancedMarkerElement`, a znaczniki tej biblioteki\n * to gotowy HTML z `marker-html.ts` — starsze `Marker` nie umie go przyjąć.\n */\n mapId: string;\n /** Wersja API. Domyślnie `weekly`. */\n version?: string;\n /** Język etykiet na mapie (kod ISO 639-1). Domyślnie język przeglądarki. */\n language?: string;\n /** Region wpływający na nazewnictwo i granice sporne (ISO 3166-1 alpha-2). */\n region?: string;\n /** Dolny limit zoomu. Domyślnie 2 — niżej świat powtarza się w poziomie. */\n minZoom?: number;\n /** Górny limit zoomu. Domyślnie 21. */\n maxZoom?: number;\n /** Zoom kółkiem myszy. Domyślnie włączony. */\n scrollWheelZoom?: boolean;\n}\n\n/**\n * Tyle z `KptGoogleOptions`, ile trzeba do wczytania samego API. Bez `mapId` — ten dotyczy\n * wyglądu mapy, a API potrzebują też usługi, które żadnej mapy nie rysują.\n */\nexport type KptGoogleLoadOptions = Pick<\n KptGoogleOptions,\n 'apiKey' | 'version' | 'language' | 'region'\n>;\n\nconst LOAD_ERROR =\n 'kpt-map: nie udało się załadować Google Maps JavaScript API. ' +\n 'Sprawdź klucz (`apiKey`), czy Maps JavaScript API jest włączone w projekcie ' +\n 'i czy restrykcja domenowa klucza obejmuje ten adres.';\n\n/** Nazwa globalnego callbacku, którego wymaga `loading=async`. */\nconst CALLBACK = '__kptGoogleMapsReady';\n\nlet modulePromise: Promise<GoogleMaps> | null = null;\n\n/**\n * Ładuje Google Maps JavaScript API raz na aplikację. Gdy `google.maps` już istnieje — bo\n * aplikacja wstawiła skrypt sama albo stoi tu druga mapa — korzystamy z tego, co jest: drugie\n * wczytanie Google i tak odrzuca, wypisując ostrzeżenie do konsoli.\n *\n * Publiczne, bo silnik nie jest jedynym, kto tego API potrzebuje. Geokoder Google **musi**\n * iść przez SDK, a nie przez REST: web service `/maps/api/geocode/json` odrzuca klucze\n * z restrykcją `Referer` („API keys with referer restrictions cannot be used with this API\"),\n * a to jedyna restrykcja, jaką da się sensownie nałożyć na klucz leżący w bundlu przeglądarki.\n * Wywołania z załadowanego SDK autoryzują się tak samo jak sama mapa.\n *\n * Adaptera geokodera biblioteka nadal nie dostarcza — tylko drogę do API, którą i tak\n * otwiera silnikowi. Powody stoją przy `provideKptGoogleMap` i w `llms.txt`.\n */\nexport async function loadGoogleMapsApi(options: KptGoogleLoadOptions): Promise<KptGoogleMapsApi> {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n throw new Error('kpt-map: silnik Google Maps wymaga przeglądarki.');\n }\n\n const existing = (window as Record<string, any>)['google']?.maps;\n if (existing?.importLibrary) return existing;\n\n modulePromise ??= new Promise<GoogleMaps>((resolve, reject) => {\n const params = new URLSearchParams({\n key: options.apiKey,\n v: options.version ?? 'weekly',\n loading: 'async',\n callback: CALLBACK,\n });\n if (options.language) params.set('language', options.language);\n if (options.region) params.set('region', options.region);\n\n (window as Record<string, any>)[CALLBACK] = () => {\n delete (window as Record<string, any>)[CALLBACK];\n resolve((window as Record<string, any>)['google'].maps);\n };\n\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?${params}`;\n script.async = true;\n script.onerror = () => {\n modulePromise = null; // pozwól spróbować ponownie po poprawieniu klucza\n reject(new Error(LOAD_ERROR));\n };\n document.head.append(script);\n });\n\n return modulePromise;\n}\n\n/** Fabryka silnika — każda mapa dostaje własną instancję. */\nexport function createGoogleEngine(options: KptGoogleOptions): KptMapEngine {\n return new GoogleEngine(options);\n}\n\nclass GoogleEngine implements KptMapEngine {\n readonly kind = 'google' as const;\n\n private maps: GoogleMaps | null = null;\n private markerLib: GoogleMaps | null = null;\n private map: any = null;\n private host: HTMLElement | null = null;\n\n private userMarker: any = null;\n /** Krąg dokładności jest własnym `<div>`, nie `google.maps.Circle` — patrz `setUserPosition`. */\n private accuracyEl: HTMLElement | null = null;\n private accuracyMeters = 0;\n private accuracyAt: KptLatLng | null = null;\n\n /** Znaczniki po `id` wraz z ich sprzątaniem — bez tego każdy przelicz przerysowywałby mapę. */\n private readonly markers = new Map<string, { marker: any; inner: HTMLElement; dispose: () => void }>();\n private readonly listeners: any[] = [];\n private readonly handlers: { [K in keyof KptMapEngineEvents]?: KptMapEngineEvents[K][] } = {};\n\n constructor(private readonly options: KptGoogleOptions) {}\n\n async init(host: HTMLElement, opts: KptMapEngineInit): Promise<void> {\n const maps = (this.maps = await loadGoogleMapsApi(this.options));\n // Pod nazwą `Map` kryje się konstruktor Google, nie wbudowana kolekcja — stąd alias.\n const [{ Map: GoogleMap }, markerLib] = await Promise.all([\n maps.importLibrary('maps'),\n maps.importLibrary('marker'),\n ]);\n this.markerLib = markerLib;\n this.host = host;\n\n this.map = new GoogleMap(host, {\n center: { lat: opts.center.lat, lng: opts.center.lng },\n zoom: opts.zoom,\n minZoom: opts.minZoom ?? this.options.minZoom ?? 2,\n maxZoom: opts.maxZoom ?? this.options.maxZoom ?? 21,\n mapId: this.options.mapId,\n // Kontrolki rysuje warstwa Angulara — te same przyciski w obu silnikach.\n disableDefaultUI: true,\n // POI Google przechwytywałyby kliknięcia przeznaczone dla mapy (menu „dodaj lokalizację\").\n clickableIcons: false,\n scrollwheel: this.options.scrollWheelZoom ?? true,\n restriction: opts.maxBounds\n ? { latLngBounds: this.toLatLngBounds(opts.maxBounds), strictBounds: true }\n : undefined,\n });\n\n // `opts.tileUrl` i `opts.attribution` są tu bez znaczenia: kafle i atrybucję daje Google,\n // a jej zasłonięcie albo usunięcie łamie warunki korzystania z usługi.\n\n this.on_(this.map, 'bounds_changed', () => this.emit('move'));\n this.on_(this.map, 'idle', () => this.emit('moveend'));\n this.on_(this.map, 'zoom_changed', () => {\n // Krąg dokładności ma stały promień w metrach, więc przy każdym zoomie zmienia piksele.\n this.resizeAccuracy();\n this.emit('zoomend');\n });\n this.on_(this.map, 'click', (e: any) => this.emit('click', this.toPointerEvent(e)));\n this.on_(this.map, 'contextmenu', (e: any) => {\n // Menu przeglądarki zasłoniłoby własne „Dodaj lokalizację\".\n e.domEvent?.preventDefault();\n this.emit('contextmenu', this.toPointerEvent(e));\n });\n\n // Pierwszy `idle` znaczy, że mapa zna już swój rozmiar i zasięg.\n await new Promise<void>((resolve) => {\n this.maps.event.addListenerOnce(this.map, 'idle', () => resolve());\n });\n }\n\n destroy(): void {\n for (const { marker, dispose } of this.markers.values()) {\n dispose();\n marker.map = null;\n }\n this.markers.clear();\n\n if (this.userMarker) this.userMarker.map = null;\n this.userMarker = null;\n this.accuracyEl = null;\n this.accuracyAt = null;\n\n for (const listener of this.listeners) listener.remove?.();\n this.listeners.length = 0;\n\n // Google nie ma odpowiednika `map.remove()` — kontener czyścimy sami.\n if (this.map) this.maps?.event.clearInstanceListeners(this.map);\n this.host?.replaceChildren();\n this.map = null;\n this.host = null;\n }\n\n setView(center: KptLatLng, zoom: number, animate = true): void {\n if (!this.map) return;\n const at = { lat: center.lat, lng: center.lng };\n if (animate) {\n this.map.panTo(at);\n this.map.setZoom(zoom);\n } else {\n this.map.moveCamera({ center: at, zoom });\n }\n }\n\n fitBounds(bounds: KptMapBounds, paddingPx = 0): void {\n this.map?.fitBounds(this.toLatLngBounds(bounds), paddingPx);\n }\n\n panBy(offset: KptMapPoint): void {\n this.map?.panBy(offset.x, offset.y);\n }\n\n getCenter(): KptLatLng {\n const c = this.map.getCenter();\n return { lat: c.lat(), lng: c.lng() };\n }\n\n getZoom(): number {\n return this.map.getZoom();\n }\n\n /**\n * Zasięg widoku. `getBounds()` bywa `undefined`, zanim mapa policzy pierwszy układ —\n * liczymy go wtedy z rdzenia, zamiast oddawać `null` przez kontrakt, który go nie przewiduje.\n */\n getBounds(): KptMapBounds {\n const b = this.map?.getBounds();\n if (b) {\n const ne = b.getNorthEast();\n const sw = b.getSouthWest();\n return { south: sw.lat(), west: sw.lng(), north: ne.lat(), east: ne.lng() };\n }\n const size = this.getSize();\n const nw = this.unproject({ x: 0, y: 0 });\n const se = this.unproject({ x: size.width, y: size.height });\n return { south: se.lat, west: nw.lng, north: nw.lat, east: se.lng };\n }\n\n getSize(): { width: number; height: number } {\n const rect = this.host?.getBoundingClientRect();\n return { width: rect?.width ?? 0, height: rect?.height ?? 0 };\n }\n\n /**\n * Współrzędne → piksele kontenera.\n *\n * Świadomie **nie** przez `map.getProjection()`: ten zwraca `null` do pierwszego\n * `projection_changed` i tak czy owak wymaga ręcznego przeliczenia na piksele kontenera.\n * Rdzeń (`core/geo.ts`) ma dokładnie tę matematykę — tę samą, na której stoi grupowanie\n * i adapter Leafleta — więc popup ląduje piksel w piksel tak samo w obu silnikach.\n * Działa też dla zoomu ułamkowego, którego Google używa przy gestach.\n */\n project(at: KptLatLng): KptMapPoint {\n const zoom = this.getZoom();\n const size = this.getSize();\n const origin = project(this.getCenter(), zoom);\n const point = project(at, zoom);\n return {\n x: point.x - origin.x + size.width / 2,\n y: point.y - origin.y + size.height / 2,\n };\n }\n\n unproject(point: KptMapPoint): KptLatLng {\n const zoom = this.getZoom();\n const size = this.getSize();\n const origin = project(this.getCenter(), zoom);\n return unproject(\n { x: origin.x + point.x - size.width / 2, y: origin.y + point.y - size.height / 2 },\n zoom,\n );\n }\n\n /**\n * Wymienia zestaw znaczników różnicowo — znaczniki o niezmienionym `id` zostają na miejscu,\n * inaczej każdy przelicz gasiłby animacje i migotał.\n */\n setMarkers(next: readonly KptMapRenderedMarker[]): void {\n if (!this.map || !this.markerLib) return;\n const { AdvancedMarkerElement } = this.markerLib;\n const seen = new Set<string>();\n\n for (const m of next) {\n seen.add(m.id);\n const existing = this.markers.get(m.id);\n if (existing) {\n existing.marker.position = { lat: m.at.lat, lng: m.at.lng };\n if (m.zIndex !== undefined) existing.marker.zIndex = m.zIndex;\n this.fillMarker(existing.inner, m);\n continue;\n }\n\n const { anchor, inner } = this.buildMarkerContent(m);\n const marker = new AdvancedMarkerElement({\n map: this.map,\n position: { lat: m.at.lat, lng: m.at.lng },\n content: anchor,\n zIndex: m.zIndex ?? 0,\n });\n\n /*\n * Kliknięcie łapiemy listenerem DOM na własnej treści, a nie zdarzeniem `gmp-click`\n * z `gmpClickable: true`. Powód jest ten sam, dla którego adapter Leafleta woła\n * `L.DomEvent.stopPropagation`: bez zatrzymania propagacji to samo kliknięcie doszłoby\n * do mapy i `onMapClick()` zamknąłby popup w tej samej klatce, w której go otwieramy.\n * Przy okazji odpada zależność od tego, jak `gmp-click` zachowuje się w danej wersji API.\n * Dostępność bez zmian — etykietę niesie `aria-label` w HTML-u ikony.\n */\n const onClick = (event: MouseEvent) => {\n event.stopPropagation();\n this.emit('markerclick', m.id, this.fromDomEvent(event, m.at));\n };\n inner.addEventListener('click', onClick);\n\n this.markers.set(m.id, {\n marker,\n inner,\n dispose: () => inner.removeEventListener('click', onClick),\n });\n }\n\n for (const [id, entry] of this.markers) {\n if (seen.has(id)) continue;\n entry.dispose();\n entry.marker.map = null;\n this.markers.delete(id);\n }\n }\n\n setUserPosition(position: KptMapUserPosition | null, html: string): void {\n if (!this.map || !this.markerLib) return;\n const { AdvancedMarkerElement } = this.markerLib;\n\n if (!position) {\n if (this.userMarker) this.userMarker.map = null;\n this.userMarker = null;\n this.accuracyEl = null;\n this.accuracyAt = null;\n return;\n }\n\n const at = { lat: position.at.lat, lng: position.at.lng };\n this.accuracyMeters = position.accuracy;\n this.accuracyAt = position.at;\n\n if (this.userMarker) {\n this.userMarker.position = at;\n this.userMarker.content = this.buildUserContent(html);\n } else {\n this.userMarker = new AdvancedMarkerElement({\n map: this.map,\n position: at,\n content: this.buildUserContent(html),\n // Nad znacznikami lokalizacji — własne położenie ma być zawsze widoczne.\n zIndex: 1000,\n });\n }\n this.resizeAccuracy();\n }\n\n /** Google dostarcza własne kafle i własną atrybucję — nie ma czego podmieniać. */\n setTileSource(): void {\n // celowo puste\n }\n\n setMaxBounds(bounds: KptMapBounds | null): void {\n this.map?.setOptions({\n restriction: bounds ? { latLngBounds: this.toLatLngBounds(bounds), strictBounds: true } : null,\n });\n }\n\n /** Google sam reaguje na zmianę rozmiaru kontenera — nie ma odpowiednika `invalidateSize`. */\n invalidateSize(): void {\n // celowo puste\n }\n\n on<K extends keyof KptMapEngineEvents>(event: K, handler: KptMapEngineEvents[K]): void {\n (this.handlers[event] ??= [] as never[]).push(handler as never);\n }\n\n // ── prywatne ────────────────────────────────────────────────────────────────\n\n private emit<K extends keyof KptMapEngineEvents>(\n event: K,\n ...args: Parameters<KptMapEngineEvents[K]>\n ): void {\n for (const handler of this.handlers[event] ?? []) {\n (handler as (...a: unknown[]) => void)(...args);\n }\n }\n\n /** Rejestruje listener Google i zapamiętuje go do sprzątania w `destroy()`. */\n private on_(target: any, event: string, handler: (e: any) => void): void {\n this.listeners.push(target.addListener(event, handler));\n }\n\n /**\n * Opakowanie znacznika. `AdvancedMarkerElement` kotwiczy treść **środkiem dolnej krawędzi**,\n * a kontrakt daje kotwicę w pikselach od lewego górnego rogu ikony. Element zewnętrzny ma\n * więc zerowe wymiary — jego „środek dolnej krawędzi\" wypada dokładnie we współrzędnych —\n * a wewnętrzny przesuwa ikonę o żądaną kotwicę.\n */\n private buildMarkerContent(m: KptMapRenderedMarker): { anchor: HTMLElement; inner: HTMLElement } {\n const anchor = document.createElement('div');\n anchor.style.cssText = 'position:relative;width:0;height:0';\n\n const inner = document.createElement('div');\n inner.className = 'kpt-map__icon';\n inner.style.position = 'absolute';\n anchor.append(inner);\n\n this.fillMarker(inner, m);\n return { anchor, inner };\n }\n\n private fillMarker(inner: HTMLElement, m: KptMapRenderedMarker): void {\n inner.style.left = `${-m.anchor.x}px`;\n inner.style.top = `${-m.anchor.y}px`;\n inner.style.width = `${m.size.width}px`;\n inner.style.height = `${m.size.height}px`;\n // HTML pochodzi z `marker-html.ts` — z rdzenia biblioteki, nie od użytkownika.\n inner.innerHTML = m.html;\n }\n\n /**\n * Znacznik użytkownika i krąg dokładności w jednym elemencie.\n *\n * Krąg jest `<div>`-em z klasą `kpt-map__accuracy`, a nie `google.maps.Circle`: Circle\n * przyjmuje kolory w opcjach, a kontrakt repo wymaga stylowania tokenami `var(--kpt-*)`.\n * Średnicę liczy `metersPerPixel()` z rdzenia, więc jest wspólna dla obu silników.\n */\n private buildUserContent(html: string): HTMLElement {\n const anchor = document.createElement('div');\n anchor.style.cssText = 'position:relative;width:0;height:0';\n\n const circle = document.createElement('div');\n circle.className = 'kpt-map__accuracy';\n circle.style.cssText = 'position:absolute;border-radius:50%;pointer-events:none';\n anchor.append(circle);\n this.accuracyEl = circle;\n\n const inner = document.createElement('div');\n inner.className = 'kpt-map__icon';\n inner.style.cssText = 'position:absolute;left:-12px;top:-12px;width:24px;height:24px';\n inner.innerHTML = html;\n anchor.append(inner);\n\n this.resizeAccuracy();\n return anchor;\n }\n\n private resizeAccuracy(): void {\n const el = this.accuracyEl;\n const at = this.accuracyAt;\n if (!el || !at || !this.map) return;\n const diameter = (2 * this.accuracyMeters) / metersPerPixel(at.lat, this.getZoom());\n el.style.width = `${diameter}px`;\n el.style.height = `${diameter}px`;\n el.style.left = `${-diameter / 2}px`;\n el.style.top = `${-diameter / 2}px`;\n }\n\n private toPointerEvent(e: any): KptMapPointerEvent {\n const at = { lat: e.latLng.lat(), lng: e.latLng.lng() };\n return { at, point: this.toContainerPoint(e.domEvent), originalEvent: e.domEvent };\n }\n\n private fromDomEvent(event: MouseEvent, at: KptLatLng): KptMapPointerEvent {\n return { at, point: this.toContainerPoint(event), originalEvent: event };\n }\n\n /** Google podaje zdarzenie DOM bez pozycji w kontenerze — liczymy ją z prostokąta hosta. */\n private toContainerPoint(event?: MouseEvent): KptMapPoint {\n const rect = this.host?.getBoundingClientRect();\n if (!event || !rect) return { x: 0, y: 0 };\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n }\n\n private toLatLngBounds(b: KptMapBounds): any {\n return new this.maps.LatLngBounds(\n { lat: b.south, lng: b.west },\n { lat: b.north, lng: b.east },\n );\n }\n}\n","/*\r\n * Adapter Leaflet. Jedyne miejsce w bibliotece, które zna typy Leafleta — reszta kodu\r\n * rozmawia wyłącznie przez `KptMapEngine`.\r\n *\r\n * Leaflet ładujemy dynamicznym `import()`, więc nie trafia do statycznego grafu zależności:\r\n * kto nie użyje mapy, nie pobierze biblioteki.\r\n */\r\nimport type {\r\n KptMapEngine,\r\n KptMapEngineEvents,\r\n KptMapEngineInit,\r\n KptMapPointerEvent,\r\n KptMapRenderedMarker,\r\n} from '../core/engine';\r\nimport type { KptLatLng, KptMapBounds, KptMapPoint, KptMapUserPosition } from '../core/types';\r\n\r\n/**\r\n * Minimalny opis API, którego używamy. Świadomie `any` w środku — pełne typy przychodzą\r\n * z opcjonalnego `@types/leaflet`, a biblioteka nie może od nich zależeć przy kompilacji.\r\n */\r\ntype LeafletModule = any;\r\n\r\nexport interface KptLeafletOptions {\r\n /** Dolny limit zoomu. Domyślnie 2 — niżej świat powtarza się w poziomie. */\r\n minZoom?: number;\r\n /** Górny limit zoomu. Domyślnie 19 (tyle daje OSM). */\r\n maxZoom?: number;\r\n /** Bezwładność po przeciągnięciu. Domyślnie włączona. */\r\n inertia?: boolean;\r\n /** Zoom kółkiem myszy. Domyślnie włączony. */\r\n scrollWheelZoom?: boolean;\r\n}\r\n\r\nconst MODULE_LOAD_ERROR =\r\n 'kpt-map: nie udało się załadować biblioteki `leaflet`. ' +\r\n 'To zależność opcjonalna — zainstaluj ją w aplikacji: `pnpm add leaflet` ' +\r\n '(oraz dołącz `leaflet/dist/leaflet.css`).';\r\n\r\nlet modulePromise: Promise<LeafletModule> | null = null;\r\n\r\n/**\r\n * Ładuje Leaflet raz na aplikację. Leaflet 1.9 jest paczką UMD/CJS bez pola `exports`,\r\n * więc pod bundlerem trafia raz jako `default`, a raz jako sam namespace — stąd interop.\r\n */\r\nasync function loadLeaflet(): Promise<LeafletModule> {\r\n modulePromise ??= import('leaflet')\r\n .then((mod: LeafletModule) => mod?.default ?? mod)\r\n .catch((cause) => {\r\n modulePromise = null; // pozwól spróbować ponownie po doinstalowaniu paczki\r\n throw new Error(MODULE_LOAD_ERROR, { cause });\r\n });\r\n return modulePromise;\r\n}\r\n\r\n/** Fabryka silnika — każda mapa dostaje własną instancję. */\r\nexport function createLeafletEngine(options: KptLeafletOptions = {}): KptMapEngine {\r\n return new LeafletEngine(options);\r\n}\r\n\r\nclass LeafletEngine implements KptMapEngine {\r\n readonly kind = 'leaflet' as const;\r\n\r\n private L: LeafletModule | null = null;\r\n private map: any = null;\r\n private tiles: any = null;\r\n private userMarker: any = null;\r\n private userCircle: any = null;\r\n\r\n /** Znaczniki po `id` — bez tego każdy przelicz przerysowywałby całą mapę. */\r\n private readonly markers = new Map<string, any>();\r\n private readonly handlers: { [K in keyof KptMapEngineEvents]?: KptMapEngineEvents[K][] } = {};\r\n\r\n constructor(private readonly options: KptLeafletOptions) {}\r\n\r\n async init(host: HTMLElement, opts: KptMapEngineInit): Promise<void> {\r\n const L = (this.L = await loadLeaflet());\r\n\r\n this.map = new L.Map(host, {\r\n center: [opts.center.lat, opts.center.lng],\r\n zoom: opts.zoom,\r\n minZoom: opts.minZoom ?? this.options.minZoom ?? 2,\r\n maxZoom: opts.maxZoom ?? this.options.maxZoom ?? 19,\r\n // Kontrolki rysuje warstwa Angulara — domyślnych nie da się otokenizować\r\n // bez walki z niewarstwowanym `leaflet.css`.\r\n zoomControl: false,\r\n attributionControl: true,\r\n inertia: this.options.inertia ?? true,\r\n scrollWheelZoom: this.options.scrollWheelZoom ?? true,\r\n maxBounds: opts.maxBounds ? this.toLatLngBounds(opts.maxBounds) : undefined,\r\n // Bez tego mapa przy `maxBounds` daje się odciągnąć i sprężynuje.\r\n maxBoundsViscosity: opts.maxBounds ? 1 : 0,\r\n });\r\n\r\n this.tiles = new L.TileLayer(opts.tileUrl, {\r\n attribution: opts.attribution,\r\n maxZoom: opts.maxZoom ?? this.options.maxZoom ?? 19,\r\n }).addTo(this.map);\r\n\r\n this.map.on('move', () => this.emit('move'));\r\n this.map.on('moveend', () => this.emit('moveend'));\r\n this.map.on('zoomend', () => this.emit('zoomend'));\r\n this.map.on('click', (e: any) => this.emit('click', this.toPointerEvent(e)));\r\n this.map.on('contextmenu', (e: any) => {\r\n // Menu przeglądarki zasłoniłoby własne „Dodaj lokalizację\".\r\n L.DomEvent.preventDefault(e.originalEvent);\r\n this.emit('contextmenu', this.toPointerEvent(e));\r\n });\r\n }\r\n\r\n destroy(): void {\r\n this.markers.clear();\r\n this.userMarker = null;\r\n this.userCircle = null;\r\n this.tiles = null;\r\n this.map?.remove();\r\n this.map = null;\r\n }\r\n\r\n setView(center: KptLatLng, zoom: number, animate = true): void {\r\n this.map?.setView([center.lat, center.lng], zoom, { animate });\r\n }\r\n\r\n fitBounds(bounds: KptMapBounds, paddingPx = 0): void {\r\n this.map?.fitBounds(this.toLatLngBounds(bounds), {\r\n padding: [paddingPx, paddingPx],\r\n maxZoom: this.options.maxZoom ?? 19,\r\n });\r\n }\r\n\r\n panBy(offset: KptMapPoint): void {\r\n this.map?.panBy([offset.x, offset.y], { animate: true });\r\n }\r\n\r\n getCenter(): KptLatLng {\r\n const c = this.map.getCenter();\r\n return { lat: c.lat, lng: c.lng };\r\n }\r\n\r\n getZoom(): number {\r\n return this.map.getZoom();\r\n }\r\n\r\n getBounds(): KptMapBounds {\r\n const b = this.map.getBounds();\r\n return { south: b.getSouth(), west: b.getWest(), north: b.getNorth(), east: b.getEast() };\r\n }\r\n\r\n getSize(): { width: number; height: number } {\r\n const s = this.map.getSize();\r\n return { width: s.x, height: s.y };\r\n }\r\n\r\n project(at: KptLatLng): KptMapPoint {\r\n const p = this.map.latLngToContainerPoint([at.lat, at.lng]);\r\n return { x: p.x, y: p.y };\r\n }\r\n\r\n unproject(point: KptMapPoint): KptLatLng {\r\n const ll = this.map.containerPointToLatLng([point.x, point.y]);\r\n return { lat: ll.lat, lng: ll.lng };\r\n }\r\n\r\n /**\r\n * Wymienia zestaw znaczników różnicowo. Znaczniki, których `id` się nie zmieniło,\r\n * zostają na miejscu — inaczej każdy przelicz gasiłby animacje i migotał.\r\n */\r\n setMarkers(next: readonly KptMapRenderedMarker[]): void {\r\n if (!this.map || !this.L) return;\r\n const L = this.L;\r\n const seen = new Set<string>();\r\n\r\n for (const m of next) {\r\n seen.add(m.id);\r\n const existing = this.markers.get(m.id);\r\n const icon = L.divIcon({\r\n html: m.html,\r\n className: 'kpt-map__icon',\r\n iconSize: [m.size.width, m.size.height],\r\n iconAnchor: [m.anchor.x, m.anchor.y],\r\n });\r\n if (existing) {\r\n existing.setLatLng([m.at.lat, m.at.lng]);\r\n existing.setIcon(icon);\r\n if (m.zIndex !== undefined) existing.setZIndexOffset(m.zIndex);\r\n continue;\r\n }\r\n const marker = new L.Marker([m.at.lat, m.at.lng], {\r\n icon,\r\n // Znacznik niesie własny `aria-label` w HTML-u ikony; pusty `alt`\r\n // powstrzymuje Leaflet przed dorzuceniem drugiej etykiety.\r\n alt: '',\r\n keyboard: false,\r\n zIndexOffset: m.zIndex ?? 0,\r\n });\r\n marker.on('click', (e: any) => {\r\n L.DomEvent.stopPropagation(e);\r\n this.emit('markerclick', m.id, this.toPointerEvent(e));\r\n });\r\n marker.addTo(this.map);\r\n this.markers.set(m.id, marker);\r\n }\r\n\r\n for (const [id, marker] of this.markers) {\r\n if (seen.has(id)) continue;\r\n marker.remove();\r\n this.markers.delete(id);\r\n }\r\n }\r\n\r\n setUserPosition(position: KptMapUserPosition | null, html: string): void {\r\n if (!this.map || !this.L) return;\r\n const L = this.L;\r\n\r\n if (!position) {\r\n this.userMarker?.remove();\r\n this.userCircle?.remove();\r\n this.userMarker = null;\r\n this.userCircle = null;\r\n return;\r\n }\r\n\r\n const at: [number, number] = [position.at.lat, position.at.lng];\r\n const icon = L.divIcon({ html, className: 'kpt-map__icon', iconSize: [24, 24], iconAnchor: [12, 12] });\r\n\r\n if (this.userMarker) {\r\n this.userMarker.setLatLng(at);\r\n this.userMarker.setIcon(icon);\r\n } else {\r\n // Nad znacznikami lokalizacji — własne położenie ma być zawsze widoczne.\r\n this.userMarker = new L.Marker(at, { icon, alt: '', keyboard: false, zIndexOffset: 1000 }).addTo(this.map);\r\n }\r\n\r\n // Promień w metrach; L.Circle sam przelicza go na piksele przy każdym zoomie.\r\n if (this.userCircle) {\r\n this.userCircle.setLatLng(at);\r\n this.userCircle.setRadius(position.accuracy);\r\n } else {\r\n this.userCircle = new L.Circle(at, {\r\n radius: position.accuracy,\r\n className: 'kpt-map__accuracy',\r\n interactive: false,\r\n // Kolory idą z klasy CSS (tokeny), nie z opcji Leafleta.\r\n stroke: true,\r\n weight: 1,\r\n }).addTo(this.map);\r\n }\r\n }\r\n\r\n setTileSource(tileUrl: string, attribution: string): void {\r\n if (!this.map || !this.L) return;\r\n this.tiles?.remove();\r\n this.tiles = new this.L.TileLayer(tileUrl, {\r\n attribution,\r\n maxZoom: this.options.maxZoom ?? 19,\r\n }).addTo(this.map);\r\n // Kafle wchodzą pod znaczniki — bez tego nowa warstwa przykryłaby je.\r\n this.tiles.bringToBack();\r\n }\r\n\r\n setMaxBounds(bounds: KptMapBounds | null): void {\r\n if (!this.map) return;\r\n this.map.setMaxBounds(bounds ? this.toLatLngBounds(bounds) : null);\r\n this.map.options.maxBoundsViscosity = bounds ? 1 : 0;\r\n }\r\n\r\n invalidateSize(): void {\r\n // `animate: false` — to reakcja na zmianę layoutu, nie gest użytkownika.\r\n this.map?.invalidateSize({ animate: false });\r\n }\r\n\r\n on<K extends keyof KptMapEngineEvents>(event: K, handler: KptMapEngineEvents[K]): void {\r\n (this.handlers[event] ??= [] as never[]).push(handler as never);\r\n }\r\n\r\n private emit<K extends keyof KptMapEngineEvents>(\r\n event: K,\r\n ...args: Parameters<KptMapEngineEvents[K]>\r\n ): void {\r\n for (const handler of this.handlers[event] ?? []) {\r\n (handler as (...a: unknown[]) => void)(...args);\r\n }\r\n }\r\n\r\n private toPointerEvent(e: any): KptMapPointerEvent {\r\n return {\r\n at: { lat: e.latlng.lat, lng: e.latlng.lng },\r\n point: { x: e.containerPoint.x, y: e.containerPoint.y },\r\n originalEvent: e.originalEvent,\r\n };\r\n }\r\n\r\n private toLatLngBounds(b: KptMapBounds): any {\r\n return new this.L.LatLngBounds([b.south, b.west], [b.north, b.east]);\r\n }\r\n}\r\n","import { InjectionToken, type Provider } from '@angular/core';\nimport type { KptMapEngineFactory } from '../core/engine';\nimport { createGoogleEngine, type KptGoogleOptions } from '../engines/google.engine';\nimport { createLeafletEngine, type KptLeafletOptions } from '../engines/leaflet.engine';\nimport { KPT_MAP_GEOLOCATION, KptBrowserGeolocation } from './geolocation.port';\n\n/**\n * Fabryka silnika mapy. Fabryka, a nie gotowa instancja — każda mapa na stronie\n * potrzebuje własnego obiektu, a provider jest jeden.\n */\nexport const KPT_MAP_ENGINE = new InjectionToken<KptMapEngineFactory>('KPT_MAP_ENGINE');\n\n/**\n * Silnik Leaflet + OpenStreetMap. Wymaga zainstalowanej paczki `leaflet`\n * (zależność opcjonalna) i dołączonego `leaflet/dist/leaflet.css`.\n *\n * @example\n * // main.ts\n * bootstrapApplication(App, { providers: [provideKptLeafletMap()] });\n */\nexport function provideKptLeafletMap(options: KptLeafletOptions = {}): Provider[] {\n return [\n { provide: KPT_MAP_ENGINE, useValue: () => createLeafletEngine(options) },\n // Nadpisywalne — wystarczy podać własny provider PO tym.\n { provide: KPT_MAP_GEOLOCATION, useClass: KptBrowserGeolocation },\n ];\n}\n\n/**\n * Silnik Google Maps. Nie wymaga żadnej paczki npm — API dogrywa się skryptem przy pierwszej\n * mapie — ale wymaga klucza, konta rozliczeniowego i **`mapId`** z konsoli Google\n * (*Map management → Create Map ID*): bez niego znaczniki się nie pojawią.\n *\n * Różnice wobec Leafleta: `[tileUrl]` i `[attribution]` są bez znaczenia (kafle i atrybucję\n * dostarcza Google i nie wolno ich zasłonić), wczytanie mapy liczy się do SKU Dynamic Maps\n * (10 000 miesięcznie za darmo), a zoom bywa ułamkowy.\n *\n * **To jedyny silnik, z którym wolno użyć geokodera Google.** Service Specific Terms §6.2\n * i §14.2 zabraniają pokazywać wyniki Geocoding API i Places API razem z mapą nie-Google,\n * a więc także z domyślnym Leafletem tej biblioteki.\n *\n * @example\n * // main.ts\n * providers: [provideKptGoogleMap({ apiKey: env.googleMapsKey, mapId: env.googleMapId })]\n */\nexport function provideKptGoogleMap(options: KptGoogleOptions): Provider[] {\n return [\n { provide: KPT_MAP_ENGINE, useValue: () => createGoogleEngine(options) },\n { provide: KPT_MAP_GEOLOCATION, useClass: KptBrowserGeolocation },\n ];\n}\n","<div class=\"kpt-map__viewport\">\n <!-- Kontener silnika. Wszystko poniżej to warstwa Angulara rozpięta nad mapą. -->\n <div #canvas class=\"kpt-map__canvas\"></div>\n\n <div class=\"kpt-map__controls\" role=\"group\" [attr.aria-label]=\"i18n.t('map.legend')\">\n <button\n class=\"kpt-map__control\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.zoomIn')\"\n [title]=\"i18n.t('map.zoomIn')\"\n [disabled]=\"!ready()\"\n (click)=\"zoomBy(1)\"\n >\n <span aria-hidden=\"true\">+</span>\n </button>\n <button\n class=\"kpt-map__control\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.zoomOut')\"\n [title]=\"i18n.t('map.zoomOut')\"\n [disabled]=\"!ready()\"\n (click)=\"zoomBy(-1)\"\n >\n <span aria-hidden=\"true\">−</span>\n </button>\n @if (showUserLocation()) {\n <button\n class=\"kpt-map__control kpt-map__control--locate\"\n type=\"button\"\n [attr.aria-label]=\"locationBlocked() ? i18n.t('map.locationDenied') : i18n.t('map.locateMe')\"\n [title]=\"locationBlocked() ? i18n.t('map.locationDenied') : i18n.t('map.locateMe')\"\n [disabled]=\"!userPosition()\"\n (click)=\"centreOnUser()\"\n >\n <span class=\"kpt-map__crosshair\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n\n <!--\n Wyszukiwarka adresów. Renderowana tylko wtedy, gdy port ma czym szukać.\n\n Pozycjonuje ją OPAKOWANIE, a nie klasa postawiona wprost na <kpt-map-search> —\n powód stoi przy regule .kpt-map__search w map.component.scss.\n -->\n @if (searchEnabled()) {\n <div class=\"kpt-map__search\">\n <kpt-map-search\n [geocoder]=\"activeGeocoder()\"\n [placeholder]=\"searchPlaceholder()\"\n [minLength]=\"searchOptions().minLength ?? 3\"\n [debounce]=\"searchOptions().debounce ?? 300\"\n [limit]=\"searchOptions().limit ?? 5\"\n [viewbox]=\"searchViewbox()\"\n [countryCodes]=\"searchCountryCodes()\"\n (selected)=\"onSearchSelect($event)\"\n (cleared)=\"clearSearchPin()\"\n />\n </div>\n }\n\n <!-- Menu pod prawym przyciskiem: wybór kategorii nowej lokalizacji. -->\n @if (allowCreate() && contextTarget()) {\n @if (contextPosition(); as position) {\n <div\n class=\"kpt-map__context\"\n role=\"menu\"\n [attr.aria-label]=\"i18n.t('map.addLocation')\"\n [style.--_kpt-map-x.px]=\"position.x\"\n [style.--_kpt-map-y.px]=\"position.y\"\n >\n <p class=\"kpt-map__context-title\">{{ i18n.t('map.chooseCategory') }}</p>\n @for (category of creatableCategories(); track category.id) {\n <button class=\"kpt-map__context-item\" type=\"button\" role=\"menuitem\" (click)=\"startCreate(category)\">\n <span class=\"kpt-map__context-dot\" aria-hidden=\"true\"></span>\n {{ category.label }}\n </button>\n } @empty {\n <p class=\"kpt-map__context-empty\">{{ i18n.t('map.empty') }}</p>\n }\n </div>\n }\n }\n\n <!-- Popup szczegółów. Renderowany przez Angulara, pozycjonowany z engine.project(). -->\n @if (popup(); as state) {\n @if (popupPosition(); as position) {\n <div\n #popupEl\n class=\"kpt-map__popup\"\n role=\"dialog\"\n [attr.data-layout]=\"popupLayout()\"\n [attr.aria-label]=\"state.location.title\"\n [style.--_kpt-map-x.px]=\"position.x\"\n [style.--_kpt-map-y.px]=\"position.y\"\n >\n <!-- W wariancie `card` krzyżyk daje karta, więc wbudowany byłby drugim. -->\n @if (popupLayout() === 'plain') {\n <button\n class=\"kpt-map__popup-close\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('common.close')\"\n (click)=\"closePopup()\"\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n }\n\n @if (state.group) {\n <!-- Grupa punktów o tej samej współrzędnej — zoom jej nie rozdzieli. -->\n <p class=\"kpt-map__popup-group\">{{ i18n.t('map.clusterItems') }}</p>\n <div class=\"kpt-map__popup-tabs\" role=\"tablist\">\n @for (item of state.group.items; track item.id) {\n <button\n class=\"kpt-map__popup-tab\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"item.id === state.location.id\"\n (click)=\"selectFromGroup(item)\"\n >\n {{ item.title }}\n </button>\n }\n </div>\n }\n\n <div class=\"kpt-map__popup-body\">\n @if (popupTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: state.location,\n data: state.location.data,\n category: popupCategory(),\n distance: popupDistance(),\n close: closePopupFn\n }\"\n />\n } @else {\n <strong class=\"kpt-map__popup-title\">{{ state.location.title }}</strong>\n @if (popupCategory(); as category) {\n <p class=\"kpt-map__popup-category\">{{ category.label }}</p>\n }\n }\n </div>\n </div>\n }\n }\n</div>\n\n@if (legend()) {\n <kpt-map-legend\n class=\"kpt-map__legend\"\n [categories]=\"categories()\"\n [(hidden)]=\"hiddenCategories\"\n [counts]=\"counts()\"\n />\n}\n\n<!-- Dialog dodawania: schema z kategorii, a własny szablon ma pierwszeństwo. -->\n<kpt-dialog [(open)]=\"createOpen\" [header]=\"i18n.t('map.addLocation')\">\n @if (createFor(); as target) {\n @if (createFormTemplate(); as tpl) {\n @if (createFormApi(); as api) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: api, at: target.at, category: target.category }\"\n />\n }\n } @else {\n <kpt-map-create-dialog\n [geocoder]=\"activeGeocoder()\"\n [category]=\"target.category\"\n [at]=\"target.at\"\n (save)=\"emitCreate($event)\"\n (cancelled)=\"closeCreate()\"\n />\n }\n }\n</kpt-dialog>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { KptDialog, KptI18n, KptIconRegistry, renderKptIconSvg } from '@konce-pt/angular';\nimport { type KptClusterOptions, clusterLocations, countByCategory, isSplittable } from '../core/cluster';\nimport { resolveCountryView } from '../core/countries';\nimport {\n KPT_MAP_DEFAULT_ATTRIBUTION,\n KPT_MAP_DEFAULT_TILE_URL,\n type KptMapEngine,\n type KptMapEngineFactory,\n type KptMapPointerEvent,\n type KptMapRenderedMarker,\n} from '../core/engine';\nimport { boundsOf, haversine } from '../core/geo';\nimport { renderClusterHtml, renderMarkerHtml, renderUserMarkerHtml } from '../core/marker-html';\nimport {\n type KptLatLng,\n type KptMapBounds,\n type KptMapCategory,\n type KptMapCluster,\n type KptMapCreateEvent,\n type KptMapGeolocationError,\n type KptMapLocation,\n type KptMapPoint,\n type KptMapSearchResult,\n type KptMapUserPosition,\n type KptMapView,\n isCluster,\n} from '../core/types';\nimport { KptMapCreateDialog } from './map-create-dialog.component';\nimport { KptMapLegend } from './map-legend.component';\nimport { KptMapSearch } from './map-search.component';\nimport {\n KptMapCreateFormTemplate,\n KptMapPopupTemplate,\n type KptMapCreateFormApi,\n} from './map-templates.directive';\nimport { KPT_MAP_GEOCODER, type KptMapGeocoderPort } from './geocoder.port';\nimport { KPT_MAP_GEOLOCATION, KptMapGeolocationFailure } from './geolocation.port';\nimport { KPT_MAP_ENGINE } from './map.providers';\n\n/** Rozmiary ikon w pikselach — silnik potrzebuje ich do zakotwiczenia znacznika. */\nconst MARKER_SIZE = { width: 32, height: 42 } as const;\nconst DOT_SIZE = { width: 24, height: 24 } as const;\nconst CLUSTER_SIZE = { width: 44, height: 44 } as const;\n\n/** Ile miejsca zostawić wokół zasięgu przy `fitBounds`. */\nconst FIT_PADDING = 48;\n\n/**\n * Identyfikator tymczasowej pinezki wyszukiwarki. Nie należy do `entries()`, więc\n * `onMarkerClick()` nie znajdzie dla niego wpisu i cicho wyjdzie — kliknięcie w wynik\n * wyszukiwania niczego nie otwiera.\n */\nconst SEARCH_MARKER_ID = 'kpt-map:search';\n\n/** Brak silnika to najczęstsza pomyłka przy pierwszym użyciu — komunikat niesie instrukcję. */\nconst NO_ENGINE_ERROR =\n 'kpt-map: brak silnika mapy. Zarejestruj go w aplikacji — ' +\n '`provideKptLeafletMap()` albo `provideKptGoogleMap({ apiKey, mapId })` — ' +\n 'albo podaj fabrykę wprost przez `[engine]`.';\n\ninterface PopupState<T> {\n location: KptMapLocation<T>;\n /** Grupa, z której popup został otwarty — lista nierozdzielalnych punktów. */\n group: KptMapCluster<T> | null;\n}\n\n/**\n * Mapa z konfigurowalnymi znacznikami: kategorie z kolorem i ikoną, grupowanie z licznikiem,\n * popup szczegółów o szablonie zależnym od kategorii, legenda i dodawanie lokalizacji\n * prawym przyciskiem myszy.\n *\n * Silnik (domyślnie Leaflet + OpenStreetMap) dostarcza `provideKptLeafletMap()`. Wymaga\n * zainstalowanej paczki `leaflet` (zależność opcjonalna) i dołączonego `leaflet/dist/leaflet.css`.\n *\n * @example\n * <kpt-map [locations]=\"locations()\" [categories]=\"categories\" allowCreate showUserLocation>\n * <ng-template kptMapPopup category=\"closure\" let-loc let-data=\"data\">\n * <strong>{{ loc.title }}</strong>\n * <p>{{ data.address }}</p>\n * </ng-template>\n * </kpt-map>\n */\n@Component({\n selector: 'kpt-map',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet, KptDialog, KptMapLegend, KptMapSearch, KptMapCreateDialog],\n templateUrl: './map.component.html',\n styleUrl: './map.component.scss',\n host: {\n class: 'kpt-map',\n '[style.--kpt-map-height]': 'height()',\n '[attr.data-engine]': 'engineKind()',\n },\n})\nexport class KptMap<T = unknown> {\n readonly locations = input.required<readonly KptMapLocation<T>[]>();\n readonly categories = input.required<readonly KptMapCategory[]>();\n\n /** Kod kraju z presetów (`PL`, `DE`, `EU`…). Nieznany kod cofa się do Polski. */\n readonly country = input<string>('PL');\n /** Jawny widok startowy; nadpisuje `country`. */\n readonly view = input<KptMapView | null>(null);\n /** Blokuje przesuwanie poza zasięg kraju (albo `bounds`, gdy podane). */\n readonly restrictToCountry = input(false, { transform: booleanAttribute });\n /** Jawny zasięg startowy; nadpisuje `country` i `view`. */\n readonly bounds = input<KptMapBounds | null>(null);\n\n readonly cluster = input(true, { transform: booleanAttribute });\n readonly clusterOptions = input<Partial<Omit<KptClusterOptions, 'zoom'>>>({});\n /** `dominant` barwi grupę kolorem najliczniejszej kategorii. */\n readonly clusterColorBy = input<'dominant' | 'none'>('none');\n\n /** Renderuje legendę pod mapą. Wyłącz, jeśli chcesz ją umieścić gdzie indziej. */\n readonly legend = input(true, { transform: booleanAttribute });\n /** Identyfikatory ukrytych kategorii (dwukierunkowe) — legenda je przełącza. */\n readonly hiddenCategories = model<string[]>([]);\n /** Pokazuje liczniki przy pozycjach legendy. */\n readonly legendCounts = input(true, { transform: booleanAttribute });\n\n readonly showUserLocation = input(false, { transform: booleanAttribute });\n /** Przy każdej nowej pozycji centruje mapę na użytkowniku. */\n readonly followUser = input(false, { transform: booleanAttribute });\n\n /** Włącza menu „Dodaj lokalizację\" pod prawym przyciskiem myszy. */\n readonly allowCreate = input(false, { transform: booleanAttribute });\n\n /**\n * Pokazuje wyszukiwarkę adresów w rogu mapy. Wymaga portu `KPT_MAP_GEOCODER`\n * **z metodą `search()`** — bez niego pole się nie renderuje, bo biblioteka nie\n * odpytuje cudzego serwera bez zgody aplikacji.\n */\n readonly search = input(false, { transform: booleanAttribute });\n /** Podpowiedź w pustym polu wyszukiwania. Pusta oddaje głos słownikowi. */\n readonly searchPlaceholder = input<string>('');\n /** Strojenie wyszukiwarki. Domyślnie `3 / 300 ms / 5`. */\n readonly searchOptions = input<{\n minLength?: number;\n debounce?: number;\n limit?: number;\n /** Twarde zawężenie do krajów (ISO 3166-1 alpha-2); nadpisuje regułę `restrictToCountry`. */\n countryCodes?: readonly string[];\n }>({});\n /**\n * Zoom, na jaki mapa wchodzi po wybraniu wyniku bez własnego zasięgu (pojedynczy adres).\n * Wynik z zasięgiem — miasto, region — dostaje `fitBounds` zamiast tego.\n */\n readonly searchZoom = input(16, { transform: numberAttribute });\n /** Zostawia tymczasową pinezkę w znalezionym punkcie. */\n readonly searchMarker = input(true, { transform: booleanAttribute });\n\n /**\n * Wygląd popupu. `plain` to wąska ramka na treść tekstową (domyślna),\n * `card` oddaje całą szerokość i wysokość karcie miejsca: bez paddingu,\n * bez wbudowanego krzyżyka, z przewijaniem, gdy treść nie mieści się w mapie.\n */\n readonly popupLayout = input<'plain' | 'card'>('plain');\n\n /**\n * Punkt odniesienia dystansu podawanego szablonowi popupu jako `distance`.\n * `null` znaczy „pozycja użytkownika z `KPT_MAP_GEOLOCATION`\", więc domyślnie\n * jest to odległość od miejsca, w którym stoi patrzący. Aplikacja może podstawić\n * inny punkt — wyszukany adres, siedzibę firmy, stałą pozycję w demie.\n */\n readonly distanceFrom = input<KptLatLng | null>(null);\n\n readonly height = input<string>('480px');\n /** Bez znaczenia dla silnika Google — kafle i atrybucję dostarcza tam Google. */\n readonly tileUrl = input<string | null>(null);\n readonly attribution = input<string | null>(null);\n\n /**\n * Silnik **tej** mapy. Podany wygrywa nad `KPT_MAP_ENGINE` z DI, więc dwie mapy o różnych\n * silnikach mieszczą się na jednej stronie bez komponentów-opakowań. Bez niego wszystko\n * działa jak dotąd — silnik przychodzi z DI.\n *\n * Fabryka, a nie gotowa instancja: każda mapa potrzebuje własnego obiektu. Czytany raz,\n * przy inicjalizacji — podmiana po starcie nie przeładowuje mapy.\n *\n * @example\n * readonly google: KptMapEngineFactory = () => createGoogleEngine({ apiKey, mapId });\n */\n readonly engine = input<KptMapEngineFactory | null>(null);\n\n /**\n * Geokoder **tej** mapy. Podany wygrywa nad `KPT_MAP_GEOCODER` z DI — tak samo jak\n * `[engine]` nad `KPT_MAP_ENGINE` i z tego samego powodu: Service Specific Terms wiążą\n * geokoder Google z **mapą** Google, a nie z aplikacją. Na stronie z dwoma silnikami\n * globalny provider nie umiałby tej reguły dotrzymać; wejście umie.\n *\n * Trafia i do wyszukiwarki, i do formularza „dodaj lokalizację\" — jeden port na oba kierunki.\n *\n * @example\n * <kpt-map [engine]=\"google\" [geocoder]=\"googleGeocoder\" … />\n */\n readonly geocoder = input<KptMapGeocoderPort | null>(null);\n\n readonly locationClick = output<KptMapLocation<T>>();\n readonly clusterClick = output<KptMapCluster<T>>();\n readonly locationCreate = output<KptMapCreateEvent>();\n /** Wybrano podpowiedź wyszukiwarki. Mapa sama przenosi na nią widok. */\n readonly searchSelect = output<KptMapSearchResult>();\n readonly viewChange = output<{ center: KptLatLng; zoom: number; bounds: KptMapBounds }>();\n readonly userPositionChange = output<KptMapUserPosition | null>();\n readonly userLocationError = output<KptMapGeolocationError>();\n\n protected readonly i18n = inject(KptI18n);\n private readonly icons = inject(KptIconRegistry);\n /** Opcjonalny, bo silnik może przyjść wejściem `[engine]` zamiast z DI. */\n private readonly engineFactory = inject(KPT_MAP_ENGINE, { optional: true });\n private readonly geolocation = inject(KPT_MAP_GEOLOCATION, { optional: true });\n /** Opcjonalny — wejście `[geocoder]` i tak ma nad nim pierwszeństwo. */\n private readonly injectedGeocoder = inject(KPT_MAP_GEOCODER, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n /** Rozstrzygnięty port geokodera: wejście przed DI. Szablon podaje go dzieciom. */\n protected readonly activeGeocoder = computed(() => this.geocoder() ?? this.injectedGeocoder);\n\n private readonly canvas = viewChild.required<ElementRef<HTMLElement>>('canvas');\n private readonly popupEl = viewChild<ElementRef<HTMLElement>>('popupEl');\n private readonly popupTemplates = contentChildren<KptMapPopupTemplate<T>>(KptMapPopupTemplate);\n protected readonly createFormTemplate = contentChild(KptMapCreateFormTemplate);\n\n private mapEngine: KptMapEngine | null = null;\n protected readonly engineKind = signal<string | null>(null);\n protected readonly ready = signal(false);\n\n /** Zoom trzymamy w sygnale, bo od niego zależy wynik grupowania. */\n private readonly zoom = signal(6);\n /** Rośnie przy każdym ruchu mapy — wymusza przeliczenie pozycji popupu. */\n private readonly viewportTick = signal(0);\n\n protected readonly popup = signal<PopupState<T> | null>(null);\n protected readonly contextTarget = signal<{ at: KptLatLng; point: KptMapPoint } | null>(null);\n protected readonly createFor = signal<{ at: KptLatLng; category: KptMapCategory } | null>(null);\n protected readonly createOpen = signal(false);\n protected readonly userPosition = signal<KptMapUserPosition | null>(null);\n /** Ostatni wybrany wynik wyszukiwania — źródło tymczasowej pinezki. */\n protected readonly searchPin = signal<KptMapSearchResult | null>(null);\n protected readonly locationBlocked = signal(false);\n\n private readonly categoryById = computed(\n () => new Map(this.categories().map((c) => [c.id, c])),\n );\n\n /** Lokalizacje po odfiltrowaniu kategorii ukrytych w legendzie. */\n private readonly visibleLocations = computed(() => {\n const hidden = new Set(this.hiddenCategories());\n return hidden.size === 0\n ? this.locations()\n : this.locations().filter((l) => !hidden.has(l.categoryId));\n });\n\n protected readonly counts = computed(() =>\n this.legendCounts() ? countByCategory(this.locations()) : null,\n );\n\n /** Wynik grupowania dla aktualnego zoomu — grupy i punkty pojedyncze. */\n private readonly entries = computed(() => {\n const locations = this.visibleLocations();\n if (!this.cluster()) return [...locations];\n return clusterLocations(locations, {\n ...this.clusterOptions(),\n zoom: this.zoom(),\n categoryOrder: this.categories().map((c) => c.id),\n });\n });\n\n /** Znaczniki gotowe dla silnika. HTML powstaje w rdzeniu, poza Angularem. */\n private readonly markers = computed<KptMapRenderedMarker[]>(() => {\n const byId = this.categoryById();\n const selectedId = this.popup()?.location.id ?? null;\n const colorMode = this.clusterColorBy();\n\n const rendered = this.entries().map((entry): KptMapRenderedMarker => {\n if (isCluster(entry)) {\n const category = colorMode === 'dominant' ? byId.get(entry.dominantCategoryId) : undefined;\n return {\n id: entry.id,\n at: entry.at,\n html: renderClusterHtml({\n count: entry.count,\n color: category?.color ?? 'primary',\n label: this.i18n.t('map.cluster', { count: entry.count }),\n }),\n size: CLUSTER_SIZE,\n anchor: { x: CLUSTER_SIZE.width / 2, y: CLUSTER_SIZE.height / 2 },\n // Grupy nad pojedynczymi punktami — licznik ma być czytelny.\n zIndex: 500,\n };\n }\n\n const category = byId.get(entry.categoryId);\n const shape = category?.shape ?? 'pin';\n const size = shape === 'pin' ? MARKER_SIZE : DOT_SIZE;\n return {\n id: entry.id,\n at: entry.at,\n html: renderMarkerHtml({\n shape,\n color: category?.color ?? 'muted',\n iconSvgInner: category?.icon ? this.icons.get(category.icon) : undefined,\n label: entry.title,\n selected: entry.id === selectedId,\n }),\n size,\n // Pinezka kotwiczy się czubkiem, kropka i kwadrat środkiem.\n anchor: shape === 'pin' ? { x: size.width / 2, y: size.height } : { x: size.width / 2, y: size.height / 2 },\n zIndex: entry.id === selectedId ? 400 : 0,\n };\n });\n\n // Pinezka wyniku wyszukiwania idzie tą samą drogą co reszta znaczników, więc przesuwa\n // się z mapą klatka po klatce i nie wymaga niczego od silnika.\n const pin = this.searchMarker() ? this.searchPin() : null;\n if (pin) {\n rendered.push({\n id: SEARCH_MARKER_ID,\n at: pin.at,\n html: renderMarkerHtml({\n shape: 'pin',\n color: 'info',\n iconSvgInner: this.icons.get('map-pin'),\n label: pin.label,\n }),\n size: MARKER_SIZE,\n anchor: { x: MARKER_SIZE.width / 2, y: MARKER_SIZE.height },\n // Nad grupami (500) — to na nią użytkownik właśnie kazał mapie polecieć.\n zIndex: 600,\n });\n }\n\n return rendered;\n });\n\n /** Szablon popupu dla kategorii; bez dopasowania — szablon zapasowy (bez `category`). */\n private readonly popupTemplateFor = computed(() => {\n const exact = new Map<string, KptMapPopupTemplate<T>>();\n let fallback: KptMapPopupTemplate<T> | null = null;\n for (const tpl of this.popupTemplates()) {\n if (tpl.category()) exact.set(tpl.category(), tpl);\n else fallback ??= tpl;\n }\n return (categoryId: string) => exact.get(categoryId) ?? fallback;\n });\n\n protected readonly popupTemplate = computed(() => {\n const state = this.popup();\n return state ? this.popupTemplateFor()(state.location.categoryId) : null;\n });\n\n protected readonly popupCategory = computed(() => {\n const state = this.popup();\n return state ? this.categoryById().get(state.location.categoryId) : undefined;\n });\n\n /**\n * Odległość otwartego punktu od `distanceFrom` (albo od użytkownika) w metrach.\n * `null`, gdy nie ma od czego liczyć — szablon chowa wtedy wiersz dystansu,\n * zamiast pokazywać zero.\n */\n protected readonly popupDistance = computed<number | null>(() => {\n const state = this.popup();\n if (!state) return null;\n const origin = this.distanceFrom() ?? this.userPosition()?.at ?? null;\n return origin ? haversine(origin, state.location.at) : null;\n });\n\n /**\n * Pozycja popupu w pikselach kontenera. Zależy od `viewportTick`, więc przelicza się\n * przy każdym ruchu mapy — jeden sygnał zamiast nasłuchu w szablonie.\n */\n protected readonly popupPosition = computed<KptMapPoint | null>(() => {\n this.viewportTick();\n const state = this.popup();\n if (!state || !this.mapEngine || !this.ready()) return null;\n return this.mapEngine.project(state.location.at);\n });\n\n protected readonly contextPosition = computed<KptMapPoint | null>(() => {\n this.viewportTick();\n const target = this.contextTarget();\n if (!target || !this.mapEngine || !this.ready()) return null;\n return this.mapEngine.project(target.at);\n });\n\n /** Kategorie oferowane w menu „dodaj\" — ukryte w legendzie odpadają. */\n protected readonly creatableCategories = computed(() => {\n const hidden = new Set(this.hiddenCategories());\n return this.categories().filter((c) => !hidden.has(c.id) && (c.fields?.length || this.createFormTemplate()));\n });\n\n /** Czy jest czym szukać — port bez `search()` nie zasługuje na pole, które nic nie robi. */\n protected readonly searchEnabled = computed(() => this.search() && !!this.activeGeocoder()?.search);\n\n /**\n * Prostokąt preferowanych wyników. Bierzemy zasięg jawny, a bez niego preset kraju —\n * „Kwiatowa\" ma trafiać w tę pod nosem, nie w tę z drugiego końca świata. To sam bias:\n * adresu z zagranicy dalej da się poszukać.\n */\n protected readonly searchViewbox = computed<KptMapBounds>(\n () => this.bounds() ?? resolveCountryView(this.country()).bounds,\n );\n\n /**\n * Twarde zawężenie do krajów. Jawne `searchOptions.countryCodes` wygrywa; bez niego\n * odcinamy zagranicę dopiero przy `restrictToCountry`, bo tam mapa i tak nie pozwoli\n * przesunąć widoku poza kraj — znaleziony adres byłby nie do pokazania.\n */\n protected readonly searchCountryCodes = computed<readonly string[] | null>(() => {\n const explicit = this.searchOptions().countryCodes;\n if (explicit) return explicit;\n return this.restrictToCountry() ? [this.country()] : null;\n });\n\n protected readonly createFormApi = computed<KptMapCreateFormApi | null>(() => {\n const target = this.createFor();\n if (!target) return null;\n return {\n at: target.at,\n category: target.category,\n close: () => this.closeCreate(),\n submit: (value) => this.emitCreate(value),\n };\n });\n\n constructor() {\n afterNextRender(() => void this.initEngine());\n this.destroyRef.onDestroy(() => this.mapEngine?.destroy());\n\n // Zmiana źródła kafli w locie — bez przeładowania mapy.\n effect(() => {\n const url = this.tileUrl() ?? KPT_MAP_DEFAULT_TILE_URL;\n const attribution = this.attribution() ?? KPT_MAP_DEFAULT_ATTRIBUTION;\n if (untracked(this.ready)) this.mapEngine?.setTileSource(url, attribution);\n });\n\n // Wypychanie znaczników do silnika — jedyne miejsce, które je rysuje.\n effect(() => {\n const markers = this.markers();\n if (this.ready()) this.mapEngine?.setMarkers(markers);\n });\n\n effect(() => {\n const bounds = this.restrictBounds();\n if (untracked(this.ready)) this.mapEngine?.setMaxBounds(bounds);\n });\n\n effect(() => {\n const position = this.userPosition();\n if (!this.ready()) return;\n this.mapEngine?.setUserPosition(\n position,\n renderUserMarkerHtml({\n label: this.i18n.t('map.myLocation'),\n iconSvgInner: this.icons.get('user'),\n }),\n );\n });\n\n // `<dialog>` zamyka się też Esc-em i backdropem — cel czyścimy przy każdym zamknięciu.\n effect(() => {\n if (!this.createOpen()) untracked(() => this.createFor.set(null));\n });\n\n this.watchGeolocation();\n }\n\n private restrictBounds(): KptMapBounds | null {\n if (!this.restrictToCountry()) return null;\n return this.bounds() ?? resolveCountryView(this.country()).bounds;\n }\n\n private async initEngine(): Promise<void> {\n // Wejście wygrywa nad DI: dwie mapy o różnych silnikach na jednej stronie.\n const factory = this.engine() ?? this.engineFactory;\n if (!factory) throw new Error(NO_ENGINE_ERROR);\n\n const engine = (this.mapEngine = factory());\n this.engineKind.set(engine.kind);\n\n const preset = resolveCountryView(this.country());\n const view = this.view();\n const startBounds = this.bounds();\n\n try {\n await engine.init(this.canvas().nativeElement, {\n center: view?.center ?? preset.center,\n zoom: view?.zoom ?? preset.zoom,\n maxBounds: this.restrictBounds(),\n tileUrl: this.tileUrl() ?? KPT_MAP_DEFAULT_TILE_URL,\n attribution: this.attribution() ?? KPT_MAP_DEFAULT_ATTRIBUTION,\n });\n } catch (error) {\n // Brak paczki `leaflet` to najczęstsza przyczyna — komunikat niesie instrukcję.\n this.mapEngine = null;\n throw error;\n }\n\n // Jawny zasięg wygrywa nad środkiem i zoomem: dopiero teraz znamy rozmiar kontenera.\n if (startBounds && !view) engine.fitBounds(startBounds, FIT_PADDING);\n\n // Leaflet emituje `move` co klatkę przeciągania. Bez popupu i menu nikt tej pozycji\n // nie czyta, a każdy zapis sygnału planowałby przebieg detekcji zmian — stąd bramka.\n engine.on('move', () => {\n if (untracked(this.popup) || untracked(this.contextTarget)) {\n this.viewportTick.update((t) => t + 1);\n }\n });\n engine.on('moveend', () => this.emitViewChange());\n engine.on('zoomend', () => this.zoom.set(engine.getZoom()));\n engine.on('click', () => this.onMapClick());\n engine.on('contextmenu', (event) => this.onContextMenu(event));\n engine.on('markerclick', (id, event) => this.onMarkerClick(id, event));\n\n this.observeResize();\n this.zoom.set(engine.getZoom());\n this.ready.set(true);\n this.emitViewChange();\n }\n\n /** Bez tego Leaflet zostawia szare pola po każdej zmianie układu strony. */\n private observeResize(): void {\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.mapEngine?.invalidateSize());\n observer.observe(this.canvas().nativeElement);\n this.destroyRef.onDestroy(() => observer.disconnect());\n }\n\n private watchGeolocation(): void {\n effect((onCleanup) => {\n if (!this.showUserLocation() || !this.geolocation) {\n this.userPosition.set(null);\n return;\n }\n this.locationBlocked.set(false);\n const subscription = this.geolocation.watch().subscribe({\n next: (position) => {\n this.userPosition.set(position);\n this.userPositionChange.emit(position);\n if (position && untracked(this.followUser)) {\n this.mapEngine?.setView(position.at, Math.max(untracked(this.zoom), 13));\n }\n },\n error: (error: unknown) => {\n // Odmowa zgody wyłącza kontrolkę, ale nie wywraca komponentu.\n this.userPosition.set(null);\n this.locationBlocked.set(true);\n if (error instanceof KptMapGeolocationFailure) this.userLocationError.emit(error.detail);\n },\n });\n onCleanup(() => subscription.unsubscribe());\n });\n }\n\n private emitViewChange(): void {\n if (!this.mapEngine) return;\n this.zoom.set(this.mapEngine.getZoom());\n this.viewChange.emit({\n center: this.mapEngine.getCenter(),\n zoom: this.mapEngine.getZoom(),\n bounds: this.mapEngine.getBounds(),\n });\n }\n\n private onMarkerClick(id: string, _event: KptMapPointerEvent): void {\n this.contextTarget.set(null);\n const entry = this.entries().find((e) => e.id === id);\n if (!entry) return;\n\n if (isCluster(entry)) {\n this.clusterClick.emit(entry);\n // Grupa punktów o tej samej współrzędnej nie da się rozbić zoomem — pokaż listę.\n if (isSplittable(entry)) {\n this.mapEngine?.fitBounds(entry.bounds, FIT_PADDING);\n return;\n }\n this.popup.set({ location: entry.items[0], group: entry });\n this.autoPanToPopup();\n return;\n }\n\n this.popup.set({ location: entry, group: null });\n this.autoPanToPopup();\n this.locationClick.emit(entry);\n }\n\n private onContextMenu(event: KptMapPointerEvent): void {\n if (!this.allowCreate()) return;\n this.popup.set(null);\n this.contextTarget.set({ at: event.at, point: event.point });\n }\n\n protected dismissOverlays(): void {\n this.popup.set(null);\n this.contextTarget.set(null);\n }\n\n /** Kliknięcie w mapę zamyka nakładki i zdejmuje pinezkę wyniku wyszukiwania. */\n protected onMapClick(): void {\n this.dismissOverlays();\n this.searchPin.set(null);\n }\n\n protected clearSearchPin(): void {\n this.searchPin.set(null);\n }\n\n protected closePopup(): void {\n this.popup.set(null);\n }\n\n /** Zapas na strzałkę i cień popupu przy sprawdzaniu, czy mieści się w kontenerze. */\n private static readonly POPUP_MARGIN = 16;\n\n /**\n * Przesuwa mapę tak, żeby świeżo otwarty popup zmieścił się w kontenerze.\n *\n * Wymiarów popupu nie znamy przed renderem, więc mierzymy go po dograniu ramki.\n * Bez tego znacznik przy górnej krawędzi otwiera popup poza widokiem.\n */\n private autoPanToPopup(): void {\n const engine = this.mapEngine;\n if (!engine) return;\n afterNextRender(\n () => {\n const el = this.popupEl()?.nativeElement;\n const state = this.popup();\n if (!el || !state) return;\n\n const anchor = engine.project(state.location.at);\n const size = engine.getSize();\n const margin = KptMap.POPUP_MARGIN;\n const rect = el.getBoundingClientRect();\n\n // Popup kotwiczy się nad znacznikiem i jest wyśrodkowany w poziomie.\n const top = anchor.y - rect.height - margin;\n const left = anchor.x - rect.width / 2;\n const right = anchor.x + rect.width / 2;\n\n let dx = 0;\n let dy = 0;\n if (top < margin) dy = top - margin;\n if (left < margin) dx = left - margin;\n else if (right > size.width - margin) dx = right - (size.width - margin);\n\n if (dx !== 0 || dy !== 0) engine.panBy({ x: dx, y: dy });\n },\n { injector: this.injector },\n );\n }\n\n /** Gotowa referencja dla kontekstu szablonu — szablon nie ma jak zrobić `bind`. */\n protected readonly closePopupFn = (): void => this.closePopup();\n\n /** Pozycja z grupy nierozdzielalnej — przełącza popup bez ruszania mapy. */\n protected selectFromGroup(location: KptMapLocation<T>): void {\n const state = this.popup();\n this.popup.set({ location, group: state?.group ?? null });\n this.locationClick.emit(location);\n }\n\n protected startCreate(category: KptMapCategory): void {\n const target = this.contextTarget();\n if (!target) return;\n this.contextTarget.set(null);\n this.createFor.set({ at: target.at, category });\n this.createOpen.set(true);\n }\n\n protected closeCreate(): void {\n this.createOpen.set(false);\n this.createFor.set(null);\n }\n\n protected emitCreate(value: Record<string, unknown>): void {\n const target = this.createFor();\n if (!target) return;\n // Komponent nie dopisuje nic do `locations` — źródłem prawdy jest aplikacja.\n this.locationCreate.emit({ at: target.at, categoryId: target.category.id, value });\n this.closeCreate();\n }\n\n /**\n * Przenosi widok na wybrany wynik. Zasięg (miasto, region) wpasowujemy w kadr,\n * a pojedynczy punkt dostaje `[searchZoom]` — inaczej każdy adres lądowałby\n * w innym przybliżeniu, zależnym od tego, jak dostawca obrysował budynek.\n */\n protected onSearchSelect(result: KptMapSearchResult): void {\n this.dismissOverlays();\n this.searchPin.set(result);\n if (result.bounds) this.mapEngine?.fitBounds(result.bounds, FIT_PADDING);\n else this.mapEngine?.setView(result.at, this.searchZoom());\n this.searchSelect.emit(result);\n }\n\n protected zoomBy(delta: number): void {\n if (!this.mapEngine) return;\n this.mapEngine.setView(this.mapEngine.getCenter(), this.mapEngine.getZoom() + delta);\n }\n\n protected centreOnUser(): void {\n const position = this.userPosition();\n if (!position || !this.mapEngine) return;\n this.mapEngine.setView(position.at, Math.max(this.mapEngine.getZoom(), 13));\n }\n\n /** Wraca do widoku startowego — po zabłądzeniu na drugim końcu świata. */\n protected resetView(): void {\n if (!this.mapEngine) return;\n const explicit = this.bounds();\n if (explicit) {\n this.mapEngine.fitBounds(explicit, FIT_PADDING);\n return;\n }\n const view = this.view();\n const preset = resolveCountryView(this.country());\n this.mapEngine.setView(view?.center ?? preset.center, view?.zoom ?? preset.zoom);\n }\n\n /** Zasięg wszystkich widocznych lokalizacji — `null`, gdy nie ma żadnej. */\n protected readonly dataBounds = computed(() => boundsOf(this.visibleLocations().map((l) => l.at)));\n\n protected fitToData(): void {\n const bounds = this.dataBounds();\n if (bounds) this.mapEngine?.fitBounds(bounds, FIT_PADDING);\n }\n}\n","/*\n * Formatowanie liczb dla warstwy prezentacji mapy — pure TS.\n * Wszystko przez `Intl`, więc separator dziesiętny idzie z locale,\n * a nie z zaszytej na sztywno kropki.\n */\n\n/**\n * Dystans po ludzku: poniżej kilometra w metrach zaokrąglonych do dziesiątek,\n * wyżej w kilometrach z jednym miejscem po przecinku (`6,2 km` w `pl-PL`).\n *\n * Wartość ujemna albo nieskończona daje `null` — wołający chowa wtedy wiersz,\n * zamiast malować „NaN km\".\n */\nexport function formatDistance(metres: number | null | undefined, locale: string): string | null {\n if (metres == null || !Number.isFinite(metres) || metres < 0) return null;\n\n if (metres < 1000) {\n const rounded = metres < 100 ? Math.round(metres) : Math.round(metres / 10) * 10;\n return `${new Intl.NumberFormat(locale).format(rounded)} m`;\n }\n\n const km = metres / 1000;\n // Powyżej 100 km ułamek nie niesie już informacji.\n const digits = km >= 100 ? 0 : 1;\n const value = new Intl.NumberFormat(locale, {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n }).format(km);\n return `${value} km`;\n}\n\n/** Współrzędne do wiersza karty — pięć miejsc po przecinku to ok. metr. */\nexport function formatLatLng(at: { lat: number; lng: number }, digits = 5): string {\n return `${at.lat.toFixed(digits)}, ${at.lng.toFixed(digits)}`;\n}\n","/*\n * Normalizacja adresów dla karty POI — pure TS. Wydzielone z `map-poi-card.component.ts`,\n * żeby dało się to testować `node --test` bez ciągnięcia Angulara.\n */\n\nconst HAS_SCHEME = /^[a-z][a-z0-9+.-]*:/i;\nconst SAFE_SCHEME = /^(https?:|mailto:|tel:)/i;\n\n/**\n * Adres bez schematu dostaje `https://` — inaczej przeglądarka potraktuje go jak ścieżkę względną.\n * Schemat spoza allowlisty (np. `javascript:`) traktujemy jak brak schematu — bezpieczny\n * fallback zamiast przepuszczenia surowej wartości do `[href]`/`[src]`/`navigator.share()`.\n */\nexport function normalizeUrl(value: string): string {\n if (!HAS_SCHEME.test(value)) return `https://${value}`;\n return SAFE_SCHEME.test(value) ? value : `https://${value.replace(HAS_SCHEME, '')}`;\n}\n\n/** Wersja adresu do pokazania: bez schematu i bez końcowego ukośnika. */\nexport function prettyUrl(value: string): string {\n return value.replace(/^[a-z][a-z0-9+.-]*:\\/\\//i, '').replace(/\\/$/, '');\n}\n","<header class=\"kpt-map-poi__head\">\n <!--\n Nagłówek jako `role=\"heading\"`, nie `<h3>`: style komponentów siedzą w `@layer\n kpt.components`, a CSS aplikacji spoza warstw wygrywa z nimi zawsze. Zwykły `<h3>`\n łapałby więc każdą regułę `h3 { … }` z układu strony — a nagłówek sekcji strony\n i tytuł miejsca to dwie różne rzeczy. Dla czytnika ekranu to wciąż nagłówek poziomu 3.\n -->\n <p class=\"kpt-map-poi__title\" role=\"heading\" aria-level=\"3\">{{ poi().title }}</p>\n @if (closable()) {\n <kpt-icon-button\n class=\"kpt-map-poi__close\"\n variant=\"text\"\n size=\"sm\"\n [ariaLabel]=\"i18n.t('common.close')\"\n (click)=\"onClose()\"\n >\n <kpt-icon name=\"x\" />\n </kpt-icon-button>\n }\n</header>\n\n<p class=\"kpt-map-poi__meta\">\n @if (distanceLabel(); as distance) {\n <strong class=\"kpt-map-poi__distance\">{{ distance }}</strong>\n }\n @if (poi().address; as address) {\n <span class=\"kpt-map-poi__address\">{{ address }}</span>\n }\n</p>\n\n<!--\n Wszystko poniżej nagłówka przewija się osobno. Kontenerem przewijania jest ten div,\n a nie popup mapy — inaczej tytuł z krzyżykiem odjeżdżałby razem ze zdjęciem.\n-->\n<div class=\"kpt-map-poi__scroll\">\n <div class=\"kpt-map-poi__media\">\n @if (poi().photo; as photo) {\n <img\n class=\"kpt-map-poi__photo\"\n [src]=\"photo\"\n [alt]=\"poi().photoAlt ?? poi().title\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n } @else {\n <div class=\"kpt-map-poi__photo-empty\" [attr.aria-label]=\"i18n.t('map.poi.noPhoto')\" role=\"img\">\n <kpt-icon name=\"photo\" size=\"1.75rem\" />\n </div>\n }\n </div>\n\n <div class=\"kpt-map-poi__actions\">\n @if (primaryLabel()) {\n <kpt-button class=\"kpt-map-poi__cta\" size=\"sm\" fullWidth (click)=\"onPrimary()\">\n {{ primaryLabel() }}\n </kpt-button>\n }\n @if (showShare()) {\n <kpt-icon-button\n variant=\"outline\"\n size=\"sm\"\n [ariaLabel]=\"i18n.t('map.poi.share')\"\n (click)=\"share()\"\n >\n <kpt-icon name=\"share\" />\n </kpt-icon-button>\n }\n @if (showFavourite()) {\n <kpt-icon-button\n class=\"kpt-map-poi__fav\"\n variant=\"outline\"\n size=\"sm\"\n [attr.aria-pressed]=\"favourite()\"\n [attr.data-on]=\"favourite() ? '' : null\"\n [ariaLabel]=\"favouriteLabel()\"\n (click)=\"toggleFavourite()\"\n >\n <kpt-icon name=\"star\" />\n </kpt-icon-button>\n }\n </div>\n\n @if (category(); as category) {\n <p class=\"kpt-map-poi__category\" [style.--_kpt-poi-color]=\"categoryColor()\">\n @if (category.icon) {\n <kpt-icon class=\"kpt-map-poi__category-icon\" [name]=\"category.icon\" />\n }\n {{ category.label }}\n </p>\n }\n\n @if (hasHours()) {\n <div class=\"kpt-map-poi__hours\">\n <button\n class=\"kpt-map-poi__hours-toggle\"\n type=\"button\"\n [attr.aria-expanded]=\"hoursExpanded()\"\n [attr.aria-controls]=\"hoursId\"\n (click)=\"toggleHours()\"\n >\n <kpt-icon class=\"kpt-map-poi__row-icon\" name=\"clock\" />\n <span class=\"kpt-map-poi__status\" [attr.data-open]=\"open() || alwaysOpen()\">\n {{ statusLabel() }}\n </span>\n @if (statusHint(); as hint) {\n <span class=\"kpt-map-poi__status-hint\">· {{ hint }}</span>\n }\n <kpt-icon class=\"kpt-map-poi__chevron\" name=\"chevron-down\" />\n </button>\n\n @if (hoursExpanded()) {\n <dl class=\"kpt-map-poi__week\" [id]=\"hoursId\">\n @for (group of hoursGroups(); track group.label) {\n <dt class=\"kpt-map-poi__week-day\">{{ group.label }}</dt>\n <dd class=\"kpt-map-poi__week-hours\">\n @if (group.closed) {\n <span class=\"kpt-map-poi__week-closed\">{{ i18n.t('map.poi.closedDay') }}</span>\n } @else {\n @for (range of group.ranges; track range) {\n <span class=\"kpt-map-poi__week-range\">{{ range }}</span>\n }\n }\n </dd>\n }\n </dl>\n }\n </div>\n }\n\n @if (rows().length || poi().facts?.length) {\n <ul class=\"kpt-map-poi__rows\">\n @for (row of rows(); track row.kind) {\n <li class=\"kpt-map-poi__row\">\n <kpt-icon class=\"kpt-map-poi__row-icon\" [name]=\"row.icon\" />\n\n @if (row.href) {\n <a\n class=\"kpt-map-poi__row-value kpt-map-poi__row-link\"\n [href]=\"row.href\"\n [attr.target]=\"row.external ? '_blank' : null\"\n [attr.rel]=\"row.external ? 'noopener' : null\"\n >\n {{ row.text }}\n </a>\n } @else {\n <span class=\"kpt-map-poi__row-value\">{{ row.text }}</span>\n }\n\n <span class=\"kpt-map-poi__row-actions\">\n @if (row.href) {\n <a\n class=\"kpt-map-poi__row-action\"\n [href]=\"row.href\"\n [attr.target]=\"row.external ? '_blank' : null\"\n [attr.rel]=\"row.external ? 'noopener' : null\"\n [attr.aria-label]=\"row.actionLabel\"\n [title]=\"row.actionLabel\"\n >\n <kpt-icon [name]=\"row.actionIcon\" />\n </a>\n }\n @if (canCopy) {\n <button\n class=\"kpt-map-poi__row-action\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.poi.copy')\"\n [title]=\"i18n.t('map.poi.copy')\"\n (click)=\"copy(row)\"\n >\n <kpt-icon [name]=\"justCopied() === row.kind ? 'check' : 'copy'\" />\n </button>\n }\n </span>\n </li>\n }\n\n @for (fact of poi().facts ?? []; track fact.label) {\n <li class=\"kpt-map-poi__row kpt-map-poi__row--fact\">\n @if (fact.icon) {\n <kpt-icon class=\"kpt-map-poi__row-icon\" [name]=\"fact.icon\" />\n } @else {\n <span class=\"kpt-map-poi__row-icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"kpt-map-poi__row-value\">\n <span class=\"kpt-map-poi__fact-label\">{{ fact.label }}</span>\n {{ fact.value }}\n </span>\n </li>\n }\n </ul>\n }\n\n <p class=\"kpt-map-poi__live\" aria-live=\"polite\">\n @if (justCopied()) {\n {{ i18n.t('map.poi.copied') }}\n }\n </p>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { KptButton, KptI18n, KptIcon, KptIconButton } from '@konce-pt/angular';\nimport { formatDistance, formatLatLng } from '../core/format';\nimport { groupWeek, isAlwaysOpen, isOpenAt, nextChange, type KptMapHoursGroup } from '../core/hours';\nimport { foregroundVarOf } from '../core/marker-html';\nimport type { KptMapCategory, KptMapPoi } from '../core/types';\nimport { normalizeUrl, prettyUrl } from '../core/url';\n\n/** Wiersz kontaktu: wartość, akcja właściwa i kopiowanie do schowka. */\ninterface ContactRow {\n kind: 'phone' | 'email' | 'website' | 'coords';\n icon: string;\n /** Tekst pokazywany użytkownikowi. */\n text: string;\n /** Tekst kopiowany do schowka — dla współrzędnych inny niż wyświetlany. */\n copyValue: string;\n /** `href` akcji właściwej; `null` dla współrzędnych (nie ma dokąd prowadzić). */\n href: string | null;\n /** Otworzyć w nowej karcie. */\n external: boolean;\n actionIcon: string;\n actionLabel: string;\n}\n\n/** Licznik instancji — `aria-controls` musi wskazywać unikatowy identyfikator na stronie. */\nlet poiCardSeq = 0;\n\n/**\n * Karta miejsca do popupu mapy — dystans od użytkownika, zdjęcie, akcje, kategoria,\n * rozwijane godziny otwarcia i wiersze kontaktowe z kopiowaniem.\n *\n * Komponent jest sterowany danymi: bierze `KptMapPoi`, a nie model domenowy aplikacji.\n * Mapowanie `KptMapLocation.data` → `KptMapPoi` robi aplikacja, dzięki czemu karta nie\n * wie nic o tym, czy pokazuje ładowarkę, restaurację, czy punkt serwisowy.\n *\n * Sam popup `kpt-map` trzeba przełączyć na `[popupLayout]=\"'card'\"` — inaczej karta\n * dostanie 20 rem szerokości i padding przeznaczony dla treści tekstowej.\n *\n * @example\n * <kpt-map [locations]=\"places()\" [categories]=\"categories\" popupLayout=\"card\">\n * <ng-template kptMapPopup let-loc let-d=\"data\" let-dist=\"distance\" let-close=\"close\">\n * <kpt-map-poi-card\n * [poi]=\"poiOf(loc, d)\"\n * [distance]=\"dist\"\n * [category]=\"categoryOf(loc)\"\n * primaryLabel=\"Wyznacz trasę\"\n * (closed)=\"close()\"\n * />\n * </ng-template>\n * </kpt-map>\n */\n@Component({\n selector: 'kpt-map-poi-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptButton, KptIcon, KptIconButton],\n templateUrl: './map-poi-card.component.html',\n styleUrl: './map-poi-card.component.scss',\n host: { class: 'kpt-map-poi' },\n})\nexport class KptMapPoiCard {\n readonly poi = input.required<KptMapPoi>();\n /** Odległość w metrach; `null` chowa wiersz dystansu. */\n readonly distance = input<number | null>(null);\n /** Źródło ikony, koloru i etykiety wiersza kategorii; `null` chowa ten wiersz. */\n readonly category = input<KptMapCategory | null>(null);\n /** Etykieta przycisku głównego; pusta chowa przycisk. */\n readonly primaryLabel = input<string>('');\n readonly showShare = input(true, { transform: booleanAttribute });\n readonly showFavourite = input(true, { transform: booleanAttribute });\n readonly favourite = model(false);\n readonly closable = input(true, { transform: booleanAttribute });\n /** Rozwinąć godziny od razu. Domyślnie zwinięte, jak na karcie miejsca w mapach. */\n readonly hoursExpanded = model(false);\n\n readonly primaryAction = output<KptMapPoi>();\n readonly closed = output<void>();\n readonly shared = output<KptMapPoi>();\n\n protected readonly i18n = inject(KptI18n);\n\n /** Identyfikator regionu godzin; kart na stronie bywa więcej niż jedna. */\n protected readonly hoursId = `kpt-map-poi-hours-${++poiCardSeq}`;\n\n /** Rośnie przy każdym otwarciu karty i przy zmianie danych — odświeża status godzin. */\n private readonly now = signal(Date.now());\n\n /**\n * Ikona kategorii stoi wprost na powierzchni karty, bez własnego tła — stąd\n * `foregroundVarOf()`, a nie `colorVarOf()`: rola `muted` ma kolor tła, nie treści.\n */\n protected readonly categoryColor = computed(() => {\n const category = this.category();\n return category ? foregroundVarOf(category.color) : null;\n });\n\n protected readonly distanceLabel = computed(() =>\n formatDistance(this.distance(), this.i18n.locale()),\n );\n\n /* ── godziny ─────────────────────────────────────────────────────────── */\n\n protected readonly hasHours = computed(() => (this.poi().hours?.length ?? 0) > 0);\n protected readonly alwaysOpen = computed(() => isAlwaysOpen(this.poi().hours));\n protected readonly open = computed(() => isOpenAt(this.poi().hours, new Date(this.now())));\n\n protected readonly hoursGroups = computed<KptMapHoursGroup[]>(() =>\n groupWeek(this.poi().hours, this.i18n.locale()),\n );\n\n protected readonly statusLabel = computed(() => {\n if (this.alwaysOpen()) return this.i18n.t('map.poi.alwaysOpen');\n return this.i18n.t(this.open() ? 'map.poi.openNow' : 'map.poi.closedNow');\n });\n\n /** Dopisek „otwarcie o 11:00\" — nie ma go dla 24/7 ani gdy zmiana jest dalej niż doba. */\n protected readonly statusHint = computed(() => {\n if (this.alwaysOpen() || !this.hasHours()) return null;\n const at = new Date(this.now());\n const change = nextChange(this.poi().hours, at);\n if (!change) return null;\n if (change.at.getTime() - at.getTime() > 24 * 60 * 60 * 1000) return null;\n const time = new Intl.DateTimeFormat(this.i18n.locale(), {\n hour: '2-digit',\n minute: '2-digit',\n }).format(change.at);\n return this.i18n.t(change.open ? 'map.poi.opensAt' : 'map.poi.closesAt', { time });\n });\n\n /* ── wiersze kontaktu ────────────────────────────────────────────────── */\n\n protected readonly rows = computed<ContactRow[]>(() => {\n const poi = this.poi();\n const rows: ContactRow[] = [];\n\n if (poi.phone) {\n rows.push({\n kind: 'phone',\n icon: 'phone',\n text: poi.phone,\n copyValue: poi.phone,\n href: `tel:${poi.phone.replace(/\\s+/g, '')}`,\n external: false,\n actionIcon: 'phone',\n actionLabel: this.i18n.t('map.poi.call'),\n });\n }\n\n if (poi.website) {\n const url = normalizeUrl(poi.website);\n rows.push({\n kind: 'website',\n icon: 'world',\n text: prettyUrl(poi.website),\n copyValue: url,\n href: url,\n external: true,\n actionIcon: 'external-link',\n actionLabel: this.i18n.t('map.poi.openWebsite'),\n });\n }\n\n if (poi.email) {\n rows.push({\n kind: 'email',\n icon: 'mail',\n text: poi.email,\n copyValue: poi.email,\n href: `mailto:${poi.email}`,\n external: false,\n actionIcon: 'mail',\n actionLabel: this.i18n.t('map.poi.sendEmail'),\n });\n }\n\n if (poi.at) {\n const text = formatLatLng(poi.at);\n rows.push({\n kind: 'coords',\n icon: 'crosshair',\n text,\n copyValue: text,\n href: null,\n external: false,\n actionIcon: '',\n actionLabel: '',\n });\n }\n\n return rows;\n });\n\n /* ── akcje ───────────────────────────────────────────────────────────── */\n\n /** Klucz wiersza, którego wartość właśnie skopiowano — przełącza ikonę na „check\". */\n protected readonly justCopied = signal<string | null>(null);\n private copyTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Bez API schowka przycisk kopiowania w ogóle się nie renderuje. */\n protected readonly canCopy = typeof navigator !== 'undefined' && !!navigator.clipboard;\n protected readonly canShare = typeof navigator !== 'undefined' && 'share' in navigator;\n\n protected async copy(row: ContactRow): Promise<void> {\n try {\n await navigator.clipboard.writeText(row.copyValue);\n } catch {\n // Odmowa zgody albo brak bezpiecznego kontekstu — nie ma czego zgłaszać użytkownikowi.\n return;\n }\n this.justCopied.set(row.kind);\n if (this.copyTimer) clearTimeout(this.copyTimer);\n this.copyTimer = setTimeout(() => this.justCopied.set(null), 2000);\n }\n\n protected onPrimary(): void {\n this.primaryAction.emit(this.poi());\n }\n\n protected onClose(): void {\n this.closed.emit();\n }\n\n protected toggleFavourite(): void {\n this.favourite.update((v) => !v);\n }\n\n protected toggleHours(): void {\n // Odświeżamy zegar przy rozwinięciu — karta bywa otwarta dłużej niż minutę.\n this.now.set(Date.now());\n this.hoursExpanded.update((v) => !v);\n }\n\n /**\n * Udostępnianie: natywny arkusz systemowy, gdy przeglądarka go ma, inaczej schowek.\n * W obu przypadkach leci `shared`, więc aplikacja może dołożyć własną telemetrię.\n */\n protected async share(): Promise<void> {\n const poi = this.poi();\n const url = poi.website ? normalizeUrl(poi.website) : undefined;\n if (this.canShare) {\n try {\n await navigator.share({ title: poi.title, text: poi.address, url });\n } catch {\n // Anulowanie arkusza przez użytkownika nie jest błędem.\n return;\n }\n } else if (this.canCopy) {\n try {\n await navigator.clipboard.writeText(url ?? poi.title);\n } catch {\n return;\n }\n }\n this.shared.emit(poi);\n }\n\n protected favouriteLabel(): string {\n return this.i18n.t(this.favourite() ? 'map.poi.removeFavourite' : 'map.poi.addFavourite');\n }\n}\n","/*\n * Public API — @konce-pt/angular/map\n * Mapa z konfigurowalnymi znacznikami (Leaflet + OpenStreetMap). Rdzeń obliczeń: pure TS.\n *\n * Wymaga zależności opcjonalnej `leaflet` i dołączenia `leaflet/dist/leaflet.css`\n * po stronie aplikacji.\n */\nexport { KptMap } from './lib/map.component';\nexport { KptMapLegend } from './lib/map-legend.component';\nexport { KptMapSearch } from './lib/map-search.component';\nexport { KptMapCreateDialog } from './lib/map-create-dialog.component';\nexport { KptMapPoiCard } from './lib/map-poi-card.component';\nexport { KptMapHoursField } from './lib/map-hours-field.component';\nexport { KptMapImageField } from './lib/map-image-field.component';\nexport { KptMapPopupTemplate, KptMapCreateFormTemplate } from './lib/map-templates.directive';\nexport type {\n KptMapPopupContext,\n KptMapCreateFormContext,\n KptMapCreateFormApi,\n} from './lib/map-templates.directive';\n\n// Silnik i porty DI.\nexport { KPT_MAP_ENGINE, provideKptLeafletMap, provideKptGoogleMap } from './lib/map.providers';\nexport { createLeafletEngine } from './engines/leaflet.engine';\nexport type { KptLeafletOptions } from './engines/leaflet.engine';\nexport { createGoogleEngine, loadGoogleMapsApi } from './engines/google.engine';\nexport type {\n KptGoogleOptions,\n KptGoogleLoadOptions,\n KptGoogleMapsApi,\n} from './engines/google.engine';\nexport {\n KPT_MAP_GEOCODER,\n KptNominatimGeocoder,\n KptMapGeocoderStub,\n provideKptNominatimGeocoder,\n provideKptMapGeocoderStub,\n} from './lib/geocoder.port';\nexport type {\n KptMapGeocoderPort,\n KptNominatimOptions,\n KptMapSearchOptions,\n KptMapGeocoderStubOptions,\n} from './lib/geocoder.port';\nexport {\n KPT_MAP_GEOLOCATION,\n KptBrowserGeolocation,\n KptMapGeolocationStub,\n KptMapGeolocationFailure,\n provideKptMapGeolocationStub,\n} from './lib/geolocation.port';\nexport type { KptMapGeolocationPort } from './lib/geolocation.port';\n\n// Typy rdzenia.\nexport type {\n KptLatLng,\n KptMapBounds,\n KptMapPoint,\n KptMapColor,\n KptMapColorRole,\n KptMapMarkerShape,\n KptMapCategory,\n KptMapLocation,\n KptMapCluster,\n KptMapClusterEntry,\n KptMapFieldDef,\n KptMapFieldOption,\n KptMapFieldType,\n KptMapUserPosition,\n KptMapGeolocationError,\n KptMapGeolocationErrorKind,\n KptMapCreateEvent,\n KptMapSuggestion,\n KptMapSearchResult,\n KptMapView,\n KptMapAddress,\n KptMapAddressPart,\n KptMapWeekday,\n KptMapHoursRange,\n KptMapDayHours,\n KptMapOpeningHours,\n KptMapPoi,\n KptMapPoiFact,\n} from './core/types';\nexport type {\n KptMapEngine,\n KptMapEngineFactory,\n KptMapEngineInit,\n KptMapEngineEvents,\n KptMapEngineKind,\n KptMapPointerEvent,\n KptMapRenderedMarker,\n} from './core/engine';\nexport type { KptClusterOptions } from './core/cluster';\nexport type { KptMapCountryPreset } from './core/countries';\n\n// Rdzeń obliczeniowy (pure TS) — do własnych rozszerzeń, SSR i testów.\nexport { isCluster } from './core/types';\nexport { clusterLocations, dominantCategory, countByCategory, isSplittable, KPT_CLUSTER_DEFAULTS } from './core/cluster';\nexport {\n KPT_MAP_COUNTRIES,\n KPT_MAP_DEFAULT_COUNTRY,\n countryPreset,\n countryCodes,\n resolveCountryView,\n centerOfBounds,\n} from './core/countries';\nexport {\n project,\n unproject,\n boundsOf,\n boundsCenter,\n isFittableBounds,\n KPT_MIN_FIT_SPAN,\n boundsContain,\n padBounds,\n haversine,\n metersPerPixel,\n zoomForBounds,\n clampLat,\n normalizeLng,\n worldSize,\n KPT_TILE_SIZE,\n KPT_MAX_LATITUDE,\n KPT_EARTH_RADIUS,\n} from './core/geo';\nexport {\n renderMarkerHtml,\n renderClusterHtml,\n renderUserMarkerHtml,\n colorVarOf,\n contrastVarOf,\n foregroundVarOf,\n clusterTier,\n} from './core/marker-html';\nexport { KPT_MAP_DEFAULT_TILE_URL, KPT_MAP_DEFAULT_ATTRIBUTION } from './core/engine';\nexport {\n parseTime,\n formatTime,\n isoWeekday,\n isOpenAt,\n isAlwaysOpen,\n nextChange,\n weekdayName,\n groupWeek,\n emptyWeek,\n} from './core/hours';\nexport type { KptMapHoursGroup } from './core/hours';\nexport { formatDistance, formatLatLng } from './core/format';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_forTrack0","_c0","modulePromise"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"konce-pt-angular-map.mjs","sources":["../../map/src/lib/geocoder.port.ts","../../map/src/lib/map-hours-field.component.html","../../map/src/lib/map-hours-field.component.ts","../../map/src/lib/map-image-field.component.html","../../map/src/lib/map-image-field.component.ts","../../map/src/lib/map-create-dialog.component.html","../../map/src/lib/map-create-dialog.component.ts","../../map/src/lib/map-legend.component.html","../../map/src/lib/map-legend.component.ts","../../map/src/lib/map-search.component.html","../../map/src/lib/map-search.component.ts","../../map/src/lib/map-templates.directive.ts","../../map/src/lib/geolocation.port.ts","../../map/src/lib/map.providers.ts","../../map/src/lib/map.component.html","../../map/src/lib/map.component.ts","../../map/src/lib/map-poi-card.component.html","../../map/src/lib/map-poi-card.component.ts","../../map/src/public-api.ts","../../map/src/konce-pt-angular-map.ts"],"sourcesContent":["import { InjectionToken, type Provider } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { isFittableBounds } from '@konce-pt/map';\nimport type { KptLatLng, KptMapAddress, KptMapBounds, KptMapSearchResult, KptMapSuggestion } from '@konce-pt/map';\n\n/**\n * Geokodowanie wsteczne: współrzędne → adres. Port, a nie sztywne wywołanie usługi —\n * biblioteka nie może po cichu odpytywać cudzego serwera, a aplikacje mają własnych dostawców.\n *\n * Nie jest rejestrowany domyślnie. Bez niego formularz „dodaj lokalizację\" po prostu\n * nie podpowiada adresu.\n */\nexport interface KptMapSearchOptions {\n /** Język odpowiedzi. Domyślnie to, co ustawi dostawca. */\n language?: string;\n signal?: AbortSignal;\n /** Ile wyników najwyżej. Domyślnie 5 — to lista podpowiedzi, nie wyszukiwarka pełnotekstowa. */\n limit?: number;\n /**\n * Preferuj wyniki z tego prostokąta. **Nie odcina** reszty świata — adres z zagranicy\n * dalej da się znaleźć, tylko wypada niżej na liście.\n */\n viewbox?: KptMapBounds;\n /** Twarde zawężenie do krajów (ISO 3166-1 alpha-2). Wyniki spoza nich nie wrócą wcale. */\n countryCodes?: readonly string[];\n}\n\nexport interface KptMapGeocoderPort {\n /** `null` = nie udało się ustalić adresu. Strumień powinien dać jedną wartość i zakończyć się. */\n reverse(at: KptLatLng, options?: { language?: string; signal?: AbortSignal }): Observable<KptMapAddress | null>;\n\n /**\n * Geokodowanie wprost: tekst → miejsca. Metoda jest **opcjonalna**, żeby porty napisane\n * przed jej powstaniem dalej się kompilowały — bez niej `kpt-map` po prostu nie pokazuje\n * wyszukiwarki. Strumień powinien dać jedną wartość i zakończyć się.\n *\n * Zwracać `KptMapSearchResult[]` (ze współrzędnymi) wolno i jest to najprostsza droga —\n * `KptMapSuggestion` jest tylko szerszy o brak `at`. Jeśli Twój dostawca współrzędnych\n * na liście nie podaje, **musisz** dopisać `resolve()`.\n */\n search?(query: string, options?: KptMapSearchOptions): Observable<readonly KptMapSuggestion[]>;\n\n /**\n * Uzupełnia podpowiedź o współrzędne. Wołane **raz, po wybraniu pozycji z listy** —\n * nigdy w trakcie pisania.\n *\n * Wymagane wyłącznie od dostawców, których `search()` nie zwraca `at` (Google Places:\n * Autocomplete daje `placeId`, Place Details dokłada `lat`/`lng`). Kto zwraca współrzędne\n * od razu, tej metody nie potrzebuje — pole wyszukiwania nawet jej nie zawoła.\n *\n * `null` = nie udało się ustalić miejsca. Strumień powinien dać jedną wartość i zakończyć się.\n */\n resolve?(\n suggestion: KptMapSuggestion,\n options?: { language?: string; signal?: AbortSignal },\n ): Observable<KptMapSearchResult | null>;\n}\n\nexport const KPT_MAP_GEOCODER = new InjectionToken<KptMapGeocoderPort>('KPT_MAP_GEOCODER');\n\nexport interface KptNominatimOptions {\n /**\n * Adres instancji Nominatim. Domyślnie publiczna instancja OSM — patrz ostrzeżenie\n * przy `provideKptNominatimGeocoder`.\n */\n baseUrl?: string;\n /** Język odpowiedzi (`Accept-Language`). Domyślnie język przeglądarki. */\n language?: string;\n /**\n * Szczegółowość: 18 to poziom budynku, 16 ulicy, 10 miasta.\n * Domyślnie 18 — potrzebujemy numeru domu.\n */\n zoom?: number;\n /**\n * Najmniejszy odstęp między zapytaniami w milisekundach.\n *\n * Sekunda nie jest cechą Nominatima, tylko wymogiem regulaminu **publicznej instancji\n * OSM** — dlatego domyślna zależy od `baseUrl`: bez niego 1000 ms, z własnym adresem 0.\n * Na swoim serwerze nie ma czego respektować, a przy podpowiadaniu w trakcie pisania\n * sekundowa zwłoka jest różnicą między „działa\" a „zacina się\".\n *\n * `0` zdejmuje też kolejkowanie — zapytania lecą równolegle. Podstawiając cudzą,\n * współdzieloną instancję ustaw wartość jawnie.\n */\n minIntervalMs?: number;\n}\n\n/** Publiczna instancja OSM. Ma twardą politykę użycia — patrz JSDoc providera. */\nconst NOMINATIM_URL = 'https://nominatim.openstreetmap.org';\n\n/** Polityka publicznej instancji Nominatim: maksymalnie jedno zapytanie na sekundę. */\nconst NOMINATIM_MIN_INTERVAL_MS = 1000;\n\ninterface NominatimAddress {\n road?: string;\n house_number?: string;\n city?: string;\n town?: string;\n village?: string;\n municipality?: string;\n hamlet?: string;\n postcode?: string;\n state?: string;\n county?: string;\n country?: string;\n country_code?: string;\n}\n\ninterface NominatimPlace {\n place_id?: number | string;\n osm_type?: string;\n osm_id?: number | string;\n display_name?: string;\n lat?: string;\n lon?: string;\n /** `[south, north, west, east]` — Nominatim podaje je jako napisy. */\n boundingbox?: [string, string, string, string];\n address?: NominatimAddress;\n}\n\n/**\n * Adapter Nominatim (OpenStreetMap). Kolejkuje zapytania z odstępem sekundy, żeby\n * nie łamać polityki użycia, i przerywa je, gdy subskrybent zniknie.\n */\nexport class KptNominatimGeocoder implements KptMapGeocoderPort {\n /** Ogon kolejki — każde kolejne zapytanie czeka na swoją kolej. */\n private next = Promise.resolve();\n /** Kiedy wystrzeliło poprzednie zapytanie. `0` = jeszcze żadne. */\n private lastAt = 0;\n\n /**\n * Rozstrzygnięty odstęp między zapytaniami. Liczony raz, w konstruktorze: własny\n * `baseUrl` nie dziedziczy regulaminu publicznej instancji OSM.\n */\n private readonly minInterval: number;\n\n constructor(private readonly options: KptNominatimOptions = {}) {\n this.minInterval = options.minIntervalMs ?? (options.baseUrl ? 0 : NOMINATIM_MIN_INTERVAL_MS);\n }\n\n /**\n * Rezerwuje miejsce w kolejce: czeka na poprzednie zapytanie, a potem tylko tyle,\n * ile brakuje do pełnego odstępu od jego wystrzału.\n *\n * Odstęp liczony od zegara, a nie stałym `delay()` przed każdym zapytaniem —\n * inaczej pierwsza podpowiedź po minucie bezczynności też płaciłaby sekundę, a przy\n * podpowiadaniu w trakcie pisania to jest różnica między „działa\" a „zacina się\".\n * Górna granica jednego zapytania na sekundę zostaje nienaruszona.\n *\n * Bez odstępu nie ma czego kolejkować: łańcuch obietnic zostaje nietknięty, żeby\n * podpowiedzi z własnej instancji nie ustawiały się jedna za drugą bez powodu.\n */\n private slot(): Promise<void> {\n if (this.minInterval <= 0) return Promise.resolve();\n\n const mine = this.next.then(async () => {\n const wait = this.lastAt + this.minInterval - Date.now();\n if (wait > 0) await delay(wait);\n this.lastAt = Date.now();\n });\n this.next = mine;\n return mine;\n }\n\n reverse(at: KptLatLng, options?: { language?: string; signal?: AbortSignal }): Observable<KptMapAddress | null> {\n if (typeof fetch === 'undefined') return of(null);\n\n return new Observable<KptMapAddress | null>((subscriber) => {\n const controller = new AbortController();\n const external = options?.signal;\n external?.addEventListener('abort', () => controller.abort(), { once: true });\n\n // Wpinamy się w kolejkę: własne miejsce zajmujemy od razu, ale start dopiero po odstępie.\n const mine = this.slot();\n\n mine\n .then(() => {\n if (controller.signal.aborted) return null;\n return this.fetchAddress(at, controller.signal, options?.language);\n })\n .then((address) => {\n if (controller.signal.aborted) return;\n subscriber.next(address);\n subscriber.complete();\n })\n .catch((error) => {\n if (controller.signal.aborted || (error as Error)?.name === 'AbortError') return;\n // Brak adresu to nie awaria formularza — pole zostaje puste.\n subscriber.next(null);\n subscriber.complete();\n });\n\n return () => controller.abort();\n });\n }\n\n /**\n * Podpowiedzi adresowe. Wchodzi w **tę samą** kolejkę co `reverse()` — polityka Nominatim\n * liczy jedno zapytanie na sekundę na całego klienta, a nie na metodę.\n */\n search(query: string, options?: KptMapSearchOptions): Observable<readonly KptMapSearchResult[]> {\n const q = query.trim();\n if (typeof fetch === 'undefined' || !q) return of([]);\n\n return new Observable<readonly KptMapSearchResult[]>((subscriber) => {\n const controller = new AbortController();\n const external = options?.signal;\n external?.addEventListener('abort', () => controller.abort(), { once: true });\n\n const mine = this.slot();\n\n mine\n .then(() => {\n if (controller.signal.aborted) return [];\n return this.fetchPlaces(q, controller.signal, options);\n })\n .then((results) => {\n if (controller.signal.aborted) return;\n subscriber.next(results);\n subscriber.complete();\n })\n .catch((error) => {\n if (controller.signal.aborted || (error as Error)?.name === 'AbortError') return;\n // Nieudane zapytanie to pusta lista, a nie wywrotka pola wyszukiwania.\n subscriber.next([]);\n subscriber.complete();\n });\n\n return () => controller.abort();\n });\n }\n\n private async fetchPlaces(\n query: string,\n signal: AbortSignal,\n options?: KptMapSearchOptions,\n ): Promise<readonly KptMapSearchResult[]> {\n const base = this.options.baseUrl ?? NOMINATIM_URL;\n const url = new URL('/search', base);\n url.searchParams.set('format', 'jsonv2');\n url.searchParams.set('q', query);\n url.searchParams.set('addressdetails', '1');\n url.searchParams.set('limit', String(options?.limit ?? 5));\n\n const box = options?.viewbox;\n if (box) {\n // Nominatim czyta viewbox jako `lewo,góra,prawo,dół`, czyli lon/lat, nie lat/lon.\n url.searchParams.set('viewbox', [box.west, box.north, box.east, box.south].join(','));\n }\n const countries = options?.countryCodes;\n if (countries?.length) {\n url.searchParams.set('countrycodes', countries.join(',').toLowerCase());\n }\n\n const lang = options?.language ?? this.options.language;\n const headers: Record<string, string> = { Accept: 'application/json' };\n if (lang) headers['Accept-Language'] = lang;\n\n const response = await fetch(url, { signal, headers });\n if (!response.ok) return [];\n\n const data = (await response.json()) as NominatimPlace[];\n return Array.isArray(data) ? data.map(mapPlace).filter((r): r is KptMapSearchResult => r !== null) : [];\n }\n\n private async fetchAddress(at: KptLatLng, signal: AbortSignal, language?: string): Promise<KptMapAddress | null> {\n const base = this.options.baseUrl ?? NOMINATIM_URL;\n const url = new URL('/reverse', base);\n url.searchParams.set('format', 'jsonv2');\n url.searchParams.set('lat', String(at.lat));\n url.searchParams.set('lon', String(at.lng));\n url.searchParams.set('zoom', String(this.options.zoom ?? 18));\n url.searchParams.set('addressdetails', '1');\n\n const lang = language ?? this.options.language;\n const headers: Record<string, string> = { Accept: 'application/json' };\n if (lang) headers['Accept-Language'] = lang;\n\n const response = await fetch(url, { signal, headers });\n if (!response.ok) return null;\n\n const data = (await response.json()) as { address?: NominatimAddress; display_name?: string };\n return data.address ? mapNominatim(data.address, data.display_name) : null;\n }\n}\n\nfunction mapNominatim(a: NominatimAddress, label?: string): KptMapAddress {\n const street = a.road;\n const houseNumber = a.house_number;\n return {\n street,\n houseNumber,\n // Jedno pole „Adres\" chce ulicy z numerem; bez ulicy nie ma czego sklejać.\n address: street ? [street, houseNumber].filter(Boolean).join(' ') : undefined,\n // Nominatim rozrzuca miejscowość po kilku kluczach zależnie od jej wielkości.\n city: a.city ?? a.town ?? a.village ?? a.municipality ?? a.hamlet,\n postcode: a.postcode,\n state: a.state,\n county: a.county,\n country: a.country,\n countryCode: a.country_code?.toUpperCase(),\n label,\n };\n}\n\nfunction mapPlace(place: NominatimPlace, index: number): KptMapSearchResult | null {\n const lat = Number(place.lat);\n const lng = Number(place.lon);\n // Wynik bez współrzędnych jest bezużyteczny — nie ma dokąd polecieć.\n if (!Number.isFinite(lat) || !Number.isFinite(lng)) return null;\n\n return {\n // `place_id` bywa niestabilne między instancjami, ale w obrębie jednej odpowiedzi\n // wystarcza za klucz listy; `osm_id` i indeks są zapasem, gdy go w ogóle nie ma.\n id: String(place.place_id ?? `${place.osm_type ?? 'p'}:${place.osm_id ?? index}`),\n label: place.display_name ?? `${lat}, ${lng}`,\n at: { lat, lng },\n bounds: mapBoundingBox(place.boundingbox),\n address: place.address ? mapNominatim(place.address, place.display_name) : undefined,\n };\n}\n\n/**\n * `[south, north, west, east]` jako napisy → `KptMapBounds`.\n *\n * `undefined` dla zasięgu zbyt ciasnego, żeby go wpasowywać w kadr — pojedynczy adres\n * dostaje wtedy `[searchZoom]` mapy i ląduje w powtarzalnym zbliżeniu, zamiast\n * w przypadkowym, zależnym od tego, jak dostawca obrysował budynek. Regułę trzyma\n * `isFittableBounds()` z rdzenia — jest testowana i wspólna dla wszystkich adapterów.\n */\nfunction mapBoundingBox(box: NominatimPlace['boundingbox']): KptMapBounds | undefined {\n if (!box || box.length !== 4) return undefined;\n const [south, north, west, east] = box.map(Number);\n if (![south, north, west, east].every(Number.isFinite)) return undefined;\n const bounds = { south, west, north, east };\n return isFittableBounds(bounds) ? bounds : undefined;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Włącza podpowiadanie adresu z Nominatim (OpenStreetMap) w formularzu „dodaj lokalizację\".\n *\n * **Polityka użycia.** Publiczna instancja `nominatim.openstreetmap.org` dopuszcza\n * maksymalnie jedno zapytanie na sekundę, wymaga rozpoznawalnego `Referer`/`User-Agent`\n * i zabrania masowego odpytywania; ruch może zostać zablokowany bez uprzedzenia,\n * w szczególności komercyjny. Adapter sam trzyma odstęp sekundy, ale do produkcji\n * podstaw własną instancję (`baseUrl`) albo komercyjnego dostawcę przez własny\n * `KPT_MAP_GEOCODER`.\n *\n * Podanie `baseUrl` **zdejmuje sekundowy odstęp** (`minIntervalMs` domyślnie 0) — regulamin\n * publicznej instancji nie obowiązuje na Twoim serwerze. Cudzą, współdzieloną instancję\n * podstawiaj z jawnym `minIntervalMs`.\n *\n * @example\n * providers: [provideKptLeafletMap(), provideKptNominatimGeocoder({ language: 'pl' })]\n *\n * @example\n * // Własna instancja: bez odstępu, podpowiedzi lecą od razu.\n * provideKptNominatimGeocoder({ baseUrl: 'https://geo.firma.local', language: 'pl' })\n */\nexport function provideKptNominatimGeocoder(options: KptNominatimOptions = {}): Provider {\n return { provide: KPT_MAP_GEOCODER, useValue: new KptNominatimGeocoder(options) };\n}\n\nexport interface KptMapGeocoderStubOptions {\n /**\n * Udawaj dostawcę, który nie podaje współrzędnych na liście (Google Places Autocomplete):\n * `search()` oddaje podpowiedzi bez `at`, a dopiero `resolve()` je dokłada.\n *\n * Bez tego ścieżki leniwej nie da się pokazać ani przejechać bez prawdziwego klucza API.\n */\n deferCoordinates?: boolean;\n}\n\n/**\n * Stały adres i stała lista podpowiedzi — Storybook i testy, bez ruchu sieciowego.\n *\n * Podpowiedzi filtruje po `label` bez znaków diakrytycznych, żeby „warszawa\" trafiało\n * w „Warszawa\". Prawdziwy geokoder dopasowuje po swojemu — atrapa tylko udaje, że umie.\n */\nexport class KptMapGeocoderStub implements KptMapGeocoderPort {\n constructor(\n private readonly address: KptMapAddress | null,\n private readonly results: readonly KptMapSearchResult[] = [],\n private readonly options: KptMapGeocoderStubOptions = {},\n ) {}\n\n reverse(): Observable<KptMapAddress | null> {\n return of(this.address);\n }\n\n search(query: string, options?: KptMapSearchOptions): Observable<readonly KptMapSuggestion[]> {\n const q = fold(query);\n if (!q) return of([]);\n const hits = this.results.filter((r) => fold(r.label).includes(q)).slice(0, options?.limit ?? 5);\n if (!this.options.deferCoordinates) return of(hits);\n // Współrzędne i zasięg zostają po stronie atrapy — pole ma po nie sięgnąć `resolve()`.\n return of(hits.map(({ at: _at, bounds: _bounds, ...rest }) => rest));\n }\n\n resolve(suggestion: KptMapSuggestion): Observable<KptMapSearchResult | null> {\n // Podpowiedź ze współrzędnymi wraca nietknięta — tak samo zachowa się prawdziwy adapter.\n if (suggestion.at) return of(suggestion as KptMapSearchResult);\n return of(this.results.find((r) => r.id === suggestion.id) ?? null);\n }\n}\n\n/** Bez znaków diakrytycznych i wielkości liter — tylko na potrzeby atrapy. */\nfunction fold(value: string): string {\n return value.trim().toLowerCase().normalize('NFD').replace(/\\p{Diacritic}/gu, '');\n}\n\nexport function provideKptMapGeocoderStub(\n address: KptMapAddress | null,\n results: readonly KptMapSearchResult[] = [],\n options: KptMapGeocoderStubOptions = {},\n): Provider {\n return { provide: KPT_MAP_GEOCODER, useValue: new KptMapGeocoderStub(address, results, options) };\n}\n","<kpt-checkbox\n class=\"kpt-map-hours-field__same\"\n [checked]=\"sameAllWeek()\"\n (checkedChange)=\"onSameAllWeek($event)\"\n [disabled]=\"disabled() || readonly()\"\n [label]=\"i18n.t('map.field.hoursSameAllWeek')\"\n/>\n\n<ul class=\"kpt-map-hours-field__week\">\n @for (row of rows(); track row.day) {\n <li class=\"kpt-map-hours-field__day\" [attr.data-locked]=\"locked(row) ? '' : null\">\n <span class=\"kpt-map-hours-field__name\">{{ row.name }}</span>\n\n <!-- Przy zamkniętym dniu kolumna godzin zostaje pusta: „zamknięte\" mówi już checkbox. -->\n <div class=\"kpt-map-hours-field__ranges\">\n @if (!row.closed) {\n @for (range of row.ranges; track $index) {\n <div class=\"kpt-map-hours-field__range\">\n <kpt-datepicker\n selectionMode=\"time\"\n [minuteStep]=\"minuteStep\"\n [value]=\"range.from\"\n (valueChange)=\"setTime(row, $index, 'from', $event)\"\n [disabled]=\"locked(row)\"\n [ariaLabel]=\"i18n.t('map.field.hoursFrom') + ' — ' + row.name\"\n (touch)=\"touch.emit()\"\n />\n <span class=\"kpt-map-hours-field__dash\" aria-hidden=\"true\">–</span>\n <kpt-datepicker\n selectionMode=\"time\"\n [minuteStep]=\"minuteStep\"\n [value]=\"range.to\"\n (valueChange)=\"setTime(row, $index, 'to', $event)\"\n [disabled]=\"locked(row)\"\n [ariaLabel]=\"i18n.t('map.field.hoursTo') + ' — ' + row.name\"\n (touch)=\"touch.emit()\"\n />\n @if (row.ranges.length > 1) {\n <kpt-icon-button\n variant=\"text\"\n size=\"sm\"\n [disabled]=\"locked(row)\"\n [ariaLabel]=\"i18n.t('map.field.hoursRemoveRange')\"\n (click)=\"removeRange(row, $index)\"\n >\n <kpt-icon name=\"minus\" />\n </kpt-icon-button>\n }\n </div>\n }\n\n @if (row.ranges.length < maxRanges) {\n <button\n class=\"kpt-map-hours-field__add\"\n type=\"button\"\n [disabled]=\"locked(row)\"\n (click)=\"addRange(row)\"\n >\n <kpt-icon name=\"plus\" />\n {{ i18n.t('map.field.hoursAddRange') }}\n </button>\n }\n }\n </div>\n\n <kpt-checkbox\n class=\"kpt-map-hours-field__closed\"\n [checked]=\"row.closed\"\n (checkedChange)=\"setClosed(row, $event)\"\n [disabled]=\"locked(row)\"\n [label]=\"i18n.t('map.field.hoursClosed')\"\n />\n </li>\n }\n</ul>\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { KptCheckbox, KptDatepicker, KptI18n, KptIconButton, KptIcon } from '@konce-pt/angular';\nimport { emptyWeek, weekdayName } from '@konce-pt/map';\nimport type { KptMapDayHours, KptMapOpeningHours, KptMapWeekday } from '@konce-pt/map';\n\n/** Ile przedziałów na dobę dopuszczamy. Dwa pokrywają przerwę i dobę przez północ. */\nconst MAX_RANGES = 2;\n\n/**\n * Snap minut na tarczy zegara. Godziny otwarcia chodzą co kwadrans, a nie co minutę —\n * krok 5 daje trafienie w 07:30 czy 22:45 bez celowania w pojedynczą minutę.\n */\nconst MINUTE_STEP = 5;\n\n/** Wiersz edytora — dzień z nazwą i przedziałami dopełnionymi do pustych pól. */\ninterface HoursRow {\n day: KptMapWeekday;\n name: string;\n closed: boolean;\n ranges: { from: string; to: string }[];\n}\n\n/**\n * Pole „godziny otwarcia\" formularza dodawania lokalizacji (`type: 'hours'` w schemie).\n *\n * Siedem wierszy od poniedziałku, każdy z parą godzin i znacznikiem „zamknięte\".\n * Skrót „tak samo przez cały tydzień\" kopiuje poniedziałek na pozostałe dni — to\n * najczęstszy przypadek, a bez niego wypełnienie formularza to czternaście pól.\n *\n * Nazwy dni idą z `Intl`, nie ze słownika `KptMessages`: rozkład tygodnia jest\n * uniwersalny, a tłumaczenie nazw dni przeglądarka ma już zrobione.\n */\n@Component({\n selector: 'kpt-map-hours-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptCheckbox, KptDatepicker, KptIcon, KptIconButton],\n templateUrl: './map-hours-field.component.html',\n styleUrl: './map-hours-field.component.scss',\n host: { class: 'kpt-map-hours-field' },\n})\nexport class KptMapHoursField implements FormValueControl<KptMapOpeningHours> {\n readonly value = model<KptMapOpeningHours>(emptyWeek());\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n\n readonly touch = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n protected readonly maxRanges = MAX_RANGES;\n protected readonly minuteStep = MINUTE_STEP;\n\n /** Skrót „tak samo przez cały tydzień\" — trzymany w modelu, nie w wartości. */\n readonly sameAllWeek = model(false);\n\n protected readonly rows = computed<HoursRow[]>(() => {\n const locale = this.i18n.locale();\n const week = this.value();\n return Array.from({ length: 7 }, (_, i) => {\n const day = (i + 1) as KptMapWeekday;\n const entry = week.find((d) => d.day === day);\n return {\n day,\n name: weekdayName(day, locale),\n closed: entry?.closed ?? !entry,\n ranges: (entry?.ranges ?? []).map((r) => ({ from: r.from, to: r.to })),\n };\n });\n });\n\n /** Dni poza poniedziałkiem są zablokowane, gdy tydzień jest jednakowy. */\n protected locked(row: HoursRow): boolean {\n return this.disabled() || this.readonly() || (this.sameAllWeek() && row.day !== 1);\n }\n\n protected onSameAllWeek(same: boolean): void {\n this.sameAllWeek.set(same);\n if (!same) return;\n const monday = this.rows()[0];\n this.write((week) =>\n week.map((day) =>\n day.day === 1\n ? day\n : { day: day.day, closed: monday.closed, ranges: monday.ranges.map((r) => ({ ...r })) },\n ),\n );\n }\n\n protected setClosed(row: HoursRow, closed: boolean): void {\n this.patch(row.day, (day) => ({\n ...day,\n closed,\n // Przy odznaczeniu dajemy jeden pusty przedział, żeby było co wypełnić.\n ranges: closed ? [] : day.ranges.length ? day.ranges : [{ from: '', to: '' }],\n }));\n }\n\n protected setTime(row: HoursRow, index: number, edge: 'from' | 'to', time: string): void {\n this.patch(row.day, (day) => {\n const ranges = day.ranges.map((r) => ({ ...r }));\n while (ranges.length <= index) ranges.push({ from: '', to: '' });\n ranges[index][edge] = time;\n return { ...day, closed: false, ranges };\n });\n }\n\n protected addRange(row: HoursRow): void {\n this.patch(row.day, (day) => ({\n ...day,\n closed: false,\n ranges: [...day.ranges.map((r) => ({ ...r })), { from: '', to: '' }],\n }));\n }\n\n protected removeRange(row: HoursRow, index: number): void {\n this.patch(row.day, (day) => ({\n ...day,\n ranges: day.ranges.filter((_, i) => i !== index).map((r) => ({ ...r })),\n }));\n }\n\n /** Zmiana jednego dnia; przy jednakowym tygodniu poniedziałek rozlewa się na resztę. */\n private patch(day: KptMapWeekday, change: (entry: KptMapDayHours) => KptMapDayHours): void {\n this.write((week) => {\n const next = week.map((entry) => (entry.day === day ? change(entry) : entry));\n if (!this.sameAllWeek() || day !== 1) return next;\n const monday = next[0];\n return next.map((entry) =>\n entry.day === 1\n ? entry\n : { day: entry.day, closed: monday.closed, ranges: monday.ranges.map((r) => ({ ...r })) },\n );\n });\n }\n\n /** Zapis zawsze przez pełny, uporządkowany tydzień — model nie ma dziur. */\n private write(change: (week: KptMapOpeningHours) => KptMapOpeningHours): void {\n const current = this.value();\n const base = emptyWeek().map((day) => current.find((d) => d.day === day.day) ?? day);\n this.value.set(change(base));\n this.touch.emit();\n }\n}\n","<kpt-file-upload\n accept=\"image/*\"\n [value]=\"files()\"\n (valueChange)=\"onFiles($event)\"\n [disabled]=\"disabled() || readonly()\"\n [invalid]=\"invalid()\"\n [touched]=\"touched()\"\n/>\n\n<label class=\"kpt-map-image-field__url\">\n <span class=\"kpt-map-image-field__url-label\">{{ i18n.t('map.field.orPasteUrl') }}</span>\n <kpt-input\n type=\"url\"\n [value]=\"urlValue()\"\n (valueChange)=\"onUrl($event)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (touch)=\"touch.emit()\"\n placeholder=\"https://\"\n />\n</label>\n\n@if (sizeError(); as error) {\n <p class=\"kpt-map-image-field__error\" aria-live=\"polite\">{{ error }}</p>\n}\n\n@if (preview(); as src) {\n <figure class=\"kpt-map-image-field__preview\">\n <img [src]=\"src\" [alt]=\"i18n.t('map.field.imagePreview')\" />\n <button\n class=\"kpt-map-image-field__clear\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.field.removeImage')\"\n [title]=\"i18n.t('map.field.removeImage')\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"clear()\"\n >\n <kpt-icon name=\"x\" />\n </button>\n </figure>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { KptFileUpload, KptI18n, KptIcon, KptInput } from '@konce-pt/angular';\n\n/** Domyślny limit pliku. Data URL puchnie o ~⅓, a wartość leci w `locationCreate`. */\nconst DEFAULT_MAX_BYTES = 2 * 1024 * 1024;\n\n/**\n * Pole „zdjęcie\" formularza dodawania lokalizacji (`type: 'image'` w schemie kategorii).\n *\n * Wartością jest zawsze **string**: albo `data:` z wybranego pliku, albo adres wklejony\n * przez użytkownika. Karta miejsca nie rozróżnia jednego od drugiego, więc formularz\n * nie musi decydować za aplikację, gdzie zdjęcia mieszkają.\n *\n * Plik czytamy w przeglądarce i nigdzie nie wysyłamy — biblioteka nie ma i nie chce\n * mieć wiedzy o storage'u aplikacji.\n */\n@Component({\n selector: 'kpt-map-image-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptFileUpload, KptIcon, KptInput],\n templateUrl: './map-image-field.component.html',\n styleUrl: './map-image-field.component.scss',\n host: { class: 'kpt-map-image-field' },\n})\nexport class KptMapImageField implements FormValueControl<string> {\n readonly value = model<string>('');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touched = input(false, { transform: booleanAttribute });\n /** Górny limit pliku w bajtach. */\n readonly maxBytes = input(DEFAULT_MAX_BYTES);\n\n readonly touch = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n\n /** Pliki trzymane wyłącznie po to, żeby `kpt-file-upload` miał co pokazać. */\n protected readonly files = model<File[]>([]);\n /** Komunikat o zbyt dużym pliku; walidacja rozmiaru nie ma sensu w schemie. */\n protected readonly sizeError = signal<string | null>(null);\n\n protected readonly urlValue = computed(() => (this.value().startsWith('data:') ? '' : this.value()));\n protected readonly preview = computed(() => this.value() || null);\n\n protected readonly maxLabel = computed(\n () => `${Math.round(this.maxBytes() / (1024 * 1024))} MB`,\n );\n\n protected onFiles(files: File[]): void {\n const file = files[0];\n this.files.set(file ? [file] : []);\n this.sizeError.set(null);\n this.touch.emit();\n\n if (!file) {\n // Usunięcie pliku czyści wartość tylko wtedy, gdy to plik ją ustawił.\n if (this.value().startsWith('data:')) this.value.set('');\n return;\n }\n\n if (file.size > this.maxBytes()) {\n this.sizeError.set(this.i18n.t('map.field.imageTooLarge', { max: this.maxLabel() }));\n this.files.set([]);\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => this.value.set(String(reader.result ?? ''));\n reader.onerror = () => this.sizeError.set(this.i18n.t('map.field.imageTooLarge', { max: this.maxLabel() }));\n reader.readAsDataURL(file);\n }\n\n protected onUrl(url: string): void {\n // Adres i plik wykluczają się — dwa źródła jednej wartości myliłyby użytkownika.\n if (url) this.files.set([]);\n this.sizeError.set(null);\n this.value.set(url);\n }\n\n protected clear(): void {\n this.files.set([]);\n this.sizeError.set(null);\n this.value.set('');\n this.touch.emit();\n }\n}\n","@if (formRoot(); as root) {\n<form class=\"kpt-map-create__form\" [formRoot]=\"root\" (submit)=\"onSubmit()\">\n <p class=\"kpt-map-create__coords\">\n <span>{{ i18n.t('map.latitude') }}: <strong>{{ coords().lat }}</strong></span>\n <span>{{ i18n.t('map.longitude') }}: <strong>{{ coords().lng }}</strong></span>\n </p>\n\n @if (geocoding()) {\n <p class=\"kpt-map-create__geo\" aria-live=\"polite\">{{ i18n.t('map.lookingUpAddress') }}</p>\n } @else if (address(); as adres) {\n @if (adres.label) {\n <p class=\"kpt-map-create__geo\" aria-live=\"polite\">{{ adres.label }}</p>\n }\n } @else if (hasAutofill()) {\n <p class=\"kpt-map-create__geo\" aria-live=\"polite\">{{ i18n.t('map.addressNotFound') }}</p>\n }\n\n @for (def of fields(); track def.key) {\n <kpt-form-field\n [label]=\"def.label\"\n [hint]=\"def.hint ?? ''\"\n [error]=\"errorOf(def.key)\"\n [required]=\"!!def.required\"\n [controlId]=\"hasOwnInput(def) ? controlId(def) : ''\"\n >\n @switch (def.type) {\n @case ('textarea') {\n <kpt-textarea [formField]=\"$any(fieldOf(def.key))\" [placeholder]=\"def.placeholder ?? ''\" />\n }\n @case ('number') {\n <!-- Bez [min]/[max]: FormField wyprowadza je z walidatorów `min()`/`max()`\n zadeklarowanych w schemie i zabrania jawnego wiązania (NG8022). -->\n <kpt-input-number [formField]=\"$any(fieldOf(def.key))\" [placeholder]=\"def.placeholder ?? ''\" />\n }\n @case ('date') {\n <kpt-datepicker\n [formField]=\"$any(fieldOf(def.key))\"\n [placeholder]=\"def.placeholder ?? ''\"\n [minDate]=\"$any(def.min ?? null)\"\n [maxDate]=\"$any(def.max ?? null)\"\n />\n }\n @case ('select') {\n <kpt-select\n [formField]=\"$any(fieldOf(def.key))\"\n [options]=\"optionsOf(def)\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n @case ('multiselect') {\n <kpt-select\n [formField]=\"$any(fieldOf(def.key))\"\n [options]=\"optionsOf(def)\"\n [placeholder]=\"def.placeholder ?? ''\"\n multiple\n />\n }\n @case ('checkbox') {\n <kpt-checkbox [formField]=\"$any(fieldOf(def.key))\" [label]=\"def.placeholder ?? ''\" />\n }\n @case ('tel') {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n type=\"tel\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n @case ('email') {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n type=\"email\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n @case ('url') {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n type=\"url\"\n [placeholder]=\"def.placeholder ?? 'https://'\"\n />\n }\n @case ('image') {\n <kpt-map-image-field [formField]=\"$any(fieldOf(def.key))\" />\n }\n @case ('hours') {\n <kpt-map-hours-field [formField]=\"$any(fieldOf(def.key))\" />\n }\n @default {\n <kpt-input\n [formField]=\"$any(fieldOf(def.key))\"\n [id]=\"controlId(def)\"\n [placeholder]=\"def.placeholder ?? ''\"\n />\n }\n }\n </kpt-form-field>\n }\n\n <div class=\"kpt-map-create__actions\">\n <kpt-button type=\"button\" variant=\"text\" (click)=\"cancelled.emit()\">\n {{ i18n.t('map.cancel') }}\n </kpt-button>\n <kpt-button type=\"submit\" [disabled]=\"formInvalid()\">{{ i18n.t('map.save') }}</kpt-button>\n </div>\n</form>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n runInInjectionContext,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport {\n FormField,\n FormRoot,\n email,\n form,\n max,\n min,\n pattern,\n required,\n submit,\n validate,\n} from '@angular/forms/signals';\nimport {\n KptButton,\n KptCheckbox,\n KptDatepicker,\n KptFormField,\n KptI18n,\n KptInput,\n KptInputNumber,\n KptSelect,\n KptTextarea,\n type KptOption,\n} from '@konce-pt/angular';\nimport { emptyWeek, parseTime, weekdayName } from '@konce-pt/map';\nimport type { KptLatLng, KptMapAddress, KptMapCategory, KptMapFieldDef, KptMapFieldType, KptMapOpeningHours } from '@konce-pt/map';\nimport { KPT_MAP_GEOCODER, type KptMapGeocoderPort } from './geocoder.port';\nimport { KptMapHoursField } from './map-hours-field.component';\nimport { KptMapImageField } from './map-image-field.component';\n\n/** Pusta wartość właściwa dla typu pola — formularz startuje bez `undefined`. */\nfunction initialValue(def: KptMapFieldDef): unknown {\n if (def.initial !== undefined) return def.initial;\n switch (def.type) {\n case 'number':\n return null;\n case 'checkbox':\n return false;\n case 'multiselect':\n return [];\n case 'select':\n return null;\n case 'hours':\n return emptyWeek();\n default:\n return '';\n }\n}\n\n/** Typy pól, które przyjmą fragment adresu. Data czy liczba nie mają z nim nic wspólnego. */\nconst TEKSTOWE = new Set<KptMapFieldType>(['text', 'textarea']);\n\nfunction initialModel(fields: readonly KptMapFieldDef[]): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const def of fields) out[def.key] = initialValue(def);\n return out;\n}\n\n/**\n * Treść dialogu „dodaj lokalizację\" budowana ze schemy kategorii (`category.fields`).\n *\n * Przy dynamicznej schemie typowanie pól znika — model to `Record<string, unknown>`,\n * a ścieżki walidatorów trzeba rzutować. Reszta kontraktu Signal Forms zostaje bez zmian:\n * walidatory deklarujemy raz, a bramka „nie strasz czerwienią\" siedzi w prezentacji.\n */\n@Component({\n selector: 'kpt-map-create-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n FormRoot,\n FormField,\n KptFormField,\n KptInput,\n KptTextarea,\n KptInputNumber,\n KptDatepicker,\n KptSelect,\n KptCheckbox,\n KptButton,\n KptMapHoursField,\n KptMapImageField,\n ],\n templateUrl: './map-create-dialog.component.html',\n styleUrl: './map-create-dialog.component.scss',\n host: { class: 'kpt-map-create' },\n})\nexport class KptMapCreateDialog {\n readonly category = input.required<KptMapCategory>();\n readonly at = input.required<KptLatLng>();\n\n /**\n * Geokoder tego formularza. Podany wygrywa nad `KPT_MAP_GEOCODER` z DI — `kpt-map` podaje\n * tędy port swojej mapy, bo geokoder jest per mapa, a nie per aplikacja.\n */\n readonly geocoder = input<KptMapGeocoderPort | null>(null);\n\n readonly save = output<Record<string, unknown>>();\n readonly cancelled = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n private readonly injector = inject(Injector);\n /** Opcjonalny — wejście `[geocoder]` i tak ma nad nim pierwszeństwo. */\n private readonly injectedGeocoder = inject(KPT_MAP_GEOCODER, { optional: true });\n\n /** Rozstrzygnięty port: wejście przed DI. Bez obu formularz po prostu nie podpowiada adresu. */\n private readonly port = computed(() => this.geocoder() ?? this.injectedGeocoder);\n\n /** Trwa zapytanie do geokodera — szablon pokazuje wtedy notkę zamiast ciszy. */\n protected readonly geocoding = signal(false);\n /** Ostatnio ustalony adres; `label` bywa czytelniejszy niż suma pól. */\n protected readonly address = signal<KptMapAddress | null>(null);\n\n protected readonly fields = computed<readonly KptMapFieldDef[]>(() => this.category().fields ?? []);\n\n /** Czy kategoria ma pola do podpowiedzenia i jest czym je podpowiedzieć. */\n protected readonly hasAutofill = computed(\n () => !!this.port() && this.fields().some((f) => f.autofill && TEKSTOWE.has(f.type)),\n );\n\n /**\n * Model i formularz dla aktualnej kategorii. Budowane w efekcie, nie w `computed()`,\n * bo `form()` zakłada dwie rzeczy, których ciało `computed()` nie spełnia:\n *\n * - wstrzykuje sobie zależności → stąd `runInInjectionContext`;\n * - zakłada własny `effect()`, a tego nie wolno tworzyć w kontekście reaktywnym\n * (NG0602) → stąd `untracked`, które zdejmuje aktywnego konsumenta.\n *\n * Zależność od `fields()` zostaje śledzona na zewnątrz `untracked`, więc zmiana\n * kategorii przebudowuje formularz — inny zestaw pól to inny formularz, a Signal Forms\n * wiąże schemę tylko raz, przy tworzeniu.\n */\n private readonly built = signal<{\n model: WritableSignal<Record<string, unknown>>;\n form: ReturnType<typeof form<Record<string, unknown>>>;\n } | null>(null);\n\n constructor() {\n effect(() => {\n const fields = this.fields();\n untracked(() => {\n const model = signal(initialModel(fields));\n const f = runInInjectionContext(this.injector, () =>\n form(model, (path) => {\n // Ścieżki są dynamiczne, więc indeksujemy proxy po kluczu — stąd rzutowanie.\n const paths = path as unknown as Record<string, never>;\n for (const def of fields) {\n const node = paths[def.key];\n if (!node) continue;\n if (def.required) {\n required(node, { message: this.i18n.t('map.fieldRequired', { label: def.label }) });\n }\n if (def.type === 'number') {\n if (typeof def.min === 'number') min(node, def.min);\n if (typeof def.max === 'number') max(node, def.max);\n }\n if (def.type === 'email') {\n email(node, { message: this.i18n.t('map.field.invalidEmail') });\n }\n if (def.type === 'url') {\n pattern(node, /^https?:\\/\\/\\S+$/i, {\n message: this.i18n.t('map.field.invalidUrl'),\n });\n }\n if (def.type === 'hours') {\n validate(node, (ctx) => this.hoursError(ctx.value() as KptMapOpeningHours));\n }\n }\n }),\n );\n this.built.set({ model, form: f });\n });\n });\n\n this.watchGeocoder();\n }\n\n /**\n * Podpowiada adres z geokodowania wstecznego współrzędnych kliknięcia.\n *\n * Wypełnia wyłącznie pola z `autofill` i wyłącznie te, które są jeszcze puste —\n * podpowiedź nigdy nie kasuje tego, co użytkownik zdążył wpisać. Brak portu\n * `KPT_MAP_GEOCODER` albo nieudane zapytanie to nie błąd: pola zostają puste.\n */\n private watchGeocoder(): void {\n effect((onCleanup) => {\n const geocoder = this.port();\n const at = this.at();\n const fields = this.fields();\n const built = this.built();\n if (!geocoder || !built) return;\n\n const doUzupelnienia = fields.filter((f) => f.autofill && TEKSTOWE.has(f.type));\n if (doUzupelnienia.length === 0) return;\n\n this.geocoding.set(true);\n const subscription = geocoder\n .reverse(at, { language: this.i18n.locale() })\n .subscribe({\n next: (address) => {\n this.geocoding.set(false);\n this.address.set(address);\n if (!address) return;\n built.model.update((current) => {\n const next = { ...current };\n for (const def of doUzupelnienia) {\n const wartosc = address[def.autofill!];\n // Puste pole = to, czego użytkownik nie tknął.\n if (typeof wartosc === 'string' && wartosc && !next[def.key]) next[def.key] = wartosc;\n }\n return next;\n });\n },\n error: () => this.geocoding.set(false),\n });\n onCleanup(() => {\n subscription.unsubscribe();\n this.geocoding.set(false);\n });\n });\n }\n\n /** `null` tylko między utworzeniem komponentu a pierwszym przebiegiem efektu. */\n protected readonly formRoot = computed(() => this.built()?.form ?? null);\n protected readonly formInvalid = computed(() => this.formRoot()?.().invalid() ?? true);\n\n /** Kontrolka pola po kluczu — szablon podaje ją do `[formField]`. */\n protected fieldOf(key: string): unknown {\n return (this.formRoot() as unknown as Record<string, unknown> | null)?.[key];\n }\n\n /** Komunikat pokazujemy dopiero po dotknięciu pola — bramka żyje w prezentacji. */\n protected errorOf(key: string): string | null {\n const node = this.fieldOf(key) as (() => { touched(): boolean; invalid(): boolean; errors(): { message?: string }[] }) | undefined;\n if (!node) return null;\n const state = node();\n if (!state.touched() || !state.invalid()) return null;\n return state.errors()[0]?.message ?? null;\n }\n\n /**\n * Dzień otwarty musi mieć obie godziny i różne od siebie. Dzień oznaczony jako\n * zamknięty przechodzi bez zastrzeżeń — to prawidłowa odpowiedź, a nie brak danych.\n */\n private hoursError(week: KptMapOpeningHours | undefined) {\n if (!week) return null;\n for (const day of week) {\n if (day.closed) continue;\n for (const range of day.ranges) {\n const from = parseTime(range.from);\n const to = parseTime(range.to);\n if (from === null || to === null || from === to) {\n return {\n kind: 'kptMapHoursIncomplete',\n message: this.i18n.t('map.field.hoursIncomplete', {\n day: weekdayName(day.day, this.i18n.locale()),\n }),\n };\n }\n }\n if (day.ranges.length === 0) {\n return {\n kind: 'kptMapHoursIncomplete',\n message: this.i18n.t('map.field.hoursIncomplete', {\n day: weekdayName(day.day, this.i18n.locale()),\n }),\n };\n }\n }\n return null;\n }\n\n protected optionsOf(def: KptMapFieldDef): KptOption<unknown>[] {\n return (def.options ?? []).map((o) => ({ value: o.value, label: o.label }));\n }\n\n protected controlId(def: KptMapFieldDef): string {\n return `kpt-map-field-${def.key}`;\n }\n\n /** Czy pole renderuje jeden `<input>`, na który może wskazać `label[for]`. */\n protected hasOwnInput(def: KptMapFieldDef): boolean {\n return def.type === 'text' || def.type === 'tel' || def.type === 'email' || def.type === 'url';\n }\n\n /** Współrzędne z prawego kliknięcia — pokazujemy je, ale nie pozwalamy edytować. */\n protected readonly coords = computed(() => {\n const at = this.at();\n return { lat: at.lat.toFixed(5), lng: at.lng.toFixed(5) };\n });\n\n protected async onSubmit(): Promise<void> {\n const built = this.built();\n if (!built) return;\n const { model, form: f } = built;\n // `submit()` sam oznacza całe drzewo jako dotknięte, więc błędy pokażą się od razu.\n await submit(f, {\n action: async () => {\n if (f().invalid()) return;\n this.save.emit({ ...model() });\n },\n });\n }\n}\n","@for (entry of entries(); track entry.category.id) {\n <button\n class=\"kpt-map-legend__item\"\n type=\"button\"\n [style.--_kpt-legend-color]=\"entry.colorVar\"\n [style.--_kpt-legend-fg]=\"entry.contrastVar\"\n [class.kpt-map-legend__item--off]=\"entry.hidden\"\n [attr.aria-pressed]=\"interactive() ? !entry.hidden : null\"\n [attr.aria-label]=\"interactive() ? label(entry) : null\"\n [disabled]=\"!interactive()\"\n (click)=\"toggle(entry)\"\n >\n <span class=\"kpt-map-legend__swatch\" aria-hidden=\"true\">\n @if (entry.category.icon) {\n <kpt-icon [name]=\"entry.category.icon\" />\n }\n </span>\n <span class=\"kpt-map-legend__label\">{{ entry.category.label }}</span>\n @if (entry.count !== null) {\n <span class=\"kpt-map-legend__count\">{{ entry.count }}</span>\n }\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { KptI18n, KptIcon } from '@konce-pt/angular';\nimport { colorVarOf, contrastVarOf } from '@konce-pt/map';\nimport type { KptMapCategory } from '@konce-pt/map';\n\ninterface LegendEntry {\n category: KptMapCategory;\n colorVar: string;\n /** Kolor glifu na tle `colorVar`. Zaszyta biel gubi się na jasnych rolach (`muted`). */\n contrastVar: string;\n hidden: boolean;\n count: number | null;\n}\n\n/**\n * Legenda mapy — lista kategorii ze znacznikiem koloru i ikoną. Pozycje są przyciskami:\n * kliknięcie chowa i pokazuje kategorię (`hidden` dwukierunkowe).\n *\n * `kpt-map` renderuje ją sam pod mapą przy `[legend]=\"true\"`; kto chce ją gdzie indziej,\n * wyłącza tamto i wstawia ten komponent ręcznie.\n *\n * @example\n * <kpt-map-legend [categories]=\"categories\" [(hidden)]=\"hiddenCategories\" [counts]=\"counts\" />\n */\n@Component({\n selector: 'kpt-map-legend',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptIcon],\n templateUrl: './map-legend.component.html',\n styleUrl: './map-legend.component.scss',\n host: {\n class: 'kpt-map-legend',\n '[attr.data-orientation]': 'orientation()',\n role: 'group',\n '[attr.aria-label]': 'i18n.t(\"map.legend\")',\n },\n})\nexport class KptMapLegend {\n readonly categories = input.required<readonly KptMapCategory[]>();\n /** Identyfikatory ukrytych kategorii (dwukierunkowe). */\n readonly hidden = model<string[]>([]);\n /** Opcjonalne liczniki `{ categoryId: liczba }` — pokazywane przy etykiecie. */\n readonly counts = input<Record<string, number> | null>(null);\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n /** Wyłącza chowanie kategorii — legenda staje się czysto informacyjna. */\n readonly interactive = input(true);\n\n protected readonly i18n = inject(KptI18n);\n\n protected readonly entries = computed<LegendEntry[]>(() => {\n const hidden = new Set(this.hidden());\n const counts = this.counts();\n return this.categories()\n .filter((c) => c.legend !== false)\n .map((category) => ({\n category,\n colorVar: colorVarOf(category.color),\n contrastVar: contrastVarOf(category.color),\n hidden: hidden.has(category.id),\n count: counts ? (counts[category.id] ?? 0) : null,\n }));\n });\n\n protected toggle(entry: LegendEntry): void {\n if (!this.interactive()) return;\n const id = entry.category.id;\n this.hidden.update((current) =>\n current.includes(id) ? current.filter((c) => c !== id) : [...current, id],\n );\n }\n\n protected label(entry: LegendEntry): string {\n const key = entry.hidden ? 'map.showCategory' : 'map.hideCategory';\n return this.i18n.t(key, { category: entry.category.label });\n }\n}\n","<div class=\"kpt-map-search__field\">\n <span class=\"kpt-map-search__icon\" aria-hidden=\"true\">\n <kpt-icon name=\"search\" />\n </span>\n\n <input\n class=\"kpt-map-search__input\"\n type=\"text\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n [id]=\"uid\"\n [value]=\"query()\"\n [placeholder]=\"placeholderText()\"\n [disabled]=\"disabled() || !canSearch()\"\n [attr.aria-label]=\"i18n.t('map.search.label')\"\n [attr.aria-expanded]=\"hasPanel()\"\n [attr.aria-busy]=\"busy() ? 'true' : null\"\n [attr.aria-controls]=\"hasPanel() ? uid + '-panel' : null\"\n [attr.aria-activedescendant]=\"activeIndex() >= 0 ? optionId(activeIndex()) : null\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeydown($event)\"\n />\n\n @if (query()) {\n <button\n class=\"kpt-map-search__clear\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.search.clear')\"\n [title]=\"i18n.t('map.search.clear')\"\n (click)=\"clear()\"\n >\n <!-- `kpt-icon` sam ustawia sobie aria-hidden; nazwę niesie aria-label przycisku. -->\n <kpt-icon name=\"x\" />\n </button>\n }\n</div>\n\n@if (hasPanel()) {\n <div class=\"kpt-map-search__panel\" [id]=\"uid + '-panel'\">\n @if (tooShort()) {\n <p class=\"kpt-map-search__note\">{{ i18n.t('map.search.minLength', { count: minLength() }) }}</p>\n } @else if (busy()) {\n <!-- Ta sama nota dla listy i dla dociągania współrzędnych wybranej pozycji. -->\n <p class=\"kpt-map-search__note\">{{ i18n.t('map.search.searching') }}</p>\n } @else if (results().length) {\n <!-- Panel stoi w DOM obok pola, więc aktywną pozycję wskazuje `aria-activedescendant`. -->\n <ul class=\"kpt-map-search__list\" role=\"listbox\" [attr.aria-label]=\"i18n.t('map.search.results')\">\n @for (result of results(); track result.id; let i = $index) {\n <li\n class=\"kpt-map-search__option\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [class.is-active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"i === activeIndex()\"\n (mousedown)=\"$event.preventDefault(); pick(result)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n <span class=\"kpt-map-search__pin\" aria-hidden=\"true\">\n <kpt-icon name=\"map-pin\" />\n </span>\n <span class=\"kpt-map-search__label\">{{ result.label }}</span>\n </li>\n }\n </ul>\n } @else {\n <p class=\"kpt-map-search__note\">{{ i18n.t('map.search.noResults') }}</p>\n }\n </div>\n}\n\n<!-- Stan wyszukiwania dla czytnika — wzrokowo niesie go panel. -->\n<p class=\"kpt-map-search__status\" aria-live=\"polite\">{{ status() }}</p>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { KptI18n, KptIcon } from '@konce-pt/angular';\nimport type { Subscription } from 'rxjs';\nimport type { KptMapBounds, KptMapSearchResult, KptMapSuggestion } from '@konce-pt/map';\nimport { KPT_MAP_GEOCODER, type KptMapGeocoderPort } from './geocoder.port';\n\n/** Identyfikatory pozycji listy dla `aria-activedescendant` — muszą być unikalne w dokumencie. */\nlet nextId = 0;\n\n/**\n * Wyszukiwarka adresów: pole z podpowiedziami z geokodera. Wynik wyboru leci w `selected`,\n * a co z nim zrobić — decyduje rodzic (`kpt-map` przenosi na niego widok).\n *\n * Wymaga portu `KPT_MAP_GEOCODER` **z metodą `search()`** — biblioteka nie odpytuje cudzego\n * serwera bez zgody aplikacji. Bez portu pole renderuje się wyłączone, zamiast udawać, że\n * coś znajdzie; `kpt-map` idzie dalej i w ogóle go wtedy nie pokazuje.\n *\n * Świadomie **nie** stoi na `kpt-autocomplete`: tamten filtruje opcje po stronie klienta\n * (wyniki geokodera, tolerancyjne na literówki, wypadałyby z listy), jego wartością jest\n * sam `string` (nie ma czym przewieźć współrzędnych) i wymaga CDK Overlay, którego mapa\n * poza tym nie potrzebuje.\n *\n * @example\n * <kpt-map-search [viewbox]=\"bounds\" (selected)=\"goTo($event)\" />\n */\n@Component({\n selector: 'kpt-map-search',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptIcon],\n templateUrl: './map-search.component.html',\n styleUrl: './map-search.component.scss',\n host: { class: 'kpt-map-search' },\n})\nexport class KptMapSearch {\n /** Podpowiedź w pustym polu. Pusta oddaje głos słownikowi `map.search.placeholder`. */\n readonly placeholder = input<string>('');\n /** Od ilu znaków pytać geokoder. Krótsze frazy zwracają pół świata. */\n readonly minLength = input(3, { transform: numberAttribute });\n /** Ile milisekund ciszy przed zapytaniem. */\n readonly debounce = input(300, { transform: numberAttribute });\n /** Ile podpowiedzi najwyżej. */\n readonly limit = input(5, { transform: numberAttribute });\n /** Zawężenie twarde do krajów (ISO 3166-1 alpha-2) — wyniki spoza nich nie wrócą. */\n readonly countryCodes = input<readonly string[] | null>(null);\n /** Preferowany prostokąt wyników. Nie odcina reszty świata, tylko przesuwa ją niżej. */\n readonly viewbox = input<KptMapBounds | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Geokoder tego pola. Podany wygrywa nad `KPT_MAP_GEOCODER` z DI — `kpt-map` podaje tędy\n * port swojej mapy, bo geokoder jest per mapa, a nie per aplikacja. Bez niego wszystko\n * działa jak dotąd: port przychodzi z DI.\n */\n readonly geocoder = input<KptMapGeocoderPort | null>(null);\n\n /**\n * Wybrano miejsce. **Zawsze ze współrzędnymi**: podpowiedź, której dostawca ich nie podał,\n * pole najpierw uzupełnia przez `resolve()` portu, a dopiero potem emituje.\n */\n readonly selected = output<KptMapSearchResult>();\n /** Pole wyczyszczone — rodzic sprząta po sobie (np. chowa tymczasową pinezkę). */\n readonly cleared = output<void>();\n\n protected readonly i18n = inject(KptI18n);\n private readonly injectedGeocoder = inject(KPT_MAP_GEOCODER, { optional: true });\n\n /** Rozstrzygnięty port: wejście przed DI. Czytany reaktywnie, bo mapa może go podmienić. */\n private readonly port = computed(() => this.geocoder() ?? this.injectedGeocoder);\n\n protected readonly uid = `kpt-map-search-${++nextId}`;\n\n /** Tekst widoczny w polu. Wybór podpowiedzi wpisuje tu jej etykietę. */\n protected readonly query = signal('');\n /**\n * Fraza do odpytania geokodera. Osobna od `query`, bo wybór podpowiedzi zmienia treść\n * pola — a to nie może wywołać kolejnego zapytania o coś, co już znaleźliśmy.\n */\n private readonly term = signal('');\n\n protected readonly results = signal<readonly KptMapSuggestion[]>([]);\n protected readonly loading = signal(false);\n /**\n * Trwa dociąganie współrzędnych wybranej podpowiedzi (`resolve()` portu). Osobne od\n * `loading`, bo to inny moment: tam czekamy na listę, tu na jedno konkretne miejsce.\n */\n protected readonly resolving = signal(false);\n /** Subskrypcja `resolve()` w locie — kolejny wybór i czyszczenie pola ją przerywają. */\n private pending: Subscription | null = null;\n /** Czy jakieś zapytanie już wróciło — bez tego „brak wyników\" mignąłby przed pierwszym. */\n protected readonly searched = signal(false);\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n\n /** Fraza za krótka, ale niepusta — zamiast ciszy pokazujemy, ile znaków brakuje. */\n protected readonly tooShort = computed(() => {\n const length = this.query().trim().length;\n return length > 0 && length < this.minLength();\n });\n\n protected readonly hasPanel = computed(\n () =>\n this.open() &&\n (this.tooShort() || this.busy() || this.results().length > 0 || this.searched()),\n );\n\n /** Cokolwiek leci do geokodera — lista albo pojedyncze miejsce. Jeden stan dla szablonu. */\n protected readonly busy = computed(() => this.loading() || this.resolving());\n\n protected readonly canSearch = computed(() => !!this.port()?.search);\n\n /** Nie udało się ustalić miejsca wybranej podpowiedzi — komunikat zamiast cichej ciszy. */\n private readonly unresolved = signal(false);\n\n /** Komunikat dla `aria-live` — czytnik dostaje stan, którego wzrokowo nie da się przegapić. */\n protected readonly status = computed(() => {\n if (this.tooShort()) return this.i18n.t('map.search.minLength', { count: this.minLength() });\n if (this.busy()) return this.i18n.t('map.search.searching');\n if (this.unresolved()) return this.i18n.t('map.search.noResults');\n if (!this.searched()) return '';\n const count = this.results().length;\n return count === 0\n ? this.i18n.t('map.search.noResults')\n : this.i18n.t('map.search.found', { count });\n });\n\n protected readonly placeholderText = computed(\n () => this.placeholder() || this.i18n.t('map.search.placeholder'),\n );\n\n constructor() {\n this.watchTerm();\n inject(DestroyRef).onDestroy(() => this.pending?.unsubscribe());\n }\n\n /**\n * Odpytuje geokoder po odczekaniu `debounce` od ostatniego znaku.\n *\n * Debounce stoi na `setTimeout`, a nie na operatorach rxjs: porty tego pakietu używają\n * wyłącznie `Observable`/`of`, a rxjs nie jest zadeklarowany jako `peerDependency`\n * biblioteki (wchodzi tranzytywnie przez `@angular/core`). `onCleanup` kasuje zarówno\n * niewystrzelony timer, jak i zapytanie w locie — adapter Nominatim przerywa wtedy\n * `fetch` własnym `AbortController`.\n */\n private watchTerm(): void {\n effect((onCleanup) => {\n const term = this.term().trim();\n const geocoder = this.port();\n\n if (!geocoder?.search || term.length < this.minLength()) {\n this.results.set([]);\n this.loading.set(false);\n this.searched.set(false);\n this.activeIndex.set(-1);\n return;\n }\n\n // Reszta opcji czytana bez śledzenia: zapytanie i tak leci po każdym znaku,\n // a tablica wpisana wprost w szablonie rodzica jest przy każdym przebiegu nowa\n // i sama w sobie wywoływałaby ten efekt w kółko.\n const [wait, options] = untracked(() => [\n this.debounce(),\n {\n language: this.i18n.locale(),\n limit: this.limit(),\n viewbox: this.viewbox() ?? undefined,\n countryCodes: this.countryCodes() ?? undefined,\n },\n ]);\n\n this.loading.set(true);\n let subscription: Subscription | null = null;\n\n const timer = setTimeout(() => {\n subscription = geocoder.search!(term, options).subscribe({\n next: (results) => this.applyResults(results),\n // Nieudane zapytanie to pusta lista, a nie wywrotka pola.\n error: () => this.applyResults([]),\n });\n }, wait);\n\n onCleanup(() => {\n clearTimeout(timer);\n subscription?.unsubscribe();\n });\n });\n }\n\n private applyResults(results: readonly KptMapSuggestion[]): void {\n // Podpowiedź bez współrzędnych jest do czegokolwiek dobra tylko wtedy, gdy port umie\n // ją uzupełnić. Bez `resolve()` kliknięcie w nią nie miałoby dokąd polecieć, a pozycja,\n // która nic nie robi, jest gorsza od jej braku — więc taka nie trafia na listę.\n this.results.set(this.port()?.resolve ? results : results.filter((r) => r.at));\n this.loading.set(false);\n this.searched.set(true);\n this.activeIndex.set(-1);\n this.open.set(true);\n }\n\n protected optionId(index: number): string {\n return `${this.uid}-opt-${index}`;\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.query.set(value);\n this.term.set(value);\n this.open.set(true);\n this.unresolved.set(false);\n }\n\n protected onFocus(): void {\n this.open.set(true);\n }\n\n protected onBlur(): void {\n this.open.set(false);\n }\n\n /**\n * Wybór podpowiedzi. Dostawca, który podał współrzędne na liście, emituje natychmiast —\n * dla Nominatima i każdego geokodera pytanego wprost nic się nie zmienia.\n *\n * Podpowiedź bez `at` (Google Places Autocomplete) trzeba najpierw uzupełnić: jedno\n * wywołanie `resolve()` na *wybór*, nigdy w trakcie pisania. Panel zostaje otwarty\n * z komunikatem „Szukam…\", żeby czekanie nie wyglądało na zawieszenie pola.\n */\n protected pick(suggestion: KptMapSuggestion): void {\n // Etykieta wraca do pola, ale `term` zostaje — inaczej wybór odpaliłby kolejne zapytanie.\n this.query.set(suggestion.label);\n this.activeIndex.set(-1);\n this.unresolved.set(false);\n this.pending?.unsubscribe();\n this.pending = null;\n\n if (suggestion.at) {\n this.open.set(false);\n this.resolving.set(false);\n this.selected.emit(suggestion as KptMapSearchResult);\n return;\n }\n\n const geocoder = this.port();\n // Do listy trafiają tylko pozycje możliwe do obsłużenia, więc tu już nie ma czego ratować.\n if (!geocoder?.resolve) return;\n\n this.resolving.set(true);\n this.pending = geocoder.resolve(suggestion, { language: this.i18n.locale() }).subscribe({\n next: (result) => this.applyResolved(result),\n // Nieudane dociągnięcie to komunikat, a nie wywrotka pola.\n error: () => this.applyResolved(null),\n });\n }\n\n private applyResolved(result: KptMapSearchResult | null): void {\n this.resolving.set(false);\n this.pending = null;\n if (!result) {\n // Etykieta zostaje w polu, żeby dało się poprawić frazę zamiast pisać ją od zera.\n this.unresolved.set(true);\n this.open.set(true);\n return;\n }\n this.open.set(false);\n this.selected.emit(result);\n }\n\n protected clear(): void {\n this.pending?.unsubscribe();\n this.pending = null;\n this.resolving.set(false);\n this.unresolved.set(false);\n this.query.set('');\n this.term.set('');\n this.results.set([]);\n this.searched.set(false);\n this.activeIndex.set(-1);\n this.open.set(false);\n this.cleared.emit();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const results = this.results();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.open.set(true);\n this.activeIndex.set(Math.min(this.activeIndex() + 1, results.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.activeIndex.set(Math.max(this.activeIndex() - 1, 0));\n break;\n case 'Enter': {\n const result = results[this.activeIndex()];\n if (result) {\n // Pole bywa w formularzu aplikacji — Enter nie ma go wysyłać.\n event.preventDefault();\n this.pick(result);\n }\n break;\n }\n case 'Escape':\n // Pierwszy Esc zamyka listę, drugi czyści pole — jak w polu wyszukiwania przeglądarki.\n if (this.open()) this.open.set(false);\n else if (this.query()) this.clear();\n break;\n default:\n break;\n }\n }\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\nimport type { KptLatLng, KptMapCategory, KptMapLocation } from '@konce-pt/map';\n\n/** Kontekst szablonu popupu — `$implicit` to lokalizacja. */\nexport interface KptMapPopupContext<T = unknown> {\n $implicit: KptMapLocation<T>;\n /** Skrót do `location.data`, żeby nie pisać `loc.data.x` w każdym wierszu. */\n data: T | undefined;\n category: KptMapCategory | undefined;\n /**\n * Odległość punktu w metrach od `[distanceFrom]`, a bez niego od pozycji użytkownika.\n * `null`, gdy nie ma punktu odniesienia — geolokalizacja jest wyłączona albo odmówiona.\n */\n distance: number | null;\n close: () => void;\n}\n\n/**\n * Szablon popupu szczegółów. Bez atrybutu `category` służy za wariant zapasowy\n * dla kategorii, które własnego szablonu nie mają.\n *\n * Typ `data` domyślnie jest luźny (jak `let-row` w tabeli CDK), bo Angular nie potrafi\n * przenieść generyka z `kpt-map` na dyrektywę osadzoną w jego treści. Kto chce pełnego\n * wnioskowania, wiąże `[kptMapPopupTypeFor]` z tą samą tablicą, którą karmi mapę —\n * wtedy `data` dostaje konkretny typ.\n *\n * @example\n * <ng-template kptMapPopup category=\"closure\" let-loc let-data=\"data\" let-dist=\"distance\">\n * <strong>{{ loc.title }}</strong>\n * <p>{{ data.address }}</p>\n * </ng-template>\n *\n * @example\n * // z wnioskowaniem typu\n * <ng-template kptMapPopup [kptMapPopupTypeFor]=\"locations()\" let-data=\"data\">\n * <p>{{ data.address }}</p>\n * </ng-template>\n */\n@Directive({ selector: 'ng-template[kptMapPopup]' })\nexport class KptMapPopupTemplate<T = any> {\n /** Kategoria, do której szablon się stosuje; pusta wartość = szablon zapasowy. */\n readonly category = input<string>('', { alias: 'category' });\n\n /**\n * Nośnik typu — w runtime nieużywany. Jedyne zadanie: pozwolić Angularowi wywnioskować\n * `T` z tablicy lokalizacji, tak jak `ngFor` wnioskuje typ elementu z bindowanej kolekcji.\n */\n readonly typeFor = input<readonly KptMapLocation<T>[] | undefined>(undefined, {\n alias: 'kptMapPopupTypeFor',\n });\n\n readonly templateRef = inject<TemplateRef<KptMapPopupContext<T>>>(TemplateRef);\n\n /** Zawęża typ kontekstu w szablonie (`strictTemplates`). */\n static ngTemplateContextGuard<T>(\n _dir: KptMapPopupTemplate<T>,\n _ctx: unknown,\n ): _ctx is KptMapPopupContext<T> {\n return true;\n }\n}\n\n/** Kontekst szablonu formularza dodawania lokalizacji. */\nexport interface KptMapCreateFormContext {\n $implicit: KptMapCreateFormApi;\n at: KptLatLng;\n category: KptMapCategory | undefined;\n}\n\nexport interface KptMapCreateFormApi {\n at: KptLatLng;\n category: KptMapCategory | undefined;\n /** Zamyka dialog bez zapisu. */\n close: () => void;\n /** Zamyka dialog i emituje `locationCreate` z podanymi wartościami. */\n submit: (value: Record<string, unknown>) => void;\n}\n\n/**\n * Własny formularz „dodaj lokalizację\". Jego obecność wyłącza formularz budowany\n * ze schemy kategorii.\n *\n * @example\n * <ng-template kptMapCreateForm let-api>\n * <button (click)=\"api.submit({ title: 'Nowy punkt' })\">Zapisz</button>\n * </ng-template>\n */\n@Directive({ selector: 'ng-template[kptMapCreateForm]' })\nexport class KptMapCreateFormTemplate {\n readonly templateRef = inject<TemplateRef<KptMapCreateFormContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: KptMapCreateFormTemplate,\n _ctx: unknown,\n ): _ctx is KptMapCreateFormContext {\n return true;\n }\n}\n","import { InjectionToken, type Provider } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport type { KptLatLng, KptMapGeolocationError, KptMapUserPosition } from '@konce-pt/map';\n\n/**\n * Źródło pozycji użytkownika. Port, a nie bezpośrednie `navigator.geolocation` — dzięki\n * temu Storybook i testy podstawiają stałą pozycję zamiast pytać przeglądarkę o zgodę.\n */\nexport interface KptMapGeolocationPort {\n /**\n * Strumień pozycji. `null` oznacza brak odczytu (brak zgody, wyłączony GPS, SSR).\n * Subskrypcja rozpoczyna nasłuch, a jej zamknięcie go kończy.\n */\n watch(options?: PositionOptions): Observable<KptMapUserPosition | null>;\n}\n\nexport const KPT_MAP_GEOLOCATION = new InjectionToken<KptMapGeolocationPort>('KPT_MAP_GEOLOCATION');\n\n/** Błąd geolokalizacji rozpoznany po kodzie — rzucany strumieniem, nie wyjątkiem. */\nexport class KptMapGeolocationFailure extends Error {\n constructor(readonly detail: KptMapGeolocationError) {\n super(detail.message);\n this.name = 'KptMapGeolocationFailure';\n }\n}\n\nconst DEFAULT_OPTIONS: PositionOptions = {\n enableHighAccuracy: true,\n // Pozycja starsza niż pół minuty jest już bezużyteczna dla „gdzie jestem\".\n maximumAge: 30_000,\n timeout: 15_000,\n};\n\n/**\n * Domyślna implementacja na `navigator.geolocation.watchPosition`.\n *\n * Uwaga: Geolocation API działa wyłącznie w bezpiecznym kontekście (HTTPS albo\n * `localhost`). Na `http://` z adresem IP przeglądarka odmówi — to nie jest błąd mapy.\n */\nexport class KptBrowserGeolocation implements KptMapGeolocationPort {\n watch(options?: PositionOptions): Observable<KptMapUserPosition | null> {\n // SSR i przeglądarki bez API: strumień kończy się jednym `null`, bez błędu.\n if (typeof navigator === 'undefined' || !navigator.geolocation) {\n return of(null);\n }\n\n return new Observable<KptMapUserPosition | null>((subscriber) => {\n const id = navigator.geolocation.watchPosition(\n (position) =>\n subscriber.next({\n at: { lat: position.coords.latitude, lng: position.coords.longitude },\n accuracy: position.coords.accuracy,\n timestamp: position.timestamp,\n }),\n (error) => subscriber.error(new KptMapGeolocationFailure(describeError(error))),\n { ...DEFAULT_OPTIONS, ...options },\n );\n return () => navigator.geolocation.clearWatch(id);\n });\n }\n}\n\nfunction describeError(error: GeolocationPositionError): KptMapGeolocationError {\n switch (error.code) {\n case error.PERMISSION_DENIED:\n return { kind: 'denied', message: error.message };\n case error.POSITION_UNAVAILABLE:\n return { kind: 'unavailable', message: error.message };\n case error.TIMEOUT:\n return { kind: 'timeout', message: error.message };\n default:\n return { kind: 'unsupported', message: error.message };\n }\n}\n\n/** Stała pozycja — Storybook, testy, demo bez pytania o zgodę. */\nexport class KptMapGeolocationStub implements KptMapGeolocationPort {\n constructor(\n private readonly at: KptLatLng,\n private readonly accuracy = 50,\n ) {}\n\n watch(): Observable<KptMapUserPosition | null> {\n return of({ at: this.at, accuracy: this.accuracy, timestamp: Date.now() });\n }\n}\n\n/**\n * Podstawia stałą pozycję zamiast prawdziwej geolokalizacji.\n *\n * @example\n * providers: [provideKptMapGeolocationStub({ lat: 52.23, lng: 21.01 })]\n */\nexport function provideKptMapGeolocationStub(at: KptLatLng, accuracy = 50): Provider {\n return { provide: KPT_MAP_GEOLOCATION, useValue: new KptMapGeolocationStub(at, accuracy) };\n}\n","import { InjectionToken, type Provider } from '@angular/core';\nimport { createGoogleEngine, createLeafletEngine } from '@konce-pt/map';\nimport type { KptGoogleOptions, KptLeafletOptions, KptMapEngineFactory } from '@konce-pt/map';\nimport { KPT_MAP_GEOLOCATION, KptBrowserGeolocation } from './geolocation.port';\n\n/**\n * Fabryka silnika mapy. Fabryka, a nie gotowa instancja — każda mapa na stronie\n * potrzebuje własnego obiektu, a provider jest jeden.\n */\nexport const KPT_MAP_ENGINE = new InjectionToken<KptMapEngineFactory>('KPT_MAP_ENGINE');\n\n/**\n * Silnik Leaflet + OpenStreetMap. Wymaga zainstalowanej paczki `leaflet`\n * (zależność opcjonalna) i dołączonego `leaflet/dist/leaflet.css`.\n *\n * @example\n * // main.ts\n * bootstrapApplication(App, { providers: [provideKptLeafletMap()] });\n */\nexport function provideKptLeafletMap(options: KptLeafletOptions = {}): Provider[] {\n return [\n { provide: KPT_MAP_ENGINE, useValue: () => createLeafletEngine(options) },\n // Nadpisywalne — wystarczy podać własny provider PO tym.\n { provide: KPT_MAP_GEOLOCATION, useClass: KptBrowserGeolocation },\n ];\n}\n\n/**\n * Silnik Google Maps. Nie wymaga żadnej paczki npm — API dogrywa się skryptem przy pierwszej\n * mapie — ale wymaga klucza, konta rozliczeniowego i **`mapId`** z konsoli Google\n * (*Map management → Create Map ID*): bez niego znaczniki się nie pojawią.\n *\n * Różnice wobec Leafleta: `[tileUrl]` i `[attribution]` są bez znaczenia (kafle i atrybucję\n * dostarcza Google i nie wolno ich zasłonić), wczytanie mapy liczy się do SKU Dynamic Maps\n * (10 000 miesięcznie za darmo), a zoom bywa ułamkowy.\n *\n * **To jedyny silnik, z którym wolno użyć geokodera Google.** Service Specific Terms §6.2\n * i §14.2 zabraniają pokazywać wyniki Geocoding API i Places API razem z mapą nie-Google,\n * a więc także z domyślnym Leafletem tej biblioteki.\n *\n * @example\n * // main.ts\n * providers: [provideKptGoogleMap({ apiKey: env.googleMapsKey, mapId: env.googleMapId })]\n */\nexport function provideKptGoogleMap(options: KptGoogleOptions): Provider[] {\n return [\n { provide: KPT_MAP_ENGINE, useValue: () => createGoogleEngine(options) },\n { provide: KPT_MAP_GEOLOCATION, useClass: KptBrowserGeolocation },\n ];\n}\n","<div class=\"kpt-map__viewport\">\n <!-- Kontener silnika. Wszystko poniżej to warstwa Angulara rozpięta nad mapą. -->\n <div #canvas class=\"kpt-map__canvas\"></div>\n\n <div class=\"kpt-map__controls\" role=\"group\" [attr.aria-label]=\"i18n.t('map.legend')\">\n <button\n class=\"kpt-map__control\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.zoomIn')\"\n [title]=\"i18n.t('map.zoomIn')\"\n [disabled]=\"!ready()\"\n (click)=\"zoomBy(1)\"\n >\n <span aria-hidden=\"true\">+</span>\n </button>\n <button\n class=\"kpt-map__control\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.zoomOut')\"\n [title]=\"i18n.t('map.zoomOut')\"\n [disabled]=\"!ready()\"\n (click)=\"zoomBy(-1)\"\n >\n <span aria-hidden=\"true\">−</span>\n </button>\n @if (showUserLocation()) {\n <button\n class=\"kpt-map__control kpt-map__control--locate\"\n type=\"button\"\n [attr.aria-label]=\"locationBlocked() ? i18n.t('map.locationDenied') : i18n.t('map.locateMe')\"\n [title]=\"locationBlocked() ? i18n.t('map.locationDenied') : i18n.t('map.locateMe')\"\n [disabled]=\"!userPosition()\"\n (click)=\"centreOnUser()\"\n >\n <span class=\"kpt-map__crosshair\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n\n <!--\n Wyszukiwarka adresów. Renderowana tylko wtedy, gdy port ma czym szukać.\n\n Pozycjonuje ją OPAKOWANIE, a nie klasa postawiona wprost na <kpt-map-search> —\n powód stoi przy regule .kpt-map__search w map.component.scss.\n -->\n @if (searchEnabled()) {\n <div class=\"kpt-map__search\">\n <kpt-map-search\n [geocoder]=\"activeGeocoder()\"\n [placeholder]=\"searchPlaceholder()\"\n [minLength]=\"searchOptions().minLength ?? 3\"\n [debounce]=\"searchOptions().debounce ?? 300\"\n [limit]=\"searchOptions().limit ?? 5\"\n [viewbox]=\"searchViewbox()\"\n [countryCodes]=\"searchCountryCodes()\"\n (selected)=\"onSearchSelect($event)\"\n (cleared)=\"clearSearchPin()\"\n />\n </div>\n }\n\n <!-- Menu pod prawym przyciskiem: wybór kategorii nowej lokalizacji. -->\n @if (allowCreate() && contextTarget()) {\n @if (contextPosition(); as position) {\n <div\n class=\"kpt-map__context\"\n role=\"menu\"\n [attr.aria-label]=\"i18n.t('map.addLocation')\"\n [style.--_kpt-map-x.px]=\"position.x\"\n [style.--_kpt-map-y.px]=\"position.y\"\n >\n <p class=\"kpt-map__context-title\">{{ i18n.t('map.chooseCategory') }}</p>\n @for (category of creatableCategories(); track category.id) {\n <button class=\"kpt-map__context-item\" type=\"button\" role=\"menuitem\" (click)=\"startCreate(category)\">\n <span class=\"kpt-map__context-dot\" aria-hidden=\"true\"></span>\n {{ category.label }}\n </button>\n } @empty {\n <p class=\"kpt-map__context-empty\">{{ i18n.t('map.empty') }}</p>\n }\n </div>\n }\n }\n\n <!-- Popup szczegółów. Renderowany przez Angulara, pozycjonowany z engine.project(). -->\n @if (popup(); as state) {\n @if (popupPosition(); as position) {\n <div\n #popupEl\n class=\"kpt-map__popup\"\n role=\"dialog\"\n [attr.data-layout]=\"popupLayout()\"\n [attr.aria-label]=\"state.location.title\"\n [style.--_kpt-map-x.px]=\"position.x\"\n [style.--_kpt-map-y.px]=\"position.y\"\n >\n <!-- W wariancie `card` krzyżyk daje karta, więc wbudowany byłby drugim. -->\n @if (popupLayout() === 'plain') {\n <button\n class=\"kpt-map__popup-close\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('common.close')\"\n (click)=\"closePopup()\"\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n }\n\n @if (state.group) {\n <!-- Grupa punktów o tej samej współrzędnej — zoom jej nie rozdzieli. -->\n <p class=\"kpt-map__popup-group\">{{ i18n.t('map.clusterItems') }}</p>\n <div class=\"kpt-map__popup-tabs\" role=\"tablist\">\n @for (item of state.group.items; track item.id) {\n <button\n class=\"kpt-map__popup-tab\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"item.id === state.location.id\"\n (click)=\"selectFromGroup(item)\"\n >\n {{ item.title }}\n </button>\n }\n </div>\n }\n\n <div class=\"kpt-map__popup-body\">\n @if (popupTemplate(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: state.location,\n data: state.location.data,\n category: popupCategory(),\n distance: popupDistance(),\n close: closePopupFn\n }\"\n />\n } @else {\n <strong class=\"kpt-map__popup-title\">{{ state.location.title }}</strong>\n @if (popupCategory(); as category) {\n <p class=\"kpt-map__popup-category\">{{ category.label }}</p>\n }\n }\n </div>\n </div>\n }\n }\n</div>\n\n@if (legend()) {\n <kpt-map-legend\n class=\"kpt-map__legend\"\n [categories]=\"categories()\"\n [(hidden)]=\"hiddenCategories\"\n [counts]=\"counts()\"\n />\n}\n\n<!-- Dialog dodawania: schema z kategorii, a własny szablon ma pierwszeństwo. -->\n<kpt-dialog [(open)]=\"createOpen\" [header]=\"i18n.t('map.addLocation')\">\n @if (createFor(); as target) {\n @if (createFormTemplate(); as tpl) {\n @if (createFormApi(); as api) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: api, at: target.at, category: target.category }\"\n />\n }\n } @else {\n <kpt-map-create-dialog\n [geocoder]=\"activeGeocoder()\"\n [category]=\"target.category\"\n [at]=\"target.at\"\n (save)=\"emitCreate($event)\"\n (cancelled)=\"closeCreate()\"\n />\n }\n }\n</kpt-dialog>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { KptDialog, KptI18n, KptIconRegistry, renderKptIconSvg } from '@konce-pt/angular';\nimport { KPT_MAP_DEFAULT_ATTRIBUTION, KPT_MAP_DEFAULT_TILE_URL, boundsOf, clusterLocations, countByCategory, haversine, isCluster, isSplittable, renderClusterHtml, renderMarkerHtml, renderUserMarkerHtml, resolveCountryView } from '@konce-pt/map';\nimport type { KptClusterOptions, KptLatLng, KptMapBounds, KptMapCategory, KptMapCluster, KptMapCreateEvent, KptMapEngine, KptMapEngineFactory, KptMapGeolocationError, KptMapLocation, KptMapPoint, KptMapPointerEvent, KptMapRenderedMarker, KptMapSearchResult, KptMapUserPosition, KptMapView } from '@konce-pt/map';\nimport { KptMapCreateDialog } from './map-create-dialog.component';\nimport { KptMapLegend } from './map-legend.component';\nimport { KptMapSearch } from './map-search.component';\nimport {\n KptMapCreateFormTemplate,\n KptMapPopupTemplate,\n type KptMapCreateFormApi,\n} from './map-templates.directive';\nimport { KPT_MAP_GEOCODER, type KptMapGeocoderPort } from './geocoder.port';\nimport { KPT_MAP_GEOLOCATION, KptMapGeolocationFailure } from './geolocation.port';\nimport { KPT_MAP_ENGINE } from './map.providers';\n\n/** Rozmiary ikon w pikselach — silnik potrzebuje ich do zakotwiczenia znacznika. */\nconst MARKER_SIZE = { width: 32, height: 42 } as const;\nconst DOT_SIZE = { width: 24, height: 24 } as const;\nconst CLUSTER_SIZE = { width: 44, height: 44 } as const;\n\n/** Ile miejsca zostawić wokół zasięgu przy `fitBounds`. */\nconst FIT_PADDING = 48;\n\n/**\n * Identyfikator tymczasowej pinezki wyszukiwarki. Nie należy do `entries()`, więc\n * `onMarkerClick()` nie znajdzie dla niego wpisu i cicho wyjdzie — kliknięcie w wynik\n * wyszukiwania niczego nie otwiera.\n */\nconst SEARCH_MARKER_ID = 'kpt-map:search';\n\n/** Brak silnika to najczęstsza pomyłka przy pierwszym użyciu — komunikat niesie instrukcję. */\nconst NO_ENGINE_ERROR =\n 'kpt-map: brak silnika mapy. Zarejestruj go w aplikacji — ' +\n '`provideKptLeafletMap()` albo `provideKptGoogleMap({ apiKey, mapId })` — ' +\n 'albo podaj fabrykę wprost przez `[engine]`.';\n\ninterface PopupState<T> {\n location: KptMapLocation<T>;\n /** Grupa, z której popup został otwarty — lista nierozdzielalnych punktów. */\n group: KptMapCluster<T> | null;\n}\n\n/**\n * Mapa z konfigurowalnymi znacznikami: kategorie z kolorem i ikoną, grupowanie z licznikiem,\n * popup szczegółów o szablonie zależnym od kategorii, legenda i dodawanie lokalizacji\n * prawym przyciskiem myszy.\n *\n * Silnik (domyślnie Leaflet + OpenStreetMap) dostarcza `provideKptLeafletMap()`. Wymaga\n * zainstalowanej paczki `leaflet` (zależność opcjonalna) i dołączonego `leaflet/dist/leaflet.css`.\n *\n * @example\n * <kpt-map [locations]=\"locations()\" [categories]=\"categories\" allowCreate showUserLocation>\n * <ng-template kptMapPopup category=\"closure\" let-loc let-data=\"data\">\n * <strong>{{ loc.title }}</strong>\n * <p>{{ data.address }}</p>\n * </ng-template>\n * </kpt-map>\n */\n@Component({\n selector: 'kpt-map',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet, KptDialog, KptMapLegend, KptMapSearch, KptMapCreateDialog],\n templateUrl: './map.component.html',\n styleUrl: './map.component.scss',\n host: {\n class: 'kpt-map',\n '[style.--kpt-map-height]': 'height()',\n '[attr.data-engine]': 'engineKind()',\n },\n})\nexport class KptMap<T = unknown> {\n readonly locations = input.required<readonly KptMapLocation<T>[]>();\n readonly categories = input.required<readonly KptMapCategory[]>();\n\n /** Kod kraju z presetów (`PL`, `DE`, `EU`…). Nieznany kod cofa się do Polski. */\n readonly country = input<string>('PL');\n /** Jawny widok startowy; nadpisuje `country`. */\n readonly view = input<KptMapView | null>(null);\n /** Blokuje przesuwanie poza zasięg kraju (albo `bounds`, gdy podane). */\n readonly restrictToCountry = input(false, { transform: booleanAttribute });\n /** Jawny zasięg startowy; nadpisuje `country` i `view`. */\n readonly bounds = input<KptMapBounds | null>(null);\n\n readonly cluster = input(true, { transform: booleanAttribute });\n readonly clusterOptions = input<Partial<Omit<KptClusterOptions, 'zoom'>>>({});\n /** `dominant` barwi grupę kolorem najliczniejszej kategorii. */\n readonly clusterColorBy = input<'dominant' | 'none'>('none');\n\n /** Renderuje legendę pod mapą. Wyłącz, jeśli chcesz ją umieścić gdzie indziej. */\n readonly legend = input(true, { transform: booleanAttribute });\n /** Identyfikatory ukrytych kategorii (dwukierunkowe) — legenda je przełącza. */\n readonly hiddenCategories = model<string[]>([]);\n /** Pokazuje liczniki przy pozycjach legendy. */\n readonly legendCounts = input(true, { transform: booleanAttribute });\n\n readonly showUserLocation = input(false, { transform: booleanAttribute });\n /** Przy każdej nowej pozycji centruje mapę na użytkowniku. */\n readonly followUser = input(false, { transform: booleanAttribute });\n\n /** Włącza menu „Dodaj lokalizację\" pod prawym przyciskiem myszy. */\n readonly allowCreate = input(false, { transform: booleanAttribute });\n\n /**\n * Pokazuje wyszukiwarkę adresów w rogu mapy. Wymaga portu `KPT_MAP_GEOCODER`\n * **z metodą `search()`** — bez niego pole się nie renderuje, bo biblioteka nie\n * odpytuje cudzego serwera bez zgody aplikacji.\n */\n readonly search = input(false, { transform: booleanAttribute });\n /** Podpowiedź w pustym polu wyszukiwania. Pusta oddaje głos słownikowi. */\n readonly searchPlaceholder = input<string>('');\n /** Strojenie wyszukiwarki. Domyślnie `3 / 300 ms / 5`. */\n readonly searchOptions = input<{\n minLength?: number;\n debounce?: number;\n limit?: number;\n /** Twarde zawężenie do krajów (ISO 3166-1 alpha-2); nadpisuje regułę `restrictToCountry`. */\n countryCodes?: readonly string[];\n }>({});\n /**\n * Zoom, na jaki mapa wchodzi po wybraniu wyniku bez własnego zasięgu (pojedynczy adres).\n * Wynik z zasięgiem — miasto, region — dostaje `fitBounds` zamiast tego.\n */\n readonly searchZoom = input(16, { transform: numberAttribute });\n /** Zostawia tymczasową pinezkę w znalezionym punkcie. */\n readonly searchMarker = input(true, { transform: booleanAttribute });\n\n /**\n * Wygląd popupu. `plain` to wąska ramka na treść tekstową (domyślna),\n * `card` oddaje całą szerokość i wysokość karcie miejsca: bez paddingu,\n * bez wbudowanego krzyżyka, z przewijaniem, gdy treść nie mieści się w mapie.\n */\n readonly popupLayout = input<'plain' | 'card'>('plain');\n\n /**\n * Punkt odniesienia dystansu podawanego szablonowi popupu jako `distance`.\n * `null` znaczy „pozycja użytkownika z `KPT_MAP_GEOLOCATION`\", więc domyślnie\n * jest to odległość od miejsca, w którym stoi patrzący. Aplikacja może podstawić\n * inny punkt — wyszukany adres, siedzibę firmy, stałą pozycję w demie.\n */\n readonly distanceFrom = input<KptLatLng | null>(null);\n\n readonly height = input<string>('480px');\n /** Bez znaczenia dla silnika Google — kafle i atrybucję dostarcza tam Google. */\n readonly tileUrl = input<string | null>(null);\n readonly attribution = input<string | null>(null);\n\n /**\n * Silnik **tej** mapy. Podany wygrywa nad `KPT_MAP_ENGINE` z DI, więc dwie mapy o różnych\n * silnikach mieszczą się na jednej stronie bez komponentów-opakowań. Bez niego wszystko\n * działa jak dotąd — silnik przychodzi z DI.\n *\n * Fabryka, a nie gotowa instancja: każda mapa potrzebuje własnego obiektu. Czytany raz,\n * przy inicjalizacji — podmiana po starcie nie przeładowuje mapy.\n *\n * @example\n * readonly google: KptMapEngineFactory = () => createGoogleEngine({ apiKey, mapId });\n */\n readonly engine = input<KptMapEngineFactory | null>(null);\n\n /**\n * Geokoder **tej** mapy. Podany wygrywa nad `KPT_MAP_GEOCODER` z DI — tak samo jak\n * `[engine]` nad `KPT_MAP_ENGINE` i z tego samego powodu: Service Specific Terms wiążą\n * geokoder Google z **mapą** Google, a nie z aplikacją. Na stronie z dwoma silnikami\n * globalny provider nie umiałby tej reguły dotrzymać; wejście umie.\n *\n * Trafia i do wyszukiwarki, i do formularza „dodaj lokalizację\" — jeden port na oba kierunki.\n *\n * @example\n * <kpt-map [engine]=\"google\" [geocoder]=\"googleGeocoder\" … />\n */\n readonly geocoder = input<KptMapGeocoderPort | null>(null);\n\n readonly locationClick = output<KptMapLocation<T>>();\n readonly clusterClick = output<KptMapCluster<T>>();\n readonly locationCreate = output<KptMapCreateEvent>();\n /** Wybrano podpowiedź wyszukiwarki. Mapa sama przenosi na nią widok. */\n readonly searchSelect = output<KptMapSearchResult>();\n readonly viewChange = output<{ center: KptLatLng; zoom: number; bounds: KptMapBounds }>();\n readonly userPositionChange = output<KptMapUserPosition | null>();\n readonly userLocationError = output<KptMapGeolocationError>();\n\n protected readonly i18n = inject(KptI18n);\n private readonly icons = inject(KptIconRegistry);\n /** Opcjonalny, bo silnik może przyjść wejściem `[engine]` zamiast z DI. */\n private readonly engineFactory = inject(KPT_MAP_ENGINE, { optional: true });\n private readonly geolocation = inject(KPT_MAP_GEOLOCATION, { optional: true });\n /** Opcjonalny — wejście `[geocoder]` i tak ma nad nim pierwszeństwo. */\n private readonly injectedGeocoder = inject(KPT_MAP_GEOCODER, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n /** Rozstrzygnięty port geokodera: wejście przed DI. Szablon podaje go dzieciom. */\n protected readonly activeGeocoder = computed(() => this.geocoder() ?? this.injectedGeocoder);\n\n private readonly canvas = viewChild.required<ElementRef<HTMLElement>>('canvas');\n private readonly popupEl = viewChild<ElementRef<HTMLElement>>('popupEl');\n private readonly popupTemplates = contentChildren<KptMapPopupTemplate<T>>(KptMapPopupTemplate);\n protected readonly createFormTemplate = contentChild(KptMapCreateFormTemplate);\n\n private mapEngine: KptMapEngine | null = null;\n protected readonly engineKind = signal<string | null>(null);\n protected readonly ready = signal(false);\n\n /** Zoom trzymamy w sygnale, bo od niego zależy wynik grupowania. */\n private readonly zoom = signal(6);\n /** Rośnie przy każdym ruchu mapy — wymusza przeliczenie pozycji popupu. */\n private readonly viewportTick = signal(0);\n\n protected readonly popup = signal<PopupState<T> | null>(null);\n protected readonly contextTarget = signal<{ at: KptLatLng; point: KptMapPoint } | null>(null);\n protected readonly createFor = signal<{ at: KptLatLng; category: KptMapCategory } | null>(null);\n protected readonly createOpen = signal(false);\n protected readonly userPosition = signal<KptMapUserPosition | null>(null);\n /** Ostatni wybrany wynik wyszukiwania — źródło tymczasowej pinezki. */\n protected readonly searchPin = signal<KptMapSearchResult | null>(null);\n protected readonly locationBlocked = signal(false);\n\n private readonly categoryById = computed(\n () => new Map(this.categories().map((c) => [c.id, c])),\n );\n\n /** Lokalizacje po odfiltrowaniu kategorii ukrytych w legendzie. */\n private readonly visibleLocations = computed(() => {\n const hidden = new Set(this.hiddenCategories());\n return hidden.size === 0\n ? this.locations()\n : this.locations().filter((l) => !hidden.has(l.categoryId));\n });\n\n protected readonly counts = computed(() =>\n this.legendCounts() ? countByCategory(this.locations()) : null,\n );\n\n /** Wynik grupowania dla aktualnego zoomu — grupy i punkty pojedyncze. */\n private readonly entries = computed(() => {\n const locations = this.visibleLocations();\n if (!this.cluster()) return [...locations];\n return clusterLocations(locations, {\n ...this.clusterOptions(),\n zoom: this.zoom(),\n categoryOrder: this.categories().map((c) => c.id),\n });\n });\n\n /** Znaczniki gotowe dla silnika. HTML powstaje w rdzeniu, poza Angularem. */\n private readonly markers = computed<KptMapRenderedMarker[]>(() => {\n const byId = this.categoryById();\n const selectedId = this.popup()?.location.id ?? null;\n const colorMode = this.clusterColorBy();\n\n const rendered = this.entries().map((entry): KptMapRenderedMarker => {\n if (isCluster(entry)) {\n const category = colorMode === 'dominant' ? byId.get(entry.dominantCategoryId) : undefined;\n return {\n id: entry.id,\n at: entry.at,\n html: renderClusterHtml({\n count: entry.count,\n color: category?.color ?? 'primary',\n label: this.i18n.t('map.cluster', { count: entry.count }),\n }),\n size: CLUSTER_SIZE,\n anchor: { x: CLUSTER_SIZE.width / 2, y: CLUSTER_SIZE.height / 2 },\n // Grupy nad pojedynczymi punktami — licznik ma być czytelny.\n zIndex: 500,\n };\n }\n\n const category = byId.get(entry.categoryId);\n const shape = category?.shape ?? 'pin';\n const size = shape === 'pin' ? MARKER_SIZE : DOT_SIZE;\n return {\n id: entry.id,\n at: entry.at,\n html: renderMarkerHtml({\n shape,\n color: category?.color ?? 'muted',\n iconSvgInner: category?.icon ? this.icons.get(category.icon) : undefined,\n label: entry.title,\n selected: entry.id === selectedId,\n }),\n size,\n // Pinezka kotwiczy się czubkiem, kropka i kwadrat środkiem.\n anchor: shape === 'pin' ? { x: size.width / 2, y: size.height } : { x: size.width / 2, y: size.height / 2 },\n zIndex: entry.id === selectedId ? 400 : 0,\n };\n });\n\n // Pinezka wyniku wyszukiwania idzie tą samą drogą co reszta znaczników, więc przesuwa\n // się z mapą klatka po klatce i nie wymaga niczego od silnika.\n const pin = this.searchMarker() ? this.searchPin() : null;\n if (pin) {\n rendered.push({\n id: SEARCH_MARKER_ID,\n at: pin.at,\n html: renderMarkerHtml({\n shape: 'pin',\n color: 'info',\n iconSvgInner: this.icons.get('map-pin'),\n label: pin.label,\n }),\n size: MARKER_SIZE,\n anchor: { x: MARKER_SIZE.width / 2, y: MARKER_SIZE.height },\n // Nad grupami (500) — to na nią użytkownik właśnie kazał mapie polecieć.\n zIndex: 600,\n });\n }\n\n return rendered;\n });\n\n /** Szablon popupu dla kategorii; bez dopasowania — szablon zapasowy (bez `category`). */\n private readonly popupTemplateFor = computed(() => {\n const exact = new Map<string, KptMapPopupTemplate<T>>();\n let fallback: KptMapPopupTemplate<T> | null = null;\n for (const tpl of this.popupTemplates()) {\n if (tpl.category()) exact.set(tpl.category(), tpl);\n else fallback ??= tpl;\n }\n return (categoryId: string) => exact.get(categoryId) ?? fallback;\n });\n\n protected readonly popupTemplate = computed(() => {\n const state = this.popup();\n return state ? this.popupTemplateFor()(state.location.categoryId) : null;\n });\n\n protected readonly popupCategory = computed(() => {\n const state = this.popup();\n return state ? this.categoryById().get(state.location.categoryId) : undefined;\n });\n\n /**\n * Odległość otwartego punktu od `distanceFrom` (albo od użytkownika) w metrach.\n * `null`, gdy nie ma od czego liczyć — szablon chowa wtedy wiersz dystansu,\n * zamiast pokazywać zero.\n */\n protected readonly popupDistance = computed<number | null>(() => {\n const state = this.popup();\n if (!state) return null;\n const origin = this.distanceFrom() ?? this.userPosition()?.at ?? null;\n return origin ? haversine(origin, state.location.at) : null;\n });\n\n /**\n * Pozycja popupu w pikselach kontenera. Zależy od `viewportTick`, więc przelicza się\n * przy każdym ruchu mapy — jeden sygnał zamiast nasłuchu w szablonie.\n */\n protected readonly popupPosition = computed<KptMapPoint | null>(() => {\n this.viewportTick();\n const state = this.popup();\n if (!state || !this.mapEngine || !this.ready()) return null;\n return this.mapEngine.project(state.location.at);\n });\n\n protected readonly contextPosition = computed<KptMapPoint | null>(() => {\n this.viewportTick();\n const target = this.contextTarget();\n if (!target || !this.mapEngine || !this.ready()) return null;\n return this.mapEngine.project(target.at);\n });\n\n /** Kategorie oferowane w menu „dodaj\" — ukryte w legendzie odpadają. */\n protected readonly creatableCategories = computed(() => {\n const hidden = new Set(this.hiddenCategories());\n return this.categories().filter((c) => !hidden.has(c.id) && (c.fields?.length || this.createFormTemplate()));\n });\n\n /** Czy jest czym szukać — port bez `search()` nie zasługuje na pole, które nic nie robi. */\n protected readonly searchEnabled = computed(() => this.search() && !!this.activeGeocoder()?.search);\n\n /**\n * Prostokąt preferowanych wyników. Bierzemy zasięg jawny, a bez niego preset kraju —\n * „Kwiatowa\" ma trafiać w tę pod nosem, nie w tę z drugiego końca świata. To sam bias:\n * adresu z zagranicy dalej da się poszukać.\n */\n protected readonly searchViewbox = computed<KptMapBounds>(\n () => this.bounds() ?? resolveCountryView(this.country()).bounds,\n );\n\n /**\n * Twarde zawężenie do krajów. Jawne `searchOptions.countryCodes` wygrywa; bez niego\n * odcinamy zagranicę dopiero przy `restrictToCountry`, bo tam mapa i tak nie pozwoli\n * przesunąć widoku poza kraj — znaleziony adres byłby nie do pokazania.\n */\n protected readonly searchCountryCodes = computed<readonly string[] | null>(() => {\n const explicit = this.searchOptions().countryCodes;\n if (explicit) return explicit;\n return this.restrictToCountry() ? [this.country()] : null;\n });\n\n protected readonly createFormApi = computed<KptMapCreateFormApi | null>(() => {\n const target = this.createFor();\n if (!target) return null;\n return {\n at: target.at,\n category: target.category,\n close: () => this.closeCreate(),\n submit: (value) => this.emitCreate(value),\n };\n });\n\n constructor() {\n afterNextRender(() => void this.initEngine());\n this.destroyRef.onDestroy(() => this.mapEngine?.destroy());\n\n // Zmiana źródła kafli w locie — bez przeładowania mapy.\n effect(() => {\n const url = this.tileUrl() ?? KPT_MAP_DEFAULT_TILE_URL;\n const attribution = this.attribution() ?? KPT_MAP_DEFAULT_ATTRIBUTION;\n if (untracked(this.ready)) this.mapEngine?.setTileSource(url, attribution);\n });\n\n // Wypychanie znaczników do silnika — jedyne miejsce, które je rysuje.\n effect(() => {\n const markers = this.markers();\n if (this.ready()) this.mapEngine?.setMarkers(markers);\n });\n\n effect(() => {\n const bounds = this.restrictBounds();\n if (untracked(this.ready)) this.mapEngine?.setMaxBounds(bounds);\n });\n\n effect(() => {\n const position = this.userPosition();\n if (!this.ready()) return;\n this.mapEngine?.setUserPosition(\n position,\n renderUserMarkerHtml({\n label: this.i18n.t('map.myLocation'),\n iconSvgInner: this.icons.get('user'),\n }),\n );\n });\n\n // `<dialog>` zamyka się też Esc-em i backdropem — cel czyścimy przy każdym zamknięciu.\n effect(() => {\n if (!this.createOpen()) untracked(() => this.createFor.set(null));\n });\n\n this.watchGeolocation();\n }\n\n private restrictBounds(): KptMapBounds | null {\n if (!this.restrictToCountry()) return null;\n return this.bounds() ?? resolveCountryView(this.country()).bounds;\n }\n\n private async initEngine(): Promise<void> {\n // Wejście wygrywa nad DI: dwie mapy o różnych silnikach na jednej stronie.\n const factory = this.engine() ?? this.engineFactory;\n if (!factory) throw new Error(NO_ENGINE_ERROR);\n\n const engine = (this.mapEngine = factory());\n this.engineKind.set(engine.kind);\n\n const preset = resolveCountryView(this.country());\n const view = this.view();\n const startBounds = this.bounds();\n\n try {\n await engine.init(this.canvas().nativeElement, {\n center: view?.center ?? preset.center,\n zoom: view?.zoom ?? preset.zoom,\n maxBounds: this.restrictBounds(),\n tileUrl: this.tileUrl() ?? KPT_MAP_DEFAULT_TILE_URL,\n attribution: this.attribution() ?? KPT_MAP_DEFAULT_ATTRIBUTION,\n });\n } catch (error) {\n // Brak paczki `leaflet` to najczęstsza przyczyna — komunikat niesie instrukcję.\n this.mapEngine = null;\n throw error;\n }\n\n // Jawny zasięg wygrywa nad środkiem i zoomem: dopiero teraz znamy rozmiar kontenera.\n if (startBounds && !view) engine.fitBounds(startBounds, FIT_PADDING);\n\n // Leaflet emituje `move` co klatkę przeciągania. Bez popupu i menu nikt tej pozycji\n // nie czyta, a każdy zapis sygnału planowałby przebieg detekcji zmian — stąd bramka.\n engine.on('move', () => {\n if (untracked(this.popup) || untracked(this.contextTarget)) {\n this.viewportTick.update((t) => t + 1);\n }\n });\n engine.on('moveend', () => this.emitViewChange());\n engine.on('zoomend', () => this.zoom.set(engine.getZoom()));\n engine.on('click', () => this.onMapClick());\n engine.on('contextmenu', (event) => this.onContextMenu(event));\n engine.on('markerclick', (id, event) => this.onMarkerClick(id, event));\n\n this.observeResize();\n this.zoom.set(engine.getZoom());\n this.ready.set(true);\n this.emitViewChange();\n }\n\n /** Bez tego Leaflet zostawia szare pola po każdej zmianie układu strony. */\n private observeResize(): void {\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.mapEngine?.invalidateSize());\n observer.observe(this.canvas().nativeElement);\n this.destroyRef.onDestroy(() => observer.disconnect());\n }\n\n private watchGeolocation(): void {\n effect((onCleanup) => {\n if (!this.showUserLocation() || !this.geolocation) {\n this.userPosition.set(null);\n return;\n }\n this.locationBlocked.set(false);\n const subscription = this.geolocation.watch().subscribe({\n next: (position) => {\n this.userPosition.set(position);\n this.userPositionChange.emit(position);\n if (position && untracked(this.followUser)) {\n this.mapEngine?.setView(position.at, Math.max(untracked(this.zoom), 13));\n }\n },\n error: (error: unknown) => {\n // Odmowa zgody wyłącza kontrolkę, ale nie wywraca komponentu.\n this.userPosition.set(null);\n this.locationBlocked.set(true);\n if (error instanceof KptMapGeolocationFailure) this.userLocationError.emit(error.detail);\n },\n });\n onCleanup(() => subscription.unsubscribe());\n });\n }\n\n private emitViewChange(): void {\n if (!this.mapEngine) return;\n this.zoom.set(this.mapEngine.getZoom());\n this.viewChange.emit({\n center: this.mapEngine.getCenter(),\n zoom: this.mapEngine.getZoom(),\n bounds: this.mapEngine.getBounds(),\n });\n }\n\n private onMarkerClick(id: string, _event: KptMapPointerEvent): void {\n this.contextTarget.set(null);\n const entry = this.entries().find((e) => e.id === id);\n if (!entry) return;\n\n if (isCluster(entry)) {\n this.clusterClick.emit(entry);\n // Grupa punktów o tej samej współrzędnej nie da się rozbić zoomem — pokaż listę.\n if (isSplittable(entry)) {\n this.mapEngine?.fitBounds(entry.bounds, FIT_PADDING);\n return;\n }\n this.popup.set({ location: entry.items[0], group: entry });\n this.autoPanToPopup();\n return;\n }\n\n this.popup.set({ location: entry, group: null });\n this.autoPanToPopup();\n this.locationClick.emit(entry);\n }\n\n private onContextMenu(event: KptMapPointerEvent): void {\n if (!this.allowCreate()) return;\n this.popup.set(null);\n this.contextTarget.set({ at: event.at, point: event.point });\n }\n\n protected dismissOverlays(): void {\n this.popup.set(null);\n this.contextTarget.set(null);\n }\n\n /** Kliknięcie w mapę zamyka nakładki i zdejmuje pinezkę wyniku wyszukiwania. */\n protected onMapClick(): void {\n this.dismissOverlays();\n this.searchPin.set(null);\n }\n\n protected clearSearchPin(): void {\n this.searchPin.set(null);\n }\n\n protected closePopup(): void {\n this.popup.set(null);\n }\n\n /** Zapas na strzałkę i cień popupu przy sprawdzaniu, czy mieści się w kontenerze. */\n private static readonly POPUP_MARGIN = 16;\n\n /**\n * Przesuwa mapę tak, żeby świeżo otwarty popup zmieścił się w kontenerze.\n *\n * Wymiarów popupu nie znamy przed renderem, więc mierzymy go po dograniu ramki.\n * Bez tego znacznik przy górnej krawędzi otwiera popup poza widokiem.\n */\n private autoPanToPopup(): void {\n const engine = this.mapEngine;\n if (!engine) return;\n afterNextRender(\n () => {\n const el = this.popupEl()?.nativeElement;\n const state = this.popup();\n if (!el || !state) return;\n\n const anchor = engine.project(state.location.at);\n const size = engine.getSize();\n const margin = KptMap.POPUP_MARGIN;\n const rect = el.getBoundingClientRect();\n\n // Popup kotwiczy się nad znacznikiem i jest wyśrodkowany w poziomie.\n const top = anchor.y - rect.height - margin;\n const left = anchor.x - rect.width / 2;\n const right = anchor.x + rect.width / 2;\n\n let dx = 0;\n let dy = 0;\n if (top < margin) dy = top - margin;\n if (left < margin) dx = left - margin;\n else if (right > size.width - margin) dx = right - (size.width - margin);\n\n if (dx !== 0 || dy !== 0) engine.panBy({ x: dx, y: dy });\n },\n { injector: this.injector },\n );\n }\n\n /** Gotowa referencja dla kontekstu szablonu — szablon nie ma jak zrobić `bind`. */\n protected readonly closePopupFn = (): void => this.closePopup();\n\n /** Pozycja z grupy nierozdzielalnej — przełącza popup bez ruszania mapy. */\n protected selectFromGroup(location: KptMapLocation<T>): void {\n const state = this.popup();\n this.popup.set({ location, group: state?.group ?? null });\n this.locationClick.emit(location);\n }\n\n protected startCreate(category: KptMapCategory): void {\n const target = this.contextTarget();\n if (!target) return;\n this.contextTarget.set(null);\n this.createFor.set({ at: target.at, category });\n this.createOpen.set(true);\n }\n\n protected closeCreate(): void {\n this.createOpen.set(false);\n this.createFor.set(null);\n }\n\n protected emitCreate(value: Record<string, unknown>): void {\n const target = this.createFor();\n if (!target) return;\n // Komponent nie dopisuje nic do `locations` — źródłem prawdy jest aplikacja.\n this.locationCreate.emit({ at: target.at, categoryId: target.category.id, value });\n this.closeCreate();\n }\n\n /**\n * Przenosi widok na wybrany wynik. Zasięg (miasto, region) wpasowujemy w kadr,\n * a pojedynczy punkt dostaje `[searchZoom]` — inaczej każdy adres lądowałby\n * w innym przybliżeniu, zależnym od tego, jak dostawca obrysował budynek.\n */\n protected onSearchSelect(result: KptMapSearchResult): void {\n this.dismissOverlays();\n this.searchPin.set(result);\n if (result.bounds) this.mapEngine?.fitBounds(result.bounds, FIT_PADDING);\n else this.mapEngine?.setView(result.at, this.searchZoom());\n this.searchSelect.emit(result);\n }\n\n protected zoomBy(delta: number): void {\n if (!this.mapEngine) return;\n this.mapEngine.setView(this.mapEngine.getCenter(), this.mapEngine.getZoom() + delta);\n }\n\n protected centreOnUser(): void {\n const position = this.userPosition();\n if (!position || !this.mapEngine) return;\n this.mapEngine.setView(position.at, Math.max(this.mapEngine.getZoom(), 13));\n }\n\n /** Wraca do widoku startowego — po zabłądzeniu na drugim końcu świata. */\n protected resetView(): void {\n if (!this.mapEngine) return;\n const explicit = this.bounds();\n if (explicit) {\n this.mapEngine.fitBounds(explicit, FIT_PADDING);\n return;\n }\n const view = this.view();\n const preset = resolveCountryView(this.country());\n this.mapEngine.setView(view?.center ?? preset.center, view?.zoom ?? preset.zoom);\n }\n\n /** Zasięg wszystkich widocznych lokalizacji — `null`, gdy nie ma żadnej. */\n protected readonly dataBounds = computed(() => boundsOf(this.visibleLocations().map((l) => l.at)));\n\n protected fitToData(): void {\n const bounds = this.dataBounds();\n if (bounds) this.mapEngine?.fitBounds(bounds, FIT_PADDING);\n }\n}\n","<header class=\"kpt-map-poi__head\">\n <!--\n Nagłówek jako `role=\"heading\"`, nie `<h3>`: style komponentów siedzą w `@layer\n kpt.components`, a CSS aplikacji spoza warstw wygrywa z nimi zawsze. Zwykły `<h3>`\n łapałby więc każdą regułę `h3 { … }` z układu strony — a nagłówek sekcji strony\n i tytuł miejsca to dwie różne rzeczy. Dla czytnika ekranu to wciąż nagłówek poziomu 3.\n -->\n <p class=\"kpt-map-poi__title\" role=\"heading\" aria-level=\"3\">{{ poi().title }}</p>\n @if (closable()) {\n <kpt-icon-button\n class=\"kpt-map-poi__close\"\n variant=\"text\"\n size=\"sm\"\n [ariaLabel]=\"i18n.t('common.close')\"\n (click)=\"onClose()\"\n >\n <kpt-icon name=\"x\" />\n </kpt-icon-button>\n }\n</header>\n\n<p class=\"kpt-map-poi__meta\">\n @if (distanceLabel(); as distance) {\n <strong class=\"kpt-map-poi__distance\">{{ distance }}</strong>\n }\n @if (poi().address; as address) {\n <span class=\"kpt-map-poi__address\">{{ address }}</span>\n }\n</p>\n\n<!--\n Wszystko poniżej nagłówka przewija się osobno. Kontenerem przewijania jest ten div,\n a nie popup mapy — inaczej tytuł z krzyżykiem odjeżdżałby razem ze zdjęciem.\n-->\n<div class=\"kpt-map-poi__scroll\">\n <div class=\"kpt-map-poi__media\">\n @if (poi().photo; as photo) {\n <img\n class=\"kpt-map-poi__photo\"\n [src]=\"photo\"\n [alt]=\"poi().photoAlt ?? poi().title\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n } @else {\n <div class=\"kpt-map-poi__photo-empty\" [attr.aria-label]=\"i18n.t('map.poi.noPhoto')\" role=\"img\">\n <kpt-icon name=\"photo\" size=\"1.75rem\" />\n </div>\n }\n </div>\n\n <div class=\"kpt-map-poi__actions\">\n @if (primaryLabel()) {\n <kpt-button class=\"kpt-map-poi__cta\" size=\"sm\" fullWidth (click)=\"onPrimary()\">\n {{ primaryLabel() }}\n </kpt-button>\n }\n @if (showShare()) {\n <kpt-icon-button\n variant=\"outline\"\n size=\"sm\"\n [ariaLabel]=\"i18n.t('map.poi.share')\"\n (click)=\"share()\"\n >\n <kpt-icon name=\"share\" />\n </kpt-icon-button>\n }\n @if (showFavourite()) {\n <kpt-icon-button\n class=\"kpt-map-poi__fav\"\n variant=\"outline\"\n size=\"sm\"\n [ariaPressed]=\"favourite()\"\n [attr.data-on]=\"favourite() ? '' : null\"\n [ariaLabel]=\"favouriteLabel()\"\n (click)=\"toggleFavourite()\"\n >\n <kpt-icon name=\"star\" />\n </kpt-icon-button>\n }\n </div>\n\n @if (category(); as category) {\n <p class=\"kpt-map-poi__category\" [style.--_kpt-poi-color]=\"categoryColor()\">\n @if (category.icon) {\n <kpt-icon class=\"kpt-map-poi__category-icon\" [name]=\"category.icon\" />\n }\n {{ category.label }}\n </p>\n }\n\n @if (hasHours()) {\n <div class=\"kpt-map-poi__hours\">\n <button\n class=\"kpt-map-poi__hours-toggle\"\n type=\"button\"\n [attr.aria-expanded]=\"hoursExpanded()\"\n [attr.aria-controls]=\"hoursId\"\n (click)=\"toggleHours()\"\n >\n <kpt-icon class=\"kpt-map-poi__row-icon\" name=\"clock\" />\n <span class=\"kpt-map-poi__status\" [attr.data-open]=\"open() || alwaysOpen()\">\n {{ statusLabel() }}\n </span>\n @if (statusHint(); as hint) {\n <span class=\"kpt-map-poi__status-hint\">· {{ hint }}</span>\n }\n <kpt-icon class=\"kpt-map-poi__chevron\" name=\"chevron-down\" />\n </button>\n\n @if (hoursExpanded()) {\n <dl class=\"kpt-map-poi__week\" [id]=\"hoursId\">\n @for (group of hoursGroups(); track group.label) {\n <dt class=\"kpt-map-poi__week-day\">{{ group.label }}</dt>\n <dd class=\"kpt-map-poi__week-hours\">\n @if (group.closed) {\n <span class=\"kpt-map-poi__week-closed\">{{ i18n.t('map.poi.closedDay') }}</span>\n } @else {\n @for (range of group.ranges; track range) {\n <span class=\"kpt-map-poi__week-range\">{{ range }}</span>\n }\n }\n </dd>\n }\n </dl>\n }\n </div>\n }\n\n @if (rows().length || poi().facts?.length) {\n <ul class=\"kpt-map-poi__rows\">\n @for (row of rows(); track row.kind) {\n <li class=\"kpt-map-poi__row\">\n <kpt-icon class=\"kpt-map-poi__row-icon\" [name]=\"row.icon\" />\n\n @if (row.href) {\n <a\n class=\"kpt-map-poi__row-value kpt-map-poi__row-link\"\n [href]=\"row.href\"\n [attr.target]=\"row.external ? '_blank' : null\"\n [attr.rel]=\"row.external ? 'noopener' : null\"\n >\n {{ row.text }}\n </a>\n } @else {\n <span class=\"kpt-map-poi__row-value\">{{ row.text }}</span>\n }\n\n <span class=\"kpt-map-poi__row-actions\">\n @if (row.href) {\n <a\n class=\"kpt-map-poi__row-action\"\n [href]=\"row.href\"\n [attr.target]=\"row.external ? '_blank' : null\"\n [attr.rel]=\"row.external ? 'noopener' : null\"\n [attr.aria-label]=\"row.actionLabel\"\n [title]=\"row.actionLabel\"\n >\n <kpt-icon [name]=\"row.actionIcon\" />\n </a>\n }\n @if (canCopy) {\n <button\n class=\"kpt-map-poi__row-action\"\n type=\"button\"\n [attr.aria-label]=\"i18n.t('map.poi.copy')\"\n [title]=\"i18n.t('map.poi.copy')\"\n (click)=\"copy(row)\"\n >\n <kpt-icon [name]=\"justCopied() === row.kind ? 'check' : 'copy'\" />\n </button>\n }\n </span>\n </li>\n }\n\n @for (fact of poi().facts ?? []; track fact.label) {\n <li class=\"kpt-map-poi__row kpt-map-poi__row--fact\">\n @if (fact.icon) {\n <kpt-icon class=\"kpt-map-poi__row-icon\" [name]=\"fact.icon\" />\n } @else {\n <span class=\"kpt-map-poi__row-icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"kpt-map-poi__row-value\">\n <span class=\"kpt-map-poi__fact-label\">{{ fact.label }}</span>\n {{ fact.value }}\n </span>\n </li>\n }\n </ul>\n }\n\n <p class=\"kpt-map-poi__live\" aria-live=\"polite\">\n @if (justCopied()) {\n {{ i18n.t('map.poi.copied') }}\n }\n </p>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { KptButton, KptI18n, KptIcon, KptIconButton } from '@konce-pt/angular';\nimport { foregroundVarOf, formatDistance, formatLatLng, groupWeek, isAlwaysOpen, isOpenAt, nextChange, normalizeUrl, prettyUrl } from '@konce-pt/map';\nimport type { KptMapCategory, KptMapHoursGroup, KptMapPoi } from '@konce-pt/map';\n\n/** Wiersz kontaktu: wartość, akcja właściwa i kopiowanie do schowka. */\ninterface ContactRow {\n kind: 'phone' | 'email' | 'website' | 'coords';\n icon: string;\n /** Tekst pokazywany użytkownikowi. */\n text: string;\n /** Tekst kopiowany do schowka — dla współrzędnych inny niż wyświetlany. */\n copyValue: string;\n /** `href` akcji właściwej; `null` dla współrzędnych (nie ma dokąd prowadzić). */\n href: string | null;\n /** Otworzyć w nowej karcie. */\n external: boolean;\n actionIcon: string;\n actionLabel: string;\n}\n\n/** Licznik instancji — `aria-controls` musi wskazywać unikatowy identyfikator na stronie. */\nlet poiCardSeq = 0;\n\n/**\n * Karta miejsca do popupu mapy — dystans od użytkownika, zdjęcie, akcje, kategoria,\n * rozwijane godziny otwarcia i wiersze kontaktowe z kopiowaniem.\n *\n * Komponent jest sterowany danymi: bierze `KptMapPoi`, a nie model domenowy aplikacji.\n * Mapowanie `KptMapLocation.data` → `KptMapPoi` robi aplikacja, dzięki czemu karta nie\n * wie nic o tym, czy pokazuje ładowarkę, restaurację, czy punkt serwisowy.\n *\n * Sam popup `kpt-map` trzeba przełączyć na `[popupLayout]=\"'card'\"` — inaczej karta\n * dostanie 20 rem szerokości i padding przeznaczony dla treści tekstowej.\n *\n * @example\n * <kpt-map [locations]=\"places()\" [categories]=\"categories\" popupLayout=\"card\">\n * <ng-template kptMapPopup let-loc let-d=\"data\" let-dist=\"distance\" let-close=\"close\">\n * <kpt-map-poi-card\n * [poi]=\"poiOf(loc, d)\"\n * [distance]=\"dist\"\n * [category]=\"categoryOf(loc)\"\n * primaryLabel=\"Wyznacz trasę\"\n * (closed)=\"close()\"\n * />\n * </ng-template>\n * </kpt-map>\n */\n@Component({\n selector: 'kpt-map-poi-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [KptButton, KptIcon, KptIconButton],\n templateUrl: './map-poi-card.component.html',\n styleUrl: './map-poi-card.component.scss',\n host: { class: 'kpt-map-poi' },\n})\nexport class KptMapPoiCard {\n readonly poi = input.required<KptMapPoi>();\n /** Odległość w metrach; `null` chowa wiersz dystansu. */\n readonly distance = input<number | null>(null);\n /** Źródło ikony, koloru i etykiety wiersza kategorii; `null` chowa ten wiersz. */\n readonly category = input<KptMapCategory | null>(null);\n /** Etykieta przycisku głównego; pusta chowa przycisk. */\n readonly primaryLabel = input<string>('');\n readonly showShare = input(true, { transform: booleanAttribute });\n readonly showFavourite = input(true, { transform: booleanAttribute });\n readonly favourite = model(false);\n readonly closable = input(true, { transform: booleanAttribute });\n /** Rozwinąć godziny od razu. Domyślnie zwinięte, jak na karcie miejsca w mapach. */\n readonly hoursExpanded = model(false);\n\n readonly primaryAction = output<KptMapPoi>();\n readonly closed = output<void>();\n readonly shared = output<KptMapPoi>();\n\n protected readonly i18n = inject(KptI18n);\n\n /** Identyfikator regionu godzin; kart na stronie bywa więcej niż jedna. */\n protected readonly hoursId = `kpt-map-poi-hours-${++poiCardSeq}`;\n\n /** Rośnie przy każdym otwarciu karty i przy zmianie danych — odświeża status godzin. */\n private readonly now = signal(Date.now());\n\n /**\n * Ikona kategorii stoi wprost na powierzchni karty, bez własnego tła — stąd\n * `foregroundVarOf()`, a nie `colorVarOf()`: rola `muted` ma kolor tła, nie treści.\n */\n protected readonly categoryColor = computed(() => {\n const category = this.category();\n return category ? foregroundVarOf(category.color) : null;\n });\n\n protected readonly distanceLabel = computed(() =>\n formatDistance(this.distance(), this.i18n.locale()),\n );\n\n /* ── godziny ─────────────────────────────────────────────────────────── */\n\n protected readonly hasHours = computed(() => (this.poi().hours?.length ?? 0) > 0);\n protected readonly alwaysOpen = computed(() => isAlwaysOpen(this.poi().hours));\n protected readonly open = computed(() => isOpenAt(this.poi().hours, new Date(this.now())));\n\n protected readonly hoursGroups = computed<KptMapHoursGroup[]>(() =>\n groupWeek(this.poi().hours, this.i18n.locale()),\n );\n\n protected readonly statusLabel = computed(() => {\n if (this.alwaysOpen()) return this.i18n.t('map.poi.alwaysOpen');\n return this.i18n.t(this.open() ? 'map.poi.openNow' : 'map.poi.closedNow');\n });\n\n /** Dopisek „otwarcie o 11:00\" — nie ma go dla 24/7 ani gdy zmiana jest dalej niż doba. */\n protected readonly statusHint = computed(() => {\n if (this.alwaysOpen() || !this.hasHours()) return null;\n const at = new Date(this.now());\n const change = nextChange(this.poi().hours, at);\n if (!change) return null;\n if (change.at.getTime() - at.getTime() > 24 * 60 * 60 * 1000) return null;\n const time = new Intl.DateTimeFormat(this.i18n.locale(), {\n hour: '2-digit',\n minute: '2-digit',\n }).format(change.at);\n return this.i18n.t(change.open ? 'map.poi.opensAt' : 'map.poi.closesAt', { time });\n });\n\n /* ── wiersze kontaktu ────────────────────────────────────────────────── */\n\n protected readonly rows = computed<ContactRow[]>(() => {\n const poi = this.poi();\n const rows: ContactRow[] = [];\n\n if (poi.phone) {\n rows.push({\n kind: 'phone',\n icon: 'phone',\n text: poi.phone,\n copyValue: poi.phone,\n href: `tel:${poi.phone.replace(/\\s+/g, '')}`,\n external: false,\n actionIcon: 'phone',\n actionLabel: this.i18n.t('map.poi.call'),\n });\n }\n\n if (poi.website) {\n const url = normalizeUrl(poi.website);\n rows.push({\n kind: 'website',\n icon: 'world',\n text: prettyUrl(poi.website),\n copyValue: url,\n href: url,\n external: true,\n actionIcon: 'external-link',\n actionLabel: this.i18n.t('map.poi.openWebsite'),\n });\n }\n\n if (poi.email) {\n rows.push({\n kind: 'email',\n icon: 'mail',\n text: poi.email,\n copyValue: poi.email,\n href: `mailto:${poi.email}`,\n external: false,\n actionIcon: 'mail',\n actionLabel: this.i18n.t('map.poi.sendEmail'),\n });\n }\n\n if (poi.at) {\n const text = formatLatLng(poi.at);\n rows.push({\n kind: 'coords',\n icon: 'crosshair',\n text,\n copyValue: text,\n href: null,\n external: false,\n actionIcon: '',\n actionLabel: '',\n });\n }\n\n return rows;\n });\n\n /* ── akcje ───────────────────────────────────────────────────────────── */\n\n /** Klucz wiersza, którego wartość właśnie skopiowano — przełącza ikonę na „check\". */\n protected readonly justCopied = signal<string | null>(null);\n private copyTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Bez API schowka przycisk kopiowania w ogóle się nie renderuje. */\n protected readonly canCopy = typeof navigator !== 'undefined' && !!navigator.clipboard;\n protected readonly canShare = typeof navigator !== 'undefined' && 'share' in navigator;\n\n protected async copy(row: ContactRow): Promise<void> {\n try {\n await navigator.clipboard.writeText(row.copyValue);\n } catch {\n // Odmowa zgody albo brak bezpiecznego kontekstu — nie ma czego zgłaszać użytkownikowi.\n return;\n }\n this.justCopied.set(row.kind);\n if (this.copyTimer) clearTimeout(this.copyTimer);\n this.copyTimer = setTimeout(() => this.justCopied.set(null), 2000);\n }\n\n protected onPrimary(): void {\n this.primaryAction.emit(this.poi());\n }\n\n protected onClose(): void {\n this.closed.emit();\n }\n\n protected toggleFavourite(): void {\n this.favourite.update((v) => !v);\n }\n\n protected toggleHours(): void {\n // Odświeżamy zegar przy rozwinięciu — karta bywa otwarta dłużej niż minutę.\n this.now.set(Date.now());\n this.hoursExpanded.update((v) => !v);\n }\n\n /**\n * Udostępnianie: natywny arkusz systemowy, gdy przeglądarka go ma, inaczej schowek.\n * W obu przypadkach leci `shared`, więc aplikacja może dołożyć własną telemetrię.\n */\n protected async share(): Promise<void> {\n const poi = this.poi();\n const url = poi.website ? normalizeUrl(poi.website) : undefined;\n if (this.canShare) {\n try {\n await navigator.share({ title: poi.title, text: poi.address, url });\n } catch {\n // Anulowanie arkusza przez użytkownika nie jest błędem.\n return;\n }\n } else if (this.canCopy) {\n try {\n await navigator.clipboard.writeText(url ?? poi.title);\n } catch {\n return;\n }\n }\n this.shared.emit(poi);\n }\n\n protected favouriteLabel(): string {\n return this.i18n.t(this.favourite() ? 'map.poi.removeFavourite' : 'map.poi.addFavourite');\n }\n}\n","/*\n * Public API — @konce-pt/angular/map\n * Mapa z konfigurowalnymi znacznikami (Leaflet + OpenStreetMap). Rdzeń obliczeń i adaptery\n * silników mieszkają w `@konce-pt/map` — paczce bez frameworka, wspólnej z portem Reacta;\n * tu tylko re-eksport, żeby publiczne API subpathu się nie zmieniło.\n *\n * Wymaga zależności opcjonalnej `leaflet` i dołączenia `leaflet/dist/leaflet.css`\n * po stronie aplikacji.\n */\nexport { KptMap } from './lib/map.component';\nexport { KptMapLegend } from './lib/map-legend.component';\nexport { KptMapSearch } from './lib/map-search.component';\nexport { KptMapCreateDialog } from './lib/map-create-dialog.component';\nexport { KptMapPoiCard } from './lib/map-poi-card.component';\nexport { KptMapHoursField } from './lib/map-hours-field.component';\nexport { KptMapImageField } from './lib/map-image-field.component';\nexport { KptMapPopupTemplate, KptMapCreateFormTemplate } from './lib/map-templates.directive';\nexport type {\n KptMapPopupContext,\n KptMapCreateFormContext,\n KptMapCreateFormApi,\n} from './lib/map-templates.directive';\n\n// Silnik i porty DI.\nexport { KPT_MAP_ENGINE, provideKptLeafletMap, provideKptGoogleMap } from './lib/map.providers';\nexport { createLeafletEngine, createGoogleEngine, loadGoogleMapsApi } from '@konce-pt/map';\nexport type {\n KptLeafletOptions,\n KptGoogleOptions,\n KptGoogleLoadOptions,\n KptGoogleMapsApi,\n} from '@konce-pt/map';\nexport {\n KPT_MAP_GEOCODER,\n KptNominatimGeocoder,\n KptMapGeocoderStub,\n provideKptNominatimGeocoder,\n provideKptMapGeocoderStub,\n} from './lib/geocoder.port';\nexport type {\n KptMapGeocoderPort,\n KptNominatimOptions,\n KptMapSearchOptions,\n KptMapGeocoderStubOptions,\n} from './lib/geocoder.port';\nexport {\n KPT_MAP_GEOLOCATION,\n KptBrowserGeolocation,\n KptMapGeolocationStub,\n KptMapGeolocationFailure,\n provideKptMapGeolocationStub,\n} from './lib/geolocation.port';\nexport type { KptMapGeolocationPort } from './lib/geolocation.port';\n\n// Typy rdzenia.\nexport type {\n KptLatLng,\n KptMapBounds,\n KptMapPoint,\n KptMapColor,\n KptMapColorRole,\n KptMapMarkerShape,\n KptMapCategory,\n KptMapLocation,\n KptMapCluster,\n KptMapClusterEntry,\n KptMapFieldDef,\n KptMapFieldOption,\n KptMapFieldType,\n KptMapUserPosition,\n KptMapGeolocationError,\n KptMapGeolocationErrorKind,\n KptMapCreateEvent,\n KptMapSuggestion,\n KptMapSearchResult,\n KptMapView,\n KptMapAddress,\n KptMapAddressPart,\n KptMapWeekday,\n KptMapHoursRange,\n KptMapDayHours,\n KptMapOpeningHours,\n KptMapPoi,\n KptMapPoiFact,\n} from '@konce-pt/map';\nexport type {\n KptMapEngine,\n KptMapEngineFactory,\n KptMapEngineInit,\n KptMapEngineEvents,\n KptMapEngineKind,\n KptMapPointerEvent,\n KptMapRenderedMarker,\n} from '@konce-pt/map';\nexport type { KptClusterOptions } from '@konce-pt/map';\nexport type { KptMapCountryPreset } from '@konce-pt/map';\n\n// Rdzeń obliczeniowy (pure TS) — do własnych rozszerzeń, SSR i testów.\nexport { isCluster } from '@konce-pt/map';\nexport { clusterLocations, dominantCategory, countByCategory, isSplittable, KPT_CLUSTER_DEFAULTS } from '@konce-pt/map';\nexport {\n KPT_MAP_COUNTRIES,\n KPT_MAP_DEFAULT_COUNTRY,\n countryPreset,\n countryCodes,\n resolveCountryView,\n centerOfBounds,\n} from '@konce-pt/map';\nexport {\n project,\n unproject,\n boundsOf,\n boundsCenter,\n isFittableBounds,\n KPT_MIN_FIT_SPAN,\n boundsContain,\n padBounds,\n haversine,\n metersPerPixel,\n zoomForBounds,\n clampLat,\n normalizeLng,\n worldSize,\n KPT_TILE_SIZE,\n KPT_MAX_LATITUDE,\n KPT_EARTH_RADIUS,\n} from '@konce-pt/map';\nexport {\n renderMarkerHtml,\n renderClusterHtml,\n renderUserMarkerHtml,\n colorVarOf,\n contrastVarOf,\n foregroundVarOf,\n clusterTier,\n} from '@konce-pt/map';\nexport { KPT_MAP_DEFAULT_TILE_URL, KPT_MAP_DEFAULT_ATTRIBUTION } from '@konce-pt/map';\nexport {\n parseTime,\n formatTime,\n isoWeekday,\n isOpenAt,\n isAlwaysOpen,\n nextChange,\n weekdayName,\n groupWeek,\n emptyWeek,\n} from '@konce-pt/map';\nexport type { KptMapHoursGroup } from '@konce-pt/map';\nexport { formatDistance, formatLatLng } from '@konce-pt/map';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_forTrack0","_c0"],"mappings":"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"}
|