@ -23,24 +23,104 @@ The [application startup template](../../Startup-Templates/Application.md) comes
## Dynamic C# Client Proxies
TODO
Dynamic C# Client Proxy system makes extremely easy to consume server side HTTP APIs from the UI. You just **inject** the [application service](../../Application-Services.md) **interface** and consume the remote APIs just like using local service method calls.
## Theme System
**Example: Get list of books from server and list on the UI**
TODO
````csharp
@page "/books"
@using Acme.BookStore.Books
@using Volo.Abp.Application.Dtos
@inject IBookAppService BookAppService
<ul>
@foreach (var book in Books)
{
<li>
@book.Name (by @book.AuthorName)
</li>
}
</ul>
@code {
private IReadOnlyList<BookDto> Books { get; set; } = new List<BookDto>();
* This razor component (page) uses `@inject IBookAppService BookAppService` to get a reference to the service proxy.
* It uses `BookAppService.GetListAsync` in the `OnInitializedAsync` and gets the list of the books, just like a regular C# method call.
* Finally, the page renders the books in a list on the UI.
ABP Framework handles all the low level details for you, including a proper HTTP call, JSON serialization, exception handling and authentication.
See the [Dynamic C# Client Proxies](../../API/Dynamic-CSharp-API-Clients.md) document for more.
## Theming System
ABP Framework provides a complete [Theming](Theming.md) system with the following goals:
* Reusable [application modules](../../Modules/Index.md) are developed **theme-independent**, so they can work with any UI theme.
* UI theme is **decided by the final application**.
* The theme is distributed as NuGet package, so it is **easily upgradable**.
* The final application can **customize** the selected theme.
### Current Themes
Currently, two themes are **officially provided**:
* The [Basic Theme](Basic-Theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**.
* The [Lepton Theme](https://commercial.abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP Commercial](https://commercial.abp.io/) license.
### Base Libraries
TODO
There are a set of standard libraries that comes pre-installed and supported by all the themes:
* [Twitter Bootstrap](https://getbootstrap.com/) as the fundamental HTML/CSS framework.
* [Blazorise](https://github.com/stsrki/Blazorise) as a component library that supports the Bootstrap and adds extra components like Data Grid and Tree.
* [FontAwesome](https://fontawesome.com/) as the fundamental CSS font library.
* [Flag Icon](https://github.com/lipis/flag-icon-css) as a library to show flags of countries.
These libraries are selected as the base libraries and available to the applications and modules.
> Bootstrap's JavaScript part is not used since the Blazorise library already provides the necessary functionalities to the Bootstrap components in a native way.
### The Layout
The themes provide the layout. So, you have a responsive layout with the standard features already implemented. The screenshot below has taken from the layout of the [Basic Theme](Basic-Theme.md):
See the [Theming](Theming.md) document for more layout options and other details.
### Layout Parts
TODO
A typical layout consists of multiple parts. The [Theming](Theming.md) system provides [menus](Navigation-Menu.md), [toolbars](Toolbars.md), [page alerts](Page-Alerts.md) and more to dynamically control the layout by your application and the modules you are using.
## Global Styles & Scripts / Bundling & Minification
TODO
ABP provides a standard way to manage the global script and style dependencies of an application. This is an essential feature for modularity since some modules may have such dependencies and they can declare dependencies in that way.
See the [Managing Global Scripts & Styles](Global-Scripts-Styles.md) document.
## Services
ABP provides useful services that you can consume in your applications. Some of them are;
* [IUiMessageService](Message.md) is used to show modal messages to the user.
* [IUiNotificationService](Notification.md) is used to show toast-style notifications.
* [IAlertManager](Page-Alerts.md) is used to show in-page alerts.
* [ISettingProvider](Settings.md) is used to access to the current setting values.
* `ICurrentUser` and `ICurrentTenant` is used to get information about the current user and the tenant.
## Customization
TODO
While the theme and some modules come as NuGet packages, you can still override and customize them on need. See the [Customization / Overriding Components](Customization-Overriding-Components.md) document.