@lumeo-ui/mcp-server 4.0.4 → 4.1.0-preview.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumeo-ui/mcp-server",
3
- "version": "4.0.4",
3
+ "version": "4.1.0-preview.2",
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": "4.0.4",
4
- "generated": "2026-07-01T16:24:34.1127575Z",
3
+ "version": "4.1.0-preview.2",
4
+ "generated": "2026-07-02T13:28:47.5523732Z",
5
5
  "stats": {
6
6
  "componentCount": 164,
7
- "totalParameters": 4153,
7
+ "totalParameters": 4166,
8
8
  "totalEnums": 74,
9
9
  "totalRecords": 72,
10
10
  "serviceCount": 33,
@@ -1824,6 +1824,12 @@
1824
1824
  "default": "Lumeo.Side.Right",
1825
1825
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
1826
1826
  },
1827
+ {
1828
+ "name": "ShowCloseButton",
1829
+ "type": "bool?",
1830
+ "default": null,
1831
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
1832
+ },
1827
1833
  {
1828
1834
  "name": "PreventClose",
1829
1835
  "type": "bool",
@@ -1913,6 +1919,12 @@
1913
1919
  "default": "Lumeo.Side.Right",
1914
1920
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
1915
1921
  },
1922
+ {
1923
+ "name": "ShowCloseButton",
1924
+ "type": "bool?",
1925
+ "default": null,
1926
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
1927
+ },
1916
1928
  {
1917
1929
  "name": "PreventClose",
1918
1930
  "type": "bool",
@@ -3236,6 +3248,12 @@
3236
3248
  "default": null,
3237
3249
  "summary": "Suppress dismissal via backdrop click / Escape. Applies to: Dialog, Sheet, Drawer."
3238
3250
  },
3251
+ {
3252
+ "name": "ShowCloseButton",
3253
+ "type": "bool?",
3254
+ "default": null,
3255
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
3256
+ },
3239
3257
  {
3240
3258
  "name": "SheetSide",
3241
3259
  "type": "Lumeo.Side",
@@ -3579,6 +3597,12 @@
3579
3597
  "default": "Lumeo.Side.Right",
3580
3598
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
3581
3599
  },
3600
+ {
3601
+ "name": "ShowCloseButton",
3602
+ "type": "bool?",
3603
+ "default": null,
3604
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
3605
+ },
3582
3606
  {
3583
3607
  "name": "PreventClose",
3584
3608
  "type": "bool",
@@ -26828,6 +26852,15 @@
26828
26852
  "captureUnmatched": false,
26829
26853
  "isEditorRequired": false
26830
26854
  },
26855
+ {
26856
+ "name": "FullWidth",
26857
+ "type": "bool",
26858
+ "default": null,
26859
+ "description": "When true, the date picker expands to fill its container width — equivalent to FullWidth on a Button. Propagates w-full to the Popover wrapper and PopoverTrigger so the constraint reaches the rendered trigger element through the shrink-wrap chain.",
26860
+ "isCascading": false,
26861
+ "captureUnmatched": false,
26862
+ "isEditorRequired": false
26863
+ },
26831
26864
  {
26832
26865
  "name": "AutoFocus",
26833
26866
  "type": "bool",
@@ -27092,6 +27125,15 @@
27092
27125
  "captureUnmatched": false,
27093
27126
  "isEditorRequired": false
27094
27127
  },
27128
+ {
27129
+ "name": "FullWidth",
27130
+ "type": "bool",
27131
+ "default": null,
27132
+ "description": "When true, the date range picker expands to fill its container width. Forwarded directly to the inner DatePicker.",
27133
+ "isCascading": false,
27134
+ "captureUnmatched": false,
27135
+ "isEditorRequired": false
27136
+ },
27095
27137
  {
27096
27138
  "name": "FirstDayOfWeek",
27097
27139
  "type": "DayOfWeek?",
@@ -28192,6 +28234,15 @@
28192
28234
  "captureUnmatched": false,
28193
28235
  "isEditorRequired": false
28194
28236
  },
28237
+ {
28238
+ "name": "ShowCloseButton",
28239
+ "type": "bool?",
28240
+ "default": null,
28241
+ "description": "Whether the top-end close (X) button renders. null (default) keeps the legacy coupling — X shows whenever PreventClose is false. true forces the X even on a modal dialog (backdrop/Escape stay disabled; the X still routes through the dismiss guard so an OnBeforeClose veto applies); false hides it for fully custom close chrome. Mirrors OverlayOptions.ShowCloseButton for service dialogs.",
28242
+ "isCascading": false,
28243
+ "captureUnmatched": false,
28244
+ "isEditorRequired": false
28245
+ },
28195
28246
  {
28196
28247
  "name": "Size",
28197
28248
  "type": "DialogSize",
@@ -36293,7 +36344,43 @@
36293
36344
  "name": "Cluster",
36294
36345
  "type": "bool",
36295
36346
  "default": null,
36296
- "description": "Marker clustering via leaflet.markercluster. CDN-loaded on first use; falls back to plain markers if the script fails to fetch.",
36347
+ "description": "Enable MapLibre GL native marker clustering. When true, markers are aggregated into circle bubbles via a GeoJSON cluster source — no additional script is fetched. Cluster bubbles are tinted with --lumeo-map-cluster-highlight (default amber) when at least one child marker is Highlighted. Fine-tune with ClusterRadius, ClusterMaxZoom, ClusterProperties, and ClusterColorExpression.",
36348
+ "isCascading": false,
36349
+ "captureUnmatched": false,
36350
+ "isEditorRequired": false
36351
+ },
36352
+ {
36353
+ "name": "ClusterProperties",
36354
+ "type": "Dictionary<string, object[]>?",
36355
+ "default": null,
36356
+ "description": "Additional MapLibre clusterProperties expressions merged into the GeoJSON cluster source alongside the built-in highlighted aggregator. Each entry maps a property name to a raw [operator, expression] array — e.g. { \"totalScore\", new object[] { \"+\", new object[] { \"get\", \"score\" } } }. Only meaningful when Cluster is true. Built-in keys (highlighted) win on collision.",
36357
+ "isCascading": false,
36358
+ "captureUnmatched": false,
36359
+ "isEditorRequired": false
36360
+ },
36361
+ {
36362
+ "name": "ClusterColorExpression",
36363
+ "type": "object[]?",
36364
+ "default": null,
36365
+ "description": "Replaces the default circle-color MapLibre paint expression on cluster circles. The default expression tints any bubble that contains a highlighted marker with --lumeo-map-cluster-highlight (default amber). Pass a raw MapLibre expression array to drive cluster color from a custom aggregated property instead.",
36366
+ "isCascading": false,
36367
+ "captureUnmatched": false,
36368
+ "isEditorRequired": false
36369
+ },
36370
+ {
36371
+ "name": "ClusterRadius",
36372
+ "type": "int",
36373
+ "default": "50",
36374
+ "description": "Target pixel radius of each cluster circle. Default is 50.",
36375
+ "isCascading": false,
36376
+ "captureUnmatched": false,
36377
+ "isEditorRequired": false
36378
+ },
36379
+ {
36380
+ "name": "ClusterMaxZoom",
36381
+ "type": "int",
36382
+ "default": "14",
36383
+ "description": "Zoom level at which markers fully emerge from their cluster. Default is 14. Lower values break clusters apart at coarser zoom levels.",
36297
36384
  "isCascading": false,
36298
36385
  "captureUnmatched": false,
36299
36386
  "isEditorRequired": false
@@ -36423,7 +36510,9 @@
36423
36510
  "description": "Cascading context passed to MapMarker + shape children so they can register themselves with the parent Map."
36424
36511
  }
36425
36512
  ],
36426
- "gotchas": [],
36513
+ "gotchas": [
36514
+ "MapLibre GL JS and its stylesheet are loaded at runtime from unpkg (CDN) the first time a Map mounts. For strict-CSP or air-gapped deployments, self-host them and set window.lumeoCdn = { mapLibreJs: '/your/maplibre-gl.js', mapLibreCss: '/your/maplibre-gl.css' } before the first Map renders, or run `lumeo deps install --lib maplibre` (CLI). See /docs/cdn-deps."
36515
+ ],
36427
36516
  "cssVars": [
36428
36517
  "--color-background",
36429
36518
  "--color-border",
@@ -36992,6 +37081,24 @@
36992
37081
  "captureUnmatched": false,
36993
37082
  "isEditorRequired": false
36994
37083
  },
37084
+ {
37085
+ "name": "ClusterExclude",
37086
+ "type": "bool",
37087
+ "default": null,
37088
+ "description": "When true and the parent Map has Cluster enabled, this marker is rendered as a DOM element rather than being absorbed into the cluster source. Use for permanently-visible markers (e.g. a depot, a selected result) that must never be hidden inside a cluster bubble. Default is false.",
37089
+ "isCascading": false,
37090
+ "captureUnmatched": false,
37091
+ "isEditorRequired": false
37092
+ },
37093
+ {
37094
+ "name": "Properties",
37095
+ "type": "Dictionary<string, object>?",
37096
+ "default": null,
37097
+ "description": "Arbitrary key-value properties merged into this marker's GeoJSON feature when Cluster is enabled. Drives custom ClusterProperties aggregation expressions (e.g. a score field summed across the cluster). Built-in keys (id, highlighted, color, hasClick) win on collision.",
37098
+ "isCascading": false,
37099
+ "captureUnmatched": false,
37100
+ "isEditorRequired": false
37101
+ },
36995
37102
  {
36996
37103
  "name": "MapCtx",
36997
37104
  "type": "Map.MapContext?",
@@ -41297,7 +41404,9 @@
41297
41404
  }
41298
41405
  ],
41299
41406
  "records": [],
41300
- "gotchas": [],
41407
+ "gotchas": [
41408
+ "pdf.js and its worker are loaded at runtime from jsDelivr (CDN) the first time a PdfViewer mounts. For strict-CSP or air-gapped deployments, self-host them and set window.lumeoCdn = { pdfJs: '/your/pdf.min.mjs', pdfJsWorker: '/your/pdf.worker.min.mjs' } before the first PdfViewer renders, or run `lumeo deps install --lib pdfjs` (CLI). See /docs/cdn-deps."
41409
+ ],
41301
41410
  "cssVars": [
41302
41411
  "--color-accent",
41303
41412
  "--color-accent-foreground",
@@ -41979,6 +42088,15 @@
41979
42088
  "captureUnmatched": false,
41980
42089
  "isEditorRequired": false
41981
42090
  },
42091
+ {
42092
+ "name": "Class",
42093
+ "type": "string?",
42094
+ "default": null,
42095
+ "description": "Extra CSS classes for the popover ROOT wrapper div, e.g. w-full to un-shrink-wrap a full-width trigger contained inside. The base classes (relative inline-block outline-none) are always preserved.",
42096
+ "isCascading": false,
42097
+ "captureUnmatched": false,
42098
+ "isEditorRequired": false
42099
+ },
41982
42100
  {
41983
42101
  "name": "AdditionalAttributes",
41984
42102
  "type": "Dictionary<string, object>?",
@@ -47676,6 +47794,15 @@
47676
47794
  "captureUnmatched": false,
47677
47795
  "isEditorRequired": false
47678
47796
  },
47797
+ {
47798
+ "name": "ShowCloseButton",
47799
+ "type": "bool?",
47800
+ "default": null,
47801
+ "description": "Whether the top-end close (X) button renders. null (default) keeps the legacy coupling — X shows whenever PreventClose is false. true forces the X on a modal sheet (backdrop/Escape stay disabled; the X routes through the dismiss guard); false hides it. Mirrors OverlayOptions.ShowCloseButton for service sheets.",
47802
+ "isCascading": false,
47803
+ "captureUnmatched": false,
47804
+ "isEditorRequired": false
47805
+ },
47679
47806
  {
47680
47807
  "name": "SwipeToClose",
47681
47808
  "type": "bool",
@@ -53251,7 +53378,8 @@
53251
53378
  "values": [
53252
53379
  "Default",
53253
53380
  "Card",
53254
- "Pill"
53381
+ "Pill",
53382
+ "Underline"
53255
53383
  ],
53256
53384
  "description": null
53257
53385
  },
@@ -55151,6 +55279,15 @@
55151
55279
  "captureUnmatched": false,
55152
55280
  "isEditorRequired": false
55153
55281
  },
55282
+ {
55283
+ "name": "FullWidth",
55284
+ "type": "bool",
55285
+ "default": null,
55286
+ "description": "When true, the time picker expands to fill its container width — equivalent to FullWidth on a Button. Propagates w-full to the Popover wrapper, PopoverTrigger, and the trigger button so the constraint reaches the rendered element through the shrink-wrap chain.",
55287
+ "isCascading": false,
55288
+ "captureUnmatched": false,
55289
+ "isEditorRequired": false
55290
+ },
55154
55291
  {
55155
55292
  "name": "AdditionalAttributes",
55156
55293
  "type": "Dictionary<string, object>?",
@@ -56800,6 +56937,15 @@
56800
56937
  "captureUnmatched": false,
56801
56938
  "isEditorRequired": false
56802
56939
  },
56940
+ {
56941
+ "name": "Align",
56942
+ "type": "Lumeo.Align",
56943
+ "default": "Lumeo.Align.Center",
56944
+ "description": null,
56945
+ "isCascading": false,
56946
+ "captureUnmatched": false,
56947
+ "isEditorRequired": false
56948
+ },
56803
56949
  {
56804
56950
  "name": "ShowArrow",
56805
56951
  "type": "bool",
package/src/registry.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/registry-schema.json",
3
- "version": "4.0.4",
4
- "generated": "2026-07-01T16:24:32.5413422Z",
3
+ "version": "4.1.0-preview.2",
4
+ "generated": "2026-07-02T13:28:45.9888660Z",
5
5
  "components": {
6
6
  "accordion": {
7
7
  "name": "Accordion",
@@ -1390,8 +1390,8 @@
1390
1390
  "registryUrl": "https://lumeo.nativ.sh/registry/combobox.json",
1391
1391
  "testCoverage": {
1392
1392
  "tier": 3,
1393
- "files": 10,
1394
- "tests": 93,
1393
+ "files": 11,
1394
+ "tests": 97,
1395
1395
  "relatedFiles": 0,
1396
1396
  "render": true,
1397
1397
  "behavior": true,
@@ -1873,8 +1873,8 @@
1873
1873
  "registryUrl": "https://lumeo.nativ.sh/registry/date-picker.json",
1874
1874
  "testCoverage": {
1875
1875
  "tier": 3,
1876
- "files": 10,
1877
- "tests": 56,
1876
+ "files": 11,
1877
+ "tests": 64,
1878
1878
  "relatedFiles": 1,
1879
1879
  "render": true,
1880
1880
  "behavior": true,
@@ -2083,7 +2083,7 @@
2083
2083
  "tier": 4,
2084
2084
  "files": 9,
2085
2085
  "tests": 44,
2086
- "relatedFiles": 1,
2086
+ "relatedFiles": 2,
2087
2087
  "render": true,
2088
2088
  "behavior": true,
2089
2089
  "a11y": true,
@@ -2197,7 +2197,7 @@
2197
2197
  "tier": 4,
2198
2198
  "files": 4,
2199
2199
  "tests": 31,
2200
- "relatedFiles": 0,
2200
+ "relatedFiles": 1,
2201
2201
  "render": true,
2202
2202
  "behavior": true,
2203
2203
  "a11y": true,
@@ -3433,12 +3433,14 @@
3433
3433
  "--color-muted-foreground",
3434
3434
  "--radius"
3435
3435
  ],
3436
- "gotchas": [],
3436
+ "gotchas": [
3437
+ "MapLibre GL JS and its stylesheet are loaded at runtime from unpkg (CDN) the first time a Map mounts. For strict-CSP or air-gapped deployments, self-host them and set window.lumeoCdn = { mapLibreJs: '/your/maplibre-gl.js', mapLibreCss: '/your/maplibre-gl.css' } before the first Map renders, or run `lumeo deps install --lib maplibre` (CLI). See /docs/cdn-deps."
3438
+ ],
3437
3439
  "registryUrl": "https://lumeo.nativ.sh/registry/map.json",
3438
3440
  "testCoverage": {
3439
3441
  "tier": 3,
3440
- "files": 4,
3441
- "tests": 13,
3442
+ "files": 5,
3443
+ "tests": 26,
3442
3444
  "relatedFiles": 0,
3443
3445
  "render": true,
3444
3446
  "behavior": true,
@@ -3828,8 +3830,8 @@
3828
3830
  "registryUrl": "https://lumeo.nativ.sh/registry/overlay.json",
3829
3831
  "testCoverage": {
3830
3832
  "tier": 3,
3831
- "files": 4,
3832
- "tests": 25,
3833
+ "files": 6,
3834
+ "tests": 39,
3833
3835
  "relatedFiles": 0,
3834
3836
  "render": true,
3835
3837
  "behavior": true,
@@ -3867,7 +3869,7 @@
3867
3869
  "tier": 3,
3868
3870
  "files": 4,
3869
3871
  "tests": 16,
3870
- "relatedFiles": 0,
3872
+ "relatedFiles": 1,
3871
3873
  "render": true,
3872
3874
  "behavior": true,
3873
3875
  "a11y": true,
@@ -3998,7 +4000,9 @@
3998
4000
  "--color-ring",
3999
4001
  "--radius"
4000
4002
  ],
4001
- "gotchas": [],
4003
+ "gotchas": [
4004
+ "pdf.js and its worker are loaded at runtime from jsDelivr (CDN) the first time a PdfViewer mounts. For strict-CSP or air-gapped deployments, self-host them and set window.lumeoCdn = { pdfJs: '/your/pdf.min.mjs', pdfJsWorker: '/your/pdf.worker.min.mjs' } before the first PdfViewer renders, or run `lumeo deps install --lib pdfjs` (CLI). See /docs/cdn-deps."
4005
+ ],
4002
4006
  "registryUrl": "https://lumeo.nativ.sh/registry/pdf-viewer.json",
4003
4007
  "testCoverage": {
4004
4008
  "tier": 3,
@@ -4172,8 +4176,8 @@
4172
4176
  "registryUrl": "https://lumeo.nativ.sh/registry/popover.json",
4173
4177
  "testCoverage": {
4174
4178
  "tier": 4,
4175
- "files": 7,
4176
- "tests": 30,
4179
+ "files": 8,
4180
+ "tests": 34,
4177
4181
  "relatedFiles": 0,
4178
4182
  "render": true,
4179
4183
  "behavior": true,
@@ -4945,8 +4949,8 @@
4945
4949
  "registryUrl": "https://lumeo.nativ.sh/registry/select.json",
4946
4950
  "testCoverage": {
4947
4951
  "tier": 4,
4948
- "files": 11,
4949
- "tests": 99,
4952
+ "files": 12,
4953
+ "tests": 105,
4950
4954
  "relatedFiles": 1,
4951
4955
  "render": true,
4952
4956
  "behavior": true,
@@ -5037,7 +5041,7 @@
5037
5041
  "tier": 4,
5038
5042
  "files": 7,
5039
5043
  "tests": 46,
5040
- "relatedFiles": 0,
5044
+ "relatedFiles": 1,
5041
5045
  "render": true,
5042
5046
  "behavior": true,
5043
5047
  "a11y": true,
@@ -5139,7 +5143,7 @@
5139
5143
  "testCoverage": {
5140
5144
  "tier": 3,
5141
5145
  "files": 10,
5142
- "tests": 47,
5146
+ "tests": 50,
5143
5147
  "relatedFiles": 0,
5144
5148
  "render": true,
5145
5149
  "behavior": true,
@@ -5988,8 +5992,8 @@
5988
5992
  "registryUrl": "https://lumeo.nativ.sh/registry/tabs.json",
5989
5993
  "testCoverage": {
5990
5994
  "tier": 3,
5991
- "files": 12,
5992
- "tests": 59,
5995
+ "files": 13,
5996
+ "tests": 64,
5993
5997
  "relatedFiles": 0,
5994
5998
  "render": true,
5995
5999
  "behavior": true,
@@ -6287,8 +6291,8 @@
6287
6291
  "registryUrl": "https://lumeo.nativ.sh/registry/time-picker.json",
6288
6292
  "testCoverage": {
6289
6293
  "tier": 3,
6290
- "files": 9,
6291
- "tests": 31,
6294
+ "files": 10,
6295
+ "tests": 38,
6292
6296
  "relatedFiles": 1,
6293
6297
  "render": true,
6294
6298
  "behavior": true,
@@ -6582,8 +6586,8 @@
6582
6586
  "registryUrl": "https://lumeo.nativ.sh/registry/tooltip.json",
6583
6587
  "testCoverage": {
6584
6588
  "tier": 4,
6585
- "files": 3,
6586
- "tests": 28,
6589
+ "files": 5,
6590
+ "tests": 40,
6587
6591
  "relatedFiles": 3,
6588
6592
  "render": true,
6589
6593
  "behavior": true,