diff --git a/.gitignore b/.gitignore index 203766b771..918c9a592b 100644 --- a/.gitignore +++ b/.gitignore @@ -273,3 +273,9 @@ Documentation/Blazorise.Docs.Server/wwwroot/img/blog/.DS_Store # Source Generation directory __SOURCEGENERATED__/ + +# Fody +/Source/Blazorise/FodyWeavers.xsd + +# "source generator" for api docs +Documentation/Blazorise.Docs/ApiDocs diff --git a/Blazorise.sln b/Blazorise.sln index 76a0ea6856..1b6e5041dc 100644 --- a/Blazorise.sln +++ b/Blazorise.sln @@ -157,6 +157,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazorise.Charts.Zoom", "So EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazorise.PdfViewer", "Source\Extensions\Blazorise.PdfViewer\Blazorise.PdfViewer.csproj", "{EAB7EC89-900A-4280-B24A-152B9DD2B503}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazorise.Weavers", "Source\SourceGenerators\Blazorise.Weavers\Blazorise.Weavers.csproj", "{BF5FFB8C-45AD-4875-BB01-2DA388890419}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazorise.Weavers.Fody", "Source\SourceGenerators\Blazorise.Weavers.Fody\Blazorise.Weavers.Fody.csproj", "{FFC4A285-1A16-4DD4-8B8C-141521E405B0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -411,6 +415,14 @@ Global {EAB7EC89-900A-4280-B24A-152B9DD2B503}.Debug|Any CPU.Build.0 = Debug|Any CPU {EAB7EC89-900A-4280-B24A-152B9DD2B503}.Release|Any CPU.ActiveCfg = Release|Any CPU {EAB7EC89-900A-4280-B24A-152B9DD2B503}.Release|Any CPU.Build.0 = Release|Any CPU + {BF5FFB8C-45AD-4875-BB01-2DA388890419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF5FFB8C-45AD-4875-BB01-2DA388890419}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF5FFB8C-45AD-4875-BB01-2DA388890419}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF5FFB8C-45AD-4875-BB01-2DA388890419}.Release|Any CPU.Build.0 = Release|Any CPU + {FFC4A285-1A16-4DD4-8B8C-141521E405B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFC4A285-1A16-4DD4-8B8C-141521E405B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFC4A285-1A16-4DD4-8B8C-141521E405B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFC4A285-1A16-4DD4-8B8C-141521E405B0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -481,6 +493,8 @@ Global {2B4FD79A-42E2-4B81-828B-0799E4744ADA} = {9731051E-0AA7-411E-A76A-987854F034DA} {045536EC-BD97-409D-BDF7-C148B7C5AAFC} = {9731051E-0AA7-411E-A76A-987854F034DA} {EAB7EC89-900A-4280-B24A-152B9DD2B503} = {9731051E-0AA7-411E-A76A-987854F034DA} + {BF5FFB8C-45AD-4875-BB01-2DA388890419} = {0538DB67-B4F3-4D00-B969-D3874A52E405} + {FFC4A285-1A16-4DD4-8B8C-141521E405B0} = {0538DB67-B4F3-4D00-B969-D3874A52E405} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {205B3EA4-470F-45DA-911E-346AF7D0A9A5} diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/ComponentsApiDocsGenerator.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/ComponentsApiDocsGenerator.cs new file mode 100644 index 0000000000..0eeef17817 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/ComponentsApiDocsGenerator.cs @@ -0,0 +1,310 @@ +#region Using directives +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.IO; +using System.Linq; +using System.Reflection; +using Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; +using Blazorise.Docs.Compiler.ApiDocsGenerator.Extensions; +using Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator; + +public class ComponentsApiDocsGenerator +{ + #region Members + + private Assembly aspNetCoreComponentsAssembly; + + private CSharpCompilation blazoriseCompilation; + + private XmlDocumentationProvider aspnetCoreDocumentationProvider; + + + private Assembly systemRuntimeAssembly; + private XmlDocumentationProvider systemRuntimeDocumentationProvider; + + + const string ShouldOnlyBeUsedInternally = "This method is intended for internal framework use only and should not be called directly by user code"; + + #endregion + + #region Constructors + + public ComponentsApiDocsGenerator() + { + var aspnetCoreAssemblyName = typeof( Microsoft.AspNetCore.Components.ParameterAttribute ).Assembly.GetName().Name; + aspNetCoreComponentsAssembly = AppDomain.CurrentDomain + .GetAssemblies() + .FirstOrDefault( a => a.GetName().Name == aspnetCoreAssemblyName ); + + systemRuntimeAssembly = AppDomain.CurrentDomain + .GetAssemblies() + .FirstOrDefault( a => a.GetName().Name == "System.Runtime" ); + + if ( systemRuntimeAssembly is not null ) + { + systemRuntimeDocumentationProvider = XmlDocumentationProvider.CreateFromFile( $"{Path.GetFullPath( "." )}/System.Runtime.xml" ); + } + if ( aspNetCoreComponentsAssembly != null ) + { + // Replace the .dll extension with .xml to get the documentation file path + string xmlDocumentationPath = Path.ChangeExtension( aspNetCoreComponentsAssembly.Location, ".xml" ); + aspnetCoreDocumentationProvider = XmlDocumentationProvider.CreateFromFile( xmlDocumentationPath ); + } + //get the blazorise compilation, it's needed for every extension. + blazoriseCompilation = GetCompilation( Paths.BlazoriseLibRoot, "Blazorise", true ); + } + + #endregion + + #region Methods + + public bool Execute() + { + if ( aspNetCoreComponentsAssembly is null ) + { + Console.WriteLine( $"Error generating ApiDocs. Cannot find ASP.NET Core assembly." ); + return false; + } + if ( blazoriseCompilation is null ) + { + Console.WriteLine( $"Error generating ApiDocs. Cannot find Blazorise assembly." ); + return false; + } + if ( !Directory.Exists( Paths.BlazoriseExtensionsRoot ) ) + { + Console.WriteLine( $"Directory for extensions does not exist: {Paths.BlazoriseExtensionsRoot}" ); + return false; + } + + //directories where to load the source code from one by one + string[] inputLocations = [Paths.BlazoriseLibRoot, .. Directory.GetDirectories( Paths.BlazoriseExtensionsRoot )]; + + foreach ( var inputLocation in inputLocations ) + { + string assemblyName = Path.GetFileName( inputLocation ); // Use directory name as assembly name + + CSharpCompilation compilation = inputLocation.EndsWith( "Blazorise" ) + ? blazoriseCompilation // the case for getting components from Blazorise + : GetCompilation( inputLocation, assemblyName ); + + INamespaceSymbol namespaceToSearch = FindNamespace( compilation, assemblyName ); // e.g. Blazorise.Animate + + IEnumerable componentInfo = GetComponentsInfo( compilation, namespaceToSearch ); + string sourceText = GenerateComponentsApiSource( compilation, [.. componentInfo], assemblyName ); + + if ( !Directory.Exists( Paths.ApiDocsPath ) ) // BlazoriseDocs.ApiDocs + Directory.CreateDirectory( Paths.ApiDocsPath ); + + string outputPath = Path.Join( Paths.ApiDocsPath, $"{assemblyName}.ApiDocs.cs" ); + + File.WriteAllText( outputPath, sourceText ); + Console.WriteLine( $"API Docs generated for {assemblyName} at {outputPath}. {sourceText.Length} characters." ); + } + + return true; + } + + //namespace are divided in chunks (Blazorise.Animate is under Blazorise...) + INamespaceSymbol FindNamespace( Compilation compilation, string namespaceName, INamespaceSymbol? namespaceToSearch = null ) + { + namespaceToSearch ??= compilation.GlobalNamespace + .GetNamespaceMembers() + .FirstOrDefault( ns => ns.Name == "Blazorise" ); + + if ( namespaceToSearch is null ) + throw new Exception( $"Unable to find namespace {namespaceName}." ); + + if ( namespaceToSearch.ToDisplayString() == namespaceName ) + return namespaceToSearch; + + foreach ( var childNamespace in namespaceToSearch.GetNamespaceMembers() ) + { + var result = FindNamespace( compilation, namespaceName, childNamespace ); + if ( result != null ) + return result; + } + + return null; + } + private CSharpCompilation GetCompilation( string inputLocation, string assemblyName, bool isBlazoriseAssembly = false ) + { + var sourceFiles = Directory.GetFiles( inputLocation, "*.cs", SearchOption.AllDirectories ); + + List references = + [ + MetadataReference.CreateFromFile( systemRuntimeAssembly.Location, documentation:systemRuntimeDocumentationProvider ), // Microsoft.AspNetCore.Components + MetadataReference.CreateFromFile( aspNetCoreComponentsAssembly.Location, documentation:aspnetCoreDocumentationProvider ), // Microsoft.AspNetCore.Components + ]; + if ( !isBlazoriseAssembly ) //get Blazorise assembly as reference (for extensions) + references.Add( blazoriseCompilation.ToMetadataReference() ); + + var syntaxTrees = sourceFiles.Select( file => CSharpSyntaxTree.ParseText( File.ReadAllText( file ) ) ); + + var compilation = CSharpCompilation.Create( + assemblyName, + syntaxTrees, + references.ToImmutableArray(), + new CSharpCompilationOptions( OutputKind.DynamicallyLinkedLibrary ) + ); + return compilation; + } + + private IEnumerable GetComponentsInfo( Compilation compilation, INamespaceSymbol namespaceToSearch ) + { + var baseComponentSymbol = compilation.GetTypeByMetadataName( "Blazorise.BaseComponent" ); + + foreach ( var type in namespaceToSearch.GetTypeMembers().OfType() ) + { + var (qualifiesForApiDocs, inheritsFromChain, skipParamCheck) = QualifiesForApiDocs( type, baseComponentSymbol ); + if ( !qualifiesForApiDocs ) + continue; + + // Retrieve properties + var parameterProperties = type.GetMembers() + .OfType() + .Where( p => + p.DeclaredAccessibility == Accessibility.Public && + ( skipParamCheck || p.GetAttributes().Any( attr => + attr.AttributeClass?.ToDisplayString() == "Microsoft.AspNetCore.Components.ParameterAttribute" ) ) && + p.OverriddenProperty == null ); + + // Retrieve methods + var publicMethods = type.GetMembers() + .OfType() + .Where( m => m.DeclaredAccessibility == Accessibility.Public && + !m.IsImplicitlyDeclared && + m.MethodKind == MethodKind.Ordinary && + m.OverriddenMethod == null ); + + yield return new ComponentInfo + ( + Type: type, + PublicMethods: publicMethods, + Properties: parameterProperties, + InheritsFromChain: inheritsFromChain + ); + } + } + + /// + /// get the chain of inheritance to the BaseComponent or ComponentBase + /// Only return true if implements IComponent (that is the case for all BaseComponent and ComponentBase) + /// + /// + /// + /// + private (bool qualifiesForApiDocs, IEnumerable, bool skipParamCheck) QualifiesForApiDocs( INamedTypeSymbol type, + INamedTypeSymbol baseType ) + { + + (bool continueProcessing, bool skipParamAndComponentCheck) = type switch + { + _ when type.TypeKind != TypeKind.Class || type.DeclaredAccessibility != Accessibility.Public => (false, false), + _ when type.Name.StartsWith( '_' ) => (false, false), + _ when type.Name.EndsWith( "Options" ) => (true, true), + _ when type.Name.EndsWith( "RouterTabsPageAttribute" ) => (true, true), + _ when !type.AllInterfaces.Any( i => i.Name == "IComponent" ) => (false, false), + _ => (true, false) + }; + + if ( !continueProcessing ) + return (false, [], false); + + List inheritsFromChain = []; + while ( type != null ) + { + type = type.BaseType; + if ( type?.Name.Split( "." ).Last() == "ComponentBase" //for this to work, the inheritance (:ComponentBase) must be specified in .cs file. + || SymbolEqualityComparer.Default.Equals( type, baseType ) + ) + return (true, inheritsFromChain, skipParamAndComponentCheck); + inheritsFromChain.Add( type ); + } + return (true, [], skipParamAndComponentCheck); + } + + private static string GenerateComponentsApiSource( Compilation compilation, ImmutableArray components, string assemblyName ) + { + IEnumerable componentsData = components.Select( component => + { + string componentType = component.Type.ToStringWithGenerics(); + string componentTypeName = StringHelpers.GetSimplifiedTypeName( component.Type ); + + var propertiesData = component.Properties.Select( property => + InfoExtractor.GetPropertyDetails( compilation, property ) ) + .Where( x => !x.Summary.Contains( ShouldOnlyBeUsedInternally ) ); + + var methodsData = component.PublicMethods.Select( InfoExtractor.GetMethodDetails ) + .Where( x => !x.Summary.Contains( ShouldOnlyBeUsedInternally ) ); + + ApiDocsForComponent comp = new( type: componentType, typeName: componentTypeName, + properties: propertiesData, methods: methodsData, + inheritsFromChain: component.InheritsFromChain.Select( type => type.ToStringWithGenerics() ) ); + + return comp; + } ); + + return + $$""" + using System; + using System.Collections.Generic; + using System.Collections.Generic; + using System.Linq.Expressions; + using System.Windows.Input; + using System.Threading.Tasks; + using Microsoft.AspNetCore.Components.Forms; + using Blazorise.Docs.Models.ApiDocsDtos; + using Blazorise.Charts; + + namespace Blazorise.Docs.ApiDocs; + + public class ComponentApiSource_ForNamespace_{{assemblyName.Replace( ".", "_" )}}:IComponentsApiDocsSource + { + public Dictionary Components { get; } = + new Dictionary + { + {{componentsData.Where( comp => comp is not null ).Select( comp => + { + return $$""" + { typeof({{comp.Type}}),new ApiDocsForComponent(typeof({{comp.Type}}), + "{{comp.TypeName}}", + new List{ + {{comp.Properties.Select( prop => + $""" + + new ("{prop.Name}",typeof({prop.Type}), "{prop.TypeName}",{prop.DefaultValueString}, "{prop.Summary}","{prop.Remarks}", {( prop.IsBlazoriseEnum ? "true" : "false" )}), + """ ).StringJoin( " " )}}}, + new List{ + {{comp.Methods.Select( method => + $$""" + + new ("{{method.Name}}","{{method.ReturnTypeName}}", "{{method.Summary}}" ,"{{method.Remarks}}", + new List{ + {{method.Parameters.Select( param => + $""" + new ("{param.Name}","{param.TypeName}" ), + """ + ).StringJoin( " " )}} }), + """ ).StringJoin( " " )}} + }, + new List{ + {{comp.InheritsFromChain.Select( x => $"typeof({x})" ).StringJoin( "," )}} + } + )}, + + """; + } + ).StringJoin( "\n" )}} + }; + } + """; + } + + #endregion +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponent.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponent.cs new file mode 100644 index 0000000000..2c9ca935b0 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponent.cs @@ -0,0 +1,32 @@ +#region Using directives +using System.Collections.Generic; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; + +/// +/// Easier to gather necessary info. +/// Almost keeps parity with Blazorise/Models/ApiDocsDtos.cs, changes here should be reflected there +/// +public class ApiDocsForComponent +{ + public ApiDocsForComponent( string type, string typeName, + IEnumerable properties, + IEnumerable methods, + IEnumerable inheritsFromChain ) + { + Type = type; + TypeName = typeName; + Properties = properties; + Methods = methods; + InheritsFromChain = inheritsFromChain; + } + + public string Type { get; } + + public string TypeName { get; } + public IEnumerable Properties { get; } + public IEnumerable Methods { get; } + + public IEnumerable InheritsFromChain { get; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentMethod.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentMethod.cs new file mode 100644 index 0000000000..4941076f27 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentMethod.cs @@ -0,0 +1,14 @@ +#region Using directives +using System.Collections.Generic; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; + +public class ApiDocsForComponentMethod +{ + public string Name { get; set; } + public string ReturnTypeName { get; set; } + public string Summary { get; set; } + public IEnumerable Parameters { get; set; } + public string Remarks { get; set; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentMethodParameter.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentMethodParameter.cs new file mode 100644 index 0000000000..14c7873450 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentMethodParameter.cs @@ -0,0 +1,10 @@ +#region Using directives +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; + +public class ApiDocsForComponentMethodParameter +{ + public string Name { get; set; } + public string TypeName { get; set; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentProperty.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentProperty.cs new file mode 100644 index 0000000000..2b5852b700 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ApiDocsForComponentProperty.cs @@ -0,0 +1,15 @@ +#region Using directives +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; + +public class ApiDocsForComponentProperty +{ + public string Name { get; set; } + public string Type { get; set; } + public string TypeName { get; set; } + public string DefaultValueString { get; set; } + public string Summary { get; set; } + public bool IsBlazoriseEnum { get; set; } + public string Remarks { get; set; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ComponentInfo.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ComponentInfo.cs new file mode 100644 index 0000000000..de26c805e3 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Dtos/ComponentInfo.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Microsoft.CodeAnalysis; + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; + +public record ComponentInfo( INamedTypeSymbol Type, IEnumerable Properties, IEnumerable PublicMethods, IEnumerable InheritsFromChain ) +{ + public INamedTypeSymbol Type { get; } = Type; + public IEnumerable Properties { get; } = Properties; + public IEnumerable PublicMethods { get; } = PublicMethods; + public IEnumerable InheritsFromChain { get; } = InheritsFromChain; +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Extensions/EnumerableExtensions.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Extensions/EnumerableExtensions.cs new file mode 100644 index 0000000000..0dbf6693a9 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Extensions/EnumerableExtensions.cs @@ -0,0 +1,31 @@ +#region Using directives +using System; +using System.Collections.Generic; +using Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Extensions; + +public static class EnumerableExtensions +{ + /// + /// This looks much cleaner then wrapping all the stuff in string.Join. (check the usage) + /// + /// + /// + /// + /// + public static string StringJoin( this IEnumerable source, string separator ) + { + try + { + return source == null ? "" : string.Join( separator, source ); + } + catch ( Exception e ) + { + + } + return ""; + + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Extensions/TypeSymbolExtensions.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Extensions/TypeSymbolExtensions.cs new file mode 100644 index 0000000000..f095a8bffb --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Extensions/TypeSymbolExtensions.cs @@ -0,0 +1,49 @@ +#region Using directives +using System; +using System.Linq; +using Microsoft.CodeAnalysis; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Extensions; + +public static class TypeSymbolExtensions +{ + public static string ToStringWithGenerics( this ITypeSymbol componentType ) + { + + if ( componentType == null ) + throw new ArgumentNullException( nameof( componentType ) ); + string nonGenericTypeName = componentType.ToDisplayString( SymbolDisplayFormat.FullyQualifiedFormat.WithGenericsOptions( SymbolDisplayGenericsOptions.None ) ); + if ( nonGenericTypeName.Split( "." ).Last() == "Dictionary" )//for dictionaries, otherwise it leaves with Dictionary<> + { + if (componentType is INamedTypeSymbol nt && nt.IsGenericType) + { + var typeArguments = nt.TypeArguments.Select( + x => + { + if ( x is INamedTypeSymbol t && t.IsGenericType ) + {//this is for the case where generic param (in dictionary) has generic param of TItem (which is not valid, thus replacing with ) + //spotted in DataGrid._BaseDataGridRowEdit<>.CellValues (of type Dictionary> => Dictionary>) + //maybe this can be also used for other generics of generic where TItem lives, but currently there is no such case, thus the limit for Dictionary. + return $"{t.ToDisplayString( SymbolDisplayFormat.FullyQualifiedFormat.WithGenericsOptions( SymbolDisplayGenericsOptions.None ) )}"; + } + //just a normal type like string (inside a Dictionary"; + } + } + + + return + nonGenericTypeName + + $"{( componentType is INamedTypeSymbol + { + IsGenericType: true, //EventCallback => EventCallback<> . Good for typeof(EventCallback<>) + NullableAnnotation: not NullableAnnotation.Annotated // such as int? is actually generic Nullable, but we want int?, not int<>? + } namedType + ? $"<{new string( ',', namedType.TypeParameters.Length - 1 )}>" // + : "" )}"; + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/DefaultValueHelper.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/DefaultValueHelper.cs new file mode 100644 index 0000000000..84e69bb36f --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/DefaultValueHelper.cs @@ -0,0 +1,190 @@ +#region Using directives +using System.Linq; +using System.Text.RegularExpressions; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; + +public static class DefaultValueHelper +{ + public static object GetDefaultValue( Compilation compilation, IPropertySymbol property ) + { + object defaultValue = null; + + // Getting default value of property + var syntaxReference = property.DeclaringSyntaxReferences.FirstOrDefault(); + + if ( syntaxReference?.GetSyntax() is PropertyDeclarationSyntax propertySyntax ) + { + // Try to get constant value from property initializer + Optional constantValue = TryToGetConstantValueFromPropertyInitializer( compilation, propertySyntax ); + if ( constantValue is not { HasValue: true, Value: not null } ) + { + // Try to get default value from getter + constantValue = TryToGetDefaultValueFromGetter( compilation, propertySyntax ); + } + + if ( constantValue is { HasValue: true, Value: not null } ) + { + defaultValue = constantValue.Value; + } + + + if ( property.Type.TypeKind == TypeKind.Enum && defaultValue is not string )// + { + defaultValue = HandleEnums( property, constantValue.Value ); + } + // e.g.: Animate.OptionsName global::Microsoft.Extensions.Options.Options.DefaultName + if ( defaultValue is string stringValue ) + { + defaultValue = stringValue.Replace( @"global::", "" ).Replace( $"{compilation.AssemblyName}.", "" ); + } + } + + defaultValue ??= GetDefaultValueOfType( property.Type ); + + // For other types, assign default values + // defaultValue ??= GetDefaultValueOfType( property.Type ); + return defaultValue; + } + + private static Optional TryToGetDefaultValueFromGetter( Compilation compilation, + PropertyDeclarationSyntax propertySyntax ) + { + // Access the getter accessor + var getter = propertySyntax.AccessorList?.Accessors.FirstOrDefault( a => a.Kind() == SyntaxKind.GetAccessorDeclaration ); + if ( getter == null ) + { + return new Optional(); + } + + ExpressionSyntax returnExpression = null; + + // Handle expression-bodied getter (e.g., get => color;) + if ( getter.ExpressionBody != null ) + { + returnExpression = getter.ExpressionBody.Expression; + } + else + { + // Handle block-bodied getter (e.g., get { return color; }) + var statements = getter.Body?.Statements; + if ( statements is { Count: 1 } ) + { + if ( statements.Value[0] is ReturnStatementSyntax returnStatement ) + { + returnExpression = returnStatement.Expression; + } + } + } + + // If the getter returns an identifier (likely the backing field) + if ( returnExpression is not IdentifierNameSyntax identifierName ) + { + return new Optional(); + } + + var fieldName = identifierName.Identifier.Text; + + // Find the field in the class with the matching name + if ( propertySyntax.Parent is not ClassDeclarationSyntax classDeclaration ) + { + return new Optional(); + } + + var fieldDeclaration = classDeclaration.Members + .OfType() + .FirstOrDefault( f => f.Declaration.Variables.Any( v => v.Identifier.Text == fieldName ) ); + + if ( fieldDeclaration == null ) + { + return new Optional(); + } + + VariableDeclaratorSyntax variableDeclarator = fieldDeclaration.Declaration.Variables.First( v => v.Identifier.Text == fieldName ); + if ( variableDeclarator.Initializer == null ) + { + return new Optional(); + } + + ExpressionSyntax fieldInitializerValue = variableDeclarator.Initializer.Value; + + object expressionString = QualifyExpressionSyntax( compilation, fieldInitializerValue ); + return new Optional( expressionString ); + } + + private static Optional TryToGetConstantValueFromPropertyInitializer( Compilation compilation, PropertyDeclarationSyntax propertySyntax ) + { + // Check if the property has an initializer (i.e., a default value assigned directly) + if ( propertySyntax.Initializer is null ) + { + // No initializer present + // public int MyProperty { get; set; } + return new Optional(); + } + // Get the expression representing the initializer value + ExpressionSyntax initializerValue = propertySyntax.Initializer.Value; + + object expressionString = QualifyExpressionSyntax( compilation, initializerValue ); + return new Optional( expressionString ); + } + + private static object QualifyExpressionSyntax( Compilation compilation, ExpressionSyntax expression ) + { + var semanticModel = compilation.GetSemanticModel( expression.SyntaxTree ); + + var rewriter = new FullyQualifiedNameRewriter( semanticModel ); + var qualifiedExpression = rewriter.Visit( expression ); + + if ( qualifiedExpression.ToString().Contains( "Blazorise" ) ) + {//this will process constants, but only Blazorise constants. Blazorise.Snackbar.Constants.DefaultIntervalBeforeClose will return value (5000), otherwise the constant name (int.MaxValue) + var symbolInfo = semanticModel.GetSymbolInfo( expression ); + if ( symbolInfo.Symbol is IFieldSymbol { IsConst: true } fieldSymbol ) + { + // If the symbol is a constant field, return its value + return fieldSymbol.ConstantValue; + } + } + + return qualifiedExpression.ToString(); + } + + private static string HandleEnums( IPropertySymbol property, object enumValue = null ) + { + // If we have an enum value provided, use it; otherwise, default to zero + object valueToFind = enumValue ?? 0; + + // Find the enum member corresponding to the value + IFieldSymbol enumMember = property.Type.GetMembers().OfType() + .FirstOrDefault( f => f.HasConstantValue && Equals( f.ConstantValue, valueToFind ) ); + + if ( enumMember != null ) + { + // Get the fully qualified name of the enum member + var enumMemberName = $"{property.Type}.{enumMember.ToDisplayString( SymbolDisplayFormat.FullyQualifiedFormat )}"; + + return enumMemberName; + } + // If no member with the value is found, use default expression + var defaultValue = $"default({property.Type.ToDisplayString( SymbolDisplayFormat.MinimallyQualifiedFormat )})"; + return defaultValue; + } + + private static string GetDefaultValueOfType( ITypeSymbol typeSymbol ) + { + return typeSymbol.SpecialType switch + { + SpecialType.System_Boolean => "false", + SpecialType.System_Char => "'\\0'", + SpecialType.System_SByte or SpecialType.System_Byte or SpecialType.System_Int16 or SpecialType.System_UInt16 or SpecialType.System_Int32 or SpecialType.System_UInt32 or SpecialType.System_Int64 or SpecialType.System_UInt64 or SpecialType.System_Decimal or SpecialType.System_Single or SpecialType.System_Double + => "0", + SpecialType.System_String => null, + _ => typeSymbol.IsReferenceType ? null : null + + //here is the way for handling the int?, Size?, etc : $"default({typeSymbol.ToDisplayString( SymbolDisplayFormat.MinimallyQualifiedFormat )})" + }; + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/ExtractorParts.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/ExtractorParts.cs new file mode 100644 index 0000000000..7b6db6b687 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/ExtractorParts.cs @@ -0,0 +1,30 @@ +#region Using directives +using System; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; + +public enum ExtractorParts +{ + Summary, Remarks +} + +public static class ExtractorPartsExtensions +{ + public static string GetXmlTag( this ExtractorParts part ) => + part switch + { + ExtractorParts.Summary => "summary", + ExtractorParts.Remarks => "remarks", + _ => throw new ArgumentOutOfRangeException( nameof( part ), $"No XML tag defined for {part}" ) + }; + + public static string GetDefault( this ExtractorParts part ) => + part switch + { + ExtractorParts.Summary => "No summary found", + ExtractorParts.Remarks => string.Empty, + _ => throw new ArgumentOutOfRangeException( nameof( part ), $"No default value defined for {part}" ) + }; + +} diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/FullyQualifiedNameRewriter.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/FullyQualifiedNameRewriter.cs new file mode 100644 index 0000000000..db6b3937ce --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/FullyQualifiedNameRewriter.cs @@ -0,0 +1,88 @@ +#region Using directives +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; + + +/// +/// Used for retrieving default values of properties +/// Takes what is next to a property or a field. +/// +/// +class FullyQualifiedNameRewriter( SemanticModel semanticModel ) : CSharpSyntaxRewriter +{ + public override SyntaxNode VisitInvocationExpression( InvocationExpressionSyntax node ) + { + // Visit the expression being invoked (e.g., TimeSpan.FromMinutes) + var newExpression = (ExpressionSyntax)Visit( node.Expression ); + + // Visit the argument list + var newArgumentList = (ArgumentListSyntax)Visit( node.ArgumentList ); + + // Reconstruct the invocation expression with the updated expression and arguments + var newInvocation = node.Update( newExpression, newArgumentList ); + + return newInvocation.WithTriviaFrom( node ); + } + + public override SyntaxNode VisitMemberAccessExpression( MemberAccessExpressionSyntax node ) + { + // Visit the expression and name components + var newExpression = (ExpressionSyntax)Visit( node.Expression ); + var newName = (SimpleNameSyntax)Visit( node.Name ); + + // Get the symbol for the member access expression + var symbol = semanticModel.GetSymbolInfo( node ).Symbol; + + if ( symbol != null ) + { + var fullyQualifiedName = symbol.ToDisplayString( + new SymbolDisplayFormat( + globalNamespaceStyle: SymbolDisplayGlobalNamespaceStyle.Included, + typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces, + memberOptions: SymbolDisplayMemberOptions.IncludeContainingType + ) + ); + // Parse the fully qualified name into an expression + var fullyQualifiedExpression = SyntaxFactory.ParseExpression( fullyQualifiedName ) + .WithTriviaFrom( node ); + + return fullyQualifiedExpression; + } + // Reconstruct the member access expression with updated components + var newMemberAccess = node.Update( newExpression, node.OperatorToken, newName ); + + return newMemberAccess.WithTriviaFrom( node ); + } + + public override SyntaxNode VisitIdentifierName( IdentifierNameSyntax node ) + { + var symbol = semanticModel.GetSymbolInfo( node ).Symbol; + + if ( symbol is INamedTypeSymbol typeSymbol ) + { + // Fully qualify type names + var fullyQualifiedName = typeSymbol.ToDisplayString( SymbolDisplayFormat.FullyQualifiedFormat ); + + var qualifiedName = SyntaxFactory.ParseName( fullyQualifiedName ) + .WithTriviaFrom( node ); + + return qualifiedName; + } + if ( symbol is IFieldSymbol or IPropertySymbol ) + { + // Fully qualify field or property names + var fullyQualifiedName = symbol.ToDisplayString( SymbolDisplayFormat.FullyQualifiedFormat ); + + var qualifiedExpression = SyntaxFactory.ParseExpression( fullyQualifiedName ) + .WithTriviaFrom( node ); + + return qualifiedExpression; + } + // Keep other identifiers (e.g., method names) as is + return node; + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/InfoExtractor.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/InfoExtractor.cs new file mode 100644 index 0000000000..34af8f5f2d --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/InfoExtractor.cs @@ -0,0 +1,72 @@ +#region Using directives +using System.Linq; +using Blazorise.Docs.Compiler.ApiDocsGenerator.Dtos; +using Blazorise.Docs.Compiler.ApiDocsGenerator.Extensions; +using Microsoft.CodeAnalysis; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; + +public class InfoExtractor +{ + public static ApiDocsForComponentProperty GetPropertyDetails( Compilation compilation, IPropertySymbol property ) + { + ApiDocsForComponentProperty propertyDetails = new(); + propertyDetails.Name = property.Name; + propertyDetails.Type = property.Type.TypeKind == TypeKind.TypeParameter//with generic arguments: + ? "object"//typeof(TValue) is invalid => typeof(object) + : property.Type.ToStringWithGenerics();//e.g.: typeof(EventCallback) => typeof(EventCallback<>) + propertyDetails.TypeName = StringHelpers.GetSimplifiedTypeName( property.Type ); + propertyDetails.Summary = StringHelpers.ExtractFromXmlComment( property, ExtractorParts.Summary ); + propertyDetails.Remarks = StringHelpers.ExtractFromXmlComment( property, ExtractorParts.Remarks ); + propertyDetails.IsBlazoriseEnum = property.Type.TypeKind == TypeKind.Enum && property.Type.ToDisplayString().StartsWith( "Blazorise" ); + + // Determine default value + object defaultValue = DefaultValueHelper.GetDefaultValue( compilation, property ); + + + string defaultValueString = defaultValue is null + ? "null" + : property.Type.Name switch + { + "String" => $"""" + $$""" + {defaultValue} + """ + """", + _ => StringHelpers.FormatProperly( defaultValue ) + }; + string defaultValueAsString = property.Type.Name == "String" ? defaultValueString : $"""" + $$""" + {StringHelpers.TypeToStringDetails( defaultValueString, propertyDetails.Type )} + """ + """"; + propertyDetails.DefaultValueString = defaultValueAsString; + return propertyDetails; + } + + public static ApiDocsForComponentMethod GetMethodDetails( IMethodSymbol method ) + { + var methodName = method.Name; + var returnTypeName = method.ReturnType.ToDisplayString( SymbolDisplayFormat.MinimallyQualifiedFormat ); + var summary = StringHelpers.ExtractFromXmlComment( method, ExtractorParts.Summary ); + var remarks = StringHelpers.ExtractFromXmlComment( method, ExtractorParts.Remarks ); + + var parameters = method.Parameters.Select( param => new ApiDocsForComponentMethodParameter + { + Name = param.Name, + TypeName = param.Type.ToDisplayString( SymbolDisplayFormat.MinimallyQualifiedFormat ), + } ); + + var apiMethod = new ApiDocsForComponentMethod() + { + Name = methodName, + ReturnTypeName = returnTypeName, + Summary = summary, + Remarks = remarks, + Parameters = parameters, + }; + + return apiMethod; + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/StringHelpers.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/StringHelpers.cs new file mode 100644 index 0000000000..a76b401444 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/StringHelpers.cs @@ -0,0 +1,196 @@ +#region Using directives +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text.RegularExpressions; +using Microsoft.CodeAnalysis; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; + +/// +/// Methods that are too small to have their own file +/// +public class StringHelpers +{ + /// + /// Mainly to ensure doubles has invariant culture. + /// + /// + /// + public static string FormatProperly( object value ) + { + string defaultValue; + + if ( value is bool boolValue ) + { + // Explicitly format bool as lowercase true/false + defaultValue = boolValue.ToString().ToLowerInvariant(); + return defaultValue; + } + if ( value is IFormattable formattable )//ensures doubles has invariant culture. + { + defaultValue = formattable.ToString( null, CultureInfo.InvariantCulture ); + } + else + { + defaultValue = value.ToString(); + } + return defaultValue; + } + + const string ToReplace = "global::"; + const string ToReplace2 = "Blazorise."; + + public static string TypeToStringDetails( string value, string propertyDetailsType ) + { + + if ( value.StartsWith( ToReplace ) ) + { + value = value.Substring( ToReplace.Length ); + } + + if ( value.Contains( ToReplace2 ) ) + { + string propertyDetailsTypeNameWithDot = propertyDetailsType.Replace( ToReplace, "" ) + ".";//From Color.Default => Default + + if ( value.Contains( propertyDetailsTypeNameWithDot ) ) + { + value = value.Substring( propertyDetailsTypeNameWithDot.Length ); + return value; + } + } + + if ( value.StartsWith( ToReplace2 ) ) + { + string propertyDetailsTypeNameWithDot = propertyDetailsType + ".";//From Color.Default => Default + if ( value.StartsWith( propertyDetailsTypeNameWithDot ) ) + value = value.Substring( propertyDetailsTypeNameWithDot.Length ); + value = value.Substring( ToReplace2.Length ); + } + return value; + } + + internal static string ExtractFromXmlComment( ISymbol iSymbol, ExtractorParts part ) + { + string xmlComment = iSymbol.GetDocumentationCommentXml(); + + if ( string.IsNullOrWhiteSpace( xmlComment ) ) + return "No documentation available - no XML comment"; + + // Check if the XML contains + if ( xmlComment.Contains( "(.*?)", RegexOptions.Singleline ); + if ( !match.Success ) + return part.GetDefault(); + var text = match.Groups[1].Value.Trim(); + + XmlCommentToHtmlConverter converter = new(); + text = converter.Convert( text ); + return text; + } + + private static string GetXmlCommentForInheritdocInterfaces( ISymbol iSymbol, ExtractorParts part ) + { + foreach ( var interfaceSymbol in iSymbol.ContainingType.AllInterfaces ) + { + // Find if the interface has a member matching this symbol + var matchingMember = interfaceSymbol.GetMembers() + .FirstOrDefault( member => member.Name == iSymbol.Name ); + + if ( matchingMember != null ) + { + return ExtractFromXmlComment( matchingMember, part ); + } + } + + return "No documentation available - no XML comment from "; + } + + //just making sure bool is bool and not Boolean... + internal static string GetSimplifiedTypeName( ITypeSymbol typeSymbol ) + { + // Mapping for built-in C# types + + + // Handle nullable types + if ( typeSymbol.NullableAnnotation == NullableAnnotation.Annotated && typeSymbol is INamedTypeSymbol namedType ) + { + return $"{GetSimplifiedTypeName( namedType.TypeArguments[0] )}?"; + } + + // Handle generic types + if ( typeSymbol is INamedTypeSymbol genericType && genericType.IsGenericType + // && + // genericType.ConstructedFrom.Name != "System.Collections.Generic.Dictionary`2" + ) + { + var baseName = typeMap.ContainsKey( genericType.Name ) ? typeMap[genericType.Name] : genericType.Name; + var typeArguments = string.Join( ", ", genericType.TypeArguments.Select( GetSimplifiedTypeName ) ); + return $"{baseName}<{typeArguments}>"; + } + + // Handle arrays + if ( typeSymbol is IArrayTypeSymbol arrayType ) + { + return $"{GetSimplifiedTypeName( arrayType.ElementType )}[]"; + } + + // Use the mapped name if available, otherwise fallback to the simple name + return typeMap.TryGetValue( typeSymbol.Name, out var simplifiedName ) ? simplifiedName : typeSymbol.Name; + } + + static readonly Dictionary typeMap = new() + { + { + "Boolean", "bool" + }, + { + "Byte", "byte" + }, + { + "SByte", "sbyte" + }, + { + "Int16", "short" + }, + { + "UInt16", "ushort" + }, + { + "Int32", "int" + }, + { + "UInt32", "uint" + }, + { + "Int64", "long" + }, + { + "UInt64", "ulong" + }, + { + "Single", "float" + }, + { + "Double", "double" + }, + { + "Decimal", "decimal" + }, + { + "String", "string" + }, + { + "Char", "char" + }, + { + "Object", "object" + } + }; +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/XmlCommentToHtmlConverter.cs b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/XmlCommentToHtmlConverter.cs new file mode 100644 index 0000000000..fee4ed8d55 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/Helpers/XmlCommentToHtmlConverter.cs @@ -0,0 +1,110 @@ +#region Using directives +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml.Linq; +#endregion + +namespace Blazorise.Docs.Compiler.ApiDocsGenerator.Helpers; + +public class XmlCommentToHtmlConverter +{ + readonly string[] prefixes = ["T", "P", "F", "E", "M", "N"]; + + public string Convert( string xmlComment ) + { + if ( string.IsNullOrWhiteSpace( xmlComment ) ) + return string.Empty; + + var sb = new StringBuilder(); + + try + { + // Parse the XML comment + var xml = XElement.Parse( $"{xmlComment}" ); + + // Process each element and convert to HTML + foreach ( var node in xml.Nodes() ) + { + sb.Append( ProcessNode( node ) ); + } + } + catch + { + // Return the raw XML comment if parsing fails + return xmlComment; + } + + string text = sb + .Replace( "\n", " " ) + .Replace( "\r", "" ) + .Replace( "\"", "\\\"" ) //escape quotes + .ToString(); + return text; + } + + private string ProcessNode( XNode node ) => node switch + { + XElement element => ProcessElement( element ), + XText text => text.Value, + _ => string.Empty + }; + + private string ProcessElement( XElement element ) => element.Name.LocalName switch + { + "para" => $"

{ProcessChildNodes( element )}

", + "see" => ProcessSee( element ), + "seealso" => ProcessSeeAlso( element ), + "code" => $"
{element.Value}
", + "c" => $"{element.Value}", + _ => ProcessChildNodes( element )// For unsupported tags, process their children + }; + + private string ProcessSee( XElement element ) + { + var href = element.Attribute( "href" )?.Value; + + if ( !string.IsNullOrEmpty( href ) ) + { + var content = ( element.FirstNode as XText )?.Value; + + return $"{content ?? href}"; + } + + var cref = element.Attribute( "cref" )?.Value; + + return cref != null + ? $"{EditCref( cref )}" + : string.Empty; + } + + private string ProcessSeeAlso( XElement element ) + { + var href = element.Attribute( "href" )?.Value; + return href != null + ? $"{href}" + : string.Empty; + } + + private string ProcessChildNodes( XElement element ) + { + var sb = new StringBuilder(); + foreach ( var child in element.Nodes() ) + { + sb.Append( ProcessNode( child ) ); + } + return sb.ToString(); + } + + private string EditCref( string cref ) + { + // Remove common prefixes like "T:", "P:", "M:", "E:", etc., and "Blazorise." + var edited = prefixes.Any( p => cref.StartsWith( $"{p}:" ) ) + ? cref.Substring( 2 ) + : cref; + + edited = Regex.Replace( edited, @"`\d+", string.Empty );//replaces `1 (type params) + edited = Regex.Replace( edited, "!:", string.Empty );//replace !: (not-reference type) + return edited.Replace( "Blazorise.", string.Empty ); + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/README.md b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/README.md new file mode 100644 index 0000000000..28cd45f156 --- /dev/null +++ b/Documentation/Blazorise.Docs.Compiler/ApiDocsGenerator/README.md @@ -0,0 +1,98 @@ +# ApiDocsGenerator + +## Which Component Does It Pick Up? + +Either one of these cases: + +- The component is a descendant of `Blazorise.BaseComponent`. +- The component is a descendant of `ComponentBase`. +- The component implements `IComponent`. + +### Problem with Razor Files + +- It doesn't pick up the parameters from Razor files. +- For inheritance to be "read," it needs to be explicitly specified inside the `.cs` file: + - This is especially true for `ComponentBase`, which is inherited by default when creating a `.razor` file. + - You need to explicitly declare `SomeComponent : ComponentBase`. + +This limitation can be overcome by scanning through the generated files (`SomeComponent.razor.cs`). + +## System.Runtime + +Retrieving XML comments from the `System.Runtime` assembly can be problematic, particularly for the `IDisposable` interface. + +When accessing `AllInterfaces` for a class, the `IDisposable` interface is often represented as an `ErrorTypeSymbol`. This means it is not treated as a "normal" reference, and its members, such as the `Dispose` method, are not recognized. As a result, XML comments for `IDisposable` cannot be resolved. + +This issue is likely caused by the implicit nature of the reference to `System.Runtime.dll` in modern .NET projects, where it is part of the shared framework and not explicitly included as a standalone reference. + + +> Under construction + +Things I don't want to miss documenting: + +- how to run/test the source generator (sg) + - dotnet bulild vs launchSettings + - file watch to run dotnet build + - The emitted output (inside the proj that reference the sg under Dependencies -> .NET -> Source Generators) + - On exceptions, it removes the files, no logs. All dies. (haven't explored fully yet) +- PrivateAssets="all" (will not be part of nuget package) +- Why logging is difficult, custom logging +- What it can do.. + + + +how to debug it + +```json +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "Generators": { + "commandName": "DebugRoslynComponent", + "targetProject": "../../Blazorise/Blazorise.csproj" + } + } +} +``` + +## Default Values + +The source generator (SG) is designed to pick up almost any default value. + +```csharp +[Parameter] public string SomeValue { get; set; } = "some string value"; +``` + +It also handles cases where the default value is not a constant. + +```csharp +[Parameter] public TimeSpan Interval { get; set; } = TimeSpan.FromSeconds(10); +``` + +Additionally, it works when the default value is set by a backing field. + +```csharp +private string _backingField = "backed value"; +[Parameter] public string BackedValue +{ + get => _backingField; + set => _backingField = value; +} +``` + +Moreover, it preserves the exact expression of default values, not just the computed result. + +```csharp +[Parameter] public int ComplexValue { get; set; } = 20 * 200; // Output: "20 * 200", not "4000" +``` + +## Where does SG see? + +If I add the sg project in docs project (that referenes Blazorise). It can pickup the types, but cannot "read" +the xml comment. + +> SyntaxTree is not part of the compilation (Parameter 'syntaxTree') + +https://stackoverflow.com/a/69307775/1154773 + +https://github.com/dotnet/roslyn/discussions/50874 \ No newline at end of file diff --git a/Documentation/Blazorise.Docs.Compiler/Blazorise.Docs.Compiler.csproj b/Documentation/Blazorise.Docs.Compiler/Blazorise.Docs.Compiler.csproj index 80e64ac749..c72c543860 100644 --- a/Documentation/Blazorise.Docs.Compiler/Blazorise.Docs.Compiler.csproj +++ b/Documentation/Blazorise.Docs.Compiler/Blazorise.Docs.Compiler.csproj @@ -8,6 +8,21 @@ + + + + + + + + + + + + + + + diff --git a/Documentation/Blazorise.Docs.Compiler/Paths.cs b/Documentation/Blazorise.Docs.Compiler/Paths.cs index d356684e09..a2f714fc57 100644 --- a/Documentation/Blazorise.Docs.Compiler/Paths.cs +++ b/Documentation/Blazorise.Docs.Compiler/Paths.cs @@ -25,6 +25,10 @@ public static string RootDirPath } } + + public static string BlazoriseLibRoot => Path.Combine( RootDirPath, "..", "Source", "Blazorise" ); + public static string BlazoriseExtensionsRoot => Path.Combine( RootDirPath, "..", "Source", "Extensions" ); + public static string ApiDocsPath => Path.Join( DirPath(), "ApiDocs" ); public static string DirPath() => Directory.EnumerateDirectories( RootDirPath, $"Blazorise.Docs" ).FirstOrDefault(); public static string DocsStringSnippetsDirPath() => Path.Join( DirPath(), "Models" ); diff --git a/Documentation/Blazorise.Docs.Compiler/Program.cs b/Documentation/Blazorise.Docs.Compiler/Program.cs index fd67ca5876..5d4088adff 100644 --- a/Documentation/Blazorise.Docs.Compiler/Program.cs +++ b/Documentation/Blazorise.Docs.Compiler/Program.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using Blazorise.Docs.Compiler.ApiDocsGenerator; namespace Blazorise.Docs.Compiler; @@ -12,9 +13,9 @@ static int Main() var blogMarkdownResult = new BlogMarkdown().Execute(); var codeSnippetResult = new CodeSnippets().Execute(); var codeExamplesResult = new CodeExamplesMarkup().Execute(); + var apiDocsGenerator = new ComponentsApiDocsGenerator().Execute(); Console.WriteLine( $"Blazorise.Docs.Compiler completed in {stopWatch.ElapsedMilliseconds} milliseconds." ); - - return blogMarkdownResult && codeSnippetResult && codeExamplesResult ? 0 : 1; + return blogMarkdownResult && codeSnippetResult && codeExamplesResult && apiDocsGenerator ? 0 : 1; } } \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Blazorise.Docs.csproj b/Documentation/Blazorise.Docs/Blazorise.Docs.csproj index 7b364bec0a..96332d13a7 100644 --- a/Documentation/Blazorise.Docs/Blazorise.Docs.csproj +++ b/Documentation/Blazorise.Docs/Blazorise.Docs.csproj @@ -2,6 +2,10 @@ + + latest + + diff --git a/Documentation/Blazorise.Docs/Components/ComponentApiDocs.razor b/Documentation/Blazorise.Docs/Components/ComponentApiDocs.razor new file mode 100644 index 0000000000..31e5738028 --- /dev/null +++ b/Documentation/Blazorise.Docs/Components/ComponentApiDocs.razor @@ -0,0 +1,56 @@ +@using Blazorise.Docs.Models.ApiDocsDtos + + API + + +@if (hasComponentTypes) +{ + + + + +} + +@if (apiDocsForComponentsMethods.Any()) +{ + + Methods + + + @foreach (var apiDocsForComponent in apiDocsForComponentsMethods) + { + + @foreach (var method in apiDocsForComponent.Methods.Where(m => !SkipMethods.Any(n => n == m.Name))) + { + $"{x.TypeName} {x.Name}")))"> + @((MarkupString)method.Summary) + + + } + + } +} + +@code { + string[] SkipMethods = new[] { "Dispose", "DisposeAsync", "Equals", "GetHashCode", "GetType", "MemberwiseClone", "ToString" }; + + [Parameter, EditorRequired] public List ComponentTypes { get; set; } = []; + + IReadOnlyList apiDocsForComponents; + List apiDocsForComponentsMethods; + bool multipleComponentTypes; + bool hasComponentTypes; + + protected override void OnInitialized() + { + apiDocsForComponents = ComponentTypes.Select(x => ComponentsApiDocsSource.Instance.Components.GetValueOrDefault(x)).Where(x => x is not null).ToList(); + hasComponentTypes = ComponentTypes.Any(); + multipleComponentTypes = ComponentTypes.Count > 1; + apiDocsForComponentsMethods = apiDocsForComponents.Where(x => x.Methods.Any()).ToList(); + } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Components/ComponentApiDocsProperty.razor b/Documentation/Blazorise.Docs/Components/ComponentApiDocsProperty.razor new file mode 100644 index 0000000000..ea9c01ee20 --- /dev/null +++ b/Documentation/Blazorise.Docs/Components/ComponentApiDocsProperty.razor @@ -0,0 +1,61 @@ +@using Blazorise.Docs.Models.ApiDocsDtos + +@if ( filteredApiDocsForComponents.Any() ) +{ + + @(PropertyType == PropertyTypes.Events + ? "Events" + : "Parameters") + +} + +@foreach ( var apiDocsForComponent in filteredApiDocsForComponents ) +{ + + @foreach ( var property in ( PropertyType == PropertyTypes.Events ? apiDocsForComponent.Events : apiDocsForComponent.Parameters ).OrderBy( x => x.Name ) ) + { + + + @((MarkupString)property.Summary) + + + @if ( property.IsBlazoriseEnum ) + { + var enumNames = Enum.GetNames(property.Type); + + @if ( enumNames.Count() <= 30 ) + { + + Possible values: + @for ( var i = 0; i < enumNames.Length; i++ ) + { + int enumIndex = i; + @enumNames[enumIndex] + @(i < @enumNames.Length - 1 ? ", " : "") + } + + } + } + + + } + +} + +@code { + [Parameter, EditorRequired] public IEnumerable ApiDocsForComponents { get; set; } = []; + [Parameter, EditorRequired] public bool MultipleComponentTypes { get; set; } + [Parameter, EditorRequired] public PropertyTypes PropertyType { get; set; } + + IEnumerable filteredApiDocsForComponents = []; + + protected override void OnInitialized() + { + filteredApiDocsForComponents = ApiDocsForComponents.Where( x => ( PropertyType == PropertyTypes.Events ? x.Events : x.Parameters ).Count > 0 ); + } + + public enum PropertyTypes { Parameters, Events } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Components/ComponentApiDocsRemarks.razor b/Documentation/Blazorise.Docs/Components/ComponentApiDocsRemarks.razor new file mode 100644 index 0000000000..c7a3ddcb65 --- /dev/null +++ b/Documentation/Blazorise.Docs/Components/ComponentApiDocsRemarks.razor @@ -0,0 +1,12 @@ +@if ( !string.IsNullOrEmpty( Value ) ) +{ +
+ + Remarks + + @((MarkupString)Value) +
+} +@code { + [Parameter] public string Value { get; set; } = ""; +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Components/DocsAttributes.razor b/Documentation/Blazorise.Docs/Components/DocsAttributes.razor index 5ca3cbd589..9cc956a838 100644 --- a/Documentation/Blazorise.Docs/Components/DocsAttributes.razor +++ b/Documentation/Blazorise.Docs/Components/DocsAttributes.razor @@ -4,7 +4,7 @@ @if ( Title != null ) { - + @Title } @@ -12,7 +12,7 @@ - Name + @Name Description Type @if ( ShowDefaults ) diff --git a/Documentation/Blazorise.Docs/Components/DocsAttributes.razor.cs b/Documentation/Blazorise.Docs/Components/DocsAttributes.razor.cs index 56e084f57c..9efc1b295c 100644 --- a/Documentation/Blazorise.Docs/Components/DocsAttributes.razor.cs +++ b/Documentation/Blazorise.Docs/Components/DocsAttributes.razor.cs @@ -63,6 +63,8 @@ void OnThemeChanged( object sender, string theme ) [Parameter] public RenderFragment ChildContent { get; set; } + [Parameter] public string Name { get; set; } = "Name"; + public List DocsAttributesItems { get; set; } = new(); #endregion diff --git a/Documentation/Blazorise.Docs/Components/DocsMethods.razor b/Documentation/Blazorise.Docs/Components/DocsMethods.razor index 0a0bd8f3ac..6f9b4a86a2 100644 --- a/Documentation/Blazorise.Docs/Components/DocsMethods.razor +++ b/Documentation/Blazorise.Docs/Components/DocsMethods.razor @@ -12,7 +12,7 @@
- Name + @Name Description @if ( ShowReturnType ) { @@ -46,7 +46,7 @@ @if ( ShowParameters ) { - @if ( @docsMethodsItem.Parameters != null ) + @if ( !string.IsNullOrWhiteSpace( docsMethodsItem.Parameters ) ) { @docsMethodsItem.Parameters } diff --git a/Documentation/Blazorise.Docs/Components/DocsMethods.razor.cs b/Documentation/Blazorise.Docs/Components/DocsMethods.razor.cs index fd9726617b..477968d3e3 100644 --- a/Documentation/Blazorise.Docs/Components/DocsMethods.razor.cs +++ b/Documentation/Blazorise.Docs/Components/DocsMethods.razor.cs @@ -64,6 +64,8 @@ void OnThemeChanged( object sender, string theme ) [Parameter] public bool ShowParameters { get; set; } = true; [Parameter] public RenderFragment ChildContent { get; set; } + + [Parameter] public string Name { get; set; } = "Name"; public List DocsMethodsItems { get; set; } = new(); diff --git a/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsDtos.cs b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsDtos.cs new file mode 100644 index 0000000000..914cab78b2 --- /dev/null +++ b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsDtos.cs @@ -0,0 +1,136 @@ +#region Using directives +using System; +using System.Collections.Generic; +using System.Linq; +#endregion + +namespace Blazorise.Docs.Models.ApiDocsDtos; + +/// will be removed in package (specified in csproj) +/// Necessary dtos for working with api docs. +/// Can be generated by Source generator, but needs to be done after Blazorise.Extensions are solved. +/// This almost keeps parity with ApiDocsDtos in sg project. +public class ApiDocsForComponent +{ + #region Members + + private IReadOnlyList methods; + + private IReadOnlyList properties; + + private IReadOnlyList parameters; + + private IReadOnlyList events; + + #endregion + + #region Constructors + + public ApiDocsForComponent( Type type, string typeName, List properties, List methods, List inheritsFromChain ) + { + Type = type; + TypeName = typeName; + OwnProperties = properties; + OwnMethods = methods; + InheritsFromChain = inheritsFromChain; + } + + #endregion + + #region Properties + + /// + /// properties form the component and its parents + /// + public IReadOnlyList Parameters + { + get + { + if ( parameters != null ) + return parameters; + parameters = Properties.Where( x => !x.Type.IsEventType() ).ToList(); + return parameters; + } + } + + + private IReadOnlyList Properties + { + get + { + if ( properties != null ) + return properties; + var tempList = new List(); + tempList.AddRange( OwnProperties ); + foreach ( Type typeInheritFrom in InheritsFromChain ) + { + bool success = ComponentsApiDocsSource.Instance.Components.TryGetValue( typeInheritFrom, out var component ); + if ( !success || component is null ) + continue; + string typeNameWoutGeneric = component.TypeName.Split( '<' ).First();//because inside cref (now inside it is wout the generic part (SomCom instead of SomCom)) + tempList.AddRange( component.OwnProperties.Select( x => new ApiDocsForComponentProperty( x.Name, x.Type, x.TypeName, x.DefaultValueString, + x.Summary.Replace( typeNameWoutGeneric, this.TypeName ), + x.Remarks.Replace( typeNameWoutGeneric, this.TypeName ), + x.IsBlazoriseEnum ) ) ); + } + properties = tempList; + return properties; + + } + } + + public IReadOnlyList Events + { + get + { + if ( events != null ) + return events; + events = Properties.Where( x => x.Type.IsEventType() ).ToList(); + return events; + } + } + + /// + /// only properties from the component, not from parents + /// + public IReadOnlyList OwnProperties { get; set; } + /// + /// Methods from the component and its parents + /// + public IReadOnlyList Methods + { + get + { + if ( methods != null ) + return methods; + var tempList = new List(); + tempList.AddRange( OwnMethods ); + foreach ( Type typeInheritFrom in InheritsFromChain ) + { + bool success = ComponentsApiDocsSource.Instance.Components.TryGetValue( typeInheritFrom, out var component ); + if ( !success || component is null ) + continue; + tempList.AddRange( component.OwnMethods ); + } + methods = tempList; + return methods; + } + } + + public Type Type { get; set; } + + public string TypeName { get; } + + + + /// + /// Only methods from the component, not from parents + /// + public IReadOnlyList OwnMethods { get; } + + + //chain of inherited classes from component to BaseComponent + public IReadOnlyList InheritsFromChain { get; } + + #endregion +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentMethod.cs b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentMethod.cs new file mode 100644 index 0000000000..035340b190 --- /dev/null +++ b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentMethod.cs @@ -0,0 +1,25 @@ +#region Using directives +using System.Collections.Generic; +#endregion + +namespace Blazorise.Docs.Models.ApiDocsDtos; + +public class ApiDocsForComponentMethod +{ + public ApiDocsForComponentMethod( string name, string returnTypeName, string summary, string remarks, IReadOnlyList parameters ) + { + Name = name; + ReturnTypeName = returnTypeName; + Summary = summary; + Remarks = remarks; + Parameters = parameters; + } + + public string Name { get; set; } + // public Type ReturnTypeSymbol { get; set; } + public string ReturnTypeName { get; set; } + public string Summary { get; set; } + public string Remarks { get; set; } + + public IReadOnlyList Parameters { get; set; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentMethodParameter.cs b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentMethodParameter.cs new file mode 100644 index 0000000000..a3cb50ccb3 --- /dev/null +++ b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentMethodParameter.cs @@ -0,0 +1,16 @@ +#region Using directives +#endregion + +namespace Blazorise.Docs.Models.ApiDocsDtos; + +public class ApiDocsForComponentMethodParameter +{ + public ApiDocsForComponentMethodParameter( string name, string typeName ) + { + Name = name; + TypeName = typeName; + } + + public string Name { get; set; } + public string TypeName { get; set; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentProperty.cs b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentProperty.cs new file mode 100644 index 0000000000..96c193884e --- /dev/null +++ b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ApiDocsForComponentProperty.cs @@ -0,0 +1,27 @@ +#region Using directives +using System; +#endregion + +namespace Blazorise.Docs.Models.ApiDocsDtos; + +public class ApiDocsForComponentProperty +{ + public ApiDocsForComponentProperty( string name, Type type, string typeName, string defaultValueString, string summary, string remarks, bool isBlazoriseEnum ) + { + Name = name; + Type = type; + TypeName = typeName; + DefaultValueString = defaultValueString; + Summary = summary; + IsBlazoriseEnum = isBlazoriseEnum; + Remarks = remarks; + } + public string Name { get; set; } + public Type Type { get; set; } + public string TypeName { get; set; } + public string DefaultValueString { get; set; } + public string Summary { get; set; } + public string Remarks { get; set; } + + public bool IsBlazoriseEnum { get; set; } +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ComponentsApiDocsSource.cs b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ComponentsApiDocsSource.cs new file mode 100644 index 0000000000..152a8ef74e --- /dev/null +++ b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/ComponentsApiDocsSource.cs @@ -0,0 +1,63 @@ +#region Using directives +using System; +using System.Collections.Generic; +using System.Linq; +#endregion + +namespace Blazorise.Docs.Models.ApiDocsDtos; + +public interface IComponentsApiDocsSource +{ + Dictionary Components { get; } +} + +public class ComponentsApiDocsSource +{ + #region Members + + private static readonly Lazy instance = new( () => new ComponentsApiDocsSource() ); + + #endregion + + #region Constructors + + private ComponentsApiDocsSource() + { + Components = new Dictionary(); + + // Find all types implementing IComponentsApiDocsSource + var sources = typeof( ComponentsApiDocsSource ).Assembly + .GetTypes().Where( type => typeof( IComponentsApiDocsSource ).IsAssignableFrom( type ) && type is { IsInterface: false, IsAbstract: false } ); + + foreach ( var sourceType in sources ) + { + // Create an instance of the source type + if ( Activator.CreateInstance( sourceType ) is not IComponentsApiDocsSource sourceInstance ) + continue; + + // Merge Components dictionary + foreach ( var component in sourceInstance.Components ) + { + if ( !Components.ContainsKey( component.Key ) ) + { + Components[component.Key] = component.Value; + } + else + { + // Handle duplicates if needed, e.g., log or overwrite + } + } + } + } + + #endregion + + #region Properties + + public Dictionary Components { get; } + + + public static ComponentsApiDocsSource Instance => instance.Value; + + #endregion +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Models/ApiDocsDtos/Extensions.cs b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/Extensions.cs new file mode 100644 index 0000000000..63b50fa40f --- /dev/null +++ b/Documentation/Blazorise.Docs/Models/ApiDocsDtos/Extensions.cs @@ -0,0 +1,11 @@ +using System; +using System.Linq; + +namespace Blazorise.Docs.Models.ApiDocsDtos; + +public static class TypeExtensions +{ + public static bool IsEventType( this Type type ) + => type.Name.Split( '`' ).First()// Get the base name without generic arity (e.g., "Func`1" -> "Func" + is "Func" or "Action" or "EventCallback"; +} \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Accordions/AccordionPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Accordions/AccordionPage.razor index 987ca8c91e..fb41502a2b 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Accordions/AccordionPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Accordions/AccordionPage.razor @@ -94,52 +94,4 @@ - - API - - - - Attributes - - - - - Specifies the content to be rendered insidethe accordion. - - - - - - Occurs when the toggle button is clicked. - - - Specifies the content to be rendered insidethe accordion toggle. - - - - - - Defines the collapse state of the accordion item. - - - Occurs when the accordion item visibility state changes. - - - Specifies the content to be rendered inside the accordion item. - - - - - - Occurs when the accordion header is clicked. - - - Specifies the content to be rendered inside the accordion body. - - - - - - Specifies the content to be rendered inside the accordion body. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Addons/AddonPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Addons/AddonPage.razor index ecad7dd12b..c25bfd397c 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Addons/AddonPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Addons/AddonPage.razor @@ -129,22 +129,4 @@ - - API - - - - Attributes - - - - - Addons size variations. - - - - - - Defines the location and behavior of addon container. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Alerts/AlertPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Alerts/AlertPage.razor index 21f24eaae5..f7b5ad0310 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Alerts/AlertPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Alerts/AlertPage.razor @@ -112,41 +112,4 @@ - - API - - - - Methods - - - - - Makes the alert visible. - - - Hides the alert. - - - Switches the alert visibility. - - - - - Attributes - - - - - Enables the alert to be closed by placing the padding for close button. - - - Defines the alert visibility. - - - Occurs when the alert visibility changes. - - - Component visual or contextual style variants. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Badges/BadgePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Badges/BadgePage.razor index 42145796ce..b9229fae3f 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Badges/BadgePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Badges/BadgePage.razor @@ -84,25 +84,4 @@ Placement, language, shape, and color can all help mitigate any confusion. First, badges should not be labeled with active verbs. This is because they are not actions but relatively static text/content. Second, avoid placing badges directly next to Buttons, in particular, if they are using similar themes. The pill theme variant may aid in making badges and Buttons more distinct from one another. - - API - - - - Attributes - - - - - Makes badges more rounded. - - - Create a badge link and provide actionable badges with hover and focus states. - - - Component visual or contextual style variants. - - - Occurs on close button click. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Bar/BarPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Bar/BarPage.razor index 0500195aab..eda54556d3 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Bar/BarPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Bar/BarPage.razor @@ -224,52 +224,4 @@ - - API - - - - Attributes - - - - - Bar mode (Vertical* for Sidebar). - - - What the Bar will collapse to when Visible toggled. - - - Controls the state of toggle and the menu. - - - Defines the media breakpoint. - - - Defines the media breakpoint on navigation. - - - Adjusts the contrast for light or dark themes. - - - Sets the bar background color. - - - Defines how the bar menu will behave when toggled. - - - - - - Path to the destination page. - - - The target attribute specifies where to open the linked document. - - - URL matching behavior for a link. - - - Defines the title of a link, which appears to the user as a tooltip. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Breadcrumbs/BreadcrumbPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Breadcrumbs/BreadcrumbPage.razor index 178f3ad600..b1b515b3fc 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Breadcrumbs/BreadcrumbPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Breadcrumbs/BreadcrumbPage.razor @@ -64,37 +64,4 @@ - - API - - - - Attributes - - - - - Defines the breadcrumb items activation mode. - - - - - - If set to true, renders span instead of a element. - - - - - - Path to the destination page. - - - The target attribute specifies where to open the linked document. - - - URL matching behavior for a link. - - - Defines the title of a link, which appears to the user as a tooltip. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Buttons/ButtonPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Buttons/ButtonPage.razor index ab8cd5fb23..fee71063ef 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Buttons/ButtonPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Buttons/ButtonPage.razor @@ -265,55 +265,4 @@ - - API - - - - Attributes - - - - - Component visual or contextual style variants. - - - Button size variations. - - - Defines the button type. - - - Occurs when the button is clicked. - - - Outlined button. - - - Makes button look inactive. - - - Makes the button to appear as pressed. - - - Makes the button to span the full width of a parent. - - - Shows the loading spinner. - - - Changes the default loading spinner to custom content. - - - Command to be executed when clicked on a button. - - - Reflects the parameter to pass to the CommandProperty upon execution. - - - Prevents the button from submitting the form. - - - Makes any HTML element or component clickable by “stretching” a nested link. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Cards/CardPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Cards/CardPage.razor index 608e91489d..cce5faa875 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Cards/CardPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Cards/CardPage.razor @@ -124,106 +124,5 @@ - - API - - - Attributes - - - - - Sets the bar background color. - - - Sets the white text when using the darker background. - - - - - - Italicize text if set to true. - - - Sets the text alignment. - - - Sets the text color. - - - Determines how the text will behave when it is larger than a parent container. - - - Sets the text transformation. - - - Sets the text weight. - - - - - - Italicize text if set to true. - - - Number from 1 to 6 that defines the title size where the smaller number means larger text. - - - Sets the text alignment. - - - Sets the text color. - - - Determines how the text will behave when it is larger than a parent container. - - - Sets the text transformation. - - - Sets the text weight. - - - - - - Italicize text if set to true. - - - Number from 1 to 6 that defines the subtitle size where the smaller number means larger text. - - - Sets the text alignment. - - - Sets the text color. - - - Determines how the text will behave when it is larger than a parent container. - - - Sets the text transformation. - - - Sets the text weight. - - - - - - Alternative link text. - - - Link URL. - - - - - - Alternative image text. - - - Image URL. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Carousels/CarouselPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Carousels/CarouselPage.razor index b8a00e0be6..2d8a97d374 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Carousels/CarouselPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Carousels/CarouselPage.razor @@ -61,43 +61,4 @@ For optimal Carousel functionality in Blazorise, maintain uniform dimensions across all slides. Inconsistent sizes can cause disruptive resizing during transitions. This can be prevented by defining consistent widths and heights through additional CSS styles. Uniform slide dimensions provide a smoother user experience and a more visually appealing Carousel component. - - API - - - - Attributes - - - - - Autoplays the carousel slides from left to right. - - - Specifies whether to show an indicator for each slide. - - - Specifies whether to show the controls that allows the user to navigate to the next or previous slide. - - - Gets or sets currently selected slide name. - - - Occurs after the selected slide has changed. - - - Function used to handle custom localization for previous button that will override a default ITextLocalizer. - - - Function used to handle custom localization for next button that will override a default ITextLocalizer. - - - Auto-repeats the carousel slides once they reach the end. - - - Animate slides with a fade transition instead of a slide. - - - Defines the interval(in milliseconds) after which the item will automatically slide. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Checks/CheckPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Checks/CheckPage.razor index 05bcc24e47..e433fad52b 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Checks/CheckPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Checks/CheckPage.razor @@ -56,34 +56,4 @@ - - API - - - - Attributes - - - - - Data type of Checked value. Support types are bool and bool?. - - - Gets or sets the checked flag. - - - Occurs when the check state is changed. - - - The indeterminate property can help you to achieve a ‘check all’ effect. - - - Group checkboxes on the same horizontal row. - - - Defines the mouse cursor based on the behavior by the current CSS framework. - - - Defines the name attribute of a checkbox. The name attribute is used to identify form data after it has been submitted to the server, or to reference form data using JavaScript on the client side. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/CloseButtons/CloseButtonPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/CloseButtons/CloseButtonPage.razor index e8eff74cf1..bf9b7020a5 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/CloseButtons/CloseButtonPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/CloseButtons/CloseButtonPage.razor @@ -46,19 +46,4 @@ - - API - - - - Attributes - - - - - Occurs when the Button is clicked. - - - If true, the parent Alert or Modal with be automatically closed. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorEditPage.razor index 59b516123f..334e199ded 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorEditPage.razor @@ -48,25 +48,4 @@ - - API - - - - Attributes - - - - - Gets or sets the input color value in hex format. - - - Occurs when the color has changed. - - - Prevents user interactions and make it appear lighter. - - - Component size variations. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorPickerPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorPickerPage.razor index 5159fb1df6..a9291655d2 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorPickerPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Colors/ColorPickerPage.razor @@ -40,43 +40,4 @@ - - API - - - - Attributes - - - - - Gets or sets the input color value in hex format. - - - Occurs when the color has changed. - - - List a colors below the colorpicker to make it convenient for users to choose from frequently or recently used colors. - - - Controls the visibility of the palette below the colorpicker to make it convenient for users to choose from frequently or recently used colors. - - - Automatically hides the dropdown menu after a palette color is selected. - - - Controls the visibility of the clear buttons. - - - Controls the visibility of the cancel buttons. - - - Controls the visibility of the opacity slider. - - - Controls the visibility of the hue slider. - - - Controls the visibility of the textbox which shows the selected color value. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DateEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DateEditPage.razor index 009ef0783d..7bad2fc2bd 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DateEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DateEditPage.razor @@ -79,53 +79,4 @@ - - Functions - - -
- - - Name - Description - - - - - ShowPicker() - Show a browser picker for the date input. - - -
- - - API - - - - Attributes - - - - - Gets or sets the input date value. - - ")"> - Occurs when the date has changed. - - - Hints at the type of data that might be entered by the user while editing the element or its contents. - - - The earliest date to accept. - - - The latest date to accept. - - - The pattern attribute specifies a regular expression that the input element’s value is checked against on form submission. - - - The step attribute specifies the legal day intervals to choose from when the user opens the calendar in a date field. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DatePickerPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DatePickerPage.razor index 9a19fd5aa2..58cbd492c2 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DatePickerPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dates/DatePickerPage.razor @@ -416,85 +416,4 @@ - - API - - - - Attributes - - - - - Gets or sets the input date value. - - ")"> - Occurs when the date has changed. - - >")"> - Gets or sets an expression that identifies the date value. - - - Hints at the type of data that might be entered by the user while editing the element or its contents. - - - Defines the mode in which the dates can be selected. - - - The earliest date to accept. - - - The latest date to accept. - - - The pattern attribute specifies a regular expression that the input element’s value is checked against on form submission. - - - Sets the placeholder for the empty date. - - - The step attribute specifies the legal day intervals to choose from when the user opens the calendar in a date field. - - - Defines the first day of the week in the calendar. - - - Defines the display format of the date input. - - - Defines the input format mask of the date input. - - - Displays time picker in 24 hour mode without AM/PM selection when enabled. - - - List of disabled dates that the user should not be able to pick. - - - List of enabled dates that the user should be able to pick. - - - List of disabled days in a week that the user should not be able to pick. - - - Display the calendar in an always-open state with the inline option. - - - If enabled, it disables the native input on mobile devices. - - - Gets or sets the input date value. - - - Occurs when the date has changed. - - - Gets or sets an expression that identifies the date value. - - - Overrides the range separator that is used to separate date values when SelectionMode is set to DateInputSelectionMode.Range. - - - If enabled, the calendar menu will be positioned as static. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dividers/DividerPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dividers/DividerPage.razor index 58a0cb08c7..8a62b4eab8 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dividers/DividerPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dividers/DividerPage.razor @@ -54,19 +54,4 @@ - - API - - - - Attributes - - - - - Specifies horizontal line style variants. - - - Label that will appear between the solid lines. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/DragDrops/DragDropPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/DragDrops/DragDropPage.razor index a51403e0ed..5b4e926032 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/DragDrops/DragDropPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/DragDrops/DragDropPage.razor @@ -67,107 +67,5 @@ - - API - - - - Methods - - - - - Request the refresh of the drag container. - - - Gets the item that is currently in the transaction. - - - Gets the current transaction index. - - - - - Attributes - - - - - Items data type. - - - Items that are used for the drag&drop withing the container. - - - The method used to determine if the item belongs to the dropzone. - - - The render method that is used to render the items withing the dropzone. - - - Callback that indicates that an item has been dropped on a drop zone. Should be used to update the "status" of the data item. - - - Determines if the item is allowed to be dropped to the specified zone. - - - Classname that is applied if dropping to the current zone is allowed. - - - Classname that is applied if dropping to the current zone is not allowed. - - - Determines if the item is disabled for dragging and dropping. - - - Classname that is applied to the dropzone if the result of ItemDisabled is false. - - - Classname that is applied to the dropzone when the drag operation has started. - - - Classname that is applied to the drag item when it is being dragged. - - + - - - Gets or sets the unique name of the dropzone. - - - The method used to determine if the item belongs to the dropzone. - - - The render method that is used to render the items withing the dropzone. - - - Determines if the item is allowed to be dropped to the specified zone. - - - Classname that is applied if dropping to the current zone is allowed. - - - Classname that is applied if dropping to the current zone is not allowed. - - - Determines if the item is disabled for dragging and dropping. - - - Classname that is applied to the dropzone if the result of ItemDisabled is false. - - - Classname that is applied to the dropzone when the drag operation has started. - - - Classname that is applied to the drag item when it is being dragged. - - - If true, the reordering of the items will be enabled. - - - The callback that is raised when the order of items changes. Only if is enabled. - - - If true, will only act as a dropable zone and not render any items. - - \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dropdowns/DropdownPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dropdowns/DropdownPage.razor index f1bb43f2cb..b7c35e47b3 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Dropdowns/DropdownPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Dropdowns/DropdownPage.razor @@ -165,83 +165,6 @@ - - API - + + - - Attributes - - - - - Handles the visibility of dropdown menu. - - - Right aligned dropdown menu. - - - Disables the button or toggle button that are placed inside of dropdown. - - - Direction of an dropdown menu. - - - Occurs after the dropdown menu visibility has changed. - - - Defines the positioning strategy of the dropdown menu as a 'floating' element. - - - Provides a custom anchor element id for the dropdown menu. - This is useful when you want the dropdown menu to be anchored from a different element than the toggle. - - - - - - Sets the maximum height of the dropdown menu. - - - - - - Holds the item value. - - - Occurs when the item is clicked. - - - Marks the item with an state. - - - Marks the item with disabled state and doesn’t allow the click event. - - - The dropdown renders a checkbox. - - - Tracks the Checked state whenever the DropdownItem is in checkbox mode. - - - Occurs after the Checked state is changed, whenever the DropdownItem is in checkbox mode. - - - - - - Component visual or contextual style variants. - - - Button size variations. - - - Handles the visibility of split button. - - - Outlined button - - - Makes toggle look inactive. - - diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Fields/FieldPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Fields/FieldPage.razor index 4d20f8c8d4..c70d30fda1 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Fields/FieldPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Fields/FieldPage.razor @@ -11,7 +11,7 @@ - The Field is a container for inpot components such as TextEdit, Select, DateEdit, + The Field is a container for input components such as TextEdit, Select, DateEdit, Check, MemoEdit, and optionally for Button. Structure is very simple: @@ -192,46 +192,5 @@ - - API - - - - Attributes - - - - Aligns the controls for horizontal form. - - - Determines how much space will be used by the field inside of the grid row. - - - Aligns the flexible container’s items when the items do not use all available space on the main-axis (horizontally). - - - - - - Defines the visibility for screen readers. - - - If defined, a required indicator will be shown next to the label. - - - - - - Aligns the controls for horizontal form. - - - Shows the help text bellow the fields. - - - Determines how much space will be used by the field inside of the grid row. - - - Whether to provide a Required Indicator. - - \ No newline at end of file + diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Figures/FigurePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Figures/FigurePage.razor index 546b20e143..e327899ea9 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Figures/FigurePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Figures/FigurePage.razor @@ -62,28 +62,5 @@ - - API - - - - Attributes - - - - - Figure size variations. - - + - - - Image URL. - - - Alternate text when image cannot be found. - - - Makes the figure border rounded. - - diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FileEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FileEditPage.razor index 66914afbac..303872c53e 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FileEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FileEditPage.razor @@ -179,90 +179,4 @@ - - Functions - - - - - - Name - Description - - - - - ShowPicker() - Show a browser picker for the file input. - - -
- - - API - - - - Attributes - - - - - Input content. - - - Placeholder for validation messages. - - - If true file input will be automatically reset after it has being uploaded. - - - Function used to handle browse button localization that will override a default ITextLocalizer. - - ")"> - Occurs every time the file(s) has changed. - - ")"> - Occurs when an individual file upload has ended. - - - Types of files that the input accepts. - - - Max chunk size (in bytes) when uploading the file. - - - Gets or sets the Segment Fetch Timeout when uploading the file. - - - Specifies that multiple files can be selected. - - - Specifies that directories can be selected. - - - Sets the placeholder for the empty file input. - - ")"> - Notifies the progress of file being uploaded. - - ")"> - Occurs when an individual file upload has started. - - ")"> - Occurs every time the part of file has being uploaded. - - - Maximum file size in bytes, checked before starting upload (note: never trust client, always check file size at server-side). Defaults to long.MaxValue. - - - Gets or sets whether report progress should be disabled. By enabling this setting, Progressed and Written callbacks won't be called. Internal file progress won't be tracked. - This setting can speed up file transfer considerably. - - - Add the readonly boolean attribute on an input to prevent modification of the input’s value. - - - Add the disabled boolean attribute on an input to prevent user interactions and make it appear lighter. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FilePickerPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FilePickerPage.razor index 91af1d8bc2..62da73165a 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FilePickerPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Files/FilePickerPage.razor @@ -63,83 +63,5 @@ - - API - - - - Attributes - + - - - Input content. - - - Placeholder for validation messages. - - - If true file input will be automatically reset after it has being uploaded. - - - Function used to handle browse button localization that will override a default ITextLocalizer. - - ")"> - Occurs every time the file(s) has changed. - - ")"> - Occurs when an individual file upload has ended. - - - Types of files that the input accepts. - - - Max chunk size (in bytes) when uploading the file. - - - Gets or sets the Segment Fetch Timeout when uploading the file. - - - Specifies that multiple files can be selected. - - - Specifies that directories can be selected. - - - Sets the placeholder for the empty file input. - - ")"> - Notifies the progress of file being uploaded. - - ")"> - Occurs when an individual file upload has started. - - ")"> - Occurs every time the part of file has being uploaded. - - - Maximum file size in bytes, checked before starting upload (note: never trust client, always check file size at server-side). Defaults to long.MaxValue. - - - Function used to handle custom localization that will override a default ITextLocalizer. - - - Provides a custom file content. - - - Provides a custom content for upload, clear and cancel buttons. - - - Gets or Sets FilePicker's show mode. Defaults to FilePickerShowMode.List. - - - Gets or sets whether report progress should be disabled. By enabling this setting, Progressed and Written callbacks won't be called. Internal file progress won't be tracked. - This setting can speed up file transfer considerably. - - - Add the readonly boolean attribute on an input to prevent modification of the input’s value. - - - Add the disabled boolean attribute on an input to prevent user interactions and make it appear lighter. - - \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/FocusTraps/FocusTrapPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/FocusTraps/FocusTrapPage.razor index 61a3dbe75d..8249ae665d 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/FocusTraps/FocusTrapPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/FocusTraps/FocusTrapPage.razor @@ -32,16 +32,4 @@ - - API - - - - Attributes - - - - - If true the TAB focus will be activated. - - \ No newline at end of file + diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Highlighters/HighlighterPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Highlighters/HighlighterPage.razor index 47ec6a2e7a..9f8dc095c8 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Highlighters/HighlighterPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Highlighters/HighlighterPage.razor @@ -38,28 +38,5 @@ - - API - - - - Attributes - - - - The whole text in which a HighlightedText will be highlighted. - - - The search term to be highlighted. - - - Whether or not the highlighted text is case sensitive. - - - A regex expression used for searching the word boundaries. - - - If true, highlights the text until the next word boundary. - - \ No newline at end of file + diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Image/ImagePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Image/ImagePage.razor index 2e405765a0..0fef4b6015 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Image/ImagePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Image/ImagePage.razor @@ -67,25 +67,4 @@ - - API - - - - Attributes - - - - - Source attribute is used to find an image that we want to show up. - - - Deffers loading the image until it reaches a calculated distance from the viewport. - - - Forces an image to take up the whole width of parent component. - - - Alternative text for image. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/InputMasks/InputMaskPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/InputMasks/InputMaskPage.razor index 5420288dce..abddc0dd7e 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/InputMasks/InputMaskPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/InputMasks/InputMaskPage.razor @@ -64,103 +64,5 @@ - - API - - - - Attributes - - - - Input value. - - ")"> - Occurs after the value has changed. - - - The mask to use for the input. - - - The placeholder that will be used for the mask. - - - Remove the default form field styling and preserve the correct margin and padding. - - - Prevents modification of the input’s value. - - - Prevents user interactions and make it appear lighter. - - - Sets the placeholder for the empty text. - - - Specifies a regular expression that the input element’s value is checked against on form validation. - - - Component visual or contextual style variants. - - - Component size variations. - - - Set’s the focus to the component after the rendering is done. - - - Shows the mask when the input gets focus. - - - Shows the mask when hovering the mouse. - - - Numeric input direction. Keeps the caret at the end. - - - Align the input to the right. By setting the rightAlign you can specify to right-align an inputmask. - This is only applied in combination op the numericInput option or the dir-attribute. The default is true. - - - Define the decimal separator (numeric mode only). - - - Define the group separator (numeric mode only). - - - Return nothing when the user hasn't entered anything. - - - Automatically unmask the value when retrieved. - - - Defines the positioning of the caret on click. - - - Remove the empty mask on blur or when not empty remove the optional trailing part. - - - Clear the incomplete input on blur. - - - Execute a function when the mask is completed. - - - Execute a function when the mask is incomplete. Executes on blur. - - - Execute a function when the mask is cleared. - - - With an alias, you can define a complex mask definition and call it by using an alias name. - So this is mainly to simplify the use of your masks. Some aliases found in the extensions are email, - currency, decimal, integer, date, DateTime, dd/mm/yyyy, etc. - - - Defines the input format when the Alias is used. - - - Defines the output format of the Value when the Alias is used. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Jumbotrons/JumbotronPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Jumbotrons/JumbotronPage.razor index a5da0198f4..a042abf170 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Jumbotrons/JumbotronPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Jumbotrons/JumbotronPage.razor @@ -53,16 +53,4 @@ - - API - - - - Attributes - - - - - Sets the bar background color. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Layouts/LayoutPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Layouts/LayoutPage.razor index 790244d43b..0edc29d788 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Layouts/LayoutPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Layouts/LayoutPage.razor @@ -99,31 +99,4 @@ - - API - - - - Attributes - - - - - Indicates that layout will contain sider. - - - If true, an overlay will be created so the user cannot click anything until set to false. - - - - - - If true header will be fixed to the top of the page. - - - - - - If true footer will be fixed to the bottom of the page. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Links/LinkPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Links/LinkPage.razor index 391b736432..fc886e19bc 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Links/LinkPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Links/LinkPage.razor @@ -103,40 +103,4 @@ - - API - - - - Attributes - - - - - Specifies that multiple files can be selected. - - - The target attribute specifies where to open the linked document. - - - URL matching behavior for a link. - - - A callback function that is used to compare current uri with the user defined uri. If defined, the Match parameter will be ignored. - - - Defines the title of a link, which appears to the user as a tooltip. - - - Removes default color styles from the link. - - - Occurs when the link is clicked. - - - Makes any HTML element or component clickable by “stretching” a nested link. - - - Makes the link look inactive by adding the disabled boolean attribute. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/ListGroups/ListGroupPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/ListGroups/ListGroupPage.razor index 982db67956..f833b735cb 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/ListGroups/ListGroupPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/ListGroups/ListGroupPage.razor @@ -106,52 +106,4 @@ - - API - - - - Attributes - - - - - Remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards). - - - Makes the list group scrollable by adding a vertical scrollbar. (Note: you also must define max height on a list group). - - - Gets or sets currently selected item name. - - - Occurs when the selected item has changed. - - - Defines the list-group behavior mode. - - - Defines the list-group selection mode. - - - Gets or sets currently selected items names. - - - An event raised when SelectedItems are changed. - - - - - - Defines the item name. - - - Makes the item to make it appear disabled. - - - Occurs when the item is clicked. - - - Gets or sets the list-group-item color. - - \ No newline at end of file + diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Memos/MemoEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Memos/MemoEditPage.razor index 930d9533be..b8a26e2129 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Memos/MemoEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Memos/MemoEditPage.razor @@ -100,66 +100,4 @@ - - API - - - - Attributes - - - - - Input value. - - ")"> - Occurs after text has changed. - - - Remove the default form field styling and preserve the correct margin and padding. - - - Prevents modification of the input’s value. - - - Prevents user interactions and make it appear lighter. - - - Specifies the maximum number of characters allowed in the input element. - - - Sets the placeholder for the empty text. - - - Specifies the number lines in the input element. - - - Component size variations. - - - If true the text in will be changed after each key press (overrides global settings). - - - If true the entered text will be slightly delayed before submitting it to the internal value. - - - Interval in milliseconds that entered text will be delayed from submitting to the internal value. - - - If set to true, ReplaceTab will insert a tab instead of cycle input focus. - - - Defines the number of characters that tab key will override. - - - If set to true, spaces will be used instead of a tab character - - - If true, the textarea will automatically grow in height according to its content. - - - The pattern attribute specifies a regular expression that the input element's value is checked against on form validation. -
- Please be aware that Pattern on MemoEdit is used only for the validation process. -
-
\ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Modals/ModalPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Modals/ModalPage.razor index ee286f786b..6ea96a4245 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Modals/ModalPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Modals/ModalPage.razor @@ -185,73 +185,4 @@ - - API - - - - Attributes - - - - - Handles the visibility of modal dialog. - - - Occurs when the modal visibility state changes. - - - Occurs before the modal is opened and can be used to prevent the modal from opening. - - - Occurs before the modal is closed and can be used to prevent the modal from closing. - - - Occurs after the modal has opened. - - - Occurs after the modal has closed. - - - If true modal will scroll to top when opened. - - - If true the the backdrop will be rendered. - - - Gets or sets whether the component has any animations. - - - Gets or sets the animation duration. - - - Defines how the modal content will be rendered. - - - Defines if the modal should keep the input focus at all times. - - - - - - Centers the modal vertically. - - - Scrolls the modal content independent of the page itself. - - - Changes the size of the modal. - - - - - - Sets the maximum height of the modal body (in viewport size unit). - - - - - - Sets the title size and tag name. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericEditPage.razor index 4b2cde9f32..280e0cefa2 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericEditPage.razor @@ -47,37 +47,4 @@ - - API - - - - Attributes - - - - - Generic type parameter used for the value attribute. - - - Gets or sets the value inside the input field. - - ")"> - Occurs after the value has changed. - - - Specifies the interval between valid values. - - - Helps define the localization of an element (used for parsing of the value). - - - The minimum value to accept for this input. - - - The maximum value to accept for this input. - - - Set’s the focus to the component after the rendering is done. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericPickerPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericPickerPage.razor index a1734f27e8..5f748fbd5f 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericPickerPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Numerics/NumericPickerPage.razor @@ -99,85 +99,4 @@ - - API - - - - Attributes - - - - - Generic type parameter used for the value attribute. - - - Gets or sets the value inside the input field. - - ")"> - Occurs after the value has changed. - - - Specifies the interval between valid values. - - - Maximum number of decimal places after the decimal separator. - - - String to use as the decimal separator in numeric values. - - - String to use as the alternative decimal separator in numeric values. - - - Defines the thousand grouping separator character. - - - Defines how many numbers should be grouped together (usually for the thousand separator). - - - Defines the currency symbol to display. - - - Placement of the currency sign, relative to the number shown (as a prefix or a suffix). - - - Helps define the localization of an element (used for parsing of the value). - - - The minimum value to accept for this input. - - - The maximum value to accept for this input. - - - Override the minimum and maximum limits. - - - Set’s the focus to the component after the rendering is done. - - - If true, step buttons will be visible. - - - If true, enables change of numeric value by pressing on step buttons or by keyboard up/down keys. - - - If true, selects all the text entered in the input field once it receives the focus. - - - Method used for rounding decimal values. - - - Setting AllowDecimalPadding to 'false' will override the Decimals setting. - - - Defines if the decimal character or decimal character alternative should be accepted when there is already a decimal character shown in the element. - - - Determine if the element value can be incremented / decremented with the mouse wheel. - - - Used in conjonction with the ModifyValueOnWheel option, defines when the wheel event will increment or decrement the element value, either when the element is focused, or hovered. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Offcanvas/OffcanvasPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Offcanvas/OffcanvasPage.razor index f21bf97d2e..a2e3c1d342 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Offcanvas/OffcanvasPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Offcanvas/OffcanvasPage.razor @@ -103,50 +103,5 @@ - - API - - - - Attributes - - - - - Determines whether the Offcanvas is visible or hidden. - - - Occurs when the Visible property value changes. - - - Determines whether the Offcanvas has animation. - - - The duration of the Offcanvas animation in milliseconds. - - - Determines whether to show the backdrop behind the Offcanvas. - - - The placement of the Offcanvas (Start, End, Top, Bottom). - - - - - - The custom CSS class for the OffcanvasHeader. - - - - - - The custom CSS class for the OffcanvasBody. - - - - - - The custom CSS class for the OffcanvasFooter. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Paginations/PaginationPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Paginations/PaginationPage.razor index 8674c20267..eef718ad6d 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Paginations/PaginationPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Paginations/PaginationPage.razor @@ -58,40 +58,4 @@ - - API - - - - Attributes - - - - - Gets or sets the pagination size. - - - Gets or sets the pagination alignment. - - - Gets or sets the pagination background color. - - - - - - Indicate the currently active page. - - - Used for links that appear un-clickable. - - - - - - Defines the page name. - - - Occurs when the item link is clicked. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Progresses/ProgressPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Progresses/ProgressPage.razor index b6499e1443..9aa36bf1b0 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Progresses/ProgressPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Progresses/ProgressPage.razor @@ -123,76 +123,4 @@ - - API - - - - Attributes - - - - - The progress value. - - - Progress size variations. - - - Minimum value of the progress. - - - Maximum value of the progress. - - - Defines the progress bar color variant. - - - Set to true to make the progress bar stripped. - - - Set to true to make the progress bar animated. - - - Set to true to show that an operation is being executed. - - - If true, the value will be showed within the progress bar. - - - - - - The progress bar value. - - - Minimum value of the progress bar. - - - Maximum value of the progress bar. - - - Defines the progress bar color variant. - - - Set to true to make the progress bar stripped. - - - Set to true to make the progress bar animated. - - - Set to true to show that an operation is being executed. - - - - - - The page progress value. - - - Defines the page progress color variant. - - - Defines the visibility of progress bar. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Radios/RadioPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Radios/RadioPage.razor index 364474459a..d93db24b78 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Radios/RadioPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Radios/RadioPage.razor @@ -111,58 +111,4 @@ - - API - - - - Attributes - - - - - CheckedValue data type. - - - Gets or sets the checked value. - - ")"> - Occurs when the checked value is changed. - - - Defines the radio group name. - - - Defines the orientation of the radio elements. - - - Flag which indicates that radios will appear as button. - - - Defines the color or radio buttons(only when Buttons is true). - - - - - - Data type of Checked value. Support types are bool and bool?. - - - Gets or sets the checked value. - - ")"> - Occurs when the checked value is changed. - - - Defines the radio group name. - - - Group radios on the same horizontal row. - - - Defines the mouse cursor based on the behavior by the current CSS framework. - - - Defines the color of a radio button(only when RadioGroup.Buttons is true). - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Ratings/RatingPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Ratings/RatingPage.razor index 52867c9c45..4cadaefa68 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Ratings/RatingPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Ratings/RatingPage.razor @@ -53,45 +53,4 @@ - - API - - - - Attributes - - - - - Maximum rating value that is allowed to be selected. - - - Prevents modification of the input’s value. - - - Prevent the user interactions and make it appear lighter. - - - Defines the selected icon name. - - - Defines the non-selected icon name. - - - Defines the selected icon style. - - - Defines the non-selected icon style. - - - Defines the color or icons. - - - - Expression that provides the tooltip for the rating item to have additional user-friendly information. - - - The expression receives the rating item Value to determine the result. - - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Repeaters/RepeaterPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Repeaters/RepeaterPage.razor index 193cef8647..4aadd939e9 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Repeaters/RepeaterPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Repeaters/RepeaterPage.razor @@ -28,31 +28,4 @@ - - API - - - - Attributes - - - - - The item type to render. - - - The items to render. When this is INotifyCollectionChanged it will hookup collection change listeners. - - - The number of items to skip before starting to render. - - - The number of items to render. - - - The content to render per item. - - - Occurs when the Items collection changes. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Selects/SelectPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Selects/SelectPage.razor index ca0377607e..eea19e3aa5 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Selects/SelectPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Selects/SelectPage.razor @@ -153,52 +153,4 @@ Select is an input field component, not a generic menu component. Use Dropdown to create overlays for actions. - - API - - - - Attributes - - - - - SelectedValue or SelectedValues data type. - - - Selected item value when in single edit mode. - - - Selected item value when in multi edit mode. - - - Occurs when the selected item value has changed. - - - Occurs when the selected items value has changed (only when Multiple). - - - Specifies how many options should be shown at once. - - - - - - Value data type. - - - Gets or sets the item value. - - - Disable the item from mouse click. - - - Hides the item from the list - useful for default. - - - - - - Gets or sets the group label. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApi.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApi.razor deleted file mode 100644 index 5c250881ea..0000000000 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApi.razor +++ /dev/null @@ -1,31 +0,0 @@ - - API - - - - Attributes - - - - - Gets or sets the animation style applied to the skeleton. - - - - - - Gets or sets the column size configuration for the skeleton item. - - - - - - Defined the animation style applied to the skeleton. - - - Specifies the number of rows to be rendered. Default is 3. - - - Specifies the number of columns to be rendered. Default is 5. - - \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApiPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApiPage.razor index 1d3f071eac..5a75631a09 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApiPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonApiPage.razor @@ -22,4 +22,4 @@ The Skeleton component in Blazorise is a loading placeholder that can be used to indicate that something is still loading or that the content is not yet available. - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonPage.razor index 81805b512e..d107cfde02 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Skeletons/SkeletonPage.razor @@ -114,4 +114,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Sliders/SliderPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Sliders/SliderPage.razor index 043cca4743..2ea449b605 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Sliders/SliderPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Sliders/SliderPage.razor @@ -54,31 +54,4 @@ - - API - - - - Attributes - - - - - Value data type. - - - The value that the tick represents. - - - Occurs after the value has changed. - - - Specifies the interval between valid values. - - - Minimum value. - - - Maximum value. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Steps/StepPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Steps/StepPage.razor index 983466caa7..16cdc39d7f 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Steps/StepPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Steps/StepPage.razor @@ -103,80 +103,4 @@ - - Functions - - - - - - Name - Description - - - - - SelectStep(string name) - Sets the active step by the name. - - -
- - - API - - - - Attributes - - - - - Currently selected step name. - - - Occurs after the selected step has changed. - - - Determines if navigation to a step should be allowed. - - - - - - Defines the unique step name. - - - Used to override item index. - - - Marks the step as completed. - - - Overrides the step color. - - - Occurs when the button is clicked. - - - Custom render template for the marker(circle) part of the step item. - - - Custom render template for the text part of the step item. - - - - - - Currently selected panel name. - - - Occurs after the selected panel has changed. - - - - - - Defines the panel name that must match the corresponding step name. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Switches/SwitchPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Switches/SwitchPage.razor index f6f8a58540..54f1c30d86 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Switches/SwitchPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Switches/SwitchPage.razor @@ -52,25 +52,4 @@ - - API - - - - Attributes - - - - - Data type of Checked value. Support types are bool and bool?. - - - Gets or sets the checked flag. - - - Occurs when the check state is changed. - - - Component visual or contextual style variants. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Tables/TablePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Tables/TablePage.razor index f4ce01255b..188404c0ff 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Tables/TablePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Tables/TablePage.razor @@ -234,117 +234,4 @@ - - API - - - - Attributes - - - - - Makes the table to fill entire horizontal space. - - - Adds stripes to the table. - - - Adds borders to all the cells. - - - Adds a hover effect on each row. - - - Table without any borders. - - - Makes the table more compact by cutting cell padding in half. - - - Makes table responsive by adding the horizontal scroll bar. - - - Makes table have a fixed header and enables a scrollbar in the table body. - - - Makes table have a fixed set of columns. This will make it so that the table columns could be fixed to the side of the table. - - - Sets the table height when FixedHeader feature is enabled (defaults to 300px). - - - Sets the table max height when FixedHeader feature is enabled. - - - Defines whether users can resize Table’s columns. - - - Defines the resize mode of the Table’s columns. - - - Gets or sets the Table's responsive mode. - - - - Gets or sets whether the FixedColumns feature automatically resynchronizes the columns positions when they are added or removed. - - - Enabling this feature may impact performance due to constant recalculations of fixed column positions. - - - - - - - Defines if the group is expanded. - - - Defines if the group Expanded property can be toggled by clicking. It is still possible to toggle it programatically. - - - Determines the column span for the inner table cell. - - - Occurs when the row is clicked. - - - Occurs when the row is double clicked. - - - Specifies the title to be rendered inside the TableRowGroup. - - - Specifies the custom title content to be rendered inside the TableRowGroup. It has higher priority over the Title parameter. - - - - - - Gets or sets the cell variant color. - - - Number of rows a cell should span. - - - Number of columns a cell should span. - - - Defines the fixed position of the row cell within the table. - - - Occurs when the row cell is clicked. - - - Specifies the content to be rendered inside this TableRowCell. - - - Used to prevent the default action for an OnClickHandler. - - - Used to stop progation of the click action event. - - - When the Table.ResponsiveMode is set to TableResponsiveMode.Mobile, this caption will be used for the row. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Tabs/TabPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Tabs/TabPage.razor index f85751d130..c2d71108b4 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Tabs/TabPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Tabs/TabPage.razor @@ -112,86 +112,4 @@ - - Functions - - - - - - Name - Description - - - - - SelectTab(string name) - Sets the active tab by the name. - - -
- - - API - - - - Attributes - - - - - Makes the tab items to appear as pills. - - - Makes the tab items to extend the full available width. - - - Makes the tab items to extend the full available width, but every item will be the same width. - - - Defines the placement of a tab items. - - - Currently selected tab name. - - - Occurs after the selected tab has changed. - - - Controls the size of the items bar when in vertical mode. If left undefined it will default to the ColumnSize.IsAuto. - - - Defines how the tabs content will be rendered. - - - - - - Defines the unique tab name. - - - Occurs when the button is clicked. - - - Prevents user interactions and make it appear lighter. - - - - - - Currently selected panel name. - - - Occurs after the selected panel has changed. - - - Defines how the tabs content will be rendered. - - - - - - Defines the panel name that must match the corresponding tab name. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Texts/TextEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Texts/TextEditPage.razor index 38ae3715b1..70f0d981bf 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Texts/TextEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Texts/TextEditPage.razor @@ -175,85 +175,4 @@ When working with email and password fields, in some cases browsers might automatically autofill them with the values from user system. To prevent it you can define an autocomplete attribute, eg. autocomplete="new-password" on an input field. - - API - - - - Attributes - - - - - The role of the input text. - - - Input value. - - ")"> - Occurs after text has changed. - - - Remove the default form field styling and preserve the correct margin and padding. - - - Prevents modification of the input’s value. - - - Prevents user interactions and make it appear lighter. - - - Specifies the maximum number of characters allowed in the input element. - - - Sets the placeholder for the empty text. - - - Specifies a regular expression that the input element’s value is checked against on form validation. - - - Component visual or contextual style variants. - - - Component size variations. - - - A string representing a edit mask expression. - - - Specify the mask type used by the editor. - - - Specifies the visible width, in characters, of an input element. - - - If true the text in will be changed after each key press (overrides global settings). - - - If true the entered text will be slightly delayed before submitting it to the internal value. - - - Interval in milliseconds that entered text will be delayed from submitting to the internal value. - - - Occurs when a key is pressed down while the control has focus. - - - Occurs when a key is pressed while the control has focus. - - - Occurs when a key is released while the control has focus. - - - Occurs when the input box gains focus. - - - Occurs when the input box gains focus. - - - Occurs when the input box loses focus. - - - Set’s the focus to the component after the rendering is done. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimeEditPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimeEditPage.razor index 5a13342e0a..e0165fde55 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimeEditPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimeEditPage.razor @@ -82,31 +82,4 @@ - - API - - - - Attributes - - - - - Gets or sets the input time value. - - ")"> - Occurs when the time has changed. - - - The pattern attribute specifies a regular expression that the input element’s value is checked against on form submission. - - - Sets the placeholder for the empty time. - - - Set’s the focus to the component after the rendering is done. - - - The step attribute specifies the legal number intervals for seconds or milliseconds in a time field (does not apply for hours or minutes). - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimePickerPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimePickerPage.razor index 32c42ef5e4..5fc4b440fa 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimePickerPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Times/TimePickerPage.razor @@ -79,43 +79,4 @@ - - API - - - - Attributes - - - - - Gets or sets the input time value. - - ")"> - Occurs when the time has changed. - - - The earliest time to accept. - - - The latest time to accept. - - - The pattern attribute specifies a regular expression that the input element’s value is checked against on form submission. - - - Sets the placeholder for the empty time. - - - Defines the display format of the time. - - - Displays time picker in 24 hour mode without AM/PM selection when enabled. - - - Display the time menu in an always-open state with the inline option. - - - If enabled, the time menu will be positioned as static. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Toasts/ToastPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Toasts/ToastPage.razor index 2474682ca9..c70ef44ce5 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Toasts/ToastPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Toasts/ToastPage.razor @@ -110,52 +110,4 @@ Toasts can be dispatched to all four corners of a page. We do not recommend to use more than one position for toasts in an application because that could be disorienting for users. Pick one desired position and configure it in the Toaster. - - API - - - - Attributes - - - - - Specifies the position of the Toaster component. - - - Specifies the placement strategy of the Toaster component. - - - - - - Gets or sets the visibility state of the Toast. - - - Event callback for when the visibility state of the Toast changes. - - - Callback for handling the opening of the Toast. - - - Callback for handling the closing of the Toast. - - - Event callback for when the Toast has been opened. - - - Event callback for when the Toast has been closed. - - - Specifies whether the Toast should have an animated transition. - - - The duration of the animation in milliseconds. - - - Automatically hide the toast after the delay. - - - Delay in milliseconds before hiding the toast. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Tooltips/TooltipPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Tooltips/TooltipPage.razor index 39a968ec82..55c7e56659 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Tooltips/TooltipPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Tooltips/TooltipPage.razor @@ -90,55 +90,4 @@ - - API - - - - Attributes - - - - - Content displayed in the tooltip. - - - Position of the tooltip relative to it’s component. - - - Force the multiline display. - - - Always show tooltip, instead of just when hovering over the element. - - - Force inline block instead of trying to detect the element block. - - - Controls the fade effect. - - - Duration in ms of the fade transition animation. - - - Determines the events that cause the tooltip to show. - - - Which element the trigger event listeners are applied to (instead of the reference element). - - - Specifies the z-index CSS on the root popper node. - - - Determines if the tooltip has interactive content inside of it, so that it can be hovered over and clicked inside without hiding. - - - The element to append the tooltip to. If Interactive = true, the default behavior is appendTo: "parent". - - - Specifies the delay in ms once a trigger event is fired before a Tooltip shows. - - - Specifies the delay in ms once a trigger event is fired before a Tooltip hides. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Typographies/TypographyPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Typographies/TypographyPage.razor index 1a9c7b7cf1..bc435a616d 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Typographies/TypographyPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Typographies/TypographyPage.razor @@ -142,70 +142,4 @@ - - API - - - - Attributes - - - - - Sets the text color. - - - Sets the text alignment. - - - Sets the text transformation. - - - Sets the text decoration. - - - Sets the text weight. - - - Determines how the text will behave when it is larger than a parent container. - - - Determines the font size of an element. - - - Italicize text if set to true. - - - If true, the content of the component will be copied to clipboard on click event. - - - - - - Sets the heading size. - - - - - - Sets the display heading size. - - - - - - Remove the default list-style and left margin on list items (immediate children only). - - - Defines the marker images for list items. - - - - - - Remove the default list-style and left margin on list items (immediate children only). - - - Defines the marker images for list items. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Components/Validations/ValidationPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Components/Validations/ValidationPage.razor index ae25837c6f..68f282a837 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Components/Validations/ValidationPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Components/Validations/ValidationPage.razor @@ -296,70 +296,4 @@ - - API - - - - Attributes - - - - - Defines the validation mode for validations inside of this container. - - - Supplies the edit context explicitly. If using this parameter, do not also supply Model, since the model value will be taken from the Model property. - - - Specifies the top-level model object for the form. An edit context will be constructed for this model. - - - Message that will be displayed if any of the validations does not have defined error message. - - - Event is fired only after all of the validation are successful. - - - Event is fired whenever there is a change in validation status. - - - Run validation only when user starts entering values. - - - Defines the default handler type that will be used by the validation, unless it is overriden by Validation.HandlerType property. - - - - - - Gets or sets the current validation status. - - - Event is fired whenever there is a change in validation status. - - - Validates the input value after it has being changed. - - - Asynchronously validates the input value after it has being changed. - - - Forces validation to use regex pattern matching instead of default validator handler. - - - Custom handler used to override error messages in case the localization is needed. - - - Forces the custom validation handler to be used while validating the values. - - - - - - If true, shows the multiline error messages. - - - If true, shows the tooltip instead of label. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Animate/AnimatePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Animate/AnimatePage.razor index dc03ee3082..54da19f80c 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Animate/AnimatePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Animate/AnimatePage.razor @@ -69,65 +69,4 @@ - - API - - - - Attributes - - - - - Gets or sets the animate element id. - - - Gets or sets the animation effect. - - - Gets or sets the easing effect. - - - Gets os sets the total duration of the animation. - Values from 0 to 3000, with step 50ms. - - - Gets os sets the total duration of the animation, in milliseconds. - Values from 0 to 3000, with step 50ms. - - - Gets os sets the delay of the animation before it runs automatically, or manually. - Values from 0 to 3000, with step 50ms. - - - Gets os sets the delay in milliseconds of the animation before it runs automatically, or manually. - Values from 0 to 3000, with step 50ms. - - - Whether elements should animate out while scrolling past them. - - - Whether animation should happen only once - while scrolling down. - - - Element whose offset will be used to trigger animation instead of an actual one. - - - Defines which position of the element regarding to window should trigger the animation. - - - Defines the custom name of the options to get from the configuration. - - - Defines the animate options. - - - True if the animation will be executed automatically. Otherwise if false it needs to be run manually with Run method. - - - Captures all the custom attribute that are not part of Animate component. - - - Specifies the content to be rendered inside this Animate. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Autocomplete/AutocompletePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Autocomplete/AutocompletePage.razor index 2ba2d0b2cc..5f1e1af955 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Autocomplete/AutocompletePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Autocomplete/AutocompletePage.razor @@ -128,235 +128,4 @@ - - API - - - - Attributes - - - - - Model data type. - - - Data used for the search. - - - Selector for the display name field. - - - Selector for the value field. - - - Currently selected value. - - - Raises an event after the selected value has changed. - - - Currently selected text. - - - Raises an event after the selected text has changed. - - - Gets or sets the currently selected item text. CurrentSearch is deprecated and will be removed in a future version, please use Search instead. - - - Occurs on every search text change. CurrentSearchChanged is deprecated and will be removed in a future version, please use SearchChanged instead. - - - Gets or sets the currently selected item text. - - - Occurs on every search text change. - - - Placeholder for the empty search field. - - - Minimum number of character needed to start search. Set this to 0 to make the Autocomplete function like a dropdown. - - - Sets the maximum height of the dropdown menu. - - - Filter method used to search the data. - - - Disable the input field. - - - If true the text in will be changed after each key press (overrides global settings). - - - If true the entered text will be slightly delayed before submitting it to the internal value. - - - Interval in milliseconds that entered text will be delayed from submitting to the internal value. - - - Validation handler used to validate selected value. - - - Asynchronously validates the selected value. - - - Render fragment when no value has been found on the data source. - - - Raises an event when no value has been found on the data source. - - - Allows the value to not be on the data source. - - - Handler for custom filtering on Autocomplete’s data source. - - - Allows for multiple selection. - Multiple parameter will be removed in a future version, please replace with SelectionMode.Multiple Parameter instead. - - - Sets the Badge color for the multiple selection values. Used when multiple selection is set. - - - Sets the disabled Badge color for the multiple selection values. Used when multiple selection is set. - - - Currently selected items values. - - - Occurs after the selected values have changed. - - - Currently selected items texts. - - - Occurs after the selected texts have changed. - - - Specifies the item content to be rendered inside each dropdown item. - - - Specifies whether Autocomplete's dropdown closes on selection. This is only evaluated when multiple selection is set. - Defauls to true. - - - Event handler used to load data manually by based on the current search value. - - - Suggests already selected option(s) when presenting the options. - - - Gets or sets an array of the keyboard pressed values for the ConfirmKey. - If this is null or empty, there will be no confirmation key. - - - Gets or sets whether Autocomplete auto preselects the first item when the drop down opens. - - - Gets or sets whether Autocomplete auto preselects the first item from the data list on initialization. This overrides initial SelectedValue. - - - Gets or sets the Autocomplete Selection Mode. - - - If true, the searched text will be highlighted in the dropdown list items based on Search value. - - - Defines the background color of the search field. - - - Defines the text color of the search field. - - - Defines the class for the search field. - - - Defines the style for the search field. - - - Event handler used to detect when the autocomplete is closed. - - - Event handler used to detect when the autocomplete is opened. - - - Specifies the not found content to be rendered when no data is found and FreeTyping is enabled. - - - - - - Methods - - - - - Scrolls an item into view. - - - Triggers the reload of the Autocomplete data. - Makes sure not to reload if the Autocomplete is in a loading state. - - - Adds a Multiple Selection. - - - Removes a Multiple Selection. - - - Clears the selected value and the search field. - - - Clears the current selection. - - - Opens the Autocomplete Dropdown. - - - Closes the Autocomplete Dropdown. - - - Gets whether the TValue is selected. - - - Gets whether the TItem is selected. - - - Gets a TItem from Data by using the provided ValueField. - - - Gets a TItem from Data by using the provided TextField. - - - IsSafeToClose is deprecated. This API now always returns true. - - - Specifies the maximum number of characters allowed in the input element. - - - Gets or sets whether the Autocomplete will use the Virtualize functionality. - - - Specifies the badge content to be rendered for each tag (multiple selected item). - - - Occurs after the search box text has changed. - - - Occurs when a key is pressed down while the search box has focus. - - - Occurs when the search box gains or loses focus. - - - The blur event fires when the search box has lost focus. - - - Defines the positioning strategy of the dropdown menu as a 'floating' element. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Captcha/CaptchaPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Captcha/CaptchaPage.razor index 4c2835b19c..ae1c4cf2ee 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Captcha/CaptchaPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Captcha/CaptchaPage.razor @@ -100,41 +100,7 @@ - - API - - - - Attributes - - - - - The current state of the Captcha. - - - A Captcha solved event. Provides contextual information about the Captcha state after the user has solved. - - - A Captcha validation event. Further validation may be performed here. - - - The Captcha expired event. - - - - - Methods - - - - - Submits the Captcha. - - - Resets the Captcha. - - + ReCaptchaOptions diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Chart/ChartPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Chart/ChartPage.razor index e24ac0db04..48d9d67e10 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Chart/ChartPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Chart/ChartPage.razor @@ -1,4 +1,5 @@ @page "/docs/extensions/chart" +@using Blazorise.Charts.Trendline @@ -112,41 +113,12 @@ + + - API + Options - - Chart - - - - - Defines the chart type. - - - Defines the chart data. - - - Defines the chart options. - - - Defines the chart data that is serialized as JSON string. [WILL BE REMOVED] - - - Defines the chart options that is serialized as JSON string. [WILL BE REMOVED] - - - Raised when clicked on data point. - - - Raised when hovered over data point. - - - Raised when mouse leaves the chart area. - - - ChartOptions @@ -208,7 +180,7 @@ - Animation + ChartAnimation diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartDataLabels/ChartDataLabelsPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartDataLabels/ChartDataLabelsPage.razor index 4d21ccfb5f..9c07985d65 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartDataLabels/ChartDataLabelsPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartDataLabels/ChartDataLabelsPage.razor @@ -81,19 +81,4 @@ - - API - - - - Attributes - - - - - List of datalabels to apply to the parent chart. - - - Datalabels that will be set to the options instead of to the datasets. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartStreaming/ChartStreamingPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartStreaming/ChartStreamingPage.razor index eac16026ed..829b2bffb3 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartStreaming/ChartStreamingPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartStreaming/ChartStreamingPage.razor @@ -58,29 +58,4 @@ - - API - - - - Methods - - - - - - Name - Description - - - - - Pause() - Pauses the current chart streaming. - - - Play() - Plays the current chart streaming. - - -
\ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartTrendline/ChartTrendlinePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartTrendline/ChartTrendlinePage.razor index 8f21e6c7ba..f8517fa46c 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartTrendline/ChartTrendlinePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartTrendline/ChartTrendlinePage.razor @@ -1,4 +1,5 @@ @page "/docs/extensions/chart-trendline" +@using Blazorise.Charts.Trendline @@ -42,4 +43,6 @@ - \ No newline at end of file + + + diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsAnnotation/ChartAnnotationPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsAnnotation/ChartAnnotationPage.razor index 520f6a098e..0dd01b6b53 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsAnnotation/ChartAnnotationPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsAnnotation/ChartAnnotationPage.razor @@ -79,16 +79,4 @@ - - API - - - - Attributes - - - - - Defines the options for an annotation. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsZoom/ChartsZoomPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsZoom/ChartsZoomPage.razor index 440fe17a36..e9cb15b1f6 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsZoom/ChartsZoomPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ChartsZoom/ChartsZoomPage.razor @@ -67,9 +67,7 @@ - - API - + Options diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Cropper/CropperPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Cropper/CropperPage.razor index bf7edceacc..0c8a25da8b 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Cropper/CropperPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Cropper/CropperPage.razor @@ -67,70 +67,4 @@ - - API - - - - Attributes - - - - - Defines the aspect ratio of the image cropper. - - - The original image source. - - - The alt text of the image. - - - This event fires when the canvas (image wrapper) or the crop box starts to change. - - - This event fires when the canvas (image wrapper) or the crop box is changing. - - - This event fires when the canvas (image wrapper) or the crop box stops changing. - - - This event fires when the canvas (image wrapper) or the crop box changes. - - - This event fires when a cropper instance starts to zoom in or zoom out its canvas (image wrapper). - - - Is the cropper enabled. - - - Provides a shared state and syncronization context between the cropper and cropper viewer. - - - The cross-origin attribute of the image. - - - This event fires when the image is ready / loaded. - - - - - - Provides a shared state and syncronization context between the cropper and cropper viewer. - - - - - - The destination width of the output canvas. - - - The destination height of the output canvas. - - - A string indicating the image format. The default type is image/png this image format will be also used if the specified type is not supported. - - - A Number between 0 and 1 indicating the image quality to be used when creating images using file formats that support lossy compression (such as image/jpeg or image/webp). - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/DropdownList/DropdownListPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/DropdownList/DropdownListPage.razor index 2f03e445b8..819537b981 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/DropdownList/DropdownListPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/DropdownList/DropdownListPage.razor @@ -50,52 +50,4 @@ - - API - - - - Attributes - - - - - Model data type. - - - Data used for the search. - - - Selector for the display name field. - - - Selector for the value field. - - - Currently selected value. - - - Raises an event after the selected value has changed. - - - Sets the maximum height of the dropdown menu. - - - Gets or sets whether the dropdown will use the Virtualize functionality. - - - Gets or sets the DropdownList Selection Mode. - - - Currently selected item values. - - - Occurs after the selected item values have changed. - - - Defines the size of toggle button. - - - Method used to get the disabled items from the supplied data source. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Icons/IconsPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Icons/IconsPage.razor index 15d54cc18d..99702ec3ff 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Icons/IconsPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Icons/IconsPage.razor @@ -123,22 +123,4 @@ - - API - - - - Attributes - - - - - Icon name. - - - Suggested icon style. - - - Defines the icon size. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ListView/ListViewPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ListView/ListViewPage.razor index 8c83278460..14cdbc965d 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ListView/ListViewPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/ListView/ListViewPage.razor @@ -62,91 +62,4 @@ - - API - - - - Attributes - - - - - Gets or sets the items data-source. - - - Gets or sets currently selected item. - - - Occurs after the selected item has changed. - - - Method used to get the display field from the supplied data source. - - - Method used to get the value field from the supplied data source. - - - Custom css class-names. - - - Custom styles. - - - Sets the ListView Height. - - - Sets the ListView MaxHeight. - - - Remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards). - - - Makes the list group scrollable by adding a vertical scrollbar. - - - Defines the list-group behavior mode. - - - Captures all the custom attribute that are not part of Blazorise component. - - - Specifies the content to be rendered inside the ListView. - - - Specifies the content to be rendered inside each item of the ListView. - - - Gets or sets whether the listview will use the Virtualize functionality. - - - Defines the list-group selection mode. - - - Gets or sets currently selected items names. - - - An event raised when SelectedItems are changed. - - - Method used to get the disabled items from the supplied data source. - - - Method used to get the text color for the item. - - - Method used to get the background color for the item. - - - Method used to get the padding for the item. - - - Method used to get the margin for the item. - - - Method used to get the class for the item. - - - Method used to get the style for the item. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LoadingIndicator/LoadingIndicatortPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LoadingIndicator/LoadingIndicatortPage.razor index d07c9ac8b5..fb6e62b322 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LoadingIndicator/LoadingIndicatortPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LoadingIndicator/LoadingIndicatortPage.razor @@ -115,64 +115,4 @@ - - API - - - - Attributes - - - - - Fade in indicator screen into view. Default true for ApplicationLoadingIndicator. - - - Fade in animation duration - - - Show indicator in full screen mode. Default true for ApplicationLoadingIndicator. - - - Set overlay background color. Use alpha channel for opacity. - - - Indicator horizontal placement. - - - Indicator div padding. - - - Loading indicator template. - - - Indicator vertical placement. - - - Current initializing state. - - - Initializing state template. Use this to display placeholder UI while your component is initializing (e.g. loading data from server). - - - Used when wrapping inline content such as input controls. - - - Set spinner background color. - - - Set spinner color. - - - Set spinner height. - - - Set spinner width. - - - Current loading indicator state. - - - Manually set screen z-index. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LottieAnimation/LottieAnimationPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LottieAnimation/LottieAnimationPage.razor index 03a68624e4..0f208e0503 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LottieAnimation/LottieAnimationPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/LottieAnimation/LottieAnimationPage.razor @@ -54,46 +54,4 @@ While the animation will work fine without it, it is advised to define a fixed height, eg. LottieAnimation Style="height: 250px;". That way, the user can see the loading animation until the component is fully loaded. - - API - - - - Attributes - - - - - Occurs once the animation completes. - - - Gets or sets the current playback frame. - - - Occurs whenever the current frame changes. - - - Controls the animation playback direction. - - - Occurs once the data for the animation has loaded. - - - True to loop the animation. If a number is provided then it specifies the number of times to loop. - - - Occurs whenever a loop of the animation completes. - - - Gets or sets the source path for the animation. - - - Controls whether or not the animation is paused. - - - Gets or sets the renderer to use for the animation. - - - Controls the playback speed. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Markdown/MarkdownPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Markdown/MarkdownPage.razor index 9fdffc1a5a..2b7b85346b 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Markdown/MarkdownPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Markdown/MarkdownPage.razor @@ -86,219 +86,4 @@ - - API - - - - Attributes - - - - - Gets or sets the markdown value. - - - An event that occurs after the markdown value has changed. - - - If set to true, force downloads Font Awesome (used for icons). If set to false, prevents downloading. - - - If set to true, enables line numbers in the editor. - - - If set to false, disable line wrapping. Defaults to true. - - - Sets the minimum height for the composition area, before it starts auto-growing. - Should be a string containing a valid CSS value like "500px". Defaults to "300px". - - - Sets fixed height for the composition area. minHeight option will be ignored. - Should be a string containing a valid CSS value like "500px". Defaults to undefined. - - - If set, displays a custom placeholder message. - - - If set, customize the tab size. Defaults to 2. - - - Override the theme. Defaults to easymde. - - - rtl or ltr. Changes text direction to support right-to-left languages. Defaults to ltr. - - - An array of icon names to hide. Can be used to hide specific icons shown by default without - completely customizing the toolbar. - - - An array of icon names to show. Can be used to show specific icons hidden by default without - completely customizing the toolbar. - - - [Optional] Gets or sets the content of the toolbar. - - - If set to false, disable toolbar button tips. Defaults to true. - - - Adds a prefix to the toolbar button classes when set. For example, a value of "mde" results in "mde-bold" for the Bold button. - - - Occurs after the custom toolbar button is clicked. - - - If set to true, enables the image upload functionality, which can be triggered by drag-drop, - copy-paste and through the browse-file window (opened when the user click on the upload-image icon). - Defaults to true. - - - Gets or sets the max chunk size when uploading the file. - - - Gets or sets the Segment Fetch Timeout when uploading the file. - - - Maximum image size in bytes, checked before upload (note: never trust client, always check image - size at server-side). Defaults to 1024*1024*2 (2Mb). - - - A comma-separated list of mime-types used to check image type before upload (note: never trust client, always - check file types at server-side). Defaults to image/png, image/jpeg. - - - The endpoint where the images data will be sent, via an asynchronous POST request. The server is supposed to - save this image, and return a json response. - - - If set to true, will treat imageUrl from imageUploadFunction and filePath returned from imageUploadEndpoint as - an absolute rather than relative path, i.e. not prepend window.location.origin to it. - - - CSRF token to include with AJAX call to upload image. For instance used with Django backend. - - - Texts displayed to the user (mainly on the status bar) for the import image feature, where - #image_name#, #image_size# and #image_max_size# will replaced by their respective values, that - can be used for customization or internationalization. - - - Occurs every time the selected image has changed. - - - Occurs when an individual image upload has started. - - - Occurs when an individual image upload has ended. - - - Occurs every time the part of image has being written to the destination stream. - - - Notifies the progress of image being written to the destination stream. - - - Errors displayed to the user, using the errorCallback option, where #image_name#, #image_size# - and #image_max_size# will replaced by their respective values, that can be used for customization - or internationalization. - - - A callback function used to define how to display an error message. Defaults to (errorMessage) => alert(errorMessage). - - - If set to true, focuses the editor automatically. Defaults to false. - - - Useful, when initializing the editor in a hidden DOM node. If set to { delay: 300 }, - it will check every 300 ms if the editor is visible and if positive, call CodeMirror's refresh(). - - - Saves the text that's being written and will load it back in the future. - It will forget the text when the form it's contained in is submitted. - - - Customize how certain buttons that style blocks of text behave. - - - If set to true, force text changes made in EasyMDE to be immediately stored in original text area. - Defaults to false. - - - If set to false, indent using spaces instead of tabs. Defaults to true. - - - textarea or contenteditable. - Defaults to textarea for desktop and contenteditable for mobile. - contenteditable option is necessary to enable nativeSpellcheck. - - - Customize how certain buttons that insert text behave. Takes an array with two elements. - The first element will be the text inserted before the cursor or highlight, and the second - element will be inserted after. - For example, this is the default link value: ["[", "](http://)"]. - - - If set to false, disable native spell checker. Defaults to true. - - - Adjust settings for parsing the Markdown during editing (not previewing). - - - A space-separated string that will be applied to the preview screen when activated. - Defaults to "editor-preview". - - - EasyMDE will show preview of images, false by default, - preview for images will appear only for images on separate lines. - - - Customize the text used to prompt for URLs. - - - If set to true, a JS alert window appears asking for the link or image URL. - Defaults to false. - - - Adjust settings for parsing the Markdown during previewing (not editing). - - - Chooses a scrollbar implementation. - The default is "native", showing native scrollbars. - - The core library also provides the "null" style, which completely hides the scrollbars. - Addons can implement additional scrollbar models. - - - Keyboard shortcuts associated with this instance. - Defaults to the array of shortcuts. - - - If set to false, allows side-by-side editing without going into fullscreen. Defaults to false. - - - If set to false, disable the spell checker. Defaults to true - - - If set to empty array, hide the status bar. Defaults to the array of built-in status bar items. - Optionally, you can set an array of status bar items to include, and in what order. - - - If set to false, remove the CodeMirror-selectedtext class from selected lines. Defaults to true. - - - If set to false, disable syncing scroll in side by side mode. Defaults to true. - - - can be *, - or +. Defaults to *. - - - Gets or sets whether report progress should be disabled. By enabling this setting, ImageUploadProgressed and ImageUploadWritten callbacks won't be called. Internal file progress won't be tracked. - This setting can speed up file transfer considerably. - - - Custom function for parsing the plaintext Markdown and returning HTML. Used when user previews. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/PdfViewer/PdfViewerApi.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/PdfViewer/PdfViewerApi.razor index 70a8587993..1c4288dc96 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/PdfViewer/PdfViewerApi.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/PdfViewer/PdfViewerApi.razor @@ -1,62 +1 @@ - - API - - - - Methods - - - - - Navigates to the previous page of the PDF document. - - - Navigates to the next page of the PDF document. - - - Navigates to the specified page number in the PDF document. - - - Sets the scale factor for displaying the PDF document. - - - Prints the currently loaded PDF document. - - - - - Attributes - - - - - Gets or sets the source URL or base64 formated string of the PDF document to be loaded. - - - Gets or sets the current page number of the PDF document. The default value is 1. - - - Gets or sets the callback event that is triggered when the page number changes. - - - Gets or sets the scale factor for displaying the PDF document. The default value is 1, which represents the original size. - - - Gets or sets the callback event that is triggered when the scale changes. - - - Gets or sets the orientation of the PDF document. - - - - - - Defines if the paging buttons should be displayed. - - - Defines if the zoom buttons should be displayed. - - - Defines if the print button should be displayed. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/QRCode/QRCodePage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/QRCode/QRCodePage.razor index eaf7d93f2a..af796b24f6 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/QRCode/QRCodePage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/QRCode/QRCodePage.razor @@ -101,46 +101,4 @@ Placing an image within the QRCode can make it unreadable, so it is best to increase the error level(EccLevel) of the code so that the QR scanners can easily read it. - - API - - - - Attributes - - - - - Value used for QR code generation. - - - Custom payload used for QR code generation. - - - Image alt text. - - - The level of error correction to use. - - - Color used as dark color. - - - Color used as light color. - - - Pixels per module. - - - Draw quiet zones (blank margins around QR Code image). - - - The icon that is places in the middle of the QRCode, can be in base64 format or an absolute url. - - - Defines how much space the icon will occupy within the QRCode. - - - Defines how large the borders will be for the icon that is placed within the QRCode. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/RichTextEdit/RichTextEditApi.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/RichTextEdit/RichTextEditApi.razor index 05bef525bf..f56f017a26 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/RichTextEdit/RichTextEditApi.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/RichTextEdit/RichTextEditApi.razor @@ -1,123 +1 @@ - - API - - - - Events - - - - - Occurs when the content within the editor changes. - - - Occurs when the ENTER key is pressed within the editor. This event is triggered only when SubmitOnEnter is enabled. - - - Occurs when the editor gains focus. - - - Occurs when the editor loses focus. - - - - - Methods - - - - - Sets the editor content as HTML asynchronously. - - - Gets the editor content as HTML asynchronously. - - - Sets the editor content as a Quill Delta JSON asynchronously. - - - Gets the editor content as a Quill Delta JSON asynchronously. - - - Sets the editor content as plain text asynchronously. - - - Gets the editor content as plain text asynchronously. - - - Clears the editor content asynchronously. - - - - - Attributes - - - - - The custom toolbar definition. - - - The editor content. - - - Editor read-only flag. - - - The editor theme. - - - Placeholder text for empty editor. - - - Toolbar position (top or bottom). - - - Call EnterPressed event when pressing ENTER key. - - - The JavaScript method to call to configure additional QuillJS modules and or add custom bindings. - - - - - - The float position on the toolbar. - - - The group content. - - - - - - The QuillJS action associated with the select. - - - The QuillJS action selected value. - - - The custom markup/text to display. - - - - - - The QuillJS action associated with the select. - - - The RichTextEditToolbarSelectItem items. - - - - - - The QuillJS action selected value. - - - Is the select item selected. - - - The custom markup/text to display. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SelectList/SelectListPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SelectList/SelectListPage.razor index b8786af490..39dab16d45 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SelectList/SelectListPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SelectList/SelectListPage.razor @@ -54,61 +54,4 @@ - - API - - - - Attributes - - - - - Model data type. - - - Bound value data type. - - - Data used for the search. - - - Selector for the display name field. - - - Selector for the value field. - - - Selector for disabling list items. - - - Currently selected value. - - - Selected item value when in multi edit mode. - - - Raises an event after the selected value has changed. - - - Occurs when the selected items value has changed (only when Multiple). - - - Specifies that multiple items can be selected. - - - Specifies how many options should be shown at once. - - - Display text of the default select item. - - - Value of the default select item. - - - If true, hides the default item. - - - If true, hides the default item. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Sidebar/SidebarPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Sidebar/SidebarPage.razor index c2f36a6964..2be4771815 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Sidebar/SidebarPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Sidebar/SidebarPage.razor @@ -43,7 +43,7 @@ - Please be aware that the sidebar component is obsolete and that is generally replaced by the newset Bar component. + Please be aware that the sidebar component is obsolete and that is generally replaced by the newest Bar component. diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SignaturePad/SignaturePadPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SignaturePad/SignaturePadPage.razor index fcdc888e0d..b78e86dcb8 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SignaturePad/SignaturePadPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SignaturePad/SignaturePadPage.razor @@ -183,83 +183,4 @@ - - API - - - - Methods - - - - - Clears the content of a signature canvas. - - - Undos the last stroke if there is any. - - - - - Attributes - - - - - The color used to define the background color of the signature pad. Can be any color format; including HEX, or rgb. - - - The color used to define the lines color of the signature pad. Can be any color format; including HEX, or rgb. - - - Binds the value of the signature pad to a specified variable. - - - The event that is triggered when the signature pad value changes. The event provides the new signature as a byte array. - - - Defines the size of the dots used in drawing the signature. - - - Defines the maximum width of the signature stroke. - - - Defines the minimum width of the signature stroke. - - - Add the next point only if the previous one is farther than 'n' pixels. Defaults to 5. - - - Defines the delay time in milliseconds between each point of signature pad. - - - Defines the smoothness of the signature pad by adjusting the line thickness. - - - The image type [png, jpeg, svg] to get from the canvas element. - - - The encoder options for image type [png, jpeg] to get from the canvas element. Accepted range is from 0 to 1, where 1 means best quality. - - - If true, the [svg] image returned from the canvas will include background color defined by the BackgroundColor parameter. - - - If true, prevents the user interaction. - - - Gets or sets the event that is triggered when a new stroke begins on the signature pad. The event provides information about the starting point of the stroke. - - - Gets or sets the event that is triggered when a stroke ends on the signature pad. The event provides the signature pad's current image data as a Data URL. - - - Defines the width, in pixels, of the underline canvas element. - - - Defines the height, in pixels, of the underline canvas element. - - - If defined, indicates that its element can be focused and can participates in sequential keyboard navigation. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Snackbar/SnackbarPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Snackbar/SnackbarPage.razor index 1e2fd965bc..b15cda5ea7 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Snackbar/SnackbarPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Snackbar/SnackbarPage.razor @@ -84,40 +84,4 @@ - - API - - - - Attributes - - - - - Defines the snackbar location. - - - Defines the snackbar color. - - - Defines the visibility of snackbar. - - - Allow snackbar to show multiple lines of text. - - - Defines the interval (in milliseconds) after which the snackbar will be automatically closed. - - - efines the base animation duration in milliseconds. - - - If clicked on snackbar, a close action will be delayed by increasing the DefaultInterval time (used if no value is provided in the Push method). - - - Defines the interval(in milliseconds) by which the snackbar will be delayed from closing. - - - Occurs after the snackbar has closed. - - + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SpinKit/SpinKitPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SpinKit/SpinKitPage.razor index 3785f3ca9d..bf62f91433 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SpinKit/SpinKitPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/SpinKit/SpinKitPage.razor @@ -65,25 +65,4 @@ - - API - - - - Attributes - - - - - Defines the spinner type. - - - Defines the custom spinner color. - - - Defines the custom spinner size. - - - Position the spinner to the center of its container. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Splitter/SplitterPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Splitter/SplitterPage.razor index 1f5e6e3c6e..848bce45a6 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Splitter/SplitterPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Splitter/SplitterPage.razor @@ -132,59 +132,4 @@ - - API - - - - Attributes - - - - - Gutter size in pixels. Defaults to 10. - - - - Defines the custom background image for the gutter element. - - - This parameter accepts either a Base64 encoded string that represents an image, or a URL that points to an image resource. - - - - When the split is created, if ExpandToMin is true, the minSize for each element overrides the percentage value from the sizes option. - - - Determines how the gutter aligns between the two elements. - - - - Drag this number of pixels at a time. Defaults to 1 for smooth dragging, but can be set to a pixel value to give more control over the resulting sizes. - - - Works particularly well when the GutterSize is set to the same size. - - - - Direction to split in. Can be Vertical or Horizontal. - - - Cursor to display while dragging. - - - - - - Initial size of a section element in percents or CSS values. - - - Minimum size of the section, specified as pixel value. - - - Maximum size of the section, specified as pixel value. - - - Snap to minimum size offset in pixels. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TransferList/TransferListPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TransferList/TransferListPage.razor index 8a78a4f3d9..90f30e54d1 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TransferList/TransferListPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TransferList/TransferListPage.razor @@ -89,110 +89,4 @@ - - API - - - - Attributes - - - - - Gets or sets the items data source for the Transfer List. - - - Gets or sets the function used to get the value field from the supplied data source. - - - Gets or sets the function used to get the text field from the supplied data source. - - - Defines the behavior mode of the Transfer List. - - - Defines the selection mode of the Transfer List. - - - Makes the Transfer List scrollable by adding a vertical scrollbar. - - - Specifies the content to be rendered inside the Transfer List. - - - Enables the "Move All" Actions. - - - Defines the color of the move buttons. - - - Sets the TransferList MaxHeight. Defaults to 300px. - - - Gets or sets the items in the start list. - - - Gets or sets the event callback for changes in the start list. - - - Gets or sets the items in the end list. - - - Gets or sets the event callback for changes in the end list. - - - Gets or sets item that is currently selected in the start list. - - - Gets or sets the event callback for changes in the start list. - - - Gets or sets item that is currently selected in the end list. - - - Gets or sets the event callback for changes in the end list. - - - Gets or sets items that are currently selected in the start list. - - - Gets or sets the event callback for changes to the items in the start list. - - - Gets or sets items that are currently selected in the end list. - - - Gets or sets the event callback for changes to the items in the end list. - - - Whether the item may be moved to the Start List. - - - Whether the item may be moved to the End List. - - - Specifies the content to be rendered inside each item of the ListView. - - - Specifies the content to be rendered inside each item of the ListView. - - - - - Methods - - - - - Moves selected items from the start list to the end list. - - - Moves selected items from the end list to the start list. - - - Moves all items from the start list to the end list. - - - Moves all items from the end list to the start list. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/TreeViewPage.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/TreeViewPage.razor index 474bf75d59..7274ecbbf1 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/TreeViewPage.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/TreeView/TreeViewPage.razor @@ -193,110 +193,4 @@ - - API - - - - Attributes - - - - - Collection of child TreeView items (child nodes). If null/empty then this node won’t expand. - - - Template to display content for the node. - - - Defines the selection mode of the TreeView. - - - The currently selected TreeView item/node. - - - Occurs when the selected TreeView node has changed. - - - The currently selected TreeView items/nodes. - - - Occurs when the selected TreeView nodes are changed. - - - Defines if the treenode should be automatically expanded. Note that it can happen only once when the tree is first loaded. - - - Controls if the child nodes, which are currently not expanded, are visible. See docs for Virtualization. - - - List of currently expanded TreeView items (child nodes). - - - Occurs when the collection of expanded nodes has changed. - - - Expression that allows the child nodes to be identified for a particular node. - - - Expression that indicates whether the current node has any children nodes? - - - Expression that indicates whether the current node should be disabled from selection - - - Asynchronous expression that allows the child nodes to be identified for a particular node. - - - Asynchronous expression that indicates whether the current node has any children nodes? - - - Defines the name of the treenode expand icon. - - - Defines the style of the treenode expand icon. - - - Defines the size of the treenode expand icon. - - - Defines the name of the treenode collapse icon. - - - Defines the style of the treenode collapse icon. - - - Defines the size of the treenode collapse icon. - - - The event is fired when the node is right clicked to show the context menu. - - - Used to prevent the default action for a NodeContextMenu event. - - - - - Methods - - - - - Expands all the collapsed TreeView nodes. - - - Collapses all the expanded TreeView nodes. - - - Toggles the checked state of the node when in multiple selection mode. - - - Selects the node when in single selection mode. - - - Attempts to find and remove an existing node from the TreeView. - - - Triggers the reload of the TreeView Nodes. - - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Video/VideoApi.razor b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Video/VideoApi.razor index 1cf423866f..5b5ab63611 100644 --- a/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Video/VideoApi.razor +++ b/Documentation/Blazorise.Docs/Pages/Docs/Extensions/Video/VideoApi.razor @@ -1,222 +1 @@ - - API - - - - Events - - - - - Sent periodically to inform interested parties of progress downloading the media. Information about the current amount of the media that has been downloaded is available in the media element's buffered attribute. - - - Sent when the media begins to play (either for the first time, after having been paused, or after ending and then restarting). - - - Sent when playback of the media starts after having been paused; that is, when playback is resumed after a prior pause event. - - - Sent when playback is paused. - - - The time indicated by the element's currentTime attribute has changed. - - - Sent when the audio volume changes (both when the volume is set and when the muted state is changed). - - - Sent when a seek operation begins. - - - Sent when a seek operation completes. - - - Sent when the playback speed changes. - - - Sent when playback completes. Note: This does not fire if autoplay is true. - - - Sent when the player enters fullscreen mode (either the proper fullscreen or full-window fallback for older browsers). - - - Sent when the player exits fullscreen mode. - - - Sent when captions are enabled. - - - Sent when captions are disabled. - - - Sent when the caption language is changed. - - - Sent when the controls are hidden. - - - Sent when the controls are shown. - - - Triggered when the instance is ready for API calls. - - - The quality of playback has changed. - - - - - Methods - - - - - Starts playback. - - - Pauses playback. - - - Toggles playback based on current status if no parameters are passed. - - - Stops playback and resets to the start. - - - Restarts playback. - - - Rewinds playback by the specified seek time. - - - Fast forwards playback by the specified seek time. - - - Increases volume by the specified step. - - - Decreases volume by the specified step. - - - Toggles captions display. - - - Enters fullscreen or falls back to full window/viewport if not supported. - - - Exits fullscreen. - - - Toggles fullscreen mode. - - - Triggers the AirPlay dialog on supported devices. - - - Toggles the video controls, with optional parameter to force on/off. - - - Shows a text track by its index from the list of tracks. - - - Hides a text track by its index from the list of tracks. - - - Adds a new text track to the list of tracks. - - - Clears all text tracks from the list. - - - Changes the media playback rate. A value of 1.0 represents normal speed, 0.5 is half speed, and 2.0 is double speed. - - - - - Attributes - - - - - Gets or sets the controls visibility of the player. - - - The default amount of delay in milliseconds while media playback is progressing without user activity to indicate an idle state and hide controls. - - - Gets or sets the list of controls that are rendered by the player. Possible list of values are contained in VideoControlsType. - - - Hide video controls automatically after 2s of no mouse or focus movement, on control element blur (tab out), on playback start or entering fullscreen. As soon as the mouse is moved, a control element is focused or playback is paused, the controls reappear instantly. - - - Gets or sets the autoplay state of the player. - - - Only allow one player playing at once. - - - Whether to start playback muted. - - - Gets or sets the current source for the player. - - - Gets or sets the the URL of media poster or thumbnail image, generally before playback begins. - - - Gets or sets the URL of thumbnails which will be used to display preview images when interacting with the time slider and in the chapters menu. - - - If defined the video will run in streaming mode. - - - The time, in seconds, to seek when a user hits fast forward or rewind. - - - A number, between 0 and 1, representing the initial volume of the player. - - - Click (or tap) of the video container will toggle play/pause. - - - Disable right click menu on video to help as very primitive obfuscation to prevent downloads of content. - - - Reset the playback to the start once playback is complete. - - - Force an aspect ratio for all videos. The format is 'w:h' - e.g. '16:9' or '4:3'. If this is not specified then the default for HTML5 and Vimeo is to use the native resolution of the video. As dimensions are not available from YouTube via SDK, 16:9 is forced as a sensible default. - - - Display the current time as a countdown rather than an incremental counter. - - - Defines the encoding type used for the DRM protection. - - - Defines the manual structure of the protection data. If defined, it will override the usage of ProtectionServerUrl and ProtectionHttpRequestHeaders. - - - Defines the server url of the DRM protection. - - - Defines the server certificate url of the DRM protection (currently used only with FairPlay). - - - Defines the protection token for the http header that is sent to the server. The request headers are optional; if left out, the server will not receive them. - - - Gets or sets the default quality for the player. Defaults to 576 if unspecified. - - - Defines the list of available quality options. Defaults to [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240] if unspecified. - - - If the default controls are used, you can specify which settings to show in the menu. - - - If defined the player will go fullscreen when the video is double-clicked. - - \ No newline at end of file + \ No newline at end of file diff --git a/Source/Blazorise/Base/BaseColumnComponent.cs b/Source/Blazorise/Base/BaseColumnComponent.cs index b1f25a87c5..ea20b1a00e 100644 --- a/Source/Blazorise/Base/BaseColumnComponent.cs +++ b/Source/Blazorise/Base/BaseColumnComponent.cs @@ -43,17 +43,17 @@ protected override void BuildClasses( ClassBuilder builder ) protected bool InsideGrid => ParentGrid is not null; /// - /// Cascaded component in which this is placed. + /// The cascaded component that contains this . /// [CascadingParameter] public Row ParentRow { get; set; } /// - /// Cascaded component in which this is placed. + /// The cascaded component that contains this . /// [CascadingParameter] public Grid ParentGrid { get; set; } /// - /// Defines the column sizes. + /// Defines the sizing configuration for the column, supporting responsive layouts and custom size definitions. /// [Parameter] public IFluentColumn ColumnSize @@ -68,8 +68,11 @@ public IFluentColumn ColumnSize } /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to render inside this . /// + /// + /// Use this property to define custom child elements or components to be displayed within the column. + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Blazorise/Base/BaseComponent.cs b/Source/Blazorise/Base/BaseComponent.cs index a64e2c1c1d..2c8f67a9ec 100644 --- a/Source/Blazorise/Base/BaseComponent.cs +++ b/Source/Blazorise/Base/BaseComponent.cs @@ -383,7 +383,7 @@ protected static void DisposeDotNetObjectRef( DotNetObjectReference value [Inject] internal BlazoriseLicenseChecker LicenseChecker { get; set; } /// - /// Custom css class name. + /// Custom CSS class name to apply to the component. /// [Parameter] public string Class @@ -398,7 +398,7 @@ public string Class } /// - /// Custom html style. + /// Custom inline styles to apply to the component. /// [Parameter] public string Style @@ -413,7 +413,7 @@ public string Style } /// - /// Floats an element to the defined side. + /// Specifies how an element should float within its containing block. /// [Parameter] public Float Float @@ -428,7 +428,7 @@ public Float Float } /// - /// Fixes an element's floating children. + /// Determines whether to apply clearfix to manage floating children. /// [Parameter] public bool Clearfix @@ -443,7 +443,7 @@ public bool Clearfix } /// - /// Controls the visibility, without modifying the display, of elements with visibility utilities. + /// Controls the visibility of an element without altering its layout. /// [Parameter] public Visibility Visibility @@ -461,7 +461,7 @@ public Visibility Visibility } /// - /// Defined the sizing for the element width attribute(s). + /// Defines the width of the component using responsive sizing utilities. /// [Parameter] public IFluentSizing Width @@ -479,7 +479,7 @@ public IFluentSizing Width } /// - /// Defined the sizing for the element height attribute(s). + /// Defines the height of the component using responsive sizing utilities. /// [Parameter] public IFluentSizing Height @@ -497,7 +497,7 @@ public IFluentSizing Height } /// - /// Defines the element margin spacing. + /// Configures the margin spacing for the component. /// [Parameter] public IFluentSpacing Margin @@ -515,7 +515,7 @@ public IFluentSpacing Margin } /// - /// Defines the element padding spacing. + /// Configures the padding spacing for the component. /// [Parameter] public IFluentSpacing Padding @@ -533,7 +533,7 @@ public IFluentSpacing Padding } /// - /// Defines the element gap spacing. + /// Configures the gap spacing between child elements of the component. /// [Parameter] public IFluentGap Gap @@ -551,7 +551,7 @@ public IFluentGap Gap } /// - /// Specifies the display behavior of an element. + /// Specifies the display behavior (e.g., block, inline, flex) of the component. /// [Parameter] public IFluentDisplay Display @@ -569,7 +569,7 @@ public IFluentDisplay Display } /// - /// Specifies the border of an element. + /// Configures the border properties of the component. /// [Parameter] public IFluentBorder Border @@ -587,7 +587,7 @@ public IFluentBorder Border } /// - /// Specifies flexbox properties of an element. + /// Configures the flexbox properties of the component. /// [Parameter] public IFluentFlex Flex @@ -605,7 +605,7 @@ public IFluentFlex Flex } /// - /// The position property specifies the type of positioning method used for an element (static, relative, fixed, absolute or sticky). + /// Specifies the positioning method for the component (static, relative, absolute, etc.). /// [Parameter] public IFluentPosition Position @@ -623,7 +623,7 @@ public IFluentPosition Position } /// - /// The overflow property controls what happens to content that is too big to fit into an area. + /// Configures the overflow behavior when content exceeds the component's bounds. /// [Parameter] public IFluentOverflow Overflow @@ -641,7 +641,7 @@ public IFluentOverflow Overflow } /// - /// Changes the character casing of a element. + /// Specifies the text casing transformation (e.g., uppercase, lowercase). /// [Parameter] public CharacterCasing Casing @@ -656,7 +656,7 @@ public CharacterCasing Casing } /// - /// Gets or sets the text color. + /// Defines the text color of the component. /// [Parameter] public TextColor TextColor @@ -671,7 +671,7 @@ public TextColor TextColor } /// - /// Gets or sets the text alignment. + /// Configures the horizontal alignment of text within the component. /// [Parameter] public TextAlignment TextAlignment @@ -686,7 +686,7 @@ public TextAlignment TextAlignment } /// - /// Gets or sets the text transformation. + /// Configures the text transformation (e.g., capitalize, none) of the component. /// [Parameter] public TextTransform TextTransform @@ -701,7 +701,7 @@ public TextTransform TextTransform } /// - /// Gets or sets the text decoration. + /// Defines the text decoration style (e.g., underline, none) for the component. /// [Parameter] public TextDecoration TextDecoration @@ -719,7 +719,7 @@ public TextDecoration TextDecoration } /// - /// Gets or sets the text weight. + /// Specifies the font weight of text in the component (e.g., bold, normal). /// [Parameter] public TextWeight TextWeight @@ -734,7 +734,7 @@ public TextWeight TextWeight } /// - /// Determines how the text will behave when it is larger than a parent container. + /// Configures how text behaves when it overflows its container. /// [Parameter] public TextOverflow TextOverflow @@ -749,7 +749,7 @@ public TextOverflow TextOverflow } /// - /// Determines the font size of an element. + /// Sets the font size of the text in the component. /// [Parameter] public IFluentTextSize TextSize @@ -767,11 +767,8 @@ public IFluentTextSize TextSize } /// - /// Gets or sets the object fit configuration, which specifies how an object should fit within its container. + /// Configures the object-fit property, which determines how content is resized within its container. /// - /// - /// Changing this property will update the CSS classes related to object fit styling. - /// [Parameter] public IFluentObjectFit ObjectFit { @@ -788,7 +785,7 @@ public IFluentObjectFit ObjectFit } /// - /// Changes the vertical alignment of inline, inline-block, inline-table, and table cell elements. + /// Specifies the vertical alignment of inline or table-cell elements. /// [Parameter] public VerticalAlignment VerticalAlignment @@ -803,7 +800,7 @@ public VerticalAlignment VerticalAlignment } /// - /// Gets or sets the component background color. + /// Sets the background color of the component. /// [Parameter] public Background Background @@ -818,7 +815,7 @@ public Background Background } /// - /// Gets or sets the component shadow box. + /// Configures the shadow effect of the component. /// [Parameter] public Shadow Shadow @@ -833,10 +830,14 @@ public Shadow Shadow } /// - /// Captures all the custom attribute that are not part of Blazorise component. + /// Captures unmatched HTML attributes for customization. /// + /// + /// These attributes are applied directly to the component's root HTML element. + /// [Parameter( CaptureUnmatchedValues = true )] public Dictionary Attributes { get; set; } + #endregion } \ No newline at end of file diff --git a/Source/Blazorise/Base/BaseInputComponent.razor.cs b/Source/Blazorise/Base/BaseInputComponent.razor.cs index 6ebc1c20ee..5d05169dbb 100644 --- a/Source/Blazorise/Base/BaseInputComponent.razor.cs +++ b/Source/Blazorise/Base/BaseInputComponent.razor.cs @@ -252,7 +252,7 @@ public virtual Task Focus( bool scrollToElement = true ) } /// - /// Handler for @onkeydown event. + /// Handler for @onkeydown event. /// /// Information about the keyboard down event. /// Returns awaitable task @@ -262,7 +262,7 @@ protected virtual Task OnKeyDownHandler( KeyboardEventArgs eventArgs ) } /// - /// Handler for @onkeypress event. + /// Handler for @onkeypress event. /// /// Information about the keyboard pressed event. /// Returns awaitable task @@ -272,7 +272,7 @@ protected virtual Task OnKeyPressHandler( KeyboardEventArgs eventArgs ) } /// - /// Handler for @onkeyup event. + /// Handler for @onkeyup event. /// /// Information about the keyboard up event. /// Returns awaitable task @@ -282,7 +282,7 @@ protected virtual Task OnKeyUpHandler( KeyboardEventArgs eventArgs ) } /// - /// Handler for @onblur event. + /// Handler for @onblur event. /// /// Information about the focus event. /// Returns awaitable task @@ -292,7 +292,7 @@ protected virtual Task OnBlurHandler( FocusEventArgs eventArgs ) } /// - /// Handler for @onfocus event. + /// Handler for @onfocus event. /// /// Information about the focus event. /// Returns awaitable task @@ -302,7 +302,7 @@ protected virtual Task OnFocusHandler( FocusEventArgs eventArgs ) } /// - /// Handler for @onfocusin event. + /// Handler for @onfocusin event. /// /// Information about the focus event. /// Returns awaitable task @@ -312,7 +312,7 @@ protected virtual Task OnFocusInHandler( FocusEventArgs eventArgs ) } /// - /// Handler for @onfocusout event. + /// Handler for @onfocusout event. /// /// Information about the focus event. /// Returns awaitable task @@ -322,7 +322,7 @@ protected virtual Task OnFocusOutHandler( FocusEventArgs eventArgs ) } /// - /// Forces the (if any is used) to re-validate with the new custom or internal value. + /// Forces the (if any is used) to re-validate with the new custom or internal value. /// public Task Revalidate() { @@ -533,7 +533,7 @@ public bool Disabled [Parameter] public RenderFragment Feedback { get; set; } /// - /// Input content. + /// Specifies the content to be rendered inside this . /// [Parameter] public RenderFragment ChildContent { get; set; } diff --git a/Source/Blazorise/Blazorise.csproj b/Source/Blazorise/Blazorise.csproj index bd7b25bb4d..87935320d0 100644 --- a/Source/Blazorise/Blazorise.csproj +++ b/Source/Blazorise/Blazorise.csproj @@ -31,11 +31,25 @@ - + + + + + + + + + + + + + + diff --git a/Source/Blazorise/Components/Addon/Addon.razor.cs b/Source/Blazorise/Components/Addon/Addon.razor.cs index dd7a3760c5..2f4d32ded2 100644 --- a/Source/Blazorise/Components/Addon/Addon.razor.cs +++ b/Source/Blazorise/Components/Addon/Addon.razor.cs @@ -47,7 +47,7 @@ public AddonType AddonType } /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to be rendered inside this . /// [Parameter] public RenderFragment ChildContent { get; set; } diff --git a/Source/Blazorise/Components/Addon/AddonLabel.razor.cs b/Source/Blazorise/Components/Addon/AddonLabel.razor.cs index e3d2b373b0..26888fa703 100644 --- a/Source/Blazorise/Components/Addon/AddonLabel.razor.cs +++ b/Source/Blazorise/Components/Addon/AddonLabel.razor.cs @@ -25,7 +25,7 @@ protected override void BuildClasses( ClassBuilder builder ) #region Properties /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to be rendered inside this . /// [Parameter] public RenderFragment ChildContent { get; set; } diff --git a/Source/Blazorise/Components/Addon/Addons.razor.cs b/Source/Blazorise/Components/Addon/Addons.razor.cs index cae1493c1d..559885e9a4 100644 --- a/Source/Blazorise/Components/Addon/Addons.razor.cs +++ b/Source/Blazorise/Components/Addon/Addons.razor.cs @@ -131,7 +131,7 @@ private void OnThemeChanged( object sender, EventArgs eventArgs ) protected Size ThemeSize => Size.GetValueOrDefault( Theme?.InputOptions?.Size ?? Blazorise.Size.Default ); /// - /// Changes the size of the elements placed inside of this . + /// Changes the size of the elements placed inside of this . /// [Parameter] public Size? Size @@ -146,7 +146,7 @@ public Size? Size } /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to be rendered inside this . /// [Parameter] public RenderFragment ChildContent { get; set; } diff --git a/Source/Blazorise/Components/Bar/Bar.razor.cs b/Source/Blazorise/Components/Bar/Bar.razor.cs index c810e9fe7c..4ad8787e55 100644 --- a/Source/Blazorise/Components/Bar/Bar.razor.cs +++ b/Source/Blazorise/Components/Bar/Bar.razor.cs @@ -347,7 +347,7 @@ public Alignment Alignment } /// - /// Defines the orientation for the bar. Vertical is required when using as a Sidebar. + /// Defines the orientation for the bar. Vertical* is required when using as a Sidebar. /// [Parameter] public virtual BarMode Mode diff --git a/Source/Blazorise/Components/Breadcrumb/Breadcrumb.razor.cs b/Source/Blazorise/Components/Breadcrumb/Breadcrumb.razor.cs index 0f691de941..21c947ddb4 100644 --- a/Source/Blazorise/Components/Breadcrumb/Breadcrumb.razor.cs +++ b/Source/Blazorise/Components/Breadcrumb/Breadcrumb.razor.cs @@ -34,7 +34,7 @@ protected override void BuildClasses( ClassBuilder builder ) [Parameter] public BreadcrumbMode Mode { get; set; } /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to be rendered inside this component. /// [Parameter] public RenderFragment ChildContent { get; set; } diff --git a/Source/Blazorise/Components/Breadcrumb/BreadcrumbItem.razor.cs b/Source/Blazorise/Components/Breadcrumb/BreadcrumbItem.razor.cs index 146c46e2a3..501d3d5749 100644 --- a/Source/Blazorise/Components/Breadcrumb/BreadcrumbItem.razor.cs +++ b/Source/Blazorise/Components/Breadcrumb/BreadcrumbItem.razor.cs @@ -97,7 +97,7 @@ internal void NotifyRelativeUriChanged( string relativeUri ) #region Properties /// - /// Gets or sets the item active state. + /// Indicates whether this breadcrumb item is the active (current) item. /// [Parameter] public bool Active @@ -112,18 +112,21 @@ public bool Active } /// - /// Gets or sets the navigation manager. + /// Provides access to the navigation manager for handling navigation and URI management. /// [Inject] private NavigationManager NavigationManager { get; set; } /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to render inside this component. /// [Parameter] public RenderFragment ChildContent { get; set; } /// - /// Gets or sets the reference to the parent component. + /// A reference to the parent component that contains this breadcrumb item. /// + /// + /// This cascading parameter is used to inherit context and manage the behavior of the breadcrumb item, such as automatic active state detection. + /// [CascadingParameter] protected Breadcrumb ParentBreadcrumb { get; set; } #endregion diff --git a/Source/Blazorise/Components/Breadcrumb/BreadcrumbLink.razor.cs b/Source/Blazorise/Components/Breadcrumb/BreadcrumbLink.razor.cs index 8059b7c54b..7897c6caff 100644 --- a/Source/Blazorise/Components/Breadcrumb/BreadcrumbLink.razor.cs +++ b/Source/Blazorise/Components/Breadcrumb/BreadcrumbLink.razor.cs @@ -107,7 +107,7 @@ public bool Disabled [Parameter] public string Title { get; set; } /// - /// Specifies the content to be rendered inside this . + /// Specifies the content to be rendered inside this component. /// [Parameter] public RenderFragment ChildContent { get; set; } diff --git a/Source/Blazorise/Components/Carousel/Carousel.razor.cs b/Source/Blazorise/Components/Carousel/Carousel.razor.cs index bb67e188c7..9a23c32a38 100644 --- a/Source/Blazorise/Components/Carousel/Carousel.razor.cs +++ b/Source/Blazorise/Components/Carousel/Carousel.razor.cs @@ -665,7 +665,7 @@ public bool Crossfade } /// - /// Defines the interval(in milliseconds) after which the item will automatically slide. + /// Defines the interval (in milliseconds) after which the item will automatically slide. /// [Parameter] public double Interval { get; set; } = 2000; diff --git a/Source/Blazorise/Components/Carousel/CarouselSlide.razor.cs b/Source/Blazorise/Components/Carousel/CarouselSlide.razor.cs index 5a7d7e2fff..97c6943a23 100644 --- a/Source/Blazorise/Components/Carousel/CarouselSlide.razor.cs +++ b/Source/Blazorise/Components/Carousel/CarouselSlide.razor.cs @@ -206,7 +206,7 @@ internal bool Next } /// - /// Defines the interval(in milliseconds) after which this item will automatically slide. + /// Defines the interval (in milliseconds) after which this item will automatically slide. /// [Parameter] public int? Interval { get; set; } diff --git a/Source/Blazorise/Components/Divider/Divider.razor.cs b/Source/Blazorise/Components/Divider/Divider.razor.cs index 79c6796cbf..94c254fe01 100644 --- a/Source/Blazorise/Components/Divider/Divider.razor.cs +++ b/Source/Blazorise/Components/Divider/Divider.razor.cs @@ -96,7 +96,7 @@ public DividerType? DividerType } /// - /// Defines the text of the divider when it's set as . + /// Label that will appear between the solid lines when is set as . /// [Parameter] public string Text { get; set; } diff --git a/Source/Blazorise/Components/Field/Field.razor.cs b/Source/Blazorise/Components/Field/Field.razor.cs index 3e3362004c..517b04369d 100644 --- a/Source/Blazorise/Components/Field/Field.razor.cs +++ b/Source/Blazorise/Components/Field/Field.razor.cs @@ -129,7 +129,7 @@ internal void UnHook( BaseComponent component ) protected bool IsFields => ParentFields is not null; /// - /// Aligns the controls for horizontal form. + /// Determines whether the form controls should be aligned horizontally, as in a horizontal form layout. /// [Parameter] public bool Horizontal @@ -146,7 +146,7 @@ public bool Horizontal } /// - /// Aligns the flexible container's items when the items do not use all available space on the main-axis (horizontally). + /// Defines how the container's items are aligned along the main axis when there is extra space available. /// [Parameter] public JustifyContent JustifyContent @@ -161,12 +161,12 @@ public JustifyContent JustifyContent } /// - /// Gets or sets the reference to the parent component. + /// A reference to the parent component in which this component is nested. /// [CascadingParameter] protected Fields ParentFields { get; set; } /// - /// Gets or sets the reference to the parent component. + /// A reference to the parent component in which this component is nested. /// [CascadingParameter] protected Validation ParentValidation { get; set; } diff --git a/Source/Blazorise/Components/FileEdit/FileEdit.razor.cs b/Source/Blazorise/Components/FileEdit/FileEdit.razor.cs index bde1bb7223..dd6b08f5c8 100644 --- a/Source/Blazorise/Components/FileEdit/FileEdit.razor.cs +++ b/Source/Blazorise/Components/FileEdit/FileEdit.razor.cs @@ -385,7 +385,7 @@ public bool Directory [Parameter] public string Placeholder { get; set; } /// - /// Specifies the types of files that the input accepts. https://www.w3schools.com/tags/att_input_accept.asp" + /// Specifies the types of files that the input accepts. See w3schools.com. /// [Parameter] public string Filter { get; set; } @@ -394,7 +394,7 @@ public bool Directory /// Take note that if you're using you're provided with a stream and should configure the chunk size when handling with the stream. /// /// - /// https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-dotnet-from-javascript?view=aspnetcore-6.0#stream-from-javascript-to-net + /// See docs.microsoft.com. /// [Parameter] public int MaxChunkSize { get; set; } = 20 * 1024; diff --git a/Source/Blazorise/Components/FilePicker/FilePicker.razor.cs b/Source/Blazorise/Components/FilePicker/FilePicker.razor.cs index 3ddc81eb37..8051ac63b0 100644 --- a/Source/Blazorise/Components/FilePicker/FilePicker.razor.cs +++ b/Source/Blazorise/Components/FilePicker/FilePicker.razor.cs @@ -365,7 +365,7 @@ protected string DragAndDropString [Parameter] public string Placeholder { get; set; } /// - /// Specifies the types of files that the input accepts. https://www.w3schools.com/tags/att_input_accept.asp" + /// Specifies the types of files that the input accepts. See w3schools.com. /// [Parameter] public string Filter { get; set; } @@ -453,7 +453,7 @@ protected string DragAndDropString [Parameter] public bool Directory { get; set; } /// - /// Add the readonly boolean attribute on an input to prevent modification of the inputs value. + /// Add the readonly boolean attribute on an input to prevent modification of the input value. /// [Parameter] public bool ReadOnly { get; set; } @@ -463,4 +463,4 @@ protected string DragAndDropString [Parameter] public bool Disabled { get; set; } #endregion -} +} \ No newline at end of file diff --git a/Source/Blazorise/Components/NumericEdit/NumericEdit.razor.cs b/Source/Blazorise/Components/NumericEdit/NumericEdit.razor.cs index 8c6b9c5833..e67252171a 100644 --- a/Source/Blazorise/Components/NumericEdit/NumericEdit.razor.cs +++ b/Source/Blazorise/Components/NumericEdit/NumericEdit.razor.cs @@ -261,7 +261,7 @@ protected CultureInfo CurrentCultureInfo /// Occurs after the value has changed. /// /// - /// This will be converted to EventCallback once the Blazor team fix the error for generic components. see https://github.com/aspnet/AspNetCore/issues/8385 + /// This will be converted to EventCallback once the Blazor team fix the error for generic components. See github.com/aspnet. /// [Parameter] public EventCallback ValueChanged { get; set; } @@ -276,11 +276,8 @@ protected CultureInfo CurrentCultureInfo [Parameter] public decimal? Step { get; set; } = 1; /// - /// Helps define the language of an element. + /// Helps define the language of an element. See w3schools.com. /// - /// - /// https://www.w3schools.com/tags/ref_language_codes.asp - /// [Parameter] public string Culture { get; set; } /// @@ -294,7 +291,7 @@ protected CultureInfo CurrentCultureInfo [Parameter] public TValue Max { get; set; } /// - /// The size attribute specifies the visible width, in characters, of an input element. https://www.w3schools.com/tags/att_input_size.asp + /// The size attribute specifies the visible width, in characters, of an input element. See w3schools.com. /// [Parameter] public int? VisibleCharacters { get; set; } diff --git a/Source/Blazorise/Components/NumericPicker/INumericPicker.cs b/Source/Blazorise/Components/NumericPicker/INumericPicker.cs index b060fb5b9c..ba9a8fd14d 100644 --- a/Source/Blazorise/Components/NumericPicker/INumericPicker.cs +++ b/Source/Blazorise/Components/NumericPicker/INumericPicker.cs @@ -13,7 +13,7 @@ namespace Blazorise; public interface INumericPicker { /// - /// Updates the with the new value. + /// Updates the with the new value. This method is intended for internal framework use only and should not be called directly by user code. /// /// New value. /// Returns awaitable task. diff --git a/Source/Blazorise/Components/NumericPicker/NumericPicker.razor.cs b/Source/Blazorise/Components/NumericPicker/NumericPicker.razor.cs index 88b2d2c6c4..8cd3510e24 100644 --- a/Source/Blazorise/Components/NumericPicker/NumericPicker.razor.cs +++ b/Source/Blazorise/Components/NumericPicker/NumericPicker.razor.cs @@ -575,7 +575,7 @@ protected CultureInfo CurrentCultureInfo [Parameter] public NumericRoundingMethod RoundingMethod { get; set; } = NumericRoundingMethod.HalfUpSymmetric; /// - /// Allow padding the decimal places with zeros. If set to Floats, padding is only done when there are some decimals. /// + /// Allow padding the decimal places with zeros. If set to Floats, padding is only done when there are some decimals. /// /// /// Setting AllowDecimalPadding to 'false' will override the setting. @@ -588,11 +588,8 @@ protected CultureInfo CurrentCultureInfo [Parameter] public bool AlwaysAllowDecimalSeparator { get; set; } /// - /// Helps define the language of an element. + /// Helps define the language of an element. See w3schools.com. /// - /// - /// https://www.w3schools.com/tags/ref_language_codes.asp - /// [Parameter] public string Culture { get; set; } /// @@ -611,7 +608,7 @@ protected CultureInfo CurrentCultureInfo [Parameter] public NumericMinMaxLimitsOverride MinMaxLimitsOverride { get; set; } = NumericMinMaxLimitsOverride.Ignore; /// - /// The size attribute specifies the visible width, in characters, of an input element. https://www.w3schools.com/tags/att_input_size.asp + /// The size attribute specifies the visible width, in characters, of an input element. See w3schools.com. /// [Parameter] public int? VisibleCharacters { get; set; } diff --git a/Source/Blazorise/Components/TextEdit/TextEdit.razor.cs b/Source/Blazorise/Components/TextEdit/TextEdit.razor.cs index ba69c819dc..4116b0408c 100644 --- a/Source/Blazorise/Components/TextEdit/TextEdit.razor.cs +++ b/Source/Blazorise/Components/TextEdit/TextEdit.razor.cs @@ -169,7 +169,7 @@ protected override string GetFormatedValueExpression() [Parameter] public int? MaxLength { get; set; } /// - /// The size attribute specifies the visible width, in characters, of an input element. https://www.w3schools.com/tags/att_input_size.asp". + /// The size attribute specifies the visible width, in characters, of an input element. See w3schools.com. /// [Parameter] public int? VisibleCharacters { get; set; } diff --git a/Source/Blazorise/Components/Toast/Toast.razor.cs b/Source/Blazorise/Components/Toast/Toast.razor.cs index 6abf1047d1..481232cee1 100644 --- a/Source/Blazorise/Components/Toast/Toast.razor.cs +++ b/Source/Blazorise/Components/Toast/Toast.razor.cs @@ -296,7 +296,11 @@ protected virtual async Task RaiseEvents( bool visible ) } } - /// + /// + /// Closes the toast with reason of closing. + /// + /// + /// public Task Close( CloseReason closeReason ) { return Hide( closeReason ); diff --git a/Source/Blazorise/Components/Validation/Validation.razor.cs b/Source/Blazorise/Components/Validation/Validation.razor.cs index 1927bc2e5f..f46dee41d9 100644 --- a/Source/Blazorise/Components/Validation/Validation.razor.cs +++ b/Source/Blazorise/Components/Validation/Validation.razor.cs @@ -226,7 +226,11 @@ private void OnClearingAll() Clear(); } - /// + /// + /// Runs the validation process. + /// + /// Returns the validation result. + /// Thrown when the input component is not assigned. public ValidationStatus Validate() { if ( inputComponent is null ) diff --git a/Source/Blazorise/Enums/DateInputMode.cs b/Source/Blazorise/Enums/DateInputMode.cs index 4316abdc17..d789648f24 100644 --- a/Source/Blazorise/Enums/DateInputMode.cs +++ b/Source/Blazorise/Enums/DateInputMode.cs @@ -18,7 +18,7 @@ public enum DateInputMode /// /// Allowed to select only year and month. /// - /// Note that not all browser supports this mode, see for more info. + /// Note that not all browser supports this mode. See caniuse.com for more info. /// Month, } \ No newline at end of file diff --git a/Source/Blazorise/FodyWeavers.xml b/Source/Blazorise/FodyWeavers.xml new file mode 100644 index 0000000000..93940e9a16 --- /dev/null +++ b/Source/Blazorise/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Source/Blazorise/Interfaces/IAnimatedComponent.cs b/Source/Blazorise/Interfaces/IAnimatedComponent.cs index e647de8c11..e0516ff796 100644 --- a/Source/Blazorise/Interfaces/IAnimatedComponent.cs +++ b/Source/Blazorise/Interfaces/IAnimatedComponent.cs @@ -5,7 +5,7 @@ namespace Blazorise; /// -/// Providers the necessary logic to open or close an animated component +/// Provides the necessary logic to open or close an animated component. /// public interface IAnimatedComponent : IHideableComponent { @@ -15,21 +15,21 @@ public interface IAnimatedComponent : IHideableComponent public bool Animated { get; set; } /// - /// Gets or sets the animation duration. + /// Gets or sets the animation duration, in milliseconds. /// public int AnimationDuration { get; set; } /// - /// Starts the component animation. + /// Initiates the component animation. This method is intended for internal framework use only and should not be called directly by user code. /// - /// Visibility flag. + /// A value indicating whether the component should be made visible or hidden. /// A task that represents the asynchronous operation. public Task BeginAnimation( bool visible ); /// - /// Ends the component animation. + /// Finalizes the component animation. This method is intended for internal framework use only and should not be called directly by user code. /// - /// Visibility flag. + /// A value indicating whether the component is visible or hidden. /// A task that represents the asynchronous operation. public Task EndAnimation( bool visible ); } \ No newline at end of file diff --git a/Source/Extensions/Blazorise.Animate/Animate.razor.cs b/Source/Extensions/Blazorise.Animate/Animate.razor.cs index 17679954d6..b02bd5c45e 100644 --- a/Source/Extensions/Blazorise.Animate/Animate.razor.cs +++ b/Source/Extensions/Blazorise.Animate/Animate.razor.cs @@ -11,7 +11,7 @@ namespace Blazorise.Animate; /// /// Runs animations for any content places inside of . component. /// -public partial class Animate +public partial class Animate:ComponentBase { #region Members diff --git a/Source/Extensions/Blazorise.Charts.Streaming/ChartStreaming.razor.cs b/Source/Extensions/Blazorise.Charts.Streaming/ChartStreaming.razor.cs index 6a7d7eebfc..640225c8ae 100644 --- a/Source/Extensions/Blazorise.Charts.Streaming/ChartStreaming.razor.cs +++ b/Source/Extensions/Blazorise.Charts.Streaming/ChartStreaming.razor.cs @@ -84,6 +84,12 @@ protected override async ValueTask DisposeAsync( bool disposing ) await base.DisposeAsync( disposing ); } + /// + /// Refreshes the chart with new data. + /// + /// + /// A task that represents the asynchronous operation. + /// public async Task Refresh() { if ( !Rendered ) @@ -165,7 +171,7 @@ public async Task Play( bool animate = true ) [Parameter] public bool Vertical { get; set; } /// - /// Stream options. + /// Defines the stream options. /// [Parameter] public ChartStreamingOptions Options { get; set; } = new(); diff --git a/Source/Extensions/Blazorise.Charts.Trendline/ChartTrendline.razor.cs b/Source/Extensions/Blazorise.Charts.Trendline/ChartTrendline.razor.cs index 82cf3e4165..4678a3bda8 100644 --- a/Source/Extensions/Blazorise.Charts.Trendline/ChartTrendline.razor.cs +++ b/Source/Extensions/Blazorise.Charts.Trendline/ChartTrendline.razor.cs @@ -29,6 +29,11 @@ protected override Task OnInitializedAsync() return base.OnInitializedAsync(); } + /// + /// Adds the trendline options to the chart. + /// + /// The trendline data to be added to the chart. + /// A task that represents the asynchronous operation. public async Task AddTrendLineOptions( List trendlineData ) { if ( !Rendered ) diff --git a/Source/Extensions/Blazorise.Charts/BaseChart.cs b/Source/Extensions/Blazorise.Charts/BaseChart.cs index d757c14830..4bcafdb12d 100644 --- a/Source/Extensions/Blazorise.Charts/BaseChart.cs +++ b/Source/Extensions/Blazorise.Charts/BaseChart.cs @@ -346,6 +346,14 @@ public async Task Update() } } + /// + /// Notify that the chart has been interacted by the user. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// + /// + /// + /// + /// public Task Event( string eventName, int datasetIndex, int index, string modelJson ) { var model = Serialize( modelJson ); diff --git a/Source/Extensions/Blazorise.Charts/BaseChartOfT.cs b/Source/Extensions/Blazorise.Charts/BaseChartOfT.cs index 5247481de1..a601ea0692 100644 --- a/Source/Extensions/Blazorise.Charts/BaseChartOfT.cs +++ b/Source/Extensions/Blazorise.Charts/BaseChartOfT.cs @@ -126,12 +126,24 @@ public void NotifyPluginRemoved( string pluginName ) /// [Parameter] public ChartData Data { get; set; } + /// + /// Raised when clicked on data point. + /// [Parameter] public EventCallback Clicked { get; set; } + /// + /// Raised when hovered over data point. + /// [Parameter] public EventCallback Hovered { get; set; } + /// + /// Raised when mouse leaves the chart area. + /// [Parameter] public EventCallback MouseOut { get; set; } + /// + /// Specifies the content to render inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Components/RouterTabs.razor.cs b/Source/Extensions/Blazorise.Components/RouterTabs.razor.cs index fe76039b98..d4e4766012 100644 --- a/Source/Extensions/Blazorise.Components/RouterTabs.razor.cs +++ b/Source/Extensions/Blazorise.Components/RouterTabs.razor.cs @@ -70,6 +70,7 @@ protected virtual void Dispose( bool disposing ) } } + /// public void Dispose() { // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method diff --git a/Source/Extensions/Blazorise.DataGrid/BaseDataGridColumn.cs b/Source/Extensions/Blazorise.DataGrid/BaseDataGridColumn.cs index 5f3704ac0a..cc2a708d32 100644 --- a/Source/Extensions/Blazorise.DataGrid/BaseDataGridColumn.cs +++ b/Source/Extensions/Blazorise.DataGrid/BaseDataGridColumn.cs @@ -45,6 +45,9 @@ public string FormatDisplayValue( object value ) /// [Parameter] public IFormatProvider DisplayFormatProvider { get; set; } + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } /// diff --git a/Source/Extensions/Blazorise.DataGrid/DataGridAggregate.cs b/Source/Extensions/Blazorise.DataGrid/DataGridAggregate.cs index 189be35f2f..2b306b848d 100644 --- a/Source/Extensions/Blazorise.DataGrid/DataGridAggregate.cs +++ b/Source/Extensions/Blazorise.DataGrid/DataGridAggregate.cs @@ -247,6 +247,9 @@ public DataGridAggregateType Aggregate /// [Parameter] public IFormatProvider DisplayFormatProvider { get; set; } + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } /// diff --git a/Source/Extensions/Blazorise.DataGrid/DataGridColumn.cs b/Source/Extensions/Blazorise.DataGrid/DataGridColumn.cs index 8ff5f39906..525f6f405b 100644 --- a/Source/Extensions/Blazorise.DataGrid/DataGridColumn.cs +++ b/Source/Extensions/Blazorise.DataGrid/DataGridColumn.cs @@ -181,6 +181,10 @@ private void DisposeSubscriptions() } } + /// + /// Handles the filter value change. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// The new filter value. public async void OnSearchValueChanged( object filterValue ) { await ParentDataGrid.OnFilterChanged( this, filterValue ); @@ -255,11 +259,24 @@ internal string GetFieldToSort() internal Func GetGroupByFunc() => GroupBy is not null ? GroupBy : valueGetter.Value; + /// + /// Gets the formatted display value. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// Item the contains the value to format. + /// + /// Formatted display value. + /// public string FormatDisplayValue( TItem item ) { return FormatDisplayValue( GetValue( item ) ); } + /// + /// Indicates whether the cell values are editable. + /// + /// + /// A value indicating whether the cell values are editable. + /// public bool CellValuesAreEditable() { return Editable && diff --git a/Source/Extensions/Blazorise.DataGrid/_DataGridCancelBatchCommand.razor.cs b/Source/Extensions/Blazorise.DataGrid/_DataGridCancelBatchCommand.razor.cs index 6a51ab39c3..49fdb01bbf 100644 --- a/Source/Extensions/Blazorise.DataGrid/_DataGridCancelBatchCommand.razor.cs +++ b/Source/Extensions/Blazorise.DataGrid/_DataGridCancelBatchCommand.razor.cs @@ -34,5 +34,8 @@ private async void OnLocalizationChanged( object sender, EventArgs e ) /// [CascadingParameter] public DataGrid ParentDataGrid { get; set; } + /// + /// An event raised when the batch editing is canceled. + /// [Parameter] public EventCallback CancelBatch { get; set; } } \ No newline at end of file diff --git a/Source/Extensions/Blazorise.Markdown/Markdown.razor.cs b/Source/Extensions/Blazorise.Markdown/Markdown.razor.cs index 2aeb47587c..55e94779eb 100644 --- a/Source/Extensions/Blazorise.Markdown/Markdown.razor.cs +++ b/Source/Extensions/Blazorise.Markdown/Markdown.razor.cs @@ -257,6 +257,12 @@ internal protected void RemoveMarkdownToolbarButton( MarkdownToolbarButton toolb toolbarButtons.Remove( toolbarButton ); } + /// + /// Notifies the component that custom button has been clicked. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// + /// + /// [JSInvokable] public Task NotifyCustomButtonClicked( string name, object value ) { @@ -264,7 +270,7 @@ public Task NotifyCustomButtonClicked( string name, object value ) } /// - /// Notifies the component that file input value has changed. Should only be used internally! + /// Notifies the component that file input value has changed. This method is intended for internal framework use only and should not be called directly by user code. /// /// Changed file. /// A task that represents the asynchronous operation. @@ -368,6 +374,11 @@ public Task UpdateFileProgressAsync( IFileEntry fileEntry, long progressProgress return new RemoteFileEntryStream( JSFileModule, ElementRef, fileEntry, this, ImageMaxSize, cancellationToken ); } + /// + /// Notifies the component that an error message has been received. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// + /// [JSInvokable] public Task NotifyErrorMessage( string errorMessage ) { @@ -384,7 +395,7 @@ public virtual async Task Focus( bool scrollToElement = true ) } /// - /// Notifies the component that preview render has being requested. Should only be used internally! + /// Notifies the component that preview render has being requested. This method is intended for internal framework use only and should not be called directly by user code. /// /// Plain text of the markdown value. /// A task that represents the asynchronous operation. diff --git a/Source/Extensions/Blazorise.Sidebar/Sidebar.razor.cs b/Source/Extensions/Blazorise.Sidebar/Sidebar.razor.cs index 52eb63ca1e..d982c1cd03 100644 --- a/Source/Extensions/Blazorise.Sidebar/Sidebar.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/Sidebar.razor.cs @@ -17,6 +17,7 @@ public partial class Sidebar : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar" ); @@ -95,6 +96,9 @@ public bool Scrollable /// [Parameter] public SidebarInfo Data { get; set; } + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarBrand.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarBrand.razor.cs index 528fa29345..7f0e0b5bbb 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarBrand.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarBrand.razor.cs @@ -13,6 +13,7 @@ public partial class SidebarBrand : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-brand" ); @@ -24,6 +25,9 @@ protected override void BuildClasses( ClassBuilder builder ) #region Properties + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarContent.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarContent.razor.cs index 836c6f10a0..d503e155d4 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarContent.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarContent.razor.cs @@ -13,6 +13,7 @@ public partial class SidebarContent : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-content" ); @@ -24,6 +25,9 @@ protected override void BuildClasses( ClassBuilder builder ) #region Properties + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarFooter.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarFooter.razor.cs index a2b08c3025..ddd9af4741 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarFooter.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarFooter.razor.cs @@ -13,6 +13,7 @@ public partial class SidebarFooter : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-bottom" ); @@ -24,6 +25,9 @@ protected override void BuildClasses( ClassBuilder builder ) #region Properties + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarItem.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarItem.razor.cs index 342c1cb0fa..f2101fa6b9 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarItem.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarItem.razor.cs @@ -17,6 +17,7 @@ public partial class SidebarItem : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-item" ); @@ -24,11 +25,17 @@ protected override void BuildClasses( ClassBuilder builder ) base.BuildClasses( builder ); } + /// + /// Notifies the parent that this has a link. + /// internal void NotifyHasSidebarLink() { hasLink = true; } + /// + /// Notifies the parent that this has a sub-item. + /// internal void NotifyHasSidebarSubItem() { hasSubItem = true; @@ -38,10 +45,19 @@ internal void NotifyHasSidebarSubItem() #region Properties + /// + /// Gets the value that indicates whether this has a link. + /// public bool HasLink => hasLink; + /// + /// Gets the value that indicates whether this has a sub-item. + /// public bool HasSubItem => hasSubItem; + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarLabel.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarLabel.razor.cs index dfbdc5c7fd..b1dade499c 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarLabel.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarLabel.razor.cs @@ -13,6 +13,7 @@ public partial class SidebarLabel : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-label" ); @@ -24,6 +25,9 @@ protected override void BuildClasses( ClassBuilder builder ) #region Properties + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarLink.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarLink.razor.cs index 9ed68a6dd8..286284c1bd 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarLink.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarLink.razor.cs @@ -19,6 +19,7 @@ public partial class SidebarLink : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-link" ); @@ -27,6 +28,7 @@ protected override void BuildClasses( ClassBuilder builder ) base.BuildClasses( builder ); } + /// protected override void OnInitialized() { ParentSidebarItem?.NotifyHasSidebarLink(); @@ -34,6 +36,10 @@ protected override void OnInitialized() base.OnInitialized(); } + /// + /// Handles the link click event. + /// + /// protected async Task ClickHandler() { await Click.InvokeAsync(); @@ -78,7 +84,9 @@ protected Dictionary LinkAttributes } } - + /// + /// Defines the visibility of the link. + /// [Parameter] public bool Visible { @@ -117,14 +125,20 @@ public bool Visible [Parameter] public string Title { get; set; } /// - /// Occurs when the item is clicked. + /// An event that is raised when the link is clicked. /// [Parameter] public EventCallback Click { get; set; } + /// + /// An event that is raised when the link is toggled. + /// [Parameter] public EventCallback Toggled { get; set; } [CascadingParameter] public SidebarItem ParentSidebarItem { get; set; } + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarNavigation.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarNavigation.razor.cs index 2cbd7a1fd6..7e48f7dd97 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarNavigation.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarNavigation.razor.cs @@ -13,6 +13,7 @@ public partial class SidebarNavigation : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-nav" ); @@ -24,6 +25,9 @@ protected override void BuildClasses( ClassBuilder builder ) #region Properties + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Sidebar/SidebarSubItem.razor.cs b/Source/Extensions/Blazorise.Sidebar/SidebarSubItem.razor.cs index f107af0411..8b059cd122 100644 --- a/Source/Extensions/Blazorise.Sidebar/SidebarSubItem.razor.cs +++ b/Source/Extensions/Blazorise.Sidebar/SidebarSubItem.razor.cs @@ -15,6 +15,7 @@ public partial class SidebarSubItem : BaseComponent #region Methods + /// protected override void BuildClasses( ClassBuilder builder ) { builder.Append( "sidebar-subitem" ); @@ -23,6 +24,7 @@ protected override void BuildClasses( ClassBuilder builder ) base.BuildClasses( builder ); } + /// protected override void OnInitialized() { ParentSidebarItem?.NotifyHasSidebarSubItem(); @@ -45,6 +47,9 @@ public void Toggle( bool? visible = null ) #region Properties + /// + /// Specifies the visibility of the subitem. + /// [Parameter] public bool Visible { @@ -59,6 +64,9 @@ public bool Visible [CascadingParameter] public SidebarItem ParentSidebarItem { get; set; } + /// + /// Specifies the content to be rendered inside this . + /// [Parameter] public RenderFragment ChildContent { get; set; } #endregion diff --git a/Source/Extensions/Blazorise.Snackbar/Snackbar.razor.cs b/Source/Extensions/Blazorise.Snackbar/Snackbar.razor.cs index 39106ab7a3..8f71ae70f9 100644 --- a/Source/Extensions/Blazorise.Snackbar/Snackbar.razor.cs +++ b/Source/Extensions/Blazorise.Snackbar/Snackbar.razor.cs @@ -333,7 +333,7 @@ public SnackbarColor Color } /// - /// Defines the interval(in milliseconds) after which the snackbar will be automatically closed. + /// Defines the interval (in milliseconds) after which the snackbar will be automatically closed. /// [Parameter] public double Interval { get; set; } = Constants.DefaultIntervalBeforeClose; @@ -348,7 +348,7 @@ public SnackbarColor Color [Parameter] public bool DelayCloseOnClick { get; set; } /// - /// Defines the interval(in milliseconds) by which the snackbar will be delayed from closing. + /// Defines the interval (in milliseconds) by which the snackbar will be delayed from closing. /// [Parameter] public double? DelayCloseOnClickInterval { get; set; } diff --git a/Source/Extensions/Blazorise.Snackbar/SnackbarStack.razor.cs b/Source/Extensions/Blazorise.Snackbar/SnackbarStack.razor.cs index 954d9cc31c..0bb823a8f7 100644 --- a/Source/Extensions/Blazorise.Snackbar/SnackbarStack.razor.cs +++ b/Source/Extensions/Blazorise.Snackbar/SnackbarStack.razor.cs @@ -226,7 +226,7 @@ public SnackbarStackLocation Location [Parameter] public bool DelayCloseOnClick { get; set; } /// - /// Defines the interval(in milliseconds) by which the snackbar will be delayed from closing. + /// Defines the interval (in milliseconds) by which the snackbar will be delayed from closing. /// [Parameter] public double? DelayCloseOnClickInterval { get; set; } diff --git a/Source/Extensions/Blazorise.SpinKit/SpinKit.razor.cs b/Source/Extensions/Blazorise.SpinKit/SpinKit.razor.cs index 5a8fde390f..9f99e4615d 100644 --- a/Source/Extensions/Blazorise.SpinKit/SpinKit.razor.cs +++ b/Source/Extensions/Blazorise.SpinKit/SpinKit.razor.cs @@ -8,7 +8,7 @@ namespace Blazorise.SpinKit; /// /// Simple loading spinner animated with CSS. /// -public partial class SpinKit +public partial class SpinKit : ComponentBase { #region Methods diff --git a/Source/Extensions/Blazorise.Splitter/Splitter.razor.cs b/Source/Extensions/Blazorise.Splitter/Splitter.razor.cs index f3a3773f73..16a1a21bbb 100644 --- a/Source/Extensions/Blazorise.Splitter/Splitter.razor.cs +++ b/Source/Extensions/Blazorise.Splitter/Splitter.razor.cs @@ -117,6 +117,10 @@ protected override void BuildClasses( ClassBuilder builder ) base.BuildClasses( builder ); } + /// + /// Registers a new splitter section. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// The splitter section to register. public void RegisterSection( SplitterSection splitterSection ) { splitterSections.Add( splitterSection ); @@ -127,6 +131,10 @@ public void RegisterSection( SplitterSection splitterSection ) InvokeAsync( StateHasChanged ); } + /// + /// Unregisters a splitter section. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// The splitter section to unregister. public void UnregisterSection( SplitterSection splitterSection ) { splitterSections.Remove( splitterSection ); @@ -137,6 +145,10 @@ public void UnregisterSection( SplitterSection splitterSection ) InvokeAsync( StateHasChanged ); } + /// + /// Updates the splitter section. This method is intended for internal framework use only and should not be called directly by user code. + /// + /// The splitter section to update. public void UpdateSection( SplitterSection splitterSection ) { recreateInstance = true; diff --git a/Source/SourceGenerators/Blazorise.Generator.Features/Blazorise.Generator.Features.csproj b/Source/SourceGenerators/Blazorise.Generator.Features/Blazorise.Generator.Features.csproj index 4894eae222..5c67fef16e 100644 --- a/Source/SourceGenerators/Blazorise.Generator.Features/Blazorise.Generator.Features.csproj +++ b/Source/SourceGenerators/Blazorise.Generator.Features/Blazorise.Generator.Features.csproj @@ -16,6 +16,8 @@ Copyright 2018-2024 Megabit netstandard2.0 + + latest diff --git a/Source/SourceGenerators/Blazorise.Generator.Features/GenerateEqualityAttribute.cs b/Source/SourceGenerators/Blazorise.Generator.Features/GenerateEqualityAttribute.cs index 9fb4579d07..adb336345a 100644 --- a/Source/SourceGenerators/Blazorise.Generator.Features/GenerateEqualityAttribute.cs +++ b/Source/SourceGenerators/Blazorise.Generator.Features/GenerateEqualityAttribute.cs @@ -1,10 +1,6 @@ using System; -namespace Blazorise.Generator.Features -{ - [AttributeUsage( AttributeTargets.Class )] - public class GenerateEqualityAttribute : Attribute - { +namespace Blazorise.Generator.Features; - } -} +[AttributeUsage( AttributeTargets.Class )] +public class GenerateEqualityAttribute : Attribute; \ No newline at end of file diff --git a/Source/SourceGenerators/Blazorise.Generator.Features/GenerateIgnoreEqualityAttribute.cs b/Source/SourceGenerators/Blazorise.Generator.Features/GenerateIgnoreEqualityAttribute.cs index c6ab8dc026..3b90a61271 100644 --- a/Source/SourceGenerators/Blazorise.Generator.Features/GenerateIgnoreEqualityAttribute.cs +++ b/Source/SourceGenerators/Blazorise.Generator.Features/GenerateIgnoreEqualityAttribute.cs @@ -1,10 +1,6 @@ using System; -namespace Blazorise.Generator.Features -{ - [AttributeUsage( AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event )] - public class GenerateIgnoreEqualityAttribute : Attribute - { +namespace Blazorise.Generator.Features; - } -} +[AttributeUsage( AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event )] +public class GenerateIgnoreEqualityAttribute : Attribute; \ No newline at end of file diff --git a/Source/SourceGenerators/Blazorise.Generator.Features/README.md b/Source/SourceGenerators/Blazorise.Generator.Features/README.md new file mode 100644 index 0000000000..1220b332ed --- /dev/null +++ b/Source/SourceGenerators/Blazorise.Generator.Features/README.md @@ -0,0 +1,12 @@ +## Code Removal with Fody + +Attributes like `GenerateIgnoreEqualityAttribute` are used to signal the source generator to produce additional code. These attributes have no functional purpose in the final compiled code, so they are removed post-compilation using Fody. + +If you add a new attribute here, make sure to account for its removal in `Blazorise.Weavers.Fody`. + +> It might be worthwhile to place "ready-to-be-removed" attributes in a dedicated namespace, making it easier to remove the entire namespace rather than individual attributes. + +## ApiDocsDtos + +- Is used by generated code (`ComponentApiDocsGenerator.cs`) and by `Blazorise.Docs` to present the Blazorise API. +- Is removed while packing the Blazorise nuget (using Fody). \ No newline at end of file diff --git a/Source/SourceGenerators/Blazorise.Generator/Blazorise.Generator.csproj b/Source/SourceGenerators/Blazorise.Generator/Blazorise.Generator.csproj index b7dbd55788..2bbf87244d 100644 --- a/Source/SourceGenerators/Blazorise.Generator/Blazorise.Generator.csproj +++ b/Source/SourceGenerators/Blazorise.Generator/Blazorise.Generator.csproj @@ -3,6 +3,8 @@ netstandard2.0 true + latest + @@ -13,6 +15,11 @@ + + $(DefineConstants);ENABLE_APIDOCS_GENERATOR + + + diff --git a/Source/SourceGenerators/Blazorise.Weavers.Fody/Blazorise.Weavers.Fody.csproj b/Source/SourceGenerators/Blazorise.Weavers.Fody/Blazorise.Weavers.Fody.csproj new file mode 100644 index 0000000000..e505c8fbfa --- /dev/null +++ b/Source/SourceGenerators/Blazorise.Weavers.Fody/Blazorise.Weavers.Fody.csproj @@ -0,0 +1,13 @@ + + + + netstandard2.0 + true + latest + + + + + + + diff --git a/Source/SourceGenerators/Blazorise.Weavers.Fody/ModuleWeaver.cs b/Source/SourceGenerators/Blazorise.Weavers.Fody/ModuleWeaver.cs new file mode 100644 index 0000000000..5681e6c8ba --- /dev/null +++ b/Source/SourceGenerators/Blazorise.Weavers.Fody/ModuleWeaver.cs @@ -0,0 +1,97 @@ +#region Using directives +using System.Collections.Generic; +using System.Linq; +using Fody; +using Mono.Cecil; +#endregion + +namespace Blazorise.Weavers.Fody; + +public class ModuleWeaver : BaseModuleWeaver +{ + #region Members + + const string GeneratorFeaturesNamespace = "Blazorise.Generator.Features"; + + #endregion + + #region Methods + + public override void Execute() + { + // Remove attribute usages + RemoveAttributeUsages( $"{GeneratorFeaturesNamespace}.GenerateEqualityAttribute" ); + RemoveAttributeUsages( $"{GeneratorFeaturesNamespace}.GenerateIgnoreEqualityAttribute" ); + + RemoveReference( assemblyReferenceName: GeneratorFeaturesNamespace ); + } + + private void RemoveAttributeUsages( string attributeFullName ) + { + foreach ( var type in ModuleDefinition.Types ) + { + // Remove from types (classes) + RemoveAttributeFromType( type, attributeFullName ); + + // Remove from properties, fields, and events + foreach ( var property in type.Properties ) + RemoveAttributeFromMember( property, attributeFullName ); + + foreach ( var field in type.Fields ) + RemoveAttributeFromMember( field, attributeFullName ); + + foreach ( var eventDef in type.Events ) + RemoveAttributeFromMember( eventDef, attributeFullName ); + } + } + + private void RemoveAttributeFromType( TypeDefinition type, string attributeFullName ) + { + var customAttributes = type.CustomAttributes; + for ( int i = customAttributes.Count - 1; i >= 0; i-- ) + { + if ( customAttributes[i].AttributeType.FullName == attributeFullName ) + customAttributes.RemoveAt( i ); + } + } + + private void RemoveAttributeFromMember( IMemberDefinition member, string attributeFullName ) + { + var customAttributes = member.CustomAttributes; + for ( int i = customAttributes.Count - 1; i >= 0; i-- ) + { + if ( customAttributes[i].AttributeType.FullName == attributeFullName ) + customAttributes.RemoveAt( i ); + } + } + + private void RemoveReference( string assemblyReferenceName ) + { + var reference = ModuleDefinition.AssemblyReferences + .FirstOrDefault( r => r.Name == assemblyReferenceName ); + + if ( reference != null ) + { + ModuleDefinition.AssemblyReferences.Remove( reference ); + WriteMessage( $"Removed reference to {assemblyReferenceName}", MessageImportance.High ); + } + else + { + WriteMessage( $"Reference {assemblyReferenceName} not found", MessageImportance.Low ); + } + } + + public override IEnumerable GetAssembliesForScanning() + { + // Use default assemblies for scanning + return ["mscorlib", "System", "System.Core"]; + } + + #endregion + + #region Properties + + public override bool ShouldCleanReference => true; + + #endregion +} diff --git a/Source/SourceGenerators/Blazorise.Weavers.Fody/README.md b/Source/SourceGenerators/Blazorise.Weavers.Fody/README.md new file mode 100644 index 0000000000..5dee437b01 --- /dev/null +++ b/Source/SourceGenerators/Blazorise.Weavers.Fody/README.md @@ -0,0 +1,60 @@ +## Fody + +The naming conventions `Blazorise.Weavers` (bw) and `Blazorise.Weavers.Fody` (bwf) are necessary. +Similarly, the `ModuleWeaver` class in `bwf` follows Fody's required naming convention. + +### Purpose of `bw` and `bwf` + +- **`Blazorise.Weavers` (bw)**: + - Exists solely to create a NuGet package (includes `Fody.Packaging` which does exactly that). + - Created NuGet package is necessary for Fody to work. It works under the hood and is created on build. + - It acts as a wrapper for `bwf`. + +- **`Blazorise.Weavers.Fody` (bwf)**: + - The actual implementation of the weaving logic. + - This is the "real hero" performing the weaving tasks. + +### Why `bwf` is Not Referenced Directly +The `bwf` project is not referenced directly in any other project because: +- Its purpose is to be put inside nuget package +- Fody in the `Blazorise` project automatically picks up the NuGet package for weaving. The package is created in bw proj. +- Nuget package, that is created from bw (using bwf code) is named `Blazorise.Weavers.Fody`, +exactly the same as the bwf project. And you get a lot of fun with `Ambiguous package name` errors... + +### Challenges and Solutions + +Since `bwf` is not referenced: + +- It is not built when you build a project like `Blazorise.csproj`. +- To address this, a custom MSBuild target was added to `bw` to explicitly run `dotnet build` on `bwf`. + - And can be turned off with `-p:BuildBlazoriseWeaverDll=false`. +- bwf dll is there + +### Current Workflow + +- The DLL from `bwf` is "hardcoded" as a reference in `Blazorise` (via `WeaverFiles`). (it's taken from official docs) +- This ensures that the weaver logic is available during the build (exactly where it should be). + +### Future Considerations + +Creating and referencing a NuGet package for both `bwf` and `bw` would simplify integration (would remove the Weavers projects). +However - harder to make changes to the weaver (build package, change package, etc...). + +https://github.com/Fody/Home/blob/master/pages/addin-development.md + + +## ModuleWeaver + +- `ModuleWeaver.cs` removes: + - (Always) - Usages of attributes from `Blazorise.SourceGenerator.Features`. This is done every time (the Blazorise project is built). + - (On `IsPack==true`) Source generated files from `Blazorise.ApiDocsSourceGenerated`. This code stays inside the `Blazorise` assembly on simple build without IsPack property (for example when `Blazorise.Docs` is running). + - (On `IsPack==true`) Reference to `Blazorise.SourceGenerator.Features`. `Blazorise.ApiDocsSourceGenerated` code uses the dtos from this assembly. + + + + + + + + + diff --git a/Source/SourceGenerators/Blazorise.Weavers/Blazorise.Weavers.csproj b/Source/SourceGenerators/Blazorise.Weavers/Blazorise.Weavers.csproj new file mode 100644 index 0000000000..8bd67b7f76 --- /dev/null +++ b/Source/SourceGenerators/Blazorise.Weavers/Blazorise.Weavers.csproj @@ -0,0 +1,28 @@ + + + + + net6; + true + + + + + + + + + + + + + + + + + + + +