@lumeo-ui/mcp-server 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumeo-ui/mcp-server",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Model Context Protocol server for the Lumeo Blazor component library. Lets LLMs (Claude, Copilot, Cursor) author correct Lumeo markup.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/components-api-schema.json",
3
- "version": "3.1.0",
4
- "generated": "2026-05-22T09:36:50.7771470Z",
3
+ "version": "3.2.0",
4
+ "generated": "2026-05-24T21:42:54.3485353Z",
5
5
  "stats": {
6
6
  "componentCount": 154,
7
- "totalParameters": 3660,
7
+ "totalParameters": 3746,
8
8
  "totalEnums": 65,
9
9
  "totalRecords": 63,
10
10
  "thinFallbacks": []
@@ -15896,6 +15896,7 @@
15896
15896
  "UI/DataGrid/DataGridLayoutService.cs",
15897
15897
  "UI/DataGrid/DataGridPagination.razor",
15898
15898
  "UI/DataGrid/DataGridRow.razor",
15899
+ "UI/DataGrid/DataGridRowKeys.cs",
15899
15900
  "UI/DataGrid/DataGridServerService.cs",
15900
15901
  "UI/DataGrid/DataGridState.cs",
15901
15902
  "UI/DataGrid/DataGridToolbar.razor",
@@ -17142,7 +17143,9 @@
17142
17143
  "fileName": "DataGridColumnVisibility.razor",
17143
17144
  "namespace": "Lumeo",
17144
17145
  "inheritsFrom": null,
17145
- "implements": [],
17146
+ "implements": [
17147
+ "IAsyncDisposable"
17148
+ ],
17146
17149
  "parameters": [
17147
17150
  {
17148
17151
  "name": "Columns",
@@ -18183,7 +18186,9 @@
18183
18186
  "fileName": "DataGridToolbarColumns.razor",
18184
18187
  "namespace": "Lumeo",
18185
18188
  "inheritsFrom": null,
18186
- "implements": [],
18189
+ "implements": [
18190
+ "IAsyncDisposable"
18191
+ ],
18187
18192
  "parameters": [
18188
18193
  {
18189
18194
  "name": "Context",
@@ -18227,7 +18232,9 @@
18227
18232
  "fileName": "DataGridToolbarExport.razor",
18228
18233
  "namespace": "Lumeo",
18229
18234
  "inheritsFrom": null,
18230
- "implements": [],
18235
+ "implements": [
18236
+ "IAsyncDisposable"
18237
+ ],
18231
18238
  "parameters": [
18232
18239
  {
18233
18240
  "name": "Context",
@@ -18271,7 +18278,9 @@
18271
18278
  "fileName": "DataGridToolbarLayouts.razor",
18272
18279
  "namespace": "Lumeo",
18273
18280
  "inheritsFrom": null,
18274
- "implements": [],
18281
+ "implements": [
18282
+ "IAsyncDisposable"
18283
+ ],
18275
18284
  "parameters": [
18276
18285
  {
18277
18286
  "name": "Context",
@@ -25959,11 +25968,20 @@
25959
25968
  "name": "Map",
25960
25969
  "category": "Data Display",
25961
25970
  "subcategory": null,
25962
- "description": "Interactive geographic map with declarative markersLeaflet wrapper, open-source tiles, no API key required.",
25971
+ "description": "Interactive geographic map powered by MapLibre GL markers, polylines, polygons, circles, arcs, heatmaps, legend overlays, and popups; CARTO vector basemaps, no API key required.",
25963
25972
  "nugetPackage": "Lumeo.Maps",
25964
25973
  "files": [
25965
25974
  "UI/Map/Map.razor",
25966
- "UI/Map/MapMarker.razor"
25975
+ "UI/Map/MapArc.razor",
25976
+ "UI/Map/MapCircle.razor",
25977
+ "UI/Map/MapHeatmap.razor",
25978
+ "UI/Map/MapLegend.razor",
25979
+ "UI/Map/MapLegendItem.razor",
25980
+ "UI/Map/MapMarker.razor",
25981
+ "UI/Map/MapPolygon.razor",
25982
+ "UI/Map/MapPolyline.razor",
25983
+ "UI/Map/MapPopup.razor",
25984
+ "UI/Map/MapShape.cs"
25967
25985
  ],
25968
25986
  "namespace": "Lumeo",
25969
25987
  "inheritsFrom": null,
@@ -26014,8 +26032,16 @@
26014
26032
  {
26015
26033
  "name": "TileLayer",
26016
26034
  "type": "string",
26017
- "default": "\"OpenStreetMap\"",
26018
- "description": "Accepts a preset name (\"OpenStreetMap\", \"CartoLight\", \"CartoDark\") or a raw tile URL template (e.g. \"https://your.tiles/{z}/{x}/{y}.png\").",
26035
+ "default": "\"Auto\"",
26036
+ "description": "Accepts a CARTO style preset (Positron, DarkMatter, Voyager), a legacy raster name (OpenStreetMap, CartoLight, CartoDark, Satellite, Terrain) — kept as aliases pointing at the closest GL vector style — or a raw MapLibre style.json URL. Auto (the default) picks Positron or DarkMatter based on the host page's theme, matching mapcn.dev.",
26037
+ "isCascading": false,
26038
+ "captureUnmatched": false
26039
+ },
26040
+ {
26041
+ "name": "Layers",
26042
+ "type": "string[]?",
26043
+ "default": null,
26044
+ "description": "When set, renders a chip-style switcher in the top-right that lets the user pick between presets (or custom { name, url } records).",
26019
26045
  "isCascading": false,
26020
26046
  "captureUnmatched": false
26021
26047
  },
@@ -26039,7 +26065,63 @@
26039
26065
  "name": "ScrollWheelZoom",
26040
26066
  "type": "bool",
26041
26067
  "default": "true",
26042
- "description": "Mirrors Leaflet's default (true). Set to false in dense scrollable page layouts to avoid trapping page scroll inside the map.",
26068
+ "description": null,
26069
+ "isCascading": false,
26070
+ "captureUnmatched": false
26071
+ },
26072
+ {
26073
+ "name": "Cluster",
26074
+ "type": "bool",
26075
+ "default": null,
26076
+ "description": "Marker clustering via leaflet.markercluster. CDN-loaded on first use; falls back to plain markers if the script fails to fetch.",
26077
+ "isCascading": false,
26078
+ "captureUnmatched": false
26079
+ },
26080
+ {
26081
+ "name": "Geolocate",
26082
+ "type": "bool",
26083
+ "default": null,
26084
+ "description": "Adds a \"My location\" button that geolocates the user.",
26085
+ "isCascading": false,
26086
+ "captureUnmatched": false
26087
+ },
26088
+ {
26089
+ "name": "Fullscreen",
26090
+ "type": "bool",
26091
+ "default": null,
26092
+ "description": "Adds a fullscreen toggle button.",
26093
+ "isCascading": false,
26094
+ "captureUnmatched": false
26095
+ },
26096
+ {
26097
+ "name": "Scale",
26098
+ "type": "bool",
26099
+ "default": null,
26100
+ "description": "Adds a metric scale bar in the bottom-left corner.",
26101
+ "isCascading": false,
26102
+ "captureUnmatched": false
26103
+ },
26104
+ {
26105
+ "name": "Search",
26106
+ "type": "bool",
26107
+ "default": null,
26108
+ "description": "Adds a Nominatim-backed search bar in the top-left.",
26109
+ "isCascading": false,
26110
+ "captureUnmatched": false
26111
+ },
26112
+ {
26113
+ "name": "Projection",
26114
+ "type": "string",
26115
+ "default": "\"mercator\"",
26116
+ "description": "MapLibre projection name. \"mercator\" (default flat web-map) or \"globe\" for a 3-D spherical view. The globe becomes visible at zoom levels roughly 0–3; it blends back to mercator above zoom 4.",
26117
+ "isCascading": false,
26118
+ "captureUnmatched": false
26119
+ },
26120
+ {
26121
+ "name": "AutoFitBounds",
26122
+ "type": "bool",
26123
+ "default": null,
26124
+ "description": "When true the map automatically fits its viewport to include all registered markers and shapes after the first render.",
26043
26125
  "isCascading": false,
26044
26126
  "captureUnmatched": false
26045
26127
  },
@@ -26051,6 +26133,14 @@
26051
26133
  "isCascading": false,
26052
26134
  "captureUnmatched": false
26053
26135
  },
26136
+ {
26137
+ "name": "Overlay",
26138
+ "type": "RenderFragment?",
26139
+ "default": null,
26140
+ "description": "Optional content rendered as an absolutely-positioned overlay inside the map container (z-index 10, pointer-events none on the wrapper so map interaction is not blocked). Use absolute-position classes on your own child element to place chips, legends, or status badges (e.g. class=\"absolute bottom-2 right-2 pointer-events-auto …\").",
26141
+ "isCascading": false,
26142
+ "captureUnmatched": false
26143
+ },
26054
26144
  {
26055
26145
  "name": "OnClick",
26056
26146
  "type": "EventCallback<(double Lat, double Lon)>",
@@ -26098,17 +26188,22 @@
26098
26188
  {
26099
26189
  "name": "MapContext",
26100
26190
  "signature": "MapContext(Map Owner)",
26101
- "description": "Cascading context passed to MapMarker children so they can register themselves with the parent Map. Declared here so consumers don't need an extra using."
26191
+ "description": "Cascading context passed to MapMarker + shape children so they can register themselves with the parent Map."
26102
26192
  }
26103
26193
  ],
26104
26194
  "cssVars": [
26105
- "--color-foreground"
26195
+ "--color-background",
26196
+ "--color-border",
26197
+ "--color-foreground",
26198
+ "--color-muted",
26199
+ "--color-muted-foreground",
26200
+ "--radius"
26106
26201
  ],
26107
26202
  "examples": [],
26108
26203
  "subComponents": {
26109
- "MapMarker": {
26110
- "componentName": "MapMarker",
26111
- "fileName": "MapMarker.razor",
26204
+ "MapArc": {
26205
+ "componentName": "MapArc",
26206
+ "fileName": "MapArc.razor",
26112
26207
  "namespace": "Lumeo",
26113
26208
  "inheritsFrom": null,
26114
26209
  "implements": [
@@ -26116,23 +26211,103 @@
26116
26211
  ],
26117
26212
  "parameters": [
26118
26213
  {
26119
- "name": "Lat",
26214
+ "name": "From",
26215
+ "type": "(double Lat, double Lon)",
26216
+ "default": null,
26217
+ "description": null,
26218
+ "isCascading": false,
26219
+ "captureUnmatched": false
26220
+ },
26221
+ {
26222
+ "name": "To",
26223
+ "type": "(double Lat, double Lon)",
26224
+ "default": null,
26225
+ "description": null,
26226
+ "isCascading": false,
26227
+ "captureUnmatched": false
26228
+ },
26229
+ {
26230
+ "name": "Curvature",
26120
26231
  "type": "double",
26232
+ "default": "0.25",
26233
+ "description": "How tall the arc rises above the straight chord, as a fraction of the chord's length. 0 = straight line, 1 = a full semicircle-ish bulge. Defaults to 0.25.",
26234
+ "isCascading": false,
26235
+ "captureUnmatched": false
26236
+ },
26237
+ {
26238
+ "name": "Color",
26239
+ "type": "string?",
26121
26240
  "default": null,
26122
26241
  "description": null,
26123
26242
  "isCascading": false,
26124
26243
  "captureUnmatched": false
26125
26244
  },
26126
26245
  {
26127
- "name": "Lon",
26246
+ "name": "Weight",
26247
+ "type": "double",
26248
+ "default": "2.5",
26249
+ "description": null,
26250
+ "isCascading": false,
26251
+ "captureUnmatched": false
26252
+ },
26253
+ {
26254
+ "name": "Opacity",
26128
26255
  "type": "double",
26256
+ "default": "0.9",
26257
+ "description": null,
26258
+ "isCascading": false,
26259
+ "captureUnmatched": false
26260
+ },
26261
+ {
26262
+ "name": "DashArray",
26263
+ "type": "string?",
26264
+ "default": "\"5 6\"",
26265
+ "description": "SVG dash pattern. Defaults to \"5 6\" (arcs are dashed by default).",
26266
+ "isCascading": false,
26267
+ "captureUnmatched": false
26268
+ },
26269
+ {
26270
+ "name": "Dashed",
26271
+ "type": "bool",
26272
+ "default": "true",
26273
+ "description": "Set to false to draw the arc as a solid line instead of the default dashed style. Has no effect when DashArray is set explicitly.",
26274
+ "isCascading": false,
26275
+ "captureUnmatched": false
26276
+ },
26277
+ {
26278
+ "name": "HoverColor",
26279
+ "type": "string?",
26280
+ "default": null,
26281
+ "description": "Stroke color on hover. Null = no hover highlight.",
26282
+ "isCascading": false,
26283
+ "captureUnmatched": false
26284
+ },
26285
+ {
26286
+ "name": "HoverWeight",
26287
+ "type": "double?",
26288
+ "default": null,
26289
+ "description": "Stroke width on hover. Null = same as Weight.",
26290
+ "isCascading": false,
26291
+ "captureUnmatched": false
26292
+ },
26293
+ {
26294
+ "name": "Animate",
26295
+ "type": "bool",
26296
+ "default": null,
26297
+ "description": "Animate the arc drawing on first render (line draws from start to end over ~1 s).",
26298
+ "isCascading": false,
26299
+ "captureUnmatched": false
26300
+ },
26301
+ {
26302
+ "name": "Tooltip",
26303
+ "type": "string?",
26129
26304
  "default": null,
26130
26305
  "description": null,
26131
26306
  "isCascading": false,
26132
26307
  "captureUnmatched": false
26133
26308
  },
26134
26309
  {
26135
- "name": "Title",
26310
+ "name": "PopupHtml",
26136
26311
  "type": "string?",
26137
26312
  "default": null,
26138
26313
  "description": null,
@@ -26140,7 +26315,47 @@
26140
26315
  "captureUnmatched": false
26141
26316
  },
26142
26317
  {
26143
- "name": "IconUrl",
26318
+ "name": "MapCtx",
26319
+ "type": "Map.MapContext?",
26320
+ "default": null,
26321
+ "description": null,
26322
+ "isCascading": true,
26323
+ "captureUnmatched": false
26324
+ }
26325
+ ],
26326
+ "events": [],
26327
+ "enums": [],
26328
+ "records": [],
26329
+ "parseFailed": false,
26330
+ "parseError": null
26331
+ },
26332
+ "MapCircle": {
26333
+ "componentName": "MapCircle",
26334
+ "fileName": "MapCircle.razor",
26335
+ "namespace": "Lumeo",
26336
+ "inheritsFrom": null,
26337
+ "implements": [
26338
+ "IDisposable"
26339
+ ],
26340
+ "parameters": [
26341
+ {
26342
+ "name": "Center",
26343
+ "type": "(double Lat, double Lon)",
26344
+ "default": null,
26345
+ "description": "Circle center as (lat, lon).",
26346
+ "isCascading": false,
26347
+ "captureUnmatched": false
26348
+ },
26349
+ {
26350
+ "name": "RadiusMeters",
26351
+ "type": "double",
26352
+ "default": "100",
26353
+ "description": "Radius in meters. Leaflet draws the circle in real-world units, so its pixel size grows/shrinks with zoom.",
26354
+ "isCascading": false,
26355
+ "captureUnmatched": false
26356
+ },
26357
+ {
26358
+ "name": "Color",
26144
26359
  "type": "string?",
26145
26360
  "default": null,
26146
26361
  "description": null,
@@ -26148,16 +26363,48 @@
26148
26363
  "captureUnmatched": false
26149
26364
  },
26150
26365
  {
26151
- "name": "Popup",
26152
- "type": "RenderFragment?",
26366
+ "name": "FillColor",
26367
+ "type": "string?",
26153
26368
  "default": null,
26154
- "description": "Optional rich popup body. When present, it overrides the plain Title as the marker's popup content. The fragment renders into a hidden host div and Leaflet uses the host's innerHTML.",
26369
+ "description": null,
26155
26370
  "isCascading": false,
26156
26371
  "captureUnmatched": false
26157
26372
  },
26158
26373
  {
26159
- "name": "OnClick",
26160
- "type": "EventCallback",
26374
+ "name": "Weight",
26375
+ "type": "double",
26376
+ "default": "2",
26377
+ "description": null,
26378
+ "isCascading": false,
26379
+ "captureUnmatched": false
26380
+ },
26381
+ {
26382
+ "name": "Opacity",
26383
+ "type": "double",
26384
+ "default": "0.9",
26385
+ "description": null,
26386
+ "isCascading": false,
26387
+ "captureUnmatched": false
26388
+ },
26389
+ {
26390
+ "name": "FillOpacity",
26391
+ "type": "double",
26392
+ "default": "0.2",
26393
+ "description": null,
26394
+ "isCascading": false,
26395
+ "captureUnmatched": false
26396
+ },
26397
+ {
26398
+ "name": "Tooltip",
26399
+ "type": "string?",
26400
+ "default": null,
26401
+ "description": null,
26402
+ "isCascading": false,
26403
+ "captureUnmatched": false
26404
+ },
26405
+ {
26406
+ "name": "PopupHtml",
26407
+ "type": "string?",
26161
26408
  "default": null,
26162
26409
  "description": null,
26163
26410
  "isCascading": false,
@@ -26172,20 +26419,603 @@
26172
26419
  "captureUnmatched": false
26173
26420
  }
26174
26421
  ],
26175
- "events": [
26422
+ "events": [],
26423
+ "enums": [],
26424
+ "records": [],
26425
+ "parseFailed": false,
26426
+ "parseError": null
26427
+ },
26428
+ "MapHeatmap": {
26429
+ "componentName": "MapHeatmap",
26430
+ "fileName": "MapHeatmap.razor",
26431
+ "namespace": "Lumeo",
26432
+ "inheritsFrom": null,
26433
+ "implements": [
26434
+ "IDisposable"
26435
+ ],
26436
+ "parameters": [
26176
26437
  {
26177
- "name": "OnClick",
26178
- "type": "EventCallback",
26179
- "description": null
26438
+ "name": "Points",
26439
+ "type": "IEnumerable<(double Lat, double Lon, double Intensity)>",
26440
+ "default": "[]",
26441
+ "description": "Collection of heat points. Each tuple is (lat, lon, intensity) where intensity should be in the range 0–1 (defaults to 1 when not meaningful). Pass a bare (lat, lon) list via a helper or use the convenience constructor that sets intensity to 1.",
26442
+ "isCascading": false,
26443
+ "captureUnmatched": false
26444
+ },
26445
+ {
26446
+ "name": "Radius",
26447
+ "type": "int",
26448
+ "default": "20",
26449
+ "description": "Radius of each point in pixels at full zoom. Defaults to 20.",
26450
+ "isCascading": false,
26451
+ "captureUnmatched": false
26452
+ },
26453
+ {
26454
+ "name": "Opacity",
26455
+ "type": "double",
26456
+ "default": "0.8",
26457
+ "description": "Opacity of the heatmap layer (0–1). Defaults to 0.8.",
26458
+ "isCascading": false,
26459
+ "captureUnmatched": false
26460
+ },
26461
+ {
26462
+ "name": "ColorRamp",
26463
+ "type": "object[]?",
26464
+ "default": null,
26465
+ "description": "Color ramp expressed as a MapLibre interpolation stops list. Format: alternating stop (0–1) and CSS color values. Example: new object[] { 0, \"transparent\", 0.4, \"blue\", 0.8, \"red\", 1, \"orange\" }. Defaults to a blue → cyan → yellow → orange → red ramp.",
26466
+ "isCascading": false,
26467
+ "captureUnmatched": false
26468
+ },
26469
+ {
26470
+ "name": "MapCtx",
26471
+ "type": "Map.MapContext?",
26472
+ "default": null,
26473
+ "description": null,
26474
+ "isCascading": true,
26475
+ "captureUnmatched": false
26180
26476
  }
26181
26477
  ],
26478
+ "events": [],
26182
26479
  "enums": [],
26183
26480
  "records": [],
26184
26481
  "parseFailed": false,
26185
26482
  "parseError": null
26186
- }
26187
- },
26188
- "parseFailed": false,
26483
+ },
26484
+ "MapLegend": {
26485
+ "componentName": "MapLegend",
26486
+ "fileName": "MapLegend.razor",
26487
+ "namespace": "Lumeo",
26488
+ "inheritsFrom": null,
26489
+ "implements": [],
26490
+ "parameters": [
26491
+ {
26492
+ "name": "Title",
26493
+ "type": "string?",
26494
+ "default": null,
26495
+ "description": "Optional title shown above the legend items.",
26496
+ "isCascading": false,
26497
+ "captureUnmatched": false
26498
+ },
26499
+ {
26500
+ "name": "Position",
26501
+ "type": "string",
26502
+ "default": "\"bottom-left\"",
26503
+ "description": "Absolute-position corner shorthand. Defaults to \"bottom-left\". Values: \"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\". Can also pass a raw Tailwind class via Class.",
26504
+ "isCascading": false,
26505
+ "captureUnmatched": false
26506
+ },
26507
+ {
26508
+ "name": "ChildContent",
26509
+ "type": "RenderFragment?",
26510
+ "default": null,
26511
+ "description": null,
26512
+ "isCascading": false,
26513
+ "captureUnmatched": false
26514
+ },
26515
+ {
26516
+ "name": "Class",
26517
+ "type": "string?",
26518
+ "default": null,
26519
+ "description": null,
26520
+ "isCascading": false,
26521
+ "captureUnmatched": false
26522
+ },
26523
+ {
26524
+ "name": "AdditionalAttributes",
26525
+ "type": "Dictionary<string, object>?",
26526
+ "default": null,
26527
+ "description": null,
26528
+ "isCascading": false,
26529
+ "captureUnmatched": true
26530
+ }
26531
+ ],
26532
+ "events": [],
26533
+ "enums": [],
26534
+ "records": [],
26535
+ "parseFailed": false,
26536
+ "parseError": null
26537
+ },
26538
+ "MapLegendItem": {
26539
+ "componentName": "MapLegendItem",
26540
+ "fileName": "MapLegendItem.razor",
26541
+ "namespace": "Lumeo",
26542
+ "inheritsFrom": null,
26543
+ "implements": [],
26544
+ "parameters": [
26545
+ {
26546
+ "name": "Color",
26547
+ "type": "string?",
26548
+ "default": null,
26549
+ "description": "Dot color. Friendly names (\"red\", \"green\", etc.) or any CSS color value.",
26550
+ "isCascading": false,
26551
+ "captureUnmatched": false
26552
+ },
26553
+ {
26554
+ "name": "Label",
26555
+ "type": "string?",
26556
+ "default": null,
26557
+ "description": "Label text shown next to the dot.",
26558
+ "isCascading": false,
26559
+ "captureUnmatched": false
26560
+ },
26561
+ {
26562
+ "name": "Class",
26563
+ "type": "string?",
26564
+ "default": null,
26565
+ "description": null,
26566
+ "isCascading": false,
26567
+ "captureUnmatched": false
26568
+ },
26569
+ {
26570
+ "name": "AdditionalAttributes",
26571
+ "type": "Dictionary<string, object>?",
26572
+ "default": null,
26573
+ "description": null,
26574
+ "isCascading": false,
26575
+ "captureUnmatched": true
26576
+ }
26577
+ ],
26578
+ "events": [],
26579
+ "enums": [],
26580
+ "records": [],
26581
+ "parseFailed": false,
26582
+ "parseError": null
26583
+ },
26584
+ "MapMarker": {
26585
+ "componentName": "MapMarker",
26586
+ "fileName": "MapMarker.razor",
26587
+ "namespace": "Lumeo",
26588
+ "inheritsFrom": null,
26589
+ "implements": [
26590
+ "IDisposable"
26591
+ ],
26592
+ "parameters": [
26593
+ {
26594
+ "name": "Lat",
26595
+ "type": "double",
26596
+ "default": null,
26597
+ "description": null,
26598
+ "isCascading": false,
26599
+ "captureUnmatched": false
26600
+ },
26601
+ {
26602
+ "name": "Lon",
26603
+ "type": "double",
26604
+ "default": null,
26605
+ "description": null,
26606
+ "isCascading": false,
26607
+ "captureUnmatched": false
26608
+ },
26609
+ {
26610
+ "name": "Title",
26611
+ "type": "string?",
26612
+ "default": null,
26613
+ "description": null,
26614
+ "isCascading": false,
26615
+ "captureUnmatched": false
26616
+ },
26617
+ {
26618
+ "name": "IconUrl",
26619
+ "type": "string?",
26620
+ "default": null,
26621
+ "description": "Bitmap icon URL. When set, takes precedence over Variant — we hand Leaflet a plain L.icon and skip the DivIcon path entirely. Anchored bottom-center at 32×32, matching the pre-3.1 default.",
26622
+ "isCascading": false,
26623
+ "captureUnmatched": false
26624
+ },
26625
+ {
26626
+ "name": "Variant",
26627
+ "type": "string",
26628
+ "default": "\"Default\"",
26629
+ "description": "Visual variant for the auto-generated DivIcon. Ignored when IconUrl is set. Defaults to \"Default\" (filled circle). Valid values: \"Default\", \"Outline\", \"Pin\", \"Dot\".",
26630
+ "isCascading": false,
26631
+ "captureUnmatched": false
26632
+ },
26633
+ {
26634
+ "name": "Color",
26635
+ "type": "string?",
26636
+ "default": null,
26637
+ "description": "Override the marker's theme color. Accepts a friendly name (\"red\", \"green\", \"yellow\", …) or a raw CSS color (\"#ff0000\", \"hsl(...)\"). Null = theme primary.",
26638
+ "isCascading": false,
26639
+ "captureUnmatched": false
26640
+ },
26641
+ {
26642
+ "name": "Label",
26643
+ "type": "string?",
26644
+ "default": null,
26645
+ "description": "Permanent label rendered above the marker. Use for waypoints or numbered tours. Different from Title (hover tooltip).",
26646
+ "isCascading": false,
26647
+ "captureUnmatched": false
26648
+ },
26649
+ {
26650
+ "name": "LabelHoverOnly",
26651
+ "type": "bool",
26652
+ "default": null,
26653
+ "description": "When true, the Label is hidden by default and only appears on hover. Useful for dense maps where always-on labels create visual noise. Default is false (label always visible).",
26654
+ "isCascading": false,
26655
+ "captureUnmatched": false
26656
+ },
26657
+ {
26658
+ "name": "Icon",
26659
+ "type": "RenderFragment?",
26660
+ "default": null,
26661
+ "description": "Optional inline content inside the marker circle — a single letter, a number, or a small &lt;Blazicon&gt; SVG. The fragment is rendered to a hidden host and its innerHTML is spliced into the DivIcon. Ignored when IconUrl is set.",
26662
+ "isCascading": false,
26663
+ "captureUnmatched": false
26664
+ },
26665
+ {
26666
+ "name": "Popup",
26667
+ "type": "RenderFragment?",
26668
+ "default": null,
26669
+ "description": "Optional rich popup body. When present, it overrides the plain Title as the marker's popup content. The fragment renders into a hidden host div and Leaflet uses the host's innerHTML.",
26670
+ "isCascading": false,
26671
+ "captureUnmatched": false
26672
+ },
26673
+ {
26674
+ "name": "OnClick",
26675
+ "type": "EventCallback",
26676
+ "default": null,
26677
+ "description": null,
26678
+ "isCascading": false,
26679
+ "captureUnmatched": false
26680
+ },
26681
+ {
26682
+ "name": "Draggable",
26683
+ "type": "bool",
26684
+ "default": null,
26685
+ "description": "Allow the user to drag the marker to a new position.",
26686
+ "isCascading": false,
26687
+ "captureUnmatched": false
26688
+ },
26689
+ {
26690
+ "name": "OnDragEnd",
26691
+ "type": "EventCallback<(double Lat, double Lon)>",
26692
+ "default": null,
26693
+ "description": "Fires with the new (lat, lon) after the user finishes dragging the marker. Use with two-way binding or to update your own state. Only fires when Draggable is true.",
26694
+ "isCascading": false,
26695
+ "captureUnmatched": false
26696
+ },
26697
+ {
26698
+ "name": "MapCtx",
26699
+ "type": "Map.MapContext?",
26700
+ "default": null,
26701
+ "description": null,
26702
+ "isCascading": true,
26703
+ "captureUnmatched": false
26704
+ }
26705
+ ],
26706
+ "events": [
26707
+ {
26708
+ "name": "OnClick",
26709
+ "type": "EventCallback",
26710
+ "description": null
26711
+ },
26712
+ {
26713
+ "name": "OnDragEnd",
26714
+ "type": "EventCallback<(double Lat, double Lon)>",
26715
+ "description": "Fires with the new (lat, lon) after the user finishes dragging the marker. Use with two-way binding or to update your own state. Only fires when Draggable is true."
26716
+ }
26717
+ ],
26718
+ "enums": [],
26719
+ "records": [],
26720
+ "parseFailed": false,
26721
+ "parseError": null
26722
+ },
26723
+ "MapPolygon": {
26724
+ "componentName": "MapPolygon",
26725
+ "fileName": "MapPolygon.razor",
26726
+ "namespace": "Lumeo",
26727
+ "inheritsFrom": null,
26728
+ "implements": [
26729
+ "IDisposable"
26730
+ ],
26731
+ "parameters": [
26732
+ {
26733
+ "name": "Points",
26734
+ "type": "IEnumerable<(double Lat, double Lon)>",
26735
+ "default": "Array.Empty<(double, double)>()",
26736
+ "description": "Ordered list of (lat, lon) points forming the polygon ring. The first and last points are connected automatically.",
26737
+ "isCascading": false,
26738
+ "captureUnmatched": false
26739
+ },
26740
+ {
26741
+ "name": "Color",
26742
+ "type": "string?",
26743
+ "default": null,
26744
+ "description": null,
26745
+ "isCascading": false,
26746
+ "captureUnmatched": false
26747
+ },
26748
+ {
26749
+ "name": "FillColor",
26750
+ "type": "string?",
26751
+ "default": null,
26752
+ "description": null,
26753
+ "isCascading": false,
26754
+ "captureUnmatched": false
26755
+ },
26756
+ {
26757
+ "name": "Weight",
26758
+ "type": "double",
26759
+ "default": "2",
26760
+ "description": null,
26761
+ "isCascading": false,
26762
+ "captureUnmatched": false
26763
+ },
26764
+ {
26765
+ "name": "Opacity",
26766
+ "type": "double",
26767
+ "default": "0.9",
26768
+ "description": null,
26769
+ "isCascading": false,
26770
+ "captureUnmatched": false
26771
+ },
26772
+ {
26773
+ "name": "FillOpacity",
26774
+ "type": "double",
26775
+ "default": "0.2",
26776
+ "description": null,
26777
+ "isCascading": false,
26778
+ "captureUnmatched": false
26779
+ },
26780
+ {
26781
+ "name": "Tooltip",
26782
+ "type": "string?",
26783
+ "default": null,
26784
+ "description": null,
26785
+ "isCascading": false,
26786
+ "captureUnmatched": false
26787
+ },
26788
+ {
26789
+ "name": "PopupHtml",
26790
+ "type": "string?",
26791
+ "default": null,
26792
+ "description": null,
26793
+ "isCascading": false,
26794
+ "captureUnmatched": false
26795
+ },
26796
+ {
26797
+ "name": "MapCtx",
26798
+ "type": "Map.MapContext?",
26799
+ "default": null,
26800
+ "description": null,
26801
+ "isCascading": true,
26802
+ "captureUnmatched": false
26803
+ }
26804
+ ],
26805
+ "events": [],
26806
+ "enums": [],
26807
+ "records": [],
26808
+ "parseFailed": false,
26809
+ "parseError": null
26810
+ },
26811
+ "MapPolyline": {
26812
+ "componentName": "MapPolyline",
26813
+ "fileName": "MapPolyline.razor",
26814
+ "namespace": "Lumeo",
26815
+ "inheritsFrom": null,
26816
+ "implements": [
26817
+ "IDisposable"
26818
+ ],
26819
+ "parameters": [
26820
+ {
26821
+ "name": "Points",
26822
+ "type": "IEnumerable<(double Lat, double Lon)>",
26823
+ "default": "Array.Empty<(double, double)>()",
26824
+ "description": "Ordered list of (lat, lon) points the polyline visits.",
26825
+ "isCascading": false,
26826
+ "captureUnmatched": false
26827
+ },
26828
+ {
26829
+ "name": "Color",
26830
+ "type": "string?",
26831
+ "default": null,
26832
+ "description": "Stroke color. Friendly name (\"red\", \"blue\", …) or a raw CSS color. Null = theme primary.",
26833
+ "isCascading": false,
26834
+ "captureUnmatched": false
26835
+ },
26836
+ {
26837
+ "name": "Weight",
26838
+ "type": "double",
26839
+ "default": "3",
26840
+ "description": "Stroke width in pixels.",
26841
+ "isCascading": false,
26842
+ "captureUnmatched": false
26843
+ },
26844
+ {
26845
+ "name": "Opacity",
26846
+ "type": "double",
26847
+ "default": "0.9",
26848
+ "description": "Stroke opacity, 0..1.",
26849
+ "isCascading": false,
26850
+ "captureUnmatched": false
26851
+ },
26852
+ {
26853
+ "name": "DashArray",
26854
+ "type": "string?",
26855
+ "default": null,
26856
+ "description": "SVG dash pattern (e.g. \"6 4\" for dashed). Null = solid.",
26857
+ "isCascading": false,
26858
+ "captureUnmatched": false
26859
+ },
26860
+ {
26861
+ "name": "Dashed",
26862
+ "type": "bool",
26863
+ "default": null,
26864
+ "description": "Convenience toggle — renders a standard \"6 4\" dash when true. Ignored when DashArray is set explicitly.",
26865
+ "isCascading": false,
26866
+ "captureUnmatched": false
26867
+ },
26868
+ {
26869
+ "name": "HoverColor",
26870
+ "type": "string?",
26871
+ "default": null,
26872
+ "description": "Stroke color on hover. Null = no hover highlight.",
26873
+ "isCascading": false,
26874
+ "captureUnmatched": false
26875
+ },
26876
+ {
26877
+ "name": "HoverWeight",
26878
+ "type": "double?",
26879
+ "default": null,
26880
+ "description": "Stroke width on hover. Null = same as Weight.",
26881
+ "isCascading": false,
26882
+ "captureUnmatched": false
26883
+ },
26884
+ {
26885
+ "name": "Animate",
26886
+ "type": "bool",
26887
+ "default": null,
26888
+ "description": "Animate the line drawing on first render (draws from start to end over ~1 s).",
26889
+ "isCascading": false,
26890
+ "captureUnmatched": false
26891
+ },
26892
+ {
26893
+ "name": "Tooltip",
26894
+ "type": "string?",
26895
+ "default": null,
26896
+ "description": "Optional hover tooltip text.",
26897
+ "isCascading": false,
26898
+ "captureUnmatched": false
26899
+ },
26900
+ {
26901
+ "name": "PopupHtml",
26902
+ "type": "string?",
26903
+ "default": null,
26904
+ "description": "Optional popup HTML (rendered on click).",
26905
+ "isCascading": false,
26906
+ "captureUnmatched": false
26907
+ },
26908
+ {
26909
+ "name": "MapCtx",
26910
+ "type": "Map.MapContext?",
26911
+ "default": null,
26912
+ "description": null,
26913
+ "isCascading": true,
26914
+ "captureUnmatched": false
26915
+ }
26916
+ ],
26917
+ "events": [],
26918
+ "enums": [],
26919
+ "records": [],
26920
+ "parseFailed": false,
26921
+ "parseError": null
26922
+ },
26923
+ "MapPopup": {
26924
+ "componentName": "MapPopup",
26925
+ "fileName": "MapPopup.razor",
26926
+ "namespace": "Lumeo",
26927
+ "inheritsFrom": null,
26928
+ "implements": [
26929
+ "IDisposable"
26930
+ ],
26931
+ "parameters": [
26932
+ {
26933
+ "name": "Lat",
26934
+ "type": "double",
26935
+ "default": null,
26936
+ "description": "Latitude of the popup anchor point.",
26937
+ "isCascading": false,
26938
+ "captureUnmatched": false
26939
+ },
26940
+ {
26941
+ "name": "Lon",
26942
+ "type": "double",
26943
+ "default": null,
26944
+ "description": "Longitude of the popup anchor point.",
26945
+ "isCascading": false,
26946
+ "captureUnmatched": false
26947
+ },
26948
+ {
26949
+ "name": "IsOpen",
26950
+ "type": "bool",
26951
+ "default": null,
26952
+ "description": "Whether the popup is currently visible.",
26953
+ "isCascading": false,
26954
+ "captureUnmatched": false
26955
+ },
26956
+ {
26957
+ "name": "IsOpenChanged",
26958
+ "type": "EventCallback<bool>",
26959
+ "default": null,
26960
+ "description": null,
26961
+ "isCascading": false,
26962
+ "captureUnmatched": false
26963
+ },
26964
+ {
26965
+ "name": "CloseButton",
26966
+ "type": "bool",
26967
+ "default": "true",
26968
+ "description": "Show a close (×) button inside the popup.",
26969
+ "isCascading": false,
26970
+ "captureUnmatched": false
26971
+ },
26972
+ {
26973
+ "name": "CloseOnClick",
26974
+ "type": "bool",
26975
+ "default": "true",
26976
+ "description": "Close the popup when the user clicks the map background.",
26977
+ "isCascading": false,
26978
+ "captureUnmatched": false
26979
+ },
26980
+ {
26981
+ "name": "Html",
26982
+ "type": "string?",
26983
+ "default": null,
26984
+ "description": "HTML string for the popup body. Overrides ChildContent.",
26985
+ "isCascading": false,
26986
+ "captureUnmatched": false
26987
+ },
26988
+ {
26989
+ "name": "ChildContent",
26990
+ "type": "RenderFragment?",
26991
+ "default": null,
26992
+ "description": "Blazor render fragment for rich popup body. Rendered into a hidden host element; JS reads the innerHTML to open the MapLibre popup.",
26993
+ "isCascading": false,
26994
+ "captureUnmatched": false
26995
+ },
26996
+ {
26997
+ "name": "MapCtx",
26998
+ "type": "Map.MapContext?",
26999
+ "default": null,
27000
+ "description": null,
27001
+ "isCascading": true,
27002
+ "captureUnmatched": false
27003
+ }
27004
+ ],
27005
+ "events": [
27006
+ {
27007
+ "name": "IsOpenChanged",
27008
+ "type": "EventCallback<bool>",
27009
+ "description": null
27010
+ }
27011
+ ],
27012
+ "enums": [],
27013
+ "records": [],
27014
+ "parseFailed": false,
27015
+ "parseError": null
27016
+ }
27017
+ },
27018
+ "parseFailed": false,
26189
27019
  "parseError": null
26190
27020
  },
26191
27021
  "Marquee": {
@@ -29175,6 +30005,14 @@
29175
30005
  "isCascading": false,
29176
30006
  "captureUnmatched": false
29177
30007
  },
30008
+ {
30009
+ "name": "HighlightColor",
30010
+ "type": "string",
30011
+ "default": "\"yellow\"",
30012
+ "description": null,
30013
+ "isCascading": false,
30014
+ "captureUnmatched": false
30015
+ },
29178
30016
  {
29179
30017
  "name": "OnLoaded",
29180
30018
  "type": "EventCallback<int>",
@@ -29191,6 +30029,14 @@
29191
30029
  "isCascading": false,
29192
30030
  "captureUnmatched": false
29193
30031
  },
30032
+ {
30033
+ "name": "OnError",
30034
+ "type": "EventCallback<string>",
30035
+ "default": null,
30036
+ "description": "Fires when the underlying JS load/render fails (CDN unreachable, malformed PDF, worker init failure, …). Receives the exception message. Consumers can use this to surface their own error UI; the built-in EmptyState fallback renders regardless.",
30037
+ "isCascading": false,
30038
+ "captureUnmatched": false
30039
+ },
29194
30040
  {
29195
30041
  "name": "Class",
29196
30042
  "type": "string?",
@@ -29228,6 +30074,11 @@
29228
30074
  "name": "OnPageChanged",
29229
30075
  "type": "EventCallback<int>",
29230
30076
  "description": null
30077
+ },
30078
+ {
30079
+ "name": "OnError",
30080
+ "type": "EventCallback<string>",
30081
+ "description": "Fires when the underlying JS load/render fails (CDN unreachable, malformed PDF, worker init failure, …). Receives the exception message. Consumers can use this to surface their own error UI; the built-in EmptyState fallback renders regardless."
29231
30082
  }
29232
30083
  ],
29233
30084
  "enums": [],
@@ -29244,20 +30095,7 @@
29244
30095
  "--color-ring",
29245
30096
  "--radius"
29246
30097
  ],
29247
- "examples": [
29248
- {
29249
- "title": "Basic",
29250
- "code": "<PdfViewer Src=\"@SamplePdfUrl\"\n @bind-Page=\"_page\"\n @bind-Zoom=\"_zoom\"\n OnLoaded=\"HandleLoaded\"\n Class=\"h-[600px]\" />"
29251
- },
29252
- {
29253
- "title": "With search bar",
29254
- "code": "<PdfViewer Src=\"@SamplePdfUrl\"\n ShowSearch=\"true\"\n Class=\"h-[600px]\" />"
29255
- },
29256
- {
29257
- "title": "Toolbar-less (chromeless embed)",
29258
- "code": "<PdfViewer Src=\"@SamplePdfUrl\"\n ShowToolbar=\"false\"\n Class=\"h-[500px]\" />"
29259
- }
29260
- ],
30098
+ "examples": [],
29261
30099
  "subComponents": {},
29262
30100
  "parseFailed": false,
29263
30101
  "parseError": null
package/src/registry.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/registry-schema.json",
3
- "version": "3.1.0",
4
- "generated": "2026-05-22T09:36:49.7962064Z",
3
+ "version": "3.2.0",
4
+ "generated": "2026-05-24T21:42:53.0619847Z",
5
5
  "components": {
6
6
  "accordion": {
7
7
  "name": "Accordion",
@@ -1030,6 +1030,7 @@
1030
1030
  "UI/DataGrid/DataGridLayoutService.cs",
1031
1031
  "UI/DataGrid/DataGridPagination.razor",
1032
1032
  "UI/DataGrid/DataGridRow.razor",
1033
+ "UI/DataGrid/DataGridRowKeys.cs",
1033
1034
  "UI/DataGrid/DataGridServerService.cs",
1034
1035
  "UI/DataGrid/DataGridState.cs",
1035
1036
  "UI/DataGrid/DataGridToolbar.razor",
@@ -1926,18 +1927,36 @@
1926
1927
  "name": "Map",
1927
1928
  "category": "Data Display",
1928
1929
  "subcategory": null,
1929
- "description": "Interactive geographic map with declarative markersLeaflet wrapper, open-source tiles, no API key required.",
1930
+ "description": "Interactive geographic map powered by MapLibre GL markers, polylines, polygons, circles, arcs, heatmaps, legend overlays, and popups; CARTO vector basemaps, no API key required.",
1930
1931
  "thumbnail": "/preview-cards/map.png",
1931
1932
  "hasDocsPage": true,
1932
1933
  "nugetPackage": "Lumeo.Maps",
1933
1934
  "files": [
1934
1935
  "UI/Map/Map.razor",
1935
- "UI/Map/MapMarker.razor"
1936
+ "UI/Map/MapArc.razor",
1937
+ "UI/Map/MapCircle.razor",
1938
+ "UI/Map/MapHeatmap.razor",
1939
+ "UI/Map/MapLegend.razor",
1940
+ "UI/Map/MapLegendItem.razor",
1941
+ "UI/Map/MapMarker.razor",
1942
+ "UI/Map/MapPolygon.razor",
1943
+ "UI/Map/MapPolyline.razor",
1944
+ "UI/Map/MapPopup.razor",
1945
+ "UI/Map/MapShape.cs"
1946
+ ],
1947
+ "dependencies": [
1948
+ "overlay"
1949
+ ],
1950
+ "packageDependencies": [
1951
+ "Blazicons.Lucide"
1936
1952
  ],
1937
- "dependencies": [],
1938
- "packageDependencies": [],
1939
1953
  "cssVars": [
1940
- "--color-foreground"
1954
+ "--color-background",
1955
+ "--color-border",
1956
+ "--color-foreground",
1957
+ "--color-muted",
1958
+ "--color-muted-foreground",
1959
+ "--radius"
1941
1960
  ],
1942
1961
  "registryUrl": "https://lumeo.nativ.sh/registry/map.json"
1943
1962
  },
@@ -2258,6 +2277,7 @@
2258
2277
  "dependencies": [
2259
2278
  "empty-state",
2260
2279
  "icon",
2280
+ "list",
2261
2281
  "spinner"
2262
2282
  ],
2263
2283
  "packageDependencies": [