@lumeo-ui/mcp-server 4.0.3 → 4.1.0-preview.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": "4.0.3",
3
+ "version": "4.1.0-preview.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,10 +1,10 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/components-api-schema.json",
3
- "version": "4.0.3",
4
- "generated": "2026-07-01T16:03:19.2439901Z",
3
+ "version": "4.1.0-preview.1",
4
+ "generated": "2026-07-02T08:47:23.5739781Z",
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,
@@ -1335,6 +1335,12 @@
1335
1335
  "signature": "PrefersReducedMotion()",
1336
1336
  "summary": null
1337
1337
  },
1338
+ {
1339
+ "name": "IsActiveElementFocusVisible",
1340
+ "returnType": "ValueTask<bool>",
1341
+ "signature": "IsActiveElementFocusVisible()",
1342
+ "summary": null
1343
+ },
1338
1344
  {
1339
1345
  "name": "TouchRippleCoords",
1340
1346
  "returnType": "ValueTask<RipplePoint>",
@@ -1818,6 +1824,12 @@
1818
1824
  "default": "Lumeo.Side.Right",
1819
1825
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
1820
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
+ },
1821
1833
  {
1822
1834
  "name": "PreventClose",
1823
1835
  "type": "bool",
@@ -1907,6 +1919,12 @@
1907
1919
  "default": "Lumeo.Side.Right",
1908
1920
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
1909
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
+ },
1910
1928
  {
1911
1929
  "name": "PreventClose",
1912
1930
  "type": "bool",
@@ -2555,6 +2573,12 @@
2555
2573
  "signature": "PrefersReducedMotion()",
2556
2574
  "summary": "Core-side prefers-reduced-motion: reduce query (mirrors the Lumeo.Motion helper) for core components that animate via Blazor/JS and can't be fully neutralised by a CSS @media block alone. Default returns false (motion allowed) so existing implementers/test doubles keep compiling unchanged."
2557
2575
  },
2576
+ {
2577
+ "name": "IsActiveElementFocusVisible",
2578
+ "returnType": "ValueTask<bool>",
2579
+ "signature": "IsActiveElementFocusVisible()",
2580
+ "summary": "True when the currently-focused element is in the browser's :focus-visible state (keyboard/programmatic focus) rather than a plain :focus a mouse click also leaves behind. Tooltip uses this to gate opening on focusin so a clicked-then-abandoned trigger doesn't stay open forever — a native button keeps DOM focus after a mouse click with nothing to clear it, but :focus-visible is false for that case in supporting browsers. Default returns true (old behaviour: always open on focus) so existing implementers/test doubles — which have no real DOM to query — keep compiling and behaving unchanged."
2581
+ },
2558
2582
  {
2559
2583
  "name": "TouchRippleCoords",
2560
2584
  "returnType": "ValueTask<RipplePoint>",
@@ -3224,6 +3248,12 @@
3224
3248
  "default": null,
3225
3249
  "summary": "Suppress dismissal via backdrop click / Escape. Applies to: Dialog, Sheet, Drawer."
3226
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
+ },
3227
3257
  {
3228
3258
  "name": "SheetSide",
3229
3259
  "type": "Lumeo.Side",
@@ -3567,6 +3597,12 @@
3567
3597
  "default": "Lumeo.Side.Right",
3568
3598
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
3569
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
+ },
3570
3606
  {
3571
3607
  "name": "PreventClose",
3572
3608
  "type": "bool",
@@ -26816,6 +26852,15 @@
26816
26852
  "captureUnmatched": false,
26817
26853
  "isEditorRequired": false
26818
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
+ },
26819
26864
  {
26820
26865
  "name": "AutoFocus",
26821
26866
  "type": "bool",
@@ -27080,6 +27125,15 @@
27080
27125
  "captureUnmatched": false,
27081
27126
  "isEditorRequired": false
27082
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
+ },
27083
27137
  {
27084
27138
  "name": "FirstDayOfWeek",
27085
27139
  "type": "DayOfWeek?",
@@ -28180,6 +28234,15 @@
28180
28234
  "captureUnmatched": false,
28181
28235
  "isEditorRequired": false
28182
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
+ },
28183
28246
  {
28184
28247
  "name": "Size",
28185
28248
  "type": "DialogSize",
@@ -36281,7 +36344,43 @@
36281
36344
  "name": "Cluster",
36282
36345
  "type": "bool",
36283
36346
  "default": null,
36284
- "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.",
36285
36384
  "isCascading": false,
36286
36385
  "captureUnmatched": false,
36287
36386
  "isEditorRequired": false
@@ -36411,7 +36510,9 @@
36411
36510
  "description": "Cascading context passed to MapMarker + shape children so they can register themselves with the parent Map."
36412
36511
  }
36413
36512
  ],
36414
- "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
+ ],
36415
36516
  "cssVars": [
36416
36517
  "--color-background",
36417
36518
  "--color-border",
@@ -36980,6 +37081,24 @@
36980
37081
  "captureUnmatched": false,
36981
37082
  "isEditorRequired": false
36982
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
+ },
36983
37102
  {
36984
37103
  "name": "MapCtx",
36985
37104
  "type": "Map.MapContext?",
@@ -41285,7 +41404,9 @@
41285
41404
  }
41286
41405
  ],
41287
41406
  "records": [],
41288
- "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
+ ],
41289
41410
  "cssVars": [
41290
41411
  "--color-accent",
41291
41412
  "--color-accent-foreground",
@@ -41967,6 +42088,15 @@
41967
42088
  "captureUnmatched": false,
41968
42089
  "isEditorRequired": false
41969
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
+ },
41970
42100
  {
41971
42101
  "name": "AdditionalAttributes",
41972
42102
  "type": "Dictionary<string, object>?",
@@ -47664,6 +47794,15 @@
47664
47794
  "captureUnmatched": false,
47665
47795
  "isEditorRequired": false
47666
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
+ },
47667
47806
  {
47668
47807
  "name": "SwipeToClose",
47669
47808
  "type": "bool",
@@ -55139,6 +55278,15 @@
55139
55278
  "captureUnmatched": false,
55140
55279
  "isEditorRequired": false
55141
55280
  },
55281
+ {
55282
+ "name": "FullWidth",
55283
+ "type": "bool",
55284
+ "default": null,
55285
+ "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.",
55286
+ "isCascading": false,
55287
+ "captureUnmatched": false,
55288
+ "isEditorRequired": false
55289
+ },
55142
55290
  {
55143
55291
  "name": "AdditionalAttributes",
55144
55292
  "type": "Dictionary<string, object>?",
@@ -56788,6 +56936,15 @@
56788
56936
  "captureUnmatched": false,
56789
56937
  "isEditorRequired": false
56790
56938
  },
56939
+ {
56940
+ "name": "Align",
56941
+ "type": "Lumeo.Align",
56942
+ "default": "Lumeo.Align.Center",
56943
+ "description": null,
56944
+ "isCascading": false,
56945
+ "captureUnmatched": false,
56946
+ "isEditorRequired": false
56947
+ },
56791
56948
  {
56792
56949
  "name": "ShowArrow",
56793
56950
  "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.3",
4
- "generated": "2026-07-01T16:03:18.0127450Z",
3
+ "version": "4.1.0-preview.1",
4
+ "generated": "2026-07-02T08:47:21.7648612Z",
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": 5,
3834
+ "tests": 35,
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,
@@ -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": 26,
6589
+ "files": 5,
6590
+ "tests": 40,
6587
6591
  "relatedFiles": 3,
6588
6592
  "render": true,
6589
6593
  "behavior": true,