316 Commits

Author SHA1 Message Date
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
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
yordanov
9914b3904a Reorganize line chart demos 2026-07-03 10:24:26 +03:00
Atanas Korchev
fe49cac725 nav: reorder top-level demo categories to surface new/updated
Pull the freshest and flagship categories up: DataGrid, Data Visualization
(Updated, 48 new chart types, was buried at #20), Forms, Spreadsheet, then the
New categories; push utility pages (Accessibility) down. Keep Overview/Get
Started/AI/Support at the top. Remove the New flag from the AI category.
2026-06-24 16:26:29 +03:00
Atanas Korchev
6c5ff7079c SEO: add schema + FAQ + related to Spreadsheet cluster (18 pages)
Titles/meta/intros were already strong; this adds the missing layer. New
GetSpreadsheetPages + cluster branch in SeoSchema (Home > Spreadsheet > feature)
-> TechArticle + BreadcrumbList on all 18, FAQPage on Overview (5) + 7 key
features, related cross-links throughout. Aligned the two '| Radzen' titles to
the standard '| Free UI Components by Radzen' suffix.
2026-06-24 15:03:43 +03:00
Vladimir Enchev
95305d3a03 Online demos: fix remaining generic type-inference and ctor compile errors
- CompilerService: global-qualify Radzen.CompositeFilterDescriptor and
  Radzen.Blazor.PagingInformation in the generated type-inference helper
  (same workaround already used for Radzen.Group); the runtime Razor
  compiler emits them without global:: inside the __Blazor.* namespace,
  causing CS0234. Fixes the DataFilter and DataGridPagerApi demos.
- DataGridCheckBoxListLookupFilter: initialize the lookup in OnInitialized
  instead of a constructor named after the page class, which becomes an
  invalid (return-type-less) method when the runtime compiler renames the
  class to DynamicComponent (CS1520).

All 1052 demos now compile under the trimmed online editor.
2026-06-24 14:11:34 +03:00
Vladimir Enchev
36e764d07b Online demos: support C# 12+ syntax and preserve more trimmed types
Two follow-up fixes for compiling demos in Edit Source / Playground:

- CompilerService: raise the parse language version from C# 10 to Latest
  so demos using collection expressions and primary constructors compile
  (previously failed with CS8936).
- linker.xml: preserve System.Math, DisplayAttribute and Radzen.Colors,
  which are referenced only by demo source compiled at runtime and were
  otherwise removed by trimming (Math.PI, [Display(Description=...)],
  @Colors.* respectively).

Verified against a trimmed publish: demo compile failures drop from 20 to 5
out of 1052 (remaining 5 are a separate Razor type-inference codegen issue).
2026-06-24 14:11:34 +03:00
Atanas Korchev
758e31ad78 SEO: enrich Markdown page (schema + FAQ + intro)
Add /markdown to standalone SEO pages (TechArticle + breadcrumb + FAQPage);
keyword title/intro framed accurately as a renderer (not an editor), with
related links to html-editor and textarea. Nav placement left top-level.
2026-06-23 17:23:02 +03:00
yordanov
09dc8dc37e Restructure pie and donut chart demos 2026-06-23 16:48:59 +03:00
Atanas Korchev
e143807e91 SEO: enrich PivotDataGrid cluster (4 pages)
Add GetPivotDataGridPages + a cluster branch in SeoSchema (Home > Pivot DataGrid
> variant). Primary title now leads with 'Pivot Table' to capture the larger
query; fixed copy-pasted descriptions on the LoadData/OData pages; added FAQ,
related links, and keyword intros.
2026-06-23 16:44:11 +03:00
Atanas Korchev
55d327db46 SEO: enrich Layout cluster (12 pages)
dialog, layout, card, dropzone, popup, splitter, card-group, panel, row, stack,
column, tile-layout: add to standalone SEO pages (schema + FAQ + related) with
keyword titles/intros (dialog->modal, dropzone->drag & drop, splitter->resizable
panes, panel->collapsible, tile-layout->dashboard tiles). Dialog copy verified
against source - modal dialogs + side panels (no non-modal mode).
2026-06-23 16:28:47 +03:00
Atanas Korchev
6517910f06 SEO: enrich Navigation cluster (12 pages)
menu, tabs, accordion, contextmenu, breadcrumb, panelmenu, login, profile-menu,
carousel, steps, link, toc: add to standalone SEO pages (schema + FAQ + related)
with keyword-aligned titles and intros (contextmenu->right-click menu,
panelmenu->sidebar menu, steps->wizard/stepper).
2026-06-23 16:04:18 +03:00
Atanas Korchev
0d9fad3f13 SEO: enrich Themes page + use 'Radzen Blazor' for the library in copy
- Add /themes to standalone SEO pages (schema + FAQ + related); tightened intro.
- Refer to the library as 'Radzen Blazor', never 'Radzen' alone: fix themes and
  dashboard copy, and drop the trailing ', from Radzen' from 14 chart descriptions.
2026-06-23 15:48:58 +03:00
Atanas Korchev
13e9052de3 SEO: enrich Dashboard page (schema + title + intro)
Add /dashboard to standalone SEO pages; title now 'Sample Blazor Dashboard',
H1 'Blazor Dashboard', keyword intro/meta, one FAQ, and related links
(tile-layout, datagrid, charts).
2026-06-23 15:27:36 +03:00
Atanas Korchev
284cfacf28 SEO: remove low-value 'Is X free?' FAQ items
Dropped from DataGrid, Scheduler, and DropDown - the question adds no useful
content (the free/MIT message already lives on the home and gallery pages).
2026-06-23 15:14:49 +03:00
Atanas Korchev
be0086a7e0 SEO: enrich Icon page (schema + FAQ + intro)
Add /icon to the standalone SEO pages so it emits TechArticle + BreadcrumbList +
FAQPage; keyword intro/meta and related links. Title kept (already ranks well).
2026-06-23 14:58:22 +03:00
Atanas Korchev
02666c6831 SEO: drop vague 'full' from Scheduler copy
'Full' added no information (the view list already conveys completeness) and
risked alluding to the FullCalendar JS library.
2026-06-23 14:52:22 +03:00
Atanas Korchev
da486646a1 SEO: enrich Scheduler page (targets 'blazor calendar')
Add a reusable standalone-page branch to SeoSchema (Home > Page breadcrumb) and
optimize /scheduler: title and intro now lead with 'Calendar' to capture the
larger 'blazor calendar' query, plus a calendar-focused FAQ and related links.
2026-06-23 14:42:10 +03:00
Atanas Korchev
2046664d6e SEO: enrich rich & form-structure components (Batch 6 of Forms)
html-editor (+custom-tools), chat, aichat, fileinput, upload, signature-pad,
chip, chiplist, label, fieldset, form-field, templateform: keyword-aligned
titles, SEO intros, FAQ, and related-component links. Completes the Forms cluster.
2026-06-23 14:34:27 +03:00
Atanas Korchev
e3ea32fed5 SEO: enrich text & list inputs (Batch 5 of Forms)
textbox, textarea, password, security-code, autocomplete, listbox:
keyword-aligned titles, SEO intros, FAQ, and related-component links.
2026-06-23 14:26:03 +03:00
Atanas Korchev
a10a505098 SEO: enrich choice inputs (Batch 4 of Forms)
checkbox, radiobuttonlist, checkboxlist, switch, selectbar, rating:
keyword-aligned titles, SEO intros, FAQ, and related-component links.
2026-06-23 14:22:07 +03:00
Atanas Korchev
a1fe810418 SEO: enrich button components (Batch 3 of Forms)
button, splitbutton, toggle-button, fab, fab-menu, speechtotextbutton:
keyword-aligned titles, SEO intros, FAQ, and related-component links.
2026-06-23 14:18:24 +03:00
Atanas Korchev
c48afc4a26 SEO: enrich picker components (Batch 2 of Forms)
datepicker (now targets 'calendar'), timespanpicker, numeric, slider, mask,
colorpicker: keyword-aligned titles, SEO intros, FAQ, and related-input links.
2026-06-23 13:36:11 +03:00
Atanas Korchev
eb83d8a37b SEO: enrich DropDown family (Batch 1 of Forms)
Keyword-aligned titles (capture 'select'/'multiselect'), SEO intros, FAQ on
high-traffic pages, and family cross-links for the 8 DropDown pages. Also fixes
the DemoSeo related-links heading from 'Related charts' to a neutral 'Related'
(it was already mislabeled on the DataGrid pages).
2026-06-23 13:24:35 +03:00
Atanas Korchev
638ec238a8 SEO: emit TechArticle + BreadcrumbList schema on Forms component pages
Forms has no single hub page, so each component (DropDown, Button, ...) acts
as its own breadcrumb root. GetFormsComponentHubs maps every Forms page to its
component's primary page; single-page components hub on themselves, grouped ones
(DropDown, HtmlEditor) on their first child. Refactored leaf collection into a
shared CollectLeaves helper reused by GetDataGridPages.
2026-06-23 13:15:44 +03:00
Atanas Korchev
41db785c31 Move Upload demo to /upload and rename upload API to api/upload
The Upload component demo was served at /example-upload because the demo
host's UploadController owned the /upload URL space. Move the controller's
endpoints under api/upload/* to free /upload, point the demo page and every
consumer (Upload and HtmlEditor demos) at the new paths, switch the page
route and ExampleService path to /upload, and add a permanent 301 redirect
from /example-upload (and the legacy docs URL) to /upload.
2026-06-23 12:45:15 +03:00
yordanov
f6d514e7e2 Add in-page navigation to pie and donut chart demo pages 2026-06-22 19:13:08 +03:00
Atanas Korchev
ccc3eaa93e Add SEO intros, FAQ and related links to remaining DataGrid demos
Group 6 (14 pages): custom header + column picker, density, grid lines, cell
context menu, conditional formatting, Excel/CSV export, cascading dropdowns,
empty state, save/load settings (+ LoadData), row reorder and drag between
grids / to scheduler. Completes the DataGrid cluster enrichment.
2026-06-22 12:27:18 +03:00
Atanas Korchev
71fea296e7 Add SEO intros, FAQ and related links to DataGrid hierarchy, selection & editing demos
Group 5 (9 pages): hierarchy, hierarchy on demand, self-reference hierarchy,
master/detail; single/multiple/cell selection; inline & in-cell editing.
2026-06-22 12:16:22 +03:00
Atanas Korchev
5997612710 Add SEO intros, FAQ and related links to DataGrid sorting, paging & grouping demos
Group 4 (10 pages): single/multi-column sorting, sort API, custom sort comparer;
pager position/alignment/API; grouping API, group header & footer templates.
2026-06-22 12:10:25 +03:00
Atanas Korchev
8910322f23 Add SEO intros, FAQ and related links to DataGrid filtering demos
Group 3 (Filtering, 13 pages): simple/inline, simple-with-menu, advanced
(multi-condition), mixed, enum, CheckBoxList (Excel-style) + OData/auto-apply/
lookup variants, filter & filter-value templates, sub-property filter, filter API.

Intros reframed around real search terms (inline column filter, operator menu,
multi-condition, Excel-style checkbox) instead of internal mode names.
2026-06-22 11:59:19 +03:00
Atanas Korchev
a50af13e54 Add SEO intros, FAQ and related links to DataGrid data-binding & column demos
Group 1 (Data-binding): LoadData, OData, Dynamic, DataTable, Real-time,
Crosstab, Performance. Group 2 (Columns): Template, Resizing, Column Picker,
Reorder, Footer Totals, Frozen Columns, Composite Columns, Conditional Columns.

Each page gets a keyword-rich intro (preserving terms like Entity Framework,
OData, ExpandoObject), a FAQ (rendered + FAQPage JSON-LD), and Related links.
2026-06-22 11:42:08 +03:00
Atanas Korchev
d64246a821 Add Blazor DataGrid overview landing page + schema infra
- Turn /datagrid into a dedicated DataGrid overview: keyword-rich intro
  (IQueryable, Entity Framework, OData, ...), flagship live grid, 12
  feature cards linking to each demo, and an FAQ. Matches the overview
  pattern Telerik/DevExpress/Infragistics/Syncfusion use for the head term.
- Move the IQueryable/EF demo to /datagrid-iqueryable (first under the
  Data-binding nav group); /datagrid keeps its URL/authority.
- Generalize SeoSchema for multiple clusters; add GetDataGridPages so every
  DataGrid page emits TechArticle + BreadcrumbList (Home > DataGrid > Page),
  the overview also FAQPage.
- Fix TitleFor to honor an explicit Title on an "Overview"-named entry.
2026-06-22 11:14:42 +03:00
Atanas Korchev
c918ce3d8c Add SEO schema and copy to chart configuration/feature demos
Extend the chart SEO work to the 15 chart configuration and feature
demo pages (axis, legend, tooltip, interpolation, data labels,
crosshair, etc.):

- GetChartConfigPages() + SeoSchema treats these pages as article-
  eligible (TechArticle + BreadcrumbList + FAQPage), without adding
  them to the /charts gallery ItemList
- Human-readable intros, "how do I..." FAQs, and related links per page
2026-06-18 17:49:54 +03:00
Atanas Korchev
3301acaece Add chart SEO: structured data, FAQs, and consistent copy
Enrich all 58 chart/dataviz demo pages on blazor.radzen.com for search
and AI discovery:

- JSON-LD via a new head-schemas section + SeoSchema/DemoSeo, emitted
  once per page from MainLayout (CollectionPage+ItemList on /charts,
  TechArticle+BreadcrumbList+FAQPage on each chart page)
- Human-readable intros, 1-3 FAQs, and related-chart links per page,
  sourced once from ExampleService (rendered on-page and as FAQPage)
- Complete OG/Twitter tags; corrected gallery copy (30+ chart types /
  40+ data-visualization components); dropped "native" wording
- Rename chart-spline/-histogram/-pareto to {type}-chart

Adds RadzenBlazorDemos/Services/SeoSchema.cs and Shared/DemoSeo.razor.
2026-06-18 17:24:21 +03:00
yordanov
61a4839dfe Add chart demos for data labels, synchronized charts and reference lines 2026-06-15 18:45:53 +03:00
yordanov
9b24ef9596 Update chart demos and premium themes 2026-06-15 18:45:53 +03:00
Vladimir Enchev
e5bd0343fa Add built-in German, French, Spanish, Italian and Japanese translations
Ship satellite resource files (RadzenStrings.{de,fr,es,it,ja}.resx) with all
535 strings translated, so components localize out of the box via the standard
.NET ResourceManager.

Make culture handling reactive everywhere:
- RadzenDatePicker rebuilds its month/year lists when Culture or the
  DefaultCulture cascade changes (previously cached at init).
- Scheduler views, HtmlEditor tools and the spreadsheet ChartOverlay localize
  through their parent component's UICulture instead of CurrentUICulture;
  spreadsheet dialogs honor a DefaultUICulture cascade. UICulture is added to
  IScheduler/ISpreadsheet as default interface members, so this is non-breaking.

Update the Localization demo with an interactive language switcher (cascading
DefaultUICulture + DefaultCulture) backed by an ILocalizer so it works in-place
on Blazor WebAssembly.
2026-06-15 18:45:19 +03:00
Atanas Korchev
c0298b9c23 Remove remaining formula counts from formulas demo and engine docs 2026-06-15 18:45:18 +03:00
Atanas Korchev
e025e809aa Remove specific formula counts to avoid discrepancies 2026-06-15 18:45:18 +03:00
Vladimir Enchev
574c1ec913 Rename RadzenWidgetGrid to RadzenTileLayout 2026-06-15 18:45:18 +03:00
Marco Papst
89fd3c72d8 Addresses #2498
Introduces a Widget Grid Component that allows to place, view and edit Widget on a configurable grid.
2026-06-15 18:45:17 +03:00
Atanas Korchev
ae865660a6 Remove unreleased DataSheet API
DataSheet<T> tried to expose a virtualized IQueryable view as a Worksheet
but the abstraction leaked in several places: a fixed (100, 100) size
unrelated to the source, an implicit header row, async fetches inside
the cell getter with no re-render signal, one-way mappings (no edit
write-back), and no XLSX round-trip story. That role belongs to
RadzenDataGrid, not the document model. Drop it before release.
2026-06-15 18:45:17 +03:00
yordanov
820326e0f5 Style and demo RadzenTimeSpanPicker in different sizes 2026-06-15 18:45:15 +03:00
yordanov
2b0dd2d990 Style RadzenNumeric in different sizes 2026-06-15 18:45:15 +03:00
yordanov
ebb0d9c2f9 Update ColorPicker demos 2026-06-15 18:45:15 +03:00
Atanas Korchev
d34f5d65cc Add Spreadsheet Permissions demo and fix gating bugs it surfaced
Demo: three-section page covering ReadOnly (whole-spreadsheet lockdown),
Allow* and Show* flags wired to a switch panel, and CommandExecuting with
an async role check via PreventDefault. Cross-links to the Protection demo.

Fixes discovered while testing it:

- Formula bar honoured ReadOnly: SheetEditor now takes a ReadOnly parameter
  that flips the contenteditable attribute; FormulaEditor wires it to the
  Editing feature check via the cascading ISpreadsheet.

- Context menus respect the per-feature flags: cell / row / column menus
  build their items conditionally so Cut/Paste/Clear/Sort/Insert/Delete/
  Hide/Unhide/Convert-table/Delete-table all disappear when their feature
  is disabled. In ReadOnly mode only Copy stays.

- AllowClipboard now genuinely gates Copy as well as Cut and Paste, and is
  decoupled from ReadOnly so view-only users can still copy data unless
  the host explicitly opts out. Test asserting "ReadOnly turns OFF all
  features" updated to reflect the new contract; new test added for the
  AllowClipboard=false case.
2026-06-15 18:45:14 +03:00
Atanas Korchev
d4498a6bfa Rename ribbon tabs to toolsets in public API
The spreadsheet has two distinct sets of tab-like UI: the toolbar at the
top (groupings of tools) and the sheet strip at the bottom (worksheet
picker). The public API mixed both as 'Tab'. Settle terms:

- toolbar (singular) — the whole top strip; ShowToolbar already owned this
- toolset — one named section of tools inside the toolbar (was 'tab')
- sheet tab — the bottom worksheet picker; ShowSheetTabs unchanged

Renames:
- SelectedTabIndex/-Changed → SelectedToolsetIndex/-Changed
- TableDesignTab component → TableDesignToolset (file + usages)
- Doc comments and demo description that said 'ribbon' now say 'toolbar'
  (the term 'ribbon' is reserved for a future RadzenRibbon component)
2026-06-15 18:45:14 +03:00
Atanas Korchev
72e73df35b Wire AdditionalSourceCodePages and Toc for Custom Toolbar demo
StampReviewedTool.razor now appears in the Source tab; the page sidebar
gets two anchor links matching the section headings.
2026-06-15 18:45:14 +03:00
Atanas Korchev
ebdb5a59a8 Add Spreadsheet Custom Toolbar demo
Two-section page showing how to compose a custom ribbon via ChildContent:
predefined tools in a custom layout, and a custom tool that dispatches an
undoable ICommand declaring a SpreadsheetFeature.
2026-06-15 18:45:14 +03:00