@lumeo-ui/mcp-server 3.1.1 → 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.1",
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.1",
4
- "generated": "2026-05-22T10:41:47.6958010Z",
3
+ "version": "3.2.0",
4
+ "generated": "2026-05-24T21:42:54.3485353Z",
5
5
  "stats": {
6
6
  "componentCount": 154,
7
- "totalParameters": 3665,
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, Satellite, Terrain) 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,95 @@
26116
26211
  ],
26117
26212
  "parameters": [
26118
26213
  {
26119
- "name": "Lat",
26120
- "type": "double",
26214
+ "name": "From",
26215
+ "type": "(double Lat, double Lon)",
26121
26216
  "default": null,
26122
26217
  "description": null,
26123
26218
  "isCascading": false,
26124
26219
  "captureUnmatched": false
26125
26220
  },
26126
26221
  {
26127
- "name": "Lon",
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",
26128
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?",
26129
26240
  "default": null,
26130
26241
  "description": null,
26131
26242
  "isCascading": false,
26132
26243
  "captureUnmatched": false
26133
26244
  },
26134
26245
  {
26135
- "name": "Title",
26246
+ "name": "Weight",
26247
+ "type": "double",
26248
+ "default": "2.5",
26249
+ "description": null,
26250
+ "isCascading": false,
26251
+ "captureUnmatched": false
26252
+ },
26253
+ {
26254
+ "name": "Opacity",
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",
26136
26303
  "type": "string?",
26137
26304
  "default": null,
26138
26305
  "description": null,
@@ -26140,18 +26307,50 @@
26140
26307
  "captureUnmatched": false
26141
26308
  },
26142
26309
  {
26143
- "name": "IconUrl",
26310
+ "name": "PopupHtml",
26144
26311
  "type": "string?",
26145
26312
  "default": null,
26146
- "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.",
26313
+ "description": null,
26147
26314
  "isCascading": false,
26148
26315
  "captureUnmatched": false
26149
26316
  },
26150
26317
  {
26151
- "name": "Variant",
26152
- "type": "string",
26153
- "default": "\"Default\"",
26154
- "description": "Visual variant for the auto-generated DivIcon. Ignored when IconUrl is set. Defaults to \"Default\" (filled circle). Valid values: \"Default\", \"Outline\", \"Pin\", \"Dot\".",
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.",
26155
26354
  "isCascading": false,
26156
26355
  "captureUnmatched": false
26157
26356
  },
@@ -26159,37 +26358,53 @@
26159
26358
  "name": "Color",
26160
26359
  "type": "string?",
26161
26360
  "default": null,
26162
- "description": "Override the marker's theme color. Accepts a friendly name (\"red\", \"green\", \"yellow\", …) or a raw CSS color (\"#ff0000\", \"hsl(...)\"). Null = theme primary.",
26361
+ "description": null,
26163
26362
  "isCascading": false,
26164
26363
  "captureUnmatched": false
26165
26364
  },
26166
26365
  {
26167
- "name": "Label",
26366
+ "name": "FillColor",
26168
26367
  "type": "string?",
26169
26368
  "default": null,
26170
- "description": "Permanent label rendered above the marker. Use for waypoints or numbered tours. Different from Title (hover tooltip).",
26369
+ "description": null,
26171
26370
  "isCascading": false,
26172
26371
  "captureUnmatched": false
26173
26372
  },
26174
26373
  {
26175
- "name": "Icon",
26176
- "type": "RenderFragment?",
26177
- "default": null,
26178
- "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.",
26374
+ "name": "Weight",
26375
+ "type": "double",
26376
+ "default": "2",
26377
+ "description": null,
26179
26378
  "isCascading": false,
26180
26379
  "captureUnmatched": false
26181
26380
  },
26182
26381
  {
26183
- "name": "Popup",
26184
- "type": "RenderFragment?",
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?",
26185
26400
  "default": null,
26186
- "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.",
26401
+ "description": null,
26187
26402
  "isCascading": false,
26188
26403
  "captureUnmatched": false
26189
26404
  },
26190
26405
  {
26191
- "name": "OnClick",
26192
- "type": "EventCallback",
26406
+ "name": "PopupHtml",
26407
+ "type": "string?",
26193
26408
  "default": null,
26194
26409
  "description": null,
26195
26410
  "isCascading": false,
@@ -26204,26 +26419,609 @@
26204
26419
  "captureUnmatched": false
26205
26420
  }
26206
26421
  ],
26207
- "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": [
26208
26437
  {
26209
- "name": "OnClick",
26210
- "type": "EventCallback",
26211
- "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
26212
26476
  }
26213
26477
  ],
26478
+ "events": [],
26214
26479
  "enums": [],
26215
26480
  "records": [],
26216
26481
  "parseFailed": false,
26217
26482
  "parseError": null
26218
- }
26219
- },
26220
- "parseFailed": false,
26221
- "parseError": null
26222
- },
26223
- "Marquee": {
26224
- "name": "Marquee",
26225
- "category": "Motion",
26226
- "subcategory": null,
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,
27019
+ "parseError": null
27020
+ },
27021
+ "Marquee": {
27022
+ "name": "Marquee",
27023
+ "category": "Motion",
27024
+ "subcategory": null,
26227
27025
  "description": "Infinitely scrolling horizontal band of children.",
26228
27026
  "nugetPackage": "Lumeo.Motion",
26229
27027
  "files": [
@@ -29207,6 +30005,14 @@
29207
30005
  "isCascading": false,
29208
30006
  "captureUnmatched": false
29209
30007
  },
30008
+ {
30009
+ "name": "HighlightColor",
30010
+ "type": "string",
30011
+ "default": "\"yellow\"",
30012
+ "description": null,
30013
+ "isCascading": false,
30014
+ "captureUnmatched": false
30015
+ },
29210
30016
  {
29211
30017
  "name": "OnLoaded",
29212
30018
  "type": "EventCallback<int>",
@@ -29289,20 +30095,7 @@
29289
30095
  "--color-ring",
29290
30096
  "--radius"
29291
30097
  ],
29292
- "examples": [
29293
- {
29294
- "title": "Basic",
29295
- "code": "<PdfViewer Src=\"@SamplePdfUrl\"\n @bind-Page=\"_page\"\n @bind-Zoom=\"_zoom\"\n OnLoaded=\"HandleLoaded\"\n Class=\"h-[600px]\" />"
29296
- },
29297
- {
29298
- "title": "With search bar",
29299
- "code": "<PdfViewer Src=\"@SamplePdfUrl\"\n ShowSearch=\"true\"\n Class=\"h-[600px]\" />"
29300
- },
29301
- {
29302
- "title": "Toolbar-less (chromeless embed)",
29303
- "code": "<PdfViewer Src=\"@SamplePdfUrl\"\n ShowToolbar=\"false\"\n Class=\"h-[500px]\" />"
29304
- }
29305
- ],
30098
+ "examples": [],
29306
30099
  "subComponents": {},
29307
30100
  "parseFailed": false,
29308
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.1",
4
- "generated": "2026-05-22T10:41:46.5778733Z",
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,20 +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"
1936
1949
  ],
1937
- "dependencies": [],
1938
1950
  "packageDependencies": [
1939
1951
  "Blazicons.Lucide"
1940
1952
  ],
1941
1953
  "cssVars": [
1942
- "--color-foreground"
1954
+ "--color-background",
1955
+ "--color-border",
1956
+ "--color-foreground",
1957
+ "--color-muted",
1958
+ "--color-muted-foreground",
1959
+ "--radius"
1943
1960
  ],
1944
1961
  "registryUrl": "https://lumeo.nativ.sh/registry/map.json"
1945
1962
  },
@@ -2260,6 +2277,7 @@
2260
2277
  "dependencies": [
2261
2278
  "empty-state",
2262
2279
  "icon",
2280
+ "list",
2263
2281
  "spinner"
2264
2282
  ],
2265
2283
  "packageDependencies": [