@lumeo-ui/mcp-server 3.5.0 → 3.5.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.
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/components-api-schema.json",
3
- "version": "3.5.0",
4
- "generated": "2026-05-28T07:33:40.3685580Z",
3
+ "version": "3.5.2",
4
+ "generated": "2026-05-28T12:37:45.8507262Z",
5
5
  "stats": {
6
6
  "componentCount": 163,
7
- "totalParameters": 3892,
8
- "totalEnums": 69,
7
+ "totalParameters": 3897,
8
+ "totalEnums": 71,
9
9
  "totalRecords": 63,
10
+ "serviceCount": 32,
10
11
  "thinFallbacks": []
11
12
  },
12
13
  "themeTokens": [
@@ -424,6 +425,3088 @@
424
425
  ]
425
426
  }
426
427
  ],
428
+ "services": [
429
+ {
430
+ "name": "AlertDialogOptions",
431
+ "kind": "record",
432
+ "namespace": "Lumeo.Services",
433
+ "summary": null,
434
+ "properties": [
435
+ {
436
+ "name": "Title",
437
+ "type": "string",
438
+ "default": "\"Are you sure?\"",
439
+ "summary": null
440
+ },
441
+ {
442
+ "name": "Description",
443
+ "type": "string?",
444
+ "default": null,
445
+ "summary": null
446
+ },
447
+ {
448
+ "name": "ConfirmText",
449
+ "type": "string",
450
+ "default": "\"Continue\"",
451
+ "summary": null
452
+ },
453
+ {
454
+ "name": "CancelText",
455
+ "type": "string",
456
+ "default": "\"Cancel\"",
457
+ "summary": null
458
+ },
459
+ {
460
+ "name": "IsDestructive",
461
+ "type": "bool",
462
+ "default": null,
463
+ "summary": null
464
+ }
465
+ ],
466
+ "methods": [],
467
+ "events": [],
468
+ "enumValues": []
469
+ },
470
+ {
471
+ "name": "Align",
472
+ "kind": "enum",
473
+ "namespace": "Lumeo",
474
+ "summary": "Alignment along an axis (e.g. how a popover content aligns relative to its trigger along the perpendicular axis). Replaces the per-component *Align enums (PopoverAlign, DropdownMenuAlign, HoverCardAlign) in 3.0 (BREAKING).",
475
+ "properties": [],
476
+ "methods": [],
477
+ "events": [],
478
+ "enumValues": [
479
+ {
480
+ "name": "Start",
481
+ "summary": "Align to the start (left in LTR, top vertically)."
482
+ },
483
+ {
484
+ "name": "Center",
485
+ "summary": "Center."
486
+ },
487
+ {
488
+ "name": "End",
489
+ "summary": "Align to the end (right in LTR, bottom vertically)."
490
+ }
491
+ ]
492
+ },
493
+ {
494
+ "name": "Breakpoint",
495
+ "kind": "enum",
496
+ "namespace": "Lumeo.Services",
497
+ "summary": "Tailwind v4–aligned breakpoint name.",
498
+ "properties": [],
499
+ "methods": [],
500
+ "events": [],
501
+ "enumValues": [
502
+ {
503
+ "name": "Xs",
504
+ "summary": "Width < 640px — the mobile-first floor."
505
+ },
506
+ {
507
+ "name": "Sm",
508
+ "summary": "Width in [640, 768) — large phones / small tablets in portrait."
509
+ },
510
+ {
511
+ "name": "Md",
512
+ "summary": "Width in [768, 1024) — tablets, phones in landscape."
513
+ },
514
+ {
515
+ "name": "Lg",
516
+ "summary": "Width in [1024, 1280) — laptops, narrow desktops."
517
+ },
518
+ {
519
+ "name": "Xl",
520
+ "summary": "Width in [1280, 1536) — typical desktop monitors."
521
+ },
522
+ {
523
+ "name": "Xxl",
524
+ "summary": "Width >= 1536px — wide desktop monitors."
525
+ }
526
+ ]
527
+ },
528
+ {
529
+ "name": "Breakpoints",
530
+ "kind": "staticClass",
531
+ "namespace": "Lumeo.Services",
532
+ "summary": "Tailwind breakpoint pixel values, exposed as constants so call sites don't repeat the magic numbers. Aligned with Tailwind v4 defaults.",
533
+ "properties": [
534
+ {
535
+ "name": "Sm",
536
+ "type": "int",
537
+ "default": "640",
538
+ "summary": null
539
+ },
540
+ {
541
+ "name": "Md",
542
+ "type": "int",
543
+ "default": "768",
544
+ "summary": null
545
+ },
546
+ {
547
+ "name": "Lg",
548
+ "type": "int",
549
+ "default": "1024",
550
+ "summary": null
551
+ },
552
+ {
553
+ "name": "Xl",
554
+ "type": "int",
555
+ "default": "1280",
556
+ "summary": null
557
+ },
558
+ {
559
+ "name": "Xxl",
560
+ "type": "int",
561
+ "default": "1536",
562
+ "summary": null
563
+ }
564
+ ],
565
+ "methods": [],
566
+ "events": [],
567
+ "enumValues": []
568
+ },
569
+ {
570
+ "name": "ComponentInteropService",
571
+ "kind": "class",
572
+ "namespace": "Lumeo.Services",
573
+ "summary": null,
574
+ "properties": [],
575
+ "methods": [
576
+ {
577
+ "name": "RegisterClickOutside",
578
+ "returnType": "ValueTask",
579
+ "signature": "RegisterClickOutside(string elementId, string? triggerElementId, Func<Task> handler)",
580
+ "summary": null
581
+ },
582
+ {
583
+ "name": "UnregisterClickOutside",
584
+ "returnType": "ValueTask",
585
+ "signature": "UnregisterClickOutside(string elementId)",
586
+ "summary": null
587
+ },
588
+ {
589
+ "name": "OnClickOutside",
590
+ "returnType": "Task",
591
+ "signature": "OnClickOutside(string elementId)",
592
+ "summary": null
593
+ },
594
+ {
595
+ "name": "FocusElement",
596
+ "returnType": "ValueTask",
597
+ "signature": "FocusElement(string elementId)",
598
+ "summary": null
599
+ },
600
+ {
601
+ "name": "FocusMenuItemByIndex",
602
+ "returnType": "ValueTask",
603
+ "signature": "FocusMenuItemByIndex(string containerId, int index)",
604
+ "summary": null
605
+ },
606
+ {
607
+ "name": "GetMenuItemCount",
608
+ "returnType": "ValueTask<int>",
609
+ "signature": "GetMenuItemCount(string containerId)",
610
+ "summary": null
611
+ },
612
+ {
613
+ "name": "LockScroll",
614
+ "returnType": "ValueTask",
615
+ "signature": "LockScroll()",
616
+ "summary": null
617
+ },
618
+ {
619
+ "name": "AttachOverlaySlideEnd",
620
+ "returnType": "ValueTask",
621
+ "signature": "AttachOverlaySlideEnd(string elementId)",
622
+ "summary": null
623
+ },
624
+ {
625
+ "name": "UnlockScroll",
626
+ "returnType": "ValueTask",
627
+ "signature": "UnlockScroll()",
628
+ "summary": null
629
+ },
630
+ {
631
+ "name": "SetHtmlClass",
632
+ "returnType": "ValueTask",
633
+ "signature": "SetHtmlClass(string className, bool active)",
634
+ "summary": null
635
+ },
636
+ {
637
+ "name": "SetupFocusTrap",
638
+ "returnType": "ValueTask",
639
+ "signature": "SetupFocusTrap(string elementId)",
640
+ "summary": null
641
+ },
642
+ {
643
+ "name": "RemoveFocusTrap",
644
+ "returnType": "ValueTask",
645
+ "signature": "RemoveFocusTrap(string elementId)",
646
+ "summary": null
647
+ },
648
+ {
649
+ "name": "RegisterSvDrag",
650
+ "returnType": "ValueTask",
651
+ "signature": "RegisterSvDrag(string elementId, Func<double, double, Task> handler)",
652
+ "summary": null
653
+ },
654
+ {
655
+ "name": "UnregisterSvDrag",
656
+ "returnType": "ValueTask",
657
+ "signature": "UnregisterSvDrag(string elementId)",
658
+ "summary": null
659
+ },
660
+ {
661
+ "name": "OnSvDrag",
662
+ "returnType": "Task",
663
+ "signature": "OnSvDrag(string elementId, double s, double v)",
664
+ "summary": null
665
+ },
666
+ {
667
+ "name": "RegisterPinchZoom",
668
+ "returnType": "ValueTask",
669
+ "signature": "RegisterPinchZoom(string elementId, Func<double, Task> handler)",
670
+ "summary": null
671
+ },
672
+ {
673
+ "name": "UnregisterPinchZoom",
674
+ "returnType": "ValueTask",
675
+ "signature": "UnregisterPinchZoom(string elementId)",
676
+ "summary": null
677
+ },
678
+ {
679
+ "name": "OnPinchZoom",
680
+ "returnType": "Task",
681
+ "signature": "OnPinchZoom(string elementId, double scaleDelta)",
682
+ "summary": null
683
+ },
684
+ {
685
+ "name": "GetViewportSize",
686
+ "returnType": "ValueTask<ViewportSize>",
687
+ "signature": "GetViewportSize()",
688
+ "summary": null
689
+ },
690
+ {
691
+ "name": "RegisterViewportListener",
692
+ "returnType": "ValueTask<ViewportSize?>",
693
+ "signature": "RegisterViewportListener(DotNetObjectReference<ResponsiveService> dotnetRef)",
694
+ "summary": null
695
+ },
696
+ {
697
+ "name": "UnregisterViewportListener",
698
+ "returnType": "ValueTask",
699
+ "signature": "UnregisterViewportListener()",
700
+ "summary": null
701
+ },
702
+ {
703
+ "name": "PositionFixed",
704
+ "returnType": "ValueTask",
705
+ "signature": "PositionFixed(string contentId, string referenceId, string align = \"start\", bool matchWidth = false, string side = \"bottom\")",
706
+ "summary": null
707
+ },
708
+ {
709
+ "name": "UnpositionFixed",
710
+ "returnType": "ValueTask",
711
+ "signature": "UnpositionFixed(string contentId)",
712
+ "summary": null
713
+ },
714
+ {
715
+ "name": "GetElementRect",
716
+ "returnType": "ValueTask<ElementRect?>",
717
+ "signature": "GetElementRect(string elementId)",
718
+ "summary": null
719
+ },
720
+ {
721
+ "name": "GetElementDimension",
722
+ "returnType": "ValueTask<double>",
723
+ "signature": "GetElementDimension(string elementId, string dimension)",
724
+ "summary": null
725
+ },
726
+ {
727
+ "name": "GetScrollTop",
728
+ "returnType": "ValueTask<double>",
729
+ "signature": "GetScrollTop(string elementId)",
730
+ "summary": null
731
+ },
732
+ {
733
+ "name": "WheelScrollTop",
734
+ "returnType": "ValueTask<double>",
735
+ "signature": "WheelScrollTop(Microsoft.AspNetCore.Components.ElementReference element)",
736
+ "summary": null
737
+ },
738
+ {
739
+ "name": "WheelScrollTo",
740
+ "returnType": "ValueTask",
741
+ "signature": "WheelScrollTo(Microsoft.AspNetCore.Components.ElementReference element, double top)",
742
+ "summary": null
743
+ },
744
+ {
745
+ "name": "SetPointerCaptureOnElement",
746
+ "returnType": "ValueTask",
747
+ "signature": "SetPointerCaptureOnElement(string elementId, long pointerId)",
748
+ "summary": null
749
+ },
750
+ {
751
+ "name": "ReleasePointerCaptureOnElement",
752
+ "returnType": "ValueTask",
753
+ "signature": "ReleasePointerCaptureOnElement(string elementId, long pointerId)",
754
+ "summary": null
755
+ },
756
+ {
757
+ "name": "RegisterDrawerSwipe",
758
+ "returnType": "ValueTask",
759
+ "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler)",
760
+ "summary": null
761
+ },
762
+ {
763
+ "name": "RegisterDrawerSwipe",
764
+ "returnType": "ValueTask",
765
+ "signature": "RegisterDrawerSwipe(string elementId, Func<Task> handler)",
766
+ "summary": null
767
+ },
768
+ {
769
+ "name": "RegisterDrawerSwipe",
770
+ "returnType": "ValueTask",
771
+ "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler, int? activationPx, int? firePx)",
772
+ "summary": null
773
+ },
774
+ {
775
+ "name": "UnregisterDrawerSwipe",
776
+ "returnType": "ValueTask",
777
+ "signature": "UnregisterDrawerSwipe(string elementId)",
778
+ "summary": null
779
+ },
780
+ {
781
+ "name": "OnSwipeDismiss",
782
+ "returnType": "Task",
783
+ "signature": "OnSwipeDismiss(string elementId)",
784
+ "summary": null
785
+ },
786
+ {
787
+ "name": "RegisterSortableTouch",
788
+ "returnType": "ValueTask",
789
+ "signature": "RegisterSortableTouch(string containerId, Func<int, int, Task> handler)",
790
+ "summary": null
791
+ },
792
+ {
793
+ "name": "UnregisterSortableTouch",
794
+ "returnType": "ValueTask",
795
+ "signature": "UnregisterSortableTouch(string containerId)",
796
+ "summary": null
797
+ },
798
+ {
799
+ "name": "OnSortableTouchDrop",
800
+ "returnType": "Task",
801
+ "signature": "OnSortableTouchDrop(string containerId, int source, int target)",
802
+ "summary": null
803
+ },
804
+ {
805
+ "name": "RegisterCarouselSwipe",
806
+ "returnType": "ValueTask",
807
+ "signature": "RegisterCarouselSwipe(string elementId, string orientation, Func<string, Task> swipeHandler, Func<double, double, int, Task> scrollHandler)",
808
+ "summary": null
809
+ },
810
+ {
811
+ "name": "RegisterCarouselSwipe",
812
+ "returnType": "ValueTask",
813
+ "signature": "RegisterCarouselSwipe(string elementId, string orientation, Func<string, Task> swipeHandler, Func<double, double, int, Task> scrollHandler, int? swipeThresholdPx, int? verticalDeadZonePx)",
814
+ "summary": null
815
+ },
816
+ {
817
+ "name": "UnregisterCarouselSwipe",
818
+ "returnType": "ValueTask",
819
+ "signature": "UnregisterCarouselSwipe(string elementId)",
820
+ "summary": null
821
+ },
822
+ {
823
+ "name": "RegisterHorizontalSwipe",
824
+ "returnType": "ValueTask",
825
+ "signature": "RegisterHorizontalSwipe(string elementId, Func<string, Task> handler)",
826
+ "summary": null
827
+ },
828
+ {
829
+ "name": "RegisterHorizontalSwipe",
830
+ "returnType": "ValueTask",
831
+ "signature": "RegisterHorizontalSwipe(string elementId, Func<string, Task> handler, int? swipeThresholdPx, int? verticalDeadZonePx)",
832
+ "summary": null
833
+ },
834
+ {
835
+ "name": "UnregisterHorizontalSwipe",
836
+ "returnType": "ValueTask",
837
+ "signature": "UnregisterHorizontalSwipe(string elementId)",
838
+ "summary": null
839
+ },
840
+ {
841
+ "name": "OnCalendarSwipe",
842
+ "returnType": "Task",
843
+ "signature": "OnCalendarSwipe(string elementId, string direction)",
844
+ "summary": null
845
+ },
846
+ {
847
+ "name": "RegisterGallerySwipe",
848
+ "returnType": "ValueTask",
849
+ "signature": "RegisterGallerySwipe(string elementId, Func<string, Task> handler)",
850
+ "summary": null
851
+ },
852
+ {
853
+ "name": "RegisterGallerySwipe",
854
+ "returnType": "ValueTask",
855
+ "signature": "RegisterGallerySwipe(string elementId, Func<string, Task> handler, int? swipeThresholdPx, int? verticalDeadZonePx)",
856
+ "summary": null
857
+ },
858
+ {
859
+ "name": "UnregisterGallerySwipe",
860
+ "returnType": "ValueTask",
861
+ "signature": "UnregisterGallerySwipe(string elementId)",
862
+ "summary": null
863
+ },
864
+ {
865
+ "name": "OnGallerySwipe",
866
+ "returnType": "Task",
867
+ "signature": "OnGallerySwipe(string elementId, string direction)",
868
+ "summary": null
869
+ },
870
+ {
871
+ "name": "RegisterTabSwipe",
872
+ "returnType": "ValueTask",
873
+ "signature": "RegisterTabSwipe(string elementId, bool wrap, Func<string, Task> handler)",
874
+ "summary": null
875
+ },
876
+ {
877
+ "name": "RegisterTabSwipe",
878
+ "returnType": "ValueTask",
879
+ "signature": "RegisterTabSwipe(string elementId, bool wrap, Func<string, Task> handler, int? swipeThresholdPx, int? verticalDeadZonePx)",
880
+ "summary": null
881
+ },
882
+ {
883
+ "name": "UnregisterTabSwipe",
884
+ "returnType": "ValueTask",
885
+ "signature": "UnregisterTabSwipe(string elementId)",
886
+ "summary": null
887
+ },
888
+ {
889
+ "name": "OnTabSwipe",
890
+ "returnType": "Task",
891
+ "signature": "OnTabSwipe(string elementId, string direction)",
892
+ "summary": null
893
+ },
894
+ {
895
+ "name": "CarouselScrollTo",
896
+ "returnType": "ValueTask",
897
+ "signature": "CarouselScrollTo(string elementId, int index, string behavior = \"smooth\")",
898
+ "summary": null
899
+ },
900
+ {
901
+ "name": "OnSwipe",
902
+ "returnType": "Task",
903
+ "signature": "OnSwipe(string elementId, string direction)",
904
+ "summary": null
905
+ },
906
+ {
907
+ "name": "OnScrollPosition",
908
+ "returnType": "Task",
909
+ "signature": "OnScrollPosition(string elementId, double scrollPos, double maxScroll, int nearestIndex = -1)",
910
+ "summary": null
911
+ },
912
+ {
913
+ "name": "RegisterResizeHandle",
914
+ "returnType": "ValueTask",
915
+ "signature": "RegisterResizeHandle(string elementId, string direction, Func<double, Task> resizeHandler, Func<Task> resizeEndHandler)",
916
+ "summary": null
917
+ },
918
+ {
919
+ "name": "UnregisterResizeHandle",
920
+ "returnType": "ValueTask",
921
+ "signature": "UnregisterResizeHandle(string elementId)",
922
+ "summary": null
923
+ },
924
+ {
925
+ "name": "OnResize",
926
+ "returnType": "Task",
927
+ "signature": "OnResize(string elementId, double delta)",
928
+ "summary": null
929
+ },
930
+ {
931
+ "name": "OnResizeEnd",
932
+ "returnType": "Task",
933
+ "signature": "OnResizeEnd(string elementId)",
934
+ "summary": null
935
+ },
936
+ {
937
+ "name": "RegisterScrollspy",
938
+ "returnType": "ValueTask",
939
+ "signature": "RegisterScrollspy(string containerId, int offset, bool smooth, Func<string?, Task> handler)",
940
+ "summary": null
941
+ },
942
+ {
943
+ "name": "UnregisterScrollspy",
944
+ "returnType": "ValueTask",
945
+ "signature": "UnregisterScrollspy(string containerId)",
946
+ "summary": null
947
+ },
948
+ {
949
+ "name": "ScrollspyScrollTo",
950
+ "returnType": "ValueTask",
951
+ "signature": "ScrollspyScrollTo(string containerId, string sectionId, bool smooth)",
952
+ "summary": null
953
+ },
954
+ {
955
+ "name": "OnScrollspyUpdate",
956
+ "returnType": "Task",
957
+ "signature": "OnScrollspyUpdate(string containerId, string? activeId)",
958
+ "summary": null
959
+ },
960
+ {
961
+ "name": "RegisterToastSwipe",
962
+ "returnType": "ValueTask",
963
+ "signature": "RegisterToastSwipe(string elementId, string toastId, Func<string, Task> handler)",
964
+ "summary": null
965
+ },
966
+ {
967
+ "name": "UnregisterToastSwipe",
968
+ "returnType": "ValueTask",
969
+ "signature": "UnregisterToastSwipe(string toastId, string elementId)",
970
+ "summary": null
971
+ },
972
+ {
973
+ "name": "OnToastSwipeDismiss",
974
+ "returnType": "Task",
975
+ "signature": "OnToastSwipeDismiss(string toastId)",
976
+ "summary": null
977
+ },
978
+ {
979
+ "name": "SetupAutoResize",
980
+ "returnType": "ValueTask",
981
+ "signature": "SetupAutoResize(string elementId, int maxRows)",
982
+ "summary": null
983
+ },
984
+ {
985
+ "name": "UnregisterAutoResize",
986
+ "returnType": "ValueTask",
987
+ "signature": "UnregisterAutoResize(string elementId)",
988
+ "summary": null
989
+ },
990
+ {
991
+ "name": "RegisterOtpPaste",
992
+ "returnType": "ValueTask",
993
+ "signature": "RegisterOtpPaste(string baseId, int length, Func<string, Task> handler)",
994
+ "summary": null
995
+ },
996
+ {
997
+ "name": "UnregisterOtpPaste",
998
+ "returnType": "ValueTask",
999
+ "signature": "UnregisterOtpPaste(string baseId, int length)",
1000
+ "summary": null
1001
+ },
1002
+ {
1003
+ "name": "OnOtpPaste",
1004
+ "returnType": "Task",
1005
+ "signature": "OnOtpPaste(string baseId, string digits)",
1006
+ "summary": null
1007
+ },
1008
+ {
1009
+ "name": "RegisterColumnResize",
1010
+ "returnType": "ValueTask",
1011
+ "signature": "RegisterColumnResize(string handleId, double minWidth, double? maxWidth, Func<double, Task> commitHandler)",
1012
+ "summary": null
1013
+ },
1014
+ {
1015
+ "name": "UnregisterColumnResize",
1016
+ "returnType": "ValueTask",
1017
+ "signature": "UnregisterColumnResize(string handleId)",
1018
+ "summary": null
1019
+ },
1020
+ {
1021
+ "name": "OnColumnResize",
1022
+ "returnType": "Task",
1023
+ "signature": "OnColumnResize(string handleId, double delta)",
1024
+ "summary": null
1025
+ },
1026
+ {
1027
+ "name": "OnColumnResizeEnd",
1028
+ "returnType": "Task",
1029
+ "signature": "OnColumnResizeEnd(string handleId)",
1030
+ "summary": null
1031
+ },
1032
+ {
1033
+ "name": "OnColumnResizeCommit",
1034
+ "returnType": "Task",
1035
+ "signature": "OnColumnResizeCommit(string handleId, double finalWidth)",
1036
+ "summary": null
1037
+ },
1038
+ {
1039
+ "name": "CaptureColumnRects",
1040
+ "returnType": "ValueTask",
1041
+ "signature": "CaptureColumnRects(string gridId)",
1042
+ "summary": null
1043
+ },
1044
+ {
1045
+ "name": "AnimateColumnReorder",
1046
+ "returnType": "ValueTask",
1047
+ "signature": "AnimateColumnReorder(string gridId, int durationMs)",
1048
+ "summary": null
1049
+ },
1050
+ {
1051
+ "name": "GetElementRectBySelector",
1052
+ "returnType": "ValueTask<ElementRect?>",
1053
+ "signature": "GetElementRectBySelector(string selector)",
1054
+ "summary": null
1055
+ },
1056
+ {
1057
+ "name": "RegisterAffix",
1058
+ "returnType": "ValueTask",
1059
+ "signature": "RegisterAffix(string elementId, int offsetTop, int? offsetBottom, string? target, Func<bool, Task> handler)",
1060
+ "summary": null
1061
+ },
1062
+ {
1063
+ "name": "UnregisterAffix",
1064
+ "returnType": "ValueTask",
1065
+ "signature": "UnregisterAffix(string elementId)",
1066
+ "summary": null
1067
+ },
1068
+ {
1069
+ "name": "OnAffixChanged",
1070
+ "returnType": "Task",
1071
+ "signature": "OnAffixChanged(string elementId, bool isFixed)",
1072
+ "summary": null
1073
+ },
1074
+ {
1075
+ "name": "GetTextareaCaretPosition",
1076
+ "returnType": "ValueTask<TextareaCaretInfo>",
1077
+ "signature": "GetTextareaCaretPosition(string elementId)",
1078
+ "summary": null
1079
+ },
1080
+ {
1081
+ "name": "RegisterBackToTop",
1082
+ "returnType": "ValueTask",
1083
+ "signature": "RegisterBackToTop(string id, int threshold, Func<bool, Task> handler)",
1084
+ "summary": null
1085
+ },
1086
+ {
1087
+ "name": "UnregisterBackToTop",
1088
+ "returnType": "ValueTask",
1089
+ "signature": "UnregisterBackToTop(string id)",
1090
+ "summary": null
1091
+ },
1092
+ {
1093
+ "name": "ScrollToTop",
1094
+ "returnType": "ValueTask",
1095
+ "signature": "ScrollToTop()",
1096
+ "summary": null
1097
+ },
1098
+ {
1099
+ "name": "OnScrollVisibilityChanged",
1100
+ "returnType": "Task",
1101
+ "signature": "OnScrollVisibilityChanged(string id, bool visible)",
1102
+ "summary": null
1103
+ },
1104
+ {
1105
+ "name": "DownloadFile",
1106
+ "returnType": "ValueTask",
1107
+ "signature": "DownloadFile(string fileName, string contentBase64, string mimeType = \"application/octet-stream\")",
1108
+ "summary": null
1109
+ },
1110
+ {
1111
+ "name": "CopyToClipboard",
1112
+ "returnType": "ValueTask",
1113
+ "signature": "CopyToClipboard(string text)",
1114
+ "summary": null
1115
+ },
1116
+ {
1117
+ "name": "RippleAttachAsync",
1118
+ "returnType": "ValueTask",
1119
+ "signature": "RippleAttachAsync(Microsoft.AspNetCore.Components.ElementReference element)",
1120
+ "summary": null
1121
+ },
1122
+ {
1123
+ "name": "RippleDetachAsync",
1124
+ "returnType": "ValueTask",
1125
+ "signature": "RippleDetachAsync(Microsoft.AspNetCore.Components.ElementReference element)",
1126
+ "summary": null
1127
+ },
1128
+ {
1129
+ "name": "PlayMedia",
1130
+ "returnType": "ValueTask",
1131
+ "signature": "PlayMedia(Microsoft.AspNetCore.Components.ElementReference element)",
1132
+ "summary": null
1133
+ },
1134
+ {
1135
+ "name": "PauseMedia",
1136
+ "returnType": "ValueTask",
1137
+ "signature": "PauseMedia(Microsoft.AspNetCore.Components.ElementReference element)",
1138
+ "summary": null
1139
+ },
1140
+ {
1141
+ "name": "SetMediaVolume",
1142
+ "returnType": "ValueTask",
1143
+ "signature": "SetMediaVolume(Microsoft.AspNetCore.Components.ElementReference element, double volume, bool muted)",
1144
+ "summary": null
1145
+ },
1146
+ {
1147
+ "name": "SeekMedia",
1148
+ "returnType": "ValueTask",
1149
+ "signature": "SeekMedia(Microsoft.AspNetCore.Components.ElementReference element, double seconds)",
1150
+ "summary": null
1151
+ },
1152
+ {
1153
+ "name": "GetMediaState",
1154
+ "returnType": "ValueTask<MediaState>",
1155
+ "signature": "GetMediaState(Microsoft.AspNetCore.Components.ElementReference element)",
1156
+ "summary": null
1157
+ },
1158
+ {
1159
+ "name": "Vibrate",
1160
+ "returnType": "ValueTask",
1161
+ "signature": "Vibrate(int milliseconds)",
1162
+ "summary": null
1163
+ },
1164
+ {
1165
+ "name": "SaveToLocalStorage",
1166
+ "returnType": "ValueTask",
1167
+ "signature": "SaveToLocalStorage(string key, string value)",
1168
+ "summary": null
1169
+ },
1170
+ {
1171
+ "name": "LoadFromLocalStorage",
1172
+ "returnType": "ValueTask<string?>",
1173
+ "signature": "LoadFromLocalStorage(string key)",
1174
+ "summary": null
1175
+ },
1176
+ {
1177
+ "name": "RemoveFromLocalStorage",
1178
+ "returnType": "ValueTask",
1179
+ "signature": "RemoveFromLocalStorage(string key)",
1180
+ "summary": null
1181
+ },
1182
+ {
1183
+ "name": "MotionTickNumber",
1184
+ "returnType": "ValueTask",
1185
+ "signature": "MotionTickNumber(string elementId, double from, double to, int durationMs, int decimals, string separator = \",\")",
1186
+ "summary": null
1187
+ },
1188
+ {
1189
+ "name": "MotionDisposeTicker",
1190
+ "returnType": "ValueTask",
1191
+ "signature": "MotionDisposeTicker(string elementId)",
1192
+ "summary": null
1193
+ },
1194
+ {
1195
+ "name": "MotionRevealText",
1196
+ "returnType": "ValueTask",
1197
+ "signature": "MotionRevealText(string elementId, int staggerMs, double threshold)",
1198
+ "summary": null
1199
+ },
1200
+ {
1201
+ "name": "MotionBlurFade",
1202
+ "returnType": "ValueTask",
1203
+ "signature": "MotionBlurFade(string elementId, int delayMs, bool once, bool forceHidden = false)",
1204
+ "summary": null
1205
+ },
1206
+ {
1207
+ "name": "MotionDisposeObserver",
1208
+ "returnType": "ValueTask",
1209
+ "signature": "MotionDisposeObserver(string elementId)",
1210
+ "summary": null
1211
+ },
1212
+ {
1213
+ "name": "MotionAnimatedBeam",
1214
+ "returnType": "ValueTask",
1215
+ "signature": "MotionAnimatedBeam(string elementId, string fromId, string toId, object options)",
1216
+ "summary": null
1217
+ },
1218
+ {
1219
+ "name": "MotionDisposeAnimatedBeam",
1220
+ "returnType": "ValueTask",
1221
+ "signature": "MotionDisposeAnimatedBeam(string elementId)",
1222
+ "summary": null
1223
+ },
1224
+ {
1225
+ "name": "MotionDock",
1226
+ "returnType": "ValueTask",
1227
+ "signature": "MotionDock(string elementId, object options)",
1228
+ "summary": null
1229
+ },
1230
+ {
1231
+ "name": "MotionDisposeDock",
1232
+ "returnType": "ValueTask",
1233
+ "signature": "MotionDisposeDock(string elementId)",
1234
+ "summary": null
1235
+ },
1236
+ {
1237
+ "name": "MotionConfettiInit",
1238
+ "returnType": "ValueTask",
1239
+ "signature": "MotionConfettiInit(string elementId)",
1240
+ "summary": null
1241
+ },
1242
+ {
1243
+ "name": "MotionConfettiFire",
1244
+ "returnType": "ValueTask",
1245
+ "signature": "MotionConfettiFire(string elementId, object options)",
1246
+ "summary": null
1247
+ },
1248
+ {
1249
+ "name": "MotionDisposeConfetti",
1250
+ "returnType": "ValueTask",
1251
+ "signature": "MotionDisposeConfetti(string elementId)",
1252
+ "summary": null
1253
+ },
1254
+ {
1255
+ "name": "TabsMeasure",
1256
+ "returnType": "ValueTask<TabMeasurement?>",
1257
+ "signature": "TabsMeasure(string elementId)",
1258
+ "summary": null
1259
+ },
1260
+ {
1261
+ "name": "AiAutosize",
1262
+ "returnType": "ValueTask",
1263
+ "signature": "AiAutosize(string elementId, int maxPx)",
1264
+ "summary": null
1265
+ },
1266
+ {
1267
+ "name": "AiObserveAutoScroll",
1268
+ "returnType": "ValueTask",
1269
+ "signature": "AiObserveAutoScroll(string elementId)",
1270
+ "summary": null
1271
+ },
1272
+ {
1273
+ "name": "AiDisposeAutoScroll",
1274
+ "returnType": "ValueTask",
1275
+ "signature": "AiDisposeAutoScroll(string elementId)",
1276
+ "summary": null
1277
+ },
1278
+ {
1279
+ "name": "AiScrollToBottom",
1280
+ "returnType": "ValueTask",
1281
+ "signature": "AiScrollToBottom(string elementId)",
1282
+ "summary": null
1283
+ },
1284
+ {
1285
+ "name": "ImportModuleAsync",
1286
+ "returnType": "ValueTask<IJSObjectReference>",
1287
+ "signature": "ImportModuleAsync(string moduleUrl)",
1288
+ "summary": null
1289
+ },
1290
+ {
1291
+ "name": "SchedulerInitAsync",
1292
+ "returnType": "Task<string>",
1293
+ "signature": "SchedulerInitAsync(Microsoft.AspNetCore.Components.ElementReference el, object dotNetRef, object options)",
1294
+ "summary": null
1295
+ },
1296
+ {
1297
+ "name": "SchedulerSetEventsAsync",
1298
+ "returnType": "Task",
1299
+ "signature": "SchedulerSetEventsAsync(string id, IEnumerable<object> events)",
1300
+ "summary": null
1301
+ },
1302
+ {
1303
+ "name": "SchedulerChangeViewAsync",
1304
+ "returnType": "Task",
1305
+ "signature": "SchedulerChangeViewAsync(string id, string view)",
1306
+ "summary": null
1307
+ },
1308
+ {
1309
+ "name": "SchedulerGotoDateAsync",
1310
+ "returnType": "Task",
1311
+ "signature": "SchedulerGotoDateAsync(string id, string dateIso)",
1312
+ "summary": null
1313
+ },
1314
+ {
1315
+ "name": "SchedulerPrevAsync",
1316
+ "returnType": "Task",
1317
+ "signature": "SchedulerPrevAsync(string id)",
1318
+ "summary": null
1319
+ },
1320
+ {
1321
+ "name": "SchedulerNextAsync",
1322
+ "returnType": "Task",
1323
+ "signature": "SchedulerNextAsync(string id)",
1324
+ "summary": null
1325
+ },
1326
+ {
1327
+ "name": "SchedulerTodayAsync",
1328
+ "returnType": "Task",
1329
+ "signature": "SchedulerTodayAsync(string id)",
1330
+ "summary": null
1331
+ },
1332
+ {
1333
+ "name": "SchedulerGetTitleAsync",
1334
+ "returnType": "Task<string>",
1335
+ "signature": "SchedulerGetTitleAsync(string id)",
1336
+ "summary": null
1337
+ },
1338
+ {
1339
+ "name": "SchedulerDestroyAsync",
1340
+ "returnType": "Task",
1341
+ "signature": "SchedulerDestroyAsync(string id)",
1342
+ "summary": null
1343
+ },
1344
+ {
1345
+ "name": "GanttInitAsync",
1346
+ "returnType": "Task<string>",
1347
+ "signature": "GanttInitAsync(Microsoft.AspNetCore.Components.ElementReference el, object dotNetRef, object options)",
1348
+ "summary": null
1349
+ },
1350
+ {
1351
+ "name": "GanttSetTasksAsync",
1352
+ "returnType": "Task",
1353
+ "signature": "GanttSetTasksAsync(string id, IEnumerable<object> tasks)",
1354
+ "summary": null
1355
+ },
1356
+ {
1357
+ "name": "GanttChangeViewModeAsync",
1358
+ "returnType": "Task",
1359
+ "signature": "GanttChangeViewModeAsync(string id, string mode)",
1360
+ "summary": null
1361
+ },
1362
+ {
1363
+ "name": "GanttDestroyAsync",
1364
+ "returnType": "Task",
1365
+ "signature": "GanttDestroyAsync(string id)",
1366
+ "summary": null
1367
+ },
1368
+ {
1369
+ "name": "RegisterToolbarOverflow",
1370
+ "returnType": "ValueTask",
1371
+ "signature": "RegisterToolbarOverflow(string elementId, Func<int, int, Task> handler)",
1372
+ "summary": null
1373
+ },
1374
+ {
1375
+ "name": "UnregisterToolbarOverflow",
1376
+ "returnType": "ValueTask",
1377
+ "signature": "UnregisterToolbarOverflow(string elementId)",
1378
+ "summary": null
1379
+ },
1380
+ {
1381
+ "name": "OnToolbarOverflowMeasured",
1382
+ "returnType": "Task",
1383
+ "signature": "OnToolbarOverflowMeasured(string elementId, int fittingCount, int totalCount)",
1384
+ "summary": null
1385
+ },
1386
+ {
1387
+ "name": "RichTextInitAsync",
1388
+ "returnType": "ValueTask<string>",
1389
+ "signature": "RichTextInitAsync<T>(Microsoft.AspNetCore.Components.ElementReference elementRef, DotNetObjectReference<T> dotNetRef, object options)",
1390
+ "summary": null
1391
+ },
1392
+ {
1393
+ "name": "RichTextSetContentAsync",
1394
+ "returnType": "ValueTask",
1395
+ "signature": "RichTextSetContentAsync(string id, string? html)",
1396
+ "summary": null
1397
+ },
1398
+ {
1399
+ "name": "RichTextCommandAsync",
1400
+ "returnType": "ValueTask",
1401
+ "signature": "RichTextCommandAsync(string id, string name, params object?[]? args)",
1402
+ "summary": null
1403
+ },
1404
+ {
1405
+ "name": "RichTextGetActiveAsync",
1406
+ "returnType": "ValueTask<Interop.RichTextActiveState?>",
1407
+ "signature": "RichTextGetActiveAsync(string id)",
1408
+ "summary": null
1409
+ },
1410
+ {
1411
+ "name": "RichTextSetDisabledAsync",
1412
+ "returnType": "ValueTask",
1413
+ "signature": "RichTextSetDisabledAsync(string id, bool disabled)",
1414
+ "summary": null
1415
+ },
1416
+ {
1417
+ "name": "RichTextDestroyAsync",
1418
+ "returnType": "ValueTask",
1419
+ "signature": "RichTextDestroyAsync(string id)",
1420
+ "summary": null
1421
+ },
1422
+ {
1423
+ "name": "RichTextPromptLinkAsync",
1424
+ "returnType": "ValueTask<string?>",
1425
+ "signature": "RichTextPromptLinkAsync(string? initial)",
1426
+ "summary": null
1427
+ },
1428
+ {
1429
+ "name": "SignaturePadInit",
1430
+ "returnType": "ValueTask",
1431
+ "signature": "SignaturePadInit(string elementId, object options, DotNetObjectReference<SignaturePad> dotNetRef)",
1432
+ "summary": null
1433
+ },
1434
+ {
1435
+ "name": "SignaturePadClear",
1436
+ "returnType": "ValueTask",
1437
+ "signature": "SignaturePadClear(string elementId)",
1438
+ "summary": null
1439
+ },
1440
+ {
1441
+ "name": "SignaturePadDataUrl",
1442
+ "returnType": "ValueTask<string?>",
1443
+ "signature": "SignaturePadDataUrl(string elementId, string mimeType)",
1444
+ "summary": null
1445
+ },
1446
+ {
1447
+ "name": "SignaturePadSetStrokeStyle",
1448
+ "returnType": "ValueTask",
1449
+ "signature": "SignaturePadSetStrokeStyle(string elementId, string color, double width)",
1450
+ "summary": null
1451
+ },
1452
+ {
1453
+ "name": "SignaturePadSetDisabled",
1454
+ "returnType": "ValueTask",
1455
+ "signature": "SignaturePadSetDisabled(string elementId, bool disabled)",
1456
+ "summary": null
1457
+ },
1458
+ {
1459
+ "name": "SignaturePadLoadDataUrl",
1460
+ "returnType": "ValueTask",
1461
+ "signature": "SignaturePadLoadDataUrl(string elementId, string? dataUrl)",
1462
+ "summary": null
1463
+ },
1464
+ {
1465
+ "name": "SignaturePadDestroy",
1466
+ "returnType": "ValueTask",
1467
+ "signature": "SignaturePadDestroy(string elementId)",
1468
+ "summary": null
1469
+ },
1470
+ {
1471
+ "name": "Dispose",
1472
+ "returnType": "void",
1473
+ "signature": "Dispose()",
1474
+ "summary": null
1475
+ },
1476
+ {
1477
+ "name": "DisposeAsync",
1478
+ "returnType": "ValueTask",
1479
+ "signature": "DisposeAsync()",
1480
+ "summary": null
1481
+ }
1482
+ ],
1483
+ "events": [],
1484
+ "enumValues": []
1485
+ },
1486
+ {
1487
+ "name": "Density",
1488
+ "kind": "enum",
1489
+ "namespace": "Lumeo",
1490
+ "summary": "Orthogonal \"tightness\" axis applied across sized components. Sits next to the size scale (Size) rather than replacing it: a Size.Md button can render at Density.Compact for a dense admin grid or Density.Spacious for a marketing hero, without scaling the type ramp itself.",
1491
+ "properties": [],
1492
+ "methods": [],
1493
+ "events": [],
1494
+ "enumValues": [
1495
+ {
1496
+ "name": "Compact",
1497
+ "summary": "Minimum padding. For data grids, dense admin tables, sidebar pickers. Visual hit area is ~24-28px."
1498
+ },
1499
+ {
1500
+ "name": "Comfortable",
1501
+ "summary": "Default. Standard app density. Hit area ~36-40px."
1502
+ },
1503
+ {
1504
+ "name": "Spacious",
1505
+ "summary": "Generous padding. Marketing pages, onboarding wizards, thumb-first mobile UIs. Hit area ~44-48px (Apple HIG minimum)."
1506
+ }
1507
+ ]
1508
+ },
1509
+ {
1510
+ "name": "DialogOverlayOptions",
1511
+ "kind": "record",
1512
+ "namespace": "Lumeo.Services",
1513
+ "summary": "Dialog-shaped overlay options. Semantic marker (same caveat as SheetOverlayOptions) — typed for documentation and IDE auto-complete, not enforced at the service overload boundary.",
1514
+ "properties": [
1515
+ {
1516
+ "name": "ScrollableBody",
1517
+ "type": "bool",
1518
+ "default": "true",
1519
+ "summary": "Wrap the rendered component in a scrollable body region inside the overlay's chrome (Sheet only — Dialog and Drawer manage their own scroll). Default true so consumers can pass a long form to OverlayService.ShowSheetAsync{T} without rolling their own overflow-y-auto wrapper — and without hitting the focus- ring clip that bare overflow-y: auto introduces (per spec, overflow-y: auto promotes overflow-x to auto too, which clips inputs' box-shadow focus rings at the left/right edge). The built-in wrapper uses the px-1 -mx-1 trick to give focus rings 4px breathing room without shifting the visual padding. Set to false for sheets whose content sets its own scrolling strategy (e.g. an embedded PdfViewer that already paints inside a fixed canvas)."
1520
+ },
1521
+ {
1522
+ "name": "MobileFullscreen",
1523
+ "type": "bool",
1524
+ "default": null,
1525
+ "summary": "When true and the viewport width is below MobileBreakpoint, the overlay is forced full-screen (full width + full height, no corner radius). Works across Dialog, Sheet and Drawer overlays — replaces the consumer-side max-md:!h-full max-md:!w-full max-md:!max-w-full Tailwind override chain that was previously the only way to get a full-screen Dialog on mobile. For Sheets, this is equivalent to setting MobileSheetSize to Full but composes more naturally for the Sheet+Dialog mixed case."
1526
+ },
1527
+ {
1528
+ "name": "MobileSwipeToClose",
1529
+ "type": "bool?",
1530
+ "default": null,
1531
+ "summary": "SwipeToClose override below MobileBreakpoint. Null = use SwipeToClose at all sizes. Typical pattern: off on desktop, on for mobile bottom-sheet pull-down."
1532
+ },
1533
+ {
1534
+ "name": "MobileSheetSize",
1535
+ "type": "SheetSize?",
1536
+ "default": null,
1537
+ "summary": "Sheet size to use when the viewport is below MobileBreakpoint. Null = use SheetSize at all sizes. Typical pattern: SheetSize.Default on desktop, SheetSize.Full on mobile."
1538
+ },
1539
+ {
1540
+ "name": "MobileSheetSide",
1541
+ "type": "Lumeo.Side?",
1542
+ "default": null,
1543
+ "summary": "Sheet side to use when the viewport is below MobileBreakpoint. Null = use SheetSide at all sizes. Typical pattern: Lumeo.Side.Right on desktop, Lumeo.Side.Bottom on mobile."
1544
+ },
1545
+ {
1546
+ "name": "MobileBreakpoint",
1547
+ "type": "int?",
1548
+ "default": "768",
1549
+ "summary": "Viewport width threshold (CSS pixels) below which the Mobile* overrides apply. Default 768 (Tailwind md). Set to null to disable responsive switching even if the Mobile* fields are populated."
1550
+ },
1551
+ {
1552
+ "name": "SwipeToClose",
1553
+ "type": "bool",
1554
+ "default": null,
1555
+ "summary": "When true, a Sheet opened via OverlayService.ShowSheetAsync{T} can be dismissed by swiping in the direction opposite to its SheetSide (e.g. swipe-down on a Bottom sheet). Ignored for non-Sheet overlay types. Drawers already enable swipe by default. Default false to preserve the existing programmatic-open behaviour."
1556
+ },
1557
+ {
1558
+ "name": "SheetSize",
1559
+ "type": "SheetSize",
1560
+ "default": "SheetSize.Default",
1561
+ "summary": null
1562
+ },
1563
+ {
1564
+ "name": "SheetSide",
1565
+ "type": "Lumeo.Side",
1566
+ "default": "Lumeo.Side.Right",
1567
+ "summary": null
1568
+ },
1569
+ {
1570
+ "name": "PreventClose",
1571
+ "type": "bool",
1572
+ "default": null,
1573
+ "summary": null
1574
+ },
1575
+ {
1576
+ "name": "Class",
1577
+ "type": "string?",
1578
+ "default": null,
1579
+ "summary": null
1580
+ }
1581
+ ],
1582
+ "methods": [],
1583
+ "events": [],
1584
+ "enumValues": []
1585
+ },
1586
+ {
1587
+ "name": "DrawerOverlayOptions",
1588
+ "kind": "record",
1589
+ "namespace": "Lumeo.Services",
1590
+ "summary": "Drawer-shaped overlay options. Drawer enables swipe-to-close by default; the inherited SwipeToClose is ignored for drawers. Semantic marker (see SheetOverlayOptions for the enforcement caveat).",
1591
+ "properties": [
1592
+ {
1593
+ "name": "ScrollableBody",
1594
+ "type": "bool",
1595
+ "default": "true",
1596
+ "summary": "Wrap the rendered component in a scrollable body region inside the overlay's chrome (Sheet only — Dialog and Drawer manage their own scroll). Default true so consumers can pass a long form to OverlayService.ShowSheetAsync{T} without rolling their own overflow-y-auto wrapper — and without hitting the focus- ring clip that bare overflow-y: auto introduces (per spec, overflow-y: auto promotes overflow-x to auto too, which clips inputs' box-shadow focus rings at the left/right edge). The built-in wrapper uses the px-1 -mx-1 trick to give focus rings 4px breathing room without shifting the visual padding. Set to false for sheets whose content sets its own scrolling strategy (e.g. an embedded PdfViewer that already paints inside a fixed canvas)."
1597
+ },
1598
+ {
1599
+ "name": "MobileFullscreen",
1600
+ "type": "bool",
1601
+ "default": null,
1602
+ "summary": "When true and the viewport width is below MobileBreakpoint, the overlay is forced full-screen (full width + full height, no corner radius). Works across Dialog, Sheet and Drawer overlays — replaces the consumer-side max-md:!h-full max-md:!w-full max-md:!max-w-full Tailwind override chain that was previously the only way to get a full-screen Dialog on mobile. For Sheets, this is equivalent to setting MobileSheetSize to Full but composes more naturally for the Sheet+Dialog mixed case."
1603
+ },
1604
+ {
1605
+ "name": "MobileSwipeToClose",
1606
+ "type": "bool?",
1607
+ "default": null,
1608
+ "summary": "SwipeToClose override below MobileBreakpoint. Null = use SwipeToClose at all sizes. Typical pattern: off on desktop, on for mobile bottom-sheet pull-down."
1609
+ },
1610
+ {
1611
+ "name": "MobileSheetSize",
1612
+ "type": "SheetSize?",
1613
+ "default": null,
1614
+ "summary": "Sheet size to use when the viewport is below MobileBreakpoint. Null = use SheetSize at all sizes. Typical pattern: SheetSize.Default on desktop, SheetSize.Full on mobile."
1615
+ },
1616
+ {
1617
+ "name": "MobileSheetSide",
1618
+ "type": "Lumeo.Side?",
1619
+ "default": null,
1620
+ "summary": "Sheet side to use when the viewport is below MobileBreakpoint. Null = use SheetSide at all sizes. Typical pattern: Lumeo.Side.Right on desktop, Lumeo.Side.Bottom on mobile."
1621
+ },
1622
+ {
1623
+ "name": "MobileBreakpoint",
1624
+ "type": "int?",
1625
+ "default": "768",
1626
+ "summary": "Viewport width threshold (CSS pixels) below which the Mobile* overrides apply. Default 768 (Tailwind md). Set to null to disable responsive switching even if the Mobile* fields are populated."
1627
+ },
1628
+ {
1629
+ "name": "SwipeToClose",
1630
+ "type": "bool",
1631
+ "default": null,
1632
+ "summary": "When true, a Sheet opened via OverlayService.ShowSheetAsync{T} can be dismissed by swiping in the direction opposite to its SheetSide (e.g. swipe-down on a Bottom sheet). Ignored for non-Sheet overlay types. Drawers already enable swipe by default. Default false to preserve the existing programmatic-open behaviour."
1633
+ },
1634
+ {
1635
+ "name": "SheetSize",
1636
+ "type": "SheetSize",
1637
+ "default": "SheetSize.Default",
1638
+ "summary": null
1639
+ },
1640
+ {
1641
+ "name": "SheetSide",
1642
+ "type": "Lumeo.Side",
1643
+ "default": "Lumeo.Side.Right",
1644
+ "summary": null
1645
+ },
1646
+ {
1647
+ "name": "PreventClose",
1648
+ "type": "bool",
1649
+ "default": null,
1650
+ "summary": null
1651
+ },
1652
+ {
1653
+ "name": "Class",
1654
+ "type": "string?",
1655
+ "default": null,
1656
+ "summary": null
1657
+ }
1658
+ ],
1659
+ "methods": [],
1660
+ "events": [],
1661
+ "enumValues": []
1662
+ },
1663
+ {
1664
+ "name": "IComponentInteropService",
1665
+ "kind": "interface",
1666
+ "namespace": "Lumeo.Services",
1667
+ "summary": "Provides JS interop helpers for Lumeo components (click-outside, focus traps, floating positioning, swipe gestures, scroll utilities, etc.). Inject this interface in consumers to enable mocking in tests.",
1668
+ "properties": [],
1669
+ "methods": [
1670
+ {
1671
+ "name": "RegisterClickOutside",
1672
+ "returnType": "ValueTask",
1673
+ "signature": "RegisterClickOutside(string elementId, string? triggerElementId, Func<Task> handler)",
1674
+ "summary": null
1675
+ },
1676
+ {
1677
+ "name": "UnregisterClickOutside",
1678
+ "returnType": "ValueTask",
1679
+ "signature": "UnregisterClickOutside(string elementId)",
1680
+ "summary": null
1681
+ },
1682
+ {
1683
+ "name": "FocusElement",
1684
+ "returnType": "ValueTask",
1685
+ "signature": "FocusElement(string elementId)",
1686
+ "summary": null
1687
+ },
1688
+ {
1689
+ "name": "FocusMenuItemByIndex",
1690
+ "returnType": "ValueTask",
1691
+ "signature": "FocusMenuItemByIndex(string containerId, int index)",
1692
+ "summary": null
1693
+ },
1694
+ {
1695
+ "name": "GetMenuItemCount",
1696
+ "returnType": "ValueTask<int>",
1697
+ "signature": "GetMenuItemCount(string containerId)",
1698
+ "summary": null
1699
+ },
1700
+ {
1701
+ "name": "LockScroll",
1702
+ "returnType": "ValueTask",
1703
+ "signature": "LockScroll()",
1704
+ "summary": null
1705
+ },
1706
+ {
1707
+ "name": "UnlockScroll",
1708
+ "returnType": "ValueTask",
1709
+ "signature": "UnlockScroll()",
1710
+ "summary": null
1711
+ },
1712
+ {
1713
+ "name": "SetHtmlClass",
1714
+ "returnType": "ValueTask",
1715
+ "signature": "SetHtmlClass(string className, bool active)",
1716
+ "summary": "Toggles a class on document.documentElement. Useful for global modes (e.g. hiding floating chrome while a DataGrid is fullscreen)."
1717
+ },
1718
+ {
1719
+ "name": "SetupFocusTrap",
1720
+ "returnType": "ValueTask",
1721
+ "signature": "SetupFocusTrap(string elementId)",
1722
+ "summary": null
1723
+ },
1724
+ {
1725
+ "name": "RemoveFocusTrap",
1726
+ "returnType": "ValueTask",
1727
+ "signature": "RemoveFocusTrap(string elementId)",
1728
+ "summary": null
1729
+ },
1730
+ {
1731
+ "name": "AttachOverlaySlideEnd",
1732
+ "returnType": "ValueTask",
1733
+ "signature": "AttachOverlaySlideEnd(string elementId)",
1734
+ "summary": "Registers a native animationend listener that filters strictly on the slide-in animation name and, on completion, sets the element's inline transform: none. Bypasses Blazor's event roundtrip so the cleanup runs synchronously from the browser's animation pipeline. Used by Sheet, Drawer and any future slide-in overlay to defeat the animation-fill-mode: both identity-matrix transform trap that would otherwise establish a containing block for fixed-positioned descendants (Select / DatePicker / Combobox popovers)."
1735
+ },
1736
+ {
1737
+ "name": "RegisterSvDrag",
1738
+ "returnType": "ValueTask",
1739
+ "signature": "RegisterSvDrag(string elementId, Func<double, double, Task> handler)",
1740
+ "summary": null
1741
+ },
1742
+ {
1743
+ "name": "UnregisterSvDrag",
1744
+ "returnType": "ValueTask",
1745
+ "signature": "UnregisterSvDrag(string elementId)",
1746
+ "summary": null
1747
+ },
1748
+ {
1749
+ "name": "RegisterPinchZoom",
1750
+ "returnType": "ValueTask",
1751
+ "signature": "RegisterPinchZoom(string elementId, Func<double, Task> handler)",
1752
+ "summary": null
1753
+ },
1754
+ {
1755
+ "name": "UnregisterPinchZoom",
1756
+ "returnType": "ValueTask",
1757
+ "signature": "UnregisterPinchZoom(string elementId)",
1758
+ "summary": null
1759
+ },
1760
+ {
1761
+ "name": "GetViewportSize",
1762
+ "returnType": "ValueTask<ViewportSize>",
1763
+ "signature": "GetViewportSize()",
1764
+ "summary": null
1765
+ },
1766
+ {
1767
+ "name": "RegisterViewportListener",
1768
+ "returnType": "ValueTask<ViewportSize?>",
1769
+ "signature": "RegisterViewportListener(Microsoft.JSInterop.DotNetObjectReference<ResponsiveService> dotnetRef)",
1770
+ "summary": null
1771
+ },
1772
+ {
1773
+ "name": "UnregisterViewportListener",
1774
+ "returnType": "ValueTask",
1775
+ "signature": "UnregisterViewportListener()",
1776
+ "summary": null
1777
+ },
1778
+ {
1779
+ "name": "PositionFixed",
1780
+ "returnType": "ValueTask",
1781
+ "signature": "PositionFixed(string contentId, string referenceId, string align = \"start\", bool matchWidth = false, string side = \"bottom\")",
1782
+ "summary": null
1783
+ },
1784
+ {
1785
+ "name": "UnpositionFixed",
1786
+ "returnType": "ValueTask",
1787
+ "signature": "UnpositionFixed(string contentId)",
1788
+ "summary": null
1789
+ },
1790
+ {
1791
+ "name": "GetElementRect",
1792
+ "returnType": "ValueTask<ElementRect?>",
1793
+ "signature": "GetElementRect(string elementId)",
1794
+ "summary": null
1795
+ },
1796
+ {
1797
+ "name": "GetElementDimension",
1798
+ "returnType": "ValueTask<double>",
1799
+ "signature": "GetElementDimension(string elementId, string dimension)",
1800
+ "summary": null
1801
+ },
1802
+ {
1803
+ "name": "GetScrollTop",
1804
+ "returnType": "ValueTask<double>",
1805
+ "signature": "GetScrollTop(string elementId)",
1806
+ "summary": null
1807
+ },
1808
+ {
1809
+ "name": "WheelScrollTop",
1810
+ "returnType": "ValueTask<double>",
1811
+ "signature": "WheelScrollTop(Microsoft.AspNetCore.Components.ElementReference element)",
1812
+ "summary": null
1813
+ },
1814
+ {
1815
+ "name": "WheelScrollTo",
1816
+ "returnType": "ValueTask",
1817
+ "signature": "WheelScrollTo(Microsoft.AspNetCore.Components.ElementReference element, double top)",
1818
+ "summary": null
1819
+ },
1820
+ {
1821
+ "name": "SetPointerCaptureOnElement",
1822
+ "returnType": "ValueTask",
1823
+ "signature": "SetPointerCaptureOnElement(string elementId, long pointerId)",
1824
+ "summary": null
1825
+ },
1826
+ {
1827
+ "name": "ReleasePointerCaptureOnElement",
1828
+ "returnType": "ValueTask",
1829
+ "signature": "ReleasePointerCaptureOnElement(string elementId, long pointerId)",
1830
+ "summary": null
1831
+ },
1832
+ {
1833
+ "name": "RegisterDrawerSwipe",
1834
+ "returnType": "ValueTask",
1835
+ "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler)",
1836
+ "summary": null
1837
+ },
1838
+ {
1839
+ "name": "RegisterDrawerSwipe",
1840
+ "returnType": "ValueTask",
1841
+ "signature": "RegisterDrawerSwipe(string elementId, Func<Task> handler)",
1842
+ "summary": null
1843
+ },
1844
+ {
1845
+ "name": "RegisterDrawerSwipe",
1846
+ "returnType": "ValueTask",
1847
+ "signature": "RegisterDrawerSwipe(string elementId, string direction, Func<Task> handler, int? activationPx, int? firePx)",
1848
+ "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."
1849
+ },
1850
+ {
1851
+ "name": "UnregisterDrawerSwipe",
1852
+ "returnType": "ValueTask",
1853
+ "signature": "UnregisterDrawerSwipe(string elementId)",
1854
+ "summary": null
1855
+ },
1856
+ {
1857
+ "name": "RegisterTabSwipe",
1858
+ "returnType": "ValueTask",
1859
+ "signature": "RegisterTabSwipe(string elementId, bool wrap, Func<string, Task> handler)",
1860
+ "summary": null
1861
+ },
1862
+ {
1863
+ "name": "RegisterTabSwipe",
1864
+ "returnType": "ValueTask",
1865
+ "signature": "RegisterTabSwipe(string elementId, bool wrap, Func<string, Task> handler, int? swipeThresholdPx, int? verticalDeadZonePx)",
1866
+ "summary": "3.0.1 — extended overload that accepts horizontal swipe and vertical dead-zone thresholds. Passing null falls back to the JS hardcoded defaults so existing callers keep working unchanged."
1867
+ },
1868
+ {
1869
+ "name": "UnregisterTabSwipe",
1870
+ "returnType": "ValueTask",
1871
+ "signature": "UnregisterTabSwipe(string elementId)",
1872
+ "summary": null
1873
+ },
1874
+ {
1875
+ "name": "RegisterSortableTouch",
1876
+ "returnType": "ValueTask",
1877
+ "signature": "RegisterSortableTouch(string containerId, Func<int, int, Task> handler)",
1878
+ "summary": null
1879
+ },
1880
+ {
1881
+ "name": "UnregisterSortableTouch",
1882
+ "returnType": "ValueTask",
1883
+ "signature": "UnregisterSortableTouch(string containerId)",
1884
+ "summary": null
1885
+ },
1886
+ {
1887
+ "name": "RegisterCarouselSwipe",
1888
+ "returnType": "ValueTask",
1889
+ "signature": "RegisterCarouselSwipe(string elementId, string orientation, Func<string, Task> swipeHandler, Func<double, double, int, Task> scrollHandler)",
1890
+ "summary": null
1891
+ },
1892
+ {
1893
+ "name": "RegisterCarouselSwipe",
1894
+ "returnType": "ValueTask",
1895
+ "signature": "RegisterCarouselSwipe(string elementId, string orientation, Func<string, Task> swipeHandler, Func<double, double, int, Task> scrollHandler, int? swipeThresholdPx, int? verticalDeadZonePx)",
1896
+ "summary": "3.0.1 — overload with explicit swipe / vertical dead-zone thresholds (Carousel)."
1897
+ },
1898
+ {
1899
+ "name": "UnregisterCarouselSwipe",
1900
+ "returnType": "ValueTask",
1901
+ "signature": "UnregisterCarouselSwipe(string elementId)",
1902
+ "summary": null
1903
+ },
1904
+ {
1905
+ "name": "CarouselScrollTo",
1906
+ "returnType": "ValueTask",
1907
+ "signature": "CarouselScrollTo(string elementId, int index, string behavior = \"smooth\")",
1908
+ "summary": null
1909
+ },
1910
+ {
1911
+ "name": "RegisterHorizontalSwipe",
1912
+ "returnType": "ValueTask",
1913
+ "signature": "RegisterHorizontalSwipe(string elementId, Func<string, Task> handler)",
1914
+ "summary": null
1915
+ },
1916
+ {
1917
+ "name": "RegisterHorizontalSwipe",
1918
+ "returnType": "ValueTask",
1919
+ "signature": "RegisterHorizontalSwipe(string elementId, Func<string, Task> handler, int? swipeThresholdPx, int? verticalDeadZonePx)",
1920
+ "summary": "3.0.1 — overload with explicit swipe / vertical dead-zone thresholds (Calendar)."
1921
+ },
1922
+ {
1923
+ "name": "UnregisterHorizontalSwipe",
1924
+ "returnType": "ValueTask",
1925
+ "signature": "UnregisterHorizontalSwipe(string elementId)",
1926
+ "summary": null
1927
+ },
1928
+ {
1929
+ "name": "RegisterGallerySwipe",
1930
+ "returnType": "ValueTask",
1931
+ "signature": "RegisterGallerySwipe(string elementId, Func<string, Task> handler)",
1932
+ "summary": null
1933
+ },
1934
+ {
1935
+ "name": "RegisterGallerySwipe",
1936
+ "returnType": "ValueTask",
1937
+ "signature": "RegisterGallerySwipe(string elementId, Func<string, Task> handler, int? swipeThresholdPx, int? verticalDeadZonePx)",
1938
+ "summary": "3.0.1 — overload with explicit swipe / vertical dead-zone thresholds (ImageGallery)."
1939
+ },
1940
+ {
1941
+ "name": "UnregisterGallerySwipe",
1942
+ "returnType": "ValueTask",
1943
+ "signature": "UnregisterGallerySwipe(string elementId)",
1944
+ "summary": null
1945
+ },
1946
+ {
1947
+ "name": "RegisterResizeHandle",
1948
+ "returnType": "ValueTask",
1949
+ "signature": "RegisterResizeHandle(string elementId, string direction, Func<double, Task> resizeHandler, Func<Task> resizeEndHandler)",
1950
+ "summary": null
1951
+ },
1952
+ {
1953
+ "name": "UnregisterResizeHandle",
1954
+ "returnType": "ValueTask",
1955
+ "signature": "UnregisterResizeHandle(string elementId)",
1956
+ "summary": null
1957
+ },
1958
+ {
1959
+ "name": "RegisterScrollspy",
1960
+ "returnType": "ValueTask",
1961
+ "signature": "RegisterScrollspy(string containerId, int offset, bool smooth, Func<string?, Task> handler)",
1962
+ "summary": null
1963
+ },
1964
+ {
1965
+ "name": "UnregisterScrollspy",
1966
+ "returnType": "ValueTask",
1967
+ "signature": "UnregisterScrollspy(string containerId)",
1968
+ "summary": null
1969
+ },
1970
+ {
1971
+ "name": "ScrollspyScrollTo",
1972
+ "returnType": "ValueTask",
1973
+ "signature": "ScrollspyScrollTo(string containerId, string sectionId, bool smooth)",
1974
+ "summary": null
1975
+ },
1976
+ {
1977
+ "name": "RegisterToastSwipe",
1978
+ "returnType": "ValueTask",
1979
+ "signature": "RegisterToastSwipe(string elementId, string toastId, Func<string, Task> handler)",
1980
+ "summary": null
1981
+ },
1982
+ {
1983
+ "name": "UnregisterToastSwipe",
1984
+ "returnType": "ValueTask",
1985
+ "signature": "UnregisterToastSwipe(string toastId, string elementId)",
1986
+ "summary": null
1987
+ },
1988
+ {
1989
+ "name": "SetupAutoResize",
1990
+ "returnType": "ValueTask",
1991
+ "signature": "SetupAutoResize(string elementId, int maxRows)",
1992
+ "summary": null
1993
+ },
1994
+ {
1995
+ "name": "UnregisterAutoResize",
1996
+ "returnType": "ValueTask",
1997
+ "signature": "UnregisterAutoResize(string elementId)",
1998
+ "summary": null
1999
+ },
2000
+ {
2001
+ "name": "RegisterOtpPaste",
2002
+ "returnType": "ValueTask",
2003
+ "signature": "RegisterOtpPaste(string baseId, int length, Func<string, Task> handler)",
2004
+ "summary": null
2005
+ },
2006
+ {
2007
+ "name": "UnregisterOtpPaste",
2008
+ "returnType": "ValueTask",
2009
+ "signature": "UnregisterOtpPaste(string baseId, int length)",
2010
+ "summary": null
2011
+ },
2012
+ {
2013
+ "name": "RegisterColumnResize",
2014
+ "returnType": "ValueTask",
2015
+ "signature": "RegisterColumnResize(string handleId, double minWidth, double? maxWidth, Func<double, Task> commitHandler)",
2016
+ "summary": null
2017
+ },
2018
+ {
2019
+ "name": "UnregisterColumnResize",
2020
+ "returnType": "ValueTask",
2021
+ "signature": "UnregisterColumnResize(string handleId)",
2022
+ "summary": null
2023
+ },
2024
+ {
2025
+ "name": "CaptureColumnRects",
2026
+ "returnType": "ValueTask",
2027
+ "signature": "CaptureColumnRects(string gridId)",
2028
+ "summary": null
2029
+ },
2030
+ {
2031
+ "name": "AnimateColumnReorder",
2032
+ "returnType": "ValueTask",
2033
+ "signature": "AnimateColumnReorder(string gridId, int durationMs)",
2034
+ "summary": null
2035
+ },
2036
+ {
2037
+ "name": "GetElementRectBySelector",
2038
+ "returnType": "ValueTask<ElementRect?>",
2039
+ "signature": "GetElementRectBySelector(string selector)",
2040
+ "summary": null
2041
+ },
2042
+ {
2043
+ "name": "RegisterAffix",
2044
+ "returnType": "ValueTask",
2045
+ "signature": "RegisterAffix(string elementId, int offsetTop, int? offsetBottom, string? target, Func<bool, Task> handler)",
2046
+ "summary": null
2047
+ },
2048
+ {
2049
+ "name": "UnregisterAffix",
2050
+ "returnType": "ValueTask",
2051
+ "signature": "UnregisterAffix(string elementId)",
2052
+ "summary": null
2053
+ },
2054
+ {
2055
+ "name": "GetTextareaCaretPosition",
2056
+ "returnType": "ValueTask<ComponentInteropService.TextareaCaretInfo>",
2057
+ "signature": "GetTextareaCaretPosition(string elementId)",
2058
+ "summary": null
2059
+ },
2060
+ {
2061
+ "name": "TabsMeasure",
2062
+ "returnType": "ValueTask<ComponentInteropService.TabMeasurement?>",
2063
+ "signature": "TabsMeasure(string elementId)",
2064
+ "summary": null
2065
+ },
2066
+ {
2067
+ "name": "RegisterBackToTop",
2068
+ "returnType": "ValueTask",
2069
+ "signature": "RegisterBackToTop(string id, int threshold, Func<bool, Task> handler)",
2070
+ "summary": null
2071
+ },
2072
+ {
2073
+ "name": "UnregisterBackToTop",
2074
+ "returnType": "ValueTask",
2075
+ "signature": "UnregisterBackToTop(string id)",
2076
+ "summary": null
2077
+ },
2078
+ {
2079
+ "name": "ScrollToTop",
2080
+ "returnType": "ValueTask",
2081
+ "signature": "ScrollToTop()",
2082
+ "summary": null
2083
+ },
2084
+ {
2085
+ "name": "DownloadFile",
2086
+ "returnType": "ValueTask",
2087
+ "signature": "DownloadFile(string fileName, string contentBase64, string mimeType = \"application/octet-stream\")",
2088
+ "summary": null
2089
+ },
2090
+ {
2091
+ "name": "CopyToClipboard",
2092
+ "returnType": "ValueTask",
2093
+ "signature": "CopyToClipboard(string text)",
2094
+ "summary": null
2095
+ },
2096
+ {
2097
+ "name": "RippleAttachAsync",
2098
+ "returnType": "ValueTask",
2099
+ "signature": "RippleAttachAsync(Microsoft.AspNetCore.Components.ElementReference element)",
2100
+ "summary": null
2101
+ },
2102
+ {
2103
+ "name": "RippleDetachAsync",
2104
+ "returnType": "ValueTask",
2105
+ "signature": "RippleDetachAsync(Microsoft.AspNetCore.Components.ElementReference element)",
2106
+ "summary": null
2107
+ },
2108
+ {
2109
+ "name": "PlayMedia",
2110
+ "returnType": "ValueTask",
2111
+ "signature": "PlayMedia(Microsoft.AspNetCore.Components.ElementReference element)",
2112
+ "summary": null
2113
+ },
2114
+ {
2115
+ "name": "PauseMedia",
2116
+ "returnType": "ValueTask",
2117
+ "signature": "PauseMedia(Microsoft.AspNetCore.Components.ElementReference element)",
2118
+ "summary": null
2119
+ },
2120
+ {
2121
+ "name": "SetMediaVolume",
2122
+ "returnType": "ValueTask",
2123
+ "signature": "SetMediaVolume(Microsoft.AspNetCore.Components.ElementReference element, double volume, bool muted)",
2124
+ "summary": null
2125
+ },
2126
+ {
2127
+ "name": "SeekMedia",
2128
+ "returnType": "ValueTask",
2129
+ "signature": "SeekMedia(Microsoft.AspNetCore.Components.ElementReference element, double seconds)",
2130
+ "summary": null
2131
+ },
2132
+ {
2133
+ "name": "GetMediaState",
2134
+ "returnType": "ValueTask<MediaState>",
2135
+ "signature": "GetMediaState(Microsoft.AspNetCore.Components.ElementReference element)",
2136
+ "summary": "Reads the live duration and currentTime off an HTMLMediaElement. Required because Blazor's media event args don't expose these — they're properties of the element itself."
2137
+ },
2138
+ {
2139
+ "name": "Vibrate",
2140
+ "returnType": "ValueTask",
2141
+ "signature": "Vibrate(int milliseconds)",
2142
+ "summary": null
2143
+ },
2144
+ {
2145
+ "name": "SaveToLocalStorage",
2146
+ "returnType": "ValueTask",
2147
+ "signature": "SaveToLocalStorage(string key, string value)",
2148
+ "summary": null
2149
+ },
2150
+ {
2151
+ "name": "LoadFromLocalStorage",
2152
+ "returnType": "ValueTask<string?>",
2153
+ "signature": "LoadFromLocalStorage(string key)",
2154
+ "summary": null
2155
+ },
2156
+ {
2157
+ "name": "RemoveFromLocalStorage",
2158
+ "returnType": "ValueTask",
2159
+ "signature": "RemoveFromLocalStorage(string key)",
2160
+ "summary": null
2161
+ },
2162
+ {
2163
+ "name": "MotionTickNumber",
2164
+ "returnType": "ValueTask",
2165
+ "signature": "MotionTickNumber(string elementId, double from, double to, int durationMs, int decimals, string separator = \",\")",
2166
+ "summary": null
2167
+ },
2168
+ {
2169
+ "name": "MotionDisposeTicker",
2170
+ "returnType": "ValueTask",
2171
+ "signature": "MotionDisposeTicker(string elementId)",
2172
+ "summary": null
2173
+ },
2174
+ {
2175
+ "name": "MotionRevealText",
2176
+ "returnType": "ValueTask",
2177
+ "signature": "MotionRevealText(string elementId, int staggerMs, double threshold)",
2178
+ "summary": null
2179
+ },
2180
+ {
2181
+ "name": "MotionBlurFade",
2182
+ "returnType": "ValueTask",
2183
+ "signature": "MotionBlurFade(string elementId, int delayMs, bool once, bool forceHidden = false)",
2184
+ "summary": null
2185
+ },
2186
+ {
2187
+ "name": "MotionDisposeObserver",
2188
+ "returnType": "ValueTask",
2189
+ "signature": "MotionDisposeObserver(string elementId)",
2190
+ "summary": null
2191
+ },
2192
+ {
2193
+ "name": "MotionAnimatedBeam",
2194
+ "returnType": "ValueTask",
2195
+ "signature": "MotionAnimatedBeam(string elementId, string fromId, string toId, object options)",
2196
+ "summary": null
2197
+ },
2198
+ {
2199
+ "name": "MotionDisposeAnimatedBeam",
2200
+ "returnType": "ValueTask",
2201
+ "signature": "MotionDisposeAnimatedBeam(string elementId)",
2202
+ "summary": null
2203
+ },
2204
+ {
2205
+ "name": "MotionDock",
2206
+ "returnType": "ValueTask",
2207
+ "signature": "MotionDock(string elementId, object options)",
2208
+ "summary": null
2209
+ },
2210
+ {
2211
+ "name": "MotionDisposeDock",
2212
+ "returnType": "ValueTask",
2213
+ "signature": "MotionDisposeDock(string elementId)",
2214
+ "summary": null
2215
+ },
2216
+ {
2217
+ "name": "MotionConfettiInit",
2218
+ "returnType": "ValueTask",
2219
+ "signature": "MotionConfettiInit(string elementId)",
2220
+ "summary": null
2221
+ },
2222
+ {
2223
+ "name": "MotionConfettiFire",
2224
+ "returnType": "ValueTask",
2225
+ "signature": "MotionConfettiFire(string elementId, object options)",
2226
+ "summary": null
2227
+ },
2228
+ {
2229
+ "name": "MotionDisposeConfetti",
2230
+ "returnType": "ValueTask",
2231
+ "signature": "MotionDisposeConfetti(string elementId)",
2232
+ "summary": null
2233
+ },
2234
+ {
2235
+ "name": "AiAutosize",
2236
+ "returnType": "ValueTask",
2237
+ "signature": "AiAutosize(string elementId, int maxPx)",
2238
+ "summary": null
2239
+ },
2240
+ {
2241
+ "name": "AiObserveAutoScroll",
2242
+ "returnType": "ValueTask",
2243
+ "signature": "AiObserveAutoScroll(string elementId)",
2244
+ "summary": null
2245
+ },
2246
+ {
2247
+ "name": "AiDisposeAutoScroll",
2248
+ "returnType": "ValueTask",
2249
+ "signature": "AiDisposeAutoScroll(string elementId)",
2250
+ "summary": null
2251
+ },
2252
+ {
2253
+ "name": "AiScrollToBottom",
2254
+ "returnType": "ValueTask",
2255
+ "signature": "AiScrollToBottom(string elementId)",
2256
+ "summary": null
2257
+ },
2258
+ {
2259
+ "name": "SchedulerInitAsync",
2260
+ "returnType": "Task<string>",
2261
+ "signature": "SchedulerInitAsync(Microsoft.AspNetCore.Components.ElementReference el, object dotNetRef, object options)",
2262
+ "summary": null
2263
+ },
2264
+ {
2265
+ "name": "SchedulerSetEventsAsync",
2266
+ "returnType": "Task",
2267
+ "signature": "SchedulerSetEventsAsync(string id, IEnumerable<object> events)",
2268
+ "summary": null
2269
+ },
2270
+ {
2271
+ "name": "SchedulerChangeViewAsync",
2272
+ "returnType": "Task",
2273
+ "signature": "SchedulerChangeViewAsync(string id, string view)",
2274
+ "summary": null
2275
+ },
2276
+ {
2277
+ "name": "SchedulerGotoDateAsync",
2278
+ "returnType": "Task",
2279
+ "signature": "SchedulerGotoDateAsync(string id, string dateIso)",
2280
+ "summary": null
2281
+ },
2282
+ {
2283
+ "name": "SchedulerPrevAsync",
2284
+ "returnType": "Task",
2285
+ "signature": "SchedulerPrevAsync(string id)",
2286
+ "summary": null
2287
+ },
2288
+ {
2289
+ "name": "SchedulerNextAsync",
2290
+ "returnType": "Task",
2291
+ "signature": "SchedulerNextAsync(string id)",
2292
+ "summary": null
2293
+ },
2294
+ {
2295
+ "name": "SchedulerTodayAsync",
2296
+ "returnType": "Task",
2297
+ "signature": "SchedulerTodayAsync(string id)",
2298
+ "summary": null
2299
+ },
2300
+ {
2301
+ "name": "SchedulerGetTitleAsync",
2302
+ "returnType": "Task<string>",
2303
+ "signature": "SchedulerGetTitleAsync(string id)",
2304
+ "summary": null
2305
+ },
2306
+ {
2307
+ "name": "SchedulerDestroyAsync",
2308
+ "returnType": "Task",
2309
+ "signature": "SchedulerDestroyAsync(string id)",
2310
+ "summary": null
2311
+ },
2312
+ {
2313
+ "name": "GanttInitAsync",
2314
+ "returnType": "Task<string>",
2315
+ "signature": "GanttInitAsync(Microsoft.AspNetCore.Components.ElementReference el, object dotNetRef, object options)",
2316
+ "summary": null
2317
+ },
2318
+ {
2319
+ "name": "GanttSetTasksAsync",
2320
+ "returnType": "Task",
2321
+ "signature": "GanttSetTasksAsync(string id, IEnumerable<object> tasks)",
2322
+ "summary": null
2323
+ },
2324
+ {
2325
+ "name": "GanttChangeViewModeAsync",
2326
+ "returnType": "Task",
2327
+ "signature": "GanttChangeViewModeAsync(string id, string mode)",
2328
+ "summary": null
2329
+ },
2330
+ {
2331
+ "name": "GanttDestroyAsync",
2332
+ "returnType": "Task",
2333
+ "signature": "GanttDestroyAsync(string id)",
2334
+ "summary": null
2335
+ },
2336
+ {
2337
+ "name": "RegisterToolbarOverflow",
2338
+ "returnType": "ValueTask",
2339
+ "signature": "RegisterToolbarOverflow(string elementId, Func<int, int, Task> handler)",
2340
+ "summary": null
2341
+ },
2342
+ {
2343
+ "name": "UnregisterToolbarOverflow",
2344
+ "returnType": "ValueTask",
2345
+ "signature": "UnregisterToolbarOverflow(string elementId)",
2346
+ "summary": null
2347
+ },
2348
+ {
2349
+ "name": "RichTextInitAsync",
2350
+ "returnType": "ValueTask<string>",
2351
+ "signature": "RichTextInitAsync<T>(Microsoft.AspNetCore.Components.ElementReference elementRef, DotNetObjectReference<T> dotNetRef, object options)",
2352
+ "summary": null
2353
+ },
2354
+ {
2355
+ "name": "RichTextSetContentAsync",
2356
+ "returnType": "ValueTask",
2357
+ "signature": "RichTextSetContentAsync(string id, string? html)",
2358
+ "summary": null
2359
+ },
2360
+ {
2361
+ "name": "RichTextCommandAsync",
2362
+ "returnType": "ValueTask",
2363
+ "signature": "RichTextCommandAsync(string id, string name, params object?[]? args)",
2364
+ "summary": null
2365
+ },
2366
+ {
2367
+ "name": "RichTextGetActiveAsync",
2368
+ "returnType": "ValueTask<Interop.RichTextActiveState?>",
2369
+ "signature": "RichTextGetActiveAsync(string id)",
2370
+ "summary": null
2371
+ },
2372
+ {
2373
+ "name": "RichTextSetDisabledAsync",
2374
+ "returnType": "ValueTask",
2375
+ "signature": "RichTextSetDisabledAsync(string id, bool disabled)",
2376
+ "summary": null
2377
+ },
2378
+ {
2379
+ "name": "RichTextDestroyAsync",
2380
+ "returnType": "ValueTask",
2381
+ "signature": "RichTextDestroyAsync(string id)",
2382
+ "summary": null
2383
+ },
2384
+ {
2385
+ "name": "RichTextPromptLinkAsync",
2386
+ "returnType": "ValueTask<string?>",
2387
+ "signature": "RichTextPromptLinkAsync(string? initial)",
2388
+ "summary": null
2389
+ },
2390
+ {
2391
+ "name": "SignaturePadInit",
2392
+ "returnType": "ValueTask",
2393
+ "signature": "SignaturePadInit(string elementId, object options, DotNetObjectReference<SignaturePad> dotNetRef)",
2394
+ "summary": null
2395
+ },
2396
+ {
2397
+ "name": "SignaturePadClear",
2398
+ "returnType": "ValueTask",
2399
+ "signature": "SignaturePadClear(string elementId)",
2400
+ "summary": null
2401
+ },
2402
+ {
2403
+ "name": "SignaturePadDataUrl",
2404
+ "returnType": "ValueTask<string?>",
2405
+ "signature": "SignaturePadDataUrl(string elementId, string mimeType)",
2406
+ "summary": null
2407
+ },
2408
+ {
2409
+ "name": "SignaturePadSetStrokeStyle",
2410
+ "returnType": "ValueTask",
2411
+ "signature": "SignaturePadSetStrokeStyle(string elementId, string color, double width)",
2412
+ "summary": null
2413
+ },
2414
+ {
2415
+ "name": "SignaturePadSetDisabled",
2416
+ "returnType": "ValueTask",
2417
+ "signature": "SignaturePadSetDisabled(string elementId, bool disabled)",
2418
+ "summary": null
2419
+ },
2420
+ {
2421
+ "name": "SignaturePadLoadDataUrl",
2422
+ "returnType": "ValueTask",
2423
+ "signature": "SignaturePadLoadDataUrl(string elementId, string? dataUrl)",
2424
+ "summary": null
2425
+ },
2426
+ {
2427
+ "name": "SignaturePadDestroy",
2428
+ "returnType": "ValueTask",
2429
+ "signature": "SignaturePadDestroy(string elementId)",
2430
+ "summary": null
2431
+ }
2432
+ ],
2433
+ "events": [],
2434
+ "enumValues": []
2435
+ },
2436
+ {
2437
+ "name": "IOverlayService",
2438
+ "kind": "interface",
2439
+ "namespace": "Lumeo.Services",
2440
+ "summary": "Provides methods to show and close overlay components (Dialog, Sheet, Drawer, AlertDialog). Inject this interface in consumers to enable mocking in tests.",
2441
+ "properties": [],
2442
+ "methods": [
2443
+ {
2444
+ "name": "ShowDialogAsync",
2445
+ "returnType": "Task<OverlayResult>",
2446
+ "signature": "ShowDialogAsync<TComponent>(string? title = null, OverlayParameters? parameters = null, OverlayOptions? options = null)",
2447
+ "summary": null
2448
+ },
2449
+ {
2450
+ "name": "ShowSheetAsync",
2451
+ "returnType": "Task<OverlayResult>",
2452
+ "signature": "ShowSheetAsync<TComponent>(string? title = null, Lumeo.Side side = Lumeo.Side.Right, SheetSize size = SheetSize.Default, OverlayParameters? parameters = null, OverlayOptions? options = null)",
2453
+ "summary": null
2454
+ },
2455
+ {
2456
+ "name": "ShowDrawerAsync",
2457
+ "returnType": "Task<OverlayResult>",
2458
+ "signature": "ShowDrawerAsync<TComponent>(string? title = null, OverlayParameters? parameters = null, OverlayOptions? options = null)",
2459
+ "summary": null
2460
+ },
2461
+ {
2462
+ "name": "ShowAlertDialogAsync",
2463
+ "returnType": "Task<OverlayResult>",
2464
+ "signature": "ShowAlertDialogAsync(AlertDialogOptions alertOptions)",
2465
+ "summary": null
2466
+ },
2467
+ {
2468
+ "name": "Close",
2469
+ "returnType": "void",
2470
+ "signature": "Close(string overlayId, object? result = null)",
2471
+ "summary": null
2472
+ },
2473
+ {
2474
+ "name": "Cancel",
2475
+ "returnType": "void",
2476
+ "signature": "Cancel(string overlayId)",
2477
+ "summary": null
2478
+ }
2479
+ ],
2480
+ "events": [
2481
+ {
2482
+ "name": "OnShow",
2483
+ "type": "Action<OverlayInstance>?",
2484
+ "summary": null
2485
+ },
2486
+ {
2487
+ "name": "OnClose",
2488
+ "type": "Action<string, object?, bool>?",
2489
+ "summary": null
2490
+ }
2491
+ ],
2492
+ "enumValues": []
2493
+ },
2494
+ {
2495
+ "name": "IResponsiveService",
2496
+ "kind": "interface",
2497
+ "namespace": "Lumeo.Services",
2498
+ "summary": "Reactive viewport/breakpoint information. Use this to make components respond to viewport size changes (e.g. switching a Sheet from side panel on desktop to fullscreen on mobile, or hiding sidebars below md). Subscribe to ViewportChanged to react to live resize / orientation change.",
2499
+ "properties": [
2500
+ {
2501
+ "name": "Width",
2502
+ "type": "double",
2503
+ "default": null,
2504
+ "summary": "Current viewport width in CSS pixels (window.innerWidth). 0 until the first interop sync — read inside OnAfterRenderAsync or subscribe to ViewportChanged to get the populated value."
2505
+ },
2506
+ {
2507
+ "name": "Height",
2508
+ "type": "double",
2509
+ "default": null,
2510
+ "summary": "Current viewport height in CSS pixels (window.innerHeight). 0 until first interop sync. See Width for the timing caveat."
2511
+ },
2512
+ {
2513
+ "name": "Current",
2514
+ "type": "Breakpoint",
2515
+ "default": null,
2516
+ "summary": "Current Tailwind-aligned breakpoint based on Width. Maps to the same boundaries Tailwind v4 uses: Sm=640, Md=768, Lg=1024, Xl=1280, Xxl=1536. Use the convenience flags below for the common case."
2517
+ },
2518
+ {
2519
+ "name": "IsMobile",
2520
+ "type": "bool",
2521
+ "default": null,
2522
+ "summary": "True when Width is below Md (768px) — the conventional mobile boundary. Same value the OverlayOptions.MobileBreakpoint default checks against."
2523
+ },
2524
+ {
2525
+ "name": "IsTablet",
2526
+ "type": "bool",
2527
+ "default": null,
2528
+ "summary": "True when Width is in [Md, Lg) — 768-1023px. Tablets in portrait, large phones in landscape."
2529
+ },
2530
+ {
2531
+ "name": "IsDesktop",
2532
+ "type": "bool",
2533
+ "default": null,
2534
+ "summary": "True when Width is >= Lg (1024px). Includes typical laptop / desktop layouts."
2535
+ }
2536
+ ],
2537
+ "methods": [
2538
+ {
2539
+ "name": "EnsureInitialisedAsync",
2540
+ "returnType": "ValueTask",
2541
+ "signature": "EnsureInitialisedAsync()",
2542
+ "summary": "Lazily registers the JS resize listener and pulls the initial viewport size. Called automatically the first time a property is read, but consumers can call it eagerly from OnAfterRenderAsync(firstRender: true) to avoid the first-render zero-value read."
2543
+ }
2544
+ ],
2545
+ "events": [
2546
+ {
2547
+ "name": "ViewportChanged",
2548
+ "type": "Action<ViewportInfo>?",
2549
+ "summary": "Fires whenever the viewport size crosses a meaningful boundary. Implementations debounce raw resize events (~100ms) so frequent listeners don't fire per scroll-bar nudge. The event arg carries the new width, height, and breakpoint."
2550
+ }
2551
+ ],
2552
+ "enumValues": []
2553
+ },
2554
+ {
2555
+ "name": "IThemeService",
2556
+ "kind": "interface",
2557
+ "namespace": "Lumeo.Services",
2558
+ "summary": "Provides theme mode and scheme management (dark/light/system, color schemes, layout direction). Inject this interface in consumers to enable mocking in tests.",
2559
+ "properties": [
2560
+ {
2561
+ "name": "CurrentMode",
2562
+ "type": "ThemeMode",
2563
+ "default": null,
2564
+ "summary": null
2565
+ },
2566
+ {
2567
+ "name": "CurrentScheme",
2568
+ "type": "string",
2569
+ "default": null,
2570
+ "summary": null
2571
+ },
2572
+ {
2573
+ "name": "IsDark",
2574
+ "type": "bool",
2575
+ "default": null,
2576
+ "summary": null
2577
+ },
2578
+ {
2579
+ "name": "CurrentDirection",
2580
+ "type": "LayoutDirection",
2581
+ "default": null,
2582
+ "summary": null
2583
+ }
2584
+ ],
2585
+ "methods": [
2586
+ {
2587
+ "name": "InitializeAsync",
2588
+ "returnType": "Task",
2589
+ "signature": "InitializeAsync()",
2590
+ "summary": null
2591
+ },
2592
+ {
2593
+ "name": "SetModeAsync",
2594
+ "returnType": "Task",
2595
+ "signature": "SetModeAsync(ThemeMode mode)",
2596
+ "summary": null
2597
+ },
2598
+ {
2599
+ "name": "SetSchemeAsync",
2600
+ "returnType": "Task",
2601
+ "signature": "SetSchemeAsync(string scheme)",
2602
+ "summary": null
2603
+ },
2604
+ {
2605
+ "name": "ToggleModeAsync",
2606
+ "returnType": "Task",
2607
+ "signature": "ToggleModeAsync()",
2608
+ "summary": null
2609
+ },
2610
+ {
2611
+ "name": "SetDirectionAsync",
2612
+ "returnType": "Task",
2613
+ "signature": "SetDirectionAsync(LayoutDirection direction)",
2614
+ "summary": "Set the page layout direction (LTR / RTL). Persisted to localStorage."
2615
+ },
2616
+ {
2617
+ "name": "GetDirectionAsync",
2618
+ "returnType": "Task<LayoutDirection>",
2619
+ "signature": "GetDirectionAsync()",
2620
+ "summary": "Read the current direction (reads from document.documentElement.dir)."
2621
+ }
2622
+ ],
2623
+ "events": [
2624
+ {
2625
+ "name": "OnThemeChanged",
2626
+ "type": "Action?",
2627
+ "summary": null
2628
+ }
2629
+ ],
2630
+ "enumValues": []
2631
+ },
2632
+ {
2633
+ "name": "LayoutDirection",
2634
+ "kind": "enum",
2635
+ "namespace": "Lumeo.Services",
2636
+ "summary": "Layout direction. Mirrors the dir attribute on &lt;html&gt;.",
2637
+ "properties": [],
2638
+ "methods": [],
2639
+ "events": [],
2640
+ "enumValues": [
2641
+ {
2642
+ "name": "Ltr",
2643
+ "summary": "Left-to-right (default, e.g. English, German, Spanish)."
2644
+ },
2645
+ {
2646
+ "name": "Rtl",
2647
+ "summary": "Right-to-left (e.g. Arabic, Hebrew, Persian)."
2648
+ }
2649
+ ]
2650
+ },
2651
+ {
2652
+ "name": "Orientation",
2653
+ "kind": "enum",
2654
+ "namespace": "Lumeo",
2655
+ "summary": "Layout axis for components that can lay their content out either left-to-right or top-to-bottom (Tabs, Separator, Carousel, Stepper, Timeline, Splitter, MegaMenu, ButtonGroup, ImageCompare, FormField, Steps, ToggleGroup, etc.). Replaces per-component *Orientation / *Direction enums in 3.0 (BREAKING).",
2656
+ "properties": [],
2657
+ "methods": [],
2658
+ "events": [],
2659
+ "enumValues": [
2660
+ {
2661
+ "name": "Horizontal",
2662
+ "summary": "Lay out content horizontally (left-to-right)."
2663
+ },
2664
+ {
2665
+ "name": "Vertical",
2666
+ "summary": "Lay out content vertically (top-to-bottom)."
2667
+ }
2668
+ ]
2669
+ },
2670
+ {
2671
+ "name": "OverlayInstance",
2672
+ "kind": "class",
2673
+ "namespace": "Lumeo.Services",
2674
+ "summary": null,
2675
+ "properties": [
2676
+ {
2677
+ "name": "Id",
2678
+ "type": "string",
2679
+ "default": null,
2680
+ "summary": null
2681
+ },
2682
+ {
2683
+ "name": "Type",
2684
+ "type": "OverlayType",
2685
+ "default": null,
2686
+ "summary": null
2687
+ },
2688
+ {
2689
+ "name": "ComponentType",
2690
+ "type": "Type?",
2691
+ "default": null,
2692
+ "summary": null
2693
+ },
2694
+ {
2695
+ "name": "Title",
2696
+ "type": "string?",
2697
+ "default": null,
2698
+ "summary": null
2699
+ },
2700
+ {
2701
+ "name": "Parameters",
2702
+ "type": "OverlayParameters?",
2703
+ "default": null,
2704
+ "summary": null
2705
+ },
2706
+ {
2707
+ "name": "Options",
2708
+ "type": "OverlayOptions",
2709
+ "default": "new()",
2710
+ "summary": null
2711
+ },
2712
+ {
2713
+ "name": "AlertOptions",
2714
+ "type": "AlertDialogOptions?",
2715
+ "default": null,
2716
+ "summary": null
2717
+ },
2718
+ {
2719
+ "name": "ZIndex",
2720
+ "type": "int",
2721
+ "default": "OverlayService.BaseZIndex",
2722
+ "summary": "Backdrop z-index for this overlay. Content sits at ZIndex + 1 so a nested overlay's backdrop (allocated later with a strictly larger value) lands above the parent's content. Assigned by OverlayService at registration time."
2723
+ }
2724
+ ],
2725
+ "methods": [],
2726
+ "events": [],
2727
+ "enumValues": []
2728
+ },
2729
+ {
2730
+ "name": "OverlayOptions",
2731
+ "kind": "record",
2732
+ "namespace": "Lumeo.Services",
2733
+ "summary": null,
2734
+ "properties": [
2735
+ {
2736
+ "name": "Class",
2737
+ "type": "string?",
2738
+ "default": null,
2739
+ "summary": null
2740
+ },
2741
+ {
2742
+ "name": "PreventClose",
2743
+ "type": "bool",
2744
+ "default": null,
2745
+ "summary": null
2746
+ },
2747
+ {
2748
+ "name": "SheetSide",
2749
+ "type": "Lumeo.Side",
2750
+ "default": "Lumeo.Side.Right",
2751
+ "summary": null
2752
+ },
2753
+ {
2754
+ "name": "SheetSize",
2755
+ "type": "SheetSize",
2756
+ "default": "SheetSize.Default",
2757
+ "summary": null
2758
+ },
2759
+ {
2760
+ "name": "SwipeToClose",
2761
+ "type": "bool",
2762
+ "default": null,
2763
+ "summary": "When true, a Sheet opened via OverlayService.ShowSheetAsync{T} can be dismissed by swiping in the direction opposite to its SheetSide (e.g. swipe-down on a Bottom sheet). Ignored for non-Sheet overlay types. Drawers already enable swipe by default. Default false to preserve the existing programmatic-open behaviour."
2764
+ },
2765
+ {
2766
+ "name": "MobileBreakpoint",
2767
+ "type": "int?",
2768
+ "default": "768",
2769
+ "summary": "Viewport width threshold (CSS pixels) below which the Mobile* overrides apply. Default 768 (Tailwind md). Set to null to disable responsive switching even if the Mobile* fields are populated."
2770
+ },
2771
+ {
2772
+ "name": "MobileSheetSide",
2773
+ "type": "Lumeo.Side?",
2774
+ "default": null,
2775
+ "summary": "Sheet side to use when the viewport is below MobileBreakpoint. Null = use SheetSide at all sizes. Typical pattern: Lumeo.Side.Right on desktop, Lumeo.Side.Bottom on mobile."
2776
+ },
2777
+ {
2778
+ "name": "MobileSheetSize",
2779
+ "type": "SheetSize?",
2780
+ "default": null,
2781
+ "summary": "Sheet size to use when the viewport is below MobileBreakpoint. Null = use SheetSize at all sizes. Typical pattern: SheetSize.Default on desktop, SheetSize.Full on mobile."
2782
+ },
2783
+ {
2784
+ "name": "MobileSwipeToClose",
2785
+ "type": "bool?",
2786
+ "default": null,
2787
+ "summary": "SwipeToClose override below MobileBreakpoint. Null = use SwipeToClose at all sizes. Typical pattern: off on desktop, on for mobile bottom-sheet pull-down."
2788
+ },
2789
+ {
2790
+ "name": "MobileFullscreen",
2791
+ "type": "bool",
2792
+ "default": null,
2793
+ "summary": "When true and the viewport width is below MobileBreakpoint, the overlay is forced full-screen (full width + full height, no corner radius). Works across Dialog, Sheet and Drawer overlays — replaces the consumer-side max-md:!h-full max-md:!w-full max-md:!max-w-full Tailwind override chain that was previously the only way to get a full-screen Dialog on mobile. For Sheets, this is equivalent to setting MobileSheetSize to Full but composes more naturally for the Sheet+Dialog mixed case."
2794
+ },
2795
+ {
2796
+ "name": "ScrollableBody",
2797
+ "type": "bool",
2798
+ "default": "true",
2799
+ "summary": "Wrap the rendered component in a scrollable body region inside the overlay's chrome (Sheet only — Dialog and Drawer manage their own scroll). Default true so consumers can pass a long form to OverlayService.ShowSheetAsync{T} without rolling their own overflow-y-auto wrapper — and without hitting the focus- ring clip that bare overflow-y: auto introduces (per spec, overflow-y: auto promotes overflow-x to auto too, which clips inputs' box-shadow focus rings at the left/right edge). The built-in wrapper uses the px-1 -mx-1 trick to give focus rings 4px breathing room without shifting the visual padding. Set to false for sheets whose content sets its own scrolling strategy (e.g. an embedded PdfViewer that already paints inside a fixed canvas)."
2800
+ }
2801
+ ],
2802
+ "methods": [],
2803
+ "events": [],
2804
+ "enumValues": []
2805
+ },
2806
+ {
2807
+ "name": "OverlayParameters",
2808
+ "kind": "class",
2809
+ "namespace": "Lumeo.Services",
2810
+ "summary": null,
2811
+ "properties": [],
2812
+ "methods": [
2813
+ {
2814
+ "name": "Add",
2815
+ "returnType": "OverlayParameters",
2816
+ "signature": "Add(string name, object value)",
2817
+ "summary": null
2818
+ },
2819
+ {
2820
+ "name": "Get",
2821
+ "returnType": "T?",
2822
+ "signature": "Get<T>(string name)",
2823
+ "summary": null
2824
+ },
2825
+ {
2826
+ "name": "ToDictionary",
2827
+ "returnType": "Dictionary<string, object>",
2828
+ "signature": "ToDictionary()",
2829
+ "summary": null
2830
+ }
2831
+ ],
2832
+ "events": [],
2833
+ "enumValues": []
2834
+ },
2835
+ {
2836
+ "name": "OverlayResult",
2837
+ "kind": "record",
2838
+ "namespace": "Lumeo.Services",
2839
+ "summary": null,
2840
+ "properties": [
2841
+ {
2842
+ "name": "Cancelled",
2843
+ "type": "bool",
2844
+ "default": null,
2845
+ "summary": null
2846
+ },
2847
+ {
2848
+ "name": "Data",
2849
+ "type": "object?",
2850
+ "default": null,
2851
+ "summary": null
2852
+ }
2853
+ ],
2854
+ "methods": [
2855
+ {
2856
+ "name": "GetData",
2857
+ "returnType": "T?",
2858
+ "signature": "GetData<T>()",
2859
+ "summary": null
2860
+ },
2861
+ {
2862
+ "name": "Ok",
2863
+ "returnType": "OverlayResult",
2864
+ "signature": "Ok(object? data = null)",
2865
+ "summary": null
2866
+ },
2867
+ {
2868
+ "name": "CancelResult",
2869
+ "returnType": "OverlayResult",
2870
+ "signature": "CancelResult()",
2871
+ "summary": null
2872
+ }
2873
+ ],
2874
+ "events": [],
2875
+ "enumValues": []
2876
+ },
2877
+ {
2878
+ "name": "OverlayService",
2879
+ "kind": "class",
2880
+ "namespace": "Lumeo.Services",
2881
+ "summary": null,
2882
+ "properties": [
2883
+ {
2884
+ "name": "BaseZIndex",
2885
+ "type": "int",
2886
+ "default": "50",
2887
+ "summary": "Base z-index assigned to the first overlay. Subsequent overlays stack at BaseZIndex + n * Step. The backdrop sits at the assigned value; the content sits one tier above (Z + 1) so a nested overlay's backdrop always lands above the parent's content."
2888
+ },
2889
+ {
2890
+ "name": "Step",
2891
+ "type": "int",
2892
+ "default": "10",
2893
+ "summary": "Distance between consecutive overlay tiers. Step = 10 leaves room for backdrop (Z) + content (Z+1) without colliding with the next overlay's backdrop."
2894
+ }
2895
+ ],
2896
+ "methods": [
2897
+ {
2898
+ "name": "ShowDialogAsync",
2899
+ "returnType": "Task<OverlayResult>",
2900
+ "signature": "ShowDialogAsync<TComponent>(string? title = null, OverlayParameters? parameters = null, OverlayOptions? options = null)",
2901
+ "summary": null
2902
+ },
2903
+ {
2904
+ "name": "ShowSheetAsync",
2905
+ "returnType": "Task<OverlayResult>",
2906
+ "signature": "ShowSheetAsync<TComponent>(string? title = null, Lumeo.Side side = Lumeo.Side.Right, SheetSize size = SheetSize.Default, OverlayParameters? parameters = null, OverlayOptions? options = null)",
2907
+ "summary": null
2908
+ },
2909
+ {
2910
+ "name": "ShowDrawerAsync",
2911
+ "returnType": "Task<OverlayResult>",
2912
+ "signature": "ShowDrawerAsync<TComponent>(string? title = null, OverlayParameters? parameters = null, OverlayOptions? options = null)",
2913
+ "summary": null
2914
+ },
2915
+ {
2916
+ "name": "ShowAlertDialogAsync",
2917
+ "returnType": "Task<OverlayResult>",
2918
+ "signature": "ShowAlertDialogAsync(AlertDialogOptions alertOptions)",
2919
+ "summary": null
2920
+ },
2921
+ {
2922
+ "name": "Close",
2923
+ "returnType": "void",
2924
+ "signature": "Close(string overlayId, object? result = null)",
2925
+ "summary": null
2926
+ },
2927
+ {
2928
+ "name": "Cancel",
2929
+ "returnType": "void",
2930
+ "signature": "Cancel(string overlayId)",
2931
+ "summary": null
2932
+ }
2933
+ ],
2934
+ "events": [
2935
+ {
2936
+ "name": "OnShow",
2937
+ "type": "Action<OverlayInstance>?",
2938
+ "summary": null
2939
+ },
2940
+ {
2941
+ "name": "OnClose",
2942
+ "type": "Action<string, object?, bool>?",
2943
+ "summary": null
2944
+ }
2945
+ ],
2946
+ "enumValues": []
2947
+ },
2948
+ {
2949
+ "name": "OverlayType",
2950
+ "kind": "enum",
2951
+ "namespace": "Lumeo.Services",
2952
+ "summary": null,
2953
+ "properties": [],
2954
+ "methods": [],
2955
+ "events": [],
2956
+ "enumValues": [
2957
+ {
2958
+ "name": "Dialog",
2959
+ "summary": null
2960
+ },
2961
+ {
2962
+ "name": "Sheet",
2963
+ "summary": null
2964
+ },
2965
+ {
2966
+ "name": "Drawer",
2967
+ "summary": null
2968
+ },
2969
+ {
2970
+ "name": "AlertDialog",
2971
+ "summary": null
2972
+ }
2973
+ ]
2974
+ },
2975
+ {
2976
+ "name": "SheetOverlayOptions",
2977
+ "kind": "record",
2978
+ "namespace": "Lumeo.Services",
2979
+ "summary": "Sheet-shaped overlay options. Semantic marker — at the call site you get clearer intent (\"this configures a Sheet\") and IDE navigation, but the existing OverlayService.ShowDialogAsync{T} / OverlayService.ShowDrawerAsync{T} still accept any OverlayOptions via standard subtype polymorphism, so nothing prevents passing this record to the wrong service overload — the unused sheet-only properties stay silent no-ops there. Compile-time enforcement requires narrowing the service-method signatures to the typed record (planned for 4.0 as a breaking change).",
2980
+ "properties": [
2981
+ {
2982
+ "name": "ScrollableBody",
2983
+ "type": "bool",
2984
+ "default": "true",
2985
+ "summary": "Wrap the rendered component in a scrollable body region inside the overlay's chrome (Sheet only — Dialog and Drawer manage their own scroll). Default true so consumers can pass a long form to OverlayService.ShowSheetAsync{T} without rolling their own overflow-y-auto wrapper — and without hitting the focus- ring clip that bare overflow-y: auto introduces (per spec, overflow-y: auto promotes overflow-x to auto too, which clips inputs' box-shadow focus rings at the left/right edge). The built-in wrapper uses the px-1 -mx-1 trick to give focus rings 4px breathing room without shifting the visual padding. Set to false for sheets whose content sets its own scrolling strategy (e.g. an embedded PdfViewer that already paints inside a fixed canvas)."
2986
+ },
2987
+ {
2988
+ "name": "MobileFullscreen",
2989
+ "type": "bool",
2990
+ "default": null,
2991
+ "summary": "When true and the viewport width is below MobileBreakpoint, the overlay is forced full-screen (full width + full height, no corner radius). Works across Dialog, Sheet and Drawer overlays — replaces the consumer-side max-md:!h-full max-md:!w-full max-md:!max-w-full Tailwind override chain that was previously the only way to get a full-screen Dialog on mobile. For Sheets, this is equivalent to setting MobileSheetSize to Full but composes more naturally for the Sheet+Dialog mixed case."
2992
+ },
2993
+ {
2994
+ "name": "MobileSwipeToClose",
2995
+ "type": "bool?",
2996
+ "default": null,
2997
+ "summary": "SwipeToClose override below MobileBreakpoint. Null = use SwipeToClose at all sizes. Typical pattern: off on desktop, on for mobile bottom-sheet pull-down."
2998
+ },
2999
+ {
3000
+ "name": "MobileSheetSize",
3001
+ "type": "SheetSize?",
3002
+ "default": null,
3003
+ "summary": "Sheet size to use when the viewport is below MobileBreakpoint. Null = use SheetSize at all sizes. Typical pattern: SheetSize.Default on desktop, SheetSize.Full on mobile."
3004
+ },
3005
+ {
3006
+ "name": "MobileSheetSide",
3007
+ "type": "Lumeo.Side?",
3008
+ "default": null,
3009
+ "summary": "Sheet side to use when the viewport is below MobileBreakpoint. Null = use SheetSide at all sizes. Typical pattern: Lumeo.Side.Right on desktop, Lumeo.Side.Bottom on mobile."
3010
+ },
3011
+ {
3012
+ "name": "MobileBreakpoint",
3013
+ "type": "int?",
3014
+ "default": "768",
3015
+ "summary": "Viewport width threshold (CSS pixels) below which the Mobile* overrides apply. Default 768 (Tailwind md). Set to null to disable responsive switching even if the Mobile* fields are populated."
3016
+ },
3017
+ {
3018
+ "name": "SwipeToClose",
3019
+ "type": "bool",
3020
+ "default": null,
3021
+ "summary": "When true, a Sheet opened via OverlayService.ShowSheetAsync{T} can be dismissed by swiping in the direction opposite to its SheetSide (e.g. swipe-down on a Bottom sheet). Ignored for non-Sheet overlay types. Drawers already enable swipe by default. Default false to preserve the existing programmatic-open behaviour."
3022
+ },
3023
+ {
3024
+ "name": "SheetSize",
3025
+ "type": "SheetSize",
3026
+ "default": "SheetSize.Default",
3027
+ "summary": null
3028
+ },
3029
+ {
3030
+ "name": "SheetSide",
3031
+ "type": "Lumeo.Side",
3032
+ "default": "Lumeo.Side.Right",
3033
+ "summary": null
3034
+ },
3035
+ {
3036
+ "name": "PreventClose",
3037
+ "type": "bool",
3038
+ "default": null,
3039
+ "summary": null
3040
+ },
3041
+ {
3042
+ "name": "Class",
3043
+ "type": "string?",
3044
+ "default": null,
3045
+ "summary": null
3046
+ }
3047
+ ],
3048
+ "methods": [],
3049
+ "events": [],
3050
+ "enumValues": []
3051
+ },
3052
+ {
3053
+ "name": "SheetSize",
3054
+ "kind": "enum",
3055
+ "namespace": "Lumeo.Services",
3056
+ "summary": "Sheet size as exposed through OverlayService. Mirrors SheetContent.SheetSize — kept distinct so the service layer doesn't take a hard dependency on the UI namespace. Full is layout-intent (entire viewport) and intentionally NOT folded into Size.",
3057
+ "properties": [],
3058
+ "methods": [],
3059
+ "events": [],
3060
+ "enumValues": [
3061
+ {
3062
+ "name": "Sm",
3063
+ "summary": null
3064
+ },
3065
+ {
3066
+ "name": "Default",
3067
+ "summary": null
3068
+ },
3069
+ {
3070
+ "name": "Lg",
3071
+ "summary": null
3072
+ },
3073
+ {
3074
+ "name": "Xl",
3075
+ "summary": null
3076
+ },
3077
+ {
3078
+ "name": "Full",
3079
+ "summary": null
3080
+ }
3081
+ ]
3082
+ },
3083
+ {
3084
+ "name": "Side",
3085
+ "kind": "enum",
3086
+ "namespace": "Lumeo",
3087
+ "summary": "Cardinal side used for overlay placement and edge anchoring. Replaces the per-component *Side enums (PopoverSide, TooltipSide, DropdownMenuSide, HoverCardSide, DrawerSide, SheetSide, SidebarSide, TourPlacement) in 3.0 (BREAKING).",
3088
+ "properties": [],
3089
+ "methods": [],
3090
+ "events": [],
3091
+ "enumValues": [
3092
+ {
3093
+ "name": "Top",
3094
+ "summary": "The top edge."
3095
+ },
3096
+ {
3097
+ "name": "Right",
3098
+ "summary": "The right edge."
3099
+ },
3100
+ {
3101
+ "name": "Bottom",
3102
+ "summary": "The bottom edge."
3103
+ },
3104
+ {
3105
+ "name": "Left",
3106
+ "summary": "The left edge."
3107
+ }
3108
+ ]
3109
+ },
3110
+ {
3111
+ "name": "Size",
3112
+ "kind": "enum",
3113
+ "namespace": "Lumeo",
3114
+ "summary": "Unified size scale used across Lumeo components. Replaces the per-component *Size enums in 3.0 (BREAKING).",
3115
+ "properties": [],
3116
+ "methods": [],
3117
+ "events": [],
3118
+ "enumValues": [
3119
+ {
3120
+ "name": "Xs",
3121
+ "summary": "Extra small. Used by Icon."
3122
+ },
3123
+ {
3124
+ "name": "Sm",
3125
+ "summary": "Small. Used by most sized components (Avatar, Chip, Input, etc.)."
3126
+ },
3127
+ {
3128
+ "name": "Md",
3129
+ "summary": "Medium / default. The neutral middle value for every sized component."
3130
+ },
3131
+ {
3132
+ "name": "Lg",
3133
+ "summary": "Large. Used by most sized components."
3134
+ },
3135
+ {
3136
+ "name": "Xl",
3137
+ "summary": "Extra large. Used by Avatar, Icon."
3138
+ },
3139
+ {
3140
+ "name": "Xxl",
3141
+ "summary": "2x extra large. Reserved for future use."
3142
+ },
3143
+ {
3144
+ "name": "Xxs",
3145
+ "summary": "Double extra small. For dense-mode Avatar / Chip where a smaller indicator is needed (e.g. inline-with-text presence dot, stacked-avatar list previews). Replaces consumer-side text-[10px] / h-5 w-5 arbitrary-value Tailwind escape hatches with a first-class token. Added in 3.3; appended at value 6 instead of inserted before Xs so existing serialised ints (Sm=1, Md=2, …) still resolve to the same enum member."
3146
+ }
3147
+ ]
3148
+ },
3149
+ {
3150
+ "name": "TabMeasurement",
3151
+ "kind": "record",
3152
+ "namespace": "Lumeo.Services",
3153
+ "summary": null,
3154
+ "properties": [
3155
+ {
3156
+ "name": "X",
3157
+ "type": "double",
3158
+ "default": null,
3159
+ "summary": null
3160
+ },
3161
+ {
3162
+ "name": "Width",
3163
+ "type": "double",
3164
+ "default": null,
3165
+ "summary": null
3166
+ }
3167
+ ],
3168
+ "methods": [],
3169
+ "events": [],
3170
+ "enumValues": []
3171
+ },
3172
+ {
3173
+ "name": "TextareaCaretInfo",
3174
+ "kind": "record",
3175
+ "namespace": "Lumeo.Services",
3176
+ "summary": null,
3177
+ "properties": [
3178
+ {
3179
+ "name": "Top",
3180
+ "type": "double",
3181
+ "default": null,
3182
+ "summary": null
3183
+ },
3184
+ {
3185
+ "name": "Left",
3186
+ "type": "double",
3187
+ "default": null,
3188
+ "summary": null
3189
+ },
3190
+ {
3191
+ "name": "SelectionStart",
3192
+ "type": "int",
3193
+ "default": null,
3194
+ "summary": null
3195
+ }
3196
+ ],
3197
+ "methods": [],
3198
+ "events": [],
3199
+ "enumValues": []
3200
+ },
3201
+ {
3202
+ "name": "Theme",
3203
+ "kind": "staticClass",
3204
+ "namespace": "Lumeo",
3205
+ "summary": "Entry point for the fluent ThemeBuilder.",
3206
+ "properties": [],
3207
+ "methods": [
3208
+ {
3209
+ "name": "Customize",
3210
+ "returnType": "ThemeBuilder",
3211
+ "signature": "Customize(IJSRuntime js)",
3212
+ "summary": null
3213
+ }
3214
+ ],
3215
+ "events": [],
3216
+ "enumValues": []
3217
+ },
3218
+ {
3219
+ "name": "ThemeBuilder",
3220
+ "kind": "class",
3221
+ "namespace": "Lumeo",
3222
+ "summary": "Fluent builder that emits a custom CSS-variable override block on top of a Lumeo base scheme (zinc / slate / stone / …). Lets consumers tweak design tokens without writing a CSS file or forking a scheme. await Theme.Customize(Js) .WithPrimary(\"#3b82f6\") .WithBorderRadius(0.5) .WithFontFamily(\"'Inter', system-ui, sans-serif\") .ApplyAsync(); Calls are idempotent — each ApplyAsync replaces the previous `&lt;style id=\"lumeo-custom-theme\"&gt;` block, so consumers can rebuild on every settings change without leaking stale rules.",
3223
+ "properties": [],
3224
+ "methods": [
3225
+ {
3226
+ "name": "WithPrimary",
3227
+ "returnType": "ThemeBuilder",
3228
+ "signature": "WithPrimary(string color)",
3229
+ "summary": "Override --color-primary. Accepts any CSS color string (hex, rgb(), hsl(), oklch(), CSS named color)."
3230
+ },
3231
+ {
3232
+ "name": "WithPrimaryForeground",
3233
+ "returnType": "ThemeBuilder",
3234
+ "signature": "WithPrimaryForeground(string color)",
3235
+ "summary": null
3236
+ },
3237
+ {
3238
+ "name": "WithSecondary",
3239
+ "returnType": "ThemeBuilder",
3240
+ "signature": "WithSecondary(string color)",
3241
+ "summary": null
3242
+ },
3243
+ {
3244
+ "name": "WithSecondaryForeground",
3245
+ "returnType": "ThemeBuilder",
3246
+ "signature": "WithSecondaryForeground(string color)",
3247
+ "summary": null
3248
+ },
3249
+ {
3250
+ "name": "WithAccent",
3251
+ "returnType": "ThemeBuilder",
3252
+ "signature": "WithAccent(string color)",
3253
+ "summary": null
3254
+ },
3255
+ {
3256
+ "name": "WithAccentForeground",
3257
+ "returnType": "ThemeBuilder",
3258
+ "signature": "WithAccentForeground(string color)",
3259
+ "summary": null
3260
+ },
3261
+ {
3262
+ "name": "WithBackground",
3263
+ "returnType": "ThemeBuilder",
3264
+ "signature": "WithBackground(string color)",
3265
+ "summary": null
3266
+ },
3267
+ {
3268
+ "name": "WithForeground",
3269
+ "returnType": "ThemeBuilder",
3270
+ "signature": "WithForeground(string color)",
3271
+ "summary": null
3272
+ },
3273
+ {
3274
+ "name": "WithMuted",
3275
+ "returnType": "ThemeBuilder",
3276
+ "signature": "WithMuted(string color)",
3277
+ "summary": null
3278
+ },
3279
+ {
3280
+ "name": "WithMutedForeground",
3281
+ "returnType": "ThemeBuilder",
3282
+ "signature": "WithMutedForeground(string color)",
3283
+ "summary": null
3284
+ },
3285
+ {
3286
+ "name": "WithBorder",
3287
+ "returnType": "ThemeBuilder",
3288
+ "signature": "WithBorder(string color)",
3289
+ "summary": null
3290
+ },
3291
+ {
3292
+ "name": "WithRing",
3293
+ "returnType": "ThemeBuilder",
3294
+ "signature": "WithRing(string color)",
3295
+ "summary": null
3296
+ },
3297
+ {
3298
+ "name": "WithDestructive",
3299
+ "returnType": "ThemeBuilder",
3300
+ "signature": "WithDestructive(string color)",
3301
+ "summary": null
3302
+ },
3303
+ {
3304
+ "name": "WithBorderRadius",
3305
+ "returnType": "ThemeBuilder",
3306
+ "signature": "WithBorderRadius(double rem)",
3307
+ "summary": "Override the global border-radius scale. Accepts a rem value — Lumeo uses 0.5 by default. Components derive from calc(var(--radius) - 2px) / calc(var(--radius) + 4px)."
3308
+ },
3309
+ {
3310
+ "name": "WithFontFamily",
3311
+ "returnType": "ThemeBuilder",
3312
+ "signature": "WithFontFamily(string fontStack)",
3313
+ "summary": "Override the root font family. Pass the full CSS font-family stack including quotes / fallbacks. Writes the font-family declaration directly on :root — Lumeo's theme CSS doesn't consume a --font-family custom property, so emitting the raw declaration is what actually takes effect (matching the path used by ThemeService.SetFont)."
3314
+ },
3315
+ {
3316
+ "name": "WithVariable",
3317
+ "returnType": "ThemeBuilder",
3318
+ "signature": "WithVariable(string name, string value)",
3319
+ "summary": "Set an arbitrary CSS custom property. The name MUST start with -- and must match a token the bundled lumeo.css actually reads. Color tokens are prefixed with --color- (e.g. --color-primary, --color-ring); non-color tokens are bare (--radius, --shadow-sm). Throws ArgumentException when the name does not start with -- so a shorthand typo (\"primary\") fails loud instead of emitting a silently-unused --primary."
3320
+ },
3321
+ {
3322
+ "name": "ApplyAsync",
3323
+ "returnType": "ValueTask",
3324
+ "signature": "ApplyAsync()",
3325
+ "summary": "Write the accumulated overrides to a managed &lt;style id=\"lumeo-custom-theme\"&gt; block. Replaces the previous block on each call, so successive Apply calls don't leak."
3326
+ },
3327
+ {
3328
+ "name": "ClearAsync",
3329
+ "returnType": "ValueTask",
3330
+ "signature": "ClearAsync()",
3331
+ "summary": "Remove the custom-theme block, reverting to the base scheme."
3332
+ }
3333
+ ],
3334
+ "events": [],
3335
+ "enumValues": []
3336
+ },
3337
+ {
3338
+ "name": "ThemeMode",
3339
+ "kind": "enum",
3340
+ "namespace": "Lumeo.Services",
3341
+ "summary": null,
3342
+ "properties": [],
3343
+ "methods": [],
3344
+ "events": [],
3345
+ "enumValues": [
3346
+ {
3347
+ "name": "System",
3348
+ "summary": null
3349
+ },
3350
+ {
3351
+ "name": "Light",
3352
+ "summary": null
3353
+ },
3354
+ {
3355
+ "name": "Dark",
3356
+ "summary": null
3357
+ }
3358
+ ]
3359
+ },
3360
+ {
3361
+ "name": "ThemeSchemeInfo",
3362
+ "kind": "record",
3363
+ "namespace": "Lumeo.Services",
3364
+ "summary": null,
3365
+ "properties": [
3366
+ {
3367
+ "name": "Id",
3368
+ "type": "string",
3369
+ "default": null,
3370
+ "summary": null
3371
+ },
3372
+ {
3373
+ "name": "DisplayName",
3374
+ "type": "string",
3375
+ "default": null,
3376
+ "summary": null
3377
+ },
3378
+ {
3379
+ "name": "PreviewColor",
3380
+ "type": "string",
3381
+ "default": null,
3382
+ "summary": null
3383
+ }
3384
+ ],
3385
+ "methods": [],
3386
+ "events": [],
3387
+ "enumValues": []
3388
+ },
3389
+ {
3390
+ "name": "ThemeService",
3391
+ "kind": "class",
3392
+ "namespace": "Lumeo.Services",
3393
+ "summary": null,
3394
+ "properties": [
3395
+ {
3396
+ "name": "CurrentMode",
3397
+ "type": "ThemeMode",
3398
+ "default": "ThemeMode.System",
3399
+ "summary": null
3400
+ },
3401
+ {
3402
+ "name": "CurrentScheme",
3403
+ "type": "string",
3404
+ "default": "\"zinc\"",
3405
+ "summary": null
3406
+ },
3407
+ {
3408
+ "name": "IsDark",
3409
+ "type": "bool",
3410
+ "default": null,
3411
+ "summary": null
3412
+ },
3413
+ {
3414
+ "name": "CurrentDirection",
3415
+ "type": "LayoutDirection",
3416
+ "default": "LayoutDirection.Ltr",
3417
+ "summary": null
3418
+ },
3419
+ {
3420
+ "name": "AvailableSchemes",
3421
+ "type": "IReadOnlyList<ThemeSchemeInfo>",
3422
+ "default": "[\n new(\"zinc\", \"Zinc\", \"hsl(240 5.9% 10%)\"),\n new(\"blue\", \"Blue\", \"hsl(221 83% 53%)\"),\n new(\"green\", \"Green\", \"hsl(142 71% 45%)\"),\n new(\"rose\", \"Rose\", \"hsl(347 77% 50%)\"),\n new(\"orange\", \"Orange\", \"hsl(14 70% 50%)\"),\n new(\"violet\", \"Violet\", \"hsl(263 70% 50%)\"),\n new(\"amber\", \"Amber\", \"hsl(38 92% 50%)\"),\n new(\"teal\", \"Teal\", \"hsl(173 80% 40%)\"),\n ]",
3423
+ "summary": null
3424
+ }
3425
+ ],
3426
+ "methods": [
3427
+ {
3428
+ "name": "InitializeAsync",
3429
+ "returnType": "Task",
3430
+ "signature": "InitializeAsync()",
3431
+ "summary": null
3432
+ },
3433
+ {
3434
+ "name": "SetModeAsync",
3435
+ "returnType": "Task",
3436
+ "signature": "SetModeAsync(ThemeMode mode)",
3437
+ "summary": null
3438
+ },
3439
+ {
3440
+ "name": "SetSchemeAsync",
3441
+ "returnType": "Task",
3442
+ "signature": "SetSchemeAsync(string scheme)",
3443
+ "summary": null
3444
+ },
3445
+ {
3446
+ "name": "ToggleModeAsync",
3447
+ "returnType": "Task",
3448
+ "signature": "ToggleModeAsync()",
3449
+ "summary": null
3450
+ },
3451
+ {
3452
+ "name": "SetDirectionAsync",
3453
+ "returnType": "Task",
3454
+ "signature": "SetDirectionAsync(LayoutDirection direction)",
3455
+ "summary": null
3456
+ },
3457
+ {
3458
+ "name": "GetDirectionAsync",
3459
+ "returnType": "Task<LayoutDirection>",
3460
+ "signature": "GetDirectionAsync()",
3461
+ "summary": null
3462
+ }
3463
+ ],
3464
+ "events": [
3465
+ {
3466
+ "name": "OnThemeChanged",
3467
+ "type": "Action?",
3468
+ "summary": null
3469
+ }
3470
+ ],
3471
+ "enumValues": []
3472
+ },
3473
+ {
3474
+ "name": "ViewportInfo",
3475
+ "kind": "record",
3476
+ "namespace": "Lumeo.Services",
3477
+ "summary": "Immutable snapshot of the viewport at a point in time. Passed to ViewportChanged subscribers.",
3478
+ "properties": [
3479
+ {
3480
+ "name": "Width",
3481
+ "type": "double",
3482
+ "default": null,
3483
+ "summary": null
3484
+ },
3485
+ {
3486
+ "name": "Height",
3487
+ "type": "double",
3488
+ "default": null,
3489
+ "summary": null
3490
+ },
3491
+ {
3492
+ "name": "Current",
3493
+ "type": "Breakpoint",
3494
+ "default": null,
3495
+ "summary": null
3496
+ }
3497
+ ],
3498
+ "methods": [
3499
+ {
3500
+ "name": "FromWidth",
3501
+ "returnType": "Breakpoint",
3502
+ "signature": "FromWidth(double width)",
3503
+ "summary": "Maps a width to a Breakpoint using the Tailwind thresholds. Pure function; consumers can call it directly with an arbitrary width (e.g. to pre-compute a breakpoint from a server-rendered User-Agent hint)."
3504
+ }
3505
+ ],
3506
+ "events": [],
3507
+ "enumValues": []
3508
+ }
3509
+ ],
427
3510
  "components": {
428
3511
  "Accordion": {
429
3512
  "name": "Accordion",
@@ -2598,6 +5681,22 @@
2598
5681
  "isCascading": false,
2599
5682
  "captureUnmatched": false
2600
5683
  },
5684
+ {
5685
+ "name": "Size",
5686
+ "type": "BadgeSize",
5687
+ "default": "BadgeSize.Md",
5688
+ "description": "Badge size — drives text size + padding. Md (default) reproduces the historical badge metrics. Use Sm for dense inline tags / counts and Lg for prominent status chips — avoids consumer-side !px-* / !h-* / !text-* overrides.",
5689
+ "isCascading": false,
5690
+ "captureUnmatched": false
5691
+ },
5692
+ {
5693
+ "name": "Pill",
5694
+ "type": "bool",
5695
+ "default": null,
5696
+ "description": "Pill shape (rounded-full) instead of the default rounded-md — for count/quota chips.",
5697
+ "isCascading": false,
5698
+ "captureUnmatched": false
5699
+ },
2601
5700
  {
2602
5701
  "name": "IsDot",
2603
5702
  "type": "bool",
@@ -2690,6 +5789,15 @@
2690
5789
  "Warning"
2691
5790
  ],
2692
5791
  "description": null
5792
+ },
5793
+ {
5794
+ "name": "BadgeSize",
5795
+ "values": [
5796
+ "Sm",
5797
+ "Md",
5798
+ "Lg"
5799
+ ],
5800
+ "description": null
2693
5801
  }
2694
5802
  ],
2695
5803
  "records": [],
@@ -4441,6 +7549,14 @@
4441
7549
  "isCascading": false,
4442
7550
  "captureUnmatched": false
4443
7551
  },
7552
+ {
7553
+ "name": "Variant",
7554
+ "type": "CardVariant",
7555
+ "default": "CardVariant.Default",
7556
+ "description": "Surface style. Default is the bordered, shadowed card. Flat drops the border + card background — a content-only surface that (with OnClick) is the natural primitive for clickable list rows, replacing the Ghost button + !p-0 workaround.",
7557
+ "isCascading": false,
7558
+ "captureUnmatched": false
7559
+ },
4444
7560
  {
4445
7561
  "name": "Density",
4446
7562
  "type": "Density?",
@@ -4473,7 +7589,16 @@
4473
7589
  "description": "Optional click handler. When set, the card becomes a button-role interactive surface with cursor-pointer, focus-visible ring, keyboard activation, and honours PressEffect."
4474
7590
  }
4475
7591
  ],
4476
- "enums": [],
7592
+ "enums": [
7593
+ {
7594
+ "name": "CardVariant",
7595
+ "values": [
7596
+ "Default",
7597
+ "Flat"
7598
+ ],
7599
+ "description": null
7600
+ }
7601
+ ],
4477
7602
  "records": [],
4478
7603
  "gotchas": [],
4479
7604
  "cssVars": [
@@ -15124,7 +18249,7 @@
15124
18249
  },
15125
18250
  "ConfirmButton": {
15126
18251
  "name": "ConfirmButton",
15127
- "category": "Utility",
18252
+ "category": "Forms",
15128
18253
  "subcategory": null,
15129
18254
  "description": "Confirm Button component.",
15130
18255
  "nugetPackage": "Lumeo",
@@ -15266,7 +18391,24 @@
15266
18391
  "cssVars": [
15267
18392
  "--color-foreground"
15268
18393
  ],
15269
- "examples": [],
18394
+ "examples": [
18395
+ {
18396
+ "title": "Basic Confirm",
18397
+ "code": "<ConfirmButton Title=\"Save changes?\"\n Description=\"Your edits will be applied immediately.\"\n OnConfirm=\"@HandleSave\">\n Save\n</ConfirmButton>"
18398
+ },
18399
+ {
18400
+ "title": "Destructive Action",
18401
+ "code": "<ConfirmButton Title=\"Delete account?\"\n Description=\"All your data will be permanently removed.\"\n ConfirmText=\"Yes, delete\"\n CancelText=\"Keep account\"\n IsDestructive=\"true\"\n Variant=\"Button.ButtonVariant.Destructive\"\n OnConfirm=\"@HandleDelete\"\n OnCancel=\"@HandleCancel\">\n Delete Account\n</ConfirmButton>"
18402
+ },
18403
+ {
18404
+ "title": "Variants and Sizes",
18405
+ "code": "<ConfirmButton Variant=\"Button.ButtonVariant.Secondary\" Title=\"Archive project?\" ConfirmText=\"Archive\" OnConfirm=\"@HandleArchive\">Archive</ConfirmButton>\n<ConfirmButton Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Sm\" Title=\"Reset form?\" OnConfirm=\"@HandleReset\">Reset</ConfirmButton>\n<ConfirmButton Variant=\"Button.ButtonVariant.Destructive\" Size=\"Button.ButtonSize.Lg\" Title=\"Remove member?\" IsDestructive=\"true\" OnConfirm=\"@HandleRemove\">Remove</ConfirmButton>"
18406
+ },
18407
+ {
18408
+ "title": "Loading and Disabled",
18409
+ "code": "<ConfirmButton IsLoading=\"true\" Title=\"Publish?\" OnConfirm=\"@HandlePublish\">Publishing…</ConfirmButton>\n<ConfirmButton Disabled=\"true\" Title=\"Publish?\" OnConfirm=\"@HandlePublish\">Disabled</ConfirmButton>"
18410
+ }
18411
+ ],
15270
18412
  "subComponents": {},
15271
18413
  "parseFailed": false,
15272
18414
  "parseError": null
@@ -16277,7 +19419,7 @@
16277
19419
  },
16278
19420
  "CTASection": {
16279
19421
  "name": "CTASection",
16280
- "category": "Utility",
19422
+ "category": "Marketing",
16281
19423
  "subcategory": null,
16282
19424
  "description": "CTASection component.",
16283
19425
  "nugetPackage": "Lumeo",
@@ -16347,7 +19489,20 @@
16347
19489
  "--color-muted",
16348
19490
  "--color-muted-foreground"
16349
19491
  ],
16350
- "examples": [],
19492
+ "examples": [
19493
+ {
19494
+ "title": "Basic CTA",
19495
+ "code": "<CTASection Title=\"Ready to build with Lumeo?\"\n Subtitle=\"Install the package and ship your first component in minutes.\">\n <Actions>\n <Button>Get started</Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">Read the docs</Button>\n </Actions>\n</CTASection>"
19496
+ },
19497
+ {
19498
+ "title": "Single Action",
19499
+ "code": "<CTASection Title=\"Join the newsletter\"\n Subtitle=\"Monthly updates on new components and releases. No spam.\">\n <Actions>\n <Button>Subscribe</Button>\n </Actions>\n</CTASection>"
19500
+ },
19501
+ {
19502
+ "title": "Custom Title Slot",
19503
+ "code": "<CTASection Subtitle=\"Use TitleSlot when you need custom title markup.\">\n <TitleSlot>\n <h2 class=\"text-3xl sm:text-4xl font-bold tracking-tight text-foreground\">\n Start shipping <span class=\"text-primary\">today</span>\n </h2>\n </TitleSlot>\n <Actions>\n <Button>Get started</Button>\n </Actions>\n</CTASection>"
19504
+ }
19505
+ ],
16351
19506
  "subComponents": {},
16352
19507
  "parseFailed": false,
16353
19508
  "parseError": null
@@ -20317,7 +23472,20 @@
20317
23472
  "cssVars": [
20318
23473
  "--color-foreground"
20319
23474
  ],
20320
- "examples": [],
23475
+ "examples": [
23476
+ {
23477
+ "title": "Scoping a panel",
23478
+ "code": "<DensityScope Value=\"Density.Compact\">\n <Button>Save</Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">Cancel</Button>\n <Input Placeholder=\"Search…\" />\n</DensityScope>\n\n<DensityScope Value=\"Density.Spacious\">\n <Button>Save</Button>\n <Input Placeholder=\"Search…\" />\n</DensityScope>"
23479
+ },
23480
+ {
23481
+ "title": "Interactive — switch the scope",
23482
+ "code": "<DensityScope Value=\"_density\">\n <Button>Primary</Button>\n <Input Placeholder=\"Type here…\" />\n</DensityScope>\n\n@code {\n private Density _density = Density.Comfortable;\n}"
23483
+ },
23484
+ {
23485
+ "title": "Per-component override",
23486
+ "code": "<DensityScope Value=\"Density.Compact\">\n <Button>Inherits Compact</Button>\n <Button Density=\"Density.Spacious\">Overrides to Spacious</Button>\n</DensityScope>"
23487
+ }
23488
+ ],
20321
23489
  "subComponents": {},
20322
23490
  "parseFailed": false,
20323
23491
  "parseError": null
@@ -22530,7 +25698,7 @@
22530
25698
  },
22531
25699
  "FeatureGrid": {
22532
25700
  "name": "FeatureGrid",
22533
- "category": "Utility",
25701
+ "category": "Marketing",
22534
25702
  "subcategory": null,
22535
25703
  "description": "Feature Grid component.",
22536
25704
  "nugetPackage": "Lumeo",
@@ -22599,14 +25767,27 @@
22599
25767
  "--color-muted",
22600
25768
  "--color-muted-foreground"
22601
25769
  ],
22602
- "examples": [],
25770
+ "examples": [
25771
+ {
25772
+ "title": "Basic Feature Grid",
25773
+ "code": "<FeatureGrid Title=\"Everything in the box\"\n Subtitle=\"A focused set of primitives that compose into anything.\">\n <FeatureItem Title=\"Theming\" Description=\"Every color is a CSS variable.\">\n <Icon><Blazicon Svg=\"Lucide.Palette\" class=\"h-5 w-5\" /></Icon>\n </FeatureItem>\n <FeatureItem Title=\"Accessible\" Description=\"WAI-ARIA roles and keyboard navigation.\">\n <Icon><Blazicon Svg=\"Lucide.Accessibility\" class=\"h-5 w-5\" /></Icon>\n </FeatureItem>\n <FeatureItem Title=\"Density\" Description=\"Flip a panel between compact and spacious.\">\n <Icon><Blazicon Svg=\"Lucide.Rows3\" class=\"h-5 w-5\" /></Icon>\n </FeatureItem>\n</FeatureGrid>"
25774
+ },
25775
+ {
25776
+ "title": "Two Columns",
25777
+ "code": "<FeatureGrid Columns=\"2\" Title=\"Built for Blazor\">\n <FeatureItem Title=\"Native components\" Description=\"Pure Razor with thin interop where it counts.\" />\n <FeatureItem Title=\"Source generators\" Description=\"The [LumeoForm] generator wires up validation and binding.\" />\n</FeatureGrid>"
25778
+ },
25779
+ {
25780
+ "title": "Standalone Feature Item",
25781
+ "code": "<FeatureItem Title=\"Fast by default\" Description=\"A small CSS bundle keeps your app lean.\">\n <Icon><Blazicon Svg=\"Lucide.Zap\" class=\"h-5 w-5\" /></Icon>\n</FeatureItem>"
25782
+ }
25783
+ ],
22603
25784
  "subComponents": {},
22604
25785
  "parseFailed": false,
22605
25786
  "parseError": null
22606
25787
  },
22607
25788
  "FeatureItem": {
22608
25789
  "name": "FeatureItem",
22609
- "category": "Utility",
25790
+ "category": "Marketing",
22610
25791
  "subcategory": null,
22611
25792
  "description": "Feature Item component.",
22612
25793
  "nugetPackage": "Lumeo",
@@ -24515,360 +27696,377 @@
24515
27696
  "events": [],
24516
27697
  "enums": [
24517
27698
  {
24518
- "name": "GaugeVariant",
27699
+ "name": "GaugeVariant",
27700
+ "values": [
27701
+ "Radial",
27702
+ "Linear",
27703
+ "Arc"
27704
+ ],
27705
+ "description": null
27706
+ }
27707
+ ],
27708
+ "records": [
27709
+ {
27710
+ "name": "GaugeThreshold",
27711
+ "signature": "GaugeThreshold(double Value, string Color)",
27712
+ "description": null
27713
+ }
27714
+ ],
27715
+ "gotchas": [],
27716
+ "cssVars": [
27717
+ "--color-foreground"
27718
+ ],
27719
+ "examples": [
27720
+ {
27721
+ "title": "Radial (default)",
27722
+ "code": "<Gauge Value=\"25\" />\n<Gauge Value=\"60\" />\n<Gauge Value=\"90\" />"
27723
+ },
27724
+ {
27725
+ "title": "Arc (semicircle)",
27726
+ "code": "<Gauge Value=\"30\" Variant=\"Gauge.GaugeVariant.Arc\" />\n<Gauge Value=\"65\" Variant=\"Gauge.GaugeVariant.Arc\" />\n<Gauge Value=\"95\" Variant=\"Gauge.GaugeVariant.Arc\" />"
27727
+ },
27728
+ {
27729
+ "title": "Linear",
27730
+ "code": "<Gauge Value=\"40\" Variant=\"Gauge.GaugeVariant.Linear\" Size=\"200\" />\n<Gauge Value=\"70\" Variant=\"Gauge.GaugeVariant.Linear\" Size=\"200\" Color=\"success\" />\n<Gauge Value=\"90\" Variant=\"Gauge.GaugeVariant.Linear\" Size=\"200\" Color=\"destructive\" />"
27731
+ },
27732
+ {
27733
+ "title": "Custom Label",
27734
+ "code": "<Gauge Value=\"72\" Label=\"CPU\" Size=\"120\" />\n<Gauge Value=\"48\" Label=\"RAM\" Size=\"120\" />\n<Gauge Value=\"33\" Label=\"Disk\" Size=\"120\" />"
27735
+ }
27736
+ ],
27737
+ "subComponents": {},
27738
+ "parseFailed": false,
27739
+ "parseError": null
27740
+ },
27741
+ "Grid": {
27742
+ "name": "Grid",
27743
+ "category": "Layout",
27744
+ "subcategory": null,
27745
+ "description": "CSS grid wrapper with columns + gap as props.",
27746
+ "nugetPackage": "Lumeo",
27747
+ "files": [
27748
+ "UI/Grid/Grid.razor"
27749
+ ],
27750
+ "namespace": "Lumeo",
27751
+ "inheritsFrom": null,
27752
+ "implements": [],
27753
+ "parameters": [
27754
+ {
27755
+ "name": "Columns",
27756
+ "type": "int",
27757
+ "default": "1",
27758
+ "description": null,
27759
+ "isCascading": false,
27760
+ "captureUnmatched": false
27761
+ },
27762
+ {
27763
+ "name": "Gap",
27764
+ "type": "string?",
27765
+ "default": "\"4\"",
27766
+ "description": null,
27767
+ "isCascading": false,
27768
+ "captureUnmatched": false
27769
+ },
27770
+ {
27771
+ "name": "RowGap",
27772
+ "type": "string?",
27773
+ "default": null,
27774
+ "description": null,
27775
+ "isCascading": false,
27776
+ "captureUnmatched": false
27777
+ },
27778
+ {
27779
+ "name": "ColGap",
27780
+ "type": "string?",
27781
+ "default": null,
27782
+ "description": null,
27783
+ "isCascading": false,
27784
+ "captureUnmatched": false
27785
+ },
27786
+ {
27787
+ "name": "ChildContent",
27788
+ "type": "RenderFragment?",
27789
+ "default": null,
27790
+ "description": null,
27791
+ "isCascading": false,
27792
+ "captureUnmatched": false
27793
+ },
27794
+ {
27795
+ "name": "Class",
27796
+ "type": "string?",
27797
+ "default": null,
27798
+ "description": null,
27799
+ "isCascading": false,
27800
+ "captureUnmatched": false
27801
+ },
27802
+ {
27803
+ "name": "AdditionalAttributes",
27804
+ "type": "Dictionary<string, object>?",
27805
+ "default": null,
27806
+ "description": null,
27807
+ "isCascading": false,
27808
+ "captureUnmatched": true
27809
+ }
27810
+ ],
27811
+ "events": [],
27812
+ "enums": [],
27813
+ "records": [],
27814
+ "gotchas": [],
27815
+ "cssVars": [
27816
+ "--color-foreground"
27817
+ ],
27818
+ "examples": [
27819
+ {
27820
+ "title": "Basic 3-Column",
27821
+ "code": "<Grid Columns=\"3\" Gap=\"4\">\n <div>1</div>\n <div>2</div>\n <div>3</div>\n <div>4</div>\n <div>5</div>\n <div>6</div>\n</Grid>"
27822
+ },
27823
+ {
27824
+ "title": "Responsive Columns",
27825
+ "code": "<Grid Columns=\"2\" Gap=\"4\" Class=\"md:grid-cols-4\">\n <div>1</div>\n <div>2</div>\n <!-- ... -->\n</Grid>"
27826
+ },
27827
+ {
27828
+ "title": "Different Gaps",
27829
+ "code": "<Grid Columns=\"3\" RowGap=\"6\" ColGap=\"2\">\n <div>1</div>\n <div>2</div>\n <!-- ... -->\n</Grid>"
27830
+ },
27831
+ {
27832
+ "title": "Columns — interactive",
27833
+ "code": "<Grid Columns=\"4\" Gap=\"3\">\n @for (var i = 1; i <= 12; i++)\n {\n <div>@i</div>\n }\n</Grid>"
27834
+ }
27835
+ ],
27836
+ "subComponents": {},
27837
+ "parseFailed": false,
27838
+ "parseError": null
27839
+ },
27840
+ "Heading": {
27841
+ "name": "Heading",
27842
+ "category": "Typography",
27843
+ "subcategory": null,
27844
+ "description": "Semantic h1-h6 heading with Lumeo typographic scale.",
27845
+ "nugetPackage": "Lumeo",
27846
+ "files": [
27847
+ "UI/Heading/Heading.razor"
27848
+ ],
27849
+ "namespace": "Lumeo",
27850
+ "inheritsFrom": null,
27851
+ "implements": [],
27852
+ "parameters": [
27853
+ {
27854
+ "name": "Level",
27855
+ "type": "int",
27856
+ "default": "2",
27857
+ "description": null,
27858
+ "isCascading": false,
27859
+ "captureUnmatched": false
27860
+ },
27861
+ {
27862
+ "name": "Size",
27863
+ "type": "string?",
27864
+ "default": null,
27865
+ "description": null,
27866
+ "isCascading": false,
27867
+ "captureUnmatched": false
27868
+ },
27869
+ {
27870
+ "name": "Weight",
27871
+ "type": "string?",
27872
+ "default": null,
27873
+ "description": null,
27874
+ "isCascading": false,
27875
+ "captureUnmatched": false
27876
+ },
27877
+ {
27878
+ "name": "Tracking",
27879
+ "type": "string?",
27880
+ "default": null,
27881
+ "description": null,
27882
+ "isCascading": false,
27883
+ "captureUnmatched": false
27884
+ },
27885
+ {
27886
+ "name": "ChildContent",
27887
+ "type": "RenderFragment?",
27888
+ "default": null,
27889
+ "description": null,
27890
+ "isCascading": false,
27891
+ "captureUnmatched": false
27892
+ },
27893
+ {
27894
+ "name": "Class",
27895
+ "type": "string?",
27896
+ "default": null,
27897
+ "description": null,
27898
+ "isCascading": false,
27899
+ "captureUnmatched": false
27900
+ },
27901
+ {
27902
+ "name": "AdditionalAttributes",
27903
+ "type": "Dictionary<string, object>?",
27904
+ "default": null,
27905
+ "description": null,
27906
+ "isCascading": false,
27907
+ "captureUnmatched": true
27908
+ }
27909
+ ],
27910
+ "events": [],
27911
+ "enums": [],
27912
+ "records": [],
27913
+ "gotchas": [],
27914
+ "cssVars": [
27915
+ "--color-foreground"
27916
+ ],
27917
+ "examples": [
27918
+ {
27919
+ "title": "All Levels",
27920
+ "code": "<Heading Level=\"1\">Heading Level 1</Heading>\n<Heading Level=\"2\">Heading Level 2</Heading>\n<Heading Level=\"3\">Heading Level 3</Heading>\n<Heading Level=\"4\">Heading Level 4</Heading>\n<Heading Level=\"5\">Heading Level 5</Heading>\n<Heading Level=\"6\">Heading Level 6</Heading>"
27921
+ },
27922
+ {
27923
+ "title": "Custom Sizes",
27924
+ "code": "<Heading Level=\"2\" Size=\"sm\">h2 with small text</Heading>\n<Heading Level=\"3\" Size=\"3xl\">h3 with 3xl text</Heading>\n<Heading Level=\"4\" Size=\"lg\" Weight=\"normal\">h4 with lg text, normal weight</Heading>"
27925
+ },
27926
+ {
27927
+ "title": "Tracking",
27928
+ "code": "<Heading Level=\"1\">Default tight tracking</Heading>\n<Heading Level=\"1\" Tracking=\"normal\">Normal tracking</Heading>\n<Heading Level=\"1\" Tracking=\"wide\">Wide tracking</Heading>"
27929
+ },
27930
+ {
27931
+ "title": "Level — interactive",
27932
+ "code": "<Heading Level=\"2\">This is a level 2 heading</Heading>"
27933
+ }
27934
+ ],
27935
+ "subComponents": {},
27936
+ "parseFailed": false,
27937
+ "parseError": null
27938
+ },
27939
+ "Hero": {
27940
+ "name": "Hero",
27941
+ "category": "Marketing",
27942
+ "subcategory": null,
27943
+ "description": "Hero component.",
27944
+ "nugetPackage": "Lumeo",
27945
+ "files": [
27946
+ "UI/Hero/Hero.razor"
27947
+ ],
27948
+ "namespace": "Lumeo",
27949
+ "inheritsFrom": null,
27950
+ "implements": [],
27951
+ "parameters": [
27952
+ {
27953
+ "name": "Title",
27954
+ "type": "string?",
27955
+ "default": null,
27956
+ "description": null,
27957
+ "isCascading": false,
27958
+ "captureUnmatched": false
27959
+ },
27960
+ {
27961
+ "name": "TitleSlot",
27962
+ "type": "RenderFragment?",
27963
+ "default": null,
27964
+ "description": null,
27965
+ "isCascading": false,
27966
+ "captureUnmatched": false
27967
+ },
27968
+ {
27969
+ "name": "Subtitle",
27970
+ "type": "string?",
27971
+ "default": null,
27972
+ "description": null,
27973
+ "isCascading": false,
27974
+ "captureUnmatched": false
27975
+ },
27976
+ {
27977
+ "name": "SubtitleSlot",
27978
+ "type": "RenderFragment?",
27979
+ "default": null,
27980
+ "description": null,
27981
+ "isCascading": false,
27982
+ "captureUnmatched": false
27983
+ },
27984
+ {
27985
+ "name": "Eyebrow",
27986
+ "type": "RenderFragment?",
27987
+ "default": null,
27988
+ "description": null,
27989
+ "isCascading": false,
27990
+ "captureUnmatched": false
27991
+ },
27992
+ {
27993
+ "name": "Actions",
27994
+ "type": "RenderFragment?",
27995
+ "default": null,
27996
+ "description": null,
27997
+ "isCascading": false,
27998
+ "captureUnmatched": false
27999
+ },
28000
+ {
28001
+ "name": "Media",
28002
+ "type": "RenderFragment?",
28003
+ "default": null,
28004
+ "description": null,
28005
+ "isCascading": false,
28006
+ "captureUnmatched": false
28007
+ },
28008
+ {
28009
+ "name": "Alignment",
28010
+ "type": "HeroAlignment",
28011
+ "default": "HeroAlignment.Start",
28012
+ "description": null,
28013
+ "isCascading": false,
28014
+ "captureUnmatched": false
28015
+ },
28016
+ {
28017
+ "name": "Class",
28018
+ "type": "string?",
28019
+ "default": null,
28020
+ "description": null,
28021
+ "isCascading": false,
28022
+ "captureUnmatched": false
28023
+ },
28024
+ {
28025
+ "name": "AdditionalAttributes",
28026
+ "type": "Dictionary<string, object>?",
28027
+ "default": null,
28028
+ "description": null,
28029
+ "isCascading": false,
28030
+ "captureUnmatched": true
28031
+ }
28032
+ ],
28033
+ "events": [],
28034
+ "enums": [
28035
+ {
28036
+ "name": "HeroAlignment",
24519
28037
  "values": [
24520
- "Radial",
24521
- "Linear",
24522
- "Arc"
28038
+ "Start",
28039
+ "Center",
28040
+ "End"
24523
28041
  ],
24524
28042
  "description": null
24525
28043
  }
24526
28044
  ],
24527
- "records": [
24528
- {
24529
- "name": "GaugeThreshold",
24530
- "signature": "GaugeThreshold(double Value, string Color)",
24531
- "description": null
24532
- }
24533
- ],
24534
- "gotchas": [],
24535
- "cssVars": [
24536
- "--color-foreground"
24537
- ],
24538
- "examples": [
24539
- {
24540
- "title": "Radial (default)",
24541
- "code": "<Gauge Value=\"25\" />\n<Gauge Value=\"60\" />\n<Gauge Value=\"90\" />"
24542
- },
24543
- {
24544
- "title": "Arc (semicircle)",
24545
- "code": "<Gauge Value=\"30\" Variant=\"Gauge.GaugeVariant.Arc\" />\n<Gauge Value=\"65\" Variant=\"Gauge.GaugeVariant.Arc\" />\n<Gauge Value=\"95\" Variant=\"Gauge.GaugeVariant.Arc\" />"
24546
- },
24547
- {
24548
- "title": "Linear",
24549
- "code": "<Gauge Value=\"40\" Variant=\"Gauge.GaugeVariant.Linear\" Size=\"200\" />\n<Gauge Value=\"70\" Variant=\"Gauge.GaugeVariant.Linear\" Size=\"200\" Color=\"success\" />\n<Gauge Value=\"90\" Variant=\"Gauge.GaugeVariant.Linear\" Size=\"200\" Color=\"destructive\" />"
24550
- },
24551
- {
24552
- "title": "Custom Label",
24553
- "code": "<Gauge Value=\"72\" Label=\"CPU\" Size=\"120\" />\n<Gauge Value=\"48\" Label=\"RAM\" Size=\"120\" />\n<Gauge Value=\"33\" Label=\"Disk\" Size=\"120\" />"
24554
- }
24555
- ],
24556
- "subComponents": {},
24557
- "parseFailed": false,
24558
- "parseError": null
24559
- },
24560
- "Grid": {
24561
- "name": "Grid",
24562
- "category": "Layout",
24563
- "subcategory": null,
24564
- "description": "CSS grid wrapper with columns + gap as props.",
24565
- "nugetPackage": "Lumeo",
24566
- "files": [
24567
- "UI/Grid/Grid.razor"
24568
- ],
24569
- "namespace": "Lumeo",
24570
- "inheritsFrom": null,
24571
- "implements": [],
24572
- "parameters": [
24573
- {
24574
- "name": "Columns",
24575
- "type": "int",
24576
- "default": "1",
24577
- "description": null,
24578
- "isCascading": false,
24579
- "captureUnmatched": false
24580
- },
24581
- {
24582
- "name": "Gap",
24583
- "type": "string?",
24584
- "default": "\"4\"",
24585
- "description": null,
24586
- "isCascading": false,
24587
- "captureUnmatched": false
24588
- },
24589
- {
24590
- "name": "RowGap",
24591
- "type": "string?",
24592
- "default": null,
24593
- "description": null,
24594
- "isCascading": false,
24595
- "captureUnmatched": false
24596
- },
24597
- {
24598
- "name": "ColGap",
24599
- "type": "string?",
24600
- "default": null,
24601
- "description": null,
24602
- "isCascading": false,
24603
- "captureUnmatched": false
24604
- },
24605
- {
24606
- "name": "ChildContent",
24607
- "type": "RenderFragment?",
24608
- "default": null,
24609
- "description": null,
24610
- "isCascading": false,
24611
- "captureUnmatched": false
24612
- },
24613
- {
24614
- "name": "Class",
24615
- "type": "string?",
24616
- "default": null,
24617
- "description": null,
24618
- "isCascading": false,
24619
- "captureUnmatched": false
24620
- },
24621
- {
24622
- "name": "AdditionalAttributes",
24623
- "type": "Dictionary<string, object>?",
24624
- "default": null,
24625
- "description": null,
24626
- "isCascading": false,
24627
- "captureUnmatched": true
24628
- }
24629
- ],
24630
- "events": [],
24631
- "enums": [],
24632
28045
  "records": [],
24633
28046
  "gotchas": [],
24634
28047
  "cssVars": [
24635
- "--color-foreground"
24636
- ],
24637
- "examples": [
24638
- {
24639
- "title": "Basic 3-Column",
24640
- "code": "<Grid Columns=\"3\" Gap=\"4\">\n <div>1</div>\n <div>2</div>\n <div>3</div>\n <div>4</div>\n <div>5</div>\n <div>6</div>\n</Grid>"
24641
- },
24642
- {
24643
- "title": "Responsive Columns",
24644
- "code": "<Grid Columns=\"2\" Gap=\"4\" Class=\"md:grid-cols-4\">\n <div>1</div>\n <div>2</div>\n <!-- ... -->\n</Grid>"
24645
- },
24646
- {
24647
- "title": "Different Gaps",
24648
- "code": "<Grid Columns=\"3\" RowGap=\"6\" ColGap=\"2\">\n <div>1</div>\n <div>2</div>\n <!-- ... -->\n</Grid>"
24649
- },
24650
- {
24651
- "title": "Columns — interactive",
24652
- "code": "<Grid Columns=\"4\" Gap=\"3\">\n @for (var i = 1; i <= 12; i++)\n {\n <div>@i</div>\n }\n</Grid>"
24653
- }
24654
- ],
24655
- "subComponents": {},
24656
- "parseFailed": false,
24657
- "parseError": null
24658
- },
24659
- "Heading": {
24660
- "name": "Heading",
24661
- "category": "Typography",
24662
- "subcategory": null,
24663
- "description": "Semantic h1-h6 heading with Lumeo typographic scale.",
24664
- "nugetPackage": "Lumeo",
24665
- "files": [
24666
- "UI/Heading/Heading.razor"
24667
- ],
24668
- "namespace": "Lumeo",
24669
- "inheritsFrom": null,
24670
- "implements": [],
24671
- "parameters": [
24672
- {
24673
- "name": "Level",
24674
- "type": "int",
24675
- "default": "2",
24676
- "description": null,
24677
- "isCascading": false,
24678
- "captureUnmatched": false
24679
- },
24680
- {
24681
- "name": "Size",
24682
- "type": "string?",
24683
- "default": null,
24684
- "description": null,
24685
- "isCascading": false,
24686
- "captureUnmatched": false
24687
- },
24688
- {
24689
- "name": "Weight",
24690
- "type": "string?",
24691
- "default": null,
24692
- "description": null,
24693
- "isCascading": false,
24694
- "captureUnmatched": false
24695
- },
24696
- {
24697
- "name": "Tracking",
24698
- "type": "string?",
24699
- "default": null,
24700
- "description": null,
24701
- "isCascading": false,
24702
- "captureUnmatched": false
24703
- },
24704
- {
24705
- "name": "ChildContent",
24706
- "type": "RenderFragment?",
24707
- "default": null,
24708
- "description": null,
24709
- "isCascading": false,
24710
- "captureUnmatched": false
24711
- },
24712
- {
24713
- "name": "Class",
24714
- "type": "string?",
24715
- "default": null,
24716
- "description": null,
24717
- "isCascading": false,
24718
- "captureUnmatched": false
24719
- },
24720
- {
24721
- "name": "AdditionalAttributes",
24722
- "type": "Dictionary<string, object>?",
24723
- "default": null,
24724
- "description": null,
24725
- "isCascading": false,
24726
- "captureUnmatched": true
24727
- }
24728
- ],
24729
- "events": [],
24730
- "enums": [],
24731
- "records": [],
24732
- "gotchas": [],
24733
- "cssVars": [
24734
- "--color-foreground"
28048
+ "--color-foreground",
28049
+ "--color-muted",
28050
+ "--color-muted-foreground"
24735
28051
  ],
24736
28052
  "examples": [
24737
28053
  {
24738
- "title": "All Levels",
24739
- "code": "<Heading Level=\"1\">Heading Level 1</Heading>\n<Heading Level=\"2\">Heading Level 2</Heading>\n<Heading Level=\"3\">Heading Level 3</Heading>\n<Heading Level=\"4\">Heading Level 4</Heading>\n<Heading Level=\"5\">Heading Level 5</Heading>\n<Heading Level=\"6\">Heading Level 6</Heading>"
24740
- },
24741
- {
24742
- "title": "Custom Sizes",
24743
- "code": "<Heading Level=\"2\" Size=\"sm\">h2 with small text</Heading>\n<Heading Level=\"3\" Size=\"3xl\">h3 with 3xl text</Heading>\n<Heading Level=\"4\" Size=\"lg\" Weight=\"normal\">h4 with lg text, normal weight</Heading>"
24744
- },
24745
- {
24746
- "title": "Tracking",
24747
- "code": "<Heading Level=\"1\">Default tight tracking</Heading>\n<Heading Level=\"1\" Tracking=\"normal\">Normal tracking</Heading>\n<Heading Level=\"1\" Tracking=\"wide\">Wide tracking</Heading>"
24748
- },
24749
- {
24750
- "title": "Level — interactive",
24751
- "code": "<Heading Level=\"2\">This is a level 2 heading</Heading>"
24752
- }
24753
- ],
24754
- "subComponents": {},
24755
- "parseFailed": false,
24756
- "parseError": null
24757
- },
24758
- "Hero": {
24759
- "name": "Hero",
24760
- "category": "Utility",
24761
- "subcategory": null,
24762
- "description": "Hero component.",
24763
- "nugetPackage": "Lumeo",
24764
- "files": [
24765
- "UI/Hero/Hero.razor"
24766
- ],
24767
- "namespace": "Lumeo",
24768
- "inheritsFrom": null,
24769
- "implements": [],
24770
- "parameters": [
24771
- {
24772
- "name": "Title",
24773
- "type": "string?",
24774
- "default": null,
24775
- "description": null,
24776
- "isCascading": false,
24777
- "captureUnmatched": false
24778
- },
24779
- {
24780
- "name": "TitleSlot",
24781
- "type": "RenderFragment?",
24782
- "default": null,
24783
- "description": null,
24784
- "isCascading": false,
24785
- "captureUnmatched": false
24786
- },
24787
- {
24788
- "name": "Subtitle",
24789
- "type": "string?",
24790
- "default": null,
24791
- "description": null,
24792
- "isCascading": false,
24793
- "captureUnmatched": false
24794
- },
24795
- {
24796
- "name": "SubtitleSlot",
24797
- "type": "RenderFragment?",
24798
- "default": null,
24799
- "description": null,
24800
- "isCascading": false,
24801
- "captureUnmatched": false
24802
- },
24803
- {
24804
- "name": "Eyebrow",
24805
- "type": "RenderFragment?",
24806
- "default": null,
24807
- "description": null,
24808
- "isCascading": false,
24809
- "captureUnmatched": false
28054
+ "title": "Basic Hero",
28055
+ "code": "<Hero Title=\"Build faster with Lumeo\"\n Subtitle=\"A complete Blazor component library with theming, accessibility, and density built in.\">\n <Actions>\n <Button>Get started</Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">View components</Button>\n </Actions>\n</Hero>"
24810
28056
  },
24811
28057
  {
24812
- "name": "Actions",
24813
- "type": "RenderFragment?",
24814
- "default": null,
24815
- "description": null,
24816
- "isCascading": false,
24817
- "captureUnmatched": false
28058
+ "title": "With Eyebrow",
28059
+ "code": "<Hero Title=\"Version 3.5 is here\"\n Subtitle=\"Marketing blocks, density scopes, and a smaller bundle.\">\n <Eyebrow>\n <Badge Variant=\"Badge.BadgeVariant.Secondary\">New</Badge>\n </Eyebrow>\n <Actions>\n <Button>Read the changelog</Button>\n </Actions>\n</Hero>"
24818
28060
  },
24819
28061
  {
24820
- "name": "Media",
24821
- "type": "RenderFragment?",
24822
- "default": null,
24823
- "description": null,
24824
- "isCascading": false,
24825
- "captureUnmatched": false
28062
+ "title": "Centered Alignment",
28063
+ "code": "<Hero Alignment=\"Hero.HeroAlignment.Center\"\n Title=\"Everything you need to ship\"\n Subtitle=\"Forms, overlays, data display, charts, and motion — all in one package.\">\n <Actions>\n <Button>Install</Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\">Docs</Button>\n </Actions>\n</Hero>"
24826
28064
  },
24827
28065
  {
24828
- "name": "Alignment",
24829
- "type": "HeroAlignment",
24830
- "default": "HeroAlignment.Start",
24831
- "description": null,
24832
- "isCascading": false,
24833
- "captureUnmatched": false
24834
- },
24835
- {
24836
- "name": "Class",
24837
- "type": "string?",
24838
- "default": null,
24839
- "description": null,
24840
- "isCascading": false,
24841
- "captureUnmatched": false
24842
- },
24843
- {
24844
- "name": "AdditionalAttributes",
24845
- "type": "Dictionary<string, object>?",
24846
- "default": null,
24847
- "description": null,
24848
- "isCascading": false,
24849
- "captureUnmatched": true
28066
+ "title": "With Media",
28067
+ "code": "<Hero Title=\"See it in action\"\n Subtitle=\"A two-column layout that collapses to a single column on small screens.\">\n <Actions>\n <Button>Try the playground</Button>\n </Actions>\n <Media>\n <img src=\"/screenshot.png\" alt=\"Product screenshot\" class=\"rounded-xl border border-border/40\" />\n </Media>\n</Hero>"
24850
28068
  }
24851
28069
  ],
24852
- "events": [],
24853
- "enums": [
24854
- {
24855
- "name": "HeroAlignment",
24856
- "values": [
24857
- "Start",
24858
- "Center",
24859
- "End"
24860
- ],
24861
- "description": null
24862
- }
24863
- ],
24864
- "records": [],
24865
- "gotchas": [],
24866
- "cssVars": [
24867
- "--color-foreground",
24868
- "--color-muted",
24869
- "--color-muted-foreground"
24870
- ],
24871
- "examples": [],
24872
28070
  "subComponents": {},
24873
28071
  "parseFailed": false,
24874
28072
  "parseError": null
@@ -30737,7 +33935,7 @@
30737
33935
  },
30738
33936
  "OverlayForm": {
30739
33937
  "name": "OverlayForm",
30740
- "category": "Utility",
33938
+ "category": "Forms",
30741
33939
  "subcategory": null,
30742
33940
  "description": "Overlay Form component.",
30743
33941
  "nugetPackage": "Lumeo",
@@ -30841,7 +34039,12 @@
30841
34039
  "cssVars": [
30842
34040
  "--color-border"
30843
34041
  ],
30844
- "examples": [],
34042
+ "examples": [
34043
+ {
34044
+ "title": "Basic Overlay Form",
34045
+ "code": "<OverlayForm Model=\"@_model\" OnValidSubmit=\"HandleSave\">\n <Header>\n <Heading Level=\"3\" Class=\"text-base font-semibold\">Edit contact</Heading>\n </Header>\n <Body>\n <Stack Gap=\"4\">\n <Label>Name</Label>\n <Input @bind-Value=\"_model.Name\" Placeholder=\"Jane Doe\" />\n <Label>Email</Label>\n <Input @bind-Value=\"_model.Email\" Placeholder=\"jane@example.com\" />\n <Label>Notes</Label>\n <Textarea @bind-Value=\"_model.Notes\" />\n </Stack>\n </Body>\n <Footer>\n <Button Variant=\"Button.ButtonVariant.Outline\">Cancel</Button>\n <Button Type=\"Button.ButtonType.Submit\">Save</Button>\n </Footer>\n</OverlayForm>\n\n@code {\n private ContactModel _model = new();\n private void HandleSave(EditContext ctx) { /* persist _model */ }\n}"
34046
+ }
34047
+ ],
30845
34048
  "subComponents": {},
30846
34049
  "parseFailed": false,
30847
34050
  "parseError": null
@@ -37067,254 +40270,293 @@
37067
40270
  "gotchas": [],
37068
40271
  "parseFailed": false,
37069
40272
  "parseError": null
37070
- }
37071
- },
37072
- "parseFailed": false,
37073
- "parseError": null
37074
- },
37075
- "ShimmerButton": {
37076
- "name": "ShimmerButton",
37077
- "category": "Motion",
37078
- "subcategory": null,
37079
- "description": "Button with animated shimmer border beam.",
37080
- "nugetPackage": "Lumeo.Motion",
37081
- "files": [
37082
- "UI/ShimmerButton/ShimmerButton.razor"
37083
- ],
37084
- "namespace": "Lumeo",
37085
- "inheritsFrom": null,
37086
- "implements": [
37087
- "IAsyncDisposable"
37088
- ],
37089
- "parameters": [
37090
- {
37091
- "name": "ChildContent",
37092
- "type": "RenderFragment?",
37093
- "default": null,
37094
- "description": null,
37095
- "isCascading": false,
37096
- "captureUnmatched": false
37097
- },
37098
- {
37099
- "name": "OnClick",
37100
- "type": "EventCallback<Microsoft.AspNetCore.Components.Web.MouseEventArgs>",
37101
- "default": null,
37102
- "description": null,
37103
- "isCascading": false,
37104
- "captureUnmatched": false
37105
- },
37106
- {
37107
- "name": "Shimmer",
37108
- "type": "bool",
37109
- "default": "true",
37110
- "description": null,
37111
- "isCascading": false,
37112
- "captureUnmatched": false
37113
- },
37114
- {
37115
- "name": "ShimmerColor",
37116
- "type": "string?",
37117
- "default": null,
37118
- "description": "CSS color used for the shimmer sweep — defaults to a translucent foreground.",
37119
- "isCascading": false,
37120
- "captureUnmatched": false
37121
- },
37122
- {
37123
- "name": "Variant",
37124
- "type": "Button.ButtonVariant",
37125
- "default": "Button.ButtonVariant.Default",
37126
- "description": null,
37127
- "isCascading": false,
37128
- "captureUnmatched": false
37129
- },
37130
- {
37131
- "name": "Size",
37132
- "type": "Button.ButtonSize",
37133
- "default": "Button.ButtonSize.Default",
37134
- "description": null,
37135
- "isCascading": false,
37136
- "captureUnmatched": false
37137
- },
37138
- {
37139
- "name": "Disabled",
37140
- "type": "bool",
37141
- "default": null,
37142
- "description": null,
37143
- "isCascading": false,
37144
- "captureUnmatched": false
37145
- },
37146
- {
37147
- "name": "PressEffect",
37148
- "type": "Button.ButtonPressEffect",
37149
- "default": "Button.ButtonPressEffect.None",
37150
- "description": "Visual feedback when the button is pressed down. Default is None (no press animation — original behaviour).",
37151
- "isCascading": false,
37152
- "captureUnmatched": false
37153
- },
37154
- {
37155
- "name": "Class",
37156
- "type": "string?",
37157
- "default": null,
37158
- "description": null,
37159
- "isCascading": false,
37160
- "captureUnmatched": false
40273
+ }
40274
+ },
40275
+ "parseFailed": false,
40276
+ "parseError": null
40277
+ },
40278
+ "ShimmerButton": {
40279
+ "name": "ShimmerButton",
40280
+ "category": "Motion",
40281
+ "subcategory": null,
40282
+ "description": "Button with animated shimmer border beam.",
40283
+ "nugetPackage": "Lumeo.Motion",
40284
+ "files": [
40285
+ "UI/ShimmerButton/ShimmerButton.razor"
40286
+ ],
40287
+ "namespace": "Lumeo",
40288
+ "inheritsFrom": null,
40289
+ "implements": [
40290
+ "IAsyncDisposable"
40291
+ ],
40292
+ "parameters": [
40293
+ {
40294
+ "name": "ChildContent",
40295
+ "type": "RenderFragment?",
40296
+ "default": null,
40297
+ "description": null,
40298
+ "isCascading": false,
40299
+ "captureUnmatched": false
40300
+ },
40301
+ {
40302
+ "name": "OnClick",
40303
+ "type": "EventCallback<Microsoft.AspNetCore.Components.Web.MouseEventArgs>",
40304
+ "default": null,
40305
+ "description": null,
40306
+ "isCascading": false,
40307
+ "captureUnmatched": false
40308
+ },
40309
+ {
40310
+ "name": "Shimmer",
40311
+ "type": "bool",
40312
+ "default": "true",
40313
+ "description": null,
40314
+ "isCascading": false,
40315
+ "captureUnmatched": false
40316
+ },
40317
+ {
40318
+ "name": "ShimmerColor",
40319
+ "type": "string?",
40320
+ "default": null,
40321
+ "description": "CSS color used for the shimmer sweep — defaults to a translucent foreground.",
40322
+ "isCascading": false,
40323
+ "captureUnmatched": false
40324
+ },
40325
+ {
40326
+ "name": "Variant",
40327
+ "type": "Button.ButtonVariant",
40328
+ "default": "Button.ButtonVariant.Default",
40329
+ "description": null,
40330
+ "isCascading": false,
40331
+ "captureUnmatched": false
40332
+ },
40333
+ {
40334
+ "name": "Size",
40335
+ "type": "Button.ButtonSize",
40336
+ "default": "Button.ButtonSize.Default",
40337
+ "description": null,
40338
+ "isCascading": false,
40339
+ "captureUnmatched": false
40340
+ },
40341
+ {
40342
+ "name": "Disabled",
40343
+ "type": "bool",
40344
+ "default": null,
40345
+ "description": null,
40346
+ "isCascading": false,
40347
+ "captureUnmatched": false
40348
+ },
40349
+ {
40350
+ "name": "PressEffect",
40351
+ "type": "Button.ButtonPressEffect",
40352
+ "default": "Button.ButtonPressEffect.None",
40353
+ "description": "Visual feedback when the button is pressed down. Default is None (no press animation — original behaviour).",
40354
+ "isCascading": false,
40355
+ "captureUnmatched": false
40356
+ },
40357
+ {
40358
+ "name": "Class",
40359
+ "type": "string?",
40360
+ "default": null,
40361
+ "description": null,
40362
+ "isCascading": false,
40363
+ "captureUnmatched": false
40364
+ },
40365
+ {
40366
+ "name": "AdditionalAttributes",
40367
+ "type": "Dictionary<string, object>?",
40368
+ "default": null,
40369
+ "description": null,
40370
+ "isCascading": false,
40371
+ "captureUnmatched": true
40372
+ }
40373
+ ],
40374
+ "events": [
40375
+ {
40376
+ "name": "OnClick",
40377
+ "type": "EventCallback<Microsoft.AspNetCore.Components.Web.MouseEventArgs>",
40378
+ "description": null
40379
+ }
40380
+ ],
40381
+ "enums": [],
40382
+ "records": [],
40383
+ "gotchas": [],
40384
+ "cssVars": [
40385
+ "--color-accent",
40386
+ "--color-accent-foreground",
40387
+ "--color-background",
40388
+ "--color-destructive",
40389
+ "--color-destructive-foreground",
40390
+ "--color-input",
40391
+ "--color-primary",
40392
+ "--color-primary-foreground",
40393
+ "--color-ring",
40394
+ "--color-secondary",
40395
+ "--color-secondary-foreground",
40396
+ "--radius"
40397
+ ],
40398
+ "examples": [
40399
+ {
40400
+ "title": "Default Shimmer",
40401
+ "code": "<ShimmerButton>Get Started</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Secondary\">Learn More</ShimmerButton>"
40402
+ },
40403
+ {
40404
+ "title": "Shimmer Off",
40405
+ "code": "<ShimmerButton Shimmer=\"false\">No Shimmer</ShimmerButton>\n<ShimmerButton Shimmer=\"true\">With Shimmer</ShimmerButton>"
40406
+ },
40407
+ {
40408
+ "title": "Variants",
40409
+ "code": "<ShimmerButton>Default</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Outline\">Outline</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Secondary\">Secondary</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Ghost\">Ghost</ShimmerButton>"
40410
+ },
40411
+ {
40412
+ "title": "Sizes",
40413
+ "code": "<ShimmerButton Size=\"Button.ButtonSize.Sm\">Small</ShimmerButton>\n<ShimmerButton>Default</ShimmerButton>\n<ShimmerButton Size=\"Button.ButtonSize.Lg\">Large</ShimmerButton>"
40414
+ }
40415
+ ],
40416
+ "subComponents": {},
40417
+ "parseFailed": false,
40418
+ "parseError": null
40419
+ },
40420
+ "Sidebar": {
40421
+ "name": "Sidebar",
40422
+ "category": "Navigation",
40423
+ "subcategory": null,
40424
+ "description": "Collapsible app sidebar with groups, menu, and trigger.",
40425
+ "nugetPackage": "Lumeo",
40426
+ "files": [
40427
+ "UI/Sidebar/SidebarComponent.razor",
40428
+ "UI/Sidebar/SidebarContent.razor",
40429
+ "UI/Sidebar/SidebarFooter.razor",
40430
+ "UI/Sidebar/SidebarGroup.razor",
40431
+ "UI/Sidebar/SidebarGroupLabel.razor",
40432
+ "UI/Sidebar/SidebarHeader.razor",
40433
+ "UI/Sidebar/SidebarMenu.razor",
40434
+ "UI/Sidebar/SidebarMenuButton.razor",
40435
+ "UI/Sidebar/SidebarMenuItem.razor",
40436
+ "UI/Sidebar/SidebarProvider.razor",
40437
+ "UI/Sidebar/SidebarSeparator.razor",
40438
+ "UI/Sidebar/SidebarTrigger.razor"
40439
+ ],
40440
+ "namespace": "Lumeo",
40441
+ "inheritsFrom": null,
40442
+ "implements": [],
40443
+ "parameters": [
40444
+ {
40445
+ "name": "State",
40446
+ "type": "SidebarProvider.SidebarState?",
40447
+ "default": null,
40448
+ "description": null,
40449
+ "isCascading": true,
40450
+ "captureUnmatched": false
40451
+ },
40452
+ {
40453
+ "name": "ChildContent",
40454
+ "type": "RenderFragment?",
40455
+ "default": null,
40456
+ "description": null,
40457
+ "isCascading": false,
40458
+ "captureUnmatched": false
40459
+ },
40460
+ {
40461
+ "name": "Side",
40462
+ "type": "Lumeo.Side",
40463
+ "default": "Lumeo.Side.Left",
40464
+ "description": "Which edge the sidebar anchors to. Only Left and Right are supported; Top/Bottom fall through to the Left default.",
40465
+ "isCascading": false,
40466
+ "captureUnmatched": false
40467
+ },
40468
+ {
40469
+ "name": "Class",
40470
+ "type": "string?",
40471
+ "default": null,
40472
+ "description": null,
40473
+ "isCascading": false,
40474
+ "captureUnmatched": false
40475
+ },
40476
+ {
40477
+ "name": "AdditionalAttributes",
40478
+ "type": "Dictionary<string, object>?",
40479
+ "default": null,
40480
+ "description": null,
40481
+ "isCascading": false,
40482
+ "captureUnmatched": true
40483
+ }
40484
+ ],
40485
+ "events": [],
40486
+ "enums": [],
40487
+ "records": [],
40488
+ "gotchas": [],
40489
+ "cssVars": [
40490
+ "--color-accent",
40491
+ "--color-accent-foreground",
40492
+ "--color-border",
40493
+ "--color-foreground",
40494
+ "--color-muted",
40495
+ "--color-muted-foreground",
40496
+ "--color-ring",
40497
+ "--radius"
40498
+ ],
40499
+ "examples": [
40500
+ {
40501
+ "title": "Push (Default)",
40502
+ "code": "<SidebarProvider @bind-IsCollapsed=\"_isCollapsed\">\n <SidebarComponent>\n <SidebarHeader>\n <Lumeo.Text As=\"span\" Size=\"sm\" Weight=\"semibold\">Acme Inc</Lumeo.Text>\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupLabel>Platform</SidebarGroupLabel>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton Href=\"#\" IsActive=\"true\">\n <IconContent><Blazicon Svg=\"Lucide.House\" class=\"h-4 w-4\" /></IconContent>\n <LabelContent><span>Dashboard</span></LabelContent>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n <SidebarFooter>\n <Avatar Src=\"\" Fallback=\"CN\" />\n </SidebarFooter>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n </main>\n</SidebarProvider>"
40503
+ },
40504
+ {
40505
+ "title": "Overlay",
40506
+ "code": "<SidebarProvider @bind-IsCollapsed=\"_isCollapsed\" Variant=\"SidebarProvider.SidebarVariant.Overlay\">\n <SidebarComponent>\n <SidebarHeader>\n <Lumeo.Text As=\"span\" Size=\"sm\" Weight=\"semibold\">Workspace</Lumeo.Text>\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupLabel>Navigation</SidebarGroupLabel>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton Href=\"#\" IsActive=\"true\">\n <IconContent><Blazicon Svg=\"Lucide.House\" class=\"h-4 w-4\" /></IconContent>\n <LabelContent><span>Home</span></LabelContent>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n <Lumeo.Text Size=\"sm\" Color=\"muted\">Click backdrop to dismiss.</Lumeo.Text>\n </main>\n</SidebarProvider>"
40507
+ },
40508
+ {
40509
+ "title": "Side — interactive",
40510
+ "code": "<Segmented @bind-Value=\"_sidebarSideSel\" Options=\"_sidebarSideOptions\" />\n<SidebarProvider>\n <SidebarComponent Side=\"@_activeSide\">\n <SidebarHeader>...</SidebarHeader>\n <SidebarContent>...</SidebarContent>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n </main>\n</SidebarProvider>\n\n@code {\n private string _sidebarSideSel = \"Left\";\n private Lumeo.Side _activeSide =>\n Enum.Parse<Lumeo.Side>(_sidebarSideSel);\n private List<Segmented.SegmentedOption> _sidebarSideOptions = new()\n {\n new() { Label = \"Left\", Value = \"Left\" },\n new() { Label = \"Right\", Value = \"Right\" },\n };\n}"
40511
+ },
40512
+ {
40513
+ "title": "Icon",
40514
+ "code": "<SidebarProvider @bind-IsCollapsed=\"_isCollapsed\" Variant=\"SidebarProvider.SidebarVariant.Icon\">\n <SidebarComponent>\n <SidebarContent>\n <SidebarGroup>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton Href=\"#\" IsActive=\"true\" Tooltip=\"Home\">\n <IconContent><Blazicon Svg=\"Lucide.House\" class=\"h-4 w-4\" /></IconContent>\n <LabelContent><span>Home</span></LabelContent>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n <Lumeo.Text Size=\"sm\" Color=\"muted\">Toggle to expand with labels.</Lumeo.Text>\n </main>\n</SidebarProvider>"
40515
+ }
40516
+ ],
40517
+ "subComponents": {
40518
+ "SidebarContent": {
40519
+ "componentName": "SidebarContent",
40520
+ "fileName": "SidebarContent.razor",
40521
+ "namespace": "Lumeo",
40522
+ "inheritsFrom": null,
40523
+ "implements": [],
40524
+ "parameters": [
40525
+ {
40526
+ "name": "ChildContent",
40527
+ "type": "RenderFragment?",
40528
+ "default": null,
40529
+ "description": null,
40530
+ "isCascading": false,
40531
+ "captureUnmatched": false
40532
+ },
40533
+ {
40534
+ "name": "Class",
40535
+ "type": "string?",
40536
+ "default": null,
40537
+ "description": null,
40538
+ "isCascading": false,
40539
+ "captureUnmatched": false
40540
+ },
40541
+ {
40542
+ "name": "AdditionalAttributes",
40543
+ "type": "Dictionary<string, object>?",
40544
+ "default": null,
40545
+ "description": null,
40546
+ "isCascading": false,
40547
+ "captureUnmatched": true
40548
+ }
40549
+ ],
40550
+ "events": [],
40551
+ "enums": [],
40552
+ "records": [],
40553
+ "gotchas": [],
40554
+ "parseFailed": false,
40555
+ "parseError": null
37161
40556
  },
37162
- {
37163
- "name": "AdditionalAttributes",
37164
- "type": "Dictionary<string, object>?",
37165
- "default": null,
37166
- "description": null,
37167
- "isCascading": false,
37168
- "captureUnmatched": true
37169
- }
37170
- ],
37171
- "events": [
37172
- {
37173
- "name": "OnClick",
37174
- "type": "EventCallback<Microsoft.AspNetCore.Components.Web.MouseEventArgs>",
37175
- "description": null
37176
- }
37177
- ],
37178
- "enums": [],
37179
- "records": [],
37180
- "gotchas": [],
37181
- "cssVars": [
37182
- "--color-accent",
37183
- "--color-accent-foreground",
37184
- "--color-background",
37185
- "--color-destructive",
37186
- "--color-destructive-foreground",
37187
- "--color-input",
37188
- "--color-primary",
37189
- "--color-primary-foreground",
37190
- "--color-ring",
37191
- "--color-secondary",
37192
- "--color-secondary-foreground",
37193
- "--radius"
37194
- ],
37195
- "examples": [
37196
- {
37197
- "title": "Default Shimmer",
37198
- "code": "<ShimmerButton>Get Started</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Secondary\">Learn More</ShimmerButton>"
37199
- },
37200
- {
37201
- "title": "Shimmer Off",
37202
- "code": "<ShimmerButton Shimmer=\"false\">No Shimmer</ShimmerButton>\n<ShimmerButton Shimmer=\"true\">With Shimmer</ShimmerButton>"
37203
- },
37204
- {
37205
- "title": "Variants",
37206
- "code": "<ShimmerButton>Default</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Outline\">Outline</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Secondary\">Secondary</ShimmerButton>\n<ShimmerButton Variant=\"Button.ButtonVariant.Ghost\">Ghost</ShimmerButton>"
37207
- },
37208
- {
37209
- "title": "Sizes",
37210
- "code": "<ShimmerButton Size=\"Button.ButtonSize.Sm\">Small</ShimmerButton>\n<ShimmerButton>Default</ShimmerButton>\n<ShimmerButton Size=\"Button.ButtonSize.Lg\">Large</ShimmerButton>"
37211
- }
37212
- ],
37213
- "subComponents": {},
37214
- "parseFailed": false,
37215
- "parseError": null
37216
- },
37217
- "Sidebar": {
37218
- "name": "Sidebar",
37219
- "category": "Navigation",
37220
- "subcategory": null,
37221
- "description": "Collapsible app sidebar with groups, menu, and trigger.",
37222
- "nugetPackage": "Lumeo",
37223
- "files": [
37224
- "UI/Sidebar/SidebarComponent.razor",
37225
- "UI/Sidebar/SidebarContent.razor",
37226
- "UI/Sidebar/SidebarFooter.razor",
37227
- "UI/Sidebar/SidebarGroup.razor",
37228
- "UI/Sidebar/SidebarGroupLabel.razor",
37229
- "UI/Sidebar/SidebarHeader.razor",
37230
- "UI/Sidebar/SidebarMenu.razor",
37231
- "UI/Sidebar/SidebarMenuButton.razor",
37232
- "UI/Sidebar/SidebarMenuItem.razor",
37233
- "UI/Sidebar/SidebarProvider.razor",
37234
- "UI/Sidebar/SidebarSeparator.razor",
37235
- "UI/Sidebar/SidebarTrigger.razor"
37236
- ],
37237
- "namespace": "Lumeo",
37238
- "inheritsFrom": null,
37239
- "implements": [],
37240
- "parameters": [
37241
- {
37242
- "name": "State",
37243
- "type": "SidebarProvider.SidebarState?",
37244
- "default": null,
37245
- "description": null,
37246
- "isCascading": true,
37247
- "captureUnmatched": false
37248
- },
37249
- {
37250
- "name": "ChildContent",
37251
- "type": "RenderFragment?",
37252
- "default": null,
37253
- "description": null,
37254
- "isCascading": false,
37255
- "captureUnmatched": false
37256
- },
37257
- {
37258
- "name": "Side",
37259
- "type": "Lumeo.Side",
37260
- "default": "Lumeo.Side.Left",
37261
- "description": "Which edge the sidebar anchors to. Only Left and Right are supported; Top/Bottom fall through to the Left default.",
37262
- "isCascading": false,
37263
- "captureUnmatched": false
37264
- },
37265
- {
37266
- "name": "Class",
37267
- "type": "string?",
37268
- "default": null,
37269
- "description": null,
37270
- "isCascading": false,
37271
- "captureUnmatched": false
37272
- },
37273
- {
37274
- "name": "AdditionalAttributes",
37275
- "type": "Dictionary<string, object>?",
37276
- "default": null,
37277
- "description": null,
37278
- "isCascading": false,
37279
- "captureUnmatched": true
37280
- }
37281
- ],
37282
- "events": [],
37283
- "enums": [],
37284
- "records": [],
37285
- "gotchas": [],
37286
- "cssVars": [
37287
- "--color-accent",
37288
- "--color-accent-foreground",
37289
- "--color-border",
37290
- "--color-foreground",
37291
- "--color-muted",
37292
- "--color-muted-foreground",
37293
- "--color-ring",
37294
- "--radius"
37295
- ],
37296
- "examples": [
37297
- {
37298
- "title": "Push (Default)",
37299
- "code": "<SidebarProvider @bind-IsCollapsed=\"_isCollapsed\">\n <SidebarComponent>\n <SidebarHeader>\n <Lumeo.Text As=\"span\" Size=\"sm\" Weight=\"semibold\">Acme Inc</Lumeo.Text>\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupLabel>Platform</SidebarGroupLabel>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton Href=\"#\" IsActive=\"true\">\n <IconContent><Blazicon Svg=\"Lucide.House\" class=\"h-4 w-4\" /></IconContent>\n <LabelContent><span>Dashboard</span></LabelContent>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n <SidebarFooter>\n <Avatar Src=\"\" Fallback=\"CN\" />\n </SidebarFooter>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n </main>\n</SidebarProvider>"
37300
- },
37301
- {
37302
- "title": "Overlay",
37303
- "code": "<SidebarProvider @bind-IsCollapsed=\"_isCollapsed\" Variant=\"SidebarProvider.SidebarVariant.Overlay\">\n <SidebarComponent>\n <SidebarHeader>\n <Lumeo.Text As=\"span\" Size=\"sm\" Weight=\"semibold\">Workspace</Lumeo.Text>\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupLabel>Navigation</SidebarGroupLabel>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton Href=\"#\" IsActive=\"true\">\n <IconContent><Blazicon Svg=\"Lucide.House\" class=\"h-4 w-4\" /></IconContent>\n <LabelContent><span>Home</span></LabelContent>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n <Lumeo.Text Size=\"sm\" Color=\"muted\">Click backdrop to dismiss.</Lumeo.Text>\n </main>\n</SidebarProvider>"
37304
- },
37305
- {
37306
- "title": "Side — interactive",
37307
- "code": "<Segmented @bind-Value=\"_sidebarSideSel\" Options=\"_sidebarSideOptions\" />\n<SidebarProvider>\n <SidebarComponent Side=\"@_activeSide\">\n <SidebarHeader>...</SidebarHeader>\n <SidebarContent>...</SidebarContent>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n </main>\n</SidebarProvider>\n\n@code {\n private string _sidebarSideSel = \"Left\";\n private Lumeo.Side _activeSide =>\n Enum.Parse<Lumeo.Side>(_sidebarSideSel);\n private List<Segmented.SegmentedOption> _sidebarSideOptions = new()\n {\n new() { Label = \"Left\", Value = \"Left\" },\n new() { Label = \"Right\", Value = \"Right\" },\n };\n}"
37308
- },
37309
- {
37310
- "title": "Icon",
37311
- "code": "<SidebarProvider @bind-IsCollapsed=\"_isCollapsed\" Variant=\"SidebarProvider.SidebarVariant.Icon\">\n <SidebarComponent>\n <SidebarContent>\n <SidebarGroup>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton Href=\"#\" IsActive=\"true\" Tooltip=\"Home\">\n <IconContent><Blazicon Svg=\"Lucide.House\" class=\"h-4 w-4\" /></IconContent>\n <LabelContent><span>Home</span></LabelContent>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n <Lumeo.Text Size=\"sm\" Color=\"muted\">Toggle to expand with labels.</Lumeo.Text>\n </main>\n</SidebarProvider>"
37312
- }
37313
- ],
37314
- "subComponents": {
37315
- "SidebarContent": {
37316
- "componentName": "SidebarContent",
37317
- "fileName": "SidebarContent.razor",
40557
+ "SidebarFooter": {
40558
+ "componentName": "SidebarFooter",
40559
+ "fileName": "SidebarFooter.razor",
37318
40560
  "namespace": "Lumeo",
37319
40561
  "inheritsFrom": null,
37320
40562
  "implements": [],
@@ -37328,41 +40570,10 @@
37328
40570
  "captureUnmatched": false
37329
40571
  },
37330
40572
  {
37331
- "name": "Class",
37332
- "type": "string?",
37333
- "default": null,
37334
- "description": null,
37335
- "isCascading": false,
37336
- "captureUnmatched": false
37337
- },
37338
- {
37339
- "name": "AdditionalAttributes",
37340
- "type": "Dictionary<string, object>?",
37341
- "default": null,
37342
- "description": null,
37343
- "isCascading": false,
37344
- "captureUnmatched": true
37345
- }
37346
- ],
37347
- "events": [],
37348
- "enums": [],
37349
- "records": [],
37350
- "gotchas": [],
37351
- "parseFailed": false,
37352
- "parseError": null
37353
- },
37354
- "SidebarFooter": {
37355
- "componentName": "SidebarFooter",
37356
- "fileName": "SidebarFooter.razor",
37357
- "namespace": "Lumeo",
37358
- "inheritsFrom": null,
37359
- "implements": [],
37360
- "parameters": [
37361
- {
37362
- "name": "ChildContent",
37363
- "type": "RenderFragment?",
37364
- "default": null,
37365
- "description": null,
40573
+ "name": "Bordered",
40574
+ "type": "bool",
40575
+ "default": "true",
40576
+ "description": "Render the top divider. Default true. Set false for a seamless footer without a rule — replaces the consumer-side !border-t-0 override.",
37366
40577
  "isCascading": false,
37367
40578
  "captureUnmatched": false
37368
40579
  },
@@ -37491,6 +40702,14 @@
37491
40702
  "isCascading": false,
37492
40703
  "captureUnmatched": false
37493
40704
  },
40705
+ {
40706
+ "name": "Bordered",
40707
+ "type": "bool",
40708
+ "default": "true",
40709
+ "description": "Render the bottom divider. Default true. Set false for a seamless header that flows into the content without a rule — replaces the consumer-side !border-b-0 override.",
40710
+ "isCascading": false,
40711
+ "captureUnmatched": false
40712
+ },
37494
40713
  {
37495
40714
  "name": "Class",
37496
40715
  "type": "string?",
@@ -45293,7 +48512,7 @@
45293
48512
  },
45294
48513
  "UploadTrigger": {
45295
48514
  "name": "UploadTrigger",
45296
- "category": "Utility",
48515
+ "category": "Forms",
45297
48516
  "subcategory": null,
45298
48517
  "description": "Upload Trigger component.",
45299
48518
  "nugetPackage": "Lumeo",
@@ -45417,7 +48636,24 @@
45417
48636
  "--color-secondary-foreground",
45418
48637
  "--radius"
45419
48638
  ],
45420
- "examples": [],
48639
+ "examples": [
48640
+ {
48641
+ "title": "Basic Trigger",
48642
+ "code": "<UploadTrigger Text=\"Upload file\" OnFilesSelected=\"@HandleFiles\" />\n\n@code {\n private void HandleFiles(InputFileChangeEventArgs e)\n {\n // read e.File / e.GetMultipleFiles() and upload\n }\n}"
48643
+ },
48644
+ {
48645
+ "title": "Variants",
48646
+ "code": "<UploadTrigger Variant=\"Button.ButtonVariant.Default\" Text=\"Default\" OnFilesSelected=\"@HandleFiles\" />\n<UploadTrigger Variant=\"Button.ButtonVariant.Secondary\" Text=\"Secondary\" OnFilesSelected=\"@HandleFiles\" />\n<UploadTrigger Variant=\"Button.ButtonVariant.Outline\" Text=\"Outline\" OnFilesSelected=\"@HandleFiles\" />\n<UploadTrigger Variant=\"Button.ButtonVariant.Ghost\" Text=\"Ghost\" OnFilesSelected=\"@HandleFiles\" />"
48647
+ },
48648
+ {
48649
+ "title": "Accept Filter and Multiple",
48650
+ "code": "<UploadTrigger Text=\"Pick images\" Accept=\"image/*\" Multiple=\"true\" OnFilesSelected=\"@HandleFiles\" />\n<UploadTrigger Text=\"Pick a PDF\" Accept=\".pdf,.docx\" OnFilesSelected=\"@HandleFiles\" />"
48651
+ },
48652
+ {
48653
+ "title": "Custom Label and Icon",
48654
+ "code": "<UploadTrigger Variant=\"Button.ButtonVariant.Outline\" OnFilesSelected=\"@HandleFiles\">\n <Icon>\n <Blazicon Svg=\"Lucide.Image\" class=\"h-4 w-4\" />\n </Icon>\n <ChildContent>\n <span>Replace photo</span>\n </ChildContent>\n</UploadTrigger>\n\n<UploadTrigger Size=\"Button.ButtonSize.Icon\" Variant=\"Button.ButtonVariant.Ghost\" OnFilesSelected=\"@HandleFiles\" aria-label=\"Attach file\">\n <Icon>\n <Blazicon Svg=\"Lucide.Paperclip\" class=\"h-4 w-4\" />\n </Icon>\n @* Empty ChildContent suppresses the default text label *@\n <ChildContent></ChildContent>\n</UploadTrigger>"
48655
+ }
48656
+ ],
45421
48657
  "subComponents": {},
45422
48658
  "parseFailed": false,
45423
48659
  "parseError": null