@lumeo-ui/mcp-server 4.0.4 → 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.0.4",
4
- "generated": "2026-07-01T16:24:34.1127575Z",
3
+ "version": "4.1.0-preview.10",
4
+ "generated": "2026-07-05T09:59:54.2901968Z",
5
5
  "stats": {
6
6
  "componentCount": 164,
7
- "totalParameters": 4153,
7
+ "totalParameters": 4179,
8
8
  "totalEnums": 74,
9
9
  "totalRecords": 72,
10
10
  "serviceCount": 33,
@@ -1824,6 +1824,12 @@
1824
1824
  "default": "Lumeo.Side.Right",
1825
1825
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
1826
1826
  },
1827
+ {
1828
+ "name": "ShowCloseButton",
1829
+ "type": "bool?",
1830
+ "default": null,
1831
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
1832
+ },
1827
1833
  {
1828
1834
  "name": "PreventClose",
1829
1835
  "type": "bool",
@@ -1913,6 +1919,12 @@
1913
1919
  "default": "Lumeo.Side.Right",
1914
1920
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
1915
1921
  },
1922
+ {
1923
+ "name": "ShowCloseButton",
1924
+ "type": "bool?",
1925
+ "default": null,
1926
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
1927
+ },
1916
1928
  {
1917
1929
  "name": "PreventClose",
1918
1930
  "type": "bool",
@@ -3236,6 +3248,12 @@
3236
3248
  "default": null,
3237
3249
  "summary": "Suppress dismissal via backdrop click / Escape. Applies to: Dialog, Sheet, Drawer."
3238
3250
  },
3251
+ {
3252
+ "name": "ShowCloseButton",
3253
+ "type": "bool?",
3254
+ "default": null,
3255
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
3256
+ },
3239
3257
  {
3240
3258
  "name": "SheetSide",
3241
3259
  "type": "Lumeo.Side",
@@ -3579,6 +3597,12 @@
3579
3597
  "default": "Lumeo.Side.Right",
3580
3598
  "summary": "Edge the sheet slides in from. Applies to: Sheet."
3581
3599
  },
3600
+ {
3601
+ "name": "ShowCloseButton",
3602
+ "type": "bool?",
3603
+ "default": null,
3604
+ "summary": "Whether the shell renders its top-end close (X) button. null (default) keeps the legacy coupling — the X shows whenever PreventClose is false. Set true to force the X even on a modal overlay (PreventClose=true: backdrop/Escape stay disabled, but the X still offers an explicit way out — it routes through the same dismiss guard, so an OnBeforeClose veto still applies), or false to hide it and own the close chrome yourself. Applies to: Dialog, Sheet. (Drawer has no X by design — drag handle.)"
3605
+ },
3582
3606
  {
3583
3607
  "name": "PreventClose",
3584
3608
  "type": "bool",
@@ -5017,11 +5041,11 @@
5017
5041
  },
5018
5042
  {
5019
5043
  "title": "With Icon",
5020
- "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>"
5021
5045
  },
5022
5046
  {
5023
5047
  "title": "With Action",
5024
- "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>"
5025
5049
  }
5026
5050
  ],
5027
5051
  "subComponents": {},
@@ -5172,7 +5196,7 @@
5172
5196
  },
5173
5197
  {
5174
5198
  "title": "Unsaved Changes",
5175
- "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>"
5176
5200
  },
5177
5201
  {
5178
5202
  "title": "Loading Action",
@@ -5932,7 +5956,7 @@
5932
5956
  },
5933
5957
  {
5934
5958
  "title": "With Search",
5935
- "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>"
5936
5960
  },
5937
5961
  {
5938
5962
  "title": "Appearance toggles — interactive",
@@ -5940,7 +5964,7 @@
5940
5964
  },
5941
5965
  {
5942
5966
  "title": "Elevated (no border)",
5943
- "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>"
5944
5968
  }
5945
5969
  ],
5946
5970
  "subComponents": {},
@@ -6355,7 +6379,7 @@
6355
6379
  "name": "Shape",
6356
6380
  "type": "AvatarShape",
6357
6381
  "default": "AvatarShape.Circle",
6358
- "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.",
6359
6383
  "isCascading": false,
6360
6384
  "captureUnmatched": false,
6361
6385
  "isEditorRequired": false
@@ -6412,7 +6436,8 @@
6412
6436
  "name": "AvatarShape",
6413
6437
  "values": [
6414
6438
  "Circle",
6415
- "Square"
6439
+ "Square",
6440
+ "Themed"
6416
6441
  ],
6417
6442
  "description": null
6418
6443
  },
@@ -6443,7 +6468,7 @@
6443
6468
  },
6444
6469
  {
6445
6470
  "title": "Fallback Initials",
6446
- "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>"
6447
6472
  },
6448
6473
  {
6449
6474
  "title": "Sizes",
@@ -6755,7 +6780,7 @@
6755
6780
  },
6756
6781
  {
6757
6782
  "title": "Custom Content",
6758
- "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>"
6759
6784
  },
6760
6785
  {
6761
6786
  "title": "Interactive: Visibility Threshold",
@@ -6828,7 +6853,7 @@
6828
6853
  "name": "Pill",
6829
6854
  "type": "bool",
6830
6855
  "default": null,
6831
- "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).",
6832
6857
  "isCascading": false,
6833
6858
  "captureUnmatched": false,
6834
6859
  "isEditorRequired": false
@@ -7989,11 +8014,11 @@
7989
8014
  },
7990
8015
  {
7991
8016
  "title": "With Icons",
7992
- "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>"
7993
8018
  },
7994
8019
  {
7995
8020
  "title": "Custom Separator",
7996
- "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>"
7997
8022
  }
7998
8023
  ],
7999
8024
  "subComponents": {
@@ -8537,11 +8562,11 @@
8537
8562
  },
8538
8563
  {
8539
8564
  "title": "Sizes",
8540
- "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>"
8541
8566
  },
8542
8567
  {
8543
8568
  "title": "With Icon",
8544
- "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>"
8545
8570
  },
8546
8571
  {
8547
8572
  "title": "Disabled",
@@ -8630,7 +8655,7 @@
8630
8655
  "examples": [
8631
8656
  {
8632
8657
  "title": "Horizontal (default)",
8633
- "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>"
8634
8659
  },
8635
8660
  {
8636
8661
  "title": "Vertical",
@@ -9107,11 +9132,11 @@
9107
9132
  },
9108
9133
  {
9109
9134
  "title": "Card with Actions",
9110
- "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>"
9111
9136
  },
9112
9137
  {
9113
9138
  "title": "Horizontal Card",
9114
- "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>"
9115
9140
  },
9116
9141
  {
9117
9142
  "title": "With Form",
@@ -10488,7 +10513,25 @@
10488
10513
  "name": "Gradient",
10489
10514
  "type": "bool",
10490
10515
  "default": "true",
10491
- "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.",
10492
10535
  "isCascading": false,
10493
10536
  "captureUnmatched": false,
10494
10537
  "isEditorRequired": false
@@ -19815,7 +19858,7 @@
19815
19858
  "examples": [
19816
19859
  {
19817
19860
  "title": "Default",
19818
- "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>"
19819
19862
  },
19820
19863
  {
19821
19864
  "title": "Initially Open",
@@ -19823,7 +19866,7 @@
19823
19866
  },
19824
19867
  {
19825
19868
  "title": "Sidebar Section",
19826
- "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>"
19827
19870
  }
19828
19871
  ],
19829
19872
  "subComponents": {
@@ -21224,7 +21267,7 @@
21224
21267
  "examples": [
21225
21268
  {
21226
21269
  "title": "Default",
21227
- "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>"
21228
21271
  },
21229
21272
  {
21230
21273
  "title": "Compact",
@@ -21232,7 +21275,7 @@
21232
21275
  },
21233
21276
  {
21234
21277
  "title": "Navigation",
21235
- "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>"
21236
21279
  },
21237
21280
  {
21238
21281
  "title": "Disabled Items",
@@ -21378,6 +21421,15 @@
21378
21421
  "captureUnmatched": false,
21379
21422
  "isEditorRequired": false
21380
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
+ },
21381
21433
  {
21382
21434
  "name": "Class",
21383
21435
  "type": "string?",
@@ -21616,7 +21668,7 @@
21616
21668
  "Home"
21617
21669
  ],
21618
21670
  "keyboardInteractive": true,
21619
- "focusManaged": false
21671
+ "focusManaged": true
21620
21672
  },
21621
21673
  "parseFailed": false,
21622
21674
  "parseError": null
@@ -23275,7 +23327,7 @@
23275
23327
  "name": "Compact",
23276
23328
  "type": "bool",
23277
23329
  "default": null,
23278
- "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.",
23279
23331
  "isCascading": false,
23280
23332
  "captureUnmatched": false,
23281
23333
  "isEditorRequired": false
@@ -23401,7 +23453,7 @@
23401
23453
  "name": "VirtualItemSize",
23402
23454
  "type": "float",
23403
23455
  "default": "41f",
23404
- "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.",
23405
23457
  "isCascading": false,
23406
23458
  "captureUnmatched": false,
23407
23459
  "isEditorRequired": false
@@ -24528,6 +24580,24 @@
24528
24580
  "captureUnmatched": false,
24529
24581
  "isEditorRequired": false
24530
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
+ },
24531
24601
  {
24532
24602
  "name": "AdditionalAttributes",
24533
24603
  "type": "Dictionary<string, object>?",
@@ -24538,7 +24608,13 @@
24538
24608
  "isEditorRequired": false
24539
24609
  }
24540
24610
  ],
24541
- "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
+ ],
24542
24618
  "enums": [],
24543
24619
  "records": [],
24544
24620
  "gotchas": [],
@@ -25999,16 +26075,21 @@
25999
26075
  },
26000
26076
  "a11y": {
26001
26077
  "roles": [
26078
+ "checkbox",
26002
26079
  "columnheader",
26003
26080
  "dialog",
26004
26081
  "gridcell",
26082
+ "menu",
26083
+ "menuitem",
26005
26084
  "row",
26006
26085
  "status"
26007
26086
  ],
26008
26087
  "ariaAttributes": [
26088
+ "aria-checked",
26009
26089
  "aria-colcount",
26010
26090
  "aria-colindex",
26011
26091
  "aria-expanded",
26092
+ "aria-haspopup",
26012
26093
  "aria-hidden",
26013
26094
  "aria-label",
26014
26095
  "aria-level",
@@ -26828,6 +26909,15 @@
26828
26909
  "captureUnmatched": false,
26829
26910
  "isEditorRequired": false
26830
26911
  },
26912
+ {
26913
+ "name": "FullWidth",
26914
+ "type": "bool",
26915
+ "default": null,
26916
+ "description": "When true, the date picker expands to fill its container width — equivalent to FullWidth on a Button. Propagates w-full to the Popover wrapper and PopoverTrigger so the constraint reaches the rendered trigger element through the shrink-wrap chain.",
26917
+ "isCascading": false,
26918
+ "captureUnmatched": false,
26919
+ "isEditorRequired": false
26920
+ },
26831
26921
  {
26832
26922
  "name": "AutoFocus",
26833
26923
  "type": "bool",
@@ -27092,6 +27182,15 @@
27092
27182
  "captureUnmatched": false,
27093
27183
  "isEditorRequired": false
27094
27184
  },
27185
+ {
27186
+ "name": "FullWidth",
27187
+ "type": "bool",
27188
+ "default": null,
27189
+ "description": "When true, the date range picker expands to fill its container width. Forwarded directly to the inner DatePicker.",
27190
+ "isCascading": false,
27191
+ "captureUnmatched": false,
27192
+ "isEditorRequired": false
27193
+ },
27095
27194
  {
27096
27195
  "name": "FirstDayOfWeek",
27097
27196
  "type": "DayOfWeek?",
@@ -28086,7 +28185,7 @@
28086
28185
  },
28087
28186
  {
28088
28187
  "title": "Confirmation Dialog",
28089
- "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}"
28090
28189
  },
28091
28190
  {
28092
28191
  "title": "Prevent Close",
@@ -28192,6 +28291,15 @@
28192
28291
  "captureUnmatched": false,
28193
28292
  "isEditorRequired": false
28194
28293
  },
28294
+ {
28295
+ "name": "ShowCloseButton",
28296
+ "type": "bool?",
28297
+ "default": null,
28298
+ "description": "Whether the top-end close (X) button renders. null (default) keeps the legacy coupling — X shows whenever PreventClose is false. true forces the X even on a modal dialog (backdrop/Escape stay disabled; the X still routes through the dismiss guard so an OnBeforeClose veto applies); false hides it for fully custom close chrome. Mirrors OverlayOptions.ShowCloseButton for service dialogs.",
28299
+ "isCascading": false,
28300
+ "captureUnmatched": false,
28301
+ "isEditorRequired": false
28302
+ },
28195
28303
  {
28196
28304
  "name": "Size",
28197
28305
  "type": "DialogSize",
@@ -28601,7 +28709,7 @@
28601
28709
  "examples": [
28602
28710
  {
28603
28711
  "title": "LTR vs RTL",
28604
- "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}"
28605
28713
  },
28606
28714
  {
28607
28715
  "title": "Wrapping the whole app",
@@ -28699,11 +28807,11 @@
28699
28807
  "examples": [
28700
28808
  {
28701
28809
  "title": "Basic Dock",
28702
- "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>"
28703
28811
  },
28704
28812
  {
28705
28813
  "title": "Custom Scale & Radius",
28706
- "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>"
28707
28815
  }
28708
28816
  ],
28709
28817
  "subComponents": {},
@@ -28835,7 +28943,7 @@
28835
28943
  },
28836
28944
  {
28837
28945
  "title": "Filters Drawer",
28838
- "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>"
28839
28947
  },
28840
28948
  {
28841
28949
  "title": "Prevent Close",
@@ -30568,7 +30676,7 @@
30568
30676
  "examples": [
30569
30677
  {
30570
30678
  "title": "Basic Feature Grid",
30571
- "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>"
30572
30680
  },
30573
30681
  {
30574
30682
  "title": "Two Columns",
@@ -30576,7 +30684,7 @@
30576
30684
  },
30577
30685
  {
30578
30686
  "title": "Standalone Feature Item",
30579
- "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>"
30580
30688
  }
30581
30689
  ],
30582
30690
  "subComponents": {},
@@ -30674,7 +30782,7 @@
30674
30782
  "examples": [
30675
30783
  {
30676
30784
  "title": "Basic",
30677
- "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>"
30678
30786
  },
30679
30787
  {
30680
30788
  "title": "Without an Icon",
@@ -30682,11 +30790,11 @@
30682
30790
  },
30683
30791
  {
30684
30792
  "title": "With Extra Content",
30685
- "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>"
30686
30794
  },
30687
30795
  {
30688
30796
  "title": "In a Feature Grid",
30689
- "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>"
30690
30798
  }
30691
30799
  ],
30692
30800
  "subComponents": {},
@@ -32520,6 +32628,24 @@
32520
32628
  "captureUnmatched": false,
32521
32629
  "isEditorRequired": false
32522
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
+ },
32523
32649
  {
32524
32650
  "name": "OnTaskClick",
32525
32651
  "type": "EventCallback<GanttTask>",
@@ -33765,10 +33891,11 @@
33765
33891
  "name": "Icon",
33766
33892
  "category": "Utility",
33767
33893
  "subcategory": null,
33768
- "description": "Icon wrapper — renders Lucide icons via Blazicons.",
33894
+ "description": "Icon wrapper — renders the built-in LumeoIcons set (Lucide-derived) or any IconSource natively.",
33769
33895
  "nugetPackage": "Lumeo",
33770
33896
  "files": [
33771
- "UI/Icon/Icon.razor"
33897
+ "UI/Icon/Icon.razor",
33898
+ "UI/Icon/SvgGlyph.razor"
33772
33899
  ],
33773
33900
  "namespace": "Lumeo",
33774
33901
  "inheritsFrom": null,
@@ -33778,16 +33905,16 @@
33778
33905
  "name": "Name",
33779
33906
  "type": "string?",
33780
33907
  "default": null,
33781
- "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).",
33782
33909
  "isCascading": false,
33783
33910
  "captureUnmatched": false,
33784
33911
  "isEditorRequired": false
33785
33912
  },
33786
33913
  {
33787
33914
  "name": "Svg",
33788
- "type": "SvgIcon?",
33915
+ "type": "IconSource?",
33789
33916
  "default": null,
33790
- "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).",
33791
33918
  "isCascading": false,
33792
33919
  "captureUnmatched": false,
33793
33920
  "isEditorRequired": false
@@ -33801,6 +33928,15 @@
33801
33928
  "captureUnmatched": false,
33802
33929
  "isEditorRequired": false
33803
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
+ },
33804
33940
  {
33805
33941
  "name": "Title",
33806
33942
  "type": "string?",
@@ -33837,7 +33973,50 @@
33837
33973
  "--color-foreground"
33838
33974
  ],
33839
33975
  "examples": [],
33840
- "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
+ },
33841
34020
  "a11y": {
33842
34021
  "roles": [
33843
34022
  "img"
@@ -35687,7 +35866,7 @@
35687
35866
  },
35688
35867
  {
35689
35868
  "title": "With Icon and Sparkline",
35690
- "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>"
35691
35870
  }
35692
35871
  ],
35693
35872
  "subComponents": {},
@@ -36293,7 +36472,43 @@
36293
36472
  "name": "Cluster",
36294
36473
  "type": "bool",
36295
36474
  "default": null,
36296
- "description": "Marker clustering via leaflet.markercluster. CDN-loaded on first use; falls back to plain markers if the script fails to fetch.",
36475
+ "description": "Enable MapLibre GL native marker clustering. When true, markers are aggregated into circle bubbles via a GeoJSON cluster source — no additional script is fetched. Cluster bubbles are tinted with --lumeo-map-cluster-highlight (default amber) when at least one child marker is Highlighted. Fine-tune with ClusterRadius, ClusterMaxZoom, ClusterProperties, and ClusterColorExpression.",
36476
+ "isCascading": false,
36477
+ "captureUnmatched": false,
36478
+ "isEditorRequired": false
36479
+ },
36480
+ {
36481
+ "name": "ClusterProperties",
36482
+ "type": "Dictionary<string, object[]>?",
36483
+ "default": null,
36484
+ "description": "Additional MapLibre clusterProperties expressions merged into the GeoJSON cluster source alongside the built-in highlighted aggregator. Each entry maps a property name to a raw [operator, expression] array — e.g. { \"totalScore\", new object[] { \"+\", new object[] { \"get\", \"score\" } } }. Only meaningful when Cluster is true. Built-in keys (highlighted) win on collision.",
36485
+ "isCascading": false,
36486
+ "captureUnmatched": false,
36487
+ "isEditorRequired": false
36488
+ },
36489
+ {
36490
+ "name": "ClusterColorExpression",
36491
+ "type": "object[]?",
36492
+ "default": null,
36493
+ "description": "Replaces the default circle-color MapLibre paint expression on cluster circles. The default expression tints any bubble that contains a highlighted marker with --lumeo-map-cluster-highlight (default amber). Pass a raw MapLibre expression array to drive cluster color from a custom aggregated property instead.",
36494
+ "isCascading": false,
36495
+ "captureUnmatched": false,
36496
+ "isEditorRequired": false
36497
+ },
36498
+ {
36499
+ "name": "ClusterRadius",
36500
+ "type": "int",
36501
+ "default": "50",
36502
+ "description": "Target pixel radius of each cluster circle. Default is 50.",
36503
+ "isCascading": false,
36504
+ "captureUnmatched": false,
36505
+ "isEditorRequired": false
36506
+ },
36507
+ {
36508
+ "name": "ClusterMaxZoom",
36509
+ "type": "int",
36510
+ "default": "14",
36511
+ "description": "Zoom level at which markers fully emerge from their cluster. Default is 14. Lower values break clusters apart at coarser zoom levels.",
36297
36512
  "isCascading": false,
36298
36513
  "captureUnmatched": false,
36299
36514
  "isEditorRequired": false
@@ -36423,7 +36638,9 @@
36423
36638
  "description": "Cascading context passed to MapMarker + shape children so they can register themselves with the parent Map."
36424
36639
  }
36425
36640
  ],
36426
- "gotchas": [],
36641
+ "gotchas": [
36642
+ "MapLibre GL JS and its stylesheet are loaded at runtime from unpkg (CDN) the first time a Map mounts. For strict-CSP or air-gapped deployments, self-host them and set window.lumeoCdn = { mapLibreJs: '/your/maplibre-gl.js', mapLibreCss: '/your/maplibre-gl.css' } before the first Map renders, or run `lumeo deps install --lib maplibre` (CLI). See /docs/cdn-deps."
36643
+ ],
36427
36644
  "cssVars": [
36428
36645
  "--color-background",
36429
36646
  "--color-border",
@@ -36992,6 +37209,24 @@
36992
37209
  "captureUnmatched": false,
36993
37210
  "isEditorRequired": false
36994
37211
  },
37212
+ {
37213
+ "name": "ClusterExclude",
37214
+ "type": "bool",
37215
+ "default": null,
37216
+ "description": "When true and the parent Map has Cluster enabled, this marker is rendered as a DOM element rather than being absorbed into the cluster source. Use for permanently-visible markers (e.g. a depot, a selected result) that must never be hidden inside a cluster bubble. Default is false.",
37217
+ "isCascading": false,
37218
+ "captureUnmatched": false,
37219
+ "isEditorRequired": false
37220
+ },
37221
+ {
37222
+ "name": "Properties",
37223
+ "type": "Dictionary<string, object>?",
37224
+ "default": null,
37225
+ "description": "Arbitrary key-value properties merged into this marker's GeoJSON feature when Cluster is enabled. Drives custom ClusterProperties aggregation expressions (e.g. a score field summed across the cluster). Built-in keys (id, highlighted, color, hasClick) win on collision.",
37226
+ "isCascading": false,
37227
+ "captureUnmatched": false,
37228
+ "isEditorRequired": false
37229
+ },
36995
37230
  {
36996
37231
  "name": "MapCtx",
36997
37232
  "type": "Map.MapContext?",
@@ -37606,7 +37841,7 @@
37606
37841
  },
37607
37842
  {
37608
37843
  "title": "Icons and Disabled Item",
37609
- "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>"
37610
37845
  },
37611
37846
  {
37612
37847
  "title": "Orientation — interactive",
@@ -37694,9 +37929,9 @@
37694
37929
  },
37695
37930
  {
37696
37931
  "name": "Icon",
37697
- "type": "SvgIcon?",
37932
+ "type": "IconSource?",
37698
37933
  "default": null,
37699
- "description": null,
37934
+ "description": "Optional leading icon. Supply an IconSource from a Lumeo.Icons pack (e.g. Lucide.Home) or from LumeoIcons.",
37700
37935
  "isCascading": false,
37701
37936
  "captureUnmatched": false,
37702
37937
  "isEditorRequired": false
@@ -37796,9 +38031,9 @@
37796
38031
  },
37797
38032
  {
37798
38033
  "name": "Icon",
37799
- "type": "SvgIcon?",
38034
+ "type": "IconSource?",
37800
38035
  "default": null,
37801
- "description": null,
38036
+ "description": "Optional leading icon. Supply an IconSource from a Lumeo.Icons pack (e.g. Lucide.Home) or from LumeoIcons.",
37802
38037
  "isCascading": false,
37803
38038
  "captureUnmatched": false,
37804
38039
  "isEditorRequired": false
@@ -41297,7 +41532,9 @@
41297
41532
  }
41298
41533
  ],
41299
41534
  "records": [],
41300
- "gotchas": [],
41535
+ "gotchas": [
41536
+ "pdf.js and its worker are loaded at runtime from jsDelivr (CDN) the first time a PdfViewer mounts. For strict-CSP or air-gapped deployments, self-host them and set window.lumeoCdn = { pdfJs: '/your/pdf.min.mjs', pdfJsWorker: '/your/pdf.worker.min.mjs' } before the first PdfViewer renders, or run `lumeo deps install --lib pdfjs` (CLI). See /docs/cdn-deps."
41537
+ ],
41301
41538
  "cssVars": [
41302
41539
  "--color-accent",
41303
41540
  "--color-accent-foreground",
@@ -41832,9 +42069,9 @@
41832
42069
  },
41833
42070
  {
41834
42071
  "name": "Icon",
41835
- "type": "Blazicons.SvgIcon?",
42072
+ "type": "Lumeo.IconSource?",
41836
42073
  "default": null,
41837
- "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.",
41838
42075
  "isCascading": false,
41839
42076
  "captureUnmatched": false,
41840
42077
  "isEditorRequired": false
@@ -41979,6 +42216,15 @@
41979
42216
  "captureUnmatched": false,
41980
42217
  "isEditorRequired": false
41981
42218
  },
42219
+ {
42220
+ "name": "Class",
42221
+ "type": "string?",
42222
+ "default": null,
42223
+ "description": "Extra CSS classes for the popover ROOT wrapper div, e.g. w-full to un-shrink-wrap a full-width trigger contained inside. The base classes (relative inline-block outline-none) are always preserved.",
42224
+ "isCascading": false,
42225
+ "captureUnmatched": false,
42226
+ "isEditorRequired": false
42227
+ },
41982
42228
  {
41983
42229
  "name": "AdditionalAttributes",
41984
42230
  "type": "Dictionary<string, object>?",
@@ -42089,6 +42335,15 @@
42089
42335
  "captureUnmatched": false,
42090
42336
  "isEditorRequired": false
42091
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
+ },
42092
42347
  {
42093
42348
  "name": "Class",
42094
42349
  "type": "string?",
@@ -42840,7 +43095,7 @@
42840
43095
  },
42841
43096
  {
42842
43097
  "title": "With Leading and Trailing Content",
42843
- "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>"
42844
43099
  }
42845
43100
  ],
42846
43101
  "subComponents": {},
@@ -45583,7 +45838,7 @@
45583
45838
  },
45584
45839
  {
45585
45840
  "title": "Sticky bottom tab bar (realistic example)",
45586
- "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>"
45587
45842
  }
45588
45843
  ],
45589
45844
  "subComponents": {},
@@ -47676,6 +47931,15 @@
47676
47931
  "captureUnmatched": false,
47677
47932
  "isEditorRequired": false
47678
47933
  },
47934
+ {
47935
+ "name": "ShowCloseButton",
47936
+ "type": "bool?",
47937
+ "default": null,
47938
+ "description": "Whether the top-end close (X) button renders. null (default) keeps the legacy coupling — X shows whenever PreventClose is false. true forces the X on a modal sheet (backdrop/Escape stay disabled; the X routes through the dismiss guard); false hides it. Mirrors OverlayOptions.ShowCloseButton for service sheets.",
47939
+ "isCascading": false,
47940
+ "captureUnmatched": false,
47941
+ "isEditorRequired": false
47942
+ },
47679
47943
  {
47680
47944
  "name": "SwipeToClose",
47681
47945
  "type": "bool",
@@ -48282,11 +48546,11 @@
48282
48546
  "examples": [
48283
48547
  {
48284
48548
  "title": "Push (Default)",
48285
- "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>"
48286
48550
  },
48287
48551
  {
48288
48552
  "title": "Overlay",
48289
- "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>"
48290
48554
  },
48291
48555
  {
48292
48556
  "title": "Side — interactive",
@@ -48294,7 +48558,7 @@
48294
48558
  },
48295
48559
  {
48296
48560
  "title": "Icon",
48297
- "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>"
48298
48562
  }
48299
48563
  ],
48300
48564
  "subComponents": {
@@ -53251,7 +53515,8 @@
53251
53515
  "values": [
53252
53516
  "Default",
53253
53517
  "Card",
53254
- "Pill"
53518
+ "Pill",
53519
+ "Underline"
53255
53520
  ],
53256
53521
  "description": null
53257
53522
  },
@@ -53292,7 +53557,7 @@
53292
53557
  },
53293
53558
  {
53294
53559
  "title": "Icon reveal",
53295
- "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>"
53296
53561
  },
53297
53562
  {
53298
53563
  "title": "Notifications",
@@ -54630,6 +54895,15 @@
54630
54895
  "captureUnmatched": false,
54631
54896
  "isEditorRequired": false
54632
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
+ },
54633
54907
  {
54634
54908
  "name": "AdditionalAttributes",
54635
54909
  "type": "Dictionary<string, object>?",
@@ -54810,7 +55084,7 @@
54810
55084
  },
54811
55085
  {
54812
55086
  "title": "With Icons",
54813
- "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>"
54814
55088
  },
54815
55089
  {
54816
55090
  "title": "Alternate Layout",
@@ -55151,6 +55425,15 @@
55151
55425
  "captureUnmatched": false,
55152
55426
  "isEditorRequired": false
55153
55427
  },
55428
+ {
55429
+ "name": "FullWidth",
55430
+ "type": "bool",
55431
+ "default": null,
55432
+ "description": "When true, the time picker expands to fill its container width — equivalent to FullWidth on a Button. Propagates w-full to the Popover wrapper, PopoverTrigger, and the trigger button so the constraint reaches the rendered element through the shrink-wrap chain.",
55433
+ "isCascading": false,
55434
+ "captureUnmatched": false,
55435
+ "isEditorRequired": false
55436
+ },
55154
55437
  {
55155
55438
  "name": "AdditionalAttributes",
55156
55439
  "type": "Dictionary<string, object>?",
@@ -55955,19 +56238,19 @@
55955
56238
  "examples": [
55956
56239
  {
55957
56240
  "title": "Default",
55958
- "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}"
55959
56242
  },
55960
56243
  {
55961
56244
  "title": "Variants",
55962
- "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>"
55963
56246
  },
55964
56247
  {
55965
56248
  "title": "Sizes",
55966
- "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>"
55967
56250
  },
55968
56251
  {
55969
56252
  "title": "With Text",
55970
- "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>"
55971
56254
  }
55972
56255
  ],
55973
56256
  "subComponents": {},
@@ -56141,15 +56424,15 @@
56141
56424
  "examples": [
56142
56425
  {
56143
56426
  "title": "Single Selection",
56144
- "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>"
56145
56428
  },
56146
56429
  {
56147
56430
  "title": "Multiple Selection",
56148
- "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>"
56149
56432
  },
56150
56433
  {
56151
56434
  "title": "Outline Variant",
56152
- "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>"
56153
56436
  },
56154
56437
  {
56155
56438
  "title": "Sizes",
@@ -56376,7 +56659,7 @@
56376
56659
  "examples": [
56377
56660
  {
56378
56661
  "title": "Basic Toolbar",
56379
- "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>"
56380
56663
  },
56381
56664
  {
56382
56665
  "title": "With Spacer and Groups",
@@ -56756,7 +57039,7 @@
56756
57039
  },
56757
57040
  {
56758
57041
  "title": "With Icons",
56759
- "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>"
56760
57043
  },
56761
57044
  {
56762
57045
  "title": "Placement",
@@ -56800,6 +57083,15 @@
56800
57083
  "captureUnmatched": false,
56801
57084
  "isEditorRequired": false
56802
57085
  },
57086
+ {
57087
+ "name": "Align",
57088
+ "type": "Lumeo.Align",
57089
+ "default": "Lumeo.Align.Center",
57090
+ "description": null,
57091
+ "isCascading": false,
57092
+ "captureUnmatched": false,
57093
+ "isEditorRequired": false
57094
+ },
56803
57095
  {
56804
57096
  "name": "ShowArrow",
56805
57097
  "type": "bool",
@@ -58246,7 +58538,7 @@
58246
58538
  "name": "Icon",
58247
58539
  "type": "RenderFragment?",
58248
58540
  "default": null,
58249
- "description": "Custom leading icon. Defaults to Lucide.Upload.",
58541
+ "description": "Custom leading icon. Defaults to LumeoIcons.Upload.",
58250
58542
  "isCascading": false,
58251
58543
  "captureUnmatched": false,
58252
58544
  "isEditorRequired": false
@@ -58309,7 +58601,7 @@
58309
58601
  },
58310
58602
  {
58311
58603
  "title": "Custom Label and Icon",
58312
- "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>"
58313
58605
  }
58314
58606
  ],
58315
58607
  "subComponents": {},