Commit Graph

6217 Commits

Author SHA1 Message Date
yordanov
fd643aea50 Fix clipped chart tooltip at the chart edge and make tooltip placement RTL-aware 2026-07-08 16:53:13 +03:00
Atanas Korchev
609622692e Add culture-aware editing, display, and formula entry to RadzenSpreadsheet
The spreadsheet engine parsed typed input with the invariant culture while
displaying values with the current culture, breaking the edit round-trip on
non-en-US hosts and making comma-decimal entry (10,50) impossible.

Workbook gains a Culture property (defaults to CurrentCulture) which the
component stamps from its inherited Culture parameter. It drives:

- Cell input parsing (CellData type inference), including day-month date
  handling for cultures where the group and date separators collide (de-DE)
- Edit text and display rendering (GetValue, GetValueAsString, GetDisplayText)
- Number format rendering - format codes stay canonical invariant tokens while
  separators, month names, and AM/PM designators follow the culture
- Formula entry and display via the new FormulaLocalizer (Excel FormulaLocal
  semantics: ';' argument separators and ',' decimals in comma-decimal
  cultures, lenient comma acceptance where unambiguous, canonical invariant
  storage)
- Dialog input (data validation, conditional format, filter) via shared
  conversion helpers on SpreadsheetDialogBase

XLSX and CSV files read and write canonical invariant values regardless of
the workbook culture, including autofit column widths. Malformed formulas now
surface as error trees instead of an unhandled lexer exception. Number format
parsing is cached (hard-bounded) since CellView reparsed per render.

Includes localization demos for the Spreadsheet and Document Processing
sections and culture test suites.

Note: headless code on non-en-US hosts now parses string values with the
host culture; set Workbook.Culture explicitly (or to InvariantCulture) for
host-independent processing.
2026-07-08 14:54:55 +03:00
Vladimir Enchev
58da371a55 Merge pull request #2608 from wimsoetens-cmd/feat/AddSeriesDataAttribute
Add the seriesindex as a data object on the label.
2026-07-08 08:04:22 +03:00
Wim Soetens
00811b5fa4 Add the seriesindex as a data object on the label.
This makes it possible to establish a direct link between each series and its corresponding labels.
2026-07-07 16:27:37 +02:00
Vladimir Enchev
09e620efc7 Version updated v11.1.2 2026-07-06 17:50:09 +03:00
Vladimir Enchev
4033a3c291 Fix additional value axis showing category labels when its series is hidden. Fixes #2607 2026-07-06 17:40:29 +03:00
Vladimir Enchev
6ab1d3cdf9 Restart speech recognition when the browser ends it prematurely in RadzenSpeechToTextButton 2026-07-06 17:08:01 +03:00
Vladimir Enchev
7ddba4a533 Hide decorative icon text from screen readers with aria-hidden 2026-07-06 15:31:27 +03:00
yordanov
cabafcf4a0 Fix accessibility alerts on demos homepage 2026-07-06 15:29:07 +03:00
Atanas Korchev
40d0583987 Transfer the full cell state in spreadsheet paste, cut and autofill
Formats, quote prefixes and hyperlinks are now copied, empty source
cells blank their destinations and cut clears the source, matching
Excel. Entering a value over a formula cell replaces the formula, quote
prefixed entries store literal text and undo restores cells exactly as
captured, including after redo.

Breaking change: RangeSnapshotCommandBase snapshots cells as detached
clones (Dictionary<CellRef, Cell?>) instead of a value/formula/format
tuple.
v11.1.1
2026-07-06 12:21:20 +03:00
Vladimir Enchev
f188e48a88 RadzenRequiredValidator shows "required" for a filled field on blur, and does not block form submit
Fix #2605
2026-07-06 11:11:21 +03:00
panoskentros
0a44fb7815 update tile-pasting to match Excel's behavior 2026-07-06 10:44:26 +03:00
panoskentros
483e1c0901 Implement Excel-style tiled clipboard paste 2026-07-06 10:44:26 +03:00
yordanov
96d5e7469f Fix resx syntax 2026-07-06 10:08:00 +03:00
yordanov
5072dbd216 Adjust demos home page CTA button styles 2026-07-06 10:08:00 +03:00
yordanov
a3300b76e1 Replace YouTube subscribe iframe with a badge link 2026-07-06 10:08:00 +03:00
yordanov
4f28987d7a Use Caption instead of Overline text style in demos top menu 2026-07-06 10:08:00 +03:00
yordanov
7e31378bcf Add localizable screen reader text to anchor links in RadzenText via AnchorAriaLabel 2026-07-06 10:08:00 +03:00
Vladimir Enchev
198dcd7bbd Version updated 2026-07-06 09:45:10 +03:00
Vladimir Enchev
859909f5c4 RadzenPivotDataGrid Sum/Average aggregates fall back to Count for dynamic data
For IDictionary data the aggregate Property is a dynamic LINQ expression, so
reflection cannot resolve its type and isNumeric was always false, causing
Sum/Average/Min/Max to degrade to Count. Fall back to the configured Type when
reflection fails, mirroring RadzenPivotField.FilterPropertyType.
2026-07-06 07:58:44 +03:00
Vladimir Enchev
9e60b2322b Merge pull request #2600 from wimsoetens-cmd/fezt/Set_Width_YAxis
Set the width of theY-axis in pixels on a graph
2026-07-06 07:57:26 +03:00
Vladimir Enchev
0fa43adcd6 Exposed OpenPopup()/ClosePopup()//TogglePopup() for RadzenDropDown/RadzenDropDownDataGrid 2026-07-06 07:53:41 +03:00
Vladimir Enchev
0de027176e RadzenPieSeries do not display anything in certain scenarios 2026-07-06 07:45:40 +03:00
Atanas Korchev
8e42ac6d1a Use task-led titles for DataGrid and Chart config demos to reduce head-query cannibalization 2026-07-05 18:00:37 +03:00
Atanas Korchev
f03e442b5e Cache GitHub badges for 4 hours to avoid stuck shields.io rate-limit errors 2026-07-05 17:58:00 +03:00
Atanas Korchev
a1b56e07dc Account for East Asian wide glyphs when sizing auto fitted columns for export
CJK, kana, hangul, fullwidth forms and emoji render at roughly twice
the digit width (15.25px regular / 15.75px bold, measured against
Excel), so the ASCII fallback under-sized such columns by half. Runs
over runes so surrogate pairs count as one glyph.
2026-07-05 17:27:51 +03:00
Atanas Korchev
54a1c905f4 Size auto fitted columns for Excel's font metrics on export
A width that snugly fits content rendered with the browser theme font
can clip in Excel, which renders the Normal style font with different
character widths - most visibly currency values whose digits are wider
in Aptos Narrow than in typical UI fonts.

On export, auto fitted columns recompute their width from the column
content using per-character advance widths of Aptos Narrow 11 measured
against Excel (regular and bold), keeping the larger of the model width
and the required width. The in-component width is unchanged.
2026-07-05 17:27:51 +03:00
Atanas Korchev
b5960d4dd6 Over-fit auto sized columns slightly to absorb renderer differences
Canvas metrics of the theme font differ from what other renderers use
for the same content (Excel renders exported columns with the Normal
style font), so an exact fit can clip after export. 3% covers the
observed drift while keeping the in-component fit tight.
2026-07-05 17:27:51 +03:00
Atanas Korchev
8c4d32eab4 Fix XLSX column widths rendering too narrow in Excel
Exported files write Aptos Narrow 11 as the Normal style font but column
widths were converted with Calibri 11's 7px maximum digit width, and
columns at the default width were not exported at all - Excel applied
its own 68px default and numeric cells overflowed as ####.

XLSX column widths are measured in characters of the Normal font's
maximum digit width (ISO/IEC 29500 18.3.1.13). Excel renders Aptos
Narrow 11 columns at 7.5px per character (measured empirically), so the
conversion now uses a per-font digit width - 7.5 for Aptos Narrow,
scaled by font size, 7 for Calibri and other fonts - selected from the
file's Normal font on read. The default column width is persisted as
sheetFormatPr defaultColWidth and restored on load, so default-width
columns render at the same pixel width in Excel as in the component.
2026-07-05 17:27:51 +03:00
Atanas Korchev
da70790c3e Measure auto fit column width against the rendered text
Replaces the character-count width estimate with Excel-faithful auto fit:
the displayed text (number format applied to the evaluated value) of the
column's populated cells is measured with canvas.measureText using the
active theme's cell font, so formulas, number formats, bold and
conditional formatting fit correctly in any theme. Empty columns keep
their width, merged cells are ignored, hidden rows are included and the
width is clamped to Excel's 255 character limit. The behavior was
verified against Excel via COM automation.

Auto fitted columns are tracked per column and persisted as bestFit in
XLSX; manual resize and undo clear the flag.
2026-07-05 17:27:51 +03:00
panoskentros
e306d13501 Readjust column width to fit longest cell by double clicking column edge (with a cap of 800px) 2026-07-05 17:27:51 +03:00
Wim Soetens
f842c049bc Add Tests 2026-07-03 23:18:33 +02:00
Wim Soetens
c0db20e241 Resolve pull request remarks
- Validate width < 24
- Added with to ShouldRefreshChart
- Added comment that width is only used for category axis in normal charts
- Did some cleanup
2026-07-03 18:49:52 +02:00
Vladimir Enchev
384e53315e Various localization fixes 2026-07-03 17:58:30 +03:00
Vladimir Enchev
141db10a89 QRCode, Barcode and Chart ToPng can return the PNG data and accept output size options 2026-07-03 16:52:59 +03:00
Vladimir Enchev
efd92eb051 Fix multiple value axes with RadzenBarSeries behaving like category axes. Fixes #2597 2026-07-03 16:51:53 +03:00
Wim Soetens
ae4ece82f2 Sets the width of the axis in pixels. If not specified, the width is calculated automatically. Setting a fixed width can help reduce unnecessary spacing when using multiple Y-axes. 2026-07-03 12:30:33 +02:00
Vladimir Enchev
233596fd69 Merge pull request #2599 from radzenhq/accessibility-fixes
Accessibility fixes
2026-07-03 12:42:54 +03:00
yordanov
f0133c231f Unify selectbar outlne color on focus 2026-07-03 12:40:27 +03:00
yordanov
9914b3904a Reorganize line chart demos 2026-07-03 10:24:26 +03:00
yordanov
397b649fb9 Chart legend line swatch should also use custom series stroke color 2026-07-03 10:24:26 +03:00
yordanov
c6f7f75633 Fix chart crosshair label formatting and null handling at axis edges 2026-07-03 10:24:26 +03:00
Vladimir Enchev
3092e88626 Demos: use semantically correct heading levels in examples
Add explicit TagName to RadzenText usages that rendered real heading
elements (H1-H6, DisplayH1-H6, Subtitle1/2) purely for visual styling,
and convert raw HTML headings in examples to RadzenText with proper
TextStyle and TagName. Visual labels now render as <p>, genuine
headings use correct levels without skips (WCAG 1.3.1).

Fixes #2596
2026-07-03 10:19:56 +03:00
Vladimir Enchev
18190e7001 various CSS outline fixes 2026-07-03 09:05:31 +03:00
Vladimir Enchev
e15b3acab1 Various accessibility fixes 2026-07-03 08:34:20 +03:00
Vladimir Enchev
74af00b773 DataGrid: escape popup id in setPopupAriaExpanded selector to fix querySelector error with dynamic columns 2026-07-02 17:22:12 +03:00
Vladimir Enchev
0260a9edbc Version updated v11.1.0 2026-07-02 11:59:11 +03:00
Vladimir Enchev
86de56e796 Merge pull request #2589 from radzenhq/accessibility-improvements
Accessibility improvements across various components
2026-07-02 11:58:08 +03:00
Vladimir Enchev
6d66d0145f FormField: fix invalid/empty label for association
RadzenFormField rendered for="@Component" on the wrapping <div> (invalid - <div>
does not take for) and on the label even when Component was unset, producing for=""
which accessibility checkers flag as a label with no association. Removed the div
for and only emit the label for when Component is set. Updated the FormFieldTextBox
demo to give each input an id matching the FormField Component so the label resolves.
2026-07-02 11:57:47 +03:00
yordanov
26462e19d8 Update premium themes 2026-07-02 11:42:08 +03:00