@lumeo-ui/mcp-server 2.0.0-rc.33 → 2.0.0-rc.34

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": "2.0.0-rc.33",
3
+ "version": "2.0.0-rc.34",
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": "2.0.0-rc.33",
4
- "generated": "2026-05-12T13:38:06.3901454Z",
3
+ "version": "2.0.0-rc.34",
4
+ "generated": "2026-05-12T14:10:54.8294645Z",
5
5
  "stats": {
6
- "componentCount": 138,
7
- "totalParameters": 3297,
8
- "totalEnums": 96,
9
- "totalRecords": 50,
6
+ "componentCount": 139,
7
+ "totalParameters": 3356,
8
+ "totalEnums": 98,
9
+ "totalRecords": 52,
10
10
  "thinFallbacks": []
11
11
  },
12
12
  "themeTokens": [
@@ -13490,6 +13490,70 @@
13490
13490
  "description": null,
13491
13491
  "isCascading": false,
13492
13492
  "captureUnmatched": false
13493
+ },
13494
+ {
13495
+ "name": "Items",
13496
+ "type": "IEnumerable<object>?",
13497
+ "default": null,
13498
+ "description": "Optional data source. When set, ComboboxContent renders options from this list instead of ChildContent.",
13499
+ "isCascading": false,
13500
+ "captureUnmatched": false
13501
+ },
13502
+ {
13503
+ "name": "ItemValue",
13504
+ "type": "Func<object, string>",
13505
+ "default": "it => it?.ToString() ?? \"\"",
13506
+ "description": "Extracts the string value for each item. Defaults to ToString().",
13507
+ "isCascading": false,
13508
+ "captureUnmatched": false
13509
+ },
13510
+ {
13511
+ "name": "ItemText",
13512
+ "type": "Func<object, string>?",
13513
+ "default": null,
13514
+ "description": "Extracts the display label for each item. Defaults to ItemValue when null.",
13515
+ "isCascading": false,
13516
+ "captureUnmatched": false
13517
+ },
13518
+ {
13519
+ "name": "ItemGroup",
13520
+ "type": "Func<object, string?>?",
13521
+ "default": null,
13522
+ "description": "Optional group key extractor. When set, options are grouped under sticky headers.",
13523
+ "isCascading": false,
13524
+ "captureUnmatched": false
13525
+ },
13526
+ {
13527
+ "name": "ItemDisabled",
13528
+ "type": "Func<object, bool>?",
13529
+ "default": null,
13530
+ "description": "Optional per-item disabled predicate.",
13531
+ "isCascading": false,
13532
+ "captureUnmatched": false
13533
+ },
13534
+ {
13535
+ "name": "ItemTemplate",
13536
+ "type": "RenderFragment<object>?",
13537
+ "default": null,
13538
+ "description": "Optional custom render fragment for an item's content. Receives the raw item object.",
13539
+ "isCascading": false,
13540
+ "captureUnmatched": false
13541
+ },
13542
+ {
13543
+ "name": "Virtualize",
13544
+ "type": "bool",
13545
+ "default": null,
13546
+ "description": "When true and Items is set, uses Blazor's Virtualize component for the option list.",
13547
+ "isCascading": false,
13548
+ "captureUnmatched": false
13549
+ },
13550
+ {
13551
+ "name": "ItemSize",
13552
+ "type": "float",
13553
+ "default": "36f",
13554
+ "description": "Estimated pixel height of each option row used by the Virtualize component. Default 36.",
13555
+ "isCascading": false,
13556
+ "captureUnmatched": false
13493
13557
  }
13494
13558
  ],
13495
13559
  "events": [
@@ -13528,7 +13592,7 @@
13528
13592
  "records": [
13529
13593
  {
13530
13594
  "name": "ComboboxContext",
13531
- "signature": "ComboboxContext(\r\n string? Value, HashSet<string>? Values, string SearchText, bool IsOpen, bool Multiple, bool IsSearchLoading, bool Creatable,\r\n EventCallback<string> OnSelect, EventCallback<bool> SetOpen, EventCallback<string> OnSearch,\r\n EventCallback<string> OnCreateItem,\r\n string WrapperId, string ContentId, int FocusedIndex, string? FocusedItemId, string? FocusedItemValue,\r\n EventCallback<int> SetFocusedIndex,\r\n Action<string, string> RegisterItem, Action<string> UnregisterItem, int ItemCount,\r\n bool Invalid, bool Required)",
13595
+ "signature": "ComboboxContext(\r\n string? Value, HashSet<string>? Values, string SearchText, bool IsOpen, bool Multiple, bool IsSearchLoading, bool Creatable,\r\n EventCallback<string> OnSelect, EventCallback<bool> SetOpen, EventCallback<string> OnSearch,\r\n EventCallback<string> OnCreateItem,\r\n string WrapperId, string ContentId, int FocusedIndex, string? FocusedItemId, string? FocusedItemValue,\r\n EventCallback<int> SetFocusedIndex,\r\n Action<string, string> RegisterItem, Action<string> UnregisterItem, int ItemCount,\r\n bool Invalid, bool Required,\r\n // Data-bound mode params (null when composition mode)\r\n IEnumerable<object>? Items,\r\n Func<object, string> ItemValue,\r\n Func<object, string>? ItemText,\r\n Func<object, string?>? ItemGroup,\r\n Func<object, bool>? ItemDisabled,\r\n RenderFragment<object>? ItemTemplate,\r\n bool Virtualize,\r\n float ItemSize)",
13532
13596
  "description": null
13533
13597
  }
13534
13598
  ],
@@ -15899,6 +15963,38 @@
15899
15963
  "isCascading": false,
15900
15964
  "captureUnmatched": false
15901
15965
  },
15966
+ {
15967
+ "name": "RowIndex",
15968
+ "type": "int",
15969
+ "default": null,
15970
+ "description": "0-based index of the owning row within DisplayedItems (non-grouped).",
15971
+ "isCascading": false,
15972
+ "captureUnmatched": false
15973
+ },
15974
+ {
15975
+ "name": "ColumnIndex",
15976
+ "type": "int",
15977
+ "default": null,
15978
+ "description": "0-based index of this column within the visible columns.",
15979
+ "isCascading": false,
15980
+ "captureUnmatched": false
15981
+ },
15982
+ {
15983
+ "name": "AriaColIndex",
15984
+ "type": "int",
15985
+ "default": null,
15986
+ "description": "1-based ARIA column index (includes any leading non-data columns).",
15987
+ "isCascading": false,
15988
+ "captureUnmatched": false
15989
+ },
15990
+ {
15991
+ "name": "Navigable",
15992
+ "type": "bool",
15993
+ "default": "true",
15994
+ "description": "Whether this cell participates in roving-tabindex keyboard navigation. False in grouped mode where row indices are not globally unique.",
15995
+ "isCascading": false,
15996
+ "captureUnmatched": false
15997
+ },
15902
15998
  {
15903
15999
  "name": "Class",
15904
16000
  "type": "string?",
@@ -16628,6 +16724,14 @@
16628
16724
  "isCascading": false,
16629
16725
  "captureUnmatched": false
16630
16726
  },
16727
+ {
16728
+ "name": "AriaColIndex",
16729
+ "type": "int",
16730
+ "default": null,
16731
+ "description": "1-based ARIA column index (includes any leading non-data columns).",
16732
+ "isCascading": false,
16733
+ "captureUnmatched": false
16734
+ },
16631
16735
  {
16632
16736
  "name": "SortDirection",
16633
16737
  "type": "SortDirection",
@@ -20675,13 +20779,53 @@
20675
20779
  "captureUnmatched": false
20676
20780
  },
20677
20781
  {
20678
- "name": "OnFilesSelected",
20679
- "type": "EventCallback<InputFileChangeEventArgs>",
20782
+ "name": "MaxFileSize",
20783
+ "type": "long",
20784
+ "default": "10 * 1024 * 1024",
20785
+ "description": null,
20786
+ "isCascading": false,
20787
+ "captureUnmatched": false
20788
+ },
20789
+ {
20790
+ "name": "MaxFiles",
20791
+ "type": "int",
20792
+ "default": "10",
20793
+ "description": null,
20794
+ "isCascading": false,
20795
+ "captureUnmatched": false
20796
+ },
20797
+ {
20798
+ "name": "ShowThumbnails",
20799
+ "type": "bool",
20800
+ "default": null,
20801
+ "description": null,
20802
+ "isCascading": false,
20803
+ "captureUnmatched": false
20804
+ },
20805
+ {
20806
+ "name": "FileTemplate",
20807
+ "type": "RenderFragment<IBrowserFile>?",
20680
20808
  "default": null,
20681
20809
  "description": null,
20682
20810
  "isCascading": false,
20683
20811
  "captureUnmatched": false
20684
20812
  },
20813
+ {
20814
+ "name": "Variant",
20815
+ "type": "FileUploadVariant",
20816
+ "default": "FileUploadVariant.Dropzone",
20817
+ "description": null,
20818
+ "isCascading": false,
20819
+ "captureUnmatched": false
20820
+ },
20821
+ {
20822
+ "name": "Size",
20823
+ "type": "FileUploadSize",
20824
+ "default": "FileUploadSize.Default",
20825
+ "description": "Size of the trigger when Variant=\"Button\". Mirrors ButtonSize so a button-variant FileUpload can match neighbouring buttons in toolbars or compact forms. Has no visual effect on Dropzone or Avatar variants today.",
20826
+ "isCascading": false,
20827
+ "captureUnmatched": false
20828
+ },
20685
20829
  {
20686
20830
  "name": "ShowProgress",
20687
20831
  "type": "bool",
@@ -20699,50 +20843,106 @@
20699
20843
  "captureUnmatched": false
20700
20844
  },
20701
20845
  {
20702
- "name": "MaxFileSize",
20703
- "type": "long",
20704
- "default": "10 * 1024 * 1024",
20705
- "description": null,
20846
+ "name": "OnUpload",
20847
+ "type": "Func<FileUploadItem, IProgress<int>, CancellationToken, Task<string?>>?",
20848
+ "default": null,
20849
+ "description": "Consumer-supplied upload handler. Called once per file after selection (or after explicit StartUploadAsync if AutoUpload is false). Receives the item, an IProgress{T} for reporting percent 0-100, and a CancellationToken that fires if the user clicks Cancel. Should return the server-assigned URL/id on success, or throw/return null on failure.",
20706
20850
  "isCascading": false,
20707
20851
  "captureUnmatched": false
20708
20852
  },
20709
20853
  {
20710
- "name": "MaxFiles",
20854
+ "name": "AutoUpload",
20855
+ "type": "bool",
20856
+ "default": "true",
20857
+ "description": "When true (default), uploads begin immediately after files are selected. When false, the user must click the Upload button to start. Requires OnUpload to be set.",
20858
+ "isCascading": false,
20859
+ "captureUnmatched": false
20860
+ },
20861
+ {
20862
+ "name": "MaxConcurrentUploads",
20711
20863
  "type": "int",
20712
- "default": "10",
20713
- "description": null,
20864
+ "default": "3",
20865
+ "description": "Maximum number of OnUpload calls running simultaneously.",
20714
20866
  "isCascading": false,
20715
20867
  "captureUnmatched": false
20716
20868
  },
20717
20869
  {
20718
- "name": "ShowThumbnails",
20719
- "type": "bool",
20870
+ "name": "ChunkSize",
20871
+ "type": "long?",
20872
+ "default": null,
20873
+ "description": "Optional chunk size hint (bytes) for consumers that want to implement chunked/resumable upload inside their OnUpload handler. The component passes this value through ChunkSize but does NOT implement chunking itself.",
20874
+ "isCascading": false,
20875
+ "captureUnmatched": false
20876
+ },
20877
+ {
20878
+ "name": "MaxFileSizeError",
20879
+ "type": "string?",
20720
20880
  "default": null,
20721
20881
  "description": null,
20722
20882
  "isCascading": false,
20723
20883
  "captureUnmatched": false
20724
20884
  },
20725
20885
  {
20726
- "name": "FileTemplate",
20727
- "type": "RenderFragment<IBrowserFile>?",
20886
+ "name": "MaxFilesError",
20887
+ "type": "string?",
20728
20888
  "default": null,
20729
20889
  "description": null,
20730
20890
  "isCascading": false,
20731
20891
  "captureUnmatched": false
20732
20892
  },
20733
20893
  {
20734
- "name": "Variant",
20735
- "type": "FileUploadVariant",
20736
- "default": "FileUploadVariant.Dropzone",
20894
+ "name": "FileTypeError",
20895
+ "type": "string?",
20896
+ "default": null,
20737
20897
  "description": null,
20738
20898
  "isCascading": false,
20739
20899
  "captureUnmatched": false
20740
20900
  },
20741
20901
  {
20742
- "name": "Size",
20743
- "type": "FileUploadSize",
20744
- "default": "FileUploadSize.Default",
20745
- "description": "Size of the trigger when Variant=\"Button\". Mirrors ButtonSize so a button-variant FileUpload can match neighbouring buttons in toolbars or compact forms. Has no visual effect on Dropzone or Avatar variants today.",
20902
+ "name": "OnFilesSelected",
20903
+ "type": "EventCallback<InputFileChangeEventArgs>",
20904
+ "default": null,
20905
+ "description": "Fires when files are selected (raw args, kept for back-compat).",
20906
+ "isCascading": false,
20907
+ "captureUnmatched": false
20908
+ },
20909
+ {
20910
+ "name": "OnFileUploaded",
20911
+ "type": "EventCallback<FileUploadItem>",
20912
+ "default": null,
20913
+ "description": "Fires each time a file upload succeeds.",
20914
+ "isCascading": false,
20915
+ "captureUnmatched": false
20916
+ },
20917
+ {
20918
+ "name": "OnAllUploaded",
20919
+ "type": "EventCallback<IReadOnlyList<FileUploadItem>>",
20920
+ "default": null,
20921
+ "description": "Fires when all queued uploads have finished (succeeded, failed, or cancelled).",
20922
+ "isCascading": false,
20923
+ "captureUnmatched": false
20924
+ },
20925
+ {
20926
+ "name": "OnFileFailed",
20927
+ "type": "EventCallback<FileUploadItem>",
20928
+ "default": null,
20929
+ "description": "Fires each time a file upload fails.",
20930
+ "isCascading": false,
20931
+ "captureUnmatched": false
20932
+ },
20933
+ {
20934
+ "name": "OnFileRemoved",
20935
+ "type": "EventCallback<FileUploadItem>",
20936
+ "default": null,
20937
+ "description": "Fires when a file is removed from the list.",
20938
+ "isCascading": false,
20939
+ "captureUnmatched": false
20940
+ },
20941
+ {
20942
+ "name": "OnFileRejected",
20943
+ "type": "EventCallback<(IBrowserFile File, string Reason)>",
20944
+ "default": null,
20945
+ "description": "Fires when a file is rejected due to type/size/count constraints.",
20746
20946
  "isCascading": false,
20747
20947
  "captureUnmatched": false
20748
20948
  },
@@ -20767,7 +20967,32 @@
20767
20967
  {
20768
20968
  "name": "OnFilesSelected",
20769
20969
  "type": "EventCallback<InputFileChangeEventArgs>",
20770
- "description": null
20970
+ "description": "Fires when files are selected (raw args, kept for back-compat)."
20971
+ },
20972
+ {
20973
+ "name": "OnFileUploaded",
20974
+ "type": "EventCallback<FileUploadItem>",
20975
+ "description": "Fires each time a file upload succeeds."
20976
+ },
20977
+ {
20978
+ "name": "OnAllUploaded",
20979
+ "type": "EventCallback<IReadOnlyList<FileUploadItem>>",
20980
+ "description": "Fires when all queued uploads have finished (succeeded, failed, or cancelled)."
20981
+ },
20982
+ {
20983
+ "name": "OnFileFailed",
20984
+ "type": "EventCallback<FileUploadItem>",
20985
+ "description": "Fires each time a file upload fails."
20986
+ },
20987
+ {
20988
+ "name": "OnFileRemoved",
20989
+ "type": "EventCallback<FileUploadItem>",
20990
+ "description": "Fires when a file is removed from the list."
20991
+ },
20992
+ {
20993
+ "name": "OnFileRejected",
20994
+ "type": "EventCallback<(IBrowserFile File, string Reason)>",
20995
+ "description": "Fires when a file is rejected due to type/size/count constraints."
20771
20996
  }
20772
20997
  ],
20773
20998
  "enums": [
@@ -20788,13 +21013,23 @@
20788
21013
  "Lg"
20789
21014
  ],
20790
21015
  "description": null
21016
+ },
21017
+ {
21018
+ "name": "FileUploadStatus",
21019
+ "values": [
21020
+ "Pending",
21021
+ "Uploading",
21022
+ "Succeeded",
21023
+ "Failed",
21024
+ "Cancelled"
21025
+ ],
21026
+ "description": null
20791
21027
  }
20792
21028
  ],
20793
21029
  "records": [],
20794
21030
  "cssVars": [
20795
21031
  "--color-background",
20796
21032
  "--color-border",
20797
- "--color-card",
20798
21033
  "--color-destructive",
20799
21034
  "--color-input",
20800
21035
  "--color-muted",
@@ -20810,15 +21045,15 @@
20810
21045
  },
20811
21046
  {
20812
21047
  "title": "Image Upload",
20813
- "code": "<FileUpload\r\n Label=\"Upload an image\"\r\n Description=\"PNG, JPG or GIF up to 10MB\"\r\n Accept=\"image/*\"\r\n OnFilesSelected=\"HandleFiles\" />"
21048
+ "code": "<FileUpload\n Label=\"Upload an image\"\n Description=\"PNG, JPG or GIF up to 10MB\"\n Accept=\"image/*\"\n OnFilesSelected=\"HandleFiles\" />"
20814
21049
  },
20815
21050
  {
20816
21051
  "title": "Multiple Files",
20817
- "code": "<FileUpload\r\n Label=\"Upload documents\"\r\n Description=\"Select one or more files\"\r\n Multiple=\"true\"\r\n OnFilesSelected=\"HandleFiles\" />"
21052
+ "code": "<FileUpload\n Label=\"Upload documents\"\n Description=\"Select one or more files\"\n Multiple=\"true\"\n OnFilesSelected=\"HandleFiles\" />"
20818
21053
  },
20819
21054
  {
20820
- "title": "With Progress",
20821
- "code": "<FileUpload\r\n ShowProgress=\"true\"\r\n Progress=\"@_uploadProgress\"\r\n OnFilesSelected=\"@HandleFileUpload\"\r\n Accept=\"image/*\"\r\n Multiple=\"true\"\r\n Label=\"Upload Images\"\r\n Description=\"PNG, JPG up to 10MB\" />\r\n\r\n@code {\r\n private int _uploadProgress;\r\n private bool _isUploading;\r\n\r\n private async Task HandleFileUpload(InputFileChangeEventArgs e)\r\n {\r\n _isUploading = true;\r\n _uploadProgress = 0;\r\n for (int i = 0; i <= 100; i += 20)\r\n {\r\n _uploadProgress = i;\r\n StateHasChanged();\r\n await Task.Delay(300);\r\n }\r\n _isUploading = false;\r\n StateHasChanged();\r\n }\r\n}"
21055
+ "title": "Upload with progress (fake delay)",
21056
+ "code": "<FileUpload\n Multiple=\"true\"\n Label=\"Upload files\"\n OnUpload=\"@SimulateUpload\"\n OnFileUploaded=\"@(item => _uploadedCount++)\"\n OnAllUploaded=\"@(items => _allDoneMsg = $\"All {items.Count} file(s) done!\")\" />\n\n@code {\n private async Task<string?> SimulateUpload(\n FileUpload.FileUploadItem item,\n IProgress<int> progress,\n CancellationToken ct)\n {\n for (int pct = 0; pct <= 100; pct += 10)\n {\n ct.ThrowIfCancellationRequested();\n progress.Report(pct);\n await Task.Delay(50, ct);\n }\n return $\"https://cdn.example.com/{item.Name}\";\n }\n}"
20822
21057
  }
20823
21058
  ],
20824
21059
  "subComponents": {},
@@ -21553,6 +21788,46 @@
21553
21788
  "isCascading": false,
21554
21789
  "captureUnmatched": false
21555
21790
  },
21791
+ {
21792
+ "name": "TodayHighlight",
21793
+ "type": "bool",
21794
+ "default": "true",
21795
+ "description": "Highlight today with a vertical line and dot marker. Default true.",
21796
+ "isCascading": false,
21797
+ "captureUnmatched": false
21798
+ },
21799
+ {
21800
+ "name": "BarHeight",
21801
+ "type": "int?",
21802
+ "default": null,
21803
+ "description": "Override the pixel height of each task bar (default 22).",
21804
+ "isCascading": false,
21805
+ "captureUnmatched": false
21806
+ },
21807
+ {
21808
+ "name": "ColumnWidth",
21809
+ "type": "int?",
21810
+ "default": null,
21811
+ "description": "Override the pixel width of each date column for the current view mode.",
21812
+ "isCascading": false,
21813
+ "captureUnmatched": false
21814
+ },
21815
+ {
21816
+ "name": "BarColor",
21817
+ "type": "Func<GanttTask, string?>?",
21818
+ "default": null,
21819
+ "description": "Per-task bar colour override. Return a CSS colour string (hex, rgb, or a CSS variable reference like \"var(--color-destructive)\") or null to use the primary theme colour.",
21820
+ "isCascading": false,
21821
+ "captureUnmatched": false
21822
+ },
21823
+ {
21824
+ "name": "GroupBy",
21825
+ "type": "Func<GanttTask, string>?",
21826
+ "default": null,
21827
+ "description": "Optional grouping function. When set, tasks are sorted by group label and a visual section-header row is injected before the first task in each group.",
21828
+ "isCascading": false,
21829
+ "captureUnmatched": false
21830
+ },
21556
21831
  {
21557
21832
  "name": "TrailingContent",
21558
21833
  "type": "RenderFragment?",
@@ -26840,6 +27115,192 @@
26840
27115
  "parseFailed": false,
26841
27116
  "parseError": null
26842
27117
  },
27118
+ "PivotGrid": {
27119
+ "name": "PivotGrid",
27120
+ "category": "Data Display",
27121
+ "subcategory": null,
27122
+ "description": "Cross-tab / pivot table that summarizes flat data into rows x columns x aggregated measures.",
27123
+ "nugetPackage": "Lumeo",
27124
+ "files": [
27125
+ "UI/PivotGrid/PivotCellClickArgs.cs",
27126
+ "UI/PivotGrid/PivotField.cs",
27127
+ "UI/PivotGrid/PivotGrid.razor",
27128
+ "UI/PivotGrid/PivotMeasure.cs"
27129
+ ],
27130
+ "namespace": "Lumeo",
27131
+ "inheritsFrom": null,
27132
+ "implements": [],
27133
+ "parameters": [
27134
+ {
27135
+ "name": "Items",
27136
+ "type": "IEnumerable<TItem>?",
27137
+ "default": null,
27138
+ "description": null,
27139
+ "isCascading": false,
27140
+ "captureUnmatched": false
27141
+ },
27142
+ {
27143
+ "name": "RowFields",
27144
+ "type": "IReadOnlyList<PivotField<TItem>>",
27145
+ "default": "Array.Empty<PivotField<TItem>>()",
27146
+ "description": null,
27147
+ "isCascading": false,
27148
+ "captureUnmatched": false
27149
+ },
27150
+ {
27151
+ "name": "ColumnFields",
27152
+ "type": "IReadOnlyList<PivotField<TItem>>",
27153
+ "default": "Array.Empty<PivotField<TItem>>()",
27154
+ "description": null,
27155
+ "isCascading": false,
27156
+ "captureUnmatched": false
27157
+ },
27158
+ {
27159
+ "name": "Measures",
27160
+ "type": "IReadOnlyList<PivotMeasure<TItem>>",
27161
+ "default": "Array.Empty<PivotMeasure<TItem>>()",
27162
+ "description": null,
27163
+ "isCascading": false,
27164
+ "captureUnmatched": false
27165
+ },
27166
+ {
27167
+ "name": "ShowRowGrandTotal",
27168
+ "type": "bool",
27169
+ "default": "true",
27170
+ "description": null,
27171
+ "isCascading": false,
27172
+ "captureUnmatched": false
27173
+ },
27174
+ {
27175
+ "name": "ShowColumnGrandTotal",
27176
+ "type": "bool",
27177
+ "default": "true",
27178
+ "description": null,
27179
+ "isCascading": false,
27180
+ "captureUnmatched": false
27181
+ },
27182
+ {
27183
+ "name": "ShowSubtotals",
27184
+ "type": "bool",
27185
+ "default": "true",
27186
+ "description": null,
27187
+ "isCascading": false,
27188
+ "captureUnmatched": false
27189
+ },
27190
+ {
27191
+ "name": "Collapsible",
27192
+ "type": "bool",
27193
+ "default": "true",
27194
+ "description": null,
27195
+ "isCascading": false,
27196
+ "captureUnmatched": false
27197
+ },
27198
+ {
27199
+ "name": "Compact",
27200
+ "type": "bool",
27201
+ "default": null,
27202
+ "description": null,
27203
+ "isCascading": false,
27204
+ "captureUnmatched": false
27205
+ },
27206
+ {
27207
+ "name": "GrandTotalLabel",
27208
+ "type": "string",
27209
+ "default": "\"Grand Total\"",
27210
+ "description": null,
27211
+ "isCascading": false,
27212
+ "captureUnmatched": false
27213
+ },
27214
+ {
27215
+ "name": "EmptyContent",
27216
+ "type": "RenderFragment?",
27217
+ "default": null,
27218
+ "description": null,
27219
+ "isCascading": false,
27220
+ "captureUnmatched": false
27221
+ },
27222
+ {
27223
+ "name": "OnCellClick",
27224
+ "type": "EventCallback<PivotCellClickArgs>",
27225
+ "default": null,
27226
+ "description": "Invoked when a data cell is clicked. Carries the clicked cell context for drill-down.",
27227
+ "isCascading": false,
27228
+ "captureUnmatched": false
27229
+ },
27230
+ {
27231
+ "name": "Class",
27232
+ "type": "string?",
27233
+ "default": null,
27234
+ "description": null,
27235
+ "isCascading": false,
27236
+ "captureUnmatched": false
27237
+ },
27238
+ {
27239
+ "name": "AdditionalAttributes",
27240
+ "type": "Dictionary<string, object>?",
27241
+ "default": null,
27242
+ "description": null,
27243
+ "isCascading": false,
27244
+ "captureUnmatched": true
27245
+ }
27246
+ ],
27247
+ "events": [
27248
+ {
27249
+ "name": "OnCellClick",
27250
+ "type": "EventCallback<PivotCellClickArgs>",
27251
+ "description": "Invoked when a data cell is clicked. Carries the clicked cell context for drill-down."
27252
+ }
27253
+ ],
27254
+ "enums": [
27255
+ {
27256
+ "name": "DisplayRowKind",
27257
+ "values": [
27258
+ "GroupHeader",
27259
+ "Leaf",
27260
+ "Subtotal"
27261
+ ],
27262
+ "description": null
27263
+ }
27264
+ ],
27265
+ "records": [
27266
+ {
27267
+ "name": "ColumnLeaf",
27268
+ "signature": "ColumnLeaf(string Label, object? Key, IReadOnlyList<TItem> Items)",
27269
+ "description": null
27270
+ },
27271
+ {
27272
+ "name": "DisplayRow",
27273
+ "signature": "DisplayRow(RowNode Node, DisplayRowKind Kind, bool Collapsed, int Level, string Label)",
27274
+ "description": null
27275
+ }
27276
+ ],
27277
+ "cssVars": [
27278
+ "--color-border",
27279
+ "--color-card",
27280
+ "--color-foreground",
27281
+ "--color-muted",
27282
+ "--color-muted-foreground",
27283
+ "--color-primary",
27284
+ "--radius"
27285
+ ],
27286
+ "examples": [
27287
+ {
27288
+ "title": "Sales by region × year",
27289
+ "code": "<PivotGrid TItem=\"Sale\"\n Items=\"_sales\"\n RowFields=\"@(new List<PivotField<Sale>> { new(\"Region\", s => s.Region) })\"\n ColumnFields=\"@(new List<PivotField<Sale>> { new(\"Year\", s => s.Year, v => \"FY \" + v) })\"\n Measures=\"@(new List<PivotMeasure<Sale>> { new(\"Revenue\", s => s.Amount, PivotAggregate.Sum, d => \"$\" + d.ToString(\"N0\")) })\" />\n\n@code {\n record Sale(string Region, string Country, int Year, int Quarter, decimal Amount, int Units);\n List<Sale> _sales = new() { /* ... */ };\n}"
27290
+ },
27291
+ {
27292
+ "title": "Multiple measures (sum + count)",
27293
+ "code": "<PivotGrid TItem=\"Sale\"\n Items=\"_sales\"\n RowFields=\"_regionField\"\n ColumnFields=\"_yearField\"\n Measures=\"@(new List<PivotMeasure<Sale>> {\n new(\"Revenue\", s => s.Amount, PivotAggregate.Sum, d => \"$\" + d.ToString(\"N0\")),\n new(\"Deals\", s => s.Units, PivotAggregate.Count),\n })\" />"
27294
+ },
27295
+ {
27296
+ "title": "Collapsible nested row groups",
27297
+ "code": "<PivotGrid TItem=\"Sale\"\n Items=\"_sales\"\n RowFields=\"@(new List<PivotField<Sale>> {\n new(\"Region\", s => s.Region),\n new(\"Country\", s => s.Country),\n })\"\n ColumnFields=\"_yearField\"\n Measures=\"_amountMeasure\"\n Collapsible=\"true\"\n Compact=\"true\" />"
27298
+ }
27299
+ ],
27300
+ "subComponents": {},
27301
+ "parseFailed": false,
27302
+ "parseError": null
27303
+ },
26843
27304
  "PopConfirm": {
26844
27305
  "name": "PopConfirm",
26845
27306
  "category": "Overlay",
@@ -29601,6 +30062,62 @@
29601
30062
  "isCascading": false,
29602
30063
  "captureUnmatched": false
29603
30064
  },
30065
+ {
30066
+ "name": "NowIndicator",
30067
+ "type": "bool",
30068
+ "default": "true",
30069
+ "description": "Show the current-time indicator line in time-grid views. Default: true. Maps to FullCalendar's nowIndicator option.",
30070
+ "isCascading": false,
30071
+ "captureUnmatched": false
30072
+ },
30073
+ {
30074
+ "name": "SlotMinTime",
30075
+ "type": "TimeOnly?",
30076
+ "default": null,
30077
+ "description": "Earliest visible time slot in time-grid views (e.g. 07:00). Maps to FullCalendar's slotMinTime. Default: 00:00 (FullCalendar shows the full day).",
30078
+ "isCascading": false,
30079
+ "captureUnmatched": false
30080
+ },
30081
+ {
30082
+ "name": "SlotMaxTime",
30083
+ "type": "TimeOnly?",
30084
+ "default": null,
30085
+ "description": "Latest visible time slot in time-grid views (e.g. 22:00). Maps to FullCalendar's slotMaxTime. Default: 24:00 (FullCalendar shows the full day).",
30086
+ "isCascading": false,
30087
+ "captureUnmatched": false
30088
+ },
30089
+ {
30090
+ "name": "SlotDuration",
30091
+ "type": "TimeSpan?",
30092
+ "default": null,
30093
+ "description": "Duration of each time slot row in time-grid views. Maps to FullCalendar's slotDuration (formatted as HH:mm:ss). Default: 00:30:00.",
30094
+ "isCascading": false,
30095
+ "captureUnmatched": false
30096
+ },
30097
+ {
30098
+ "name": "Resources",
30099
+ "type": "IReadOnlyList<SchedulerResource>?",
30100
+ "default": null,
30101
+ "description": "Optional list of resources (people, rooms, equipment). When provided, events are color-coded by their ResourceId and a legend is rendered above the calendar. Note: this uses Lumeo's color-coding fallback, NOT FullCalendar Premium resource lanes (which require a paid FullCalendar Premium license not bundled here).",
30102
+ "isCascading": false,
30103
+ "captureUnmatched": false
30104
+ },
30105
+ {
30106
+ "name": "EventClassNames",
30107
+ "type": "Func<SchedulerEvent, string>?",
30108
+ "default": null,
30109
+ "description": "Optional callback that returns extra CSS class names for an event chip. The classes are appended to the FullCalendar event's classNames. Use for conditional styling without touching Color.",
30110
+ "isCascading": false,
30111
+ "captureUnmatched": false
30112
+ },
30113
+ {
30114
+ "name": "EventColor",
30115
+ "type": "Func<SchedulerEvent, string>?",
30116
+ "default": null,
30117
+ "description": "Optional callback that returns a CSS color string for an event. Applied as backgroundColor / borderColor in FullCalendar. Supersedes Color when both are set; resource color applies as a fallback when neither is set.",
30118
+ "isCascading": false,
30119
+ "captureUnmatched": false
30120
+ },
29604
30121
  {
29605
30122
  "name": "Class",
29606
30123
  "type": "string?",
@@ -29646,6 +30163,8 @@
29646
30163
  "--color-border",
29647
30164
  "--color-card",
29648
30165
  "--color-foreground",
30166
+ "--color-muted",
30167
+ "--color-muted-foreground",
29649
30168
  "--radius"
29650
30169
  ],
29651
30170
  "examples": [
@@ -30255,6 +30774,70 @@
30255
30774
  "description": null,
30256
30775
  "isCascading": false,
30257
30776
  "captureUnmatched": true
30777
+ },
30778
+ {
30779
+ "name": "Items",
30780
+ "type": "IEnumerable<object>?",
30781
+ "default": null,
30782
+ "description": "Optional data source. When set, SelectContent renders options from this list instead of ChildContent.",
30783
+ "isCascading": false,
30784
+ "captureUnmatched": false
30785
+ },
30786
+ {
30787
+ "name": "ItemValue",
30788
+ "type": "Func<object, string>",
30789
+ "default": "it => it?.ToString() ?? \"\"",
30790
+ "description": "Extracts the string value for each item. Defaults to ToString().",
30791
+ "isCascading": false,
30792
+ "captureUnmatched": false
30793
+ },
30794
+ {
30795
+ "name": "ItemText",
30796
+ "type": "Func<object, string>?",
30797
+ "default": null,
30798
+ "description": "Extracts the display label for each item. Defaults to ItemValue when null.",
30799
+ "isCascading": false,
30800
+ "captureUnmatched": false
30801
+ },
30802
+ {
30803
+ "name": "ItemGroup",
30804
+ "type": "Func<object, string?>?",
30805
+ "default": null,
30806
+ "description": "Optional group key extractor. When set, options are grouped under sticky headers.",
30807
+ "isCascading": false,
30808
+ "captureUnmatched": false
30809
+ },
30810
+ {
30811
+ "name": "ItemDisabled",
30812
+ "type": "Func<object, bool>?",
30813
+ "default": null,
30814
+ "description": "Optional per-item disabled predicate.",
30815
+ "isCascading": false,
30816
+ "captureUnmatched": false
30817
+ },
30818
+ {
30819
+ "name": "ItemTemplate",
30820
+ "type": "RenderFragment<object>?",
30821
+ "default": null,
30822
+ "description": "Optional custom render fragment for an item's content. Receives the raw item object.",
30823
+ "isCascading": false,
30824
+ "captureUnmatched": false
30825
+ },
30826
+ {
30827
+ "name": "Virtualize",
30828
+ "type": "bool",
30829
+ "default": null,
30830
+ "description": "When true and Items is set, uses Blazor's Virtualize component for the option list.",
30831
+ "isCascading": false,
30832
+ "captureUnmatched": false
30833
+ },
30834
+ {
30835
+ "name": "ItemSize",
30836
+ "type": "float",
30837
+ "default": "36f",
30838
+ "description": "Estimated pixel height of each option row used by the Virtualize component. Default 36.",
30839
+ "isCascading": false,
30840
+ "captureUnmatched": false
30258
30841
  }
30259
30842
  ],
30260
30843
  "events": [
@@ -30288,7 +30871,7 @@
30288
30871
  "records": [
30289
30872
  {
30290
30873
  "name": "SelectContext",
30291
- "signature": "SelectContext(\r\n string? Value, bool IsOpen, bool Searchable, string SearchText,\r\n bool Multiple, List<string>? Values, bool IsLoading, bool Disabled, bool Clearable, bool Creatable, int MaxDisplayTags,\r\n EventCallback<string> OnSelect, EventCallback<bool> SetOpen, EventCallback<string> OnSearch,\r\n EventCallback OnClear, EventCallback<string> OnCreateItem,\r\n string WrapperId, string ContentId, int FocusedIndex, string? FocusedItemId, string? FocusedItemValue,\r\n EventCallback<int> SetFocusedIndex,\r\n Action<string, string> RegisterItem, Action<string> UnregisterItem,\r\n bool Invalid, bool Required)",
30874
+ "signature": "SelectContext(\r\n string? Value, bool IsOpen, bool Searchable, string SearchText,\r\n bool Multiple, List<string>? Values, bool IsLoading, bool Disabled, bool Clearable, bool Creatable, int MaxDisplayTags,\r\n EventCallback<string> OnSelect, EventCallback<bool> SetOpen, EventCallback<string> OnSearch,\r\n EventCallback OnClear, EventCallback<string> OnCreateItem,\r\n string WrapperId, string ContentId, int FocusedIndex, string? FocusedItemId, string? FocusedItemValue,\r\n EventCallback<int> SetFocusedIndex,\r\n Action<string, string> RegisterItem, Action<string> UnregisterItem,\r\n bool Invalid, bool Required,\r\n // Data-bound mode params (null when composition mode)\r\n IEnumerable<object>? Items,\r\n Func<object, string> ItemValue,\r\n Func<object, string>? ItemText,\r\n Func<object, string?>? ItemGroup,\r\n Func<object, bool>? ItemDisabled,\r\n RenderFragment<object>? ItemTemplate,\r\n bool Virtualize,\r\n float ItemSize)",
30292
30875
  "description": null
30293
30876
  }
30294
30877
  ],
package/src/registry.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/registry-schema.json",
3
3
  "version": "2.0.0",
4
- "generated": "2026-05-12T13:38:04.7938611Z",
4
+ "generated": "2026-05-12T14:10:53.8104355Z",
5
5
  "components": {
6
6
  "accordion": {
7
7
  "name": "Accordion",
@@ -1309,7 +1309,6 @@
1309
1309
  "cssVars": [
1310
1310
  "--color-background",
1311
1311
  "--color-border",
1312
- "--color-card",
1313
1312
  "--color-destructive",
1314
1313
  "--color-input",
1315
1314
  "--color-muted",
@@ -2077,6 +2076,35 @@
2077
2076
  ],
2078
2077
  "registryUrl": "https://lumeo.nativ.sh/registry/pick-list.json"
2079
2078
  },
2079
+ "pivot-grid": {
2080
+ "name": "PivotGrid",
2081
+ "category": "Data Display",
2082
+ "subcategory": null,
2083
+ "description": "Cross-tab / pivot table that summarizes flat data into rows x columns x aggregated measures.",
2084
+ "thumbnail": "/preview-cards/pivot-grid.png",
2085
+ "hasDocsPage": true,
2086
+ "nugetPackage": "Lumeo",
2087
+ "files": [
2088
+ "UI/PivotGrid/PivotCellClickArgs.cs",
2089
+ "UI/PivotGrid/PivotField.cs",
2090
+ "UI/PivotGrid/PivotGrid.razor",
2091
+ "UI/PivotGrid/PivotMeasure.cs"
2092
+ ],
2093
+ "dependencies": [],
2094
+ "packageDependencies": [
2095
+ "Blazicons.Lucide"
2096
+ ],
2097
+ "cssVars": [
2098
+ "--color-border",
2099
+ "--color-card",
2100
+ "--color-foreground",
2101
+ "--color-muted",
2102
+ "--color-muted-foreground",
2103
+ "--color-primary",
2104
+ "--radius"
2105
+ ],
2106
+ "registryUrl": "https://lumeo.nativ.sh/registry/pivot-grid.json"
2107
+ },
2080
2108
  "pop-confirm": {
2081
2109
  "name": "PopConfirm",
2082
2110
  "category": "Overlay",
@@ -2395,6 +2423,8 @@
2395
2423
  "--color-border",
2396
2424
  "--color-card",
2397
2425
  "--color-foreground",
2426
+ "--color-muted",
2427
+ "--color-muted-foreground",
2398
2428
  "--radius"
2399
2429
  ],
2400
2430
  "registryUrl": "https://lumeo.nativ.sh/registry/scheduler.json"