@optimum-intelligence/opti-ui 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +2 -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 +2 -2
- package/dist/index.js +1 -1
- package/dist/llms-full.txt +2 -1
- 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
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to `@optimum-intelligence/opti-ui`. Versions follow [semver](https://semver.org/); while
|
|
4
4
|
the version is `0.x`, minor releases may contain breaking changes, which are marked **Breaking**.
|
|
5
5
|
|
|
6
|
+
## 0.7.1 (2026-11-03)
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- `Map.Root` works in any app without bundler config: MapLibre's worker is now bundled into the library
|
|
11
|
+
and started from a `blob:` URL instead of a `?url` import that only Vite could resolve. A strict
|
|
12
|
+
Content-Security-Policy needs `worker-src blob:`.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- `maplibre-gl` is pinned to `6.16.0`, so the bundled worker always matches the installed MapLibre.
|
|
17
|
+
|
|
6
18
|
## 0.7.0 (2026-11-03)
|
|
7
19
|
|
|
8
20
|
### Added
|
package/README.md
CHANGED
|
@@ -207,7 +207,8 @@ components the same table.
|
|
|
207
207
|
Map components live in a separate entry, `@optimum-intelligence/opti-ui/map`, so apps without maps never
|
|
208
208
|
load MapLibre. `maplibre-gl` and `@vis.gl/react-maplibre` are installed with the package. Import the map
|
|
209
209
|
stylesheet once; it holds MapLibre's CSS in a cascade layer below the library's, so the oui map styles win.
|
|
210
|
-
`Map.Root`
|
|
210
|
+
`Map.Root` starts MapLibre's web worker itself from a bundled copy, so no bundler config is needed. The
|
|
211
|
+
worker runs from a `blob:` URL: with a strict Content-Security-Policy, allow `worker-src blob:`.
|
|
211
212
|
|
|
212
213
|
```tsx
|
|
213
214
|
import '@optimum-intelligence/opti-ui/map.css';
|
|
@@ -116,7 +116,8 @@ export interface MapRootProps extends Omit<MapProps, 'mapStyle' | 'initialViewSt
|
|
|
116
116
|
* A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks
|
|
117
117
|
* and hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,
|
|
118
118
|
* `Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.
|
|
119
|
-
* Needs `@optimum-intelligence/opti-ui/map.css` imported
|
|
119
|
+
* Needs `@optimum-intelligence/opti-ui/map.css` imported. MapLibre's worker is bundled and runs from a blob URL, so a
|
|
120
|
+
* strict Content-Security-Policy needs `worker-src blob:`.
|
|
120
121
|
*
|
|
121
122
|
* @example
|
|
122
123
|
* <Map.Root
|
|
@@ -11,14 +11,15 @@ import { createPortal } from "react-dom";
|
|
|
11
11
|
import { AttributionControl, Layer, Map, Marker, NavigationControl, Popup, Source, useControl } from "@vis.gl/react-maplibre";
|
|
12
12
|
//#region src/components/map/Map.tsx
|
|
13
13
|
/**
|
|
14
|
-
* Loads MapLibre and points it at its worker, once, on the first map mount. The
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* Loads MapLibre and points it at its worker, once, on the first map mount. The worker source is inlined
|
|
15
|
+
* in `./worker` at library build time and started from a blob URL, so apps need no bundler config (a
|
|
16
|
+
* strict Content-Security-Policy needs `worker-src blob:`). Both are dynamic imports so apps without a
|
|
17
|
+
* mounted map never load them.
|
|
17
18
|
*/
|
|
18
19
|
var mapLib;
|
|
19
20
|
function loadMapLib() {
|
|
20
|
-
mapLib ??= Promise.all([import("maplibre-gl"), import("
|
|
21
|
-
lib.setWorkerUrl(worker.default);
|
|
21
|
+
mapLib ??= Promise.all([import("maplibre-gl"), import("./worker.js")]).then(([lib, worker]) => {
|
|
22
|
+
lib.setWorkerUrl(URL.createObjectURL(new Blob([worker.default], { type: "text/javascript" })));
|
|
22
23
|
return lib;
|
|
23
24
|
});
|
|
24
25
|
return mapLib;
|
|
@@ -351,7 +352,8 @@ function usePartId(prefix) {
|
|
|
351
352
|
* A MapLibre map styled and themed with the library tokens. Holds the base layer state and routes clicks
|
|
352
353
|
* and hovers to the data parts inside it. `Map.Root` › data parts (`Map.Areas`, `Map.Routes`,
|
|
353
354
|
* `Map.Points`) and `Map.Marker`s, with `Map.Overlay`s for legends, switches and cards on top.
|
|
354
|
-
* Needs `@optimum-intelligence/opti-ui/map.css` imported
|
|
355
|
+
* Needs `@optimum-intelligence/opti-ui/map.css` imported. MapLibre's worker is bundled and runs from a blob URL, so a
|
|
356
|
+
* strict Content-Security-Policy needs `worker-src blob:`.
|
|
355
357
|
*
|
|
356
358
|
* @example
|
|
357
359
|
* <Map.Root
|
|
@@ -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":";;;;;;;;;;;;;;;;;;AA2BA,IAAIoB;AACJ,SAASE,aAAa;CACpBF,WAAWC,QAAQE,IAAI,CAAC,OAAO,gBAAgB,OAAO,cAAW,CAAC,CAAC,CAACC,MAAM,CAACC,KAAKC,YAAY;EAC1FD,IAAIE,aAAaC,IAAIC,gBAAgB,IAAIC,KAAK,CAACJ,OAAOK,OAAO,GAAG,EAAEC,MAAM,kBAAkB,CAAC,CAAC,CAAC;EAC7F,OAAOP;CACT,CAAC;CACD,OAAOL;AACT;AAoEA,IAAMgD,gBAA2B;CAC/BV,QAAQ;CACRC,SAAS;CACTC,SAAS;CACTC,SAAS;CACTC,MAAM;CACNC,MAAM;CACNC,OAAO;CACPC,QAAQ;CACRC,QAAQ;CACRC,UAAU;AACZ;AA6CA,IAAM8B,aAAajG,MAAMkG,cAAsC,IAAI;AAEnE,SAASC,cAAcL,MAAc;CACnC,MAAMM,MAAMpG,MAAMqG,IAAIJ,UAAU;CAChC,IAAI,CAACG,KAAK,MAAM,IAAIE,MAAM,GAAGR,KAAI,8BAA+B;CAChE,OAAOM;AACT;;;;;;;AAUA,SAAgBG,YAAYC,OAA0BhD,aAAsBiD,WAAW,KAAyB;CAC9G,OAAO;EACLC,SAAS;EACTC,SAAS,EAAEC,QAAQ;GAAE5E,MAAM;GAAUwE,OAAOK,MAAMC,QAAQN,KAAK,IAAIA,QAAQ,CAACA,KAAK;GAAGC;GAAUjD;EAAY,EAAE;EAC5GuD,QAAQ,CAAC;GAAE5D,IAAI;GAAUnB,MAAM;GAAUgF,QAAQ;EAAS,CAAC;CAC7D;AACF;;AAGA,SAASC,kBAAkBC,QAAiBC,KAAsB;CAChE,IAAIC,QAAQ;CACZ,MAAMC,SAASC,UAA4B;EACzC,IAAI,CAACT,MAAMC,QAAQQ,KAAK,KAAKA,MAAMC,WAAW,GAAG,OAAO;EACxD,IAAI,OAAOD,MAAM,OAAO,UAAU;GAChCF;GACA,OAAOE,MAAMC,UAAU,KAAKC,OAAOC,SAASH,MAAM,EAAE,KAAKE,OAAOC,SAASH,MAAM,EAAE;EACnF;EACA,OAAOA,MAAMI,MAAML,KAAK;CAC1B;CACA,OAAOA,MAAMH,MAAM,KAAKE,SAASD;AACnC;;AAGA,SAASQ,OAAO/C,QAAuBsC,QAAgC;CACrE,IAAI,CAACL,MAAMC,QAAQI,MAAM,GAAG,OAAOtC;CACnC,IAAI,OAAOsC,OAAO,OAAO,UAAU;EACjC,MAAM,CAACU,GAAGC,KAAKX;EACf,OAAOtC,SAAS;GAACkD,KAAKX,IAAIvC,OAAO,IAAIgD,CAAC;GAAGE,KAAKX,IAAIvC,OAAO,IAAIiD,CAAC;GAAGC,KAAKC,IAAInD,OAAO,IAAIgD,CAAC;GAAGE,KAAKC,IAAInD,OAAO,IAAIiD,CAAC;EAAC,IAAI;GAACD;GAAGC;GAAGD;GAAGC;EAAC;CAChI;CACA,OAAOX,OAAOc,OAAsBL,QAAQ/C,MAAM;AACpD;AAEA,IAAMqD,aAA6E;CACjFK,SAAS;EAAEH,OAAO;EAA+BC,MAAM;EAAkCC,MAAM;CAA0B;CACzHE,QAAQ;EAAEJ,OAAO;EAA2BC,MAAM;EAAkCC,MAAM;CAA+B;CACzHG,SAAS;EAAEL,OAAO;EAA4BC,MAAM;EAAmCC,MAAM;CAAkC;CAC/HI,SAAS;EAAEN,OAAO;EAA4BC,MAAM;EAAmCC,MAAM;CAAkC;CAC/HK,QAAQ;EAAEP,OAAO;EAA2BC,MAAM;EAAkCC,MAAM;CAAiC;AAC7H;AAEA,IAAMM,WAAoC;CAAC;CAAW,CAAC,iBAAiB,UAAU;CAAG;AAAK;AAC1F,IAAMC,QAAiC;CAAC;CAAW,CAAC,iBAAiB,OAAO;CAAG;AAAK;AACpF,IAAMC,SAAkC;CAAC;CAAOF;CAAUC;AAAK;;AAG/D,IAAME,UAAUC,cAAuBC,QACrCD,eAAe;CAAC;CAAQF;CAAQ;CAAGG;AAAG,IAAI;;;;;AAqB5C,SAAAU,YAAAC,UAAAC,UAAAC,SAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACE,MAAA3D,MAAYD,cAAcwD,QAAQ;CAClC,MAAA,EAAAR,OAAAE,aAAAW,IAAAjF,UAAAT,aAAAiF,cAAAU,IAAAT,aAAAC,gBAAuGI;CAAQ,IAAAK;CAAA,IAAAJ,EAAA,OAAAE,IAAA;EAAhGE,KAAAF,OAAAG,KAAAA,IAAA,CAAA,IAAAH;EAAgBF,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAhB,MAAAT,cAAAa;CAAyC,MAAAX,eAAAU,OAAAE,KAAAA,IAAA,IAAAF;CACxD,MAAA,EAAArE,UAAAG,aAAAT,QAAuCc;CACvC,MAAAgE,WAAiB,IAAIC,IAAIhB,WAAW;CAAE,IAAAiB;CAAA,IAAAR,EAAA,OAAAT,aAAA;EAClBiB,KAAAjB,YAAWkB,KAAM,IAAQ;EAACT,EAAA,KAAAT;EAAAS,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAA9C,MAAAU,cAAoBF;CAA2B,IAAAG;CAAA,IAAAX,EAAA,OAAAxF,eAAAwF,EAAA,OAAAP,cAAA;EAGZkB,MAAAnB,SAAUrC,kBAAkB3C,YAAYgF,IAAI,GAAGC,YAAY;EAACO,EAAA,KAAAxF;EAAAwF,EAAA,KAAAP;EAAAO,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAA/F,MAAAY,QAAc,IAAIL,IAAIlB,MAAKwB,OAAQF,EAA4D,CAAC;CAChG,MAAAG,aAAmBzB,MAAKwB,QAAQE,WAAU,CAACH,MAAKI,IAAKxB,MAAI,CAAC,CAAC,CAAAhE,IAAKyF,KAAiB,CAAC,CAAAR,KAAM,IAAI;CAAE,IAAAS;CAAA,IAAAC;CAAA,IAAAnB,EAAA,OAAAc,cAAAd,EAAA,OAAAH,UAAA;EAC9EqB,WAAA;GACd,IAAIJ,cAAAA,QAAAA,IAAAA,aAAuC,cACzCM,QAAOC,KAAM,GAAGxB,SAAQ,4CAA6CiB,YAAY;EAClF;EACAK,KAAA,CAACtB,UAAUiB,UAAU;EAACd,EAAA,KAAAc;EAAAd,EAAA,KAAAH;EAAAG,EAAA,KAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAA;EAAAD,KAAAlB,EAAA;EAAAmB,KAAAnB,EAAA;CAAA;CAJzB9J,MAAKoL,UAAWJ,IAIbC,EAAsB;CAEzB,IAAArG,SAA4B;CAC5B,IAAAI,iBAAoC;CACpC,KAAK,MAAAqG,UAAcX,OAAK;EACtB9F,SAAS+C,OAAO/C,QAAQN,YAAYgF,MAAI,CAAC;EACzC,IAAIc,SAAQU,IAAKxB,OAAInG,EAAG,GAAG6B,iBAAiB2C,OAAO3C,gBAAgBV,YAAYgF,MAAI,CAAC;CAAE;CAExF,MAAAgC,YAAkB,GAAG1G,OAAM,GAAII,eAAc,GAAID;CAAW,IAAAwG;CAAA,IAAAzB,EAAA,QAAAlF,UAAAkF,EAAA,QAAA/E,YAAA+E,EAAA,QAAAlE,YAAAkE,EAAA,QAAA9E,kBAAA8E,EAAA,QAAAF,UAAA;EAE5C2B,WAAA;GACd3F,SAASgE,UAAU;IAAA7E;IAAAH;IAAAI;GAAmC,CAAC;EAAC;EACzD8E,EAAA,MAAAlF;EAAAkF,EAAA,MAAA/E;EAAA+E,EAAA,MAAAlE;EAAAkE,EAAA,MAAA9E;EAAA8E,EAAA,MAAAF;EAAAE,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAwB,aAAAxB,EAAA,QAAAlE,YAAAkE,EAAA,QAAAF,UAAA;EAAE4B,KAAA;GAAC5F;GAAUgE;GAAU0B;EAAS;EAACxB,EAAA,MAAAwB;EAAAxB,EAAA,MAAAlE;EAAAkE,EAAA,MAAAF;EAAAE,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAFlC9J,MAAKoL,UAAWG,IAEbC,EAA+B;CAAC,IAAAC;CAAA,IAAAC;CAAA,IAAA5B,EAAA,QAAAlE,YAAAkE,EAAA,QAAAF,UAAA;EACnB8B,iBAAY9F,SAASgE,UAAU,IAAI;EAAG6B,MAAA,CAAC7F,UAAUgE,QAAQ;EAACE,EAAA,MAAAlE;EAAAkE,EAAA,MAAAF;EAAAE,EAAA,MAAA2B;EAAA3B,EAAA,MAAA4B;CAAA,OAAA;EAAAD,MAAA3B,EAAA;EAAA4B,KAAA5B,EAAA;CAAA;CAA1E9J,MAAKoL,UAAWM,IAAsCD,GAAoB;CAAC,IAAAE;CAAA,IAAA7B,EAAA,QAAAX,SAAAW,EAAA,QAAAN,eAAAM,EAAA,QAAAL,eAAAK,EAAA,QAAA/D,eAAA+D,EAAA,QAAAF,UAAA;EAE3D+B,YAAA;GACd,MAAAC,QAAazI,OAAgBgG,MAAK0C,MAAMC,WAAUxC,OAAInG,OAAQA,EAAE;GAChE4C,YAAY6D,UAAU;IAAA1E,UACX6G,MAAA5G,UAAA;KACP,MAAA6G,SAAaJ,KAAKzI,IAAE;KACpB,IAAImG,QAAME,cAAcF,QAAMnE,KAAK;IAAE;IACtCC,UACQ6G,MAAAC,YAAezC,cAActG,QAAM,OAAN,OAAqByI,KAAKzI,IAAU,KAAf,MAAmBgC,OAAK;GACrF,CAAC;EAAC;EACH2E,EAAA,MAAAX;EAAAW,EAAA,MAAAN;EAAAM,EAAA,MAAAL;EAAAK,EAAA,MAAA/D;EAAA+D,EAAA,MAAAF;EAAAE,EAAA,MAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CATD9J,MAAKoL,UAAWO,GASf;CAAC,IAAAQ;CAAA,IAAAC;CAAA,IAAAtC,EAAA,QAAA/D,eAAA+D,EAAA,QAAAF,UAAA;EACcuC,kBAAYpG,YAAY6D,UAAU,IAAI;EAAGwC,MAAA,CAACrG,aAAa6D,QAAQ;EAACE,EAAA,MAAA/D;EAAA+D,EAAA,MAAAF;EAAAE,EAAA,MAAAqC;EAAArC,EAAA,MAAAsC;CAAA,OAAA;EAAAD,MAAArC,EAAA;EAAAsC,MAAAtC,EAAA;CAAA;CAAhF9J,MAAKoL,UAAWe,KAAyCC,GAAuB;CAAC,IAAAC;CAAA,IAAAvC,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAIpDF,sBAAA,IAAIhC,IAAY;EAACP,EAAA,MAAAuC;CAAA,OAAAA,MAAAvC,EAAA;CAA9C,MAAA0C,UAAgBxM,MAAKyM,OAAQJ,GAAiB;CAC9CrM,MAAKoL,gBAAW;EACd,MAAAsB,WAAiBpH,KAAGqH,OAAS;EAC7B,IAAI,CAACD,UAAQ;EACb,MAAAE,QAAc,IAAIvC,IAAI,CAAA,GAAIK,KAAK,CAAC,CAAApF,IAAKuH,MAAiB,CAAC;EACvD,MAAAC,SAAe,IAAIzC,KAAKG,cAAcA,YAAWuC,MAAO,IAAa,IAA7C,CAAA,EAAA,CAA8CpC,QAASqC,SAAQJ,MAAK9B,IAAK3H,IAAE,CAAC,CAAC;EACrG,MAAA8J,aAAa;GACX,IAAI,CAACP,SAAQQ,UAAWtD,QAAQ,GAAC;GACjC,MAAAuD,OAAaX,QAAOY;GACpB,KAAK,MAAAC,QAAYF,MAAM,IAAI,CAACL,OAAMhC,IAAK3H,IAAE,GAAGuJ,SAAQY,gBAAiB;IAAAtG,QAAU4C;IAAQzG,IAAEA;GAAG,GAAG,EAAAiH,UAAY,MAAM,CAAC;GAClH,KAAK,MAAAmD,QAAYT,QAAQ,IAAI,CAACK,KAAIrC,IAAK3H,IAAE,GAAGuJ,SAAQY,gBAAiB;IAAAtG,QAAU4C;IAAQzG,IAAEA;GAAG,GAAG,EAAAiH,UAAY,KAAK,CAAC;GACjHoC,QAAOY,UAAWN;EAAH;EAEjBG,KAAK;EACL,MAAAO,UAAeC,MAAA;GACb,IAAIA,EAAC7D,aAAcA,YAAY6D,EAACC,mBAAoB,YAAU;GAC9DlB,QAAOY,0BAAW,IAAI/C,IAAI;GAC1B4C,KAAK;EAAC;EAERP,SAAQiB,GAAI,cAAcH,MAAM;EAAC,aAC1B;GACLd,SAAQkB,IAAK,cAAcJ,MAAM;EAAC;CACnC,GACA;EAAClI;EAAKsE;EAAUc;EAAOF;CAAW,CAAC;CAAC,OAEhC;EAAAjF,QAAUa,IAAGb;EAAOwD,cAAgBM,YAAW9B,SAAU;EAACmD;CAAQ;AAAC;;AApE5E,SAAAmC,OAAAgB,QAAA;CAAA,OA+CmDvE,OAAInG;AAAG;AA/C1D,SAAA4H,MAAA+C,QAAA;CAAA,OAS4ExE,OAAInG;AAAG;AA+DnF,SAAA4K,UAAAC,QAAA;CAAA,MAAAlE,IAAAC,EAAA,CAAA;CAC0B,MAAAC,KAAAhK,MAAKiO,MAAO;CAAC,IAAAhE;CAAA,IAAAH,EAAA,OAAAE,IAAA;EAAA,IAAAE;EAAA,IAAAJ,EAAA,OAAAwC,OAAAC,IAAA,2BAAA,GAAA;GAASrC,KAAA;GAASJ,EAAA,KAAAI;EAAA,OAAAA,KAAAJ,EAAA;EAA/BG,KAAAD,GAAakE,QAAShE,IAAW,EAAE;EAACJ,EAAA,KAAAE;EAAAF,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,OAArD,OAAOkE,OAAM,GAAI/D;AAAsC;;;;;;;;;;;;;;;;;;;;;AAgEhE,SAAAgF,QAAAjF,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAA,IAAArE;CAAA,IAAAD;CAAA,IAAAuJ;CAAA,IAAAF;CAAA,IAAAP;CAAA,IAAAE;CAAA,IAAAjJ;CAAA,IAAAgJ;CAAA,IAAAtJ;CAAA,IAAAgK;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAf;CAAA,IAAA/K;CAAA,IAAA2G;CAAA,IAAAC;CAAA,IAAAI;CAAA,IAAAR,EAAA,OAAAE,IAAA;EAAiB,CAAA,CAAAqE,KAAA5I,YAAAC,WAAA6I,kBAAAC,mBAAAC,aAAAC,KAAAzE,IAAAzE,QAAAoJ,kBAAA1E,IAAA2E,YAAAvE,IAAAwE,WAAAxL,OAAA0L,UAAA9J,SAAAgK,aAAAC,YAAA,GAAAC,SAAApF;EAkBFF,EAAA,KAAAE;EAAAF,EAAA,KAAApE;EAAAoE,EAAA,KAAArE;EAAAqE,EAAA,KAAAkF;EAAAlF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAyE;EAAAzE,EAAA,KAAA2E;EAAA3E,EAAA,KAAAtE;EAAAsE,EAAA,KAAA0E;EAAA1E,EAAA,KAAA5E;EAAA4E,EAAA,MAAAoF;EAAApF,EAAA,MAAAqF;EAAArF,EAAA,MAAAsF;EAAAtF,EAAA,MAAAuE;EAAAvE,EAAA,MAAAxG;EAAAwG,EAAA,MAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAQ;CAAA,OAAA;EAAA5E,YAAAoE,EAAA;EAAArE,aAAAqE,EAAA;EAAAkF,WAAAlF,EAAA;EAAAgF,YAAAhF,EAAA;EAAAyE,mBAAAzE,EAAA;EAAA2E,cAAA3E,EAAA;EAAAtE,SAAAsE,EAAA;EAAA0E,oBAAA1E,EAAA;EAAA5E,UAAA4E,EAAA;EAAAoF,cAAApF,EAAA;EAAAqF,aAAArF,EAAA;EAAAsF,QAAAtF,EAAA;EAAAuE,MAAAvE,EAAA;EAAAxG,QAAAwG,EAAA;EAAAG,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;EAAAQ,KAAAR,EAAA;CAAA;CAXb,MAAA4E,MAAAzE,OAAAE,KAAAA,IAAA,SAAAF;CAEA,MAAA2E,mBAAA1E,OAAAC,KAAAA,IAAA,cAAAD;CACA,MAAA2E,aAAAvE,OAAAH,KAAAA,IAAA,QAAAG;CASA,MAAA,CAAA+E,SAAAC,cAA8BtP,MAAKuP,SAAiC,IAAI;CACxE,MAAA,CAAAjK,KAAAkK,UAAsBxP,MAAKuP,SAAyB,IAAI;CAAE,IAAA9E;CAAA,IAAAX,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EACS9B,KAAA,CAAC;EAACX,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAArE,MAAA,CAAA2F,OAAAC,YAA0B1P,MAAKuP,SAAoC9E,EAAE;CACrE,MAAA,CAAAkF,eAAAC,oBAA0C5P,MAAKuP,SAAUhB,oBAAoB9I,WAAU,EAAO,EAAAtC,MAArC,EAA2C;CACpG,MAAA,CAAA0M,QAAAC,aAA4B9P,MAAKuP,SAAU,EAAE;CAC7C,MAAA,CAAAQ,UAAAC,eAAgChQ,MAAKuP,SAAU,KAAK;CAAE,IAAAvE;CAAA,IAAAlB,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EACMvB,KAAA,CAAC;EAAClB,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAA9D,MAAA9D,WAAiBhG,MAAKyM,OAAsCzB,EAAE;CAC9D,MAAAiF,UAAgBjQ,MAAKyM,OAAwD,IAAI;CACjF,MAAAlH,SAAehD,kBAAkB8M,OAAO;CAAE,IAAApE;CAAA,IAAAnB,EAAA,QAAAtE,QAAA;EAC7ByF,KAAA;GAAA,GAAK7G;GAAa,GAAKoB;EAAO;EAACsE,EAAA,MAAAtE;EAAAsE,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAA5C,MAAAoG,OAAajF;CAEb,MAAAkF,YAAkBzK,aAAAiK;CAA2B,IAAApE;CAAA,IAAAzB,EAAA,QAAArE,cAAAqE,EAAA,QAAAqG,WAAA;EAC7B5E,KAAA9F,WAAUoG,MAAMuE,MAAOA,EAACjN,OAAQgN,SAA0B,KAAZ1K,WAAU;EAAGqE,EAAA,MAAArE;EAAAqE,EAAA,MAAAqG;EAAArG,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAA3E,MAAAsD,UAAgB7B;CAChB,MAAA8E,WAAiB9K,OAAM+K,QAASlD,SAAO7J,YAAc6J,QAAO7J,YAAa6J,SAAO9J;CAAQ,IAAAkI;CAAA,IAAA1B,EAAA,QAAA0E,mBAAA;EAEnEhD,MAAArI,OAAA;GACnByM,iBAAiBzM,EAAE;GACnBqL,oBAAoBrL,EAAE;EAAC;EACxB2G,EAAA,MAAA0E;EAAA1E,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAHD,MAAAnE,eAAqB6F;CAGnB,IAAAE;CAAA,IAAA5B,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EACeb,MAAA7F,QAAAC,SAAA;GACf4J,UAASvC,SAAA;IACP,MAAAoD,OAAa,EAAA,GAAKpD,KAAK;IACvB,IAAIrH,MAAMyK,KAAK1K,UAAUC;SACpB,OAAOyK,KAAK1K;IAAQ,OAClB0K;GAAI,CACZ;EAAC;EACHzG,EAAA,MAAA4B;CAAA,OAAAA,KAAA5B,EAAA;CAPD,MAAAlE,WAAiB8F;CAOf,IAAAD;CAAA,IAAA3B,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EACkBd,OAAA+E,UAAAlJ,UAAA;GAClB,IAAIA,OAAOtB,SAAQoH,QAASvH,YAAUyB;QACjC,OAAOtB,SAAQoH,QAASvH;EAAQ;EACtCiE,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAHD,MAAA/D,cAAoB0F;CAGlB,IAAAgF;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAjF;CAAA,IAAA7B,EAAA,QAAA4E,OAAA5E,EAAA,QAAA2F,OAAA;EAEF,MAAAoB,UAAgBC,OAAMD,QAASpB,KAAK;EACpCkB,sBAA4BE,QAAOE,QAASC,MAA2B;EACvEJ,WAAgBK,YAAqBJ,QAAOhF,MAAMM,QAAA;GAAC,MAAA,GAAA+E,UAAA/E;GAAQ,OAAKrG,OAAIf,SAASoM,SAAUF,OAAO;EAAC,CAAK,CAAC,GAAA;EACrGP,QAAcG,QAAOtJ,SAAU,KAAKsJ,QAAOnJ,MAAO0J,MAA0B;EAG5E,MAAAC,UAAgBC;EAChB,MAAAhG,YAAkBiG;EAClBd,UAAgB/B,QAAQ,SAAR,KAAsBpD,UAAU3D,OAAO,MAAMkJ,QAAOvL,KAAK8G,QAAA;GAAC,MAAA,GAAAoF,UAAApF;GAAQ,OAAKiF,QAAQvL,OAAIlB,MAAO;EAAC,CAAA,CAAC,CAAC;EACxF+G,MAAA+C,QAAQ,aAAapD,UAAU3D,OAAO,MAAMkJ,QAAOvL,KAAK+G,QAAA;GAAC,MAAA,GAAAoF,UAAApF;GAAQ,OAAKgF,QAAQvL,OAAId,cAAe;EAAC,CAAA,CAAC,CAAM,IAAzG;EAA0G8E,EAAA,MAAA4E;EAAA5E,EAAA,MAAA2F;EAAA3F,EAAA,MAAA2G;EAAA3G,EAAA,MAAA4G;EAAA5G,EAAA,MAAA6G;EAAA7G,EAAA,MAAA8G;EAAA9G,EAAA,MAAA6B;CAAA,OAAA;EAAA8E,UAAA3G,EAAA;EAAA4G,QAAA5G,EAAA;EAAA6G,sBAAA7G,EAAA;EAAA8G,UAAA9G,EAAA;EAAA6B,MAAA7B,EAAA;CAAA;CAA/H,MAAA4H,eAAqB/F;CAIrB,MAAAgG,YAAkB3R,MAAKyM,OAAQ,KAAK;CAAE,IAAAN;CAAA,IAAAC;CAAA,IAAAtC,EAAA,QAAAxE,KAAA;EACtB6G,YAAA;GACd,MAAAO,WAAiBpH,KAAGqH,OAAS;GAC7B,IAAI,CAACD,UAAQ;GACb,MAAAkF,eAAoBzM,UAAA;IAClB,IAAIA,MAAK0M,eAAgBF,UAASvE,UAAW;GAAK;GAEpDV,SAAQiB,GAAI,aAAaiE,WAAW;GAAC,aAC9B;IACLlF,SAAQkB,IAAK,aAAagE,WAAW;GAAC;EACvC;EACAxF,MAAA,CAAC9G,GAAG;EAACwE,EAAA,MAAAxE;EAAAwE,EAAA,MAAAqC;EAAArC,EAAA,MAAAsC;CAAA,OAAA;EAAAD,MAAArC,EAAA;EAAAsC,MAAAtC,EAAA;CAAA;CAVR9J,MAAKoL,UAAWe,KAUbC,GAAK;CAAC,IAAAC;CAAA,IAAAvC,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAEmBF,MAAA;GAAAyF,MAAQ;GAAEC,WAAa;EAAG;EAACjI,EAAA,MAAAuC;CAAA,OAAAA,MAAAvC,EAAA;CAAvD,MAAAkI,SAAehS,MAAKyM,OAAQJ,GAA2B;CAAE,IAAA4F;CAAA,IAAAC;CAAA,IAAApI,EAAA,QAAA2G,WAAA3G,EAAA,QAAAxE,OAAAwE,EAAA,QAAA4H,cAAA;EACzCO,YAAA;GACd,IAAI,CAAC3M,KAAG;GACR,MAAA6M,SAAaH,OAAM5E;GACnB4E,OAAM5E,UAAW;IAAA0E,MAAQrB;IAAOsB,WAAaL;GAAa;GAC1D,MAAAU,mBAAyBV,iBAAiBvE,OAAI4E;GAC9C,MAAAM,cAAoB5B,YAAYtD,OAAI2E,QAAhB,CAA0BH,UAASvE;GACvD,MAAAkF,MAAYZ,gBAAAjB;GACZ,IAAI,CAAC6B,OAAD,EAAUF,oBAAAC,cAAgC;GAC9C,MAAA,CAAAE,GAAAC,GAAA/E,GAAAgF,OAAqBH,IAAGvF,MAAO,GAAG,CAAC,CAAAzH,IAAKkC,MAAM;GAC9ClC,IAAGoN,UAAW,CAAC,CAACH,GAAGC,CAAC,GAAG,CAAC/E,GAAGkF,GAAC,CAAC,GAAG;IAAAC,SAAW;IAAEC,SAAW;IAAEC,UAAY;GAAI,CAAC;EAAC;EAC3EZ,MAAA;GAAC5M;GAAKmL;GAASiB;EAAY;EAAC5H,EAAA,MAAA2G;EAAA3G,EAAA,MAAAxE;EAAAwE,EAAA,MAAA4H;EAAA5H,EAAA,MAAAmI;EAAAnI,EAAA,MAAAoI;CAAA,OAAA;EAAAD,MAAAnI,EAAA;EAAAoI,MAAApI,EAAA;CAAA;CAV/B9J,MAAKoL,UAAW6G,KAUbC,GAA4B;CAAC,IAAAa;CAAA,IAAAjJ,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAEfwG,OAAAC,QAAA9G,YAAA;GACf,MAAA+G,SAAahD,QAAO7C;GACpB,MAAA8F,QAAYC;GACZ,IAAIb,MAAInF,MAAI,MAAMmF,MAAI/B,MAAI,GAAC;GAC3B,MAAA6C,aAAiBjO,QAAK2H;GACtB,IAAIK,QAAI;IACN,IAAIT,WAAQQ,UAAWC,OAAInG,MAAO,GAAG0F,WAAQY,gBAAiBH,QAAM,EAAAkG,OAAS,MAAM,CAAC;IACpFrN,SAAQoH,QAASD,OAAInG,OAAiB,EAAA5B,UAAG,MAAMD,OAAK;GAAC;GAEvD,IAAIoL,QAAI;IACN7D,WAAQY,gBAAiBiD,QAAM,EAAA8C,OAAS,KAAK,CAAC;IAC9CrN,SAAQoH,QAASmD,OAAIvJ,OAAiB,EAAA5B,UAAGkO,OAAO/C,OAAIpN,EAAG,GAAGgC,OAAK;GAAC;GAElE8K,QAAO7C,UAAWmD;GAClBT,UAAUS,SAAA,YAAA,EAAqB;EAAC;EACjCzG,EAAA,MAAAiJ;CAAA,OAAAA,MAAAjJ,EAAA;CAfD,MAAAyJ,WAAiBR;CAef,IAAAS;CAAA,IAAAC;CAAA,IAAA3J,EAAA,QAAAiG,UAAA;EAEcyD,YAAA;GACd,IAAI,CAACzD,UAAQ;GACb,MAAA2D,aAAkBC,YAAA;IAEhB,IAAIxO,QAAKmN,QAAS,YAAd,CAA2BnN,QAAKyO,kBAAmB5D,YAAY,KAAK;GAAE;GAE5E6D,SAAQC,iBAAkB,WAAWJ,SAAS;GAAC,aAClCG,SAAQE,oBAAqB,WAAWL,SAAS;EAAC;EAC9DD,MAAA,CAAC1D,QAAQ;EAACjG,EAAA,MAAAiG;EAAAjG,EAAA,MAAA0J;EAAA1J,EAAA,MAAA2J;CAAA,OAAA;EAAAD,MAAA1J,EAAA;EAAA2J,MAAA3J,EAAA;CAAA;CARb9J,MAAKoL,UAAWoI,KAQbC,GAAU;CAAC,IAAAO;CAAA,IAAAlK,EAAA,QAAA2E,aAAA;EAEWuF,MAAAvF,eAAe,YAAYA,cAA3B;GAAA7J,QACX6J,YAAW7J;GAA2BqP,kBAAoB,EAAArB,SAAW,GAAG;EACxE,IAFWnE;EAEV3E,EAAA,MAAA2E;EAAA3E,EAAA,MAAAkK;CAAA,OAAAA,MAAAlK,EAAA;CAFf,MAAAoK,mBAAyBF;CAET,IAAAG;CAAA,IAAArK,EAAA,QAAAgF,WAAA;EAGmBqF,MAAAlS,GAAG,WAAW6M,SAAS;EAAChF,EAAA,MAAAgF;EAAAhF,EAAA,MAAAqK;CAAA,OAAAA,MAAArK,EAAA;CAA+B,MAAAsK,MAAArE,YAAA5F,KAAAA;CAAqB,IAAAkK;CAAA,IAAAvK,EAAA,QAAArE,cAAAqE,EAAA,QAAAkF,YAAAlF,EAAA,QAAAvE,UAAAuE,EAAA,QAAA8E,oBAAA9E,EAAA,QAAAsD,SAAA5J,eAAAsG,EAAA,QAAAsD,SAAAjK,MAAA2G,EAAA,QAAA+F,UAAA/F,EAAA,QAAAuF,WAAAvF,EAAA,QAAA4G,SAAA5G,EAAA,QAAA+E,cAAA/E,EAAA,QAAAiG,YAAAjG,EAAA,QAAAoK,oBAAApK,EAAA,QAAA6G,uBAAA7G,EAAA,QAAAxE,OAAAwE,EAAA,QAAAuG,YAAAvG,EAAA,QAAA5E,WAAA4E,EAAA,QAAAoF,eAAApF,EAAA,QAAAqF,cAAArF,EAAA,QAAA8G,WAAA9G,EAAA,QAAAsF,SAAAtF,EAAA,QAAAuE,OAAAvE,EAAA,QAAAnE,gBAAAmE,EAAA,QAAAoG,MAAA;EAC1GmE,MAAAhF,WACC,oBAAC6L,KAAD;GAAM,GACA9L;GACI,QAAA9N,WAAW;GACd,MAAAgT,eAAA;IACH9E,OAAO9C,UAAQ;IACf,IAAI,OAAO2B,QAAQ,YAAYA,IAAI3B,UAAQ;SACtC,IAAI2B,KAAKA,IAAGjB,UAAWV;GAAS;GAE7B2D;GACQ6D;GACGvD;GACbd;GACY,oBAAA;GACZ,QAAA;IAAA,4BAA8BK,KAAIxM;IAAO,6BAA+BwM,KAAIvM;GAAS;GACpF,UAAA4Q,YAAA;IACP,MAAAC,UAAgBrP,QAAKsP,WAAc;IACnC,MAAAC,QAAcF,WAAW5D,QAAQ4D,QAAOG,MAAMxR,EAAG;IACjD,IAAIqR,WAAAE,SAAoBF,QAAOrR,MAAO,MAAM6C,SAAQoH,QAASsH,MAAe,EAAAxP,UAAGoO,OAAOkB,QAAOrR,EAAG,GAAGgC,OAAK;IACxGD,UAAUC,OAAK;GAAC;GAEL,cAAAyP,YAAA;IACX,MAAAC,YAAgB1P,QAAKsP,WAAc;IACnC,MAAAK,UAAcD,aAAWjE,QAAQ4D,UAAOG,MAAMxR,EAAG;IACjDoQ,SAASsB,aAAAC,WAAoBN,UAAOrR,MAAO,OAAlC;KAAA6D,QAAmD0N;KAAKvR,IAAMqR,UAAOrR;IAAW,IAAhF,MAAmFgC,OAAK;IACjG+J,cAAc/J,OAAK;GAAC;GAEV,aAAA4P,YAAA;IACVxB,SAAS,MAAMpO,OAAK;IACpBgK,aAAahK,OAAK;GAAC;GAGrB,UAAA,qBAAC,YAAD;IACS,OAAA;KAAAG;KAAAC;KAAAC,QAAuB0K;KAAIzK;KAAAC,WAAyB0H,SAAOjK,MAAP;KAAiBwC;KAAAC;KAAAG;IAAsC;IADpH,UAAA;KAGG6I,oBAAoB,oBAAC,mBAAD;MAA6BA,UAAAA;MAA+B,aAAA;KAAK,CAAA;KACrFC,cACC,oBAAC,eAAD;MACY,UAAAD,oBAAA;MACAmB;MACH,OAAAA,WAAWG,KAAI/L,WAAY+L,KAAIhM;MAC5B,gBAAM8L,YAAYgF,MAAiB;KAAC,CAAA;KAGlD,oBAAC,oBAAD;MAAsC,SAAA;MAA2B,mBAAA5H,SAAO5J;KAAa,GAA5D4J,SAAOjK,EAAqD;KACpF6L;KACA0B,SAAS,oBAAA,OAAA;MAAe,WAAA;MAAkBR,UAAAA,KAAIjM;KAAc,CAAA;IAdpD;;EA/BP,CAAA;EAgDP6F,EAAA,MAAArE;EAAAqE,EAAA,MAAAkF;EAAAlF,EAAA,MAAAvE;EAAAuE,EAAA,MAAA8E;EAAA9E,EAAA,MAAAsD,SAAA5J;EAAAsG,EAAA,MAAAsD,SAAAjK;EAAA2G,EAAA,MAAA+F;EAAA/F,EAAA,MAAAuF;EAAAvF,EAAA,MAAA4G;EAAA5G,EAAA,MAAA+E;EAAA/E,EAAA,MAAAiG;EAAAjG,EAAA,MAAAoK;EAAApK,EAAA,MAAA6G;EAAA7G,EAAA,MAAAxE;EAAAwE,EAAA,MAAAuG;EAAAvG,EAAA,MAAA5E;EAAA4E,EAAA,MAAAoF;EAAApF,EAAA,MAAAqF;EAAArF,EAAA,MAAA8G;EAAA9G,EAAA,MAAAsF;EAAAtF,EAAA,MAAAuE;EAAAvE,EAAA,MAAAnE;EAAAmE,EAAA,MAAAoG;EAAApG,EAAA,MAAAuK;CAAA,OAAAA,MAAAvK,EAAA;CAAA,IAAAmL;CAAA,IAAAnL,EAAA,QAAAxG,SAAAwG,EAAA,QAAAqK,OAAArK,EAAA,QAAAsK,OAAAtK,EAAA,QAAAuK,KAAA;EAlDHY,MAAA,oBAAA,OAAA;GAAU3F,KAAAA;GAAuB,WAAA6E;GAAiC7Q;GAAsB,iBAAA8Q;GACrFC,UAAAA;EAkDG,CAAA;EAAAvK,EAAA,MAAAxG;EAAAwG,EAAA,MAAAqK;EAAArK,EAAA,MAAAsK;EAAAtK,EAAA,MAAAuK;EAAAvK,EAAA,MAAAmL;CAAA,OAAAA,MAAAnL,EAAA;CAAA,OAnDNmL;AAmDM;;AA7KV,SAAAD,OAAAE,SAAA;CAAA,OAoKuD,CAAC5N;AAAK;AApK7D,SAAA6L,OAAAgC,GAAA;CAAA,OA4FqCA,IAAA,GAAOA,EAACnO,OAAO,GAAImO,EAAChS,OAApB;AAA8B;AA5FnE,SAAAoO,OAAA6D,KAAA;CAAA,OA0D0CC,KAAC/P,IAAMgQ,MAAwB,CAAC,CAAA/K,KAAC,GAAS,KAA1C;AAA2C;AA1DrF,SAAA+K,OAAA3C,GAAA;CAAA,OA0DwDA,EAAC4C,QAAS,CAAC;AAAC;AA1DpE,SAAAjE,OAAA+D,GAAA;CAAA,OAyDwCA,KAAA,CAAMA,EAACG,MAAO,GAAG,CAAC,GAAGH,EAACG,MAAO,CAAC,CAAC;AAAC;AAzDxE,SAAApE,OAAApH,IAAA;CAsDqD,MAAA,GAAAyL,UAAAzL;CAAQ,OAAK,CAAClE,OAAIlB;AAAO;AAtD9E,SAAAoM,OAAAhH,IAAA;CAoD+C,MAAA,GAAA0L,UAAA1L;CAAQ,OAAKlE,OAAIf;AAAS;AA8HzE,SAAA4Q,cAAA3L,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAuB,MAAA,EAAA6L,UAAA7F,UAAA3M,OAAAyS,aAAA7L;CAWrB,MAAA,CAAA8L,QAAe9V,MAAKuP,SAAUwG,MAI7B;CAAE,IAAA9L;CAAA,IAAAH,EAAA,OAAAgM,MAAA;EACQ7L,YAAO;GAAA+L,aAAeF;GAAIG,gBAAkBH,KAAII,OAAQ;EAAE;EAAEpM,EAAA,KAAAgM;EAAAhM,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAI;CAAA,IAAAJ,EAAA,OAAA8L,UAAA;EAAE1L,KAAA,EAAA0L,SAAW;EAAC9L,EAAA,KAAA8L;EAAA9L,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAArF7I,WAAWgJ,IAA8DC,EAAY;CAAC,IAAAI;CAAA,IAAAR,EAAA,OAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAGlFjC,KAAA,oBAAA,QAAA;GAAgB,WAAA;GAAmC,eAAA;EAAM,CAAA;EAAGR,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,OAAAiG,YAAAjG,EAAA,OAAA1G,SAAA0G,EAAA,OAAA+L,UAAA;EAD9DpL,KAAA,oBAAA,UAAA;GAAa,MAAA;GAAmB,WAAA;GAA8BrH,cAAAA;GAAcA,OAAAA;GAAqB2M,gBAAAA;GAAmB8F,SAAAA;GAClHvL,UAAAA;EACO,CAAA;EAAAR,EAAA,KAAAiG;EAAAjG,EAAA,KAAA1G;EAAA0G,EAAA,KAAA+L;EAAA/L,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAgM,QAAAhM,EAAA,QAAAW,IAAA;EAHJO,KAAA/K,aACLwK,IAGAqL,IACF;EAAChM,EAAA,KAAAgM;EAAAhM,EAAA,MAAAW;EAAAX,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,OALMkB;AAKN;AAtBH,SAAA+K,SAAA;CAYI,MAAA1G,UAAgBwE,SAAQsC,cAAe,KAAK;CAC5C9G,QAAOP,YAAa;CAAH,OACVO;AAAO;;;;;;;;;;;;;AAoDlB,SAAAoH,UAAAzM,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAmB,MAAA,EAAAZ,OAAAE,aAAAG,aAAAC,gBAAAO;CACjB,MAAAJ,WAAiBmE,UAAU,QAAQ;CACb,MAAA9D,KAAA,GAAGL,SAAQ;CAAkB,MAAAM,KAAA,GAAGN,SAAQ;CAAkB,MAAAU,KAAA,GAAGV,SAAQ;CAAS,IAAAa;CAAA,IAAAX,EAAA,OAAAG,MAAAH,EAAA,OAAAI,MAAAJ,EAAA,OAAAQ,IAAA;EAAxFG,KAAA;GAAAiM,QAAUzM;GAAoB9B,OAAS+B;GAAmBqM,QAAUjM;EAAqB;EAACR,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAQ;EAAAR,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAtG,MAAA6M,MAAYlM;CAA2F,IAAAO;CAAA,IAAAlB,EAAA,OAAA6M,IAAAJ,UAAAzM,EAAA,OAAA6M,IAAAxO,OAAA;EAI3F6C,KAAA,CAAC2L,IAAGxO,OAAQwO,IAAGJ,MAAO;EAACzM,EAAA,KAAA6M,IAAAJ;EAAAzM,EAAA,KAAA6M,IAAAxO;EAAA2B,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,OAAAX,SAAAW,EAAA,OAAAN,eAAAM,EAAA,OAAAL,eAAAK,EAAA,QAAAT,eAAAS,EAAA,QAAAkB,IAAA;EAHyCC,KAAA;GAAA9B;GAAAE;GAAAtE,UAGhEiG;GAAuB1G,aACpBsS;GAA0BrN,cACzB;GAACC;GAAAC;EAGjB;EAACK,EAAA,KAAAX;EAAAW,EAAA,KAAAN;EAAAM,EAAA,KAAAL;EAAAK,EAAA,MAAAT;EAAAS,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CARD,MAAA,EAAAvE,QAAAwD,cAAA2B,UAAwChB,YAAY,cAAcE,UAAUqB,EAQ3E;CAAE,IAAAM;CAAA,IAAAzB,EAAA,QAAAvE,UAAAuE,EAAA,QAAAX,SAAAW,EAAA,QAAAY,OAAA;EAAA,IAAAc;EAAA,IAAA1B,EAAA,QAAAvE,UAAAuE,EAAA,QAAAY,OAAA;GAIuBc,MAAAX,QAAAgM,UACtBnM,MAAKI,IAAKxB,MAML,IANL,CACK;IAAAtH,MACO;IAAkB+U,YACZ;KAAA5T,IAAMmG,OAAInG;KAAGoT,QAAU,CAAC,CAACjN,OAAIiN;KAAOF,OAAS9Q,OAAM8Q,MAAO/M,OAAI+M,SAAUnU,YAAYoH,OAAIgN,cAAJO,KAAwB,CAAC;IAAE;IAACG,UAClH;KAAAhV,MAAQ;KAAqBsC,aAAegF,OAAIhF;IAAa;GACzE,CAAC,IALL,CAAA;GAMMwF,EAAA,MAAAvE;GAAAuE,EAAA,MAAAY;GAAAZ,EAAA,MAAA0B;EAAA,OAAAA,KAAA1B,EAAA;EAPEyB,KAAApC,MAAK4H,QAASvF,EAQxB;EAAC1B,EAAA,MAAAvE;EAAAuE,EAAA,MAAAX;EAAAW,EAAA,MAAAY;EAAAZ,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAyB,IAAA;EAXUC,KAAA;GAAAxJ,MACL;GAA4ByS,UAExBlJ;EASZ;EAACzB,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAZD,MAAAgI,OAAatG;CAab,MAAAyL,SAAe1R,OAAM2R,OAAQ,0BAA0B,CAAC;CAAE,IAAAxL;CAAA,IAAAyL;CAAA,IAAArN,EAAA,QAAAvE,UAAAuE,EAAA,QAAAf,gBAAAe,EAAA,QAAAmN,QAAA;EAC1D,MAAAjO,MAAYzD,OAAM2R,OAAQ,yBAAyB,GAAI;EACA,MAAAzL,MAAAwL,SAAS;EAAG,IAAAtL;EAAA,IAAA7B,EAAA,QAAA2B,OAAA3B,EAAA,QAAAmN,QAAA;GAA5BtL,MAAA;IAAC;IAAQ/C;IAAO6C;IAAcwL;GAAM;GAACnN,EAAA,MAAA2B;GAAA3B,EAAA,MAAAmN;GAAAnN,EAAA,MAAA6B;EAAA,OAAAA,MAAA7B,EAAA;EAA5EqN,QAAuCxL;EACvBD,KAAA5C,OAAOC,cAAcC,GAAG;EAACc,EAAA,MAAAvE;EAAAuE,EAAA,MAAAf;EAAAe,EAAA,MAAAmN;EAAAnN,EAAA,MAAA4B;EAAA5B,EAAA,MAAAqN;CAAA,OAAA;EAAAzL,KAAA5B,EAAA;EAAAqN,QAAArN,EAAA;CAAA;CAAzC,MAAAsN,UAAgB1L;CAA0B,IAAAD;CAAA,IAAA3B,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAC3Bd,MAAA;GAAA,aAAe;GAAO,YAAc;EAAQ;EAAC3B,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAA5D,MAAAuN,SAAe5L;CAGP,MAAAE,MAAAgL,IAAGD;CAAO,IAAAvK;CAAA,IAAArC,EAAA,QAAAvE,QAAA;EAGS4G,MAAA5G,OAAM8Q,MAAO,6BAA6B;EAACvM,EAAA,MAAAvE;EAAAuE,EAAA,MAAAqC;CAAA,OAAAA,MAAArC,EAAA;CAAgB,MAAAsC,MAAA6K,SAAS;CAAC,IAAA5K;CAAA,IAAAvC,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAAkBF,MAAA;GAAC;GAAQ1D;GAAU;GAAG;EAAC;EAACmB,EAAA,MAAAuC;CAAA,OAAAA,MAAAvC,EAAA;CAAA,IAAAmI;CAAA,IAAAnI,EAAA,QAAAqC,OAAArC,EAAA,QAAAsC,KAAA;EAA/H6F,MAAA;GAAA,cAAgB9F;GAA2C,cAAgBC;GAAU,gBAAkBC;EAAyB;EAACvC,EAAA,MAAAqC;EAAArC,EAAA,MAAAsC;EAAAtC,EAAA,MAAAmI;CAAA,OAAAA,MAAAnI,EAAA;CAAA,IAAAoI;CAAA,IAAApI,EAAA,QAAA6M,IAAAD,UAAA5M,EAAA,QAAAmI,KAAA;EAJ1IC,MAAA;GAAA/O,IACMwI;GAAU3J,MACR;GAAMqV;GAAAC,OAELrF;EACT;EAACnI,EAAA,MAAA6M,IAAAD;EAAA5M,EAAA,MAAAmI;EAAAnI,EAAA,MAAAoI;CAAA,OAAAA,MAAApI,EAAA;CAAA,IAAAiJ;CAAA,IAAAjJ,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAISwG,MAAA;GAAC;GAAM,CAAC,OAAO,QAAQ;GAAG;EAAI;EAACjJ,EAAA,MAAAiJ;CAAA,OAAAA,MAAAjJ,EAAA;CAAA,IAAA0J;CAAA,IAAA1J,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAEhBiH,MAAA,CAAC,OAAO,OAAO;EAAC1J,EAAA,MAAA0J;CAAA,OAAAA,MAAA1J,EAAA;CAAA,IAAA2J;CAAA,IAAA3J,EAAA,QAAAsN,WAAAtN,EAAA,QAAAqN,OAAA;EAAhC1D,MAAA;GAAA,cAAgBD;GAAgB,cAAgB2D;GAAK,gBAAkBC;EAAQ;EAACtN,EAAA,MAAAsN;EAAAtN,EAAA,MAAAqN;EAAArN,EAAA,MAAA2J;CAAA,OAAAA,MAAA3J,EAAA;CAAA,IAAAkK;CAAA,IAAAlK,EAAA,QAAA6M,IAAAxO,SAAA2B,EAAA,QAAA2J,KAAA;EALzFO,MAAA;GAAA7Q,IACMwT,IAAGxO;GAAMnG,MACP;GAAM2I,QACJoI;GAA+BsE;GAAAC,OAEhC7D;EACT;EAAC3J,EAAA,MAAA6M,IAAAxO;EAAA2B,EAAA,MAAA2J;EAAA3J,EAAA,MAAAkK;CAAA,OAAAA,MAAAlK,EAAA;CAAA,IAAAqK;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAvK,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAIS4H,MAAA;GAAC;GAAM,CAAC,OAAO,QAAQ;GAAG;EAAI;EAC9BC,MAAA;GAAA,aAAe;GAAO,YAAc;EAAO;EAC5BC,MAAA,CAAC,OAAO,OAAO;EAACvK,EAAA,MAAAqK;EAAArK,EAAA,MAAAsK;EAAAtK,EAAA,MAAAuK;CAAA,OAAA;EAAAF,MAAArK,EAAA;EAAAsK,MAAAtK,EAAA;EAAAuK,MAAAvK,EAAA;CAAA;CAAA,IAAAmL;CAAA,IAAAnL,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAAkE0I,MAAA,CAAC,GAAG,GAAG;EAACnL,EAAA,MAAAmL;CAAA,OAAAA,MAAAnL,EAAA;CAAA,IAAAyN;CAAA,IAAAzN,EAAA,QAAAsN,WAAAtN,EAAA,QAAAqN,OAAA;EAA1GI,MAAA;GAAA,cAAgBlD;GAAgB,cAAgB8C;GAAK,gBAAkBC;GAAO,kBAAoBnC;EAAS;EAACnL,EAAA,MAAAsN;EAAAtN,EAAA,MAAAqN;EAAArN,EAAA,MAAAyN;CAAA,OAAAA,MAAAzN,EAAA;CAAA,IAAA0N;CAAA,IAAA1N,EAAA,QAAA6M,IAAAJ,UAAAzM,EAAA,QAAAyN,KAAA;EALrHC,MAAA;GAAArU,IACMwT,IAAGJ;GAAOvU,MACR;GAAM2I,QACJwJ;GAA+BkD,QAC/BjD;GAA4CkD,OAC7CC;EACT;EAACzN,EAAA,MAAA6M,IAAAJ;EAAAzM,EAAA,MAAAyN;EAAAzN,EAAA,MAAA0N;CAAA,OAAAA,MAAA1N,EAAA;CAAA,IAAA2N;CAAA,IAAA3N,EAAA,QAAAoI,OAAApI,EAAA,QAAAkK,OAAAlK,EAAA,QAAA0N,KAAA;EApB0BC,MAAA;GAC3BvF;GAMA8B;GAOAwD;EAMC;EACF1N,EAAA,MAAAoI;EAAApI,EAAA,MAAAkK;EAAAlK,EAAA,MAAA0N;EAAA1N,EAAA,MAAA2N;CAAA,OAAAA,MAAA3N,EAAA;CArBD,MAAA/C,SAA6B0Q;CAqB3B,IAAAC;CAAA,IAAA5N,EAAA,QAAA/C,QAAA;EAGG2Q,MAAA3Q,OAAMzB,IAAKqS,OAA8C;EAAC7N,EAAA,MAAA/C;EAAA+C,EAAA,MAAA4N;CAAA,OAAAA,MAAA5N,EAAA;CAAA,IAAA8N;CAAA,IAAA9N,EAAA,QAAAgI,QAAAhI,EAAA,QAAAF,YAAAE,EAAA,QAAA4N,KAAA;EAD7DE,MAAA,oBAAC,QAAD;GAAYhO,IAAAA;GAAe,MAAA;GAAgBkI;GAAgB,WAAA;GACxD4F,UAAAA;EADI,CAAA;EAEE5N,EAAA,MAAAgI;EAAAhI,EAAA,MAAAF;EAAAE,EAAA,MAAA4N;EAAA5N,EAAA,MAAA8N;CAAA,OAAAA,MAAA9N,EAAA;CAAA,OAFT8N;AAES;AAvDb,SAAAD,QAAAhD,OAAA;CAAA,OAsD6B,oBAAC,OAAD,EAAoB,GAAMA,MAAK,GAAnBA,MAAKxR,EAAc;AAAI;AAtDhE,SAAAyT,OAAAtN,MAAA;CAAA,OAO2BA,KAAIhF;AAAY;;;;;;;;AA+E3C,SAAA0T,SAAAhO,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAkB,MAAA,EAAAZ,OAAAE,aAAAG,aAAAC,gBAAAO;CAChB,MAAAJ,WAAiBmE,UAAU,OAAO;CACd,MAAA9D,KAAA,GAAGL,SAAQ;CAAe,MAAAM,KAAA,GAAGN,SAAQ;CAAO,IAAAU;CAAA,IAAAR,EAAA,OAAAG,MAAAH,EAAA,OAAAI,IAAA;EAApDI,KAAA;GAAAlC,MAAQ6B;GAAkB5B,MAAQ6B;EAAmB;EAACJ,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAlE,MAAA6M,MAAYrM;CAAuD,IAAAG;CAAA,IAAAX,EAAA,OAAA6M,IAAAvO,MAAA;EAIvDqC,KAAA,CAACkM,IAAGvO,IAAK;EAAC0B,EAAA,KAAA6M,IAAAvO;EAAA0B,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAX,SAAAW,EAAA,OAAAN,eAAAM,EAAA,OAAAL,eAAAK,EAAA,OAAAT,eAAAS,EAAA,OAAAW,IAAA;EAHqDO,KAAA;GAAA7B;GAAAE;GAAAtE,UAG/D0F;GAAUnG,aACP2T;GAAmCzO;GAAAC;EAGlD;EAACK,EAAA,KAAAX;EAAAW,EAAA,KAAAN;EAAAM,EAAA,KAAAL;EAAAK,EAAA,KAAAT;EAAAS,EAAA,KAAAW;EAAAX,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAPD,MAAA,EAAAvE,QAAAwD,cAAA2B,UAAwChB,YAAY,aAAaE,UAAUoB,EAO1E;CAAE,IAAAC;CAAA,IAAAnB,EAAA,QAAAY,OAAA;EAGSO,KAAA,CAAA,GAAIP,KAAK;EAACZ,EAAA,MAAAY;EAAAZ,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAAvE,UAAAuE,EAAA,QAAAmB,IAAA;EAFTM,KAAA;GAAAvJ,MACL;GAA4ByS,UACxBxJ,GAAU3F,KAAKuF,WAAA;IACvB,MAAAiN,OAAa7P,WAAWqB,OAAIwO,QAAJ;IAAwB,OACzC;KAAA9V,MACC;KAAkB+U,YACZ;MAAA5T,IAAMmG,OAAInG;MAAGiF,MAAQ7C,OAAM8Q,MAAOyB,KAAI1P,IAAK;MAACC,MAAQ9C,OAAM8Q,MAAOyB,KAAIzP,IAAK;KAAE;KAAC2O,UAC/E1N,OAAI0N;IAChB;GAAC,CACF;EACH;EAAClN,EAAA,MAAAvE;EAAAuE,EAAA,MAAAmB;EAAAnB,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAVD,MAAAgI,OAAavG;CAUX,IAAAC;CAAA,IAAA1B,EAAA,QAAAvE,UAAAuE,EAAA,QAAAf,cAAA;EACcyC,KAAA1C,OAAOC,cAAcxD,OAAM2R,OAAQ,yBAAyB,GAAI,CAAC;EAACpN,EAAA,MAAAvE;EAAAuE,EAAA,MAAAf;EAAAe,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAAlF,MAAAsN,UAAgB5L;CAAmE,IAAAE;CAAA,IAAA5B,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAGvBb,KAAA,CAAC,OAAO,MAAM;EAAC5B,EAAA,MAAA4B;CAAA,OAAAA,KAAA5B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAAsN,SAAA;EAA/B3L,MAAA;GAAA,cAAgBC;GAAe,gBAAkB0L;EAAQ;EAACtN,EAAA,MAAAsN;EAAAtN,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAAA,IAAA6B;CAAA,IAAA7B,EAAA,QAAA6M,IAAAvO,QAAA0B,EAAA,QAAA2B,KAAA;EAAlGE,MAAA,oBAAC,OAAD;GAAW,IAAAgL,IAAGvO;GAAY,MAAA;GAAc,OAAAqD;EAA0D,CAAA;EAAI3B,EAAA,MAAA6M,IAAAvO;EAAA0B,EAAA,MAAA2B;EAAA3B,EAAA,MAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CAAA,IAAAqC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAvC,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAI5FJ,MAAA,EAAA,aAAe,QAAQ;EACRC,MAAA,CAAC,OAAO,MAAM;EAAiBC,MAAA;GAAC;GAAQxD;GAAQ;GAAK;EAAI;EAACiB,EAAA,MAAAqC;EAAArC,EAAA,MAAAsC;EAAAtC,EAAA,MAAAuC;CAAA,OAAA;EAAAF,MAAArC,EAAA;EAAAsC,MAAAtC,EAAA;EAAAuC,MAAAvC,EAAA;CAAA;CAAA,IAAAmI;CAAA,IAAAnI,EAAA,QAAAsN,SAAA;EAA1EnF,MAAA;GAAA,cAAgB7F;GAAe,cAAgBC;GAA2B,gBAAkB+K;EAAQ;EAACtN,EAAA,MAAAsN;EAAAtN,EAAA,MAAAmI;CAAA,OAAAA,MAAAnI,EAAA;CAAA,IAAAoI;CAAA,IAAApI,EAAA,QAAA6M,IAAAtO,QAAAyB,EAAA,QAAAmI,KAAA;EAJ9GC,MAAA,oBAAC,OAAD;GACM,IAAAyE,IAAGtO;GACF,MAAA;GACG,QAAA8D;GACD,OAAA8F;EAAqG,CAAA;EAC5GnI,EAAA,MAAA6M,IAAAtO;EAAAyB,EAAA,MAAAmI;EAAAnI,EAAA,MAAAoI;CAAA,OAAAA,MAAApI,EAAA;CAAA,IAAAiJ;CAAA,IAAAjJ,EAAA,QAAAgI,QAAAhI,EAAA,QAAAF,YAAAE,EAAA,QAAA6B,OAAA7B,EAAA,QAAAoI,KAAA;EAPJa,MAAA,qBAAC,QAAD;GAAYnJ,IAAAA;GAAe,MAAA;GAAgBkI;GAAgB,WAAA;GAA3D,UAAA,CACEnG,KACAuG,GAFK;;EAQEpI,EAAA,MAAAgI;EAAAhI,EAAA,MAAAF;EAAAE,EAAA,MAAA6B;EAAA7B,EAAA,MAAAoI;EAAApI,EAAA,MAAAiJ;CAAA,OAAAA,MAAAjJ,EAAA;CAAA,OARTiJ;AAQS;AAhCb,SAAAkF,QAAA3O,MAAA;CAAA,OAO2BA,KAAI0N,SAAS1S;AAAY;;;;;;;;AA+DpD,SAAA8T,UAAApO,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAmB,MAAA,EAAAZ,OAAAE,aAAAG,aAAAC,gBAAAO;CACjB,MAAAJ,WAAiBmE,UAAU,QAAQ;CACnC,MAAAsK,WAAiB,GAAGzO,SAAQ;CAAU,IAAAK;CAAA,IAAAH,EAAA,OAAAuO,UAAA;EAI1BpO,KAAA,CAACoO,QAAQ;EAACvO,EAAA,KAAAuO;EAAAvO,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAI;CAAA,IAAAJ,EAAA,OAAAX,SAAAW,EAAA,OAAAN,eAAAM,EAAA,OAAAL,eAAAK,EAAA,OAAAT,eAAAS,EAAA,OAAAG,IAAA;EAHsDC,KAAA;GAAAf;GAAAE;GAAAtE,UAGhEkF;GAAU3F,aACPgU;GAA0B9O;GAAAC;EAGzC;EAACK,EAAA,KAAAX;EAAAW,EAAA,KAAAN;EAAAM,EAAA,KAAAL;EAAAK,EAAA,KAAAT;EAAAS,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAPD,MAAA,EAAAvE,QAAAwD,cAAA2B,UAAwChB,YAAY,cAAcE,UAAUM,EAO3E;CAAE,IAAAI;CAAA,IAAAR,EAAA,OAAAvE,UAAAuE,EAAA,OAAAX,SAAAW,EAAA,QAAAY,OAAA;EAAA,IAAAD;EAAA,IAAAX,EAAA,QAAAvE,UAAAuE,EAAA,QAAAY,OAAA;GAGuBD,MAAAI,QAAAgM,UACtBnM,MAAKI,IAAKxB,MASL,IATL,CACK;IAAAtH,MACO;IAAkB+U,YACZ;KAAA5T,IACNmG,OAAInG;KAAGkT,OACJ9Q,OAAM8Q,MAAO/M,OAAI+M,UAAW/M,OAAIwO,OAAQ7P,WAAWqB,OAAIwO,KAAM,CAAA3P,QAASjG,YAAYoH,OAAIgN,cAAJO,KAAwB,EAAE;IACrH;IAACG,UACS;KAAAhV,MAAQ;KAAgBsC,aAAegF,OAAIhF;IAAa;GACpE,CAAC,IARL,CAAA;GASMwF,EAAA,MAAAvE;GAAAuE,EAAA,MAAAY;GAAAZ,EAAA,MAAAW;EAAA,OAAAA,KAAAX,EAAA;EAVEQ,KAAAnB,MAAK4H,QAAStG,EAWxB;EAACX,EAAA,KAAAvE;EAAAuE,EAAA,KAAAX;EAAAW,EAAA,MAAAY;EAAAZ,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,QAAAQ,IAAA;EAbUG,KAAA;GAAAzI,MACL;GAA4ByS,UACxBnK;EAYZ;EAACR,EAAA,MAAAQ;EAAAR,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAdD,MAAAgI,OAAarH;CAcX,IAAAO;CAAA,IAAAlB,EAAA,QAAAvE,UAAAuE,EAAA,QAAAf,cAAA;EACciC,KAAAlC,OAAOC,cAAcxD,OAAM2R,OAAQ,yBAAyB,GAAI,CAAC;EAACpN,EAAA,MAAAvE;EAAAuE,EAAA,MAAAf;EAAAe,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAlF,MAAAsN,UAAgBpM;CAAmE,IAAAC;CAAA,IAAAM;CAAA,IAAAzB,EAAA,QAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAO3DtB,KAAA,CAAC,OAAO,OAAO;EACdM,KAAA;GAAC;GAAQ1C;GAAQ;GAAG;EAAC;EAACiB,EAAA,MAAAmB;EAAAnB,EAAA,MAAAyB;CAAA,OAAA;EAAAN,KAAAnB,EAAA;EAAAyB,KAAAzB,EAAA;CAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAvE,QAAA;EAChBiG,KAAAjG,OAAM8Q,MAAO,6BAA6B;EAACvM,EAAA,MAAAvE;EAAAuE,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAAA,IAAA4B;CAAA,IAAA5B,EAAA,QAAAsN,WAAAtN,EAAA,QAAA0B,IAAA;EAH7DE,KAAA;GAAA,gBACWT;GAAgB,iBACfM;GAAsB,uBAChBC;GAA2C,uBAC3C;GAAG,kBACR4L;GAAO,yBACAA;EAC3B;EAACtN,EAAA,MAAAsN;EAAAtN,EAAA,MAAA0B;EAAA1B,EAAA,MAAA4B;CAAA,OAAAA,KAAA5B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAAuO,YAAAvO,EAAA,QAAA4B,IAAA;EAVHD,MAAA,oBAAC,OAAD;GACM4M,IAAAA;GACC,MAAA;GACE,OAAA3M;EAON,CAAA;EACD5B,EAAA,MAAAuO;EAAAvO,EAAA,MAAA4B;EAAA5B,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAAA,IAAA6B;CAAA,IAAA7B,EAAA,QAAAgI,QAAAhI,EAAA,QAAAF,YAAAE,EAAA,QAAA2B,KAAA;EAZJE,MAAA,oBAAC,QAAD;GAAY/B,IAAAA;GAAe,MAAA;GAAgBkI;GAAgB,WAAA;GACzDrG,UAAAA;EADK,CAAA;EAaE3B,EAAA,MAAAgI;EAAAhI,EAAA,MAAAF;EAAAE,EAAA,MAAA2B;EAAA3B,EAAA,MAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CAAA,OAbT6B;AAaS;AAzCb,SAAA2M,QAAAhP,MAAA;CAAA,OAO2BA,KAAIhF;AAAY;;;;;;;;AAwE3C,SAAAoU,UAAA1O,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAmB,MAAA,EAAA6L,UAAA4C,MAAAvO,IAAAwO,UAAApC,OAAAyB,MAAA1U,OAAAgH,UAAAtB,QAAA5D,SAAA8J,UAAAF,cAAA9E;CAEjB,MAAAwO,OAAAvO,OAAAE,KAAAA,IAAA,SAAAF;CAWA,MAAA,EAAAzE,WAAmBW,cAAc,YAAY;CAC7C,MAAAwS,OAAavV,UAAUoV,SAAS,UAAUhT,OAAMxB,QAAzBmG,KAAAA;CACvB,MAAAyO,WAAiBvC,UAAUyB,OAAO7P,WAAW6P,KAAK,CAAA3P,QAAvBgC,KAAAA;CAGZ,MAAAD,KAAA0L,SAAQ;CACT,MAAAtL,KAAAsL,SAAQ;CAAG,IAAAnL;CAAA,IAAAX,EAAA,OAAA5E,SAAA;EAGZuF,MAAAtF,UAAA;GACPA,MAAK0M,cAAcgH,gBAAiB;GACpC3T,UAAU;EAAC;EACZ4E,EAAA,KAAA5E;EAAA4E,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAgF,WAAA;EAGY9D,KAAA/I,GAAG,mBAAmB6M,SAAS;EAAChF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAE5B,MAAAmB,KAAAb,YAAAD,KAAAA;CACF,MAAAoB,KAAAzC,UAAAqB,KAAAA;CACK,MAAAqB,KAAAtG,UAAA,KAAAiF,KAAAA;CACZ,MAAAuB,KAAAiN,OAAA,QAAAxO,KAAAA;CAAwB,IAAAsB;CAAA,IAAA3B,EAAA,OAAA8O,UAAA;EAGvBnN,MAAAmN,WAAY,EAAA,gBAAkBA,SAAS,IAAvCzO,KAAAA;EAA4EL,EAAA,KAAA8O;EAAA9O,EAAA,KAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAAA,IAAA6B;CAAA,IAAA7B,EAAA,OAAAkF,YAAAlF,EAAA,OAAA0O,QAAA1O,EAAA,OAAA2O,UAAA;EAElF9M,MAAAqD,aAAawJ,SAAS,UAAUC,YAAY,OAA/BA,WAAiDD,SAAS,UAAU,oBAAC,YAAD,CAAW,CAAA,IAA9B;EAAyC1O,EAAA,KAAAkF;EAAAlF,EAAA,KAAA0O;EAAA1O,EAAA,KAAA2O;EAAA3O,EAAA,KAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CAAA,IAAAqC;CAAA,IAAArC,EAAA,QAAA0O,QAAA1O,EAAA,QAAA6O,QAAA7O,EAAA,QAAA2B,OAAA3B,EAAA,QAAA6B,OAAA7B,EAAA,QAAAkB,MAAAlB,EAAA,QAAAmB,MAAAnB,EAAA,QAAAyB,MAAAzB,EAAA,QAAA0B,MAAA1B,EAAA,QAAA4B,IAAA;EAX1GS,MAAA,oBAAA,OAAA;GACa,WAAAnB;GACAwN,aAAAA;GACI,iBAAAvN;GACF,eAAAM;GACK,oBAAAC;GACZ,MAAAE;GACMiN,cAAAA;GACLA,OAAAA;GACA,OAAAlN;GAENE,UAAAA;EACG,CAAA;EAAA7B,EAAA,MAAA0O;EAAA1O,EAAA,MAAA6O;EAAA7O,EAAA,MAAA2B;EAAA3B,EAAA,MAAA6B;EAAA7B,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;EAAAnB,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;EAAA1B,EAAA,MAAA4B;EAAA5B,EAAA,MAAAqC;CAAA,OAAAA,MAAArC,EAAA;CAAA,IAAAsC;CAAA,IAAAtC,EAAA,QAAA8L,SAAA,MAAA9L,EAAA,QAAA8L,SAAA,MAAA9L,EAAA,QAAAqC,OAAArC,EAAA,QAAAW,IAAA;EAtBR2B,MAAA,oBAAC,QAAD;GACa,WAAAlC;GACD,UAAAI;GACH,QAAA;GAEE,SAAAG;GAKT0B,UAAAA;EAVK,CAAA;EAuBErC,EAAA,MAAA8L,SAAA;EAAA9L,EAAA,MAAA8L,SAAA;EAAA9L,EAAA,MAAAqC;EAAArC,EAAA,MAAAW;EAAAX,EAAA,MAAAsC;CAAA,OAAAA,MAAAtC,EAAA;CAAA,OAvBTsC;AAuBS;AAIb,SAAA0M,aAAA;CAAA,MAAAhP,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAwC,OAAAC,IAAA,2BAAA,GAAA;EAEIvC,KAAA,qBAAA,OAAA;GAAa,SAAA;GAAkB,OAAA;GAAa,QAAA;GAAW,MAAA;GAAc,QAAA;GAA4B,aAAA;GAAK,eAAA;GAAtG,UAAA,CACE,oBAAA,QAAA;IAAQ,GAAA;IAA0C,gBAAA;GAAO,CAAA,GACzD,oBAAA,QAAA;IAAQ,GAAA;IAA8B,gBAAA;GAAO,CAAA,CACzC;;EAAAF,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,OAHNE;AAGM;;;;;;;;;;;;AAoBV,SAAAgP,SAAAhP,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAA,IAAA+E;CAAA,IAAA8G;CAAA,IAAAxG;CAAA,IAAAnF;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAE,IAAA;EAAkB,CAAA,CAAA4L,UAAA9G,WAAAmK,QAAAhP,IAAAiP,UAAAhP,IAAA,GAAAkF,SAAApF;EAAiFF,EAAA,KAAAE;EAAAF,EAAA,KAAAgF;EAAAhF,EAAA,KAAA8L;EAAA9L,EAAA,KAAAsF;EAAAtF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAA4E,YAAAhF,EAAA;EAAA8L,WAAA9L,EAAA;EAAAsF,QAAAtF,EAAA;EAAAG,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;CAAA;CAA1D,MAAAmP,SAAAhP,OAAAE,KAAAA,IAAA,KAAAF;CAAa,MAAAiP,WAAAhP,OAAAC,KAAAA,IAAA,UAAAD;CAGrC,MAAAI,KAAAsL,SAAQ;CACT,MAAAnL,KAAAmL,SAAQ;CAAG,IAAA5K;CAAA,IAAAlB,EAAA,OAAAgF,WAAA;EAGV9D,KAAA/I,GAAG,kBAAkB6M,SAAS;EAAChF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,OAAAoP,YAAApP,EAAA,OAAAmP,UAAAnP,EAAA,QAAA8L,SAAA,MAAA9L,EAAA,QAAA8L,SAAA,MAAA9L,EAAA,QAAAsF,SAAAtF,EAAA,QAAAkB,IAAA;EAL5CC,KAAA,oBAAC,OAAD;GACa,WAAAX;GACD,UAAAG;GACFwO;GACEC;GACC,WAAAlO;GAA+B,GACtCoE;EAAK,CAAA;EACTtF,EAAA,KAAAoP;EAAApP,EAAA,KAAAmP;EAAAnP,EAAA,MAAA8L,SAAA;EAAA9L,EAAA,MAAA8L,SAAA;EAAA9L,EAAA,MAAAsF;EAAAtF,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OAPFmB;AAOE;;;;;;;;AAWN,SAAAkO,WAAAnP,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAA,IAAA+E;CAAA,IAAA8G;CAAA,IAAAxG;CAAA,IAAAnF;CAAA,IAAAH,EAAA,OAAAE,IAAA;EAAoB,CAAA,CAAA4L,UAAA9G,WAAAmK,QAAAhP,IAAA,GAAAmF,SAAApF;EAA6DF,EAAA,KAAAE;EAAAF,EAAA,KAAAgF;EAAAhF,EAAA,KAAA8L;EAAA9L,EAAA,KAAAsF;EAAAtF,EAAA,KAAAG;CAAA,OAAA;EAAA6E,YAAAhF,EAAA;EAAA8L,WAAA9L,EAAA;EAAAsF,QAAAtF,EAAA;EAAAG,KAAAH,EAAA;CAAA;CAAtC,MAAAmP,SAAAhP,OAAAE,KAAAA,IAAA,KAAAF;CAG1B,MAAAC,KAAA0L,SAAQ;CACT,MAAAtL,KAAAsL,SAAQ;CAAG,IAAAnL;CAAA,IAAAX,EAAA,OAAAgF,WAAA;EAIVrE,KAAAxI,GAAG,mCAAmC6M,SAAS;EAAChF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,OAAAmP,UAAAnP,EAAA,OAAA8L,SAAA,MAAA9L,EAAA,OAAA8L,SAAA,MAAA9L,EAAA,QAAAsF,SAAAtF,EAAA,QAAAW,IAAA;EAN7DO,KAAA,oBAAC,OAAD;GACa,WAAAd;GACD,UAAAI;GACF2O;GACK,aAAA;GACC,cAAA;GACH,WAAAxO;GAAgD,GACvD2E;EAAK,CAAA;EACTtF,EAAA,KAAAmP;EAAAnP,EAAA,KAAA8L,SAAA;EAAA9L,EAAA,KAAA8L,SAAA;EAAA9L,EAAA,MAAAsF;EAAAtF,EAAA,MAAAW;EAAAX,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,OARFkB;AAQE;;AAYN,SAAAuO,WAAAvP,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAA,IAAA+E;CAAA,IAAAM;CAAA,IAAAf;CAAA,IAAApE;CAAA,IAAAH,EAAA,OAAAE,IAAA;EAAoB,CAAA,CAAA4L,UAAA3L,IAAA6E,WAAAT,KAAA,GAAAe,SAAApF;EAAoEF,EAAA,KAAAE;EAAAF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAsF;EAAAtF,EAAA,KAAAuE;EAAAvE,EAAA,KAAAG;CAAA,OAAA;EAAA6E,YAAAhF,EAAA;EAAAsF,QAAAtF,EAAA;EAAAuE,MAAAvE,EAAA;EAAAG,KAAAH,EAAA;CAAA;CAAlE,MAAA8L,WAAA3L,OAAAE,KAAAA,IAAA,aAAAF;CAAqB,IAAAC;CAAA,IAAAJ,EAAA,OAAAgF,WAAA;EACR5E,KAAAjI,GAAG,oBAAoB6M,SAAS;EAAChF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAA8L,YAAA9L,EAAA,OAAAsF,SAAAtF,EAAA,OAAAuE,OAAAvE,EAAA,QAAAI,IAAA;EAA3DI,KAAA,oBAAA,OAAA;GAAU+D;GAAgB,WAAAnE;GAAkD0L,iBAAAA;GAAQ,GAAMxG;EAAK,CAAA;EAAItF,EAAA,KAAA8L;EAAA9L,EAAA,KAAAsF;EAAAtF,EAAA,KAAAuE;EAAAvE,EAAA,MAAAI;EAAAJ,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OAAnGQ;AAAmG;;;;;;;;;;;;;;;AA+C5G,SAAAyP,UAAA/P,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAA,IAAA+E;CAAA,IAAA3F;CAAA,IAAAyQ;CAAA,IAAAC;CAAA,IAAAzK;CAAA,IAAAf;CAAA,IAAApE;CAAA,IAAAC;CAAA,IAAAI;CAAA,IAAAR,EAAA,OAAAE,IAAA;EAAmB,CAAA,CAAAb,OAAAwQ,eAAA1P,IAAAZ,aAAAa,IAAA0P,qBAAAC,oBAAAC,eAAAxP,IAAAwE,WAAAT,KAAA,GAAAe,SAAApF;EAUFF,EAAA,KAAAE;EAAAF,EAAA,KAAAgF;EAAAhF,EAAA,KAAAX;EAAAW,EAAA,KAAA8P;EAAA9P,EAAA,KAAA+P;EAAA/P,EAAA,KAAAsF;EAAAtF,EAAA,KAAAuE;EAAAvE,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAQ;CAAA,OAAA;EAAAwE,YAAAhF,EAAA;EAAAX,QAAAW,EAAA;EAAA8P,sBAAA9P,EAAA;EAAA+P,qBAAA/P,EAAA;EAAAsF,QAAAtF,EAAA;EAAAuE,MAAAvE,EAAA;EAAAG,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;EAAAQ,KAAAR,EAAA;CAAA;CARf,MAAA6P,gBAAA1P,OAAAE,KAAAA,IAAA,SAAAF;CAAsB,IAAAQ;CAAA,IAAAX,EAAA,QAAAI,IAAA;EACtBO,KAAAP,OAAAC,KAAAA,IAAA,CAAA,IAAAD;EAAgBJ,EAAA,MAAAI;EAAAJ,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAhB,MAAAT,cAAAoB;CAGA,MAAAqP,gBAAAxP,OAAAH,KAAAA,IAAA,QAAAG;CAKA,MAAA9E,SAAexF,MAAKqG,IAAKJ,UAAkB,CAAC,EAAAT,UAA7BpB;CAA+C,IAAA4G;CAAA,IAAAlB,EAAA,QAAAX,OAAA;EAC3C6B,KAAA7B,MAAKzB,MAAOsS,OAAgC;EAAClQ,EAAA,MAAAX;EAAAW,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAhE,MAAAmQ,aAAmBjP;CAA8C,IAAAC;CAAA,IAAAnB,EAAA,QAAA8P,uBAAA9P,EAAA,QAAAT,eAAAS,EAAA,QAAA6P,eAAA;EAClD1O,MAAA9H,OAAA;GACb,MAAAwK,KAAWtE,YAAW8H,SAAUhO,EAAE;GAClC,IAAIwW,kBAAkB,UAAUC,sBAAsBjM,KAAA,CAAA,IAAA,CAAWxK,EAAE,CAAC;QAC/DyW,sBAAsBjM,KAAKtE,YAAWsB,QAAQ6H,MAAOA,MAAMrP,EAAyB,IAA9D,CAAA,GAA+CkG,aAAalG,EAAE,CAAC;EAAE;EAC7F2G,EAAA,MAAA8P;EAAA9P,EAAA,MAAAT;EAAAS,EAAA,MAAA6P;EAAA7P,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAJD,MAAAoQ,SAAejP;CAIb,IAAAM;CAAA,IAAAzB,EAAA,QAAAgF,WAAA;EAE0BvD,KAAAtJ,GAAG,kBAAkB6M,SAAS;EAAChF,EAAA,MAAAgF;EAAAhF,EAAA,MAAAyB;CAAA,OAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,IAAA1B,EAAA,QAAAmQ,cAAAnQ,EAAA,QAAAX,SAAAW,EAAA,QAAAtE,UAAAsE,EAAA,QAAA+P,sBAAA/P,EAAA,QAAAgQ,eAAA;EACtDtO,KAAAqO,sBAAAC,iBACC,oBAAA,UAAA;GACO,MAAA;GACK,WAAA;GACD,eAAMD,mBAAmB1Q,MAAK7D,IAAK6U,OAAiB,GAAG,CAACF,UAAU;GAE1EA,UAAAA,aAAazU,OAAM3B,UAAW2B,OAAM5B;EAC9B,CAAA;EACVkG,EAAA,MAAAmQ;EAAAnQ,EAAA,MAAAX;EAAAW,EAAA,MAAAtE;EAAAsE,EAAA,MAAA+P;EAAA/P,EAAA,MAAAgQ;EAAAhQ,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAAA,IAAA4B;CAAA,IAAA5B,EAAA,QAAAX,SAAAW,EAAA,QAAAtE,UAAAsE,EAAA,QAAA+P,sBAAA/P,EAAA,QAAAT,eAAAS,EAAA,QAAA6P,iBAAA7P,EAAA,QAAAoQ,QAAA;EAAA,IAAAzO;EAAA,IAAA3B,EAAA,QAAAtE,UAAAsE,EAAA,QAAA+P,sBAAA/P,EAAA,QAAAT,eAAAS,EAAA,QAAA6P,iBAAA7P,EAAA,QAAAoQ,QAAA;GAEYzO,OAAAqC,WAAA;IACT,MAAA1D,WAAiBf,YAAW8H,SAAU7H,OAAInG,EAAG;IAC7C,MAAAsW,UAAgBnQ,OAAImQ,YAAa;IACjC,MAAAW,UACE,qBAAAe,UAAA,EAAA,UAAA;KACE,oBAAA,QAAA;MAAgB,WAAA;MAAgC,OAAA,EAAA,aAAe7R,OAAI+M,MAAO;KAAwB,CAAA;KAClG,oBAAA,QAAA;MAAgB,WAAA;MAAyB/M,UAAAA,OAAIlG;KAAc,CAAA;KAC1DkG,OAAIlC,SAAU,QAAQ,oBAAA,QAAA;MAAgB,WAAA;MAAyBkC,UAAAA,OAAIlC;KAAc,CAAA;IAAA,EAAA,CAAA;IAEpF,OAEA,qBAAA,MAAA;KAEY,WAAA;KACK,iBAAAgD,YAAAD,KAAAA;KACF,eAAAsP,UAAAtP,KAAAA,IAAA;KAJf,UAAA,CAMGwP,kBAAkB,SACjB,oBAAA,QAAA;MAAgB,WAAA;MAAyBS,UAAAA;KAAe,CAAA,IAExD,oBAAA,UAAA;MAAa,MAAA;MAAmB,WAAA;MAAsChQ,gBAAAA;MAAmB,eAAM8P,OAAO5Q,OAAInG,EAAG;MAC1GiX,UAAAA;KACM,CAAA,GAEVP,sBACC,oBAAA,UAAA;MACO,MAAA;MACK,WAAA;MACE,cAAA,GAAGJ,UAAUjU,OAAMzB,OAAQyB,OAAM1B,KAAK,GAAI,OAAOwF,OAAIlG,UAAW,WAAWkG,OAAIlG,QAASkG,OAAInG;MAC/F,eAAM0W,mBAAmB,CAACvQ,OAAInG,EAAG,GAAG,CAACsW,OAAO;MAEpDA,UAAAA,UAAU,oBAAC,SAAD,CAAQ,CAAA,IAAM,oBAAC,YAAD,CAAW,CAAA;KAC7B,CAAA,CAER;IAtBEnQ,GAAAA,OAAInG,EAsBN;GAAA;GAER2G,EAAA,MAAAtE;GAAAsE,EAAA,MAAA+P;GAAA/P,EAAA,MAAAT;GAAAS,EAAA,MAAA6P;GAAA7P,EAAA,MAAAoQ;GAAApQ,EAAA,MAAA2B;EAAA,OAAAA,MAAA3B,EAAA;EApCA4B,KAAAvC,MAAK7D,IAAKmG,GAoCV;EAAC3B,EAAA,MAAAX;EAAAW,EAAA,MAAAtE;EAAAsE,EAAA,MAAA+P;EAAA/P,EAAA,MAAAT;EAAAS,EAAA,MAAA6P;EAAA7P,EAAA,MAAAoQ;EAAApQ,EAAA,MAAA4B;CAAA,OAAAA,KAAA5B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAA4B,IAAA;EArCJD,MAAA,oBAAA,MAAA;GAAc,WAAA;GACXC,UAAAA;EAqCE,CAAA;EAAA5B,EAAA,MAAA4B;EAAA5B,EAAA,MAAA2B;CAAA,OAAAA,MAAA3B,EAAA;CAAA,IAAA6B;CAAA,IAAA7B,EAAA,QAAAsF,SAAAtF,EAAA,QAAAuE,OAAAvE,EAAA,QAAA6P,iBAAA7P,EAAA,QAAA2B,OAAA3B,EAAA,QAAAyB,MAAAzB,EAAA,QAAA0B,IAAA;EAhDPG,MAAA,qBAAA,OAAA;GAAU0C;GAAgB,WAAA9C;GAAsDoO,uBAAAA;GAAa,GAAMvK;GAAnG,UAAA,CACG5D,IASDC,GAuCI;;EAAA3B,EAAA,MAAAsF;EAAAtF,EAAA,MAAAuE;EAAAvE,EAAA,MAAA6P;EAAA7P,EAAA,MAAA2B;EAAA3B,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;EAAA1B,EAAA,MAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CAAA,OAjDN6B;AAiDM;AApEV,SAAAwO,QAAAtP,QAAA;CAAA,OAwBgEvB,OAAInG;AAAG;AAxBvE,SAAA6W,QAAA1Q,MAAA;CAAA,OAY2CA,KAAImQ,YAAa;AAAK;;AAgEjE,SAAAa,mBAAAtQ,IAAA;CAAA,MAAAF,IAAAC,EAAA,EAAA;CAAA,IAAAqF;CAAA,IAAAnF;CAAA,IAAAH,EAAA,OAAAE,IAAA;EAA4B,CAAA,CAAAuQ,MAAAtQ,IAAA,GAAAmF,SAAApF;EAAkDF,EAAA,KAAAE;EAAAF,EAAA,KAAAsF;EAAAtF,EAAA,KAAAG;CAAA,OAAA;EAAAmF,QAAAtF,EAAA;EAAAG,KAAAH,EAAA;CAAA;CAAhD,MAAAyQ,OAAAtQ,OAAAE,KAAAA,IAAA,OAAAF;CAC5B,MAAA,EAAAxE,YAAAC,WAAAC,iBAAgDQ,cAAc,qBAAqB;CAAE,IAAA+D;CAAA,IAAAJ,EAAA,OAAArE,YAAA;EAIxEyE,KAAAzE,WAAUH,IAAKkV,OAAoD;EAAC1Q,EAAA,KAAArE;EAAAqE,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAApE,aAAAoE,EAAA,OAAAsF,SAAAtF,EAAA,OAAAnE,gBAAAmE,EAAA,OAAAyQ,QAAAzQ,EAAA,OAAAI,IAAA;EAF/EI,KAAA,oBAAC,kBAAD;GACQiQ;GACG,SAAArQ;GACFxE,OAAAA;GACQC,eAAAA;GAAY,GACvByJ;EAAK,CAAA;EACTtF,EAAA,KAAApE;EAAAoE,EAAA,KAAAsF;EAAAtF,EAAA,KAAAnE;EAAAmE,EAAA,KAAAyQ;EAAAzQ,EAAA,KAAAI;EAAAJ,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OANFQ;AAME;;;;;;;;;;;;;;;;;;;AATN,SAAAkQ,QAAA7F,OAAA;CAAA,OAK0C;EAAArN,OAASqN,MAAKxR;EAAGC,OAASuR,MAAKvR;CAAO;AAAC;AA0BjF,IAAahD,QAAM;CACjBqa,MAAMxL;CACNyL,QAAQjE;CACRkE,OAAO3C;CACP4C,QAAQxC;CACR9X,QAAQoY;CACRlY,OAAOwY;CACP6B,SAAS1B;CACT2B,SAASvB;CACTwB,QAAQhB;CACRiB,iBAAiBV;AACnB"}
|
|
@@ -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.1",
|
|
4
4
|
"description": "Optimum's customizable React component library, built on Base UI.",
|
|
5
5
|
"categories": [
|
|
6
6
|
"Theme",
|
|
@@ -5828,7 +5828,7 @@
|
|
|
5828
5828
|
"parts": [
|
|
5829
5829
|
{
|
|
5830
5830
|
"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
|
|
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. MapLibre's worker is bundled and runs from a blob URL, so a\nstrict Content-Security-Policy needs `worker-src blob:`.",
|
|
5832
5832
|
"propsType": "MapRootProps",
|
|
5833
5833
|
"props": [
|
|
5834
5834
|
{
|
package/dist/index.js
CHANGED