@lumeo-ui/mcp-server 4.1.0-preview.1 → 4.1.0-preview.10

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,10 +1,10 @@
1
1
  {
2
2
  "$schema": "https://lumeo.nativ.sh/components-api-schema.json",
3
- "version": "4.1.0-preview.1",
4
- "generated": "2026-07-02T08:47:23.5739781Z",
3
+ "version": "4.1.0-preview.10",
4
+ "generated": "2026-07-05T09:59:54.2901968Z",
5
5
  "stats": {
6
6
  "componentCount": 164,
7
- "totalParameters": 4166,
7
+ "totalParameters": 4179,
8
8
  "totalEnums": 74,
9
9
  "totalRecords": 72,
10
10
  "serviceCount": 33,
@@ -5041,11 +5041,11 @@
5041
5041
  },
5042
5042
  {
5043
5043
  "title": "With Icon",
5044
- "code": "<Alert>\n <Flex Gap=\"3\">\n <Blazicon Svg=\"Lucide.Info\" class=\"h-4 w-4 mt-0.5\" />\n <Stack Gap=\"0\">\n <Heading Level=\"5\" Size=\"sm\" Weight=\"medium\" Class=\"mb-1 leading-none tracking-tight\">Information</Heading>\n <Lumeo.Text Size=\"sm\" Leading=\"relaxed\">This action will update your preferences.</Lumeo.Text>\n </Stack>\n </Flex>\n</Alert>\n<Alert Variant=\"Alert.AlertVariant.Destructive\">\n <Flex Gap=\"3\">\n <Blazicon Svg=\"Lucide.CircleAlert\" class=\"h-4 w-4 mt-0.5\" />\n <Stack Gap=\"0\">\n <Heading Level=\"5\" Size=\"sm\" Weight=\"medium\" Class=\"mb-1 leading-none tracking-tight\">Something went wrong</Heading>\n <Lumeo.Text Size=\"sm\" Leading=\"relaxed\">Could not save your changes. Please try again.</Lumeo.Text>\n </Stack>\n </Flex>\n</Alert>"
5044
+ "code": "<Alert>\n <Flex Gap=\"3\">\n <SvgGlyph Svg=\"@(Lucide.Info)\" class=\"h-4 w-4 mt-0.5\" />\n <Stack Gap=\"0\">\n <Heading Level=\"5\" Size=\"sm\" Weight=\"medium\" Class=\"mb-1 leading-none tracking-tight\">Information</Heading>\n <Lumeo.Text Size=\"sm\" Leading=\"relaxed\">This action will update your preferences.</Lumeo.Text>\n </Stack>\n </Flex>\n</Alert>\n<Alert Variant=\"Alert.AlertVariant.Destructive\">\n <Flex Gap=\"3\">\n <SvgGlyph Svg=\"@(Lucide.CircleAlert)\" class=\"h-4 w-4 mt-0.5\" />\n <Stack Gap=\"0\">\n <Heading Level=\"5\" Size=\"sm\" Weight=\"medium\" Class=\"mb-1 leading-none tracking-tight\">Something went wrong</Heading>\n <Lumeo.Text Size=\"sm\" Leading=\"relaxed\">Could not save your changes. Please try again.</Lumeo.Text>\n </Stack>\n </Flex>\n</Alert>"
5045
5045
  },
5046
5046
  {
5047
5047
  "title": "With Action",
5048
- "code": "<Alert>\n <Flex Align=\"start\" Justify=\"between\" Gap=\"4\">\n <Flex Gap=\"3\">\n <Blazicon Svg=\"Lucide.Bell\" class=\"h-4 w-4 mt-0.5 text-primary\" />\n <Stack Gap=\"0\">\n <Heading Level=\"5\" Size=\"sm\" Weight=\"medium\" Class=\"mb-1 leading-none tracking-tight\">New feature available</Heading>\n <Lumeo.Text Size=\"sm\" Leading=\"relaxed\">Dark mode is now available for all users.</Lumeo.Text>\n </Stack>\n </Flex>\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Sm\">Try it</Button>\n </Flex>\n</Alert>"
5048
+ "code": "<Alert>\n <Flex Align=\"start\" Justify=\"between\" Gap=\"4\">\n <Flex Gap=\"3\">\n <SvgGlyph Svg=\"@(Lucide.Bell)\" class=\"h-4 w-4 mt-0.5 text-primary\" />\n <Stack Gap=\"0\">\n <Heading Level=\"5\" Size=\"sm\" Weight=\"medium\" Class=\"mb-1 leading-none tracking-tight\">New feature available</Heading>\n <Lumeo.Text Size=\"sm\" Leading=\"relaxed\">Dark mode is now available for all users.</Lumeo.Text>\n </Stack>\n </Flex>\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Sm\">Try it</Button>\n </Flex>\n</Alert>"
5049
5049
  }
5050
5050
  ],
5051
5051
  "subComponents": {},
@@ -5196,7 +5196,7 @@
5196
5196
  },
5197
5197
  {
5198
5198
  "title": "Unsaved Changes",
5199
- "code": "<AlertDialog @bind-Open=\"_isOpen\">\n <AlertDialogTrigger>\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <Blazicon Svg=\"Lucide.X\" class=\"h-4 w-4\" /> Close Editor\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Discard unsaved changes?</AlertDialogTitle>\n <AlertDialogDescription>\n You have unsaved changes. If you close now, your changes will be lost.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Keep Editing</AlertDialogCancel>\n <AlertDialogAction>Discard Changes</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n</AlertDialog>"
5199
+ "code": "<AlertDialog @bind-Open=\"_isOpen\">\n <AlertDialogTrigger>\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <SvgGlyph Svg=\"@(Lucide.X)\" class=\"h-4 w-4\" /> Close Editor\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Discard unsaved changes?</AlertDialogTitle>\n <AlertDialogDescription>\n You have unsaved changes. If you close now, your changes will be lost.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Keep Editing</AlertDialogCancel>\n <AlertDialogAction>Discard Changes</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n</AlertDialog>"
5200
5200
  },
5201
5201
  {
5202
5202
  "title": "Loading Action",
@@ -5956,7 +5956,7 @@
5956
5956
  },
5957
5957
  {
5958
5958
  "title": "With Search",
5959
- "code": "<AppBar>\n <StartContent>\n <Lumeo.Text Size=\"sm\" Weight=\"semibold\">Dashboard</Lumeo.Text>\n </StartContent>\n <ChildContent>\n <Input Placeholder=\"Search...\" Class=\"max-w-xs h-8 text-sm\" />\n </ChildContent>\n <EndContent>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.Bell\" class=\"h-4 w-4\" />\n </Button>\n <Avatar><AvatarFallback>JD</AvatarFallback></Avatar>\n </EndContent>\n</AppBar>"
5959
+ "code": "<AppBar>\n <StartContent>\n <Lumeo.Text Size=\"sm\" Weight=\"semibold\">Dashboard</Lumeo.Text>\n </StartContent>\n <ChildContent>\n <Input Placeholder=\"Search...\" Class=\"max-w-xs h-8 text-sm\" />\n </ChildContent>\n <EndContent>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.Bell)\" class=\"h-4 w-4\" />\n </Button>\n <Avatar><AvatarFallback>JD</AvatarFallback></Avatar>\n </EndContent>\n</AppBar>"
5960
5960
  },
5961
5961
  {
5962
5962
  "title": "Appearance toggles — interactive",
@@ -5964,7 +5964,7 @@
5964
5964
  },
5965
5965
  {
5966
5966
  "title": "Elevated (no border)",
5967
- "code": "<AppBar Elevated=\"true\" Bordered=\"false\">\n <StartContent>\n <Lumeo.Text Size=\"sm\" Weight=\"semibold\">My App</Lumeo.Text>\n </StartContent>\n <EndContent>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.Settings\" class=\"h-4 w-4\" />\n </Button>\n </EndContent>\n</AppBar>"
5967
+ "code": "<AppBar Elevated=\"true\" Bordered=\"false\">\n <StartContent>\n <Lumeo.Text Size=\"sm\" Weight=\"semibold\">My App</Lumeo.Text>\n </StartContent>\n <EndContent>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.Settings)\" class=\"h-4 w-4\" />\n </Button>\n </EndContent>\n</AppBar>"
5968
5968
  }
5969
5969
  ],
5970
5970
  "subComponents": {},
@@ -6379,7 +6379,7 @@
6379
6379
  "name": "Shape",
6380
6380
  "type": "AvatarShape",
6381
6381
  "default": "AvatarShape.Circle",
6382
- "description": null,
6382
+ "description": "Avatar outline. Circle (default) and Square are literal contracts — a Circle avatar stays a circle in every theme. Themed follows the theme radius token instead: it renders identically to Circle at stock radii (the computed radius exceeds half the avatar size, so corners clamp to a full circle) and squares off along with the rest of the UI in sharp themes (--radius: 0) — pick it for sharp-brand designs.",
6383
6383
  "isCascading": false,
6384
6384
  "captureUnmatched": false,
6385
6385
  "isEditorRequired": false
@@ -6436,7 +6436,8 @@
6436
6436
  "name": "AvatarShape",
6437
6437
  "values": [
6438
6438
  "Circle",
6439
- "Square"
6439
+ "Square",
6440
+ "Themed"
6440
6441
  ],
6441
6442
  "description": null
6442
6443
  },
@@ -6467,7 +6468,7 @@
6467
6468
  },
6468
6469
  {
6469
6470
  "title": "Fallback Initials",
6470
- "code": "<Avatar>\n <AvatarFallback>JD</AvatarFallback>\n</Avatar>\n<Avatar>\n <AvatarFallback>\n <Blazicon Svg=\"Lucide.User\" class=\"h-4 w-4\" />\n </AvatarFallback>\n</Avatar>"
6471
+ "code": "<Avatar>\n <AvatarFallback>JD</AvatarFallback>\n</Avatar>\n<Avatar>\n <AvatarFallback>\n <SvgGlyph Svg=\"@(Lucide.User)\" class=\"h-4 w-4\" />\n </AvatarFallback>\n</Avatar>"
6471
6472
  },
6472
6473
  {
6473
6474
  "title": "Sizes",
@@ -6779,7 +6780,7 @@
6779
6780
  },
6780
6781
  {
6781
6782
  "title": "Custom Content",
6782
- "code": "<BackToTop>\n <Blazicon Svg=\"Lucide.ChevronUp\" class=\"h-5 w-5\" />\n</BackToTop>"
6783
+ "code": "<BackToTop>\n <SvgGlyph Svg=\"@(Lucide.ChevronUp)\" class=\"h-5 w-5\" />\n</BackToTop>"
6783
6784
  },
6784
6785
  {
6785
6786
  "title": "Interactive: Visibility Threshold",
@@ -6852,7 +6853,7 @@
6852
6853
  "name": "Pill",
6853
6854
  "type": "bool",
6854
6855
  "default": null,
6855
- "description": "Pill shape (rounded-full) instead of the default rounded-md — for count/quota chips.",
6856
+ "description": "Pill shape instead of the default rounded-md — for count/quota chips. Theme-radius-aware: renders as a full pill at stock radii and squares off along with the rest of the UI in sharp themes (--radius: 0).",
6856
6857
  "isCascading": false,
6857
6858
  "captureUnmatched": false,
6858
6859
  "isEditorRequired": false
@@ -8013,11 +8014,11 @@
8013
8014
  },
8014
8015
  {
8015
8016
  "title": "With Icons",
8016
- "code": "<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">\n <Blazicon Svg=\"Lucide.Home\" class=\"h-4 w-4\" />\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Documents</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Projects</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Report.pdf</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>"
8017
+ "code": "<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">\n <SvgGlyph Svg=\"@(Lucide.Home)\" class=\"h-4 w-4\" />\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Documents</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Projects</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Report.pdf</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>"
8017
8018
  },
8018
8019
  {
8019
8020
  "title": "Custom Separator",
8020
- "code": "<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Home</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator>\n <Blazicon Svg=\"Lucide.Slash\" class=\"h-4 w-4\" />\n </BreadcrumbSeparator>\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Settings</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator>\n <Blazicon Svg=\"Lucide.Slash\" class=\"h-4 w-4\" />\n </BreadcrumbSeparator>\n <BreadcrumbItem>\n <BreadcrumbPage>Profile</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>"
8021
+ "code": "<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Home</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator>\n <SvgGlyph Svg=\"@(Lucide.Slash)\" class=\"h-4 w-4\" />\n </BreadcrumbSeparator>\n <BreadcrumbItem>\n <BreadcrumbLink Href=\"#\">Settings</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator>\n <SvgGlyph Svg=\"@(Lucide.Slash)\" class=\"h-4 w-4\" />\n </BreadcrumbSeparator>\n <BreadcrumbItem>\n <BreadcrumbPage>Profile</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>"
8021
8022
  }
8022
8023
  ],
8023
8024
  "subComponents": {
@@ -8561,11 +8562,11 @@
8561
8562
  },
8562
8563
  {
8563
8564
  "title": "Sizes",
8564
- "code": "<Button Size=\"Button.ButtonSize.Sm\">Small</Button>\n<Button>Default</Button>\n<Button Size=\"Button.ButtonSize.Lg\">Large</Button>\n<Button Size=\"Button.ButtonSize.Icon\">\n <Blazicon Svg=\"Lucide.ChevronRight\" class=\"h-4 w-4\" />\n</Button>"
8565
+ "code": "<Button Size=\"Button.ButtonSize.Sm\">Small</Button>\n<Button>Default</Button>\n<Button Size=\"Button.ButtonSize.Lg\">Large</Button>\n<Button Size=\"Button.ButtonSize.Icon\">\n <SvgGlyph Svg=\"@(Lucide.ChevronRight)\" class=\"h-4 w-4\" />\n</Button>"
8565
8566
  },
8566
8567
  {
8567
8568
  "title": "With Icon",
8568
- "code": "<Button>\n <Blazicon Svg=\"Lucide.Mail\" class=\"h-4 w-4\" />\n Login with Email\n</Button>\n<Button Variant=\"Button.ButtonVariant.Secondary\">\n <Blazicon Svg=\"Lucide.Loader2\" class=\"h-4 w-4 animate-spin\" />\n Please wait\n</Button>"
8569
+ "code": "<Button>\n <SvgGlyph Svg=\"@(Lucide.Mail)\" class=\"h-4 w-4\" />\n Login with Email\n</Button>\n<Button Variant=\"Button.ButtonVariant.Secondary\">\n <SvgGlyph Svg=\"@(Lucide.Loader2)\" class=\"h-4 w-4 animate-spin\" />\n Please wait\n</Button>"
8569
8570
  },
8570
8571
  {
8571
8572
  "title": "Disabled",
@@ -8654,7 +8655,7 @@
8654
8655
  "examples": [
8655
8656
  {
8656
8657
  "title": "Horizontal (default)",
8657
- "code": "<ButtonGroup>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <Blazicon Svg=\"Lucide.Italic\" class=\"h-4 w-4\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <Blazicon Svg=\"Lucide.Underline\" class=\"h-4 w-4\" />\n </Button>\n</ButtonGroup>"
8658
+ "code": "<ButtonGroup>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <SvgGlyph Svg=\"@(Lucide.Italic)\" class=\"h-4 w-4\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <SvgGlyph Svg=\"@(Lucide.Underline)\" class=\"h-4 w-4\" />\n </Button>\n</ButtonGroup>"
8658
8659
  },
8659
8660
  {
8660
8661
  "title": "Vertical",
@@ -9131,11 +9132,11 @@
9131
9132
  },
9132
9133
  {
9133
9134
  "title": "Card with Actions",
9134
- "code": "<Card>\n <CardHeader>\n <Heading Level=\"3\" Size=\"lg\" Class=\"leading-none tracking-tight\">Blog Post</Heading>\n <Lumeo.Text Size=\"sm\" Color=\"muted\">Published on Jan 12, 2025</Lumeo.Text>\n </CardHeader>\n <CardContent>\n <Lumeo.Text Size=\"sm\" Color=\"foreground\">\n Learn how to build accessible, composable UI components using\n Blazor and Tailwind CSS in this in-depth guide.\n </Lumeo.Text>\n </CardContent>\n <CardFooter>\n <Flex Gap=\"2\" Class=\"w-full\">\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.Copy\" class=\"h-4 w-4\" /> Edit\n </Button>\n <Button Variant=\"Button.ButtonVariant.Destructive\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.Trash\" class=\"h-4 w-4\" /> Delete\n </Button>\n </Flex>\n </CardFooter>\n</Card>"
9135
+ "code": "<Card>\n <CardHeader>\n <Heading Level=\"3\" Size=\"lg\" Class=\"leading-none tracking-tight\">Blog Post</Heading>\n <Lumeo.Text Size=\"sm\" Color=\"muted\">Published on Jan 12, 2025</Lumeo.Text>\n </CardHeader>\n <CardContent>\n <Lumeo.Text Size=\"sm\" Color=\"foreground\">\n Learn how to build accessible, composable UI components using\n Blazor and Tailwind CSS in this in-depth guide.\n </Lumeo.Text>\n </CardContent>\n <CardFooter>\n <Flex Gap=\"2\" Class=\"w-full\">\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.Copy)\" class=\"h-4 w-4\" /> Edit\n </Button>\n <Button Variant=\"Button.ButtonVariant.Destructive\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.Trash)\" class=\"h-4 w-4\" /> Delete\n </Button>\n </Flex>\n </CardFooter>\n</Card>"
9135
9136
  },
9136
9137
  {
9137
9138
  "title": "Horizontal Card",
9138
- "code": "<Card>\n <Flex>\n <Center Class=\"w-32 h-32 rounded-l-lg bg-muted shrink-0\">\n <Blazicon Svg=\"Lucide.Star\" class=\"h-10 w-10 text-muted-foreground\" />\n </Center>\n <Stack Gap=\"0\" Class=\"flex-1\">\n <CardHeader>\n <Heading Level=\"3\" Size=\"base\" Weight=\"semibold\" Class=\"leading-none tracking-tight\">Featured Article</Heading>\n <Lumeo.Text Size=\"sm\" Color=\"muted\">5 min read</Lumeo.Text>\n </CardHeader>\n <CardContent>\n <Lumeo.Text Size=\"sm\" Color=\"muted\">\n An introduction to modern component-driven design systems.\n </Lumeo.Text>\n </CardContent>\n <CardFooter>\n <Button Variant=\"Button.ButtonVariant.Link\" Class=\"px-0\">Read more</Button>\n </CardFooter>\n </Stack>\n </Flex>\n</Card>"
9139
+ "code": "<Card>\n <Flex>\n <Center Class=\"w-32 h-32 rounded-l-lg bg-muted shrink-0\">\n <SvgGlyph Svg=\"@(Lucide.Star)\" class=\"h-10 w-10 text-muted-foreground\" />\n </Center>\n <Stack Gap=\"0\" Class=\"flex-1\">\n <CardHeader>\n <Heading Level=\"3\" Size=\"base\" Weight=\"semibold\" Class=\"leading-none tracking-tight\">Featured Article</Heading>\n <Lumeo.Text Size=\"sm\" Color=\"muted\">5 min read</Lumeo.Text>\n </CardHeader>\n <CardContent>\n <Lumeo.Text Size=\"sm\" Color=\"muted\">\n An introduction to modern component-driven design systems.\n </Lumeo.Text>\n </CardContent>\n <CardFooter>\n <Button Variant=\"Button.ButtonVariant.Link\" Class=\"px-0\">Read more</Button>\n </CardFooter>\n </Stack>\n </Flex>\n</Card>"
9139
9140
  },
9140
9141
  {
9141
9142
  "title": "With Form",
@@ -10512,7 +10513,25 @@
10512
10513
  "name": "Gradient",
10513
10514
  "type": "bool",
10514
10515
  "default": "true",
10515
- "description": null,
10516
+ "description": "When true (default) the fill uses a lighter opacity than a solid area. This is the legacy opacity-only behaviour and is unaffected by GradientFill.",
10517
+ "isCascading": false,
10518
+ "captureUnmatched": false,
10519
+ "isEditorRequired": false
10520
+ },
10521
+ {
10522
+ "name": "GradientFill",
10523
+ "type": "bool",
10524
+ "default": null,
10525
+ "description": "Opt into a real vertical gradient fill: each series' area fades from its own (brand/theme) colour at the top to transparent at the bottom, the look used by modern dashboards. Off by default so existing charts are unchanged. Override the stops with GradientStops.",
10526
+ "isCascading": false,
10527
+ "captureUnmatched": false,
10528
+ "isEditorRequired": false
10529
+ },
10530
+ {
10531
+ "name": "GradientStops",
10532
+ "type": "List<EChartGradientColorStop>?",
10533
+ "default": null,
10534
+ "description": "Explicit gradient colour-stops applied to every series' area fill when set (implies GradientFill). Offsets run 0 (top) → 1 (bottom); colours accept theme tokens like var(--color-primary). When null and GradientFill is true, a per-series colour → transparent fade is used.",
10516
10535
  "isCascading": false,
10517
10536
  "captureUnmatched": false,
10518
10537
  "isEditorRequired": false
@@ -19839,7 +19858,7 @@
19839
19858
  "examples": [
19840
19859
  {
19841
19860
  "title": "Default",
19842
- "code": "<Collapsible @bind-Open=\"_isOpen\">\n <div class=\"flex items-center justify-between\">\n <h4 class=\"text-sm font-semibold\">Starred Repositories</h4>\n <CollapsibleTrigger>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.ChevronDown\" class=\"h-4 w-4\" />\n </Button>\n </CollapsibleTrigger>\n </div>\n <CollapsibleContent>\n <div class=\"rounded-md border px-4 py-2 text-sm\">Content here</div>\n </CollapsibleContent>\n</Collapsible>"
19861
+ "code": "<Collapsible @bind-Open=\"_isOpen\">\n <div class=\"flex items-center justify-between\">\n <h4 class=\"text-sm font-semibold\">Starred Repositories</h4>\n <CollapsibleTrigger>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.ChevronDown)\" class=\"h-4 w-4\" />\n </Button>\n </CollapsibleTrigger>\n </div>\n <CollapsibleContent>\n <div class=\"rounded-md border px-4 py-2 text-sm\">Content here</div>\n </CollapsibleContent>\n</Collapsible>"
19843
19862
  },
19844
19863
  {
19845
19864
  "title": "Initially Open",
@@ -19847,7 +19866,7 @@
19847
19866
  },
19848
19867
  {
19849
19868
  "title": "Sidebar Section",
19850
- "code": "<Collapsible @bind-Open=\"_isOpen\">\n <CollapsibleTrigger>\n <div class=\"flex items-center justify-between px-2 py-1.5 rounded-md hover:bg-accent cursor-pointer\">\n <div class=\"flex items-center gap-2 text-sm font-medium\">\n <Blazicon Svg=\"Lucide.Settings\" class=\"h-4 w-4\" /> Settings\n </div>\n <Blazicon Svg=\"Lucide.ChevronDown\" class=\"@($\"h-4 w-4 transition-transform {(_isOpen ? \\\"rotate-180\\\" : \\\"\\\")}\")}\" />\n </div>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div class=\"pl-6 mt-1 space-y-1\">\n <div class=\"px-2 py-1.5 text-sm text-muted-foreground\">General</div>\n <div class=\"px-2 py-1.5 text-sm text-muted-foreground\">Security</div>\n <div class=\"px-2 py-1.5 text-sm text-muted-foreground\">Notifications</div>\n </div>\n </CollapsibleContent>\n</Collapsible>"
19869
+ "code": "<Collapsible @bind-Open=\"_isOpen\">\n <CollapsibleTrigger>\n <div class=\"flex items-center justify-between px-2 py-1.5 rounded-md hover:bg-accent cursor-pointer\">\n <div class=\"flex items-center gap-2 text-sm font-medium\">\n <SvgGlyph Svg=\"@(Lucide.Settings)\" class=\"h-4 w-4\" /> Settings\n </div>\n <SvgGlyph Svg=\"@(Lucide.ChevronDown)\" class=\"@($\"h-4 w-4 transition-transform {(_isOpen ? \\\"rotate-180\\\" : \\\"\\\")}\")}\" />\n </div>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div class=\"pl-6 mt-1 space-y-1\">\n <div class=\"px-2 py-1.5 text-sm text-muted-foreground\">General</div>\n <div class=\"px-2 py-1.5 text-sm text-muted-foreground\">Security</div>\n <div class=\"px-2 py-1.5 text-sm text-muted-foreground\">Notifications</div>\n </div>\n </CollapsibleContent>\n</Collapsible>"
19851
19870
  }
19852
19871
  ],
19853
19872
  "subComponents": {
@@ -21248,7 +21267,7 @@
21248
21267
  "examples": [
21249
21268
  {
21250
21269
  "title": "Default",
21251
- "code": "<Command>\n <CommandInput Placeholder=\"Type a command or search...\" />\n <CommandList>\n <CommandGroup Heading=\"Suggestions\">\n <CommandItem>\n <Blazicon Svg=\"Lucide.Calendar\" class=\"mr-2 h-4 w-4\" />\n <span>Calendar</span>\n </CommandItem>\n <CommandItem>\n <Blazicon Svg=\"Lucide.Settings\" class=\"mr-2 h-4 w-4\" />\n <span>Settings</span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup Heading=\"Actions\">\n <CommandItem>\n <Blazicon Svg=\"Lucide.User\" class=\"mr-2 h-4 w-4\" />\n <span>Profile</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n</Command>"
21270
+ "code": "<Command>\n <CommandInput Placeholder=\"Type a command or search...\" />\n <CommandList>\n <CommandGroup Heading=\"Suggestions\">\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.Calendar)\" class=\"mr-2 h-4 w-4\" />\n <span>Calendar</span>\n </CommandItem>\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.Settings)\" class=\"mr-2 h-4 w-4\" />\n <span>Settings</span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup Heading=\"Actions\">\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.User)\" class=\"mr-2 h-4 w-4\" />\n <span>Profile</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n</Command>"
21252
21271
  },
21253
21272
  {
21254
21273
  "title": "Compact",
@@ -21256,7 +21275,7 @@
21256
21275
  },
21257
21276
  {
21258
21277
  "title": "Navigation",
21259
- "code": "<Command>\n <CommandInput Placeholder=\"Go to...\" />\n <CommandList>\n <CommandGroup Heading=\"Pages\">\n <CommandItem>\n <Blazicon Svg=\"Lucide.House\" class=\"mr-2 h-4 w-4\" />\n <span>Dashboard</span>\n </CommandItem>\n <CommandItem>\n <Blazicon Svg=\"Lucide.User\" class=\"mr-2 h-4 w-4\" />\n <span>Profile</span>\n </CommandItem>\n <CommandItem>\n <Blazicon Svg=\"Lucide.Settings\" class=\"mr-2 h-4 w-4\" />\n <span>Settings</span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup Heading=\"Recent\">\n <CommandItem>\n <Blazicon Svg=\"Lucide.Bell\" class=\"mr-2 h-4 w-4\" />\n <span>Notifications</span>\n </CommandItem>\n <CommandItem>\n <Blazicon Svg=\"Lucide.Mail\" class=\"mr-2 h-4 w-4\" />\n <span>Messages</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n</Command>"
21278
+ "code": "<Command>\n <CommandInput Placeholder=\"Go to...\" />\n <CommandList>\n <CommandGroup Heading=\"Pages\">\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.House)\" class=\"mr-2 h-4 w-4\" />\n <span>Dashboard</span>\n </CommandItem>\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.User)\" class=\"mr-2 h-4 w-4\" />\n <span>Profile</span>\n </CommandItem>\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.Settings)\" class=\"mr-2 h-4 w-4\" />\n <span>Settings</span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup Heading=\"Recent\">\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.Bell)\" class=\"mr-2 h-4 w-4\" />\n <span>Notifications</span>\n </CommandItem>\n <CommandItem>\n <SvgGlyph Svg=\"@(Lucide.Mail)\" class=\"mr-2 h-4 w-4\" />\n <span>Messages</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n</Command>"
21260
21279
  },
21261
21280
  {
21262
21281
  "title": "Disabled Items",
@@ -21402,6 +21421,15 @@
21402
21421
  "captureUnmatched": false,
21403
21422
  "isEditorRequired": false
21404
21423
  },
21424
+ {
21425
+ "name": "AutoFocus",
21426
+ "type": "bool",
21427
+ "default": null,
21428
+ "description": "Focuses the search input on first render via the existing focus interop. Mirrors cmdk, where a bare Command.Input does NOT autofocus but a dialog-hosted command palette does — so this is opt-in (default false): set AutoFocus=\"true\" when hosting the palette in a Dialog/Popover so the user can type immediately on open. The HTML autofocus attribute is a no-op in Blazor WASM, hence the post-render FocusElement hop (see Input.AutoFocus).",
21429
+ "isCascading": false,
21430
+ "captureUnmatched": false,
21431
+ "isEditorRequired": false
21432
+ },
21405
21433
  {
21406
21434
  "name": "Class",
21407
21435
  "type": "string?",
@@ -21640,7 +21668,7 @@
21640
21668
  "Home"
21641
21669
  ],
21642
21670
  "keyboardInteractive": true,
21643
- "focusManaged": false
21671
+ "focusManaged": true
21644
21672
  },
21645
21673
  "parseFailed": false,
21646
21674
  "parseError": null
@@ -23299,7 +23327,7 @@
23299
23327
  "name": "Compact",
23300
23328
  "type": "bool",
23301
23329
  "default": null,
23302
- "description": null,
23330
+ "description": "Dense layout: header and body cells drop from px-3 py-2 to px-2 py-1 (and the root text shrinks to text-sm), so the effective row height genuinely decreases — not just the font size. The flag flows to every cell through DataGridContext{TItem}, so toggling it after first render re-pads the grid live. When virtualization is active (see VirtualItemSize) the default row-height estimate is auto-tightened under Compact unless you pass an explicit VirtualItemSize. Default false.",
23303
23331
  "isCascading": false,
23304
23332
  "captureUnmatched": false,
23305
23333
  "isEditorRequired": false
@@ -23425,7 +23453,7 @@
23425
23453
  "name": "VirtualItemSize",
23426
23454
  "type": "float",
23427
23455
  "default": "41f",
23428
- "description": "Estimated row height in CSS pixels — used by &lt;Virtualize&gt; to size the scroll spacers. Tune if your rows are taller (dense badges, two-line cells). Default 41px.",
23456
+ "description": "Estimated row height in CSS pixels — used by &lt;Virtualize&gt; to size the scroll spacers. Tune if your rows are taller (dense badges, two-line cells). Default 41px. When Compact is on and this parameter is left at its default, the estimate auto-tightens to CompactVirtualItemSizepx so the scroll spacers match the shorter compact rows; pass an explicit value to override either way.",
23429
23457
  "isCascading": false,
23430
23458
  "captureUnmatched": false,
23431
23459
  "isEditorRequired": false
@@ -24552,6 +24580,24 @@
24552
24580
  "captureUnmatched": false,
24553
24581
  "isEditorRequired": false
24554
24582
  },
24583
+ {
24584
+ "name": "Visible",
24585
+ "type": "bool",
24586
+ "default": "true",
24587
+ "description": "Two-way bindable column visibility. Seeds the registered column's initial visibility and lets a consumer show/hide the column programmatically via @bind-Visible. When the user toggles the column through the built-in column-chooser, VisibleChanged fires so the bound value follows. Default true.",
24588
+ "isCascading": false,
24589
+ "captureUnmatched": false,
24590
+ "isEditorRequired": false
24591
+ },
24592
+ {
24593
+ "name": "VisibleChanged",
24594
+ "type": "EventCallback<bool>",
24595
+ "default": null,
24596
+ "description": "Fires when the column's visibility changes through the built-in UI — the callback half of Visible's two-way binding.",
24597
+ "isCascading": false,
24598
+ "captureUnmatched": false,
24599
+ "isEditorRequired": false
24600
+ },
24555
24601
  {
24556
24602
  "name": "AdditionalAttributes",
24557
24603
  "type": "Dictionary<string, object>?",
@@ -24562,7 +24608,13 @@
24562
24608
  "isEditorRequired": false
24563
24609
  }
24564
24610
  ],
24565
- "events": [],
24611
+ "events": [
24612
+ {
24613
+ "name": "VisibleChanged",
24614
+ "type": "EventCallback<bool>",
24615
+ "description": "Fires when the column's visibility changes through the built-in UI — the callback half of Visible's two-way binding."
24616
+ }
24617
+ ],
24566
24618
  "enums": [],
24567
24619
  "records": [],
24568
24620
  "gotchas": [],
@@ -26023,16 +26075,21 @@
26023
26075
  },
26024
26076
  "a11y": {
26025
26077
  "roles": [
26078
+ "checkbox",
26026
26079
  "columnheader",
26027
26080
  "dialog",
26028
26081
  "gridcell",
26082
+ "menu",
26083
+ "menuitem",
26029
26084
  "row",
26030
26085
  "status"
26031
26086
  ],
26032
26087
  "ariaAttributes": [
26088
+ "aria-checked",
26033
26089
  "aria-colcount",
26034
26090
  "aria-colindex",
26035
26091
  "aria-expanded",
26092
+ "aria-haspopup",
26036
26093
  "aria-hidden",
26037
26094
  "aria-label",
26038
26095
  "aria-level",
@@ -28128,7 +28185,7 @@
28128
28185
  },
28129
28186
  {
28130
28187
  "title": "Confirmation Dialog",
28131
- "code": "<Dialog @bind-Open=\"_isOpen\">\n <DialogTrigger>\n <Button Variant=\"Button.ButtonVariant.Destructive\">\n <Blazicon Svg=\"Lucide.Trash\" class=\"h-4 w-4\" /> Delete Account\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Are you absolutely sure?</DialogTitle>\n <DialogDescription>\n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <DialogClose>\n <Button Variant=\"Button.ButtonVariant.Outline\">Cancel</Button>\n </DialogClose>\n <DialogClose>\n <Button Variant=\"Button.ButtonVariant.Destructive\">Yes, delete account</Button>\n </DialogClose>\n </DialogFooter>\n </DialogContent>\n</Dialog>\n\n@code {\n private bool _isOpen;\n}"
28188
+ "code": "<Dialog @bind-Open=\"_isOpen\">\n <DialogTrigger>\n <Button Variant=\"Button.ButtonVariant.Destructive\">\n <SvgGlyph Svg=\"@(Lucide.Trash)\" class=\"h-4 w-4\" /> Delete Account\n </Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Are you absolutely sure?</DialogTitle>\n <DialogDescription>\n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter>\n <DialogClose>\n <Button Variant=\"Button.ButtonVariant.Outline\">Cancel</Button>\n </DialogClose>\n <DialogClose>\n <Button Variant=\"Button.ButtonVariant.Destructive\">Yes, delete account</Button>\n </DialogClose>\n </DialogFooter>\n </DialogContent>\n</Dialog>\n\n@code {\n private bool _isOpen;\n}"
28132
28189
  },
28133
28190
  {
28134
28191
  "title": "Prevent Close",
@@ -28652,7 +28709,7 @@
28652
28709
  "examples": [
28653
28710
  {
28654
28711
  "title": "LTR vs RTL",
28655
- "code": "@* Same markup, two directions. *@\n<DirectionProvider Direction=\"LayoutDirection.Rtl\">\n <Flex Align=\"center\" Gap=\"3\">\n <Blazicon Svg=\"Lucide.Info\" class=\"h-5 w-5 text-primary shrink-0\" />\n <Lumeo.Text Size=\"sm\">Mirrors under RTL.</Lumeo.Text>\n <Button Size=\"Lumeo.Size.Sm\" Class=\"ms-auto\">Action</Button>\n </Flex>\n</DirectionProvider>\n\n@code {\n // LayoutDirection lives in Lumeo.Services.\n}"
28712
+ "code": "@* Same markup, two directions. *@\n<DirectionProvider Direction=\"LayoutDirection.Rtl\">\n <Flex Align=\"center\" Gap=\"3\">\n <SvgGlyph Svg=\"@(Lucide.Info)\" class=\"h-5 w-5 text-primary shrink-0\" />\n <Lumeo.Text Size=\"sm\">Mirrors under RTL.</Lumeo.Text>\n <Button Size=\"Lumeo.Size.Sm\" Class=\"ms-auto\">Action</Button>\n </Flex>\n</DirectionProvider>\n\n@code {\n // LayoutDirection lives in Lumeo.Services.\n}"
28656
28713
  },
28657
28714
  {
28658
28715
  "title": "Wrapping the whole app",
@@ -28750,11 +28807,11 @@
28750
28807
  "examples": [
28751
28808
  {
28752
28809
  "title": "Basic Dock",
28753
- "code": "<Dock>\n <button class=\"w-12 h-12 rounded-xl bg-card border border-border/40 flex items-center justify-center\" title=\"Home\">\n <Blazicon Svg=\"Lucide.House\" class=\"h-6 w-6 text-foreground/80\" />\n </button>\n <button class=\"w-12 h-12 rounded-xl bg-card border border-border/40 flex items-center justify-center\" title=\"Files\">\n <Blazicon Svg=\"Lucide.FolderOpen\" class=\"h-6 w-6 text-foreground/80\" />\n </button>\n <button class=\"w-12 h-12 rounded-xl bg-card border border-border/40 flex items-center justify-center\" title=\"Mail\">\n <Blazicon Svg=\"Lucide.Mail\" class=\"h-6 w-6 text-foreground/80\" />\n </button>\n</Dock>"
28810
+ "code": "<Dock>\n <button class=\"w-12 h-12 rounded-xl bg-card border border-border/40 flex items-center justify-center\" title=\"Home\">\n <SvgGlyph Svg=\"Lucide.House\" class=\"h-6 w-6 text-foreground/80\" />\n </button>\n <button class=\"w-12 h-12 rounded-xl bg-card border border-border/40 flex items-center justify-center\" title=\"Files\">\n <SvgGlyph Svg=\"Lucide.FolderOpen\" class=\"h-6 w-6 text-foreground/80\" />\n </button>\n <button class=\"w-12 h-12 rounded-xl bg-card border border-border/40 flex items-center justify-center\" title=\"Mail\">\n <SvgGlyph Svg=\"Lucide.Mail\" class=\"h-6 w-6 text-foreground/80\" />\n </button>\n</Dock>"
28754
28811
  },
28755
28812
  {
28756
28813
  "title": "Custom Scale & Radius",
28757
- "code": "<Dock MaxScale=\"2.2\" MagnifyRadius=\"120\">\n <!-- dock items with Blazicon icons -->\n</Dock>"
28814
+ "code": "<Dock MaxScale=\"2.2\" MagnifyRadius=\"120\">\n <!-- dock items with SvgGlyph icons -->\n</Dock>"
28758
28815
  }
28759
28816
  ],
28760
28817
  "subComponents": {},
@@ -28886,7 +28943,7 @@
28886
28943
  },
28887
28944
  {
28888
28945
  "title": "Filters Drawer",
28889
- "code": "<Drawer @bind-Open=\"_isFiltersOpen\">\n <DrawerTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <Blazicon Svg=\"Lucide.Settings\" class=\"h-4 w-4\" /> Filters\n </Button>\n </DrawerTrigger>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle>Filter Results</DrawerTitle>\n <DrawerDescription>Narrow down your search.</DrawerDescription>\n </DrawerHeader>\n <Stack Gap=\"4\" Class=\"p-4\">\n <Select @bind-Value=\"_filterCategory\">\n <SelectTrigger><span>@(_filterCategory ?? \"All categories\")</span></SelectTrigger>\n <SelectContent>\n <SelectItem Value=\"electronics\">Electronics</SelectItem>\n <SelectItem Value=\"clothing\">Clothing</SelectItem>\n </SelectContent>\n </Select>\n </Stack>\n <DrawerFooter>\n <DrawerClose><Button Class=\"w-full\">Apply Filters</Button></DrawerClose>\n </DrawerFooter>\n </DrawerContent>\n</Drawer>"
28946
+ "code": "<Drawer @bind-Open=\"_isFiltersOpen\">\n <DrawerTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\">\n <SvgGlyph Svg=\"@(Lucide.Settings)\" class=\"h-4 w-4\" /> Filters\n </Button>\n </DrawerTrigger>\n <DrawerContent>\n <DrawerHeader>\n <DrawerTitle>Filter Results</DrawerTitle>\n <DrawerDescription>Narrow down your search.</DrawerDescription>\n </DrawerHeader>\n <Stack Gap=\"4\" Class=\"p-4\">\n <Select @bind-Value=\"_filterCategory\">\n <SelectTrigger><span>@(_filterCategory ?? \"All categories\")</span></SelectTrigger>\n <SelectContent>\n <SelectItem Value=\"electronics\">Electronics</SelectItem>\n <SelectItem Value=\"clothing\">Clothing</SelectItem>\n </SelectContent>\n </Select>\n </Stack>\n <DrawerFooter>\n <DrawerClose><Button Class=\"w-full\">Apply Filters</Button></DrawerClose>\n </DrawerFooter>\n </DrawerContent>\n</Drawer>"
28890
28947
  },
28891
28948
  {
28892
28949
  "title": "Prevent Close",
@@ -30619,7 +30676,7 @@
30619
30676
  "examples": [
30620
30677
  {
30621
30678
  "title": "Basic Feature Grid",
30622
- "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 <IconContent><Blazicon Svg=\"Lucide.Palette\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n <FeatureItem Title=\"Accessible\" Description=\"WAI-ARIA roles and keyboard navigation.\">\n <IconContent><Blazicon Svg=\"Lucide.Accessibility\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n <FeatureItem Title=\"Density\" Description=\"Flip a panel between compact and spacious.\">\n <IconContent><Blazicon Svg=\"Lucide.Rows3\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n</FeatureGrid>"
30679
+ "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 <IconContent><SvgGlyph Svg=\"@(Lucide.Palette)\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n <FeatureItem Title=\"Accessible\" Description=\"WAI-ARIA roles and keyboard navigation.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Accessibility)\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n <FeatureItem Title=\"Density\" Description=\"Flip a panel between compact and spacious.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Rows3)\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n</FeatureGrid>"
30623
30680
  },
30624
30681
  {
30625
30682
  "title": "Two Columns",
@@ -30627,7 +30684,7 @@
30627
30684
  },
30628
30685
  {
30629
30686
  "title": "Standalone Feature Item",
30630
- "code": "<FeatureItem Title=\"Fast by default\" Description=\"A small CSS bundle keeps your app lean.\">\n <IconContent><Blazicon Svg=\"Lucide.Zap\" class=\"h-5 w-5\" /></IconContent>\n</FeatureItem>"
30687
+ "code": "<FeatureItem Title=\"Fast by default\" Description=\"A small CSS bundle keeps your app lean.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Zap)\" class=\"h-5 w-5\" /></IconContent>\n</FeatureItem>"
30631
30688
  }
30632
30689
  ],
30633
30690
  "subComponents": {},
@@ -30725,7 +30782,7 @@
30725
30782
  "examples": [
30726
30783
  {
30727
30784
  "title": "Basic",
30728
- "code": "<FeatureItem Title=\"Fast by default\" Description=\"A small CSS bundle keeps your app lean.\">\n <IconContent><Blazicon Svg=\"Lucide.Zap\" class=\"h-5 w-5\" /></IconContent>\n</FeatureItem>"
30785
+ "code": "<FeatureItem Title=\"Fast by default\" Description=\"A small CSS bundle keeps your app lean.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Zap)\" class=\"h-5 w-5\" /></IconContent>\n</FeatureItem>"
30729
30786
  },
30730
30787
  {
30731
30788
  "title": "Without an Icon",
@@ -30733,11 +30790,11 @@
30733
30790
  },
30734
30791
  {
30735
30792
  "title": "With Extra Content",
30736
- "code": "<FeatureItem Title=\"Accessible\" Description=\"WAI-ARIA roles, keyboard navigation, and focus management built in.\">\n <IconContent><Blazicon Svg=\"Lucide.Accessibility\" class=\"h-5 w-5\" /></IconContent>\n <ChildContent>\n <a href=\"/docs/accessibility\" class=\"mt-3 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline\">\n Learn more\n <Blazicon Svg=\"Lucide.ArrowRight\" class=\"h-4 w-4\" />\n </a>\n </ChildContent>\n</FeatureItem>"
30793
+ "code": "<FeatureItem Title=\"Accessible\" Description=\"WAI-ARIA roles, keyboard navigation, and focus management built in.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Accessibility)\" class=\"h-5 w-5\" /></IconContent>\n <ChildContent>\n <a href=\"/docs/accessibility\" class=\"mt-3 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline\">\n Learn more\n <SvgGlyph Svg=\"@(Lucide.ArrowRight)\" class=\"h-4 w-4\" />\n </a>\n </ChildContent>\n</FeatureItem>"
30737
30794
  },
30738
30795
  {
30739
30796
  "title": "In a Feature Grid",
30740
- "code": "<FeatureGrid Columns=\"2\" Title=\"Composes into a grid\">\n <FeatureItem Title=\"Fast\" Description=\"Small CSS bundle, tree-shakeable.\">\n <IconContent><Blazicon Svg=\"Lucide.Zap\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n <FeatureItem Title=\"Themeable\" Description=\"Every color is a CSS variable.\">\n <IconContent><Blazicon Svg=\"Lucide.Palette\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n</FeatureGrid>"
30797
+ "code": "<FeatureGrid Columns=\"2\" Title=\"Composes into a grid\">\n <FeatureItem Title=\"Fast\" Description=\"Small CSS bundle, tree-shakeable.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Zap)\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n <FeatureItem Title=\"Themeable\" Description=\"Every color is a CSS variable.\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Palette)\" class=\"h-5 w-5\" /></IconContent>\n </FeatureItem>\n</FeatureGrid>"
30741
30798
  }
30742
30799
  ],
30743
30800
  "subComponents": {},
@@ -32571,6 +32628,24 @@
32571
32628
  "captureUnmatched": false,
32572
32629
  "isEditorRequired": false
32573
32630
  },
32631
+ {
32632
+ "name": "ZoomLevels",
32633
+ "type": "IReadOnlyList<GanttViewMode>?",
32634
+ "default": null,
32635
+ "description": "Restricts which zoom buttons the toolbar renders, in the given order. When null or empty the full default set (Day, Week, Month, Year) is shown — matching the previous hardcoded toolbar. Only toolbar-representable levels are drawn: QuarterDay / HalfDay have no toolbar button and are silently skipped here (still settable via ViewMode). Example: ZoomLevels=\"new[]{ GanttViewMode.Day, GanttViewMode.Week, GanttViewMode.Month }\".",
32636
+ "isCascading": false,
32637
+ "captureUnmatched": false,
32638
+ "isEditorRequired": false
32639
+ },
32640
+ {
32641
+ "name": "DefaultZoom",
32642
+ "type": "GanttViewMode?",
32643
+ "default": null,
32644
+ "description": "The zoom level selected on first render. When set it seeds the initial toolbar selection (and the level the timeline mounts at), overriding ViewMode's default — handy for uncontrolled usage, e.g. ZoomLevels=\"…\" DefaultZoom=\"GanttViewMode.Week\". After mount, ViewMode / @bind-ViewMode govern as before. Null falls back to ViewMode (the existing behaviour).",
32645
+ "isCascading": false,
32646
+ "captureUnmatched": false,
32647
+ "isEditorRequired": false
32648
+ },
32574
32649
  {
32575
32650
  "name": "OnTaskClick",
32576
32651
  "type": "EventCallback<GanttTask>",
@@ -33816,10 +33891,11 @@
33816
33891
  "name": "Icon",
33817
33892
  "category": "Utility",
33818
33893
  "subcategory": null,
33819
- "description": "Icon wrapper — renders Lucide icons via Blazicons.",
33894
+ "description": "Icon wrapper — renders the built-in LumeoIcons set (Lucide-derived) or any IconSource natively.",
33820
33895
  "nugetPackage": "Lumeo",
33821
33896
  "files": [
33822
- "UI/Icon/Icon.razor"
33897
+ "UI/Icon/Icon.razor",
33898
+ "UI/Icon/SvgGlyph.razor"
33823
33899
  ],
33824
33900
  "namespace": "Lumeo",
33825
33901
  "inheritsFrom": null,
@@ -33829,16 +33905,16 @@
33829
33905
  "name": "Name",
33830
33906
  "type": "string?",
33831
33907
  "default": null,
33832
- "description": "Lucide icon name (PascalCase, e.g. \"Search\", \"ChevronDown\", \"TrendingUp\"). Unknown names fall back to a Circle. Use Svg to supply any icon directly (Lucide or any other Blazicons library).",
33908
+ "description": "Lucide icon name (PascalCase, e.g. \"Search\", \"ChevronDown\", \"TrendingUp\"). Unknown names fall back to a Circle. Use Svg to supply any icon directly (any IconSource, e.g. from a Lumeo icon pack).",
33833
33909
  "isCascading": false,
33834
33910
  "captureUnmatched": false,
33835
33911
  "isEditorRequired": false
33836
33912
  },
33837
33913
  {
33838
33914
  "name": "Svg",
33839
- "type": "SvgIcon?",
33915
+ "type": "IconSource?",
33840
33916
  "default": null,
33841
- "description": "Direct Blazicons SvgIcon reference — takes precedence over Name. Lets consumers use any icon library (Lucide, Bootstrap, FluentUI, Material, FontAwesome, Ionicons, MDI).",
33917
+ "description": "Direct IconSource reference — takes precedence over Name. Lets consumers supply any vendored icon (e.g. LumeoIcons.Search or an icon-pack member).",
33842
33918
  "isCascading": false,
33843
33919
  "captureUnmatched": false,
33844
33920
  "isEditorRequired": false
@@ -33852,6 +33928,15 @@
33852
33928
  "captureUnmatched": false,
33853
33929
  "isEditorRequired": false
33854
33930
  },
33931
+ {
33932
+ "name": "StrokeWidth",
33933
+ "type": "double?",
33934
+ "default": null,
33935
+ "description": "Overrides the IconSource's stroke width on the rendered svg. Only affects Stroke-style icons (Lucide, Tabler); ignored for Fill sets (Phosphor, Material, Bootstrap) where stroke is not used. When null (default) the icon source's own StrokeWidth is used.",
33936
+ "isCascading": false,
33937
+ "captureUnmatched": false,
33938
+ "isEditorRequired": false
33939
+ },
33855
33940
  {
33856
33941
  "name": "Title",
33857
33942
  "type": "string?",
@@ -33888,7 +33973,50 @@
33888
33973
  "--color-foreground"
33889
33974
  ],
33890
33975
  "examples": [],
33891
- "subComponents": {},
33976
+ "subComponents": {
33977
+ "SvgGlyph": {
33978
+ "componentName": "SvgGlyph",
33979
+ "fileName": "SvgGlyph.razor",
33980
+ "namespace": "Lumeo",
33981
+ "inheritsFrom": null,
33982
+ "implements": [],
33983
+ "parameters": [
33984
+ {
33985
+ "name": "Svg",
33986
+ "type": "IconSource",
33987
+ "default": "default!",
33988
+ "description": "The icon to render. Its Content becomes the inner markup and its ViewBox/RenderStyle/ StrokeWidth style the root &lt;svg&gt;.",
33989
+ "isCascading": false,
33990
+ "captureUnmatched": false,
33991
+ "isEditorRequired": true
33992
+ },
33993
+ {
33994
+ "name": "StrokeWidth",
33995
+ "type": "double?",
33996
+ "default": null,
33997
+ "description": "Optional root stroke-width override for Stroke icons. When null (default) the icon's own StrokeWidth is used; ignored for Fill icons.",
33998
+ "isCascading": false,
33999
+ "captureUnmatched": false,
34000
+ "isEditorRequired": false
34001
+ },
34002
+ {
34003
+ "name": "AdditionalAttributes",
34004
+ "type": "Dictionary<string, object>?",
34005
+ "default": null,
34006
+ "description": "Arbitrary attributes (class, aria-*, role, title, …) splatted onto the root &lt;svg&gt;. Sizing is done here via classes (e.g. h-4 w-4), exactly like the icon component it replaces. A consumer-supplied attribute that collides with one this component sets (e.g. fill) wins, because the splat is applied last.",
34007
+ "isCascading": false,
34008
+ "captureUnmatched": true,
34009
+ "isEditorRequired": false
34010
+ }
34011
+ ],
34012
+ "events": [],
34013
+ "enums": [],
34014
+ "records": [],
34015
+ "gotchas": [],
34016
+ "parseFailed": false,
34017
+ "parseError": null
34018
+ }
34019
+ },
33892
34020
  "a11y": {
33893
34021
  "roles": [
33894
34022
  "img"
@@ -35738,7 +35866,7 @@
35738
35866
  },
35739
35867
  {
35740
35868
  "title": "With Icon and Sparkline",
35741
- "code": "<KpiCard Label=\"Page Views\" Value=\"94,210\" Delta=\"5.7\">\n <IconContent>\n <Blazicon Svg=\"Lucide.TrendingUp\" class=\"h-4 w-4\" />\n </IconContent>\n <SparkContent>\n <Sparkline Data=\"@_viewData\" Class=\"h-10 w-full\" />\n </SparkContent>\n</KpiCard>"
35869
+ "code": "<KpiCard Label=\"Page Views\" Value=\"94,210\" Delta=\"5.7\">\n <IconContent>\n <SvgGlyph Svg=\"@(Lucide.TrendingUp)\" class=\"h-4 w-4\" />\n </IconContent>\n <SparkContent>\n <Sparkline Data=\"@_viewData\" Class=\"h-10 w-full\" />\n </SparkContent>\n</KpiCard>"
35742
35870
  }
35743
35871
  ],
35744
35872
  "subComponents": {},
@@ -37713,7 +37841,7 @@
37713
37841
  },
37714
37842
  {
37715
37843
  "title": "Icons and Disabled Item",
37716
- "code": "<MegaMenu>\n <MegaMenuItem Label=\"Products\" Icon=\"Lucide.Box\">\n <MegaMenuPanel Columns=\"2\">\n <MegaMenuGroup Title=\"Design\">\n <MegaMenuLink Href=\"#\" Icon=\"Lucide.Component\" Title=\"Components\" Description=\"Pre-built UI components\" />\n <MegaMenuLink Href=\"#\" Icon=\"Lucide.LayoutTemplate\" Title=\"Templates\" Description=\"Starter page templates\" />\n </MegaMenuGroup>\n <MegaMenuGroup Title=\"Development\">\n <MegaMenuLink Href=\"#\" Icon=\"Lucide.Terminal\" Title=\"CLI\" Description=\"Command-line tooling\" />\n <MegaMenuLink Href=\"#\" Icon=\"Lucide.BookOpen\" Title=\"API Reference\" Description=\"Complete API docs\" Disabled=\"true\" />\n </MegaMenuGroup>\n </MegaMenuPanel>\n </MegaMenuItem>\n <MegaMenuItem Label=\"Docs\" Icon=\"Lucide.FileText\" Href=\"#\" />\n <MegaMenuItem Label=\"Archived\" Disabled=\"true\" />\n</MegaMenu>"
37844
+ "code": "<MegaMenu>\n <MegaMenuItem Label=\"Products\" Icon=\"LumeoIcons.Box\">\n <MegaMenuPanel Columns=\"2\">\n <MegaMenuGroup Title=\"Design\">\n <MegaMenuLink Href=\"#\" Icon=\"LumeoIcons.Component\" Title=\"Components\" Description=\"Pre-built UI components\" />\n <MegaMenuLink Href=\"#\" Icon=\"LumeoIcons.LayoutTemplate\" Title=\"Templates\" Description=\"Starter page templates\" />\n </MegaMenuGroup>\n <MegaMenuGroup Title=\"Development\">\n <MegaMenuLink Href=\"#\" Icon=\"LumeoIcons.Terminal\" Title=\"CLI\" Description=\"Command-line tooling\" />\n <MegaMenuLink Href=\"#\" Icon=\"LumeoIcons.BookOpen\" Title=\"API Reference\" Description=\"Complete API docs\" Disabled=\"true\" />\n </MegaMenuGroup>\n </MegaMenuPanel>\n </MegaMenuItem>\n <MegaMenuItem Label=\"Docs\" Icon=\"LumeoIcons.FileText\" Href=\"#\" />\n <MegaMenuItem Label=\"Archived\" Disabled=\"true\" />\n</MegaMenu>"
37717
37845
  },
37718
37846
  {
37719
37847
  "title": "Orientation — interactive",
@@ -37801,9 +37929,9 @@
37801
37929
  },
37802
37930
  {
37803
37931
  "name": "Icon",
37804
- "type": "SvgIcon?",
37932
+ "type": "IconSource?",
37805
37933
  "default": null,
37806
- "description": null,
37934
+ "description": "Optional leading icon. Supply an IconSource from a Lumeo.Icons pack (e.g. Lucide.Home) or from LumeoIcons.",
37807
37935
  "isCascading": false,
37808
37936
  "captureUnmatched": false,
37809
37937
  "isEditorRequired": false
@@ -37903,9 +38031,9 @@
37903
38031
  },
37904
38032
  {
37905
38033
  "name": "Icon",
37906
- "type": "SvgIcon?",
38034
+ "type": "IconSource?",
37907
38035
  "default": null,
37908
- "description": null,
38036
+ "description": "Optional leading icon. Supply an IconSource from a Lumeo.Icons pack (e.g. Lucide.Home) or from LumeoIcons.",
37909
38037
  "isCascading": false,
37910
38038
  "captureUnmatched": false,
37911
38039
  "isEditorRequired": false
@@ -41941,9 +42069,9 @@
41941
42069
  },
41942
42070
  {
41943
42071
  "name": "Icon",
41944
- "type": "Blazicons.SvgIcon?",
42072
+ "type": "Lumeo.IconSource?",
41945
42073
  "default": null,
41946
- "description": null,
42074
+ "description": "Optional leading icon shown beside the title. Supply an IconSource from a Lumeo.Icons pack (e.g. Lucide.TriangleAlert) or from LumeoIcons.",
41947
42075
  "isCascading": false,
41948
42076
  "captureUnmatched": false,
41949
42077
  "isEditorRequired": false
@@ -42207,6 +42335,15 @@
42207
42335
  "captureUnmatched": false,
42208
42336
  "isEditorRequired": false
42209
42337
  },
42338
+ {
42339
+ "name": "FocusOnOpen",
42340
+ "type": "bool",
42341
+ "default": "true",
42342
+ "description": "When true (default), focus moves into the popover surface on open so its @onkeydown handler receives Escape and keyboard users land inside the dialog (the Radix onOpenAutoFocus default). Set to false when the trigger is a typeable control that must KEEP focus while the popover opens (e.g. DatePicker's keyboard-input trigger) — the surface still positions, registers click-outside and saves/restores focus, it just doesn't steal focus from the trigger on open.",
42343
+ "isCascading": false,
42344
+ "captureUnmatched": false,
42345
+ "isEditorRequired": false
42346
+ },
42210
42347
  {
42211
42348
  "name": "Class",
42212
42349
  "type": "string?",
@@ -42958,7 +43095,7 @@
42958
43095
  },
42959
43096
  {
42960
43097
  "title": "With Leading and Trailing Content",
42961
- "code": "<PromptInput @bind-Value=\"_prompt\" OnSend=\"@HandleSend\" Placeholder=\"Message Claude…\">\n <LeadingContent>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Icon\" Class=\"h-7 w-7\">\n <Blazicon Svg=\"Lucide.Paperclip\" class=\"h-4 w-4\" />\n </Button>\n </LeadingContent>\n <TrailingContent>\n <span class=\"text-xs text-muted-foreground\">Shift+Enter for newline</span>\n </TrailingContent>\n</PromptInput>"
43098
+ "code": "<PromptInput @bind-Value=\"_prompt\" OnSend=\"@HandleSend\" Placeholder=\"Message Claude…\">\n <LeadingContent>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Icon\" Class=\"h-7 w-7\">\n <SvgGlyph Svg=\"@(Lucide.Paperclip)\" class=\"h-4 w-4\" />\n </Button>\n </LeadingContent>\n <TrailingContent>\n <span class=\"text-xs text-muted-foreground\">Shift+Enter for newline</span>\n </TrailingContent>\n</PromptInput>"
42962
43099
  }
42963
43100
  ],
42964
43101
  "subComponents": {},
@@ -45701,7 +45838,7 @@
45701
45838
  },
45702
45839
  {
45703
45840
  "title": "Sticky bottom tab bar (realistic example)",
45704
- "code": "<div class=\"relative h-64 border border-border/40 rounded-md overflow-hidden bg-background\">\n <div class=\"p-4 space-y-2 overflow-y-auto h-full pb-16\">\n <!-- scrollable content -->\n </div>\n <SafeArea Bottom=\"true\" Top=\"false\"\n Class=\"absolute bottom-0 left-0 right-0 bg-card border-t border-border/40\">\n <Flex Justify=\"around\" Class=\"py-3\">\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <Blazicon Svg=\"Lucide.Bell\" class=\"h-5 w-5\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <Blazicon Svg=\"Lucide.Search\" class=\"h-5 w-5\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <Blazicon Svg=\"Lucide.User\" class=\"h-5 w-5\" />\n </Button>\n </Flex>\n </SafeArea>\n</div>"
45841
+ "code": "<div class=\"relative h-64 border border-border/40 rounded-md overflow-hidden bg-background\">\n <div class=\"p-4 space-y-2 overflow-y-auto h-full pb-16\">\n <!-- scrollable content -->\n </div>\n <SafeArea Bottom=\"true\" Top=\"false\"\n Class=\"absolute bottom-0 left-0 right-0 bg-card border-t border-border/40\">\n <Flex Justify=\"around\" Class=\"py-3\">\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <SvgGlyph Svg=\"@(Lucide.Bell)\" class=\"h-5 w-5\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <SvgGlyph Svg=\"@(Lucide.Search)\" class=\"h-5 w-5\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\">\n <SvgGlyph Svg=\"@(Lucide.User)\" class=\"h-5 w-5\" />\n </Button>\n </Flex>\n </SafeArea>\n</div>"
45705
45842
  }
45706
45843
  ],
45707
45844
  "subComponents": {},
@@ -48409,11 +48546,11 @@
48409
48546
  "examples": [
48410
48547
  {
48411
48548
  "title": "Push (Default)",
48412
- "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><AvatarFallback>CN</AvatarFallback></Avatar>\n </SidebarFooter>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n </main>\n</SidebarProvider>"
48549
+ "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><SvgGlyph 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><AvatarFallback>CN</AvatarFallback></Avatar>\n </SidebarFooter>\n </SidebarComponent>\n <main class=\"flex-1 p-6\">\n <SidebarTrigger />\n </main>\n</SidebarProvider>"
48413
48550
  },
48414
48551
  {
48415
48552
  "title": "Overlay",
48416
- "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>"
48553
+ "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><SvgGlyph 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>"
48417
48554
  },
48418
48555
  {
48419
48556
  "title": "Side — interactive",
@@ -48421,7 +48558,7 @@
48421
48558
  },
48422
48559
  {
48423
48560
  "title": "Icon",
48424
- "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>"
48561
+ "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><SvgGlyph 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>"
48425
48562
  }
48426
48563
  ],
48427
48564
  "subComponents": {
@@ -53378,7 +53515,8 @@
53378
53515
  "values": [
53379
53516
  "Default",
53380
53517
  "Card",
53381
- "Pill"
53518
+ "Pill",
53519
+ "Underline"
53382
53520
  ],
53383
53521
  "description": null
53384
53522
  },
@@ -53419,7 +53557,7 @@
53419
53557
  },
53420
53558
  {
53421
53559
  "title": "Icon reveal",
53422
- "code": "<Tabs ActiveValue=\"members\" IconReveal Variant=\"Tabs.TabsVariant.Card\">\n <TabsList>\n <TabsTrigger Value=\"members\">\n <IconContent><Blazicon Svg=\"Lucide.Users\" class=\"h-4 w-4\" /></IconContent>\n Members\n </TabsTrigger>\n <TabsTrigger Value=\"credentials\">\n <IconContent><Blazicon Svg=\"Lucide.Award\" class=\"h-4 w-4\" /></IconContent>\n Shared Credentials\n </TabsTrigger>\n @* …more icon tabs… *@\n </TabsList>\n <TabsContent Value=\"members\">Team members and their roles.</TabsContent>\n <TabsContent Value=\"credentials\">Credentials shared with this team.</TabsContent>\n</Tabs>"
53560
+ "code": "<Tabs ActiveValue=\"members\" IconReveal Variant=\"Tabs.TabsVariant.Card\">\n <TabsList>\n <TabsTrigger Value=\"members\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Users)\" class=\"h-4 w-4\" /></IconContent>\n Members\n </TabsTrigger>\n <TabsTrigger Value=\"credentials\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Award)\" class=\"h-4 w-4\" /></IconContent>\n Shared Credentials\n </TabsTrigger>\n @* …more icon tabs… *@\n </TabsList>\n <TabsContent Value=\"members\">Team members and their roles.</TabsContent>\n <TabsContent Value=\"credentials\">Credentials shared with this team.</TabsContent>\n</Tabs>"
53423
53561
  },
53424
53562
  {
53425
53563
  "title": "Notifications",
@@ -54757,6 +54895,15 @@
54757
54895
  "captureUnmatched": false,
54758
54896
  "isEditorRequired": false
54759
54897
  },
54898
+ {
54899
+ "name": "IncludeSystem",
54900
+ "type": "bool",
54901
+ "default": "true",
54902
+ "description": "When true (default) the toggle walks the full three-way mode cycle (System → Dark → Light). Set to false for a binary Light ↔ Dark toggle: every click visibly changes the theme — the System step is skipped (useful in app shells where an \"invisible\" System→Dark click reads as a broken button when the OS is already dark).",
54903
+ "isCascading": false,
54904
+ "captureUnmatched": false,
54905
+ "isEditorRequired": false
54906
+ },
54760
54907
  {
54761
54908
  "name": "AdditionalAttributes",
54762
54909
  "type": "Dictionary<string, object>?",
@@ -54937,7 +55084,7 @@
54937
55084
  },
54938
55085
  {
54939
55086
  "title": "With Icons",
54940
- "code": "<Timeline>\n <TimelineItem Title=\"Account created\" Time=\"9:00 AM\">\n <IconContent><Blazicon Svg=\"Lucide.UserPlus\" class=\"h-4 w-4\" /></IconContent>\n </TimelineItem>\n <TimelineItem Title=\"Profile updated\" Time=\"10:30 AM\">\n <IconContent><Blazicon Svg=\"Lucide.Pencil\" class=\"h-4 w-4\" /></IconContent>\n </TimelineItem>\n</Timeline>"
55087
+ "code": "<Timeline>\n <TimelineItem Title=\"Account created\" Time=\"9:00 AM\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.UserPlus)\" class=\"h-4 w-4\" /></IconContent>\n </TimelineItem>\n <TimelineItem Title=\"Profile updated\" Time=\"10:30 AM\">\n <IconContent><SvgGlyph Svg=\"@(Lucide.Pencil)\" class=\"h-4 w-4\" /></IconContent>\n </TimelineItem>\n</Timeline>"
54941
55088
  },
54942
55089
  {
54943
55090
  "title": "Alternate Layout",
@@ -56091,19 +56238,19 @@
56091
56238
  "examples": [
56092
56239
  {
56093
56240
  "title": "Default",
56094
- "code": "<Toggle @bind-Pressed=\"_bold\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n</Toggle>\n\n@code {\n private bool _bold;\n}"
56241
+ "code": "<Toggle @bind-Pressed=\"_bold\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n</Toggle>\n\n@code {\n private bool _bold;\n}"
56095
56242
  },
56096
56243
  {
56097
56244
  "title": "Variants",
56098
- "code": "<Toggle @bind-Pressed=\"_pressed1\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n</Toggle>\n<Toggle Variant=\"Toggle.ToggleVariant.Outline\" @bind-Pressed=\"_pressed2\">\n <Blazicon Svg=\"Lucide.Italic\" class=\"h-4 w-4\" />\n</Toggle>"
56245
+ "code": "<Toggle @bind-Pressed=\"_pressed1\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n</Toggle>\n<Toggle Variant=\"Toggle.ToggleVariant.Outline\" @bind-Pressed=\"_pressed2\">\n <SvgGlyph Svg=\"@(Lucide.Italic)\" class=\"h-4 w-4\" />\n</Toggle>"
56099
56246
  },
56100
56247
  {
56101
56248
  "title": "Sizes",
56102
- "code": "<Toggle Size=\"Lumeo.Size.Sm\" @bind-Pressed=\"_sm\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-3 w-3\" />\n</Toggle>\n<Toggle @bind-Pressed=\"_md\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n</Toggle>\n<Toggle Size=\"Lumeo.Size.Lg\" @bind-Pressed=\"_lg\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-5 w-5\" />\n</Toggle>"
56249
+ "code": "<Toggle Size=\"Lumeo.Size.Sm\" @bind-Pressed=\"_sm\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-3 w-3\" />\n</Toggle>\n<Toggle @bind-Pressed=\"_md\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n</Toggle>\n<Toggle Size=\"Lumeo.Size.Lg\" @bind-Pressed=\"_lg\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-5 w-5\" />\n</Toggle>"
56103
56250
  },
56104
56251
  {
56105
56252
  "title": "With Text",
56106
- "code": "<Toggle @bind-Pressed=\"_pressed\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n Bold\n</Toggle>"
56253
+ "code": "<Toggle @bind-Pressed=\"_pressed\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n Bold\n</Toggle>"
56107
56254
  }
56108
56255
  ],
56109
56256
  "subComponents": {},
@@ -56277,15 +56424,15 @@
56277
56424
  "examples": [
56278
56425
  {
56279
56426
  "title": "Single Selection",
56280
- "code": "<ToggleGroup Type=\"ToggleGroup.ToggleGroupType.Single\">\n <ToggleGroupItem Value=\"bold\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"italic\">\n <Blazicon Svg=\"Lucide.Italic\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"underline\">\n <Blazicon Svg=\"Lucide.Underline\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n</ToggleGroup>"
56427
+ "code": "<ToggleGroup Type=\"ToggleGroup.ToggleGroupType.Single\">\n <ToggleGroupItem Value=\"bold\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"italic\">\n <SvgGlyph Svg=\"@(Lucide.Italic)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"underline\">\n <SvgGlyph Svg=\"@(Lucide.Underline)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n</ToggleGroup>"
56281
56428
  },
56282
56429
  {
56283
56430
  "title": "Multiple Selection",
56284
- "code": "<ToggleGroup Type=\"ToggleGroup.ToggleGroupType.Multiple\">\n <ToggleGroupItem Value=\"bold\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"italic\">\n <Blazicon Svg=\"Lucide.Italic\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"underline\">\n <Blazicon Svg=\"Lucide.Underline\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n</ToggleGroup>"
56431
+ "code": "<ToggleGroup Type=\"ToggleGroup.ToggleGroupType.Multiple\">\n <ToggleGroupItem Value=\"bold\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"italic\">\n <SvgGlyph Svg=\"@(Lucide.Italic)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"underline\">\n <SvgGlyph Svg=\"@(Lucide.Underline)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n</ToggleGroup>"
56285
56432
  },
56286
56433
  {
56287
56434
  "title": "Outline Variant",
56288
- "code": "<ToggleGroup Type=\"ToggleGroup.ToggleGroupType.Single\" Variant=\"ToggleGroup.ToggleGroupVariant.Outline\">\n <ToggleGroupItem Value=\"left\">\n <Blazicon Svg=\"Lucide.AlignLeft\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"center\">\n <Blazicon Svg=\"Lucide.AlignCenter\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"right\">\n <Blazicon Svg=\"Lucide.AlignRight\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n</ToggleGroup>"
56435
+ "code": "<ToggleGroup Type=\"ToggleGroup.ToggleGroupType.Single\" Variant=\"ToggleGroup.ToggleGroupVariant.Outline\">\n <ToggleGroupItem Value=\"left\">\n <SvgGlyph Svg=\"@(Lucide.AlignLeft)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"center\">\n <SvgGlyph Svg=\"@(Lucide.AlignCenter)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem Value=\"right\">\n <SvgGlyph Svg=\"@(Lucide.AlignRight)\" class=\"h-4 w-4\" />\n </ToggleGroupItem>\n</ToggleGroup>"
56289
56436
  },
56290
56437
  {
56291
56438
  "title": "Sizes",
@@ -56512,7 +56659,7 @@
56512
56659
  "examples": [
56513
56660
  {
56514
56661
  "title": "Basic Toolbar",
56515
- "code": "<Toolbar>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.Italic\" class=\"h-4 w-4\" />\n </Button>\n <ToolbarSeparator />\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <Blazicon Svg=\"Lucide.AlignLeft\" class=\"h-4 w-4\" />\n </Button>\n</Toolbar>"
56662
+ "code": "<Toolbar>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n </Button>\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.Italic)\" class=\"h-4 w-4\" />\n </Button>\n <ToolbarSeparator />\n <Button Variant=\"Button.ButtonVariant.Ghost\" Size=\"Button.ButtonSize.Sm\">\n <SvgGlyph Svg=\"@(Lucide.AlignLeft)\" class=\"h-4 w-4\" />\n </Button>\n</Toolbar>"
56516
56663
  },
56517
56664
  {
56518
56665
  "title": "With Spacer and Groups",
@@ -56892,7 +57039,7 @@
56892
57039
  },
56893
57040
  {
56894
57041
  "title": "With Icons",
56895
- "code": "<Tooltip>\n <TooltipTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Icon\">\n <Blazicon Svg=\"Lucide.Bold\" class=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bold</p>\n </TooltipContent>\n</Tooltip>\n\n<Tooltip>\n <TooltipTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Icon\">\n <Blazicon Svg=\"Lucide.Italic\" class=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Italic</p>\n </TooltipContent>\n</Tooltip>"
57042
+ "code": "<Tooltip>\n <TooltipTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Icon\">\n <SvgGlyph Svg=\"@(Lucide.Bold)\" class=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Bold</p>\n </TooltipContent>\n</Tooltip>\n\n<Tooltip>\n <TooltipTrigger>\n <Button Variant=\"Button.ButtonVariant.Outline\" Size=\"Button.ButtonSize.Icon\">\n <SvgGlyph Svg=\"@(Lucide.Italic)\" class=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Italic</p>\n </TooltipContent>\n</Tooltip>"
56896
57043
  },
56897
57044
  {
56898
57045
  "title": "Placement",
@@ -58391,7 +58538,7 @@
58391
58538
  "name": "Icon",
58392
58539
  "type": "RenderFragment?",
58393
58540
  "default": null,
58394
- "description": "Custom leading icon. Defaults to Lucide.Upload.",
58541
+ "description": "Custom leading icon. Defaults to LumeoIcons.Upload.",
58395
58542
  "isCascading": false,
58396
58543
  "captureUnmatched": false,
58397
58544
  "isEditorRequired": false
@@ -58454,7 +58601,7 @@
58454
58601
  },
58455
58602
  {
58456
58603
  "title": "Custom Label and Icon",
58457
- "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>"
58604
+ "code": "<UploadTrigger Variant=\"Button.ButtonVariant.Outline\" OnFilesSelected=\"@HandleFiles\">\n <Icon>\n <SvgGlyph 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 <SvgGlyph Svg=\"@(Lucide.Paperclip)\" class=\"h-4 w-4\" />\n </Icon>\n @* Empty ChildContent suppresses the default text label *@\n <ChildContent></ChildContent>\n</UploadTrigger>"
58458
58605
  }
58459
58606
  ],
58460
58607
  "subComponents": {},