@lumeo-ui/mcp-server 3.0.5 → 3.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumeo-ui/mcp-server",
3
- "version": "3.0.5",
3
+ "version": "3.1.1",
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,12 +1,12 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/components-api-schema.json",
3
- "version": "3.0.5",
4
- "generated": "2026-05-22T08:15:04.0950107Z",
3
+ "version": "3.1.1",
4
+ "generated": "2026-05-22T10:41:47.6958010Z",
5
5
  "stats": {
6
- "componentCount": 149,
7
- "totalParameters": 3580,
6
+ "componentCount": 154,
7
+ "totalParameters": 3665,
8
8
  "totalEnums": 65,
9
- "totalRecords": 62,
9
+ "totalRecords": 63,
10
10
  "thinFallbacks": []
11
11
  },
12
12
  "themeTokens": [
@@ -1973,6 +1973,192 @@
1973
1973
  "parseFailed": false,
1974
1974
  "parseError": null
1975
1975
  },
1976
+ "AudioPlayer": {
1977
+ "name": "AudioPlayer",
1978
+ "category": "Utility",
1979
+ "subcategory": null,
1980
+ "description": "Audio Player component.",
1981
+ "nugetPackage": "Lumeo",
1982
+ "files": [
1983
+ "UI/AudioPlayer/AudioPlayer.razor"
1984
+ ],
1985
+ "namespace": "Lumeo",
1986
+ "inheritsFrom": null,
1987
+ "implements": [
1988
+ "IAsyncDisposable"
1989
+ ],
1990
+ "parameters": [
1991
+ {
1992
+ "name": "Src",
1993
+ "type": "string?",
1994
+ "default": null,
1995
+ "description": null,
1996
+ "isCascading": false,
1997
+ "captureUnmatched": false
1998
+ },
1999
+ {
2000
+ "name": "Autoplay",
2001
+ "type": "bool",
2002
+ "default": null,
2003
+ "description": null,
2004
+ "isCascading": false,
2005
+ "captureUnmatched": false
2006
+ },
2007
+ {
2008
+ "name": "Loop",
2009
+ "type": "bool",
2010
+ "default": null,
2011
+ "description": null,
2012
+ "isCascading": false,
2013
+ "captureUnmatched": false
2014
+ },
2015
+ {
2016
+ "name": "ShowDownload",
2017
+ "type": "bool",
2018
+ "default": null,
2019
+ "description": null,
2020
+ "isCascading": false,
2021
+ "captureUnmatched": false
2022
+ },
2023
+ {
2024
+ "name": "Title",
2025
+ "type": "string?",
2026
+ "default": null,
2027
+ "description": null,
2028
+ "isCascading": false,
2029
+ "captureUnmatched": false
2030
+ },
2031
+ {
2032
+ "name": "Artist",
2033
+ "type": "string?",
2034
+ "default": null,
2035
+ "description": null,
2036
+ "isCascading": false,
2037
+ "captureUnmatched": false
2038
+ },
2039
+ {
2040
+ "name": "Cover",
2041
+ "type": "RenderFragment?",
2042
+ "default": null,
2043
+ "description": null,
2044
+ "isCascading": false,
2045
+ "captureUnmatched": false
2046
+ },
2047
+ {
2048
+ "name": "PreloadMode",
2049
+ "type": "string?",
2050
+ "default": "\"metadata\"",
2051
+ "description": null,
2052
+ "isCascading": false,
2053
+ "captureUnmatched": false
2054
+ },
2055
+ {
2056
+ "name": "OnTimeUpdate",
2057
+ "type": "EventCallback<double>",
2058
+ "default": null,
2059
+ "description": null,
2060
+ "isCascading": false,
2061
+ "captureUnmatched": false
2062
+ },
2063
+ {
2064
+ "name": "OnEnded",
2065
+ "type": "EventCallback",
2066
+ "default": null,
2067
+ "description": null,
2068
+ "isCascading": false,
2069
+ "captureUnmatched": false
2070
+ },
2071
+ {
2072
+ "name": "OnPlay",
2073
+ "type": "EventCallback",
2074
+ "default": null,
2075
+ "description": null,
2076
+ "isCascading": false,
2077
+ "captureUnmatched": false
2078
+ },
2079
+ {
2080
+ "name": "OnPause",
2081
+ "type": "EventCallback",
2082
+ "default": null,
2083
+ "description": null,
2084
+ "isCascading": false,
2085
+ "captureUnmatched": false
2086
+ },
2087
+ {
2088
+ "name": "Class",
2089
+ "type": "string?",
2090
+ "default": null,
2091
+ "description": null,
2092
+ "isCascading": false,
2093
+ "captureUnmatched": false
2094
+ },
2095
+ {
2096
+ "name": "AdditionalAttributes",
2097
+ "type": "Dictionary<string, object>?",
2098
+ "default": null,
2099
+ "description": null,
2100
+ "isCascading": false,
2101
+ "captureUnmatched": true
2102
+ }
2103
+ ],
2104
+ "events": [
2105
+ {
2106
+ "name": "OnTimeUpdate",
2107
+ "type": "EventCallback<double>",
2108
+ "description": null
2109
+ },
2110
+ {
2111
+ "name": "OnEnded",
2112
+ "type": "EventCallback",
2113
+ "description": null
2114
+ },
2115
+ {
2116
+ "name": "OnPlay",
2117
+ "type": "EventCallback",
2118
+ "description": null
2119
+ },
2120
+ {
2121
+ "name": "OnPause",
2122
+ "type": "EventCallback",
2123
+ "description": null
2124
+ }
2125
+ ],
2126
+ "enums": [],
2127
+ "records": [],
2128
+ "cssVars": [
2129
+ "--color-accent",
2130
+ "--color-accent-foreground",
2131
+ "--color-border",
2132
+ "--color-card",
2133
+ "--color-foreground",
2134
+ "--color-muted",
2135
+ "--color-muted-foreground",
2136
+ "--color-primary",
2137
+ "--color-ring",
2138
+ "--radius"
2139
+ ],
2140
+ "examples": [
2141
+ {
2142
+ "title": "Basic",
2143
+ "code": "<AudioPlayer Src=\"https://www.kozco.com/tech/piano2-CoolEdit.mp3\"\n Title=\"Piano sample\"\n Artist=\"Cool Edit demo\" />"
2144
+ },
2145
+ {
2146
+ "title": "With cover art",
2147
+ "code": "<AudioPlayer Src=\"https://www.kozco.com/tech/piano2-CoolEdit.mp3\"\n Title=\"Piano sample\"\n Artist=\"Cool Edit demo\">\n <Cover>\n <Image Src=\"https://images.unsplash.com/photo-1511671782779-c97d3d27a1d4?w=160&h=160&fit=crop\"\n Alt=\"Album cover\"\n Class=\"h-16 w-16 rounded-md object-cover\" />\n </Cover>\n</AudioPlayer>"
2148
+ },
2149
+ {
2150
+ "title": "Looping + download",
2151
+ "code": "<AudioPlayer Src=\"https://www.kozco.com/tech/piano2-CoolEdit.mp3\"\n Title=\"Looping piano sample\"\n Artist=\"Cool Edit demo\"\n Loop=\"true\"\n Autoplay=\"false\"\n ShowDownload=\"true\" />"
2152
+ },
2153
+ {
2154
+ "title": "Playback events",
2155
+ "code": "<AudioPlayer Src=\"https://www.kozco.com/tech/piano2-CoolEdit.mp3\"\n Title=\"Tracked sample\"\n Artist=\"Cool Edit demo\"\n OnPlay=\"HandlePlay\"\n OnPause=\"HandlePause\"\n OnEnded=\"HandleEnded\" />\n\n@@code {\n private string _lastEvent = \"(none)\";\n private void HandlePlay() => _lastEvent = \"play\";\n private void HandlePause() => _lastEvent = \"pause\";\n private void HandleEnded() => _lastEvent = \"ended\";\n}"
2156
+ }
2157
+ ],
2158
+ "subComponents": {},
2159
+ "parseFailed": false,
2160
+ "parseError": null
2161
+ },
1976
2162
  "Avatar": {
1977
2163
  "name": "Avatar",
1978
2164
  "category": "Data Display",
@@ -13004,6 +13190,166 @@
13004
13190
  "parseFailed": false,
13005
13191
  "parseError": null
13006
13192
  },
13193
+ "CodeEditor": {
13194
+ "name": "CodeEditor",
13195
+ "category": "Forms",
13196
+ "subcategory": null,
13197
+ "description": "Source-code editor wrapping CodeMirror 6 with on-demand language packs, dark/light/auto theming, and line numbers.",
13198
+ "nugetPackage": "Lumeo.CodeEditor",
13199
+ "files": [
13200
+ "UI/CodeEditor/CodeEditor.razor"
13201
+ ],
13202
+ "namespace": "Lumeo",
13203
+ "inheritsFrom": null,
13204
+ "implements": [
13205
+ "IAsyncDisposable"
13206
+ ],
13207
+ "parameters": [
13208
+ {
13209
+ "name": "Value",
13210
+ "type": "string?",
13211
+ "default": null,
13212
+ "description": null,
13213
+ "isCascading": false,
13214
+ "captureUnmatched": false
13215
+ },
13216
+ {
13217
+ "name": "ValueChanged",
13218
+ "type": "EventCallback<string>",
13219
+ "default": null,
13220
+ "description": null,
13221
+ "isCascading": false,
13222
+ "captureUnmatched": false
13223
+ },
13224
+ {
13225
+ "name": "Language",
13226
+ "type": "string",
13227
+ "default": "\"plaintext\"",
13228
+ "description": "Source language. Currently supported: csharp, javascript, typescript, html, css, json, markdown, xml, sql, python, plaintext. Unknown values fall back to plaintext.",
13229
+ "isCascading": false,
13230
+ "captureUnmatched": false
13231
+ },
13232
+ {
13233
+ "name": "Theme",
13234
+ "type": "string",
13235
+ "default": "\"auto\"",
13236
+ "description": "light | dark | auto (follows page theme via the `dark` class on &lt;html&gt;).",
13237
+ "isCascading": false,
13238
+ "captureUnmatched": false
13239
+ },
13240
+ {
13241
+ "name": "Height",
13242
+ "type": "string",
13243
+ "default": "\"400px\"",
13244
+ "description": null,
13245
+ "isCascading": false,
13246
+ "captureUnmatched": false
13247
+ },
13248
+ {
13249
+ "name": "LineNumbers",
13250
+ "type": "bool",
13251
+ "default": "true",
13252
+ "description": null,
13253
+ "isCascading": false,
13254
+ "captureUnmatched": false
13255
+ },
13256
+ {
13257
+ "name": "ReadOnly",
13258
+ "type": "bool",
13259
+ "default": null,
13260
+ "description": null,
13261
+ "isCascading": false,
13262
+ "captureUnmatched": false
13263
+ },
13264
+ {
13265
+ "name": "ShowMinimap",
13266
+ "type": "bool",
13267
+ "default": null,
13268
+ "description": "CodeMirror 6 does not ship a native minimap. Kept for API symmetry with Monaco-style wrappers; today this is a no-op. A future revision may render a custom minimap using the scrollDOM viewport API.",
13269
+ "isCascading": false,
13270
+ "captureUnmatched": false
13271
+ },
13272
+ {
13273
+ "name": "TabSize",
13274
+ "type": "int",
13275
+ "default": "4",
13276
+ "description": null,
13277
+ "isCascading": false,
13278
+ "captureUnmatched": false
13279
+ },
13280
+ {
13281
+ "name": "UseTabs",
13282
+ "type": "bool",
13283
+ "default": null,
13284
+ "description": null,
13285
+ "isCascading": false,
13286
+ "captureUnmatched": false
13287
+ },
13288
+ {
13289
+ "name": "WordWrap",
13290
+ "type": "string",
13291
+ "default": "\"off\"",
13292
+ "description": "\"off\" | \"on\"",
13293
+ "isCascading": false,
13294
+ "captureUnmatched": false
13295
+ },
13296
+ {
13297
+ "name": "Placeholder",
13298
+ "type": "string?",
13299
+ "default": null,
13300
+ "description": null,
13301
+ "isCascading": false,
13302
+ "captureUnmatched": false
13303
+ },
13304
+ {
13305
+ "name": "OnChange",
13306
+ "type": "EventCallback<string>",
13307
+ "default": null,
13308
+ "description": "Fires alongside ValueChanged; provided for symmetry with Monaco-style APIs.",
13309
+ "isCascading": false,
13310
+ "captureUnmatched": false
13311
+ },
13312
+ {
13313
+ "name": "Class",
13314
+ "type": "string?",
13315
+ "default": null,
13316
+ "description": null,
13317
+ "isCascading": false,
13318
+ "captureUnmatched": false
13319
+ },
13320
+ {
13321
+ "name": "AdditionalAttributes",
13322
+ "type": "Dictionary<string, object>?",
13323
+ "default": null,
13324
+ "description": null,
13325
+ "isCascading": false,
13326
+ "captureUnmatched": true
13327
+ }
13328
+ ],
13329
+ "events": [
13330
+ {
13331
+ "name": "ValueChanged",
13332
+ "type": "EventCallback<string>",
13333
+ "description": null
13334
+ },
13335
+ {
13336
+ "name": "OnChange",
13337
+ "type": "EventCallback<string>",
13338
+ "description": "Fires alongside ValueChanged; provided for symmetry with Monaco-style APIs."
13339
+ }
13340
+ ],
13341
+ "enums": [],
13342
+ "records": [],
13343
+ "cssVars": [
13344
+ "--color-border",
13345
+ "--color-card",
13346
+ "--radius"
13347
+ ],
13348
+ "examples": [],
13349
+ "subComponents": {},
13350
+ "parseFailed": false,
13351
+ "parseError": null
13352
+ },
13007
13353
  "Collapsible": {
13008
13354
  "name": "Collapsible",
13009
13355
  "category": "Navigation",
@@ -16822,6 +17168,14 @@
16822
17168
  "isCascading": false,
16823
17169
  "captureUnmatched": false
16824
17170
  },
17171
+ {
17172
+ "name": "OnColumnPin",
17173
+ "type": "EventCallback<ColumnPinEventArgs>",
17174
+ "default": null,
17175
+ "description": null,
17176
+ "isCascading": false,
17177
+ "captureUnmatched": false
17178
+ },
16825
17179
  {
16826
17180
  "name": "Class",
16827
17181
  "type": "string?",
@@ -16849,6 +17203,11 @@
16849
17203
  "name": "OnColumnReorder",
16850
17204
  "type": "EventCallback<ColumnReorderEventArgs>",
16851
17205
  "description": null
17206
+ },
17207
+ {
17208
+ "name": "OnColumnPin",
17209
+ "type": "EventCallback<ColumnPinEventArgs>",
17210
+ "description": null
16852
17211
  }
16853
17212
  ],
16854
17213
  "enums": [],
@@ -25596,6 +25955,271 @@
25596
25955
  "parseFailed": false,
25597
25956
  "parseError": null
25598
25957
  },
25958
+ "Map": {
25959
+ "name": "Map",
25960
+ "category": "Data Display",
25961
+ "subcategory": null,
25962
+ "description": "Interactive geographic map with declarative markers — Leaflet wrapper, open-source tiles, no API key required.",
25963
+ "nugetPackage": "Lumeo.Maps",
25964
+ "files": [
25965
+ "UI/Map/Map.razor",
25966
+ "UI/Map/MapMarker.razor"
25967
+ ],
25968
+ "namespace": "Lumeo",
25969
+ "inheritsFrom": null,
25970
+ "implements": [
25971
+ "IAsyncDisposable"
25972
+ ],
25973
+ "parameters": [
25974
+ {
25975
+ "name": "Center",
25976
+ "type": "(double Lat, double Lon)",
25977
+ "default": "(51.0, 10.4)",
25978
+ "description": null,
25979
+ "isCascading": false,
25980
+ "captureUnmatched": false
25981
+ },
25982
+ {
25983
+ "name": "CenterChanged",
25984
+ "type": "EventCallback<(double Lat, double Lon)>",
25985
+ "default": null,
25986
+ "description": null,
25987
+ "isCascading": false,
25988
+ "captureUnmatched": false
25989
+ },
25990
+ {
25991
+ "name": "Zoom",
25992
+ "type": "int",
25993
+ "default": "5",
25994
+ "description": null,
25995
+ "isCascading": false,
25996
+ "captureUnmatched": false
25997
+ },
25998
+ {
25999
+ "name": "ZoomChanged",
26000
+ "type": "EventCallback<int>",
26001
+ "default": null,
26002
+ "description": null,
26003
+ "isCascading": false,
26004
+ "captureUnmatched": false
26005
+ },
26006
+ {
26007
+ "name": "Height",
26008
+ "type": "string",
26009
+ "default": "\"400px\"",
26010
+ "description": null,
26011
+ "isCascading": false,
26012
+ "captureUnmatched": false
26013
+ },
26014
+ {
26015
+ "name": "TileLayer",
26016
+ "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\").",
26019
+ "isCascading": false,
26020
+ "captureUnmatched": false
26021
+ },
26022
+ {
26023
+ "name": "ZoomControl",
26024
+ "type": "bool",
26025
+ "default": "true",
26026
+ "description": null,
26027
+ "isCascading": false,
26028
+ "captureUnmatched": false
26029
+ },
26030
+ {
26031
+ "name": "Attribution",
26032
+ "type": "bool",
26033
+ "default": "true",
26034
+ "description": null,
26035
+ "isCascading": false,
26036
+ "captureUnmatched": false
26037
+ },
26038
+ {
26039
+ "name": "ScrollWheelZoom",
26040
+ "type": "bool",
26041
+ "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.",
26043
+ "isCascading": false,
26044
+ "captureUnmatched": false
26045
+ },
26046
+ {
26047
+ "name": "ChildContent",
26048
+ "type": "RenderFragment?",
26049
+ "default": null,
26050
+ "description": null,
26051
+ "isCascading": false,
26052
+ "captureUnmatched": false
26053
+ },
26054
+ {
26055
+ "name": "OnClick",
26056
+ "type": "EventCallback<(double Lat, double Lon)>",
26057
+ "default": null,
26058
+ "description": null,
26059
+ "isCascading": false,
26060
+ "captureUnmatched": false
26061
+ },
26062
+ {
26063
+ "name": "Class",
26064
+ "type": "string?",
26065
+ "default": null,
26066
+ "description": null,
26067
+ "isCascading": false,
26068
+ "captureUnmatched": false
26069
+ },
26070
+ {
26071
+ "name": "AdditionalAttributes",
26072
+ "type": "Dictionary<string, object>?",
26073
+ "default": null,
26074
+ "description": null,
26075
+ "isCascading": false,
26076
+ "captureUnmatched": true
26077
+ }
26078
+ ],
26079
+ "events": [
26080
+ {
26081
+ "name": "CenterChanged",
26082
+ "type": "EventCallback<(double Lat, double Lon)>",
26083
+ "description": null
26084
+ },
26085
+ {
26086
+ "name": "ZoomChanged",
26087
+ "type": "EventCallback<int>",
26088
+ "description": null
26089
+ },
26090
+ {
26091
+ "name": "OnClick",
26092
+ "type": "EventCallback<(double Lat, double Lon)>",
26093
+ "description": null
26094
+ }
26095
+ ],
26096
+ "enums": [],
26097
+ "records": [
26098
+ {
26099
+ "name": "MapContext",
26100
+ "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."
26102
+ }
26103
+ ],
26104
+ "cssVars": [
26105
+ "--color-foreground"
26106
+ ],
26107
+ "examples": [],
26108
+ "subComponents": {
26109
+ "MapMarker": {
26110
+ "componentName": "MapMarker",
26111
+ "fileName": "MapMarker.razor",
26112
+ "namespace": "Lumeo",
26113
+ "inheritsFrom": null,
26114
+ "implements": [
26115
+ "IDisposable"
26116
+ ],
26117
+ "parameters": [
26118
+ {
26119
+ "name": "Lat",
26120
+ "type": "double",
26121
+ "default": null,
26122
+ "description": null,
26123
+ "isCascading": false,
26124
+ "captureUnmatched": false
26125
+ },
26126
+ {
26127
+ "name": "Lon",
26128
+ "type": "double",
26129
+ "default": null,
26130
+ "description": null,
26131
+ "isCascading": false,
26132
+ "captureUnmatched": false
26133
+ },
26134
+ {
26135
+ "name": "Title",
26136
+ "type": "string?",
26137
+ "default": null,
26138
+ "description": null,
26139
+ "isCascading": false,
26140
+ "captureUnmatched": false
26141
+ },
26142
+ {
26143
+ "name": "IconUrl",
26144
+ "type": "string?",
26145
+ "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.",
26147
+ "isCascading": false,
26148
+ "captureUnmatched": false
26149
+ },
26150
+ {
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\".",
26155
+ "isCascading": false,
26156
+ "captureUnmatched": false
26157
+ },
26158
+ {
26159
+ "name": "Color",
26160
+ "type": "string?",
26161
+ "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.",
26163
+ "isCascading": false,
26164
+ "captureUnmatched": false
26165
+ },
26166
+ {
26167
+ "name": "Label",
26168
+ "type": "string?",
26169
+ "default": null,
26170
+ "description": "Permanent label rendered above the marker. Use for waypoints or numbered tours. Different from Title (hover tooltip).",
26171
+ "isCascading": false,
26172
+ "captureUnmatched": false
26173
+ },
26174
+ {
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.",
26179
+ "isCascading": false,
26180
+ "captureUnmatched": false
26181
+ },
26182
+ {
26183
+ "name": "Popup",
26184
+ "type": "RenderFragment?",
26185
+ "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.",
26187
+ "isCascading": false,
26188
+ "captureUnmatched": false
26189
+ },
26190
+ {
26191
+ "name": "OnClick",
26192
+ "type": "EventCallback",
26193
+ "default": null,
26194
+ "description": null,
26195
+ "isCascading": false,
26196
+ "captureUnmatched": false
26197
+ },
26198
+ {
26199
+ "name": "MapCtx",
26200
+ "type": "Map.MapContext?",
26201
+ "default": null,
26202
+ "description": null,
26203
+ "isCascading": true,
26204
+ "captureUnmatched": false
26205
+ }
26206
+ ],
26207
+ "events": [
26208
+ {
26209
+ "name": "OnClick",
26210
+ "type": "EventCallback",
26211
+ "description": null
26212
+ }
26213
+ ],
26214
+ "enums": [],
26215
+ "records": [],
26216
+ "parseFailed": false,
26217
+ "parseError": null
26218
+ }
26219
+ },
26220
+ "parseFailed": false,
26221
+ "parseError": null
26222
+ },
25599
26223
  "Marquee": {
25600
26224
  "name": "Marquee",
25601
26225
  "category": "Motion",
@@ -28488,6 +29112,201 @@
28488
29112
  "parseFailed": false,
28489
29113
  "parseError": null
28490
29114
  },
29115
+ "PdfViewer": {
29116
+ "name": "PdfViewer",
29117
+ "category": "Data Display",
29118
+ "subcategory": null,
29119
+ "description": "Inline PDF document viewer powered by pdf.js — page navigation, zoom controls, optional text search, and download.",
29120
+ "nugetPackage": "Lumeo.PdfViewer",
29121
+ "files": [
29122
+ "UI/PdfViewer/PdfViewer.razor"
29123
+ ],
29124
+ "namespace": "Lumeo",
29125
+ "inheritsFrom": null,
29126
+ "implements": [
29127
+ "IAsyncDisposable"
29128
+ ],
29129
+ "parameters": [
29130
+ {
29131
+ "name": "Src",
29132
+ "type": "string?",
29133
+ "default": null,
29134
+ "description": null,
29135
+ "isCascading": false,
29136
+ "captureUnmatched": false
29137
+ },
29138
+ {
29139
+ "name": "Page",
29140
+ "type": "int",
29141
+ "default": "1",
29142
+ "description": null,
29143
+ "isCascading": false,
29144
+ "captureUnmatched": false
29145
+ },
29146
+ {
29147
+ "name": "PageChanged",
29148
+ "type": "EventCallback<int>",
29149
+ "default": null,
29150
+ "description": null,
29151
+ "isCascading": false,
29152
+ "captureUnmatched": false
29153
+ },
29154
+ {
29155
+ "name": "Zoom",
29156
+ "type": "double",
29157
+ "default": "1.0",
29158
+ "description": null,
29159
+ "isCascading": false,
29160
+ "captureUnmatched": false
29161
+ },
29162
+ {
29163
+ "name": "ZoomChanged",
29164
+ "type": "EventCallback<double>",
29165
+ "default": null,
29166
+ "description": null,
29167
+ "isCascading": false,
29168
+ "captureUnmatched": false
29169
+ },
29170
+ {
29171
+ "name": "ShowToolbar",
29172
+ "type": "bool",
29173
+ "default": "true",
29174
+ "description": null,
29175
+ "isCascading": false,
29176
+ "captureUnmatched": false
29177
+ },
29178
+ {
29179
+ "name": "ShowPageNav",
29180
+ "type": "bool",
29181
+ "default": "true",
29182
+ "description": null,
29183
+ "isCascading": false,
29184
+ "captureUnmatched": false
29185
+ },
29186
+ {
29187
+ "name": "ShowZoomControls",
29188
+ "type": "bool",
29189
+ "default": "true",
29190
+ "description": null,
29191
+ "isCascading": false,
29192
+ "captureUnmatched": false
29193
+ },
29194
+ {
29195
+ "name": "ShowDownload",
29196
+ "type": "bool",
29197
+ "default": "true",
29198
+ "description": null,
29199
+ "isCascading": false,
29200
+ "captureUnmatched": false
29201
+ },
29202
+ {
29203
+ "name": "ShowSearch",
29204
+ "type": "bool",
29205
+ "default": null,
29206
+ "description": null,
29207
+ "isCascading": false,
29208
+ "captureUnmatched": false
29209
+ },
29210
+ {
29211
+ "name": "OnLoaded",
29212
+ "type": "EventCallback<int>",
29213
+ "default": null,
29214
+ "description": null,
29215
+ "isCascading": false,
29216
+ "captureUnmatched": false
29217
+ },
29218
+ {
29219
+ "name": "OnPageChanged",
29220
+ "type": "EventCallback<int>",
29221
+ "default": null,
29222
+ "description": null,
29223
+ "isCascading": false,
29224
+ "captureUnmatched": false
29225
+ },
29226
+ {
29227
+ "name": "OnError",
29228
+ "type": "EventCallback<string>",
29229
+ "default": null,
29230
+ "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
+ "isCascading": false,
29232
+ "captureUnmatched": false
29233
+ },
29234
+ {
29235
+ "name": "Class",
29236
+ "type": "string?",
29237
+ "default": null,
29238
+ "description": null,
29239
+ "isCascading": false,
29240
+ "captureUnmatched": false
29241
+ },
29242
+ {
29243
+ "name": "AdditionalAttributes",
29244
+ "type": "Dictionary<string, object>?",
29245
+ "default": null,
29246
+ "description": null,
29247
+ "isCascading": false,
29248
+ "captureUnmatched": true
29249
+ }
29250
+ ],
29251
+ "events": [
29252
+ {
29253
+ "name": "PageChanged",
29254
+ "type": "EventCallback<int>",
29255
+ "description": null
29256
+ },
29257
+ {
29258
+ "name": "ZoomChanged",
29259
+ "type": "EventCallback<double>",
29260
+ "description": null
29261
+ },
29262
+ {
29263
+ "name": "OnLoaded",
29264
+ "type": "EventCallback<int>",
29265
+ "description": null
29266
+ },
29267
+ {
29268
+ "name": "OnPageChanged",
29269
+ "type": "EventCallback<int>",
29270
+ "description": null
29271
+ },
29272
+ {
29273
+ "name": "OnError",
29274
+ "type": "EventCallback<string>",
29275
+ "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."
29276
+ }
29277
+ ],
29278
+ "enums": [],
29279
+ "records": [],
29280
+ "cssVars": [
29281
+ "--color-accent",
29282
+ "--color-accent-foreground",
29283
+ "--color-background",
29284
+ "--color-border",
29285
+ "--color-card",
29286
+ "--color-foreground",
29287
+ "--color-muted",
29288
+ "--color-muted-foreground",
29289
+ "--color-ring",
29290
+ "--radius"
29291
+ ],
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
+ ],
29306
+ "subComponents": {},
29307
+ "parseFailed": false,
29308
+ "parseError": null
29309
+ },
28491
29310
  "PickList": {
28492
29311
  "name": "PickList",
28493
29312
  "category": "Dashboard",
@@ -34587,6 +35406,198 @@
34587
35406
  "parseFailed": false,
34588
35407
  "parseError": null
34589
35408
  },
35409
+ "SignaturePad": {
35410
+ "name": "SignaturePad",
35411
+ "category": "Utility",
35412
+ "subcategory": null,
35413
+ "description": "Signature Pad component.",
35414
+ "nugetPackage": "Lumeo",
35415
+ "files": [
35416
+ "UI/SignaturePad/SignaturePad.razor"
35417
+ ],
35418
+ "namespace": "Lumeo",
35419
+ "inheritsFrom": null,
35420
+ "implements": [
35421
+ "IAsyncDisposable"
35422
+ ],
35423
+ "parameters": [
35424
+ {
35425
+ "name": "Value",
35426
+ "type": "string?",
35427
+ "default": null,
35428
+ "description": null,
35429
+ "isCascading": false,
35430
+ "captureUnmatched": false
35431
+ },
35432
+ {
35433
+ "name": "ValueChanged",
35434
+ "type": "EventCallback<string?>",
35435
+ "default": null,
35436
+ "description": null,
35437
+ "isCascading": false,
35438
+ "captureUnmatched": false
35439
+ },
35440
+ {
35441
+ "name": "Width",
35442
+ "type": "int",
35443
+ "default": "500",
35444
+ "description": null,
35445
+ "isCascading": false,
35446
+ "captureUnmatched": false
35447
+ },
35448
+ {
35449
+ "name": "Height",
35450
+ "type": "int",
35451
+ "default": "200",
35452
+ "description": null,
35453
+ "isCascading": false,
35454
+ "captureUnmatched": false
35455
+ },
35456
+ {
35457
+ "name": "StrokeColor",
35458
+ "type": "string",
35459
+ "default": "\"currentColor\"",
35460
+ "description": null,
35461
+ "isCascading": false,
35462
+ "captureUnmatched": false
35463
+ },
35464
+ {
35465
+ "name": "StrokeWidth",
35466
+ "type": "double",
35467
+ "default": "2.0",
35468
+ "description": null,
35469
+ "isCascading": false,
35470
+ "captureUnmatched": false
35471
+ },
35472
+ {
35473
+ "name": "BackgroundColor",
35474
+ "type": "string",
35475
+ "default": "\"transparent\"",
35476
+ "description": null,
35477
+ "isCascading": false,
35478
+ "captureUnmatched": false
35479
+ },
35480
+ {
35481
+ "name": "ShowClearButton",
35482
+ "type": "bool",
35483
+ "default": "true",
35484
+ "description": null,
35485
+ "isCascading": false,
35486
+ "captureUnmatched": false
35487
+ },
35488
+ {
35489
+ "name": "ShowDownloadButton",
35490
+ "type": "bool",
35491
+ "default": null,
35492
+ "description": null,
35493
+ "isCascading": false,
35494
+ "captureUnmatched": false
35495
+ },
35496
+ {
35497
+ "name": "Format",
35498
+ "type": "string",
35499
+ "default": "\"png\"",
35500
+ "description": "Export format for the emitted data URL. \"png\" is the safe default (universal browser support, transparent backgrounds work). \"svg\" would require capturing strokes as path data rather than raster pixels; not implemented in this initial 3.1.0 cut — falls back to PNG. TODO: real SVG export by recording pointer paths client-side.",
35501
+ "isCascading": false,
35502
+ "captureUnmatched": false
35503
+ },
35504
+ {
35505
+ "name": "Disabled",
35506
+ "type": "bool",
35507
+ "default": null,
35508
+ "description": null,
35509
+ "isCascading": false,
35510
+ "captureUnmatched": false
35511
+ },
35512
+ {
35513
+ "name": "OnSign",
35514
+ "type": "EventCallback",
35515
+ "default": null,
35516
+ "description": null,
35517
+ "isCascading": false,
35518
+ "captureUnmatched": false
35519
+ },
35520
+ {
35521
+ "name": "OnClear",
35522
+ "type": "EventCallback",
35523
+ "default": null,
35524
+ "description": null,
35525
+ "isCascading": false,
35526
+ "captureUnmatched": false
35527
+ },
35528
+ {
35529
+ "name": "Placeholder",
35530
+ "type": "string?",
35531
+ "default": "\"Sign here\"",
35532
+ "description": null,
35533
+ "isCascading": false,
35534
+ "captureUnmatched": false
35535
+ },
35536
+ {
35537
+ "name": "Class",
35538
+ "type": "string?",
35539
+ "default": null,
35540
+ "description": null,
35541
+ "isCascading": false,
35542
+ "captureUnmatched": false
35543
+ },
35544
+ {
35545
+ "name": "AdditionalAttributes",
35546
+ "type": "Dictionary<string, object>?",
35547
+ "default": null,
35548
+ "description": null,
35549
+ "isCascading": false,
35550
+ "captureUnmatched": true
35551
+ }
35552
+ ],
35553
+ "events": [
35554
+ {
35555
+ "name": "ValueChanged",
35556
+ "type": "EventCallback<string?>",
35557
+ "description": null
35558
+ },
35559
+ {
35560
+ "name": "OnSign",
35561
+ "type": "EventCallback",
35562
+ "description": null
35563
+ },
35564
+ {
35565
+ "name": "OnClear",
35566
+ "type": "EventCallback",
35567
+ "description": null
35568
+ }
35569
+ ],
35570
+ "enums": [],
35571
+ "records": [],
35572
+ "cssVars": [
35573
+ "--color-border",
35574
+ "--color-card",
35575
+ "--color-muted",
35576
+ "--color-muted-foreground",
35577
+ "--radius"
35578
+ ],
35579
+ "examples": [
35580
+ {
35581
+ "title": "Basic",
35582
+ "code": "<SignaturePad @bind-Value=\"_signature\" />\n\n@@if (!string.IsNullOrEmpty(_signature))\n{\n <Image Src=\"@_signature\" Alt=\"Captured signature\" />\n}\n\n@@code {\n private string? _signature;\n}"
35583
+ },
35584
+ {
35585
+ "title": "Custom stroke",
35586
+ "code": "<SignaturePad StrokeColor=\"#dc2626\"\n StrokeWidth=\"4\"\n BackgroundColor=\"white\" />"
35587
+ },
35588
+ {
35589
+ "title": "With download",
35590
+ "code": "<SignaturePad ShowDownloadButton=\"true\"\n Placeholder=\"Sign and click download\" />"
35591
+ },
35592
+ {
35593
+ "title": "Disabled / read-only",
35594
+ "code": "<SignaturePad Disabled=\"true\" Value=\"@_savedSignature\" />\n\n@@code {\n private string _savedSignature = \"data:image/png;base64,...\";\n}"
35595
+ }
35596
+ ],
35597
+ "subComponents": {},
35598
+ "parseFailed": false,
35599
+ "parseError": null
35600
+ },
34590
35601
  "Skeleton": {
34591
35602
  "name": "Skeleton",
34592
35603
  "category": "Feedback",
package/src/registry.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/registry-schema.json",
3
- "version": "3.0.5",
4
- "generated": "2026-05-22T08:15:03.0005336Z",
3
+ "version": "3.1.1",
4
+ "generated": "2026-05-22T10:41:46.5778733Z",
5
5
  "components": {
6
6
  "accordion": {
7
7
  "name": "Accordion",
@@ -190,6 +190,37 @@
190
190
  ],
191
191
  "registryUrl": "https://lumeo.nativ.sh/registry/aspect-ratio.json"
192
192
  },
193
+ "audio-player": {
194
+ "name": "AudioPlayer",
195
+ "category": "Utility",
196
+ "subcategory": null,
197
+ "description": "Audio Player component.",
198
+ "thumbnail": "/preview-cards/audio-player.png",
199
+ "hasDocsPage": true,
200
+ "nugetPackage": "Lumeo",
201
+ "files": [
202
+ "UI/AudioPlayer/AudioPlayer.razor"
203
+ ],
204
+ "dependencies": [
205
+ "button"
206
+ ],
207
+ "packageDependencies": [
208
+ "Blazicons.Lucide"
209
+ ],
210
+ "cssVars": [
211
+ "--color-accent",
212
+ "--color-accent-foreground",
213
+ "--color-border",
214
+ "--color-card",
215
+ "--color-foreground",
216
+ "--color-muted",
217
+ "--color-muted-foreground",
218
+ "--color-primary",
219
+ "--color-ring",
220
+ "--radius"
221
+ ],
222
+ "registryUrl": "https://lumeo.nativ.sh/registry/audio-player.json"
223
+ },
193
224
  "avatar": {
194
225
  "name": "Avatar",
195
226
  "category": "Data Display",
@@ -723,6 +754,26 @@
723
754
  ],
724
755
  "registryUrl": "https://lumeo.nativ.sh/registry/code.json"
725
756
  },
757
+ "code-editor": {
758
+ "name": "CodeEditor",
759
+ "category": "Forms",
760
+ "subcategory": null,
761
+ "description": "Source-code editor wrapping CodeMirror 6 with on-demand language packs, dark/light/auto theming, and line numbers.",
762
+ "thumbnail": "/preview-cards/code-editor.png",
763
+ "hasDocsPage": true,
764
+ "nugetPackage": "Lumeo.CodeEditor",
765
+ "files": [
766
+ "UI/CodeEditor/CodeEditor.razor"
767
+ ],
768
+ "dependencies": [],
769
+ "packageDependencies": [],
770
+ "cssVars": [
771
+ "--color-border",
772
+ "--color-card",
773
+ "--radius"
774
+ ],
775
+ "registryUrl": "https://lumeo.nativ.sh/registry/code-editor.json"
776
+ },
726
777
  "collapsible": {
727
778
  "name": "Collapsible",
728
779
  "category": "Navigation",
@@ -1000,6 +1051,7 @@
1000
1051
  "pagination",
1001
1052
  "select",
1002
1053
  "skeleton",
1054
+ "sortable",
1003
1055
  "toolbar"
1004
1056
  ],
1005
1057
  "packageDependencies": [
@@ -1870,6 +1922,27 @@
1870
1922
  ],
1871
1923
  "registryUrl": "https://lumeo.nativ.sh/registry/list.json"
1872
1924
  },
1925
+ "map": {
1926
+ "name": "Map",
1927
+ "category": "Data Display",
1928
+ "subcategory": null,
1929
+ "description": "Interactive geographic map with declarative markers — Leaflet wrapper, open-source tiles, no API key required.",
1930
+ "thumbnail": "/preview-cards/map.png",
1931
+ "hasDocsPage": true,
1932
+ "nugetPackage": "Lumeo.Maps",
1933
+ "files": [
1934
+ "UI/Map/Map.razor",
1935
+ "UI/Map/MapMarker.razor"
1936
+ ],
1937
+ "dependencies": [],
1938
+ "packageDependencies": [
1939
+ "Blazicons.Lucide"
1940
+ ],
1941
+ "cssVars": [
1942
+ "--color-foreground"
1943
+ ],
1944
+ "registryUrl": "https://lumeo.nativ.sh/registry/map.json"
1945
+ },
1873
1946
  "marquee": {
1874
1947
  "name": "Marquee",
1875
1948
  "category": "Motion",
@@ -2173,6 +2246,39 @@
2173
2246
  ],
2174
2247
  "registryUrl": "https://lumeo.nativ.sh/registry/password-input.json"
2175
2248
  },
2249
+ "pdf-viewer": {
2250
+ "name": "PdfViewer",
2251
+ "category": "Data Display",
2252
+ "subcategory": null,
2253
+ "description": "Inline PDF document viewer powered by pdf.js — page navigation, zoom controls, optional text search, and download.",
2254
+ "thumbnail": "/preview-cards/pdf-viewer.png",
2255
+ "hasDocsPage": true,
2256
+ "nugetPackage": "Lumeo.PdfViewer",
2257
+ "files": [
2258
+ "UI/PdfViewer/PdfViewer.razor"
2259
+ ],
2260
+ "dependencies": [
2261
+ "empty-state",
2262
+ "icon",
2263
+ "spinner"
2264
+ ],
2265
+ "packageDependencies": [
2266
+ "Blazicons.Lucide"
2267
+ ],
2268
+ "cssVars": [
2269
+ "--color-accent",
2270
+ "--color-accent-foreground",
2271
+ "--color-background",
2272
+ "--color-border",
2273
+ "--color-card",
2274
+ "--color-foreground",
2275
+ "--color-muted",
2276
+ "--color-muted-foreground",
2277
+ "--color-ring",
2278
+ "--radius"
2279
+ ],
2280
+ "registryUrl": "https://lumeo.nativ.sh/registry/pdf-viewer.json"
2281
+ },
2176
2282
  "pick-list": {
2177
2283
  "name": "PickList",
2178
2284
  "category": "Dashboard",
@@ -2879,6 +2985,33 @@
2879
2985
  ],
2880
2986
  "registryUrl": "https://lumeo.nativ.sh/registry/sidebar.json"
2881
2987
  },
2988
+ "signature-pad": {
2989
+ "name": "SignaturePad",
2990
+ "category": "Utility",
2991
+ "subcategory": null,
2992
+ "description": "Signature Pad component.",
2993
+ "thumbnail": "/preview-cards/signature-pad.png",
2994
+ "hasDocsPage": true,
2995
+ "nugetPackage": "Lumeo",
2996
+ "files": [
2997
+ "UI/SignaturePad/SignaturePad.razor"
2998
+ ],
2999
+ "dependencies": [
3000
+ "button",
3001
+ "flex"
3002
+ ],
3003
+ "packageDependencies": [
3004
+ "Blazicons.Lucide"
3005
+ ],
3006
+ "cssVars": [
3007
+ "--color-border",
3008
+ "--color-card",
3009
+ "--color-muted",
3010
+ "--color-muted-foreground",
3011
+ "--radius"
3012
+ ],
3013
+ "registryUrl": "https://lumeo.nativ.sh/registry/signature-pad.json"
3014
+ },
2882
3015
  "skeleton": {
2883
3016
  "name": "Skeleton",
2884
3017
  "category": "Feedback",