diff --git a/.github/ACCESSIBILITY.md b/.github/ACCESSIBILITY.md index a6913678..6aa78e56 100644 --- a/.github/ACCESSIBILITY.md +++ b/.github/ACCESSIBILITY.md @@ -2,6 +2,8 @@ The Syncfusion Blazor Toolkit **aims to conform** to **WCAG 2.2 Level AA**. +> Evidence and commitments last reviewed for package **2.0.1** (includes `SfThemeRoot` theme delivery and component CSS isolation). Re-validate after major theme or styling changes. + ## What this means - Every interactive component in the toolkit exposes accessible @@ -26,12 +28,13 @@ that is not yet satisfied, and the planned remediation. - Accessibility Insights FastPass / Assessment reports for major components are checked in under - [`.github/accessibility/insights-summary.md`](accessibility/insights-summary.md). + [`.github/accessibility/insights-summary.md`](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/accessibility/insights-summary.md). - Manual screen reader smoke notes for NVDA / JAWS / Narrator against the major components live next to it at - [`.github/accessibility/screen-reader-smoke.md`](accessibility/screen-reader-smoke.md). + [`.github/accessibility/screen-reader-smoke.md`](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/accessibility/screen-reader-smoke.md). - Conformance claims are regenerated before each major release and filed in the release ticket. +- Formal VPAT: [`docs/VPAT-2.5-INT.md`](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/VPAT-2.5-INT.md). ## Reporting issues @@ -41,4 +44,4 @@ reader pairing, the component affected, and the WCAG success criterion that is failing. For private disclosure, contact security@syncfusion.com following -[SECURITY.md](SECURITY.md). \ No newline at end of file +[SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md). \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a794e3e0..a9454b1d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -6,13 +6,24 @@ First and foremost: if you are thinking about contributing a bigger change or fe ## Code of Conduct -Please see our [Code of Conduct](CODE_OF_CONDUCT.md). +Please see our [Code of Conduct](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/CODE_OF_CONDUCT.md). ## Contributing Code -Currently, we are in the beginning phases of building up the Syncfusion Toolkit for Blazor. Yet, we are still very excited for you to join us during this exciting time! +The Syncfusion Toolkit for Blazor is an open-source, MIT-licensed package +on a **2.x** release line. We welcome contributions of all sizes—bug fixes, +tests, docs, accessibility, and new capabilities that fit the [roadmap](https://github.com/syncfusion/blazor-toolkit/blob/main/ROADMAP.md). -Have a look at our [Development Guide](DEVELOPMENT.md) to learn about setting up your development environment. +Have a look at our [Development Guide](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md) to learn about setting up your development environment. + +### Repo map (quick) + +- Samples: open `samples/Blazor.Toolkit.Samples.slnx` + (`Blazor.Toolkit.Samples` host, `Blazor.Toolkit.Samples.Client` WASM). +- Unit tests: `tests/Syncfusion.Blazor.Toolkit.BUnitTest/` +- Browser tests: `tests/Syncfusion.Blazor.Playwright.Test/` +- Prefer paths in [DEVELOPMENT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md) and the root + [README.md](../README.md) over short/legacy folder names. ### What to Work On @@ -23,11 +34,11 @@ Follow the style used by the [.NET Foundation](https://github.com/dotnet/runtime - We do not use the `private` keyword, as it is the default accessibility level in C#. - We use hard tabs over spaces. -Read and follow our [pull request template](PULL_REQUEST_TEMPLATE.md). +Read and follow our [pull request template](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/PULL_REQUEST_TEMPLATE.md). ### Pull Request Requirements -Please refer to our [pull request template](PULL_REQUEST_TEMPLATE.md). +Please refer to our [pull request template](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/PULL_REQUEST_TEMPLATE.md). Please check the "Allow edits from maintainers" checkbox on your pull request. This allows us to make minor fixes and resolve conflicts for you quickly. diff --git a/.github/DEVELOPMENT.md b/.github/DEVELOPMENT.md index 5789bcc1..0d3c336a 100644 --- a/.github/DEVELOPMENT.md +++ b/.github/DEVELOPMENT.md @@ -3,14 +3,32 @@ This page contains the steps to build and run the Syncfusion Toolkit for Blazor repository from source. If you are looking to build apps with the Syncfusion Toolkit for Blazor, please head over to the links in the [README](https://github.com/syncfusion/blazor-toolkit/blob/main/README.md) to get started. ## Initial setup - ### Windows - - Install Visual Studio 2022 (v17.10 or newer) with ASP.NET and web development workload. - - Install [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0). - - Clone the repository: - ```shell - git clone https://github.com/syncfusion/blazor-toolkit.git - cd blazor-toolkit - ``` + +### Prerequisites (all platforms) + +- **.NET SDKs** for all supported target frameworks: + [.NET 8](https://dotnet.microsoft.com/download/dotnet/8.0), + [.NET 9](https://dotnet.microsoft.com/download/dotnet/9.0), and + [.NET 10](https://dotnet.microsoft.com/download/dotnet/10.0) + (or an install that provides SDKs for 8, 9, and 10). +- **Node.js (LTS)** on `PATH` if project targets require it during pack/build. +- Clone the repository: + ```shell + git clone https://github.com/syncfusion/blazor-toolkit.git + cd blazor-toolkit + +### Windows (primary) + +- Install Visual Studio 2022 (v17.10 or newer) with the ASP.NET and web development workload, or use the `dotnet` CLI alone. +- Build: `dotnet build ./src/Syncfusion.Blazor.Toolkit.slnx` +- Samples: open `samples/Blazor.Toolkit.Samples.slnx` in Visual Studio and set the desired startup project. + +### macOS / Linux +- Use the `dotnet` CLI with the SDKs above. +- Optional: VS Code or JetBrains Rider. +- Build: `dotnet restore` then `dotnet build ./src/Syncfusion.Blazor.Toolkit.slnx`. +- Samples: open `samples/Blazor.Toolkit.Samples.slnx` in a supported IDE, or run the host project with `dotnet run` from the samples folder. + ## Building the Solution @@ -24,7 +42,7 @@ This page contains the steps to build and run the Syncfusion Toolkit for Blazor ### Release sanity check (local) -If you want to mimic what `.github/workflows/nuget-publish.yml` does on a release runner, pass `-p:ContinuousIntegrationBuild=true` so SourceLink and the package hash match what CI produces: +To produce a local pack that matches CI **unsigned** pack properties (SourceLink / package metadata), pass `-p:ContinuousIntegrationBuild=true`: ```dotnetcli dotnet restore src/Syncfusion.Blazor.Toolkit.csproj -p:ContinuousIntegrationBuild=true @@ -62,18 +80,20 @@ The threat model and security posture are reviewed on a structured schedule: | Trigger | Activity | |---|---| -| Every **major release** (`x.0.0`) | Full review of [THREAT-MODEL.md](THREAT-MODEL.md): reassess all threats, verify mitigations, update or re-ratify the accepted-risks table. | +| Every **major release** (`x.0.0`) | Full review of [THREAT-MODEL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THREAT-MODEL.md): reassess all threats, verify mitigations, update or re-ratify the accepted-risks table. | | Every **minor release** (`x.y.0`) | Review the accepted-risks table; escalate any entry whose circumstances have changed. | -| **Monthly servicing** | Dependency review and CVE triage per [SECURITY.md §3.3](SECURITY.md). | +| **Monthly servicing** | Dependency review and CVE triage per [SECURITY.md §3.3](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md). | -The outcome of each structured review is recorded by updating the "Security Self-Attestation" date in [SECURITY.md](SECURITY.md) and the accepted-risks table in [THREAT-MODEL.md](THREAT-MODEL.md). +The outcome of each structured review is recorded by updating the "Security Self-Attestation" date in [SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md) and the accepted-risks table in [THREAT-MODEL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THREAT-MODEL.md). ## Versioning and API stability The project follows [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html). -Release history lives on the GitHub release page: -> **Release history:** +Release history: + +- **GitHub Releases:** +- **In-repo changelog:** [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md) Every published tag has a release page on that URL that enumerates the added, changed, deprecated, and removed APIs for that version. @@ -88,10 +108,14 @@ The short version of the policy is: - **Minor (`x.y.0`)** — backwards-compatible additions only. - **Patch (`x.y.z`)** — backwards-compatible bug fixes only. -Until the project ships a `1.0.0` release, the minor digit may -include breaking changes per SemVer §4. The current source declares -`2.0.1` in `src/Syncfusion.Blazor.Toolkit.csproj`; the most recent -published release on the GitHub releases page is `v1.0.2`. +The package version is declared in `src/Syncfusion.Blazor.Toolkit.csproj` +(currently `2.0.1`). The latest published GitHub release is `v2.0.1`. + +The pre-1.0 SemVer exception no longer applies. On **2.x**, breaking changes +require a new major version. **2.0.0** was a breaking re-baseline; see +[CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md), +[docs/API-COMPATIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-COMPATIBILITY.md), and +[docs/API-BREAK-INVENTORY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-BREAK-INVENTORY.md). APIs marked `[Obsolete]` are retained for at least **two minor releases** before removal. APIs marked `[Experimental]` are not @@ -213,16 +237,29 @@ bUnit test enforces this by reflection over every public `[Parameter]` in `src/Components/` and asserts `EditorRequiredAttribute` presence when the docs mark the parameter as required. -### D5 / BEQ-20 — `e-*` style contract +### D5 / BEQ-20 — Style and theme delivery (2.0) + +As of **2.0.0**, toolkit styling is delivered in two layers: + +1. **Component styles** — Colocated Blazor CSS isolation (`.razor.css` next to + each component). Edit component appearance in those source files. The build + produces the scoped CSS bundle. + +2. **Shared theme layer** — `:root` tokens, base/utility styles, icon font, + keyframes, and dark / high-contrast / forced-colors rules are emitted at + render time by **`SfThemeRoot`** (`src/Base/SfThemeRoot.cs`, + `SfThemeRoot.Payload.cs`), with ownership coordinated by **`SfThemeScope`**. + Root toolkit components render `` as the previous sibling of + their root element. For the common case, consumers do **not** need separate + toolkit theme `` tags. + +Class names may still use the `e-*` prefix where applicable. Prefer matching +existing isolated selectors and the theme payload rather than a permanent +checked-in `src/wwwroot/styles/` tree. `src/wwwroot/` primarily holds +JavaScript interop scripts. -Global styles for the toolkit are namespaced under `e-*`. They are -shipped from `src/wwwroot/styles/` and consumed via the -`_content/Syncfusion.Blazor.Toolkit/styles` static asset path. The -contract, including stable selectors and renaming policy, is defined -in [`src/wwwroot/styles/STYLE-CONTRACT.md`](../src/wwwroot/styles/STYLE-CONTRACT.md). -A subset of components uses Blazor CSS isolation for self-contained -styling (`Border.razor.css` under `Spinner`, `SfNumericTextBox.razor.css`); -those files are colocated with the component. +See [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md) section `[2.0.0]` (theme delivery model and +CSS isolation) for migration details. ### D6 / PI-06 — SBOM (manual) @@ -410,7 +447,7 @@ that are documented as static or server-only. The render mode is declared per sample, not per component. The render-mode contract for each component is documented in its XML doc-comment `Remarks` section. Security implications are summarised in -[RENDER-MODE-SECURITY.md](RENDER-MODE-SECURITY.md). +[RENDER-MODE-SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/RENDER-MODE-SECURITY.md). ### Performance notes @@ -448,7 +485,7 @@ This means: .NET matrix (8.0.x, 9.0.x, 10.0.x). Playwright validation runs on the same triple. The unpacked WebAssembly sample smoke runs on .NET 10 only. Documented coverage and gaps are kept up to date in -[TEST-MATRIX.md](TEST-MATRIX.md). +[TEST-MATRIX.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/TEST-MATRIX.md). ### Known analyzer / trim / AOT findings diff --git a/.github/Index.md b/.github/Index.md index c76165a2..50478e33 100644 --- a/.github/Index.md +++ b/.github/Index.md @@ -8,84 +8,130 @@ The documents referenced below contain project information related to licensing, ## Licensing and Dependencies -- [THIRD-PARTY-NOTICES.md](./THIRD-PARTY-NOTICES.md) +- [THIRD-PARTY-NOTICES.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THIRD-PARTY-NOTICES.md) - Third-party dependency inventory and license information. --- ## Security Documentation -- [SECURITY.md](./SECURITY.md) +- [SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md) - Security reporting process and vulnerability management. -- [THREAT-MODEL.md](./THREAT-MODEL.md) +- [THREAT-MODEL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THREAT-MODEL.md) - Security threats, mitigations, and accepted risks. -- [RENDER-MODE-SECURITY.md](./RENDER-MODE-SECURITY.md) +- [RENDER-MODE-SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/RENDER-MODE-SECURITY.md) - Blazor render-mode security guidance and implementation considerations. --- ## Accessibility Documentation -- [ACCESSIBILITY.md](./ACCESSIBILITY.md) +- [ACCESSIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/ACCESSIBILITY.md) - Accessibility commitments and compliance guidance. -- [accessibility/insights-summary.md](./accessibility/insights-summary.md) +- [accessibility/insights-summary.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/accessibility/insights-summary.md) - Accessibility Insights assessment summary. -- [accessibility/screen-reader-smoke.md](./accessibility/screen-reader-smoke.md) +- [accessibility/screen-reader-smoke.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/accessibility/screen-reader-smoke.md) - Screen-reader validation and testing results. --- ## Development and Release Guidance -- [DEVELOPMENT.md](./DEVELOPMENT.md) +- [DEVELOPMENT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md) - Development workflows, release processes, and engineering guidance. --- +## Getting started and changelog + +- [README.md](https://github.com/syncfusion/blazor-toolkit/blob/main/README.md) — Product overview and getting started. +- [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md) — In-repo release history. +- [ROADMAP.md](https://github.com/syncfusion/blazor-toolkit/blob/main/ROADMAP.md) — Chart-first priorities, exploratory component direction, and evidence gaps. Not a delivery commitment. + +--- + +## API and compliance (`docs/`) + +- [API-COMPATIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-COMPATIBILITY.md) — 2.0 compatibility contract (upgraders from 1.0.2). +- [API-BREAK-INVENTORY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-BREAK-INVENTORY.md) — Inventory of accepted 2.0 API breaks. +- [VPAT-2.5-INT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/VPAT-2.5-INT.md) — Formal VPAT 2.5 report. + +--- + ## Performance Documentation -- [evidences/performance/virtualization-strategy.md](./evidences/performance/virtualization-strategy.md) +- [evidences/performance/virtualization-strategy.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/evidences/performance/virtualization-strategy.md) - Virtualization approach and rationale. -- [evidences/performance/render-tree-efficiency.md](./evidences/performance/render-tree-efficiency.md) +- [evidences/performance/render-tree-efficiency.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/evidences/performance/render-tree-efficiency.md) - Rendering performance analysis. -- [evidences/performance/shouldRender-optimization.md](./evidences/performance/shouldRender-optimization.md) +- [evidences/performance/shouldRender-optimization.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/evidences/performance/shouldRender-optimization.md) - Component rendering optimization guidance. -- [evidences/performance/key-usage.md](./evidences/performance/key-usage.md) +- [evidences/performance/key-usage.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/evidences/performance/key-usage.md) - Usage of @key and component lifecycle optimizations. --- ## Software Bill of Materials (SBOM) -- [artifacts/sbom/](../artifacts/sbom/README.md) +- [artifacts/sbom/](https://github.com/syncfusion/blazor-toolkit/blob/main/artifacts/sbom/README.md) - Generated SBOM artifacts and related package metadata. --- ## Support and Lifecycle -- [SUPPORT.md](./SUPPORT.md) +- [SUPPORT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SUPPORT.md) - Support process, service expectations, and lifecycle commitments. --- -## Samples and Documentation +## Samples and external links -- [samples/](../samples/) - - Component samples and usage examples. +- [samples/](https://github.com/syncfusion/blazor-toolkit/blob/main/samples/) + - In-repo sample browser (host and client projects). -- https://blazor.syncfusion.com/demos/toolkit/ - - Product documentation and component reference material. +- **Demos:** https://blazor.syncfusion.com/demos/toolkit/ + - Interactive toolkit demos. + +- **Documentation:** https://blazor.syncfusion.com/documentation/toolkit/overview + - Product documentation and component reference. --- +## Getting started and changelog + +- [README.md](https://github.com/syncfusion/blazor-toolkit/blob/main/README.md) + - Product overview, repository structure, and consumer getting started. +- [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md) + - In-repo release history and migration notes. +- [ROADMAP.md](https://github.com/syncfusion/blazor-toolkit/blob/main/ROADMAP.md) + - Chart-first priorities and exploratory direction. Not a delivery commitment. + +## API and compliance (`docs/`) + +- [API-COMPATIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-COMPATIBILITY.md) + - 2.0 compatibility and migration contract. +- [API-BREAK-INVENTORY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-BREAK-INVENTORY.md) + - Inventory of accepted 2.0 API breaks. +- [VPAT-2.5-INT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/VPAT-2.5-INT.md) + - Accessibility VPAT. + +## Contributing and tests + +- [CONTRIBUTING.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/CONTRIBUTING.md) + - Contribution process and PR expectations. +- [TEST-MATRIX.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/TEST-MATRIX.md) + - Test coverage matrix and gaps. +- [skills/](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/) + - Component skill guidance (`SKILL.md` per area). + ## Purpose This file serves as a navigation hub for repository documentation and supporting evidence. Reviewers and contributors should refer to the linked documents for detailed information regarding project practices, implementation details, and supporting materials. \ No newline at end of file diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 3acd72ef..5b08371e 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -56,6 +56,7 @@ On a **monthly cadence** (targeting the second Wednesday of each month), the mai ## 4. Security Self-Attestation -This project maintains a current security reference in the repository's [THREAT-MODEL.md](THREAT-MODEL.md) document (sibling to this file in `.github/`). The project team has reviewed the current architecture, package surface, and release flow and has documented the principal risks and mitigations in good faith. +This project maintains a current security reference in the repository's [THREAT-MODEL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THREAT-MODEL.md) document (sibling to this file in `.github/`). The project team has reviewed the current architecture, package surface, and release flow and has documented the principal risks and mitigations in good faith. -This attestation reflects the project's current understanding as of 2026-09-06 and is intended to be updated as the toolkit evolves. +This attestation reflects the project's current understanding as of 2026-10-19 +(after 2.0.0 / 2.0.1) and is intended to be updated as the toolkit evolves. diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md index cc5b59c3..efb10a61 100644 --- a/.github/SUPPORT.md +++ b/.github/SUPPORT.md @@ -22,12 +22,12 @@ request, use GitHub Discussions at ## Security disclosures Use the contact and procedure in -[SECURITY.md](SECURITY.md). Do **not** file security issues publicly +[SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md). Do **not** file security issues publicly until a Syncfusion Maintainer acknowledges receipt. ## Code of conduct The project enforces the -[Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). Unwelcome +[Contributor Covenant Code of Conduct](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/CODE_OF_CONDUCT.md). Unwelcome behaviour can be reported to conduct@syncfusion.com — private reports only. \ No newline at end of file diff --git a/.github/TEST-MATRIX.md b/.github/TEST-MATRIX.md index 5d51c2ea..1ff3ec3e 100644 --- a/.github/TEST-MATRIX.md +++ b/.github/TEST-MATRIX.md @@ -15,19 +15,28 @@ Quick coverage summary for the Syncfusion Blazor Toolkit CI matrix. ## Sanitised coverage from the bUnit report -- 132 `Fact`/`Theory` test cases as of 2026-09-06; the upload - `bunit-results-` is auto-published as a repository artifact +- bUnit: **2,735** tests passed (0 failed, 0 skipped) on .NET 8 as of + the DEVELOPMENT.md verification note (2026-10-03). That figure is + **executed test cases** from `dotnet test` on + `tests/Syncfusion.Blazor.Toolkit.BUnitTest`, not a count of + `[Fact]`/`[Theory]` method declarations alone. +- Re-count after meaningful test changes: + `dotnet test tests/Syncfusion.Blazor.Toolkit.BUnitTest --logger "console;verbosity=minimal"`. +- The upload `bunit-results-` is published as a repository artifact by `.github/workflows/ci.yml`. -- All 17 `Sf*` components have at least one happy-path render test. +- All public `Sf*` components should keep at least one happy-path render test. ## Gaps - The unpacked WebAssembly sample smoke runs on .NET 10 only; .NET 8 and .NET 9 WASM are out of scope for that one job. -- No Visual Regression baseline images are tracked here; those live - in `tests/playwright-baselines/`. +- Visual regression / browser tests live under + `tests/Syncfusion.Blazor.Playwright.Test/` (see also repo-root + `playwright.config.ts`). Baseline or snapshot assets, if used, are + stored with that project or produced by the Playwright run—not under + a separate `tests/playwright-baselines/` folder. - Accessibility Insights runs nightly, not on PR — see - [`.github/accessibility/insights-summary.md`](accessibility/insights-summary.md). + [`.github/accessibility/insights-summary.md`](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/accessibility/insights-summary.md). ## Test-evidence list (where to find the latest numbers) diff --git a/.github/THREAT-MODEL.md b/.github/THREAT-MODEL.md index 5b9968f9..618aed2a 100644 --- a/.github/THREAT-MODEL.md +++ b/.github/THREAT-MODEL.md @@ -105,10 +105,10 @@ The following risks have been reviewed and accepted by the maintainers. Each ent | # | Risk | Rationale | Owner | Accepted | |---|---|---|---|---| -| AR-1 | Shipped assemblies are not strong-name signed (`PublicKeyToken=null`); automated strong-name signing is intentionally not implemented in the public repository | **Sole signing control.** The signed `.nupkg`'s primary + counter signature is the only authentication control on a published artefact. Inner-DLL strong-name signing is performed manually by the release maintainer as part of the internal sign-and-publish process; it is not implemented in CI. The public repository contains no strong-name key material, no `SignAssembly=true` directive, and no `AssemblyOriginatorKeyFile` value — by policy. The manual strong-name step is documented in [DEVELOPMENT.md §Manual NuGet sign and publish (PI-01, PI-02)](DEVELOPMENT.md#manual-nuget-sign-and-publish-pi-01-pi-02). | Syncfusion Maintainers | 2026-09-06 | +| AR-1 | Shipped assemblies are not strong-name signed (`PublicKeyToken=null`); automated strong-name signing is intentionally not implemented in the public repository | **Sole signing control.** The signed `.nupkg`'s primary + counter signature is the only authentication control on a published artefact. Inner-DLL strong-name signing is performed manually by the release maintainer as part of the internal sign-and-publish process; it is not implemented in CI. The public repository contains no strong-name key material, no `SignAssembly=true` directive, and no `AssemblyOriginatorKeyFile` value — by policy. The manual strong-name step is documented in [DEVELOPMENT.md §Manual NuGet sign and publish (PI-01, PI-02)](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md#manual-nuget-sign-and-publish-pi-01-pi-02). | Syncfusion Maintainers | 2026-09-06 | | AR-2 | Shipped assemblies are not Authenticode signed (`NotSigned`); only the outer `.nupkg` is signed and that sign step is performed manually | **This Accepted Risk is the formal waiver for the Authenticode requirement.** Per-DLL Authenticode signing is deliberately declined for this distribution model. The gating item is satisfied by the combination of (a) outer `.nupkg` primary + counter signature, (b) `RepositoryCommit` pointing at a public commit, and (c) an attached SBOM (AR-5). The outer `.nupkg` signature authenticates every byte inside the package, which is the consumer-visible signing indicator of record. CI never attempts to sign a `.nupkg`. Reaffirmed on 2026-09-06 in line with the explicit constraint that no signing automation is added to this public repository. | Syncfusion Maintainers | 2026-09-06 | | AR-3 | `RepositoryCommit` in the `.nuspec` is automatically derived from the public commit the maintainer is packing from, instead of being maintained manually (D1 / LP-10) | `Directory.Build.props` defaults `RepositoryCommit` to `$(SourceRevision)`/`$(SourceRevisionId)`, which `Microsoft.SourceLink.GitHub` populates from the local `.git/HEAD`. `RepositoryBranch` is resolved from `.git/HEAD` at build time. The maintainer must run `dotnet pack` from a clone whose `HEAD` matches the on-`main` tag candidate (verified by `git cat-file -e ^{commit}` immediately before pack). Manual override is possible with `-p:SourceRevision=`. | Syncfusion Maintainers | 2026-09-06 | -| AR-4 | The whole sign-and-publish workflow (NuGet sign + push) is performed manually and is intentionally outside this repository (D8 / CI-07, D9 / CI-08) | The repository contains no `.github/workflows/nuget-publish.yml`, no signing tool invocation, no SHA-256 hand-off artifact, no immutable-digest job, no `STRONG_NAME_KEY_BASE64` secret reference, no `no-secrets.yml` sentinel, and no `immutable-artifact.yml`. None of these are required because the publish step is manual and human-mediated. Consumers who require the audit trail for a specific release may request it through the security contact in [SECURITY.md](SECURITY.md). | Syncfusion Maintainers | 2026-09-06 | +| AR-4 | The whole sign-and-publish workflow (NuGet sign + push) is performed manually and is intentionally outside this repository (D8 / CI-07, D9 / CI-08) | The repository contains no `.github/workflows/nuget-publish.yml`, no signing tool invocation, no SHA-256 hand-off artifact, no immutable-digest job, no `STRONG_NAME_KEY_BASE64` secret reference, no `no-secrets.yml` sentinel, and no `immutable-artifact.yml`. None of these are required because the publish step is manual and human-mediated. Consumers who require the audit trail for a specific release may request it through the security contact in [SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md). | Syncfusion Maintainers | 2026-09-06 | | AR-5 | The CycloneDX SBOM is produced automatically on every `dotnet pack` and is embedded inside the `.nupkg`; the SPDX SBOM is generated from the **signed** `.nupkg` and is attached manually to each GitHub release (D6 / PI-06) | `Repository-root Directory.Build.targets` runs `dotnet CycloneDX` after `Build` and packages the resulting `.cdx.json` at `_sbom/cyclonedx//` inside every `.nupkg`. The CycloneDX tool must be installed once on the release workstation: `dotnet tool install --global CycloneDX`. The SPDX file is generated manually by the maintainer **from the signed `.nupkg`** (qualifying the bytes), uploaded as a release asset alongside the `.cdx.json` already inside the package, and is the SPDX-of-record for the release. | Syncfusion Maintainers | 2026-09-06 | | AR-6 | The project intentionally ships `dotnet new` scaffolders (templates) for its toolkit instead of contributing to the upstream `dotnet/scaffolding` repo | First-party scaffolders are the supported consumer side-channel for tooling, locale samples, and component recipes. The scaffolders are versioned with the package in `templates/` and discoverable via `dotnet new` once the package is referenced. We do not currently ship into `dotnet/scaffolding`; the decision is reviewed at each major release. | Syncfusion Maintainers | 2026-09-06 | @@ -134,11 +134,12 @@ This threat model should be reviewed when: ## Self-attestation -This threat model was prepared as a current security reference for the Syncfusion Blazor Toolkit project and reflects the maintainers’ understanding of the project as of 2026-09-06. The project team intends to review and update this document as changes to the component library, assets, or build pipeline occur. +This threat model was prepared as a current security reference for the Syncfusion Blazor Toolkit project and reflects the maintainers’ understanding of the project as of 2026-10-19. The project team intends to review and update this document as changes to the component library, assets, or build pipeline occur. The maintainers attest that the information provided here is a good-faith assessment of the project’s current security risks and mitigations based on the repository structure and package design at the time of publication. ### Change since last review -- **2026-09-06 — Readiness defect pass (D1–D9), documentation-only.** Per the explicit constraint that signing and publishing remain **manual** and outside this public repository, no signing material, signing tools, or publish-style workflows were added. `RepositoryCommit` and `RepositoryBranch` are now derived automatically from the local `.git/HEAD` via `Directory.Build.props` + SourceLink (D1 / LP-10, AR-3) — a release-maintainer-controlled pack step documented in [DEVELOPMENT.md §Repository metadata + SBOM during `dotnet pack`](DEVELOPMENT.md#repository-metadata--sbom-during-dotnet-pack). A new `pack` job was added to `.github/workflows/ci.yml` producing an unsigned `.nupkg` artifact for human review only (D7 / CI-01). Repository-root `Directory.Build.targets` runs `dotnet CycloneDX` on every `dotnet pack` and ships `*.cdx.json` inside the `.nupkg` (D6 / PI-06, AR-5). Style contract published at `src/wwwroot/styles/STYLE-CONTRACT.md` (D5 / BEQ-20). Reflection-based behaviour tests added under `tests/Syncfusion.Blazor.Toolkit.BUnitTest/Base/` for D4 / BEQ-10, D5 / BEQ-20 and D6 / PI-06 narrative cross-checks. The accepted-risks table now contains AR-1 through AR-6, all reframed to call out that signing and publishing are a manual process while SBOM-at-pack is automatic. +- **2026-10-19 — Post–2.0.0 / 2.0.1 review.** Major 2.0 shipped (namespace consolidation, CSS isolation, `SfThemeRoot` theme delivery). Accepted risks AR-1 through AR-6 remain applicable (manual sign/publish; no public `nuget-publish.yml`). Style delivery is no longer documented as a permanent `src/wwwroot/styles/STYLE-CONTRACT.md` sheet; see DEVELOPMENT.md D5 / CHANGELOG `[2.0.0]`. +- **2026-09-06 — Readiness defect pass (D1–D9), documentation-only.** Per the explicit constraint that signing and publishing remain **manual** and outside this public repository, no signing material, signing tools, or publish-style workflows were added. `RepositoryCommit` and `RepositoryBranch` are now derived automatically from the local `.git/HEAD` via `Directory.Build.props` + SourceLink (D1 / LP-10, AR-3) — a release-maintainer-controlled pack step documented in [DEVELOPMENT.md §Repository metadata + SBOM during `dotnet pack`](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md#repository-metadata--sbom-during-dotnet-pack). A new `pack` job was added to `.github/workflows/ci.yml` producing an unsigned `.nupkg` artifact for human review only (D7 / CI-01). Repository-root `Directory.Build.targets` runs `dotnet CycloneDX` on every `dotnet pack` and ships `*.cdx.json` inside the `.nupkg` (D6 / PI-06, AR-5). Style contract published at `src/wwwroot/styles/STYLE-CONTRACT.md` (D5 / BEQ-20). Reflection-based behaviour tests added under `tests/Syncfusion.Blazor.Toolkit.BUnitTest/Base/` for D4 / BEQ-10, D5 / BEQ-20 and D6 / PI-06 narrative cross-checks. The accepted-risks table now contains AR-1 through AR-6, all reframed to call out that signing and publishing are a manual process while SBOM-at-pack is automatic. - **2026-08-21 — Hardened CD pipeline for nuget-publish.** Added SLSA build provenance attestation (`actions/attest-build-provenance`), deterministic builds via `ContinuousIntegrationBuild=true`, exit-code-driven vulnerability scan with downloadable `vuln-report` artifact, and concurrency guard for re-tagged same-version pushes. Accepted-risks entries AR-1 and AR-2 were reviewed and remain applicable; no new accepted risk was introduced. diff --git a/.github/accessibility/insights-summary.md b/.github/accessibility/insights-summary.md index 0bd70dd6..21dc8244 100644 --- a/.github/accessibility/insights-summary.md +++ b/.github/accessibility/insights-summary.md @@ -18,6 +18,8 @@ is updated here at every major release. | Total FastPass findings | 0 critical; 0 serious; 3 moderate (filed as issues labelled `accessibility`); 0 minor | | Total Assessment findings | 0 serious; 5 moderate (filed as issues labelled `accessibility`); 12 minor (filed) | +> Snapshot below is from **2026-09-06** (pre–2.0 theme/isolation). Treat as historical until re-run against **2.0.1**. + ### Findings by component | Component | FastPass | Assessment | Severity | Issue | diff --git a/.github/accessibility/screen-reader-smoke.md b/.github/accessibility/screen-reader-smoke.md index 9c2804ec..f078574e 100644 --- a/.github/accessibility/screen-reader-smoke.md +++ b/.github/accessibility/screen-reader-smoke.md @@ -4,6 +4,8 @@ This table summarises manual screen-reader smoke tests run against the major Syncfusion Blazor Toolkit components. Results are re-verified at every minor release. +> Matrix last fully re-verified before **2.0.0**. Re-run against **2.0.1** after CSS isolation / `SfThemeRoot` before treating as current release evidence. + | Component | NVDA 2024.x (Windows 11 / Edge) | JAWS 2025 (Windows 11 / Edge) | Narrator (Windows 11 / Edge) | Notes | |---|---|---|---|---| | `SfButton` | PASS — name, role, state announced | PASS | PASS | | diff --git a/.github/evidences/performance/key-usage.md b/.github/evidences/performance/key-usage.md index 08aa84ac..32adbf4e 100644 --- a/.github/evidences/performance/key-usage.md +++ b/.github/evidences/performance/key-usage.md @@ -1,5 +1,7 @@ # `@key` usage — evidence report +> As of package **2.0.1**. Spot-check against current `src/Components` after major rendering or theme changes. + ## Summary Every toolkit-owned Razor collection that emits repeated elements uses `@key`. Single-instance controls correctly omit it. Chart points are not Razor-looped (SVG builder model). diff --git a/.github/evidences/performance/render-tree-efficiency.md b/.github/evidences/performance/render-tree-efficiency.md index 65b7261c..51acff83 100644 --- a/.github/evidences/performance/render-tree-efficiency.md +++ b/.github/evidences/performance/render-tree-efficiency.md @@ -1,5 +1,7 @@ # Render tree efficiency — evidence report +> As of package **2.0.1**. Spot-check against current `src/Components` after major rendering or theme changes. + ## Summary | Technique | Where applied | diff --git a/.github/evidences/performance/shouldRender-optimization.md b/.github/evidences/performance/shouldRender-optimization.md index 3ed44c36..a6d85af5 100644 --- a/.github/evidences/performance/shouldRender-optimization.md +++ b/.github/evidences/performance/shouldRender-optimization.md @@ -1,5 +1,7 @@ # ShouldRender optimization — evidence report +> As of package **2.0.1**. Spot-check against current `src/Components` after major rendering or theme changes. + ## Summary Formal `ShouldRender` overrides are used where render cost is highest (chart renderer stack). Other components use default `ShouldRender` or equivalent gates (conditional markup / adaptive flags / change tracking). diff --git a/.github/evidences/performance/virtualization-strategy.md b/.github/evidences/performance/virtualization-strategy.md index a073b3b5..0d600be4 100644 --- a/.github/evidences/performance/virtualization-strategy.md +++ b/.github/evidences/performance/virtualization-strategy.md @@ -1,5 +1,7 @@ # Virtualization strategy — evidence report +> As of package **2.0.1**. Spot-check against current `src/Components` after major rendering or theme changes. + ## Summary | Finding | Detail | diff --git a/.github/skills/syncfusion-blazor-toolkit-buttons/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-buttons/SKILL.md index 5e92d846..d0eaa7f7 100644 --- a/.github/skills/syncfusion-blazor-toolkit-buttons/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-buttons/SKILL.md @@ -14,12 +14,12 @@ description: > compatibility: ".NET 8+, render-modes: Static SSR, Server, WebAssembly, Auto" metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit Buttons -> ✅ **Render mode:** Works in **all** render modes — `SfButton` is usable in Static SSR; only event handlers (`OnClick`) require interactivity. Read `AGENTS.md` to determine the project's interactivity mode before wiring event handlers. +> ✅ **Render mode:** Works in **all** render modes — `SfButton` is usable in Static SSR; only event handlers (`OnClick`) require interactivity. Confirm the app’s interactive render mode (Server, WebAssembly, or Auto) in the host project (`Program.cs` / launch profile) before wiring event handlers. See [DEVELOPMENT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md) and [RENDER-MODE-SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/RENDER-MODE-SECURITY.md) for repo guidance. ## Core Rules @@ -188,7 +188,7 @@ flag itself. **Or:** simpler, rely on the framework's `IsBusy`/`ButtonState` pattern or a wrapping `` overlay (see -[syncfusion-blazor-toolkit-notifications](../syncfusion-blazor-toolkit-notifications/SKILL.md)). +[syncfusion-blazor-toolkit-notifications](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md)). ## Minimal Example @@ -213,11 +213,11 @@ a wrapping `` overlay (see | Need | Read | |---|---| -| First button / project setup | [references/getting-started.md](references/getting-started.md) | -| Styling, `Disabled`, `CssClass` | [references/button-fundamentals.md](references/button-fundamentals.md) | -| Icons, `Content` vs `ChildContent` | [references/icons-and-content.md](references/icons-and-content.md) | -| Events, `EventCallback`, async patterns | [references/events-and-callbacks.md](references/events-and-callbacks.md) | -| `SfButtonGroup`, selection modes | [references/button-group.md](references/button-group.md) | +| First button / project setup | [references/getting-started.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md) | +| Styling, `Disabled`, `CssClass` | [references/button-fundamentals.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/button-fundamentals.md) | +| Icons, `Content` vs `ChildContent` | [references/icons-and-content.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/icons-and-content.md) | +| Events, `EventCallback`, async patterns | [references/events-and-callbacks.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/events-and-callbacks.md) | +| `SfButtonGroup`, selection modes | [references/button-group.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/button-group.md) | > Full property reference for `SfButton`, `SfButtonGroup`, and inner `Button` lives in `references/button-fundamentals.md` and `references/button-group.md`. @@ -225,9 +225,9 @@ a wrapping `` overlay (see ## Next Steps -1. **Start Simple:** Read [references/getting-started.md](references/getting-started.md) -2. **Style and Configure:** Explore [references/button-fundamentals.md](references/button-fundamentals.md) -3. **Add Interactivity:** Learn [references/events-and-callbacks.md](references/events-and-callbacks.md) -4. **Expand:** Grouping in [references/button-group.md](references/button-group.md) +1. **Start Simple:** Read [references/getting-started.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md) +2. **Style and Configure:** Explore [references/button-fundamentals.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/button-fundamentals.md) +3. **Add Interactivity:** Learn [references/events-and-callbacks.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/events-and-callbacks.md) +4. **Expand:** Grouping in [references/button-group.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/references/button-group.md) **Demo:** https://blazor.syncfusion.com/demos/toolkit/buttons/button \ No newline at end of file diff --git a/.github/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md b/.github/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md index 2d19b26b..e9b04147 100644 --- a/.github/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md +++ b/.github/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md @@ -181,7 +181,9 @@ cd samples/Blazor.Toolkit.Samples dotnet watch run ``` -The application starts at `https://localhost:7145` (or similar port). +The application listens on the URL from the active launch profile +(`Properties/launchSettings.json`) or the URL printed by +`dotnet watch run` / `dotnet run` in the console—not a fixed port. ### Adding a Test Page 1. Create `Pages/ButtonTest.razor` diff --git a/.github/skills/syncfusion-blazor-toolkit-calendars/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-calendars/SKILL.md index 9d5af97b..cde3c207 100644 --- a/.github/skills/syncfusion-blazor-toolkit-calendars/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-calendars/SKILL.md @@ -15,7 +15,7 @@ description: > compatibility: ".NET 8+, render-modes: Server, WebAssembly, Auto" metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit - Calendar Components @@ -25,7 +25,7 @@ metadata: ## Core Rules The four rules below are the highest-impact; the rest (5–8) live in -[references/critical-gotchas.md](references/critical-gotchas.md) — read it +[references/critical-gotchas.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md) — read it first if you have any time/format/validation question. These top 4 together prevent ~95% of calendar bug reports. @@ -43,12 +43,12 @@ prevent ~95% of calendar bug reports. Rules 5–8 — `DayCellRendering` mutation discipline, `aria-label` opt-in, `@bind-Value` + `ValueChanged` double-fire, and midnight re-render — live in -[references/critical-gotchas.md](references/critical-gotchas.md). +[references/critical-gotchas.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md). ## Don'ts > **Cross-reference with critical-gotchas.md:** rules below mirror the 8-rule -> reference at [references/critical-gotchas.md](references/critical-gotchas.md); +> reference at [references/critical-gotchas.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md); > the rules duplicated here (rows 1, 3, 5, 7, 8) are surfaced inline because > they're the most common agent mistakes. When in doubt on timezones, > values, or rendering — read the full gotchas reference. @@ -200,7 +200,7 @@ date on click instead of keeping a timer running. ``` > For the full 8-rule reference, see -> [references/critical-gotchas.md](references/critical-gotchas.md). +> [references/critical-gotchas.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md). ## Minimal Example @@ -222,21 +222,21 @@ date on click instead of keeping a timer running. | Need | Read | |---|---| -| First component / installation | [references/getting-started.md](references/getting-started.md) | -| Core features (selection, formatting, validation) | [references/features.md](references/features.md) | -| Per-component reference (`SfCalendar`, `DatePicker`, `DateTimePicker`, `TimePicker`) | [references/calendar.md](references/calendar.md), [references/datepicker.md](references/datepicker.md), [references/datetimepicker.md](references/datetimepicker.md), [references/timepicker.md](references/timepicker.md) | -| Events and two-way binding | [references/events-binding.md](references/events-binding.md) | -| API reference (properties, events, methods, enums) | [references/api-reference.md](references/api-reference.md) | -| Troubleshooting | [references/troubleshooting.md](references/troubleshooting.md) | +| First component / installation | [references/getting-started.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/getting-started.md) | +| Core features (selection, formatting, validation) | [references/features.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/features.md) | +| Per-component reference (`SfCalendar`, `DatePicker`, `DateTimePicker`, `TimePicker`) | [references/calendar.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/calendar.md), [references/datepicker.md](references/datepicker.md), [references/datetimepicker.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/datetimepicker.md), [references/timepicker.md](references/timepicker.md) | +| Events and two-way binding | [references/events-binding.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/events-binding.md) | +| API reference (properties, events, methods, enums) | [references/api-reference.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/api-reference.md) | +| Troubleshooting | [references/troubleshooting.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/troubleshooting.md) | -> ⚠️ Read [references/critical-gotchas.md](references/critical-gotchas.md) **first** — UTC vs local time, `TValue` selection, `Format` mixing, `Min`/`Max` inclusivity, `DayCellRendering` mutation rules, accessibility labelling, `@bind-Value` + `ValueChanged` interaction, `DateTime.Now` snapshot. +> ⚠️ Read [references/critical-gotchas.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md) **first** — UTC vs local time, `TValue` selection, `Format` mixing, `Min`/`Max` inclusivity, `DayCellRendering` mutation rules, accessibility labelling, `@bind-Value` + `ValueChanged` interaction, `DateTime.Now` snapshot. --- ## Next Steps -1. **Read first:** [references/critical-gotchas.md](references/critical-gotchas.md) -2. **Setup:** [references/getting-started.md](references/getting-started.md) +1. **Read first:** [references/critical-gotchas.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md) +2. **Setup:** [references/getting-started.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/references/getting-started.md) 3. **Per-component reference:** the relevant `references/*.md` **Demo:** https://blazor.syncfusion.com/demos/toolkit/calendar \ No newline at end of file diff --git a/.github/skills/syncfusion-blazor-toolkit-charts/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-charts/SKILL.md index fcc82f73..40938ad2 100644 --- a/.github/skills/syncfusion-blazor-toolkit-charts/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-charts/SKILL.md @@ -3,7 +3,7 @@ name: syncfusion-blazor-toolkit-charts description: Implement Syncfusion Blazor Chart (SfChart) component for core data visualizations. Use this when creating line, area, column/bar, scatter, bubble, spline and stacking chart variants in Blazor applications. metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) category: "Data Visualization" --- @@ -41,7 +41,7 @@ The Syncfusion Blazor Chart component is a powerful data visualization tool that ### Complete API Reference -📄 **Read:** [references/api-reference.md](references/api-reference.md) +📄 **Read:** [references/api-reference.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/api-reference.md) **CRITICAL: Use this reference FIRST for all API-related questions** @@ -69,7 +69,7 @@ Topics covered: ### Getting Started -📄 **Read:** [references/getting-started.md](references/getting-started.md) +📄 **Read:** [references/getting-started.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/getting-started.md) Use this when: - Setting up a new Blazor Chart project @@ -92,7 +92,7 @@ Topics covered: #### Common Chart Types -📄 **Read:** [references/chart-types-common.md](references/chart-types-common.md) +📄 **Read:** [references/chart-types-common.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/chart-types-common.md) Use this for frequently-used chart types: - Line charts for trend visualization @@ -112,7 +112,7 @@ Topics covered: #### Specialized Chart Types -📄 **Read:** [references/chart-types-specialized.md](references/chart-types-specialized.md) +📄 **Read:** [references/chart-types-specialized.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/chart-types-specialized.md) Use this for specialized visualization needs: - Stacked charts (Stack Area/Bar/Column/Line, 100% variants) @@ -133,7 +133,7 @@ Topics covered: ### Axes and Data Configuration -📄 **Read:** [references/axes-and-scales.md](references/axes-and-scales.md) +📄 **Read:** [references/axes-and-scales.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/axes-and-scales.md) Use this when: - Configuring axis types (category, numeric, datetime, logarithmic) @@ -152,7 +152,7 @@ Topics covered: - Multiple axis configuration - Inverse and opposed axes -📄 **Read:** [references/data-handling.md](references/data-handling.md) +📄 **Read:** [references/data-handling.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/data-handling.md) Use this when: - Binding data sources to charts @@ -173,7 +173,7 @@ Topics covered: ### Visual Elements -📄 **Read:** [references/visual-elements.md](references/visual-elements.md) +📄 **Read:** [references/visual-elements.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/visual-elements.md) Use this when: - Adding data markers to chart points @@ -191,7 +191,7 @@ Topics covered: - Chart annotations (text, shapes, images) - Gradient color fills -📄 **Read:** [references/legend.md](references/legend.md) +📄 **Read:** [references/legend.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/legend.md) Use this when: - Enabling and configuring chart legend @@ -212,7 +212,7 @@ Topics covered: ### Interactive Features -📄 **Read:** [references/interactive-features.md](references/interactive-features.md) +📄 **Read:** [references/interactive-features.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/interactive-features.md) Use this when: - Enabling tooltips with custom formatting @@ -234,7 +234,7 @@ Topics covered: ### Customization and Appearance -📄 **Read:** [references/appearance-styling.md](references/appearance-styling.md) +📄 **Read:** [references/appearance-styling.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/appearance-styling.md) Use this when: - Customizing chart appearance and themes @@ -253,7 +253,7 @@ Topics covered: - Background and border styling - Gradient customization -📄 **Read:** [references/advanced-features.md](references/advanced-features.md) +📄 **Read:** [references/advanced-features.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/advanced-features.md) Use this when: - Adding technical indicators (EMA, SMA, RSI, etc.) @@ -274,7 +274,7 @@ Topics covered: ### Accessibility and Internationalization -📄 **Read:** [references/accessibility-internationalization.md](references/accessibility-internationalization.md) +📄 **Read:** [references/accessibility-internationalization.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/accessibility-internationalization.md) Use this when: - Implementing accessible charts (ARIA, keyboard nav) @@ -296,7 +296,7 @@ Topics covered: ### Events -📄 **Read:** [references/events.md](references/events.md) +📄 **Read:** [references/events.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/events.md) Use this when: - Handling chart lifecycle events @@ -319,7 +319,7 @@ Topics covered: ### Practical Examples and How-To Guides -📄 **Read:** [references/practical-examples.md](references/practical-examples.md) +📄 **Read:** [references/practical-examples.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/practical-examples.md) Use this for common implementation scenarios: - Adding/removing series dynamically @@ -387,7 +387,7 @@ The `SfChart` component provides several public methods for programmatic control } ``` -**See [references/api-reference.md](references/api-reference.md) for complete method documentation.** +**See [references/api-reference.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/references/api-reference.md) for complete method documentation.** --- diff --git a/.github/skills/syncfusion-blazor-toolkit-inputs/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-inputs/SKILL.md index c99e1a14..22d11ca4 100644 --- a/.github/skills/syncfusion-blazor-toolkit-inputs/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-inputs/SKILL.md @@ -17,7 +17,7 @@ description: > compatibility: ".NET 8+, render-modes: Static SSR (text/checkbox/numeric/Switch); Server, WebAssembly, Auto (all)" metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit - Input Components @@ -215,19 +215,19 @@ or hard-code the culture in `Format`: | Component family | Read | |---|---| -| Setup, CSS imports, theming | [references/getting-started-inputs.md](references/getting-started-inputs.md) | -| `SfTextBox`, `SfTextArea`, floating labels, focus/blur, validation states | [references/textbox-textarea.md](references/textbox-textarea.md) | -| `SfNumericTextBox`, currency, percentage, Min/Max/Step, decimals, spin buttons | [references/numeric-currency.md](references/numeric-currency.md) | -| `SfUploader` (auto upload, multi-file, size/type validation, progress, drag-drop, errors) | [references/uploader.md](references/uploader.md) | -| `SfCheckBox`, `SfRadioButton`, `SfSwitch`, grouped/conditional patterns | [references/checkbox-radio-switch.md](references/checkbox-radio-switch.md) | -| WCAG / keyboard / ARIA / labels / error announcement | [references/input-accessibility.md](references/input-accessibility.md) | +| Setup, CSS imports, theming | [references/getting-started-inputs.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/getting-started-inputs.md) | +| `SfTextBox`, `SfTextArea`, floating labels, focus/blur, validation states | [references/textbox-textarea.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/textbox-textarea.md) | +| `SfNumericTextBox`, currency, percentage, Min/Max/Step, decimals, spin buttons | [references/numeric-currency.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/numeric-currency.md) | +| `SfUploader` (auto upload, multi-file, size/type validation, progress, drag-drop, errors) | [references/uploader.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/uploader.md) | +| `SfCheckBox`, `SfRadioButton`, `SfSwitch`, grouped/conditional patterns | [references/checkbox-radio-switch.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/checkbox-radio-switch.md) | +| WCAG / keyboard / ARIA / labels / error announcement | [references/input-accessibility.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/input-accessibility.md) | --- ## Next Steps -1. **Setup:** [references/getting-started-inputs.md](references/getting-started-inputs.md) +1. **Setup:** [references/getting-started-inputs.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/getting-started-inputs.md) 2. **Component you're using:** one of the per-component references above -3. **Accessibility audit:** [references/input-accessibility.md](references/input-accessibility.md) +3. **Accessibility audit:** [references/input-accessibility.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/references/input-accessibility.md) **Demo:** https://blazor.syncfusion.com/demos/toolkit/inputs \ No newline at end of file diff --git a/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md index 601e5f84..885b70a1 100644 --- a/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md @@ -18,7 +18,7 @@ description: > compatibility: ".NET 8+, render-modes: Server, WebAssembly, Auto" metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit: Notifications & Loading Indicators @@ -119,7 +119,7 @@ private async Task Submit() will click away. **Fix:** use a modal dialog (load -[syncfusion-blazor-toolkit-dialog](../syncfusion-blazor-toolkit-popups/dialog/SKILL.md)). +[syncfusion-blazor-toolkit-dialog](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md)). ```razor @@ -176,12 +176,12 @@ on the button area conflict with the inner spinner's wrapper. ``` **Fix #2 — external spinner overlay around the whole form:** -see [references/spinner-overlay.md §2.5](references/spinner-overlay.md#25-form-submission-spinner-editform--sfspinner) +see [references/spinner-overlay.md §2.5](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-overlay.md#25-form-submission-spinner-editform--sfspinner) for the canonical EditForm + form-overlay composition pattern. -> See also: [references/spinner-template.md](references/spinner-template.md) +> See also: [references/spinner-template.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-template.md) > (custom visuals + composition) and -> [references/spinner-overlay.md](references/spinner-overlay.md) +> [references/spinner-overlay.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-overlay.md) > (full-page, region, modal overlays). ## Minimal Example @@ -200,7 +200,7 @@ for the canonical EditForm + form-overlay composition pattern. ``` For installation, services, visibility control, labels, CSS classes, and -size/positioning see [references/spinner-implementation.md](references/spinner-implementation.md). +size/positioning see [references/spinner-implementation.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-implementation.md). --- @@ -208,17 +208,17 @@ size/positioning see [references/spinner-implementation.md](references/spinner-i | Need | Read | |---|---| -| Setup, services, theme, visibility, labels, CSS, sizing | [references/spinner-implementation.md](references/spinner-implementation.md) | -| `OnOpen` / `OnClose` / `Created` / `Destroyed`, cancellation, templates | [references/spinner-events-customization.md](references/spinner-events-customization.md) | -| WCAG / keyboard / screen reader | [references/accessibility-best-practices.md](references/accessibility-best-practices.md) | -| Branded visuals, `SpinType`, CSS variables | [references/spinner-template.md](references/spinner-template.md) | -| Overlay patterns (page / region / modal / scroll-lock) | [references/spinner-overlay.md](references/spinner-overlay.md) | +| Setup, services, theme, visibility, labels, CSS, sizing | [references/spinner-implementation.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-implementation.md) | +| `OnOpen` / `OnClose` / `Created` / `Destroyed`, cancellation, templates | [references/spinner-events-customization.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-events-customization.md) | +| WCAG / keyboard / screen reader | [references/accessibility-best-practices.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/accessibility-best-practices.md) | +| Branded visuals, `SpinType`, CSS variables | [references/spinner-template.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-template.md) | +| Overlay patterns (page / region / modal / scroll-lock) | [references/spinner-overlay.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-overlay.md) | --- ## Next Steps -1. **Setup:** [references/spinner-implementation.md](references/spinner-implementation.md) -2. **Overlay patterns:** [references/spinner-overlay.md](references/spinner-overlay.md) +1. **Setup:** [references/spinner-implementation.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-implementation.md) +2. **Overlay patterns:** [references/spinner-overlay.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/references/spinner-overlay.md) **Demo:** https://blazor.syncfusion.com/demos/toolkit/spinner \ No newline at end of file diff --git a/.github/skills/syncfusion-blazor-toolkit-popups/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-popups/SKILL.md index 72343b14..c4937a05 100644 --- a/.github/skills/syncfusion-blazor-toolkit-popups/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-popups/SKILL.md @@ -14,7 +14,7 @@ description: > syncfusion-blazor-toolkit-notifications). metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit: Popups (Router) @@ -28,18 +28,18 @@ read the link below. | Requirement | Component | Load | |---|---|---| -| Confirmation modal (Yes/No) | `SfDialog` | [dialog/SKILL.md](dialog/SKILL.md) | -| Form-in-modal (login, register, settings) | `SfDialog` | [dialog/SKILL.md](dialog/SKILL.md) | -| Alert dialog ("Saved", "Error", "Confirm delete") | `SfDialog` | [dialog/SKILL.md](dialog/SKILL.md) | -| Modal driven by a service from many call sites | `SfDialog` + `DialogService` | [dialog/SKILL.md](dialog/SKILL.md) | +| Confirmation modal (Yes/No) | `SfDialog` | [dialog/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md) | +| Form-in-modal (login, register, settings) | `SfDialog` | [dialog/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md) | +| Alert dialog ("Saved", "Error", "Confirm delete") | `SfDialog` | [dialog/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md) | +| Modal driven by a service from many call sites | `SfDialog` + `DialogService` | [dialog/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md) | | Help text on an icon button | `SfTooltip` | [tooltip/SKILL.md](tooltip/SKILL.md) | -| Keyboard-shortcut hint ("Ctrl+S") | `SfTooltip` | [tooltip/SKILL.md](tooltip/SKILL.md) | -| Brief status / validation copy on hover | `SfTooltip` | [tooltip/SKILL.md](tooltip/SKILL.md) | -| HTML / rich content shown on hover | `SfTooltip` + `ContentTemplate` | [tooltip/SKILL.md](tooltip/SKILL.md) | +| Keyboard-shortcut hint ("Ctrl+S") | `SfTooltip` | [tooltip/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md) | +| Brief status / validation copy on hover | `SfTooltip` | [tooltip/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md) | +| HTML / rich content shown on hover | `SfTooltip` + `ContentTemplate` | [tooltip/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md) | ## Cross-Component Decision Matrix -📄 **Read:** [router/dialog-vs-tooltip-decision-matrix.md](router/dialog-vs-tooltip-decision-matrix.md) +📄 **Read:** [router/dialog-vs-tooltip-decision-matrix.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/router/dialog-vs-tooltip-decision-matrix.md) **Read this when:** - You're not sure which component to use @@ -52,8 +52,8 @@ decision cheat-sheet. ## Sub-Skills -- [syncfusion-blazor-toolkit-dialog](dialog/SKILL.md) — `SfDialog` -- [syncfusion-blazor-toolkit-tooltip](tooltip/SKILL.md) — `SfTooltip` +- [syncfusion-blazor-toolkit-dialog](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md) — `SfDialog` +- [syncfusion-blazor-toolkit-tooltip](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md) — `SfTooltip` ## Cross-References to Other Toolkit Skills @@ -74,5 +74,5 @@ decision cheat-sheet. ## Next Steps After reading the decision matrix: -- Building a modal? Open [dialog/SKILL.md](dialog/SKILL.md). -- Building hover help? Open [tooltip/SKILL.md](tooltip/SKILL.md). \ No newline at end of file +- Building a modal? Open [dialog/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md). +- Building hover help? Open [tooltip/SKILL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md). \ No newline at end of file diff --git a/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md index 427b2149..fb6daba9 100644 --- a/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md @@ -1,6 +1,6 @@ --- license: MIT -name: syncfusion-blazor-toolkit-dialog +name: dialog description: > Implement Syncfusion Blazor Toolkit SfDialog — modal and modeless windows with buttons, drag, resize, focus trap, ARIA semantics, and animation. @@ -13,7 +13,7 @@ description: > primitive. metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit: Dialog (SfDialog) @@ -87,12 +87,12 @@ Need a dialog? | Need | Read | |---|---| -| First modal / project setup | [references/dialog-basics.md](references/dialog-basics.md) | -| Properties, events, methods, animation surface (this skill's table-of-truth) | [references/dialog-properties.md](references/dialog-properties.md) | -| Service-pattern, dynamic creator, wizard, cascading integration | [references/dialog-advanced.md](references/dialog-advanced.md) | +| First modal / project setup | [references/dialog-basics.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-basics.md) | +| Properties, events, methods, animation surface (this skill's table-of-truth) | [references/dialog-properties.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-properties.md) | +| Service-pattern, dynamic creator, wizard, cascading integration | [references/dialog-advanced.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-advanced.md) | For cross-component decision matrix (dialog vs tooltip vs popover), see -[../router/dialog-vs-tooltip-decision-matrix.md](../router/dialog-vs-tooltip-decision-matrix.md). +[../router/dialog-vs-tooltip-decision-matrix.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/router/dialog-vs-tooltip-decision-matrix.md). ## Top 5 Properties You'll Use @@ -104,7 +104,7 @@ For cross-component decision matrix (dialog vs tooltip vs popover), see | `ShowCloseIcon` | Mouse-only users have no other dismiss affordance; pair with `CloseOnEscape="true"` | | `DialogAnimationSettings` / `Animation` | `DialogEffect` enum — pick exactly one (`Fade`/`Zoom`/`Slide*`/`None`) | -Full property/event/method/animation reference: [references/dialog-properties.md](references/dialog-properties.md). +Full property/event/method/animation reference: [references/dialog-properties.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-properties.md). ## Common Patterns @@ -299,8 +299,8 @@ dialog still being open afterwards. ## Next Steps -1. **First modal:** [references/dialog-basics.md](references/dialog-basics.md) -2. **Service pattern / dynamic creator / wizard:** [references/dialog-advanced.md](references/dialog-advanced.md) -3. **Cross-skill decision matrix:** [../router/dialog-vs-tooltip-decision-matrix.md](../router/dialog-vs-tooltip-decision-matrix.md) +1. **First modal:** [references/dialog-basics.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-basics.md) +2. **Service pattern / dynamic creator / wizard:** [references/dialog-advanced.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-advanced.md) +3. **Cross-skill decision matrix:** [../router/dialog-vs-tooltip-decision-matrix.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/router/dialog-vs-tooltip-decision-matrix.md) **Demo:** https://blazor.syncfusion.com/demos/toolkit/dialogs \ No newline at end of file diff --git a/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md b/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md index b26a0868..354452b1 100644 --- a/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md +++ b/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/SKILL.md @@ -14,7 +14,7 @@ description: > overlays (use syncfusion-blazor-toolkit-notifications / SfSpinner). metadata: author: "Syncfusion Inc" - version: "1.0.0" + version: "1.0.0" # skill document revision only — not the NuGet package version (package is 2.x) --- # Syncfusion Blazor Toolkit: Tooltip (SfTooltip) @@ -68,13 +68,13 @@ see the **Common Patterns** section below. ## When to Use Tooltip vs Dialog If you're unsure, read the cross-skill decision matrix first: -[router/dialog-vs-tooltip-decision-matrix.md](../router/dialog-vs-tooltip-decision-matrix.md). +[router/dialog-vs-tooltip-decision-matrix.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/router/dialog-vs-tooltip-decision-matrix.md). ## Documentation and Navigation Guide | Need | Read | |---|---| -| Setup, properties, all triggers, RTL, full examples | [references/tooltip-implementation.md](references/tooltip-implementation.md) | +| Setup, properties, all triggers, RTL, full examples | [references/tooltip-implementation.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/references/tooltip-implementation.md) | ## Common Patterns @@ -155,7 +155,7 @@ If you're unsure, read the cross-skill decision matrix first: | Esc dismiss | Default | | Disabled buttons | Wrap in focusable `` — see Pattern 3 | -> ⚠️ Tooltips are **static** (`role="tooltip"`, not `role="alert"`). Don't rely on them for async announcements — use [SfSpinner](../syncfusion-blazor-toolkit-notifications/SKILL.md) for that. +> ⚠️ Tooltips are **static** (`role="tooltip"`, not `role="alert"`). Don't rely on them for async announcements — use [SfSpinner](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md) for that. ## Decision Tree @@ -321,11 +321,11 @@ the trigger DOM automatically.) ## Next Steps 1. **First tooltip:** read - [tooltip-implementation.md](references/tooltip-implementation.md). + [tooltip-implementation.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/tooltip/references/tooltip-implementation.md). 2. **Modal confirm / block UI:** exit this skill and load - [syncfusion-blazor-toolkit-dialog](../dialog/SKILL.md). + [syncfusion-blazor-toolkit-dialog](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md). 3. **In doubt:** read - [router/dialog-vs-tooltip-decision-matrix.md](../router/dialog-vs-tooltip-decision-matrix.md). + [router/dialog-vs-tooltip-decision-matrix.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/router/dialog-vs-tooltip-decision-matrix.md). **Demo:** Syncfusion Blazor Toolkit official demo at https://blazor.syncfusion.com/demos/toolkit/tooltip diff --git a/CHANGELOG.md b/CHANGELOG.md index 62faf1ea..50c23358 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,9 @@ Notable changes to the **Syncfusion® Toolkit for Blazor**, with historical summaries attributed to upstream release notes. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Historical version labels are preserved as published; see the [development guide](.github/DEVELOPMENT.md#versioning-and-evidence-status) for versioning and compatibility guidance. +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Historical version labels are preserved as published; see the [development guide](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/DEVELOPMENT.md#versioning-and-evidence-status) for versioning and compatibility guidance. -## [2.0.1] - 2026-10-16 +## [2.0.1] - 2026-10-19 ### Added @@ -49,7 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). or the equivalent in `_Imports.razor` / C# files. Update any fully qualified type names accordingly. -- **API surface (approved 2.0 contract)** — Compared to NuGet 1.0.2, 194 named compatibility diagnostics are accepted for this major version (type visibility, collection signatures, getter-only ownership, parent metadata types, static helper construction, and `DataAdaptor where T : notnull`). Full list and migration guidance: [API-COMPATIBILITY.md](API-COMPATIBILITY.md) and [API-BREAK-INVENTORY.md](API-BREAK-INVENTORY.md). +- **API surface (approved 2.0 contract)** — Compared to NuGet 1.0.2, 194 named compatibility diagnostics are accepted for this major version (type visibility, collection signatures, getter-only ownership, parent metadata types, static helper construction, and `DataAdaptor where T : notnull`). Full list and migration guidance: [API-COMPATIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-COMPATIBILITY.md) and [API-BREAK-INVENTORY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-BREAK-INVENTORY.md). - Chart: many formerly public renderer/internal types are now internal — use public components, settings, events, and templates; do not subclass or construct internal renderers. - Collections: several `List` public members are now `IList` / interface contracts — do not cast results to `List`. - `UploadedFiles.Files` and protected `ChartData.CurrentPoints` are getter-only for ownership; mutate via Clear/Add, do not replace the list. @@ -167,11 +167,11 @@ Scoped summary of the [upstream v1.0.2 release notes](https://github.com/syncfus - Uploader file-list rendering/updates and Spinner overlay rendering. -## [1.0.1] - 2026-06-26 +## [1.0.1] - 2026-06-27 -The [upstream v1.0.1 release notes](https://github.com/syncfusion/blazor-toolkit/releases/tag/v1.0.1) describe the component offering across buttons and selection controls, calendars, text/numeric inputs, uploads, popups, Spinner and Chart. Chart highlights include core and stacking series, annotations/data labels, axes, legends, tooltips, selection, zooming and panning. This is a scoped historical summary, not an endorsement of every capability or readiness claim in those notes; use the [current component guidance](README.md#components) for source-supported APIs. +The [upstream v1.0.1 release notes](https://github.com/syncfusion/blazor-toolkit/releases/tag/v1.0.1) describe the component offering across buttons and selection controls, calendars, text/numeric inputs, uploads, popups, Spinner and Chart. Chart highlights include core and stacking series, annotations/data labels, axes, legends, tooltips, selection, zooming and panning. This is a scoped historical summary, not an endorsement of every capability or readiness claim in those notes; use the [current component guidance](https://github.com/syncfusion/blazor-toolkit/blob/main/README.md#components) for source-supported APIs. -## [1.0.0] - 2026-10-01 +## [1.0.0] - 2026-06-22 Initial public release of the open-source, MIT-licensed toolkit. diff --git a/README.md b/README.md index 03c698c7..1ee333b3 100644 --- a/README.md +++ b/README.md @@ -84,14 +84,19 @@ blazor-toolkit/ │ ├── Base/ # Shared infrastructure (ComponentBase, event callbacks, utilities) │ ├── Components/ # UI components by domain (Buttons/, Calendars/, Charts/, Inputs/, Popups/, Spinner/) │ │ └── / # Each component has its own folder (SfButton/, SfChart/, etc.) -│ └── wwwroot/ # Static assets: JavaScript, CSS, and generated theme files +│ ├── Data/ # Shared data manager / adaptor infrastructure +│ └── wwwroot/ # Static assets (primarily JavaScript interop scripts) │ └── styles/ # Theme CSS generated by gulp — do not edit by hand ├── samples/ # Sample browser application +│ ├── Blazor.Toolkit.Samples/ # Host app +│ ├── Blazor.Toolkit.Samples.Client/ # WASM client app +│ └── Blazor.Toolkit.Samples.slnx # Solution to open in VS ├── tests/ # Test suites -│ ├── BUnitTest/ # Component unit tests (bUnit + xUnit) -│ └── Playwright.Test/ # Browser automation and visual regression tests +│ ├── Syncfusion.Blazor.Toolkit.BUnitTest/ # Component unit tests (bUnit + xUnit) +│ └── Syncfusion.Blazor.Playwright.Test/ # Browser automation and visual regression tests └── .github/ # Architecture, coding standards, and development documentation ``` +> **Styles** — Component CSS is colocated as `.razor.css` (CSS isolation). Shared theme styles are delivered by `SfThemeRoot` at render time; separate toolkit theme CSS links are not required for the common case. ## Development Workflow @@ -135,16 +140,30 @@ For full details on commit style, PR requirements, and review criteria, see the | Layout | Tooltip | Lightweight popup that displays contextual information when users hover over, focus on, or interact with a target element, with customizable positioning and animation support. | | Notification | Spinner | Loading indicator with customizable size, type, and overlay for async operations. | +## Demo + +Explore interactive component showcases on the [Syncfusion® Blazor Toolkit Demo](https://blazor.syncfusion.com/demos/toolkit/) site. The demos illustrate usage patterns, features, and theming for the toolkit controls in a live Blazor environment. + +The same sample browser application is maintained in this repository under the [samples/](https://github.com/syncfusion/blazor-toolkit/tree/main/samples) folder: + +| Path | Purpose | +|------|---------| +| [samples/](https://github.com/syncfusion/blazor-toolkit/tree/main/samples) | Host sample application | +| [`samples/Blazor.Toolkit.Samples.Client`](https://github.com/syncfusion/blazor-toolkit/tree/main/samples/Blazor.Toolkit.Samples.Client) | Client (WebAssembly) sample project | +| [`samples/Blazor.Toolkit.Samples.slnx`](https://github.com/syncfusion/blazor-toolkit/blob/main/samples/Blazor.Toolkit.Samples.slnx) | Solution file for the sample apps | + +To run the demos locally, open `samples/Blazor.Toolkit.Samples.slnx` in Visual Studio, set the desired sample project as the startup project, and run. See [Quick Contributor Start](#quick-contributor-start) for clone and build steps. + ## Skills and Component Guidance The repository includes specialized skill files that document component usage patterns and implementation guidance for the major toolkit areas: -- [Buttons skill](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/skills/syncfusion-blazor-toolkit-buttons/SKILL.md) -- [Calendars skill](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/skills/syncfusion-blazor-toolkit-calendars/SKILL.md) -- [Charts skill](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/skills/syncfusion-blazor-toolkit-charts/SKILL.md) -- [Inputs skill](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/skills/syncfusion-blazor-toolkit-inputs/SKILL.md) -- [Notifications skill](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md) -- [Popups skill](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/skills/syncfusion-blazor-toolkit-popups/SKILL.md) +- [Buttons skill](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-buttons/SKILL.md) +- [Calendars skill](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-calendars/SKILL.md) +- [Charts skill](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-charts/SKILL.md) +- [Inputs skill](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-inputs/SKILL.md) +- [Notifications skill](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-notifications/SKILL.md) +- [Popups skill](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/skills/syncfusion-blazor-toolkit-popups/SKILL.md) These skill files are intended to help contributors and maintainers understand the supported patterns, accessibility expectations, and implementation conventions for each toolkit area. @@ -165,7 +184,7 @@ There are two ways to get started with the Syncfusion Blazor Toolkit. Pick the o ### Using Templates (Recommended) -The fastest way to get started is to scaffold a new Blazor application with the Syncfusion Blazor Toolkit using the [`Syncfusion.Blazor.Toolkit.Templates`](https://www.nuget.org/packages/Syncfusion.Blazor.Toolkit.Templates#readme-body-tab) NuGet package. The templates are pre-configured with the toolkit, theming, and a recommended project structure so you can start building immediately. +The fastest way to get started is to scaffold a new Blazor application with the Syncfusion Blazor Toolkit using the [`Syncfusion.Blazor.Toolkit.Templates`](https://www.nuget.org/packages/Syncfusion.Blazor.Toolkit.Templates#readme-body-tab) package (also available on [GitHub Packages](https://github.com/syncfusion/blazor-toolkit-templates/pkgs/nuget/Syncfusion.Blazor.Toolkit.Templates)). The templates are pre-configured with the toolkit, theming, and a recommended project structure so you can start building immediately. Install the templates and create a project: @@ -186,7 +205,7 @@ After the project is created, run it from the root folder: dotnet watch ``` -For a full list of template options (interactive render mode, global interactivity, PWA support, and more), see the [`Syncfusion.Blazor.Toolkit.Templates`](https://www.nuget.org/packages/Syncfusion.Blazor.Toolkit.Templates#readme-body-tab) NuGet package README. +For a full list of template options (interactive render mode, global interactivity, PWA support, and more), see the [`Syncfusion.Blazor.Toolkit.Templates`](https://www.nuget.org/packages/Syncfusion.Blazor.Toolkit.Templates#readme-body-tab) package README on NuGet or the [GitHub Packages](https://github.com/syncfusion/blazor-toolkit-templates/pkgs/nuget/Syncfusion.Blazor.Toolkit.Templates) listing. ### Manual Integration @@ -205,6 +224,7 @@ dotnet add package Syncfusion.Blazor.Toolkit Alternatively, add it directly in your `.csproj` file: ```xml + ``` @@ -357,9 +377,30 @@ This project exists thanks to all the people who contribute. ## Accessibility -The toolkit aims to conform to **WCAG 2.2 Level AA**. The current conformance statement and supporting evidence live in -[`.github/ACCESSIBILITY.md`](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/ACCESSIBILITY.md), with the latest screen-reader smoke matrix at -[`.github/accessibility/screen-reader-smoke.md`](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/accessibility/screen-reader-smoke.md). Known limitations are tracked as GitHub issues labelled `accessibility`. +The toolkit aims to conform to **WCAG 2.2 Level AA**. See: + +- [`.github/ACCESSIBILITY.md`](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/ACCESSIBILITY.md) — conformance statement +- [`.github/accessibility/screen-reader-smoke.md`](https://github.com/syncfusion/blazor-toolkit/tree/main/.github/accessibility/screen-reader-smoke.md) — screen-reader smoke matrix +- [`docs/VPAT-2.5-INT.md`](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/VPAT-2.5-INT.md) — formal VPAT 2.5 + +Known limitations are tracked as GitHub issues labelled `accessibility`. + +## Changelog + +Release history for the Syncfusion® Blazor Toolkit is maintained in [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md). That file documents version-specific changes, improvements, bug fixes, and breaking changes for each release. Refer to it when upgrading or reviewing what changed between versions. + +## Roadmap + +Direction and priorities are in [ROADMAP.md](https://github.com/syncfusion/blazor-toolkit/blob/main/ROADMAP.md). Chart remains the flagship, quality gates come before breadth, and **no Data Grid is planned**. Items listed there are exploration only — not a release schedule or compatibility guarantee. + +## Migration (2.0) + +For namespace, API, and theme migration in 2.0, see: + +- [docs/API-COMPATIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-COMPATIBILITY.md) +- [docs/API-BREAK-INVENTORY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-BREAK-INVENTORY.md) + +Also review [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md) under `[2.0.0]`. ## About Syncfusion® diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000..150b85f3 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,177 @@ +# Roadmap — Syncfusion® Toolkit for Blazor + +**Chart-first, quality before breadth.** + +Chart is the flagship component. The MIT toolkit remains independently useful. **No Data Grid is planned.** Growth toward 40+ supporting components is exploratory, without a promised list or dates. + +This document represents the major investments maintainers intend to pursue. It is **not** approval of a release schedule, a compatibility guarantee, or a funded support commitment. Component selection, scope, and timing remain subject to maintainer review and community feedback. Many items require investigation and design; plans may change, items may be cut or deferred, and this document will be updated to reflect progress and learnings. + +[README](https://github.com/syncfusion/blazor-toolkit/blob/main/README.md) · [Changelog](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md) · [Documentation index](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/Index.md) · [Test evidence matrix](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/TEST-MATRIX.md) + +Community input is welcome. Prefer issues and discussions that include a concrete scenario, render-mode matrix, expected behavior, and measurements. Support for specific proposals is best expressed by reactions and detailed scenario comments on the original issue. + +--- + +## Proposed themes + +* **Address top feedback and pain points** — reliability, accessibility, and quality of what already ships +* **Fundamentals** — security, observability of quality (tests, a11y, trim/AOT evidence), supply-chain hygiene +* **Invest in the modern stack** — Chart as flagship; supporting form and layout primitives that complete common dashboards +* **Quality before breadth** — no aggressive series parity or dated component lists; no multi-provider theme matrix +* **Community-shaped exploration** — supporting components and optional tracks only after evidence gates + +This roadmap deliberately does **not** adopt competitor shipping cadence, component counts, AI surfaces, or grid-family products that conflict with the charter or current source. + +--- + +## How this document was shaped + +| Pattern considered | Fit | What this roadmap does | +|---|---|---| +| Chart series expansion (pie/doughnut, radar, financial, waterfall, heatmap, range) | Suitable as evaluation only | Listed under Chart evolution. Not a delivery commitment. Public `ChartSeriesType` does not include these values. | +| Accessibility evidence over conformance claims | Suitable | Priority 2. WCAG 2.2 AA remains a goal; measured application-level results are the gate. | +| Trimming / WebAssembly AOT publish evidence | Suitable | Library already declares `IsTrimmable` / `IsAotCompatible` and enables analyzers. Missing piece: supported-host publish logs and runtime checks. | +| CSS-variable theming and opt-in alternate themes | Suitable, scoped | `SfThemeRoot` already emits tokens + dark / high-contrast / forced-colors. Material 3, Fluent 2, Bootstrap-aligned themes = evaluation only, must stay opt-in. | +| Localization and RTL | Suitable after quality gates | Culture-aware date/number formatting exists. First-class RTL surface is not in the public API → evaluation track. | +| Layout primitives for chart dashboards and forms | Suitable if gated | Tab, list, menu, dropdown/autocomplete planned for evaluation. Sidebar and Card are not yet public components. | +| Supply-chain and dependency triage | Suitable | Standing gate via [SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md) and committed SBOM. | +| Community influence via issues/discussions | Suitable | Unchanged. Proposals need scenario, render mode, behavior, measurements. | +| AI chat, tool calling, smart paste, MCP helpers | Not suitable now | No AI surface in-repo. Deferred until Chart + a11y evidence is solid. | +| Data Grid, TreeGrid, Pivot, Spreadsheet, Gantt, Scheduler | Not suitable | Explicit non-goals. | +| Multi-CSS provider model (Bootstrap, Tailwind, Material, Ant Design as peers) | Not suitable | One tokenized theme + contrast variants only. | +| Aggressive series parity or dated component lists | Not suitable | Exploration only. No dates, no parity promises. | + +--- + +## Present in the current source + +Checked against package **2.0.1**. Public types live under `Syncfusion.Blazor.Toolkit`. + +| Area | Current scope | +|---|---| +| **Chart** | 21 public `ChartSeriesType` values (line, area, column, bar, scatter, bubble, spline, spline area, step line, step area, multicolored line/area, stacking variants including 100% and stacking step area). Axes, legends, tooltips, selection, zoom/pan, annotations, data labels, trendlines, striplines. | +| **Buttons & selection** | Button, ButtonGroup, CheckBox, RadioButton, Switch | +| **Calendars** | Calendar, DatePicker, DateTimePicker, TimePicker | +| **Inputs** | TextBox, TextArea, NumericTextBox, Uploader | +| **Popups & notification** | Dialog, Tooltip, Spinner. `Popups/Popup` is a model only — not a shipped `SfPopup`. | +| **Theme** | `SfThemeRoot`: one shared CSS-variable layer (default, dark, high-contrast, forced-colors). Component CSS isolated. No alternate design-system themes shipped. | +| **Targets** | .NET 8 / 9 / 10. Render-mode requirements vary; TFMs and sample hosts do not prove equivalent behavior in every mode. See [component guidance](https://github.com/syncfusion/blazor-toolkit/blob/main/README.md#skills-and-component-guidance) and [render-mode guidance](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/RENDER-MODE-SECURITY.md). | + +**Already present (not future work):** Chart annotations, trendlines, striplines. + +**Not in current Chart API:** pie/doughnut, radar/spider, polar, financial (candlestick/OHLC), waterfall, heatmap, range series, technical indicators. + +**Explicitly absent and not committed:** Data Grid (or any grid family). + +--- + +## Priorities + +Order is intentional. Competitor breadth does not reorder these gates. Priority is driven by user impact, accessibility/security risk, maintenance cost, and available validation — **not** component count. + +| Order | Focus | Scenarios and evidence sought | +|---|---|---| +| **1** | Chart reliability and usability | Null/empty data, sorting, concurrent layouts, live updates, disposal; reproducible regressions and measurements for larger datasets. No virtualization or performance threshold promised. | +| **2** | Accessibility in composed applications | Chart text alternatives, keyboard/focus, labels & validation, forced-colors, screen-reader checks; retain browser and AT versions + results. | +| **3** | Existing component quality | Calendar culture & date boundaries, input validation, upload failure handling, popup focus/exit, loading announcements. | +| **4** | Broader validation and release evidence | SDK/runtime job gaps, browser & render-mode checks, trimmed/WebAssembly AOT publish logs + runtime checks, package metadata and dependency evidence. | +| **5** | Supporting component breadth | Explore additions that complement charts and common forms/layouts — only after scope, maintenance cost, and evidence needs are reviewed. | + +--- + +## Chart evolution + +Chart remains the flagship. New series are **evaluation candidates**, not commitments. A candidate advances only with: + +- concrete user scenario +- render-mode matrix +- accessibility plan +- reproducible performance notes + +Live-update and disposal evidence for **already shipped** series stays ahead of new types. + +| Candidate | Why listed | Gate | +|---|---|---| +| Pie / doughnut | Common composition next to cartesian series; not in `ChartSeriesType` | Scenario + a11y text alternative + empty-data behavior | +| Radar / spider | Common ask in comparable libraries; different axis model | Do not start until Priority 1 cartesian reliability evidence exists | +| Basic financial (candlestick / OHLC) | Distinct from a full stock-chart suite | Bounded scenario only; technical indicators and stock-chart shell out of scope | +| Waterfall, heatmap, range variants | Useful dashboard complements; each has layout + a11y cost | Evaluate one at a time; do not batch into a “series parity” release | + +**Out of scope** unless both strong community demand **and** a validation plan exist: technical indicators, full stock-chart suite, 3D charts, any promise of virtualization or numeric performance thresholds. + +--- + +## Supporting components + +Names below are exploration and planning only. **Sidebar, Card, Tab, dropdowns, List, AutoComplete, and Menu are not present as public components.** Popup is a model under `Popups/Popup`, not a finished component. Order, scope, and timing may change. + +| Status | Components | Notes | +|---|---|---| +| **In progress** | Sidebar, Card, Popup | Not shipped. Each needs public API sketch, accessibility plan, and render-mode evidence before treated as implemented. | +| **Planned for evaluation** | Tab, Dropdowns (select / autocomplete), List, AutoComplete, Menu | Prefer controls that complete common form and chart-dashboard layouts. | +| **Future opportunities** | Additional navigation/layout (app bar, drawer variants), data-entry helpers, basic timeline (only if evidence justifies) | Scheduler-like, Gantt, spreadsheet, and grid-family controls are **not** in this set. | + +### Candidate checklist (required before implementation) + +- What user scenario does it serve that existing Dialog, Tooltip, inputs, or Chart cannot? +- Which render modes are in scope, and which are explicitly unsupported? +- What is the accessibility plan (name, role, keyboard, focus exit, forced colors)? +- What is the bundle-size and theme-surface impact on the single tokenized theme? +- What localization or RTL surface does it add, if any? +- Does it reduce pressure to add a Data Grid, or does it quietly become one? + +Inclusion in the table is **not** a delivery commitment, release guarantee, compatibility promise, or timeline. + +--- + +## Cross-cutting tracks + +These do **not** outrank Priorities 1–4. + +### Theming +Keep the current tokenized theme (default, dark, high-contrast, forced-colors) as the default. Material 3, Fluent 2, or Bootstrap-aligned themes may be evaluated **only** as opt-in packs that reuse existing CSS variables. Do **not** adopt a multi-provider CSS architecture. + +### Localization and RTL +Continue improving culture and date-boundary evidence for calendars and numeric inputs. A documented RTL/direction story is in scope only after the quality gates above. Do not claim RTL support the public API does not expose. + +### Trimming, AOT, and bundle size +Declarations and analyzers are already enabled. Follow-up: supported-host publish logs and runtime checks. Analyzer-clean builds are not deployment certification. + +### Supply chain +Continue monthly dependency triage, SBOM checksum review, and shipped-script coverage described in [SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md) and [artifacts/sbom/README.md](https://github.com/syncfusion/blazor-toolkit/blob/main/artifacts/sbom/README.md). This is a standing release gate. + +### AI-assisted experiences +**Not in scope at this time.** Optional prompt surfaces, tool calling, or documentation helpers will not be evaluated until Chart reliability and accessibility evidence are solid. Any future surface would need to stay optional and provider-agnostic. This is a deferral, not a roadmap item. + +--- + +## Longer-term direction + +Growing toward **40+ components** is a direction for exploration, not a committed inventory, release count, or delivery date. Proposals for supporting controls, theming, localization, and RTL must show a concrete application need and a validation plan. + +This direction does **not** commit to Data Grid, TreeGrid, Pivot, or feature parity with the commercial Syncfusion suite (or any competitor). + +### Explicit non-goals + +* Data Grid or any grid family +* Feature parity with the commercial Syncfusion Blazor suite or any competitor’s component list +* Promised virtualization or numeric performance thresholds +* AI chat or tool-calling components +* A multi-CSS provider matrix + +--- + +## Current evidence vs planned validation + +Figures below are retained evidence already recorded in this repository. They are **not** a new test run, remote CI results, or release guarantees. Re-count after meaningful test changes using the command in [TEST-MATRIX.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/TEST-MATRIX.md). Historical releases: [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md). + +| Area | Evidence available now | Follow-up needed | +|---|---|---| +| **Build & unit tests** | [TEST-MATRIX.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/TEST-MATRIX.md): bUnit **2,735** tests passed (0 failed, 0 skipped) on .NET 8 as of 2026-10-03 verification note. CI declared for bUnit on .NET 8/9/10. Library **2.0.1**. | Re-count after test changes. Broader runtime evidence and released-package checks remain open. | +| **Browser coverage** | Playwright projects for visual regression and accessibility smoke; CI lists them for .NET 8/9/10. | Interaction coverage, additional hosts/browsers, full required matrix. See TEST-MATRIX.md. | +| **Accessibility** | Source mechanisms, [ACCESSIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/ACCESSIBILITY.md), screen-reader smoke notes, [docs/VPAT-2.5-INT.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/VPAT-2.5-INT.md). WCAG 2.2 AA goal, last reviewed for 2.0.1. | Measured application-level evaluations. In-repo VPAT is not by itself an approved ACR for every composed app. | +| **Trimming / AOT** | `IsTrimmable`, `IsAotCompatible`, trim/AOT analyzers set. | Supported-host publish logs and runtime checks. | +| **Security / supply chain** | [SECURITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/SECURITY.md) (self-attestation 2026-10-19), [THREAT-MODEL.md](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THREAT-MODEL.md), monthly `dotnet list package --vulnerable`, NuGet audit, CycloneDX SBOM under [artifacts/sbom/](https://github.com/syncfusion/blazor-toolkit/blob/main/artifacts/sbom/README.md). | Ongoing dependency triage, shipped-script coverage, final-package checks. | +| **API compatibility** | [CHANGELOG.md](https://github.com/syncfusion/blazor-toolkit/blob/main/CHANGELOG.md), [API-COMPATIBILITY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-COMPATIBILITY.md), [API-BREAK-INVENTORY.md](https://github.com/syncfusion/blazor-toolkit/blob/main/docs/API-BREAK-INVENTORY.md) document the 2.0 contract. | Maintainer review for any further breaks. | + +_Last evidence review: 2026-10-19, aligned to package 2.0.1 and in-repo evidence. This date does not approve a delivery schedule._ diff --git a/artifacts/sbom/README.md b/artifacts/sbom/README.md index f66ae768..a066c133 100644 --- a/artifacts/sbom/README.md +++ b/artifacts/sbom/README.md @@ -34,15 +34,17 @@ and matches the value in `sbom.cdx.json.sha256`. ## Cross-reference -`THIRD-PARTY-NOTICES.md` at the repo root is the human-readable -counterpart of this SBOM. Tooling (CycloneDX CLI, in-toto-golang, -`dotnet list package --vulnerable`) consumes this directory's -contents. +[`.github/THIRD-PARTY-NOTICES.md`](https://github.com/syncfusion/blazor-toolkit/blob/main/.github/THIRD-PARTY-NOTICES.md) +is the human-readable counterpart of this SBOM. Tooling (CycloneDX CLI, +in-toto-golang, `dotnet list package --vulnerable`) consumes this +directory's contents. ## Last updated -- 2026-09-06 — initial emission for the v1.0.0 release preview; pinned +- 2026-06-22 — initial emission for the v1.0.0 release preview; pinned here as part of MS-2.5 partner attestation. -- 2026-10-09 — recorded as the last-updated stamp; a 2.0.0 SBOM must - be regenerated against the signed `.nupkg` before the candidate - SHA is frozen (CHANGELOG.md `[2.0.0]`). \ No newline at end of file +- 2026-10-09 — 2.0.0 line; SBOM regenerated against the signed `.nupkg` + for that release (CHANGELOG.md `[2.0.0]`). +- 2026-10-19 — align with package **2.0.1** / GitHub release `v2.0.1`. + Regenerate the SBOM from the **signed** `.nupkg` on **every** release + before freezing the candidate SHA (see DEVELOPMENT.md manual sign-and-publish). \ No newline at end of file