@optimum-intelligence/opti-ui 0.7.0 → 0.7.2
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 +22 -0
- package/README.md +2 -1
- package/dist/components/combobox/Combobox.d.ts +11 -2
- package/dist/components/combobox/Combobox.js +155 -118
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/map/Map.d.ts +2 -1
- package/dist/components/map/Map.js +8 -6
- package/dist/components/map/Map.js.map +1 -1
- package/dist/components/map/worker.d.ts +6 -0
- package/dist/components/map/worker.js +12 -0
- package/dist/components/map/worker.js.map +1 -0
- package/dist/components.json +10 -3
- package/dist/index.js +1 -1
- package/dist/llms-full.txt +9 -2
- package/dist/llms.txt +1 -1
- package/dist/opti-ui.css +14 -0
- package/dist/vendor/maplibre-gl/dist/maplibre-gl-worker.mjs_raw.js +7 -0
- package/dist/vendor/maplibre-gl/dist/maplibre-gl-worker.mjs_raw.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","names":["React","createPortal","AttributionControl","Layer","Map","MapGL","Marker","NavigationControl","Popup","Source","ControlPosition","LayerProps","MapLayerMouseEvent","MapProps","MapRef","PopupProps","StyleSpecification","useControl","ExpressionSpecification","LngLatBoundsLike","mapLib","Promise","loadMapLib","all","then","lib","worker","setWorkerUrl","default","cx","seriesColor","EyeIcon","EyeOffIcon","SegmentedControl","SegmentedControlProps","useResolvedColors","ResolvedColors","process","env","NODE_ENV","MapPosition","MapTone","MapFit","MapOverlayPosition","MapMarkerKind","MapLegendSelectionMode","MapBaseLayer","id","label","ReactNode","style","darkStyle","attribution","MapLabels","zoomIn","zoomOut","showAll","hideAll","show","hide","depot","noData","expand","collapse","defaultLabels","MapPolygon","type","coordinates","MapMultiPolygon","MapView","longitude","latitude","zoom","bounds","Bounds","DataPart","layerIds","selectedBounds","PartHandlers","onClick","event","onHover","MapContextValue","map","colors","labels","baseLayers","baseLayer","setBaseLayer","register","partId","part","setHandlers","handlers","MapContext","createContext","useMapContext","ctx","use","Error","rasterStyle","tiles","tileSize","version","sources","raster","Array","isArray","layers","source","hasValidPositions","coords","min","count","check","value","length","Number","isFinite","every","extend","x","y","Math","max","reduce","toneColors","Record","solid","fill","line","neutral","accent","success","warning","danger","SELECTED","HOVER","ACTIVE","dimmed","hasSelection","dim","DataItem","DataPartOptions","items","T","selectedIds","item","minPositions","onItemClick","onItemHover","useDataPart","partName","sourceId","options","$","_c","t0","t1","t2","undefined","selected","Set","t3","join","selectedKey","t4","valid","filter","invalidIds","item_0","has","_temp","t5","t6","console","warn","useEffect","item_2","boundsKey","t7","t8","t10","t9","t11","byId","find","item_3","id_0","item_4","id_1","event_0","t12","t13","t14","Symbol","for","applied","useRef","instance","getMap","drawn","_temp2","target","split","id_2","sync","getSource","prev","current","id_3","setFeatureState","id_4","onData","e","sourceDataType","on","off","item_5","item_1","usePartId","prefix","useId","replace","MapRootProps","Omit","ref","Ref","defaultBaseLayer","onBaseLayerChange","initialView","fit","Partial","controlsPosition","expandable","className","CSSProperties","children","MapRoot","onMouseMove","onMouseOut","props","element","setElement","useState","setMap","parts","setParts","internalLayer","setInternalLayer","cursor","setCursor","expanded","setExpanded","hovered","text","currentId","l","mapStyle","dark","next","partId_0","dataKey","empty","interactiveLayerIds","ownerOf","entries","Object","flatMap","_temp3","layerId","part_1","includes","_temp4","corners","_temp5","_temp7","part_3","part_4","selectionKey","userMoved","onMoveStart","originalEvent","data","selection","fitted","t15","t16","prev_0","selectionChanged","dataChanged","key","w","s","n_0","fitBounds","n","padding","maxZoom","duration","t17","next_0","prev_1","key_0","_temp8","instance_0","hover","String","setHover","t18","t19","onKeyDown","event_1","defaultPrevented","document","addEventListener","removeEventListener","t20","fitBoundsOptions","initialViewState","t21","t22","t23","instance_1","event_2","feature","features","owner","layer","event_3","feature_0","owner_0","event_4","_temp9","t24","value_0","h","b_0","b","_temp6","toFixed","slice","part_2","part_0","ExpandControl","position","onToggle","host","_temp0","onAdd","onRemove","remove","createElement","MapRouteItem","color","colorIndex","dashed","MapRoutesProps","MapRoutes","casing","ids","_temp1","index","const","properties","geometry","weight","number","width","opacity","layout","paint","t25","t26","t27","t28","_temp10","t29","MapAreaItem","tone","MapAreasProps","MapAreas","_temp11","MapPointItem","MapPointsProps","MapPoints","circleId","_temp12","MapMarkerProps","kind","sequence","MapMarker","name","pinColor","stopPropagation","DepotGlyph","MapPopupProps","MapPopup","offset","maxWidth","MapTooltip","MapOverlayProps","HTMLAttributes","HTMLDivElement","MapOverlay","MapLegendItem","visible","MapLegendProps","selectionMode","onSelectedIdsChange","onVisibilityChange","showAllToggle","MapLegend","_temp13","allVisible","toggle","_temp14","content","MapBaseLayerSwitchProps","MapBaseLayerSwitch","size","_temp15","Root","Routes","Areas","Points","Tooltip","Overlay","Legend","BaseLayerSwitch","_c","MapGL","_Fragment","Map"],"sources":["../../../src/components/map/Map.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n AttributionControl,\n Layer,\n Map as MapGL,\n Marker,\n NavigationControl,\n Popup,\n Source,\n type ControlPosition,\n type LayerProps,\n type MapLayerMouseEvent,\n type MapProps,\n type MapRef,\n type PopupProps,\n type StyleSpecification,\n useControl,\n} from '@vis.gl/react-maplibre';\nimport type { ExpressionSpecification, LngLatBoundsLike } from 'maplibre-gl';\n\n/**\n * Loads MapLibre and points it at its worker, once, on the first map mount. The `?url` import stays\n * external, so the app's Vite resolves the worker of the installed maplibre-gl. It is a dynamic import\n * because Node would run the worker file when importing this module (docs generation, SSR).\n */\nlet mapLib: Promise<typeof import('maplibre-gl')> | undefined;\nfunction loadMapLib() {\n mapLib ??= Promise.all([import('maplibre-gl'), import('maplibre-gl/dist/maplibre-gl-worker.mjs?url')]).then(\n ([lib, worker]) => {\n lib.setWorkerUrl(worker.default);\n return lib;\n },\n );\n return mapLib;\n}\nimport { cx } from '../../utils/cx';\nimport { seriesColor } from '../../theme/series';\nimport { EyeIcon, EyeOffIcon } from '../../icons';\nimport { SegmentedControl, type SegmentedControlProps } from '../toggle/Toggle';\nimport { useResolvedColors, type ResolvedColors } from './colors';\n\n// Set by the app's bundler; read as `process.env.NODE_ENV` so library builds keep it for the consumer.\ndeclare const process: { env: { NODE_ENV?: string } };\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** A `[longitude, latitude]` pair. */\nexport type MapPosition = [number, number];\n\n/** Status tone for areas, points and markers. */\nexport type MapTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';\n\n/** What `Map.Root` zooms to: all data, the selected items (all data when nothing is selected), or nothing. */\nexport type MapFit = 'data' | 'selected' | 'none';\n\n/** Corner of the map for `Map.Overlay`. */\nexport type MapOverlayPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/** Pin shape of `Map.Marker`. */\nexport type MapMarkerKind = 'stop' | 'depot' | 'vehicle' | 'point';\n\n/** Selection behaviour of `Map.Legend`. */\nexport type MapLegendSelectionMode = 'none' | 'single' | 'multi';\n\n/** One switchable base map. */\nexport interface MapBaseLayer {\n /** Stable id, used by `baseLayer` and `Map.BaseLayerSwitch`. */\n id: string;\n /** Name shown in `Map.BaseLayerSwitch`. */\n label: React.ReactNode;\n /** Style URL or a full style object. Use `rasterStyle()` for a raster tile template. */\n style: string | StyleSpecification;\n /** Style used instead of `style` when the map sits in dark mode. */\n darkStyle?: string | StyleSpecification;\n /** Extra attribution text shown with the style's own. */\n attribution?: string;\n}\n\n/** Texts built into the map components. */\nexport interface MapLabels {\n /** Zoom-in button. */\n zoomIn: string;\n /** Zoom-out button. */\n zoomOut: string;\n /** Legend button that shows every item. */\n showAll: string;\n /** Legend button that hides every item. */\n hideAll: string;\n /** Prefix of a legend item's show button, e.g. \"Show Trip 1\". */\n show: string;\n /** Prefix of a legend item's hide button. */\n hide: string;\n /** Accessible name of depot markers. */\n depot: string;\n /** Shown over the map when every data part is empty. */\n noData: string;\n /** Button that expands the map to fill the window (`expandable`). */\n expand: string;\n /** Button that returns the expanded map to its place. */\n collapse: string;\n}\n\nconst defaultLabels: MapLabels = {\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n showAll: 'Show all',\n hideAll: 'Hide all',\n show: 'Show',\n hide: 'Hide',\n depot: 'Depot',\n noData: 'No data to show',\n expand: 'Expand map',\n collapse: 'Exit expanded map',\n};\n\n/** A GeoJSON `Polygon`: an outer ring and optional holes, each a list of `[longitude, latitude]`. */\nexport interface MapPolygon {\n /** GeoJSON geometry type. */\n type: 'Polygon';\n /** Rings of positions; the first is the outline, the rest are holes. */\n coordinates: number[][][];\n}\n\n/** A GeoJSON `MultiPolygon`: several polygons drawn as one area. */\nexport interface MapMultiPolygon {\n /** GeoJSON geometry type. */\n type: 'MultiPolygon';\n /** One list of rings per polygon. */\n coordinates: number[][][][];\n}\n\n/** Starting camera: a centre and zoom, or bounds to fit. */\nexport type MapView = { longitude: number; latitude: number; zoom: number } | { bounds: [MapPosition, MapPosition] };\n\ntype Bounds = [number, number, number, number];\n\ninterface DataPart {\n layerIds: string[];\n bounds: Bounds | null;\n selectedBounds: Bounds | null;\n}\n\ninterface PartHandlers {\n onClick?: (id: string, event: MapLayerMouseEvent) => void;\n onHover?: (id: string | null, event: MapLayerMouseEvent) => void;\n}\n\ninterface MapContextValue {\n map: MapRef | null;\n colors: ResolvedColors;\n labels: MapLabels;\n baseLayers: MapBaseLayer[];\n baseLayer: string;\n setBaseLayer: (id: string) => void;\n register: (partId: string, part: DataPart | null) => void;\n setHandlers: (partId: string, handlers: PartHandlers | null) => void;\n}\n\nconst MapContext = React.createContext<MapContextValue | null>(null);\n\nfunction useMapContext(part: string) {\n const ctx = React.use(MapContext);\n if (!ctx) throw new Error(`${part} must be used inside Map.Root`);\n return ctx;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/**\n * Builds a MapLibre style from a raster tile URL template (`{z}`, `{x}`, `{y}`), for `MapBaseLayer.style`.\n *\n * @example\n * const satellite = rasterStyle('https://tiles.example.com/{z}/{x}/{y}.jpg', '© Example');\n */\nexport function rasterStyle(tiles: string | string[], attribution?: string, tileSize = 256): StyleSpecification {\n return {\n version: 8,\n sources: { raster: { type: 'raster', tiles: Array.isArray(tiles) ? tiles : [tiles], tileSize, attribution } },\n layers: [{ id: 'raster', type: 'raster', source: 'raster' }],\n };\n}\n\n/** True when `coords` nests at least `min` positions and every one is a finite `[lng, lat]`. */\nfunction hasValidPositions(coords: unknown, min: number): boolean {\n let count = 0;\n const check = (value: unknown): boolean => {\n if (!Array.isArray(value) || value.length === 0) return false;\n if (typeof value[0] !== 'object') {\n count++;\n return value.length >= 2 && Number.isFinite(value[0]) && Number.isFinite(value[1]);\n }\n return value.every(check);\n };\n return check(coords) && count >= min;\n}\n\n/** Grows `bounds` by every `[lng, lat]` pair nested in `coords`. */\nfunction extend(bounds: Bounds | null, coords: unknown): Bounds | null {\n if (!Array.isArray(coords)) return bounds;\n if (typeof coords[0] === 'number') {\n const [x, y] = coords as number[];\n return bounds ? [Math.min(bounds[0], x), Math.min(bounds[1], y), Math.max(bounds[2], x), Math.max(bounds[3], y)] : [x, y, x, y];\n }\n return coords.reduce<Bounds | null>(extend, bounds);\n}\n\nconst toneColors: Record<MapTone, { solid: string; fill: string; line: string }> = {\n neutral: { solid: 'var(--oui-color-text-muted)', fill: 'var(--oui-color-border-subtle)', line: 'var(--oui-color-border)' },\n accent: { solid: 'var(--oui-color-accent)', fill: 'var(--oui-color-accent-subtle)', line: 'var(--oui-color-info-border)' },\n success: { solid: 'var(--oui-color-success)', fill: 'var(--oui-color-success-subtle)', line: 'var(--oui-color-success-border)' },\n warning: { solid: 'var(--oui-color-warning)', fill: 'var(--oui-color-warning-subtle)', line: 'var(--oui-color-warning-border)' },\n danger: { solid: 'var(--oui-color-danger)', fill: 'var(--oui-color-danger-subtle)', line: 'var(--oui-color-danger-border)' },\n};\n\nconst SELECTED: ExpressionSpecification = ['boolean', ['feature-state', 'selected'], false];\nconst HOVER: ExpressionSpecification = ['boolean', ['feature-state', 'hover'], false];\nconst ACTIVE: ExpressionSpecification = ['any', SELECTED, HOVER];\n\n/** Full opacity for selected or hovered items, `dim` for the rest while anything is selected. */\nconst dimmed = (hasSelection: boolean, dim: number): ExpressionSpecification | number =>\n hasSelection ? ['case', ACTIVE, 1, dim] : 1;\n\ninterface DataItem {\n id: string;\n}\n\ninterface DataPartOptions<T extends DataItem> {\n items: T[];\n selectedIds?: string[];\n layerIds: string[];\n coordinates: (item: T) => unknown;\n /** Fewest positions a drawable item needs (2 for a line). */\n minPositions?: number;\n onItemClick?: (item: T, event: MapLayerMouseEvent) => void;\n onItemHover?: (item: T | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Shared wiring of the data parts: registers layers and bounds with the root, routes events back,\n * and keeps the `selected` feature state in sync (also after a style switch re-adds the source).\n */\nfunction useDataPart<T extends DataItem>(partName: string, sourceId: string, options: DataPartOptions<T>) {\n const ctx = useMapContext(partName);\n const { items, selectedIds = [], layerIds, coordinates, minPositions = 1, onItemClick, onItemHover } = options;\n const { register, setHandlers, map } = ctx;\n const selected = new Set(selectedIds);\n const selectedKey = selectedIds.join('\\u0000');\n\n // Items with missing or non-finite coordinates would make MapLibre throw; they are left out.\n const valid = new Set(items.filter((item) => hasValidPositions(coordinates(item), minPositions)));\n const invalidIds = items.filter((item) => !valid.has(item)).map((item) => item.id).join(', ');\n React.useEffect(() => {\n if (invalidIds && process.env.NODE_ENV !== 'production') {\n console.warn(`${partName}: skipped items with invalid coordinates: ${invalidIds}`);\n }\n }, [partName, invalidIds]);\n\n let bounds: Bounds | null = null;\n let selectedBounds: Bounds | null = null;\n for (const item of valid) {\n bounds = extend(bounds, coordinates(item));\n if (selected.has(item.id)) selectedBounds = extend(selectedBounds, coordinates(item));\n }\n const boundsKey = `${bounds}|${selectedBounds}|${layerIds}`;\n\n React.useEffect(() => {\n register(sourceId, { layerIds, bounds, selectedBounds });\n }, [register, sourceId, boundsKey]);\n React.useEffect(() => () => register(sourceId, null), [register, sourceId]);\n\n React.useEffect(() => {\n const byId = (id: string) => items.find((item) => item.id === id);\n setHandlers(sourceId, {\n onClick: (id, event) => {\n const item = byId(id);\n if (item) onItemClick?.(item, event);\n },\n onHover: (id, event) => onItemHover?.(id == null ? null : (byId(id) ?? null), event),\n });\n });\n React.useEffect(() => () => setHandlers(sourceId, null), [setHandlers, sourceId]);\n\n // Only items whose selection changed get a feature-state update; a re-added source (style switch)\n // starts from nothing, so everything selected is set again.\n const applied = React.useRef(new Set<string>());\n React.useEffect(() => {\n const instance = map?.getMap();\n if (!instance) return;\n const drawn = new Set([...valid].map((item) => item.id));\n const target = new Set((selectedKey ? selectedKey.split('\\u0000') : []).filter((id) => drawn.has(id)));\n const sync = () => {\n if (!instance.getSource(sourceId)) return;\n const prev = applied.current;\n for (const id of prev) if (!target.has(id)) instance.setFeatureState({ source: sourceId, id }, { selected: false });\n for (const id of target) if (!prev.has(id)) instance.setFeatureState({ source: sourceId, id }, { selected: true });\n applied.current = target;\n };\n sync();\n const onData = (e: { sourceId?: string; sourceDataType?: string }) => {\n if (e.sourceId !== sourceId || e.sourceDataType !== 'metadata') return;\n applied.current = new Set();\n sync();\n };\n instance.on('sourcedata', onData);\n return () => {\n instance.off('sourcedata', onData);\n };\n }, [map, sourceId, valid, selectedKey]);\n\n return { colors: ctx.colors, hasSelection: selectedIds.length > 0, valid };\n}\n\n/** A source id that is safe in MapLibre layer ids. */\nfunction usePartId(prefix: string) {\n return `oui-${prefix}-${React.useId().replace(/[^\\w-]/g, '')}`;\n}\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport interface MapRootProps\n extends Omit<\n MapProps,\n 'mapStyle' | 'initialViewState' | 'interactiveLayerIds' | 'cursor' | 'locale' | 'style' | 'children' | 'id' | 'attributionControl' | 'workerUrl' | 'mapLib'\n > {\n /** Ref to the map instance (`flyTo`, `getMap()`, …), set once the map has loaded MapLibre. */\n ref?: React.Ref<MapRef>;\n /** Base maps to choose from. The first is shown unless `baseLayer` or `defaultBaseLayer` says otherwise. */\n baseLayers: MapBaseLayer[];\n /** Id of the shown base map (controlled). */\n baseLayer?: string;\n /** Id of the initially shown base map when uncontrolled. */\n defaultBaseLayer?: string;\n /** Called with the base map id that `Map.BaseLayerSwitch` picked. */\n onBaseLayerChange?: (id: string) => void;\n /** Starting camera, used until `fit` moves it. */\n initialView?: MapView;\n /**\n * Zooms to the data (`data`) or to the selection, falling back to the data (`selected`). Data changes\n * refit until the user pans or zooms the map; selection changes always refit with `selected`.\n */\n fit?: MapFit;\n /** Translations of the built-in texts; also passed to MapLibre's control strings. */\n labels?: Partial<MapLabels>;\n /** Corner of the zoom buttons, or `false` to hide them. */\n controlsPosition?: ControlPosition | false;\n /**\n * Adds a button, next to the zoom buttons, that expands the map over the whole window (not browser\n * fullscreen) above the page, at the dialog z-index. Escape or the button returns it.\n */\n expandable?: boolean;\n /** Classes for the map container. Set its height in CSS (`--oui-map-height`, default 24rem). */\n className?: string;\n /** Inline styles for the map container. */\n style?: React.CSSProperties;\n /** Data parts (`Map.Routes`, `Map.Areas`, …), markers, popups and overlays. */\n children?: React.ReactNode;\n}\n\n/**\n * A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks\n * and hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,\n * `Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.\n * Needs `@optimum-intelligence/opti-ui/map.css` imported; MapLibre's worker is set up for Vite apps.\n *\n * @example\n * <Map.Root\n * baseLayers={[{ id: 'streets', label: 'Streets', style: 'https://tiles.openfreemap.org/styles/bright' }]}\n * initialView={{ longitude: 19.04, latitude: 47.5, zoom: 10 }}\n * >\n * <Map.Routes\n * items={[{ id: 'trip-1', coordinates: [[19.0, 47.48], [19.08, 47.52]] }]}\n * selectedIds={selected}\n * onItemClick={(trip) => setSelected([trip.id])}\n * />\n * <Map.Marker kind=\"depot\" position={[19.0, 47.48]} />\n * </Map.Root>\n */\nfunction MapRoot({\n ref,\n baseLayers,\n baseLayer,\n defaultBaseLayer,\n onBaseLayerChange,\n initialView,\n fit = 'data',\n labels,\n controlsPosition = 'top-right',\n expandable = false,\n className,\n style,\n children,\n onClick,\n onMouseMove,\n onMouseOut,\n ...props\n}: MapRootProps) {\n const [element, setElement] = React.useState<HTMLDivElement | null>(null);\n const [map, setMap] = React.useState<MapRef | null>(null);\n const [parts, setParts] = React.useState<Record<string, DataPart>>({});\n const [internalLayer, setInternalLayer] = React.useState(defaultBaseLayer ?? baseLayers[0]?.id ?? '');\n const [cursor, setCursor] = React.useState('');\n const [expanded, setExpanded] = React.useState(false);\n const handlers = React.useRef<Record<string, PartHandlers>>({});\n const hovered = React.useRef<{ source: string; id: string | number } | null>(null);\n const colors = useResolvedColors(element);\n const text = { ...defaultLabels, ...labels };\n\n const currentId = baseLayer ?? internalLayer;\n const current = baseLayers.find((l) => l.id === currentId) ?? baseLayers[0];\n const mapStyle = colors.dark && current?.darkStyle ? current.darkStyle : current?.style;\n\n const setBaseLayer = (id: string) => {\n setInternalLayer(id);\n onBaseLayerChange?.(id);\n };\n const register = (partId: string, part: DataPart | null) => {\n setParts((prev) => {\n const next = { ...prev };\n if (part) next[partId] = part;\n else delete next[partId];\n return next;\n });\n };\n const setHandlers = (partId: string, value: PartHandlers | null) => {\n if (value) handlers.current[partId] = value;\n else delete handlers.current[partId];\n };\n\n const entries = Object.entries(parts);\n const interactiveLayerIds = entries.flatMap(([, part]) => part.layerIds);\n const ownerOf = (layerId: string) => entries.find(([, part]) => part.layerIds.includes(layerId))?.[0];\n const empty = entries.length > 0 && entries.every(([, part]) => !part.bounds);\n\n // Bounds are [w, s, e, n]; as two corners they extend like coordinates.\n const corners = (b: Bounds | null) => b && [b.slice(0, 2), b.slice(2)];\n const boundsKey = (b: Bounds | null) => b?.map((n) => n.toFixed(5)).join(',') ?? '';\n const dataKey = fit === 'none' ? '' : boundsKey(extend(null, entries.map(([, part]) => corners(part.bounds))));\n const selectionKey = fit === 'selected' ? boundsKey(extend(null, entries.map(([, part]) => corners(part.selectedBounds)))) : '';\n\n // Once the user pans or zooms (events with an `originalEvent`), data changes stop moving the camera;\n // a selection change still fits with `fit=\"selected\"`.\n const userMoved = React.useRef(false);\n React.useEffect(() => {\n const instance = map?.getMap();\n if (!instance) return;\n const onMoveStart = (event: { originalEvent?: unknown }) => {\n if (event.originalEvent) userMoved.current = true;\n };\n instance.on('movestart', onMoveStart);\n return () => {\n instance.off('movestart', onMoveStart);\n };\n }, [map]);\n\n const fitted = React.useRef({ data: '', selection: '' });\n React.useEffect(() => {\n if (!map) return;\n const prev = fitted.current;\n fitted.current = { data: dataKey, selection: selectionKey };\n const selectionChanged = selectionKey !== prev.selection;\n const dataChanged = dataKey !== prev.data && !userMoved.current;\n const key = selectionKey || dataKey;\n if (!key || !(selectionChanged || dataChanged)) return;\n const [w, s, e, n] = key.split(',').map(Number);\n map.fitBounds([[w, s], [e, n]], { padding: 48, maxZoom: 15, duration: 400 });\n }, [map, dataKey, selectionKey]);\n\n const setHover = (next: { source: string; id: string | number } | null, event: MapLayerMouseEvent) => {\n const prev = hovered.current;\n const key = (h: typeof next) => (h ? `${h.source}|${h.id}` : '');\n if (key(prev) === key(next)) return;\n const instance = event.target;\n if (prev) {\n if (instance.getSource(prev.source)) instance.setFeatureState(prev, { hover: false });\n handlers.current[prev.source]?.onHover?.(null, event);\n }\n if (next) {\n instance.setFeatureState(next, { hover: true });\n handlers.current[next.source]?.onHover?.(String(next.id), event);\n }\n hovered.current = next;\n setCursor(next ? 'pointer' : '');\n };\n\n React.useEffect(() => {\n if (!expanded) return;\n const onKeyDown = (event: KeyboardEvent) => {\n // A popup inside the map that handles Escape (an open Select) marks the event as handled.\n if (event.key === 'Escape' && !event.defaultPrevented) setExpanded(false);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [expanded]);\n\n const initialViewState = initialView && 'bounds' in initialView\n ? { bounds: initialView.bounds as LngLatBoundsLike, fitBoundsOptions: { padding: 48 } }\n : initialView;\n\n return (\n <div ref={setElement} className={cx('oui-map', className)} style={style} data-expanded={expanded || undefined}>\n {element && (\n <MapGL\n {...props}\n mapLib={loadMapLib()}\n ref={(instance: MapRef | null) => {\n setMap(instance);\n if (typeof ref === 'function') ref(instance);\n else if (ref) ref.current = instance;\n }}\n mapStyle={mapStyle}\n initialViewState={initialViewState}\n interactiveLayerIds={interactiveLayerIds}\n cursor={cursor}\n attributionControl={false}\n locale={{ 'NavigationControl.ZoomIn': text.zoomIn, 'NavigationControl.ZoomOut': text.zoomOut }}\n onClick={(event) => {\n const feature = event.features?.[0];\n const owner = feature && ownerOf(feature.layer.id);\n if (feature && owner && feature.id != null) handlers.current[owner]?.onClick?.(String(feature.id), event);\n onClick?.(event);\n }}\n onMouseMove={(event) => {\n const feature = event.features?.[0];\n const owner = feature && ownerOf(feature.layer.id);\n setHover(feature && owner && feature.id != null ? { source: owner, id: feature.id } : null, event);\n onMouseMove?.(event);\n }}\n onMouseOut={(event) => {\n setHover(null, event);\n onMouseOut?.(event);\n }}\n >\n <MapContext\n value={{ map, colors, labels: text, baseLayers, baseLayer: current?.id ?? '', setBaseLayer, register, setHandlers }}\n >\n {controlsPosition && <NavigationControl position={controlsPosition} showCompass={false} />}\n {expandable && (\n <ExpandControl\n position={controlsPosition || 'top-right'}\n expanded={expanded}\n label={expanded ? text.collapse : text.expand}\n onToggle={() => setExpanded((value) => !value)}\n />\n )}\n <AttributionControl key={current?.id} compact customAttribution={current?.attribution} />\n {children}\n {empty && <div className=\"oui-map__empty\">{text.noData}</div>}\n </MapContext>\n </MapGL>\n )}\n </div>\n );\n}\n\n/** The expand button as a MapLibre control, so it stacks with the zoom buttons in the same corner. */\nfunction ExpandControl({\n position,\n expanded,\n label,\n onToggle,\n}: {\n position: ControlPosition;\n expanded: boolean;\n label: string;\n onToggle: () => void;\n}) {\n const [host] = React.useState(() => {\n const element = document.createElement('div');\n element.className = 'maplibregl-ctrl maplibregl-ctrl-group';\n return element;\n });\n useControl(() => ({ onAdd: () => host, onRemove: () => host.remove() }), { position });\n return createPortal(\n <button type=\"button\" className=\"oui-map__expand\" aria-label={label} title={label} aria-pressed={expanded} onClick={onToggle}>\n <span className=\"maplibregl-ctrl-icon\" aria-hidden=\"true\" />\n </button>,\n host,\n );\n}\n\n// ─── Data parts ──────────────────────────────────────────────────────────────\n\nexport interface MapRouteItem {\n /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */\n id: string;\n /** Line vertices as `[longitude, latitude]`. */\n coordinates: MapPosition[];\n /** Any CSS colour, `var(--oui-…)` included. Wins over `colorIndex`. */\n color?: string;\n /**\n * Series index for `seriesColor()`. Defaults to the item's index in `items`, so pass it (or `color`)\n * when you filter `items`; otherwise colours shift and stop matching the legend.\n */\n colorIndex?: number;\n /** Draws a dashed line, e.g. for a planned or return leg. */\n dashed?: boolean;\n}\n\nexport interface MapRoutesProps {\n /** Routes to draw. All of them go into one GeoJSON source, so thousands are fine. */\n items: MapRouteItem[];\n /** Ids of selected routes. While it is not empty, other routes fade to `--oui-map-dim-opacity`. */\n selectedIds?: string[];\n /** Called with the clicked route. */\n onItemClick?: (item: MapRouteItem, event: MapLayerMouseEvent) => void;\n /** Called with the route under the pointer, and with `null` when the pointer leaves it. */\n onItemHover?: (item: MapRouteItem | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Lines such as trips or tracks, drawn as one source with a casing, a solid and a dashed layer. Selected\n * routes get a halo in the surface colour; hover and selection use feature state, so they never rebuild\n * the data. Colours come from `color` or the chart palette.\n *\n * @example\n * <Map.Routes\n * items={trips.map((t) => ({ id: t.id, coordinates: t.path, dashed: t.planned }))}\n * selectedIds={selected}\n * onItemClick={(trip) => setSelected([trip.id])}\n * />\n */\nfunction MapRoutes({ items, selectedIds, onItemClick, onItemHover }: MapRoutesProps) {\n const sourceId = usePartId('routes');\n const ids = { casing: `${sourceId}-casing`, solid: `${sourceId}-solid`, dashed: `${sourceId}-dashed` };\n const { colors, hasSelection, valid } = useDataPart('Map.Routes', sourceId, {\n items,\n selectedIds,\n layerIds: [ids.solid, ids.dashed],\n coordinates: (item) => item.coordinates,\n minPositions: 2,\n onItemClick,\n onItemHover,\n });\n const data = {\n type: 'FeatureCollection' as const,\n // Colour indexes count every item, so a skipped item does not shift the others' colours.\n features: items.flatMap((item, index) =>\n valid.has(item)\n ? [{\n type: 'Feature' as const,\n properties: { id: item.id, dashed: !!item.dashed, color: colors.color(item.color ?? seriesColor(item.colorIndex ?? index)) },\n geometry: { type: 'LineString' as const, coordinates: item.coordinates },\n }]\n : [],\n ),\n };\n const weight = colors.number('--oui-map-route-weight', 4);\n const dim = colors.number('--oui-map-dim-opacity', 0.35);\n const width: ExpressionSpecification = ['case', HOVER, weight + 1.5, weight];\n const opacity = dimmed(hasSelection, dim);\n const layout = { 'line-join': 'round', 'line-cap': 'round' } as const;\n const layers: LayerProps[] = [\n {\n id: ids.casing,\n type: 'line',\n layout,\n paint: { 'line-color': colors.color('var(--oui-map-casing-color)'), 'line-width': weight + 4, 'line-opacity': ['case', SELECTED, 1, 0] },\n },\n {\n id: ids.solid,\n type: 'line',\n filter: ['!=', ['get', 'dashed'], true],\n layout,\n paint: { 'line-color': ['get', 'color'], 'line-width': width, 'line-opacity': opacity },\n },\n {\n id: ids.dashed,\n type: 'line',\n filter: ['==', ['get', 'dashed'], true],\n layout: { 'line-join': 'round', 'line-cap': 'butt' },\n paint: { 'line-color': ['get', 'color'], 'line-width': width, 'line-opacity': opacity, 'line-dasharray': [2, 1.5] },\n },\n ];\n return (\n <Source id={sourceId} type=\"geojson\" data={data} promoteId=\"id\">\n {layers.map((layer) => <Layer key={layer.id} {...layer} />)}\n </Source>\n );\n}\n\nexport interface MapAreaItem {\n /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */\n id: string;\n /** Outline of the area, in `[longitude, latitude]` coordinates. */\n geometry: MapPolygon | MapMultiPolygon;\n /** Fill and outline colour from the status tokens (`-subtle` fill, `-border` outline). */\n tone?: MapTone;\n}\n\nexport interface MapAreasProps {\n /** Areas to draw, all in one GeoJSON source. */\n items: MapAreaItem[];\n /** Ids of selected areas. While it is not empty, other areas fade to `--oui-map-dim-opacity`. */\n selectedIds?: string[];\n /** Called with the clicked area. */\n onItemClick?: (item: MapAreaItem, event: MapLayerMouseEvent) => void;\n /** Called with the area under the pointer, and with `null` when the pointer leaves it. */\n onItemHover?: (item: MapAreaItem | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Polygons such as fields, zones or service areas, as one fill and one outline layer. Selected and\n * hovered areas get a heavier outline.\n *\n * @example\n * <Map.Areas items={fields.map((f) => ({ id: f.id, geometry: f.shape, tone: f.late ? 'warning' : 'success' }))} />\n */\nfunction MapAreas({ items, selectedIds, onItemClick, onItemHover }: MapAreasProps) {\n const sourceId = usePartId('areas');\n const ids = { fill: `${sourceId}-fill`, line: `${sourceId}-line` };\n const { colors, hasSelection, valid } = useDataPart('Map.Areas', sourceId, {\n items,\n selectedIds,\n layerIds: [ids.fill],\n coordinates: (item) => item.geometry.coordinates,\n onItemClick,\n onItemHover,\n });\n const data = {\n type: 'FeatureCollection' as const,\n features: [...valid].map((item) => {\n const tone = toneColors[item.tone ?? 'neutral'];\n return {\n type: 'Feature' as const,\n properties: { id: item.id, fill: colors.color(tone.fill), line: colors.color(tone.line) },\n geometry: item.geometry,\n };\n }),\n };\n const opacity = dimmed(hasSelection, colors.number('--oui-map-dim-opacity', 0.35));\n return (\n <Source id={sourceId} type=\"geojson\" data={data} promoteId=\"id\">\n <Layer id={ids.fill} type=\"fill\" paint={{ 'fill-color': ['get', 'fill'], 'fill-opacity': opacity }} />\n <Layer\n id={ids.line}\n type=\"line\"\n layout={{ 'line-join': 'round' }}\n paint={{ 'line-color': ['get', 'line'], 'line-width': ['case', ACTIVE, 2.5, 1.25], 'line-opacity': opacity }}\n />\n </Source>\n );\n}\n\nexport interface MapPointItem {\n /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */\n id: string;\n /** `[longitude, latitude]`. */\n coordinates: MapPosition;\n /** Any CSS colour, `var(--oui-…)` included. Wins over `tone` and `colorIndex`. */\n color?: string;\n /** Status colour. Wins over `colorIndex`. */\n tone?: MapTone;\n /**\n * Series index for `seriesColor()`. Defaults to the item's index in `items`, so pass it (or `color`)\n * when you filter `items`; otherwise colours shift and stop matching the legend.\n */\n colorIndex?: number;\n}\n\nexport interface MapPointsProps {\n /** Points to draw, all in one GeoJSON source and one circle layer. */\n items: MapPointItem[];\n /** Ids of selected points. While it is not empty, other points fade to `--oui-map-dim-opacity`. */\n selectedIds?: string[];\n /** Called with the clicked point. */\n onItemClick?: (item: MapPointItem, event: MapLayerMouseEvent) => void;\n /** Called with the point under the pointer, and with `null` when the pointer leaves it. */\n onItemHover?: (item: MapPointItem | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Many simple points (sensors, stops, events) as one circle layer. For a few dozen styled pins with HTML\n * content, use `Map.Marker` instead.\n *\n * @example\n * <Map.Points items={sensors.map((s) => ({ id: s.id, coordinates: s.position, tone: s.ok ? 'success' : 'danger' }))} />\n */\nfunction MapPoints({ items, selectedIds, onItemClick, onItemHover }: MapPointsProps) {\n const sourceId = usePartId('points');\n const circleId = `${sourceId}-circle`;\n const { colors, hasSelection, valid } = useDataPart('Map.Points', sourceId, {\n items,\n selectedIds,\n layerIds: [circleId],\n coordinates: (item) => item.coordinates,\n onItemClick,\n onItemHover,\n });\n const data = {\n type: 'FeatureCollection' as const,\n features: items.flatMap((item, index) =>\n valid.has(item)\n ? [{\n type: 'Feature' as const,\n properties: {\n id: item.id,\n color: colors.color(item.color ?? (item.tone ? toneColors[item.tone].solid : seriesColor(item.colorIndex ?? index))),\n },\n geometry: { type: 'Point' as const, coordinates: item.coordinates },\n }]\n : [],\n ),\n };\n const opacity = dimmed(hasSelection, colors.number('--oui-map-dim-opacity', 0.35));\n return (\n <Source id={sourceId} type=\"geojson\" data={data} promoteId=\"id\">\n <Layer\n id={circleId}\n type=\"circle\"\n paint={{\n 'circle-color': ['get', 'color'],\n 'circle-radius': ['case', ACTIVE, 7, 5],\n 'circle-stroke-color': colors.color('var(--oui-map-casing-color)'),\n 'circle-stroke-width': 1.5,\n 'circle-opacity': opacity,\n 'circle-stroke-opacity': opacity,\n }}\n />\n </Source>\n );\n}\n\n// ─── HTML parts ──────────────────────────────────────────────────────────────\n\nexport interface MapMarkerProps {\n /** `[longitude, latitude]` of the pin. */\n position: MapPosition;\n /** Pin shape: a numbered `stop`, a `depot`, a `vehicle` or a small `point`. */\n kind?: MapMarkerKind;\n /** Number shown in a `stop` pin. */\n sequence?: number;\n /** Any CSS colour for the pin. Wins over `tone`. */\n color?: string;\n /** Status colour for the pin. */\n tone?: MapTone;\n /** Accessible name and tooltip text. Depots default to the `depot` label. */\n label?: string;\n /** Marks the pin as selected (larger, with a ring). */\n selected?: boolean;\n /** Fades the pin to `--oui-map-dim-opacity`, e.g. for stops of trips that are not selected. */\n dimmed?: boolean;\n /** Called when the pin is clicked. */\n onClick?: () => void;\n /** Custom pin content, replacing the built-in shape. */\n children?: React.ReactNode;\n /** Classes for the pin element. */\n className?: string;\n}\n\n/**\n * An HTML pin at one position: numbered stops, depots, vehicles. Each marker is a DOM element, so use it\n * for dozens of pins, not thousands (use `Map.Points` for those).\n *\n * @example\n * <Map.Marker kind=\"stop\" sequence={3} position={[19.05, 47.5]} color={seriesColor(0)} />\n */\nfunction MapMarker({\n position,\n kind = 'stop',\n sequence,\n color,\n tone,\n label,\n selected,\n dimmed,\n onClick,\n children,\n className,\n}: MapMarkerProps) {\n const { labels } = useMapContext('Map.Marker');\n const name = label ?? (kind === 'depot' ? labels.depot : undefined);\n const pinColor = color ?? (tone ? toneColors[tone].solid : undefined);\n return (\n <Marker\n longitude={position[0]}\n latitude={position[1]}\n anchor=\"center\"\n // Markers never pass clicks to the map, so a depot on a route does not select the route.\n onClick={(event) => {\n event.originalEvent.stopPropagation();\n onClick?.();\n }}\n >\n <div\n className={cx('oui-map__marker', className)}\n data-kind={kind}\n data-selected={selected || undefined}\n data-dimmed={dimmed || undefined}\n data-interactive={onClick ? '' : undefined}\n role={name ? 'img' : undefined}\n aria-label={name}\n title={name}\n style={pinColor ? ({ '--_pin-color': pinColor } as React.CSSProperties) : undefined}\n >\n {children ?? (kind === 'stop' && sequence != null ? sequence : kind === 'depot' ? <DepotGlyph /> : null)}\n </div>\n </Marker>\n );\n}\n\nfunction DepotGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.2} aria-hidden>\n <path d=\"M3 10.5 12 4l9 6.5V20H3z\" strokeLinejoin=\"round\" />\n <path d=\"M9 20v-6h6v6\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport interface MapPopupProps extends Omit<PopupProps, 'longitude' | 'latitude'> {\n /** `[longitude, latitude]` the popup points at. */\n position: MapPosition;\n}\n\n/**\n * A popup anchored to a position, styled as a library card. Render it while something is selected and\n * close it from `onClose`.\n *\n * @example\n * {picked && (\n * <Map.Popup position={picked.position} onClose={() => setPicked(null)}>\n * <strong>{picked.name}</strong>\n * </Map.Popup>\n * )}\n */\nfunction MapPopup({ position, className, offset = 14, maxWidth = '20rem', ...props }: MapPopupProps) {\n return (\n <Popup\n longitude={position[0]}\n latitude={position[1]}\n offset={offset}\n maxWidth={maxWidth}\n className={cx('oui-map__popup', className)}\n {...props}\n />\n );\n}\n\n/**\n * Hover content: a popup without a close button that stays open on map clicks. Show it from\n * `onItemHover` and hide it when the item is `null`.\n *\n * @example\n * {hovered && <Map.Tooltip position={hovered.position}>{hovered.name}</Map.Tooltip>}\n */\nfunction MapTooltip({ position, className, offset = 10, ...props }: MapPopupProps) {\n return (\n <Popup\n longitude={position[0]}\n latitude={position[1]}\n offset={offset}\n closeButton={false}\n closeOnClick={false}\n className={cx('oui-map__popup oui-map__tooltip', className)}\n {...props}\n />\n );\n}\n\nexport interface MapOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Ref to the overlay element. */\n ref?: React.Ref<HTMLDivElement>;\n /** Corner the overlay sits in. Overlays in the same corner as the zoom buttons cover them. */\n position?: MapOverlayPosition;\n}\n\n/** Content floating over a corner of the map: stat cards, selects, a legend or `Map.BaseLayerSwitch`. */\nfunction MapOverlay({ position = 'top-left', className, ref, ...props }: MapOverlayProps) {\n return <div ref={ref} className={cx('oui-map__overlay', className)} data-position={position} {...props} />;\n}\n\nexport interface MapLegendItem {\n /** Id matching the data items it stands for. */\n id: string;\n /** Text of the entry. */\n label: React.ReactNode;\n /** Swatch colour: any CSS colour, e.g. `seriesColor(i)`. */\n color: string;\n /** Whether the entry's data is shown. Defaults to `true`. */\n visible?: boolean;\n /** Number shown at the end of the entry. */\n count?: React.ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Ref to the legend element. */\n ref?: React.Ref<HTMLDivElement>;\n /** Entries in order. */\n items: MapLegendItem[];\n /** Whether clicking an entry selects it: `single` keeps one, `multi` toggles each. */\n selectionMode?: MapLegendSelectionMode;\n /** Ids of the selected entries (controlled). */\n selectedIds?: string[];\n /** Called with the new selected ids. */\n onSelectedIdsChange?: (ids: string[]) => void;\n /** Called with the ids to show or hide. Adds an eye button to every entry. */\n onVisibilityChange?: (ids: string[], visible: boolean) => void;\n /** Adds a show all / hide all button when `onVisibilityChange` is set. */\n showAllToggle?: boolean;\n}\n\n/**\n * The key to a map's colours, with optional selection and show/hide per entry. Plain DOM, so it also\n * works outside the map; inside `Map.Root` it takes the root's labels. Put it in a `Map.Overlay`.\n *\n * @example\n * <Map.Legend\n * items={trips.map((t, i) => ({ id: t.id, label: t.name, color: seriesColor(i), visible: !hidden.includes(t.id) }))}\n * selectionMode=\"multi\"\n * selectedIds={selected}\n * onSelectedIdsChange={setSelected}\n * onVisibilityChange={(ids, visible) => setHidden((h) => (visible ? h.filter((id) => !ids.includes(id)) : [...h, ...ids]))}\n * showAllToggle\n * />\n */\nfunction MapLegend({\n items,\n selectionMode = 'none',\n selectedIds = [],\n onSelectedIdsChange,\n onVisibilityChange,\n showAllToggle = false,\n className,\n ref,\n ...props\n}: MapLegendProps) {\n const labels = React.use(MapContext)?.labels ?? defaultLabels;\n const allVisible = items.every((item) => item.visible !== false);\n const toggle = (id: string) => {\n const on = selectedIds.includes(id);\n if (selectionMode === 'single') onSelectedIdsChange?.(on ? [] : [id]);\n else onSelectedIdsChange?.(on ? selectedIds.filter((s) => s !== id) : [...selectedIds, id]);\n };\n return (\n <div ref={ref} className={cx('oui-map-legend', className)} data-selection-mode={selectionMode} {...props}>\n {onVisibilityChange && showAllToggle && (\n <button\n type=\"button\"\n className=\"oui-map-legend__toggle-all\"\n onClick={() => onVisibilityChange(items.map((item) => item.id), !allVisible)}\n >\n {allVisible ? labels.hideAll : labels.showAll}\n </button>\n )}\n <ul className=\"oui-map-legend__list\">\n {items.map((item) => {\n const selected = selectedIds.includes(item.id);\n const visible = item.visible !== false;\n const content = (\n <>\n <span className=\"oui-map-legend__swatch\" style={{ '--_swatch': item.color } as React.CSSProperties} />\n <span className=\"oui-map-legend__label\">{item.label}</span>\n {item.count != null && <span className=\"oui-map-legend__count\">{item.count}</span>}\n </>\n );\n return (\n <li\n key={item.id}\n className=\"oui-map-legend__item\"\n data-selected={selected || undefined}\n data-hidden={visible ? undefined : ''}\n >\n {selectionMode === 'none' ? (\n <span className=\"oui-map-legend__entry\">{content}</span>\n ) : (\n <button type=\"button\" className=\"oui-map-legend__entry\" aria-pressed={selected} onClick={() => toggle(item.id)}>\n {content}\n </button>\n )}\n {onVisibilityChange && (\n <button\n type=\"button\"\n className=\"oui-map-legend__visibility\"\n aria-label={`${visible ? labels.hide : labels.show} ${typeof item.label === 'string' ? item.label : item.id}`}\n onClick={() => onVisibilityChange([item.id], !visible)}\n >\n {visible ? <EyeIcon /> : <EyeOffIcon />}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nexport interface MapBaseLayerSwitchProps\n extends Omit<SegmentedControlProps, 'options' | 'value' | 'defaultValue' | 'onValueChange'> {}\n\n/** Segmented switch between the root's `baseLayers` (e.g. streets and satellite). Put it in a `Map.Overlay`. */\nfunction MapBaseLayerSwitch({ size = 'sm', ...props }: MapBaseLayerSwitchProps) {\n const { baseLayers, baseLayer, setBaseLayer } = useMapContext('Map.BaseLayerSwitch');\n return (\n <SegmentedControl\n size={size}\n options={baseLayers.map((layer) => ({ value: layer.id, label: layer.label }))}\n value={baseLayer}\n onValueChange={setBaseLayer}\n {...props}\n />\n );\n}\n\n/**\n * Map components on MapLibre, from `@optimum-intelligence/opti-ui/map`. `Map.Root` holds the map; inside\n * it, `Map.Areas`, `Map.Routes` and `Map.Points` draw arrays of items as single GeoJSON layers,\n * `Map.Marker` adds HTML pins, `Map.Popup` and `Map.Tooltip` show content at a position, and\n * `Map.Overlay` floats `Map.Legend`, `Map.BaseLayerSwitch` or cards over a corner.\n *\n * @example\n * <Map.Root baseLayers={baseLayers} fit=\"selected\">\n * <Map.Areas items={zones} />\n * <Map.Routes items={trips} selectedIds={selected} onItemClick={(t) => setSelected([t.id])} />\n * <Map.Overlay position=\"top-left\">\n * <Map.Legend items={legend} selectionMode=\"single\" selectedIds={selected} onSelectedIdsChange={setSelected} />\n * </Map.Overlay>\n * <Map.Overlay position=\"bottom-left\">\n * <Map.BaseLayerSwitch />\n * </Map.Overlay>\n * </Map.Root>\n */\nexport const Map = {\n Root: MapRoot,\n Routes: MapRoutes,\n Areas: MapAreas,\n Points: MapPoints,\n Marker: MapMarker,\n Popup: MapPopup,\n Tooltip: MapTooltip,\n Overlay: MapOverlay,\n Legend: MapLegend,\n BaseLayerSwitch: MapBaseLayerSwitch,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Map.js","names":["React","createPortal","AttributionControl","Layer","Map","MapGL","Marker","NavigationControl","Popup","Source","ControlPosition","LayerProps","MapLayerMouseEvent","MapProps","MapRef","PopupProps","StyleSpecification","useControl","ExpressionSpecification","LngLatBoundsLike","mapLib","Promise","loadMapLib","all","then","lib","worker","setWorkerUrl","URL","createObjectURL","Blob","default","type","cx","seriesColor","EyeIcon","EyeOffIcon","SegmentedControl","SegmentedControlProps","useResolvedColors","ResolvedColors","process","env","NODE_ENV","MapPosition","MapTone","MapFit","MapOverlayPosition","MapMarkerKind","MapLegendSelectionMode","MapBaseLayer","id","label","ReactNode","style","darkStyle","attribution","MapLabels","zoomIn","zoomOut","showAll","hideAll","show","hide","depot","noData","expand","collapse","defaultLabels","MapPolygon","coordinates","MapMultiPolygon","MapView","longitude","latitude","zoom","bounds","Bounds","DataPart","layerIds","selectedBounds","PartHandlers","onClick","event","onHover","MapContextValue","map","colors","labels","baseLayers","baseLayer","setBaseLayer","register","partId","part","setHandlers","handlers","MapContext","createContext","useMapContext","ctx","use","Error","rasterStyle","tiles","tileSize","version","sources","raster","Array","isArray","layers","source","hasValidPositions","coords","min","count","check","value","length","Number","isFinite","every","extend","x","y","Math","max","reduce","toneColors","Record","solid","fill","line","neutral","accent","success","warning","danger","SELECTED","HOVER","ACTIVE","dimmed","hasSelection","dim","DataItem","DataPartOptions","items","T","selectedIds","item","minPositions","onItemClick","onItemHover","useDataPart","partName","sourceId","options","$","_c","t0","t1","t2","undefined","selected","Set","t3","join","selectedKey","t4","valid","filter","invalidIds","item_0","has","_temp","t5","t6","console","warn","useEffect","item_2","boundsKey","t7","t8","t10","t9","t11","byId","find","item_3","id_0","item_4","id_1","event_0","t12","t13","t14","Symbol","for","applied","useRef","instance","getMap","drawn","_temp2","target","split","id_2","sync","getSource","prev","current","id_3","setFeatureState","id_4","onData","e","sourceDataType","on","off","item_5","item_1","usePartId","prefix","useId","replace","MapRootProps","Omit","ref","Ref","defaultBaseLayer","onBaseLayerChange","initialView","fit","Partial","controlsPosition","expandable","className","CSSProperties","children","MapRoot","onMouseMove","onMouseOut","props","element","setElement","useState","setMap","parts","setParts","internalLayer","setInternalLayer","cursor","setCursor","expanded","setExpanded","hovered","text","currentId","l","mapStyle","dark","next","partId_0","dataKey","empty","interactiveLayerIds","ownerOf","entries","Object","flatMap","_temp3","layerId","part_1","includes","_temp4","corners","_temp5","_temp7","part_3","part_4","selectionKey","userMoved","onMoveStart","originalEvent","data","selection","fitted","t15","t16","prev_0","selectionChanged","dataChanged","key","w","s","n_0","fitBounds","n","padding","maxZoom","duration","t17","next_0","prev_1","key_0","_temp8","instance_0","hover","String","setHover","t18","t19","onKeyDown","event_1","defaultPrevented","document","addEventListener","removeEventListener","t20","fitBoundsOptions","initialViewState","t21","t22","t23","instance_1","event_2","feature","features","owner","layer","event_3","feature_0","owner_0","event_4","_temp9","t24","value_0","h","b_0","b","_temp6","toFixed","slice","part_2","part_0","ExpandControl","position","onToggle","host","_temp0","onAdd","onRemove","remove","createElement","MapRouteItem","color","colorIndex","dashed","MapRoutesProps","MapRoutes","casing","ids","_temp1","index","const","properties","geometry","weight","number","width","opacity","layout","paint","t25","t26","t27","t28","_temp10","t29","MapAreaItem","tone","MapAreasProps","MapAreas","_temp11","MapPointItem","MapPointsProps","MapPoints","circleId","_temp12","MapMarkerProps","kind","sequence","MapMarker","name","pinColor","stopPropagation","DepotGlyph","MapPopupProps","MapPopup","offset","maxWidth","MapTooltip","MapOverlayProps","HTMLAttributes","HTMLDivElement","MapOverlay","MapLegendItem","visible","MapLegendProps","selectionMode","onSelectedIdsChange","onVisibilityChange","showAllToggle","MapLegend","_temp13","allVisible","toggle","_temp14","content","MapBaseLayerSwitchProps","MapBaseLayerSwitch","size","_temp15","Root","Routes","Areas","Points","Tooltip","Overlay","Legend","BaseLayerSwitch","_c","MapGL","_Fragment","Map"],"sources":["../../../src/components/map/Map.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n AttributionControl,\n Layer,\n Map as MapGL,\n Marker,\n NavigationControl,\n Popup,\n Source,\n type ControlPosition,\n type LayerProps,\n type MapLayerMouseEvent,\n type MapProps,\n type MapRef,\n type PopupProps,\n type StyleSpecification,\n useControl,\n} from '@vis.gl/react-maplibre';\nimport type { ExpressionSpecification, LngLatBoundsLike } from 'maplibre-gl';\n\n/**\n * Loads MapLibre and points it at its worker, once, on the first map mount. The worker source is inlined\n * in `./worker` at library build time and started from a blob URL, so apps need no bundler config (a\n * strict Content-Security-Policy needs `worker-src blob:`). Both are dynamic imports so apps without a\n * mounted map never load them.\n */\nlet mapLib: Promise<typeof import('maplibre-gl')> | undefined;\nfunction loadMapLib() {\n mapLib ??= Promise.all([import('maplibre-gl'), import('./worker')]).then(([lib, worker]) => {\n lib.setWorkerUrl(URL.createObjectURL(new Blob([worker.default], { type: 'text/javascript' })));\n return lib;\n });\n return mapLib;\n}\nimport { cx } from '../../utils/cx';\nimport { seriesColor } from '../../theme/series';\nimport { EyeIcon, EyeOffIcon } from '../../icons';\nimport { SegmentedControl, type SegmentedControlProps } from '../toggle/Toggle';\nimport { useResolvedColors, type ResolvedColors } from './colors';\n\n// Set by the app's bundler; read as `process.env.NODE_ENV` so library builds keep it for the consumer.\ndeclare const process: { env: { NODE_ENV?: string } };\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\n/** A `[longitude, latitude]` pair. */\nexport type MapPosition = [number, number];\n\n/** Status tone for areas, points and markers. */\nexport type MapTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';\n\n/** What `Map.Root` zooms to: all data, the selected items (all data when nothing is selected), or nothing. */\nexport type MapFit = 'data' | 'selected' | 'none';\n\n/** Corner of the map for `Map.Overlay`. */\nexport type MapOverlayPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/** Pin shape of `Map.Marker`. */\nexport type MapMarkerKind = 'stop' | 'depot' | 'vehicle' | 'point';\n\n/** Selection behaviour of `Map.Legend`. */\nexport type MapLegendSelectionMode = 'none' | 'single' | 'multi';\n\n/** One switchable base map. */\nexport interface MapBaseLayer {\n /** Stable id, used by `baseLayer` and `Map.BaseLayerSwitch`. */\n id: string;\n /** Name shown in `Map.BaseLayerSwitch`. */\n label: React.ReactNode;\n /** Style URL or a full style object. Use `rasterStyle()` for a raster tile template. */\n style: string | StyleSpecification;\n /** Style used instead of `style` when the map sits in dark mode. */\n darkStyle?: string | StyleSpecification;\n /** Extra attribution text shown with the style's own. */\n attribution?: string;\n}\n\n/** Texts built into the map components. */\nexport interface MapLabels {\n /** Zoom-in button. */\n zoomIn: string;\n /** Zoom-out button. */\n zoomOut: string;\n /** Legend button that shows every item. */\n showAll: string;\n /** Legend button that hides every item. */\n hideAll: string;\n /** Prefix of a legend item's show button, e.g. \"Show Trip 1\". */\n show: string;\n /** Prefix of a legend item's hide button. */\n hide: string;\n /** Accessible name of depot markers. */\n depot: string;\n /** Shown over the map when every data part is empty. */\n noData: string;\n /** Button that expands the map to fill the window (`expandable`). */\n expand: string;\n /** Button that returns the expanded map to its place. */\n collapse: string;\n}\n\nconst defaultLabels: MapLabels = {\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n showAll: 'Show all',\n hideAll: 'Hide all',\n show: 'Show',\n hide: 'Hide',\n depot: 'Depot',\n noData: 'No data to show',\n expand: 'Expand map',\n collapse: 'Exit expanded map',\n};\n\n/** A GeoJSON `Polygon`: an outer ring and optional holes, each a list of `[longitude, latitude]`. */\nexport interface MapPolygon {\n /** GeoJSON geometry type. */\n type: 'Polygon';\n /** Rings of positions; the first is the outline, the rest are holes. */\n coordinates: number[][][];\n}\n\n/** A GeoJSON `MultiPolygon`: several polygons drawn as one area. */\nexport interface MapMultiPolygon {\n /** GeoJSON geometry type. */\n type: 'MultiPolygon';\n /** One list of rings per polygon. */\n coordinates: number[][][][];\n}\n\n/** Starting camera: a centre and zoom, or bounds to fit. */\nexport type MapView = { longitude: number; latitude: number; zoom: number } | { bounds: [MapPosition, MapPosition] };\n\ntype Bounds = [number, number, number, number];\n\ninterface DataPart {\n layerIds: string[];\n bounds: Bounds | null;\n selectedBounds: Bounds | null;\n}\n\ninterface PartHandlers {\n onClick?: (id: string, event: MapLayerMouseEvent) => void;\n onHover?: (id: string | null, event: MapLayerMouseEvent) => void;\n}\n\ninterface MapContextValue {\n map: MapRef | null;\n colors: ResolvedColors;\n labels: MapLabels;\n baseLayers: MapBaseLayer[];\n baseLayer: string;\n setBaseLayer: (id: string) => void;\n register: (partId: string, part: DataPart | null) => void;\n setHandlers: (partId: string, handlers: PartHandlers | null) => void;\n}\n\nconst MapContext = React.createContext<MapContextValue | null>(null);\n\nfunction useMapContext(part: string) {\n const ctx = React.use(MapContext);\n if (!ctx) throw new Error(`${part} must be used inside Map.Root`);\n return ctx;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/**\n * Builds a MapLibre style from a raster tile URL template (`{z}`, `{x}`, `{y}`), for `MapBaseLayer.style`.\n *\n * @example\n * const satellite = rasterStyle('https://tiles.example.com/{z}/{x}/{y}.jpg', '© Example');\n */\nexport function rasterStyle(tiles: string | string[], attribution?: string, tileSize = 256): StyleSpecification {\n return {\n version: 8,\n sources: { raster: { type: 'raster', tiles: Array.isArray(tiles) ? tiles : [tiles], tileSize, attribution } },\n layers: [{ id: 'raster', type: 'raster', source: 'raster' }],\n };\n}\n\n/** True when `coords` nests at least `min` positions and every one is a finite `[lng, lat]`. */\nfunction hasValidPositions(coords: unknown, min: number): boolean {\n let count = 0;\n const check = (value: unknown): boolean => {\n if (!Array.isArray(value) || value.length === 0) return false;\n if (typeof value[0] !== 'object') {\n count++;\n return value.length >= 2 && Number.isFinite(value[0]) && Number.isFinite(value[1]);\n }\n return value.every(check);\n };\n return check(coords) && count >= min;\n}\n\n/** Grows `bounds` by every `[lng, lat]` pair nested in `coords`. */\nfunction extend(bounds: Bounds | null, coords: unknown): Bounds | null {\n if (!Array.isArray(coords)) return bounds;\n if (typeof coords[0] === 'number') {\n const [x, y] = coords as number[];\n return bounds ? [Math.min(bounds[0], x), Math.min(bounds[1], y), Math.max(bounds[2], x), Math.max(bounds[3], y)] : [x, y, x, y];\n }\n return coords.reduce<Bounds | null>(extend, bounds);\n}\n\nconst toneColors: Record<MapTone, { solid: string; fill: string; line: string }> = {\n neutral: { solid: 'var(--oui-color-text-muted)', fill: 'var(--oui-color-border-subtle)', line: 'var(--oui-color-border)' },\n accent: { solid: 'var(--oui-color-accent)', fill: 'var(--oui-color-accent-subtle)', line: 'var(--oui-color-info-border)' },\n success: { solid: 'var(--oui-color-success)', fill: 'var(--oui-color-success-subtle)', line: 'var(--oui-color-success-border)' },\n warning: { solid: 'var(--oui-color-warning)', fill: 'var(--oui-color-warning-subtle)', line: 'var(--oui-color-warning-border)' },\n danger: { solid: 'var(--oui-color-danger)', fill: 'var(--oui-color-danger-subtle)', line: 'var(--oui-color-danger-border)' },\n};\n\nconst SELECTED: ExpressionSpecification = ['boolean', ['feature-state', 'selected'], false];\nconst HOVER: ExpressionSpecification = ['boolean', ['feature-state', 'hover'], false];\nconst ACTIVE: ExpressionSpecification = ['any', SELECTED, HOVER];\n\n/** Full opacity for selected or hovered items, `dim` for the rest while anything is selected. */\nconst dimmed = (hasSelection: boolean, dim: number): ExpressionSpecification | number =>\n hasSelection ? ['case', ACTIVE, 1, dim] : 1;\n\ninterface DataItem {\n id: string;\n}\n\ninterface DataPartOptions<T extends DataItem> {\n items: T[];\n selectedIds?: string[];\n layerIds: string[];\n coordinates: (item: T) => unknown;\n /** Fewest positions a drawable item needs (2 for a line). */\n minPositions?: number;\n onItemClick?: (item: T, event: MapLayerMouseEvent) => void;\n onItemHover?: (item: T | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Shared wiring of the data parts: registers layers and bounds with the root, routes events back,\n * and keeps the `selected` feature state in sync (also after a style switch re-adds the source).\n */\nfunction useDataPart<T extends DataItem>(partName: string, sourceId: string, options: DataPartOptions<T>) {\n const ctx = useMapContext(partName);\n const { items, selectedIds = [], layerIds, coordinates, minPositions = 1, onItemClick, onItemHover } = options;\n const { register, setHandlers, map } = ctx;\n const selected = new Set(selectedIds);\n const selectedKey = selectedIds.join('\\u0000');\n\n // Items with missing or non-finite coordinates would make MapLibre throw; they are left out.\n const valid = new Set(items.filter((item) => hasValidPositions(coordinates(item), minPositions)));\n const invalidIds = items.filter((item) => !valid.has(item)).map((item) => item.id).join(', ');\n React.useEffect(() => {\n if (invalidIds && process.env.NODE_ENV !== 'production') {\n console.warn(`${partName}: skipped items with invalid coordinates: ${invalidIds}`);\n }\n }, [partName, invalidIds]);\n\n let bounds: Bounds | null = null;\n let selectedBounds: Bounds | null = null;\n for (const item of valid) {\n bounds = extend(bounds, coordinates(item));\n if (selected.has(item.id)) selectedBounds = extend(selectedBounds, coordinates(item));\n }\n const boundsKey = `${bounds}|${selectedBounds}|${layerIds}`;\n\n React.useEffect(() => {\n register(sourceId, { layerIds, bounds, selectedBounds });\n }, [register, sourceId, boundsKey]);\n React.useEffect(() => () => register(sourceId, null), [register, sourceId]);\n\n React.useEffect(() => {\n const byId = (id: string) => items.find((item) => item.id === id);\n setHandlers(sourceId, {\n onClick: (id, event) => {\n const item = byId(id);\n if (item) onItemClick?.(item, event);\n },\n onHover: (id, event) => onItemHover?.(id == null ? null : (byId(id) ?? null), event),\n });\n });\n React.useEffect(() => () => setHandlers(sourceId, null), [setHandlers, sourceId]);\n\n // Only items whose selection changed get a feature-state update; a re-added source (style switch)\n // starts from nothing, so everything selected is set again.\n const applied = React.useRef(new Set<string>());\n React.useEffect(() => {\n const instance = map?.getMap();\n if (!instance) return;\n const drawn = new Set([...valid].map((item) => item.id));\n const target = new Set((selectedKey ? selectedKey.split('\\u0000') : []).filter((id) => drawn.has(id)));\n const sync = () => {\n if (!instance.getSource(sourceId)) return;\n const prev = applied.current;\n for (const id of prev) if (!target.has(id)) instance.setFeatureState({ source: sourceId, id }, { selected: false });\n for (const id of target) if (!prev.has(id)) instance.setFeatureState({ source: sourceId, id }, { selected: true });\n applied.current = target;\n };\n sync();\n const onData = (e: { sourceId?: string; sourceDataType?: string }) => {\n if (e.sourceId !== sourceId || e.sourceDataType !== 'metadata') return;\n applied.current = new Set();\n sync();\n };\n instance.on('sourcedata', onData);\n return () => {\n instance.off('sourcedata', onData);\n };\n }, [map, sourceId, valid, selectedKey]);\n\n return { colors: ctx.colors, hasSelection: selectedIds.length > 0, valid };\n}\n\n/** A source id that is safe in MapLibre layer ids. */\nfunction usePartId(prefix: string) {\n return `oui-${prefix}-${React.useId().replace(/[^\\w-]/g, '')}`;\n}\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport interface MapRootProps\n extends Omit<\n MapProps,\n 'mapStyle' | 'initialViewState' | 'interactiveLayerIds' | 'cursor' | 'locale' | 'style' | 'children' | 'id' | 'attributionControl' | 'workerUrl' | 'mapLib'\n > {\n /** Ref to the map instance (`flyTo`, `getMap()`, …), set once the map has loaded MapLibre. */\n ref?: React.Ref<MapRef>;\n /** Base maps to choose from. The first is shown unless `baseLayer` or `defaultBaseLayer` says otherwise. */\n baseLayers: MapBaseLayer[];\n /** Id of the shown base map (controlled). */\n baseLayer?: string;\n /** Id of the initially shown base map when uncontrolled. */\n defaultBaseLayer?: string;\n /** Called with the base map id that `Map.BaseLayerSwitch` picked. */\n onBaseLayerChange?: (id: string) => void;\n /** Starting camera, used until `fit` moves it. */\n initialView?: MapView;\n /**\n * Zooms to the data (`data`) or to the selection, falling back to the data (`selected`). Data changes\n * refit until the user pans or zooms the map; selection changes always refit with `selected`.\n */\n fit?: MapFit;\n /** Translations of the built-in texts; also passed to MapLibre's control strings. */\n labels?: Partial<MapLabels>;\n /** Corner of the zoom buttons, or `false` to hide them. */\n controlsPosition?: ControlPosition | false;\n /**\n * Adds a button, next to the zoom buttons, that expands the map over the whole window (not browser\n * fullscreen) above the page, at the dialog z-index. Escape or the button returns it.\n */\n expandable?: boolean;\n /** Classes for the map container. Set its height in CSS (`--oui-map-height`, default 24rem). */\n className?: string;\n /** Inline styles for the map container. */\n style?: React.CSSProperties;\n /** Data parts (`Map.Routes`, `Map.Areas`, …), markers, popups and overlays. */\n children?: React.ReactNode;\n}\n\n/**\n * A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks\n * and hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,\n * `Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.\n * Needs `@optimum-intelligence/opti-ui/map.css` imported. MapLibre's worker is bundled and runs from a blob URL, so a\n * strict Content-Security-Policy needs `worker-src blob:`.\n *\n * @example\n * <Map.Root\n * baseLayers={[{ id: 'streets', label: 'Streets', style: 'https://tiles.openfreemap.org/styles/bright' }]}\n * initialView={{ longitude: 19.04, latitude: 47.5, zoom: 10 }}\n * >\n * <Map.Routes\n * items={[{ id: 'trip-1', coordinates: [[19.0, 47.48], [19.08, 47.52]] }]}\n * selectedIds={selected}\n * onItemClick={(trip) => setSelected([trip.id])}\n * />\n * <Map.Marker kind=\"depot\" position={[19.0, 47.48]} />\n * </Map.Root>\n */\nfunction MapRoot({\n ref,\n baseLayers,\n baseLayer,\n defaultBaseLayer,\n onBaseLayerChange,\n initialView,\n fit = 'data',\n labels,\n controlsPosition = 'top-right',\n expandable = false,\n className,\n style,\n children,\n onClick,\n onMouseMove,\n onMouseOut,\n ...props\n}: MapRootProps) {\n const [element, setElement] = React.useState<HTMLDivElement | null>(null);\n const [map, setMap] = React.useState<MapRef | null>(null);\n const [parts, setParts] = React.useState<Record<string, DataPart>>({});\n const [internalLayer, setInternalLayer] = React.useState(defaultBaseLayer ?? baseLayers[0]?.id ?? '');\n const [cursor, setCursor] = React.useState('');\n const [expanded, setExpanded] = React.useState(false);\n const handlers = React.useRef<Record<string, PartHandlers>>({});\n const hovered = React.useRef<{ source: string; id: string | number } | null>(null);\n const colors = useResolvedColors(element);\n const text = { ...defaultLabels, ...labels };\n\n const currentId = baseLayer ?? internalLayer;\n const current = baseLayers.find((l) => l.id === currentId) ?? baseLayers[0];\n const mapStyle = colors.dark && current?.darkStyle ? current.darkStyle : current?.style;\n\n const setBaseLayer = (id: string) => {\n setInternalLayer(id);\n onBaseLayerChange?.(id);\n };\n const register = (partId: string, part: DataPart | null) => {\n setParts((prev) => {\n const next = { ...prev };\n if (part) next[partId] = part;\n else delete next[partId];\n return next;\n });\n };\n const setHandlers = (partId: string, value: PartHandlers | null) => {\n if (value) handlers.current[partId] = value;\n else delete handlers.current[partId];\n };\n\n const entries = Object.entries(parts);\n const interactiveLayerIds = entries.flatMap(([, part]) => part.layerIds);\n const ownerOf = (layerId: string) => entries.find(([, part]) => part.layerIds.includes(layerId))?.[0];\n const empty = entries.length > 0 && entries.every(([, part]) => !part.bounds);\n\n // Bounds are [w, s, e, n]; as two corners they extend like coordinates.\n const corners = (b: Bounds | null) => b && [b.slice(0, 2), b.slice(2)];\n const boundsKey = (b: Bounds | null) => b?.map((n) => n.toFixed(5)).join(',') ?? '';\n const dataKey = fit === 'none' ? '' : boundsKey(extend(null, entries.map(([, part]) => corners(part.bounds))));\n const selectionKey = fit === 'selected' ? boundsKey(extend(null, entries.map(([, part]) => corners(part.selectedBounds)))) : '';\n\n // Once the user pans or zooms (events with an `originalEvent`), data changes stop moving the camera;\n // a selection change still fits with `fit=\"selected\"`.\n const userMoved = React.useRef(false);\n React.useEffect(() => {\n const instance = map?.getMap();\n if (!instance) return;\n const onMoveStart = (event: { originalEvent?: unknown }) => {\n if (event.originalEvent) userMoved.current = true;\n };\n instance.on('movestart', onMoveStart);\n return () => {\n instance.off('movestart', onMoveStart);\n };\n }, [map]);\n\n const fitted = React.useRef({ data: '', selection: '' });\n React.useEffect(() => {\n if (!map) return;\n const prev = fitted.current;\n fitted.current = { data: dataKey, selection: selectionKey };\n const selectionChanged = selectionKey !== prev.selection;\n const dataChanged = dataKey !== prev.data && !userMoved.current;\n const key = selectionKey || dataKey;\n if (!key || !(selectionChanged || dataChanged)) return;\n const [w, s, e, n] = key.split(',').map(Number);\n map.fitBounds([[w, s], [e, n]], { padding: 48, maxZoom: 15, duration: 400 });\n }, [map, dataKey, selectionKey]);\n\n const setHover = (next: { source: string; id: string | number } | null, event: MapLayerMouseEvent) => {\n const prev = hovered.current;\n const key = (h: typeof next) => (h ? `${h.source}|${h.id}` : '');\n if (key(prev) === key(next)) return;\n const instance = event.target;\n if (prev) {\n if (instance.getSource(prev.source)) instance.setFeatureState(prev, { hover: false });\n handlers.current[prev.source]?.onHover?.(null, event);\n }\n if (next) {\n instance.setFeatureState(next, { hover: true });\n handlers.current[next.source]?.onHover?.(String(next.id), event);\n }\n hovered.current = next;\n setCursor(next ? 'pointer' : '');\n };\n\n React.useEffect(() => {\n if (!expanded) return;\n const onKeyDown = (event: KeyboardEvent) => {\n // A popup inside the map that handles Escape (an open Select) marks the event as handled.\n if (event.key === 'Escape' && !event.defaultPrevented) setExpanded(false);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [expanded]);\n\n const initialViewState = initialView && 'bounds' in initialView\n ? { bounds: initialView.bounds as LngLatBoundsLike, fitBoundsOptions: { padding: 48 } }\n : initialView;\n\n return (\n <div ref={setElement} className={cx('oui-map', className)} style={style} data-expanded={expanded || undefined}>\n {element && (\n <MapGL\n {...props}\n mapLib={loadMapLib()}\n ref={(instance: MapRef | null) => {\n setMap(instance);\n if (typeof ref === 'function') ref(instance);\n else if (ref) ref.current = instance;\n }}\n mapStyle={mapStyle}\n initialViewState={initialViewState}\n interactiveLayerIds={interactiveLayerIds}\n cursor={cursor}\n attributionControl={false}\n locale={{ 'NavigationControl.ZoomIn': text.zoomIn, 'NavigationControl.ZoomOut': text.zoomOut }}\n onClick={(event) => {\n const feature = event.features?.[0];\n const owner = feature && ownerOf(feature.layer.id);\n if (feature && owner && feature.id != null) handlers.current[owner]?.onClick?.(String(feature.id), event);\n onClick?.(event);\n }}\n onMouseMove={(event) => {\n const feature = event.features?.[0];\n const owner = feature && ownerOf(feature.layer.id);\n setHover(feature && owner && feature.id != null ? { source: owner, id: feature.id } : null, event);\n onMouseMove?.(event);\n }}\n onMouseOut={(event) => {\n setHover(null, event);\n onMouseOut?.(event);\n }}\n >\n <MapContext\n value={{ map, colors, labels: text, baseLayers, baseLayer: current?.id ?? '', setBaseLayer, register, setHandlers }}\n >\n {controlsPosition && <NavigationControl position={controlsPosition} showCompass={false} />}\n {expandable && (\n <ExpandControl\n position={controlsPosition || 'top-right'}\n expanded={expanded}\n label={expanded ? text.collapse : text.expand}\n onToggle={() => setExpanded((value) => !value)}\n />\n )}\n <AttributionControl key={current?.id} compact customAttribution={current?.attribution} />\n {children}\n {empty && <div className=\"oui-map__empty\">{text.noData}</div>}\n </MapContext>\n </MapGL>\n )}\n </div>\n );\n}\n\n/** The expand button as a MapLibre control, so it stacks with the zoom buttons in the same corner. */\nfunction ExpandControl({\n position,\n expanded,\n label,\n onToggle,\n}: {\n position: ControlPosition;\n expanded: boolean;\n label: string;\n onToggle: () => void;\n}) {\n const [host] = React.useState(() => {\n const element = document.createElement('div');\n element.className = 'maplibregl-ctrl maplibregl-ctrl-group';\n return element;\n });\n useControl(() => ({ onAdd: () => host, onRemove: () => host.remove() }), { position });\n return createPortal(\n <button type=\"button\" className=\"oui-map__expand\" aria-label={label} title={label} aria-pressed={expanded} onClick={onToggle}>\n <span className=\"maplibregl-ctrl-icon\" aria-hidden=\"true\" />\n </button>,\n host,\n );\n}\n\n// ─── Data parts ──────────────────────────────────────────────────────────────\n\nexport interface MapRouteItem {\n /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */\n id: string;\n /** Line vertices as `[longitude, latitude]`. */\n coordinates: MapPosition[];\n /** Any CSS colour, `var(--oui-…)` included. Wins over `colorIndex`. */\n color?: string;\n /**\n * Series index for `seriesColor()`. Defaults to the item's index in `items`, so pass it (or `color`)\n * when you filter `items`; otherwise colours shift and stop matching the legend.\n */\n colorIndex?: number;\n /** Draws a dashed line, e.g. for a planned or return leg. */\n dashed?: boolean;\n}\n\nexport interface MapRoutesProps {\n /** Routes to draw. All of them go into one GeoJSON source, so thousands are fine. */\n items: MapRouteItem[];\n /** Ids of selected routes. While it is not empty, other routes fade to `--oui-map-dim-opacity`. */\n selectedIds?: string[];\n /** Called with the clicked route. */\n onItemClick?: (item: MapRouteItem, event: MapLayerMouseEvent) => void;\n /** Called with the route under the pointer, and with `null` when the pointer leaves it. */\n onItemHover?: (item: MapRouteItem | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Lines such as trips or tracks, drawn as one source with a casing, a solid and a dashed layer. Selected\n * routes get a halo in the surface colour; hover and selection use feature state, so they never rebuild\n * the data. Colours come from `color` or the chart palette.\n *\n * @example\n * <Map.Routes\n * items={trips.map((t) => ({ id: t.id, coordinates: t.path, dashed: t.planned }))}\n * selectedIds={selected}\n * onItemClick={(trip) => setSelected([trip.id])}\n * />\n */\nfunction MapRoutes({ items, selectedIds, onItemClick, onItemHover }: MapRoutesProps) {\n const sourceId = usePartId('routes');\n const ids = { casing: `${sourceId}-casing`, solid: `${sourceId}-solid`, dashed: `${sourceId}-dashed` };\n const { colors, hasSelection, valid } = useDataPart('Map.Routes', sourceId, {\n items,\n selectedIds,\n layerIds: [ids.solid, ids.dashed],\n coordinates: (item) => item.coordinates,\n minPositions: 2,\n onItemClick,\n onItemHover,\n });\n const data = {\n type: 'FeatureCollection' as const,\n // Colour indexes count every item, so a skipped item does not shift the others' colours.\n features: items.flatMap((item, index) =>\n valid.has(item)\n ? [{\n type: 'Feature' as const,\n properties: { id: item.id, dashed: !!item.dashed, color: colors.color(item.color ?? seriesColor(item.colorIndex ?? index)) },\n geometry: { type: 'LineString' as const, coordinates: item.coordinates },\n }]\n : [],\n ),\n };\n const weight = colors.number('--oui-map-route-weight', 4);\n const dim = colors.number('--oui-map-dim-opacity', 0.35);\n const width: ExpressionSpecification = ['case', HOVER, weight + 1.5, weight];\n const opacity = dimmed(hasSelection, dim);\n const layout = { 'line-join': 'round', 'line-cap': 'round' } as const;\n const layers: LayerProps[] = [\n {\n id: ids.casing,\n type: 'line',\n layout,\n paint: { 'line-color': colors.color('var(--oui-map-casing-color)'), 'line-width': weight + 4, 'line-opacity': ['case', SELECTED, 1, 0] },\n },\n {\n id: ids.solid,\n type: 'line',\n filter: ['!=', ['get', 'dashed'], true],\n layout,\n paint: { 'line-color': ['get', 'color'], 'line-width': width, 'line-opacity': opacity },\n },\n {\n id: ids.dashed,\n type: 'line',\n filter: ['==', ['get', 'dashed'], true],\n layout: { 'line-join': 'round', 'line-cap': 'butt' },\n paint: { 'line-color': ['get', 'color'], 'line-width': width, 'line-opacity': opacity, 'line-dasharray': [2, 1.5] },\n },\n ];\n return (\n <Source id={sourceId} type=\"geojson\" data={data} promoteId=\"id\">\n {layers.map((layer) => <Layer key={layer.id} {...layer} />)}\n </Source>\n );\n}\n\nexport interface MapAreaItem {\n /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */\n id: string;\n /** Outline of the area, in `[longitude, latitude]` coordinates. */\n geometry: MapPolygon | MapMultiPolygon;\n /** Fill and outline colour from the status tokens (`-subtle` fill, `-border` outline). */\n tone?: MapTone;\n}\n\nexport interface MapAreasProps {\n /** Areas to draw, all in one GeoJSON source. */\n items: MapAreaItem[];\n /** Ids of selected areas. While it is not empty, other areas fade to `--oui-map-dim-opacity`. */\n selectedIds?: string[];\n /** Called with the clicked area. */\n onItemClick?: (item: MapAreaItem, event: MapLayerMouseEvent) => void;\n /** Called with the area under the pointer, and with `null` when the pointer leaves it. */\n onItemHover?: (item: MapAreaItem | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Polygons such as fields, zones or service areas, as one fill and one outline layer. Selected and\n * hovered areas get a heavier outline.\n *\n * @example\n * <Map.Areas items={fields.map((f) => ({ id: f.id, geometry: f.shape, tone: f.late ? 'warning' : 'success' }))} />\n */\nfunction MapAreas({ items, selectedIds, onItemClick, onItemHover }: MapAreasProps) {\n const sourceId = usePartId('areas');\n const ids = { fill: `${sourceId}-fill`, line: `${sourceId}-line` };\n const { colors, hasSelection, valid } = useDataPart('Map.Areas', sourceId, {\n items,\n selectedIds,\n layerIds: [ids.fill],\n coordinates: (item) => item.geometry.coordinates,\n onItemClick,\n onItemHover,\n });\n const data = {\n type: 'FeatureCollection' as const,\n features: [...valid].map((item) => {\n const tone = toneColors[item.tone ?? 'neutral'];\n return {\n type: 'Feature' as const,\n properties: { id: item.id, fill: colors.color(tone.fill), line: colors.color(tone.line) },\n geometry: item.geometry,\n };\n }),\n };\n const opacity = dimmed(hasSelection, colors.number('--oui-map-dim-opacity', 0.35));\n return (\n <Source id={sourceId} type=\"geojson\" data={data} promoteId=\"id\">\n <Layer id={ids.fill} type=\"fill\" paint={{ 'fill-color': ['get', 'fill'], 'fill-opacity': opacity }} />\n <Layer\n id={ids.line}\n type=\"line\"\n layout={{ 'line-join': 'round' }}\n paint={{ 'line-color': ['get', 'line'], 'line-width': ['case', ACTIVE, 2.5, 1.25], 'line-opacity': opacity }}\n />\n </Source>\n );\n}\n\nexport interface MapPointItem {\n /** Unique id; reported back by `onItemClick` and used in `selectedIds`. */\n id: string;\n /** `[longitude, latitude]`. */\n coordinates: MapPosition;\n /** Any CSS colour, `var(--oui-…)` included. Wins over `tone` and `colorIndex`. */\n color?: string;\n /** Status colour. Wins over `colorIndex`. */\n tone?: MapTone;\n /**\n * Series index for `seriesColor()`. Defaults to the item's index in `items`, so pass it (or `color`)\n * when you filter `items`; otherwise colours shift and stop matching the legend.\n */\n colorIndex?: number;\n}\n\nexport interface MapPointsProps {\n /** Points to draw, all in one GeoJSON source and one circle layer. */\n items: MapPointItem[];\n /** Ids of selected points. While it is not empty, other points fade to `--oui-map-dim-opacity`. */\n selectedIds?: string[];\n /** Called with the clicked point. */\n onItemClick?: (item: MapPointItem, event: MapLayerMouseEvent) => void;\n /** Called with the point under the pointer, and with `null` when the pointer leaves it. */\n onItemHover?: (item: MapPointItem | null, event: MapLayerMouseEvent) => void;\n}\n\n/**\n * Many simple points (sensors, stops, events) as one circle layer. For a few dozen styled pins with HTML\n * content, use `Map.Marker` instead.\n *\n * @example\n * <Map.Points items={sensors.map((s) => ({ id: s.id, coordinates: s.position, tone: s.ok ? 'success' : 'danger' }))} />\n */\nfunction MapPoints({ items, selectedIds, onItemClick, onItemHover }: MapPointsProps) {\n const sourceId = usePartId('points');\n const circleId = `${sourceId}-circle`;\n const { colors, hasSelection, valid } = useDataPart('Map.Points', sourceId, {\n items,\n selectedIds,\n layerIds: [circleId],\n coordinates: (item) => item.coordinates,\n onItemClick,\n onItemHover,\n });\n const data = {\n type: 'FeatureCollection' as const,\n features: items.flatMap((item, index) =>\n valid.has(item)\n ? [{\n type: 'Feature' as const,\n properties: {\n id: item.id,\n color: colors.color(item.color ?? (item.tone ? toneColors[item.tone].solid : seriesColor(item.colorIndex ?? index))),\n },\n geometry: { type: 'Point' as const, coordinates: item.coordinates },\n }]\n : [],\n ),\n };\n const opacity = dimmed(hasSelection, colors.number('--oui-map-dim-opacity', 0.35));\n return (\n <Source id={sourceId} type=\"geojson\" data={data} promoteId=\"id\">\n <Layer\n id={circleId}\n type=\"circle\"\n paint={{\n 'circle-color': ['get', 'color'],\n 'circle-radius': ['case', ACTIVE, 7, 5],\n 'circle-stroke-color': colors.color('var(--oui-map-casing-color)'),\n 'circle-stroke-width': 1.5,\n 'circle-opacity': opacity,\n 'circle-stroke-opacity': opacity,\n }}\n />\n </Source>\n );\n}\n\n// ─── HTML parts ──────────────────────────────────────────────────────────────\n\nexport interface MapMarkerProps {\n /** `[longitude, latitude]` of the pin. */\n position: MapPosition;\n /** Pin shape: a numbered `stop`, a `depot`, a `vehicle` or a small `point`. */\n kind?: MapMarkerKind;\n /** Number shown in a `stop` pin. */\n sequence?: number;\n /** Any CSS colour for the pin. Wins over `tone`. */\n color?: string;\n /** Status colour for the pin. */\n tone?: MapTone;\n /** Accessible name and tooltip text. Depots default to the `depot` label. */\n label?: string;\n /** Marks the pin as selected (larger, with a ring). */\n selected?: boolean;\n /** Fades the pin to `--oui-map-dim-opacity`, e.g. for stops of trips that are not selected. */\n dimmed?: boolean;\n /** Called when the pin is clicked. */\n onClick?: () => void;\n /** Custom pin content, replacing the built-in shape. */\n children?: React.ReactNode;\n /** Classes for the pin element. */\n className?: string;\n}\n\n/**\n * An HTML pin at one position: numbered stops, depots, vehicles. Each marker is a DOM element, so use it\n * for dozens of pins, not thousands (use `Map.Points` for those).\n *\n * @example\n * <Map.Marker kind=\"stop\" sequence={3} position={[19.05, 47.5]} color={seriesColor(0)} />\n */\nfunction MapMarker({\n position,\n kind = 'stop',\n sequence,\n color,\n tone,\n label,\n selected,\n dimmed,\n onClick,\n children,\n className,\n}: MapMarkerProps) {\n const { labels } = useMapContext('Map.Marker');\n const name = label ?? (kind === 'depot' ? labels.depot : undefined);\n const pinColor = color ?? (tone ? toneColors[tone].solid : undefined);\n return (\n <Marker\n longitude={position[0]}\n latitude={position[1]}\n anchor=\"center\"\n // Markers never pass clicks to the map, so a depot on a route does not select the route.\n onClick={(event) => {\n event.originalEvent.stopPropagation();\n onClick?.();\n }}\n >\n <div\n className={cx('oui-map__marker', className)}\n data-kind={kind}\n data-selected={selected || undefined}\n data-dimmed={dimmed || undefined}\n data-interactive={onClick ? '' : undefined}\n role={name ? 'img' : undefined}\n aria-label={name}\n title={name}\n style={pinColor ? ({ '--_pin-color': pinColor } as React.CSSProperties) : undefined}\n >\n {children ?? (kind === 'stop' && sequence != null ? sequence : kind === 'depot' ? <DepotGlyph /> : null)}\n </div>\n </Marker>\n );\n}\n\nfunction DepotGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.2} aria-hidden>\n <path d=\"M3 10.5 12 4l9 6.5V20H3z\" strokeLinejoin=\"round\" />\n <path d=\"M9 20v-6h6v6\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport interface MapPopupProps extends Omit<PopupProps, 'longitude' | 'latitude'> {\n /** `[longitude, latitude]` the popup points at. */\n position: MapPosition;\n}\n\n/**\n * A popup anchored to a position, styled as a library card. Render it while something is selected and\n * close it from `onClose`.\n *\n * @example\n * {picked && (\n * <Map.Popup position={picked.position} onClose={() => setPicked(null)}>\n * <strong>{picked.name}</strong>\n * </Map.Popup>\n * )}\n */\nfunction MapPopup({ position, className, offset = 14, maxWidth = '20rem', ...props }: MapPopupProps) {\n return (\n <Popup\n longitude={position[0]}\n latitude={position[1]}\n offset={offset}\n maxWidth={maxWidth}\n className={cx('oui-map__popup', className)}\n {...props}\n />\n );\n}\n\n/**\n * Hover content: a popup without a close button that stays open on map clicks. Show it from\n * `onItemHover` and hide it when the item is `null`.\n *\n * @example\n * {hovered && <Map.Tooltip position={hovered.position}>{hovered.name}</Map.Tooltip>}\n */\nfunction MapTooltip({ position, className, offset = 10, ...props }: MapPopupProps) {\n return (\n <Popup\n longitude={position[0]}\n latitude={position[1]}\n offset={offset}\n closeButton={false}\n closeOnClick={false}\n className={cx('oui-map__popup oui-map__tooltip', className)}\n {...props}\n />\n );\n}\n\nexport interface MapOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Ref to the overlay element. */\n ref?: React.Ref<HTMLDivElement>;\n /** Corner the overlay sits in. Overlays in the same corner as the zoom buttons cover them. */\n position?: MapOverlayPosition;\n}\n\n/** Content floating over a corner of the map: stat cards, selects, a legend or `Map.BaseLayerSwitch`. */\nfunction MapOverlay({ position = 'top-left', className, ref, ...props }: MapOverlayProps) {\n return <div ref={ref} className={cx('oui-map__overlay', className)} data-position={position} {...props} />;\n}\n\nexport interface MapLegendItem {\n /** Id matching the data items it stands for. */\n id: string;\n /** Text of the entry. */\n label: React.ReactNode;\n /** Swatch colour: any CSS colour, e.g. `seriesColor(i)`. */\n color: string;\n /** Whether the entry's data is shown. Defaults to `true`. */\n visible?: boolean;\n /** Number shown at the end of the entry. */\n count?: React.ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Ref to the legend element. */\n ref?: React.Ref<HTMLDivElement>;\n /** Entries in order. */\n items: MapLegendItem[];\n /** Whether clicking an entry selects it: `single` keeps one, `multi` toggles each. */\n selectionMode?: MapLegendSelectionMode;\n /** Ids of the selected entries (controlled). */\n selectedIds?: string[];\n /** Called with the new selected ids. */\n onSelectedIdsChange?: (ids: string[]) => void;\n /** Called with the ids to show or hide. Adds an eye button to every entry. */\n onVisibilityChange?: (ids: string[], visible: boolean) => void;\n /** Adds a show all / hide all button when `onVisibilityChange` is set. */\n showAllToggle?: boolean;\n}\n\n/**\n * The key to a map's colours, with optional selection and show/hide per entry. Plain DOM, so it also\n * works outside the map; inside `Map.Root` it takes the root's labels. Put it in a `Map.Overlay`.\n *\n * @example\n * <Map.Legend\n * items={trips.map((t, i) => ({ id: t.id, label: t.name, color: seriesColor(i), visible: !hidden.includes(t.id) }))}\n * selectionMode=\"multi\"\n * selectedIds={selected}\n * onSelectedIdsChange={setSelected}\n * onVisibilityChange={(ids, visible) => setHidden((h) => (visible ? h.filter((id) => !ids.includes(id)) : [...h, ...ids]))}\n * showAllToggle\n * />\n */\nfunction MapLegend({\n items,\n selectionMode = 'none',\n selectedIds = [],\n onSelectedIdsChange,\n onVisibilityChange,\n showAllToggle = false,\n className,\n ref,\n ...props\n}: MapLegendProps) {\n const labels = React.use(MapContext)?.labels ?? defaultLabels;\n const allVisible = items.every((item) => item.visible !== false);\n const toggle = (id: string) => {\n const on = selectedIds.includes(id);\n if (selectionMode === 'single') onSelectedIdsChange?.(on ? [] : [id]);\n else onSelectedIdsChange?.(on ? selectedIds.filter((s) => s !== id) : [...selectedIds, id]);\n };\n return (\n <div ref={ref} className={cx('oui-map-legend', className)} data-selection-mode={selectionMode} {...props}>\n {onVisibilityChange && showAllToggle && (\n <button\n type=\"button\"\n className=\"oui-map-legend__toggle-all\"\n onClick={() => onVisibilityChange(items.map((item) => item.id), !allVisible)}\n >\n {allVisible ? labels.hideAll : labels.showAll}\n </button>\n )}\n <ul className=\"oui-map-legend__list\">\n {items.map((item) => {\n const selected = selectedIds.includes(item.id);\n const visible = item.visible !== false;\n const content = (\n <>\n <span className=\"oui-map-legend__swatch\" style={{ '--_swatch': item.color } as React.CSSProperties} />\n <span className=\"oui-map-legend__label\">{item.label}</span>\n {item.count != null && <span className=\"oui-map-legend__count\">{item.count}</span>}\n </>\n );\n return (\n <li\n key={item.id}\n className=\"oui-map-legend__item\"\n data-selected={selected || undefined}\n data-hidden={visible ? undefined : ''}\n >\n {selectionMode === 'none' ? (\n <span className=\"oui-map-legend__entry\">{content}</span>\n ) : (\n <button type=\"button\" className=\"oui-map-legend__entry\" aria-pressed={selected} onClick={() => toggle(item.id)}>\n {content}\n </button>\n )}\n {onVisibilityChange && (\n <button\n type=\"button\"\n className=\"oui-map-legend__visibility\"\n aria-label={`${visible ? labels.hide : labels.show} ${typeof item.label === 'string' ? item.label : item.id}`}\n onClick={() => onVisibilityChange([item.id], !visible)}\n >\n {visible ? <EyeIcon /> : <EyeOffIcon />}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nexport interface MapBaseLayerSwitchProps\n extends Omit<SegmentedControlProps, 'options' | 'value' | 'defaultValue' | 'onValueChange'> {}\n\n/** Segmented switch between the root's `baseLayers` (e.g. streets and satellite). Put it in a `Map.Overlay`. */\nfunction MapBaseLayerSwitch({ size = 'sm', ...props }: MapBaseLayerSwitchProps) {\n const { baseLayers, baseLayer, setBaseLayer } = useMapContext('Map.BaseLayerSwitch');\n return (\n <SegmentedControl\n size={size}\n options={baseLayers.map((layer) => ({ value: layer.id, label: layer.label }))}\n value={baseLayer}\n onValueChange={setBaseLayer}\n {...props}\n />\n );\n}\n\n/**\n * Map components on MapLibre, from `@optimum-intelligence/opti-ui/map`. `Map.Root` holds the map; inside\n * it, `Map.Areas`, `Map.Routes` and `Map.Points` draw arrays of items as single GeoJSON layers,\n * `Map.Marker` adds HTML pins, `Map.Popup` and `Map.Tooltip` show content at a position, and\n * `Map.Overlay` floats `Map.Legend`, `Map.BaseLayerSwitch` or cards over a corner.\n *\n * @example\n * <Map.Root baseLayers={baseLayers} fit=\"selected\">\n * <Map.Areas items={zones} />\n * <Map.Routes items={trips} selectedIds={selected} onItemClick={(t) => setSelected([t.id])} />\n * <Map.Overlay position=\"top-left\">\n * <Map.Legend items={legend} selectionMode=\"single\" selectedIds={selected} onSelectedIdsChange={setSelected} />\n * </Map.Overlay>\n * <Map.Overlay position=\"bottom-left\">\n * <Map.BaseLayerSwitch />\n * </Map.Overlay>\n * </Map.Root>\n */\nexport const Map = {\n Root: MapRoot,\n Routes: MapRoutes,\n Areas: MapAreas,\n Points: MapPoints,\n Marker: MapMarker,\n Popup: MapPopup,\n Tooltip: MapTooltip,\n Overlay: MapOverlay,\n Legend: MapLegend,\n BaseLayerSwitch: MapBaseLayerSwitch,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import source from 'maplibre-gl/dist/maplibre-gl-worker.mjs?raw';
|
|
2
|
+
/**
|
|
3
|
+
* MapLibre's web worker source, inlined as a string when the library is built so apps need no bundler
|
|
4
|
+
* setup for it. `Map.tsx` imports this module lazily, so the ~520 KB string loads only when a map mounts.
|
|
5
|
+
*/
|
|
6
|
+
export default source;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import maplibre_gl_worker_default from "../../vendor/maplibre-gl/dist/maplibre-gl-worker.mjs_raw.js";
|
|
3
|
+
//#region src/components/map/worker.ts
|
|
4
|
+
/**
|
|
5
|
+
* MapLibre's web worker source, inlined as a string when the library is built so apps need no bundler
|
|
6
|
+
* setup for it. `Map.tsx` imports this module lazily, so the ~520 KB string loads only when a map mounts.
|
|
7
|
+
*/
|
|
8
|
+
var worker_default = maplibre_gl_worker_default;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { worker_default as default };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","names":["source","source"],"sources":["../../../src/components/map/worker.ts"],"sourcesContent":["import source from 'maplibre-gl/dist/maplibre-gl-worker.mjs?raw';\n\n/**\n * MapLibre's web worker source, inlined as a string when the library is built so apps need no bundler\n * setup for it. `Map.tsx` imports this module lazily, so the ~520 KB string loads only when a map mounts.\n */\nexport default source;\n"],"mappings":";;;;;;;AAMA,IAAA,iBAAeA"}
|
package/dist/components.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@optimum-intelligence/opti-ui",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Optimum's customizable React component library, built on Base UI.",
|
|
5
5
|
"categories": [
|
|
6
6
|
"Theme",
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"name": "Combobox",
|
|
149
149
|
"kind": "compound",
|
|
150
150
|
"category": "Forms",
|
|
151
|
-
"description": "Searchable select. `<Combobox items={…} />` covers single and `multiple`\n(chips) selection;
|
|
151
|
+
"description": "Searchable select. `<Combobox items={…} />` covers single and `multiple`\n(chips) selection; `maxChips` keeps a multi-select on one line. Compose the\nparts for anything custom.",
|
|
152
152
|
"import": "import { Combobox } from '@optimum-intelligence/opti-ui';",
|
|
153
153
|
"propsType": "ComboboxProps",
|
|
154
154
|
"props": [
|
|
@@ -207,6 +207,12 @@
|
|
|
207
207
|
"required": false,
|
|
208
208
|
"description": "Hide the clear button."
|
|
209
209
|
},
|
|
210
|
+
{
|
|
211
|
+
"name": "maxChips",
|
|
212
|
+
"type": "number",
|
|
213
|
+
"required": false,
|
|
214
|
+
"description": "With `multiple`, show at most this many chips and a `+N` chip for the rest, keeping the field on\none line (long labels are truncated). Leave unset to wrap all chips onto new lines."
|
|
215
|
+
},
|
|
210
216
|
{
|
|
211
217
|
"name": "inputProps",
|
|
212
218
|
"type": "BaseCombobox.Input.Props",
|
|
@@ -217,6 +223,7 @@
|
|
|
217
223
|
"extends": [
|
|
218
224
|
"RootProps"
|
|
219
225
|
],
|
|
226
|
+
"example": "<Combobox label=\"Vehicles\" items={vehicles} multiple maxChips={1} placeholder=\"All vehicles\" />",
|
|
220
227
|
"parts": [
|
|
221
228
|
{
|
|
222
229
|
"name": "Combobox.Root",
|
|
@@ -5828,7 +5835,7 @@
|
|
|
5828
5835
|
"parts": [
|
|
5829
5836
|
{
|
|
5830
5837
|
"name": "Map.Root",
|
|
5831
|
-
"description": "A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks\nand hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,\n`Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.\nNeeds `@optimum-intelligence/opti-ui/map.css` imported
|
|
5838
|
+
"description": "A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks\nand hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,\n`Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.\nNeeds `@optimum-intelligence/opti-ui/map.css` imported. MapLibre's worker is bundled and runs from a blob URL, so a\nstrict Content-Security-Policy needs `worker-src blob:`.",
|
|
5832
5839
|
"propsType": "MapRootProps",
|
|
5833
5840
|
"props": [
|
|
5834
5841
|
{
|
package/dist/index.js
CHANGED
package/dist/llms-full.txt
CHANGED
|
@@ -186,12 +186,17 @@ Also accepts all props of: `BaseCheckboxGroup.Props`.
|
|
|
186
186
|
compound · Forms
|
|
187
187
|
|
|
188
188
|
Searchable select. `<Combobox items={…} />` covers single and `multiple`
|
|
189
|
-
(chips) selection;
|
|
189
|
+
(chips) selection; `maxChips` keeps a multi-select on one line. Compose the
|
|
190
|
+
parts for anything custom.
|
|
190
191
|
|
|
191
192
|
```tsx
|
|
192
193
|
import { Combobox } from '@optimum-intelligence/opti-ui';
|
|
193
194
|
```
|
|
194
195
|
|
|
196
|
+
```tsx
|
|
197
|
+
<Combobox label="Vehicles" items={vehicles} multiple maxChips={1} placeholder="All vehicles" />
|
|
198
|
+
```
|
|
199
|
+
|
|
195
200
|
| Prop | Type | Default | Description |
|
|
196
201
|
| --- | --- | --- | --- |
|
|
197
202
|
| `items` | `ComboboxOption[]` | | Options to choose from. |
|
|
@@ -202,6 +207,7 @@ import { Combobox } from '@optimum-intelligence/opti-ui';
|
|
|
202
207
|
| `emptyText?` | `React.ReactNode` | `'No results found.'` | Shown when the filter matches nothing. |
|
|
203
208
|
| `size?` | `'sm' \| 'md' \| 'lg'` | `'md'` | Control height. |
|
|
204
209
|
| `hideClear?` | `boolean` | | Hide the clear button. |
|
|
210
|
+
| `maxChips?` | `number` | | With `multiple`, show at most this many chips and a `+N` chip for the rest, keeping the field on one line (long labels are truncated). Leave unset to wrap all chips onto new lines. |
|
|
205
211
|
| `inputProps?` | `BaseCombobox.Input.Props` | | Props for the text input. |
|
|
206
212
|
|
|
207
213
|
Also accepts all props of: `RootProps`.
|
|
@@ -2858,7 +2864,8 @@ import { Map } from '@optimum-intelligence/opti-ui/map';
|
|
|
2858
2864
|
A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks
|
|
2859
2865
|
and hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,
|
|
2860
2866
|
`Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.
|
|
2861
|
-
Needs `@optimum-intelligence/opti-ui/map.css` imported
|
|
2867
|
+
Needs `@optimum-intelligence/opti-ui/map.css` imported. MapLibre's worker is bundled and runs from a blob URL, so a
|
|
2868
|
+
strict Content-Security-Policy needs `worker-src blob:`.
|
|
2862
2869
|
|
|
2863
2870
|
```tsx
|
|
2864
2871
|
<Map.Root
|
package/dist/llms.txt
CHANGED
|
@@ -47,7 +47,7 @@ so the components work in Next.js App Router.
|
|
|
47
47
|
- `Calendar` — Month grid for picking one day. Keyboard: arrows move by day / week, Home / End jump within the week, PageUp / PageDown change month (with Shift: year). The month and year in the title open a list to jump straight to another one. With `granularity="month"` or `"year"` it shows a month or year grid instead.
|
|
48
48
|
- `Checkbox` — Checkbox with optional `label` and `description`. Supports `indeterminate`.
|
|
49
49
|
- `CheckboxGroup` — Manages the checked values of several `Checkbox` children (`value` / `onValueChange`).
|
|
50
|
-
- `Combobox` — Searchable select. `<Combobox items={…} />` covers single and `multiple` (chips) selection;
|
|
50
|
+
- `Combobox` — Searchable select. `<Combobox items={…} />` covers single and `multiple` (chips) selection; `maxChips` keeps a multi-select on one line. Compose the parts for anything custom. (parts: Root, InputGroup, Input, Trigger, Clear, Value, Chips, Chip, Content, List, Item, Empty, Group, GroupLabel, Collection, useFilter)
|
|
51
51
|
- `DateConfigProvider` — Sets default locale, time zone, week start and display formats for every date picker and calendar inside it. Props on a component still win. Nested providers override only the settings they pass.
|
|
52
52
|
- `DatePicker` — Date field with a calendar popover. Day values are ISO dates (`"2026-03-09"`), the same format as `<input type="date">`. `granularity="month"` or `"year"` opens a month or year grid and stores the period's first day (`"2026-03-01"`); a time granularity behaves like `DateTimePicker`.
|
|
53
53
|
- `DateRangePicker` — Date range field with a calendar popover and optional presets. Values are `{ start, end }` ISO dates (`"2026-03-09"`), both inclusive. With `granularity="month"` or `"year"` it picks whole months or years, and each end is the first day of its period.
|