@lumeo-ui/mcp-server 3.17.0 → 3.19.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.17.0",
3
+ "version": "3.19.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,12 +1,12 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/components-api-schema.json",
3
- "version": "3.17.0",
4
- "generated": "2026-06-18T10:13:10.1991980Z",
3
+ "version": "3.19.0",
4
+ "generated": "2026-06-18T14:38:21.3799147Z",
5
5
  "stats": {
6
6
  "componentCount": 163,
7
- "totalParameters": 4076,
7
+ "totalParameters": 4102,
8
8
  "totalEnums": 74,
9
- "totalRecords": 70,
9
+ "totalRecords": 71,
10
10
  "serviceCount": 33,
11
11
  "thinFallbacks": []
12
12
  },
@@ -819,6 +819,12 @@
819
819
  "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler, int? activationPx, int? firePx)",
820
820
  "summary": null
821
821
  },
822
+ {
823
+ "name": "RegisterDrawerSwipe",
824
+ "returnType": "ValueTask",
825
+ "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler, int? activationPx, int? firePx, double? velocity)",
826
+ "summary": null
827
+ },
822
828
  {
823
829
  "name": "UnregisterDrawerSwipe",
824
830
  "returnType": "ValueTask",
@@ -831,6 +837,36 @@
831
837
  "signature": "OnSwipeDismiss(string elementId)",
832
838
  "summary": null
833
839
  },
840
+ {
841
+ "name": "RegisterDrawerSnap",
842
+ "returnType": "ValueTask",
843
+ "signature": "RegisterDrawerSnap(string elementId, string direction, Func<Task<bool>> dismissHandler, Func<int, Task> snapHandler, IReadOnlyList<double> snapPoints, int activeIndex, bool dismissible, int? activationPx, int? firePx, double? velocity)",
844
+ "summary": null
845
+ },
846
+ {
847
+ "name": "SetDrawerSnap",
848
+ "returnType": "ValueTask",
849
+ "signature": "SetDrawerSnap(string elementId, int index)",
850
+ "summary": null
851
+ },
852
+ {
853
+ "name": "UnregisterDrawerSnap",
854
+ "returnType": "ValueTask",
855
+ "signature": "UnregisterDrawerSnap(string elementId)",
856
+ "summary": null
857
+ },
858
+ {
859
+ "name": "OnDrawerSnapChange",
860
+ "returnType": "Task",
861
+ "signature": "OnDrawerSnapChange(string elementId, int index)",
862
+ "summary": null
863
+ },
864
+ {
865
+ "name": "OnDrawerSnapDismiss",
866
+ "returnType": "Task<bool>",
867
+ "signature": "OnDrawerSnapDismiss(string elementId)",
868
+ "summary": null
869
+ },
834
870
  {
835
871
  "name": "RegisterSortableTouch",
836
872
  "returnType": "ValueTask",
@@ -2057,12 +2093,36 @@
2057
2093
  "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler, int? activationPx, int? firePx)",
2058
2094
  "summary": "3.0.1 — extended overload that accepts swipe-to-close thresholds. Both parameters are optional; passing null falls back to the JS hardcoded defaults so existing callers keep working unchanged. Mirrors the LumeoGestureOptions bag."
2059
2095
  },
2096
+ {
2097
+ "name": "RegisterDrawerSwipe",
2098
+ "returnType": "ValueTask",
2099
+ "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler, int? activationPx, int? firePx, double? velocity)",
2100
+ "summary": "3.19 — adds (px/ms): a flick faster than this in the dismiss direction closes the drawer even below . Default impl ignores it so non-overriding implementations keep working."
2101
+ },
2060
2102
  {
2061
2103
  "name": "UnregisterDrawerSwipe",
2062
2104
  "returnType": "ValueTask",
2063
2105
  "signature": "UnregisterDrawerSwipe(string elementId)",
2064
2106
  "summary": null
2065
2107
  },
2108
+ {
2109
+ "name": "RegisterDrawerSnap",
2110
+ "returnType": "ValueTask",
2111
+ "signature": "RegisterDrawerSnap(string elementId, string direction, Func<Task<bool>> dismissHandler, Func<int, Task> snapHandler, IReadOnlyList<double> snapPoints, int activeIndex, bool dismissible, int? activationPx, int? firePx, double? velocity)",
2112
+ "summary": "Registers a snap-point gesture: the drawer rests at one of (fractions 0&lt;f≤1), drags between them, and dismisses when flicked/dragged below the lowest. fires with the new index on each settle; fires on close. Default impl falls back to plain swipe-dismiss."
2113
+ },
2114
+ {
2115
+ "name": "SetDrawerSnap",
2116
+ "returnType": "ValueTask",
2117
+ "signature": "SetDrawerSnap(string elementId, int index)",
2118
+ "summary": "Programmatically move a snap-point drawer to ."
2119
+ },
2120
+ {
2121
+ "name": "UnregisterDrawerSnap",
2122
+ "returnType": "ValueTask",
2123
+ "signature": "UnregisterDrawerSnap(string elementId)",
2124
+ "summary": null
2125
+ },
2066
2126
  {
2067
2127
  "name": "RegisterTabSwipe",
2068
2128
  "returnType": "ValueTask",
@@ -7644,6 +7704,14 @@
7644
7704
  "isCascading": false,
7645
7705
  "captureUnmatched": false
7646
7706
  },
7707
+ {
7708
+ "name": "Href",
7709
+ "type": "string?",
7710
+ "default": null,
7711
+ "description": "When set, the button renders as an &lt;a href&gt; styled exactly like a button — the Blazor-idiomatic polymorphism for the common \"link that looks like a button\" case (#269). All visual props (Variant/Size/icons) still apply; Disabled/IsLoading map to aria-disabled + non-interactive styling since a link can't be natively disabled. Leave null for a normal &lt;button&gt;.",
7712
+ "isCascading": false,
7713
+ "captureUnmatched": false
7714
+ },
7647
7715
  {
7648
7716
  "name": "Type",
7649
7717
  "type": "ButtonType",
@@ -17338,6 +17406,30 @@
17338
17406
  "isCascading": false,
17339
17407
  "captureUnmatched": false
17340
17408
  },
17409
+ {
17410
+ "name": "Source",
17411
+ "type": "string?",
17412
+ "default": null,
17413
+ "description": "Raw source to render (block variant). When set together with Highlighter the output is syntax-highlighted; otherwise the source is rendered as escaped plain text. Falls back to ChildContent when null. (#196)",
17414
+ "isCascading": false,
17415
+ "captureUnmatched": false
17416
+ },
17417
+ {
17418
+ "name": "Language",
17419
+ "type": "string?",
17420
+ "default": null,
17421
+ "description": "Language hint (e.g. \"csharp\", \"ts\") — emitted as data-language and passed to Highlighter.",
17422
+ "isCascading": false,
17423
+ "captureUnmatched": false
17424
+ },
17425
+ {
17426
+ "name": "Highlighter",
17427
+ "type": "Func<string, string?, MarkupString>?",
17428
+ "default": null,
17429
+ "description": "Pluggable syntax highlighter: (code, language) =&gt; safe HTML. Plug in Prism / Shiki / highlight.js (or a server-side highlighter). The delegate MUST return SAFE HTML — escape untrusted source. Core ships no built-in highlighter on purpose (dependency-free), mirroring StreamingText.MarkdownRenderer. Ignored unless Source is set.",
17430
+ "isCascading": false,
17431
+ "captureUnmatched": false
17432
+ },
17341
17433
  {
17342
17434
  "name": "ChildContent",
17343
17435
  "type": "RenderFragment?",
@@ -25531,8 +25623,8 @@
25531
25623
  "code": "<Drawer @bind-Open=\"_preventDrawerOpen\">\n <DrawerTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\">Open Protected Drawer</Button>\n </DrawerTrigger>\n <DrawerContent PreventClose=\"true\">\n <DrawerHeader>\n <DrawerTitle>Confirm Action</DrawerTitle>\n <DrawerDescription>You must choose an option to continue.</DrawerDescription>\n </DrawerHeader>\n <Stack Gap=\"2\" Class=\"p-4\">\n <Button Class=\"w-full\" OnClick=\"@(() => _preventDrawerOpen = false)\">Confirm</Button>\n <Button Variant=\"Button.ButtonVariant.Outline\" Class=\"w-full\" OnClick=\"@(() => _preventDrawerOpen = false)\">Cancel</Button>\n </Stack>\n </DrawerContent>\n</Drawer>\n\n@code {\n private bool _preventDrawerOpen;\n}"
25532
25624
  },
25533
25625
  {
25534
- "title": "Side interactive",
25535
- "code": "<Segmented @bind-Value=\"_drawerSideSel\" Options=\"_drawerSideOptions\" />\n<Drawer @bind-Open=\"_open\">\n <DrawerTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\">Open Drawer (@_drawerSideSel)</Button>\n </DrawerTrigger>\n <DrawerContent Side=\"@_activeSide\">\n <DrawerHeader>\n <DrawerTitle>@_drawerSideSel Drawer</DrawerTitle>\n <DrawerDescription>Slides in from the @_drawerSideSel.ToLower().</DrawerDescription>\n </DrawerHeader>\n <DrawerFooter>\n <DrawerClose><Button Class=\"w-full\">Close</Button></DrawerClose>\n </DrawerFooter>\n </DrawerContent>\n</Drawer>\n\n@code {\n private string _drawerSideSel = \"Bottom\";\n private Lumeo.Side _activeSide => Enum.Parse<Lumeo.Side>(_drawerSideSel);\n private List<Segmented.SegmentedOption> _drawerSideOptions = new()\n {\n new() { Label = \"Top\", Value = \"Top\" },\n new() { Label = \"Right\", Value = \"Right\" },\n new() { Label = \"Bottom\", Value = \"Bottom\" },\n new() { Label = \"Left\", Value = \"Left\" },\n };\n}"
25626
+ "title": "Snap points (touch)",
25627
+ "code": "<Drawer @bind-Open=\"_snapOpen\">\n <DrawerTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\">Open Snap Drawer</Button>\n </DrawerTrigger>\n <DrawerContent SnapPoints=\"_snapPoints\" @bind-ActiveSnapPoint=\"_snapIndex\">\n <DrawerHeader>\n <DrawerTitle>Snap Drawer</DrawerTitle>\n <DrawerDescription>Drag the handle to snap between 40%, 75%, and full height.</DrawerDescription>\n </DrawerHeader>\n <Stack Gap=\"2\" Class=\"p-4\">\n @* …content… *@\n </Stack>\n <DrawerFooter>\n <DrawerClose><Button Class=\"w-full\">Close</Button></DrawerClose>\n </DrawerFooter>\n </DrawerContent>\n</Drawer>\n\n@code {\n private bool _snapOpen;\n private int _snapIndex = 1; // open at 75%\n private double[] _snapPoints = { 0.4, 0.75, 1.0 };\n}"
25536
25628
  }
25537
25629
  ],
25538
25630
  "subComponents": {
@@ -25640,6 +25732,30 @@
25640
25732
  "isCascading": false,
25641
25733
  "captureUnmatched": false
25642
25734
  },
25735
+ {
25736
+ "name": "SnapPoints",
25737
+ "type": "IReadOnlyList<double>?",
25738
+ "default": null,
25739
+ "description": "vaul-style snap points: fractional resting heights in ascending order, each 0 &lt; f ≤ 1 (e.g. [0.4, 0.75, 1] = 40% / 75% / fully open). When set on a Top/Bottom drawer, the panel rests at one of these heights, drags between them, and dismisses when flicked/dragged below the lowest. Ignored for Left/Right (which keep plain swipe-to-dismiss). (#218)",
25740
+ "isCascading": false,
25741
+ "captureUnmatched": false
25742
+ },
25743
+ {
25744
+ "name": "ActiveSnapPoint",
25745
+ "type": "int",
25746
+ "default": "-1",
25747
+ "description": "Index into SnapPoints of the current resting snap. Two-way bindable: updates as the user drags between snaps, and setting it moves the drawer programmatically. -1 (default) opens at the most-open (last) snap. (#218)",
25748
+ "isCascading": false,
25749
+ "captureUnmatched": false
25750
+ },
25751
+ {
25752
+ "name": "ActiveSnapPointChanged",
25753
+ "type": "EventCallback<int>",
25754
+ "default": null,
25755
+ "description": null,
25756
+ "isCascading": false,
25757
+ "captureUnmatched": false
25758
+ },
25643
25759
  {
25644
25760
  "name": "Class",
25645
25761
  "type": "string?",
@@ -25665,7 +25781,13 @@
25665
25781
  "captureUnmatched": true
25666
25782
  }
25667
25783
  ],
25668
- "events": [],
25784
+ "events": [
25785
+ {
25786
+ "name": "ActiveSnapPointChanged",
25787
+ "type": "EventCallback<int>",
25788
+ "description": null
25789
+ }
25790
+ ],
25669
25791
  "enums": [
25670
25792
  {
25671
25793
  "name": "DrawerAnimation",
@@ -27921,6 +28043,22 @@
27921
28043
  "isCascading": false,
27922
28044
  "captureUnmatched": false
27923
28045
  },
28046
+ {
28047
+ "name": "Filters",
28048
+ "type": "IReadOnlyList<FilterDescriptor>?",
28049
+ "default": null,
28050
+ "description": "Data-driven filter model (#319): when supplied, the bar renders a dismissable FilterPill per descriptor (Field / Operator / Value) and raises OnRemoveFilter on dismiss. The Pills slot still works and renders alongside, so this is purely additive.",
28051
+ "isCascading": false,
28052
+ "captureUnmatched": false
28053
+ },
28054
+ {
28055
+ "name": "OnRemoveFilter",
28056
+ "type": "EventCallback<FilterDescriptor>",
28057
+ "default": null,
28058
+ "description": null,
28059
+ "isCascading": false,
28060
+ "captureUnmatched": false
28061
+ },
27924
28062
  {
27925
28063
  "name": "Class",
27926
28064
  "type": "string?",
@@ -27938,9 +28076,21 @@
27938
28076
  "captureUnmatched": true
27939
28077
  }
27940
28078
  ],
27941
- "events": [],
28079
+ "events": [
28080
+ {
28081
+ "name": "OnRemoveFilter",
28082
+ "type": "EventCallback<FilterDescriptor>",
28083
+ "description": null
28084
+ }
28085
+ ],
27942
28086
  "enums": [],
27943
- "records": [],
28087
+ "records": [
28088
+ {
28089
+ "name": "FilterDescriptor",
28090
+ "signature": "FilterDescriptor(string Field, string? Operator = null, string? Value = null)",
28091
+ "description": "A single active filter: a field, an optional comparison operator (e.g. \"=\", \"&gt;\", \"contains\"), and a display value."
28092
+ }
28093
+ ],
27944
28094
  "gotchas": [],
27945
28095
  "cssVars": [
27946
28096
  "--color-muted",
@@ -27981,6 +28131,14 @@
27981
28131
  "isCascading": false,
27982
28132
  "captureUnmatched": false
27983
28133
  },
28134
+ {
28135
+ "name": "Operator",
28136
+ "type": "string?",
28137
+ "default": null,
28138
+ "description": "Optional comparison operator shown between Label and Value (e.g. \"=\", \"&gt;\", \"contains\"). When null the pill reads \"Label: Value\". (#319)",
28139
+ "isCascading": false,
28140
+ "captureUnmatched": false
28141
+ },
27984
28142
  {
27985
28143
  "name": "Value",
27986
28144
  "type": "string",
@@ -28877,6 +29035,14 @@
28877
29035
  "isCascading": false,
28878
29036
  "captureUnmatched": false
28879
29037
  },
29038
+ {
29039
+ "name": "LabelContent",
29040
+ "type": "RenderFragment?",
29041
+ "default": null,
29042
+ "description": "Custom center/label content — overrides the default text. Drop in a &lt;NumberTicker&gt; (Lumeo.Motion) here for an animated value, instead of duplicating count-up animation in core. (#277)",
29043
+ "isCascading": false,
29044
+ "captureUnmatched": false
29045
+ },
28880
29046
  {
28881
29047
  "name": "ShowValue",
28882
29048
  "type": "bool",
@@ -29099,6 +29265,14 @@
29099
29265
  "isCascading": false,
29100
29266
  "captureUnmatched": false
29101
29267
  },
29268
+ {
29269
+ "name": "As",
29270
+ "type": "string?",
29271
+ "default": null,
29272
+ "description": "Render the heading's visual styling on this element tag instead of the semantic h{Level} (e.g. \"p\", \"div\", \"span\") — the asChild-style escape hatch for \"looks like a heading, isn't one in the document outline\". Visual only; supply role/aria-level via attributes for heading semantics. Null = the normal h{Level}. (#295)",
29273
+ "isCascading": false,
29274
+ "captureUnmatched": false
29275
+ },
29102
29276
  {
29103
29277
  "name": "Size",
29104
29278
  "type": "string?",
@@ -35516,6 +35690,62 @@
35516
35690
  "isCascading": false,
35517
35691
  "captureUnmatched": false
35518
35692
  },
35693
+ {
35694
+ "name": "Page",
35695
+ "type": "int?",
35696
+ "default": null,
35697
+ "description": null,
35698
+ "isCascading": false,
35699
+ "captureUnmatched": false
35700
+ },
35701
+ {
35702
+ "name": "PageChanged",
35703
+ "type": "EventCallback<int>",
35704
+ "default": null,
35705
+ "description": null,
35706
+ "isCascading": false,
35707
+ "captureUnmatched": false
35708
+ },
35709
+ {
35710
+ "name": "TotalPages",
35711
+ "type": "int?",
35712
+ "default": null,
35713
+ "description": null,
35714
+ "isCascading": false,
35715
+ "captureUnmatched": false
35716
+ },
35717
+ {
35718
+ "name": "TotalItems",
35719
+ "type": "int?",
35720
+ "default": null,
35721
+ "description": null,
35722
+ "isCascading": false,
35723
+ "captureUnmatched": false
35724
+ },
35725
+ {
35726
+ "name": "PageSize",
35727
+ "type": "int",
35728
+ "default": "10",
35729
+ "description": null,
35730
+ "isCascading": false,
35731
+ "captureUnmatched": false
35732
+ },
35733
+ {
35734
+ "name": "SiblingCount",
35735
+ "type": "int",
35736
+ "default": "1",
35737
+ "description": "Pages shown on each side of the current page (default 1).",
35738
+ "isCascading": false,
35739
+ "captureUnmatched": false
35740
+ },
35741
+ {
35742
+ "name": "BoundaryCount",
35743
+ "type": "int",
35744
+ "default": "1",
35745
+ "description": "Pages always shown at the very start/end (default 1).",
35746
+ "isCascading": false,
35747
+ "captureUnmatched": false
35748
+ },
35519
35749
  {
35520
35750
  "name": "Class",
35521
35751
  "type": "string?",
@@ -35533,7 +35763,13 @@
35533
35763
  "captureUnmatched": true
35534
35764
  }
35535
35765
  ],
35536
- "events": [],
35766
+ "events": [
35767
+ {
35768
+ "name": "PageChanged",
35769
+ "type": "EventCallback<int>",
35770
+ "description": null
35771
+ }
35772
+ ],
35537
35773
  "enums": [],
35538
35774
  "records": [],
35539
35775
  "gotchas": [],
@@ -43753,6 +43989,46 @@
43753
43989
  "isCascading": false,
43754
43990
  "captureUnmatched": false
43755
43991
  },
43992
+ {
43993
+ "name": "Type",
43994
+ "type": "Sparkline.SparkType",
43995
+ "default": "Sparkline.SparkType.Line",
43996
+ "description": "Inline sparkline shape (Line / Area / Bars). (#276)",
43997
+ "isCascading": false,
43998
+ "captureUnmatched": false
43999
+ },
44000
+ {
44001
+ "name": "ShowArea",
44002
+ "type": "bool",
44003
+ "default": null,
44004
+ "description": "Fill the area under a line sparkline. (#276)",
44005
+ "isCascading": false,
44006
+ "captureUnmatched": false
44007
+ },
44008
+ {
44009
+ "name": "ShowLast",
44010
+ "type": "bool",
44011
+ "default": null,
44012
+ "description": "Mark the most recent point. (#276)",
44013
+ "isCascading": false,
44014
+ "captureUnmatched": false
44015
+ },
44016
+ {
44017
+ "name": "ShowTooltips",
44018
+ "type": "bool",
44019
+ "default": null,
44020
+ "description": "Per-point markers + hover tooltips on the inline sparkline. (#276)",
44021
+ "isCascading": false,
44022
+ "captureUnmatched": false
44023
+ },
44024
+ {
44025
+ "name": "SparkColor",
44026
+ "type": "string?",
44027
+ "default": null,
44028
+ "description": "Override the sparkline color (CSS color / var). (#276)",
44029
+ "isCascading": false,
44030
+ "captureUnmatched": false
44031
+ },
43756
44032
  {
43757
44033
  "name": "Class",
43758
44034
  "type": "string?",
@@ -43981,6 +44257,14 @@
43981
44257
  "isCascading": false,
43982
44258
  "captureUnmatched": false
43983
44259
  },
44260
+ {
44261
+ "name": "ShowTooltips",
44262
+ "type": "bool",
44263
+ "default": null,
44264
+ "description": "Render a marker dot at every data point with a native SVG &lt;title&gt; (hover tooltip showing the value) — point highlight + tooltips with no JS. Off by default. (#275)",
44265
+ "isCascading": false,
44266
+ "captureUnmatched": false
44267
+ },
43984
44268
  {
43985
44269
  "name": "StrokeWidth",
43986
44270
  "type": "double",
@@ -44760,6 +45044,14 @@
44760
45044
  "isCascading": false,
44761
45045
  "captureUnmatched": false
44762
45046
  },
45047
+ {
45048
+ "name": "ValueContent",
45049
+ "type": "RenderFragment?",
45050
+ "default": null,
45051
+ "description": "Custom value content — overrides Value. Drop in a &lt;NumberTicker&gt; (Lumeo.Motion) here for an animated count-up, rather than duplicating animation logic in core. (#273)",
45052
+ "isCascading": false,
45053
+ "captureUnmatched": false
45054
+ },
44763
45055
  {
44764
45056
  "name": "Prefix",
44765
45057
  "type": "RenderFragment?",
package/src/registry.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/registry-schema.json",
3
- "version": "3.17.0",
4
- "generated": "2026-06-18T10:13:08.5380673Z",
3
+ "version": "3.19.0",
4
+ "generated": "2026-06-18T14:38:19.7829197Z",
5
5
  "components": {
6
6
  "accordion": {
7
7
  "name": "Accordion",
@@ -3476,7 +3476,9 @@
3476
3476
  "files": [
3477
3477
  "UI/SparkCard/SparkCard.razor"
3478
3478
  ],
3479
- "dependencies": [],
3479
+ "dependencies": [
3480
+ "sparkline"
3481
+ ],
3480
3482
  "packageDependencies": [],
3481
3483
  "cssVars": [
3482
3484
  "--color-border",