From 9914dfce742f29c154400f3804a79a4ee4c16e30 Mon Sep 17 00:00:00 2001 From: Ramya Date: Thu, 19 Jun 2025 10:56:13 +0530 Subject: [PATCH 01/16] 958831: Update Ug for SEO Changes --- blazor/diagram/accessibility.md | 8 +-- blazor/diagram/annotations/appearance.md | 26 ++++----- .../annotations/connector-annotation.md | 12 ++-- blazor/diagram/annotations/events.md | 6 +- blazor/diagram/annotations/interactions.md | 4 +- blazor/diagram/annotations/labels.md | 12 ++-- blazor/diagram/annotations/node-annotation.md | 12 ++-- blazor/diagram/bpmn-shapes/bpmn-activity.md | 18 +++--- blazor/diagram/bpmn-shapes/bpmn-connectors.md | 6 +- blazor/diagram/bpmn-shapes/bpmn-data-store.md | 4 +- blazor/diagram/bpmn-shapes/bpmn-event.md | 4 +- .../bpmn-shapes/bpmn-expanded-sub-process.md | 16 +++--- blazor/diagram/bpmn-shapes/bpmn-gateway.md | 2 +- .../bpmn-shapes/bpmn-text-annotation.md | 2 +- blazor/diagram/commands.md | 56 +++++++++---------- 15 files changed, 94 insertions(+), 94 deletions(-) diff --git a/blazor/diagram/accessibility.md b/blazor/diagram/accessibility.md index 4295b82564..54cd8242a1 100644 --- a/blazor/diagram/accessibility.md +++ b/blazor/diagram/accessibility.md @@ -1,13 +1,13 @@ --- layout: post -title: Accessibility in Blazor Diagram Component | Syncfusion +title: Accessibility Features in Blazor Diagram Component | Syncfusion description: Checkout and Learn all about accessibility in Syncfusion Blazor Diagram component and many more details. platform: Blazor control: Diagram documentation: ug --- -# Accessibility in Blazor Diagram Component +# Accessibility Features in Blazor Diagram Component Accessibility in the Blazor diagram component is achieved through compliance with the [ADA](https://www.ada.gov/), [Section 508](https://www.section508.gov/), and [WCAG 2.2](https://www.w3.org/TR/WCAG22/) standards, as well as [WCAG roles](https://www.w3.org/TR/wai-aria/#roles) and support for keyboard navigation. This ensures that users can effectively interact with the diagram features using assistive technologies such as screen readers. @@ -37,7 +37,7 @@ The accessibility compliance for the Blazor diagram component is outlined below:
No - The component does not meet the requirement.
-## WAI-ARIA attributes +## WAI-ARIA Attributes The Blazor Diagram component followed the WAI-ARIA patterns to meet the accessibility. The following ARIA attributes are used in the Blazor Diagram component: @@ -157,7 +157,7 @@ The Blazor Diagram component followed the [keyboard interaction](https://www.w3. N> You can download a complete working sample for keyboard navigation from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Accessibility/KeyBoardNavigation) -## Ensuring accessibility +## Ensuring Accessibility The Blazor diagram component's accessibility levels are ensured through an [axe-core](https://www.nuget.org/packages/Deque.AxeCore.Playwright) with playwright tests. diff --git a/blazor/diagram/annotations/appearance.md b/blazor/diagram/annotations/appearance.md index 2cd7942ad8..11dd01c8e6 100644 --- a/blazor/diagram/annotations/appearance.md +++ b/blazor/diagram/annotations/appearance.md @@ -1,15 +1,15 @@ --- layout: post -title: Appearance in Blazor Diagram Component | Syncfusion +title: Annotation Appearance in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Appearance in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Appearance in Blazor Diagram Component +# Annotation Appearance in Blazor Diagram Component -## How to update size of an annotation +## How to Update Size of an Annotation The diagram allows you to set size for annotations by using the Height and Width properties. The default value of the [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Height) properties is 0, and it takes the node or connector size as default. The following code example shows how the annotation size is customized. @@ -48,7 +48,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Changing Annotation Size in Blazor Diagram](../images/blazor-diagram-annotation-size.png) -## How to add hyperlink to an annotation +## How to Add Hyperlink to an Annotation The diagram provides support to add a [Hyperlink](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Hyperlink) to the node's or connector's annotation. It can also be customized. @@ -94,7 +94,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Annotation with Hyperlink in Blazor Diagram](../images/blazor-diagram-annotation-with-hyperlink.png) -### How to update hyperlink with content +### How to Update Hyperlink with Content ```cshtml @using Syncfusion.Blazor.Diagram @@ -139,7 +139,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![HyperLink with Content in Blazor Diagram](../images/blazor-diagram-hyperlink-content.png) -## How to change text wrapping +## How to Change Text Wrapping The [TextWrapping](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextWrapping) property of an annotation defines how the text should be wrapped. When text overflows node boundaries, you can control it by using the `TextWrapping`. So, it is wrapped into multiple lines. The following code explains how to wrap a text in a node. @@ -190,7 +190,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync | Wrap | Text-wrapping occurs, when the text overflows beyond the available node width. | ![Text Wrapping in Blazor Diagram](../images/blazor-diagram-text-wrapping.png) | | WrapWithOverflow (Default) | Text-wrapping occurs, when the text overflows beyond the available node width. However, the text may overflow beyond the node width in the case of a very long word. | ![Blazor Diagram Text Wrapping with Overflow](../images/blazor-diagram-text-wrap-with-overflow.png) | -### How to update text overflow +### How to Update Text Overflow The [TextOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextOverflow) property specifies how the overflowed content that is not displayed should be signaled to the user. The TextOverflow property can have the following values. @@ -256,7 +256,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N>**Note :** All the customization over the overflow is also applicable to connector’s annotation. -## How to customize the appearance of an annotation +## How to Customize the Appearance of an Annotation You can change the font style of the annotations with the font specific properties such as FontSize, FontFamily, and Color. The following code explains how to customize the appearance of the annotation. @@ -316,7 +316,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Label with Custom Annotation](../images/blazor-diagram-label-with-custom-annotation.png) -## How to update the annotation style at runtime +## How to Update the Annotation Style at Runtime You can change the font style of the annotations with the font specific properties such as [FontSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontSize), [FontFamily](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontFamily), and [Color](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_Color). The following code explains how to update the font style of the annotation. @@ -382,7 +382,7 @@ You can change the font style of the annotations with the font specific properti ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/Appearance/AnnotationStyleatRunTime) -## How to change the editing mode +## How to Change the Editing Mode The diagram provides support to edit an annotation at runtime, either programmatically or interactively. By default, the annotation is in view mode. However, it can be brought into edit mode in two ways. @@ -393,7 +393,7 @@ The diagram provides support to edit an annotation at runtime, either programmat Double-clicking any annotation will enable the editing and the node enables first annotation editing. When the focus of editor is lost, the annotation for the node is updated. -## How to set read only constraints for annotation +## How to Set Read Only Constraints for Annotation The diagram allows you to create read-only annotations. You have to set the read-only property of annotation to enable or disable the [ReadOnly](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AnnotationConstraints.html#Syncfusion_Blazor_Diagram_AnnotationConstraints_ReadOnly) constraints. The following code explains how to enable read-only mode. @@ -434,7 +434,7 @@ The diagram allows you to create read-only annotations. You have to set the read ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/Appearance/ReaonlyConstraints) -## How to create multiple annotations +## How to Create Multiple Annotations You can add any number of annotations to a node or connector. The following code example shows how to add multiple annotations to a node. @@ -522,7 +522,7 @@ N>* Type of the annotation’s property of the node or connector is ObservableCo
* All the same customization can be applicable for the annotations.
* Text Editing can be started only the first annotation of the annotation collection when you double click the node or connector. -## How to update annotation constraints +## How to Update Annotation Constraints [AnnotationConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AnnotationConstraints.html) are used to enable or disable certain behaviors of the annotation. Constraints are provided as flagged enumerations, so that multiple behaviors can be enabled or disabled with bitwise operators. diff --git a/blazor/diagram/annotations/connector-annotation.md b/blazor/diagram/annotations/connector-annotation.md index adc7c14611..30cc0ecc2e 100644 --- a/blazor/diagram/annotations/connector-annotation.md +++ b/blazor/diagram/annotations/connector-annotation.md @@ -1,13 +1,13 @@ --- layout: post -title: Annotation for Connector in Blazor Diagram Component | Syncfusion +title: Connector Annotation Position in Blazor Diagram | Syncfusion description: Checkout and learn here all about Annotation for Connector in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# How to position connector’s annotation +# Connector Annotation Position in Blazor Diagram Annotations of a connector can be positioned using the following properties of Annotation class. @@ -19,7 +19,7 @@ Annotations of a connector can be positioned using the following properties of A * VerticalAlignment * Margin -## How to update offset for annotations +## How to Update the Offset for Annotations The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Offset) property of an annotation is used to align the annotations based on fractions. A value of 0 represents Top-Left corner, 1 represents Bottom-Right corner, and 0.5 represents half of Width/Height. @@ -78,7 +78,7 @@ The following image shows the relationship between the annotation position and o > * By default, offset value of the connector annotation is 0.5. > * Connector annotation's Id should not start with numbers or special characters and should not contain special characters such as underscores(_) or spaces. -## How to change the alignment of an annotation +## How to Change the Alignment of an Annotation The connector’s annotation can be aligned over its segment path using the [Alignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Alignment) property of the annotation. @@ -129,7 +129,7 @@ The following screenshot shows how the annotation of the connector aligned over N> By default, Alignment value of the connector annotation is `Center`. -## How to change the displacement of an annotation +## How to Change the Displacement of an Annotation The [Displacement](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Displacement) property is used to dislocate the annotation by the value given. By default, annotation will be in centered on the connector path. When you assign a value to the Displacement property, the annotation will be displaced from its position by displacement value. @@ -173,7 +173,7 @@ The [Displacement](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagr ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/AnnotationOfConnector/DisplacementOfAnnotation) -## How to update the segment angle of an annotation +## How to Update the Segment Angle of an Annotation The [SegmentAngle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_SegmentAngle) property is used to rotate the annotation based on the connectors segment direction. By default, the annotation will be rotated in the connector path. When you assign a value to the SegmentPath property, the annotation will be rotated from its position based on the connector segment direction. diff --git a/blazor/diagram/annotations/events.md b/blazor/diagram/annotations/events.md index 36ad54e7c6..adb6bc3347 100644 --- a/blazor/diagram/annotations/events.md +++ b/blazor/diagram/annotations/events.md @@ -1,15 +1,15 @@ --- layout: post -title: Events in Blazor Diagram Component | Syncfusion +title: Annotation Events in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Events in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Events in Blazor Diagram Component +# Annotation Events in Blazor Diagram Component -## Text Change event +## How to Handle Text Change event * While editing a node's or connector's annotation, the following event can be used to do the customization. * When a node's or connector's annotation is changed in the diagram, this event is getting triggered. diff --git a/blazor/diagram/annotations/interactions.md b/blazor/diagram/annotations/interactions.md index d50fa213b1..c4d7c08cd8 100644 --- a/blazor/diagram/annotations/interactions.md +++ b/blazor/diagram/annotations/interactions.md @@ -1,6 +1,6 @@ --- layout: post -title: Interaction in Blazor Diagram Component | Syncfusion +title: Annotation Interaction in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Interaction in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component @@ -11,7 +11,7 @@ documentation: ug Diagram provides the support to the annotations rotation interactively. -## Annotation Rotation +## How to Control Annotation Rotation The [RotationReference](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeAnnotation.html#Syncfusion_Blazor_Diagram_ShapeAnnotation_RotationReference) property of an annotation allows you to control whether the text should rotate relative to its parent node or the Page. The following code examples illustrate how to configure RotationReference for an annotation. diff --git a/blazor/diagram/annotations/labels.md b/blazor/diagram/annotations/labels.md index f7af6b5861..d9d167f9e2 100644 --- a/blazor/diagram/annotations/labels.md +++ b/blazor/diagram/annotations/labels.md @@ -1,17 +1,17 @@ --- layout: post -title: Actions of Annotation in Blazor Diagram Component | Syncfusion +title: Controlling Annotation in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about actions of annotation in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Annotation in Blazor Diagram Component +# Controlling Annotation in Blazor Diagram Component The [Annotation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html) is a block of text that can be displayed over a node or connector and it is used to textually represent an object with a string that can be edited at run time. Multiple annotations can be added to a node or connector. -## How to create annotation +## How to Create Annotation An annotation can be added to a node or connector by defining the annotation object and adding it to the annotation collection of the node or connector. The [Content](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Content) property of the annotation defines the text to be displayed. @@ -78,7 +78,7 @@ N>* [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotat
* By default, connector’s path annotation positioned in center point of its path. >**Note:** Do not use underscores(_) for annotation's id. -## How to add annotation at runtime +## How to Add Annotation at Runtime You can add an annotation at runtime to the Annotations collection of the node/connector in the diagram component by using the `Add` method. @@ -140,7 +140,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Annotation in Blazor Diagram](../images/blazor-diagram-add-annotation.png) -## How to remove annotations at runtime +## How to Remove Annotations at Runtime A collection of annotations can be removed from a node by using the `RemoveAt` method. The following code explains how to remove an annotation from a node. @@ -202,7 +202,7 @@ Also, a collection of annotations can be removed from the node by using the `Rem N>* You can delete multiple annotations from a node to pass the collection of annotation objects as argument.
* The `Add`, `Remove`, and `RemoveAt` methods are applicable for connectors too. -## How to update annotation at runtime +## How to Update Annotation at Runtime You can get the annotation directly from the node’s annotations collection property and you can change any annotation properties at runtime. diff --git a/blazor/diagram/annotations/node-annotation.md b/blazor/diagram/annotations/node-annotation.md index 25a5e03581..c524d718af 100644 --- a/blazor/diagram/annotations/node-annotation.md +++ b/blazor/diagram/annotations/node-annotation.md @@ -1,13 +1,13 @@ --- layout: post -title: Annotation for Node in Blazor Diagram Component | Syncfusion +title: Controlling Node Annotation Position in Blazor Diagram | Syncfusion description: Checkout and learn here all about annotation for node in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# How to position node’s annotation +# Controlling Node Annotation Position in Blazor Diagram The diagram allows you to customize the position and appearance of the annotation efficiently. Annotations can be aligned relative to the node boundaries. It has Margin, Offset, Horizontal, and Vertical alignment settings. It is quite tricky when all four alignments are used together but gives more control over alignments properties of the [ShapeAnnotation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeAnnotation.html) class. Annotations of a node can be positioned using the following properties of `ShapeAnnotation`. @@ -16,7 +16,7 @@ The diagram allows you to customize the position and appearance of the annotatio * VerticalAlignment * Margin -## How to change the offset of an annotation +## How to Change the Offset of an Annotation The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeAnnotation.html#Syncfusion_Blazor_Diagram_ShapeAnnotation_Offset) property of an annotation is used to align the annotations based on fractions. 0 represents top/left corner, 1 represents bottom/right corner, and 0.5 represents half of width/height. @@ -77,7 +77,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync > * Type of the offset property for a connector’s path annotation is double. > * Node annotation's Id should not start with numbers or special characters and should not contain special characters such as underscores(_) or spaces. -## How to change the alignment of an annotation +## How to Change the Alignment of an Annotation The [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_HorizontalAlignment) property of an annotation is used to set how the annotation is horizontally aligned at the annotation position determined from the fraction values. The [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_VerticalAlignment) property is used to set how the annotation is vertically aligned at the annotation position. @@ -140,7 +140,7 @@ N>* The value of the `HorizontalAlignment` is [Center](https://help.syncfusion.c
* The value of the `VerticalAlignment` is [Center](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.VerticalAlignment.html#Syncfusion_Blazor_Diagram_VerticalAlignment_Center) by default.
* Alignment is positioned based on the offset value. -## How to change the margin of an annotation +## How to Change the Margin of an Annotation [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Margin) is an absolute value used to add some blank space to any one of its four sides. The annotations can be displaced with the margin property. The following code example explains how to align an annotation based on its Offset, HorizontalAlignment, VerticalAlignment, and Margin values. @@ -185,7 +185,7 @@ N>* The value of the `HorizontalAlignment` is [Center](https://help.syncfusion.c You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/AnnotationOfNode/MarginOfAnnotation) -## How to align the text +## How to Align the Text The [TextAlign](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextAlign) property of an annotation allows you to set how the text should be aligned (Left, Right, Center, or Justify) inside the text block. The following code explains how to set TextAlign for an annotation. diff --git a/blazor/diagram/bpmn-shapes/bpmn-activity.md b/blazor/diagram/bpmn-shapes/bpmn-activity.md index 8e15f22bb4..dc04ea0322 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-activity.md +++ b/blazor/diagram/bpmn-shapes/bpmn-activity.md @@ -1,13 +1,13 @@ --- layout: post -title: BPMN activity in Blazor Diagram Component | Syncfusion +title: BPMN Activity in Blazor Diagram Component | Syncfusion description: Learn here all about BPMN activity such as task, sub-process in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# BPMN activity in Blazor Diagram Component +# BPMN Activity in Blazor Diagram Component The [Activity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html) is the task that is performed in a business process. It is represented by a rounded rectangle. @@ -56,7 +56,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Send Task BPMN Shape](../images/Task.png) -## BPMN activity task +## How to Create a BPMN Activity Task The [TaskType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_TaskType) property of the [Bpmn Activity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html) allows you to define the type of task such as sending, receiving, user-based task, etc. By default, the value of [TaskType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_TaskType) property is set to **None.** This is shown by a small event symbol in the top of the corner. The following code explains how to create different types of BPMN tasks. @@ -113,7 +113,7 @@ The various types of BPMN tasks are tabulated as follows. | User | ![User Task BPMN Shape](../images/User.png) |A User task represents that a human performer performs the task with the use of a software application.| | Script | ![Script Task BPMN Shape](../images/Script.png) |A Script task is an automated activity when a process execution arrives at the Script task, the corresponding script is executed.| -## BPMN activity collapsed sub-process +## How to Create a BPMN Activity Collapsed Sub-Process A [Collapsed Sub-Process](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivityType.html#Syncfusion_Blazor_Diagram_BpmnActivityType_CollapsedSubProcess) is a group of tasks that is used to hide or reveal details of additional levels. The following code explains how to create a [Collapsed Sub-Process](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivityType.html#Syncfusion_Blazor_Diagram_BpmnActivityType_CollapsedSubProcess). @@ -157,7 +157,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Collapsed Subprocess BPMN Shape](../images/Bpmn-CollapsedSub-Process-Loop-None.png) -### Loop +### How to Set Loop Type [Loop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_Loop) is a task that is internally being looped. The [Loop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_Loop) property of [Bpmn Activity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html) allows you to define the type of loop. The default value for [Loop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_Loop) is [None](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnLoopCharacteristic.html#Syncfusion_Blazor_Diagram_BpmnLoopCharacteristic_None). @@ -212,7 +212,7 @@ The following table contains various types of BPMN loops. | SequenceMultiInstance | ![Sequence MultiInstance Task BPMN Shape](../images/Bpmn-Task-Loop-Sequential.png) | ![SequenceMultiInstance Subprocess BPMN Shape](../images/Bpmn-CollapsedSub-Process-Loop-Sequential.png)|Multi-Instance marker indicates that the sub-process can run with other identical sub-processes simultaneously. The three horizontal lines indicate the sequential execution.| | ParallelMultiInstance | ![ParallelMultiInstance Task BPMNShape](../images/Bpmn-Task-Loop-Parallel.png) | ![ParallelMultiInstance Subprocess BPMN Shape](../images/Bpmn-CollapsedSub-Process-Loop-Parallel.png) |Multi-Instance marker indicates that the sub-process can run with other identical sub-processes simultaneously. The three vertical lines indicate that the instances will be executed in parallel.| -### Compensation +### How to Enable Compensation [IsCompensation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_IsCompensation) is triggered when the operation is partially failed and enabled it with the [IsCompensation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_IsCompensation) property of the [Bpmn Activity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html). By default, the [IsCompensation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_IsCompensation) property is set to false. @@ -257,7 +257,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![IsCompensationActivity Task BPMN Shape](../images/Bpmn-Task-Compensation.png) -### Call +### How to Enable Call A [Call](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_IsCall) activity is a global sub-process that is reused at various points of the business flow. To create a Call activity, enable the [IsCall](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_IsCall) property of the [Bpmn Activity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html). @@ -305,7 +305,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![IsAdHocActivity CollapsedSub-Process BPMN Shape](../images/Bpmn-Task-Call.png) -### Ad-Hoc +### How to Enable Ad-Hoc An ad-hoc sub-process is a group of tasks that are executed in any order or skipped in order to fulfill the end condition and set it with the [IsAdhoc](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_IsAdhoc) property of [Bpmn Activity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html). @@ -352,7 +352,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![IsAdHocActivity CollapsedSub-Process BPMN Shape](../images/Bpmn-CollapsedSub-Process-AdHocpng.png) -### SubProcessType +### How to Set Sub-Process Type SubProcessType represents the type of task that is being processed. The [SubProcessType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnActivity.html#Syncfusion_Blazor_Diagram_BpmnActivity_SubProcessType) property of subprocess allows you to define the type of SubProcessType. By default, it is set to [Default](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnSubProcessType.html#Syncfusion_Blazor_Diagram_BpmnSubProcessType_Default). diff --git a/blazor/diagram/bpmn-shapes/bpmn-connectors.md b/blazor/diagram/bpmn-shapes/bpmn-connectors.md index 965982da6c..7e4770a7db 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-connectors.md +++ b/blazor/diagram/bpmn-shapes/bpmn-connectors.md @@ -16,7 +16,7 @@ They are classified as follows. * Sequence * Message -## Association +## How to Create a Association The `BPMN Association` flow is used to link flow objects with their corresponding text or artifact. An association is represented as a dotted graphical line with an opened arrow. To create an Association, the [Flow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlow.html#Syncfusion_Blazor_Diagram_BpmnFlow_Flow) property of the [BpmnFlowShape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlow.html) should be set to [AssociationFlow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlowType.html#Syncfusion_Blazor_Diagram_BpmnFlowType_AssociationFlow). The types of association are as follows: @@ -70,7 +70,7 @@ The following table shows the visual representation of association flows. | DirectionalAssociationFlow | ![Directional BPMN FlowShapes](../images/Bpmn-DirectionalAssociatinFlow.png) | | BiDirectionalAssociationFlow | ![BiDirectional BPMN FlowShapes](../images/Bpmn-BidirectionalAssociationFlow.png) | -## Sequence +## How to Create a Sequence A `Sequence` flow shows the order that the activities are performed in a BPMN process and is represented by a solid graphical line. To create a SequenceFlow, [Flow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlow.html#Syncfusion_Blazor_Diagram_BpmnFlow_Flow) property of the [BpmnFlowShape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlow.html) should be set to [SequenceFlow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlowType.html#Syncfusion_Blazor_Diagram_BpmnFlowType_SequenceFlow). The types of sequence are as follows: @@ -125,7 +125,7 @@ The following table contains various representation of sequence flows. N> The default value for the property `Sequence` is **Normal.** -## Message +## How to Create a Message `Message` flows are used when two separately controlled processes communicate and collaborate with one another. An activity or event in one pool can initiate a message to the another pool. Message Flows are depicted as lines with an empty circle indicating where the message originates and an empty arrowhead where the message terminates. To create a MessageFlow, the [Flow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlow.html#Syncfusion_Blazor_Diagram_BpmnFlow_Flow) property of the [BpmnFlowShape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlow.html) should be set to [MessageFlow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnFlowType.html#Syncfusion_Blazor_Diagram_BpmnFlowType_MessageFlow). The types of message flows are as follows: diff --git a/blazor/diagram/bpmn-shapes/bpmn-data-store.md b/blazor/diagram/bpmn-shapes/bpmn-data-store.md index 58a3917a99..459dc80831 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-data-store.md +++ b/blazor/diagram/bpmn-shapes/bpmn-data-store.md @@ -1,13 +1,13 @@ --- layout: post -title: BPMN Data Source in Blazor Diagram Component | Syncfusion +title: BPMN Data Store in Blazor Diagram Component | Syncfusion description: Learn here all about how to create the BPMN DataStore in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# BPMN DataStore in Blazor Diagram Component +# BPMN Data Store in Blazor Diagram Component A DataStore is used to store or access data associated with a business process. To create a dataStore, the node property [Shape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Shape.html) should be set to [BpmnDataStore](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnDataStore.html). The following code example explains how to create a data source. diff --git a/blazor/diagram/bpmn-shapes/bpmn-event.md b/blazor/diagram/bpmn-shapes/bpmn-event.md index e6ba50730f..6889f30794 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-event.md +++ b/blazor/diagram/bpmn-shapes/bpmn-event.md @@ -7,7 +7,7 @@ control: Diagram Component documentation: ug --- -# BPMN event in Blazor Diagram Component +# BPMN Event in Blazor Diagram Component An [Event](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnEvent.html) is a common BPMN process model element that represents something that happens during a business process and is notated with a circle. The type of events are as follows: @@ -56,7 +56,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![None Trigger End event event BPMNShape](../images/Bpmn-Event-End.png) -## BPMN event trigger +## How to Add BPMN Event Trigger Event triggers are notated as icons inside the circle and they represent the specific details of the process. The [Trigger](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnEvent.html#Syncfusion_Blazor_Diagram_BpmnEvent_Trigger) property of the node allows you to set the type of trigger and by default, it is set to None. The following code example explains how to create a BPMN trigger. diff --git a/blazor/diagram/bpmn-shapes/bpmn-expanded-sub-process.md b/blazor/diagram/bpmn-shapes/bpmn-expanded-sub-process.md index fdd7ec38e6..2d1fb6cd28 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-expanded-sub-process.md +++ b/blazor/diagram/bpmn-shapes/bpmn-expanded-sub-process.md @@ -1,6 +1,6 @@ --- layout: post -title: BPMN group in Blazor Diagram Component | Syncfusion +title: BPMN Expanded Sub-Process in Blazor Diagram Component | Syncfusion description: Learn here all about how to create and update the BPMN Expanded Sub-Process in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component @@ -11,7 +11,7 @@ documentation: ug An ExpandedSubProcess is used to frame a part of the diagram, shows that elements included in it logically belong together, and has no other semantics other than organizing elements. It is represented by a rounded rectangle. -## Create BPMN ExpandedSubProcess +## How to Create BPMN Expanded Sub-Process To create a ExpandedSubProcess, define the `Shape` property of the node as [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html) and enable allow drop property of the node. The following code example explains how to create a BPMN Expanded Sub-Process. @@ -51,7 +51,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![BPMN Expanded Sub-Process](../images/Bpmn-ExpandedSubProcess.png) -## Add BPMN Nodes into BPMN ExpandedSubProcess +## How to Add BPMN Nodes into BPMN Expanded Sub-Process To add a BpmnNode into [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html), define the BpmnNodeViewModel object and add it to the [Children](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_Children) collection of the [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html). The following code example explains how to add a BPMN node to a BPMN Expanded Sub-Process using `Children` property. @@ -103,7 +103,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![ExpandedSubProcess BPMN Shape](../images/Bpmn-ExpandedSubProcess-WithChildren.png) -## Add BPMN Nodes into BPMN ExpandedSubProcess at runtime +## How to Add BPMN Nodes into BPMN Expanded Sub-Process at Runtime * Drag and drop the BPMN nodes to the BPMN ExpandedSubProcess. @@ -114,7 +114,7 @@ The following image shows how to add BPMN node into the BPMN ExpandedSubProcess ![BPMN Expanded Sub-Process](../images/Bpmn-ExpandedSubProcess.gif) -### Loop +### How to Set Loop Type [Loop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_Loop) is a task that is internally being looped. The [Loop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_Loop) property of [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html) allows you to define the type of loop. The default value for [Loop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_Loop) is [None](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnLoopCharacteristic.html#Syncfusion_Blazor_Diagram_BpmnLoopCharacteristic_None). You can define the `Loop` property in [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html), as shown in the following code. @@ -166,7 +166,7 @@ The following table contains various types of BPMN loops. | SequenceMultiInstance | ![Sequence MultiInstance Task BPMN Shape](../images/Bpmn-Task-Loop-Sequential.png) | Multi-Instance marker indicates that the sub-process can run with other identical sub-processes simultaneously. The three horizontal lines indicate the sequential execution.| | ParallelMultiInstance | ![ParallelMultiInstance Task BPMNShape](../images/Bpmn-Task-Loop-Parallel.png) | Multi-Instance marker indicates that the sub-process can run with other identical sub-processes simultaneously. The three vertical lines indicate that the instances will be executed in parallel.| -### Compensation +### How to Enable Compensation [IsCompensation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_IsCompensation) is triggered when the operation is partially failed and can be enabled with the [IsCompensation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_IsCompensation) property of the [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html). By default, the [IsCompensation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_IsCompensation) is set to false. @@ -209,7 +209,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![IsCompensationActivity ExpandedSub-Process BPMN Shape](../images/Bpmn-Task-Compensation.png) -### Ad-Hoc +### How to Enable Ad-Hoc An ad-hoc ExpandedSubProcess is a group of tasks that are executed in any order or skipped in order to fulfill the end condition and can be set with the [IsAdhoc](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_IsAdhoc) property of [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html). @@ -252,7 +252,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![IsAdHocActivity ExpandedSub-Process BPMN Shape](../images/Bpmn-ExpandedSub-Process-Adhoc.png) -### SubProcessType +### How to Set Sub-Process Type SubProcessType represents the type of task that is being processed. The [SubProcessType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html#Syncfusion_Blazor_Diagram_BpmnExpandedSubProcess_SubProcessType) property of [BpmnExpandedSubProcess](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnExpandedSubProcess.html) allows you to define the type of SubProcessType. By default, it is set to **Default.** diff --git a/blazor/diagram/bpmn-shapes/bpmn-gateway.md b/blazor/diagram/bpmn-shapes/bpmn-gateway.md index dda6dfef74..7c0ba34cc4 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-gateway.md +++ b/blazor/diagram/bpmn-shapes/bpmn-gateway.md @@ -7,7 +7,7 @@ control: Diagram Component documentation: ug --- -# BPMN gateway in Blazor Diagram Component +# BPMN Gateway in Blazor Diagram Component A Gateway is used to control the flow of a process and it is represented in diamond shape. The [GatewayType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnGateway.html#Syncfusion_Blazor_Diagram_BpmnGateway_GatewayType) property of the [BpmnGateway](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnGateway.html) can be set with any of the appropriate gateways. By default, the value of [GatewayType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnGateway.html#Syncfusion_Blazor_Diagram_BpmnGateway_GatewayType) is **None.** The following code example explains how to create a BPMN Gateway. diff --git a/blazor/diagram/bpmn-shapes/bpmn-text-annotation.md b/blazor/diagram/bpmn-shapes/bpmn-text-annotation.md index 871854c91f..61cdacdea8 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-text-annotation.md +++ b/blazor/diagram/bpmn-shapes/bpmn-text-annotation.md @@ -138,7 +138,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Auto BPMN Shape](../images/bpmn-text-annotation_WithTarget.png) -## How to connect the TextAnnotation to BPMNNode +## How to Connect a Text Annotation to a BPMN Node Drag and drop any bpmn shapes from the palette to the diagram and connect the BPMN Node and TextAnnotation. The following image shows how to drag a symbol from the palette and connect the TextAnnotation to the BPMNNode with interaction. diff --git a/blazor/diagram/commands.md b/blazor/diagram/commands.md index 2c44c285b2..c9d1faf315 100644 --- a/blazor/diagram/commands.md +++ b/blazor/diagram/commands.md @@ -20,11 +20,11 @@ There are several commands available in the diagram as follows. * Zoom commands * Undo/Redo commands -## Alignment commands +## How to Enable Alignment commands Alignment commands enable you to align the selected or defined objects, such as nodes and connectors with respect to the selection boundary. The following are the [AlignmentOptions](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AlignmentOptions.html) available in the [SetAlign](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SetAlign_Syncfusion_Blazor_Diagram_AlignmentOptions_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__Syncfusion_Blazor_Diagram_AlignmentMode_) commands, which shows how to use align methods in the diagram. -### How to align the selected objects to the left +### How to Align the Selected Objects to the Left The following code example illustrates how to align all the selected objects to the left side of the selection boundary. @@ -85,7 +85,7 @@ The following code example illustrates how to align all the selected objects to } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/AlignLeft) -### How to align the selected objects to the right +### How to Align the Selected Objects to the Right The following code example illustrates how to align all the selected objects at the right side of the selection boundary. @@ -146,7 +146,7 @@ The following code example illustrates how to align all the selected objects at } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/AlignRight) -### How to align the selected objects to the top +### How to Align the Selected Objects to the Top The following code example illustrates how to align all the selected objects at the top of the selection boundary. @@ -207,7 +207,7 @@ The following code example illustrates how to align all the selected objects at } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/AlignTop) -### How to align the selected objects to the bottom +### How to Align the Selected Objects to the Bottom The following code example illustrates how to align all the selected objects at the bottom of the selection boundary. @@ -268,7 +268,7 @@ The following code example illustrates how to align all the selected objects at } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/AlignBottom) -### How to align the selected objects to the middle +### How to Align the Selected Objects to the Middle The following code example illustrates how to align all the selected objects at the middle of the selection boundary. @@ -329,7 +329,7 @@ The following code example illustrates how to align all the selected objects at } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/AlignMiddle) -### How to align the selected objects to the center +### How to Align the Selected Objects to the Center The following code example illustrates how to align all the selected objects at the center of the selection boundary. @@ -390,7 +390,7 @@ The following code example illustrates how to align all the selected objects at } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/AlignCenter) -## Distribute +## How to Distribute Diagram Elements The [SetDistribute](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SetDistribute_Syncfusion_Blazor_Diagram_DistributeOptions_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) commands enable you to place the selected objects on the page at equal intervals from each other. The selected objects are equally spaced within the selection boundary. @@ -512,7 +512,7 @@ The following code example illustrates how to execute the space commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/SetDistributeCommands) -## Sizing Commands +## How to Enable Sizing Commands Sizing [SetSameSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SetSameSize_Syncfusion_Blazor_Diagram_SizingMode_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) commands are used to resize all selected object based on the width, height, and size of the reference object (FirstSelectedItem). @@ -598,7 +598,7 @@ The following code example illustrates how to execute the size commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/SizingCommands) -## Clipboard commands +## How to Enable Clipboard Commands Clipboard commands are used to cut, copy, or paste the selected elements. @@ -686,7 +686,7 @@ The following code illustrates how to execute the clipboard commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/ClipboardCommands) -## Grouping commands +## How to Enable Grouping commands **Grouping commands** are used to group or ungroup the selected elements on the diagram. To group the elements, select the elements using the select all command and group the selected elements using the group command. @@ -759,11 +759,11 @@ The following code illustrates how to execute the grouping commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/GroupingCommands) -## Z-Order commands +## How to Arrange Diagram Elements Using Z-Order Commands Z – Order commands are used to control the stacking order (Z-Order) of the diagram elements such as nodes, connectors, and groups. Also, you can arrange the selected objects on the diagram page with their Z-order values by using the Bring to front, Bring forward, Send to back, and Send backward features. -### BringToFront +### How to Use the Bring To Front Commands The [BringToFront](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_BringToFront) command is used to visually brings the selected element to the front over all other overlapped elements. @@ -826,7 +826,7 @@ The following code illustrates how to execute the BringToFront command. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/Z-OrderCommands/BringToFront) -### SendToBack +### How to Use the Send To Back Commands The [SendToBack](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SendToBack) command visually moves the selected elements behind all other overlapped elements. @@ -888,7 +888,7 @@ The following code illustrates how to execute the SendToBack command. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/Z-OrderCommands/SendToBack) -### BringForward +### How to Use the Bring Forward Commands The [BringForward](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_BringForward) command visually moves the selected element over the nearest overlapping element. @@ -950,7 +950,7 @@ The following code illustrates how to execute the BringForward command. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/Z-OrderCommands/BringForward) -### SendBackward +### How to Use the Send Backward Commands The [SendBackward](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SendBackward) command visually moves the selected elements behind the nearest underlying element. @@ -1016,7 +1016,7 @@ The following gif illustrates how to perform z-order commands. ![Z-order Commands](./images/Z-Order-Commands.gif) -## Zoom command +## How to Use the Zoom command The [Zoom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Zoom_System_Double_Syncfusion_Blazor_Diagram_DiagramPoint_) command is used to zoom in and zoom out the diagram view. @@ -1063,7 +1063,7 @@ The following code illustrates how to zoom-in/zoom out the diagram. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/ZoomingCommands) -## Nudge command +## How to Use the Nudge command The [Nudge](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Nudge_Syncfusion_Blazor_Diagram_Direction_System_Nullable_System_Int32__) commands reposition the selected object by the specified delta in the given direction. @@ -1098,7 +1098,7 @@ The following code illustrates how to execute nudge command. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/NudgeCommand) -## Nudge by using arrow keys +## How to Nudge Elements with Arrow keys The corresponding arrow keys are used to move the selected elements towards the up, down, left, or right direction by 1 pixel. @@ -1106,7 +1106,7 @@ The corresponding arrow keys are used to move the selected elements towards the Nudge commands are particularly useful for accurate placement of elements. -## Undo and Redo command +## How to Use Undo and Redo Commands The [Undo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Undo) and [Redo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Redo) commands provide powerful functionality for managing changes in your diagram: @@ -1145,7 +1145,7 @@ These commands enhance user experience by offering flexibility in diagram editin You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/UndoRedoCommands) -## How to bring the specific element into the viewport of the diagram +## How to Bring the Specific Element into the Viewport of the Diagram The [BringIntoView](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_BringIntoView_Syncfusion_Blazor_Diagram_DiagramRect_) command is a powerful feature that allows you to navigate and focus on a specific area of your diagram. It automatically adjusts the viewport to display a specified rectangular region, ensuring that the area of interest is visible to the user. @@ -1181,7 +1181,7 @@ protected override void OnInitialized() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/BringInToView) -## How to bring the specific element into the center of the viewport of the diagram +## How to Bring the Specific Element into the Center of the Viewport of the Diagram The [BringIntoCenter](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_BringIntoCenter_Syncfusion_Blazor_Diagram_DiagramRect_) command allows you to bring a specific rectangular region into the center of the diagram's viewport. This command is particularly useful for focusing on a particular area of interest within your diagram. @@ -1217,7 +1217,7 @@ protected override void OnInitialized() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/BringintoCenter) -## How to bring the entire diagram into the current viewport using FitToPage command +## How to Bring the Entire Diagram into the Current Viewport Using Fit-To-Page Command The FitToPage command is used to bring the entire diagram (including large diagrams) into view. You can customize the behavior of the FitToPage command by passing a [FitOptions](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FitOptions.html) object as a parameter. If no parameter is provided, the entire diagram is fit into the view using default settings. @@ -1382,7 +1382,7 @@ The [Region](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Dia ![Region](./images/Region.gif) -## CanZoomIn +## How to Control Zoom-In Behaviour with CanZoomIn The [CanZoomIn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FitOptions.html#Syncfusion_Blazor_Diagram_FitOptions_CanZoomIn) property controls whether the diagram can zoom in to fit smaller content into a larger viewport. When set to `true`, it allows zooming in, while `false` disables this feature. This is particularly useful for maintaining a minimum zoom level or preventing excessive magnification of small diagrams. @@ -1506,19 +1506,19 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![CanZoomIn to bring the small diagram into view](images/CanZoomIn.png) -## Command manager +## How to Use Command manager to Handle Keyboard Shortcuts Diagram provides support to map or bind command execution with desired combinations of key gestures. It includes a set of built-in commands for common operations. The [CommandManager](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.CommandManager.html) allows you to define custom commands in addition to the built-in ones. These custom commands are executed when their specified key gestures are recognized, enabling tailored interactions within your Blazor application. -### Command Execution +### How to Handle Command Execution The [Execute](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.CommandManager.html#Syncfusion_Blazor_Diagram_CommandManager_Execute) event callback method is triggered when a custom command is executed in the diagram. This allows you to define specific actions to be performed when the command is invoked. The [CanExecute](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.CommandManager.html#Syncfusion_Blazor_Diagram_CommandManager_CanExecute) event evaluates whether the command can be executed in its current state. This event enables you to implement conditional logic to determine if the command should be available or disabled based on the diagram's current context. -### How to create custom command +### How to Create Custom Command To define a custom command, specify the following properties: * [Gesture](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyboardCommand.html#Syncfusion_Blazor_Diagram_KeyboardCommand_Gesture): A combination of [Key](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyGesture.html#Syncfusion_Blazor_Diagram_KeyGesture_Key) and [Modifiers](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyGesture.html#Syncfusion_Blazor_Diagram_KeyGesture_Modifiers). This defines the keyboard shortcut for the command. @@ -1623,7 +1623,7 @@ The following code example shows how to define a custom command. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/CustomCommands/CustomCommands) -### Modify the existing command +### How to Modify the Existing Command When certain default commands are not required for your application, they can be selectively disabled. Additionally, if you need to alter the behavior of a specific command, you have the flexibility to completely customize its functionality. This approach allows you to tailor the command set to your specific needs, enhancing user experience and streamlining the interface. From 2e136c72fc5fb73dc9e7ec0170e5009eb101c627 Mon Sep 17 00:00:00 2001 From: Ramya Date: Fri, 20 Jun 2025 10:55:15 +0530 Subject: [PATCH 02/16] 958831: Update Ug for SEO Changes --- blazor/diagram/accessibility.md | 8 ++++---- blazor/diagram/annotations/appearance.md | 20 +++++++++---------- .../annotations/connector-annotation.md | 8 ++++---- blazor/diagram/annotations/interactions.md | 2 +- blazor/diagram/annotations/labels.md | 4 ++-- blazor/diagram/annotations/node-annotation.md | 8 ++++---- blazor/diagram/commands.md | 2 +- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/blazor/diagram/accessibility.md b/blazor/diagram/accessibility.md index 54cd8242a1..d8fae94424 100644 --- a/blazor/diagram/accessibility.md +++ b/blazor/diagram/accessibility.md @@ -37,7 +37,7 @@ The accessibility compliance for the Blazor diagram component is outlined below:
No - The component does not meet the requirement.
-## WAI-ARIA Attributes +## How to Use WAI-ARIA Attributes The Blazor Diagram component followed the WAI-ARIA patterns to meet the accessibility. The following ARIA attributes are used in the Blazor Diagram component: @@ -45,7 +45,7 @@ The Blazor Diagram component followed the WAI-ARIA patterns to meet the accessib | --- | --- | | `aria-label` | Provides an accessible name for the Diagram Objects. | -### Aria-label +### How to Use Aria-label Attributes The aria-label attribute provides the text label with some default description for below elements in diagram. @@ -100,7 +100,7 @@ The aria-label attribute provides the text label with some default description f -## Keyboard Navigation +## How to Navigate Blazor Diagrams using Keyboard Shortcuts The Blazor Diagram component followed the [keyboard interaction](https://www.w3.org/WAI/ARIA/apg/patterns/alert/#keyboardinteraction) guideline, making it easy for people who use assistive technologies (AT) and those who completely rely on keyboard navigation. The following keyboard shortcuts are supported by the Blazor Diagram component. @@ -157,7 +157,7 @@ The Blazor Diagram component followed the [keyboard interaction](https://www.w3. N> You can download a complete working sample for keyboard navigation from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Accessibility/KeyBoardNavigation) -## Ensuring Accessibility +## How to Ensure Accessibility The Blazor diagram component's accessibility levels are ensured through an [axe-core](https://www.nuget.org/packages/Deque.AxeCore.Playwright) with playwright tests. diff --git a/blazor/diagram/annotations/appearance.md b/blazor/diagram/annotations/appearance.md index 11dd01c8e6..0d0e516ef4 100644 --- a/blazor/diagram/annotations/appearance.md +++ b/blazor/diagram/annotations/appearance.md @@ -9,7 +9,7 @@ documentation: ug # Annotation Appearance in Blazor Diagram Component -## How to Update Size of an Annotation +## How to Customize Annotation Size The diagram allows you to set size for annotations by using the Height and Width properties. The default value of the [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Height) properties is 0, and it takes the node or connector size as default. The following code example shows how the annotation size is customized. @@ -48,7 +48,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Changing Annotation Size in Blazor Diagram](../images/blazor-diagram-annotation-size.png) -## How to Add Hyperlink to an Annotation +## How to Add Hyperlink to Annotation The diagram provides support to add a [Hyperlink](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Hyperlink) to the node's or connector's annotation. It can also be customized. @@ -94,7 +94,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Annotation with Hyperlink in Blazor Diagram](../images/blazor-diagram-annotation-with-hyperlink.png) -### How to Update Hyperlink with Content +### How to Display Text in Annotation Hyperlinks ```cshtml @using Syncfusion.Blazor.Diagram @@ -139,7 +139,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![HyperLink with Content in Blazor Diagram](../images/blazor-diagram-hyperlink-content.png) -## How to Change Text Wrapping +## How to Wrap Text Using Text Wrapping The [TextWrapping](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextWrapping) property of an annotation defines how the text should be wrapped. When text overflows node boundaries, you can control it by using the `TextWrapping`. So, it is wrapped into multiple lines. The following code explains how to wrap a text in a node. @@ -190,7 +190,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync | Wrap | Text-wrapping occurs, when the text overflows beyond the available node width. | ![Text Wrapping in Blazor Diagram](../images/blazor-diagram-text-wrapping.png) | | WrapWithOverflow (Default) | Text-wrapping occurs, when the text overflows beyond the available node width. However, the text may overflow beyond the node width in the case of a very long word. | ![Blazor Diagram Text Wrapping with Overflow](../images/blazor-diagram-text-wrap-with-overflow.png) | -### How to Update Text Overflow +### How to Control Text Overflow The [TextOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextOverflow) property specifies how the overflowed content that is not displayed should be signaled to the user. The TextOverflow property can have the following values. @@ -316,7 +316,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Label with Custom Annotation](../images/blazor-diagram-label-with-custom-annotation.png) -## How to Update the Annotation Style at Runtime +## How to Change Annotation Font Style Dynamically You can change the font style of the annotations with the font specific properties such as [FontSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontSize), [FontFamily](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontFamily), and [Color](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_Color). The following code explains how to update the font style of the annotation. @@ -382,7 +382,7 @@ You can change the font style of the annotations with the font specific properti ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/Appearance/AnnotationStyleatRunTime) -## How to Change the Editing Mode +## How to Enable and Use Editing Mode The diagram provides support to edit an annotation at runtime, either programmatically or interactively. By default, the annotation is in view mode. However, it can be brought into edit mode in two ways. @@ -393,7 +393,7 @@ The diagram provides support to edit an annotation at runtime, either programmat Double-clicking any annotation will enable the editing and the node enables first annotation editing. When the focus of editor is lost, the annotation for the node is updated. -## How to Set Read Only Constraints for Annotation +## How to Set Read Only Mode for Annotations The diagram allows you to create read-only annotations. You have to set the read-only property of annotation to enable or disable the [ReadOnly](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AnnotationConstraints.html#Syncfusion_Blazor_Diagram_AnnotationConstraints_ReadOnly) constraints. The following code explains how to enable read-only mode. @@ -522,7 +522,7 @@ N>* Type of the annotation’s property of the node or connector is ObservableCo
* All the same customization can be applicable for the annotations.
* Text Editing can be started only the first annotation of the annotation collection when you double click the node or connector. -## How to Update Annotation Constraints +## How to Control Annotation Constraints [AnnotationConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AnnotationConstraints.html) are used to enable or disable certain behaviors of the annotation. Constraints are provided as flagged enumerations, so that multiple behaviors can be enabled or disabled with bitwise operators. @@ -538,7 +538,7 @@ N> The default value is [InheritReadOnly](https://help.syncfusion.com/cr/blazor/ Refer to [Constraints](https://blazor.syncfusion.com/documentation/diagram/constraints) to learn about how to enable or disable the annotation constraints. -## Template Support for Annotation +## How to Use Templates in Annotations The Diagram provides support for templates in annotations. You can define HTML content at the tag level and specify the use of a template using the [UseTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_UseTemplate) property. If you need to define separate templates for each annotation, you can differentiate them by using the ID property. The following code illustrates how to define a template for a node's annotation. Similarly, you can define templates for connectors. diff --git a/blazor/diagram/annotations/connector-annotation.md b/blazor/diagram/annotations/connector-annotation.md index 30cc0ecc2e..5061d4f424 100644 --- a/blazor/diagram/annotations/connector-annotation.md +++ b/blazor/diagram/annotations/connector-annotation.md @@ -19,7 +19,7 @@ Annotations of a connector can be positioned using the following properties of A * VerticalAlignment * Margin -## How to Update the Offset for Annotations +## How to Set Offset Position for Annotations The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Offset) property of an annotation is used to align the annotations based on fractions. A value of 0 represents Top-Left corner, 1 represents Bottom-Right corner, and 0.5 represents half of Width/Height. @@ -78,7 +78,7 @@ The following image shows the relationship between the annotation position and o > * By default, offset value of the connector annotation is 0.5. > * Connector annotation's Id should not start with numbers or special characters and should not contain special characters such as underscores(_) or spaces. -## How to Change the Alignment of an Annotation +## How to Change Annotation Alignment The connector’s annotation can be aligned over its segment path using the [Alignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Alignment) property of the annotation. @@ -129,7 +129,7 @@ The following screenshot shows how the annotation of the connector aligned over N> By default, Alignment value of the connector annotation is `Center`. -## How to Change the Displacement of an Annotation +## How to Change Annotation Displacement The [Displacement](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Displacement) property is used to dislocate the annotation by the value given. By default, annotation will be in centered on the connector path. When you assign a value to the Displacement property, the annotation will be displaced from its position by displacement value. @@ -173,7 +173,7 @@ The [Displacement](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagr ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/AnnotationOfConnector/DisplacementOfAnnotation) -## How to Update the Segment Angle of an Annotation +## How to Update Annotation Segment Angle The [SegmentAngle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_SegmentAngle) property is used to rotate the annotation based on the connectors segment direction. By default, the annotation will be rotated in the connector path. When you assign a value to the SegmentPath property, the annotation will be rotated from its position based on the connector segment direction. diff --git a/blazor/diagram/annotations/interactions.md b/blazor/diagram/annotations/interactions.md index c4d7c08cd8..ecd65bc151 100644 --- a/blazor/diagram/annotations/interactions.md +++ b/blazor/diagram/annotations/interactions.md @@ -11,7 +11,7 @@ documentation: ug Diagram provides the support to the annotations rotation interactively. -## How to Control Annotation Rotation +## How to Rotate Annotations The [RotationReference](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeAnnotation.html#Syncfusion_Blazor_Diagram_ShapeAnnotation_RotationReference) property of an annotation allows you to control whether the text should rotate relative to its parent node or the Page. The following code examples illustrate how to configure RotationReference for an annotation. diff --git a/blazor/diagram/annotations/labels.md b/blazor/diagram/annotations/labels.md index d9d167f9e2..cf202c68ca 100644 --- a/blazor/diagram/annotations/labels.md +++ b/blazor/diagram/annotations/labels.md @@ -140,7 +140,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Annotation in Blazor Diagram](../images/blazor-diagram-add-annotation.png) -## How to Remove Annotations at Runtime +## How to Remove Annotation at Runtime A collection of annotations can be removed from a node by using the `RemoveAt` method. The following code explains how to remove an annotation from a node. @@ -202,7 +202,7 @@ Also, a collection of annotations can be removed from the node by using the `Rem N>* You can delete multiple annotations from a node to pass the collection of annotation objects as argument.
* The `Add`, `Remove`, and `RemoveAt` methods are applicable for connectors too. -## How to Update Annotation at Runtime +## How to Modify Annotation at Runtime You can get the annotation directly from the node’s annotations collection property and you can change any annotation properties at runtime. diff --git a/blazor/diagram/annotations/node-annotation.md b/blazor/diagram/annotations/node-annotation.md index c524d718af..a3e803ac7d 100644 --- a/blazor/diagram/annotations/node-annotation.md +++ b/blazor/diagram/annotations/node-annotation.md @@ -16,7 +16,7 @@ The diagram allows you to customize the position and appearance of the annotatio * VerticalAlignment * Margin -## How to Change the Offset of an Annotation +## How to Change Annotation Offset Position The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeAnnotation.html#Syncfusion_Blazor_Diagram_ShapeAnnotation_Offset) property of an annotation is used to align the annotations based on fractions. 0 represents top/left corner, 1 represents bottom/right corner, and 0.5 represents half of width/height. @@ -77,7 +77,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync > * Type of the offset property for a connector’s path annotation is double. > * Node annotation's Id should not start with numbers or special characters and should not contain special characters such as underscores(_) or spaces. -## How to Change the Alignment of an Annotation +## How to Change the Annotation Alignment The [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_HorizontalAlignment) property of an annotation is used to set how the annotation is horizontally aligned at the annotation position determined from the fraction values. The [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_VerticalAlignment) property is used to set how the annotation is vertically aligned at the annotation position. @@ -140,7 +140,7 @@ N>* The value of the `HorizontalAlignment` is [Center](https://help.syncfusion.c
* The value of the `VerticalAlignment` is [Center](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.VerticalAlignment.html#Syncfusion_Blazor_Diagram_VerticalAlignment_Center) by default.
* Alignment is positioned based on the offset value. -## How to Change the Margin of an Annotation +## How to Change Annotation Margin [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Margin) is an absolute value used to add some blank space to any one of its four sides. The annotations can be displaced with the margin property. The following code example explains how to align an annotation based on its Offset, HorizontalAlignment, VerticalAlignment, and Margin values. @@ -185,7 +185,7 @@ N>* The value of the `HorizontalAlignment` is [Center](https://help.syncfusion.c You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/AnnotationOfNode/MarginOfAnnotation) -## How to Align the Text +## How to Set Text Alignment The [TextAlign](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextAlign) property of an annotation allows you to set how the text should be aligned (Left, Right, Center, or Justify) inside the text block. The following code explains how to set TextAlign for an annotation. diff --git a/blazor/diagram/commands.md b/blazor/diagram/commands.md index c9d1faf315..a2b672f468 100644 --- a/blazor/diagram/commands.md +++ b/blazor/diagram/commands.md @@ -1106,7 +1106,7 @@ The corresponding arrow keys are used to move the selected elements towards the Nudge commands are particularly useful for accurate placement of elements. -## How to Use Undo and Redo Commands +## How to Enable Undo and Redo Functionality The [Undo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Undo) and [Redo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Redo) commands provide powerful functionality for managing changes in your diagram: From 0a64c009bed2eeb2fc35c70156191c91c101feaa Mon Sep 17 00:00:00 2001 From: Ramya Date: Fri, 20 Jun 2025 11:36:07 +0530 Subject: [PATCH 03/16] 958831: Update Ug for SEO Changes --- blazor/diagram/accessibility.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blazor/diagram/accessibility.md b/blazor/diagram/accessibility.md index d8fae94424..7f571858d9 100644 --- a/blazor/diagram/accessibility.md +++ b/blazor/diagram/accessibility.md @@ -37,7 +37,7 @@ The accessibility compliance for the Blazor diagram component is outlined below:
No - The component does not meet the requirement.
-## How to Use WAI-ARIA Attributes +## WAI-ARIA Attributes The Blazor Diagram component followed the WAI-ARIA patterns to meet the accessibility. The following ARIA attributes are used in the Blazor Diagram component: @@ -45,7 +45,7 @@ The Blazor Diagram component followed the WAI-ARIA patterns to meet the accessib | --- | --- | | `aria-label` | Provides an accessible name for the Diagram Objects. | -### How to Use Aria-label Attributes +### Aria-label The aria-label attribute provides the text label with some default description for below elements in diagram. From 3a35fc159803b6d045a8e8c756eb825641d0c537 Mon Sep 17 00:00:00 2001 From: Ramya Date: Fri, 20 Jun 2025 17:31:20 +0530 Subject: [PATCH 04/16] 958831: Update Ug for SEO Changes --- blazor/diagram/annotations/appearance.md | 2 +- blazor/diagram/annotations/events.md | 2 +- blazor/diagram/connectors/connectors.md | 26 +++++------ blazor/diagram/connectors/customization.md | 26 +++++------ blazor/diagram/connectors/events.md | 14 +++--- blazor/diagram/connectors/interactions.md | 18 ++++---- .../connectors/segments/bezier/bezier.md | 10 ++--- .../settings/controlpointinteraction.md | 8 ++-- .../bezier/settings/segmenteditorientation.md | 4 +- .../connectors/segments/multiplesegments.md | 2 +- .../diagram/connectors/segments/orthogonal.md | 8 ++-- .../diagram/connectors/segments/straight.md | 8 ++-- blazor/diagram/constraints.md | 26 +++++------ blazor/diagram/container.md | 18 ++++---- blazor/diagram/context-menu.md | 14 +++--- blazor/diagram/data-binding.md | 44 +++++++++---------- blazor/diagram/events.md | 24 +++++----- blazor/diagram/export.md | 18 ++++---- blazor/diagram/flip.md | 10 ++--- .../diagram/getting-started-with-maui-app.md | 18 ++++---- 20 files changed, 150 insertions(+), 150 deletions(-) diff --git a/blazor/diagram/annotations/appearance.md b/blazor/diagram/annotations/appearance.md index 0d0e516ef4..3e9dc3dffb 100644 --- a/blazor/diagram/annotations/appearance.md +++ b/blazor/diagram/annotations/appearance.md @@ -316,7 +316,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Label with Custom Annotation](../images/blazor-diagram-label-with-custom-annotation.png) -## How to Change Annotation Font Style Dynamically +## How to Change Annotation Font Style at Runtime You can change the font style of the annotations with the font specific properties such as [FontSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontSize), [FontFamily](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontFamily), and [Color](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_Color). The following code explains how to update the font style of the annotation. diff --git a/blazor/diagram/annotations/events.md b/blazor/diagram/annotations/events.md index adb6bc3347..726c93f7ee 100644 --- a/blazor/diagram/annotations/events.md +++ b/blazor/diagram/annotations/events.md @@ -65,7 +65,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ## See also -* [How to add or remove annotation constraints](../constraints/#annotation-constraints) +* [How to add or remove annotation constraints](../constraints#annotation-constraints) * [How to customize the annotation](./appearance) diff --git a/blazor/diagram/connectors/connectors.md b/blazor/diagram/connectors/connectors.md index 143634db13..e695d32b2c 100644 --- a/blazor/diagram/connectors/connectors.md +++ b/blazor/diagram/connectors/connectors.md @@ -1,17 +1,17 @@ --- layout: post -title: Actions of Connectors in Blazor Diagram Component | Syncfusion +title: Connectors in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about actions of connectors in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Connector in Blazor Diagram Component +# Connectors in Blazor Diagram Component Connectors are objects used to create link between two points, nodes or ports to represent the relationships between them. -## Create connector +## How to Create and Customize Connectors Connector can be created by defining the source and target points of the connector. The path to be drawn can be defined with a collection of segments. @@ -19,7 +19,7 @@ To create and customize the connectors easily in the Blazor Diagram component, r {% youtube "youtube:https://www.youtube.com/watch?v=EH4c8QVQoHo" %} -## How to add connectors through connectors collection +## How to Add Connectors Using the Connectors Collection The [SourcePoint](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_SourcePoint) and [TargetPoint](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_TargetPoint) properties of connector allow you to define the endpoints of a connector. @@ -61,7 +61,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync > * [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_ID) for each connector should be unique and so it is further used to find the connector at runtime and perform any customization. > * Connectors' Id should not start with numbers or special characters and should not contain special characters such as underscores(_) or spaces. -## How to add connectors at runtime +## How to Add Connectors at Runtime You can add a connector at runtime by adding connector to the connectors collection in the Diagram component. The following code explains how to add connectors at runtime. @@ -106,7 +106,7 @@ You can add a connector at runtime by adding connector to the connectors collect } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/ActionofConnectors/AddConnectorAtRuntime) -### How to clone the connector at runtime +### How to Clone a Connector at Runtime [Clone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_Clone) is a virtual method of the connector that is used to create a copy of a diagram object. After cloning, we need to set the ID for the cloned connectors. The following code demonstrates how to clone the connector during runtime. ```cshtml @@ -151,7 +151,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/CloneConnector) ![Clonning Node](../images/CloneConnector.gif) -## How to add connector with annotations at runtime +## How to Add a Connector with Annotations at Runtime You can add a connector with annotation at runtime in the diagram component by using the [AddDiagramElementsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_AddDiagramElementsAsync_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) method. @@ -206,7 +206,7 @@ The following code explains how to add a connector with annotation at runtime b } ``` -## How to add connector in Palette +## How to Add a Connector to the Symbol Palette Connectors can be predefined and added to the symbol palette. You can drop those connectors into the diagram when required. @@ -288,13 +288,13 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector from Palette in Blazor Diagram](../images/blazor-diagram-connector-from-palette.gif) -## How to draw connectors using drawing object +## How to Draw Connectors Using the Drawing Object Connectors can be interactively drawn by clicking and dragging on the diagram surface by using the [DrawingObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DrawingObject). ![Drawing Connector in Blazor Diagram](../images/blazor-diagram-draw-connector.gif) -## How to remove connectors at runtime +## How to Remove Connectors at Runtime A connector can be removed from the diagram at runtime by using the `Remove` method. @@ -352,7 +352,7 @@ public void RemoveConnector() } ``` -## How to update connectors at runtime +## How to Update Connector Properties at Runtime You can change any connector's properties at runtime. @@ -406,7 +406,7 @@ N> BeginUpdate and EndUpdateAsync methods allow you to temporarily stop the cont Connectors are used to create a link between two points, nodes or ports to represent the relationships between them. -### Connections with nodes +### How to Connect Nodes Using Source and Target ID The [SourceID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_SourceID) and [TargetID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_TargetID) properties allow to define the nodes to be connected. @@ -484,7 +484,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync * When you remove both InConnect and OutConnect [NodeConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeConstraints.html) from [Default](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeConstraints.html#Syncfusion_Blazor_Diagram_NodeConstraints_Default), the node restricts connectors from establishing a connection to it. -### Connections with ports +### How to Connect Nodes Using Specific Ports The [SourcePortID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_SourcePortID) and [TargetPortID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_TargetPortID) properties allow to create connections between some specific points of source/target nodes. diff --git a/blazor/diagram/connectors/customization.md b/blazor/diagram/connectors/customization.md index 3fa0f8a2ea..b686b5db5a 100644 --- a/blazor/diagram/connectors/customization.md +++ b/blazor/diagram/connectors/customization.md @@ -9,7 +9,7 @@ documentation: ug # Customization in Blazor Diagram Component -## How to add decorator for connector +## How to Add and Customize Connector Decorators Diagram allows you to customize the connector appearances. The following topics shows how to customize several properties of the connectors. @@ -72,7 +72,7 @@ To learn more about customization of connectors, refer to the below video link. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/Decorator) -### How to customize the decorator appearance +### How to Customize Connector Decorator Appearance * The source decorator’s [StrokeColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_StrokeColor), [StrokeWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_StrokeWidth), and [StrokeDashArray](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_StrokeDashArray) properties are used to customize the color, width, and appearance of the decorator. @@ -143,7 +143,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Connector with Decorator](../images/blazor-diagram-decorator.png) -## How to set padding for connector +## How to Set Padding for Connector Padding is used to leave the space between the Connector's end point and the object to where it is connected. @@ -219,7 +219,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Connector with Padding](../images/blazor-diagram-connector-padding.png) -## How to enable bridging +## How to Enable Bridging Line bridging creates a bridge for lines to smartly cross over other lines, at points of intersection. By default, [BridgeDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_BridgeDirection) is set to [Top](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Direction.html#Syncfusion_Blazor_Diagram_Direction_Top). Depending upon the direction given bridging direction appears. Bridging can be enabled/disabled either with the [Connector.Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorConstraints.html) or [Diagram.Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramConstraints.html). @@ -318,7 +318,7 @@ Limitation: [BezierSegment](https://help.syncfusion.com/cr/blazor/Syncfusion.Bla ![Blazor Diagram Connector with Line Bridge](../images/blazor-diagram-connector-with-bridging.png) -## How to update corner radius for connector +## How to Set Corner Radius for Connectors Corner radius allows you to create connectors with rounded corners. The radius of the rounded corner is set with the [CornerRadius](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_CornerRadius) property. @@ -375,7 +375,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Connector with Corner Radius](../images/blazor-diagram-connector-with-corner-radious.png) -## How to customize the connector appearance +## How to Customize Connector Appearance * The connector’s [StrokeWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_StrokeWidth), [StrokeColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_StrokeColor), [StrokeDashArray](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_StrokeDashArray), and [Opacity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_Opacity) properties are used to customize the appearance of the connector segments. @@ -383,7 +383,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync * Default values for all the [Connectors](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html) can be set by using the [ConnectorCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ConnectorCreating) event callback method. For example, if all connectors have the same type or property, then such properties can be moved into ConnectorCreating. -### How to customize the segment appearance +### How to Customize Connector Segment Appearance The following code example illustrates how to customize the segment appearance. @@ -436,7 +436,7 @@ The following code example illustrates how to customize the segment appearance. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/SegmentAppearance) -## How to enable/disable the connector behavior +## How to Enable or Disable Connector Behavior * The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorConstraints.html) property of a connector allows you to enable/disable certain features of connectors. @@ -494,7 +494,7 @@ The following code illustrates how to disable selection. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/Constraints) -## How to add additional information for connector +## How to Add Additional Information for Connector * The [AdditionalInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_AdditionalInfo) property of a connector allows you to maintain additional information for the connectors. @@ -550,7 +550,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/CustomProperty) -## How to set ZIndex property for connector +## How to Set Connector Z-Index * The connector's [ZIndex](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_ZIndex) property specifies the stack order of the connector. A connector with a greater stack order is always in front of a connector with a lower stack order. By default, the value is -1. @@ -590,7 +590,7 @@ The following code illustrates how to render connector based on the stack order. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/ZIndexProperty) -## How to set HitPadding for connector +## How to Set HitPadding for Connector * The [HitPadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_HitPadding) refers to the space around the connector's edges. To make it easy to select, selecting when the mouse comes near its vicinity area should be possible. The HitPadding property allows you to customize the vicinity area while selecting. The default value is 10px. Within the hit padding region, the connector can be selected and deselected. @@ -632,7 +632,7 @@ The following code illustrates how to set the HitPadding for the connector. } ``` -## How to set SourcePadding and TargetPadding for connector +## How to Set SourcePadding and TargetPadding for Connectors * The [SourcePadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_SourcePadding) property of a connector defines space between the source point and the source node of the connector. @@ -685,7 +685,7 @@ The following code example illustrates how to leave space between the connection ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/SourcePaddingAndTargetPadding) -## How to set ConnectionPadding for connector +## How to Set ConnectionPadding for Connector * The [ConnectionPadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_ConnectionPadding) property of a connector defines the connection padding value of the connector. diff --git a/blazor/diagram/connectors/events.md b/blazor/diagram/connectors/events.md index 29d51b53bb..61686ebc53 100644 --- a/blazor/diagram/connectors/events.md +++ b/blazor/diagram/connectors/events.md @@ -9,7 +9,7 @@ documentation: ug # Events in Blazor Diagram Component -## Selection change event +## How to Handle Selection Change Event * While selecting the diagram elements, the following events can be used to do the customization. * When selecting/unselecting the diagram elements, the following events will be triggered to do customization on those events. @@ -85,7 +85,7 @@ The following code example explains how to get the selection change event in the ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Events/SelectionChangeEvent) -## Position change event +## How to Handle Position Change Event * While dragging the diagram elements, the following events can be used to do the customization. @@ -158,7 +158,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Events/PositionChangeEvent) -## Connection change event +## How to Handle Connection Change Event * While changing the connection of the connector, the following events can be used to do the customization. @@ -240,7 +240,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Events/ConnectionChangeEvent) -## Source point change event +## How to Handle Source Point Change Event * While changing the source point of the connector, the following events can be used to do the customization. |Event Name|Arguments|Description| @@ -298,7 +298,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Events/SourcePointChanged) -## Target point change event +## How to Handle Target Point Change Event * While changing the target point of the connector, the following events can be used to do the customization. |Event Name|Arguments|Description| @@ -356,7 +356,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Events/TargetPointChanged) -## ConnectorCreating event +## How to Handle Connector Creating Event * The [ConnectorCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ConnectorCreating) event helps to define default properties of the connector. The connector creation is triggered when the diagram is initialized. In the Connector creating event, you can customize the connector properties. @@ -406,7 +406,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Events/ConnectorCreating) -## Segment collection change event +## How to Handle Segment Collection Change Event * The [SegmentCollectionChange](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SegmentCollectionChange) event triggers when the connector’s segment collection is updated. To explore about arguments, refer to the [SegmentCollectionChangeEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SegmentCollectionChangeEventArgs.html). diff --git a/blazor/diagram/connectors/interactions.md b/blazor/diagram/connectors/interactions.md index 48d6abf760..ee80e41509 100644 --- a/blazor/diagram/connectors/interactions.md +++ b/blazor/diagram/connectors/interactions.md @@ -11,7 +11,7 @@ documentation: ug Connectors can be selected, dragged, and routed over the diagram page. -## How to select and unselect the connector +## How to Select and Deselect Connectors A connector can be selected at runtime by using the [Select](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Select_System_Collections_ObjectModel_ObservableCollection_Syncfusion_Blazor_Diagram_IDiagramObject__System_Nullable_System_Boolean__) method and clear the selection in the diagram using the [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ClearSelection). The following code explains how to select and clear selection in the diagram. @@ -88,7 +88,7 @@ And also the selection can be enabled during the interaction. * An element can be selected by clicking that element. * When you select the elements in the diagram, the [SelectionChanging](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectionChanging) and [SelectionChanged](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectionChanged) events get triggered and allow customization in these events. -## How to drag a connector +## How to Drag a Connector A connector can be dragged at runtime by using the [Drag](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Drag_Syncfusion_Blazor_Diagram_IDiagramObject_System_Double_System_Double_) method. The following code explains how to drag the connector by using the drag method. @@ -159,7 +159,7 @@ And also drag the connector during the interaction. ![Dragging Connector in Blazor Diagram](../images/blazor-diagram-drag-connector.gif) -## End point dragging +## How to Drag Connector Endpoints The connector can be selected by clicking it. When the connector is selected, circles will be added on the starting and ending of the connector that is represented by Thumbs. Clicking and dragging those handles helps you to adjust the source and target points. @@ -217,7 +217,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Dragging Connector End Point in Blazor Diagram](../images/blazor-diagram-drag-connector-end-point.gif) -## How to route the connectors +## How to Enable Connector Routing The connectors may overlap with adjacent nodes when a node is positioned so that it encounters the connector. This overlap can reduce the clarity of the connector's path. To prevent this, the Routing process can be utilized. @@ -356,7 +356,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync **Note:** Default value of [RoutingType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LineRoutingSettings.html#Syncfusion_Blazor_Diagram_LineRoutingSettings_RoutingType) is [Classic](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.RoutingTypes.html#Syncfusion_Blazor_Diagram_RoutingTypes_Classic). -### How to enable or disable routing for nodes +### How to Enable or Disable Node Routing By default, connectors treat all nodes as obstacles, causing connections to navigate around the node boundaries. However, you can disable this behavior and allow connectors to ignore the node as an obstacle by removing the [RoutingObstacle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeConstraints.html#Syncfusion_Blazor_Diagram_NodeConstraints_RoutingObstacle) from the node's [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Constraints) property. @@ -417,7 +417,7 @@ By default, connectors treat all nodes as obstacles, causing connections to navi You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Interaction/NodeRoutingObstable). -### How to enable or disable routing for connectors +### How to Enable or Disable Connector Routing By default, each connector's routing process is inherited based on the value of the diagram's [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Constraints) property. If you wish to independently control the routing of a specific connector regardless of the diagram settings, you can achieve this by removing the [InheritRouting](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorConstraints.html#Syncfusion_Blazor_Diagram_ConnectorConstraints_InheritRouting) enum value from the connector's [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_Constraints) property. Then, add the [Routing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorConstraints.html#Syncfusion_Blazor_Diagram_ConnectorConstraints_Routing) enum value to enable routing or remove it to disable routing altogether. @@ -491,7 +491,7 @@ By default, each connector's routing process is inherited based on the value of You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Interaction/RoutingConstraints). -### How to define distance between node and connector +### How to Define Obstacle Padding Between Nodes and Connectors The [ObstaclePadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LineRoutingSettings.html#Syncfusion_Blazor_Diagram_LineRoutingSettings_ObstaclePadding) defines the minimum distance between the connectors and obstacles when the advanced routing is enabled. This ensures connectors are routed with clear spacing around obstacles, improving diagram readability. @@ -547,7 +547,7 @@ The following table shows the various obstacle padding. **Note:** [ObstaclePadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LineRoutingSettings.html#Syncfusion_Blazor_Diagram_LineRoutingSettings_ObstaclePadding) property is only applicable when the [RoutingType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LineRoutingSettings.html#Syncfusion_Blazor_Diagram_LineRoutingSettings_RoutingType) property is set to [RoutingTypes.Advanced]. Default value of [ObstaclePadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LineRoutingSettings.html#Syncfusion_Blazor_Diagram_LineRoutingSettings_ObstaclePadding) is 12. -## How to Avoid line overlapping +## How to Avoid Line Overlapping The diagram provides flexibility to prevent connectors from overlapping, enhance clarity and readability. This feature intelligently adjusts connector paths to minimise stacking orthogonal connectors on top of each other, reducing visual clutter and enhancing diagram structure. It is especially useful in complex diagrams with multiple orthogonal connectors, where overlapping lines can make interpretation difficult. This feature can be activated by adding the [AvoidLineOverlapping](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramConstraints.html#Syncfusion_Blazor_Diagram_DiagramConstraints_AvoidLineOverlapping) enum value to the [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Constraints) property of the diagram. @@ -939,7 +939,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync **Note:** The overlap will get resolved only for the connectors visible in the viewport. The rest will be resolved as they are scrolled into view. The same applies to the overview, where connectors outside the viewport will appear overlapped and will resolve when focused within the viewport. -## How to flip the connector +## How to Flip a Connector The [Flip](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_Flip) is performed to give the mirrored image of the original element. diff --git a/blazor/diagram/connectors/segments/bezier/bezier.md b/blazor/diagram/connectors/segments/bezier/bezier.md index 88f3cf21be..d43de94fc4 100644 --- a/blazor/diagram/connectors/segments/bezier/bezier.md +++ b/blazor/diagram/connectors/segments/bezier/bezier.md @@ -1,6 +1,6 @@ --- layout: post -title: Bezier Segment in Blazor Diagram Component | Syncfusion +title: Bezier Segments in Blazor Diagram Component | Syncfusion description: Check out and learn about Bezier Segments in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component @@ -9,7 +9,7 @@ documentation: ug # Bezier Segments in Blazor Diagram Component -## How to create bezier segment +## How to Create a Bezier Segment Bezier segments are used to create curve segments, and the curves are configurable either with control points or vectors. To create a bezier segment, set the segment Type as [Bezier](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Bezier) and specify the type for the connector. The following code example illustrates how to create a default bezier segment. @@ -98,13 +98,13 @@ Connector Connector1 = new Connector() You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Segments) -### Bezier Segment Editing +### How to Edit Bezier Segments * A segment control point of the Bezier connector is used to change the bezier vectors and points of the connector. ![Editing Bezier Segment in Blazor Diagram](../../../images/blazor-diagram-edit-bezier-segment.gif) -## Avoid overlapping with bezier +## How to Automatically Avoid Node Overlap with Bezier Connectors By default, when there are no segments defined for a bezier connector, the bezier segments will be created automatically and routed in such a way that avoids overlapping with the source and target nodes. @@ -244,7 +244,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Avoid overlapping with bezier](../../../images/bezierOverlap.png) -## How to customize Bezier Segment Thumb Shape +## How to Customize Bezier Segment Thumb Shape The Bezier connector can have multiple segments between the source and target points. By default, these segments are rendered as circles, but this can be customized either globally or for individual connectors using the [SegmentThumbSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SegmentThumbSettings.html) class. diff --git a/blazor/diagram/connectors/segments/bezier/settings/controlpointinteraction.md b/blazor/diagram/connectors/segments/bezier/settings/controlpointinteraction.md index bda3fe3996..b9a3a998ab 100644 --- a/blazor/diagram/connectors/segments/bezier/settings/controlpointinteraction.md +++ b/blazor/diagram/connectors/segments/bezier/settings/controlpointinteraction.md @@ -1,15 +1,15 @@ --- layout: post -title: Segments interaction in Blazor Diagram Component | Syncfusion +title: Bezier Segments Interaction in Blazor Diagram | Syncfusion description: Checkout and learn here all about Bezier Segments in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Bezier Segments interaction in Blazor Diagram Component +# Bezier Segments Interaction in Blazor Diagram -## How to interact with the bezier segments efficiently +## How to Interact with the Bezier Segments Efficiently When interacting with multiple bezier segments, maintain their control points at the same distance and angle by using the [BezierConnectorSettings.Smoothness](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BezierConnectorSettings.html#Syncfusion_Blazor_Diagram_BezierConnectorSettings_Smoothness) property of the Connector class. @@ -21,7 +21,7 @@ When interacting with multiple bezier segments, maintain their control points at | None | Segment’s control points interact independently from each other. | ![SymmetricNone](../../../../images/SymmetricNone.gif) -## How to show or hide the bezier segment's control points +## How to Show or Hide Bezier Segment's Control Points By using the [BezierConnectorSettings.ControlPointsVisibility](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BezierConnectorSettings.html#Syncfusion_Blazor_Diagram_BezierConnectorSettings_ControlPointsVisibility) property of the Connector class, you can enable or disable the visibility of the bezier segment's control points. diff --git a/blazor/diagram/connectors/segments/bezier/settings/segmenteditorientation.md b/blazor/diagram/connectors/segments/bezier/settings/segmenteditorientation.md index 271fd484bd..92c2ba910c 100644 --- a/blazor/diagram/connectors/segments/bezier/settings/segmenteditorientation.md +++ b/blazor/diagram/connectors/segments/bezier/settings/segmenteditorientation.md @@ -1,6 +1,6 @@ --- layout: post -title: Segments interaction in Blazor Diagram Component | Syncfusion +title: Bezier Segments in Blazor Diagram Component | Syncfusion description: Check out and learn about Bezier Segments in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component @@ -9,7 +9,7 @@ documentation: ug # Bezier Segments in Blazor Diagram Component -## How to edit bezier segments based on bezier connector settings +## How to Edit Bezier Segments Using Bezier Connector Settings The intermediate point of two adjacent bezier segments can be edited interactively using the [BezierConnectorSettings.SegmentEditOrientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BezierConnectorSettings.html#Syncfusion_Blazor_Diagram_BezierConnectorSettings_SegmentEditOrientation) property of the Connector class. diff --git a/blazor/diagram/connectors/segments/multiplesegments.md b/blazor/diagram/connectors/segments/multiplesegments.md index df666a6574..3d0ca1224a 100644 --- a/blazor/diagram/connectors/segments/multiplesegments.md +++ b/blazor/diagram/connectors/segments/multiplesegments.md @@ -9,7 +9,7 @@ documentation: ug # Multiple Segments in Blazor Diagram Component -## How to create multiple segments +## How to Create Connectors with Multiple Segments Multiple segments can be defined sequentially. To create a connector with multiple segments, define and add the segments to the [connector.Segments](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegment.html) collection. The following code example illustrates how to create a connector with multiple segments. diff --git a/blazor/diagram/connectors/segments/orthogonal.md b/blazor/diagram/connectors/segments/orthogonal.md index aac6911719..620324d8ca 100644 --- a/blazor/diagram/connectors/segments/orthogonal.md +++ b/blazor/diagram/connectors/segments/orthogonal.md @@ -1,6 +1,6 @@ --- layout: post -title: Orthogonal Segment in Blazor Diagram Component | Syncfusion +title: Orthogonal Segments in Blazor Diagram Component | Syncfusion description: Check out and learn about Orthogonal Segments in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component @@ -9,7 +9,7 @@ documentation: ug # Orthogonal Segments in Blazor Diagram Component -## How to create orthogonal segment +## How to Create Orthogonal Segments Orthogonal segments are used to create segments that are perpendicular to each other. Set the segment Type as [Orthogonal](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Orthogonal) to create a default orthogonal segment and need to specify Type. The following code example illustrates how to create a default orthogonal segment. @@ -118,7 +118,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> You need to mention the segment type as you mentioned in the connector type. There should be no contradiction between connector type and segment type. -### Orthogonal segment editing +### How to Edit Orthogonal Segments * Orthogonal thumbs allow you to adjust the length of adjacent segments by clicking and dragging them. * When necessary, some segments are added or removed automatically, when dragging the segment. This is to maintain proper routing of orthogonality between segments. @@ -155,7 +155,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Editing Orthogonal Segment in Blazor Diagram](../../images/blazor-diagram-edit-orthogonal-segment.gif) -## How to customize Orthogonal Segment Thumb Shape +## How to Customize Orthogonal Segment Thumb Shape The Orthogonal connector can have multiple segments between the source and target points. By default, these segments are rendered as circles, but this can be customized either globally or for individual connectors using the [SegmentThumbSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SegmentThumbSettings.html) class. diff --git a/blazor/diagram/connectors/segments/straight.md b/blazor/diagram/connectors/segments/straight.md index a39ed9657b..285e4fdbdf 100644 --- a/blazor/diagram/connectors/segments/straight.md +++ b/blazor/diagram/connectors/segments/straight.md @@ -1,6 +1,6 @@ --- layout: post -title: Straight Segment in Blazor Diagram Component | Syncfusion +title: Straight Segments in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Straight Segments in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component @@ -9,7 +9,7 @@ documentation: ug # Straight Segments in Blazor Diagram Component -## How to create straight segment +## How to Create Straight Segments To create a straight line, specify the [Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_Type) of the segment as [Straight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Straight) and add a straight segment to the [Segments](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_Segments) collection and need to specify Type for the connector. The following code example illustrates how to create a default straight segment. @@ -55,7 +55,7 @@ To create a straight line, specify the [Type](https://help.syncfusion.com/cr/bla ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Segments/Straight) -### Straight segment editing +### Hoe to Edit Straight Segments * The end point of each straight segment is represented by a thumb that enables editing the segment. * Any number of new segments can be inserted into a straight line by clicking when Shift and Ctrl keys are pressed (Ctrl+Shift+Click). @@ -100,7 +100,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Editing Straight Segment in Blazor Diagram](../../images/blazor-diagram-edit-straight-segment.gif) -## How to customize Straight Segment Thumb Shape +## How to Customize Straight Segment Thumb Shape The Straight connector can have multiple segments between the source and target points. By default, these segments are rendered as circles, but this can be customized either globally or for individual connectors using the [SegmentThumbSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SegmentThumbSettings.html) class. diff --git a/blazor/diagram/constraints.md b/blazor/diagram/constraints.md index 0c4becdbaf..2887c3de3c 100644 --- a/blazor/diagram/constraints.md +++ b/blazor/diagram/constraints.md @@ -13,7 +13,7 @@ Constraints are used to enable or disable certain behaviors of the diagram, node To know more about Bitwise operators, refer to the [Bitwise Operations](constraints#bitwise-operations). -## Diagram constraints +## How to Enable or Disable Diagram Constraints [DiagramConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramConstraints.html#Syncfusion_Blazor_Diagram_DiagramConstraints) allow you to enable or disable the following behaviors. @@ -98,7 +98,7 @@ N> By default, the following constraints are enabled in the diagram,
* None
* Tooltip -## Node constraints +## How to Enable or Disable Node Constraints The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Constraints) property of the Node allows you to enable or disable the following behaviors. @@ -213,7 +213,7 @@ N>By default, the following constraints are enabled for the node,
* Inherit
* Default -## Connector constraints +## How to Enable or Disable Connector Constraints The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_Constraints) property of the Connector allows you to enable or disable the following behaviors of connectors. @@ -315,7 +315,7 @@ N>By default, the following constraints are enabled for the connector,
* ReadOnly
* Default -## Port constraints +## How to Enable or Disable Port Constraints The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_Constraints) property of the Port allows you to enable or disable the following behaviors of port. @@ -392,7 +392,7 @@ N> By default, the following constraints are enabled for the port,
* Draw
* Default -## Annotation constraints +## How to Enable or Disable Annotation Constraints The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Constraints) property of the Annotations allows you to enable or disable read-only mode for the annotations by using the annotation constraints. @@ -453,7 +453,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync For more details about annotation constraints, refer to the [AnnotationConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AnnotationConstraints.html). -## Selector constraints +## How to Enable or Disable Selector Constraints Selector visually represents the selected elements with certain editable thumbs. The visibility of the thumbs can be controlled with selector constraints. The part of selector is categorized as follows: @@ -593,7 +593,7 @@ N> By default, the following constraints are enabled for the selected items,
* All
* Tooltip -## Snap constraints +## How to Enable or Disable Snap Constraints The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SnapSettings.html#Syncfusion_Blazor_Diagram_SnapSettings_Constraints) property of the SnapConstraints control the visibility of gridlines and enable or disable snapping. Snap constraints allow to set the following behaviors. @@ -664,7 +664,7 @@ N> By default, the following constraints are enabled for the snap functionality
* SnapToObject
* All -## Boundary constraints +## How to Use Boundary Constraints Boundary constraints defines a boundary for the diagram inside that the interaction should be done. Boundary constraints allow to set the following behaviors. @@ -717,7 +717,7 @@ For more information about selector constraints, refer to the [BoundaryConstrain N> By default, the following boundary constraints are enabled for the snap functionality in the diagram,
* Diagram -## Inherit behaviors +## How to Inherit Behaviors from Diagram Some of the behaviors can be defined through both the specific object (node or connector) and diagram. When the behaviors are contradictorily defined through both, the actual behavior is set through inherit options. @@ -762,11 +762,11 @@ The following code example shows how to inherit the line bridging behavior from ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Constraints/InheritBehaviors) -## Bitwise operations +## How to Use Bitwise Operations Bitwise operations are used to manipulate the flagged enumerations `enum`. In this section, Bitwise operations are shown by using the node constraints. The same is applicable when working with node constraints, connector constraints, or port constraints. -### Add operation +### How to Add Constraints Using Bitwise OR Operator You can add or enable multiple values at a time by using the Bitwise `|` (OR) operator. @@ -784,7 +784,7 @@ The following code shows how to add bridging constraints into the default diagra } ``` -### Remove operation +### How to Remove Constraints Using Bitwise AND NOT Operator You can remove or disable values by using the Bitwise ‘&~’ (XOR) operator. @@ -803,7 +803,7 @@ The following code shows to remove zoom and pan constraints from the default con } ``` -### Check operation +### How to Check Constraint Values Using Bitwise AND You can check any value by using the Bitwise ‘&’ (AND) operator. diff --git a/blazor/diagram/container.md b/blazor/diagram/container.md index fae987c923..af25f605a5 100644 --- a/blazor/diagram/container.md +++ b/blazor/diagram/container.md @@ -11,10 +11,10 @@ documentation: ug Containers provide a powerful way to organize and manage collections of diagram elements. They act as logical groupings of shapes enclosed by a customizable border, allowing for intuitive drag-and-drop operations during runtime. Changes to the container, such as position, size, or style, do not affect its children. This enhances diagram clarity by maintaining organization while allowing individual elements to be edited separately. -## Create a Container +## How to Create a Container A container can be created and added to the diagram, either programmatically or interactively. -### Add a Container +### How to Add a Container To create a container, you have to define the [Container](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Container.html) object and add it to the [Nodes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Nodes) collection of the diagram. The following code illustrates how to create a Container Node. @@ -47,7 +47,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** Container's Id should not start with numbers or special characters and should not contain special characters such as underscore(_) or space. -### Adding Children to a Container +### How to Add Elements to a Container To add child elements to a container, define the child nodes and assign their IDs to the container’s [Children](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeGroup.html#Syncfusion_Blazor_Diagram_NodeGroup_Children) property. When child nodes are added to a container, they become part of its structure while remaining individually editable. The following code illustrates how to create a container with children. @@ -104,7 +104,7 @@ To add child elements to a container, define the child nodes and assign their ID You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Container/ContainerSample). -### Container Header +### How to Customize Container Header Containers can include descriptive text to identify their purpose or contents through the [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Container.html#Syncfusion_Blazor_Diagram_Container_Header) property. This feature enhances diagram readability by providing clear labels for grouped elements. The header's visual presentation is fully customizable using the [Style](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContainerHeader.html#Syncfusion_Blazor_Diagram_ContainerHeader_Style) property. @@ -184,7 +184,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >Note: You can edit the header by double-clicking the region of the container’s header, or by pressing F2. -### Container from Symbol palette +### How to Add Containers to the Symbol Palette Container nodes can be predefined and added to the symbol palette, allowing for quick and consistent reuse throughout your diagrams. When needed, you can simply drag these predefined containers from the palette and drop them directly into your diagram. @@ -276,7 +276,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Container Palette](images/ContainerImages/ContainerPalette.png) -## Interactively add or remove diagram elements into Container +## How to Interactively Add or Remove Elements from a Container Diagram elements can be added or removed from a container at runtime. When an element is dropped onto the container's edges, the container automatically adjusts its size to accommodate the new element. @@ -286,12 +286,12 @@ Diagram elements can be added or removed from a container at runtime. When an el Diagram provides support to select, drag or resize the container interactively. -### Select +### How to Select a Container Container can be selected by clicking (tapping) on it. Also, it can be selected at runtime by using the [Select](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Select_System_Collections_ObjectModel_ObservableCollection_Syncfusion_Blazor_Diagram_IDiagramObject__System_Nullable_System_Boolean__) method and clear the selection in the diagram by using the [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ClearSelection) ![Blazor Diagram Container Selection](images/ContainerImages/ContainerSelection.png) -### Drag +### How to Drag a Container * A container can be moved by clicking and dragging it within the diagram. @@ -299,7 +299,7 @@ Container can be selected by clicking (tapping) on it. Also, it can be selected ![Drag Container](images/ContainerImages/ContainerDrag.gif) -### Resize +### How to Resize a Container * A selected container is surrounded by eight resize thumbs. Dragging these thumbs adjusts the container’s size. * When dragging one corner, the opposite corner remains fixed. diff --git a/blazor/diagram/context-menu.md b/blazor/diagram/context-menu.md index fdac62f68b..840f50024e 100644 --- a/blazor/diagram/context-menu.md +++ b/blazor/diagram/context-menu.md @@ -14,7 +14,7 @@ documentation: ug In Graphical User Interface (GUI), a context menu is a certain type of menu that appears when you perform a right-click operation. You can create a nested level of context menu items. Diagram provides some in-built context menu items and allows you to define custom menu items through the [ContextMenuSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html) property. -## How to enable default context menu +## How to Enable Default Context Menu The [Show](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_Show) property helps you to enable or disable the context menu. Diagram provides default context menu items such as copy, cut, paste, select all, undo, redo and group options. The following code shows how to enable the default context menu items. @@ -40,7 +40,7 @@ The following code shows how to disable the default context menu items. ``` -## How to add custom items to the context menu +## How to Add Custom Items to the Context Menu Custom context menu provides an option to add new custom items to the context menu. @@ -60,7 +60,7 @@ Custom context menu provides an option to add new custom items to the context me * You can add submenu items using the [Items](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuItem.html#Syncfusion_Blazor_Diagram_ContextMenuItem_Items) property. -### Custom context menu along with default context menu +### How to Display Custom and Default Context Menu Items Together The following code example shows how to add custom context menu items along with the default context menu. Set the [ShowCustomMenuOnly](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_ShowCustomMenuOnly) property to false to render both the custom context menu and default context menu. @@ -151,7 +151,7 @@ The following code example shows how to add custom context menu items along with ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ContextMenu/CustomContextMenu) -### How to show custom context menu alone +### How to Show Custom Context Menu Alone Set the [ShowCustomMenuOnly](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_ShowCustomMenuOnly) property to true to only display the custom context menu items. The following code example shows how to show custom context menu items alone. @@ -167,7 +167,7 @@ The following code example shows how to show custom context menu items alone. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ContextMenu/CustomContextMenuOnly) ![Custom Context Menu](images/ContextMenuCustomMenuOnly.gif) -## How to customize context menu items using template +## How to Customize Context Menu Items Using Templates Diagram provides template support for the context menu. The context menu items can be customized using the [ContextMenuTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_ContextMenuTemplate) at the tag level. The following code explains how to define a template for context menu items. @@ -277,7 +277,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync The Diagram control provides event support for the context menu that triggers when rendering the context menu and when clicking the items of the context menu. -### ContextMenuOpening +### How to Handle Context Menu Opening Event The Diagram control triggers the event [ContextMenuOpening](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_ContextMenuOpening) when performing a right click on the diagram or the diagram elements such as Node, Connector and Groups. To explore the arguments, refer to the [DiagramMenuOpeningEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramMenuOpeningEventArgs.html). @@ -299,7 +299,7 @@ The Diagram control triggers the event [ContextMenuOpening](https://help.syncfus ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ContextMenu/ContextMenuEvent/ContextMenuOpenningEvent) -### ContextMenuItemClicked +### How to Handle Context Menu Item Clicked Event The Diagram control triggers the event [ContextMenuItemClicked](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_ContextMenuItemClicked) when the context menu item is clicked. To explore the arguments, refer to the [DiagramMenuClickEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramMenuClickEventArgs.html). diff --git a/blazor/diagram/data-binding.md b/blazor/diagram/data-binding.md index 4e23f82378..f7717ebc12 100644 --- a/blazor/diagram/data-binding.md +++ b/blazor/diagram/data-binding.md @@ -28,7 +28,7 @@ documentation: ug 1. Local data 2. Remote data -## How to specify parent child relationship in Datasource +## How to Define Parent-Child Relationships in DataSource The [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DataSourceSettings.html#Syncfusion_Blazor_Diagram_DataSourceSettings_ID) and [ParentID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DataSourceSettings.html#Syncfusion_Blazor_Diagram_DataSourceSettings_ParentID) types are string in DataSourceSettings. When creating a parent-child relationship, it's essential to ensure that at least one node has an empty ParentID. This node will act as the root or parent node, with other nodes linked as its children. For example, let's consider the data source settings. Within the DataSource, we have defined three specific details. The DataModel class has attributes such as ID, ParentID, and various other details. In this scenario, the initial dataset does not have a parent ID, which means we have set it as empty. This node acts as the parent or root node of the layout. Subsequent datasets, however, do contain a ParentID. Below is a code example illustrating this: @@ -88,7 +88,7 @@ The [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DataSou ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/Parent-Child%20Relationship) -## How to bind local data with diagram +## How to Bind Local Data to the Diagram Diagram can be populated based on the user defined JSON data (Local Data) by mapping the relevant data source fields. @@ -197,7 +197,7 @@ To map the user defined JSON data with diagram, configure the fields of `DataSou ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/LocalData) -## How to bind expandoObject data with diagram +## How to Bind ExpandoObject Data to the Diagram Diagram is a generic component which is strongly bound to a model type. There are cases when the model type is unknown during compile time. In such circumstances data can be bound to the Diagram as a list of **ExpandoObjects**. Diagram can also perform all kind of supported Layout operations in ExpandoObjects such as, @@ -383,7 +383,7 @@ The following code example illustrates how to bind ExpandoObject data with the d ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/ExpandoObject) -## How to bind dynamicObject data with diagram +## How to Bind DynamicObject Data to the Diagram Diagram is a generic component that is strongly bound to a model type. There are cases when the model type is unknown during compile time. In such circumstances data can be bound to the Diagram as a list of **DynamicObject**. Diagram can also perform all kind of supported Layout operations in DynamicObject such as, @@ -585,7 +585,7 @@ The following code example illustrates how to bind DynamicObject data with the d ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/DynamicObj) -## How to bind json data with diagram +## How to Bind JSON Data to the Diagram Local JSON data can be bound to the Diagram component by assigning the array of objects to the Json property of the SfDataManager component. @@ -654,13 +654,13 @@ The following sample code demonstrates binding local data through the SfDataMana ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/JSONData) -## How to bind remote data with diagram +## How to Bind Remote Data to the Diagram To bind remote data to [Diagram component](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html), assign service data as an instance of [SfDataManager](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.SfDataManager.html) to the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DataSourceSettings.html#Syncfusion_Blazor_Diagram_DataSourceSettings_DataSource) property or use the SfDataManager component. To interact with a remote data source, provide the endpoint Url. When using SfDataManager for data binding, the TValue must be provided explicitly in the diagram component. By default, SfDataManager uses ODataAdaptor for remote data-binding. -### Binding with OData services +### How to Bind OData Services to the Diagram OData (Open Data Protocol) is a standardized protocol for building and consuming RESTful APIs. It enables the creation and consumption of queryable and interoperable REST APIs in a simple and standard way. OData services expose data as resources that are addressable by URLs and can be queried using standard HTTP methods (GET, POST, PUT, DELETE). For more details on OData services, refer to the [OData documentation](https://www.odata.org/documentation/odata-version-3-0/odata-version-3-0-core-protocol/). To bind an OData service, use the ODataAdaptor. @@ -749,7 +749,7 @@ OData (Open Data Protocol) is a standardized protocol for building and consuming ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/RemoteData/ODataAdaptor) -### Binding with OData v4 services +### How to Bind OData V4 Services to the Diagram The ODataV4 is an improved version of OData protocols, and the SfDataManager can also retrieve and consume OData v4 services. For more details on OData v4 services, refer to the [OData documentation](http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_Toc453752197). To bind an OData v4 service, use the ODataV4Adaptor. @@ -838,7 +838,7 @@ The ODataV4 is an improved version of OData protocols, and the SfDataManager can ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/RemoteData/ODataV4Adaptor) -### Binding with WebAPI services +### How to Bind Web API Services to the Diagram You can use the `WebApiAdaptor` to interact with Web APIs created with OData endpoints. The `WebApiAdaptor` is extended from the `ODataAdaptor`. Therefore, to use the `WebApiAdaptor`, the endpoint must understand the OData formatted queries sent with the request. @@ -931,7 +931,7 @@ The following sample code demonstrates hoe to bind remote data to the Diagram co ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/RemoteData/WebAPIAdaptor) -### Binding with URL services +### How to Bind URL Services to the Diagram A URL service is a web service accessible via a Uniform Resource Locator (URL). These services provide specific functionalities or data when a client sends an HTTP request to the given URL. URL services are a foundational aspect of web-based APIs (Application Programming Interfaces) and RESTful services. The [UrlAdaptor](../data/adaptors#url-adaptor) serves as the base adaptor for interacting with remote data services. Most built-in adaptors are derived from the `UrlAdaptor`. The following sample code demonstrates how to bind data to the Diagram component through the [SfDataManager](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.SfDataManager.html) using the `UrlAdaptor`, @@ -1021,7 +1021,7 @@ The following sample code demonstrates how to bind data to the Diagram component ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/RemoteData/URLAdaptor) -### How to bind custom data +### How to Bind Custom Data The custom data binding can be performed in the diagram component by providing a custom adaptor class and overriding the Read or ReadAsync method of the DataAdaptor abstract class. The following sample code demonstrates implementing custom data binding using custom adaptor, @@ -1141,7 +1141,7 @@ The following sample code demonstrates implementing custom data binding using cu } ``` -### CRUD operation +### How to Perform CRUD Operations with Custom Data The CRUD operations for the custom bounded data in the diagram component can be implemented by overriding the following CRUD methods of the **DataAdaptor** abstract class, @@ -1350,7 +1350,7 @@ The following sample code demonstrates implementing CRUD operations for the cust ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/DiagramWithCustomAdaptor) -### Binding with GraphQL service +### How to Bind GraphQL Service to the Diagram GraphQL is a query language for APIs that allows you to can get exactly what you need and nothing more. The GraphQLAdaptor provides an option to retrieve data from a GraphQL server. For more details on GraphQL service, refer to the [GraphQL documentation](../data/adaptors#graphql-service-binding). ```cshtml @@ -1446,7 +1446,7 @@ GraphQL is a query language for APIs that allows you to can get exactly what you You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/GraphQLAdaptor) -### Performing CRUD operation using mutation +### How to Perform CRUD Operations Using Mutations You can perform CRUD operations by setting the mutation queries in the [Mutation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.GraphQLAdaptorOptions.html#Syncfusion_Blazor_Data_GraphQLAdaptorOptions_Mutation) property of [GraphQLAdaptorOptions](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.GraphQLAdaptorOptions.html). @@ -1715,7 +1715,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync You need to follow the below steps to consume data from the **Entity Framework** in the diagram component. -### Create DBContext class +### How to Create DBContext Class The first step is to create a DBContext class called **DataBaseContext** to connect to a Microsoft SQL Server database. @@ -1752,7 +1752,7 @@ namespace DiagramWithRemoteData.Data } ``` -### Creating Web API Controller +### How to Create Web API Controller A Web API Controller has to be created which allows direct consumption of data from the Entity Framework. @@ -1860,7 +1860,7 @@ namespace DiagramWithRemoteData.Controllers ``` -### Configure diagram component using Web API adaptor +### How to Configure Diagram Component Using Web API Adaptor Now, you can configure the diagram using the **'SfDataManager'** to interact with the created Web API and consume the data appropriately. To interact with the web api, you need to use WebApiAdaptor. @@ -1931,10 +1931,10 @@ Now, you can configure the diagram using the **'SfDataManager'** to interact wit } ``` -### CRUD +### How to Perform CRUD Operations The SfDiagramComponent supports CRUD (Create, Read, Update, Delete) operations using SfDataManager for remote data management. By making API calls to update data, the diagram automatically re-renders, ensuring real-time synchronization between the front-end diagram and the back-end. This allows users to manage and manipulate diagram data from remote databases or APIs using methods like ReadData, UpdateData, InsertData, and DeleteData. -### Read DataSource +### How to Read Data Source The SfDiagramComponent can fetch and display data from remote sources using the ReadDataAsync method. This method retrieves data from the server, which is then visualized as nodes and connectors in the diagram. This method is invoked when the user wants to load the raw data from the server. ```csharp //To fetch data from the remote service @@ -1944,7 +1944,7 @@ The SfDiagramComponent can fetch and display data from remote sources using the } ``` -### Updating Existing Data +### How to Update Existing Data The UpdateDataAsync method updates the data on the remote server through an API call. Once the data is updated, the diagram automatically refreshes and displays the latest data from the server. ```csharp //To update data in the remote service @@ -1962,7 +1962,7 @@ The UpdateDataAsync method updates the data on the remote server through an API } ``` -### Inserting New Data +### How to Insert New Data The InsertDataAsync method adds new data to the remote server via an API. Once the data is inserted, the diagram updates itself to include the new nodes and connectors. ```csharp //To push data to the remote service @@ -1980,7 +1980,7 @@ The InsertDataAsync method adds new data to the remote server via an API. Once t } ``` -### Deleting Data +### How to Delete Data The DeleteDataAsync method removes data from the remote server. Once the data is deleted, the diagram refreshes itself to reflect the removal of nodes and connectors. ```csharp //To delete data in the remote service diff --git a/blazor/diagram/events.md b/blazor/diagram/events.md index 4767428d27..2bb7c16245 100644 --- a/blazor/diagram/events.md +++ b/blazor/diagram/events.md @@ -9,7 +9,7 @@ documentation: ug # Diagram Events in Blazor Diagram Component -## Created Event +## How to Use the Created Event The [Created](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Created) event is triggered when the Diagram component is fully rendered and initialized. This event provides an opportunity to execute custom logic or perform specific actions immediately after the diagram is created. For instance, you can use this event to programmatically select objects, modify diagram properties, or initialize additional components that depend on the diagram's existence. @@ -47,7 +47,7 @@ The [Created](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Sf ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/CreatedEvent) -## Click Event +## How to Handle Click Events The [Click](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Click) event is triggered when a user interacts with a node, connector, or the diagram canvas by clicking on it. This event provides valuable information about the clicked element and the click location. For detailed information about the event arguments, please refer to the [ClickEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ClickEventArgs.html). @@ -84,7 +84,7 @@ The [Click](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDi ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/ClickEvent) -## PropertyChanged Event +## How to Handle Property Changed Event The [Property Changed](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_PropertyChanged) event is triggered when any property of the diagram component is modified at runtime. This event provides valuable information about the changes occurring in the diagram. For a detailed understanding of the event arguments, refer to the [PropertyChangedEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PropertyChangedEventArgs.html). ```cshtml @@ -121,7 +121,7 @@ The [Property Changed](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.D ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/PropertyChangedEvent) -## CollectionChange Event +## How to Handle CollectionChange Events * The diagram provides specific events that are triggered when nodes or connectors are added to or removed from the diagram. These events offer opportunities for customization and are invoked whenever the node or connector collection undergoes changes. |Event Name|Arguments|Description| @@ -164,7 +164,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/CollectionChangeEvent) -## MouseEnter Event +## How to Handle the MouseEnter Event The [MouseEnter](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_MouseEnter) event is triggered when the mouse pointer enters the boundary of a node or connector in the diagram. This event provides valuable information about the element being interacted with. For a comprehensive understanding of the event arguments and their properties, refer to the [DiagramElementMouseEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramElementMouseEventArgs.html). @@ -202,7 +202,7 @@ The [MouseEnter](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/MouseEnterEvent) -## MouseLeave Event +## How to Handle the MouseLeave Event The [MouseLeave](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_MouseLeave) event is triggered when the mouse pointer exits the boundaries of a node or connector in the diagram. This event provides valuable information about the element being left. For a comprehensive understanding of the event arguments and their properties, refer to the [DiagramElementMouseEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramElementMouseEventArgs.html). @@ -240,7 +240,7 @@ The [MouseLeave](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/MouseLeaveEvent) -## MouseHover Event +## How to Handle the Mouse Hover Event The [MouseHover](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_MouseHover) event is triggered when the mouse pointer hovers over a node or connector in the diagram. This event provides valuable information about the element being hovered. For detailed information about the event arguments, refer to the [DiagramElementMouseEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramElementMouseEventArgs.html). @@ -278,7 +278,7 @@ The [MouseHover](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/MouseHoverEvent) -## KeyDown Event +## How to Handle the KeyDown Event The [KeyDown](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_KeyDown) event is triggered when a user presses any key on the keyboard while the diagram component has focus. This event provides a powerful way to capture and respond to keyboard interactions. For detailed information about the event arguments and properties available, please refer to the [KeyEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyEventArgs.html). @@ -316,7 +316,7 @@ The [KeyDown](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Sf ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/KeyDownEvent) -## KeyUp Event +## How to Handle the KeyUp Event The [KeyUp](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_KeyUp) event is triggered when a user releases a key on the keyboard. This event provides valuable information about the released key and can be used to implement custom functionality or keyboard shortcuts in your Blazor diagram. For detailed information about the event arguments, refer to the [KeyEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyEventArgs.html), which outlines all the properties and methods available for handling this event effectively. @@ -461,7 +461,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/DraggingEvent) -## DragLeave Event +## How to Handle the DragLeave Event * The [DragLeave](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DragLeave) event is triggered when a dragged element exits the boundaries of another diagram element. For detailed information about the event arguments, refer to the [DragLeaveEventArgs](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/DragLeaveEvent) documentation and sample code. @@ -516,7 +516,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events) -## DragDrop Event +## How to Handle the DragDrop Event * The [DragDrop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DragDrop) event is triggered when a user drags a symbol from the symbol palette and drops it onto the diagram's drawing area. This event provides valuable information about the drag and drop operation. To access and utilize the event arguments, refer to the [DropEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DropEventArgs.html) documentation, which details the properties and methods available for handling this event effectively. ```cshtml @@ -570,7 +570,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/DragDrop) -## OnAutoScrollChange Event +## How to Handle the OnAutoScrollChange Event The [OnAutoScrollChange](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_OnAutoScrollChange) event is triggered when changes are detected in the scroll position, extent, or viewport size due to auto-scrolling of diagram elements. This event provides an [AutoScrollChangeEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AutoScrollChangeEventArgs.html) argument containing relevant information. The [AutoScrollChangeEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AutoScrollChangeEventArgs.html) include the following properties: diff --git a/blazor/diagram/export.md b/blazor/diagram/export.md index 5e3d8d8ece..dc26d06be8 100644 --- a/blazor/diagram/export.md +++ b/blazor/diagram/export.md @@ -49,11 +49,11 @@ Diagram provides support to export the diagram as image or SVG files. The follow ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/Export) -## Exporting options +## Exporting Options Diagram provides support to export the desired region of the diagram to the desired formats. -### File Formats +### How to Export Diagram to Different File Formats [DiagramExportFormat](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportFormat.html) specifies the type/format of the exported file. By default, the diagram is exported in .jpeg format. You can export the diagram to the following formats: @@ -83,7 +83,7 @@ Diagram provides support to export the desired region of the diagram to the desi ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportOption) -### Page Size +### How to Customize Page Size Diagram provides support to change the page size. The page size can be adjusted by setting the [DiagramExportSettings.PageWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_PageWidth) and [DiagramExportSettings.PageHeight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_PageHeight) properties. The default value for width is 1123 pixels and the height is 794 pixels. @@ -111,7 +111,7 @@ Diagram provides support to change the page size. The page size can be adjusted ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportWithPageSize) -### How to add margin around exported image +### How to Add Margin Around Exported Diagram Image [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_Margin) specifies the space around the content to be printed/exported.The default value for margin is 25 for all sides. @@ -143,7 +143,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportMargin) -### How to export the diagram based on region +### How to Export Diagrams by Region [Region](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_Region) specifies whether the diagram is to be exported based on page settings, content, or clip bounds. The exporting options are as follows: @@ -182,7 +182,7 @@ The following code example illustrates how to export the diagram based on page s ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportRegion) -### Custom bounds +### How to Export Diagram with Custom Bounds Diagram provides support to export any specific region of the diagram by using the [ClipBounds](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_ClipBounds) property. @@ -214,7 +214,7 @@ The following code example illustrates how to export the region specified in the ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportClipBounds) -### Export diagram as single or multiple page +### How to Export Diagram as Single or Multiple Pages Diagram provides support to export the entire diagram to either a single page or multiple pages using the [FitToPage](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_FitToPage) property. By default, this property is set to false. @@ -253,7 +253,7 @@ The following code example illustrates how to export the diagram to a single pag ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportWithPage) -### How to change orientation at runtime +### How to Change Orientation at Runtime Diagram provides support to switch between [Portrait](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PageOrientation.html#Syncfusion_Blazor_Diagram_PageOrientation_Portrait) and [Landscape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PageOrientation.html#Syncfusion_Blazor_Diagram_PageOrientation_Landscape) orientation while exporting. You can change the orientation by setting the [DiagramExportSettings.Orientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExportSettings.html#Syncfusion_Blazor_Diagram_DiagramExportSettings_Orientation) Property. The default value is Landscape. @@ -286,7 +286,7 @@ Diagram provides support to switch between [Portrait](https://help.syncfusion.co ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Export/ExportOrientation) -### How to export the diagram as PDF +### How to Export the Diagram as PDF Diagram does not have built-in support to convert the diagram to a PDF file. However, you can achieve this by exporting the diagram as a base-64 and then converting the exported file to PDF using Syncfusion.PdfExport.PdfDocument. Javascript functions `downloadPdf` and `triggerDownload` are invoked to automatically download the pdf file. diff --git a/blazor/diagram/flip.md b/blazor/diagram/flip.md index db29e389b9..f32ad58580 100644 --- a/blazor/diagram/flip.md +++ b/blazor/diagram/flip.md @@ -11,13 +11,13 @@ documentation: ug The diagram component offers functionality to flip nodes, connectors, and groups. Flipping creates a mirror image of the original element, allowing for versatile visual representations within the diagram. -## How to flip the node or group +## How to Flip the Node or Group The [Flip](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_Flip) command is used to mirror the content and ports of selected objects across either the horizontal, vertical, or both directions on the diagram page. This transformation allows for quick and easy reorientation of diagram elements. **Note:** The Flip command can be applied to both individual nodes and node groups, including their selected child nodes. -### How to change the flip direction +### How to Change the Flip Direction The [FlipDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlipDirection.html) property is used to mirror nodes, groups, or connectors across horizontal, vertical, or both directions. This feature allows you to create symmetrical or reversed representations of diagram elements, enhancing the flexibility and visual appeal of your Blazor diagrams. @@ -29,7 +29,7 @@ The [FlipDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diag |None| It is used to disable all the flip behavior. | -### How to change the flip mode +### How to Change the Flip Mode The [FlipMode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramFlipMode.html) property is utilized to manage the flipping behavior of diagram objects. It determines whether the object should be flipped along with its associated ports , content and content text, or if these elements should remain in their original orientation during the flip operation. @@ -257,7 +257,7 @@ The flip functionality for a group node works similarly to that of normal nodes. - If a child node’s flip is set to Vertical and the group node’s flip is set to Horizontal, the resulting flip for the child node will be a combination of Vertical and Horizontal (effectively a “both” flip). - This ensures that the child nodes’ orientations adapt dynamically based on the group’s flip while maintaining their unique flip settings. -## How to change Group flip mode +## How to Change Group Flip Mode The [FlipMode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramFlipMode.html) of a group node also behave similarly to those of normal nodes. However,When you apply a flip mode to a group node, it takes precedence over any flip mode set on its child nodes, overriding their individual settings. @@ -479,7 +479,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![GroupFlip](./images/blazor-diagram-flip-groupnode.gif) -## How to flip the connector +## How to Flip the Connector The [Flip](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_Flip) command is used to mirror selected objects across horizontal, vertical, or both directions on the diagram page. This feature allows for quick and easy creation of symmetrical designs or reversed orientations of diagram elements. diff --git a/blazor/diagram/getting-started-with-maui-app.md b/blazor/diagram/getting-started-with-maui-app.md index c3162095e9..9b17398e94 100644 --- a/blazor/diagram/getting-started-with-maui-app.md +++ b/blazor/diagram/getting-started-with-maui-app.md @@ -1,13 +1,13 @@ --- layout: post -title: Deploy Diagram Component in Blazor MAUI in windows | Syncfusion +title: Getting Started with the Diagram Component in the Blazor MAUI App | Syncfusion description: Checkout and learn about the documentation for getting started with Blazor Diagram Component in Blazor MAUI App. platform: Blazor control: Diagram Component documentation: ug --- -# Getting Started with Diagram Component in the Blazor MAUI app. +# Getting Started with the Diagram Component in the Blazor MAUI App In this section, we'll guide you through the process of adding Syncfusion® Blazor Diagram Component to your Blazor Maui app. We'll break it down into simple steps to make it easy to follow. Additionally, you can find a fully functional example project on our [GitHub repository](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent/BlazorMAUIApp/DiagramSample). @@ -19,11 +19,11 @@ In this section, we'll guide you through the process of adding Syncfusion® Blaz To use the MAUI project templates, install the Mobile development with the .NET extension for Visual Studio. For more details, refer to [here](https://learn.microsoft.com/en-us/dotnet/MAUI/get-started/installation?tabs=vswin) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-integration/template-studio). -## Step 1: Create a new Blazor MAUI App in Visual Studio +## Step 1: How to Create a New Blazor MAUI App in Visual Studio You can create a Blazor MAUI App using Visual Studio via [Microsoft Templates](https://learn.microsoft.com/en-us/dotnet/maui/get-started/first-app?pivots=devices-windows&view=net-maui-9.0&tabs=vswin). -## Step 2: Install Diagram NuGet package in Blazor Maui App +## Step 2: How to Install Diagram NuGet Package in Blazor MAUI App To add **Blazor Diagram** component in the app, open the NuGet package manager in Visual Studio (Tools → NuGet Package Manager → Manage NuGet Packages for Solution), search and install [Syncfusion.Blazor.Diagram](https://www.nuget.org/packages/Syncfusion.Blazor.Diagram) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). @@ -38,7 +38,7 @@ Install-Package Syncfusion.Blazor.Themes -Version {{ site.releaseversion }} N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service * In the **~/_Imports.razor** file, add the following namespaces: @@ -88,7 +88,7 @@ namespace MauiBlazorWindow; {% endhighlight %} {% endtabs %} -## Step 4: Adding stylesheet and script +## Step 4: How to Add Stylesheet and Script Add the following stylesheet and script to the head section of the **~/wwwroot/index.html** file. @@ -109,7 +109,7 @@ If you are using Syncfusion.Blazor.Diagram && Syncfusion.Blazor.Themes NuGet pac ``` -## Step 5: Add Diagram component +## Step 5: How to Add the Diagram Component Add the Syncfusion® Diagram component in the **~/Pages/Index.razor** file. @@ -246,7 +246,7 @@ Add the Syncfusion® Diagram component in th N> [View Sample in GitHub](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent/BlazorMAUIApp/DiagramSample). -## Run on Windows +## How to Run the Sample on Windows Run the sample in Windows Machine mode, and it will run Blazor MAUI in Windows. @@ -256,7 +256,7 @@ When the application is successfully launched, the Diagram component will seamle ![Run Windows machine](images/blazor-diagram-maui-page.png) -## Run on Android +## How to Run the Sample on Android To run the Blazor DiagramComponent in a Blazor Android MAUI application using the Android emulator, follow these steps: From 73174e90c2905ab05323656c7a1287d55d44cd74 Mon Sep 17 00:00:00 2001 From: Ramya Date: Fri, 20 Jun 2025 18:52:41 +0530 Subject: [PATCH 05/16] 958831: Update Ug for SEO Changes --- .../diagram/getting-started-with-maui-app.md | 18 ++++---- .../diagram/getting-started-with-wasm-app.md | 28 ++++++------- .../diagram/getting-started-with-web-app.md | 26 ++++++------ blazor/diagram/getting-started.md | 30 ++++++------- blazor/diagram/grid-lines.md | 20 ++++----- blazor/diagram/group.md | 24 +++++------ blazor/diagram/how-to.md | 42 +++++++++---------- 7 files changed, 94 insertions(+), 94 deletions(-) diff --git a/blazor/diagram/getting-started-with-maui-app.md b/blazor/diagram/getting-started-with-maui-app.md index 9b17398e94..3ce9905938 100644 --- a/blazor/diagram/getting-started-with-maui-app.md +++ b/blazor/diagram/getting-started-with-maui-app.md @@ -88,7 +88,7 @@ namespace MauiBlazorWindow; {% endhighlight %} {% endtabs %} -## Step 4: How to Add Stylesheet and Script +## Step 4: How to Add Stylesheet and Script Resources Add the following stylesheet and script to the head section of the **~/wwwroot/index.html** file. @@ -246,7 +246,7 @@ Add the Syncfusion® Diagram component in th N> [View Sample in GitHub](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent/BlazorMAUIApp/DiagramSample). -## How to Run the Sample on Windows +## How to Run the Sample on Windows Run the sample in Windows Machine mode, and it will run Blazor MAUI in Windows. @@ -276,11 +276,11 @@ N> If you encounter any errors while using the Android Emulator, refer to the fo To use the MAUI project templates, install the Mobile development with the .NET extension for Visual Studio Code. For more details, refer to [here](https://learn.microsoft.com/en-us/dotnet/maui/get-started/installation?view=net-maui-9.0&tabs=visual-studio-code) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-code-integration/create-project). -## Step 1: Create a new Blazor MAUI App in Visual Studio Code +## Step 1: How to Create a New Blazor MAUI App Using Visual Studio Code You can create a Blazor MAUI App using Visual Studio Code via [Microsoft Templates](https://learn.microsoft.com/en-us/dotnet/maui/get-started/first-app?pivots=devices-windows&view=net-maui-9.0&tabs=visual-studio-code) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-code-integration/create-project). -## Step 2: Install Diagram NuGet package in Blazor Maui App +## Step 2: How to Install Diagram NuGet Packages in a Blazor MAUI App To add **Blazor Diagram** component in the app, open the NuGet package manager in Visual Studio (Tools → NuGet Package Manager → Manage NuGet Packages for Solution), search and install [Syncfusion.Blazor.Diagram](https://www.nuget.org/packages/Syncfusion.Blazor.Diagram) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). @@ -298,7 +298,7 @@ dotnet restore N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service * In the **~/_Imports.razor** file, add the following namespaces: @@ -348,7 +348,7 @@ namespace MauiBlazorWindow; {% endhighlight %} {% endtabs %} -## Step 4: Adding stylesheet and script +## Step 4: How to Add Stylesheet and Script Resources Add the following stylesheet and script to the head section of the **~/wwwroot/index.html** file. @@ -369,7 +369,7 @@ If you are using Syncfusion.Blazor.Diagram && Syncfusion.Blazor.Themes NuGet pac ``` -## Step 5: Add Diagram component +## Step 5: How to Add the Diagram Component Add the Syncfusion® Diagram component in the **~/Pages/Index.razor** file. @@ -506,7 +506,7 @@ Add the Syncfusion® Diagram component in th N> [View Sample in GitHub](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent/BlazorMAUIApp/DiagramSample). -## Run on Windows +## How to Run the Sample on Windows Run the sample in Windows Machine mode, and it will run Blazor MAUI in Windows. @@ -516,7 +516,7 @@ When the application is successfully launched, the Diagram component will seamle ![Run Windows machine](images/blazor-diagram-maui-page.png) -## Run on Android +## How to Run the Sample on Android To run the Blazor DiagramComponent in a Blazor Android MAUI application using the Android emulator, follow these steps: diff --git a/blazor/diagram/getting-started-with-wasm-app.md b/blazor/diagram/getting-started-with-wasm-app.md index 329842abed..55ea9dc860 100644 --- a/blazor/diagram/getting-started-with-wasm-app.md +++ b/blazor/diagram/getting-started-with-wasm-app.md @@ -7,7 +7,7 @@ control: Diagram Component documentation: ug --- -# Getting Started with Diagram Component in the Blazor WASM app +# Getting Started with Diagram Component in the Blazor WASM App In this section, we'll guide you through the process of adding the Blazor Diagram component component to your Blazor WebAssembly (WASM) app using Visual Studio and Visual Studio Code. We'll break it down into simple steps to make it easy to follow. Additionally, you can find a fully functional example project on our [GitHub repository](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent/BlazorWASMApp/DiagramSample). @@ -19,11 +19,11 @@ In this section, we'll guide you through the process of adding the Blazor Diagra * [System requirements for Blazor components](https://blazor.syncfusion.com/documentation/system-requirements) -## Step 1: Create a new Blazor App in Visual Studio +## Step 1: How to Create a New Blazor App in Visual Studio You can create a **Blazor WebAssembly App** using Visual Studio via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-7.0&pivots=vs) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-integration/template-studio). -## Step 2: Install Syncfusion® Blazor Diagram and Themes NuGet in the blazor webAssembly App +## Step 2: How to Install Syncfusion® Blazor Diagram and Themes NuGet Packages in a Blazor WebAssembly App To add **Blazor Diagram** component in the app, open the NuGet package manager in Visual Studio (Tools → NuGet Package Manager → Manage NuGet Packages for Solution), search and install [Syncfusion.Blazor.Diagram](https://www.nuget.org/packages/Syncfusion.Blazor.Diagram) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). Alternatively, you can utilize the following package manager command to achieve the same. @@ -38,7 +38,7 @@ Install-Package Syncfusion.Blazor.Themes -Version {{ site.releaseversion }} N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service * In the **~/_Imports.razor** file, add the following namespaces: @@ -72,7 +72,7 @@ await builder.Build().RunAsync(); {% endhighlight %} {% endtabs %} -## Step 4: Adding stylesheet and script +## Step 4: How to Add Stylesheet and Script Resources Add the following stylesheet and script to the head section of the **wwwroot/index.html** file. @@ -95,7 +95,7 @@ If you are using Syncfusion.Blazor.Diagram && Syncfusion.Blazor.Themes NuGet pac N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/appearance/themes) topic to discover various methods: ([Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets), [CDN](https://blazor.syncfusion.com/documentation/appearance/themes#cdn-reference), and [CRG](https://blazor.syncfusion.com/documentation/common/custom-resource-generator)) referencing themes in your Blazor application. Also, check out the [Adding Script Reference](https://blazor.syncfusion.com/documentation/common/adding-script-references) topic to learn different approaches for adding script references in your Blazor application. -## Step 5: Add Blazor Diagram component +## Step 5: How to Add the Blazor Diagram Component Add the Syncfusion® Blazor Diagram component in the **~/Pages/Index.razor** file. @@ -117,7 +117,7 @@ Add the Syncfusion® Blazor Diagram componen * [System requirements for Blazor components](https://blazor.syncfusion.com/documentation/system-requirements) -## Step 1: Create a new Blazor App in Visual Studio Code +## Step 1: How to Create a New Blazor App in Visual Studio Code You can create a **Blazor WebAssembly App** using Visual Studio Code via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-7.0&pivots=vsc) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-code-integration/create-project). @@ -134,7 +134,7 @@ cd BlazorApp {% endtabs %} -## Step 2: Install Syncfusion® Blazor Diagram and Themes NuGet in the App +## Step 2: How to Install Syncfusion® Blazor Diagram and Themes NuGet Package in the App * Press Ctrl+` to open the integrated terminal in Visual Studio Code. * Ensure you’re in the project root directory where your `.csproj` file is located. @@ -154,7 +154,7 @@ dotnet restore N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service * In the **~/_Imports.razor** file, add the following namespaces: @@ -188,7 +188,7 @@ await builder.Build().RunAsync(); {% endhighlight %} {% endtabs %} -## Step 4: Adding stylesheet and script +## Step 4: How to Add Stylesheet and Script Resources Add the following stylesheet and script to the head section of the **wwwroot/index.html** file. @@ -211,7 +211,7 @@ If you are using Syncfusion.Blazor.Diagram && Syncfusion.Blazor.Themes NuGet pac N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/appearance/themes) topic to discover various methods: ([Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets), [CDN](https://blazor.syncfusion.com/documentation/appearance/themes#cdn-reference), and [CRG](https://blazor.syncfusion.com/documentation/common/custom-resource-generator)) referencing themes in your Blazor application. Also, check out the [Adding Script Reference](https://blazor.syncfusion.com/documentation/common/adding-script-references) topic to learn different approaches for adding script references in your Blazor application. -## Step 5: Add Blazor Diagram component +## Step 5: How to Add the Blazor Diagram component Add the Syncfusion® Blazor Diagram component in the **~/Pages/Index.razor** file. @@ -229,7 +229,7 @@ Add the Syncfusion® Blazor Diagram componen {% endtabcontents %} -## Basic Blazor Diagram elements +## How to Use Basic Elements in Blazor Diagram * Node: Visualize any graphical object using nodes, which can be arranged and manipulated at the same time on a Blazor diagram page. * Connector: Represents the relationship between two nodes. Three types of connectors provided as follows: @@ -239,7 +239,7 @@ Add the Syncfusion® Blazor Diagram componen * Port: Acts as the connection points of node or connector and allows you to create connections with only specific points. * Annotation: Additional information can be shown by adding text or labels on nodes and connectors. -## How to create Blazor flowchart diagram +## How to Create Blazor Flowchart Diagram Let us create and add a [Node](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html) with specific position, size, label, and shape. Connect two or more nodes by using a [Connector](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html). @@ -374,7 +374,7 @@ Let us create and add a [Node](https://help.syncfusion.com/cr/blazor/Syncfusion. N> [View Sample in GitHub](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent). -## How to create organizational chart +## How to Create Organizational Chart A built-in automatic layout algorithm is designed specifically for organizational charts, automatically arranging parent and child node positions for optimal structure and clarity. diff --git a/blazor/diagram/getting-started-with-web-app.md b/blazor/diagram/getting-started-with-web-app.md index 03238cb885..55e4b25cc0 100644 --- a/blazor/diagram/getting-started-with-web-app.md +++ b/blazor/diagram/getting-started-with-web-app.md @@ -19,13 +19,13 @@ This section briefly explains about how to include [Blazor Diagram](https://www. * [System requirements for Blazor components](https://blazor.syncfusion.com/documentation/system-requirements) -## Step 1: Create a new Blazor Web App +## Step 1: How to Create a New Blazor Web App You can create a **Blazor Web App** using Visual Studio 2022 via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-8.0&pivots=vs) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-integration/template-studio). You need to configure the corresponding [Interactive render mode](https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-8.0#render-modes) and [Interactivity location](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-8.0&pivots=vs) while creating a Blazor Web Application. -## Step 2: Install Syncfusion® Blazor Diagram and Themes NuGet in the Blazor Web App +## Step 2: How to Install Syncfusion® Blazor Diagram and Themes NuGet Packages in the Blazor Web App To add **Blazor Diagram** component in the app, open the NuGet package manager in Visual Studio (*Tools → NuGet Package Manager → Manage NuGet Packages for Solution*), search and install [Syncfusion.Blazor.Diagram](https://www.nuget.org/packages/Syncfusion.Blazor.Diagram/) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). @@ -44,7 +44,7 @@ Install-Package Syncfusion.Blazor.Themes -Version {{ site.releaseversion }} N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service | Interactive Render Mode | Description | | -- | -- | @@ -119,7 +119,7 @@ var app = builder.Build(); {% endhighlight %} {% endtabs %} -## Step 4: Add stylesheet and script resources +## Step 4: How to Add Stylesheet and Script Resources The theme stylesheet and script can be accessed from NuGet through [Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets). Include the stylesheet reference in the `` section and the script reference at the end of the `` in the **~/Components/App.razor** file as shown below: @@ -137,7 +137,7 @@ The theme stylesheet and script can be accessed from NuGet through [Static Web A N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/appearance/themes) topic to discover various methods ([Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets), [CDN](https://blazor.syncfusion.com/documentation/appearance/themes#cdn-reference), and [CRG](https://blazor.syncfusion.com/documentation/common/custom-resource-generator)) for referencing themes in your Blazor application. Also, check out the [Adding Script Reference](https://blazor.syncfusion.com/documentation/common/adding-script-references) topic to learn different approaches for adding script references in your Blazor application. -## Step 5: Add Syncfusion® Blazor Diagram component +## Step 5: How to Add Syncfusion® Blazor Diagram Component Add the Syncfusion® Blazor Diagram component in `.razor` file inside the `Pages` folder. If an interactivity location as `Per page/component` in the web app, define a render mode at top of the component, as follows: @@ -177,7 +177,7 @@ N> If an **Interactivity Location** is set to `Global` and the **Render Mode** i * [System requirements for Blazor components](https://blazor.syncfusion.com/documentation/system-requirements) -## Step 1: Create a new Blazor Web App in Visual Studio Code +## Step 1: How to Create a New Blazor Web App in Visual Studio Code You can create a **Blazor Web App** using Visual Studio Code via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-8.0&pivots=vsc) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-code-integration/create-project). @@ -197,7 +197,7 @@ cd BlazorWebApp.Client N> For more information on creating a **Blazor Web App** with various interactive modes and locations, refer to this [link](https://blazor.syncfusion.com/documentation/getting-started/blazor-web-app?tabcontent=visual-studio-code#render-interactive-modes). -## Step 2: Install Syncfusion® Blazor Diagram and Themes NuGet in the App +## Step 2: How to Install Syncfusion® Blazor Diagram and Themes NuGet Packages in the App If you utilize `WebAssembly` or `Auto` render modes in the Blazor Web App need to be install Syncfusion® Blazor components NuGet packages within the client project. @@ -219,7 +219,7 @@ dotnet restore N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service | Interactive Render Mode | Description | | -- | -- | @@ -294,7 +294,7 @@ var app = builder.Build(); {% endhighlight %} {% endtabs %} -## Step 4: Add stylesheet and script resources +## Step 4: How to Add Stylesheet and Script Resources The theme stylesheet and script can be accessed from NuGet through [Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets). Include the stylesheet reference in the `` section and the script reference at the end of the `` in the **~/Components/App.razor** file as shown below: @@ -312,7 +312,7 @@ The theme stylesheet and script can be accessed from NuGet through [Static Web A N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/appearance/themes) topic to discover various methods ([Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets), [CDN](https://blazor.syncfusion.com/documentation/appearance/themes#cdn-reference), and [CRG](https://blazor.syncfusion.com/documentation/common/custom-resource-generator)) for referencing themes in your Blazor application. Also, check out the [Adding Script Reference](https://blazor.syncfusion.com/documentation/common/adding-script-references) topic to learn different approaches for adding script references in your Blazor application. -## Step 5: Add Syncfusion® Blazor Diagram component +## Step 5: How to Add Syncfusion® Blazor Diagram Component Add the Syncfusion® Blazor Diagram component in `.razor` file inside the `Pages` folder. If an interactivity location as `Per page/component` in the web app, define a render mode at top of the component, as follows: @@ -348,7 +348,7 @@ N> If an **Interactivity Location** is set to `Global` and the **Render Mode** i {% endtabcontents %} -## Basic Blazor Diagram elements +## How to Use Basic Elements in Blazor Diagram * Node: Visualize any graphical object using nodes, which can be arranged and manipulated at the same time on a Blazor diagram page. * Connector: Represents the relationship between two nodes. Three types of connectors provided as follows: @@ -358,7 +358,7 @@ N> If an **Interactivity Location** is set to `Global` and the **Render Mode** i * Port: Acts as the connection points of node or connector and allows you to create connections with only specific points. * Annotation: Additional information can be shown by adding text or labels on nodes and connectors. -## How to create Blazor flowchart diagram +## How to Create Blazor Flowchart Diagram Let us create and add a [Node](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html) with specific position, size, label, and shape. Connect two or more nodes by using a [Connector](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html). @@ -493,7 +493,7 @@ Let us create and add a [Node](https://help.syncfusion.com/cr/blazor/Syncfusion. N> [View Sample in GitHub](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent). -## How to create organizational chart +## How to Create Organizational Chart A built-in automatic layout algorithm is designed specifically for organizational charts, automatically arranging parent and child node positions for optimal structure and clarity. diff --git a/blazor/diagram/getting-started.md b/blazor/diagram/getting-started.md index 6a33d38a65..51565938b9 100644 --- a/blazor/diagram/getting-started.md +++ b/blazor/diagram/getting-started.md @@ -1,13 +1,13 @@ --- layout: post -title: Getting Started with Blazor Diagram Component in Server App|Syncfusion +title: Getting Started with Diagram Component in the Blazor Server App|Syncfusion description: Checkout and learn about the documentation for getting started with Blazor Diagram Component in Blazor Server App. platform: Blazor control: Diagram Component documentation: ug --- -# Getting Started with Diagram Component in the Blazor Server app. +# Getting Started with Diagram Component in the Blazor Server App. In this section, we'll guide you through the process of adding Syncfusion® Blazor Diagram component to your Blazor Server app. We'll break it down into simple steps to make it easy to follow. Additionally, you can find a fully functional example project on our [GitHub repository](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent/BlazorServerApp/Diagramsample). @@ -21,11 +21,11 @@ In this section, we'll guide you through the process of adding Syncfusion® Blaz * [System requirements for Blazor components](https://blazor.syncfusion.com/documentation/system-requirements) -## Step 1: Create a new Blazor App in Visual Studio +## Step 1: How to Create a New Blazor App in Visual Studio You can create a **Blazor Server App** using Visual Studio via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-7.0&pivots=vs) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-integration/template-studio). -## Step 2: Install Syncfusion® Blazor Diagram and Themes NuGet in the blazor server App +## Step 2: How to Install Syncfusion® Blazor Diagram and Themes NuGet Packages in the Blazor Server App To add **Blazor Diagram** component in the app, open the NuGet package manager in Visual Studio (Tools → NuGet Package Manager → Manage NuGet Packages for Solution), search and install [Syncfusion.Blazor.Diagram](https://www.nuget.org/packages/Syncfusion.Blazor.Diagram) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/).Alternatively, you can utilize the following package manager command to achieve the same. @@ -40,7 +40,7 @@ Install-Package Syncfusion.Blazor.Themes -Version {{ site.releaseversion }} N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service * In the **~/_Imports.razor** file, add the following namespaces: @@ -75,7 +75,7 @@ var app = builder.Build(); {% endtabs %} -## Step 4: Add stylesheet and script resources +## Step 4: How to Add Stylesheet and Script Resources The theme stylesheet and script can be accessed from NuGet through [Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets). Reference the stylesheet and script in the `` of the main page as follows: @@ -102,7 +102,7 @@ If you are using Syncfusion.Blazor.Diagram && Syncfusion.Blazor.Themes NuGet pac N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/appearance/themes) topic to discover various methods: ([Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets), [CDN](https://blazor.syncfusion.com/documentation/appearance/themes#cdn-reference), and [CRG](https://blazor.syncfusion.com/documentation/common/custom-resource-generator)) for referencing themes in your Blazor application. Also, check out the [Adding Script Reference](https://blazor.syncfusion.com/documentation/common/adding-script-references) topic to learn different approaches for adding script references in your Blazor application. -## Step 5: Add Blazor Diagram component +## Step 5: How to Add Blazor Diagram Component Add the Syncfusion® Blazor Diagram component in the **~/Pages/Index.razor** file. @@ -124,7 +124,7 @@ Add the Syncfusion® Blazor Diagram componen * [System requirements for Blazor components](https://blazor.syncfusion.com/documentation/system-requirements) -## Step 1: Create a new Blazor App in Visual Studio Code +## Step 1: How to Create a New Blazor App in Visual Studio Code You can create a **Blazor Server App** using Visual Studio Code via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-7.0&pivots=vsc) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-code-integration/create-project). @@ -141,7 +141,7 @@ cd BlazorApp {% endtabs %} -## Step 2: Install Syncfusion® Blazor Diagram and Themes NuGet in the App +## Step 2: How to Install Syncfusion® Blazor Diagram and Themes NuGet Packages in the App * Press Ctrl+` to open the integrated terminal in Visual Studio Code. * Ensure you’re in the project root directory where your `.csproj` file is located. @@ -161,7 +161,7 @@ dotnet restore N> Syncfusion® Blazor components are available in [nuget.org](https://www.nuget.org/packages?q=syncfusion.blazor). Refer to [NuGet packages](https://blazor.syncfusion.com/documentation/nuget-packages) topic for available NuGet packages list with component details. -## Step 3: Register Syncfusion® Blazor Service +## Step 3: How to Register Syncfusion® Blazor Service * In the **~/_Imports.razor** file, add the following namespaces: @@ -196,7 +196,7 @@ var app = builder.Build(); {% endtabs %} -## Step 4: Add stylesheet and script resources +## Step 4: How to Add Stylesheet and Script Resources The theme stylesheet and script can be accessed from NuGet through [Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets). Reference the stylesheet and script in the `` of the main page as follows: @@ -224,7 +224,7 @@ If you are using Syncfusion.Blazor.Diagram && Syncfusion.Blazor.Themes NuGet pac N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/appearance/themes) topic to discover various methods: ([Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets), [CDN](https://blazor.syncfusion.com/documentation/appearance/themes#cdn-reference), and [CRG](https://blazor.syncfusion.com/documentation/common/custom-resource-generator)) for referencing themes in your Blazor application. Also, check out the [Adding Script Reference](https://blazor.syncfusion.com/documentation/common/adding-script-references) topic to learn different approaches for adding script references in your Blazor application. -## Step 5: Add Blazor Diagram component +## Step 5: How to Add Blazor Diagram Component Add the Syncfusion® Blazor Diagram component in the **~/Pages/Index.razor** file. @@ -242,7 +242,7 @@ Add the Syncfusion® Blazor Diagram componen {% endtabcontents %} -## Basic Blazor Diagram elements +## How to Use Basic Elements in Blazor Diagram * Node: Visualize any graphical object using nodes, which can be arranged and manipulated at the same time on a Blazor diagram page. * Connector: Represents the relationship between two nodes. Three types of connectors provided as follows: @@ -252,7 +252,7 @@ Add the Syncfusion® Blazor Diagram componen * Port: Acts as the connection points of node or connector and allows you to create connections with only specific points. * Annotation: Additional information can be shown by adding text or labels on nodes and connectors. -## How to create Blazor flowchart diagram +## How to Create Blazor Flowchart Diagram Let us create and add a [Node](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html) with specific position, size, label, and shape. Connect two or more nodes by using a [Connector](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html). @@ -387,7 +387,7 @@ Let us create and add a [Node](https://help.syncfusion.com/cr/blazor/Syncfusion. N> [View Sample in GitHub](https://github.com/SyncfusionExamples/Blazor-Getting-Started-Examples/tree/main/DiagramComponent). -## How to create organizational chart +## How to Create Organizational Chart A built-in automatic layout algorithm is designed specifically for organizational charts, automatically arranging parent and child node positions for optimal structure and clarity. diff --git a/blazor/diagram/grid-lines.md b/blazor/diagram/grid-lines.md index 445c41a532..8ff07231df 100644 --- a/blazor/diagram/grid-lines.md +++ b/blazor/diagram/grid-lines.md @@ -1,17 +1,17 @@ --- layout: post -title: Gridlines in Blazor Diagram Component | Syncfusion +title: Grid Lines in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Gridlines in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Gridlines in Blazor Diagram Component +# Grid Lines in Blazor Diagram Component Gridlines are the pattern of lines drawn behind the diagram elements. It provides a visual guidance while dragging or arranging the objects on the diagram surface. The [SnapSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SnapSettings.html) property is used to customize the gridlines and control the snapping behavior in the diagram. -## How to customize the gridlines visibility +## How to Customize Grid Lines Visibility The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SnapSettings.html#Syncfusion_Blazor_Diagram_SnapSettings_Constraints) property of the SnapSettings class allows you to control the visibility of the gridlines. @@ -57,7 +57,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync To show only horizontal/vertical gridlines or to hide gridlines, refer to [SnapConstraints](constraints#snap-constraints). -## How to customize the appearance of the gridlines +## How to Customize Grid Lines Appearance The appearance of the gridlines can be customized by using a set of predefined properties. @@ -84,7 +84,7 @@ The following code example illustrates how to customize the appearance of gridli You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Gridlines/Appearance) -## How to create dot grid patterns +## How to Create Dot Grid Patterns The appearance of the grid lines can be changed into dots by using the [GridType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SnapSettings.html#Syncfusion_Blazor_Diagram_SnapSettings_GridType) as Dots. The following code illustrates how to render grid patterns as Dots. @@ -115,7 +115,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Dot Grid in Blazor Diagram](images/blazor-diagram-dot-grid.png) -## How to customize the Line intervals +## How to Customize Line Intervals Thickness and the space between gridlines can be customized by using [LinesIntervals](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramGridLines.html#Syncfusion_Blazor_Diagram_DiagramGridLines_LineIntervals) property of the HorizontalGridLines and VerticalGridLines. In the line intervals collections, values at the odd places are referred as the thickness of lines and values at the even places are referred as the space between gridlines. @@ -150,7 +150,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ## Snapping -### Snap to lines +### How to Enable or Disable Snap to Lines This feature allows the diagram objects to snap to the nearest intersection of gridlines while being dragged or resized. This feature enables easier alignment during layout or design. @@ -188,7 +188,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Snapping to GridLines in Blazor Diagram](images/blazor-diagram-snap-to-gridlines.gif) -### How to customize the snap intervals +### How to Customize Snap Intervals By default, the objects are snapped towards the nearest gridline. The gridline or position towards where the diagram object snaps can be customized by using the [SnapIntervals](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramGridLines.html#Syncfusion_Blazor_Diagram_DiagramGridLines_SnapIntervals) property of the HorizontalGridLines and VerticalGridLines. @@ -233,7 +233,7 @@ By default, the objects are snapped towards the nearest gridline. The gridline o You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Gridlines/CustomizeSnapInterval) -### Snap to objects +### How to Enable or Disable Snap to Object The snap to object provides visual cues to assist with aligning and spacing diagram elements. A node can be snapped with its neighboring objects based on certain alignments. Such alignments are visually represented as smart guides. @@ -285,7 +285,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![GuideLines in Blazor Diagram](images/blazor-diagram-guidelines.gif) -### How to customize the Snap line style +### How to Customize Snap Line Style The [SnapLineStyle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SnapSettings.html#Syncfusion_Blazor_Diagram_SnapSettings_SnapLineStyle) property of the [SnapSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SnapSettings.html) class allows you to adjust the appearance of snapping lines to enhance visibility or match specific aesthetic preferences. By customizing this property, you can modify the color, stroke width, stroke dash array, and opacity of the snap lines. These adjustments improve visual contrast, making it easier to align objects with precision. By default, the snap line color is set to '#07EDE1'. diff --git a/blazor/diagram/group.md b/blazor/diagram/group.md index b60aea9b68..1bd540121f 100644 --- a/blazor/diagram/group.md +++ b/blazor/diagram/group.md @@ -1,19 +1,19 @@ --- layout: post -title: NodeGroup in Blazor Diagram Component | Syncfusion +title: Node Group in Blazor Diagram Component | Syncfusion description: Learn here all about how to create and update the NodeGroup in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# NodeGroup in Blazor Diagram Component +# Node Group in Blazor Diagram Component [NodeGroup](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeGroup.html) is used to cluster multiple nodes and connectors into a single element. It acts as a container for its children (nodes, node groups, and connectors). Every change made to the node group also affects the children. Child elements can be edited individually. -## Create NodeGroup +## Create Node Group -## How to add nodeGroup while initialize the diagram +## How to Add a Node Group During Diagram Initialization A node group can be added to the diagram model through the [Nodes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html) collection. To define an object as a node group, add the child objects to the [Children](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeGroup.html#Syncfusion_Blazor_Diagram_NodeGroup_Children) collection of the node group. The following code illustrates how to create a node group. @@ -173,7 +173,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** NodeGroup's Id should not start with numbers or special characters and should not contain special characters such as underscore(_) or space. -### How to clone the group of node at runtime +### How to Clone a Group of Nodes at Runtime [Clone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Clone) is a virtual method of the node that is used to create a copy of a diagram object. After cloning, you need to set the ID for the cloned nodes. The following code demonstrates how to clone a group of nodes during runtime. ```cshtml @using Syncfusion.Blazor.Diagram @@ -259,7 +259,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Grouping in Blazor Diagram](images/CloneGroup.gif) -### How to add Padding for nodeGroup +### How to Add Padding to a Node Group The [Padding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeGroup.html#Syncfusion_Blazor_Diagram_NodeGroup_Padding) property of a group node defines the spacing between the group node’s edges and its children. @@ -322,7 +322,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Padding in Blazor Diagram](images/GroupPadding.png) -## How to add nodeGroup at runtime +## How to Add a Node Group at Runtime A node group can be added at runtime by using Nodes collection of diagram. @@ -476,7 +476,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Group/AddChildMethod) -## How to update nodeGroup's position at runtime +## How to Update Node Group Position at Runtime You can change the position of the node group similar to node. For more information about node positioning, refer to [Positioning](https://blazor.syncfusion.com/documentation/diagram/nodes/positioning). @@ -544,19 +544,19 @@ You can change the position of the node group similar to node. For more informat ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Group/UpdatePositionForGroup) -## How to change appearance of the node group +## How to Customize Node Group Appearance You can change the appearance of the node group similar to node. For more information about node appearance, refer to [Appearance](https://blazor.syncfusion.com/documentation/diagram/nodes/customization). -## Interact with the node group +## How to Interact with Node Group at Runtime You can edit the node group and its children at runtime. You can interact with the node group similar to node interactions like resize, rotate, and drag. For more information about node interaction, refer to [Interaction](https://blazor.syncfusion.com/documentation/diagram/nodes/interaction). -### Selecting a NodeGroup +### How to Select Node Group When a child element of any node group is clicked, its contained node group is selected instead of the child element. With consecutive clicks on the selected element, selection is changed from top to bottom in the hierarchy of parent nodegroup to its children. -## GroupNode Flip +## How to Flip Node Group The [Flip](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_Flip) is performed to give the mirrored image of the original element. diff --git a/blazor/diagram/how-to.md b/blazor/diagram/how-to.md index c64801bce1..4b064328bf 100644 --- a/blazor/diagram/how-to.md +++ b/blazor/diagram/how-to.md @@ -1,17 +1,17 @@ --- layout: post -title: Common use cases in Blazor Diagram Component | Syncfusion +title: How to Use Diagram Methods and Properties for Common Scenarios | Syncfusion description: Checkout and learn here all about how to achieve common use cases in Syncfusion Blazor Diagram component, it's elements and more. platform: Blazor control: DiagramComponent documentation: ug --- -# How to achieve common use cases using diagram methods and properties +# How to Use Diagram Methods and Properties for Common Scenarios The diagram's core functionalities are implemented through a comprehensive set of methods and properties, enabling robust manipulation and interaction with diagram elements. -## How to add nodes through Add method +## How to Add Nodes Using the Add Method To create a node in a Blazor diagram, define a Node object and add it to the diagram's nodes collection using the `Add()` method. It's crucial to call the Add() method within the OnInitialized() lifecycle method. This approach ensures that each diagram element is properly measured and rendered individually before the entire diagram is displayed. Attempting to use the Add() method outside of OnInitialized() is not recommended, as it may lead to unexpected behavior or rendering issues in the diagram. The following code example shows how to add a node to the diagram. @@ -50,7 +50,7 @@ To create a node in a Blazor diagram, define a Node object and add it to the dia ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/AddMethod) -## How to add nodes through AddDiagramElementsAsync +## How to Add Nodes Using the AddDiagramElementsAsync Method The [AddDiagramElementsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_AddDiagramElementsAsync_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) method offers advantages over the Add() method. It measures the passed elements before re-rendering the entire diagram component at once. When using the Add() method to add multiple nodes and connectors simultaneously, connectors may render before nodes, potentially leading to misplacement due to the method's synchronous nature. To avoid this issue and ensure proper positioning, use the asynchronous AddDiagramElementsAsync() method. @@ -153,7 +153,7 @@ The [AddDiagramElementsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.B ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/AddDiagramElements) -## How to clear the nodes/connectors in the diagram +## How to Clear Nodes and Connectors from the Diagram The [Clear](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Clear) method provides a quick and efficient way to remove all elements from the diagram, including nodes, connectors, and groups. This method is particularly useful when you need to reset the diagram to its initial state or prepare it for a new set of elements. @@ -224,7 +224,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram clear](images/blazor-diagram-clear.gif) -## How to delete the diagram elements +## How to Delete Diagram Elements The [Delete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Delete_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) method is a powerful tool for removing diagram elements such as nodes, connectors, and groups. When invoked without parameters or with a null parameter, it automatically deletes all selected elements. Alternatively, you can pass a collection of specific diagram elements to be removed. This versatile method provides flexibility in managing your diagram's content. The following code example demonstrates how to effectively use the Delete method to remove elements from your diagram. @@ -329,7 +329,7 @@ The [Delete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfD ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/Delete) -## How to reset the zoom +## How to Reset Diagram Zoom Level The [ResetZoom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ResetZoom) method is used to reset the current zoom level of the diagram page to its default value of 100%. This method is particularly useful when the diagram is in a zoomed-in or zoomed-out state, allowing users to quickly return to the standard view. The following code example demonstrates how to implement the ResetZoom method to restore the diagram's default zoom level. ```cshtml @@ -432,7 +432,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram reset zoom methos](images/blazor-diagram-reset-zoom-method.gif) -## How to clear the selection +## How to Clear Selected Items The [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ClearSelection) method is used to deselect all currently selected nodes and connectors in the diagram. This method provides a quick way to reset the selection state of the diagram, allowing for a clean slate before performing new operations or updates. ```cshtml @@ -523,7 +523,7 @@ The [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Dia ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/ClearSelection) -## How to get object in the diagram +## How to Get a Diagram Object by ID The [GetObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_GetObject_System_String_) method in SfDiagramComponent accepts an ID as a parameter and returns an IDiagramObject. You can retrieve a specific connector or node by passing its unique identifier to this method. This powerful functionality allows for easy access and manipulation of diagram elements within your Blazor application. ```cshtml @@ -615,7 +615,7 @@ The [GetObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/GetObjectMethod) -## How to get page bounds of the diagram +## How to Get Page Bounds of the Diagram The [GetPageBounds](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_GetPageBounds_System_Nullable_System_Double__System_Nullable_System_Double__) method is used to retrieve the boundaries of the diagram page. This method allows you to obtain essential page dimensions such as width, height, and other relevant values, enabling precise control over the diagram's layout and positioning. ```cshtml @@ -706,7 +706,7 @@ The [GetPageBounds](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diag ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/GetPageBounds) -## How to select all object in the diagram +## How to Select All Objects in the Diagram The [SelectAll](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectAll) method allows you to select all objects (nodes, connectors, and annotations) in the diagram simultaneously. This feature is particularly useful for performing bulk operations or applying changes to multiple elements at once. ```cshtml @@ -798,7 +798,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/SelectAllMethod) -## How to scale the selected object +## How to Scale Selected Objects The [Scale](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Scale_Syncfusion_Blazor_Diagram_IDiagramObject_System_Double_System_Double_Syncfusion_Blazor_Diagram_DiagramPoint_) method allows you to resize diagram objects proportionally by applying a specified scaling factor. This enables precise control over the size of elements within your diagram. ```cshtml @@ -889,7 +889,7 @@ The [Scale](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDi ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/ScaleMethod) -## How to get custom cursor +## How to Get and Customize Cursor Style The [GetCustomCursor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_GetCustomCursor) method allows you to create and customize your own cursor. You can define the cursor style according to your specific requirements, enhancing user interaction with the diagram component. ```cshtml @@ -964,7 +964,7 @@ The [GetCustomCursor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Di ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/GetCustomCursor) -## How to use the BeginUpdate and EndUpdateAsync +## How to Use BeginUpdate and EndUpdateAsync The [BeginUpdate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_BeginUpdate) method temporarily suspends visual updates to the diagram until the [EndUpdateAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_EndUpdateAsync) method is called. This allows for multiple changes to be made efficiently without triggering unnecessary redraws. When EndUpdateAsync() is invoked, it releases the lock imposed by BeginUpdate(Boolean), resulting in an immediate visual refresh that reflects all accumulated changes to the diagram. ```cshtml @@ -1045,7 +1045,7 @@ The [BeginUpdate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagra ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/BeginAndEndUpdate) -## How to unselect the selected object +## How to Unselect Diagram Elements The [UnSelect](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_UnSelect_Syncfusion_Blazor_Diagram_IDiagramObject_) method is utilized to deselect previously selected objects within the diagram. This functionality allows for precise control over the selection state of diagram elements. ```cshtml @@ -1136,7 +1136,7 @@ The [UnSelect](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.S ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/UnSelectMethod) -## How to clone the diagram +## How to Clone the Diagram The [Clone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Clone) method allows you to create an exact copy of the diagram, including all its nodes, connectors, and properties. This is useful for duplicating diagrams or creating backup versions. @@ -1228,7 +1228,7 @@ The [Clone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDi ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/CloneMethod) -## How to get custom tool +## How to Get Custom Tool The [GetCustomTool](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_GetCustomTool) method enables users to create and implement custom tools, extending the functionality of the diagram component. This powerful feature allows for tailored interactions and specialized behaviors within the diagram. ```cshtml @@ -1431,7 +1431,7 @@ The [GetCustomTool](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diag You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/GetCustomTool) -## How to zoom and pan the diagram +## How to Zoom and Pan Diagrams [Zoom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Zoom_System_Double_Syncfusion_Blazor_Diagram_DiagramPoint_) functionality allows users to magnify or reduce the diagram's view. It enables zooming in to examine details or zooming out for a broader perspective. The [Pan](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Pan_System_Double_System_Double_Syncfusion_Blazor_Diagram_DiagramPoint_) feature facilitates navigation within the diagram by shifting the view horizontally and vertically, providing easy access to different areas of the diagram. @@ -1531,7 +1531,7 @@ The [GetCustomTool](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diag ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/ZoomAndPan) -## How to refresh the datasource +## How to Refresh the Data Source The [RefreshDataSourceAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_RefreshDataSourceAsync) method dynamically updates the diagram layout to reflect any changes made to the underlying data source. This ensures that the visual representation remains synchronized with the most current data. ```cshtml @@ -1612,7 +1612,7 @@ The [RefreshDataSourceAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Bl ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/RefereshDataSource) -## How to get parent of object +## How to Get the Parent Object * The [GetParent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramObject.html#Syncfusion_Blazor_Diagram_DiagramObject_GetParent) method is used to retrieve the parent object of a specific diagram element when invoked. This method is particularly useful for navigating the hierarchy of objects within the diagram structure. @@ -1662,7 +1662,7 @@ The following code illustrates how to set background color for node. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/GetParent) -## How to enable the chunk message +## How to Enable the Chunk Message In the Blazor Diagram component, calculating the bounds of paths, text, images, and SVG data from the server to the JavaScript side using JsInterop calls is crucial. However, when processing large data sets (exceeding 32KB for a single incoming hub message) in a single JS call, connection disconnect issues may arise. To mitigate this problem, we have introduced the [EnableChunkMessages](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_EnableChunkMessages) property in the Diagram component. From 77922076dbd3741839aaaa66a3e53efd26d95997 Mon Sep 17 00:00:00 2001 From: Ramya Date: Mon, 23 Jun 2025 15:53:59 +0530 Subject: [PATCH 06/16] 958831: Update Ug for SEO Changes --- blazor/diagram/interaction.md | 52 +++++++++---------- blazor/diagram/layout/automatic-layout.md | 12 ++--- .../layout/complex-hierarchical-layout.md | 4 +- blazor/diagram/layout/flowchart-layout.md | 18 +++---- blazor/diagram/layout/hierarchical-layout.md | 8 +-- blazor/diagram/layout/organizational-chart.md | 18 +++---- blazor/diagram/layout/radial-tree.md | 4 +- blazor/diagram/migration-classic-to-native.md | 28 +++++----- blazor/diagram/nodes/customization.md | 30 +++++------ blazor/diagram/nodes/events.md | 12 ++--- blazor/diagram/nodes/expand-and-collapse.md | 14 ++--- blazor/diagram/nodes/interaction.md | 10 ++-- blazor/diagram/nodes/nodes.md | 18 +++---- blazor/diagram/nodes/positioning.md | 8 +-- blazor/diagram/overview-component.md | 8 +-- blazor/diagram/page-settings.md | 14 ++--- blazor/diagram/ports/appearance.md | 16 +++--- blazor/diagram/ports/interaction.md | 10 ++-- blazor/diagram/ports/ports.md | 20 +++---- blazor/diagram/ports/positioning.md | 12 ++--- blazor/diagram/print.md | 4 +- blazor/diagram/rulers.md | 4 +- blazor/diagram/scroll-settings.md | 20 +++---- blazor/diagram/serialization.md | 16 +++--- blazor/diagram/shapes.md | 18 +++---- blazor/diagram/style.md | 46 ++++++++-------- blazor/diagram/swimlane/lane/interaction.md | 13 ++--- blazor/diagram/swimlane/lane/lane.md | 10 ++-- blazor/diagram/swimlane/phase.md | 16 +++--- blazor/diagram/swimlane/swimlane-palette.md | 4 +- blazor/diagram/swimlane/swimlane.md | 14 ++--- .../diagram/symbol-palette/customization.md | 38 +++++++------- .../diagram/symbol-palette/symbol-palette.md | 26 +++++----- blazor/diagram/tool-tip.md | 30 +++++------ blazor/diagram/tools.md | 16 +++--- blazor/diagram/undo-redo.md | 18 +++---- blazor/diagram/user-handle.md | 44 ++++++++-------- 37 files changed, 327 insertions(+), 326 deletions(-) diff --git a/blazor/diagram/interaction.md b/blazor/diagram/interaction.md index 34a99255fc..9c030c4d0b 100644 --- a/blazor/diagram/interaction.md +++ b/blazor/diagram/interaction.md @@ -13,7 +13,7 @@ documentation: ug [DiagramSelectionSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramSelectionSettings.html) provides a visual representation of selected elements. It behaves like a container and allows to update the size, position, and rotation angle of the selected elements through interaction and by using program. Single or multiple elements can be selected at a time. -## Single selection +## How to Perform Single Selection An element can be selected by clicking that element. During single click, all previously selected items are cleared. The following image shows how the selected elements are visually represented. @@ -64,11 +64,11 @@ An element can be selected by clicking that element. During single click, all pr ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Interaction/DiagramSelectionEvent) -## Selecting a group +## How to Select a Group When a child element of any group is clicked, its contained group is selected instead of the child element. With consecutive clicks on the selected element, the selection is changed from top to bottom in the hierarchy of the parent group to its children. -## Multiple selection +## How to Perform Multiple Selection Multiple elements can be selected with the following ways: @@ -80,7 +80,7 @@ During a single click, any existing item in the selection list is cleared, and o Clicking and dragging the diagram area allows to create a rectangular region. The elements that are covered under the rectangular region are selected at the end. -## Diagram Element Highlighter +## How to Use the Diagram Element Highlighter The Diagram Element Highlighter feature enhances the selection process by visually distinguishing selected elements and indicating which elements are part of a selection when performing multiple selection actions. @@ -94,13 +94,13 @@ For more information about customizing the Diagram Element Highlighter, refer [C ![Multiple Selection in Blazor Diagram](images/blazor-diagram-multiple-selection.gif) -## Select/Unselect elements using program +## How to Select and Unselect Elements Using Program The [Select](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Select_System_Collections_ObjectModel_ObservableCollection_Syncfusion_Blazor_Diagram_IDiagramObject__System_Nullable_System_Boolean__) and [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ClearSelection) methods help to select or clear the selection of the elements at runtime. Get the currently selected items from the [Nodes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Nodes) and [Connectors](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Connectors) collection of the [SelectionSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectionSettings) property of the diagram model. -## Toggle selection +## How to Toggle Selection of Elements at Runtime You can toggle the selection state of diagram elements, including nodes, connectors, groups, and swimlanes, by clicking on them at runtime. The [CanToggleSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramSelectionSettings.html#Syncfusion_Blazor_Diagram_DiagramSelectionSettings_CanToggleSelection) property in [DiagramSelectionSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramSelectionSettings.html) determines whether the selection state of a diagram element should toggle with a mouse click at runtime. By default, this property is set to false. In the following example, the node can be selected with the first click and unselected with the second click. @@ -136,10 +136,10 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Toggle Selection in Blazor Diagram](images/UnselectSample.gif) -## Select entire elements in diagram programmatically +## How to Select Entire Elements in Diagram Programmatically The [SelectAll](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectAll) method is used to select all the elements such as nodes/connectors in the diagram. Refer to the following link which shows how to use SelectAll method on the diagram. -### How to clone the selected nodes and connector at runtime +### How to Clone Selected Nodes and Connectors at Runtime Clone is a virtual method of the node that is used to create a copy of a diagram object. After cloning, it is necessary to set a unique ID for the cloned nodes and connectors. The following code demonstrates how to clone selected nodes during runtime. ```cshtml @using Syncfusion.Blazor.Diagram @@ -345,7 +345,7 @@ Clone is a virtual method of the node that is used to create a copy of a diagram You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Interaction/CloneSelectedItems) ![Grouping in Blazor Diagram](images/CloneSelection.gif) -### How to Access and Modify the Selected Node and Selected Connector at runtime +### How to Access and Modify Selected Nodes and Connectors at Runtime You can access and update the properties of selected nodes and connectors using the [SelectionSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectionSettings) API in Syncfusion Blazor's [SfDiagramComponent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html). This allows you to respond to user selections and dynamically modify diagram elements at runtime. The following code demonstrates how to access and modify the selected Node and selected connector during runtime. ``` @page "/" @@ -398,7 +398,7 @@ SelectionChanged="OnSelectionChanged"> ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Interaction/SelectedElements) -## Drag +## How to Drag Elements * An object can be dragged by clicking and dragging it. When multiple elements are selected, dragging any one of the selected elements moves every selected element. * When you drag the elements in the diagram, the following events are triggered and do customization on those events. @@ -446,7 +446,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Interaction/DiagramPositionEvent) For more information about dragging, refer [Node Drag](./nodes/interaction#how-to-drag-the-node) -## Resize +## How to Resize Elements * The selector is surrounded by eight thumbs. When dragging these thumbs, selected items can be resized. * When one corner of the selector is dragged, the opposite corner remains in a static position. @@ -499,7 +499,7 @@ For more information about resizing, refer [Node Resize](./nodes/interaction#how N> While dragging and resizing, the objects are snapped towards the nearest objects to make better alignments. For better alignments, refer to [Snapping](./grid-lines#snapping). -## Rotate +## How to Rotate Elements * A rotate handler is placed above the selector. Clicking and dragging the handler in a circular direction lead to rotate the node. * The node is rotated with reference to the static pivot point. @@ -551,11 +551,11 @@ You can download a complete working sample from [GitHub](https://github.com/Sync For more information about resizing, refer [Node Rotate](./nodes/interaction#how-to-rotate-the-node) -## Connection editing +## How to Edit Connector Segments * Each segment of a selected connector is editable with some specific handles/thumbs. -## End point handles +## How to Adjust Connector End Point Handles Source and target points of the selected connectors are represented by two handles. Clicking and dragging those handles help you to adjust the source and target points. @@ -643,7 +643,7 @@ For more information, refer [End Point Dragging](./connectors/interactions#end-p ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Interaction/DiagramConnectionEvent) -## Straight segment editing +## How to Edit Straight Connector Segments * End point of each straight segment is represented by a thumb that enables to edit the segment. * Any number of new segments can be inserted into a straight line by clicking, when Shift and Ctrl keys are pressed (Ctrl+Shift+Click). @@ -651,7 +651,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync For more information about straight segment editing, refer [Straight Segment Editing](./connectors/segments/straight#straight-segment-editing) -## Orthogonal segment editing +## How to Edit Orthogonal Connector Segments * Orthogonal thumbs allow you to adjust the length of adjacent segments by clicking and dragging them. * When necessary, some segments are added or removed automatically, when dragging the segment. This is to maintain proper routing of orthogonality between segments. @@ -727,32 +727,32 @@ You can download a complete working sample from [GitHub](https://github.com/Sync For more information about orthogonal segment editing, refer [Orthogonal Segment Editing](./connectors/segments/orthogonal#orthogonal-segment-editing). -## User handles +## How to Create User Handles * User handles are used to add some frequently used commands around the selector. To create user handles, define and add them to the [UserHandles](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramSelectionSettings.html#Syncfusion_Blazor_Diagram_DiagramSelectionSettings_UserHandles) collection of the [SelectionSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SelectionSettings) property. * The [Name](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Name) property of user handle is used to define the name of the user handle and it is further used to find the user handle at runtime and do any customization. -## How to align the user handle based on the node boundary +## How to Align User Handle Based on Node Boundary User handles can be aligned relative to the node boundaries. It has [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Margin), [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Offset), [Side](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Side), [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_HorizontalAlignment), and [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_VerticalAlignment) settings. It is quite tricky when all four alignments are used together, but gives more control over alignment. -## How to position the user handle +## How to Position User Handle The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Offset) property of a [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html) is used to align the user handle based on fractions. 0 represents top/left corner, 1 represents bottom/right corner, and 0.5 represents half of width/height. -## How to align the user handle based on the connector boundary +## HHow to Align User Handles Based on Connector Boundary The [Side](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Side) property of a [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html) is used to align the user handle by using the [Top](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Direction.html#Syncfusion_Blazor_Diagram_Direction_Top), [Bottom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Direction.html#Syncfusion_Blazor_Diagram_Direction_Bottom), [Left](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Direction.html#Syncfusion_Blazor_Diagram_Direction_Left), and [Right](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Direction.html#Syncfusion_Blazor_Diagram_Direction_Right) options. -## Add Horizontal and vertical alignments to the user handle +## How to Add Horizontal and Vertical Alignment to User Handle The [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_HorizontalAlignment) property of a [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html) is used to set how the user handle is horizontally aligned at the position based on the [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Offset). The [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_VerticalAlignment) property is used to set how user handle is vertically aligned at the position. -## Add Margin to the user handle +## How to Add Margin to User Handle Margin is an absolute value used to add some blank space on any one of its four sides. The [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html) can be displaced with the [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Margin) property. -## Notification for the mouse button clicked +## How to Receive Mouse Button Click Notifications The diagram component notifies the mouse button clicked. For example, whenever the right mouse button is clicked, the clicked button is notified as right. The mouse click is notified with, @@ -797,18 +797,18 @@ The diagram component notifies the mouse button clicked. For example, whenever t ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Interaction/MouseClick) -## Appearance of the user handle +## How to Customize the Appearance of User Handle The appearance of the user handle can be customized by using the [Size](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Size), [BorderColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_BorderColor), [BackgroundColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_BackgroundColor), [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Visible), [PathData](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_PathData), and [PathColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_PathColor) properties of the [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html). -## Zoom pan the diagram +## How to Zoom and Pan the Diagram * When a large diagram is loaded, only certain portion of the diagram is visible. The remaining portions are clipped. Clipped portions can be explored by scrolling the scrollbars or panning the diagram. * The diagram can be zoomed in or out by using Ctrl + mouse wheel. ![Zoom Pan in Blazor Diagram](images/blazor-diagram-zoom-pan.gif) -## Keyboard shortcuts +## How to Use Keyboard Shortcuts to Interact Diagram provides support to interact with elements with key gestures. By default, some in-built commands are bound with a relevant set of key combinations. diff --git a/blazor/diagram/layout/automatic-layout.md b/blazor/diagram/layout/automatic-layout.md index f684af2625..443b56a688 100644 --- a/blazor/diagram/layout/automatic-layout.md +++ b/blazor/diagram/layout/automatic-layout.md @@ -90,7 +90,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Complex Hierarchical Diagram](../images/BasicLayout.png) -## Updating layout +## How to Update Layout The DoLayoutAsync function is used to re-arrange the nodes in the diagram area whenever any of the following occur: @@ -107,7 +107,7 @@ This function refreshes the layout dynamically to reflect these updates. By invo The function can be called on-demand, making it flexible for use in scenarios where automatic layout updates are required only at specific times, such as after multiple changes or interactions. -## Configuring Spacing in Layouts +## How to Configure Spacing in Layouts The [HorizontalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_HorizontalSpacing) and [VerticalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_VerticalSpacing) properties of layouts are used to customize the space between successive nodes in the diagram, both horizontally and vertically. These properties help control the overall layout and visual organization of nodes, ensuring clear and consistent spacing across the diagram. @@ -141,7 +141,7 @@ The default value for Horizontal Spacing is 30, and the default value for Vertic ![Blazor Complex Hierarchical Diagram](../images/LayoutSpacing.png) -## Configuring Orientation for Layouts +## How to Configure Layout Orientation [Orientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Orientation) is used to arrange the layout based on the direction. It determines how the nodes are aligned in the diagram. The default value for orientation is [TopToBottom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutOrientation.html#Syncfusion_Blazor_Diagram_LayoutOrientation_TopToBottom), which arranges the nodes vertically with the root placed at the top. @@ -168,7 +168,7 @@ The default value for Horizontal Spacing is 30, and the default value for Vertic >**Note:** [Orientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Orientation) is not applicable to [RadialTree](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutType.html#Syncfusion_Blazor_Diagram_LayoutType_RadialTree) layout. For [Flowchart](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutType.html#Syncfusion_Blazor_Diagram_LayoutType_Flowchart) layout, only [TopToBottom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutOrientation.html#Syncfusion_Blazor_Diagram_LayoutOrientation_TopToBottom) and [LeftToRight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutOrientation.html#Syncfusion_Blazor_Diagram_LayoutOrientation_LeftToRight) orientations are supported. -## Configuring Layout Alignments +## How to Configure Layout Alignments [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_HorizontalAlignment) and [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_VerticalAlignment) properties control how the layout is positioned or stretched along the horizontal and vertical axes, respectively. These settings determine the positioning of the diagram elements (nodes and connectors) within the available space. @@ -226,7 +226,7 @@ The possible values for VerticalAlignment are: ``` ![Blazor Complex Hierarchical Diagram](../images/LayoutVerticalAlignmentBottom.png) -## Configuring the Layout Margin +## How to Configure Layout Margins The [LayoutMargin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Margin) property defines the space between the viewport and the layout, creating a space around the diagram. The default margin is left: 50, top: 50, right: 0, bottom: 0. @@ -248,7 +248,7 @@ You can customize the margin for each side (top, right, bottom, left) using the } ``` -## Handling Connector Segment Overlap in Layout +## How to Handle Connector Overlap in Layout The [SamePoint](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_SamePoint) property controls whether connectors in the layout should be arranged without overlapping other connectors. By setting this property to true, the diagram ensures that connectors are spaced out properly to avoid any overlap, making the layout more readable and visually clear. diff --git a/blazor/diagram/layout/complex-hierarchical-layout.md b/blazor/diagram/layout/complex-hierarchical-layout.md index d9e1eff1e6..7c246dcb6f 100644 --- a/blazor/diagram/layout/complex-hierarchical-layout.md +++ b/blazor/diagram/layout/complex-hierarchical-layout.md @@ -77,7 +77,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Complex Hierarchical Diagram](../images/blazor-diagram-complex.png) -### How to enable/disable line distribution +### How to Enable or Disable Line Distribution Line distribution is used to arrange the connectors without overlapping in automatic layout. In some cases, the automatic layout connectors connecting to the nodes will be overlapped with one another. So, the user can decide whether the segment of each connector from a single parent node should be at the same point or a different point. The [SamePoint](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_SamePoint) property of the layout is used to enable or disable the line distribution in the layout. By default the value is true. @@ -152,7 +152,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** In the DataSourceSettings, the type of the ID and ParentID properties is string. The provided DataSource should have a parent-child relationship. It is necessary for at least one node to have an empty ParentID. -### How to enable/disable linear arrangement +### How to Enable or Disable Linear Arrangement Linear arrangement is used to arrange the child nodes in a linear manner in the layout, where the parent node is placed in the center, corresponding to its children. When line distribution is enabled, the linear arrangement is also activated by default. The [LinearArrangement](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_LinearArrangement) property of the layout is used to enable or disable the linear arrangement in the layout. By default, the value is false. The following code illustrates how to arrange the nodes in non linear manner. diff --git a/blazor/diagram/layout/flowchart-layout.md b/blazor/diagram/layout/flowchart-layout.md index 4ea5ebd259..735cec3582 100644 --- a/blazor/diagram/layout/flowchart-layout.md +++ b/blazor/diagram/layout/flowchart-layout.md @@ -1,17 +1,17 @@ --- layout: post -title: Flowchart layout in Blazor Diagram Component | Syncfusion +title: Flowchart Layout in Blazor Diagram Component | Syncfusion description: Learn here all about how to create flowchart layout in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Flowchart layout in Blazor Diagram Component +# Flowchart Layout in Blazor Diagram Component The flowchart layout provides a visual representation of processes, workflows, systems, or algorithms in a diagrammatic format. It uses various symbols to depict different actions, with arrows connecting these symbols to indicate the flow or direction of the process. Flowcharts are essential tools for illustrating step-by-step sequences, making complex processes easier to understand and communicate. -## Common flowchart symbols +## How to Use Common Flowchart Symbols Different flowchart symbols have different meanings that are used to represent various states in flowchart. The following table describes the most common flowchart symbols that are used in creating flowchart. @@ -212,11 +212,11 @@ Different flowchart symbols have different meanings that are used to represent v You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Layout/FlowchartLayout/FlowchartLayout). -## How to customize flowchart layout orientation +## How to Customize Flowchart Layout Orientation The sequence of a node's direction can be customized by flowchart's orientation, either vertically from top to bottom or horizontally from left to right. The [Orientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Orientation) property of the layout class allows you to define the flow direction for the flowchart as either [TopToBottom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutOrientation.html#Syncfusion_Blazor_Diagram_LayoutOrientation_TopToBottom) or [LeftToRight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LayoutOrientation.html#Syncfusion_Blazor_Diagram_LayoutOrientation_LeftToRight). -### TopToBottom orientation +### How to Arrange Layout Using TopToBottom Orientation This orientation arranges elements in the layout vertically, flowing from top to bottom. It is commonly used in flowcharts to represent the sequential progression of steps or actions in a process. @@ -230,7 +230,7 @@ This orientation arranges elements in the layout vertically, flowing from top to ``` ![Blazor Flowchart layout diagram](../images/Flowchart_Layout.png) -### LeftToRight orientation +### How to Arrange Layout Using LeftToRight Orientation This orientation arranges elements in the layout horizontally, flowing from left to right. It is typically used to represent processes or workflows that move sequentially across the page, emphasizing a linear progression of steps or actions. @@ -244,7 +244,7 @@ This orientation arranges elements in the layout horizontally, flowing from left ``` ![Blazor Flowchart layout diagram](../images/Flowchart_LeftToRight.png) -## How to customize the decision output directions +## How to Customize Decision Output Directions The decision symbol in a flowchart represents a question or condition that leads to different paths based on a binary outcome (Yes/No, True/False). You can customize the output direction of these paths using the [YesBranchDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html#Syncfusion_Blazor_Diagram_FlowchartLayoutSettings_YesBranchDirection) and [NoBranchDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html#Syncfusion_Blazor_Diagram_FlowchartLayoutSettings_NoBranchDirection) properties of the [FlowchartLayoutSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html) class. @@ -268,7 +268,7 @@ The following table will explain the pictorial representation of the behavior: You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Layout/FlowchartLayout/FlowchartLayoutSettings). -### Custom Yes and No branch values +### How to Define Custom Yes and No Branch Values The decision symbol will produce two branches as output, which will be **Yes** branch and **No** branch. If the output branch connector text value matches the values in the [YesBranchValues](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html#Syncfusion_Blazor_Diagram_FlowchartLayoutSettings_YesBranchValues) property of [FlowchartLayoutSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html) class, it will be considered as the **Yes** branch. Similarly, if the connector text value matches the values in the [NoBranchValues](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html#Syncfusion_Blazor_Diagram_FlowchartLayoutSettings_NoBranchValues) property, it will be considered as the **No** branch. By default, the [YesBranchValues](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html#Syncfusion_Blazor_Diagram_FlowchartLayoutSettings_YesBranchValues) property contains **Yes** and **True** string values and the [NoBranchValues](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowchartLayoutSettings.html#Syncfusion_Blazor_Diagram_FlowchartLayoutSettings_NoBranchValues) property contains **No** and **False** string values. @@ -423,6 +423,6 @@ Any text value can be given as a connector text to describe the flow. Also, any You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Layout/FlowchartLayout/CustomYesOrNoBranch). -## How to update the spacing between nodes +## How to Update Spacing Between Nodes You can control the spacing between nodes in your diagram layout using the [HorizontalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_HorizontalSpacing) and [VerticalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_VerticalSpacing) properties of the layout class. These properties allow you to adjust the distance between nodes both horizontally and vertically, giving you precise control over the appearance and organization of your diagram. \ No newline at end of file diff --git a/blazor/diagram/layout/hierarchical-layout.md b/blazor/diagram/layout/hierarchical-layout.md index 57cb4adaef..1c59ced790 100644 --- a/blazor/diagram/layout/hierarchical-layout.md +++ b/blazor/diagram/layout/hierarchical-layout.md @@ -156,9 +156,9 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** In the DataSourceSettings, the type of the ID and ParentID properties is string. The provided DataSource should have a parent-child relationship. It is necessary for at least one node to have an empty ParentID. -## Customizing the properties +## Customizing the Properties -### How to change orientation +### How to Change Orientation You can use the [Orientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Orientation) property of the Layout to change the orientation at runtime. The following code shows how to change the layout. @@ -177,7 +177,7 @@ public void UpdateOrientation() } ``` -### How to update the spacing between nodes +### How to Update Spacing Between Nodes You can change the horizontal and vertical spacing for the diagram layout by using the [HorizontalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_HorizontalSpacing) and [VerticalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_VerticalSpacing) properties of the layout. @@ -200,7 +200,7 @@ public void UpdateSpacing() } ``` -### How to update the margin +### How to Update Margin You can also change the margin values for the diagram layout by using the [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Margin) property. diff --git a/blazor/diagram/layout/organizational-chart.md b/blazor/diagram/layout/organizational-chart.md index 1e6f9022c1..de02bda3f3 100644 --- a/blazor/diagram/layout/organizational-chart.md +++ b/blazor/diagram/layout/organizational-chart.md @@ -115,17 +115,17 @@ Organizational chart layout starts parsing from root and iterates through all it >**Note:** In the DataSourceSettings, the type of the ID and ParentID properties is string. The provided DataSource should have a parent-child relationship. It is necessary for at least one node to have an empty ParentID. -## Customize layout +## How to Customize Layout Orientation, spacings, and position of the layout can be customized with a set of properties. To explore layout properties, refer to `Layout Properties`. -### How to update the Layout bounds +### How to Update Layout Bounds Diagram provides support to align the layout within any custom rectangular area. For more information about bounds, refer to [Bounds](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Bounds). -### How to align Layout +### How to Align Layout The layout can be aligned anywhere over the layout bounds/viewport using the [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_HorizontalAlignment) and [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_VerticalAlignment) properties of the layout. @@ -227,11 +227,11 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Organization Diagram ChildNode in Vertical Right](../images/blazor-diagram-childnode-at-vertical-right.png) -### How to update the Layout spacing +### How to Update Layout Spacing Layout provides support to add space horizontally and vertically between the nodes. The [HorizontalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_HorizontalSpacing) and [VerticalSpacing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_VerticalSpacing) properties of the layout allow you to set the space between the nodes horizontally and vertically. -### How to update the Layout margin +### How to Update Layout Margin Layout provides support to add some blank space between the layout bounds/viewport and the layout. The [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_Margin) property of the layout allows you to set the blank space. @@ -250,7 +250,7 @@ Layout provides support to add some blank space between the layout bounds/viewpo } ``` -### How to change orientation +### How to Change Orientation Diagram provides support to customize the `Orientation` of the layout. You can set the desired orientation using `LayoutOrientation`. @@ -268,7 +268,7 @@ The following code illustrates how to arrange the nodes in a BottomToTop orienta } ``` -### Fixed node +### How to Set a Fixed Node Position Layout provides support to arrange the nodes with reference to the position of a fixed node and set it to the [FixedNode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_FixedNode) of the layout property. This is helpful when you try to expand/collapse a node. It might be expected that the position of the double-clicked node should not be changed. @@ -288,7 +288,7 @@ Layout provides support to arrange the nodes with reference to the position of a ``` -## Assistant +## How to Add Assistant [Assistants](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TreeInfo.html#Syncfusion_Blazor_Diagram_TreeInfo_Assistants) are child items that have a different relationship with the parent node. They are laid out in a dedicated part of the tree. A node can be specified as an assistant of its parent by adding it to the assistants property of the argument `Assistants`. @@ -368,7 +368,7 @@ The following code example illustrates how to add assistants to the layout. } ``` -## How to refresh the layout +## How to Refresh the Layout Diagram allows you to refresh the layout at runtime by using the [DoLayoutAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DoLayoutAsync) method. Use the following code example to refresh the layout. diff --git a/blazor/diagram/layout/radial-tree.md b/blazor/diagram/layout/radial-tree.md index 8b3ad4d9ee..db613ca669 100644 --- a/blazor/diagram/layout/radial-tree.md +++ b/blazor/diagram/layout/radial-tree.md @@ -15,7 +15,7 @@ The `RadialTree` layout provides support for adding space between the nodes. The >**Note:** The radial tree structure used in this context does not accommodate nodes with multiple parents. Each node within the tree is intended to have a single parent, maintaining a clear hierarchical relationship. -## How to create a RadialTree with DataSource +## How to Create a Radial Tree Using DataSource You can create a radial tree layout with a DataSource. The following code example illustrates how to create a radial tree layout using a data source. @@ -147,7 +147,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** In the DataSourceSettings, the type of the ID and ParentID properties is string. The provided DataSource should have a parent-child relationship. It is necessary for at least one node to have an empty ParentID. -## How to create a RadialTree with nodes and connectors +## How to Create a Radial Tree Using Nodes and Connectors You can render a radial tree layout without using a Datasource. The following code demonstrates how to render a radial tree layout without using a DataSource. diff --git a/blazor/diagram/migration-classic-to-native.md b/blazor/diagram/migration-classic-to-native.md index 3a09333e99..fa5a42c410 100644 --- a/blazor/diagram/migration-classic-to-native.md +++ b/blazor/diagram/migration-classic-to-native.md @@ -1,23 +1,23 @@ --- layout: post -title: Migration from SfDiagram(classic) to SfDiagramComponent | Syncfusion +title: Migration from SfDiagram(classic) to SfDiagram Component Control| Syncfusion description: Learn how to migrate the SfDiagram to SfDiagramComponent in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Migration from the SfDiagram(classic) to SfDiagramComponent control +# Migrating from SfDiagram(Classic) to SfDiagram Component Control This comprehensive guide outlines the step-by-step API migration process for transitioning from the classic SfDiagram to the modern SfDiagramComponent in Blazor applications. It provides detailed instructions, code examples, and best practices to ensure a smooth upgrade experience. -## NuGet packages +## NuGet Packages | Package for SfDiagram | Package for SfDiagramComponent | | -------- | -------- | | [Syncfusion.Blazor.Diagrams](https://www.nuget.org/packages/Syncfusion.Blazor.Diagrams/#%22%22) | [Syncfusion.Blazor.Diagram](https://www.nuget.org/packages/Syncfusion.Blazor.Diagram/#%22%22) | -## Namespace changes +## Namespace Changes | Control | Namespace for SfDiagram | Namespace for SfDiagramComponent | | -------- | -------- | -------- | @@ -30,7 +30,7 @@ This comprehensive guide outlines the step-by-step API migration process for tra The `SfDiagramComponent` Blazor component offers superior performance compared to the `SfDiagram` Blazor control, especially in Blazor WebAssembly applications. * Users who need to programmatically interact with diagram elements for their business logic or specific requirements often prefer C# code for these operations. However, the Syncfusion® EJ2 Diagram is primarily written in TypeScript. In Blazor applications, synchronizing each interaction from the client browser to C# code requires JSInterop calls, which can significantly impact performance. To overcome this performance bottleneck, a separate native Blazor diagram component has been developed, eliminating the need for frequent JSInterop calls and enhancing overall efficiency. -## Feature wise API difference between SfDiagram(classic) and SfDiagramComponent +## Feature wise API difference between SfDiagram(classic) and SfDiagram Component ### Node @@ -128,7 +128,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | Sets a Margin property for the port | **Property:** *Nodes[i].Ports[i].Margin*

``
`@code`
`{`
 `public ObservableCollection NodeCollection = new ObservableCollection();`
 `protected override void OnInitialized()`
 `{`
  `DiagramNode node1 = new DiagramNode()`
  `{`
   `Id = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Width = 100,`
   `Height = 100,`
   `Ports = new ObservableCollection()`
   `{`
    `new DiagramPort()`
    `{`
     `Id = "Port1", Margin = new PortMargin(){ Bottom = 10 }, Offset = new NodePortOffset(){ X = 0, Y=0 }, Visibility = PortVisibility.Visible`
    `}`
   `}`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| **Property:** *Nodes[i].Ports[i].Margin*

``
`@code`
`{`
 `public DiagramObjectCollection NodeCollection = new DiagramObjectCollection();`
 `protected override void OnInitialized()`
 `{`
  `Node node1 = new Node()`
  `{`
   `Height = 100,`
   `Width = 100,`
   `ID = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Ports = new DiagramObjectCollection()`
   `{`
    `new PointPort()`
    `{`
     `ID = "Port1", Margin= new DiagramThickness(){ Bottom =10}, Offset = new DiagramPoint(){ X = 0, Y=0 }, Visibility = PortVisibility.Visible`
    `}`
   `}`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| | Sets a Style property for the port | **Property:** *Nodes[i].Ports[i].Style*

``
`@code`
`{`
 `public ObservableCollection NodeCollection = new ObservableCollection();`
 `protected override void OnInitialized()`
 `{`
  `DiagramNode node1 = new DiagramNode()`
  `{`
   `Id = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Width = 100,`
   `Height = 100,`
   `Ports = new ObservableCollection()`
   `{`
    `new DiagramPort()`
    `{`
     `Style = new PortShapeStyle() { Fill = "red", Opacity = 1, StrokeColor="black", StrokeDashArray="2,2", StrokeWidth = 3 }, Offset = new NodePortOffset(){ X = 0, Y=0 }, Visibility = PortVisibility.Visible`
    `}`
   `}`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| **Property:** *Nodes[i].Ports[i].Style*

``
`@code`
`{`
 `public DiagramObjectCollection NodeCollection = new DiagramObjectCollection();`
 `protected override void OnInitialized()`
 `{`
  `Node node1 = new Node()`
  `{`
   `Height = 100,`
   `Width = 100,`
   `ID = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Ports = new DiagramObjectCollection()`
   `{`
    `new PointPort()`
    `{`
     `ID = "Port1", Style = new ShapeStyle() { Fill = "red", Opacity = 1, StrokeColor="black", StrokeDashArray="2,2", StrokeWidth = 3 }, Offset = new DiagramPoint(){ X = 0, Y=0 }, Visibility = PortVisibility.Visible`
    `}`
   `}`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| -#### Fixed User handle for Node +#### Fixed User Handle for Node | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -151,7 +151,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | Sets a Padding property for expand icon | **Property:** *Nodes[i].ExpandIcon.Padding*

``
`@code`
`{`
 `public ObservableCollection NodeCollection = new ObservableCollection();`
 `protected override void OnInitialized()`
 `{`
  `DiagramNode node1 = new DiagramNode()`
  `{`
   `Id = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Width = 100,`
   `Height = 100,`
   `ExpandIcon = new NodeExpandIcon()`
   `{`
    `Shape = IconShapes.Minus, Padding = new IconPadding() { Bottom = 10 } }`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| **Property:** *Nodes[i].ExpandIcon.Padding*

``
`@code`
`{`
 `public DiagramObjectCollection NodeCollection = new DiagramObjectCollection();`
 `protected override void OnInitialized()`
 `{`
  `Node node1 = new Node()`
  `{`
   `Height = 100,`
   `Width = 100,`
   `ID = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `ExpandIcon = new DiagramExpandIcon()`
   `{`
    `Shape = DiagramExpandIcons.Minus, Padding = new DiagramThickness() { Bottom = 10 } }`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| | Sets a custom content for an icon | **Property:** *Nodes[i].ExpandIcon.Content*

``
`@code`
`{`
 `public ObservableCollection NodeCollection = new ObservableCollection();`
 `protected override void OnInitialized()`
 `{`
  `DiagramNode node1 = new DiagramNode()`
  `{`
   `Id = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Width = 100,`
   `Height = 100,`
   `ExpandIcon = new NodeExpandIcon()`
   `{`
    `Content = "
Custom Content
", Shape = IconShapes.Template }`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}`| **Property:** *DiagramTemplates.DiagramExpandIconTemplate*

``
 ``
  ``
  `@{`
   `if (context.Height != 0 && context.Width != 0)`
   `{`
   `
`
   `}`
  `}`
  `
`
 `
`
`
`
`@code`
`{`
 `public DiagramObjectCollection NodeCollection = new DiagramObjectCollection();`
 `protected override void OnInitialized()`
 `{`
  `Node node1 = new Node()`
  `{`
   `Height = 100,`
   `Width = 100,`
   `ID = "node",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `ExpandIcon = new DiagramExpandIcon()`
   `{`
    `Shape = DiagramExpandIcons.Template, Padding = new DiagramThickness() { Bottom = 10 } }`
  `};`
  `NodeCollection.Add(node1);`
 `}`
`}` | -#### CollapseIcon for Node +#### Collapse Icon for Node | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -294,7 +294,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | Specifies the edge attraction and vertex repulsion forces | **Property:** *Layout.SpringFactor*

``
 ``
 `
`
`
`
`@code`
`{`
 `DiagramLayout LayoutValue = new DiagramLayout() { };`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `protected override void OnInitialized()`
 `{`
  `LayoutValue = new DiagramLayout()`
  `{`
   `Type = LayoutType.HierarchicalTree,`
   ` SpringFactor = 10`
  `};`
 `}`
`}` | Not supported | | Specifies the edge length of the layout | **Property:** *Layout.SpringLength*

``
 ``
 `
`
`
`
`@code`
`{`
 `DiagramLayout LayoutValue = new DiagramLayout() { };`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `protected override void OnInitialized()`
 `{`
  `LayoutValue = new DiagramLayout()`
  `{`
   `Type = LayoutType.HierarchicalTree,`
   `SpringLength = 10`
  `};`
 `}`
`}` | Not supported | -### DataSource +### Data Source | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -303,13 +303,13 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | Specifies the property that will be used to find the parent and child relationship of the data source | **Property:** *DiagramDataSource.ParentId*

``
 ``
 `
`
`
`
`@code`
`{`
 `DiagramLayout LayoutValue = new DiagramLayout() { };`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `protected override void OnInitialized()`
 `{`
  `LayoutValue = new DiagramLayout()`
  `{`
   `Type = LayoutType.HierarchicalTree, VerticalSpacing = 30, HorizontalSpacing = 30`
  `};`
 `}`
`}` | **Property:** *DataSourceSettings.ParentID*

``
 ``
 ``
`
`
`@code`
`{`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
`}` | | Specifies the primary node of the layout from the data source | **Property:** *DiagramDataSource.Root*

``
 ``
 `
`
`
`
`@code`
`{`
 `DiagramLayout LayoutValue = new DiagramLayout() { };`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `protected override void OnInitialized()`
 `{`
  `LayoutValue = new DiagramLayout()`
  `{`
   `Type = LayoutType.HierarchicalTree, VerticalSpacing = 30, HorizontalSpacing = 30`
  `};`
 `}`
`}` | **Property:** *DataSourceSettings.Root*

``
 ``
 ``
`
`
`@code`
`{`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
`}` | -### DiagramDataMapSettings +### Diagram Data Map Settings | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | | Specifies to mapping the collection of local data from data source fields | **Property:** *DiagramDataSource.DiagramDataMapSettings*

``
 ``
  ``
   ``
   ``
   ``
  `
`
 `
`
`
`
`@code`
`{`
 `DiagramLayout LayoutValue = new DiagramLayout() { };`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `protected override void OnInitialized()`
 `{`
  `LayoutValue = new DiagramLayout()`
  `{`
   `Type = LayoutType.HierarchicalTree, VerticalSpacing = 30, HorizontalSpacing = 30`
  `};`
 `}`
`}` | **Property:** Using the *NodeCreating* method to mapping from the data source fields to node

``
 ``
 ``
`
`
`@code`
`{`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `public void OnNodeCreating(IDiagramObject obj)`
 `{`
  `if (obj is Node)`
  `{`
   `Node node = obj as Node;`
   `HierarchicalDetails hierarchicalDetailsData = System.Text.Json.JsonSerializer.Deserialize(node.Data.ToString(), options);`
   `node.Style = new TextStyle() { Fill = hierarchicalDetailsData.FillColor, StrokeColor = hierarchicalDetailsData.FillColor, Color = "white", StrokeWidth = 2, };`
   `node.BackgroundColor = "#659be5";`
   `node.Shape = new TextShape() { Type = NodeShapes.Text, Content = hierarchicalDetailsData.Name };`
   `node.Margin = new DiagramThickness() { Left = 10, Right = 10, Bottom = 10, Top = 10 };`
 `}`
 `public void OnConnectorCreating(IDiagramObject obj)`
 `{`
  `if (obj is Connector)`
  `{`
   `Connector connector = obj as Connector;`
   `connector.Type = ConnectorSegmentType.Orthogonal;`
   `connector.Style = new ShapeStyle() { StrokeColor = "#6d6d6d", StrokeWidth = 1 };`
  `}`
 `}`
`}` | -### PageSettings +### Page Settings | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -353,7 +353,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | -------- | -------- | -------- | | Notifies when a change is reverted or restored | Not supported |**Property** *DiagramHistoryManager.Undo and DiagramHistoryManager.Redo*
``
 ``
`
`
`@code`
`{`
 `private void onCustomUndo(HistoryEntryBase entry)`
 `{`
  `(entry.RedoObject) = entry.UndoObject.Clone() as Node;`
  `(entry.UndoObject as Node).AdditionalInfo[(entry.UndoObject as Node).ID] = "Start";`
  `entry.RedoObject = current;`
 `}`

 `private void onCustomRedo(HistoryEntryBase entry)`
 `{`
  `Node current = entry.UndoObject.Clone() as Node;`
  `(entry.UndoObject as Node).AdditionalInfo[(entry.UndoObject as Node).ID] = "Description";`
  `entry.RedoObject = current;`
 `}`
`}` | -### SelectedItems +### Selected Items | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -371,7 +371,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | -------- | -------- | -------- | | Defines the background color of the diagram | **Property:** *BackgroundColor*

`` | **Property:** *PageSettings.BackgroundStyle.Background*

``
  ``
    ``
  `
`
`
` | -### AddInfo for diagram +### Add Info for diagram | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -426,7 +426,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | -------- | -------- | -------- | | Provides a way to change the properties of all shapes that have been assigned to that layer | **Property:** *Layers*

``
`@code`
`{`
 `public ObservableCollection NodeCollection = new ObservableCollection();`
 `public ObservableCollection Layers = new ObservableCollection() { };`
 `protected override void OnInitialized()`
 `{`
  `DiagramNode node1 = new DiagramNode()`
  `{`
   `Id = "node1",`
   `OffsetX = 300,`
   `OffsetY = 288,`
   `Width = 100,`
   `Height = 100,`
  `};`
  `NodeCollection.Add(node1);`
  `string[] objects = new string[] { "node1" };`
 `Layers.Add(new DiagramLayer() { Id = "Layer1", Visible = true, Objects = objects, Lock = true });`
 `}`
`}`| Not supported | -### SerializationSettings +### Serialization Settings | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | @@ -490,7 +490,7 @@ The `SfDiagramComponent` Blazor component offers superior performance compared t | -------- | -------- | -------- | | Defines the overview control | **Property:** *SfOverview*

``
 ``
  ``
   ``
   ``
   ``
  `
`
 `
`
`
`
``
`@code`
`{`
 `DiagramLayout LayoutValue = new DiagramLayout() { };`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `protected override void OnInitialized()`
 `{`
  `LayoutValue = new DiagramLayout()`
  `{`
   `Type = LayoutType.HierarchicalTree, VerticalSpacing = 30, HorizontalSpacing = 30`
  `};`
 `}`
`}` | **Property:** *SfDiagramOverviewComponent*

``
 ``
 ``
`
`
``
`@code`
`{`
 `public class HierarchicalDetails`
 `{`
  `public string Name { get; set; }`
  `public string FillColor { get; set; }`
  `public string Category { get; set; }`

 `}`
 `public List DataSource = new List()`
 `{`
  `new HierarchicalDetails(){ Name ="Diagram", Category="",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Layout", Category="Diagram",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Tree layout", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Organizational chart", Category="Layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Hierarchical tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Radial tree", Category="Tree layout",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Mind map", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Family tree", Category="Hierarchical tree",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Management", Category="Organizational chart",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Human resources", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="University", Category="Management",FillColor="#659be5"},`
  `new HierarchicalDetails(){ Name ="Business", Category="#Management",FillColor="#659be5"}`
 `};`
 `public void OnNodeCreating(IDiagramObject obj)`
 `{`
  `if (obj is Node)`
  `{`
   `Node node = obj as Node;`
   `HierarchicalDetails hierarchicalDetailsData = System.Text.Json.JsonSerializer.Deserialize(node.Data.ToString(), options);`
   `node.Style = new TextStyle() { Fill = hierarchicalDetailsData.FillColor, StrokeColor = hierarchicalDetailsData.FillColor, Color = "white", StrokeWidth = 2, };`
   `node.BackgroundColor = "#659be5";`
   `node.Shape = new TextShape() { Type = NodeShapes.Text, Content = hierarchicalDetailsData.Name };`
   `node.Margin = new DiagramThickness() { Left = 10, Right = 10, Bottom = 10, Top = 10 };`
 `}`
 `public void OnConnectorCreating(IDiagramObject obj)`
 `{`
  `if (obj is Connector)`
  `{`
   `Connector connector = obj as Connector;`
   `connector.Type = ConnectorSegmentType.Orthogonal;`
   `connector.Style = new ShapeStyle() { StrokeColor = "#6d6d6d", StrokeWidth = 1 };`
  `}`
 `}`
`}` | -### Symbol palette +### Symbol Palette | Behavior | API in SfDiagram | API in SfDiagramComponent | | -------- | -------- | -------- | diff --git a/blazor/diagram/nodes/customization.md b/blazor/diagram/nodes/customization.md index 372bccc690..acaeb82540 100644 --- a/blazor/diagram/nodes/customization.md +++ b/blazor/diagram/nodes/customization.md @@ -53,7 +53,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_ID) for each node should be unique and so it is further used to find the node at runtime and do any customization. -## How to update values in common to all nodes +## How to Update Common Node Properties Using the NodeCreating Event Default values for all the Nodes can be set using the [NodeCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_NodeCreating) method. For example, if all nodes have the same type or property then such properties can be moved into NodeCreating method. @@ -107,7 +107,7 @@ The following code shows how to customize the appearance of the shape. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Appearance/NodeDefaultSample) -## How to update template for the nodes +## How to Update Node Templates You can define node style using template in [NodeTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTemplates.html#Syncfusion_Blazor_Diagram_DiagramTemplates_NodeTemplate) at tag level. If you want to define separate template for each node, differentiate the nodes by the ID property. The following code explains how to define template for a node. @@ -192,7 +192,7 @@ N> In the above example, node's background color is updated using the click even ![Blazor Diagram with Node Template](../images/blazor-diagram-node-template.gif) -## How to update style for nodes in common +## How to Update Common Node Styles The [SetNodeTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SetNodeTemplate) method of diagram allows you to define the style for the Node. The following code demonstrates how to set different styles for different nodes through the SetNodeTemplate method. @@ -307,7 +307,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram with SetNodeTemplate](../images/blazor-diagram-set-node-template.png) -## How to update shadow to a node +## How to Update Node Shadow Diagram provides support to add [Shadow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Shadow.html) effect to a node that is disabled, by default. It can be enabled with the constraints property of the node. The following code shows how to draw shadow. @@ -351,7 +351,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Node with shadow](../images/blazor-diagram-node-shadow.png) -### How to customize shadow to a node +### How to Customize Node Shadow The [Angle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Shadow.html#Syncfusion_Blazor_Diagram_Shadow_Angle), [Distance](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Shadow.html#Syncfusion_Blazor_Diagram_Shadow_Distance), and [Opacity](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Shadow.html#Syncfusion_Blazor_Diagram_Shadow_Opacity) of the shadow can be customized with the shadow property of the node. The following code example illustrates how to customize shadow. @@ -399,7 +399,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Node with Custom Shadow](../images/blazor-diagram-node-custom-shadow.png) -## How to apply gradient style +## How to Apply Gradient Style The [Gradient](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeStyle.html#Syncfusion_Blazor_Diagram_ShapeStyle_Gradient) property of the node allows you to define and apply the gradient effect to the node. The gradient stops property defines the color and a position, where the previous color transition ends and a new color transition starts. The gradient stop’s opacity property defines the transparency level of the region. @@ -409,7 +409,7 @@ There are two types of gradients as follows: * RadialGradientBrush -### How to apply linear gradient brush +### How to Apply Linear Gradient Brush [LinearGradientBrush](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LinearGradientBrush.html) defines a smooth transition between a set of colors (so-called stops) in a line. A linear gradient’s X1, Y1, X2, Y2 properties are used to define the position (relative to the node) of the rectangular region that needs to be painted. @@ -461,7 +461,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Node with LinearGradient](../images/blazor-diagram-node-linear-gradient.png) -### How to apply radial gradient brush +### How to Apply Radial Gradient Brush [RadialGradientBrush](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.RadialGradientBrush.html) defines a smooth transition between stops on a circle. The radial gradient brush properties are used to define the position (relative to the node) of the outermost or the innermost circle of the radial gradient. @@ -519,7 +519,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Node with RadialGradient](../images/blazor-diagram-node-radial-gradient.png) -## How to add additional information for node +## How to Add Additional Information for a Node The [AdditionalInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_AdditionalInfo) property of the node allows you to maintain additional information to the node. @@ -564,7 +564,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync **Note:** You can set any type of value for the AdditionalInfo property. -## How to set ZIndex property for node +## How to Set ZIndex Property for a Node * The node's [ZIndex](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_ZIndex) property specifies the stack order of the node. A node with a greater stack order is always in front of a node with a lower stack order. By default, the value is -1. @@ -626,7 +626,7 @@ The following code illustrates how to render nodes based on the stack order. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Appearance/ZIndexProperty) -## How to set pivot property for node +## How to Set Pivot Property for a Node * Node rotation angle will be based on [Pivot](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Pivot) values which range from 0 to 1 like offset values. By default, the Pivot values are set to X= 0.5 and Y=0.5. @@ -672,7 +672,7 @@ The following code illustrates how to set the Pivot value. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Appearance/PivotProperty) -## How to set background color for node +## How to Set Background Color for a Node * The node's [BackgroundColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_BackgroundColor) property is used to set the background color for node. By default, it is transparent. @@ -712,7 +712,7 @@ The following code illustrates how to set the background color for the node. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Appearance/BackgroundColor) -## How to check node is automatically positioned or not +## How to Check if a Node Is Automatically Positioned * The node's [CanAutoLayout](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_CanAutoLayout) value indicates whether the node should be automatically positioned or not. Applicable if the layout option is enabled. @@ -790,7 +790,7 @@ The following code illustrates how to set the can auto layout property for the n ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Appearance/CanAutoLayout) -### How to get InEdges and OutEdges of node +### How to Get InEdges and OutEdges of a Node [InEdges](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_InEdges) is used to get the incoming connectors of the node. [OutEdges](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_OutEdges) is used to get the outgoing connectors of the node. @@ -848,7 +848,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Appearance/InedgesOutedges) -## How to get data source settings details +## How to Get Data Source Settings Details * The node's [Data](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Data) property returns the record of the data source as data. Each record on the data source represents a node in an automatic layout. diff --git a/blazor/diagram/nodes/events.md b/blazor/diagram/nodes/events.md index 4e28457de9..2322e16da3 100644 --- a/blazor/diagram/nodes/events.md +++ b/blazor/diagram/nodes/events.md @@ -13,7 +13,7 @@ documentation: ug Diagram provides several events support for node that triggers when interacting with the node. -## Selection change event +## How to Handle Selection Change Event * While selecting the diagram elements, the following events can be used to do the customization. * When selecting or unselecting the diagram elements, the following events are getting triggered. @@ -77,7 +77,7 @@ The following code example explains how to get the selection change event in the ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Events/SelectionChange) -## Position change event +## How to Handle Position Change Event * While dragging the node or connector through interaction, the following events can be used to do the customization. * When dragging the node, the following events are getting triggered. @@ -139,7 +139,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Events/PositionChange) -## Size change event +## How to Handle Size Change Event * While resizing the node during the interaction, the following events can be used to do the customization. * When resizing the node, the following events are getting triggered. @@ -200,7 +200,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Events/SizeChange) -## Rotate change event +## How to Handle Rotate Change Event * While rotating the node during the interaction, the following events can be used to do the customization. * When rotating the node, the following events are getting triggered. @@ -261,7 +261,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Events/RotationChange) -## NodeCreating event +## How to Use Node Creating Event * The [NodeCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_NodeCreating) helps you to define the default properties of the node. The node creation is triggered when the diagram is initialized. In the node creating event, you can customize the node properties. @@ -311,7 +311,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/Events/NodeCreatingEvent) -## How to enable or disable certain behaviors of the node +## How to Enable or Disable Node Behaviors Using Constraints The Constraints property of node allows you to enable or disable certain features. For more information about node constraints, refer to the [Node Constraints](https://blazor.syncfusion.com/documentation/diagram/constraints#node-constraints). diff --git a/blazor/diagram/nodes/expand-and-collapse.md b/blazor/diagram/nodes/expand-and-collapse.md index 58d0c5ca03..af35d3b7ec 100644 --- a/blazor/diagram/nodes/expand-and-collapse.md +++ b/blazor/diagram/nodes/expand-and-collapse.md @@ -7,7 +7,7 @@ control: Diagram Component documentation: ug --- -# Expand and Collapse support for Node in Blazor Diagram Component +# Expand and Collapse Support for Nodes in Blazor Diagram Component Diagram provides support to describe the state of the node. i.e., whether the node is in an expanded or collapsed state. The IsExpanded property of node is used to expand or collapse its children nodes.The Expand and Collapse support is used to compress the hierarchy view so that only the roots of each elements are visible. @@ -247,13 +247,13 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Displaying DiagramIcon in Blazor Diagram layout](../images/blazor-diagram-ExpandCollapse-Layout.gif) -## How to customize the expand and collapse icon +## How to Customize Expand and Collapse Icon Diagram allows you to customize the Expand and collapse Icons of the Node. To explore Expand and Collapse icon properties, refer to [DiagramExpandIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExpandIcon.html) and [DiagramCollapseIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramCollapseIcon.html). -### Size +### How to Update Expand or Collapse Icon Size The size of the icon can be changed with the [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_Height) and [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_Width) properties. -### Shape +### How to Customize Expand or Collapse Icon Shape The shape of an [ExpandIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_ExpandIcon) and a [CollapseIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_CollapseIcon) can be changed by using the Shape property of [DiagramExpandIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExpandIcon.html) and [DiagramCollapseIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramCollapseIcon.html) respectively. To explore the different types of DiagramExpandIcon shapes, refer to [DiagramExpandIcons](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExpandIcons.html). @@ -346,7 +346,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Displaying DiagramIcon in Blazor Diagram](../images/blazor-diagram-ExpandCollapse-Shape.png) -### How to customize the appearance of expand and collapse icon +### How to Customize Expand and Collapse Icon Appearance The appearance of the Icon can be customized by changing its [Fill](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_Fill), [BorderColor](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_BorderColor), [BorderWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_BorderWidth), and [CornerRadius](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_CornerRadius) properties. @@ -547,7 +547,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Displaying DiagramIcon in Blazor Diagram layout](../images/blazor-diagram-ExpandCollapse-Shape-CornerRadius.png) -### How to position and align the expand and collapse icon +### How to Position and Align Expand and Collapse Icon Diagram allows you to customize the position and alignment of the Icon efficiently. An Icon can be aligned in respect to the node boundaries. The following properties are used to position the Icon. @@ -675,7 +675,7 @@ The following table shows the relationship between the Icon position and Icon Of ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/ExpandAndCollapse/IsExpandedProperty) -### Template support for expand and collapse icon +### How to Use Template Support for Expand and Collapse Icon The Blazor Diagram component provides template support for customizing the expand and collapse icons of nodes. This feature allows you to create personalized visual representations for these interactive elements, enhancing the user experience and matching your application's design language. diff --git a/blazor/diagram/nodes/interaction.md b/blazor/diagram/nodes/interaction.md index 919d17b69b..d54d7835e1 100644 --- a/blazor/diagram/nodes/interaction.md +++ b/blazor/diagram/nodes/interaction.md @@ -11,7 +11,7 @@ documentation: ug Diagram provides the support to select, drag, resize, or rotate the node interactively. -## How to select the node +## How to Select a Node A node can be selected at runtime by using the [Select](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Select_System_Collections_ObjectModel_ObservableCollection_Syncfusion_Blazor_Diagram_IDiagramObject__System_Nullable_System_Boolean__) method and the selection can be cleared by using the [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ClearSelection) method. The following code explains how to select and clear the selection in the diagram. @@ -72,7 +72,7 @@ And also the selection enable during the interaction. ![Node Selection in Blazor Diagram](../images/blazor-diagram-node-selection.png) -## How to drag the node +## How to Drag a Node A node can be dragged at runtime by using the [Drag](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Drag_Syncfusion_Blazor_Diagram_IDiagramObject_System_Double_System_Double_) method. The following code explains how to drag the node by using the drag method. @@ -125,7 +125,7 @@ Also, drag the node during the interaction. ![Dragging Node at Runtime in Blazor Diagram](../images/blazor-diagram-drag-node.gif) -## How to resize the node +## How to Resize a Node A node can be resized at runtime by using the [Scale](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Scale_Syncfusion_Blazor_Diagram_IDiagramObject_System_Double_System_Double_Syncfusion_Blazor_Diagram_DiagramPoint_) method. The following code explains how to resize the node by using the scale method. @@ -179,7 +179,7 @@ Also, you can resize the node during interaction. ![Node Resizing in Blazor Diagram](../images/blazor-diagram-node-resizing.gif) -## How to rotate the node +## How to Rotate a Node A node can be rotated at runtime by using the [Rotate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Rotate_Syncfusion_Blazor_Diagram_IDiagramObject_System_Double_Syncfusion_Blazor_Diagram_DiagramPoint_) method. The following code explains how to rotate the node by using the rotate method. @@ -234,7 +234,7 @@ Also, rotate the node during the interaction. ![Displaying Node Rotation in Blazor Diagram](../images/blazor-diagram-node-rotation.gif) -## How to flip the node +## How to Flip a Node The [Flip](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_Flip) is performed to give the mirrored image of the original element. diff --git a/blazor/diagram/nodes/nodes.md b/blazor/diagram/nodes/nodes.md index 0e8c54d445..879e00f9ad 100644 --- a/blazor/diagram/nodes/nodes.md +++ b/blazor/diagram/nodes/nodes.md @@ -13,7 +13,7 @@ Nodes are graphical objects that are used to visually represent the geometrical ![Node in Blazor Diagram](../images/blazor-diagram-node.png) -## How to create node +## How to Create a Node A node can be created and added to the diagram, either programmatically or interactively. In the diagram area, nodes are stacked from bottom-to-top in the order they are added. @@ -21,7 +21,7 @@ To learn more about creating nodes and exploring different node shapes in a Blaz {% youtube "youtube:https://www.youtube.com/watch?v=4_RCxBnDs3w" %} -## How to add node through nodes collection +## How to Add a Node Using the Nodes Collection To create a node, define the [Node](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html) object and add that to the nodes collection of the diagram. The following code example shows how to add a node to the diagram. @@ -61,7 +61,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** Node's Id should not start with numbers or special characters and should not contain special characters such as underscore(_) or space. -## How to add nodes at runtime +## How to Add Nodes at Runtime You can add a Node at runtime by adding it to the nodes collection of the Diagram component. The following code explains how to add a node at runtime. @@ -179,7 +179,7 @@ The following code explains how to add an node with annotation at runtime by us } } ``` -## How to add node into palette +## How to Add a Node to the Palette Nodes can be predefined and added to the symbol palette, and can be dropped into the diagram when needed. For more information about adding nodes from symbol palette, refer to the [Symbol Palette](../symbol-palette). @@ -191,7 +191,7 @@ Nodes can be predefined and added to the symbol palette, and can be dropped into ![Adding Nodes from Palette in Blazor Diagram](../images/blazor-diagram-add-node-from-palette.gif) -## How to draw nodes using drawing object +## How to Draw Nodes Using Drawing Object Nodes can be interactively drawn by clicking and dragging on the diagram surface by using the [DrawingObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DrawingObject). @@ -199,11 +199,11 @@ For more information about drawing node, refer to the `Draw Nodes`. ![Drawing Node in Blazor Diagram](../images/blazor-diagram-node-drawing.gif) -## How to create node through datasource +## How to Create Nodes from DataSource Nodes can be generated automatically with the information provided through a data source. The default properties for these nodes are fetched from default settings. For more information about datasource, refer to the [DataSource](../data-binding). -## How to remove nodes at runtime +## How to Remove Nodes at Runtime A node can be removed from the diagram at runtime by using the `Remove` method. @@ -257,7 +257,7 @@ public void RemoveNodes() nodes.RemoveAt(0); } ``` -### How to clone the node at runtime +### How to Clone a Node at Runtime [Clone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Clone) is a virtual method of the node that is used to create a copy of a diagram object. After cloning, we need to set the ID for cloned nodes. The following code demonstrates how to clone the nodes during runtime. ```cshtml @@ -315,7 +315,7 @@ public void RemoveNodes() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Nodes/CloneNode) ![Clonning Node](../images/CloneNode.gif) -## How to update nodes at runtime +## How to Update Nodes at Runtime You can change any node's properties at runtime. diff --git a/blazor/diagram/nodes/positioning.md b/blazor/diagram/nodes/positioning.md index e0e3098318..8040f53a7e 100644 --- a/blazor/diagram/nodes/positioning.md +++ b/blazor/diagram/nodes/positioning.md @@ -1,15 +1,15 @@ --- layout: post -title: Positioning in Blazor Diagram Component | Syncfusion +title: Positioning a Node in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Positioning in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Positioning a node in Blazor Diagram Component +# Positioning a Node in Blazor Diagram Component -## How to arrange the nodes +## How to Arrange Nodes * The position of a node is controlled by using the [OffsetX](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_OffsetX) and [OffsetY](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_OffsetY) properties. By default, these offset properties represent the distance between the origin of the diagram’s page and node’s center point. @@ -118,7 +118,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Changing Node Rotation Angle in Blazor Diagram](../images/blazor-diagram-node-rotation-angle.png) -## How to set minimum size and maximum size for the node +## How to Set Minimum and Maximum Node Size The [MinWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_MinWidth) and [MinHeight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_MinHeight) properties of node allows you to control the minimum size of the node while resizing. Similarly, the [MaxWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_MaxWidth) and [MaxHeight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_MaxHeight) properties of node allows you to control the maximum size of the node while resizing. The below gif explains how minimum and maximum sizes are controlled. diff --git a/blazor/diagram/overview-component.md b/blazor/diagram/overview-component.md index d875f09078..0d73805ce6 100644 --- a/blazor/diagram/overview-component.md +++ b/blazor/diagram/overview-component.md @@ -11,13 +11,13 @@ documentation: ug The [SfDiagramOverviewComponent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Overview.SfDiagramOverviewComponent.html) provides a miniature view of the entire diagram content, offering a comprehensive preview at a glance. This powerful feature enables users to effortlessly navigate, pan, and zoom to specific areas of interest within large and complex diagrams. By presenting a bird's-eye view, it enhances the user's ability to understand the diagram's structure and quickly locate desired sections, significantly improving overall usability and efficiency. -## Usage Scenario +## How to Use Overview to Easily View and Move Within Large Diagrams When working with an extensive diagram, it can be challenging to maintain context or navigate efficiently between different sections. The traditional approach of zooming out to view the entire diagram and then zooming in on a specific area can be cumbersome, especially when frequent navigation is required. The SfDiagramOverviewComponent offers an elegant solution to these challenges by providing a compact preview of the entire diagram. This overview displays a miniature representation of your diagram, with a rectangular viewport indicator highlighting your current focus area. Navigation becomes intuitive and effortless as you can simply drag this viewport rectangle to instantly move to different parts of the diagram, enhancing both productivity and user experience. -## Create an overview +## How to Create an Overview The [SourceID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Overview.SfDiagramOverviewComponent.html#Syncfusion_Blazor_Diagram_Overview_SfDiagramOverviewComponent_SourceID) property of the SfDiagramOverviewComponent is essential for linking the overview to its corresponding diagram. To establish this connection, set the SourceID to match the [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ID) of the target diagram component. This ensures that the overview displays an accurate representation of the main diagram. @@ -101,7 +101,7 @@ public List DataSource = new List() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Overview/Overview) -## Zoom and Pan +## How to Zoom and Pan the Diagram The SfDiagramOverviewComponent displays a viewport of the diagram, highlighted by a red rectangular outline. This component allows for intuitive interaction with the diagram through the following methods: @@ -116,7 +116,7 @@ The following image shows how the diagram is zoomed/panned with an overview. ![Overview Interaction](images/Overview.gif) -## Overview Constraints +## How to Enable or Disable Overview Functionalities Using Constraints The [Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Overview.SfDiagramOverviewComponent.html#Syncfusion_Blazor_Diagram_Overview_SfDiagramOverviewComponent_Constraints) property of the SfDiagramOverviewComponent allows you to enable or disable the following functionalities. diff --git a/blazor/diagram/page-settings.md b/blazor/diagram/page-settings.md index b52eb5d813..43e009afe7 100644 --- a/blazor/diagram/page-settings.md +++ b/blazor/diagram/page-settings.md @@ -70,7 +70,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync |Landscape|![Landscape Orientation](./images/LandscapeOrientation.png)| |Portrait|![Portrait Orientation](./images/PortraitOrientation.png)| -## How to enable the multiple page +## How to Enable Multiple Pages Based on the diagramming element position, the size of the page dynamically increases or decreases in multiples of page width and height using the [MultiplePage](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PageSettings.html#Syncfusion_Blazor_Diagram_PageSettings_MultiplePage) property of `PageSettings`. @@ -116,7 +116,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Multiple Page](./images/MultiplePage.png) -## How to change the page appearance +## How to Customize Page Appearance The appearance of the pages can be customized using the following properties of the `PageSettings` class: @@ -171,7 +171,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![PageBackground Color](./images/PageBackground.png) -### How to customize the appearance of the page break +### How to Customize Page Break Appearance The appearance of the `PageBreak` can be customized using the style properties such as stroke, stroke-width and stroke-dasharray of the diagram pagebreak class. @@ -204,7 +204,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Pagebreak Color](./images/Pagebreak.png) -## How to change the margin around the pages +## How to Change Page Margins The area between the maintain content of a page and the page edges can be changed by using the PageMargin property. The default values for the margin are set to 25 on all sides. @@ -224,7 +224,7 @@ The area between the maintain content of a page and the page edges can be change ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/PageSettings/Margin) -## Boundary constraints +## How to Restrict Node Interaction Using Boundary Constraints The diagram provides support to restrict/customize the interactive region, out of which the elements cannot be dragged, resized, or rotated. The [BoundaryConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PageSettings.html#Syncfusion_Blazor_Diagram_PageSettings_BoundaryConstraints) property of page settings allows you to customize the interactive region. To explore the boundary constraints, refer to [Boundary Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BoundaryConstraints.html). @@ -292,7 +292,7 @@ The following code example illustrates how to define boundary constraints with r ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/PageSettings/BoundaryConstraints) -## Responsive with parent container +## How to Make Diagram Responsive to Its Parent Container By setting the value in percentage, the diagram gets its dimention with respect to its parent container.Specify the Width and Height as 100% to make the diagram element fill its parent container. Setting the Height to 100% requires the diagram parent element to have explicit height or you can use calc function to set explicit height based on the browser layout. @@ -325,7 +325,7 @@ The following code example illustrates how to set width and height in percentage ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/PageSettings/ResponsiveWithParentContainer) -## CallBack Methods +## How to Handle Page Settings Changes Using Callback Methods * BackgroundChanged : Specifies the callback to trigger when the Background value changes. * BoundaryConstraintsChanged : Specifies the callback to trigger when the BoundaryConstraints value changes. diff --git a/blazor/diagram/ports/appearance.md b/blazor/diagram/ports/appearance.md index fc41273a2f..2a179cc358 100644 --- a/blazor/diagram/ports/appearance.md +++ b/blazor/diagram/ports/appearance.md @@ -1,15 +1,15 @@ --- layout: post -title: Appearance in Blazor Diagram Component | Syncfusion +title: Port Appearance in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Appearance in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Port appearance and positioning +# Port Appearance in Blazor Diagram Component -## How to change the appearance of the port +## How to Customize Port Appearance * The shape of a port can be changed by using the [Shape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_Shape) property. To explore the different types of port shapes, refer to Port Shapes. If you need to render a custom shape, then you can set shape to path and define path using the path data property. @@ -73,7 +73,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Changing Port Appearance in Blazor Diagram](../images/blazor-diagram-port-appearance.png) -## How to change the visibility of the port +## How to Control the Port Visibility The [Visibility](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_Visibility) of the ports depends upon the properties of Connect, Hidden, Hover, and Visible. By default, [PortVisibility](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PortVisibility.html) is set to Hidden. @@ -84,7 +84,7 @@ The [Visibility](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram | Connect | Specifies to visible the port when mousehover the DiagramElement and enable the PortConstraints as InConnect and OutConnect. | | Visible | Port is always visible for the DiagramElement. | -## Types of port shapes +## How to Use Different Port Shapes We have provided some basic built-in [PortShapes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PortShapes.html) for the port. Find the shapes as follows. @@ -93,7 +93,7 @@ We have provided some basic built-in [PortShapes](https://help.syncfusion.com/cr * Square * X -### How to customize the port's shape +### How to Customize Port Shape Custom shape support has been provided for port. You can able to add the custom path data instead of build-in shapes. Find the code example that explains how to change the custom shape for port. @@ -146,7 +146,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Port with Custom Shape](../images/blazor-diagram-port-custom-shape.png) -## How to enable or disable certain behavior of the port +## How to Enable or Disable Port Behaviors Using Constraints The constraints property allows you to enable or disable certain behaviors of ports. For more information about port constraints, refer to [Port Constraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PortConstraints.html). You can verify the [Constraints](https://blazor.syncfusion.com/documentation/diagram/constraints) to learn how to enable or disable the port constraints. @@ -159,7 +159,7 @@ The PortConstraints may have multiple behaviors like listed below: | InConnect |Enables or disables connecting to the incoming Connector. | | OutConnect | Enables or disables connecting the outgoing Connector. | -## How to add additional information for port +## How to Add Additional Information for Port The [AdditionalInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_AdditionalInfo) property of the port allows you to maintain additional information for the port. diff --git a/blazor/diagram/ports/interaction.md b/blazor/diagram/ports/interaction.md index 88380cd444..fa27800d77 100644 --- a/blazor/diagram/ports/interaction.md +++ b/blazor/diagram/ports/interaction.md @@ -1,17 +1,17 @@ --- layout: post -title: Interaction in Blazor Diagram Component | Syncfusion +title: Port Interaction in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Interaction in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Interaction in Blazor Diagram Component +# Port Interaction in Blazor Diagram Component The port can be used to create a connector by enabling the `Draw` in the [PortConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PortConstraints.html). -## How to draw connector from the node port +## How to Draw Connector from Node Port You can draw connectors from the node port by enabling Draw constraints to the Constraints property. By default, the connector segment type is set to [Orthogonal](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Orthogonal). The following code explains how to draw the connector by using the port constraints. @@ -69,7 +69,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Drawing Port Connection in Blazor Diagram](../images/blazor-diagram-draw-port-connection.gif) -## How to draw connector from the connector port +## How to Draw Connector from Connector Port You can draw connectors from the connector port by enabling Draw constraints to the Constraints property. By default, the connector segment type is set to [Orthogonal](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Orthogonal). The following code explains how to draw the connector by using the port constraints. @@ -116,7 +116,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Drawing Connector Port Connection in Blazor Diagram](../images/ConnectorPort/ConnectorPortDraw.gif) -## How to draw different types of connector from the port +## How to Draw Different Connector Types from Port You can change the default connector type while drawing the connector from the port by setting the specific connector type instance to the [DrawingObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DrawingObject) property. This enables the drawing of various connector types from the port, including: * Straight diff --git a/blazor/diagram/ports/ports.md b/blazor/diagram/ports/ports.md index c2397b6175..c0173a5d1c 100644 --- a/blazor/diagram/ports/ports.md +++ b/blazor/diagram/ports/ports.md @@ -13,7 +13,7 @@ Port is a special connection point in a Node where you can glue the connectors. ![Port in Blazor Diagram](../images/blazor-diagram-port.png) -## How to create connections node to node and port to port +## How to Create Node-to-Node and Port-to-Port Connections There are two main types of connections, node to node and port to port. The difference between these two connections is whether or not a connector remains glued to a specific connection point when you move the attached node or connector. @@ -25,7 +25,7 @@ Ports act as the connection points of the node and allows creating connections w ![Connection between Ports in Blazor Diagram](../images/blazor-diagram-port-connection.gif) -## How to create a node port +## How to Create a Node Port To add a connection port, define the port object and add it to node’s ports collection. The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PointPort.html#Syncfusion_Blazor_Diagram_PointPort_Offset) property of the port accepts an object of fractions and is used to determine the position of ports. The following code explains how to add ports when initializing the node. @@ -75,7 +75,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Creating Port in Blazor Diagram](../images/blazor-diagram-create-port.png) -## How to create a connector port +## How to Create a Connector Port Creating connector ports is similar to creating node ports. To define connector ports, you need to create a collection of `ConnectorPort` and assign it to the connector’s `Ports` property. @@ -122,7 +122,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** Port's Id should not start with numbers or special characters and should not contain special characters such as underscores(_) or spaces. -### How to connect a connector to a port +### How to Connect a Connector to a Port Connector ports are used to establish connections between node ports, connector ports and nodes. To create such a connection, set the `SourcePortID` or `TargetPortID` property to the ID of the corresponding port on the connector. @@ -191,7 +191,7 @@ The following code example demonstrates how to connect one connector to a port o ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Ports/ConnectorPort/ConnectorPortConnection) -## How to add ports at runtime +## How to Add Ports at Runtime You can add ports at runtime to the nodes collection in the Diagram component by using the `Add` method. @@ -265,7 +265,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Port in Blazor Diagram](../images/blazor-diagram-add-port.png) -## How to add multiple ports at runtime +## How to Add Multiple Ports at Runtime Add multiple ports at runtime by using the `Add` method in the port collection. The following code explains how to add two or more ports to node at runtime. @@ -344,7 +344,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Multiple Ports in Blazor Diagram](../images/blazor-diagram-add-multiple-ports.png) -## How to add remove port at runtime +## How to Remove Port at Runtime A collection of ports can be removed from the node by using the native `RemoveAt` method. Refer to the following example that shows how to remove ports at runtime. @@ -405,7 +405,7 @@ A collection of ports can be removed from the node by using the native `RemoveAt ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Ports/ActionofPorts/RemovePorts) -## How to add update port at runtime +## How to Update Port at Runtime You can change any port properties at runtime. @@ -466,7 +466,7 @@ protected override void OnInitialized() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Ports/ActionofPorts/UpdatePorts) -## How to specify connection direction to port +## How to Set Connection Direction for Ports The [ConnectionDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_ConnectionDirection) property of a port allows users to specify the direction in which a connector should establish a connection. This can be either to the port incoming or from the port outgoing. @@ -550,7 +550,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Port Connection Direction](../images/PortDirection.gif) -## How to get InEdges and OutEdges of ports +## How to Get InEdges and OutEdges of Ports [InEdges](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_InEdges) is used to get the incoming connectors of the port that are connected to the port. [OutEdges](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_OutEdges) is used to get the outgoing connectors of the port that are connected to the port. diff --git a/blazor/diagram/ports/positioning.md b/blazor/diagram/ports/positioning.md index 59b7d646aa..de4ff921e9 100644 --- a/blazor/diagram/ports/positioning.md +++ b/blazor/diagram/ports/positioning.md @@ -1,13 +1,13 @@ --- layout: post -title: Positioning in Blazor Diagram Component | Syncfusion +title: Positioning a Port in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about positioning in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# How to position node’s port +# Positioning a Port in Blazor Diagram Component Diagram allows you to customize the position and appearance of the port efficiently. Ports can be aligned relative to the node boundaries. It has Margin, Offset, Horizontal, and Vertical alignment settings. It is quite tricky when all four alignments are used together but gives more control over alignments properties of the [PointPort](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PointPort.html) class. Ports of a node can be positioned using the following properties of `PointPort`. @@ -16,7 +16,7 @@ Diagram allows you to customize the position and appearance of the port efficien * VerticalAlignment * Margin -## How to change offset at runtime +## How to Change Offset at Runtime The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PointPort.html#Syncfusion_Blazor_Diagram_PointPort_Offset) property is used to align the ports based on fractions. 0 represents top/left corner, 1 represents bottom/right corner, and 0.5 represents half of width/height. @@ -82,7 +82,7 @@ The following table shows the relationship between the shape port position and p | (1,0.5) | ![Blazor Diagram Port in Right Center Offset Values](../images/blazor-diagram-port-in-rightcenter-offset-values.png) | | (1,1) | ![Blazor Diagram Port in Right Bottom Offset Values](../images/blazor-diagram-port-in-rightbottom-offset-values.png) | -## How to set PathPosition for connector port +## How to set Path Position for Connector Port The `PathPosition` property allows you to place a connector port along the path of a connector. It accepts a value between 0 to 1, where: @@ -141,7 +141,7 @@ The following code example demonstrates how to set the PathPosition for a connec ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Ports/ConnectorPort/ConnectorPortPathPosition) -## How to change Horizontal and Vertical alignment +## How to Change Horizontal and Vertical Alignment The [HorizontalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_HorizontalAlignment) property of the port is used to set how the port is horizontally aligned at the port position determined from the fraction values. The [VerticalAlignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_VerticalAlignment) property is used to set how the port is vertically aligned at the port position. @@ -213,7 +213,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> By default, the value of the `HorizontalAlignment` and `VerticalAlignment` is `Center`. The alignment is positioned based on the offset value. -## How to update margin for port +## How to Update Margin for Port [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_Margin) is an absolute value used to add some blank space to any one of its four sides. The ports can be displaced with the margin property. The following code example explains how to align a port based on its Offset, HorizontalAlignment, VerticalAlignment, and Margin values. diff --git a/blazor/diagram/print.md b/blazor/diagram/print.md index d3a9b754a8..86bceedd22 100644 --- a/blazor/diagram/print.md +++ b/blazor/diagram/print.md @@ -11,7 +11,7 @@ documentation: ug Diagram provides support to print the content displayed on the diagram page using the [PrintAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_PrintAsync_) method. -## Page setup +## How to Set Up Page Layout for Printing Some of the print options cannot be configured through JavaScript code. Therefore, the layout, paper size, and margin options must be customized using the browser page setup dialog. Refer to the following links to learn more about the browser page setup: @@ -20,7 +20,7 @@ Some of the print options cannot be configured through JavaScript code. Therefor * [Safari](https://www.mintprintables.com/print-tips/adjust-margins-osx/) * [IE](http://www.helpteaching.com/help/print/index.htm) -## Printing Options +## How to Customize Printing Options The diagram can be customized while printing using the following properties of the [DiagramPrintSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramPrintSettings.html) class. diff --git a/blazor/diagram/rulers.md b/blazor/diagram/rulers.md index eaa2020aba..a2b8779cdf 100644 --- a/blazor/diagram/rulers.md +++ b/blazor/diagram/rulers.md @@ -11,7 +11,7 @@ documentation: ug The Ruler provides horizontal and vertical guides for measuring in the Diagram control. It can be used to measure diagram objects, indicate positions, and align diagram elements, making it especially useful in creating scale models. -## Adding Rulers to the Diagram Component +## How to Add Rulers to the Diagram Component The [RulerSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_RulerSettings) property of [SfDiagramComponent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) is used to control the visibility and appearance of the ruler in the diagram. The [HorizontalRuler](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.RulerSettings.html#Syncfusion_Blazor_Diagram_RulerSettings_HorizontalRuler) and [VerticalRuler](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.RulerSettings.html#Syncfusion_Blazor_Diagram_RulerSettings_VerticalRuler) properties of [RulerSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_RulerSettings) are used to define and customize the horizontal ruler and vertical ruler in the diagram canvas. @@ -33,7 +33,7 @@ The following code demonstrates how to add a ruler to the diagram. ![Ruler](images/Ruler.png) -## Customizing the Ruler +## How to Customize the Ruler The [HorizontalRuler](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.RulerSettings.html#Syncfusion_Blazor_Diagram_RulerSettings_HorizontalRuler) and [VerticalRuler](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.RulerSettings.html#Syncfusion_Blazor_Diagram_RulerSettings_VerticalRuler) properties [RulerSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_RulerSettings) class are used to customize the appearance of the rulers in the diagram. The following properties are used to customize the appearance of both the horizontal and vertical rulers. diff --git a/blazor/diagram/scroll-settings.md b/blazor/diagram/scroll-settings.md index e505bcc205..d0845c82e7 100644 --- a/blazor/diagram/scroll-settings.md +++ b/blazor/diagram/scroll-settings.md @@ -11,7 +11,7 @@ documentation: ug The diagram can be scrolled by using the vertical and horizontal scrollbars. In addition to the scrollbars, the mouse wheel can be used to scroll the diagram. The Diagram’s [ScrollSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html) allows you to read the current scroll status, current zoom and zoom factor values. -## Get current scroll status +## How to Get Current Scroll Status Scroll settings allow you to read the scroll status, [CurrentZoom](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_CurrentZoom) with a set of properties. To explore those properties, see [Scroll Settings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html). @@ -21,7 +21,7 @@ Scroll settings allow you to read the scroll status, [CurrentZoom](https://help. * HorizontalOffset: Specifies the horizontal origin or left side origin of the view port of the diagram page. * VerticalOffset: Specifies the vertical origin or top side of the view port of the diagram page. -## Define scroll status +## How to Define Scroll Status Diagram allows you to pan the diagram before loading, so that any desired region of a large diagram can be viewed. You can programmatically pan the diagram with the [HorizontalOffset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_HorizontalOffset) and [VerticalOffset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_VerticalOffset) properties of scroll settings. The following code illustrates how to pan the diagram programmatically. @@ -37,7 +37,7 @@ In the following example, the vertical scroll bar is scrolled down by 50px and t ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/ScrollSettings) -## Update scroll status +## How to Update Scroll Status You can programmatically change the scroll offsets at runtime by using the external button click. The following code illustrates how to change the scroll offsets at runtime. @@ -66,7 +66,7 @@ You can programmatically change the scroll offsets at runtime by using the exter ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/ScrollStatus) -## ScrollChanged Event +## How to Use the Scroll Changed Event The Diagram control provides the following event for the scroll settings. @@ -104,7 +104,7 @@ The Diagram control provides the following event for the scroll settings. } ``` -## AutoScroll +## How to Enable or Disable Auto Scroll Autoscroll feature automatically scrolls the Diagram whenever the Node or Connector is moved beyond the boundary of the diagram. So that, it is always visible during dragging, resizing, and multiple selection operations. Autoscroll is automatically triggered when any one of the following is done towards the edges of the Diagram: * Node dragging, resizing @@ -176,7 +176,7 @@ The auto-scrolling region is limited by the [ScrollLimit](https://help.syncfusio You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/AutoScroll) -## AutoScroll Padding +## How to Set Auto Scroll Padding The [AutoScrollPadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_AutoScrollPadding) is used to specify the maximum distance between the object and the diagram's edge that will trigger auto-scrolling. When auto-scrolling is enabled, the diagram viewport will automatically scroll in the direction of the mouse movement when the user drags a node or connector to the edge of the viewport. The padding to start the auto-scrolling at the edge can be controlled by setting the AutoScrollPadding property. N> The default value is 20 pixels. @@ -223,7 +223,7 @@ The following code example illustrates how to set autoscroll padding. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/AutoScrollPadding) -## Scroll limit +## How to Limit Scrolling Area The scroll limit allows you to define the scrollable region of the Diagram while scrolling the page with the mouse. The [ScrollLimit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_ScrollLimit) property of scroll settings helps to limit the scrolling area. It includes the following options: @@ -257,7 +257,7 @@ To explore about the options , refer [ScrollLimitMode](https://help.syncfusion.c | Diagram | ![ScrollLimitMode as Diagram](./images/ScrollLimitDiagram.gif)| | Infinity | ![ScrollLimitMode as Infinity](./images/ScrollLimitInfinity.gif)| -## Scroll Padding +## How to Set Scroll Padding The [ScrollPadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_ScrollPadding) property in the scroll settings allows you to extend the scrollable region based on the [ScrollLimit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_ScrollLimit), when an element is interacted with at the edges of the viewport. It specifies the maximum distance between the object and the edge of the diagram area. This behavior is essential for improving the user experience, especially in large diagrams where users need to extend elements across different parts of the diagram area. N> The default value is 0 pixels. @@ -303,7 +303,7 @@ The following code example illustrates how to set scroll padding. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/ScrollPadding) -## Scrollable Area +## How to Restrict Scrollable Area Scrolling beyond any particular rectangular area can be restricted by using the [ScrollableArea](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_ScrollableArea) property of scroll settings. To restrict scrolling beyond any custom region, set the [ScrollLimit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ScrollSettings.html#Syncfusion_Blazor_Diagram_ScrollSettings_ScrollLimit) as “limited.” The following code example illustrates how to customize the scrollable area. ```cshtml @@ -340,7 +340,7 @@ Scrolling beyond any particular rectangular area can be restricted by using the } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/ScrollableArea) -## CallBack Methods +## How to Handle Scroll Settings Changes Using Callback Methods * CurrentZoomChanged : Specifies the callback to be triggered when the current zoom value changes. * HorizontalOffsetChanged : Specifies the callback to be triggered when the horizontal offset changes. diff --git a/blazor/diagram/serialization.md b/blazor/diagram/serialization.md index ec82fd1059..6c31c04984 100644 --- a/blazor/diagram/serialization.md +++ b/blazor/diagram/serialization.md @@ -13,7 +13,7 @@ Serialization is the process of saving and loading the persistent state of the d {% youtube "youtube:https://www.youtube.com/watch?v=2hhl00gMObc" %} -## Two-way binding +## How to Enable Two-Way Binding When saving and loading the diagram, we must use two-way binding (such as @bind) for nodes and connectors. @@ -21,7 +21,7 @@ When saving and loading the diagram, we must use two-way binding (such as @bind) ``` -## Save the diagram as string +## How to Save the Diagram as String While saving, the [diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) is serialized as a string. The [SaveDiagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SaveDiagram) method of the diagram helps to serialize the diagram as a string. The following code illustrates how to save the diagram. @@ -31,7 +31,7 @@ SfDiagramComponent Diagram; string data = Diagram.SaveDiagram(); ``` -## Load the diagram from string +## How to Load the Diagram from String The [diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) is loaded from the serialized string data using the [LoadDiagramAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_LoadDiagramAsync_System_String_System_Boolean_) method. The following code illustrates how to load the diagram from serialized string data. @@ -43,7 +43,7 @@ string data = Diagram.SaveDiagram(); await Diagram.LoadDiagramAsync(data); ``` -## Load the SfDiagram JSON data string using SfDiagramComponent +## How to Load the SfDiagram JSON Data String Using SfDiagram Component You can load the [SfDiagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagrams.SfDiagram.html) serialized JSON data string into [SfDiagramComponent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) using the [LoadDiagramAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_LoadDiagramAsync_System_String_System_Boolean_) method. When you load the SfDiagram serialized string, the isClassicData parameter should be set to true. The default value of isClassicData is false. @@ -59,7 +59,7 @@ SfDiagramComponent Diagram; await Diagram.LoadDiagramAsync(data, true); ``` -## How to save and load the diagram using file stream +## How to Save and Load the Diagram Using File Stream The diagram provides support to save and load the diagram using a file stream. The below code illustrates how to download the saved diagram as a file. @@ -138,11 +138,11 @@ The diagram provides support to save and load the diagram using a file stream. T You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Serialization/SaveAndLoad) -## Importing and Exporting using Mermaid Syntax +## How to Import and Export Using Mermaid Syntax The [SfDiagramComponent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) supports saving diagrams in Mermaid syntax format. Mermaid is a Markdown-inspired syntax that automatically generates diagrams. With this functionality, you can easily create mind maps, flowcharts and sequence diagrams from Mermaid syntax data, simplifying the visualization of complex ideas and processes without manual drawing. Additionally, you can export your mind maps, flowcharts and sequence diagrams to Mermaid syntax, allowing for easy sharing, editing, and use across different platforms. -### Save diagram as Mermaid syntax +### How to Save Diagram as Mermaid Syntax The [SaveDiagramAsMermaid](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SaveDiagramAsMermaid) method serializes the diagram into a Mermaid-compatible string format. This method works for diagrams using Flowchart, Mind Map or Sequence Diagram layouts. The following code illustrates how to save the diagram in Mermaid string format. @@ -152,7 +152,7 @@ SfDiagramComponent Diagram; string data = Diagram.SaveDiagramAsMermaid(); ``` -### Load diagram from Mermaid syntax +### How to Load Diagram from Mermaid Syntax You can load a [diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) from the serialized Mermaid syntax data using the [LoadDiagramFromMermaidAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_LoadDiagramFromMermaidAsync_System_String_) method. The following code illustrates how to load a diagram from a Mermaid string data. diff --git a/blazor/diagram/shapes.md b/blazor/diagram/shapes.md index deaabde19f..8e770d885e 100644 --- a/blazor/diagram/shapes.md +++ b/blazor/diagram/shapes.md @@ -19,7 +19,7 @@ Diagram provides support to add different kind of nodes. They are as follows: * SVG shape * HTML template -## Text node +## How to Create and Customize a Text Node The diagram allows you to add texts as [TextShape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextShape.html). The [Content](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextShape.html#Syncfusion_Blazor_Diagram_TextShape_Content) property defines the text that is to be added. The [Style](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Style) of the node is used as [TextStyle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html) to customize the appearance of the text. @@ -61,7 +61,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Text Node in Blazor Diagram](images/blazor-diagram-TextNode.png) -## Image node +## How to Create a Image Node The diagram allows to add images as [ImageShape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ImageShape.html). The [Shape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_Shape) property of node allows you to set the type of node and for image nodes, it should be set as **Image**. In addition, the [Source](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ImageShape.html#Syncfusion_Blazor_Diagram_ImageShape_Source) property of shape enables you to set the image. @@ -104,7 +104,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Image Node in Blazor Diagram](images/blazor-diagram-image-node.png) -### Base64 encoded image into the image node +### How to Add a Base64 Encoded Image to an Image Node The following code illustrates how to add Base64 image into the image node. @@ -148,7 +148,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> Deploy your HTML file in the web application and export the diagram (image node) or else the image node will not be exported in the Chrome and Firefox due to security issues. -### Stretch and align the image +### How to Stretch and Align Image Content Stretch and align the image content anywhere but within the node boundary. The [Scale](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ImageShape.html#Syncfusion_Blazor_Diagram_ImageShape_Scale) property of the node allows you to stretch the image as you desire. (either to maintain proportion or to stretch). By default, the Scale property of the node is set as [Meet](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramScale.html#Syncfusion_Blazor_Diagram_DiagramScale_Meet). The following code illustrates how to scale or stretch the content of the image node. @@ -202,7 +202,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync |Slice|XMinYMax|![Node Image alignment in Blazor Diagram](images/blazor-diagram-slice-xmin-ymax.png)| |Slice|XMinYMin|![Node Image alignment in Blazor Diagram](images/blazor-diagram-slice-xmin-ymin.png)| -## HTML template shape +## How to Use HTML Template Shapes Html elements can be embedded in the diagram through [HTML](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeShapes.html#Syncfusion_Blazor_Diagram_NodeShapes_HTML) type node. The Shape property of Node allows you to set the type of node and to create a HTML node it should be set as **HTML**. The following code illustrates how an HTML node is created. @@ -299,7 +299,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> HTML node cannot be exported to image format, like JPEG and PNG. It is by design, while exporting the diagram is drawn in a canvas. Further, this canvas is exported into image formats. Currently, drawing in a canvas equivalent from all possible HTML is not feasible. Hence, this limitation. Also , HTML node always appears as topmost layer ( whose index is the higher index, even though it is defined at the last). -## Node with basic shapes +## How to Create a Basic Shape Node The [BasicShapes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BasicShape.html) are common shapes that are used to represent the geometrical information visually. To create basic shapes, the **Type** of the shape should be set as [Basic](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeShapes.html#Syncfusion_Blazor_Diagram_NodeShapes_Basic). Its Shape property can be set with any one of the built-in shapes. To render a rounded rectangle, you need to set the type as **Basic** and shape as **Rectangle**. Set the [CornerRadius](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BasicShape.html#Syncfusion_Blazor_Diagram_BasicShape_CornerRadius) property to specify the radius of rounded rectangle. @@ -351,7 +351,7 @@ The list of basic shapes are as follows. ![BasicShape Node in Blazor Diagram](images/blazor-diagram-basic-shape-node.png) -## Path shape node +## How to Create a Path Shape Node The [PathShape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathShape.html) is a commonly used basic shape that allows visually to represent the geometrical information. As node path data, any geometrical data can be provided. You can create your own Geometry and assign it to data if you want anything different from the standard figures. A geometry does not require any dimension specifications, such as width or height, because it specifies its own size. If the node's size is set, the geometry is extended to fit the node's dimensions. @@ -397,7 +397,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Path Shape Node in Blazor Diagram](images/blazor-diagram-path-shape-node.png) -## Flow shape node +## How to Create a Flow Shape Node The [Flow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FlowShape.html) shapes are used to represent the process flow. It is used for analyzing, designing and managing the documentation process. To create a flow shape, specify the shape type as **Flow**. By default, it is considered as a **Process**. The following code example illustrates how to create a flow shape. @@ -440,7 +440,7 @@ The list of flow shapes are as follows. ![FlowShape Node in Blazor Diagram](images/blazor-diagram-flow-shapes-node.png) -## SVG template shape +## How to Create a SVG Template Shape The diagram provides support to embed SVG element into a node. The Shape property of the node allows to set the type of node. To create a SVG node, it should be set as [SVG](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeShapes.html#Syncfusion_Blazor_Diagram_NodeShapes_SVG). The following code illustrates how a SVG node is created. diff --git a/blazor/diagram/style.md b/blazor/diagram/style.md index bbf3c5ab8b..4fb1a4c0d2 100644 --- a/blazor/diagram/style.md +++ b/blazor/diagram/style.md @@ -9,7 +9,7 @@ documentation: ug # Style in Blazor Diagram Component -## How to customize the connector endpoint handle +## How to Customize the Connector Endpoint Handle To customize the visual appearance of the connector endpoint handle in a diagram, apply the following CSS code: @@ -25,7 +25,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector Endpoint Handle in Blazor Diagram](images/connector-endpoint.png) -## How to customize the connector endpoint handle when it is connected +## How to Customize the Connector Endpoint Handle When Connected To enhance the visual appearance of the connector endpoint handle when it is in a connected state, apply the following CSS code: @@ -41,7 +41,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector Endpoint Connected in Blazor Diagram](images/Connector-Endpoint-Connected.gif) -## How to customize the connector endpoint handle when it disable +## How to Customize the Connector Endpoint Handle When Disabled To customize the visual appearance of the connector endpoint handle when it is in a disabled state, apply the following CSS code to your Blazor application: @@ -58,7 +58,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector Endpoint Disable in Blazor Diagram](images/Connector-Endpoint-Disable.png) -## How to customize the bezier connector handle +## How to Customize the Bezier Connector Handle To customize the appearance of the Bezier connector handle, apply the following CSS code to your Blazor application: @@ -74,7 +74,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Bezier Connector in Blazor Diagram](images/BezierConnector.png) -## How to customize the bezier connector line +## How to Customize the Bezier Connector Line To customize the appearance of the Bezier connector line, apply the following CSS code to your Blazor diagram: @@ -89,7 +89,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Bezier Connector Line in Blazor Diagram](images/Connector-Bezier-Line.png) -## How to customize the resize handle +## How to Customize the Resize Handle To customize the appearance of the resize handle, apply the following CSS code to your Blazor application: @@ -106,7 +106,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Resize Handle Blazor Diagram](images/ResizeHandle.png) -## How to customize the selector pivot line +## How to Customize the Selector Pivot Line To customize the appearance of the selector pivot line, apply the following CSS properties: @@ -121,7 +121,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Selector Pivot Line Blazor Diagram](images/SelectorPivotLine.png) -## How to customize the selector border +## How to Customize the Selector Border To customize the appearance of the selector border, apply the following CSS styles: @@ -136,7 +136,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Selector Border Blazor Diagram](images/SelectorBorder.png) -## How to customize highlights for selected diagram elements +## How to Customize Highlights for Selected Diagram Elements To customize the appearance of highlighter for selected diagram elements, apply the following CSS styles: @@ -154,7 +154,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Rotate Handle Blazor Diagram](images/SelectionHighlighter.png) -## How to customize the rotate handle +## How to Customize the Rotate Handle To customize the appearance of the rotation handle, apply the following CSS code to your Blazor diagram: @@ -170,7 +170,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Rotate Handle Blazor Diagram](images/RotateHandle.png) -## How to customize the symbol palette while hovering over a symbol +## How to Customize the Symbol Palette While Hovering Over a Symbol To customize the visual appearance of symbols in the symbol palette during mouse hover interactions, apply the following CSS code to your Blazor Diagram component: @@ -200,7 +200,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![SymbolPalette Selected in Blazor Diagram](images/SymbolPaletteSelect.gif) -## How to customize the ruler +## How to Customize the Ruler To customize the visual appearance of the ruler properties, apply the following CSS code to your Blazor diagram: @@ -216,7 +216,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Ruler in Blazor Diagram](images/RulerCustomize.png) -## How to customize the ruler overlap +## How to Customize the Ruler Overlap To customize the visual appearance of the ruler overlap properties, apply the following CSS code to your Blazor diagram component: @@ -231,7 +231,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Ruler Overlap in Blazor Diagram](images/RulerOverlap.png) -## How to customize the text edit +## How to Customize the Text Edit To customize the appearance of the text edit properties, apply the following CSS code to your Blazor application: @@ -252,7 +252,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Text Edit in Blazor Diagram](images/TextEdit.png) -## How to customize the text edit on selection +## How to Customize the Text Edit on Selection To customize the appearance of the text edit control when selected, apply the following CSS properties: @@ -268,7 +268,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Text Edit on Selection in Blazor Diagram](images/TextEditSelection.png) -## How to customize the highlighter +## How to Customize the Highlighter To customize the appearance of the highlighter, you can use the following CSS code: @@ -284,7 +284,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Highlighter in Blazor Diagram](images/Highlighter.gif) -## How to customize the diagram background color +## How to Customize the Diagram Background Color To customize the background color of the diagram, apply the following CSS rule: @@ -299,7 +299,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Diagram Background color in Blazor Diagram](images/Diagram-Background.png) -## How to customize the overview resize handle +## How to Customize the Overview Resize Handle To customize the appearance of the overview resize handle, apply the following CSS code to your Blazor application: @@ -315,7 +315,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Overview Resize Handle in Blazor Diagram](images/OverviewResizer.png) -## How to customize the helper +## How to Customize the Helper To customize the appearance of the helper element, apply the following CSS rules: @@ -332,7 +332,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Helper in Blazor Diagram](images/Helper.png) -## How to customize the grid +## How to Customize the Grid To customize the visual appearance of the diagram grid, apply the following CSS styles: @@ -362,7 +362,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Thick grid in Blazor Diagram](images/ThickGrid.png) -## How to customize the symbol palette symbols background color +## How to Customize the Symbol Palette Symbols Background Color To customize the background color of symbols in the symbol palette, apply the following CSS code: @@ -378,7 +378,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![SymbolPalette in Blazor Diagram](images/SymbolPaletteSymbolContainer.png) -## How to customize the style of orthogonal segment thumb +## How to Customize the Orthogonal Segment Thumb To customize the visual appearance of the Orthogonal segment thumb, apply the following CSS code to your stylesheet: @@ -397,7 +397,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Segment Thumb style in Blazor Diagram](images/OrthogonalThumbStyle.png) -## How to customize the bezier and straight segment thumb +## How to Customize the Bezier and Straight Segment Thumb To customize the visual appearance of Bezier and Straight connector segments, apply the following CSS code: ```cshtml diff --git a/blazor/diagram/swimlane/lane/interaction.md b/blazor/diagram/swimlane/lane/interaction.md index 2ca487c968..10f269f39d 100644 --- a/blazor/diagram/swimlane/lane/interaction.md +++ b/blazor/diagram/swimlane/lane/interaction.md @@ -1,21 +1,21 @@ --- layout: post -title: Lane Interactions in Blazor Diagram Component | Syncfusion +title: Lane Interaction in Blazor Diagram Component | Syncfusion description: How to select, resize(with and without selection), and swap the lane, and how to add the child element into the lane. platform: Blazor control: Diagram Component documentation: ug --- -# Lane interaction in Blazor Diagram Component +# Lane Interaction in Blazor Diagram Component The diagram provides support to select, resize, or swap the lane interactively. -## Select +## How to Select a Lane A Lane can be selected by clicking (tapping) the header of the lane. -## Resizing lane +## How to Resize a Lane * A lane can be resized in the bottom and right direction. * A lane can be resized by using the resize selector of the lane. @@ -27,7 +27,7 @@ The following image shows how to resize the lane. ![Lane Resizing](../Swimlane-images/Lane_Resize.gif) -## Lane swapping +## How to Swap Lanes * Lanes can be swapped by dragging the lanes over another lane. * The helper will indicate the insertion point during lane swapping. @@ -35,7 +35,8 @@ The following image shows how to swap lanes. ![Lane Swapping](../Swimlane-images/Lane_Swapping.gif) -## Children interaction in lanes +## How to Interact with Child Nodes in Lanes +## How to Interact with Child Nodes in Lanes * You can resize the child node within swimlanes. * You can drag the child nodes within the lane. diff --git a/blazor/diagram/swimlane/lane/lane.md b/blazor/diagram/swimlane/lane/lane.md index d5fe96e949..ba42156191 100644 --- a/blazor/diagram/swimlane/lane/lane.md +++ b/blazor/diagram/swimlane/lane/lane.md @@ -14,7 +14,7 @@ A [Lane](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Lane.ht The number of lanes can be added to a swimlane and rendered in the diagram. The lanes are automatically stacked inside the swimlane based on the order they are added. -## Create an empty lane +## How to Create an Empty Lane * You can create a [Lane](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Lane.html) and add it to the [Lanes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swimlane.html#Syncfusion_Blazor_Diagram_Swimlane_Lanes) collection of the Swimlane. @@ -79,7 +79,7 @@ The following code example explains how to define a swimlane with lane. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/Lane/LaneCreation). -## Create Lane Header and Header customization +## How to Create and Customize Lane Header * The [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Lane.html#Syncfusion_Blazor_Diagram_Lane_Header) property of a lane allows you to textually describe the lane and customize the appearance of the description. * The size of the lane header can be controlled using the [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneChild.html#Syncfusion_Blazor_Diagram_SwimlaneChild_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneChild.html#Syncfusion_Blazor_Diagram_SwimlaneChild_Height) properties of the header. @@ -227,7 +227,7 @@ The following code example explains how to define a lane header annotation templ You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/Lane/LaneHeaderTemplate) -## Add and Remove the lane at runtime +## How to Add and Remove the Lane at Runtime You can add and remove the lane at runtime by using the `Add` and `Remove` methods of the [Swimlane.Lanes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swimlane.html#Syncfusion_Blazor_Diagram_Swimlane_Lanes) Collection. The following code explains how to dynamically add and remove the lane in a swimlane. @@ -317,7 +317,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/Lane/AddRemoveLaneAtRuntime). -## Add children to lane +## How to Add Children to Lane To add nodes to the lane, you should add a node collection to the [Children](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Lane.html#Syncfusion_Blazor_Diagram_Lane_Children) collection of the lane. @@ -418,7 +418,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Header Select and Resize](../Swimlane-images/Header_Selection_Resize.gif). -## Lane header editing +## How to Edit Lane Header The diagram provides support for editing Lane headers at runtime. You can achieve header editing by using the double-click event. Double-clicking the header label enables the editing of that specific header. diff --git a/blazor/diagram/swimlane/phase.md b/blazor/diagram/swimlane/phase.md index 571188911b..3254495f50 100644 --- a/blazor/diagram/swimlane/phase.md +++ b/blazor/diagram/swimlane/phase.md @@ -11,7 +11,7 @@ documentation: ug The [Phase](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Phase.html) is a subprocess that splits each lane either horizontally or vertically based on the swimlane orientation. Multiple phases can be added to the swimlane. -## Create an empty Phase +## How to Create an Empty Phase You can create a [Phase](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Phase.html) and add it to the [Phases](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swimlane.html#Syncfusion_Blazor_Diagram_Swimlane_Phases) collection of the Swimlane. @@ -89,7 +89,7 @@ The following code example explains how to add a phase at the swimlane. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/Phase/PhaseCreation). -## Dynamically add phase to Swimlane +## How to Dynamically Add and Remove Phase in Swimlane You can dynamically add or remove a phase at runtime by using the `Add` and `Remove` methods of the [Swimlane.Phases](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swimlane.html#Syncfusion_Blazor_Diagram_Swimlane_Phases) collection. The following code example explains how to add and remove phases at run time. @@ -189,7 +189,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/Phase/AddRemovePhaseAtRuntime). -## Create the Phase Header and Header customization +## How to Create and Customize the Phase Header * The [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Phase.html#Syncfusion_Blazor_Diagram_Phase_Header) property of the Phase allows you to describe the phase textually and customize the appearance of the description. * The size of the Phase header can be controlled by using the header's [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneChild.html#Syncfusion_Blazor_Diagram_SwimlaneChild_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneChild.html#Syncfusion_Blazor_Diagram_SwimlaneChild_Height) properties. @@ -342,7 +342,7 @@ The following code example explains how to define a Phase header annotation temp You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/Phase/PhaseHeaderTemplate). -## Header Selection and Resize +## How to Select and Resize Phase Header * You can select the individual phase header by clicking on the header twice. On the first click, you can select the respective phase. @@ -354,7 +354,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Header Select and Resize](Swimlane-images/Header_Selection_Resize.gif). -## Phase header editing +## How to Edit Phase Header The diagram provides support for editing phase headers at runtime. You can achieve header editing by using the double-click event. Double-clicking the header label enables the editing of that specific header. @@ -363,13 +363,13 @@ The following image shows how to edit the phase header. ![Phase Header Editing](Swimlane-images/Phase_Header_Edit.gif) -## Phase interaction +## Phase Interaction -### Select +### How to Select a Phase Phase can be selected by clicking (tapping) the header of the phase. -### Resizing +### How to Resize a Phase * The phase can be resized by using its selector. * You must click the phase header to enable the phase selection. diff --git a/blazor/diagram/swimlane/swimlane-palette.md b/blazor/diagram/swimlane/swimlane-palette.md index 57d05987e3..1e53403763 100644 --- a/blazor/diagram/swimlane/swimlane-palette.md +++ b/blazor/diagram/swimlane/swimlane-palette.md @@ -10,7 +10,7 @@ documentation: ug # Swimlane-Palette in Blazor Diagram Component Diagram provides support to add lanes and phases to the symbol palette. -## Add lanes and phases into symbol palette +## How to Add Lanes and Phases to the Symbol Palette Swimlane elements such as [Lane](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Lane.html) and [Phase](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Phase.html) can be used to visualize the symbols. @@ -117,7 +117,7 @@ The following code sample shows how to add the lanes and phases to palette. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/SwimlanePalette) -## Interactions +## How to Drag and Drop Swimlane Shapes from the Symbol Palette * Drag and drop support for swimlane shapes is provided. * When you drag and drop a lane shape, if the diagram already contains a swimlane with the same orientation, the lane will be added and stacked inside the swimlane based on the order. Otherwise, it will be added as a new swimlane. diff --git a/blazor/diagram/swimlane/swimlane.md b/blazor/diagram/swimlane/swimlane.md index 2849b6ccad..32b5b894cb 100644 --- a/blazor/diagram/swimlane/swimlane.md +++ b/blazor/diagram/swimlane/swimlane.md @@ -13,10 +13,10 @@ A [Swimlane](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swi ![Swimlane Content](./Swimlane-images/Swimlane_Default.PNG) -## Create a swimlane +## How to Create a swimlane A swimlane can be created and added to the diagram, either programmatically or interactively. -### Add Swimlane through the Swimlanes collection +### How to Add Swimlane Through Swimlanes Collection To create a swimlane, you have to define the swimlane object and add it to the [Swimlanes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Swimlanes) collection of the diagram. @@ -74,7 +74,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >Note: We can't add swimlane elements such as phase, lane, and lane children at runtime by using the [AddDiagramElementsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_AddDiagramElementsAsync_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) method. -### Swimlane Header +### How to Define and Customize the Swimlane Header The Swimlane Header was the primary element for swimlanes. The [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swimlane.html#Syncfusion_Blazor_Diagram_Swimlane_Header) property of swimlane allows you to define its textual description and to customize its appearance. @@ -136,7 +136,7 @@ The following code example explains how to define the swimlane header. You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Swimlanes/SwimlaneHeader/SwimlaneHeader) -### Customization of headers +### How to Customize Swimlane Header The height and width of the swimlane header can be customized with the [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneChild.html#Syncfusion_Blazor_Diagram_SwimlaneChild_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneChild.html#Syncfusion_Blazor_Diagram_SwimlaneChild_Height) properties of the swimlane header. You can set the fill color of the header by using the [Style](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SwimlaneHeader.html#Syncfusion_Blazor_Diagram_SwimlaneHeader_Style) property. @@ -267,7 +267,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Swimlane Header Customization](Swimlane-images/Swimlane_Header_Template.PNG) -### Header editing +### How to Edit Header The diagram provides support to edit swimlane headers at runtime. You can achieve the header editing by double-clicking on it. Double-clicking the header label will enable the editing mode. @@ -314,11 +314,11 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ## Interaction -### How to select the swimlane +### How to Select the Swimlane Swimlane can be selected by clicking (tapping) the header of the swimlane. Also, it can be selected at runtime by using the [Select](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Select_System_Collections_ObjectModel_ObservableCollection_Syncfusion_Blazor_Diagram_IDiagramObject__System_Nullable_System_Boolean__) method and clear the selection in the diagram by using the [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_ClearSelection) -### How to drag the swimlane +### How to Drag the Swimlane * Swimlane object can be dragged by clicking and dragging the header of the swimlane. diff --git a/blazor/diagram/symbol-palette/customization.md b/blazor/diagram/symbol-palette/customization.md index 532102163e..7fa7ab179f 100644 --- a/blazor/diagram/symbol-palette/customization.md +++ b/blazor/diagram/symbol-palette/customization.md @@ -1,17 +1,17 @@ --- layout: post -title: Symbol Palette in Blazor Diagram Component | Syncfusion +title: Symbol Palette Appearance in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about Symbol Palette in Syncfusion Blazor Diagram component and much more details. platform: Blazor control: Diagram Component documentation: ug --- -# Symbol Palette in Blazor Diagram Component +# Symbol Palette Appearance in Blazor Diagram Component The [SymbolPalette](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.html) component showcases a collection of [Palettes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_Palettes), each containing a set of predefined nodes and connectors. This powerful feature enables users to easily drag and drop these elements into the diagram, streamlining the process of creating and modifying complex diagrams. -## How to customize the palette header +## How to Customize the Palette Header Palettes can be customized with header texts and expansion controls for better organization and user experience. @@ -28,7 +28,7 @@ SymbolPalette.Palettes[0].IsExpanded = false; You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/PaletteHeader) -## How to customize the size of symbols +## How to Customize Symbol Size The size of individual symbols in the symbol palette can be customized. The [SymbolWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_SymbolWidth) and [SymbolHeight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_SymbolHeight) properties of the SfSymbolPaletteComponent allow you to define the dimensions of the symbols. @@ -118,7 +118,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync The [SymbolMargin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_SymbolMargin) property allows you to define the space around individual symbols in the palette, outside of their defined borders. This margin creates visual separation between symbols, enhancing the overall layout and appearance of the Symbol Palette. -## How to customize the symbol drag preview +## How to Customize the Symbol Drag Preview The symbol preview size of palette items can be customized using the [SymbolDragPreviewSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_SymbolDiagramPreviewSize) property. This property allows you to define a uniform preview size for all symbol palette items. The [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_Height) properties of SymbolDragPreviewSize enable you to specify the dimensions of the preview for each symbol in the palette. @@ -205,15 +205,15 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![SymbolPreview in Blazor Diagram](../images/blazor-diagram-symbol-preview.gif) -## How to restrict symbol dragging in a palette +## How to Restrict Symbol Dragging in a Palette The [AllowDrag](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_AllowDrag) property of `SfSymbolPaletteComponent` enables or disables the ability to drag symbols from the palette. When set to `true`, users can drag symbols; when `false`, dragging is disabled. This property provides control over symbol interaction within the Symbol Palette component. -## How to get notification for expanding the palette +## How to Get Notification for Expanding the Palette The [Expanding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_Expanding) event of the `SfSymbolPaletteComponent` is triggered just before an item in the symbol palette is expanded or collapsed. This event provides an opportunity to perform custom actions or modifications before the expansion/collapse state changes. -## How to expand single or multiple palette +## How to Expand Single or Multiple Palette The [PaletteExpandMode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_PaletteExpandMode) property of `SfSymbolPaletteComponent` determines how multiple palettes can be expanded within the symbol palette. @@ -229,7 +229,7 @@ The [PaletteExpandMode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor. ``` -## How to Enable/Disable animation in symbol palette +## How to Enable or Disable Animation in Symbol Palette The symbol palette offers the ability to enable or disable animation when expanding and collapsing panels. This feature is controlled through the [EnableAnimation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_EnableAnimation) property. By default, EnableAnimation is set to true. @@ -300,7 +300,7 @@ These default settings can be customized to enhance the user experience and matc ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/AnimationSupport) -## How to add symbol descriptions to palette symbols +## How to Add Symbol Descriptions to Palette Symbols The diagram component offers support for adding descriptive text below each symbol in the palette. This enhanced visual representation provides additional details about each symbol, improving user understanding and usability. You can customize the height and width of the symbol description individually to suit your needs. To add or modify symbol descriptions at runtime, utilize the [GetSymbolInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_GetSymbolInfo) method provided by the SfSymbolPaletteComponent. The following code is an example to set a symbol description for symbols in the palette. @@ -373,7 +373,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Symbol with Description in Blazor Diagram](../images/blazor-diagram-symbol-description.png) -## How to customize the appearance of symbol description +## How to Customize the Symbol Description Customize the appearance of symbol descriptions in the symbol palette by adjusting the following properties: @@ -483,17 +483,17 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Style of the Symbol Description in Blazor Diagram](../images/blazor-diagram-symbol-description-style.png) -## How to provide tooltip for symbols in symbol palette +## How to Provide Tooltip for Symbols in Symbol Palette The Symbol Palette offers tooltip support, displaying informative text when the mouse hovers over any node or connector. These tooltips can be customized individually for each symbol within the palette, enhancing user experience and providing additional context for the available elements. -### Default tooltip for symbols +### How to Show Default Tooltips for Symbols By default, the symbol's ID is displayed as the tooltip for each symbol in the symbol palette. The following image illustrates how the tooltip appears when the mouse hovers over symbols in the symbol palette. ![Default Tooltip in symbol palette](../images/defaulttooltip.png) -### Custom tooltip for symbols +### How to Provide Custom Tooltips for Symbols You can enhance the symbol palette by providing custom tooltips for symbols. This is achieved by assigning custom tooltip content to the Tooltip property of nodes and connectors. To enable these custom tooltips for symbols in the symbol palette, set the Tooltip constraints for both nodes and connectors. Once configured, these custom tooltips will be displayed when hovering over the corresponding symbols in the symbol palette, offering users more informative and context-specific details about each symbol. @@ -566,7 +566,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Tooltip in symbol palette](../images/symboltooltip.png) -## How to provide different tooltip for Symbol palette and diagram elements. +## How to Provide Different Tooltip for Symbols in the Palette and Diagram Elements. When you define custom tooltip to the symbol then same tooltip will be displayed for both symbol and dropped node in the diagram canvas. To provide different tooltip for symbols in the symbol palette and the dropped node in the diagram canvas, then DragDrop event can be utilized. The [DragDrop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DragDrop) event is triggered when a symbol is dragged and dropped from the symbol palette to the drawing area. In the Drop event, you can define the new tooltip for the dropped node by assigning new tooltip content to the Tooltip property of the node. The following code snippet will demonstrate how to define two different tooltip for symbol in the symbol palette and dropped node in the diagram canvas. @@ -664,7 +664,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Tooltip in symbol palette](../images/differenttooltip.gif) -### Tooltip template for symbols +### How to Use Tooltip Template for Symbols You can provide a custom template as a tooltip for symbols in the symbol palette using the [TooltipTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SymbolPaletteTemplates.html#Syncfusion_Blazor_Diagram_SymbolPalette_SymbolPaletteTemplates_TooltipTemplate) property of the `SfDiagramComponent`. Once the tooltip template is defined, enable custom tooltips for symbols in the symbol palette by setting the Tooltip constraints for nodes and connectors. This allows the custom tooltip template to be displayed when hovering over symbols in the symbol palette, enhancing the user experience and providing more informative tooltips for each symbol. @@ -742,7 +742,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** When the tooltip for the symbol is not initialized, the ID of the symbol will be rendered by default as the tooltip content. When the tooltip is defined, either content or template must be specified; otherwise, the tooltip will remain empty. -## Palette interaction +## How to Handle Symbol Palette Interaction Palette interaction provides notifications for symbol entry, exit, and dragging within the diagram. @@ -752,13 +752,13 @@ Palette interaction provides notifications for symbol entry, exit, and dragging For more information about event, refer to the [Events](../events). -## Escape key function +## How to Cancel Symbol Drop Using the Escape Key The diagram provides support to cancel the node drop from symbol palette when the ESC key is pressed. ![Escape key in symbol palette](../images/blazor-diagram-palette-escape-key.gif) -## How to enable the chunk message +## How to Enable the Chunk Message In the Blazor Diagram component, calculating the bounds of paths, text, images, and SVG data from the server to the JavaScript side using JsInterop calls is crucial. However, when processing large data sets (exceeding 32KB for a single incoming hub message) in a single JS call, connection disconnection issues can arise. To mitigate this problem, we have introduced the [EnableChunkMessages](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_EnableChunkMessages) property in the Symbol Palette component. diff --git a/blazor/diagram/symbol-palette/symbol-palette.md b/blazor/diagram/symbol-palette/symbol-palette.md index 0d4f782a2a..212e476ff7 100644 --- a/blazor/diagram/symbol-palette/symbol-palette.md +++ b/blazor/diagram/symbol-palette/symbol-palette.md @@ -11,7 +11,7 @@ documentation: ug The [SymbolPalette](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.html) component displays a collection of [Palettes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_Palettes), each containing a set of predefined nodes and connectors. This versatile tool enables users to easily drag and drop these elements into the diagram, streamlining the process of creating and modifying diagrams efficiently. -## How to create symbol palette +## How to Create Symbol Palette To create Symbol Palette easily and to add nodes and connectors in it, you can check the video below. @@ -32,7 +32,7 @@ The [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Symb You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/CreateSymbolPalette) -### How to add node to palette +### How to Add Node to Palette The [SymbolWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_SymbolWidth) and [SymbolHeight](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_SymbolHeight) properties of the SfSymbolPaletteComponent are essential for defining the dimensions of symbols (nodes, connectors, or nodegroups) rendered in the palette. These properties ensure that symbols are displayed with the correct size and proportions. The following code example demonstrates how to add a node to a symbol palette with specified dimensions. @@ -160,7 +160,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Node to Symbol Palette in Blazor Diagram](../images/blazor-diagram-add-node-to-palette.png) -### How to add connector to palette +### How to Add Connector to Palette The following code example illustrates how to add connector to a palette. @@ -230,7 +230,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Connector to Symbol Palette in Blazor Diagram](../images/blazor-diagram-add-connector-to-palette.png) -### How to add nodegroup into palette +### How to Add Node Group into Palette The following code example illustrates how to add nodegroup to a palette. @@ -319,7 +319,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding NodeGroup to Symbol Palette in Blazor Diagram](../images/blazor-diagram-add-node-group-to-palette.png) -## How to add palette to SymbolPalette +## How to Add Palette to Symbol Palette A palette allows you to display a group of related symbols and textually annotate the group with a header. [Palettes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.Palette.html) can be added as a collection of symbol groups, providing a organized way to categorize and present symbols. @@ -475,7 +475,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Adding Palette to SymbolPalette in Blazor Diagram](../images/blazor-diagram-add-palette-to-symbol-palette.png) -## How to drag and drop symbols from palette to diagram +## How to Drag and Drop Symbols from Palette to Diagram To enable drag and drop functionality, you must add the diagram component to the [Targets](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_Targets) collection of the symbol palette. This establishes the connection between the symbol palette and the diagram, allowing seamless interaction between the two components. The following code illustrates how to add diagram to the Targets collection. @@ -632,7 +632,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Drag and Drop in Blazor Diagram](../images/blazor-diagram-drag-and-drop.gif) -## How to add/remove symbols from palette at runtime +## How to Add or Remove Symbols in the Symbol Palette at Runtime Symbols can be dynamically added to the palette at runtime using the public method [AddPaletteItem](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_AddPaletteItem_System_String_Syncfusion_Blazor_Diagram_NodeBase_System_Boolean_). This method allows for flexible customization of the symbol palette, enabling users to incorporate new symbols as needed during the application's execution. The following code sample illustrates how to add symbol using AddPaletteItem method. @@ -666,7 +666,7 @@ Symbols can be removed from palette at runtime by using the public method [Remov You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/AddRemoveSymbolAtRuntime) -## How to add/remove palettes at runtime +## How to Add or Remove Palettes at Runtime Palettes can be dynamically added to the symbol palette at runtime using the public method [AddPalettes](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_AddPalettes_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_SymbolPalette_Palette__). This method allows for flexible customization of the symbol palette during application execution. The following code sample illustrates how to add palette using AddPalettes method. @@ -709,7 +709,7 @@ Palettes can be removed from the symbol palette at runtime by using the public m ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/AddRemovePaletteAtRuntime) -## How to enable symbol search option in symbol palette +## How to Enable Symbol Search Option in Symbol Palette The diagram component offers a search functionality within the symbol palette. By utilizing the [ShowSearchTextBox](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_ShowSearchTextBox) property of the palette, you can control the visibility of the search textbox. This feature allows users to quickly locate specific symbols by entering either the symbol ID (e.g., "rectangle") or relevant search keywords into the search field. After inputting the search criteria, clicking the search button will filter and display matching symbols. The search mechanism works by comparing the entered text with the value of each symbol's ID property, ensuring efficient and accurate symbol retrieval within the palette. @@ -826,7 +826,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Search Option in Blazor Diagram](../images/SymbolSearch.gif) -## How to add search keywords for symbols +## How to Add Search keywords for Symbols The [SearchTags](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBase.html#Syncfusion_Blazor_Diagram_NodeBase_SearchTags) property enhances the searchability of symbols within the symbol palette by allowing you to specify custom keywords. These tags can be associated with various diagram elements such as nodes, connectors, groups, swimlanes, and BPMN symbols. By utilizing search tags, users can more easily locate and identify relevant symbols for their diagramming needs, improving the overall user experience and efficiency of the symbol palette feature. @@ -890,7 +890,7 @@ The [SearchTags](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/SearchTag) -## How to update common values for all nodes and connectors +## How to Update Common Values for All Nodes and Connectors When adding additional symbols such as nodes and connectors to the palette, you can define default settings for these objects using the [NodeCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_NodeCreating) and [ConnectorCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_ConnectorCreating) properties of the diagram. These properties allow you to specify default attributes and behaviors for nodes and connectors, ensuring consistency and efficiency when adding new symbols to your palette. @@ -978,7 +978,7 @@ When adding additional symbols such as nodes and connectors to the palette, you ![Symbol with Description in Blazor Diagram](../images/blazor-diagram-symbol-description.png) -## How to refresh the symbols at runtime +## How to Refresh the Symbols at Runtime The [RefreshSymbols](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SfSymbolPaletteComponent.html#Syncfusion_Blazor_Diagram_SymbolPalette_SfSymbolPaletteComponent_RefreshSymbols) method enables dynamic redrawing of symbols in the SymbolPalette without the need to re-render the entire Diagram component. This method enhances performance by updating only the necessary symbols, providing a more efficient way to refresh the SymbolPalette's content. @@ -1055,7 +1055,7 @@ The [RefreshSymbols](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Dia ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/SymbolPalette/RefereshPalette) -## How to set a template for symbol palette symbols +## How to Set a Template for Symbol Palette Symbols The Symbol Palette allows you to customize the appearance of symbols using [SymbolPaletteTemplates](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SymbolPaletteTemplates.html). This feature enables you to create visually appealing and informative symbols that can enhance the user experience. The following example demonstrates how to set a template for SVG symbols. You can similarly set templates for HTML symbols. diff --git a/blazor/diagram/tool-tip.md b/blazor/diagram/tool-tip.md index 87304ead95..c37bfa5396 100644 --- a/blazor/diagram/tool-tip.md +++ b/blazor/diagram/tool-tip.md @@ -11,7 +11,7 @@ documentation: ug In a Graphical User Interface (GUI), a tooltip is an informative pop-up message that appears when a user hovers their cursor over an interactive element. The diagram component offers comprehensive tooltip support, enhancing user experience during various interactions. These tooltips are displayed when dragging, resizing, or rotating nodes, as well as when the mouse hovers over any diagram element, providing contextual information and improving overall usability. -## Default tooltip +## How to Show Default Tooltip By default, the diagram features an interactive tooltip that dynamically displays crucial information about diagram elements during user interactions. This tooltip provides real-time data on size, position, and angle when users drag, resize, or rotate elements. The following images demonstrate how the diagram presents this node-specific information during various user interactions, enhancing the overall user experience and precision in element manipulation. @@ -19,7 +19,7 @@ By default, the diagram features an interactive tooltip that dynamically display |------|--------|--------| |![ToolTip During Drag](images/Drag.png) | ![ToolTip During Resize](images/Resize.png) | ![ToolTip During Rotate](images/Rotate.png) | -## Tooltip for a specific nodes/connectors +## How to Show Custom Tooltips for Specific Nodes and Connectors The diagram component offers a sophisticated tooltip feature that activates when the mouse hovers over nodes or connectors. This powerful functionality allows for highly customizable tooltips, enabling unique information display for each individual node and connector within the diagram. @@ -87,7 +87,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![ToolTip During hover the node](images/blazor-diagram-connectortooltip.png) -## How to set tooltip position for nodes/connectors +## How to Set Tooltip Position for Nodes and Connectors Tooltips can be strategically attached to 12 predefined positions around the target element. When initializing the Tooltip, you can specify the desired location by setting the [Position](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_Position) property with one of the following values: @@ -189,7 +189,7 @@ The following code example sets the tooltip position for the connectors. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Tooltip/TooltipPositionForConnector) -## How to set tooltip content for nodes/connectors +## How to Set Tooltip Content for Nodes and Connectors The Tooltip's [Content](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_Content) property accepts text or any informational content, which will be displayed as the primary message within the Tooltip when hovering over nodes or connectors in the diagram. @@ -272,7 +272,7 @@ The following code example sets the tooltip content for the connectors. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Tooltip/TooltipContentForConnector) -## How to shows/hides the tip pointer for tooltip +## How to Shows or Hides the Tip Pointer for Tooltip The [ShowTipPointer](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_ShowTipPointer) property determines the visibility of the tooltip pointer. When set to true, the pointer is displayed; when set to false, it remains hidden. This property allows you to customize the appearance of tooltips in your Blazor diagram. @@ -359,7 +359,7 @@ The following code example is used to set tooltip tip pointer for connectors. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Tooltip/TipPointerForConnectorTooltip) -## Tooltip template content +## How to Customize Tooltip Using Template For advanced customization of tooltip content or to create a unique visual representation within the tooltip, utilize the [TooltipTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTemplates.html#Syncfusion_Blazor_Diagram_DiagramTemplates_TooltipTemplate) property of the `SfDiagramComponent`. This powerful feature allows you to design and implement tailored tooltip elements that enhance the user experience and provide more detailed or context-specific information. The following code example illustrates how to add the formatted template content to the tooltip for the nodes. @@ -456,7 +456,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** When the content propoerty of the tooltip is also defined with the template for either node , connector or diagram, only the content will get rendered. The template content will get rendered only when the content property is undefined. -## Tooltip animation +## How to Animate Tooltip To animate the tooltip, a set of specific animation effects are available, and it can be controlled by using the animation property. The [Animation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_AnimationSettings) property also allows you to set delay, duration, and various other effects of your choice. @@ -565,7 +565,7 @@ The following code example illustrates how to set the animation to the tooltip f ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Tooltip/TooltipAnimationForConnector) -## Tooltip Open Mode +## How to Customize Tooltip Open Mode The Tooltip's activation mode can be customized to determine how it appears on the page. You can configure it to open when hovering over, focusing on, or clicking the target element. To set this behavior, use the [OpensOn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_OpensOn) property when initializing the Tooltip. Choose one of the following values to define the desired interaction: @@ -750,7 +750,7 @@ The following code example illustrates how to set the open mode to the tooltip f ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Tooltip/TooltipOpenModeForConnector) -## Sticky Mode +## How to Enable Sticky Tooltip Tooltips for nodes and connectors can be configured to remain visible until manually dismissed, a feature known as "sticky" tooltips. When enabled, a close icon appears in the top-right corner of the tooltip, allowing users to explicitly close it when desired. @@ -833,7 +833,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync For more information about tooltip, refer to [Tooltip](https://blazor.syncfusion.com/documentation/diagram/tool-tip) -## How to set tooltip for user handles +## How to Set Tooltip for User Handles The Diagram component offers robust tooltip functionality for [UserHandles](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SelectorConstraints.html#Syncfusion_Blazor_Diagram_SelectorConstraints_UserHandle), enhancing user interaction. To implement this feature, configure the `Tooltip` property of the `UserHandle` with the desired [Content](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_Content) and specify its [Position](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_Position). This setup ensures that informative tooltips appear at the optimal location when users hover over the handles, providing a more intuitive and user-friendly diagramming experience. @@ -888,7 +888,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Tooltip for UserHandle](images/UserHandleTooltip.gif) -### How to set sticky tooltip for user handles +### How to Set Sticky Tooltip for User Handles Tooltips for user handles can be configured to remain visible until manually dismissed, a feature known as "sticky" tooltips. When enabled, a close icon appears in the top-right corner of the tooltip, allowing users to explicitly close it when desired. @@ -947,7 +947,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![ToolTip During hover the ports with Stikcy Mode](images/UserHandleIsSticky.png) -## How to set tooltip for Fixed user handle +## How to Set Tooltip for Fixed User Handle The diagram component offers robust tooltip functionality for [FixedUserHandles](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html), enhancing user interaction and information display. To enable this feature, configure the tooltip property within the diagram model. Specifically, define the tooltip [Content](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_Content) and set its [Position](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTooltip.html#Syncfusion_Blazor_Diagram_DiagramTooltip_Position) relative to the handle. This configuration ensures that when users hover over a fixed user handle, contextual information appears at the specified location. It's important to note that tooltips are disabled by default and require explicit activation through these settings. you need to add the tooltip as shown in the following example. @@ -992,7 +992,7 @@ The diagram component offers robust tooltip functionality for [FixedUserHandles] You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/UserHandle/FixedUserHandleTooltip) ![Tooltip for UserHandle](images/FixedUserHandleTooltip.gif) -### How to set sticky tooltip for fixed user handles +### How to Set Sticky Tooltip for Fixed User Handles When the `IsSticky` property of the tooltip is set to `true`, tooltips for fixed user handles will remain visible on the screen until the user explicitly dismisses them by clicking the close icon. In this mode, a close icon is added to the top-right corner of the tooltip. This persistent tooltip behavior can be enabled or disabled using the `IsSticky` property. By default, the `IsSticky` property is set to `false`, meaning tooltips will disappear automatically when the user moves the mouse away from the handle. @@ -1039,7 +1039,7 @@ The following code example demonstrates how to set the IsSticky property to true You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/UserHandle/FixedUserHandleIsSticky) ![ToolTip During hover the ports with Stikcy Mode](images/FixedUserHandleIsSticky.png) -## How to set tooltip for ports +## How to Set Tooltip for Ports The Diagram component offers robust support for displaying tooltips when the mouse hovers over ports. This feature can be customized for each port individually, allowing for a more informative and interactive user experience. @@ -1116,7 +1116,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![ToolTip During hover the port](./images/PortTooltip.gif ) -### How to set sticky tooltip for ports +### How to Set Sticky Tooltip for Ports Enhance your diagram's user experience with "sticky" tooltips for ports. This feature allows tooltips to remain visible until explicitly closed, providing users with persistent information. When enabled, a close icon appears in the top-right corner of the tooltip, empowering users to dismiss it at their convenience. diff --git a/blazor/diagram/tools.md b/blazor/diagram/tools.md index c99d4a58c1..c1532c3559 100644 --- a/blazor/diagram/tools.md +++ b/blazor/diagram/tools.md @@ -9,11 +9,11 @@ documentation: ug # Tools in Blazor Diagram Component -## Drawing tools +## How to Use Drawing Tools The drawing tool allows you to draw any kind of [Node](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html) or [Connector](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html) during runtime by clicking and dragging on the diagram page. -## How to draw shapes using a drawing tool +## How to Draw Shapes Using the Drawing Tool To draw a [shape](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Shape.html), you need to activate the drawing tool by using the [InteractionController](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_InteractionController) property and set the shape by using the [DrawingObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DrawingObject) property. The following code example illustrates how to draw a rectangle at runtime. @@ -75,7 +75,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Node Tool in Blazor Diagram](images/blazor-diagram-node-tool.gif) -## How to draw connector using a drawing tool +## How to Draw Connector Using the Drawing Tool To draw a [Connector](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html), you need to activate the drawing tool by using the [InteractionController](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_InteractionController) property and set the connector by using the [DrawingObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DrawingObject) property. The following code example illustrates how to draw a [StraightSegment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.StraightSegment.html). @@ -138,7 +138,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector Tool in Blazor Diagram](images/blazor-diagram-connector-tool.gif) -## How to draw text node using a drawing tool +## How to Draw Text Node Using the Drawing Tool The diagram allows you to create a text Node as soon as you click on the diagram page. The following code illustrates how to draw a text. @@ -201,7 +201,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Text Tool in Blazor Diagram](./images/blazor-diagram-Text-drawingtool.gif) -## How to draw polygon using a drawing tool +## How to Draw Polygon Using the Drawing Tool The diagram allows you to create the [Polygon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeBasicShapes.html#Syncfusion_Blazor_Diagram_NodeBasicShapes_Polygon) shape by clicking and moving the mouse at runtime on the diagram page. @@ -269,7 +269,7 @@ The following code illustrates how to draw a polygon shape. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DrawingTools/PolygonShapeTool) -## How to draw polyline using a drawing tool +## How to Draw Polyline Using the Drawing Tool The diagram allows you to create the [Polyline](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Polyline) segments with straight lines and angled vertices at the control points by clicking and moving the mouse at runtime on the diagram page. @@ -330,7 +330,7 @@ The following code illustrates how to draw a polyline connector. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DrawingTools/PolylineDrawTool) -## Tool selection +## How to Select Tool There are some functionalities that can be achieved by clicking and dragging on the diagram surface. They are as follows, @@ -389,7 +389,7 @@ The following code illustrates how to enable multiple interaction controllers, You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DrawingTools/ToolSelection). -## Freehand Drawing +## How to Enable Freehand Drawing The diagram supports an innovative feature called Freehand Drawing, empowering users to effortlessly create freeform curves (splines) directly on the diagram page. With this remarkable functionality, users can unlock their imagination and showcase their creativity by effortlessly sketching anything from simple drawings to elaborate artistic creations. To utilize this feature, users can access the [DrawingObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DrawingObject) property and select the [Freehand](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Freehand) connector type, enabling them to express their ideas and concepts through fluid and natural hand-drawn lines. diff --git a/blazor/diagram/undo-redo.md b/blazor/diagram/undo-redo.md index a52c6dc338..583fab74be 100644 --- a/blazor/diagram/undo-redo.md +++ b/blazor/diagram/undo-redo.md @@ -11,15 +11,15 @@ documentation: ug The Blazor Diagram component tracks the history of actions performed after initialization and provides support to reverse and restore those changes. -## Undo and redo +## How to Enable Undo and Redo The [Diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) offers built-in functionality to track changes made through both user interactions and public APIs. These changes can be reverted or restored using shortcut keys or commands. -## Undo/redo through shortcut keys +## How to Perform Undo and Redo Actions Using Shortcut Keys Undo and redo commands can be executed through shortcut keys. Shortcut key for undo is Ctrl+Z and shortcut key for redo is Ctrl+Y. -## Undo/redo through public APIs +## How to Use Public APIs for Undo and Redo The [Undo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Undo) and [Redo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Redo) methods allow you to programmatically revert or restore changes. The following code example illustrates how to undo/redo the changes through code. @@ -35,7 +35,7 @@ diagram.Redo(); The [HistoryChanged](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_HistoryChanged) event is triggered when a change in the diagram is reverted or restored. -### Group multiple changes +### How to Group Multiple Changes The History list feature enables users to revert or restore multiple changes through a single undo/redo command. This functionality is particularly useful when dealing with complex operations, such as modifying the fill color of multiple elements simultaneously. @@ -52,7 +52,7 @@ diagram.StartGroupAction(); diagram.EndGroupAction(); ``` -## History change event +## How to Track Undo and Redo Actions Using the History Change Event * This event can be utilized for customization purposes during interactions with diagram elements. * When users interact with nodes or connectors, entries are added to the history list, triggering this event. @@ -79,7 +79,7 @@ The [HistoryChangedEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.B ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Undo-Redo/HistoryChange) -## How to set stack limit +## How to Set Stack Limit The [StackLimit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramHistoryManager.html#Syncfusion_Blazor_Diagram_DiagramHistoryManager_StackLimit) property of the history manager allows you to set a maximum number of history entries that can be stored in the history list. This limit helps control the memory usage and optimizes the performance of undo and redo operations by restricting the number of actions that can be undone or redone. @@ -127,7 +127,7 @@ Download a complete working sample from [GitHub](https://github.com/SyncfusionEx ![StackLimit in Blazor Diagram](images/stackLimitGIF.gif) -## How to track custom entry +## How to Track Custom Entry [Diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) offers robust functionality to monitor and track modifications made to custom properties. The following example demonstrates how to effectively implement change tracking for custom property alterations, enhancing the diagram's undo-redo capabilities and providing better control over the diagram's state. @@ -178,7 +178,7 @@ Download a complete working sample from [GitHub](https://github.com/SyncfusionEx ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Undo-Redo/CustomEntry) -### HistoryAdding Event +### How to Handle History Adding Event [HistoryAdding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramHistoryManager.html#Syncfusion_Blazor_Diagram_DiagramHistoryManager_HistoryAdding) event in the [DiagramHistoryManager](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramHistoryManager.html) allows you to control the addition of history entries. This event is triggered before a new entry is added to the history stack. It provides a history entry as an argument and expects a boolean return value indicating whether the specific entry should be added (true) or discarded (false). @@ -223,7 +223,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Undo-Redo/HistoryAdding) -### Custom undo redo +### How to Track and Manage Custom Undo and Redo Actions The custom undo-redo process allows you to store and manage actions that are not captured by the default undo-redo history list. This feature provides greater flexibility and control over the diagram's state management. diff --git a/blazor/diagram/user-handle.md b/blazor/diagram/user-handle.md index 72393263a1..44de2f7f56 100644 --- a/blazor/diagram/user-handle.md +++ b/blazor/diagram/user-handle.md @@ -11,7 +11,7 @@ documentation: ug User handles are customizable interactive elements that enhance diagram functionality. They can be utilized to execute custom-defined actions as well as perform standard clipboard operations, providing a versatile and user-friendly interface for diagram manipulation. -## How to initialize the userhandle +## How to Initialize the User Handle The user handle can be enabled for the selected nodes/connectors by setting a [SelectorConstraints](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SelectorConstraints.html) as [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SelectorConstraints.html#Syncfusion_Blazor_Diagram_SelectorConstraints_UserHandle) and then use the [UserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html) class to define the userhandle object and add that to [UserHandles](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramSelectionSettings.html#Syncfusion_Blazor_Diagram_DiagramSelectionSettings_UserHandles) collection of the DiagramSelectionSettings. The following code example is used to enable and create user handles for the diagram nodes/connectors. @@ -82,10 +82,10 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Node with User Handle](images/blazor-diagram-with-user-handle.png) -## How to Customizing User Handle Actions +## How to Customize User Handle Actions User handles in the Syncfusion Blazor Diagram component can be customized to perform specific actions when clicked. By default, user handles provide basic functionality, but you can configure them to execute custom logic such as cloning, deleting, or triggering other actions. -### Handling Click Actions for User Handles +### How to Handle User Handle Click Actions To customize user handle actions in the Syncfusion Blazor Diagram component, you need to define a custom tool that implements the required behavior and map the user handle to this tool using the [GetCustomTool](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_GetCustomTool) method, ensuring that the appropriate action is executed when the handle is clicked. The following code explains how to customize the User Handle click Actions. @@ -215,7 +215,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ## Customization -### Positioning the user handle +### How to Position User Handles The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Offset) property of user handles allows precise positioning based on fractional values. A value of 0 represents the Top-Left corner, 1 represents the Bottom-Right corner, and 0.5 represents the midpoint of either the Width or Height. The [Side](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Side) property determines the alignment orientation of the user handle relative to the specified `Offset`. Together, these properties offer flexible and accurate placement of user handles within the diagram. @@ -232,11 +232,11 @@ The following table shows all the possible alignments visually shows the user ha |1|Top|![Blazor Diagram Node with User Handle at RightTop Corner](images/blazor-diagram-user-handle-at-righttop-corner.png)| |1|Bottom|![Blazor Diagram Node with User Handle at Bottom Corner](images/blazor-diagram-user-handle-at-bottom-corner.png)| -### How to change the size of the user handle +### How to Customize User Handle Size The Diagram component enables customization of user handle dimensions through the [Size](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.UserHandle.html#Syncfusion_Blazor_Diagram_UserHandle_Size) property. This property allows you to specify the width and height of user handles in pixels. If not explicitly set, the `Size` property defaults to 25 pixels, providing a standard visual representation. Adjusting this value lets you create user handles that are appropriately sized for your specific diagram requirements. -### How to change the style of the user handle +### How to Style User Handles You can enhance the visual appeal of user handles by customizing their appearance using specific properties such as PathColor, BorderColor, BackgroundColor, and BorderWidth. The following code demonstrates how to effectively modify the style of user handles to align with your design preferences and improve overall user interface aesthetics. @@ -325,7 +325,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Customizing Appearance of Userhandle in Blazor Diagram](images/blazor-diagram-custom-user-handle-appearance.png) -### How to change the userhandle's visible target +### How to Control User Handle Visibility The [VisibleTarget](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.VisibleTarget.html) property determines the visibility of the user handle for specific diagram elements. It allows you to control whether the user handle is displayed for Nodes, Connectors, or both. By configuring this property, you can customize the user interaction experience and ensure that handles are only visible for the desired elements in your diagram. @@ -569,7 +569,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![VisibleTarget](Images/blazor-diagram-user-handle-visible-target.gif) -### How to provide a template to userhandle +### How to Provide a Template to User Handle You can customize the appearance of user handles by defining a template in the [UserHandleTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramTemplates.html#Syncfusion_Blazor_Diagram_DiagramTemplates_UserHandleTemplate) at the tag level. This template will be rendered when neither the PathData nor ImageUrl properties of the user handle are specified. However, if either PathData or ImageUrl is defined, they take precedence, and the template will not be rendered. This allows for flexible styling options while maintaining a clear hierarchy of visual representations for user handles. The following code explains how to define a template for the [FixedUserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html). @@ -652,11 +652,11 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Template for UserHandle](images/UserHandleTemplate.gif) -## Fixed user handles +## How to Use Fixed User Handles The [FixedUserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html) feature allows you to add customizable, readily accessible commands around nodes and connectors without requiring selection. This enhances user interaction and streamlines frequently used operations within the diagram. -## How to initialize the fixed user handles +## How to Initialize the Fixed User Handles To create the fixed user handles, define and add them to the collection of nodes and connectors property. The following code example is used to create an fixed user handles for the nodes and connectors. @@ -701,7 +701,7 @@ To create the fixed user handles, define and add them to the collection of nodes ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/UserHandle/FixedUserHandle) -## How to customize the fixed user handle +## How to Customize the Fixed User Handle * The [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_ID) property of a fixed user handle is essential for defining its unique identification. This ID is crucial for adding custom events to the fixed user handle and distinguishing it from others. @@ -713,11 +713,11 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> The [PathData](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_PathData) property is mandatory for rendering a fixed user handle. It defines the shape and appearance of the handle using SVG path commands. -### How to change the size of the fixed user handle +### How to Customize Fixed User Handle Size Diagram enables customization of fixed user handle dimensions through the [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_Width) and [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_Height) properties. These properties allow precise control over the size of fixed user handles. By default, both `Width` and `Height` are set to 10 units. Adjusting these values provides flexibility in designing user handles that align with your diagram's visual style and functional requirements. -### How to change the style of the fixed user handle +### How to Style Fixed User Handle * You can change the style of the fixed user handles with the specific properties of borderColor, borderWidth, and backgroundColor by using the [Stroke](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_Stroke), [StrokeThickness](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_StrokeThickness), and [Fill](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html#Syncfusion_Blazor_Diagram_FixedUserHandle_Fill) properties, and the icon BorderColor, and BorderWidth by using the `IconStroke` and `IconStrokeThickness` properties. @@ -776,15 +776,15 @@ You can download a complete working sample from [GitHub](https://github.com/Sync N> The fixed user handle id need to be unique. -## How to customize the fixed userhandle of the node +## How to Customize Node Fixed User Handle The node fixed user handle can be precisely aligned relative to the node boundaries using two key properties: [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeFixedUserHandle.html#Syncfusion_Blazor_Diagram_NodeFixedUserHandle_Margin) and [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeFixedUserHandle.html#Syncfusion_Blazor_Diagram_NodeFixedUserHandle_Offset). These settings work in tandem to provide enhanced control over the positioning of node fixed user handles. By utilizing these properties, developers can achieve precise placement and fine-tune the user handle's position relative to the node, offering greater flexibility in designing intuitive user interfaces. -### Margin for the fixed user handle of the node +### How to Adjust Margin for Node Fixed User Handle [Margin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeFixedUserHandle.html#Syncfusion_Blazor_Diagram_NodeFixedUserHandle_Margin) is a property that allows you to add precise spacing around a fixed user handle. By specifying an absolute value, you can create blank space on any of its four sides. This property enables you to fine-tune the position of the fixed user handle, effectively displacing it from its default location. -### Offset for the fixed user handle of the node +### How to Position Node Fixed User Handle Using Offset The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeFixedUserHandle.html#Syncfusion_Blazor_Diagram_NodeFixedUserHandle_Offset) property of a fixed user handle is used to position the handle relative to the node. It accepts `X` and `Y` coordinates, where (0,0) represents the top-left corner of the node, and (1,1) represents the bottom-right corner. This allows for precise alignment and placement of the user handle on the node. @@ -851,13 +851,13 @@ The following code explains how to customize the node fixed user handle. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/UserHandle/Offset) -## How to customize the fixed userhandle of the connector +## How to Customize Connector Fixed User Handle * The connector fixed user handle can be precisely positioned relative to the connector boundaries using a combination of alignment, displacement, and offset settings. This versatility provides enhanced control over the placement of connector fixed user handles, allowing for more precise and customized positioning. * The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorFixedUserHandle.html#Syncfusion_Blazor_Diagram_ConnectorFixedUserHandle_Offset) and [Alignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorFixedUserHandle.html#Syncfusion_Blazor_Diagram_ConnectorFixedUserHandle_Alignment) properties of the ConnectorFixedUserHandle class offer fine-grained control for aligning fixed user handles to specific connector segments. These properties work in tandem to achieve the desired positioning along the connector's path. -### Offset for the connector fixed user handle +### How to Position Connector Fixed User Handle Using Offset The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorFixedUserHandle.html#Syncfusion_Blazor_Diagram_ConnectorFixedUserHandle_Offset) property of the connector fixed user handle allows precise positioning along the connector's length. It uses a fractional value where: * 0 represents the connector's source point @@ -866,7 +866,7 @@ The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Con This fractional system enables flexible and accurate alignment of user handles on connectors. -### How to align the connector fixed user handle +### How to Align Connector Fixed User Handle The connector's fixed user handle can be precisely positioned along its segment path using the [Alignment](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorFixedUserHandle.html#Syncfusion_Blazor_Diagram_ConnectorFixedUserHandle_Alignment) property of the ConnectorFixedUserHandle class. This property allows for fine-tuned control over the handle's placement, enhancing the user interface and interaction capabilities of the diagram. @@ -878,7 +878,7 @@ The following table shows all the possible alignments visually shows the fixed u | 0.5 | Center |![Displaying Fixed User Handle in Center of Blazor Diagram Connector](images/blazor-diagram-user-handle-in-center-of-connector.png)| | 1 | After |![Displaying Fixed User Handle in After Blazor Diagram Connector](images/blazor-diagram-user-handle-in-after-connector.png)| -### Displacement of the connector fixed user handle +### How to Adjust Connector Fixed User Handle Position Using Displacement * The [Displacement](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorFixedUserHandle.html#Syncfusion_Blazor_Diagram_ConnectorFixedUserHandle_Displacement) property enables you to define the precise positioning of the user handle relative to the connector segment. By specifying x and y values, you can control the offset distance between the handle and the connector, allowing for fine-tuned placement and improved visual clarity. @@ -938,7 +938,7 @@ The following code explains how to customize the connector fixed user handle. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/UserHandle/ConnectorFixedUserHandle) -## How to provide a template to fixed userhandle +## How to Provide a Template to Fixed User handle You can define a custom style for fixed user handles using a template in the [FixedUserHandleTemplate] at the tag level. This allows you to create unique templates for each node and connector by distinguishing them based on their ID property. The template will be rendered when the PathData property of the fixeduserhandle is not specified. However, if both PathData and template are defined, PathData takes precedence, and the template will not be rendered. The following code demonstrates how to define a template for a fixed user handle. @@ -1009,7 +1009,7 @@ You can define a custom style for fixed user handles using a template in the [Fi You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/UserHandle/CustomizeFixedUserHandle) ![Template for FixedUserHandle](images/FixedUserTemplate.png) -## FixedUserHandle event +## How to Handle Fixed User Handle Events The Diagram control provides the following event for the fixed user handle. From 0e818c5bd3518d2a196d1b4aece2fc7eadde1357 Mon Sep 17 00:00:00 2001 From: Ramya Date: Mon, 23 Jun 2025 16:04:11 +0530 Subject: [PATCH 07/16] 958831: Update Ug for SEO Changes --- blazor/diagram/annotations/appearance.md | 4 ++-- blazor/diagram/events.md | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/blazor/diagram/annotations/appearance.md b/blazor/diagram/annotations/appearance.md index 3e9dc3dffb..e463f1aef5 100644 --- a/blazor/diagram/annotations/appearance.md +++ b/blazor/diagram/annotations/appearance.md @@ -48,7 +48,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Changing Annotation Size in Blazor Diagram](../images/blazor-diagram-annotation-size.png) -## How to Add Hyperlink to Annotation +## How to Add Hyper Link to Annotation The diagram provides support to add a [Hyperlink](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_Hyperlink) to the node's or connector's annotation. It can also be customized. @@ -94,7 +94,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Annotation with Hyperlink in Blazor Diagram](../images/blazor-diagram-annotation-with-hyperlink.png) -### How to Display Text in Annotation Hyperlinks +### How to Display Text in Annotation Hyper Links ```cshtml @using Syncfusion.Blazor.Diagram diff --git a/blazor/diagram/events.md b/blazor/diagram/events.md index 2bb7c16245..ce53c03f32 100644 --- a/blazor/diagram/events.md +++ b/blazor/diagram/events.md @@ -121,7 +121,7 @@ The [Property Changed](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.D ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/PropertyChangedEvent) -## How to Handle CollectionChange Events +## How to Handle Collection Change Events * The diagram provides specific events that are triggered when nodes or connectors are added to or removed from the diagram. These events offer opportunities for customization and are invoked whenever the node or connector collection undergoes changes. |Event Name|Arguments|Description| @@ -164,7 +164,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/CollectionChangeEvent) -## How to Handle the MouseEnter Event +## How to Handle the Mouse Enter Event The [MouseEnter](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_MouseEnter) event is triggered when the mouse pointer enters the boundary of a node or connector in the diagram. This event provides valuable information about the element being interacted with. For a comprehensive understanding of the event arguments and their properties, refer to the [DiagramElementMouseEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramElementMouseEventArgs.html). @@ -202,7 +202,7 @@ The [MouseEnter](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/MouseEnterEvent) -## How to Handle the MouseLeave Event +## How to Handle the Mouse Leave Event The [MouseLeave](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_MouseLeave) event is triggered when the mouse pointer exits the boundaries of a node or connector in the diagram. This event provides valuable information about the element being left. For a comprehensive understanding of the event arguments and their properties, refer to the [DiagramElementMouseEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramElementMouseEventArgs.html). @@ -278,7 +278,7 @@ The [MouseHover](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/MouseHoverEvent) -## How to Handle the KeyDown Event +## How to Handle the Key Down Event The [KeyDown](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_KeyDown) event is triggered when a user presses any key on the keyboard while the diagram component has focus. This event provides a powerful way to capture and respond to keyboard interactions. For detailed information about the event arguments and properties available, please refer to the [KeyEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyEventArgs.html). @@ -316,7 +316,7 @@ The [KeyDown](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Sf ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/KeyDownEvent) -## How to Handle the KeyUp Event +## How to Handle the Key Up Event The [KeyUp](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_KeyUp) event is triggered when a user releases a key on the keyboard. This event provides valuable information about the released key and can be used to implement custom functionality or keyboard shortcuts in your Blazor diagram. For detailed information about the event arguments, refer to the [KeyEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.KeyEventArgs.html), which outlines all the properties and methods available for handling this event effectively. @@ -353,7 +353,7 @@ The [KeyUp](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDi ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/KeyUpEvent) -## DragStart Event +## How to Handle the Drag Start Event * The [DragStart](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DragStart) event is triggered when a user begins dragging a symbol from the symbol palette into the diagram canvas. This event provides valuable information about the drag operation initiation. For detailed information about the event arguments and properties available, refer to the [DragStartEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DragStartEventArgs.html). ```cshtml @@ -410,7 +410,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/DragStartEvent) -## Dragging Event +## How to Handle the Dragging Event * The [Dragging](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_Dragging) event is triggered when a diagram element is being dragged over another element in the diagram. This event provides real-time feedback during the dragging process. To explore the available arguments and properties associated with this event, refer to the [DraggingEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DraggingEventArgs.html). @@ -516,7 +516,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events) -## How to Handle the DragDrop Event +## How to Handle the Drag Drop Event * The [DragDrop](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_DragDrop) event is triggered when a user drags a symbol from the symbol palette and drops it onto the diagram's drawing area. This event provides valuable information about the drag and drop operation. To access and utilize the event arguments, refer to the [DropEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DropEventArgs.html) documentation, which details the properties and methods available for handling this event effectively. ```cshtml @@ -570,7 +570,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Events/DragDrop) -## How to Handle the OnAutoScrollChange Event +## How to Handle the On Auto Scroll Change Event The [OnAutoScrollChange](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_OnAutoScrollChange) event is triggered when changes are detected in the scroll position, extent, or viewport size due to auto-scrolling of diagram elements. This event provides an [AutoScrollChangeEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AutoScrollChangeEventArgs.html) argument containing relevant information. The [AutoScrollChangeEventArgs](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AutoScrollChangeEventArgs.html) include the following properties: From 1c7e60ce4372ec95fe6f2e0f7a65bff08304b2a0 Mon Sep 17 00:00:00 2001 From: Ramya Date: Mon, 23 Jun 2025 18:06:05 +0530 Subject: [PATCH 08/16] 958831: Update Ug for SEO Changes --- blazor/diagram/accessibility.md | 2 +- blazor/diagram/annotations/appearance.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blazor/diagram/accessibility.md b/blazor/diagram/accessibility.md index 7f571858d9..860b713f18 100644 --- a/blazor/diagram/accessibility.md +++ b/blazor/diagram/accessibility.md @@ -100,7 +100,7 @@ The aria-label attribute provides the text label with some default description f -## How to Navigate Blazor Diagrams using Keyboard Shortcuts +## Keyboard Shortcuts and Navigations The Blazor Diagram component followed the [keyboard interaction](https://www.w3.org/WAI/ARIA/apg/patterns/alert/#keyboardinteraction) guideline, making it easy for people who use assistive technologies (AT) and those who completely rely on keyboard navigation. The following keyboard shortcuts are supported by the Blazor Diagram component. diff --git a/blazor/diagram/annotations/appearance.md b/blazor/diagram/annotations/appearance.md index e463f1aef5..87790905cf 100644 --- a/blazor/diagram/annotations/appearance.md +++ b/blazor/diagram/annotations/appearance.md @@ -382,7 +382,7 @@ You can change the font style of the annotations with the font specific properti ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/Appearance/AnnotationStyleatRunTime) -## How to Enable and Use Editing Mode +## How to Edit Annotations at Runtime The diagram provides support to edit an annotation at runtime, either programmatically or interactively. By default, the annotation is in view mode. However, it can be brought into edit mode in two ways. From bfea2843c6e2cd6a60e459cf98e598f13d595f48 Mon Sep 17 00:00:00 2001 From: Ramya Date: Mon, 23 Jun 2025 18:10:16 +0530 Subject: [PATCH 09/16] 958831: Update Ug for SEO Changes --- blazor/diagram/annotations/connector-annotation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blazor/diagram/annotations/connector-annotation.md b/blazor/diagram/annotations/connector-annotation.md index 5061d4f424..791ec21372 100644 --- a/blazor/diagram/annotations/connector-annotation.md +++ b/blazor/diagram/annotations/connector-annotation.md @@ -19,7 +19,7 @@ Annotations of a connector can be positioned using the following properties of A * VerticalAlignment * Margin -## How to Set Offset Position for Annotations +## How to Update Offset Position for Annotations The [Offset](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.PathAnnotation.html#Syncfusion_Blazor_Diagram_PathAnnotation_Offset) property of an annotation is used to align the annotations based on fractions. A value of 0 represents Top-Left corner, 1 represents Bottom-Right corner, and 0.5 represents half of Width/Height. From 5ac3ca5c039394bfc54f93307538ebcf69798176 Mon Sep 17 00:00:00 2001 From: Ramya Date: Mon, 23 Jun 2025 18:16:18 +0530 Subject: [PATCH 10/16] 958831: Update Ug for SEO Changes --- blazor/diagram/annotations/labels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blazor/diagram/annotations/labels.md b/blazor/diagram/annotations/labels.md index cf202c68ca..98903be351 100644 --- a/blazor/diagram/annotations/labels.md +++ b/blazor/diagram/annotations/labels.md @@ -202,7 +202,7 @@ Also, a collection of annotations can be removed from the node by using the `Rem N>* You can delete multiple annotations from a node to pass the collection of annotation objects as argument.
* The `Add`, `Remove`, and `RemoveAt` methods are applicable for connectors too. -## How to Modify Annotation at Runtime +## How to Update Annotation at Runtime You can get the annotation directly from the node’s annotations collection property and you can change any annotation properties at runtime. From 1e8c2d95765bf8ac713ebcf6cf56b768e95af330 Mon Sep 17 00:00:00 2001 From: Ramya Date: Tue, 24 Jun 2025 10:13:26 +0530 Subject: [PATCH 11/16] 958831: Update Ug for SEO Changes --- blazor/diagram/annotations/appearance.md | 4 ++-- blazor/diagram/annotations/labels.md | 4 ++-- blazor/diagram/annotations/node-annotation.md | 6 +++--- blazor/diagram/bpmn-shapes/bpmn-event.md | 2 +- blazor/diagram/commands.md | 14 +++++++------- blazor/diagram/connectors/connectors.md | 6 +++--- blazor/diagram/connectors/customization.md | 10 +++++----- blazor/diagram/connectors/interactions.md | 4 ++-- .../diagram/connectors/segments/bezier/bezier.md | 2 +- blazor/diagram/connectors/segments/orthogonal.md | 2 +- blazor/diagram/constraints.md | 2 +- blazor/diagram/container.md | 2 +- blazor/diagram/context-menu.md | 2 +- blazor/diagram/data-binding.md | 10 +++++----- blazor/diagram/getting-started-with-wasm-app.md | 2 +- blazor/diagram/getting-started-with-web-app.md | 2 +- blazor/diagram/getting-started.md | 2 +- blazor/diagram/grid-lines.md | 4 ++-- blazor/diagram/how-to.md | 4 ++-- blazor/diagram/interaction.md | 4 ++-- blazor/diagram/layout/automatic-layout.md | 2 +- blazor/diagram/layout/radial-tree.md | 2 +- blazor/diagram/nodes/expand-and-collapse.md | 4 ++-- blazor/diagram/overview-component.md | 2 +- blazor/diagram/page-settings.md | 4 ++-- blazor/diagram/ports/ports.md | 4 ++-- blazor/diagram/ports/positioning.md | 2 +- blazor/diagram/scroll-settings.md | 4 ++-- blazor/diagram/serialization.md | 2 +- blazor/diagram/shapes.md | 2 +- blazor/diagram/style.md | 4 ++-- blazor/diagram/swimlane/lane/interaction.md | 1 - blazor/diagram/swimlane/swimlane.md | 2 +- blazor/diagram/symbol-palette/customization.md | 2 +- blazor/diagram/tool-tip.md | 4 ++-- blazor/diagram/undo-redo.md | 2 +- blazor/diagram/user-handle.md | 4 ++-- 37 files changed, 67 insertions(+), 68 deletions(-) diff --git a/blazor/diagram/annotations/appearance.md b/blazor/diagram/annotations/appearance.md index 87790905cf..5c6ae888f5 100644 --- a/blazor/diagram/annotations/appearance.md +++ b/blazor/diagram/annotations/appearance.md @@ -316,7 +316,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Label with Custom Annotation](../images/blazor-diagram-label-with-custom-annotation.png) -## How to Change Annotation Font Style at Runtime +## How to Update Annotation Font Style at Runtime You can change the font style of the annotations with the font specific properties such as [FontSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontSize), [FontFamily](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_FontFamily), and [Color](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_Color). The following code explains how to update the font style of the annotation. @@ -538,7 +538,7 @@ N> The default value is [InheritReadOnly](https://help.syncfusion.com/cr/blazor/ Refer to [Constraints](https://blazor.syncfusion.com/documentation/diagram/constraints) to learn about how to enable or disable the annotation constraints. -## How to Use Templates in Annotations +## How to Define Templates in Annotations The Diagram provides support for templates in annotations. You can define HTML content at the tag level and specify the use of a template using the [UseTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html#Syncfusion_Blazor_Diagram_Annotation_UseTemplate) property. If you need to define separate templates for each annotation, you can differentiate them by using the ID property. The following code illustrates how to define a template for a node's annotation. Similarly, you can define templates for connectors. diff --git a/blazor/diagram/annotations/labels.md b/blazor/diagram/annotations/labels.md index 98903be351..945e6fe98f 100644 --- a/blazor/diagram/annotations/labels.md +++ b/blazor/diagram/annotations/labels.md @@ -1,13 +1,13 @@ --- layout: post -title: Controlling Annotation in Blazor Diagram Component | Syncfusion +title: Annotation in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about actions of annotation in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Controlling Annotation in Blazor Diagram Component +# Annotation in Blazor Diagram Component The [Annotation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Annotation.html) is a block of text that can be displayed over a node or connector and it is used to textually represent an object with a string that can be edited at run time. Multiple annotations can be added to a node or connector. diff --git a/blazor/diagram/annotations/node-annotation.md b/blazor/diagram/annotations/node-annotation.md index a3e803ac7d..90f46e74d6 100644 --- a/blazor/diagram/annotations/node-annotation.md +++ b/blazor/diagram/annotations/node-annotation.md @@ -1,13 +1,13 @@ --- layout: post -title: Controlling Node Annotation Position in Blazor Diagram | Syncfusion +title: Node Annotation Position in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about annotation for node in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Controlling Node Annotation Position in Blazor Diagram +# Node Annotation Position in Blazor Diagram Component The diagram allows you to customize the position and appearance of the annotation efficiently. Annotations can be aligned relative to the node boundaries. It has Margin, Offset, Horizontal, and Vertical alignment settings. It is quite tricky when all four alignments are used together but gives more control over alignments properties of the [ShapeAnnotation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ShapeAnnotation.html) class. Annotations of a node can be positioned using the following properties of `ShapeAnnotation`. @@ -185,7 +185,7 @@ N>* The value of the `HorizontalAlignment` is [Center](https://help.syncfusion.c You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Annotations/AnnotationOfNode/MarginOfAnnotation) -## How to Set Text Alignment +## How to Align the Text The [TextAlign](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.TextStyle.html#Syncfusion_Blazor_Diagram_TextStyle_TextAlign) property of an annotation allows you to set how the text should be aligned (Left, Right, Center, or Justify) inside the text block. The following code explains how to set TextAlign for an annotation. diff --git a/blazor/diagram/bpmn-shapes/bpmn-event.md b/blazor/diagram/bpmn-shapes/bpmn-event.md index 6889f30794..e2a1f62706 100644 --- a/blazor/diagram/bpmn-shapes/bpmn-event.md +++ b/blazor/diagram/bpmn-shapes/bpmn-event.md @@ -56,7 +56,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![None Trigger End event event BPMNShape](../images/Bpmn-Event-End.png) -## How to Add BPMN Event Trigger +## How to Create a BPMN Event Trigger Event triggers are notated as icons inside the circle and they represent the specific details of the process. The [Trigger](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.BpmnEvent.html#Syncfusion_Blazor_Diagram_BpmnEvent_Trigger) property of the node allows you to set the type of trigger and by default, it is set to None. The following code example explains how to create a BPMN trigger. diff --git a/blazor/diagram/commands.md b/blazor/diagram/commands.md index a2b672f468..7260c9c2e3 100644 --- a/blazor/diagram/commands.md +++ b/blazor/diagram/commands.md @@ -20,7 +20,7 @@ There are several commands available in the diagram as follows. * Zoom commands * Undo/Redo commands -## How to Enable Alignment commands +## Alignment Commands Alignment commands enable you to align the selected or defined objects, such as nodes and connectors with respect to the selection boundary. The following are the [AlignmentOptions](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.AlignmentOptions.html) available in the [SetAlign](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SetAlign_Syncfusion_Blazor_Diagram_AlignmentOptions_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__Syncfusion_Blazor_Diagram_AlignmentMode_) commands, which shows how to use align methods in the diagram. @@ -512,7 +512,7 @@ The following code example illustrates how to execute the space commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/SetDistributeCommands) -## How to Enable Sizing Commands +## How to Use Sizing Commands Sizing [SetSameSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_SetSameSize_Syncfusion_Blazor_Diagram_SizingMode_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) commands are used to resize all selected object based on the width, height, and size of the reference object (FirstSelectedItem). @@ -598,7 +598,7 @@ The following code example illustrates how to execute the size commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/SizingCommands) -## How to Enable Clipboard Commands +## How to Use Clipboard Commands Clipboard commands are used to cut, copy, or paste the selected elements. @@ -686,7 +686,7 @@ The following code illustrates how to execute the clipboard commands. } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/ClipboardCommands) -## How to Enable Grouping commands +## How to Use Grouping commands **Grouping commands** are used to group or ungroup the selected elements on the diagram. To group the elements, select the elements using the select all command and group the selected elements using the group command. @@ -1217,7 +1217,7 @@ protected override void OnInitialized() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Commands/BringintoCenter) -## How to Bring the Entire Diagram into the Current Viewport Using Fit-To-Page Command +## How to Bring the Entire Diagram into the Current Viewport Using Fit to Page Command The FitToPage command is used to bring the entire diagram (including large diagrams) into view. You can customize the behavior of the FitToPage command by passing a [FitOptions](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FitOptions.html) object as a parameter. If no parameter is provided, the entire diagram is fit into the view using default settings. @@ -1382,7 +1382,7 @@ The [Region](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Dia ![Region](./images/Region.gif) -## How to Control Zoom-In Behaviour with CanZoomIn +## How to Enable Zoom in Behaviour The [CanZoomIn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FitOptions.html#Syncfusion_Blazor_Diagram_FitOptions_CanZoomIn) property controls whether the diagram can zoom in to fit smaller content into a larger viewport. When set to `true`, it allows zooming in, while `false` disables this feature. This is particularly useful for maintaining a minimum zoom level or preventing excessive magnification of small diagrams. @@ -1506,7 +1506,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![CanZoomIn to bring the small diagram into view](images/CanZoomIn.png) -## How to Use Command manager to Handle Keyboard Shortcuts +## Command Manager Diagram provides support to map or bind command execution with desired combinations of key gestures. It includes a set of built-in commands for common operations. diff --git a/blazor/diagram/connectors/connectors.md b/blazor/diagram/connectors/connectors.md index e695d32b2c..1531f918b0 100644 --- a/blazor/diagram/connectors/connectors.md +++ b/blazor/diagram/connectors/connectors.md @@ -1,17 +1,17 @@ --- layout: post -title: Connectors in Blazor Diagram Component | Syncfusion +title: Actions of Connectors in Blazor Diagram Component | Syncfusion description: Checkout and learn here all about actions of connectors in Syncfusion Blazor Diagram component and more. platform: Blazor control: Diagram Component documentation: ug --- -# Connectors in Blazor Diagram Component +# Connector in Blazor Diagram Component Connectors are objects used to create link between two points, nodes or ports to represent the relationships between them. -## How to Create and Customize Connectors +## How to Create and Customize Connector Connector can be created by defining the source and target points of the connector. The path to be drawn can be defined with a collection of segments. diff --git a/blazor/diagram/connectors/customization.md b/blazor/diagram/connectors/customization.md index b686b5db5a..286e2b0463 100644 --- a/blazor/diagram/connectors/customization.md +++ b/blazor/diagram/connectors/customization.md @@ -9,7 +9,7 @@ documentation: ug # Customization in Blazor Diagram Component -## How to Add and Customize Connector Decorators +## How to Customize Connector Decorators Diagram allows you to customize the connector appearances. The following topics shows how to customize several properties of the connectors. @@ -318,7 +318,7 @@ Limitation: [BezierSegment](https://help.syncfusion.com/cr/blazor/Syncfusion.Bla ![Blazor Diagram Connector with Line Bridge](../images/blazor-diagram-connector-with-bridging.png) -## How to Set Corner Radius for Connectors +## How to Update Corner Radius for Connector Corner radius allows you to create connectors with rounded corners. The radius of the rounded corner is set with the [CornerRadius](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_CornerRadius) property. @@ -590,7 +590,7 @@ The following code illustrates how to render connector based on the stack order. ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/ZIndexProperty) -## How to Set HitPadding for Connector +## How to Set Hit Padding for Connector * The [HitPadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_HitPadding) refers to the space around the connector's edges. To make it easy to select, selecting when the mouse comes near its vicinity area should be possible. The HitPadding property allows you to customize the vicinity area while selecting. The default value is 10px. Within the hit padding region, the connector can be selected and deselected. @@ -632,7 +632,7 @@ The following code illustrates how to set the HitPadding for the connector. } ``` -## How to Set SourcePadding and TargetPadding for Connectors +## How to Set Source Padding and Target Padding for Connector * The [SourcePadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_SourcePadding) property of a connector defines space between the source point and the source node of the connector. @@ -685,7 +685,7 @@ The following code example illustrates how to leave space between the connection ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Customization/SourcePaddingAndTargetPadding) -## How to Set ConnectionPadding for Connector +## How to Set Connection Padding for Connector * The [ConnectionPadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Connector.html#Syncfusion_Blazor_Diagram_Connector_ConnectionPadding) property of a connector defines the connection padding value of the connector. diff --git a/blazor/diagram/connectors/interactions.md b/blazor/diagram/connectors/interactions.md index ee80e41509..6be32277e3 100644 --- a/blazor/diagram/connectors/interactions.md +++ b/blazor/diagram/connectors/interactions.md @@ -217,7 +217,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Dragging Connector End Point in Blazor Diagram](../images/blazor-diagram-drag-connector-end-point.gif) -## How to Enable Connector Routing +## How to Route the Connectors The connectors may overlap with adjacent nodes when a node is positioned so that it encounters the connector. This overlap can reduce the clarity of the connector's path. To prevent this, the Routing process can be utilized. @@ -491,7 +491,7 @@ By default, each connector's routing process is inherited based on the value of You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Connectors/Interaction/RoutingConstraints). -### How to Define Obstacle Padding Between Nodes and Connectors +### How to Define Distance Between Nodes and Connectors The [ObstaclePadding](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.LineRoutingSettings.html#Syncfusion_Blazor_Diagram_LineRoutingSettings_ObstaclePadding) defines the minimum distance between the connectors and obstacles when the advanced routing is enabled. This ensures connectors are routed with clear spacing around obstacles, improving diagram readability. diff --git a/blazor/diagram/connectors/segments/bezier/bezier.md b/blazor/diagram/connectors/segments/bezier/bezier.md index d43de94fc4..2ecc25a7a9 100644 --- a/blazor/diagram/connectors/segments/bezier/bezier.md +++ b/blazor/diagram/connectors/segments/bezier/bezier.md @@ -104,7 +104,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Editing Bezier Segment in Blazor Diagram](../../../images/blazor-diagram-edit-bezier-segment.gif) -## How to Automatically Avoid Node Overlap with Bezier Connectors +## How to Avoid Overlapping with Bezier By default, when there are no segments defined for a bezier connector, the bezier segments will be created automatically and routed in such a way that avoids overlapping with the source and target nodes. diff --git a/blazor/diagram/connectors/segments/orthogonal.md b/blazor/diagram/connectors/segments/orthogonal.md index 620324d8ca..8d37095757 100644 --- a/blazor/diagram/connectors/segments/orthogonal.md +++ b/blazor/diagram/connectors/segments/orthogonal.md @@ -9,7 +9,7 @@ documentation: ug # Orthogonal Segments in Blazor Diagram Component -## How to Create Orthogonal Segments +## How to Create Orthogonal Segment Orthogonal segments are used to create segments that are perpendicular to each other. Set the segment Type as [Orthogonal](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ConnectorSegmentType.html#Syncfusion_Blazor_Diagram_ConnectorSegmentType_Orthogonal) to create a default orthogonal segment and need to specify Type. The following code example illustrates how to create a default orthogonal segment. diff --git a/blazor/diagram/constraints.md b/blazor/diagram/constraints.md index 2887c3de3c..a9ab6c94e1 100644 --- a/blazor/diagram/constraints.md +++ b/blazor/diagram/constraints.md @@ -717,7 +717,7 @@ For more information about selector constraints, refer to the [BoundaryConstrain N> By default, the following boundary constraints are enabled for the snap functionality in the diagram,
* Diagram -## How to Inherit Behaviors from Diagram +## How to Inherit Behaviors Some of the behaviors can be defined through both the specific object (node or connector) and diagram. When the behaviors are contradictorily defined through both, the actual behavior is set through inherit options. diff --git a/blazor/diagram/container.md b/blazor/diagram/container.md index af25f605a5..b557f098c7 100644 --- a/blazor/diagram/container.md +++ b/blazor/diagram/container.md @@ -276,7 +276,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Blazor Diagram Container Palette](images/ContainerImages/ContainerPalette.png) -## How to Interactively Add or Remove Elements from a Container +## How to Interactively Add or Remove Diagram Elements into Container Diagram elements can be added or removed from a container at runtime. When an element is dropped onto the container's edges, the container automatically adjusts its size to accommodate the new element. diff --git a/blazor/diagram/context-menu.md b/blazor/diagram/context-menu.md index 840f50024e..be6c040aa1 100644 --- a/blazor/diagram/context-menu.md +++ b/blazor/diagram/context-menu.md @@ -60,7 +60,7 @@ Custom context menu provides an option to add new custom items to the context me * You can add submenu items using the [Items](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuItem.html#Syncfusion_Blazor_Diagram_ContextMenuItem_Items) property. -### How to Display Custom and Default Context Menu Items Together +### How to Add Custom and Default Context Menu Items Together The following code example shows how to add custom context menu items along with the default context menu. Set the [ShowCustomMenuOnly](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.ContextMenuSettings.html#Syncfusion_Blazor_Diagram_ContextMenuSettings_ShowCustomMenuOnly) property to false to render both the custom context menu and default context menu. diff --git a/blazor/diagram/data-binding.md b/blazor/diagram/data-binding.md index f7717ebc12..f341d74edd 100644 --- a/blazor/diagram/data-binding.md +++ b/blazor/diagram/data-binding.md @@ -28,7 +28,7 @@ documentation: ug 1. Local data 2. Remote data -## How to Define Parent-Child Relationships in DataSource +## How to Specify Parent Child Relationship in Data Source The [ID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DataSourceSettings.html#Syncfusion_Blazor_Diagram_DataSourceSettings_ID) and [ParentID](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DataSourceSettings.html#Syncfusion_Blazor_Diagram_DataSourceSettings_ParentID) types are string in DataSourceSettings. When creating a parent-child relationship, it's essential to ensure that at least one node has an empty ParentID. This node will act as the root or parent node, with other nodes linked as its children. For example, let's consider the data source settings. Within the DataSource, we have defined three specific details. The DataModel class has attributes such as ID, ParentID, and various other details. In this scenario, the initial dataset does not have a parent ID, which means we have set it as empty. This node acts as the parent or root node of the layout. Subsequent datasets, however, do contain a ParentID. Below is a code example illustrating this: @@ -660,7 +660,7 @@ To bind remote data to [Diagram component](https://help.syncfusion.com/cr/blazor When using SfDataManager for data binding, the TValue must be provided explicitly in the diagram component. By default, SfDataManager uses ODataAdaptor for remote data-binding. -### How to Bind OData Services to the Diagram +### How to Bind OData Services OData (Open Data Protocol) is a standardized protocol for building and consuming RESTful APIs. It enables the creation and consumption of queryable and interoperable REST APIs in a simple and standard way. OData services expose data as resources that are addressable by URLs and can be queried using standard HTTP methods (GET, POST, PUT, DELETE). For more details on OData services, refer to the [OData documentation](https://www.odata.org/documentation/odata-version-3-0/odata-version-3-0-core-protocol/). To bind an OData service, use the ODataAdaptor. @@ -749,7 +749,7 @@ OData (Open Data Protocol) is a standardized protocol for building and consuming ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/RemoteData/ODataAdaptor) -### How to Bind OData V4 Services to the Diagram +### How to Bind OData V4 Services The ODataV4 is an improved version of OData protocols, and the SfDataManager can also retrieve and consume OData v4 services. For more details on OData v4 services, refer to the [OData documentation](http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_Toc453752197). To bind an OData v4 service, use the ODataV4Adaptor. @@ -1141,7 +1141,7 @@ The following sample code demonstrates implementing custom data binding using cu } ``` -### How to Perform CRUD Operations with Custom Data +### How to Perform CRUD Operation The CRUD operations for the custom bounded data in the diagram component can be implemented by overriding the following CRUD methods of the **DataAdaptor** abstract class, @@ -1350,7 +1350,7 @@ The following sample code demonstrates implementing CRUD operations for the cust ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/DataBinding/DiagramWithCustomAdaptor) -### How to Bind GraphQL Service to the Diagram +### How to Bind GraphQL Service GraphQL is a query language for APIs that allows you to can get exactly what you need and nothing more. The GraphQLAdaptor provides an option to retrieve data from a GraphQL server. For more details on GraphQL service, refer to the [GraphQL documentation](../data/adaptors#graphql-service-binding). ```cshtml diff --git a/blazor/diagram/getting-started-with-wasm-app.md b/blazor/diagram/getting-started-with-wasm-app.md index 55ea9dc860..4e5e61fa54 100644 --- a/blazor/diagram/getting-started-with-wasm-app.md +++ b/blazor/diagram/getting-started-with-wasm-app.md @@ -229,7 +229,7 @@ Add the Syncfusion® Blazor Diagram componen {% endtabcontents %} -## How to Use Basic Elements in Blazor Diagram +## Basic Blazor Diagram Elements * Node: Visualize any graphical object using nodes, which can be arranged and manipulated at the same time on a Blazor diagram page. * Connector: Represents the relationship between two nodes. Three types of connectors provided as follows: diff --git a/blazor/diagram/getting-started-with-web-app.md b/blazor/diagram/getting-started-with-web-app.md index 55e4b25cc0..53d9026a8a 100644 --- a/blazor/diagram/getting-started-with-web-app.md +++ b/blazor/diagram/getting-started-with-web-app.md @@ -348,7 +348,7 @@ N> If an **Interactivity Location** is set to `Global` and the **Render Mode** i {% endtabcontents %} -## How to Use Basic Elements in Blazor Diagram +## Basic Blazor Diagram Elements * Node: Visualize any graphical object using nodes, which can be arranged and manipulated at the same time on a Blazor diagram page. * Connector: Represents the relationship between two nodes. Three types of connectors provided as follows: diff --git a/blazor/diagram/getting-started.md b/blazor/diagram/getting-started.md index 51565938b9..d3151f6b1a 100644 --- a/blazor/diagram/getting-started.md +++ b/blazor/diagram/getting-started.md @@ -242,7 +242,7 @@ Add the Syncfusion® Blazor Diagram componen {% endtabcontents %} -## How to Use Basic Elements in Blazor Diagram +## Basic Blazor Diagram Elements * Node: Visualize any graphical object using nodes, which can be arranged and manipulated at the same time on a Blazor diagram page. * Connector: Represents the relationship between two nodes. Three types of connectors provided as follows: diff --git a/blazor/diagram/grid-lines.md b/blazor/diagram/grid-lines.md index 8ff07231df..ac3b73af18 100644 --- a/blazor/diagram/grid-lines.md +++ b/blazor/diagram/grid-lines.md @@ -150,7 +150,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ## Snapping -### How to Enable or Disable Snap to Lines +### How to Enable Snap to Lines This feature allows the diagram objects to snap to the nearest intersection of gridlines while being dragged or resized. This feature enables easier alignment during layout or design. @@ -233,7 +233,7 @@ By default, the objects are snapped towards the nearest gridline. The gridline o You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Gridlines/CustomizeSnapInterval) -### How to Enable or Disable Snap to Object +### How to Enable Snap to Object The snap to object provides visual cues to assist with aligning and spacing diagram elements. A node can be snapped with its neighboring objects based on certain alignments. Such alignments are visually represented as smart guides. diff --git a/blazor/diagram/how-to.md b/blazor/diagram/how-to.md index 4b064328bf..ab8d1aa122 100644 --- a/blazor/diagram/how-to.md +++ b/blazor/diagram/how-to.md @@ -523,7 +523,7 @@ The [ClearSelection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Dia ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/ClearSelection) -## How to Get a Diagram Object by ID +## How to Get Object in the Diagram The [GetObject](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_GetObject_System_String_) method in SfDiagramComponent accepts an ID as a parameter and returns an IDiagramObject. You can retrieve a specific connector or node by passing its unique identifier to this method. This powerful functionality allows for easy access and manipulation of diagram elements within your Blazor application. ```cshtml @@ -1612,7 +1612,7 @@ The [RefreshDataSourceAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Bl ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Methods/RefereshDataSource) -## How to Get the Parent Object +## How to Get the Parent of Object * The [GetParent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramObject.html#Syncfusion_Blazor_Diagram_DiagramObject_GetParent) method is used to retrieve the parent object of a specific diagram element when invoked. This method is particularly useful for navigating the hierarchy of objects within the diagram structure. diff --git a/blazor/diagram/interaction.md b/blazor/diagram/interaction.md index 9c030c4d0b..5994a0ee4e 100644 --- a/blazor/diagram/interaction.md +++ b/blazor/diagram/interaction.md @@ -80,7 +80,7 @@ During a single click, any existing item in the selection list is cleared, and o Clicking and dragging the diagram area allows to create a rectangular region. The elements that are covered under the rectangular region are selected at the end. -## How to Use the Diagram Element Highlighter +## Diagram Element Highlighter The Diagram Element Highlighter feature enhances the selection process by visually distinguishing selected elements and indicating which elements are part of a selection when performing multiple selection actions. @@ -808,7 +808,7 @@ The appearance of the user handle can be customized by using the [Size](https:// ![Zoom Pan in Blazor Diagram](images/blazor-diagram-zoom-pan.gif) -## How to Use Keyboard Shortcuts to Interact +## Keyboard Shortcuts and Navigation Diagram provides support to interact with elements with key gestures. By default, some in-built commands are bound with a relevant set of key combinations. diff --git a/blazor/diagram/layout/automatic-layout.md b/blazor/diagram/layout/automatic-layout.md index 443b56a688..f3c4c4d1f9 100644 --- a/blazor/diagram/layout/automatic-layout.md +++ b/blazor/diagram/layout/automatic-layout.md @@ -248,7 +248,7 @@ You can customize the margin for each side (top, right, bottom, left) using the } ``` -## How to Handle Connector Overlap in Layout +## How to Handle Connector Segment Overlap in Layout The [SamePoint](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Layout.html#Syncfusion_Blazor_Diagram_Layout_SamePoint) property controls whether connectors in the layout should be arranged without overlapping other connectors. By setting this property to true, the diagram ensures that connectors are spaced out properly to avoid any overlap, making the layout more readable and visually clear. diff --git a/blazor/diagram/layout/radial-tree.md b/blazor/diagram/layout/radial-tree.md index db613ca669..b53ce7b67f 100644 --- a/blazor/diagram/layout/radial-tree.md +++ b/blazor/diagram/layout/radial-tree.md @@ -147,7 +147,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >**Note:** In the DataSourceSettings, the type of the ID and ParentID properties is string. The provided DataSource should have a parent-child relationship. It is necessary for at least one node to have an empty ParentID. -## How to Create a Radial Tree Using Nodes and Connectors +## How to Create a Radial Tree With Nodes and Connectors You can render a radial tree layout without using a Datasource. The following code demonstrates how to render a radial tree layout without using a DataSource. diff --git a/blazor/diagram/nodes/expand-and-collapse.md b/blazor/diagram/nodes/expand-and-collapse.md index af35d3b7ec..7287d8f7fc 100644 --- a/blazor/diagram/nodes/expand-and-collapse.md +++ b/blazor/diagram/nodes/expand-and-collapse.md @@ -250,10 +250,10 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ## How to Customize Expand and Collapse Icon Diagram allows you to customize the Expand and collapse Icons of the Node. To explore Expand and Collapse icon properties, refer to [DiagramExpandIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExpandIcon.html) and [DiagramCollapseIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramCollapseIcon.html). -### How to Update Expand or Collapse Icon Size +### How to Update Expand and Collapse Icon Size The size of the icon can be changed with the [Height](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_Height) and [Width](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramIcon.html#Syncfusion_Blazor_Diagram_DiagramIcon_Width) properties. -### How to Customize Expand or Collapse Icon Shape +### How to Customize Expand and Collapse Icon Shape The shape of an [ExpandIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_ExpandIcon) and a [CollapseIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Node.html#Syncfusion_Blazor_Diagram_Node_CollapseIcon) can be changed by using the Shape property of [DiagramExpandIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExpandIcon.html) and [DiagramCollapseIcon](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramCollapseIcon.html) respectively. To explore the different types of DiagramExpandIcon shapes, refer to [DiagramExpandIcons](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.DiagramExpandIcons.html). diff --git a/blazor/diagram/overview-component.md b/blazor/diagram/overview-component.md index 0d73805ce6..d24fd9ce86 100644 --- a/blazor/diagram/overview-component.md +++ b/blazor/diagram/overview-component.md @@ -11,7 +11,7 @@ documentation: ug The [SfDiagramOverviewComponent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Overview.SfDiagramOverviewComponent.html) provides a miniature view of the entire diagram content, offering a comprehensive preview at a glance. This powerful feature enables users to effortlessly navigate, pan, and zoom to specific areas of interest within large and complex diagrams. By presenting a bird's-eye view, it enhances the user's ability to understand the diagram's structure and quickly locate desired sections, significantly improving overall usability and efficiency. -## How to Use Overview to Easily View and Move Within Large Diagrams +## Usage Scenario When working with an extensive diagram, it can be challenging to maintain context or navigate efficiently between different sections. The traditional approach of zooming out to view the entire diagram and then zooming in on a specific area can be cumbersome, especially when frequent navigation is required. diff --git a/blazor/diagram/page-settings.md b/blazor/diagram/page-settings.md index 43e009afe7..aa39b6c380 100644 --- a/blazor/diagram/page-settings.md +++ b/blazor/diagram/page-settings.md @@ -292,7 +292,7 @@ The following code example illustrates how to define boundary constraints with r ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/PageSettings/BoundaryConstraints) -## How to Make Diagram Responsive to Its Parent Container +## How to Make Responsive with Parent Container By setting the value in percentage, the diagram gets its dimention with respect to its parent container.Specify the Width and Height as 100% to make the diagram element fill its parent container. Setting the Height to 100% requires the diagram parent element to have explicit height or you can use calc function to set explicit height based on the browser layout. @@ -325,7 +325,7 @@ The following code example illustrates how to set width and height in percentage ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/PageSettings/ResponsiveWithParentContainer) -## How to Handle Page Settings Changes Using Callback Methods +## How to Handle Page Settings Property Changes Using Callback Methods * BackgroundChanged : Specifies the callback to trigger when the Background value changes. * BoundaryConstraintsChanged : Specifies the callback to trigger when the BoundaryConstraints value changes. diff --git a/blazor/diagram/ports/ports.md b/blazor/diagram/ports/ports.md index c0173a5d1c..bfcdd9dccf 100644 --- a/blazor/diagram/ports/ports.md +++ b/blazor/diagram/ports/ports.md @@ -13,7 +13,7 @@ Port is a special connection point in a Node where you can glue the connectors. ![Port in Blazor Diagram](../images/blazor-diagram-port.png) -## How to Create Node-to-Node and Port-to-Port Connections +## How to Create Node to Node and Port to Port Connections There are two main types of connections, node to node and port to port. The difference between these two connections is whether or not a connector remains glued to a specific connection point when you move the attached node or connector. @@ -466,7 +466,7 @@ protected override void OnInitialized() ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Ports/ActionofPorts/UpdatePorts) -## How to Set Connection Direction for Ports +## How to Specify Connection Direction for Ports The [ConnectionDirection](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Port.html#Syncfusion_Blazor_Diagram_Port_ConnectionDirection) property of a port allows users to specify the direction in which a connector should establish a connection. This can be either to the port incoming or from the port outgoing. diff --git a/blazor/diagram/ports/positioning.md b/blazor/diagram/ports/positioning.md index de4ff921e9..7cb68db35c 100644 --- a/blazor/diagram/ports/positioning.md +++ b/blazor/diagram/ports/positioning.md @@ -82,7 +82,7 @@ The following table shows the relationship between the shape port position and p | (1,0.5) | ![Blazor Diagram Port in Right Center Offset Values](../images/blazor-diagram-port-in-rightcenter-offset-values.png) | | (1,1) | ![Blazor Diagram Port in Right Bottom Offset Values](../images/blazor-diagram-port-in-rightbottom-offset-values.png) | -## How to set Path Position for Connector Port +## How to Set Path Position for Connector Port The `PathPosition` property allows you to place a connector port along the path of a connector. It accepts a value between 0 to 1, where: diff --git a/blazor/diagram/scroll-settings.md b/blazor/diagram/scroll-settings.md index d0845c82e7..3f725a2912 100644 --- a/blazor/diagram/scroll-settings.md +++ b/blazor/diagram/scroll-settings.md @@ -66,7 +66,7 @@ You can programmatically change the scroll offsets at runtime by using the exter ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/ScrollStatus) -## How to Use the Scroll Changed Event +## How to Handle the Scroll Changed Event The Diagram control provides the following event for the scroll settings. @@ -340,7 +340,7 @@ Scrolling beyond any particular rectangular area can be restricted by using the } ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/ScrollSettings/ScrollableArea) -## How to Handle Scroll Settings Changes Using Callback Methods +## How to Handle Scroll Settings Property Changes Using Callback Methods * CurrentZoomChanged : Specifies the callback to be triggered when the current zoom value changes. * HorizontalOffsetChanged : Specifies the callback to be triggered when the horizontal offset changes. diff --git a/blazor/diagram/serialization.md b/blazor/diagram/serialization.md index 6c31c04984..b65f35930c 100644 --- a/blazor/diagram/serialization.md +++ b/blazor/diagram/serialization.md @@ -13,7 +13,7 @@ Serialization is the process of saving and loading the persistent state of the d {% youtube "youtube:https://www.youtube.com/watch?v=2hhl00gMObc" %} -## How to Enable Two-Way Binding +## How to Use Two-Way Binding When saving and loading the diagram, we must use two-way binding (such as @bind) for nodes and connectors. diff --git a/blazor/diagram/shapes.md b/blazor/diagram/shapes.md index 8e770d885e..ed9674a36e 100644 --- a/blazor/diagram/shapes.md +++ b/blazor/diagram/shapes.md @@ -202,7 +202,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync |Slice|XMinYMax|![Node Image alignment in Blazor Diagram](images/blazor-diagram-slice-xmin-ymax.png)| |Slice|XMinYMin|![Node Image alignment in Blazor Diagram](images/blazor-diagram-slice-xmin-ymin.png)| -## How to Use HTML Template Shapes +## How to Create HTML Template Shapes Html elements can be embedded in the diagram through [HTML](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.NodeShapes.html#Syncfusion_Blazor_Diagram_NodeShapes_HTML) type node. The Shape property of Node allows you to set the type of node and to create a HTML node it should be set as **HTML**. The following code illustrates how an HTML node is created. diff --git a/blazor/diagram/style.md b/blazor/diagram/style.md index 4fb1a4c0d2..305bea32b3 100644 --- a/blazor/diagram/style.md +++ b/blazor/diagram/style.md @@ -25,7 +25,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector Endpoint Handle in Blazor Diagram](images/connector-endpoint.png) -## How to Customize the Connector Endpoint Handle When Connected +## How to Customize the Connector Endpoint Handle When it is Connected To enhance the visual appearance of the connector endpoint handle when it is in a connected state, apply the following CSS code: @@ -41,7 +41,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Connector Endpoint Connected in Blazor Diagram](images/Connector-Endpoint-Connected.gif) -## How to Customize the Connector Endpoint Handle When Disabled +## How to Customize the Connector Endpoint Handle When it Disabled To customize the visual appearance of the connector endpoint handle when it is in a disabled state, apply the following CSS code to your Blazor application: diff --git a/blazor/diagram/swimlane/lane/interaction.md b/blazor/diagram/swimlane/lane/interaction.md index 10f269f39d..a87e139484 100644 --- a/blazor/diagram/swimlane/lane/interaction.md +++ b/blazor/diagram/swimlane/lane/interaction.md @@ -35,7 +35,6 @@ The following image shows how to swap lanes. ![Lane Swapping](../Swimlane-images/Lane_Swapping.gif) -## How to Interact with Child Nodes in Lanes ## How to Interact with Child Nodes in Lanes * You can resize the child node within swimlanes. diff --git a/blazor/diagram/swimlane/swimlane.md b/blazor/diagram/swimlane/swimlane.md index 32b5b894cb..eac9019fe6 100644 --- a/blazor/diagram/swimlane/swimlane.md +++ b/blazor/diagram/swimlane/swimlane.md @@ -74,7 +74,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync >Note: We can't add swimlane elements such as phase, lane, and lane children at runtime by using the [AddDiagramElementsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html#Syncfusion_Blazor_Diagram_SfDiagramComponent_AddDiagramElementsAsync_Syncfusion_Blazor_Diagram_DiagramObjectCollection_Syncfusion_Blazor_Diagram_NodeBase__) method. -### How to Define and Customize the Swimlane Header +### How to Create and Customize the Swimlane Header The Swimlane Header was the primary element for swimlanes. The [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.Swimlane.html#Syncfusion_Blazor_Diagram_Swimlane_Header) property of swimlane allows you to define its textual description and to customize its appearance. diff --git a/blazor/diagram/symbol-palette/customization.md b/blazor/diagram/symbol-palette/customization.md index 7fa7ab179f..0533a5c2fa 100644 --- a/blazor/diagram/symbol-palette/customization.md +++ b/blazor/diagram/symbol-palette/customization.md @@ -664,7 +664,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Tooltip in symbol palette](../images/differenttooltip.gif) -### How to Use Tooltip Template for Symbols +### How to Provide Tooltip Template for Symbols You can provide a custom template as a tooltip for symbols in the symbol palette using the [TooltipTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SymbolPalette.SymbolPaletteTemplates.html#Syncfusion_Blazor_Diagram_SymbolPalette_SymbolPaletteTemplates_TooltipTemplate) property of the `SfDiagramComponent`. Once the tooltip template is defined, enable custom tooltips for symbols in the symbol palette by setting the Tooltip constraints for nodes and connectors. This allows the custom tooltip template to be displayed when hovering over symbols in the symbol palette, enhancing the user experience and providing more informative tooltips for each symbol. diff --git a/blazor/diagram/tool-tip.md b/blazor/diagram/tool-tip.md index c37bfa5396..9fa17eb600 100644 --- a/blazor/diagram/tool-tip.md +++ b/blazor/diagram/tool-tip.md @@ -19,7 +19,7 @@ By default, the diagram features an interactive tooltip that dynamically display |------|--------|--------| |![ToolTip During Drag](images/Drag.png) | ![ToolTip During Resize](images/Resize.png) | ![ToolTip During Rotate](images/Rotate.png) | -## How to Show Custom Tooltips for Specific Nodes and Connectors +## How to Show Tooltip for Specific Nodes and Connectors The diagram component offers a sophisticated tooltip feature that activates when the mouse hovers over nodes or connectors. This powerful functionality allows for highly customizable tooltips, enabling unique information display for each individual node and connector within the diagram. @@ -750,7 +750,7 @@ The following code example illustrates how to set the open mode to the tooltip f ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Tooltip/TooltipOpenModeForConnector) -## How to Enable Sticky Tooltip +## How to Enable Sticky Mode Tooltips for nodes and connectors can be configured to remain visible until manually dismissed, a feature known as "sticky" tooltips. When enabled, a close icon appears in the top-right corner of the tooltip, allowing users to explicitly close it when desired. diff --git a/blazor/diagram/undo-redo.md b/blazor/diagram/undo-redo.md index 583fab74be..dc1d05f5c2 100644 --- a/blazor/diagram/undo-redo.md +++ b/blazor/diagram/undo-redo.md @@ -11,7 +11,7 @@ documentation: ug The Blazor Diagram component tracks the history of actions performed after initialization and provides support to reverse and restore those changes. -## How to Enable Undo and Redo +## Undo and Redo The [Diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) offers built-in functionality to track changes made through both user interactions and public APIs. These changes can be reverted or restored using shortcut keys or commands. diff --git a/blazor/diagram/user-handle.md b/blazor/diagram/user-handle.md index 44de2f7f56..c1e9f15dfa 100644 --- a/blazor/diagram/user-handle.md +++ b/blazor/diagram/user-handle.md @@ -325,7 +325,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Customizing Appearance of Userhandle in Blazor Diagram](images/blazor-diagram-custom-user-handle-appearance.png) -### How to Control User Handle Visibility +### How to Change the Userhandle's Visible Target The [VisibleTarget](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.VisibleTarget.html) property determines the visibility of the user handle for specific diagram elements. It allows you to control whether the user handle is displayed for Nodes, Connectors, or both. By configuring this property, you can customize the user interaction experience and ensure that handles are only visible for the desired elements in your diagram. @@ -652,7 +652,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ![Template for UserHandle](images/UserHandleTemplate.gif) -## How to Use Fixed User Handles +## Fixed User Handles The [FixedUserHandle](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.FixedUserHandle.html) feature allows you to add customizable, readily accessible commands around nodes and connectors without requiring selection. This enhances user interaction and streamlines frequently used operations within the diagram. From e85ee2452e220c0b5cf99092fefceba64e63cd19 Mon Sep 17 00:00:00 2001 From: Ramya Date: Tue, 24 Jun 2025 10:24:54 +0530 Subject: [PATCH 12/16] 958831: Update Ug for SEO Changes --- blazor/diagram/undo-redo.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blazor/diagram/undo-redo.md b/blazor/diagram/undo-redo.md index dc1d05f5c2..d1cd85472f 100644 --- a/blazor/diagram/undo-redo.md +++ b/blazor/diagram/undo-redo.md @@ -11,7 +11,7 @@ documentation: ug The Blazor Diagram component tracks the history of actions performed after initialization and provides support to reverse and restore those changes. -## Undo and Redo +## How Undo and Redo Functions Operate in Blazor Diagram The [Diagram](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Diagram.SfDiagramComponent.html) offers built-in functionality to track changes made through both user interactions and public APIs. These changes can be reverted or restored using shortcut keys or commands. @@ -223,7 +223,7 @@ You can download a complete working sample from [GitHub](https://github.com/Sync ``` You can download a complete working sample from [GitHub](https://github.com/SyncfusionExamples/Blazor-Diagram-Examples/tree/master/UG-Samples/Undo-Redo/HistoryAdding) -### How to Track and Manage Custom Undo and Redo Actions +### How to Implement Custom Undo and Redo Logic in Blazor Diagram The custom undo-redo process allows you to store and manage actions that are not captured by the default undo-redo history list. This feature provides greater flexibility and control over the diagram's state management. From a30e6bef9495da4b656075fb87e8b44886ab98a3 Mon Sep 17 00:00:00 2001 From: Mahesh Palanisamy <22393667+maheshtps@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:04:15 +0530 Subject: [PATCH 13/16] Update build-a-blazor-stay-reservation-app.md --- .../build-a-blazor-stay-reservation-app.md | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/blazor/tutorials/build-a-blazor-stay-reservation-app.md b/blazor/tutorials/build-a-blazor-stay-reservation-app.md index 2f249405ba..59c1204cb4 100644 --- a/blazor/tutorials/build-a-blazor-stay-reservation-app.md +++ b/blazor/tutorials/build-a-blazor-stay-reservation-app.md @@ -62,7 +62,7 @@ Now, let's configure the app to recognize and style the Syncfusion components. Open `Components/App.razor`. We need to add the Syncfusion theme stylesheet and the necessary script reference for component interactivity. We'll use the modern `tailwind.css` theme. - ```html Components/App.razor + ```html @@ -90,7 +90,7 @@ Now, let's configure the app to recognize and style the Syncfusion components. To avoid having to add `@using` directives in every component, add the most common Syncfusion namespaces to your `_Imports.razor` file. - ```csharp _Imports.razor + ```csharp @using StayReservation @using StayReservation.Components @using Syncfusion.Blazor.Schedule @@ -107,7 +107,7 @@ A real-world app needs a way to manage its data and state. For this, we'll creat First, define your data model in `Data/AppointmentData.cs`: -```csharp Data/AppointmentData.cs +```csharp public class AppointmentData { public int Id { get; set; } @@ -121,7 +121,7 @@ public class AppointmentData Now, create the `AppointmentService.cs` in the `Data` folder. This service will hold the appointment list and references to our components. -```csharp Data/AppointmentService.cs +```csharp public class AppointmentService { // Holds all reservation data @@ -141,7 +141,7 @@ public class AppointmentService Register this service as a singleton in `Program.cs`: -```csharp Program.cs +```csharp builder.Services.AddSingleton(); ``` @@ -154,7 +154,7 @@ Our application has three main UI parts: the sidebar for calendar date navigatio This component uses an `` to contain calendar and filters. An ``allows the user to select the date desired date in scheduler. An `` organizes the filters, `` component used to controls which floors are displayed. `` is used to filter the price range. -```html Components/Pages/Sidebar.razor +```html @using StayReservation.Data @inject AppointmentService Service @@ -228,7 +228,7 @@ The Scheduler needs two main pieces of data: The appointment and resource data will come from `AppointmentService`. -```html Components/Pages/Schedule.razor +```html @inject AppointmentService Service
@@ -296,7 +296,7 @@ Now, let's bring it all together in the main `Index.razor` page. This component Update `Components/Pages/Index.razor` with the following code: -```html Components/Pages/Index.razor +```html @page "/"
@@ -325,7 +325,7 @@ Update `Components/Pages/Index.razor` with the following code: We need to connect the checkboxes in the sidebar to the data displayed in the scheduler. Since we're using our `AppointmentService` to hold the state, we can detect changes to the checkbox values and re-filter the scheduler's resource data. Can bind the change event to checkbox and sliders to form the filter query and update the resource data. Refer the following code to implement the filtering logic in `Components/Pages/Sidebar.razor`: -```csharp Components/Pages/Sidebar.razor +```csharp @code { // ... existing code ... @@ -407,7 +407,7 @@ We can validate the form fields using the `ValidationMessage` component. The `Va We can apply the following code to the `Schedule.razor` file to create the custom form. -```html Components/Pages/Schedule.razor +```html @@ -539,6 +539,7 @@ Integrate `SfToast` for user notifications throughout the application. When a us ``` The `OnActionBegin` event of the `SfSchedule` component can be bound to a method that will handle the toast notifications. + ```csharp public async Task OnActionBegin(ActionEventArgs args) { @@ -598,4 +599,4 @@ A demo of this example can be tried in [this link](https://blazor.syncfusion.com This guide has demonstrated how to build a functional and interactive stay reservation application. It has shown how to compose a complex UI by combining multiple Syncfusion Blazor components like the **Scheduler**, **Sidebar**, **AppBar**, **Accordion**, **Inputs**, and **Dropdowns**. -Most importantly, a clean state management pattern has been implemented using a singleton service, allowing the components to communicate and share data seamlessly. This architecture is scalable and makes the application easy to maintain and extend with new features. \ No newline at end of file +Most importantly, a clean state management pattern has been implemented using a singleton service, allowing the components to communicate and share data seamlessly. This architecture is scalable and makes the application easy to maintain and extend with new features. From 17357fc2ace92bfa9a8bb2b9b7abbb31eac51457 Mon Sep 17 00:00:00 2001 From: Santhanalakshmi Date: Thu, 26 Jun 2025 17:03:26 +0530 Subject: [PATCH 14/16] 965862: Added the content for editing and context menu --- blazor/spreadsheet/contextmenu.md | 62 ++++++++++++++++++ blazor/spreadsheet/editing.md | 39 +++++++++++ blazor/spreadsheet/getting-started-webapp.md | 6 +- blazor/spreadsheet/getting-started.md | 6 +- .../spreadsheet/images/cell-contextmenu.png | Bin 0 -> 48160 bytes blazor/spreadsheet/images/cell-editing.gif | Bin 0 -> 99912 bytes .../images/column-header-contextmenu.png | Bin 0 -> 50200 bytes .../images/row-header-contextmenu.png | Bin 0 -> 45319 bytes .../images/sheet-tab-contextmenu.png | Bin 0 -> 27365 bytes blazor/spreadsheet/open-and-save.md | 6 +- 10 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 blazor/spreadsheet/contextmenu.md create mode 100644 blazor/spreadsheet/editing.md create mode 100644 blazor/spreadsheet/images/cell-contextmenu.png create mode 100644 blazor/spreadsheet/images/cell-editing.gif create mode 100644 blazor/spreadsheet/images/column-header-contextmenu.png create mode 100644 blazor/spreadsheet/images/row-header-contextmenu.png create mode 100644 blazor/spreadsheet/images/sheet-tab-contextmenu.png diff --git a/blazor/spreadsheet/contextmenu.md b/blazor/spreadsheet/contextmenu.md new file mode 100644 index 0000000000..b838092e0b --- /dev/null +++ b/blazor/spreadsheet/contextmenu.md @@ -0,0 +1,62 @@ +--- +layout: post +title: Context Menu in Blazor Spreadsheet component | Syncfusion +description: Checkout and learn here about the context menu functionality in the Syncfusion Blazor Spreadsheet component and more. +platform: Blazor +control: Spreadsheet +documentation: ug +--- + +# Context Menu in Blazor Spreadsheet component + +The context menu is used to improve user interaction with the Spreadsheet component using the built-in popup menu. It opens when right-clicking on a cell, column header, row header, or sheet tab in the Spreadsheet. The [EnableContextMenu](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Spreadsheet.SfSpreadsheet.html#Syncfusion_Blazor_Spreadsheet_SfSpreadsheet_EnableContextMenu) property can be used to enable/disable the context menu. + +> The default value for the `EnableContextMenu` property is **true**. + +## Cell context menu options + +Please find the table below for the default context menu options and their actions. + +| Options | Action | +| -- | -- | +| Cut | Cut the selected cells data to the clipboard. The data can be pasted into a different cell location. | +| Copy | Copy the selected cells data to the clipboard for pasting elsewhere. | +| Paste | Paste the data from clipboard to Spreadsheet. | +| Hyperlink | Create a link in the Spreadsheet to navigate to web links or cell reference within the sheet or other sheets in the Spreadsheet. | +| Sort | Perform sorting to the selected range of cells by ascending or descending. | +| Clear Contents | Remove the selected cells data. | +| Filter | Perform filtering to the selected cells based on an active cells value. | + +![UI showing context menu options for cell](./images/cell-contextmenu.png) + +## Row and column header context menu options + +Please find the table below for the default context menu options and their actions. + +| Options | Action | +| -- | -- | +| Cut | Cut the selected row/column header data to the clipboard. The data can be pasted into a different cell location. | +| Copy | Copy the selected row/column header data to the clipboard for pasting elsewhere. | +| Paste | Paste the data from the clipboard to Spreadsheet. | +| Insert Rows / Insert Columns | Insert new rows or columns into the worksheet. | + +![UI showing context menu options for row header](./images/row-header-contextmenu.png) + +![UI showing context menu options for column header](./images/column-header-contextmenu.png) + +## Sheet tab context menu options + +Please find the table below for the default context menu options and their actions. + +| Options | Action | +| -- | -- | +| Insert | Insert a new worksheet after the existing worksheet in the Spreadsheet. | +| Delete | Delete the selected worksheet from the Spreadsheet. | +| Duplicate | Create a copy of the selected worksheet in the Spreadsheet. | +| Rename | Rename the selected worksheet. | +| Protect Sheet / Unprotect Sheet | Protect sheet prevents unwanted changes from others by limiting their ability to edit. Unprotect sheet removes these restrictions. | +| Move Right | Move the selected worksheet to the right of the next sheet. | +| Move Left | Move the selected worksheet to the left of the previous sheet. | +| Hide | Hide the selected worksheet. | + +![UI showing context menu options for sheet tab](./images/sheet-tab-contextmenu.png) \ No newline at end of file diff --git a/blazor/spreadsheet/editing.md b/blazor/spreadsheet/editing.md new file mode 100644 index 0000000000..6376fe08fe --- /dev/null +++ b/blazor/spreadsheet/editing.md @@ -0,0 +1,39 @@ +--- +layout: post +title: Cell Editing in Blazor Spreadsheet component | Syncfusion +description: Checkout and learn here about the cell editing features in the Syncfusion Blazor Spreadsheet component and more. +platform: Blazor +control: Spreadsheet +documentation: ug +--- + +# Editing in Blazor Spreadsheet component + +The contents of a cell can be edited directly within the cell or by typing in the formula bar. By default, the editing feature is enabled in the Spreadsheet. Use the [AllowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Spreadsheet.SfSpreadsheet.html#Syncfusion_Blazor_Spreadsheet_SfSpreadsheet_AllowEditing) property to enable or disable the editing feature. + +## Edit cell + +Editing can be started in one of the following ways, + +* Double-click a cell to start edit mode. +* Press the `F2` key to edit the active cell. +* Use the formula bar to perform editing. +* Press `BACKSPACE` or `SPACE` key to clear the cell content and start edit mode. + +## Save cell + +If the cell is in an editable state, the edited cell can be saved in one of the following ways, + +* Click any other cell except the one currently being edited. + +* Press the `Enter` or `Tab` key to save the edited cell. + +## Cancel editing + +To cancel editing without saving changes, press the `ESCAPE` key. This exits the editable state and restores the original cell content. + +The following animation illustrates basic cell editing operations in the Spreadsheet component, including double-clicking a cell to enter edit mode, editing values directly, saving changes by pressing `ENTER` key, and canceling edits with the `ESCAPE` key. + +![UI showing cell editing](./images/cell-editing.gif) + + diff --git a/blazor/spreadsheet/getting-started-webapp.md b/blazor/spreadsheet/getting-started-webapp.md index 65e536a94b..3bb38b579f 100644 --- a/blazor/spreadsheet/getting-started-webapp.md +++ b/blazor/spreadsheet/getting-started-webapp.md @@ -9,7 +9,7 @@ documentation: ug # Getting Started with Blazor Spreadsheet in Web App -This section briefly explains about how to include [Syncfusion Blazor Spreadsheet](https://www.syncfusion.com/blazor-components) component in your Blazor Web App using [Visual Studio](https://visualstudio.microsoft.com/vs/) and Visual Studio Code. +This section briefly explains about how to include [Syncfusion Blazor Spreadsheet](https://www.syncfusion.com/blazor-components/blazor-spreadsheet) component in your Blazor Web App using [Visual Studio](https://visualstudio.microsoft.com/vs/) and Visual Studio Code. {% tabcontents %} @@ -27,7 +27,7 @@ You need to configure the corresponding [Interactive render mode](https://learn. ## Install Syncfusion® Blazor Spreadsheet and Themes NuGet in the App -To add **Syncfusion Blazor Spreadsheet** component in the app, open the NuGet package manager in Visual Studio (*Tools → NuGet Package Manager → Manage NuGet Packages for Solution*), search and install [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). +To add **Syncfusion Blazor Spreadsheet** component in the app, open the NuGet package manager in Visual Studio (*Tools → NuGet Package Manager → Manage NuGet Packages for Solution*), search and install [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor.Spreadsheet) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). If you utilize `WebAssembly or Auto` render modes in the Blazor Web App need to be install Syncfusion® Blazor components NuGet packages within the client project. @@ -78,7 +78,7 @@ If you utilize `WebAssembly` or `Auto` render modes in the Blazor Web App need t * Press Ctrl+` to open the integrated terminal in Visual Studio Code. * Ensure you’re in the project root directory where your `.csproj` file is located. -* Run the following command to install a [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/) NuGet package and ensure all dependencies are installed. +* Run the following command to install a [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor.Spreadsheet) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/) NuGet package and ensure all dependencies are installed. {% tabs %} diff --git a/blazor/spreadsheet/getting-started.md b/blazor/spreadsheet/getting-started.md index 1ef1d9dac0..b8543a782b 100644 --- a/blazor/spreadsheet/getting-started.md +++ b/blazor/spreadsheet/getting-started.md @@ -9,7 +9,7 @@ documentation: ug # Getting Started with Blazor Spreadsheet Component -This section briefly explains about how to include [Blazor Spreadsheet](https://www.syncfusion.com/blazor-components) component in your Blazor WebAssembly App using [Visual Studio](https://visualstudio.microsoft.com/vs/) and Visual Studio Code. +This section briefly explains about how to include [Blazor Spreadsheet](https://www.syncfusion.com/blazor-components/blazor-spreadsheet) component in your Blazor WebAssembly App using [Visual Studio](https://visualstudio.microsoft.com/vs/) and Visual Studio Code. {% tabcontents %} @@ -25,7 +25,7 @@ You can create a **Blazor WebAssembly App** using Visual Studio via [Microsoft T ## Install Syncfusion® Blazor Spreadsheet and Themes NuGet in the App -To add **Blazor Spreadsheet** component in the app, open the NuGet package manager in Visual Studio (*Tools → NuGet Package Manager → Manage NuGet Packages for Solution*), search and install [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). Alternatively, you can utilize the following package manager command to achieve the same. +To add **Blazor Spreadsheet** component in the app, open the NuGet package manager in Visual Studio (*Tools → NuGet Package Manager → Manage NuGet Packages for Solution*), search and install [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor.Spreadsheet) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/). Alternatively, you can utilize the following package manager command to achieve the same. {% tabs %} {% highlight C# tabtitle="Package Manager" %} @@ -67,7 +67,7 @@ cd BlazorApp * Press Ctrl+` to open the integrated terminal in Visual Studio Code. * Ensure you’re in the project root directory where your `.csproj` file is located. -* Run the following command to install a [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/) NuGet package and ensure all dependencies are installed. +* Run the following command to install a [Syncfusion.Blazor.Spreadsheet](https://www.nuget.org/packages/Syncfusion.Blazor.Spreadsheet) and [Syncfusion.Blazor.Themes](https://www.nuget.org/packages/Syncfusion.Blazor.Themes/) NuGet package and ensure all dependencies are installed. {% tabs %} diff --git a/blazor/spreadsheet/images/cell-contextmenu.png b/blazor/spreadsheet/images/cell-contextmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..db9cd0bc5b9a002c2e34006004cad5a827da392c GIT binary patch literal 48160 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 JB^tKj{{<$@L>>SD literal 0 HcmV?d00001 diff --git a/blazor/spreadsheet/images/cell-editing.gif b/blazor/spreadsheet/images/cell-editing.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e7edf5b89bc6cb538a6933e23686894c7b18366 GIT binary patch literal 99912 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 z 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 P{P{};msMOGAyWSb#Dkzw literal 0 HcmV?d00001 diff --git a/blazor/spreadsheet/images/column-header-contextmenu.png b/blazor/spreadsheet/images/column-header-contextmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0ede9bed4fee93d677577f66ca58d8ea9c8018 GIT binary patch literal 50200 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
  • C;M4FB|NhOUKn4#IJEoANP@$wAMM}avTx%rg{YGnnG!9i_|N zQA>l0lV>QZMyP|1vo5_Y3TIhpVhMPcX45=S!tinC^mloU@sfE$db zxbr=Z6fyH2=snkdKIJ}wKT)vqj#er|rXeMS>c@vb;OYWP#GxKnwrpcJYTKml0WsVc)^r4uw|!3baL z6-t^XKI^a`AxjT$LBIOhZnPE1^TxBrUYE^{NRowVMcSu`xM?X;S7IuE9fi0mI4+daK8wqfx@>s zJdFj_t~q;eP4Lpm_*9X1Bs0n8HIx#)YYRC11aM!?+cb~CR5s%}3(3ui>Ss?dqi~3g zH)BazJo>SEZtDY24BZn{oj+B3mjisrOw{_?z>ZBoX~_Q0|G-YtXMU>A((!m}GI`S` zcgx4GR45;`|1noLK)R^ZXZqXVB`|~j(0nMi?p z$B=09;{}Dj`*V-@7Q}F#q)q^zOZ^R4&opBQs8*3RFU9`$z!@e$dy+Japr|Le6_jc6 zEw!ew)=LFzjO%vei#HTrOT7tT&7wh&bO!>x>hF4J0@`0T-jxBCFw>oa$MXS|bk8V# zxFe{CK+$|WIZ^EP5ddOSbBgi^o>=X;mpn2BAW=-q)rA#BX$7$3PqT-Q{?D7k{LfLV zoK*{}(?}tJy854wrC)0TIrF+BNen7=r^IMICGB>tRp|NJmfCxut4`LNf@_gl@wv#u zdEt&Lc4B&o)Rq?LIXJSg1)Wv35&6qn&}qttw9>yL@!D%UOct8~+7(@V(8XqDCPL`` zhdZqCpg7K=pWFQ`++jL^V<2~&K|V~yZ^lWcAI}FmRx1%z`s+-;U*AfQxA)VPIS-62 zF#7|0bb^Gexl+_lwr`$a#Q|7w~BhW%uzwa-d_ zl9FBgN=ZV4ZBMMW61T@RlB=P%0CKf}KI{1j%bn)266fN_=zjk~E1WM!`?Wa~PXuou9tf!%U z(&$g0bG>e2w>c7HWP6TzHLc0g43unH<_0cnWiSsN=k2IiO4+8q?_~Whn7XAJs ziwMUj*)^JJ?CJdGLbuBC@$p^zBY?)*5_+HYkhyh# zM9%1b0m5QtMS?3FPh1t>J*S=(0QZ7&B(<3%IQg(l{IByq<9f(etO057pNRnz6H%m? z>&m0b0jq;#l4_~XtD^zS$^$(Z`KSf~hxbOVyH7X_pHzasHMZN`Wr!F-I=$ZOqi{O+ zxQN^hUg}&14LYgK6?^><%qEm3?)(jChaq@2k_U#&Fa>}e3A?Jwir^N;ItC3k{v(DI z&Vdvb^C@w*=x7ct2JS6Sd#Xn7Tlc8vpKTfcZHt$`_!b=)2qs~l)JXg^z9#HF|3NWQ zAX|e})R}#xVmbq5Bd6UXgOwrnNU&dGQw+w^SExj-NBMotuqbLxqL_T6KOLpzIEM4o zNJ-?#tUTcah{wE`Gd@QfMleMUOQ%Qf`K%M<@M%eXuaaVKL#+Q}ABcxF7DUbBalgd2 z`}xA1Oqh8_&a>m%PrRRDDVky$-8RahlyGS!l2yFqL9t#55DhuYg{XvW-OzD{)#! zpr;yrjS{h;Ov;mVlfn5CiK)R>o>X3ziene!))j}z76mU=;LSoUFgV46@U*(}jwclG)9km0j%$}{iaVH47`@Q34y=09Vdg6QOvZX)z@8X|T| zqaB!m;w1o~hC8=r&=B|tsiSGK@GjzE>5$ps@soz=uoXg}ri5i7$0$MNTE8Khg6!)x z;I3Pz5U+UpmmPqb8n^mvD!vzBEM`rt|G5;8rPS+neEX|iup=XBvI=~;83F&gKHd|$ z12m}}?r4W#@C$#2KN|+T3+iC6!irdmuEJhomIaSJL6I{u3mKj_(fHZEO~diKVWk<*e@%W5(~ z3_Pv%oq5rSQia@OI9%f~jc%p5LvAnAD}BPiiBfc7?sXYkto+I*SRM_%%Maj))X#= z;g&!-q~Aw#&zd5OMCb}epApN;!0YRwW5Z8&q2J;@x{t+Cx{MCDdavtSlt!!4QR<_x z)UkE{zyLRYA<9ehgoAfMTh1#!V%B8p$_w1Kl@aSa^t?t1#*f3%NtlxMbU&gqh`QShl--@8hH~BmOpmLea-Yb) zcIOVv<5Iea>en%|;al6-WV$X&6Kb%wcL13;!b5BcCyq5*l_Yq5-wRKQh)0!5QU?@I zu=x{u%EUA$fqQLm;(|DOo(WUwik`6&E-c^h?5ZDbk!@4Bf4Q7Tglu<-A0LgA`(`2=g9C~3xrhS!=vZzr0O1m-HY zwR+qd5y~8aZsL8ICO#RJe$EK+U$sg&k1FoApWYMC>g9vzH4-kr1I$~yiJ^GO8n+R* zREA<$)cNquUNh*HI=3k|?L%UjfLn4ExTnmA!aYT3~VPWT>QjBDzmSzEcUaAke`gtDI%kDL-5v`lRZLGSEVkd9IHBv&Rz{Ijr zvVaNI4W{Netq!IkSt=P8p;%+jr92B=wZC>+L{}udT2j{ znFeW7uOgoQ-;pWghZ_y9qJ#MTMRmZn_09GaRS3;MSprtm6sKhq9g|AL>dZLR*}uBy zw}0!%dq+ylE2e>v`@*Z$FfrnSXtH@3}vjP2Hb-eLT|#Vs3i z$^SIhT639kRU$^aHk@saT=@OW>=PzX{U{pdzuOhRsjg@+BvHJf`qSEHg!fToWc8i5 z)1<@DEsu8*!%D!sK-h?n$=Vq}rLX)^8aKl5A2n1=@c&PRlp@Rg%LRv?GX@nvaY zw7cT7sVcp)0A(*H6IfP3HU9rTA%^^rlHW|g*)O9+B`z;W`3;as4TN6>*)fK|=)k!uYPAm5fih8G4RjzuxcwS9`*3m<;aY&oJ~ z;jIIOnB74Byqu0g8j6PU1_-s0gog*nh>~)j0j=T|u-fr4N70y88>=O(_a;!RO;nqF zEmp$JBvF3qgSLs1t-po<{?4aQk%3)uqumNH)1^_#p7DHFp z8nkJ5+x#2IJL@c)KLK|I)3}m^FSzX7R?1^k@z_?4>%;zp0&`o&a^KVEqBMUyRQX_d z#n>jqX&`S{AM~>{2jE8j3>20{7dgj zwY+g}^fIe5RC?J849$P@8zdLbp+H76erYBB4j4FxzS)cxV3kUF&fl3dH;H-)D7AnQ zXwq;>Y5ACDj8R9l0jhAe7!|JJ4v4QQgOdb~3K$EY{w};{6Oe9U;SXn}^z@{PPBuB$ z3xBSQW@5kjZj35PS1F@OZtS4X2OsJ+skW{c2I(hkma089W!xAmi?bl1m(Ud4QFUA` zcJ5A#0w2X2-M!n{2Mt3S*d}=`-#)Y{FLo*lF`Im-UnFn6HT{Yue!y8VMgF4df~j*6 zmsShUe##=^&=m-DUj)Nswl$T_Y?6S9>;G(fh+_^Ty@c*u0xFy$K~Sb-O92{qd$?r;XL$!haLsL67IubcB!ZEh|f?_es>U9J@^u9!L0ZRIMiK->9fMDDaIu?Rwb zcfa8AuWv>P+{jy^9C!qqy|R?UxV{@S{Yn zEVV?Zep?3DxpCGHpuPyAT2r95-Vb>Xp02NKjE{W({_&m=*jq&HH6=7_F7u6w*1=tn zX;}JXieTaX9_U&#H0>m9FidpsX3clAF_E12u=GDgcC*AK`is;4kYSYf`37gs>WND_ z?ui@XRtB*LVE@K4Yu%=v;9a|H)%~o@r3e!;Q7a$3>ZKC%0joEKqC$+IBpq+&Epfvdu zMI+wWak=|mOZyWoI@S&pun^d$h{vr50da?EnTP8mHGV}v(bG%{sU9y$$(eLfmK7{n zk<@-8Xwhi6>9uRovprV3Z?p=o6`;U@E?hRuuIz-(>L2+-G+hl9Z z>cmd(sVXRhkfxmgX~=L-?8Ezs;sxJe!WRAOdy6v?Eq}hnbpQw=2XsZMCg8UFBRje0 z`5>k{HzC4JN}k*yyeF2}gypqlPpo1v5S}B@QtoD)p@}K^&n@?iqvt+sgoa!+{+>l? zQJ;!MW^mPs>Ewf3u1-7t5Ia2KHYm&hitN4q6c*tMoout0r-QVBvAsYBN(|PcOnL#E z71^eflK_d-sCpAjs7++!ckZ1G*j9i@58J-%-k4qzYHXH@D-B8sW_z1we^_0k^Xd ztW$X!dzK-wDpH6JrRoQsv^@5gswYk6Zc#8BHK*lxvgE1SKLQGmxMd~D zHb1_)E56G;e}9%#u1rDoYAKGztS5B&CW%2xsMfz#ItAwxdja>WFYvj~VaDH9f76g0 z^yIL_J{0)nCS~I~CZCYsI=K9iJ=9l#E$6sRR;wYX)TgTlHL>GkR8`}=- zabGVj;@|I%SoyGndvoOeBkarRwx>pj|4_7(HEibs1a} zs&6=Q%OYPcXv!%A9@3Ay`uw(g-pJtM7db6a?N#}esH4f+yW>s{njgULy-d^jQXWTreSPP^lJC)fHqnr%J7Nwx#-gD|65< z(feTinhbL8+iZQd0`}xnI=k{=NBGwV4~-v;6xQ7^bG*@ebU!Ik=Hmh>g2`W9U8yVa zU|@;ftIqG}n4$YY|5>oQlGfZI=)^8UFE+Wwr`E;A!hBf}da-CSyW*;IPVsGY+X_<2 zlZ`Ip#ctj0{j&COEqRsrFW*L^-;exVB=3%(*E3ZgZd^t>p*BPDsml2hqcZjC5Ot;D z#CHE$P$?lj^`ef!hkW14bxq8=@wk)6@H|mDKX4co-*_^2yD%zU8e?5 z#VIh|a3+)L;fXXF#O5)sf*EFY=vglgKIC-#MzKrBV>%W~)|P@#+_yTvcAeK+J9xBi za!E4(9xKy;Z88)eC8JgHZA+ZM3pgqkFAxS^a`iUeYo8o<@o~&(e=w*g4!4W~%18 z=w##YVawC`Yk9)!ElDs!RehpeDtb2Y81pI45XKZb9paVf9eRO)pg`e8Y5PG5G@YqH zl5ls^>g9La4Z0?T0(arA^ld6tlAZ5FFlcs3M@LAfcxCq8>PbG6E->M6>=O(}G{B4q z!!0=YQG)q1*J1)@Goge#K>Md|jOy=pHXcmHB5?s%Vb*g zU5&+s?FsF-yUlbKm`KkiG)pC4I50bYsms7DS!i^5M$QCnkHMH6cCLw}r4oRTCKBTe zD6;j}(|^esj0|#NF;XK$LwfEk2GCYqal&3fV3a<;I+rkuw-hR9vtk2>c{IPNsRCRz z9qXf6WFex|as6RYx|o34{Q%<9mK`furM&hj^I4k{PX;?NLH#`?Va&#lrLEJUR*faY z1+wPt9Vd^ARB;HLxNztefiH&DcWc6k1rF9+$KR_Tk#kzOa~=*OoL}=m$xw5U*5MoK_JUWv>WNAye>+1S~?xE;H)ARUljZe0q<%8Y!#!j&q z@Kq1~_0iZizGq4_ET$Bt98l!FrQ#*ZUvGMTIGJklLUc{XyMH%WHklpya%Gd0|D3U5 z>ekkMr6^)F7;&66yAZ*5X&95L3El|D!;+JpO(vC2UB-K3-AP+^;GJ~h^IF7Yej$kw zr-<6(Bua}*#9GE5QP_UCUVppp-kbdmUA;^Ti>O3?dHH)UfWI8MDI&}wW)4?y7Vld~ z#!$4t90Sh8E!bSi48B9){vG0Mk{x?z4gr%FiF7Nvzykwo1rlzKC=DuCG!dfpYEgPc zzKZ~r_n~7T;u7tYQ$2oUan}}{TPNoz_2&+p5wt6N>ZjSO1TZ>m3G-sZ#1lvOp-1?s z_y-PJyuo$DPOJBRb?;8u<9i+_%rIcp%2tf4>Ol`8x(OlS+#I`svD2Nd`o!?p( zjiH?AX9Kk>7D;D3^9SuOS!UWFu!$4$S`5+}%>mjr^KNt!eaFICg>V3sRLVm6PYs)d zZp;`twJ_MI~J{0%8=PX&JrI~)(JBZ^*3_6F>G=?F7} zK+IbRJm?)L8{T03VnDonD$n5NV~D%r>3q% zt)>Aqq)alVdYe=v!Do2;t*X8Z@-x6s!|Oz9^?WyKJ%dCN-TArt3nC3}Qw?q@Ny;{X zF)ikM70!S9j!ZYA66{yxqksQOy45}BbjRCtz#fhCj)JMlvV2JjPg}TcZdnlr0o}*6 z^mRIde1=@fi&={zmY1ZLsZz>k?UBk<$q~wI`QI0tWc_}@k3Xyg4+iaEcN?ny-b=d8 zBTziU5Q$S+V_1xq)PcDi=V=kO$Ee4;p@)`=(if4fi~+GY*BNOf*S!TmJ?loQ@-lmz zoU!6->71WG(jiEN=r+6+6Nkt!gvki0l8^(Op6HGEF_1=svH<)TtoYz}kJd~}J~A7=iM;v7 z123+}gOG}l)8toQ{GRce{$(C6rvfGf< z;P~;#%=BtL#AxWTLCaz0t3dCl1R32@>{?yZF}o}Ve~P%CotEz>O8T?p2l*ssU{a&y zkAeE+7H11Rz=Onu_NzNL9(;t2VVJge+W?I=dX1n`y?ksle@3Qm^A}(sw(32ty{tdz zYdJ{3h=yp$E1OO#pIk3Y#yHl%{br^6dc?@PMru$08wUg~utvAi5Q?4rnVPBjpTNi+ z?T>!#r4r$4wehs@Hi_MIi3;wdJU;rw#?ALpj&L8uqv#yFyxYV$!)O}|TdJn?75lir z#IytZYy?0-bUBWknc$16p0hW!@}jf#LBO_bGOR>9PadKuip8!D>G?Kd#!t>c=CaPZ zV}<3!NyNA0;2s$tG^x%IIQb7^T8^vOIpGyJySa){4>E1QRk5yW+6FirFeMTFPXjX) z$=6vWg8TV$#6=EX?{lbI5&U0KAkjSNDAoW(GhWVO*kDw}``8F{WHgL?^CixVd~e9V zt+X33hW{p~*4gE9j@AG~LwWRf8unLF(3*oe9GL%K{}N3pH2VeG6%yHkoELzxBS*L| z!nR!cARg_Cb(SnZ{vWav`ZItc3PZ3QU4nV27>^z za>~okXZlm~nQETw&hY~o_8F=(t_O{EalmcRNeZrg&d#2`7bGZxHiW`~5-1#K3f-ZA zZ-?i$e9q*r1SAlWPL3-5B@ZO9c7V-J(%xja+N9FqKgy(=C88AJJe2Ql>P!YqILlrkK@5| zU-C+`hBb73q(~TWGR!&@*sK1TeLvJl9e#6lK9rO3=AT@U{FXM@`;}&wdg5U8vPM+; z7SF+5z>fV7!2p$*jhx|CX>b~0Mm30-!%BVw#lVH|+-)Aj07@Mc-9U0glk*JNJ2IcS z05q1~1O+re7#tK>vJxIb2m@f9pww{#V47I#XYiD0j*O7ZdqK^;RgB63QSq4;H=&~R zu!rC3mGFO}{Prkc0o^t;yb5rWcNSqlpq?a;Cf9&yo0f6qi=>VDGoTi-zXl1+(geO4 zua*Al&@5hbc0A9!U-s}*EGpmXNr8gHmY^p?U4b4&2ql3<&Xh|(pO&n$7|56W!WMYE zwc3?$^?Q{Z#=k79O70+GHE=xuBRSa<8KsSnS9FO*HVhdoK*X=9PH+@#{=9^yn7Hgd zYD(FZ+}!0L5WbZN@YLgqEpW6nT?0VuaHy%gn4U&`<_`dX)$WNx(GQesa0OKl6SxcU z=zpP=p3QoXplllse|^VC8)GVhqL4@mBQpI7l`vqLK#~ENgQq1JSUZCwqt_dmkMr07H7CI0&Az5;MjJOvjj=t#LxLK7cV zx(=@PDDXU|fwP=A!rt9!;j-|dJrRW1!7OeU)SU8j&!>`0wW?-)TtR z2iI5J5aPL{8?|N)W@w6^du?R~xIXTJDFw`#2NcS)2jHInWc_$96X}`a4}xk55fszF zvYr8-17`D2?}^v|2(+!STKZ5oz7_s=b4v!Nn~n--In`K`b93(>XUm6N_?CQ}Ea?xZ zaO4%Hw_sT{_skysU$q4n*S+9llUL-w)E4%Hz62r}GtAl4w2zg|sRnVuH;DFw$ZAB0 zJjXmy|67uP!!^mQDh$b~!=I8xy1y`|-Gzl&!1{+Bz{^G4HK_CvdsXc(ROEzpzCJ%& zNtyhGS+6?QKs$b_N|51d+2mT$4bBAbGcLV!5Ub-Mo!8FftM1DCbH2_Z-o%oK_8Xi- z9bkus$t04alnzHNxDsp}B=v5Q${nTVF`8HQFuwluTdHesG*tG%7h1_1v0C@?fp@l< zcP=){9$lSz<%-(J%CKO3ZM6kK1mwg$kY71|58z!jQYvFvvV~gr?IlR^A^!~*;U#Ab zzfRHMf8>d4N%L`ah~!Sd`>wf+IwS#6J~^7%4q%zVDva|jqRMAD#h0XQX}$>MxCVFK zi(PA|A@RnEyzHF8tkkT+wzzNi=YUSIJ51WF{DUvjiVh`*hF&nU?|__L@w{WO)JNMt zI5!{@iS+K~>*sNwa&qk3Y|B|DTM)P@G~C0~-1Y1cS5x>1_K2D^e=u>Q^dqf$G*%(9TxLb;$%pECI;7YMfL3jlI^S!cC6mQ9sQiSa^+0QaB3kpTe5 z>P^QvPW=I z5=e16K#<2Qf3}EuEXDq82iz2S++=$s>Mjj5p|y)4+Pm^Ap~~?H1%!g=zi8u|tCbsD z1me07y7co7{VYu|uI6-w4vjA<>x}bqJ&HDl0O{##tFPNJ$+G;Cbq|k}f6;-!&M6-w zOUO|gx!kPq?6_eV>GHwp@?I>SvIv_WRCwNVyV1gL_R1YH$EBCY!w-qVmvEiXoT~)1 zO`#NfJ*Tgw3mq8qLBuO8OgBzW<0koC{UyRKy?%T2enkCYiV5GZv+HsN#yd+oP{eHW zb!X8B_sf*?(CeKl&+QK!AMT$ppSXYb9&8RcW%-~dOL`G{Tb#7A_Surc=67z#r!mkBb-vTxS|xMkSZ-t;~tnsuZQ&ecn)l|G4NNh!J<-O(CX@ ztnvETDfWm5NbWwU{Ub{Y^0zZil&fF9JsqHz@o^q)j`%lwq>bS(G7>S|OFk}`oQ|$g zUm(4_j9C~0%B^+Bb;$lj^XB&J4!1G10M-wWSJlpf_IGJx9FFx?WD+r6UGyhm#EkGb zT!J02Y*#eW=*+Z>rx*+4hARj`_#w<9Ulq1Oo2$y&nb(tQW|nxWcDImrdyL+Y_;$#J z59}glEow_gYSQ3dL`Bs0YZ<0FlocFVAb!iQ6#LZMlVwa)K* zU}@}XrjxW>8+}+EV`!7es+Z%PBb|dhlM851G0oa>E)7HCf;{ow(QV^S5h4%jNH|-j zf#1~}%;9dQ+0ReHh_#5j<@VUP>o$_gyOm}PHvYVE}I=6@Z|SO?mNFX zofJ89-ud4c$DHJCl_Yc)y-0N&&WBOW2-LtI!=>9&VA=MK<&3K9V&nSCx3|QH?14az@Rq30t z^(emqE#KKAM!kq;j|lmEXOZD8b?mQ}^B-bB`CBFk)^t`-mL;F5@W}y@A$mr-Wm8~P z4p@qziPWA-V+UgeUe4$*8O2FoBI-cR4|6x;v9)9hP1PzR9-E0>qeKYs=R^(`mXu?` z9Uy(HH(VhFgZ0W(@J7o}iQ3@em?3=O5xTIbc4`h|R0#c3E&;W)fF(EL58{>0(sx2* zUbg?nA#FSrh_PL*5iHLzyA$YXn->z9q{1v8#C2;qfO<-4@)gK@`^=S`11x2BuPNs@ z?xe#QMDNwVP^2pF_pSXXA^9pURLKCFwJy?S!!e+3B@?Ow^}t*#bc|Q z9~jD<5zgHNO2@7(=o+c#U564@GL0!EN%cVce~>5+iYwSA=wa;otyWQO%IU54$o0g_ z=&e)mVRIU~Y{)TZRZN8|dkJ*#|4AZ$*Z}EUxz+dA! z7tfJ)KcS(Zo{J~rNN-9m#qaGB!Z^cQ6nj-8xg-$b>geE1J32ql9QUQaT2`Bfwb%KN z+G9+q7@Xj?lsmuUKMno?8ej~iARY!XPo<*AnQvn&{6ws=BxdF94-b>iz$Cy92xl07 zavC!pFvsdHt;Tc^T0i?0!)E%pY@3uI;D6?jUt_2#iAIAX^QhYvrdC#ds2)CP`mC$n zwSb$Zo)mu~8qalh4`s)@70UzR<}Tc@PrPkA!M8Nmxsc3v2uvZk3G9rYQ&UO|LT`NT9OFH80y*1H`~e%IC9Zg{5sN(<;nTP7 z&>oEGKfkSaywlUPnK;DDBoNwoi^D`cHYSo+;5ovE{5}yax~ER#ACyn*xU09pi$yu$ zq@R3gSG-Ufxia>SWrQ^3mRHfJ2IalZ`Y*tM7?ZfF`SFkldpPL}eTYZh2~Vw{Sn$TgNNAKf@{fh$585#VK8)N8xlQKJ~i5??P5INKZ%242cxN z?wN^3DDRkDrX$$52P4vL1&Dv^<0Z%s-bWeG@-d7?6{QN{8U_wYeCCw24eicj?6(j+ z65lah%|=-mu(>Fy(U;NHmm^K6Tg!G9I_^_3It}GjAe-xKuxf$WT4NCbQU&6-wJGjq zgMkOqcEv1Aij#s{sYWo$q;x7RX^0eDiYK=O6W~GgYa-j27>vl8fAw%`&r-i(Tf;=u z1#5?oBoeSXMIuFp4ejmrgdSiI+jwZYSb747(=y&u%q-lk?6E?Oz5zUO&XaI^QkfUq zUdCi1$_7wRlf=NXf4m@^JKD;Em9Z+lN%n&+LsLYRMPHTSW{JBc<|_;Mld229mDL!G z;3_^B${SmEjONW+RX`kl`v+BxQc~XHgumsmju}8&G?o4{6<`RfiSSMMZxD0!E5=iD z_mn{$o6h2E67S1y3l$0?Rf^<0&LeuH8%PU(f-*UB$z10!b>hnQJZf|bXz@AkJMi<( z(sx_w=96}_##Z6fdf^|94(b=xb?r#wnQ$;W&oX(5&*V@C1C2xiqTYC4nQ@USk@v{v zZr5@&w@VJ%ExP}=;*L|efI+AY1JP>UpIWfKc{^B*!l9SVq>04UW}A{ zGAm<>nQbAX0Jxf1bG_tpT#N>cKd3eZ`2U1vnHlTBi&35$^vO(fxWnwm25^@Q(To7dP#Aa%!IiR-H0|iq`vRoD` z5TAVCetrHMJw!pEbc7LN9Mm zl~|MGpX=RGpp)>g_#06u}fvbge%I1R6?Mpb)077isyQ?DQP#CtA$o+DYlb zU7qr>?UP&eFWvH&m6cx2;GxnMwO)a85GMgluNO{rBUM$QaZ&~~aI-ex zer-H=j5zWBMSb0-QC!$=q`^=H7~+*nTyV-JJWRF4cW4YA($~n>E=~*BVfKDM?~8$5R6f2Gs$+E7cbgQX57|F;+P+0k^*3AfiHw1V8$dO znHy4E)Z{je)M`juXSZSUDv5uB@R)0bF@v!`ovKq{E}X_235CAOC?rmzqhsO>g0_B7Q63J4 zG6fusX`sfKyawL@dT1V6zrYWSVCi6I)C8{eaxlj9LG56%QWPifN{RuBAkLKoLbD)X zzXrAo7y_6VDE1uiZo1}@{|XQzY6p6o4&Yv# zfN4Ld<$2l|c)ax*WCjNgesIW}2_hYh;;sP4$rCO0&`e>LTLpS_mh5gzPof@O1Jq0q z&+&TGe>=3vBf%MmS%=gFGy(IfQ3|xDg zXn489Z$wJefMIqOOfE@9`3|+@Y6~0j5)u-~Sy)~*5|rXZj9>bo!Ap}U*snl5V=zf- zo;JQ2BkCnEzWfGnLK{RN!Q_K~`2{EQ`}_KG8*Un0ftZU1Yod2Mu6wI$q8&)3Upzhe z^>uPsgl}arZm3lHrqZG?ZRsYB(I4Z=u2z|>wVbJn{trw~uP(MnD%bZphkPWxN<&{x49pO2z?k# zYBu`w9T>x*$iUru0F2nj0{LXGkZRTkAZwcO33E0PH56!0)2=JHv(tYTID9W+It_gA ziQEhCg1Zgo$ZC})_}oE~Kn{*Xs38WkNK~rdYkzEB2qE(z@SCnDJlE&8{}pVEv+#eCW zK+G$hrlG1dR5)QRIts0ZL>VtaS>|dNl{W=?y#Xq#K^1q0NSV+`}XnwFB;`kM1m;)E=DLFh z+WiIrarvq)&kpyi1NJiYlyn0w13%rTX<6Z|QY4o>*v%c+zCUhn{-{iOWZL<@ZpCO) z0!&aV2UACo6G<%scMa`s7v<&-^DfT*$-mJUlHO<}t+)am=e)0sTiZd=A0`_cO~>#) z+^2}Evx64c4ogHa)@R|8!yk4t=Hq>4D_2BXM;+BgZcK95)r|D$O#|bgm1l55 zp7^2M!>~s^#OIEHOd(g@41jUzw2OILM*k1|= zMcB|5^w`Q~fXjRKhsS$C2bpc(cY035`d&mt)%al3Fe|J>O$ijRXw*y~jpj9A4ts|E z6~17!^P{wxEfMgW4Aex%CKnJPguSaLAfy(k!lGEDl|eII0LHvZ*ANgLiSUQGT1P?S zS$*(^()X*>(4}svszG-Y*HH6h)@+}rc?H7F(tkC}JLecvr%utQo-CjA*;^-yN1l)9 zLfV9NM}-3d@y?3(f0sqaKR~OL*!u8oFX=O6w;8$+c5}!AyI^{l(P*^Qw5!oXDTZMx z2!_*WVFS&&!u=sou1=LY#+CwC;PupAM3?ftB^k+w;3Fmt+;^CJU=yzzPJ`U##$THF zfl6S_ynQhVU-^a3+yt>VU6a|FMqf~9#L5!xCH11;mZ|r2vzc5DWV@>81D3&uyYKLp zSzo)@d3BQwx+<6b;kxj8>$xzW$maKpRDPo8wjb6BM}q!i(P5&W3idrG&qvv-bt3gI z?RXX2So8dI>o`I-Af42ETv&*2ar?uvdsUBv!fjosrL>VJ*C1g4+mV<;>uLizZBrQ4 zTU*H=VR5N@7u%T|U>LJNl_FY-Pvbyw)NQOWcNwNvkr&Sdeh?9n;n9YpEn_!CW8>|sCQE)d;YlCZ;yp8!SXtjFhWM*D-|n#usY2CZbCs{53g0|Q z^PYMQZ(=C@5wG#`Md-TW2o|3#X57w0*T<}%s&DM?iK3#u5Ar6AF%)cP%+^FY*+QA9 zanTwqA*(GcY!jXb3=*=P6#F->lZ@lh1oUo<>Z)B$i+T0L4Jtvr(R3J9<4b$k&{x?$ zQ#M!GoXHVg?%_*O7<6s6bpaT`cSn699@AmOHiCqfiPwg8Nf;?N6ZE<>%B=DYE|COU zWf4#tEMWueyQr8stQx-M199+ik1n)9VD+N=kCti-f-z#Ii~{EV-COcG@ja&)MsG>{ z(2T$|y|S&hk$nHFuJew^@^SnAh09)7R+%9yr3l%wGp}T2XOxWWO=RyRB3U7OMfTn# zBO@a#qwM(&6{+Vq``*uUKlk(cJ%7aOB^Rgjyw3AjpX2>`Kt6=S4-?EYyRlUE7S$3_ zTsk6@c1@;~U7u=3649ID1)`fZd_%1}pO4-Ug2I6LT&vKe#aYpX1^M!zr?yL7l$?$& z(c53o!(jH~lq3E;=&nz1y}g?*g-C?5!hX!XIcogLr#f)!#_98axe76dOdb^H#Y_C7 zWAfiTYqvi5Y}HJ+Hy6K~1Crqty*0~54Z3mlH7!iQrv%M!e66h9ug95T96!6pzfz(JG!PTbad80xLNIk;r%q7MF zZW!#rsY26^UQij|(GCyh zACqW?8h5AZ>v};oSCvvP5oAr2hD1H3JwDifEP8r;c&Gn)&~j$cN+%`x;$Z5Bn86=9 zj7_RFtp?+>>>OV+mGCkzMKbfrc>uU~b0U|*q4sc;g;1{4h?w?#Y{9|uz*e2NOkb{m zDPA=?g0w4j(`QDXI7+_i#?PO}ERr@Ex^Thd89&+7{fpiaOoGd?y zm8GgR+fT)xoqTe?zd~SYosh%a7nzt) zZock5XG8q=m|roK6g^?j3h85bGZ{QOz0?tzKQ^i_aCW5zK`BRA$G6vc4y%4Toapw@ zk;{%`%o^QvNP;t_hPg6?E$|Wnu&gpq1uiz5?)khvrK%DW5IzD1t2h#1}B$9((O{zOo%2Wnc-&^Q`| z%M|6(-`6<%_iE)628#AOUT&n7J<(F;h?N~p3bXWlS5!7n(8P_-Q8E)cvJ{OpDiF;- zWytsYdo91?@(uA&sovY#pV)3|ke^jFcQ?gF9)@`NqVdj!LQc6`zKtpMiptXq9GXX> z+*xW4#2wu>TQez|`wr&1_6!)+9OSi`ek%>JYD4eIj!OgmjHr1t?n&}e=wEDYh9x+g zaHEm84x5Kg&e)Rxcjl>D;jE=*nMHNH4&vv2uiPc9U)8fzeU_Dxt+Nz=HtQe%yKt{Z z_0ylbz%P^TBi0rTRCAcqFf{vIL*?+w2%yZ$Jb`a}jcS9BLL+KPc!)fkzU;*(<(z-d z*x?<}p^_bPRzMZ|rDVo*^6!yIb83o?#ev4-^Mg6;KaKn+TkIqq=^`{2f09RKE4-KJSic>;^*zLu-?_7^&giT#YZ*)(FECY49I;S%v_ zu`6f!TRy4H-*2$zoNalITKp2{D-bjmZT6(nk&*FtrrznvmQ4)b+&9QAu9AddPe9a-a$L4N9rgKznS@4&dK)|+VI_0tTNtxxJVy~)b zGEKPikJzNi@x(L>{MnthbL}G+`BK}p_bT=A#=3YDDcMU27@yu8bXuzVU`G_HZOAON zxKuJ#8>pR@_~j^{hU5W5LOkIUQQxLm(x~1Bsj2ecSENE-k&{*)%;kO^>3IUhLCt$a zvodHT^rEZv>Jb0qwLNp;n^qMwj+AKMlrKTjPY=(Xhn>%Ow_{`F=+9H%FI+aR;$IUb zif~o6qdeLqa%ZVs$7H5s_sL#fZR;2Spdh4kbOC1WN^)gRVBWqHPZN_k~7% zE7S!X?E%E5BQthBD1&79#1PJrp z=S@p448_j4rGS|Z{KezwJgnKPj9G@tMaQ{@@!5o*ZNbE_gK^~Mu(W*=6XC|lZ}$tq zc*0I(5W<59h1qpqOY_OSuThD-*YV1io(eZDv=fK}Q4Gv~3Lp?k93TOB?UCbJ~@ zhw-SjO#n0PxrTXO=KFmIS+hCBIdQb#bH+H89BoUyBYb_6Fm|leNQ5@LwKrp)A?^3P zkNajH(0H>HM(i47GQ0cC&_sp+Ma=Qsop(9fGN47ED<;*-55m@0QQ2Aj<@7fHfr?0PCxKVo zk3=xY&PA@Q-fe^iqYy$ZLcopSe(9;n9LTOvhfw8=Hu10_`BbTDQWFCAw<%4@6YMyjrJg9pBWngD53e z;r?z29$O85~qdlbxD7Ie{Z#w+koBpm%a)F0BHmPR3a$EitTIHw{i?cAOBb+)NSb1 zC^M=pqxU@%aY2EaI@8p1&YhPc_x=EbG?aza=?27y@l(Vvu)Cx$dZMKKN(h#3e2XG~ zcruF?l?LaK8~;GsA-XfUi0lRF-iB2vkJ&f!gq_C<1lpT{ggV7p&bL)Y&;2QsBH5JI zy<;0)8JezCc>eQk_hq~m@td(SFiQK(n#g-6iT2W+cZ>4j#`$CW&=ruKA$uukopxk^ zcUfBBAD}h-kDvW=bQ_+k-EM+KH`Qdbb+OZVk|hCW4LquS9-b>0F-GW@#dmJG zockO}fR7(>3>!SUgU@E%Jhb@ItU-San2T6Q3HP^-~ei94vncE6>8ZdgAHH_hPG*|Do}N zE2uChM&u{|%=`X_jJcS7*M7cQ9y`=a)PC$?_dijGwG~Vm{u>uL{r>`f{O7~Z-)DR0@+ugepV1w|MB5@ zJse#fg!oHnRysYp8Q`Jnt{(2!^Z2))l2hsxp81Fh2f=$odkC=L(T`_0S)M_{`5vYU zOkUX;EJ@gK&Bp%L$SmKcAlQRm(|1Iu}8VKk% zR693D+*-pimv^B{)z~vcUX*>8V)6@dST zcF+ea$o)DHXbREC&+x$r>D!~u`+(({_p*}re)ri#{l#T>JcXfY58QU8RKhOm-fy_0 zFD@HsMT+2-(X+>@^VVC2QcD%lf|a2C^qy zB{+}Py6896lIYgHb=%75t|IcH=$NNxcAvZdL0U|mt{)0{rx&59S8bg*J#v!&{foDB zti?hxdLuRd-ra@Bsini8i`G?U?YO!cC2#0g+of|Vek&1*3fjbPi7Y=MpIk55pE8FE zRVKh%c6K3`#8E%LC5^$iN!WTpVJt_5`fC@SqkBZIG$B)9Ii=0ssl`kr+{meR>)LfD(ESqW@N8Nn|nY;&pDAzmf z-^+r%EH!G~H|0v5x+As+6~jX|QhKVg;V#dOVPUU0wzR!Evs0{$JXD#R^(~J=M`7R4 zQAmi4Z|RI%NFB}u8v$*AOcsNPFj7p4old2DRfQLMRE?~L{2?uQuL;6RMP|y^j3&@D z;@u5iW2czkg9!{dfMh1JwHdjVGS!rqucxOMkghU&&St4DfI6pzN9mMYG#R-2NN zB=^6#dZ&XF2Z<*l);F1n=+S&sAue?z>^aSj+ZNC)X+ZAmAXmJ@YbGFwh zXJ@jQ!kk#rCvl8o$Vgr$Fy;Y+8^~}&dmuc;5j=0881@_jo)xlI}dG8c3g|q|A3QLHsg;? z?_r^2v!5(WuTMOfVyIo0S#Rn8GPReoLf2Q)W<-l?g+IYaVy0J2B1Z)KBOOG}LFMai zd$HAq{uqH1?=2gY0#n%YqsOv|7mowNT+u7%LmVkX}ycEWV|CvMbf6(>uZa85Bom=cjpR|bB=G)`E z&n?VJ8<98@h9=}NA{0jKsJe2EGTZ}c-p!v-( z;SFmYnDr#*e$#z(k*jiNV0Pkr=jG7y)9Ns*UgIoDe(QG_YQ^Viq!L7C!;?n8y^*~A z5dvFkY9vbT^?+`bY=S6W1jYO(XeuWQ?8wsc#}LE;M#gNkQhJc zp`v1lpyTrHK@S2j2;|Hf#Bls?+rE6ju&axog5JH*9)%MOT{)mNnD=mT3b*1b2S25v zRt=|C5LuTyZAN@wz6_-sfi}OO1__@eT||O-=0Ph+>RFMEM$1{G|DvbX*;L6QBxktS zqeP)j@x)tlf5?{KTeyp4sos5459}r|{OXoRAQ8VL5JQu-L;8CMfms41elXb#vbP(* z_JVo8TIl_T%pwJ(M6XPfKxj}(O{D?4^gNP>NZLie%p%e{jvJ=sjS%Cfa_Te)pM|w$ zH@xQsI91z461wX}-f(;zxiZ6M?grgLd_*EQdC(=$uhuHo;}hh%CX>T90djrqpfcG& z+|TFG^QNVw@Vk-iy+_dUb(wRYd?}#f4VqPC+7k~>W`bdHdona6beDO+4TVgn-^U!H ziOaa|o!oaX-wire2gsImXvAz^XI5aaARnm-R%v<)7=h6`h~KmkxYI{qofe;Cc%3fb zs|fg`-T#^uXQOD8nyfv^>+lREEDQ53aLTUxi`Mjj6&#DdjCf*w_$5+et!?k+RnF+X zFby5sc63kVDHC9F7?UlTTe!~5<}r-MS3km~Pu7LDPkFWkgE%tLDOPJc z@@h7{tT5JWUL8^frpLo&)@N_(_ZFyzuK9LvS7-8@*SZMT-Kr8*X+S^uzQ+WqTgh}! zIE$*Jd18n5#E#@LL2YX~Fe;Ce<6TKyQnA$71BB?w%!aj=4g5wKV6CVnS=#241`>0_ zTJdRXLbl?9C$Ne7j%p%SqWn7BaUti&>VMZy!1!klb<1$B8t*)_>IXfu#cIdTrn;3a zP*s$5sV*PYHt?REj7!swOLb$&zplm&k%>dhY)+PcAvfwskw{mlO(dX3&1*MIJUpQw z>zK~uKKuG7yVfKp3YEo7z|i5N$xqovUX1ak>4#SnttP`RyKhnU;Xg*T<87wJ(dL{T zhHkca8BS$(&e-uCg>1WSx%8D@D3@Wi^u3j1UTP zuGzKko9P02lzphrfEcKb4Y=%tBUO}K0Ym*5Uj1lm#>1c&pR?~#EH(ffZQ$I4*}O5C zEmj{7HN)Bj+c(BgfjHxJQDqbFheRmhkvX6$)P@>@4@s};@!1|-S2f8cC8gK6ICZqa zf3KB}Z^9#*kwW1|&oG6ZyWS|`0uXeh6cI3&KnEEB88if#G1w~4Y^gJ+9}e1xux4G% zjjqpTKI0nq!%{%5(mFABxx;9?HfA!&4i_V#pO0}O%2cYAS|3_+7&`+|C=A2Y$jvt` z!lq}fb}&7TH^EXOeY&$a1w>}ze+(68LBz@;)D|#SEmO6pA=9O$C0ranIYw77V;9I{ zfxh4?!aRExvtbD86?ib}u+i`YzP`bI>`p~RK}6BxF`iK+E^~P=-cB|s_YiP3#qN*V zCaQ=goFBL!<~eX5{A08S7`scoOm0aO;ZR`k2c2Qc96nXL+u7oG@&zVj6mQw#NuhwZ zngZ((Xh|FQ0Nqet|Ke}tE%?pnaV-wpLhJWX;IQJ`58sW z{boA*Z3l#3+VL%F#tw()VaIKfIX5>$owMPMN&RH5lMl*@yZ+1MB&|Pb#`wZZ{O1Zd zs@;V+y@7iOdP$pD{ofdGmtw?G`I=DqrmnSZn=`8%G({pJrgG1kbp!XfOQ`&ZnMT&G zuI=!6K9q_1x=Pph%IVBmb3dl)1l!(zvoaU470LgkagC7%8}CpDG7d2nK{f#yaAsxV_8Pj3 zytD8~E4}uYY<((V{DV+;`s( z1#z9JE;(Zpnq*oXHtAOCyOY|kpYXT}YADJrZ#{Kyq%B_kR7H4FA-A}~)MhWPp%Cf{ zaDr>Vrg7b5M*_+$%+Lb&z(N5!LpKMSLqvmBGT4$44Ad5Yi$j5<(}y&u5=7;h?s_fa z3)fd-gZmzeKwl3?T^^hn7@@RPSWO~l!o&GyYKR;j_VHD&PPp_oaXe6?Dd)6_We<=73L{{7`hp~P(voXUdzf;k zAqC}dmA7o7i(Iv_ZsOdCnT@W5c8R`#;0ikrnhBZ&xz4GvamqNdvZ+h3*oQm*)?uUr zeP)#ILXinIH8nH$n9|?9%9M`_M@$!+lhl@&LVT9Nub~)H*DNnc3-E;LOw;cEb&RNk zoA8$2+OVk)V$h8BHIk~0>H`&picl>Wb( z92{EKy|4624KI?CkC$Nt9@%9D)Mc&YLo(z7K+NO{f7XtyhRTH>)9>X^vOT6`hxZFi zRIp8R8J+NEvEfZ~B9S{MXcbem#Mwn|eIXF_gjqt*e%Z1*id(e}jLV3LXeAvHtDH$a z-jGkcZ!r(O3gxy+TA#vAvZ(NZHwn4eHdS%$BZRO;c_GIudxdaPJDfm&>8HbH6(4tl0tvXJARaq%^~2NEDb0lIHIY_sS7fgrF^Ok z!z-~oto+u5?j0M(H0y2vn==q!gj8V!U3~+?C{#NL^b#=~gZAr7rC3>p{3C^{3nw37 zTXzHB;>MevZ80q$KHxn@tRUUyYn6~eRrn<3km$bv0Y{~+8X0GrO!T=lce&iLUXm9C z@J6PtGkwH}wNC~wAWBj3dbsJUWM8Qt3@Y3m0tr}3h5v#A`aw3pqX^Q1gfPnk%9fBe{;$4=l zCLt9R(R3!N4vpJ25&5oiq|I~jN_^x^QPufnP&z0uMsO;OiI)cw2uEW$xNqPQok90G z6mDFog1-F#!8o2r3##!i!yia&_V@GcOpF9^NIu%YY&F*v@dtkc@8 z5dcioll%IdA_&Atjy!>Z32_7$cBay!7wV&-xVNdgbA{Qm=<%-8-NvD1~-Fdhr@)xr-kzPOLI&0cFKSHdc2dhH4!uFhzlO%#`t?qJu z|NJ8L7uo1K=p!4${w^0d6J4{sN-;=yQxfhs2f!@6dnao{e3Rn6q>ORityc~(1txZe ziG{2lZOAZe9$R!rsVFgxt}ooX$44yhCNNEzLW?SrOIKowx+i{G`{@n7T-1&TLw+kB zlmntJ7!^JY7Y(XZMm=5Wpk0JuapVGisN7SYoWOI_H@RHED|f(D=HvR-s+%hXB+>zK z+M+50uN$4G!sEY@#Nu5VywXGu?9fOW43F9Quq%Q%i|S)LJRx5A<7G}YDnplq#mw-t zC6rx)*)eiyvW%=T#UFjTt zESgXTO{}+=Q8`%a!U{%&lN^zAJje`R3beCUCWFQ8BUpDwysiqKrY@;;1X9`|jv+xS z@UVq)Sb@aie)=!5+z@d>u0D7e)vBk7j>M=iGhTnFdEOD4334R)Gj=M)c3kwN`p=W; ziKvA8`P^bNLxu+Q%LBkHf3Er3 zqt^y^-5Rsevamb!-zb9dj-ODH@vw!k!fMTA40#?LwJqHvC#Y)+!$Wv4Ny$sIy$C`g z^KE(EMBQQ5At!|(-Oaor5hlYmO`oeK4OR51G_{lQbd&1WM0i5lH{M3sRE^*g1cn~I z(EA?&+m423?+Kr2(^Q43=zquRBJ?u|wYUGyR*dVfsZ>AA`2mTz?qVq*+pPu^`JImt zCVR@q%utH#ykfU>Ctp4r=RuBToZB)p^AMinb^4V^HpP@;&cR=etlt~N7yKp*rQ?rC zOy!+Y4ot}eH;&%E`ZJzjd79XRO_3m6BtVu-K_+^>T#ndz38W)>yUI{NC%F5!_mlUs zZC_sQIr9L%u#zI7-&hI)UI`!PYCu7Up%U#jz>lnY z!g{u=|Mm>Fp9f#Rsc%p~6`Gu>Aqbjcg+s0(oHr(D-_(3)|N3i#onZZPtOQ71fr4S) zW=<$;^cV@;KcEE_N*qy4U3cpR0!z43Z3w!SPyJD8Q&GM;ZR zku1$r1x){lt(4ej-jR*KCXWFGpbueRP*l8 z%kxXa)2;R5mM3N=yI6~rE$B%{igL=Yb<|Ost>m1stj`Pbymk2$X!KTreK|< zGj1ZWXP$k)MDnO$@7f%kuXk?P?GRHUPl|`jK*n2y$m#HgvwBiJfF~s!DAQmLCT5`D`a42=RD(_U--ZH+5mHmm_B`dE^Y-%9a|Y2 zI;1)mOmnhbFr#@t9lX~r=V~hg<#;2NqR2$*7!Z6&d-K3AEzF%{w5~Zx*+h^Hb;>#7 zNaZI6@By11usxqsf!=?@YjUPUvu9v?F;c0GnZA@zsVSfJn3OG4cm3l;q-ezD(J3UR z(*p?AU?r(Fg?RiSsPXUQlF2opDnhKeM3Mt`BqEPuG-b?Kg*-NOYc;r5i5Yj8cogLq zpq`Wl@9Y2ilWCE-F1;pWOZ3%gnL}=EhIsLx(W^$JZmK1UCyv$lwzYNcjdna&KNpa4 zU)cZyUD6l^WcBgToDzKa?q3cO#R+GG%6*@}USQ2-1jKHfX;V+7_4Ri3x|(5Zr$Rv7 z79pXx%H9-SPPA=e>gG#%T#0ja6*cu88pnkrj}{ibgs^l_PNLz7iu5RDPuR(5eI+hT zi?c!y;=L60y3 z-_(UqSwH*0dYdcgb6cq&Bn`4)_cC8qLoE%B-S_K6CZ-3wBUT7n`O-67(;=LeKfir- zD{(6hgHr8qAl1wcbQ;x45qFVgIGq`g9vHBX6C;jRlpD)wSS7a=3$ai15c7C>4 zJ?=-;r853niv-tCE~$1Lm8ea!Or10aCnlm@z~=}iwmsjdRR8^`Hm_dsnnd|ffXTb2 zpk`(2a5yOadJ6G+Rxq|nJe(c%9s=5zdpqspulzjyq9y7l^L0M@xC3LpMv z7D#fyQ6XBo(^#QYW?av)|905#I}w{op|C~c!*zq%S@w_|I;6wjZVr|IvtVf3148@e zf3$r1KVRf931It{W~ByOFogdm7PHVSTn_`@LQ;YdH5D6F)(Q9g)t4wBIkGV`rvqP7 zjpb^v`4O(Z1B(PfT+S0~RX#<0XsPd3Jp8>}c~>ic_iXQ1unghWuoyi}Ol5NTuy|-l zgj3EhK+cjk1%=hC=T3(CBml;W0vV0odb57sF_TYJ*%$veAA+lV$c!b9EZNt*WjYs+ z44X_{|F7!4|0P1whEP{B3QygE$^6yk*=oBNB!HEThuoGxV~LD4P8nK$y9A@`W;^dS zWtar$g}K5e)&CBR zd~%E8Ij_K(YF%Ri8(}o@QoUs_1?|}l!@Wgtu|wMM);-4P$q<_X0mZ2Grtpk^Nj`6q8 zaK~Ga4t>JC3p+5VkkvRlJ*{xks#_&gPGC+h-`0dp+D6`*m0TKW!FySNj@Zi7oZs7p9@ka;Mto+aX*mb{fFnw92LRY?|P6wY)>ltuMrxmmT7obp`I=T@*N zFB%+CtFD-F^{S_XW;-!1em%TZi-K$ljvAl8_5Nn%%ID1*^+S3j>D>FbiU};XJcua2 zOIu=xHN=G-f*IY_$%mX8A+E6C`<}rIa-zX=a`A-QPxf-`q2JH@Xb~@%)lllbxk>x` zV`v{FhUTZ=A6}p={!r}I(GZ$Q8qQXXZ&xj|y)a#s82_cPG89umIc);{qNcze-w3v}$0%txUlHnv;_;5)wT_KoFL8q+EGu)+*nTsBjLmX67Ff?+yC4J(lT_(ZhFsKMA~~TNbh%1^O8erfj?V<#Pps{zFYw- zRe_#6uD!p5>|zT*nS+%oG1T5piFjA;G^eC=Rn6PV2(< z!t~+DGZ&N!c&ENddhDln3cQQ_GW7Mxa26cHbQeQ9F-+me;6Vl{8lJ;A3l=07-WNt- zE@7%b#cV)K6Qb?dDN8hS5vMgcHrKB!ANrhHNb8&&KUEg7ar#y=Jt@Z5 zIa)Dcc0_e3l`TyfVR7$Xm%6$-T9(f9Wo8hT*6@wDe7ZK#hS>CEgT{8FnA-Mcn)IU$ zef$@V*M*6GhWUK7i#%?^`n_C6$7jcBTk~F~O_~1aw;A+tq@_rUkJ$UiUY68MDxI{Q zsdl2(8#X=sXSjX3^|3`dgEkGZrXo2^^TweiS@)R#6q@sF_$v6ZU_$NMZp&OOSQ_4~ z56Y|b8F!&LZE4ui7tw)l{aS2pz+BAWk=~Y`RW>={Yfaz(D(SjXb5a2;n>tyr+O*te z8y34!Sbt78tiQkiY-gcu*GT=Ix`viaMNJpW!O?lS{m4T9fKp zwIYd433v0`5mu0I_Mto_ueZ~C9apTwxlwI=m_kiHj>0~j6%5et2T>Ozau)#*TO{RB(sXDU{wQsa=c90`m|b7MuLs3ZEAx_eVZH&Bp zp7WYJO%v>ywP^9=C5AcE7j?^Mcjw!_&zG+`Oa8NneLP>c=-RAK5uGlpNp1^xY!LN17c_SqQYx^rns=RaLQISc5Jl8J@c27ck!Aw>mn2T`L?lxS`giiHS^LP=uMP$(}}QTP!u zPPnLrzy&m_O+LH5zPZ_+H!(`;c(T1c&>J?Ra!Yl1UwSm!zrsPuh;vY-k*I|(9v?SI zjoJJ7Oh5YdL*R#&mi_THJHJ9<6v~E5LR42{qmja{I^`l=^wHM+hQ#wIR41#46CDYD zWo4!1KR=tK#!_1(lS!yiaUOm)6t+SPR*xUQ`l*4E**N4B?f?2u_iWyZ*jFeRLby?^ z?#EPV<_u+i`%9rekG4}G_C-sP!jT+E!J#Wx{^1lgDoq;s{@`hB?6e>XmD5>Gn7<+* zA|i5iMey(&H1t=X(z1H^@Ukc&O2+UYcS%xO`Z^ql?9EbtTN@G)8F`Gr(T~OD2>;3hXPfs_nTZQv)ZY;6rle>&It`1AAr`@RII0JkXSv{1SBt*x!(N79ZTjE_!FJije= z5`O#AM~(ddLBr8Xre5*=o%v?QEj!b(L1$ZO8dN~lx|&lF@fuL(tUNtMl0VN*P4OEU z8MX6Yg{$te-G1@Hg$q_THhoY{N{H%d$Ax*(=GijgqFDLLq(pDtycxW(B_u8F@Ewlu zX$$%RR|0X^!%l`LO2amrMVcto=)!cc_FRptt81QNDFJg$cD;r@DJf~Y0Q~fk7h*#I zu4k28U0n^1HJsyL1Tpt43I`P@{_<|?CqKB#cM=Azwnxm4y*D%F@G#vU-)H@-xNi9r z)iv_)`iZtPE{gy1e|pnr6&LF<%Lntm=zsZbfY}$#8kPTMW2NfXJGhL|UwPW%EX7FT e(yS_Ne&cMX)o5K9afO=(g;G((DwN5Y1^qAGJS*}5 literal 0 HcmV?d00001 diff --git a/blazor/spreadsheet/images/row-header-contextmenu.png b/blazor/spreadsheet/images/row-header-contextmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..67b45efc4c69425463b817ddf546f7ff8af882a6 GIT binary patch literal 45319 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 literal 0 HcmV?d00001 diff --git a/blazor/spreadsheet/images/sheet-tab-contextmenu.png b/blazor/spreadsheet/images/sheet-tab-contextmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..98111d4e2165fc3ecf6aff23e0cc49fdc93420d2 GIT binary patch literal 27365 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 literal 0 HcmV?d00001 diff --git a/blazor/spreadsheet/open-and-save.md b/blazor/spreadsheet/open-and-save.md index 593738ace1..dacb504b8d 100644 --- a/blazor/spreadsheet/open-and-save.md +++ b/blazor/spreadsheet/open-and-save.md @@ -27,6 +27,8 @@ The Syncfusion Blazor Spreadsheet component enables loading Excel files directly {% tabs %} {% highlight razor tabtitle="Index.razor" %} +@using Syncfusion.Blazor.Spreadsheet + @@ -34,7 +36,7 @@ The Syncfusion Blazor Spreadsheet component enables loading Excel files directly @code { public byte[] DataSourceBytes { get; set; } - protected void Task OnInitialized() + protected override void OnInitialized() { string filePath = "wwwroot/Sample.xlsx"; DataSourceBytes = File.ReadAllBytes(filePath); @@ -50,6 +52,8 @@ Excel files can also be loaded by passing a Base64-encoded representation of the {% tabs %} {% highlight razor tabtitle="Index.razor" %} +@using Syncfusion.Blazor.Spreadsheet + From cd13168b5b7c61f2aab144c100728907592c9be6 Mon Sep 17 00:00:00 2001 From: issacimmanuvel-git Date: Thu, 26 Jun 2025 17:11:03 +0530 Subject: [PATCH 15/16] 965241: uml --- blazor-toc.html | 6 ++-- .../ActivationsExample.png | Bin .../UmlSequenceDiagram}/AltFragment.png | Bin .../AsyncronousMessage.png | Bin .../UmlSequenceDiagram}/CreateMessage.png | Bin .../UmlSequenceDiagram}/DeleteMessage.png | Bin .../UmlSequenceDiagram}/FragmentExample.png | Bin .../UmlSequenceDiagram}/LoopFragment.png | Bin .../UmlSequenceDiagram}/MessageExample.png | Bin .../UmlSequenceDiagram}/OptFragment.png | Bin .../ParticipantsExample.png | Bin .../UmlSequenceDiagram}/ReplyMessage.png | Bin .../UmlSequenceDiagram}/SelfMessage.png | Bin .../SpaceBetweenParticipants.png | Bin .../SynchronousMessage.png | Bin ...nce-diagram.md => uml-sequence-diagram.md} | 26 +++++++++--------- 16 files changed, 16 insertions(+), 16 deletions(-) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/ActivationsExample.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/AltFragment.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/AsyncronousMessage.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/CreateMessage.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/DeleteMessage.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/FragmentExample.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/LoopFragment.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/MessageExample.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/OptFragment.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/ParticipantsExample.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/ReplyMessage.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/SelfMessage.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/SpaceBetweenParticipants.png (100%) rename blazor/diagram/{uml-sequence-diagram/images => images/UmlSequenceDiagram}/SynchronousMessage.png (100%) rename blazor/diagram/{uml-sequence-diagram/sequence-diagram.md => uml-sequence-diagram.md} (96%) diff --git a/blazor-toc.html b/blazor-toc.html index c537ab3fd5..8611f1679a 100644 --- a/blazor-toc.html +++ b/blazor-toc.html @@ -2439,6 +2439,9 @@
  • +
  • + Uml Sequence Diagram +
  • Annotations
  • -
  • - Uml Sequence Diagram -
  • Commands
  • diff --git a/blazor/diagram/uml-sequence-diagram/images/ActivationsExample.png b/blazor/diagram/images/UmlSequenceDiagram/ActivationsExample.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/ActivationsExample.png rename to blazor/diagram/images/UmlSequenceDiagram/ActivationsExample.png diff --git a/blazor/diagram/uml-sequence-diagram/images/AltFragment.png b/blazor/diagram/images/UmlSequenceDiagram/AltFragment.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/AltFragment.png rename to blazor/diagram/images/UmlSequenceDiagram/AltFragment.png diff --git a/blazor/diagram/uml-sequence-diagram/images/AsyncronousMessage.png b/blazor/diagram/images/UmlSequenceDiagram/AsyncronousMessage.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/AsyncronousMessage.png rename to blazor/diagram/images/UmlSequenceDiagram/AsyncronousMessage.png diff --git a/blazor/diagram/uml-sequence-diagram/images/CreateMessage.png b/blazor/diagram/images/UmlSequenceDiagram/CreateMessage.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/CreateMessage.png rename to blazor/diagram/images/UmlSequenceDiagram/CreateMessage.png diff --git a/blazor/diagram/uml-sequence-diagram/images/DeleteMessage.png b/blazor/diagram/images/UmlSequenceDiagram/DeleteMessage.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/DeleteMessage.png rename to blazor/diagram/images/UmlSequenceDiagram/DeleteMessage.png diff --git a/blazor/diagram/uml-sequence-diagram/images/FragmentExample.png b/blazor/diagram/images/UmlSequenceDiagram/FragmentExample.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/FragmentExample.png rename to blazor/diagram/images/UmlSequenceDiagram/FragmentExample.png diff --git a/blazor/diagram/uml-sequence-diagram/images/LoopFragment.png b/blazor/diagram/images/UmlSequenceDiagram/LoopFragment.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/LoopFragment.png rename to blazor/diagram/images/UmlSequenceDiagram/LoopFragment.png diff --git a/blazor/diagram/uml-sequence-diagram/images/MessageExample.png b/blazor/diagram/images/UmlSequenceDiagram/MessageExample.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/MessageExample.png rename to blazor/diagram/images/UmlSequenceDiagram/MessageExample.png diff --git a/blazor/diagram/uml-sequence-diagram/images/OptFragment.png b/blazor/diagram/images/UmlSequenceDiagram/OptFragment.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/OptFragment.png rename to blazor/diagram/images/UmlSequenceDiagram/OptFragment.png diff --git a/blazor/diagram/uml-sequence-diagram/images/ParticipantsExample.png b/blazor/diagram/images/UmlSequenceDiagram/ParticipantsExample.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/ParticipantsExample.png rename to blazor/diagram/images/UmlSequenceDiagram/ParticipantsExample.png diff --git a/blazor/diagram/uml-sequence-diagram/images/ReplyMessage.png b/blazor/diagram/images/UmlSequenceDiagram/ReplyMessage.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/ReplyMessage.png rename to blazor/diagram/images/UmlSequenceDiagram/ReplyMessage.png diff --git a/blazor/diagram/uml-sequence-diagram/images/SelfMessage.png b/blazor/diagram/images/UmlSequenceDiagram/SelfMessage.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/SelfMessage.png rename to blazor/diagram/images/UmlSequenceDiagram/SelfMessage.png diff --git a/blazor/diagram/uml-sequence-diagram/images/SpaceBetweenParticipants.png b/blazor/diagram/images/UmlSequenceDiagram/SpaceBetweenParticipants.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/SpaceBetweenParticipants.png rename to blazor/diagram/images/UmlSequenceDiagram/SpaceBetweenParticipants.png diff --git a/blazor/diagram/uml-sequence-diagram/images/SynchronousMessage.png b/blazor/diagram/images/UmlSequenceDiagram/SynchronousMessage.png similarity index 100% rename from blazor/diagram/uml-sequence-diagram/images/SynchronousMessage.png rename to blazor/diagram/images/UmlSequenceDiagram/SynchronousMessage.png diff --git a/blazor/diagram/uml-sequence-diagram/sequence-diagram.md b/blazor/diagram/uml-sequence-diagram.md similarity index 96% rename from blazor/diagram/uml-sequence-diagram/sequence-diagram.md rename to blazor/diagram/uml-sequence-diagram.md index 5dfbddb3b1..ae02a1198f 100644 --- a/blazor/diagram/uml-sequence-diagram/sequence-diagram.md +++ b/blazor/diagram/uml-sequence-diagram.md @@ -77,7 +77,7 @@ The following code example explains how to create participants in sequence diagr You can download a complete working sample from [GitHub](). -![ParticipantsExample](./images/ParticipantsExample.png) +![ParticipantsExample](./images/UmlSequenceDiagram/ParticipantsExample.png) #### UmlSequenceParticipant Properties @@ -108,12 +108,12 @@ The [UmlSequenceMessageType]() enum defines the following message types: | Message Type | Description | Example | |---|---|---| -| Synchronous | The sender waits for a response | ![Synchronous Message](images/SynchronousMessage.png) | -| Asynchronous | The sender continues without waiting | ![Asynchronous Message](images/AsyncronousMessage.png) | -| Reply | A response to a previous message | ![Reply Message](images/ReplyMessage.png) | -| Create | Creates a new participant | ![Create Message](images/CreateMessage.png) | -| Delete | Terminates a participant | ![Delete Message](images/DeleteMessage.png) | -| Self | A message from a participant to itself | ![Self Message](images/SelfMessage.png) | +| Synchronous | The sender waits for a response | ![Synchronous Message](images/UmlSequenceDiagram/SynchronousMessage.png) | +| Asynchronous | The sender continues without waiting | ![Asynchronous Message](images/UmlSequenceDiagram/AsyncronousMessage.png) | +| Reply | A response to a previous message | ![Reply Message](images/UmlSequenceDiagram/ReplyMessage.png) | +| Create | Creates a new participant | ![Create Message](images/UmlSequenceDiagram/CreateMessage.png) | +| Delete | Terminates a participant | ![Delete Message](images/UmlSequenceDiagram/DeleteMessage.png) | +| Self | A message from a participant to itself | ![Self Message](images/UmlSequenceDiagram/SelfMessage.png) | The following code example explains how to create messages in sequence diagram. @@ -226,7 +226,7 @@ The following code example explains how to create messages in sequence diagram. ``` You can download a complete working sample from [GitHub](). -![Message Example](./images/MessageExample.png) +![Message Example](./images/UmlSequenceDiagram/MessageExample.png) #### UmlSequenceMessage Properties @@ -319,7 +319,7 @@ The following code example explains how to create activation boxes in sequence d ``` You can download a complete working sample from [GitHub](). -![Activations Example](./images/ActivationsExample.png) +![Activations Example](./images/UmlSequenceDiagram/ActivationsExample.png) #### UmlSequenceActivationBox Properties @@ -345,9 +345,9 @@ The [UmlSequenceFragmentType]() enum defines the following fragment types: | Fragment Type | Description | Example | |---------------|-------------|--------| -| Optional | Represents a sequence that is executed only if a specified condition is met; otherwise, it is skipped. | ![Optional Fragment](images/OptFragment.png) | -| Alternative | Represents multiple conditional paths (if-else structure), where only one path executes based on the condition. | ![Alternative Fragment](images/AltFragment.png) | -| Loop | Represents a repeating sequence of interactions that continues based on a loop condition. | ![Loop Fragment](images/LoopFragment.png) | +| Optional | Represents a sequence that is executed only if a specified condition is met; otherwise, it is skipped. | ![Optional Fragment](images/UmlSequenceDiagram/OptFragment.png) | +| Alternative | Represents multiple conditional paths (if-else structure), where only one path executes based on the condition. | ![Alternative Fragment](images/UmlSequenceDiagram/AltFragment.png) | +| Loop | Represents a repeating sequence of interactions that continues based on a loop condition. | ![Loop Fragment](images/UmlSequenceDiagram/LoopFragment.png) | #### Creating Fragments @@ -451,7 +451,7 @@ To create fragments in your sequence diagram, you will need to use the `UmlSeque You can download a complete working sample from [GitHub](). -![Fragment Example](images/FragmentExample.png) +![Fragment Example](images/UmlSequenceDiagram/FragmentExample.png) #### UmlSequenceFragment Properties From 752b3d5ffd465b5ccda6a87f5057a6c3c5a81213 Mon Sep 17 00:00:00 2001 From: Santhanalakshmi Date: Thu, 26 Jun 2025 17:28:28 +0530 Subject: [PATCH 16/16] 965862: Added the missing content --- blazor-toc.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/blazor-toc.html b/blazor-toc.html index c537ab3fd5..7522b91238 100644 --- a/blazor-toc.html +++ b/blazor-toc.html @@ -4567,6 +4567,8 @@
  • Open and Save
  • +
  • Editing
  • +
  • Context Menu
  • Stepper
  • Swimlane-Palette