Insert new ABP Studio UI image into the AI agent announcement and refine several paragraphs for clarity and flow. Rephrase the intro and system-shaped explanation, update the closed-loop wording to mention agent-assisted fixes, and remove the "Automatic rules and skills for your solution" bullet and the final sign-off. Adds the image file abp-studio-new-design.png and updates the markdown to include it.
Add a new Community Article announcing the ABP Studio AI Agent, detailing its modes (Agent, Plan, Ask), the Analyze engine, Solution Runner and runtime monitoring, custom workflows, Git/GitHub integration, developer loop, and short-term roadmap. Also add the article cover image. The post introduces solution-aware AI features built into ABP Studio and explains how they streamline ABP development.
* docs(studio): update documentation for release 3.0.2
- Updated release notes for 3.0.2
- Updated version mapping with ABP 10.3.0
Release: 3.0.2
* Revise release notes for version 3.0.2
Updated release notes for version 3.0.2 to include major features and enhancements.
* Update version-mapping.md
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: selman koc <64414348+skoc10@users.noreply.github.com>
MudBlazor 9 renders mud-tabs-vertical with the tabbar flush against the panels
container, making the active tab indicator visually touch the panel content.
Add 16px padding-inline-start on the panels area (and -end for the reverse layout)
so the tabbar and panels have breathing room.
Route template used {id} but the method parameter is named blogId, so
ASP.NET Core ApiExplorer emitted an orphan path parameter id, which made
ClientProxyBase.BuildHttpProxyClientProxyContext throw
ArgumentOutOfRangeException when deleting a blog from the MVC admin page.
MudBlazor 9 defaults .mud-input-label-inputcontrol to line-height: 1.15rem, which is
smaller than a typical 16px character with descenders. Letters like g, p, q, y in the
floated label visually clipped under the input baseline. Bump to 1.4rem so descenders
have room without enlarging the overall control.
The custom Style="max-height: 600px; overflow-y: auto;" on MudTabs produced an inner
scrollbar in addition to mud-dialog's own scrollbar, resulting in a double scrolling
experience inside the permissions modal. Let mud-dialog handle overflow natively.
Long label text (e.g. Turkish translations) on MudDatePicker / MudTimePicker overflowed
the input and visually overlapped the calendar toggle icon on the right. Reserve 40px
on the right for the end-adornment icon so the label clips with ellipsis.
- MudMenu: switch ActivatorContent to MenuContext.ToggleAsync pattern (v9 breaking)
- MudForm: rename Validate to ValidateAsync (v9.1 obsoletion)
- MudInput: replace AutoGrow with Sizing for textarea
- DataGrid: add white-space:nowrap on header to prevent CJK characters stacking vertically
- BlockUI: shrink loading spinner inside mud-dialog
- Search field: switch Label to Placeholder so the text shows next to the magnifier icon
- Soften IsSandboxed XML doc as a best-effort marker
- Replace #XXXXX placeholders with #25399
- Set Scriban MemberFilter to allowlist public properties only,
blocking method/field access and reflection escape paths
- Update Razor and Scriban safe-runtime docs to match
- Add reflection-escape, method-invocation and nested-property
tests for Scriban
ITemplateRenderingEngine exposes a new IsSandboxed property so callers can
decide whether editing a template requires elevated trust.
- TemplateRenderingEngineBase provides a virtual default of false (secure-by-default)
- RazorTemplateRenderingEngine declares IsSandboxed=false (compiles to .NET assembly via Roslyn)
- ScribanTemplateRenderingEngine declares IsSandboxed=true (DSL without .NET interop)
- Razor integration docs and TextTemplateManagement docs document the implications
- Migration guide for ABP 10.4 documents the new abstraction member
Top-level "Select All in All Tabs" already used `Indeterminate` to show
a partial-grant state. The per-tab "Select All in This Tab" checkbox
was a plain two-state binding to `Permissions.All(x => x.IsGranted)`,
so a tab with some (but not all) permissions granted rendered as
unchecked - reading as "no permissions granted" to QA.
Bind `Indeterminate` to "any granted but not all granted" to match the
top-level behavior.