diff --git a/docs-aspnet/knowledge-base/chart-rounded-columns.md b/docs-aspnet/knowledge-base/chart-rounded-columns.md
new file mode 100644
index 00000000000..33e68f246d4
--- /dev/null
+++ b/docs-aspnet/knowledge-base/chart-rounded-columns.md
@@ -0,0 +1,299 @@
+---
+title: Rounded corners for Chart columns
+page_title: Rounded corners for Bar Chart columns
+description: "An example on how to apply rounded corners styling to {{ site.product }} Chart columns."
+type: how-to
+slug: chart-rounded-corners
+tags: progress, telerik, aspnet, mvc, core, chart, rounded, corners
+res_type: kb
+component: chart
+---
+
+## Environment
+
+
+
+ Product |
+ {{ site.product }} Chart |
+
+
+
+## Description
+
+How can I change {{ site.product }} Chart columns to appear with rounded corners?
+
+## Solution
+
+You can achieve this requirement using the .Visual() capability offered by the component. Check the full implementation in this live REPL sample:
+
+[Chart Example: All Corners Rounded](https://netcorerepl.telerik.com/myPlcPlg30MY8AnT10)
+
+The result looks like this:
+
+![chart-rounded-corners](images/chart-rounded-corners.png)
+
+```Razor
+
+ @(Html.Kendo().Chart()
+ .Name("chart")
+ .Title("Orders Status")
+ .Legend(legend => legend
+ .Position(ChartLegendPosition.Top)
+ )
+ .SeriesDefaults(seriesDefaults => seriesDefaults
+ .Column().Visual("columnVisual")
+ .Highlight(highlight => highlight.Toggle("toggleHandler"))
+ )
+ .Series(series => {
+ series.Column(new double[] { 440000 })
+ .Name("Active").Color("#229954");
+ series.Column(new double[] { 180000 })
+ .Name("Delayed").Color("#CD5C5C");
+ series.Column(new double[] { 230000 })
+ .Name("Delivered").Color("#145a32");
+ })
+ .CategoryAxis(axis => axis
+ .Labels(labels => labels.Rotation(-90))
+ .MajorGridLines(lines => lines.Visible(false))
+ )
+ .ValueAxis(axis => axis.Numeric()
+ .Labels(labels => labels.Format("{0:N0}"))
+ .MajorUnit(50000)
+ .Line(line => line.Visible(false))
+ )
+ .Tooltip(tooltip => tooltip
+ .Visible(true)
+ .Format("{0:N0}")
+ )
+ )
+
+
+```
+
+It is also possible to have only the top corners rounded:
+
+[Chart Example: Top Corners Rounded](https://netcorerepl.telerik.com/woPPcpOm0806bKQP47)
+
+Here is the result:
+
+![chart-rounded-corners](images/chart-top-corners.png)
+
+```Razor
+
+ @(Html.Kendo().Chart()
+ .Name("chart")
+ .Title("Orders Status")
+ .SeriesDefaults(seriesDefaults => seriesDefaults
+ .Column().Visual("columnVisual")
+ .Highlight(highlight => highlight.Toggle("toggleHandler"))
+ )
+ .Series(series => {
+ series.Column(new double[] { 440000 })
+ .Name("Active").Color("#229954");
+ series.Column(new double[] { 180000 })
+ .Name("Delayed").Color("#CD5C5C");
+ series.Column(new double[] { 230000 })
+ .Name("Delivered").Color("#145a32");
+ })
+ .CategoryAxis(axis => axis
+ .Labels(labels => labels.Rotation(-90))
+ .MajorGridLines(lines => lines.Visible(false))
+ )
+ .ValueAxis(axis => axis.Numeric()
+ .Labels(labels => labels.Format("{0:N0}"))
+ .MajorUnit(50000)
+ .Line(line => line.Visible(false))
+ )
+ .Tooltip(tooltip => tooltip
+ .Visible(true)
+ .Format("{0:N0}")
+ )
+ )
+
+
+```
+
+## See Also
+
+* [Telerik UI for {{ site.framework }} Knowledge Base](https://docs.telerik.com/{{ site.platform }}/knowledge-base)
diff --git a/docs-aspnet/knowledge-base/images/chart-rounded-corners.png b/docs-aspnet/knowledge-base/images/chart-rounded-corners.png
new file mode 100644
index 00000000000..1c58b13d040
Binary files /dev/null and b/docs-aspnet/knowledge-base/images/chart-rounded-corners.png differ
diff --git a/docs-aspnet/knowledge-base/images/chart-top-corners.png b/docs-aspnet/knowledge-base/images/chart-top-corners.png
new file mode 100644
index 00000000000..7c7ede0ff0d
Binary files /dev/null and b/docs-aspnet/knowledge-base/images/chart-top-corners.png differ
diff --git a/docs-aspnet/security/security.md b/docs-aspnet/security/security.md
index e0592e1ab46..2436267b902 100644
--- a/docs-aspnet/security/security.md
+++ b/docs-aspnet/security/security.md
@@ -33,13 +33,22 @@ We value the contributions of security researchers and ethical hackers. If a res
|------------------|------------------------|
| First Response | 7 days |
| Time to Triage | 10 days |
-| Time to Resolution| Depends on severity |
+| Time to Resolution| [Depends on severity](#vulnerability-remediation-guidelines) |
For more information, visit:
- [Bugcrowd Vulnerability Disclosure Program](https://bugcrowd.com/engagements/devtools-vdp)
- [Progress Trust Center](https://www.progress.com/trust-center)
- [Vulnerability Reporting Policy](https://www.progress.com/trust-center/vulnerability-reporting-policy)
+## Vulnerability Remediation Guidelines
+
+Progress follows defined timelines for remediating vulnerabilities based on their severity levels, ensuring a structured and efficient approach to maintaining security across all products. These guidelines are aligned with CVSS (Common Vulnerability Scoring System) scoring:
+
+- **Critical scored issues (CVSS 9.0+):** Resolved within **30 days**.
+- **High scored issues (CVSS 7.0–8.9):** Resolved within **60 days**.
+- **Medium or lower scored issues (CVSS < 7):** Resolved within **90–120 days**, depending on the score.
+
+While these are not strict SLA (Service Level Agreement), they serve as a commitment to providing timely resolutions for identified vulnerabilities.
## What We Do to Mitigate Risk
diff --git a/docs/knowledge-base/customize-grouping-field-template-scheduler.md b/docs/knowledge-base/customize-grouping-field-template-scheduler.md
new file mode 100644
index 00000000000..3d5f1a24976
--- /dev/null
+++ b/docs/knowledge-base/customize-grouping-field-template-scheduler.md
@@ -0,0 +1,61 @@
+---
+title: Adding Custom HTML to Grouping Field Template in Scheduler
+description: Learn how to customize the Scheduler's grouping column with custom HTML, such as adding buttons or links, using the groupHeaderTemplate configuration.
+type: how-to
+page_title: How to Customize Grouping Field Template in Scheduler with Custom HTML
+slug: customize-grouping-field-template-scheduler
+tags: kendo-ui, scheduler, groupheadertemplate, custom-html, customization
+res_type: kb
+ticketid: 1671258
+---
+
+## Environment
+
+
+
+
+Product |
+Scheduler for Progress® Kendo UI® |
+
+
+Version |
+2024.4.1112 |
+
+
+
+
+## Description
+
+I want to modify the grouping column in the Scheduler with custom HTML, such as adding a button or a link with the ID of the group.
+
+This KB article also answers the following questions:
+- How can I add a custom button to the Scheduler's group header?
+- Is it possible to insert custom HTML into the Scheduler's grouping template?
+- Can I customize the appearance of the Scheduler's group headers with HTML?
+
+## Solution
+
+To customize the grouping column in the Scheduler with custom HTML, such as adding buttons or links, utilize the [groupHeaderTemplate](https://docs.telerik.com/kendo-ui/api/javascript/ui/scheduler/configuration/group#groupheadertemplate) configuration option. This option allows the insertion of custom HTML content into the group header cells based on specific conditions or for specific resources.
+
+Below is an example demonstrating how to add a custom button to the group header cell for a specific resource using the `groupHeaderTemplate` configuration:
+
+```html
+
+```
+
+In this example, a custom button is added to the group header cell when the grouping is done based on the `roomId` field. You can modify the condition and content as needed to suit your particular requirements.
+
+For a practical implementation of this solution, refer to this [example](https://dojo.telerik.com/MsoTFBhM/3).
+
+## See Also
+
+- [Scheduler Group Header Template Configuration](https://docs.telerik.com/kendo-ui/api/javascript/ui/scheduler/configuration/group#groupheadertemplate)
+- [Scheduler Overview](https://docs.telerik.com/kendo-ui/controls/scheduling/scheduler/overview)
+- [Templates Overview](https://docs.telerik.com/kendo-ui/framework/templates/overview)
diff --git a/docs/security/security-information.md b/docs/security/security-information.md
index e7cdb420cb3..ddc309f04b2 100644
--- a/docs/security/security-information.md
+++ b/docs/security/security-information.md
@@ -34,13 +34,22 @@ We value the contributions of security researchers and ethical hackers. If a res
|------------------|------------------------|
| First Response | 7 days |
| Time to Triage | 10 days |
-| Time to Resolution| Depends on severity |
+| Time to Resolution| [Depends on severity](#vulnerability-remediation-guidelines) |
For more information, visit:
- [Bugcrowd Vulnerability Disclosure Program](https://bugcrowd.com/engagements/devtools-vdp)
- [Progress Trust Center](https://www.progress.com/trust-center)
- [Vulnerability Reporting Policy](https://www.progress.com/trust-center/vulnerability-reporting-policy)
+## Vulnerability Remediation Guidelines
+
+Progress follows defined timelines for remediating vulnerabilities based on their severity levels, ensuring a structured and efficient approach to maintaining security across all products. These guidelines are aligned with CVSS (Common Vulnerability Scoring System) scoring:
+
+- **Critical scored issues (CVSS 9.0+):** Resolved within **30 days**.
+- **High scored issues (CVSS 7.0–8.9):** Resolved within **60 days**.
+- **Medium or lower scored issues (CVSS < 7):** Resolved within **90–120 days**, depending on the score.
+
+While these are not strict SLA (Service Level Agreement), they serve as a commitment to providing timely resolutions for identified vulnerabilities.
## What We Do to Mitigate Risk
diff --git a/src/kendo.binder.js b/src/kendo.binder.js
index 90dc771d5c0..cd47c493403 100644
--- a/src/kendo.binder.js
+++ b/src/kendo.binder.js
@@ -980,10 +980,10 @@ export const __meta__ = {
source = that.bindings[bindingName].get();
- if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {
+ if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source && source) {
if (source instanceof kendo.data.DataSource) {
widget[setter](source);
- } else if (source && source._dataSource) {
+ } else if (source._dataSource) {
widget[setter](source._dataSource);
} else {
select = kendo.ui.Select && widget instanceof kendo.ui.Select;
diff --git a/src/kendo.splitter.js b/src/kendo.splitter.js
index 0895d90dce6..e59c6256c27 100644
--- a/src/kendo.splitter.js
+++ b/src/kendo.splitter.js
@@ -23,6 +23,7 @@ export const __meta__ = {
CONTENTLOAD = "contentLoad",
ERROR = "error",
RESIZE = "resize",
+ RESIZING = "resizing",
LAYOUTCHANGE = "layoutChange",
HORIZONTAL = "horizontal",
VERTICAL = "vertical",
@@ -134,6 +135,7 @@ export const __meta__ = {
CONTENTLOAD,
ERROR,
RESIZE,
+ RESIZING,
LAYOUTCHANGE
],
@@ -823,6 +825,8 @@ export const __meta__ = {
paneElement.style[PANE_SIZING_PROP] = size;
$(paneElement).data("pane").size = size;
+
+ that.trigger(RESIZING, { pane: paneElement });
},
_getPaneSizes: function(paneIndex) {
diff --git a/src/kendo.tabstrip.js b/src/kendo.tabstrip.js
index 0de80037503..d47cabb2e6d 100644
--- a/src/kendo.tabstrip.js
+++ b/src/kendo.tabstrip.js
@@ -171,7 +171,7 @@ export const __meta__ = {
}
function scrollButtonHtml(buttonClass, iconClass) {
- return `${kendo.ui.icon({ icon: iconClass, iconClass: "k-button-icon" })}`;
+ return `${kendo.ui.icon({ icon: iconClass, iconClass: "k-button-icon" })}`;
}
function ajaxXhr() {
@@ -897,6 +897,8 @@ export const __meta__ = {
if (options.navigatable) {
that.tabGroup.on("keydown" + NS, that._keyDownProxy);
}
+
+ $(window).on('resize' + NS, that._resize.bind(that));
},
_click: function(item) {
@@ -1202,6 +1204,14 @@ export const __meta__ = {
this._scrollable();
},
+ _getChildrenWidth: function(element) {
+ let width = 0;
+ element.children().each(function() {
+ width += outerWidth($(this));
+ });
+ return width;
+ },
+
_scrollable: function() {
var that = this,
options = that.options,
@@ -1216,8 +1226,9 @@ export const __meta__ = {
wrapperOffsetWidth = that.wrapper[0].offsetWidth;
tabGroupScrollWidth = that.tabGroup[0].scrollWidth;
+ const enableScroll = (tabGroupScrollWidth > wrapperOffsetWidth) || (that._getChildrenWidth(that.tabGroup) > that.tabGroup.outerWidth());
- if (tabGroupScrollWidth > wrapperOffsetWidth && !that._scrollableModeActive) {
+ if (enableScroll && !that._scrollableModeActive) {
that._nowScrollingTabs = false;
that._isRtl = kendo.support.isRtl(that.element);
var mouseDown = kendo.support.touch ? "touchstart" : "mousedown";
@@ -1248,7 +1259,7 @@ export const __meta__ = {
that._scrollableModeActive = true;
that._toggleScrollButtons();
- } else if (that._scrollableModeActive && tabGroupScrollWidth <= wrapperOffsetWidth) {
+ } else if (that._scrollableModeActive && !enableScroll) {
that._scrollableModeActive = false;
that.wrapper.removeClass("k-tabstrip-scrollable");