From 4576d8d5de9c74408a1d44027ed1b69852dbd7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Thu, 21 May 2026 20:00:48 +0300 Subject: [PATCH 01/14] Revise low-code React docs --- docs/en/docs-nav.json | 48 +- docs/en/low-code/custom-endpoints.md | 214 ++++--- docs/en/low-code/designer.md | 124 ++++ docs/en/low-code/fluent-api.md | 17 +- docs/en/low-code/foreign-access.md | 8 +- docs/en/low-code/images/actions-menu.png | Bin 2959 -> 0 bytes docs/en/low-code/images/create-modal.png | Bin 8842 -> 0 bytes docs/en/low-code/images/data-grid.png | Bin 37646 -> 0 bytes docs/en/low-code/images/designer-entity.png | Bin 0 -> 59202 bytes docs/en/low-code/images/designer-forms.png | Bin 0 -> 57804 bytes docs/en/low-code/images/designer-overview.png | Bin 0 -> 29320 bytes .../low-code/images/designer-page-filters.png | Bin 0 -> 71733 bytes .../low-code/images/designer-properties.png | Bin 0 -> 94043 bytes .../en/low-code/images/designer-relations.png | Bin 0 -> 82597 bytes .../low-code/images/foreign-access-modal.png | Bin 7005 -> 0 bytes docs/en/low-code/images/menu-items.png | Bin 7409 -> 0 bytes .../low-code/images/runtime-create-form.png | Bin 0 -> 62518 bytes docs/en/low-code/images/runtime-data-grid.png | Bin 0 -> 46432 bytes .../images/runtime-filters-has-value.png | Bin 0 -> 72456 bytes docs/en/low-code/images/runtime-filters.png | Bin 0 -> 71464 bytes docs/en/low-code/index.md | 393 +++--------- docs/en/low-code/interceptors.md | 60 +- docs/en/low-code/model-json.md | 565 ++++++++++-------- docs/en/low-code/react-runtime.md | 246 ++++++++ docs/en/low-code/reference-entities.md | 8 +- docs/en/low-code/scripting-api.md | 326 ++++++++-- 26 files changed, 1294 insertions(+), 715 deletions(-) create mode 100644 docs/en/low-code/designer.md delete mode 100644 docs/en/low-code/images/actions-menu.png delete mode 100644 docs/en/low-code/images/create-modal.png delete mode 100644 docs/en/low-code/images/data-grid.png create mode 100644 docs/en/low-code/images/designer-entity.png create mode 100644 docs/en/low-code/images/designer-forms.png create mode 100644 docs/en/low-code/images/designer-overview.png create mode 100644 docs/en/low-code/images/designer-page-filters.png create mode 100644 docs/en/low-code/images/designer-properties.png create mode 100644 docs/en/low-code/images/designer-relations.png delete mode 100644 docs/en/low-code/images/foreign-access-modal.png delete mode 100644 docs/en/low-code/images/menu-items.png create mode 100644 docs/en/low-code/images/runtime-create-form.png create mode 100644 docs/en/low-code/images/runtime-data-grid.png create mode 100644 docs/en/low-code/images/runtime-filters-has-value.png create mode 100644 docs/en/low-code/images/runtime-filters.png create mode 100644 docs/en/low-code/react-runtime.md diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index f82f29d5513..d6406a4db03 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -446,6 +446,52 @@ } ] }, + { + "text": "Low-Code", + "items": [ + { + "text": "Overview", + "path": "low-code", + "isIndex": true + }, + { + "text": "Low-Code Designer", + "path": "low-code/designer.md" + }, + { + "text": "React Runtime", + "path": "low-code/react-runtime.md" + }, + { + "text": "Attributes & Fluent API", + "path": "low-code/fluent-api.md" + }, + { + "text": "model.json Structure", + "path": "low-code/model-json.md" + }, + { + "text": "Reference Entities", + "path": "low-code/reference-entities.md" + }, + { + "text": "Foreign Access", + "path": "low-code/foreign-access.md" + }, + { + "text": "Interceptors", + "path": "low-code/interceptors.md" + }, + { + "text": "Custom Endpoints", + "path": "low-code/custom-endpoints.md" + }, + { + "text": "Scripting API", + "path": "low-code/scripting-api.md" + } + ] + }, { "text": "Framework", "items": [ @@ -1040,7 +1086,7 @@ ] } ] - }, + } ] }, { diff --git a/docs/en/low-code/custom-endpoints.md b/docs/en/low-code/custom-endpoints.md index ad0057df703..31bc72ff306 100644 --- a/docs/en/low-code/custom-endpoints.md +++ b/docs/en/low-code/custom-endpoints.md @@ -1,112 +1,138 @@ ```json //[doc-seo] { - "Description": "Define custom REST API endpoints with JavaScript handlers in the ABP Low-Code System. Create dynamic APIs without writing C# controllers." + "Description": "Define JavaScript-backed custom REST endpoints in the ABP Low-Code System without writing custom .NET controllers." } ``` # Custom Endpoints -Custom Endpoints allow you to define REST API routes with server-side JavaScript handlers directly in `model.json`. Each endpoint is registered as an ASP.NET Core endpoint at startup and supports hot-reload when the model changes. +> **Preview:** Custom endpoint descriptors and scripting helpers are part of the preview Low-Code System. Names, validation rules, and runtime behavior may change before general availability. -## Defining Endpoints +Use generated page CRUD APIs for normal dynamic entity pages. Custom endpoints are an advanced option for exposing small model-owned REST APIs that do not map to standard list, get, create, update, delete, export, file, or attachment operations. + +Custom endpoints are defined in `model.json` or through the Low-Code Designer. Each endpoint executes server-side JavaScript and is registered as an ASP.NET Core route. -Add endpoints to the `endpoints` array in `model.json`: +## Defining Endpoints ```json { "endpoints": [ { - "name": "GetProductStats", - "route": "/api/custom/products/stats", + "name": "GetCampaignStats", + "route": "/api/custom/campaigns/stats", "method": "GET", - "description": "Get product statistics", - "requireAuthentication": false, - "javascript": "var count = await db.count('LowCodeDemo.Products.Product');\nreturn ok({ totalProducts: count });" + "description": "Get campaign statistics", + "requireAuthentication": true, + "requiredPermissions": ["Acme.Campaigns"], + "javascript": "var count = await db.count('Acme.Campaigns.Campaign');\nreturn ok({ totalCampaigns: count });" } ] } ``` -### Endpoint Descriptor +## Endpoint Descriptor | Field | Type | Default | Description | |-------|------|---------|-------------| -| `name` | string | **Required** | Unique endpoint name | -| `route` | string | **Required** | URL route pattern (supports `{parameters}`) | -| `method` | string | `"GET"` | HTTP method: `GET`, `POST`, `PUT`, `DELETE` | -| `javascript` | string | **Required** | JavaScript handler code | -| `description` | string | null | Description for documentation | -| `requireAuthentication` | bool | `true` | Require authenticated user | -| `requiredPermissions` | string[] | null | Required permission names | +| `name` | string | Required | Unique endpoint identifier | +| `route` | string | Required | URL route pattern; must start with `/` and can contain `{parameters}` | +| `method` | string | `GET` | `GET`, `POST`, `PUT`, `DELETE`, or `PATCH` | +| `javascript` | string | Required | JavaScript handler code | +| `description` | string | null | Optional designer/documentation text | +| `requireAuthentication` | bool | `true` | Whether the caller must be authenticated | +| `requiredPermissions` | string[] | null | Permission names required to call the endpoint | + +`requiredPermissions` is checked only when `requireAuthentication` is true. Keep endpoints authenticated by default and use `requireAuthentication: false` only for intentionally public APIs. -## Route Parameters +## Route and Request Data -Use `{paramName}` syntax in the route. Access values via the `route` object: +Use `{paramName}` syntax for route parameters. Endpoint scripts can read request data through globals: + +| Variable | Description | +|----------|-------------| +| `request` | Full request object | +| `route` | Route values, for example `route.id` | +| `params` | Alias for `route` | +| `query` | Query string values, for example `query.q` | +| `body` | Parsed request body | +| `headers` | Selected safe request headers | ```json { - "name": "GetProductById", - "route": "/api/custom/products/{id}", + "name": "GetCampaignById", + "route": "/api/custom/campaigns/{id}", "method": "GET", - "javascript": "var product = await db.get('LowCodeDemo.Products.Product', route.id);\nif (!product) { return notFound('Product not found'); }\nreturn ok({ id: product.Id, name: product.Name, price: product.Price });" + "javascript": "var campaign = await db.get('Acme.Campaigns.Campaign', route.id);\nif (!campaign) { return notFound('Campaign not found'); }\nreturn ok({ id: campaign.Id, name: campaign.Name });" } ``` -## JavaScript Context +For non-GET requests, `body` is parsed when a body is present and remains subject to the configured request size limit. The `headers` object intentionally contains only selected request headers such as `Content-Type`, `Accept`, `Accept-Language`, and `X-Requested-With`. + +## Response Helpers + +Endpoint scripts can return plain data, an endpoint response object, or one of the response helpers. + +| Function | HTTP status | Response kind | +|----------|-------------|---------------| +| `ok(data, headers?)` | 200 | JSON | +| `okText(text, contentType?)` | 200 | Text | +| `okBinary(base64Data, contentType?)` | 200 | Binary from base64 | +| `created(data, headers?)` | 201 | JSON | +| `noContent()` | 204 | Empty | +| `badRequest(message)` | 400 | JSON error | +| `unauthorized(message)` | 401 | JSON error | +| `forbidden(message)` | 403 | JSON error | +| `notFound(message)` | 404 | JSON error | +| `error(message)` | 500 | JSON error | + +For custom status codes or response metadata, return an object with response fields: + +```javascript +return { + statusCode: 202, + kind: 'json', + data: { accepted: true }, + headers: { 'x-trace-id': guid() } +}; +``` -Inside custom endpoint scripts, you have access to: +Response kinds are: -### Request Context +| Kind | Description | +|------|-------------| +| `json` | JSON serialization, default | +| `text` | Plain text | +| `binaryBase64` | Base64-encoded binary payload | -| Variable | Description | -|----------|-------------| -| `request` | Full request object | -| `route` | Route parameter values (e.g., `route.id`) | -| `params` | Alias for route parameters | -| `query` | Query string parameters (e.g., `query.q`, `query.page`) | -| `body` | Request body (for POST/PUT) | -| `headers` | Request headers | -| `user` | Current user (same as `context.currentUser` in [Interceptors](interceptors.md)) | -| `email` | Email sender (same as `context.emailSender` in [Interceptors](interceptors.md)) | - -### Response Helpers - -| Function | HTTP Status | Description | -|----------|-------------|-------------| -| `ok(data)` | 200 | Success response with data | -| `created(data)` | 201 | Created response with data | -| `noContent()` | 204 | No content response | -| `badRequest(message)` | 400 | Bad request response | -| `unauthorized(message)` | 401 | Unauthorized response | -| `forbidden(message)` | 403 | Forbidden response | -| `notFound(message)` | 404 | Not found response | -| `error(message)` | 500 | Internal server error response | -| `response(statusCode, data, error)` | Custom | Custom status code response | - -### Logging - -| Function | Description | -|----------|-------------| -| `log(message)` | Log an informational message | -| `logWarning(message)` | Log a warning message | -| `logError(message)` | Log an error message | +## Script Services -### Database API +Custom endpoint scripts use the same common [Scripting API](scripting-api.md) services as other low-code scripts: -The full [Scripting API](scripting-api.md) (`db` object) is available for querying and mutating data. +| Service | Example | +|---------|---------| +| `db` | Query or mutate dynamic entities | +| `user` / `currentUser` | Read current user information | +| `tenant` / `currentTenant` | Read tenant information | +| `auth` / `authorization` | Check permissions | +| `settings`, `features`, `config` | Read allowed settings, features, and app configuration | +| `http` | Call allowed outbound HTTP services | +| `email` | Send or queue email | +| `events`, `jobs` | Publish distributed events or enqueue background jobs | +| `files`, `images`, `attachments` | Work with low-code files and record attachments | +| `log`, `logWarning`, `logError` | Write logs | ## Examples -### Get Statistics +### Statistics ```json { - "name": "GetProductStats", - "route": "/api/custom/products/stats", + "name": "GetCampaignStats", + "route": "/api/custom/campaigns/stats", "method": "GET", - "requireAuthentication": false, - "javascript": "var totalCount = await db.count('LowCodeDemo.Products.Product');\nvar avgPrice = totalCount > 0 ? await db.query('LowCodeDemo.Products.Product').average(p => p.Price) : 0;\nreturn ok({ totalProducts: totalCount, averagePrice: avgPrice });" + "requireAuthentication": true, + "javascript": "var campaignQuery = await db.query('Acme.Campaigns.Campaign');\nvar total = await campaignQuery.count();\nvar active = await campaignQuery.where(c => c.Status === 1).count();\nreturn ok({ total: total, active: active });" } ``` @@ -114,33 +140,65 @@ The full [Scripting API](scripting-api.md) (`db` object) is available for queryi ```json { - "name": "SearchCustomers", - "route": "/api/custom/customers/search", + "name": "SearchCampaigns", + "route": "/api/custom/campaigns/search", "method": "GET", "requireAuthentication": true, - "javascript": "var searchTerm = query.q || '';\nvar customers = await db.query('LowCodeDemo.Customers.Customer')\n .where(c => c.Name.toLowerCase().includes(searchTerm.toLowerCase()))\n .take(10)\n .toList();\nreturn ok(customers.map(c => ({ id: c.Id, name: c.Name, email: c.EmailAddress })));" + "javascript": "var q = query.q || '';\nvar campaignQuery = await db.query('Acme.Campaigns.Campaign');\nvar rows = await campaignQuery\n .where(c => c.Name.toLowerCase().includes(q.toLowerCase()))\n .take(10)\n .toList();\nreturn ok(rows.map(c => ({ id: c.Id, name: c.Name })));" } ``` -### Dashboard Summary +### Create with Validation ```json { - "name": "GetDashboardSummary", - "route": "/api/custom/dashboard", - "method": "GET", + "name": "CreateCampaignDraft", + "route": "/api/custom/campaigns/draft", + "method": "POST", "requireAuthentication": true, - "javascript": "var productCount = await db.count('LowCodeDemo.Products.Product');\nvar customerCount = await db.count('LowCodeDemo.Customers.Customer');\nvar orderCount = await db.count('LowCodeDemo.Orders.Order');\nreturn ok({ products: productCount, customers: customerCount, orders: orderCount, user: user.isAuthenticated ? user.userName : 'Anonymous' });" + "requiredPermissions": ["Acme.Campaigns.Create"], + "javascript": "if (!body.name) { return badRequest('Name is required.'); }\nvar record = await db.insert('Acme.Campaigns.Campaign', { Name: body.name, Status: 0 });\nreturn created({ id: record.Id, name: record.Name });" +} +``` + +## Response Policy + +Dynamic endpoint responses are validated by `LowCode:Scripting:EndpointResponse`. + +```json +{ + "LowCode": { + "Scripting": { + "EndpointResponse": { + "MaxBodyBytes": 1048576, + "AllowedContentTypes": [ + "application/json", + "text/plain", + "application/octet-stream" + ], + "BlockedHeaders": [ + "Set-Cookie", + "Content-Length", + "Content-Type" + ] + } + } + } } ``` -## Authentication and Authorization +Default blocked headers also include hop-by-hop headers such as `Connection`, `Transfer-Encoding`, and `Upgrade`. + +`Content-Type` is blocked as a custom response header. Choose the response kind or `contentType` field instead of setting a raw `Content-Type` header from script. + +## Security Notes -| Setting | Behavior | -|---------|----------| -| `requireAuthentication: false` | Endpoint is publicly accessible | -| `requireAuthentication: true` | User must be authenticated | -| `requiredPermissions: ["MyApp.Products"]` | User must have the specified permissions | +* Prefer authenticated endpoints with explicit `requiredPermissions`. +* Treat public endpoints as public API surface. +* Keep endpoint scripts small and focused. +* Validate route, query, and body input before using it. +* Use `take()` for list queries. +* Use the configured HTTP, email, file, and response limits for untrusted integrations. ## See Also diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md new file mode 100644 index 00000000000..0ac48b6a2f6 --- /dev/null +++ b/docs/en/low-code/designer.md @@ -0,0 +1,124 @@ +```json +//[doc-seo] +{ + "Description": "Use the ABP Admin Console Low-Code Designer to create dynamic entities, pages, forms, relations, filters, permissions, and model health checks." +} +``` + +# Low-Code Designer + +> **Preview:** The Low-Code Designer is part of the preview Low-Code System. Designer screens, metadata fields, and validation rules may change before general availability. + +The Low-Code Designer is available in ABP Admin Console. It is the main UI for building and maintaining low-code models. + +```text +/admin-console/lowcode-designer +``` + +The designer works with layered model metadata. In development, generated projects include a `_Dynamic/model.json` file and a generated initializer. The designer can also persist changes to the database JSON layer, depending on the selected layer and permissions. + +![Low-Code Designer overview](images/designer-overview.png) + +## Permissions and Layers + +Designer APIs require the low-code designer permission. Users who can open runtime pages do not automatically get designer access. + +The selected layer controls whether the designer can save changes. Read-only layers can be inspected but not mutated, and the designer blocks edits to layers that are not currently selected. Check the active layer before changing entities, pages, forms, scripts, or permissions. + +## Sections + +| Section | Purpose | +|---------|---------| +| Data | Entities, enums, properties, relations, inherited fields, and reference entities | +| Actions | Script-backed custom endpoints, event handlers, background jobs, workers, and model actions | +| Pages | Runtime pages, menu placement, page type, grid/card fields, filters, sorting, dashboards, and linked forms | +| Forms | Create/edit forms, tabs, groups, fields, controls, defaults, and actions | +| Permissions | Generated permission names and access control | +| Health | Model validation and runtime readiness checks | + +## Data + +Use **Data** to define the domain model. + +Entities contain properties, display names, display property configuration, inherited audit fields, relations, and optional interceptors. Enums are created once and then used by enum properties. + +![Entity summary in the designer](images/designer-entity.png) + +![Entity property list](images/designer-properties.png) + +### Relations + +Relations are driven by foreign key properties. The designer shows direct N to 1 relations and many-to-many relations that are modeled through junction entities. + +![Relation overview](images/designer-relations.png) + +For reference entities such as `IdentityUser`, register the entity in the generated `_Dynamic` initializer. The designer and runtime can then show friendly display values instead of raw IDs. + +## Pages + +Use **Pages** to expose an entity in the React runtime. + +Pages can define data grid, kanban, calendar, gallery, standalone form, and dashboard experiences. A data grid page can define: + +* Title and icon +* Menu group and order +* Entity +* Create and edit forms +* Visible grid/card fields +* Field labels and column widths +* Default sorting +* Filter fields and defaults + +Kanban pages add `groupByProperty`, calendar pages add date/time properties, gallery pages can use an image property, form pages reference a named form, and dashboard pages define rows and visualizations. + +![Page setup](images/designer-page-filters.png) + +Pages are exposed in React under `/dynamic/` and can also appear as dynamic menu items. + +## Forms + +Use **Forms** to define create and edit experiences. + +Forms can contain: + +* Tabs +* Groups +* Ordered fields +* Control types +* Placeholder and help text +* Default values +* Required and validation behavior +* Conditional rules for hide/show, enable/disable, and set value behavior +* Save actions such as "save and new" + +![Form setup](images/designer-forms.png) + +## Filters + +Filters are configured per page and rendered by the React runtime. The runtime uses type-specific operators to keep the UI simple: + +* String fields use text operators. +* Number and money fields use range and comparison operators. +* Date fields use date labels such as on, after, and before. +* Boolean fields use `All / Yes / No`. +* File and image fields use `Has value` with `All / Yes / No`. + +The URL query parameter keeps the existing `lcFilters` format, so bookmarked filtered pages continue to work. + +## Permissions + +Dynamic permissions are generated for entities and pages. Use the **Permissions** section to review names and grant access through the normal ABP permission management UI. + +Generated pages and menus are permission-aware. If a user cannot access a page, the runtime does not show the menu item and API calls remain protected by backend authorization. + +## Actions and Scripts + +Use **Actions** only when model metadata and standard CRUD behavior are not enough. The scripting surface can define custom HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. Scripts run server-side and use the [Scripting API](scripting-api.md). + +## Health + +Use **Health** before shipping changes. It helps catch missing display properties, invalid relation targets, form/page references, script problems, and other model issues that would otherwise surface at runtime. + +## Source Control + +For source-controlled models, keep `_Dynamic/model.json` and the generated initializer in your application repository. Use [model.json Structure](model-json.md), [Attributes & Fluent API](fluent-api.md), and [Reference Entities](reference-entities.md) for advanced editing and integration details. diff --git a/docs/en/low-code/fluent-api.md b/docs/en/low-code/fluent-api.md index 5aa38fe66a1..5a57c36ff3f 100644 --- a/docs/en/low-code/fluent-api.md +++ b/docs/en/low-code/fluent-api.md @@ -1,13 +1,15 @@ ```json //[doc-seo] { - "Description": "Define dynamic entities using C# attributes and configure them with the Fluent API in the ABP Low-Code System. The primary way to build auto-generated admin panels." + "Description": "Define dynamic entities using .NET attributes and configure them with the Fluent API in the ABP Low-Code System for advanced source-controlled model configuration." } ``` # Attributes & Fluent API -C# Attributes and the Fluent API are the **recommended way** to define dynamic entities. They provide compile-time checking, IntelliSense, refactoring support, and keep your entity definitions close to your domain code. +> **Preview:** Attributes and Fluent API configuration for the Low-Code System are preview APIs. Prefer the designer for normal modeling work, and review release notes before relying on these APIs in long-lived integrations. + +Use the [Low-Code Designer](designer.md) for day-to-day entity, page, form, and filter work. C# attributes and the Fluent API are advanced configuration options for teams that need source-controlled model definitions, compile-time checking, or programmatic overrides. ## Quick Start @@ -37,7 +39,7 @@ dotnet ef migrations add Added_Product dotnet ef database update ``` -You now have a complete Product management page with data grid, create/edit modals, search, sorting, and pagination. +After migrations and runtime startup, the React low-code runtime can render a Product management page with data grid, create/edit forms, search, sorting, filters, and pagination. ### Step 3: Add Relationships @@ -257,7 +259,7 @@ Enum values can be localized using ABP's localization system. Add localization k } ``` -The Blazor UI automatically uses these localization keys for enum dropdowns and display values. If no localization key is found, the enum member name is used as-is. +The React runtime automatically uses these localization keys for enum dropdowns and display values. If no localization key is found, the enum member name is used as-is. ## Fluent API @@ -265,7 +267,7 @@ The Fluent API has the **highest priority** in the configuration system. Use `Ab ### Basic Usage -Configure in your Low-Code Initializer (e.g. `MyAppLowCodeInitializer`): +Configure in startup initialization code (for example `MyAppLowCodeInitializer`): ````csharp public static class MyAppLowCodeInitializer @@ -378,7 +380,7 @@ entity.Interceptors.Add(new CommandInterceptorDescriptor("Create") ## Assembly Registration -Register assemblies containing `[DynamicEntity]` classes in your [Low-Code Initializer](index.md#1-create-a-low-code-initializer): +Register assemblies containing `[DynamicEntity]` classes in startup initialization code: ````csharp AbpDynamicEntityConfig.SourceAssemblies.Add( @@ -497,7 +499,7 @@ public class OrderLine : DynamicEntityBase } ```` -Register everything in your [Low-Code Initializer](index.md#1-create-a-low-code-initializer): +Register everything in startup initialization code: ````csharp public static class MyAppLowCodeInitializer @@ -562,6 +564,7 @@ public class MyAppDbContextFactory : IDesignTimeDbContextFactory // ... BuildConfiguration method ... } +```` This gives you four auto-generated pages (Customers, Products, Orders with nested OrderLines), complete with permissions, menu items, foreign key lookups, and interceptor-based business rules. diff --git a/docs/en/low-code/foreign-access.md b/docs/en/low-code/foreign-access.md index f7545dad059..219e1827422 100644 --- a/docs/en/low-code/foreign-access.md +++ b/docs/en/low-code/foreign-access.md @@ -7,6 +7,10 @@ # Foreign Access +> **Preview:** Foreign access metadata is part of the preview Low-Code System. Relation behavior and designer options may change before general availability. + +Use the [Low-Code Designer](designer.md) to review relation metadata visually. This page explains the advanced configuration values that control how related dynamic entities can be reached from runtime pages. + Foreign Access controls how related **dynamic entities** can be accessed through foreign key relationships. It determines whether users can view or manage related data directly from the **target entity's** UI. > **Important:** Foreign Access only works between **dynamic entities**. It does not apply to [reference entities](reference-entities.md) because they are read-only and don't have UI pages. @@ -108,7 +112,7 @@ Set the `access` field on a foreign key property: When foreign access is configured between two **dynamic entities**: -![Actions menu showing foreign access items (Order, Visited Country, etc.)](images/actions-menu.png) +![Relation overview in the Low-Code Designer](images/designer-relations.png) ### `ForeignAccess.View` @@ -118,8 +122,6 @@ An **action menu item** appears on the target entity's data grid row (e.g., a "V An **action menu item** appears on the target entity's data grid row (e.g., an "Orders" item on the Customer row). Clicking it opens a fully functional CRUD modal where users can create, edit, and delete related records. -![Foreign access modal with full CRUD capabilities](images/foreign-access-modal.png) - ### `ForeignAccess.None` No action menu item is added. The foreign key exists only for data integrity and lookup display. diff --git a/docs/en/low-code/images/actions-menu.png b/docs/en/low-code/images/actions-menu.png deleted file mode 100644 index b9533942157182486b7640a385573322d9cb200b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2959 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 Rs-LXL01Hzzs@@nA|8Jy_OQ-+< diff --git a/docs/en/low-code/images/create-modal.png b/docs/en/low-code/images/create-modal.png deleted file mode 100644 index ebc77debb51acb25a0b4cbe7ae8d957556f71fa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8842 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 diff --git a/docs/en/low-code/images/data-grid.png b/docs/en/low-code/images/data-grid.png deleted file mode 100644 index 2a97d9ca6fedf8d406de158e80ce5733863d3548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37646 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 B)I$IO diff --git a/docs/en/low-code/images/runtime-create-form.png b/docs/en/low-code/images/runtime-create-form.png new file mode 100644 index 0000000000000000000000000000000000000000..258bab6370cf1b3ff39b7c161a22ac7c0f3b6af5 GIT binary patch literal 62518 zcmdSBcTg1F*Di{pU;;!WCj}8C=O~~=$sn0wNJGwffMEbdK(gcv0+MqcGLm!73^_Bv zNX~HPeZgOS_tvRfr*73b^_?#NXxi!BYp=a}?Y*Ao+3l|=FNyVp2vCn8| zm|kdT4|pHlM_n-~QG1Do_8d)0?4ycH;`S`2HsGZG=7xpj5%q^{Bj4Y8|NOHGGO6P* zukANY;5J)&n^YxdKQoWKLBLMH>JZ3`?ue7kOu1P+r(DEavu(x>2q{ie`#<+pPAR{7 z{pMO%%8Ly{!4Ta;kWxd4e;pEnIu;VE8qUeaP8x2|@1d;t=V%gBesp_=hDPRvMsjz) z@chBx-^+flyfE(0c^};4ygO}r{pjc4MzBAkVclJ}eRSXS?$k^4`3Lm7bF#1h$D3As z{MV%7%*@RGkp8*3WUr2?HixvUEA-ORkco+jfsi1TT(U9A z%IfN~9q`=V{(dCx0av^xWAt)|f|#Uabxq9^KR&m^jq5ASaxL|UF30_qcY$qW1O#t) z?^W$@sk!eTSc%W|B)d_KDa+PfhXinRgskeAj-CLJx#ibSd4w98ba}mY{IwhMhTSkb zelY@mEbxfl83>c3^f<9`HxBnHCTxAW_Y9FM8UY1z?*;KG0 z2pJlmerrSNwvmdcbl+=B>1l6hXlQ1eo|!S)sB=4_CvNSjJv%#t9B(HHfD5zM#UAF9 z^Lcu#{?Mp7dYVJQ!!2sDTZ??@XMNp!Ul>!D#x@-It+--gcD}K6$5twRh>OwLT4V|S zh;nEshY(qF5w`1tsuqM~r%o{gR#nhKL@9VsXR zEk#5{LQKeGs8`=iec;9$0V*p;)X9DNR6JjSGbuSob4A`4d>#_A>#=AWk%Lj5;c)|i z9bC~dcQ(`YbtmPUhZBf#OyKsZUVx|=FgFvE97dl# ztR}O4?n*Ntg;dw2P!YRRs`QJcGiJcYd7u`+F4Wi8x2fsFMbn?oS~2{Rty+R$ks#WOp5(7Yk^aZih+kK|2UQ8eb8FpJT z&t3PBk9CE5fb;bvjM3M4)z^mEiRS&5v zslG_q2P65}iE7TXEZtpPvn8;#4vj7*>i+J7h&c;vuS2I5b^%&W*Su|Z-R`i%3jBk6q*@V7#kMq!LqB~m=kDZL zFHRZ>Rdzt2ZlOoiK_c7xruTZV>)7}OaX7d4NZDsq1*2;*-W zGtZxl@4~?+K0;NmKfg^Yg8pD>Ca}`xQwM-ATW0%2g6Q;T!=pyZ?Rp~oT?OWPX0FDO zP!R$fkM}uCO~>igwGL}S^{2T86HJ;Hc|4X={Eg=e^C#<;0t8n$4BoA+u`sk6J`>L{ zB{6Fkdr%NpViF#H0R#cQkijNo4Eb~rnw%$SS6Wk}`oI;e5{0;G5d|>x(37ZPJmehL zeMv>nE<0o=VNJc5I~G!ZIzDm{h(%@4f|p=W5EvSdmjO9Axd=ct6!6K3iSPA@N$A6r zn`Q%xzHL}6>xpoKN2x<=(8m*~87RDB!a?Pm@(2q!v4=sI7+0X*L7mQKJ&Vx0L3m|xHyyqpq!S2^zeD;PaDrtZ7wb9#%F6WsdwY+WgrMcz&p?pA< z+V%H@Oc|}lcA>~($B))ii<#rtxKmoM@P@Ln64<2UP%fATLKX+aCq4+65?vah>cZRoOOHk%2Z<&S}R|LF5ev>AF9jZ3syA zPF5pvgy(tet!j_#3)(&2N~C|ZCJgRzq8Kg9xlSVsizILr2RnvtjAr8rbRS=?sZXU! zJ&k4#I!Gy=+q(5r(@R_u603K1-t~HAsLW{0$_-kjGimnOEMZl34I>=9kbGCeH~izi(HBq<;SH@07(XLd3}+y@Ee6N;*cETVB$0|B_Us zZFfJO!bvXu5fG1FT@?TMFZ?l7a`O#fndc4M;lOL-jbY;K@l+yB1`=}{Bz_j$73GY= zNBGcBX)*p1)eijqigH|(>s)CTMB(=KSI(Q0!IH#8pv}q(6Lg;=XAbYG^lq6G5tovZ zBA+GT*)U4+p~rnh=dsr0{f$MKGWU-@G8NAjidq6fe1@nPj=B(Riw#;zN0*=}OM)1V zY5$Y{8KlZg^1dy;rG8#uy~BE8vx5)L%-2&3RzlDH{g6Oh2FfehawDV1z1S{evfhT-;Rb7aen+ z(3(nWfX)JKdA#NvRo-rpWW}GpM`anmJr3BL<#%(Y%dTQiqT4tmk4VQK_O$V6(=j#H zo#vWXL%qMQ_VXAAORpkWsR1JM2BE_vKy zPOd{Y9QsR9QE@w`k9I9z+wM`v46&$aHCD@1_4Z{?9?V#sX}TWeFxV6)^WKIGEAS0X zpMc|rZEvFKjTc&6{kY1+q`+nO=vWKE2Oe%tLlYAgK&1+=gp12*U2Cg?^DbF&Ogx2O zL_~z;ThgZ;KQ<3)oGglVx3x7i=r~M?J3^mj7G)w!9-c@?b?3A6^G_Kd?-j)2t2Q(LaI@l&mQ}CDU4Ue+}zyAXiSpQ z^Rnscq+=j>zQSQ*Z@I(h5I!_j?L4a$C)6XwejL^JttDTpUivzS>|jWevTFvD!sP=T zm)$733MA1x(Vyh!+R7rwG@V?wUNN8Zm0&JrK{*;kS`Yv{h}Cg-+4xgyqit>Ac%3jw%6+V!y-DFc);n(Ijab4%r2vL(f0mI$g!P5@L1{?9uKYA3Y zp}%Wcc5+_ek~TE3jZdf4d)ySw@sAV%PpeHNj$d(C#gNZB{`(3GU6uO zo_2!4ervrJhq?Im>6V!({jfj8Q!+yr!3$^qynM+;&0ws({LzPXe0^uev$w%87(7}U zj3ZHr^t6#o=IV?F-8W!YpNn}ZhJRPnzyr^N+Hr)>VWp+)OiTp>ro0I@J6QrOY`-;^ z!;_MjM%FPYVe^^}w8LfXzU|6WSt}o)S2V7qFJIExjEoFlp}kR(Su#>TkJu0G7Yqi8ZC?Dab>6n_>+Ot#bm8{8NMfb137{ z+~p%QwEsROYrTad$6qYqze~|=w|?Igs-U2(9C+(FG&DG=%2Eig`%0`J6dMOePELy8 z?ti>C`xga&9tjGvLw7ef!>UnX@b z6ErdeJ$v>meI|pzHi+=)#oPf4(mGV>Jv^D>KA8c zlakXMrhK1`2cx3K{zfpX93Q<`rTW~D>VwaKnDsD2jHK{zG6E7U?a$3dkMHJhy&C&b z@kfDy1EFz3GhNU4nVB=IGcu~HU11J~RvZ%HDZN529Lra7F1tT`78#|@Cv9?5l*fzE zQwr6U9o}aJgH-k9rH&iEJUq$5pxaTFkr5afjvmPE7IfO{U7X#W8#3!L;aM>v)a_)z z(#1#4sk)zj(l7Gt4xsU9e@a{W1Uu2mlWt1=@92MYYA5CQNLGW4a%nm9X~=*Er;Jr@jmE4nuO>N33R(Wavyjk3ytDxZ zerRQAKaWR9<8wi``scwJKIB`Pn@>$PIkj$1TWu?HO1HxQJ{8W7dF(~eH8H`%MWczm zvXWfAsWU*GBY0m_1n#%%DRa%dIwTdbW{CpylNNw;UM<<+FIfBF)MQ8MeBi|SoIRAe@+IUq&8l| zca!;F2bHm_wL`E&m9rn--L)_-m+*AwVeb?5K$(XfPb{=*1mdOT$r?>R`}sYbUpP2O zBHpsBiS^w59IE-K?0WdDSq3BH?-T#+4l2m2t-TkY;?D^+x-!JnBz7?gLW{+Om?oNF zL6Lks?)V>7Kb&`Su6EVcc~?}6(9PDRMbKKd{WV~2h~ZKl9ChADl1sMOA8s zs;=tT@F;wC1XQkp@nBc=iBCjcUi-iV6Ju{j2Y`V!s$#9-D8~Ef>WS4T6hI+;c$bBm z3Tlqf&JW{q0|NW*KNs=19GtcKA#5M>J$6+4g3N`^*paXLR)plA0+jeL(b8BHc1 z2zpFQNme)*N-3;c8eLv{j~vANxKo~kdmpUE)1o_B;u=nfo66jUD? z&E=VFN3ELLSac$YSJ@8N@=jOQX9Bjp|AiVgBX=%bz#qMp8U&q`h)LD5F#4W1E2e<; zZid1o5EiP$pD+Olcz* zRXMBF2qRYrUUF7CBMQ_>BIWKIvuJzh4)-p;#TU?l>sV4A0{=k~TcYwI^bXh*f|`~< zw$%Ml&1!48$u=Heis_oQoa6~@;(@_m8HgBh;I(Y?q=xO1qO~0qF_`OuDVfO#h+bG{ zymdFLAlwlR6=E-&uwpZ7r9qq3i`@frPuDSlwN7ox^Ef^|qR$Fct0^0_iOM!}uyC2v zXAnKkjqWa|_s#{nu^Tl<&f-ud$3fOko9`kGCjru}VC-~s`CZM>0nhrS(Z%ZS)YW8SmclLYHt!I#NXN-@s&KQ2#8?QO8D^M_HQ|IO?x05%l6_o;rlDNa%S)uSl z@kdP2_wK>HHmmbA_yw4CU0FM4l;KpOU49+8MI$sDCN}-xWAsn;!@c_@U z%QnfPUPr4SamwI5#q?-r7qHF*OgR{Z#3fbN7`10DbVv$Z-d|O>Wa$XNEwG_OAPWG({oOF$c7T2JMr%8dx<_| z)wd?!vL2SsL>`5CX4GwS5|dytJ}a z6@vnkXx`;k*ukisThEKE14cB|Gs`Lt4MQ|<14i%MRu*k%4Hs{99g04mjzn%UGMJj< zHN8xI-o3bZEMNbeV#1Q5WZwbz>O3<(&_rInqLN3IbL#@)TMGARQJsyic&g4+jQ?{` zj7eufmvdBVl4rR=Ea}Kj5RYBClwN*XKnA z>$8pf)YR(6QzUUhfRx_ewx=Kk4^|BgEumsEqn<{q69ysIoxb)U)psQx6xWaQcs6a2w=BiGviRG$_--Nk#iFD)-Mx@ zq|Q7&?RFvq+r<;dsJG9ocSmz56JV~8n-|XyO|0*_3W7sz1GSuQ;z#2q>awYC$075j z8>J#ih>~XqgXg1{IawYkaO2TDJs!&b)Dv>szh8DV^706~(LEXo&1= zLgR@Nx|y9Qv*t!`u+mCO*ywaMp@SYLLUfHSH)L%H#ruBG@6t6K*GaV4PMBt#6O8DO zZI~a_j1Ig{7r5+d;21k!^nlMA`CY5c@;gR}+}a|G9`ejhR?vuMwt?+Bxmi(n9#mtW z*4!u93a}#oOm9t9bi6Sn4@o% zU*)29{{j%%8*C9?XXOoDI=5KfT&Dh3Z|L9ztpAQh9R6rKx1y^sW8&U z(Q%vtGewSDF?KTdCq^yM-z7tGx^K&eq=*248l(Fr+c`F-MYa1`B_o#AQx7pDEj5TK z)-niuch7Ujb7f{{jZ+E0Kb(C7+od-1$DhD!wbz+s8ZP6cmWPBJOPTW0D!{Df+@yyE zgbvP^MxH){2mwE>F;(@GCl-ANTcBF`IoppR3F?(M5nt61@v%o^9hEydL?o0i@fUNE zL~aY?Te;YXitBT&r_Q^1uw4i zn%UauX#~RMG#q-SpOG#V*|$r5)+63h%)@6zMu56+5oG)FQYQpeJsccU6QcUo@73!X zvnAp9Soi|h9#?hPBZ*X|s~{PK4tb5p&p~yvc^x}{~L_^jzg}C?&Ua?)o}Y26C)c1>_rIFx%ZSok-a5A}1$Wpl9rh zX_rp98dmRncBGPLG%3jXvr)xiVI#vDw*-}ILklZQJwoYNGKg5Kbm@c{jE#Gpqxu*H z$xU#QST+gRdX&Sj#6V_&4zR|ovWf|3kn7lW+0KNv@c}@ffX#8RZgTV!xS*R~9h&fH zf5cJeeFZh-kDW}AHCw|L?!l8H7+;)&qZS~=N*R&Sh|D91O{-I;ya}Jd^qf_4?wjky z^_PlIt79?QyB*(mtAOEp2Gp(~vl-$p}pjv6zAxn7S=5i7xkaV-3F^7pm zsB2U5F%Cd5-e{M$*j+MR-Loct=&&d2W~%?=)-_Fzi=AlGstFCRL=f~Zn@xta28NVX zw-Oj`Qk8pFD$8oE^UbXJgGC?` z47TfC3f1r_$kqx2lMzbx%{o*cH-%*;G&B=f-cwP}UZsnUkWMRb1vSdnYB~_~+JV`K z%>ziMIfaH6t=03xYE8bUzN`9x%hxf%LB~pSIh@)(_;8Qk%2Qz~PA19PV^2ui*ebvw z)OBNODv9tw-Y_N4)O?H-Lo%;i3+XjE`O8&*zrQyMAiP|Hh{!KJ_TUpIj4IKW%dK3f z5N%evBoM60@w~x=3~+THDVe%cMW_{OkZoC~WXqi%s^O&7|HT40m{FV<|Ac9ICmmc^ zzptH3DOdn|uE{>>ict7G@@7b|<4GRCQsy{R(|tbRjcPx#tzb_^BYM)Iu&zPerl=|v z#rL*lG69L!i|h*sHtmC>QfHum5A^l6BC<2bqkl4p5o4 zwxg)>vm_r$^X>v-2d%m)(>z{quEuwd(4U526GC-j(-}a8dh~Xc8d0`|U0fAaYa36i zmK6wYG%e;=UH$z_^ud{A;7WZvK}DjHgKMcf+&gOD4j~Aqd^BQu^(~t$-jHo9i;Xy3bp>qtvWI%OA(B2WIL)-!*RF2Z*9%E`yeX0V|k!eurvVs7?l- z1w~4k@wPu|`M)(FUeIuy9&`m8zjQx~&R(UK+&swjgLqxILUb&S3P~vAYxobfNU?7_ zKJrym#@3N+(unCd?kM2k#5+bpA=v-QG3`Q5Tco&Zp6Xj!V32)+go6Enlsxvcy<|4g z)n7zo&|yRRs;haE+LhGm0q3mV$%Jj8WqWFe6pvzA5z!m3BjGFy=8^Uh@pquL5GuR2 zAaz0ODkB&7qp8nU=D#2+(z2uPK~SlwRH}Qj`W3XH<2YD;z8H72tsbW&#-Q~aDYxsp z6>6A|(6MbcOm3ZjI&Ied{#W*9{<7Rcx;)Yp0^DT_v!d)Cn_aF4-|`pmtsH62Mlql*s;%+AJ8Y08}Z~}l_O+T@uQ{hoGY0=Ba=SgF3Y-Zq? z=Cb^l=4lCbsO?(X-d-*+b-78jtrQHX*6sZxi(NN$sA<3NFWt*J;beN1el?cXSj(?q zI-z3{M-yCsa0$O$UNbhGt^w9lp%>1?2^bu?If-h@WK9{e<5*Mb1#H+b2%LSK>MEhd zU<6Xg$T{2&SBLDpxkd@yED_Az>!r{Ayjow@VRLl(jAEn)=*&0%)vsMts8O zpIWG2QW%|FIP4}WTO3FPYfmTY>lfPV8kZi977|tc$Tyq9hGl9};Nb%L>UV1qTKmF3 z#rsXB@##gSHd}Bjqk_~iUa)KRg-n~(;F}`ppuJMgztwaajte=G?knAnrz;R(0>(3JAUxi~vZo#i6*y++G zQ=kU4QN{)+DOW|s+sf10BX#IV5FxZ2a_|YVbjG=;(LYy0ObX(-!^>=yAN{n68_M5* z>~H@Rx6>poTR`y?(E(ZFru=h7sNQ4%>`%ksmLgl1^33R*}vS(XVG& z&X!92i1z`V$A;ClQepr_SzA_`CXSH=OEe&oGCRSPx2?0{cYVs8x7_79B7G(i_aSf0 zoLE$0t#I(cV3S;l+OxQ7{u)W@74Lby3lPK?$tZY!y@P&TiPU zHfKM(|M;)2v!x+S7b8tc?9<=py02xiyI`TC*^45FzMxw0j zg?#vV?fRNo3GW5{p1Z1^w;boqy8}X5yE-SOebuEiKFekfmta5pnc?$vxIdYxb3mBZ z&jbUrFCpgD_E-vN9d3AU1Hr12$nTs=%j&8r{lk=B-JJFDBK&_2I8Th%U5i*u$NRBs zzii(Z#q6%Via^R>6Ud#lN$^qL<80Tv80|dA$LR6uZYx3FsSOthvPbD5_}CWbjLZ35 zVIl(D(#m;bIXMTb1D#6$)6jJM?7H_lU^>EEwxA!b-E3TXV|%gn098Lq7rHpX-?;pEo=1ZD0~g zR#INhj~NxGl)YtVDiCBi>1|Nx&xTWt5Yl3rqY@c}Wuxm5>rOAJ_k*i4-ktEZqY4`I zw6i2Llc2!ax2OpDr!zS@Ik9^ycgq|?yFo1(;^X5xXUl}G9z!g`$*HrIv~1nzqHhCI zj!~4{D7V*GBuOl_2Zfj9Y_u*8M^q=DupEy*)=!KoVV`qwdHke8yJ;f>BO~AKRZdkk zD?{F4D{%@Yf$wMCdmv&WyQjAtWmKuOgLqs>>=U4udfU zy9Ybt&af)ZFhe%dP0qeo?hgktJpnFRS~Sh7Ie=^E`lFijLY+)@=w7jX%6Mb>Tnr3VfU!$9n-uc)UBhj(4oF z7vPO3Gco@O$+IUu_P&9E(itzC`XVTGItN$}1?%lu!u1cGmOCM39amV+#L)>Ec{8?` zVy*y4Xl%aWTV{2I>(1})L(QMSJTYefPEh~)5B>zgA`>Tsntlj_%h0T&E;mH3iGrZ^ z;NhD7=gS@W$My1+k#QBz*pNvNrn|;1G^}aPbZRAH^e>L%RyGel*$b{t7dEiS%g)=A z{inOlIakxp{d?AMvptrNJsg;7ayvX-o45ef-z*UVA;4$0E-bKfNh>>8af zK-wiOrm4_(%!swo94XU4Dt?EKM1dls3>mN`1q@S-&Z8nv7t)%;D>^)^@Hkn?K9FzKnb?7PN(F;&9eX8`Vf5t z)=0IR`z5s=5fCOSxI1S4Wa~*aZu>T^H6=BkJKNZ#uv2Vdqtc|&ZG3rk^;0NnA%x}+ zRwNeCf4=($yyHY-N10Dh5WtpDXh)Y>ug6ks;{TFhn`kub;9SAuylf}K_%4EFA4H+q zsuPnwEk$v76XisVegwhHbsGC1Vm%PC1^J*T*Do0yF? zQ24A2JDU@aOkjiI*lJ$C>vVeSdqR9cyYWz(czQb_0YUf7>8Xny4_2(K{B)c?@$Vf? zr~7!{(MVu`t+Hd)$Ew?zlI-4G>I!4(N&GGgVs_pivGW{<;&2KTD!6O^>?zDK9BW=r zjh)vcjd_lrs@k?wAvZy+H4{v?{OQfg3G?S8&G&MU`n>wFqWex~{cim6|zc!$;S>DEI|K1a+ z?~k(cOo_PIcpZ&OQyTL=W5>Jk_mlJMzMweylnAhqLs1Z`CQ>NX_yf0NoN>e_-2@6g z?`iUw*=jVc`H_)y7}#%-+!PAinAnx>^ps#VcZdRq)ww!H1YPROKv| zL8{Z4PKhp_3Zu=K>O2&4>WVQ(#{m4AU1B8!GPH9ZoW_2!qj0~GYgBQR!ljIxRsSmM z1&O^vBE8@#Vfvay=v&hx{OZ;2Q~Z=CwmUYwwLFOJ3(p~sy(w8_7>+J@0SCE8;sf3e z5D!b+Zv~{32Wd6#Cl&GZh9L%B_dhw$E_jpdSKT-%L|OOmUo1PN)vuUZ#N2I@&|6+y zoYMqO5EDA67NOLAK*)iBrFRU%ew5tv!Y~6`!))E6h0q=s8cllbPcD8&zUzO?PfBg> z_Kjt(+%(fFyUehIRy=7u^+&Jdu*d^F)y5khn`m0-bxxbd6~2H+)hui+FCp=y9#;R( z$w=&IF|plaF`{&}WOaPksQo++GoYcM|eJ{d@ZTV zH_9k>a7-9zfYMGcwnIL4baaGv|J?akS0^g+_IKelKusehkzyqxQKgDwz{Rx=u+Uxp z!858P^JnQ$n=qR+kByS)PV#QQ29H8gXu`&JGGcA<&9`ZqSK5&(z8l&;8D$BFu9HcR zei|KWt7-yKGdy-jTfhG@wa^E1i?F!D&W9-j*4Xgr8h)De^t%q18HR zM;@!-#~|=t2!5vYylikCc2Tu3!nxm2NARS*!QCZin0MKxfJm=>V*7i zpt_X)`ojH#fyaPU9K>))@+0RD8D_HhG&4Ho89y6jsytqE(K$dx_Kro@*O(D-U9!qW zixLw3dbkdvtuPA5lS_2er2e44w)TF*o}%8IfDHvfT*`%3Kvnhi3IthK(IXd9&YbD? zYH7+-BR%Zn#}(zJfg-Z~nbXVj1cu+QeeF#k7(0uL`U)vX=e^*b?$B}H_q+^rRP1{q zL#rih9@qV8_4zBNC9)ZS@`g>e`-sz8Y(6dSz9u83IVn3Qk87BhfjL^1>3K~aOO2GaVK)vF;KiYDq zOLE@z60;!R_F7uwNdZkjOtfcVp!CQ|aVp8+li-Sr1c%mAE;g1Omu0KKoA@k{Z$l_~ zeE5qkdc1%^R|lv=zY{{BM}|aIDn)a_#_D;^E3W;OkifBKf)A2yVrDOwj)QxD(yE?Y zjyPtwu8&CV4&{6~5=}RNkM56in9qTfr~xE0(^yK$9Pa7R-reqgnW&`PYW?Kvd-Ntp z9~4BBn^-YXf`t&WGMu38qdLPbgE(oPs`3>THNu$4d_b)h{Efqy{|;YpGqrJFF5fb6 zq+)jzv%|uec{sM zD)dL+?Yvuz5B^j)N;rrc@ZzQ(&>cUUZfOC9XAE#>;IDsOe|zx|GY&&C(lH_Y>g5hT zep_ElaPK~J8aSJmvbu!3ZQ{&Usd_SMCad2tO_Yi|+h=q?hOZQ}ya6SBa#i6mK_MlA zL52DG{au38*74OfnL}+eGUaOO;9ma;e}BDkurtviNyMt}yi(@5GNd#Q>&c1Nl)t_; zv+wS-R-lwD9(hud&w79#(rp92-rmtgq_u2NXPf%o#aK~BCa`Hoxx@I^Hq(IM!7k>t z!u!~twP{7R9cPykuMO0NBT3#NHR@urdLQ}Lor%O=sx_jIxpK4te0;HY>26g~Nl6>sj!N5eYfDf|L{+ z)9iZKs2+|fgq~cOXWVoHFZR`M2BF%tT?I^OaQ)$u5Kuz}mL6Ce6<(cPh&#_wyx64FKz$aRFl>~KK|e`r$%Uy*w$%Xu8u`1a%sAmwPEh5qm# zHl`z5ljU91`Q%zM*tu>`SklOLgR=IzgsV&?4LTaGitF!CF>`V`z_P_7*tnL7_@Ll1 z%he$>%hOtom5IQ@_d9qgv+m~8>I;~+eyiLg4k@139MOMbr%F0KlOOYpX=gVPv763b z3EX~3v?z}`=od8O=a8IAhAH-<& z!xk?1U(s>uDwU>Rk3y!#UQ6{!hAQ9V#vyapM$lt&x zOxAX09qRH^b5HZ%|57xAevL3OulP;6TXa5C*t{KDm2){#IGQq*6EsWN-IH`*S$PqzlAaJlbae;M8u zMCRRJo4wK4I=h+jm_^e68i+FddEGQ~!}A5L}= z+UZsb(}m6nEySIl9^{PQLx?}}xw#A`Rnr+#y!E8T3f>j85@JWIPiPX(BR*g&g898odIvF)k$3d{~$+WQ-snbB)&#>D(66=had z2hUox=WFLkT~pI!~u5B zI$gh8y17oU9!`Q7EBS707c+>c&zeQLcvnA zp$d{LAjP}FdfDo1+=-U>xMLz{+C8{cNEc(#8`1T&r2_%*P8j;TgY}EE*{!O5fvr4< zn4VXW(Wr|5ft?v`I!5ONfd~@v4=Dr4;~MV+o!LBABi$b7zk*+sU3~KE>i{tJ2@{dwiQ5A^N zxkrNxy%RK(O><#%%LZ5eIJth3W2&krm_De*aIGP4<^dU5o}-#BTYAs4zVCbHCKnOo zHNk+)`7x*BjMr$RPlQP1{|xDQ5(aRjdu#su!pkX8?gzozd?|FzS7|^sn(%m z?k~cYdP=StFA9Uy1a6IoIO7_kRM_K}vwc_bG3lxoy_$8_A=P zO+gDIe22I^b%JhL7-y%mW5|{M+iT0;@vy~w0Nq$Kt}l!DU&4>4=L-$50mvXeUTbAw zEMj}PMMShM*rG6p%fCsJE%o(lZ{fW%QT(OPMo}MOn3%Nz{o%?c=34yIxdST%;K!1~ zZNGYl;}Hrwa3|K2%eMIVtY9}3IT4ZV zi&%EDN%ZM~0owQPIZqDFh&e;IuNl+VTO>oea(I-VO>09_r+@vy!J-H&qyK7*5x5mU zy*2lJV=_qG7cYxmfimA7D={LR$o9=d*hHerIZdI?DoXkJSra(?*=)ySdzY9A-7sc~ z7{Pf)yB~m~j^7=YoO&=p;{(&SkYe7N87!nf` zdkF$RyB3{@Mv{KCe)8pA^JeY*MT0F7YO9EA9>9KlooC!qznz z3CgDOk!&vZ$=@H3%?)KZIfcC|6R|rZ-9u-OVNHNwNi6<~U9>Mc!7jJI zP1`|sTT!lPGAie%z(f|yH&cHpv78r}AvWyo)EHFhec{OYEZHf8WXFg8E1TU_NUviER@U?zq&Gx3h0iFC9(&TuzZb_$}7_{Vm&@O zdY70)?!Z-?^RsBcknN<_G_eEmU}tf6cy5Rx^JR6v!MVL9nicJ`@mYG6PS^m6)GZC; z^{&55LSmp@2=5-}+W;uI6bYp6nCa-W)XGqamxUUaX&Mho6RXY(MA2bjpuEimt&CNz zOm1Gb%2;?6`i}5Jk5j|>rYtF#%Bzyv?UscY@s|yZd_oJ-ZTvmCo@PhTv=b%}E*s6& zpUdX`32~jN!Y}ZYHiGpi0RrhenO=RAlu!CGTUEM3OECAeeU)2Y-XRU$9D&-@k7aU06LX$r=DzQ(e@uGtqDgRJlnT4x+NAg}_{(klAckRuqmTTJ=JsoEx|1n=#4Ls>4yZM*p*}xV zfK2#?lsU7nHB0jLexH_pSu~Ui`7a1OHRMphI(p%^zp_S#j~G& zHbt}T*M&jBkHhzNf6YqsT&F2G{fArFpg@KN_}f!MA(9n@6M+UuP32XfYZ=S=sQ8^n zY!SPw6gjbU54!Ozr0W=vNrXvvN`eJv+*kJ_u#nwSU%SO_UmG;E|4Tog@|Tf7L;HVx z^hM=<6OfCQmDN4a!q(oNq~VrNZi@VXh6U$B=f(i(dNxiOl>GRh>n)pv|HMZ+!*PgL zVCpWR%etZD2eYr!P0FU=BNmEuktD%opHrWI%bj?|6VqnEegsB9v`t`iQPS+D|N76X zE0kog38;s>U>q@tlHOTL3$vr&JaFRW>neCt6$Ll2ubtxgdF$$?6_g|%{_wb)^oh^# zlqQoc#|lBjjGVRLUw*4A6b0IkY}bS3GCeBdNqDP7ta+-BHXhvW)nYvh^SlTCBKW>y z9NOL&F%x`vyL(1Y`qj<--SRJshmkb{Rqb77dZrw=B6u`egTG<({~BhlpI@X3Pzls! ze2>(!jt&&&=l54a^cK_Y19}87xUXU+k%2K%_^-@EcHMzK(S=G zZKti}WQkj-ajubyVIZ-Xx4WKt{U3BN0z`GE6=EHF^z+NRrsR)Ec(qJsFLf;+*x9+^ z>R7;GdASHXQ*ux9&tywiC2}aqmdFEvnIbVHabEbtk+ue6+GHF(ajd~uio*l-??yD_t zGrsk^cLpjsOkm>B=3F{{HhCC#ZgV`P=RK=LC9{1g^ zsrOSDG;YIJSn^brxu8HE$BqS8_*>f}Yr1!(pvW0_ayfLnYyr6h^%Z_+44{(v7}$)0 zG{kgZQ#T(2C_cZmnv&871ksd zU7?@#=0Wme`QJfmVkUH$_pR$^&wJ$?FEKHi8_7r~_i)g*$6FM0EkIw*nn9bgSEq_>NHQ=OA;# z%1&GM%I*fJaPR?-8zO$e87{nn9Sfws$oo=3o%+J5?|u!rSz$x_TeFr zLc;t9;6);iKfpor3gnpA1+0bebffG%(CwL~l}k$)7+ zKYz31QsRH+>hQQB(UoK`PiwQn$fZ`lr#)#uOF&p;bZSszPoG(92 zVdWX4?U$PwmhVw(B!m}E84;E)Mt*1z+k5Tbbt68xi2&cGHQ8GoGq|hfUX#?+lOliV zk}hC@Nu)rz=(sJebrr)_)3W&9BH0E&1jk6)9pdWNHHS%qsZK@L*JJIA1zw{R zjLv1>1yTGYg`Gs@pFLt`%;|I*GzKEiuWU?Anynsq;jaLPy%gr{840MNz-qD}7BxB_w%b zu({3w@ARePC2&WeeLvJ~`rO5LF*3D44=SHNS<>Ha&PWQ~cBDOjeuY(^X+swWMk`dVXSL_Kwu@{<~jw&vAU| z{j~kFB8~h}>pJY?z*P2^Co^P=3NU2no`363FyJmaKDb;%Mdi*2 z&=qG@7x)0PJX<^~bcxCla~1f^TZwa;xBGyzskm6%^??EM{}P1rYX}pN1pa#Y*TJVr}*N+ln&PPcc`B29;H|bq{LA{^ivS+)+Uz{L zu;BqxPRJwf^?-ZG)a?EH7&shGB$0qI7|$9wjG60VxefsH++8mkU@dd5*4zc&*FBV| zQ23T-#JVc9O;6b!m?1`HWx4>0=KmmT;O}~mVd zUNXL(=4HLUd!5_Z_n6*ByX0ELowUA$#zruCewEM;42r+80G*)A93lz$rTCqlQU~aI z61@YGb4%RQmvDqhyFf>WJe+B0YVrk4^OT)J>;23j%$(PNT$5Z4u=mu&Yyl&gDq0Kh z*8uF$+L(=z<%1hE!cY|q=De~qV1UzHKNtbayyDlVJE4N)#wK!9t^cL-EeH|;W;<2u zx!nX6fga*;?hr^(VWE`QL45q#MmSVP7H*-~mnz%>V1@l&eXq(oUMslVb;)bEP0f>V zL_^j5=>EcOCYnyGm*=0G>I2KTqdR~Hq6yeDK1w|&G}N5JUv(!MT~5nr?6sN&!{=~J zC8WxcNF)m0fkMWw!<^jR2{;%5N6pa)W>@am#V9G!v&r1!`gn9y+bAjtysI+v0@lgR zkj~2URZ5$8!M@*GP8rYrS!>v-PhtDPTBxEYWT5V_E~C2_YSq1+{ROn^>uYu z_WMCVmeUtMoVJR^3!@GW4u~rtShA4dLp~W!ar-RH?8yj<eEWZL69<4;wiK+aE!jn&n6<EQmg+Gdn!=Xy$0KwUegEX18K*FG@C>l@Z&@*&o@KB0CDjwQ(K~?f3<5V(-4D2E z>YCEh4Nb(D5_VZH*HI|$+}WeJSR;?)$db3(+N2dlP*_9+4?llFULJODFSa*=RgwqQ z&8NFutzT4qn_{TwP52c+`-r)BXJ`?S|I53{VI%0kJLvN%P!LHv^-KjT*=#knhUc znv^x|rAwEHWE_Gr7wO9v#K>>BvW_8aQ+6|(c<(}184-90fUHg&EvP7uNCScKy_i(* z^V!wLFDzFT#e2sUZ* zKA7m-8Fk;+SI4juBM3Y0E;DN<6UGsMXd`t%kW1Rwym$J zsj2x=D}Xu%_6`|QQT2HIN^Y*GrE2&6ZYr-HMOP+7bKkHUbXO5Xr1$p6?4)9% zHH|c{v);I8d;drD@_iBpMt&pkoNF2FwdKi_0>e>=+b7LCuYpLz6ezZ8{BRR3!TKak zP?9of1M4!h?QQ5!?j#Vet2Nfx5f&n00wN-Nk%E*v;^J+_GrQ4j(rKhF9bhgJI_}a( z8YTel7N}{D`&hSy_F;qLoM_syp~E(VPILU+eEEJf8$0_}Z?8(E99}P>yE_?5CLUw@ z7`nLk8qj2}haXaH#{m7Y7D(V93t)2gwIdZ(c3r&WAeb_#!_2}0!xn&(l%XvP-dUM7n8YAa~Rn>eC3L z5I{bw36{e{j9mvvvJXMAhu7Ar!tmo)+5|SHI*;89^>yOWLL?w}clqe(i0fWoj9Tfq z$%xe>@+q=NIR#C@P&Q^N#@~y0uE=cI{9!^g3jy0vs%%8R&$4KP+omsW8wRdglN00+ zB)nw$kw_qD@r=4Rks{~j=I)}nx$bqKW@l$bJv~)aRDc{@YTUP4*G>&E7@esY@%(v@ z6j&d>s=@+Et^exMsjMwvXi=WipIq%u!){(XAJpS1Dk_@x#cQ5I+OW))8+JUy$jF%B z8kyWWmgZI36{I1HFR6~J8F!?+a{L?!155^O!qXcX>Va8vRM!t3GZ7*m)*#?sP&}bG z^CqX6eU|e76o@j6>$TWdmp*Fc{3*IwY(}4U;OF6i309!0eWL zOqi4z85l52OOVPMO94F*>zfIka;0-*HV)Wc7cWe|!VBAzAgU-f(cqq@oHkx;u%ARB zJ0$Q)h>MfA+y$$!Rlx@4;<)Zx)5ezaCFA2`BQ!S3e7^e)Xg4=kGJ=AOR%EXpo0@=I zZtEWJe+N*k{Z@5*hnD=?AuM-m79GeK1PX76BrYJJeZCgqy^2doF*^LZxw*NGpnNRN>MYnYFc-Qt zHV4{T66%SaCQfPfedD1K|-8y3O~fvZ$5W zy1}LhBC5ki7 zcl-$8c>FcHFTPU)j%4cW;^M(ZML)ZYNAAY2fVr>za)cg0_0s$v-1fLDhBuBSyiL~o zP;RH0l!hOXceZ{uZc>k@_gSZp0$T}EaK2H5PA zIrV-BP9{?WyQH)du(zV3np%G>f12;XpyCah)@r+LcZi#f;iDW?^H5Z#Mt+U&Dic#E zu2T%%0MK51KCF*Px-8%8Q^BI+o%!D3WS6Bof5Kt5_d_bK6Ny;P$cFefH0MO;l6O^m7n)?MKjKg*Z zJU6CmN}9++B`{Jqpk(XBqFtzaxWGYKnJ8OmaNFM9-zSX^8i{&e-%9f{2DOySOniQHDXJCw&0sdhwcowl*0DqgW4S1W4=+IQtjsHqG1mHuaQ% zj^A5qXzUp{G?khBJpE@ZH(yXilV)(|gpOU;ixgf?Pgk0X+`3gdA)sxsBI>z1)%x6O zeI+qh;gseV_`TMSxj9r$+Of6ccSLhI5|}(=Mc~QurC~wx1|>K+^RE{j9L-JH!`mno z^Ed;MzU+VMmBL{}lEVfEJhHKhMe-6=?K+nbS5)Y~Ndlr4NYWRj2}~&}-Ok8Uhk!KP z-bfzu>({a};Xf{o9}0*wD$6c+6}qd6Uoe^qtP*CIkV8Gu=}f;H(?mPohrL;QKQOyI zxgra@`JzIBj34>jgAjCy1^EBjlf&LL$}VyI7n1JS8`&Kiv|AT5vqT-gOjPU~B#F%^ zZH4YLk&dmVcWczN1Nl8{-<393?gN}dkc5PU@K3L&ts5H~v`b4g0rS#ma&<{b8Zb<1 zIg*)MCF`E-FRmJ@%fC+mo_iSae-EHhz`LR^lqiRQ78)XcKY?-1uQo z*{R{Y`$foNIrY$)7h&7wP5x2=wRMWC^~9!z`Dxh!&FE-IV|lmj#m=c4hA&L}T7vwcN6F$x3FUupY&;%&G8LDrc6FBXE618mC(3_r}U*Om0;YFEUlPwt?c>}}0 zanm^pF&EzRYnd7zdpFWAl(6KK-mJ3DheWK~1|eIeMdaj~Ra|REsuJ*@Yh9=%;M1Ea z(-}43shis!VG3gzE%2&i%Y22G&ZfCowTyz2(n?4r%R!=C1y-t^@ z)fQGd_|9JeG;ig?ssa$C*HTUojsN)UWeADiWKNb5oJcLnhfMO`^iay)+Fg6xzE%WK z+D!!%cVhEH#pc~^c}>4_a=@)ZU(GB}>ArYHKTG zOtt0Q2nts%Jc0uBBL}1!l-^TqGTgc*?i$8iIs36aP~WHwGu7DEmJQJJh#M$0td!A? z_te32g9qGIrv8H=~F<+@0RsiVv78A0K)XrNJAa@*kNWz3w255K6i!ES_A*H z^b4e{1H#3uF)nUYpWcb7{;^<@- z>3)#~_xN{DrtXZwi&=H>4J++*=-lMWefqwJnl%p~5;@F!T0|pg2y?Z^ZmHcRbj`pn zZDyS_t|%E(QVkPS{%!fZGKD{P+`#bka*^TuxCh_5GBi?ei5>2t_qus!Ow|Bm1igoN z3i`ftLCqkRxe!u6CPIyPB0;R;O5cfR;~3C=V@(iu^>TQZ>K~38f2GytB82NV5>X&$kE1`eZ@1u@H16`4+dsp~MFHI9v@BkWgN5R^-|1QWP{f&BrBa9N73H(!GdtDk z{*GC|iseKuYu7OGzYZ60p1X$nh-2Vd-_0*u?g>-6LMPbrNh z<_g!M?Ev-mHGiYG&p3Z|_kD|#Xw8~PRl&4&S=haQVKTi$H94Xm6|JK?K4^K~9mD(gr@w~A zS@w-FG52kecHSF3nOrj$ZVD+LN-jT~I~H6@S*7W%bn{ z!rRjmNm=YRkmLgvDWT2I&+D6Z4)7X;Awz|&`r?->*~NwTO{a4tjMP&+zZdK@rxUet z-?a7?IfwMvdD85!*$)y8YsV2Q^1~)X%*yi0oA`d>7?`fZ4#WfK%=M2 zV<$c4p`2`%VtJRBVogF}d% z+ngdtV?KUW*Vip<952S^Cepqa*<=Ih|i<+wjPdp-xM9> z`*x%HY*I}pjLY|o(~e?n#)?%h-lS9TzWmLo_=0d-=PF(O%<4ouVJ?PiGp|>dJFKm| zuyDwJdr^!?xiN3cKl47xr0_xUs!ON%Gh%3RTrL-z5RZMSB7C*B9SZSRJ_t5T+1oVV{ zgRK)9Get7tvS;S!m)PJ<-X6ZVc!h^|kmXcaoZcggFB~A4yHjd@kJB6UZ1z(nmoW|1Ze(rZj8BkHEfQVS%_>jKw zsA&G+ds$;(WxL5ZpXcPXuM|OF=JtunleNSd8`=Hs-Rx2OTK$UEc2lUi7HMoaKm_jo zvg6BZt}#1-Pf;S*Bz(T-XSYU&O0R0=EI{7k4_eRfSG>Qk|PiB01p z6^4LK&fDfo8CIb6;8*%#kge~Z8TMpaTk-SyX+fKY7R1qN`1>)2FMDx0LRUW&U_3() zhxV$|SH~Yq!Xws!)wGTyLjU)B*{ZtbiuqRgyKM9i&SwsKjRtfp)EQMCg8tz_fuU8CzMgbNgqXCo%MNzwjYimA{^9I~ zf?-aXMo8CJ(U1am9r7_^saqp5vuGOsur-0cCWVPTOBB5Z0iUd3MwdqYF7Gp>aCDtP z&K1nn)f>jBL-gq%ssQ>iF_E`CN%CC<)=wg{;JuSoRVD<~xt2^BKFvi(Nb`iQwuYe= zYRpXJ7N7rJ(tPawm5PuEU)}tH^R0qTur>L(R$h>;p*c)4iUTF^YuCK=r3-8kn5{U zs?u%&@pCy6eJ^f#ZF6VyUmXTAX+n@okF>OtK0Ca9F*1PuRJ~Ui6&NZOTdKEZ%$`x6 zm1%Sq{W1YcpVFuO4g7h+0C%YCJ?+&2jx}27%{UC#bAyG|73{5$hb<#w&Q5W-3mU1b zUS(%?%x@CG7%onpoo0ypuvH>iFWPYb_B-U>o1(TiO)ywf?W^o`B@q3s1Nff#8)>k6 zg8n-7d9iB$m%=g&mz=0QJlCGbh(-U(%I63(_!oP83z8 zu8%&d(f{1QFI$=R^lZKN1)U<42}RGK)?sA5HJk;mTM$8nD$;7rB_!aEyD(08sJFuG zZn#{u*nzH@OyoLr#F1eC4wQVap{tfVz4+&<4Jc*^^$oUY)mdhU4rh9|Q1m?-d|*4i zM_boEYQ%o^j!x=iBq79#dhvr*N|jlYti|T4aEFKf)c4()q=gq(YJ4WWF<>t9msW37 zXdvC8s8d#Bpl~N5 z6%yX<^C($Tdu+(=kz`%{^bRUW)}=eC=v>RCUIx!B{_$h!p|LRw#DmX`F)b%SjA1oIr^(8PJV9wlZmC{+ z=%u>lb7x7{?$);rD&Sw*YsPx54jV}u zi$O+oxYjU#;e|$q1K_pD8LP@yIy8 z9sJ$AV-=p;-`!PWKWfl_TQwG!msu1(C2v_D5|Ob`C&s@CD6b*|jOMu}7?Ua}Z$D@@ z$Ygd3jWI)e={{@v)J}Fuy|IazVGZcv08)F7<*FxK>5Zyi5}JN{ z9@wRMTIuB3uZ%=`{+iH=f>vi6rB+Bc^xnEW6f-tal9`@em7RSYa?YzS;$U;#Y8a3L z={wa1Q#kGKe+WqHFA-sca<>a(t7C}lIEh=*=OfX z&+x4?F0XOrVCJs54nqs8_gzEZZ8e(%V3$mzq@`z`#%VIvbJa6V)A8k(+`|04jqtEw z{c_a=s0iYbjYII8y1*QTuGPto&nuyNS(fx-_&$`--lsxQPMt!RKH0Bvu-xUaH;=u8 zEDM!r8pbSx1^VDfg8PklyKvFCDb4A$&8fR_MQ*&^(weS$J7L(a$k&WUN6MCSH&a=S zJXd}pQ#cro+U^CcGrw+CNn~Oh^Ym(uV6PYwd*ErFO?>&(&^;lf^jvqn+Iz-jj%mF` z_Jq`HCH*|E8a&)vyk-kql3VJ$aY+@bF|5-@rliZ?+)b=IAUBr)nF${)Q%M;hz}fN<*`EsT9yTpbVb4E(v&i^+k5o!S&GI+M&F%O{Me(=Ug_X1o$}2+Dw)o1& zGO;wO^)qv8D+^jq?FS<%l5#iZ0{A`n?2X^JJY7vUTAKXl8}etywD^ZWeb`z@kR?D# zyjEs{G_=8Ccq2zk3@x6#taUM;-grq-kC93yYK&RbzfTj8@ys1C^-j?K@f(#|fSJ0V z5LmdtfbCbg+1+T}2 zLw>EuwD_zZ%{W(>@7P(bllj1x5rK_enS_G7qVmNPdKRAp2{#`}E50y_ITJ<*$$cgg zyI!FhyT~yK&ZPxE0%^c%pHG#Zj5DcCm5`_$_&k2At9$Y4*SeoYd>GqTQ1y>hQMIoZ z7;gGNf}?~bJ}GX@dV@?id4!>oP@FfKv3YUW&i?l}K&Nw4?ACb7S`%am@q%6qh#(VqVOV-N^%LF&3{i92;jG+IX& ztsHm8imYyc&P;~0Hc5oLH`0XtDi*n~>>u~x zv>9jJ14hd#jVz50FgALjMppLwDU-ETK3P4^Uw8dwV(@G8Q=iVyF<+Mr9K*r*)M3LrO>W%~p|mWR2!`gIE-LNd1C@B9Bkx1#BQKTq-h z3}r`FzMP_o8>pm9{}ZF7GKu>CwXPvhe9-+B0PmvO5PJ&pKui;1a!4|Z%Md2uIH-zRGwy? zAbAhA(Lxiz`S^ijOQ2W+6D^?n(7GwRyvxT@25JD^AI>jFkk3 zgbm;hS*6|P=>-w7F_5)7*ilHq7^Lw~#E?ulq)(m3w{~>sEmYNw3^=Z8WDc5qJ5~AT z{b!d?z(3hZ?C{<28da~_1|pFEK%@JOBJ^SH#&_mbGc`M;T&bvfk92$JZ zU27wG<>26kWU2Mi-sU#!V9T3>RW7m0elve}a(rwQh}i)-dPB2>G_MukF3b?`iWzN;(%F{O)uv(%!ECZ^UYj7p3xYFD>bG zH}uQEABo<@>uMvx6u0s!mF>+e=vwFfy#1ERNiXs-x|*8WyS_HJk710`qO(QV2Uqws zP8%PMF0>B1u6maK=A^ev zVBR%VRlO+GdLB0@Eivj~o#MHwJN62BL`}hgOqZWi7WUDPoi~nxIG~)U+|hh78*S+F z*Iu5OHMkvzZ>1TAats#iU+tUoBA8wBoh(^|%EWXC9Kz^tI)_Z^#10P zr;&d0dYPolXvbsR$qRu?FXxks0Ci0q$Gob?%3zN z3~`iHV|emp{o&`&|FpIBDbX2ORAhbsZee2beb%tZ7TAR3Ydi!L1Al+kC`g%}nyPQ` z#^aT_Ro_$QV#Y-n1&K&C-^biuhudJ^s{H)rJZ=uy%1MCc#+w#X*!wv;L-J@X64Ap?{qNmb-P^0DOfsEIR&{Y?-#onR)jS^R&xhUXO* z_XWFHb~)Bn73EY^)a3q<6X1H8slGj9a7$L&q&xdtGgV}7+H0mOoZGfB(3{BHvUagR zO60Mpac<`b*thJ}#4j5Thw+Z9uWEi;F}p~XxtwND4N1gT0|iaT4pSMrP4jIgy}VTd z0wC|wXJ(9xe+h>{p$$0pFA<4w^ZlIDXGjtbUN0@so|gMn`bD8_3Xd<+yYuRdGpYH` zRqQ&Ik$s!!ZFMEg0+sCSrXh@5dHWv3ipZWs2ChG!^A`0<(VXFMW#4cpsS3NPUO@^{ zWF{yZO~c>4lM@hFQ=sLK{Tol+oAL z*#rt2-4gDW;28o*H<->$U12iL$x-lFGc-uV9_GPi%>>)g{bm-WmOtzCQ-YM;QyBTb z94!8hsod{xJ0 zDaA=iH7ris@cA4MwL&0RhbC+UQ4emtWEKhN54zp_^HyOeB`}1hduaAA(i}{X$*Z;T zx4oHGKAv)#HF+g(HlD54>+XE*>BoA#Ik}wvw{?Av5f^YV3FYP{&HdxD4+i!Vij;!Z zKXl~c*ZM|8_)^nY@w?o|+%7!zSg1%hyCfvAz^iAeCq6wQWDgXrvves$NKTAzzQa`wA2!ab& zWoc2iLHM0%obzRNNeTyuyt0YFytjCc+&5+7w6u7U!duuanEUlZdEhm(j6D* zak3t{zqJa!>eaN8`YnTe+%qiCHOAE5I4U^V!wW7eb})a12DiriD?s;G%O+)p#Awa{u*Hrk{!#hk6TDukWY zTn<9DPa)*gXMB&G$cOZ*HjmbN6e`5})`YuX5svE>6seQDnvU|Qql=4Eg_oTd2FF(AqWvhmY6Wp7N;SbE!_>|m-c!$#(xOI4Hu z48qOby`iqo4oS>YpdJ2efEFC_Tev1czs?*3^j(Mlq{0D!GJ!w`nMo zfXRdoJyVfvJMLeBHl<;zLq|+SFa34b96yDs1HCm>u_ho!-o+t+4Y|zTY{HojRPk@^ zxw-1S)CKyivtDQYgIMEk2Q(1@@l>Ec_7AYxsL7KLe6U0(}cFZU)vtT)%H26^TfO#_`c**|N3rJ(U*Xzir56N!-E^IEm5OACfqfF zQ(Vs7|KW})KLet-H%zwYY(%gHqu+X&RP3+Ung17&=i*h1Q=0y=CMQImm__kBPyqN0 z9Do2?h2KLHlgICtG`w|OoSAP;KL1aH7ykta13>EkU0v(u@H#-+3y?|sna0K-A!^yG z2qGaB8GmnD_a85)fdm-cKl_x!x>m3JX?m7fN|m%~X_orbJ=qJ(4T56dHu$}!ice*Z zgdenBg!W`R*nO!@S4%u#(DPjW+^W8HS|=JNZY&kIvr)4>j@*h(i-PHMx=Kj7|2~8E zeL8y?KNXE&)a+#`kvqwU0=3N|BO@PsEIwO1Q=u49_}IBrLG>EoOJ)~Mx=3<9cxj;F z<0Sul(IcFBf9AOKfpfQ|hHFMi)4#-?WbLV|V&b7U`I*ITZnOFB_Q+}te8+2YRJ6}3u`0~ko_UlrMJ zMu$a~sCCzsM;wgsdds>e;^BBd zj=oQ$X~FWYMaj`hP7o1s@V-6=Y9|qjo8he#1HWUFti2`K-GJHfFEeO@B1od4u~!Qo zHKuBwh6n%gdfkwRLo(LW&TfnLvHKLSh-3rv5u_2WG3))k^1e%P1Lp3$}%Y1x53L!voLh`l>s3?wCdmW`XLmjx7aA2eXbH(uF&4 zJ2Kd7PCB)kxfkYv9dXR}E`Bo6-fio-c&V3~{!0=1xVmqQ43Ava^9JvJn`?Fj<5w9eGwJ)Ac`dRn z*}{M~sjOIKelD?Y@YJ4W)r4+j`Ou#4dPngmdbG@xq~$^!f*j6$ogl4zl_eE@i}!Q? zP);i4+1i(l+Pj!-2e!4>c%lwsx7V`fo-3QLi+eCqZpk#$0;|(>JknJ@Xv}s^xIdN(rbO5GiYkMwl1Z&Q&qLPF_kA7#wki zhqC;3V7KK+D4WWu`;uh@-Z}}CfCY_VyNk1=DB9(TTMIPj%<}&e z3uukv(HgQ8kv9r(G%D2{mF??EF>j^IUsPl~s_T$Wr`6<1t1j0YmjuK0 zDtubYBG~6{vgV5|Z+Pe=)QRx7p|P>PDH8-a6yd4b@`2|U0aB>o5Ae|uH|%HvgEBi1 zJKTj=b<=f;_bJdS3kIp;l{e3U{l&bx){>#Z-VPOK@4iQGe zce(IgRT=uszv=kf6XhfdOXFrsN4;*= zG;=r4FyM_JNdK|Ne*Vub_&}va8*lfYmies57>#X=zb^+)HLB^9n-t|4#F-2R5L%B- zOFpnY0q|q-_C1(>hESyXSACtLO>P+;eJ!Wr=i67sm2yCJ>sAmoFiZ{dN+HL#VDv-4 zQ?wboBtr3RVF~&7Otea%Z$%USxqX0z{o4r-`s^WmuMu%z?^b$A@%qggWs8Am8K?ky z*XejCg;pWpS3gkDMnEQ6R5yA4SNnEqsL@wn+NZ@>+Q)ZeU0jdk2iI>QJ(2a={^tb~ z9@j2!GZ=f{0R-n;x3_K)o7CF#lAZr7Y*hA9GKibh^kH8wg%M|56b9?&cIywa$^wGG zvICB0aUT=QPdKWgq^vA+PFG0tl3LuSXPLhfqC!%Cw?;aMBPtfA(J42oL$9=5nBz#g z={i4afG7kicai4~>qmkl*3g7SESfbM!AV>Y_pyL{)(F$0)QE2P>Ku+6yyuO~9Zk}3 zNWX9}GPi&_7*d0Yy9&B>f5Efty0kWcNC`z30{cS*Wtkq@D=Y>U@sbbrlt8jpa8dXD z*t%BgHhW#-mRhJ{;fv*vmKK-R%Zf+!2P(XMbPocX*>9=_;09NYm6A{kgiR50-x)90|s~G&D_m9fK|0yRL(g{%c zM1)MXwj~Y{8eO+cIV&Nq(?=P6H$#!OTU)})v2-Gxu8{RF+ z=*6Y)t*SJC0zyF!X}-$^KR?!Jw4SJ7>l8GM9JQk7S5Kmvox5eEUB4M0>>9#{Ne z_wOgpPNLbP8xAR{f7jQ*$=Zkd5 zHBl_B;j0rjZR1}CGS~IfRwmZ}tmXrP3c@%XHsNewN70>{;3<*+FhryO0bHbmK(8mf zfb@Omh^2T^O3LW#fM-(`dF#!70LwhP|7OJ$S4g_Rz<=}Ogv2^rwf+Y=4|jATdVqTV zNA!Td=F$lz3^p=jl zoA~XZbmzixbd$*(HHXiGtwId=s9k|6Av`?%PXm75*Zu_egI%FAh!BpmeX zOaqX%l0HX{-rfy=TXw$!xU(kp!nZDgj(&o`)>adTGiace_QqWahnWX|&S_3j07@Y= zyK3s{dh7scD#`+F%j*7vr6mS{BV(oO@p~h8g@W%?Q{jrf#S;f?91w9$Ch5rsy$;ZV ziVCHOI8CtED(>Qb)MCe|&DhOU-fwsJ_xH_A7Z5-tXxqs~g+47E9UKOPuupT+{=GpV z?!u69f1H43*^^NxGz}1Ycw@SbJNMg@^$iRNBg1OlAK~8alx~15gtg)jpoRqEPz&!nUkX^emLOiLkNI{MMk3VBbq=p1W8Fr5gT8U zpo0v#u3r}T*LB!0i|YlxjpaV=1}(bW)5Y34pLM{x3V1BsO+H;Am*pPIrh_adQ47Nd zyx0GHjj8?IQ*=Pg%pxENP)pg{3jwM=Glwr9Gp07Yg{{URh%r#>ck1evikQTz^+1%M zeyyX4$&<^qAEp}{WtRLj@&G9X=kHBq4NcAcf)Y3vED(jmC2a!L8a^JLsz3s4t*vom z7`(EwvaIaHiw6!CV1PHfUT0)vVPnGr%psqjpDGhXEiL%;e~hnF@Z%DjnhOi_haO%{ z_^xiibvzXA>$3)m@Cq|B+_+45fWvit1(Op$hnQV5hAS7s@#+-Xw)4+MCETGZnO;I+^HH%vR@Sr_-= z|Eme{^s2o$%kC0R<+WY`roDV{BF-Ft0TRay_FaW-fcKd_Z6s#K5dgbX!P^q|f3XOE zUzv*a6Og_BVJ4Cg5)yLhy!^9gzdRUU6y)by+uH-&!qf5PFR+0#_>J+Cb(pI!_&WCr z_EOl7K`S396sW9n){zOUO!@oSV&T_ZHZg_BwJE&&!D%Ud6Ek>wGyty4)+74WMOQ zbjY%K1U${!#>U@yIJ?~GV(n?c?@x>EaS=ss26V5vg5D^^TI+6+dxAM!>W#An5&I`E>4F*%9fX#aKv%6a< z@9oS>rSKPjcgxL1^F7S&abbQ_Q&YcX{ZHB&vBnaQ_W>ud7&SCL{&xxYGiXf^+u~#* zcUgVfQPnZ(kDMx(pC3vzQiOoYy!JsT!jLev6|(WxorQJz0{ zI;pF;i^blDwy|+7q-1AvF*3#hU!)+@^40n0B3#!_d}Dxuihj(ciKwXX>H*?vy$y#O z?*RJ0^M`+}1kAgm zd#zP60SKJ6a{e7bj%rbZ|6Ka=Uin_OAP^984ptk=kycX3Q|b`)2dY5kJ6%s5O&;Y@Pfx1^M&)pU3+j zax^DP_}}CI!-DS32P31S*cJ|whwp1IU60R1&yBMF>YAEh>8y&1b!3Upk`4lo1+)rk zwY=cuK}C=mnDP~bIPP_@v9Vba_1cDS>h#~wY5U!V!C*pJ#_$wU$rh;T1TzZEc&iga zeC6GJBsbz{|heo`co`e`prvTI?fCxRW`W5MfJQe|SfB}sxjp=!?LHLV(B5i+F zRdtoSD{)5=1k`odKNwc)+#PhuK%pjSLqif1nU|*fBKj!%@aRcE8`Va}q6fy^>ab#d;2918DqEZ#*NAHX^0ABmj* zc1N!*aH|@6C-ftBA`jbR_|3fuh7^#u`)OkZ$Pt}K`P0+)-d(@*od0zB1#5z(lVa$D zi7{&fn<_{_2tmI<%ccnU2`o|6Fq&VL0m-Whp)IPmzhKQv!OFonxjW`84o#Hj>94s@IvX)R&|k=TX;nY`6<@ty-zKEg2cK`jZS~U9{cS z$4;WKwo-uo7U?aFwA6X~_F#RyWLGnkF)mJ!2R2J4w1;_G#F0rbawsp_%f|S->VIMZ z>qSR-gPDr%TaBA=9I?!(!Hqk`b+4#q#ut-P1H`j_%P4)Rx*V_i#;ysrb5gb#kYTaUzz$?5vQV^suAmTxw=HmWZV2=>3{@_DxjH zcGWluk+%(JEQ*|gdxQ3NQ=jc zDNJ&m3+B-j++yz2(siyI;QxoW_l#?D+xCTHMMObGM7r2eKu}S7Q4mlO5NXn3Ap+8+ zw}d54r79{)l_Eu|^d1H2(mMenU3v|W1d=-**V=oZbN9XHoDc7P`Jz8ad7k;qIp+A6 zF{am@Xwy&wY0Ez}3^-t+e@y|w*_f~M%eb(%zJoiy%G+b(m&58sp1>IK1XO~~ z_jB{`6o35qQ9V`Vl3vk0xT7ggsuSKdOq}=ouLQg47{}gj7y_|Tp;0#%oC`-bHevGX zO`A~3&s#%li7_!qfrBuI)r~#jmV+mlC#R-b-(RU*QGfgPErZl{Lz)_c*Lp{R``VPS z*JsoEP$H3Nl9a0)9X?x!(3z$$E)Fv7tx0CX=%VcSU0`7h_lXDwzRaY z;b7wu;jv?+-j5S=?B$97K^z};4b0In`DKsn{Lw)uR-b!a8QM$e9nvtG%pteI(V2x~ zW|emCYAGJ_TDyd;*ocza9P%E@$cgouP46J3eg1sV!Lfp4_hM#d=Ckd0@wllCoSh6L zNMSOR5*US*(2mC)pOmI;ie^fvXmY&!)J%Fctn1%5%B*CM3b%au@*u{3L@eIx>a>qZ z4SGE(h|_c4&K2+2_Tr3U>xZ?*A9;EAxv?LOH|E8Phg|du;-LD_f!LP){<2B+FP``^ zVv3&2uydb*%K*U}(V~c+4hcrm8*SugimQ$70bC&JCRoj5Y^6aq4^_;lEYyvs!`W0J00pVn2q@` z^~uuGQkklWv7}J()lMZrjtVj-US=h^VrVEJ=oSF{8=ZLqRTK3`ljCcZ-YGcqeJKj< zylG>jY-2-s$@I24V~~ki;cLL>tSkc?3BuM+gvzCvp^JA-MTVW$?9k+Ltfc5?43*Lm zaM0YNr>AekbEy*JzWisEH~AI{)p#NLI+>w(_|4n5Ohs(cb*#2~!tYE8^0(Q&ij0Vk z<_I9IpIpcSjM5k-G#!DbYy|kyv-TER&B!sxKpAmy=*cS;=53rvWO^hHBY8GM-muxS zE5&>1mnn$Bx`j`iw;k%^Tt`aX-QEBBs>}#=RjG4c@^d+9CBL%EDMyes-dnGH;P<9} z8*)JSJe1F^htKx-1Z(Q)vF$=#qtVgPIf{C88hKn7ZnZg137|cGe5X=eNk4SxK4(~+ zM)|A*)E)lhh%<1#BxP@b59Jtqp0KMy5(${fx1smL_JqU|dL@~0W6&<%c0f!gMRpHr z=Hl7b>pg`_-j|mu=r~0w?<+UBI+gYxz7YVHlW?`Mb)pd!z4_#~D~z`zze{`UT9-~Fd*N@%%JAI?o9Qnm zrt^E)Z{!~nFs?ScSMvUqG(6uSzau_Bj*et$YWMjm&H;ziqEg~>$KVIN`{EBI|3aZo z9sQdJImZ28{G$I^6OZ)HuQZzRoGXmYbIp%~xd`hM@*U?NND~`1nxk(F@G*qObK3mT zRWD6y3bv5S@|uZ@DX4Q)N{-K<9p=1V#DDjJ=yzQeL@oR1-Vow*>5N};j)Etr$E`ln zQWKBrp>#)+f)`91tPXBD7U~bLS^kKy^S@kB;MCF<*!4l}Gn&?Tj%8SOmkFFRCRK^@&QYfjFNc~I$T;5*3} z&zWyAof{kVo;~u=OG6Jr4XI|6>QwY}Se@}iugyZPd0KA3iy!jd0h}GF0#`$OEqZQE zS*#~9z9a{W=4yAadX|&;j4qizz)Gd5h*A#iW2X`fDB7_gxQw!BcB_d^5inl);3{lOc7?t_$nRIJ3-E zQ)(Ep?DDhYRaHI*Ns~FE<~Zbia?{SDbV-kc$<2N-*>iZR6@J zjjqO~Hsc>VXZH7DHfLmq4{NKZ#*Fcxr zXAp0sI;+XL5qpJF>+dbQXtc@pjKxa#tH)?EPb!1>*zzv5irs|%YLcI~GS5T&D~8ls zL0!{HMunX1dab^ij`5&b>MPZF&IMvt2`)!!d9_@~1CwqQBdy9Owag}!^w?HGXFy=b zRpneO4TtD8fZIMvKXFUH9Snz9R~DMtPn|dlqx2o07{5?BWwU z2-lmNrS%^UQop{vV>|Qnri9nEi-Qj*t>zX;*N#;;&B*UOV2q(7FY1erF67C3d)WL~ zWp#+=ljtqfrWPB;8jfU8j`;6vKGzFn(4dZ88^M;ev1;9=&2e#vKg!o!)2QO%;Ngxh zGvz;o5ptgM2*jpXsFSwyFC4;tc)vdCQaL+!JOFc+QOo6=)04?`rmU5mGcgUHF@Xf? z?WPn4fr|#?v>WN<$APhZ8+~g1m@OYw&yv}`v!8rvx_f(jnOz2?qco_3#a?vYF7j zzAAyz`H2a9YbDz}%!O8cE`@!meJWCNlO^9Eco9BD8XaZ}#H_WSCm}Hr7E@;#z3AAo zVfsv^Rk}u%g^7upZ(2@Tn&`{?sl+jP=P%Zc>z1{jXx<%H&S*Xzl%k4HaJo?-aN?~X zufR|@-}#)%;<*t8gEMO7odI)J$4^|+$1C)vY-yWi8ixtv%u8K%1tc*A0#JA?zd#-C<;1w_` z&}}$LQ*WT;;%3>o&e9QBd+tnPwLDHO^+C^abjU5P zUe#B_&yj(pm#`ZYEs-|FSGA=w_RC1=Rx~)no(r38%8!pCi~O_b(JLR(&XHHtx>%fc zWCA)1~n+5&kO2znjzk3^g<6*Q33;1|1UX^#_s}ZV_(j)X?l`gYK zqe8I5HhmPUU|Y|HZpW>gG~Wqwu`@zVvR)O2v9vv*q}JlGg(FA8yq)#U%+y`aTWf|> zE0d}?L^wl_?VhtI*;Q&5%X$t)q~J=(sKaonTOz;dR-eQjSmj9#X)%U`=kzz4l)79mgzWkDx^tmf#>>;AoMabtS1HLdLOS@a zQlG z%rfXnvwmslnb!eb3+6wzEzDX3KH=oKDt8uBwgQVsWS^2c3RqI(ohfRH@h7X$JLPQC zt+DY@!R*IyM^uaL@V1qMhgcTPA`MR-o5qjWuWb|QShauY=8aI9g)@c5>nb_p`##C+ z)ONmXve@zeSuPjoGUvu655x2D%wjb_*ga&Bl|& z;yG?Z!9+AukOhZfqO-N*Ev%}x8W<1-@wYzgCvL`M|O{>U+W!=O1ydhr9@Yy)<1SJch z<%tCC!9rWjIeUH3%_DQA<7MI&ggO}_XtHbGm3JONg z4g@F(r=F0e_m?2dbLPacAL}n3i8?9R!rp^_CivONKFP!i!%2u7rQtk+FSncR-jp+p ziOP+6a(1G6NyUAsToEmytC}!S==?Z@RmG5=`>Es}acENZ@uOx1ssX0pVyT@*;Ko9< zsKxV+>DK5-5AQe+j~`X!c_swDk-(&P(K$nae-M4&a<86$cw3xvU1Q|V{AU_2U9s5h zp?no9xBM!%o70R6aYuUuy@uBFnu(XzRAuJ2-O5et=_9EViQ%mEbRNhq_rnog;$$hG zp|y|Mz}}GkK~4@~_6J&SgMQk%yMqTnu<}ypXXzILX-2<@pRF)Vts?8od}rvr%;vYw zv(oMyGJoaaU42x&8T{C&ui{N*Td%nk!_g-Mbyzv+a0UN6ezsfZJu>sjYpl!kJik6+ zc*D2XUP!9wm{47qN4Y(R_L{{52&yW)y3JQP3J*UPugB5xgt*Tx)Q*<(#ChcbgyV(M{Vg0z%^C#+^Z?P6Y8`~fW^irE=2mpc({ z>fPk#z)i}%%dv3^GKBdd_cf38{wsI)SoR=|%PpP(dhVTvs@c0nh#uhtft~13Y^W@GQV(Jqcr~VKJV#`nr}WD3U(}g^GG%Kl2aBiXh`V$frHe z^oT9GNEvzMYg;}(xsR@CT2Q~hi}-Zz=AQo}u3php-iu=47TN7{=yh!D&g70q;O0}1 z+sAp>v7T*<9F9=7)sDL1aqy-i+``4BmeTQ7?JC!aul6jA0*_Cl8cre1fuf}L1s)#r zUlebbMV#3W8NB=Ui((myo0@V64D@Y9=pc-<)$7Jg3uqfS+@7|<1vH=Rir>|68F}+v zUf;#e(&1NlPN!Q9aoWllVFq{)SNa<<>qqA1ffYPeK)y?bR0sV&O&!!WUq3Geh0#_1^Tdssvd`2UJw46B(}*bNb4{H~uO|g}EN{2PLlGTkn9`Ag zIWK(*L>#9wg<2&uJj3E}OYN5=rMH*Q{HA^ij_CO>f3`j5Bz|en!g;@3`f3am-7I58 zBqVs6KBwy!Nn*`{4&2suoNg5(y*GW_8beH?6PzC`oa;_k=i}v*Bd*VMVU~TlINg5c zGOBD*1~&`}>^tNm^&jZ#drbW7M z;J?iz4fKDG7a<%3*^KO}6z!!d;Q!smLDL{5;QP^mwxe@;c+$p?5BajA(&R;LEv=1q zIflUMT&1m-B4Y}zQcE=DOJDjxZ{*{H{tHusZZE>P$qQ5pnG3i(RPH&yaNb**qir!| zd&MR0=ARRV2bi5V%lwR<8nX7((aP!xWahM3{g*!LT}hssTydC@l9h3a-Pf=2M(&zG z4P6*=jjvoPC1-DMZ|Ap)uhlZgEe)4%et!`WD!KanOHPH?*wQz8z70*4o^hm6dhTs3O_codYHr^>aPDH%M1fgvkV>D#AOxz{3(2 zAcW`@Sq}hHxvVj#l_l;nbY4&p_9+fx?3vJCouAfB0@2>>U;pe%QAUL2{x5PWDz-Oo z-b_`Atrm#)%tU&l0+;WxIrCdYm|}XCenizD8M2l2X{Yi%CTD#D2%3>Mr@LvfS_i4I zFv!gO{6@NJI)#7u%Zr`La$2eyw<#XFN^0b(rsAwH?!$Rz%~~1DfDfi)T`40V;xuQM zS6+3oE|9Kr=uf}{9Ui|uky`1oSvfmvCHEBh-W#j3D5gKsjwtxw=H08#9rqclt)p@v zv(s+Fkwb*rk8qU275Ju9+BdXsJS{ytpMSf`lDN917Z6CD->R!FoROeEF9+v4@)8h0|_i;a6udQq})n_WR+>oJe zuO)H1+4t|N(JiuGnew9zliJu)Q{)&ZvMC?PpZ1GyvD@C15v@btX8R-VRqTb zef?LeA%}=9JVX=xGM9v3t9r^kcTjUcW!Kl$)g3BYxKun$^0$?!SgFIvswZ65U?Y6p zlciV4dCkH&RR!lp-H%F6UG6iX!y{VdI!8C(WlD~bL=vSjE(nsoF` zfFcCt6nVoSexZ-Mt}4`+c$poFWy;x#iDQgc{}1GUKz+4vR+7^R8uO6iKMO5R`$$g~ z2q}rXLf6Rt<4uoSs)%)SfRa9#PacSi;$r#aOk)4A>oD6nf>9;fniY2B%t2jOk-fdqY>psZpFiuf|J0t^4#x%FqhG}vK1UA14&oDX9)8>PJ;6~~ zxuvtoteH0www8A{_r&v^Z7mfOyR@cP)MWP|HkP9i6n$fLNFou^y%bz4YQ)z=6+>f* z!Vsq(oc-xoD_8&eWfPI^1QSycy`17%XxjeQr#pV1addWez8z0@a1~cz%d{&qI{bQZ zS}_FW%K-(K1b#F&zIX&1W3EHq8Q9cUn%GL+OFPYtYy3LS1aq65r5(Qm+oCm6am;f1 z`i?s>&kSMKeGW6#g;XzvSDC45#BZ zeHUDRy(5vJ18)AK#@B==+}#YG{@!+FGgHXMw8amXtydU?b{bXWLLb36Us@o2qOysa zRQoyOcc8^5ExZ`Q>YLp0<)buhaZ(b<-aQLxgz+aM>MS+ZaYF}FvXG5my?+vdQ?@+H@<2>I8_!z{}km{dT0<;B^S+qfakjBDzi?W1dMYLX@``=+6@ra}9<7qz7|*PA7G z%o~?gyii)d$RKHtX^3*29a!sDSEY5{&%nA~Lnlx{4s&&$?Y_9X$gfIb)8Jv%FQUEz0{rhlh57mp z)}xQO(mQ@J$`)gFU0cqU&bWE1%7@Ov0;`ItIy%9M660^x2X5Or?1$B8tpkhGx;DFv z6a_QnL=|a$!L_p?0&*kD_3ZiW7CZF#WTepxtEvssoDJ@TNOl(%LzVU>r94>u^$#xK z&`D8{q|u1}hEjXuymC$^^wbW&Vcs>#6GaZbf(;iSJTzdUr9{^ z7Lig>bArK~&O#sa6EDXhh9cuLrJ&!joNj&b6n@rLpJrr43S_0}eo1t`i8eHhJ3zao z4+FyOYWM(BgbH2}9=_nSCX!cZL9P^j4YGPL;0%sq(?`zsK&qYd@QbmDyR&kL=ds=K z8MeFP=gaQ2i4CYh5B8ed$EtqE2e37qa!fvdv)H2Jv~>>X?7Cl0ANM~19*+mlWz6_nA$-8%H2kP8CZ=M4SA2`_{@x33uh!2s1SXs@+|fZ!abZ(M2Ir1h zJGbm-fD)O$edX`_xdyp9YBfRk>Ahc-;u+Ak1hT` zdc}?XQQ%i#F^}u1RBS_LG$$8&>lG5?`sbfQ;O76o!2-nE_d7s^TQ)U4R*4qgna#)+ zpU=&KT@`N46#ULtmC-kE2EDta7{Xd;{Owu5BobGLH~X!i*Sv{@WWd7xV?{jo-nVDC z;vsHLW#+eyKz2@^mzc<+wHtP9tCS$juKC*zBRM!=-R?z96{g$Pi2cZC1NWZmT;A6f zAdh$Hr>sUYyx-dRexK(JyX(+qjp1RsaZ?V=Hf?IW!()6b8N1rlFIR=`@2F?j(~%KG zzPP&>F7hvY8^t+XPK8rC>q59TF?;q?wwp4Vnw$H~a@3MI*!7+xzIM+_#F2 zFykRK3d1sw@ZNUi3mf70>z$jLnvjz-JeR8GGK_YbE)@^0Li^yQe$y~wPfj*@IVsGx zf;h#*rv>Jc!19Hnxgf#qIR;FL_eP8=+Jo5kj$h~461iD@ZGxXe9w)5tbk&%H==<@@7@29#RnVE4ou6L-)5V|7+(ZpUoTMps* zk8bCmc2#Zkw|NeZ`bD_{YTG*ylYC7h~IWE`jFW`D~oNfu5JI=%$>p+^>A#F-f zN=$(lsnVLxpb0y9#iIS=09TtK4H_$0^$a@c=W>`M8x``1puA+hDJ zCJA;X67$D6kqv8k3!FPHBQ7|wuSg*m7>q11A?JUk@v^797X)+YX6(BNN_WfroJ64u z1mt5C6&2gt?-FuN1L^ne+m|kGqg!m*mu=JE(ALJ_d=OVai_6k2oE>t+Lm%adv%G2C%Hvz3JT7-(R7=mvC(bj5lQHxzGc44`d2o1(&1Gz1~#S zrJKI{?|IujaVI8%!2{+}Q&ZX5va+(2loav7_uhd3~^D zS6Ry-?^2l+6%0JE7#Dt1nWqMmwZGX*k_} z2{PCg54#+N98^=-Y9mX8Ds4EG0o%{25z1Ql-A|NHi_N!ZL{&**w@vXdy89LW;-yOn zLOmsiEPssOE=8^Ur5Pi9GLQb(z*h`V07r9^rW~o)wf>*WF z9zwCy!Q4WA{tL$m4F1>NjKsv%!8x=9armN1xn{;Q5b$z5H<4qVP`Sv_DE)U^;;}#T z;tibF)fDwzX8cESnW8vfztu2Y3L^#AVto^2&po?f-!5KM_fgE=|`60yz4F&522^Q zZ6b=HJaZm6cdN~phQ4Ge4hK2#&U$_;!#NW&5bfmYHL6PCk=K*Ywzuz7-X5hfAaxl9 zbBIV=8?AIHoySUCztxx^3sT=OP2csW^;sfL7I^98{&bE_t~}QZGRD8q`}SqYUgeC$ zf>>=RK?q0c%-Y#uvGjX@6tbb0EkjB>BOB#a6H<(}-I3Znd0aJ;{)$t5D8~j{o@@Ui zjH}i@BE*)kx%I*H>1AK~18n8%_)@vRjWhJDCyF5UI?cCpXEV}!wErnrqj2*kI*qaI zbExZlUyhwVdU@GIH5i?en0VF8A0^H%fQ0hL4Y1Ix7i3es;Cl5vhwYF@<905jt*6Sn zyffPXs*s|y8D*!J`?u1MxM0^;Gge#<6tZa_NN|y_?aa&jpk}~naD=7{rb+ueOcP^5 zW5bJsGmd?)Uy~P0rF08NoW{i$1`96%fSU3vu5oGOln7WvG`03aI^aXg>V|D-xx34B zY{BhQP&i%SLTC0l&`kslyWH2++v;5DhBT`GoNA5bqJJg+Yw$^^s6{^r!yzDZRzUmoUA$6E1>*?&dP;1UCuCK8L>)@>queDS=vS>O_5$9 zZ-4rGiKt zV+=b>)eDZwo`IMEo0Hzdsz+y{@6!D3RS4IrFP7SiD%x+B|CpJ%$QDX$pxg%1R(OYc z@yIs06-b9} zARVp3EuT8(0dt917ke*z)8j^WpVzMg@kD3ade14xM?KArEzlUA1r&iVJ)P6J9KY2U zFDb@dH&PIyM69~J5RQcy$^_u>WaafI5Lk4d#7MUpJv0>ABhGh_SqRxiUPK?+9nL*g z{6q{q`R?weJv~a1S{hjoJIYSUz?M=jiaM1wv`l7GpOdD}_F+FrxuSbkKM%!Z{@xGn zJ%f;r=o1&93W3{!erfUvA76%c=EL0Fin5eCDcW5=>l(!#4_$_nr(@>R%$nbU0^|i( zxF5Meu?G1XjA{F>mOt5(IjJ|t{%%1QU2sU}6vEM)> z9<-L6Z|ml3AK`Of-Tg2g{m^gjog2X%Ks5^-zwsN}j2h_MR04fzV3u|4`t47frGNfRA_`{55LW8LB)21}WGpp^ zE=-K{YgrVunFFU-f=;|OT3O?h=()`Ub!C6`4s;#asFE4RL2$YM6iMJfqg z2spF8lI1whMd11m{{wT)jRtbDh+5dY%>vA#-=)qtX_AB8Sy(B#EJ;}_ojz@xu`(4+ zJ*)!ss;DqV1ft(vHxrmwqi1D@zvNrxzM`35fWLrgi zH{wki+D!EncOIOIGBRX-{joNvxtaN`j6HS7v`#W#iAn)R_bt?FXz7<`X3jUJDo|Il z%N61zSE14X4DA@JM6dM-)mZP=Qbl%$?^r5f8+`8QRxz3P;3_)MFAm2X4M8y8pw9nP zzu%7d``4yh1!2?a&B6h}a|Eq^-FeoN3knO98zY(@x9XP|kAA;{aA)mh&T|&Zrb=m; zdJb28@0LQOe&Vu1;U!zoUa{#Pu@XGC)SNIWmzgj@fI`d?&a=mNp>B|18Rqs7N!)?# zn4vGgZEeE;u2!}NhjJ8`j=gM#T)rz`F)Tt=Ol+c$yEc@M82}k(grQoUhaKZJ-HNN) z7__qDGb(eM8QvTz2LKr7K(dsW&)xZ89;c(Ox0W*wekxBBQ$3Kw(<VG7^iS~C*x1_IYMJP@GFA%%dK1cRR4PfypG()ct);4RYc^n4^rY@E zKv_Ygh6yAIaG2Bj9M%!?{mlW__&`pyTT}N%C@`S59>t@#UtqBSF9B`Wg03`Q;fOCm zkAE?n`k{l=G=#b0IjSDCWIt5nuya}*g5xNCuKi}d*Jpdmjj-rqJi0#IJJ4xv!{2#e zG9}uslsKh_c3-#-r7PqTZ6gU{w|Wwx4@y;Rhsy|qmZ^Zeu8NqOX>goQbqmoxHBOl6 zDhH!ImbhTI|1j$j!95_m%f)c*oX((M`ijPXh0S3vOeL9r-dJhRaps2OOs) zH~Q)UR4x_GWy7=4)5|v~a~gRZ9ZFs*rosb^=)gE&*>1s5*FBOw|35iZ4*3U$xLeYv4fna z5PXu8_stt8mdnf3#fr6T6`a$c3r?kcu@lqOy%`7fI}PF9<6&l*Y7HrHxp*2Vy&bqh zP0P+E;-LlrX42ZsLC8$#ko^`UpF>0(p5ienm|ceH-m|$wq*PQ4jn)JfH&~Sxk?J`- z=eJgJV%^5>RC;cTPgogw?hyKt4nN&qsrRqP58Kz|VAgQ04M8R zg@`-sg3Ed#Tw{n-dEBQ$jYrmJT{R7Tr`0<={&q0*7WDrTd1j{$ohY*8*u|1uROC{) z&^_Lut|ABp9lJptL5ekcqcL2VuZg3knJ*X&p)$%0=&k>L%liF_S8Tg(Aax=ks9tp> z({nf^{dIr;);AhdXT)#Jnks`}*11y%WYxv&=Q7@7z5NqvBmf8BNO|EH59cv{f-@vF z1@zPmF74kft$o1zspC`KsbcH5_^T2U61vor4L|o-`-E_Lp-#0xCfIPn0fm%Fq8Z(sK0b#T6~ZnD z_`NzC%rjRN`HiOkHk79nKvH}U<*g+@HY!=Od&LrS>Bo@jruKAn4|`s8a? z)!t84@DXQwUEw1hfBQE;i!89Dtp?uQ^vpiDKj7M##%ce@z*lQFfDH~Dnbc-`=QQ6x zx*D(Foo#@-;3&2FYh0+Qsa4eG(Ozrr{aldo@WS3!^nja&*68nS-#3tf4e+emZrRT6 z!sLluIV|h0ZlNte%$i^R?(^~D@*Y-{7SyORfV(D}4&!FKeRFGh;cq1B?O2V2FDZNX zMslk?DZ#5vYX2u`d1>3BImB3NlJqYep58k)6B2=sJyt}eOsKEqr;{=YBd!8mZAQEF z#E3c8Y>eV1ufKdx>y#@;=kazJl>aqB)ru%(Kz)JQ*JwxX_F1`KI! z51CM_SK4Qs73vBs20}3(odwX@ePkV}Cvja^~@;5%3)7-0$92t=4{y-p{~( zM5b_>(|0WQd^Tg;K_&zNu12}l{qfxR;K74HWeazp)2M*nYyVWLanZ^UPRiuZM%4Qi z!;r9JaZ|n6^HL9)lv|^;t2DLoV)^q8PW$otAm4G;ltTrZ+X20n3hoNv6&v&#=Ljw>fxz z-9MA3Th;%rgM@=iL{#y~9(?RP%tR?Dfl=quHNvT}qCZxFe=j6V)LTI(kbZ$xm_GTE zF9XnpkcFe-p8(TgY1t>jQ^8T>xzXr<+#HA?ao5a)`i17Cj&m3TPB5dDiRoZ!R#nPN;e<3 zi}&!jR~z-Yw!U)vrIqY#x7(TB!py#5FsP@_fL4WyS9{R;Ni#!>+vJ6|bjU(?zWH-& zU|Y^vb5UC4#xMRkdgaj-u>GR-c_>4qCqfk2M5mrY?7@yUdFB}ACFdDc%uyMpL7j#3 z#wK`RsA4a#2B%Sc7Z7LU{k*y)Kd)JY)&c`$!0Ta`;ZHqLDJ%h$z!S2CTa4>S-NDB_ zfeJUuuEM$wfAy~&<=t=Fz?oCNP{5E~6zjq6-ZXPARzjYQ``QBogG%dxJpV~0;gs~3 zFPp4#$P2)6eUf&gK>bqN1wM)Kf>%d#dtl=!FUfU=gy}EmVpN(XM6U#AF0bBC>3Vh) z@1ff@_5BLM^r*R3hAq>n-({Xg*a-%|dqxklKXk`J>XyAyF>|BWedDMUnOPQ9h*$M9bb>O7$-_5!x$!2ge)BXxd>vIAinm_pARq zr2W&er?)rYm-!uev%etr<=1{Ij|`@`S-pHhzI=la^M`;{7K2qD$8-(h;*~_cuYiv>J5(c>h3D*Fh*cpT565aN9 z)%NB}3qKyZyoF->Q3903F?b?hDqig=I)DU+>NL*7z*2CYXRaQG3eCH`;C_Y8L+~*dM3&?-|RhIhyw_Z!%Ixkr>}Gp9EkCIQqBvBnPfbo<-}DlSQG?DUW1m1m z66EK#=6LZZ0>9kK0-b?21w(vC~x^ z_BI@cn_2toX0D}Q{L1(F^I$~xyWH7rq`&t49CL8L zL%j{+je_@xaPK|k_VdEvWtA^_1Naj@`umysMn1LuqaNg`rS^p3 zPze{lztjr#T~6}ylhAs@Wwl(rdZS&C!Lp?J47BC?DHj$H0!cLgg$ou#j}H_Ik_R-Q z4_U~ZzCC3CGGVACqCiUPu`y5C!Yc-@f|TP_XL)9vG@5QiU95AH5MWT-((I!=ndy9~ zgdqi$_-_sTr^>2 zI2oG{lL4c~o&}ui79l4Ghr#a1?f_bcQ?vV^^#mN2@lw!xM#**9-P6GVSIQ>{UBfqvIC%Ex=zWZfI?$yMV@ zT8=#7^6oyGP`!k49flH+5f7_B^f_hw5ycN(t13ur!|;61PzkI@Di7cIt+vm@JgniC zZ6G&iRFu^r(rOBb3?7wm*I+aDFXSMkZXmmjVSh{ux<( zoh5dM!<>m`%>Fsy7X#3KswmIhn*`6$m-rmNR1?JjpF z%Z{f?lYZ3zV?wB9rVs*UhNL}Pd1NZL&A}J@_MbVOGy&=UE$L%?)mEO>7c+NajBG1q>eTW*n^r{N%&kWl7m(hoH763Yf z>S~lFlTgErjg!IL^vb+%GfXZLPVnTW3pGC-xS#Ie!Li6R&6||xz5!Vdksxlbl&<4S z?Y#1SBSzX%$8GEW136wpJ@(I+ZTcVLO2L{rU%5E~ZEalovJDtciaYi1qVc+Bqs!|f zJwF$S9%l<&_(ER9i;X>>aefR&Z8pJ*r0Z516~fA&nv74NwOmKgWC znbZYfU(Ms(A1m9mVB;{-cNw};+OXSA^_-NsIe5EPI#{?uNc*Q#WHC8_(;$nr@CTCk-w&dcU9uqGvW|T(|Ks zbL{h3?L>>j$Io@fFZO?FcN4uOdcS~Pwy<<<>eIU=_+#UN*f3#v{DWan0L$ZMSN;If zp!|jQsR|E~A-6fG>wK^4dG<-})7u(cNs5GYCqTduwHZn=qPL!J^|=UWjiUM|#9bF3 zh|Fe_>{aE2%v;NLLM13yrnn%1(k*kcymRNyZ2Ifh0xKNej!(5lO6)q5U8~!gMk+l% z&GH*oZ22-sU*O}zrEAA)jJ{;zODs@RQzN93joi0#ayZDtQrHS3q;8Y06v`yL9I)P= zt`_(*v*w|gn0fcL*{ho(lr@vK#aPn%VqRLs)i>1X7Ry@sQAPFUXU{4!a<(3S{x(0K zc>q;p3pvWed^eJP&AHd`1buOfC03N}ed)(VTUF%_l|8bQ?>}IdFL#-vDujo>o@m{- z->x-jKOd_RSTEGPHwJHU$&#U6QM7bY=BO+SgyI7O#g}BIuJhMbRafw%k_(t983G}}qv)#QbPF-K+Gjunz zW?WeRHE?FTfb`RsN?5|n2tdagLtO<-Dmt!#h7=b&fi4Wxd%H%pf22 z92~x_C@x*Mw!jnV-i4ByOPb6y6}=pd_01t2qn9+E7MySY^7%>aGk>M}P)`{V9#6~K zywzIh=|mb_o$PTabYDB6h=hEE3(~1*Rj8mSWF{voHAJSWc+2c9M1+_Q!DzML}clsb=$?RfhB=qeg2CnyB8+= z{v{2Stmf^~-eNn4O{mrE78me8TIPV?!Mu=AA1q9!Ja3j&;IgZKf%*JYa#O70{mR~D zf)q1KxZee5<2uD+UI9vv=R##0qHIF1qY?X>B}CWTM>o|HErQf&<;ag(TP3A(Vf|5V!(`E0i9jlDOv;r00uqG@j{KhQP*jPRK9kKTc*Ozw0VI-o z&a&q0;$UT$wD<|t)$;v|P*DU0uSw@?BZ9_BYCBOUe-}?Ke7DlcwAsAxuArkc6knp0 zG0bGYha^1q(L~#ToN*+`$myGVf@hccn@?I7Ez5*P_Z{kxANtUab~}tK?;eyu3Xz%zDDfAz2Gn`U)-)y#dr|SA`J}H)${S;+(5Q)Ps1L*$ts`&C|A=C2|aD%prn%#!eDDv|2`%cR3 zx#4&m{lD6~_Gl>AHU710D`c~`5NW4u5oVMalOm~fkyLUwBndO_45esJg(9_6*bHeS zcVik%?rIpy{nA{FiNwq_ZZ$3y!g)V?xAs}<{Bh1YYwgzgqwhcS%{<@do%fsfd48AY z)wcOdZvI)E$Ok4DB+?tUVF4}Mr$ZM-Hbmx*^Y<6+3y-Ziqdg6Jv?}?=Ve55_EPCR}sth+?*f-`c}>(7BO0^v}~e(acY zcfjw-S)hrlVdT5BK=aZUZEYo=;C@QKz_dKzG~SZCz^!w+TuvCSKyi3@xWTn_SxXWR z_Uur}Y)}kVMjBLi3}W$0#z2_|irmf16=LePXzpy#J@>AiP_mEK?2#vpJ>Io~iMdsT zwaW_Ei&J7yS3Yt2{Ky@8wk1Mcy{fWuE7ry|9o9`pP(h$`g=4TxL=&!LDXgE1l7f*j zDMUWo1M>W%nqFB{-LcPx2@r&nQTaA8jI1wM!0xib!p6|x8|I*Qad&QoczDP)2}t+W zatXeYZoo%)-hFa;mI4dv71dLhD{9d~^af+O^!XdE;pXNsnS9l0)O3Xil;99K+~m-5TAlK}h3O_t1&IsQxPade(Pc5qd_7b;bs`<`owj_~(7 zGG+I23%~%VaHJr?a@n1{4bViqksuX~ligLD>(#+A2J=<28OUJB)^YT zM>t#`hqbzLTG)|;ZT2B)ss4r)7x7HA%Z0L_CC&|uX*KbI!1;<{uSNO~kREOsJZQb& z>^h{jZ4!$;W$v%nREAbUQcfzE3Wgh6)QWeIES7>?ihBUhWDXmvetmpum-iY2+~~nJ z7Z^}m9~#HV;QLREUI6gVF~Fk%jN86GnR-&pKB>pcOn?j%TXq72mj{@se$62(&PWD^ zV!%ZEPtukD;T@=Sz_zb}2#97iMTiK9LO8}UDt1`144@SdDn&~R>W&7eUn$w!o);s> z09woq2q&A!*n%}sHvvAeeLV9HfGmJPm)u2jw=OS_fmEabtZ`V`Mi zwC}CU3ndh6e}uADfTzoA5Y%E8X}a$1+zL46W~UR8E&2Wdaw|-f0DO0*1z1jwwuLP= z{pP`;;uKJZA#Y`x0iVh|1fmG1Zc&m4DVlhF9z}wH(DFzR{}>0{Eyei~cMy)HHwZ;0 zpKCR$-BUn0Q`EPPPxZV@yeBIGioI(0?;uZy@*BYTQAwdp4q5W6fo|Dy&!XJ|{&dLY zjSTe7knr!H^3Q?d&C#sBq9ZTq`yhjunsFXR29I?hZ_rX1qLNQfDDQ2I92~c*hYWM`@@^_=Gapl_TYw&)vEBFw zmU$kHaX^Y91i70AJcwC?m$JwkO$9G+3Bh#c;2*qp!fEOOS!2;9=W5O`Z_&4W*PE;~ zNdd4cnVv=CHQswTG`;J=>a>&@?)z7#dwwkWh=EM__Tv&BK8nFFJ?BcyRUxVh2u*a9 zZ80&pe>B}{GybJY=m%p7h>b1!@cU!WG@Ur7eJjYbVD7TxnJDqFGMcCLbTu{9f(g7Q zx|Ym2Zp?Pw1w}$Ba1EZ3^gR31H1_u?LsH#fnjA#d_Y9M}o%B`@ROj^LY)3fPWn? zP6&p7%*XY9+`kecn`L zncWAz5GG#-K>s>dc^;>NaM!=EOa-NY?lxZoi(dxZ|8~Ux+g0F|uv9KK}9yeVrxe->w33P3TN4 zakf#_EvJe2=vp0$Y(6yE{VY1-ah9<8)JmXF*A<1?NeG_lp|Kfe7WEU4W! zR9l=w9>$tAHGFX^d98zfPVy`i8T^YDBib?DTC}c4Un-I(TNR z+&BRVd`K)Yl*Yy3t~Zvl<8iD;ArD%6oTm&Q%5@;<7tDJI~Cvdhs4%3~U#j zKsU+L-17_PeSjcp5^j5-Qlt&oB`gaScU~s?dg$i{3cbd-B-kuJ5aY0MMzQlkyI=1x zJ$&`FQ^f(ZJ${BZ>>&Ta4fk5ArXAd{LLwmjpx5|)&YTD&Vf>DAFKv>K^Z zoPQhK5oboeVctiChnm^Ns|eLK(VS~HKwqhnf{jOIG5wal7u`*o0aI4=*D?#xd5 zu)x7S^K(5}>KX7U^JEF{-JacUPeE6j9r+z0=^F>OHk9|tEe18V>LfNaVYlngTVV{7 z%!X_k$+PWQ(<0g}L5_9c! zU*lGS<)emdR<>k- zg}qPS@07%6X-YfmmsCAFyP4RK06{AajvUx`TGjOp{cJ%L*E zn<+Rq#=?zjDJm$Gd1VB;ra#cCe{0E#^0l%v5U=zNza?}V(3tne@nSPFP+bBIZ!2ZL zU}3fHxKwiB=}kxjie?ds=#Q~;*rcfA?BvY$_u``>>0Pvgv3vXC7>RyJZB6asf^J@H zwAAfJCc>dc_m~UL0;CVNaJfybmeH`(<}Q&txTgMPg(2tH;D@R&SR`c9X!-)CTFrXX-Rj-j$NV78s$Ur)OfKH)Rptf1pm!FYrV&&51p!^n#b+r6q%ydCVhLCUHv_Tj7} zrO;DPeePvfku_2USiH>xFU*tCt-+ybsBGjl-~6pW#-aw2e#p^b_WsQt^Z5@BMn@1r z#_klo2;T6(i+ec=A&6~GI36vYl-E3iw>kJU(n$KPVF5Duc0ISUSV#VN#Kc|O%xAc& zeJ-=R-xWHkxrv5t2X5L}6p}_erbTY*at6k8nm$L5O6J_zSVt-7YCaq`_Q^WdxAn5y z*tA(e=*zaE2*FZG=u*D;{*%gto|*ui@))LlfP9twG@es??`pvtZTZUCXj0-toOI^_ zI_D?-jY#z6f&15k2K#UAMGB7D&gUB0*R*GPU!;WfZ4$5$W2r~M7Ay`?GT%Y|Qp}!b za{>g(-Re{KSb3T7PV`iL(iA<-vsCN$n=nD{?nClMSK7tug|77QD%P&>AT%k#IBEfd zujty{(B_q*j1cfflI0m*Km4qdc*r)(uOKZ%@4@uyDpsJD2kJGZr0+MWtqb(7fbQs1 zdIOu(iFxHl?Khk2h`BFY>cd7e9{TgMhRsAuXb$fYKohA|Xhpv~&*5&{}qZv+HFv%StyH%MIClf_yjxY^g|3Sq^$8q1-3 z=06F1qg($-xXva4EdJAAW_fw6%GE|mML2epN${T_-Kh$z#%Jnx1G79ohcBXQyhgSS zM-CCTH?sAd&|=+wzzjorf11-bnzvhnU115>1XKvYBgcd6K9V&{C)3Oi)tlZt4x>v2 zA}Ys9px*o}7nb*gTRsc?t#xyefD12l(n{Bd2e5k3fq+!1c+Pj) z{BZN#+5Z6}YEnqi)ebAiCV=;V@qpNj^=pm%; ziKLxsRLf7|v-wKF=(6smkRRsw+3QMs9r%U4SZup$+!Z$Rj>ctPTAHNz-p$BHnLYnL zUk6;Ti8$4-u_! z4Wju)WMm|xjIWiM)n#B(aoE5YEPOL1q4$wbWgfqPU7l>Nn@n-0@+tArCZz>FXF#mX z6eMSo;7Uw|s#1?CDJoo8%6|%%Ep9~X&X4trx6o+PN2H}{#)+Jbc%-(*+wPo5#qik7 zCjYxW|7}>+b~jh|FtK|xv_UwuB6)?VmmaQr6|MvPGYmNY>WVA#^;UbXx@L4#{z!_) z>gg08t(7Q#$lI{S{CAxLhY~j8fDqAIP=f^~^)A)%$U^BrI1F8cTs*X5MG_!6%xZW} zsQU7Ku6d6<+lLpN)^Ne01so^dCIPT5AiJ|%Iz09G6tz@4yK_0^2p8V3FJRv0YPCl( zM@;w|AYB#;y%L%Agnq)xf;_i^4Rc$H_kOepIl)Mo8P4n%$S(IN6cSIGS>I8&AcqW# zd{vq)T!7~3st>Y#!yf&ap!l{E>N@b-w^3q%B}a2dd;8j|E+=Qw+xYl+?x;ybEMxE3 zT5p!5*U6B;qAzkk^Ih;wgHiT1HMePjH=EZ6a3{c-di_P7X4=#16X8nR`5d>Q$>2hh}^E9#p{oQKoed&Xe! ziEwM$$FS*qmaf>lda-7NDnyN)qV#wh?b|uqfv-DZ`&*8+Y){Nnu7#@u=G-h$%stb= zJQ7lOY_+s}BT)lH1qn8y3LYw4xmFGNp1no}^X;}WN^eiN^@}q*t{`8qYZ2O_7L&5^ zlae1eS|@px*H&hM=8oR!gm#39L^UOONZf3^qX>5+weVr)+D1b@Qu8(kI-ZqhyV%6V`szuzwo-)DGV+if3LnGL)N2eUL!mFjY#e@j1keLT<~XXtUotIgwdyCX@4)EQs? zmW|1iPv+ML)t@0!xXo14m?PdC1sjdf6V-b28Nn}zvbB7;7f!F95hs3y%z?8Vs3GRo z%qKC6L^M9K4@#Lz$_EWS>`sGP^{0q;8|@G>5&L>FWphxI#hiu3k}GSe{0>8NtG%oK zYgriz;DhVEtr{if(mkQ_Q!@UB&*cMOwmZ89^u!A;DKC2YaW}3iJYxS_)N)h==%BO%7Op;FUpajK*s%a{!XP znEBu<2?se=2{1p&rk$kRo#qoW+di^0o?r2p?4I?e5fl<8BsqtMD@BGp7 zjJb)Pnpu+HHRjzpJmIs`94GL%x&1=>IH=uFYovc>@xeUvheqAz8WDbB!9G7Rd7JhM zTu%PSH5P6ns*vJ6fUK=;%}d9};}$KJL(a_S1H>~Xe!(GU6Pm!QdL3Tx^B+N=fn)>? zx81Z15!1gu$ZccMpI-pQM5PncO=rBtoH5exF#q`zRkouk_$88dt{#k5N*3rp`1cS% zB5kBOe?e}}bT6M!d46cl58KtHZEZPz+3uo*W#8p0p{WY2<6qcO{E?ytmuqSat2Smr!{;6*-FNSlq5fd97X1TtY_RR|Cqh_ zPuzZwfWre2SvF>*6eU*bV+BwCXe_gXtsK&~NCBi&9o#yt+#`&6N0YOET{&ADI)Olj zDau0)LJ7m2yhEIu-6V1S(@ISPXxW?|KW5ytHO@#cJTC@np|+id?V*T9F?JcB3MW`Y zE8x7EUGCiT{(nGVxRm{=G6PZjd`@HO4>zaMbrlu2oaCk% z!r%i&7=-$Y4t}P{9=ip^C(6>X?PQqP|1*veYt~NFOvl{43 zQZek-Y}uv*^{b7uVK;04-enUAYtUqcHXH7@7@v+Y`COBG@#)#_jAqsPH@cHv$tXLl z&RAIRxlsvr?FYXW!FCTo(0+FU`~(D6!O?}fAiJq?*Y2$h*`c{$pBZ>&rt08tcECV9oYo+hS&i3^rKIbldGi zi!kU3-|>Kb+f7|lu9@Y>>3NUEUW7K$_sVh_g{{HCM4q*DQ2JYcKtj|&yf3o>ULyBE zk1gZIyz?fnCT-8@;)2)u4>xK`LBgA+YM33ptG)l3bDdP^=Wz?~DzCJ62~yR;`sg)k z71B75i!DbnW)frz&=WW^+G97L*@{`x8Pf~nY0WPMP_a2rIWZ9dWqd^&gJZ0A-m4@x z3rFFS4pF2UjvGKXdJAz~g)f*`f>Fo8Ai|XZ>NX!9^MgD&b;Vqba&m*G#fRu_+9w8gr;*z~YE zNys+e6U??|koqy(beh--YKVEeL2R61JDT$$DjHMF>D5@|y0eE0gE3l1z<1@%P>OO^7NT6WAh_3_ckTYm#*Z-uSzc}dQ_ zL%TCXwPi*z!1b-~IZyu=U9FAv$BFGumJ{RRa%B4^l~{k7DUvxq5H3Zg$m(GD?9cLD zek|7HI8yy*tD>T!RJY#usEcBT=;mzBzO|+0rJ8OhXY~K#v#t5d6ADFiX_3$T;i-U& z%hX%axBo|Y$MV+$$M}ChTo{YrM$7tVAHu+JAM1bf75v;Ui}~4cq<2k$Ip^Isq)NQM z{syoA7euUoaXTce0#o&oSCyz0PS4| z&ON$wg2ZKWi<2LsT2>Qm$1MmG--55lf+@K4n;ec*b=J2w$-(ROt`Of}0`$-E0#yj7 z=sG-w5_fS)P`g?tZlNH|#a4)GN1{kb-kE3{l@9v)xG~v3JB{t74nZoSur=Cx$3`Tf zbk^e_GUem;65meP2D#_mz!=J(Zsp5m(+ZZo}zKH;OmJUh*zrzKui8bi;V1_f$;{ZP^g>tup<3Y{C?TV#bIY z(#OKv%4p7Ww9`$g+z@hd?%JF*d{~5n4<}aFp*E*2j(=QLdXWz;3a$rhX(4JT{v!M3 zw-H9_#wKl>UWbJISFG91X`maxoBB%x6!dip8IJJ$ z5GUvr@hbGjc;gqQjF%uJo6dHkv)F=>Qlo8WxdMEeIGg6bP|ZUM0@An{h|y8L=ma;{ z1wG+II&Fy*@y-?NRx|PtW20c>DA)hlRz?De_y=yEgT?xUy^oF7K!}Z~4ZHnm(||5{ z;Yd3pDEIy-2|9=wH%w>ps?dLsEg8>|c>}PY|2^wVQ6phCUeJ!k29&oNuZ{AVRe)=VLm>RHk%bx`|$NpOFpPZ zc2}#c<*zxB>S?P;2tvjO-(R;nE=;a!J(CzlSGh0$a?dum8}?|4&hRmr!aKqdu)W+J zHesNXLEY@ex0xXRXYxxfA2F|nQ$Z(L%_h3O1WZ2}b zAvRfRQVio5-^8cjJl~xwF7%{%8uRr%l=ulbbns3HzZF@ndoB~H%@mw^P43%Ody!wi za=&`@iif9fLO<7OJqmE8j4{LTm+K1^(Z?G7>HO?}e>XpJek^e(hxnMp|CNm2-~IFd zW6xw^PV0y(j+XhSJf-czUR~W*RkcdoDmPzCx{$Zf9=$VX2Ljb?{L?iPr$MWuBoe2r zIAeVk6sHfoLr7WKjII;#2_yUmoQE4fB{X{l0b*)!v)b$+w7 zTI~To94eS*PBOsmx2}t%N2K#-md3FJW%0YY(mnohoHIU~T&?@y4_q03c+>ZLQaswC z#Ta#+etioIX1O$0D&2w=pqg9FuSqYIbgo{$kc5fV+d~)F?~IjYAMcSk7*74fn_nJ7 z==K@C_mZ;Y%_DQIH{mxbS)D4NG~wb#RZy&2ogwe{osmC7xzksbN`t(Iir#-R#~#3(d>YglvYRblE0 zPIkRs1k_gqO>>&MICoOo4PuR%7PxX~fTz!9@6pE#3+$eIOVnaZ(wXrZ5|uCWeQy z1Vx;4v#*@Z%OQfk3Mg{j)@{m|zrC)76!fc?3UdA(yRz^CrQ zi8&sodBG;9pUssJ@SukbRJ|{bjJ`%5oS#(h#OJVD^z(BnZTOvq%LRE)`6MZi2877?4?h6nY>c^c(>lvW$D}PZRa9qXU)`p?wd#3x3)?xRK#fmQa!6!wyygS1f_;G|~h$o{m4#+p1Nu?8UoR7{4zO0N6_ys^zs6#p2B z^6xbfKWw?$if@SdnzB+DPmh43CBUu`ytK`Z)+2885M8@IlG-QWefP-sio@p1OR8`L z04%zeKF$tMw4Y&Qcw6(sb*q19SBq%a+UVQl`C5qWfy>q_mvKiS^WODUYJl5&YUp|X z%?^?OY}rj7@akqQF|0_y`DA6rP&&^yK&_crGITG{E(xA6yAm8S*Fdji5D!0GS!jfB z&R%?dmW*nO&Z8dAOi9o8o#8!ELv``9Q8B|!MLr6Pv|15hL`Lj3%t?XIS_ z5@+cQJ6os^g|O1RQrc0;R1)fGS3Ss9fx-s1bj{*mfRMg*aW|ib^V%Wk!xel2Ax8hq z*;$PT6N;lev$;Qpn(r+~*11)?&EaSK zOI2f6=mmwMAoX>*gC}1?<>Rsv+6lAYD3)lMyga6v)^Gkmok5_nH5=nH4O2bvI8QTo z%}G;}FL2bfCqbPrvh-j-eIfI_A1sNQ7X&}69p9&=*r)0Toz+RKP2&a2<{|{tn(ew@ zFYY1D{9VUKEYl=Yb@;lSp-)uyZ;n1}AiyV-r$u*`7QU5*8)?1ap^&Z-URu$K>h}TOL(=mit~-i)-Je6Pq56B_6Z-3H>mKo0lQs)Jsi`I5;bcV?A&&JoNLxd8 zgLvz5rNj%((%v>11u;4XW#Pnn+x6#PRCVl$ZVrmO_Ui~slYt#wxF~A1WJNmxi`B2^ ze5uj6uO+m~(gagS+st>8LxeneOScJhKb-IYO5b}}BiEB=L~V*iRweg%Hmyx8m;>_q zHhuz>LO}|uIGxyZt!#KDDIUeRfI6z=hpwofvmTGh=||OfBVje(Jqd6Z%{x{h_I^_f zu93uEAFTkR=|67h;XWP#Mbm41NZdD;<3g1aDYc}gDegyO^-8o5rwjNTNl5$q7Ri3O zIJTW_YU)J%Sc85gbh(A6=#ukd%jSX&3dMe|nza$|qn91WJE%6TMoCgSC@<3W*m6k} z`m-RzBO5Z{>`!x9@6~>&fPP+JxVbfZ@77buQHlL>v39dS?^CFm^A%EESFExNUPm{xVo4gV4C@#x9K%54`3Jiqr!ad zD0^jzttxB;du=!Rf@8@j%(~o4Quyx$xFiq2D|c7sFcs( zw#9}H#w5)uJo3;e^C&l95}C9vlIuC3J1v8;9JQoLrs%AXyK3;;w|BNi$NgPunFAPC zXK`;0Y2au3`J6}KC`vbkXZL4*QQ;wLeW~d4##&#P3hN^-RI2`!p8a8Xy`Iez%7F?I zR@N2xYE0Xuhy<@;O<|hZ1s_@lDr!UdH78)V4d;L4?Wlfmsq2TgWojK^8qbg^ZMf{MEh>-Mu>wbV)p!B1@AAK)29P!D}dwjZTYX&m;E* zYZzWZG-+c9-f>vB#JLPvj0f%(SsB9fn}&>I7-+54$=t4|PzTjW&8)P~;+1FCb8*a^ z*jJIeE7rvmO+4wJRkxSM>|5aPW(4~Gasey?muo|;GH&5EalcurKWh{_iV%&Qy<7rb zA9osE)cwp&rQzjL8SX5Dev9ZKQgVjAOxe))6@*k3`-g03F{=f0vPUA%hvsNWB4{D= zo|a~dOrSz%(1m+{WNS4{^6gwTXzLBc=CO#`tj?#55?Bs;9-Rsk=~75o|5FR#mmr_O zmqCWT!6$`9$-_*ku3_G%dy449uLkcaEA+&5@D5Dk$TxAvQ=FHM}A8~EKOi`G`S!vAAhu@1t(FN~(g z2}MkTDF<|Lv3>a9JAiFHDrTqKBYh5BluWMqs+hSmaL~VK=5*(@Tep_I)wm$PSG`nN zOicU+?cbxcwz`V5!`y5FKP@s~^~njqiDn&oejgyGdXt~9`vz(|Xqw~8<W09eapla79m^nzVI`F(Rs%_*BtVRdIpWpL5T<(1YgYkv&UBP4d`F zZ>_735NRD{r{Cpcsnv5<&$aMXspMm&;=a?b8{bDo)L3F9A-Gvi5eDU(0zUDG9mpaS zc@(0YYhr`Lc(er?6*fW*@oa3n9V{>tL1_RxYrtbA$@N*fNa+#JxDB2*KD-4VA>P+w zC`Y+Vj4sJ`Kyw0OvGqCfGhw%arA+e1AIN%xIB$7>M9(6;Q&diFaA5JqEBHo9dJPEq zwdGHi{8)Lp);L!P z=>EY*yRbL!EZN3MG_QCU)d>AIqaJ;scaj*!4ioX<*#Ze!BzSVxA|xkA1zW;wynj5}VnmJK{|o@=%=OO~Q?@+#hH$FjQmDFlOy% ztpO^pn3+#S{zt$Hjdm$KxC<09dchc_x3M^e$Iq-gbBT4jB+7`Bdwg&0Uf7+#q1?YN z;#X#mF2XqWle&vqSk{ke#oPAHnf=~;Qn`DZT%$M6=xsF5u~11NUbZIjjDqa$n+($1 z5SGJda(w8B@58+{aZWlX29i5LvXSs7(| z5pN#3uU~h8v$Kq2zJJG(V;61Zmdlm(L2506s=ZV=>?Qwbz_RDAZi=NWjolC1CHQag z6wASFxR3J}nnuRI3<}2o&#R|cm@(eeudSKh&AjEMS$`}^*S&kZ$_`2MLc5HAWXQlz zn%5TVf5KL(OKNm~RQ%qHd^zv$7h7Yi%t~p`Ux>!NzboX*z~{E&)U7K?GnjE&@28~N zVee-R^~F}eAY4n%OR64BGDFZ%oWFYgy3!cSBqp>Q`wCA~RP=7}EooI%)%MlSU}AbH znI1M$Jd@R9?x6U>8kVBhy!Uv&0g`k^xP2nS66iFzd0zAI-BFKz2ix1*lyM2*pg60%MZAAdDinva?Va^BROZc2U7?3C>J zuQ<#4Y9xhEt9$exmLPT4^wkxOZD+n0+dO|>f)^d0Z~Fd4HXG%~zG*p9QDK4%M#g90 z%Pw^FNE7&S-Qkj1WKC`6WHn06d#iR!LO$P@GSy=}L4G!8E zUBOI#z8A{S10L7(KS(P}_WpUCP5)j^VPT>7_2w+$keWhp-sUYezGg!9Vn{rDdb9?0 zeR1@!hJPgfTX6Vq6OU%VWT({aJCutt4te%2Sb(8Kt!MIA=0eqa@obINi*ytmj5;pd z^Vm96N!PG3JoI@GV~k#Cu$=k)?LsoMU}?gn`=^`fC@mPcS*0N|0*k(hB{Il{SlVSW zE56)qJN%*6th7pO+hRFy*T3g>aKZV}=dj6II9pnOlfY|E9b@Lb6_|0^u?w&JFUe(W zYWt#t-N)yK+d9i~)ChxvkY3o~hB%qu_CgjU;5%N3%-1*Vxy6>g7JYb&G%1(jASCz1 zw{5&)^TIcx^Kz*9pbJ-Jc`=p80(di0IkNWp)a3kSQk!Exae3L6RXN?w1Y8Se_=wV| zh=Tg?G{^5jPujRAgq8EUfl*pf1|y<`w~eX~Lzs2j>egQV53$JT%dG?7DJdy+YfC-9 ztp>!?N6=EU`Oi+!q1D=}dB?QX+U?kr#vqi9WjxWnd` z_S)v))^y_f`_Il?$2}JsoqIM9#~44$@Wo|V3@0J$bYtGscd2x#2SF{qpi$)!UF>IYXIx9zyrwKtEk4p;phjzc(w4s~Op=qvDZW^W50q6~+SKP)va40-3PdaIA zpSoF7(AS}ZeD2=tJmJzU)3Wm@Hty_h#sNO|PE<>e&fJ!(yy2Z7NMYEulNI=The zl*wX3txldl85szQd9U3EKM4dr{6Cp|Gf(|m&E1hA)5KiI+@4<_nBhwD-x&oxBevh2 zTC8Oi=(qh@q8O&CI!R04s(_2y<2*aVsh(Mpp!#0wlWu)x{)432w!#nTmz+M_=cOwX zZdGcF;WsHbrFsCC{lt*n49YV9|4k%tToyzBb`nvuo6{9RG_jh*I?dE~Lnwcb^>~PW zk0GV>ht(d^BfZzx*C#70i;Ii<`h3+IT5y*q^~>6v9n#Gsiy$N*Kp+tPv8;@tepPq6 z!oZ;Y|Ee%J#OdzA5oRGFZH$q8`9$u2xD+ctvVZ7EP`pbgC_8Ykg*G`af=6c5z<~j1 z>eN_-I>u#YzSiW522Z{~iRhx2f_Cn+*NBsG$&tQ7$!K+Hj#AxNy}$WvtmoCGem)eM zWkS3a>CMf${op;&s92O+4C(lV1v+HO(gLmi>@a0y%X+m2JYQKi6;>w1{ZNKI-8=`Ecj%q z`m6V+c=}FpFIVH!7ti06DQC9mee>3&kMVKp%LtQ#8PN89h%-{C3_yF?|H|^)6@Z6k z$(gSl@Am;HqrHevD%@+ovouoPo|6A*NF37ljh&kfw4U^io7a1tOpPZ7?;nDD`?t5_xa^-!)ut2? z*z_~AvKD^LADLZ4#==39h^SKpLK1iA|2>=bTeR=pER-q#`ih|B3efvT2T+W~kJGF1 z^!@#OTv?$h>D%GOFnDa86i+P%4=*qaG0~8aF8ccQ>x1QNFyn!`N7vv_aYIvzDQlet z7S8SJAn*EPQSij1Y|Pt)H)eNU-0{1|Sg2Ds%hIGcdA29GOIXoiF?t1SS#gDd5j9P% z+&-L!5bqaik9}@_Ll?rXD~=flh&cg}mjTaR_u;l-EL+ojD)YVPDW{L)p8VDJWuBb{ zf0O(ScT&=ipZJ;9(k-@>jh1GF&u&w{w<;|7q*nw!`9^O@{^cc}_R~act664T{3w#H z2=9^O)PxCajlVS##|rvWs$@?br{1=RJ2}ef*8KL&gYNrWy!tiWs~qcD_0UvhO&#|? z+qjiMPqi3;|F^C@ndlOVZNa%DnXu`TjMr+AV|Mf4P9$ul%wiH<-9H#Y6F}#WCNL zRAt3^@C}TBUfeN{OH#M%5Knt>CL%_Jx4yb2cDekz+RJOAJUYuEmgk{_mHA!NC>PbY zI%l`Y>pqjEv^%Y#u-oWhH>L5xOITQ)!d>jPB7!t)x&wXg8w|~?8mKV}Q=%D?(%VY^ ztYz07B4GrxurQ_n&jlHc1H^;h2(aYN0k_VUhgYyfDl^9Ui?MiG-w(>Qj*`Kfh8mKt z20_=q7Lik=y{V1A*E%K%H#z1R4<$&%F$0;7gMEt-jms7K)G{J%&;FbIi;vTFl^u~y zoL7BQsyB#f{PFR?O2;9SD5p$bqVOI6txgZ)^Ppo|5YC@qhqkd)^wm(*v7kFo6AVW%NFd@<+vCbep)*C<>WgrI5}@ z%tiaVsw_`Ga(1{?E9I-o`2vsRnTOYQUq_6Nb|Fq}nltx?>{@xYYFb?iX#wSHQ!8ho zjST(Dd#olpka+%>2KG57S5R4ITBF%beD*bCx}`$aWhy+xT0)`YDJXR_Wjejwl9s3%>FPJx!5~f&m;`ux?Je7(4;u|ra!LZ1%E$Rv8XrgW-FhtUfndo zn&4pUn;$jjf?{jwst*fpOlG=YzIEL-vhC#uV6LTpj2f#K8^>wO4Ugs7ZdHLoT-G2^ zFG6AYqss-0kox2Ys7%A%OD*o!>kwH^m}W{u;f(L`%8P{!6unO+$*cLM?&k5S;lmOW6a9|7^_uL;o!2Jl+w%1IqA1t>?i;NX)zg;c@v0yN zE_gW=w2qSeVbgJI-Z&R-Wox}_#4_^ugihGgBjS**EcLC;?|*9;9bFws0{20Z@`p3J zn(^f|N46O-!|tJUkn3#_bTtDn_rc**=M&hTEj)_&)=W&#q@&xa3TerT1ZrG<%>42h z2s{y>hVt_8gtj;XF6KGz)h3MH4-QWwrWd<9i8M4lm)QqgUt|+w`Pn3_6LY&3u{%GR zH~v*f&dRdVgiu+X?Y?TAe@cD)Ipt}UR&@u@B2>Nk8 zP2#Xpa#0X%&Pl?NA3Ut84;)|an4AQrbl*R?5Utu}*2DzSQf5$QD&UjodAyMLLVh_AeMt6;tYej;D!9w z>d)SD`(2O!>?9R?ubf>zju@rZX@k-l3;d<5?GweKL?=u)KpONK=U)Kct<(dimjO@K zoAp5j-?zGSQI^F!tXS9~SdckBGIk9Pxv(+7Wsy^}t}knJ&4a}X?E>m6SGxwQl1wE|lLJ08Q5aA}i6)C~h{?^7M z_*?-=&Fvo_1?Ax2+jd^&hhzfhB4fDK>{e8f@(x$!QW1+K8hwKo=dGLI`J5|-{P>7t zsI|GLr&;#FJb0aKb!tbeT)SG%bmAtIjNo=ntFa*ZsoBaF8yLUI1>dV-a*LK(-z%dX&y_^*-!QB3Q2v&d>DhQC z$gnm#%cpyWMbk_}LPnM?=aikT77X>6Q&0oW{+yN+O9D?cMVkAin$T9RI@!w4>WNt{ z$In`!&XAxL(+q-8fE5*Wi`8Y4KGK&s^6RC5oQC0*-5%pU1;A^i!aFWXbT`M2fhN@~ zE0w{|cl?qs`cg_4L1%QjdQDbpWAAcpc`;4W`o@;vKmYV;+Ee2Yefu$BK%OHpbe`XqC_i^w^<^#LmQ!BQj(zt~&xqBWFDdbNlBIc$Xu_SEj*Yn*7Clb#UV}It%Cx(LLg|)?~6q`>x zr(uYo!`APf{S=*grxfZoWOlAY|9%y}>%lz$=L!*@#W~FldsHzf!LSNCaq79}^ z&VZ@fVr#YP(9F!0qtzVe%|cX);%(*Hptds~?QCsYPbB3Fwe7G3&Py7xCX-FBlg(k$ zON5|6rI~JeNr3yJZn(pIUwQp_Jdl5-s;D&*3)0@@$&1QJRxZfU`-M*SX@g zhw4(G`_PPj3E?5k#TenT`I6nZHxx7+Gpqv^G}@cE=V~BuV>kuEFWV4g=HYo9jZ;a& zAi*-k&U`=IX}eBVkobvcb9O3BSA~a~;F52=;PqIMdQ*y~cS?QJU}Uzx1Yn`wb2%kZ zH_vshs-mOGWME-n-0NSa%ultW-6pMkihclaW?*+YE}o#v{gfzaoR!6=AudpuTXTJa zT9y4DZF4okmv49{+C%xxqp4k~M`uR}2?@U&o1{N^LS=ROVO#P2dy#X2*L}*FFX4{b zX;$1@JMrdi$Jt@fg>Ui zu%v0>iRy2eC$%;zWb98S>r~iC*AJw6Zd`>WpT=?8+*Um9Pt|MXSr7NK#X*e_!NElI zr`oleYq~3ACcpA(Z9>5RLsk!&ubweph2wv0 zt+N3Kw+=MvSWMRhU)!&0Gt7=0Q!X*2i_X*|idcRClv2pxg~eH!cYbqY!FHXx#DGD{s5lT!ub+^oW4KR+qqF-uQ5ftaLG@ z4%k&bu&~Sa-+7wI3j$HhwVTFkz}kNob!>Sg+PyE3OMfR~leF}(hx}~*+tACGB_-|e zG@Kub6FoA{ewIC;;1Pj|HI@&~wufgACzBs%5Y!AH0oi>baHOu`b1=D3F zKwsAepgB_NIMhE9Q!o4yTvigQ4;x_Ss6A7~MmHFnNKW?Iiczic4~aOm=q8U=VwOs1 zau7Ta7@4>)1Nx_@rE%1y^QQoN*woF13a} zO*iF+dj+pKD^lY$Ivm-P2R;jdAs5y|u>Q)P-X*b0{9U<$q0~q+%^!v7b zoO1BA4wPJ0&$~Udqi8m987&)OPzsXxyd|-em!(uSW z#<1S*GyL6?lg&bQX?qW7HF-JpCH;dpi!)8W{ogLwMYOn(F9g|CGHsWjov&QK92&M! zHLKN7UmTp4QV-9|^47vHp`%xu2_rBXnp1V7G2^WqrTqwQ-Wf-0tC97$oT5x@QG@fY z9F?|lL8-x!p65^k`)A&5Xv)m%3K^ZN5{~1jh=F>##z)aC2vWJ=Nq_9xN;Uo7Z>zTS z!F$>@rkhqn7x1W*#m4xZ>g&4UDXxnRf62^OMa#1$AGw%M1~sao>26vM6O5S!JJY}m z`{B%mWS(m*l15kCA^`W{0ax>;6jB?^$E+a zAb4_me%|BgJ0q>Mo$l+k>e_O`g^GS8dR76#f|t=zUrck3xUrRrWy!bYafH_2Xw+u* z*wKS>=duj*&yc4YBUrlTKOiuB-Hq)*fOa)ccQbrVpS>Hw<8bZLcXqE0GKoyQSJRlS zzn1g*Cca-0ll}aj*Z>pnpZlYH9|n>;giqytHiUH^(-iBhJ)xSl+UrSH!)}N=KDFDM zuRN(UT1W~VDLb$e8m#CTlrpy6dBf4fVae{Nu8HYOO!=)cLB_iHAs_N`aW8*I85W@2 zayFABrN$j@c|0tL=2_)N6wTO|n}4ryd}E&8BBUEj8k3JS+o=ZmWL$sn+Bx5~x=e6w zPh8xS+eMwMMT}g5xxRG`JjmeEYw%uPc|j>WfVdn^Z9bial3|e^Bhzf8?d!Axha(ob zXWg#1X39>XrTCrK5X+r28@YPA$8*{}Gz&W?AAUwAn!1T2!IHMptYVRBv;*;Io0 z=A(i|nVQ;)P%j6VpA+iOFTUvdT_fN1sLY z{t&}=4Yb6;@%l`Wn-b!j{=y4sx@|x2tF4SQvr-}sAe?k*segWa_8l?CEm}+Ium5@-m1w@pC|g@k@*YBh?5_cBWl!(2Ti?41Jnp>tv$1(G^{zV z%UJl2v-?JvNMR5Ew*Sxqp6=c1OzrW>Qz;txX1%25AQEh3pIeV5LHwdE7TH3hGuoE$BIrMrmqm z5D56qNI09xK$Kd0%5rUe`Dv&Bf92!Vb?4TMj4%;a!evv{lh$ARdqbtEp1xbpJ8K6# zfWGI$pJ{tmHSAYguO>D2l1>vR8si_#I4^n9nHOsV}&$QfC5iGg$$~#`f7* zv%Y{w=t{I$X)xxNXMIr#!X08uwmuao%CO4lXi1V%EYB(VuDYttl`PHQ$)1;2bWYD6 zAlrQ}aUtkcX;$o8X9QScdW}~X8M&~ZrMZ_R_a6#@vx(R$SDx#5#zE*crJUXs1?f8V{e0Cbp(fudi zs{FB}%V=siEOKGkwgPE<+d&)%r@pz$>wo7&~)oL_%c9v_(Ypo#qWV@pwAMmD_r zfoRW;Mr~eYMOh|u)*_v7{yUvX4pM0e3O)Ts%|GeYjKerqHED5tELFX&3f#!3*;BuwLxMv&AfFE=4{9tt;w`n3NQ%iaFu z>9_)#wEUbBpl9DWa;5#&MtyaTC*;bMxotLHr~#wd&-Jjk6#S z2n)=Vp*O1+qX@s1{`}?=Lvp#zU@0AI&-pG3J4N&spwmpB|IUiN5k=^tku(5VY zC!J-YT0@C5b$QTY_3qBFXB4H>ndnHm-TJZm^0c%x^Re%u>0&-txA{_ZmdQXY$9ZUC z$gO-r&jCKq2Hu(<-Nt(g>@ONM`&D;l?DbWDtErT1ZO5ISZZiNBXA=xQP1!AQms;9> z`gC|*?WuCBIh}%oCar%LQHg5q@on~!$9#xvN96I@zgIK7e5n?H4w$J{8W*37{z=&M zLW`mD>0%0s@7--JEuZ>PyyaAM%KRRtnTO(*jg_^*V(i$OZoqLoA`5qQ7N}Se_r31y z!8K>acXoA&`lj3_%Uis4Jgpa*ZyOVn*jKL~ zKQ2C!f5|CaPA<%NzA3HQ#pxFh7aF%SF#{2ai)OT@@wD=4Z%=MmKh zWn#ttSEr6X*Meg?U!p&M7TbTz*!Dd}gRrqv?5kG($lL$$oNQ{9(8tv=G^`EpyWo5M z`e=JR|Nq6@TSmndblajak^lihun+|3WC-49{;~G4rmn1MK0Q7G3X1i`;A9%xP^AEtY$rXCf#Get~lDW z-*l=M&T5v^=8R{v*r#=ARjQkz<&}s>NMtix(Re`Qx{bJq%PzL#yP76V%HzYPreygH zw$B@Pggp*aCmL~a0vCkPVg9b=7QRyQ(bih^(JH<>Pcp8tDR=1I|I5?|W~8|&C@5CF zb@HE$-XvHyOC@{Jmm4d0QG_2Z-+nlO2TV{tbxI3}&@=)<7Ff@j=a4y97Uib1r3OJ+Dk@9(8zP zko!PKkmo48m;W1ml>OC$WMi`H?S`YJkiQU^)Q>|$EW{L1P0t{%N(ai7Ji{k<_~=mV*9Ww2%`XNaQQIF8NZ*(%AfD=wEg%nP`wgaimC%5SQk7C-BBQ-ul=i`F|nf z=zpI8Rg%9&uL@*W@3^UDy(PX`j~@*I0uw!F{5l_BlxRU$PNvge$RWNP0MA(*_}Zrc zpjJY>_STiemLjOx*L6BtG?nE02L^ui{1lrkF-9Z)n<=yty@iE;2XvPBH$m6+5{UOG z(&JM@tHWBOVq>2YU9Hat2!Qq2I9?498U2-Xk|g7yxTnVr{46q(dU)*s)~(LYF*rU> zC)b@|ox|Zf<^d-pwNYO*izd1E4>M-(>7NhFUp$Ox@nI*+CAg{v; z)PYa{ls z&Z-k)hOB;PRGk@>c5_=%Tq!KGfAjy}bgF21KZ=DRE2x^9nh2RRV%x*(>;1L0v;v1d z9rN7$AW#^{l}XOBmCv+K0=c1!zW_K7+z*QcSbfU}wp~Bpxa`j9Zf$uit)Rnkk1s0PyK^Jn=KA(^g;DOa5FzEmJW&I0$pnWj{YW!kTzc9hGjv^G1h+e6Tu zf(WJW;;h+;#j$paOcuK%pcdd>4lGhmvsBL`-O4%JwSL)5`^^z^J3Bif*2Ht<{Irk< z!o4@GAs7VW6XO$VjT`n6a{bVVk|y=TAvx}(o4tlD9EdxROUAwKZUdXqdR=1QAMXE`tOCZZg>_iGGbJ@d(f*=FgGxAD9U-l(%)?Xt4m_q)hOeLXiC zaViqP3in-+LR-(c;UZ^MfbxKCZS`M?u@?e=SdyZHc(`uT!dj}`(z&=b5s8U_Gl>if zd+Z=mpccHj#P_q8VM*Tcx3Dgdrp=J@CWd0CireTBWh$S*JD}j6M}H6{2Od-se@5%$ zkIfsTNsy|E7~XSHw&l&GCr@29+6J^Mt^TcDTq(dtUzd~PDNfL@A$+-rZAt9ng943G+;e`SdU_kh>fMc{=#VE@3UPy;9uQp zQXqxG?JrgScTVZLLD9)sPya#~0$<%RTQH6&HV1q#<5OZ_bL9P)i1oj`q0B!NON$+z z*h1!zQI@;AJAjv{`$WmYva`S3g3$(psVt4?Q2*On(GQzy+WcS=|Bt7%1Kt1>^Z*F+ zyJB!~a96a~Q{=0~Mi2DP&mK=!TfIdO{>1{Mk~rzQecE7HT`}q~M9HInUF5#*qFnC1 z{K7)kTI1+=VDomgp>k(k$83sO>1X=c4Z2aZ`1;N9x$Kda7mpbDNm8^hp1A3cXm(3> zGfkcNv6MIeT(j`?Q2jI>V3!A};dOxHRK*yhZqxupm9D4b8N8b6Y6Ww(ap;I$*7X`y&*lZ zxHvrS4Vu!>A4~$<{+pGgD|`$|m~7Vl`)BsUf6=pwLo~o-Q45B6J@(m}mpNo8q{pY> z`say^j>t+5(OS}CSHY)m(;>!!-2c3#CQsV3{p3po4-kiMY@5$-$1BX5& z{hg!|nhXl!$DOe<*SICoMWBN`kayHKy;BVA{3z2Vk-m}+yr@11%6l5VOJ)6Ez5;v} zhP1ssJ6!nY{TgY{{^AE)IDNI*=bL~0FU08o{Wj(QOu!L#@8i;CW*`}+*(h$uXWa&{M6`t^a$Gt!Hy*aU`m#nZNw{aTnJkwmEZ1#j0)HG z`Ohi<39p%|^ChL;9*K>Jr%osSFzt|;w=exS$(D&6As*efu}JPgx7BoP!X?=zhS%d6#xKz&x%weNH6sM9i8c3>Q|KAAM%-(`SE2EfkrOa>&#jJP5;2uzdWJEx zDVO!Nf-cV<(fVS0a@f|aMx^LuL4sJjtaJFP<~34<+do^7O?AwA4i-e#2S(VF>pN<{ z8qRgkqR>hxufm%To+m^O#twq?=ahasd=qYTnmkJ~ZC+NzObwTt*JM3(&7xK!Cq7HM zpwk0~nQ+A)KcDIcL0DzezMofFUWNU3R>1i(ux_|Q6iBMms{@5L(RBCoD zrY~aPx#Hbt^v+Lk(2}`JOSv$G9M{`8q=JR3-Hooy1#Hc;f@%n#;1LrbHBw(RUC?63 zmTXMu8mkn}%{6?w110PpMxhDRAyXyP$$b-9&(lXwSR*yHv2hRC>0Kn(rKIa>sG3Q-@aYKo1hwsif;1Lz!&i~RFx zugPyS+4YxOWd^`u6pvMOk?`{)2|`a{i%(Y|gRM!GXaMaiO|>tIujH$tHh5WjpIOkc zf6AfALU(;hi7hh{qk>xSJ%fM(;@Nm@MyXOuG8dIdN)-oZWi^2nh-n2)LECsOc~jYm zt)bfG_cj(!OZR?{{rg!a9m#jNph*(4`B zDpOltMx7c6hQVGtLjPdD2UE4GTlpyMR2(erM@VLG_iP{y!tTD?q}0r8aJcNP2FK zb67UPm-_foSw3`03}7qX+B^HP-iNqaeltyjoo%6`*M`e-g?;A>iF%^t|M;q3^O$vRUC2d|1H?>?jE=ul z8fWoq7s|bKZ5hoqKpv_na6ItUeYk%+h>*NNzuB_ys|^=Hyxxwr#Gq=GvD5wmSZUIs z=>(g5GkeG8B?|M888}qmfo^@Q3n?*~+TL zOF6LJ;oeMYK&{vaKI`ipSX+%|RbU&XMPkXhg9CTSPA%u2(TDl7kR?7A8_KZ%qYo;VsZZmytO3I6uPAOayn>1Jv=iA?Gl~2c?$JH zSkIfN0ATOu(@RJy=z6}?Bsdt4baa5{fyS|PrTa$nuwhyyzcj=^?$9d?_c z-ZVcmqm@de;$HUbuzXy4|0%QPqRXap`hW^AB4y3aWFk=%e1$b9#FI0%RWy}Hs9{*k@xpY{y9qyT_>y3q_L>D*< zhM@XIlnc|4A4iTfyO(|LH0YKy!#3p@L-$o`1)gQ=6mP+152kPuddxo5u} z)(TOK41)tr4kKT^v4&(l76hkLCrRX`g~1x!q$fToFwvbg_WnrB^&u9^Cm7vGe%|ES zmBI$XH)eV+R=EM-EgWf@EKovrf2@0XlA=@2*-vIZ;lJg1>5?-)JB7n1w2#GsIkN-%$@ zVCNA4s*vf3YDIiKM%Zi+Q3tkcHL@hvpE|BkjS|dQxA(%0Qx-|_y(wle_Ri&EeMac& z@3Ff*At?ILppdE~8_DdifT}CjdGS8PtI-U8nG40ql+j0WrMT~@!sdv*W5{0i%&)V1 zm-!1$_CXr)am(EMps8C(JOTns*GJ?TdQ%Rn>&C`bR@6IWGq@`o@ObBf1mibP=k{u@ z4rsI$x^ZYKKSl2b$3pZDMtv8y5t^RAY7PnN>JrFw!|b3s(fKZQ)?1rPRK z^0$`SVxyx zdVq6{RPrTx{F#%DoiVk!VOa>hz_XgT*#f>PAFbWpW+6J}t+mu=k|@qL%aFHKORUz~ z4ezoo#Hpos5ScRpncFV~J;re69zP!AUGr6R=(X}sOCINjIKMSPoP(Y&x;pP4k&g&u zMA8VdO}FZqJcf?Xdh@d@l`rvd=`?cDBQTlo3k1ByCwQb%W3S1c**=)@Md)9rTj95yxR9p%mvKPgoYYS-zEbUpiKAAgExP)A zud?WDH7a(N%8g_?HYjW8v+xE9S#wd5&VapsdS=+qc*F&5nr-9$@P#ySwrT zhLef5>&{l&&yL~oEI;8W4~a5wPUiQXYU_nbWEHmA=c;wmNs;Q6yTWi0R#C|+ja$k* zwNXOd*!<0%<`M&Ewmf8YKlvuD2F5%zrfZI+lK zJ#Ed>!&)c!>N!h9Vj|}Y)vKHjc_;G|Hf<-%tsASp2%CPdWqumJ=wQPCuqTZZm3p0<+;Ino;c zT8`-Um!EWolw>2v9oF1Dv;y1Zy|~m1G|Q4|%zBObAN5kVCTYAfDfTI|t}IrG@tU2M zOq_dVtaiqw(_Udcuv=uds@T7&l--~YCujCZLMD}LM5a$hN(My-TWfQ%X+^Ru8c>wH zu(p0wN=)ds|GBumLz0oGmt;Uug!A1Hv@AES$>j{SwGaC`xH}pkTIS{Aidh?V3QbDa^p(+ zds)e-8UeMsYA46}xvR>{J!?eNyHP>Yf^9gpz%ztislCz_&(|tDt~|XM&2B2$z^j&k*sy?$epNp)3v7y!KqObnL$|hK` z$?O!L9tCd2dj#9`r_zROqCwxhc=jYpFD<>37Dpvo-$apE$A-1O;0 zNXC3=z=b8s#lz5kgB;m@poEG2ZIvoIKXIy1KJu!^?b1b(1*1Oid2N@q?$RP!GrtGx zoSXdNUG)4~fX>-%&Utd)sZUv|^63)h@Z-+&=M1SNt4 z)uI%*eN)^(Z!zZiji>x_2~j3p@FM@>8K{vtPwK-wFJfOCk}=3yd&(p2gV48mHN2~H zZ&zluf4|B27Yq2fp;D1F%#Adg#|-UL1Oy!sC2szBuKvnvPy?k$i;HwRahG zfi0$OcoYZHzI+_t4Aqf5FPyTTace3mtmPHvuQxcZdC$k=Pq4~kJXX_ZtZo1Pm zhhPxw5fob_`W)B3mNLqNi6EJLKQXcUh4R1|4OJRV7@Ugb0reDi66=>Lxmx-(mmsl* ze&|=L7RV1TrI2xo^5XWG8#&!YXD4g0s(n;y!OsH@l#>p%2;l;w$LlqZF>|Q>en z`g~qS4_h*DhKxhf`N4ZlYypR<;f=jnBfvy1*85S}to#Fg)IQ6qvis=I!~wMIaNjj9nkkhzJG+cjx+nbIdH%*qXCm85Yhj zp34^E-ks*kQ5r3XL;hrOim(Ad(j3Mgm=$)h5xHZIJIHXsU-j<$C1a89Qecv@q@j$H zneXyQrs+qhx=d>@he|@U?vy4v?vvyi5^jsB@>;pxXDlfdksc`CX|;^$i7C$Y1)4)h zPEJ7C2J@6V(kWkic&y$wr2^Q;?hoTu_o^&A{+e?g%xS-Ja;kusY_S=cO+O+66LX=g zQawP%v)sCZxj|K!>W9Vp(P&)eSb1pVF=;+gOL3(vT^W@-Vr?~ac9_ZZBdNo#byAjz3iIcQ$BLE%2BjzxSt zICs9g8%$Q>pY>p%0)D^TDNn5#R$5V#!=l^p!{I9DWBzM9XI)xPtwyLOR_JZgOq#N)d>E^~FaLAi56ivq?IzrbtDC7Mr|rrePGMJn-~I0(pQ$9pmUbOcWiG4Nde#aTa%5lD37q*HGo)d<>%6M&DTOnf z2wSD5+#ATG9u4UfuO~WhR2c5lu%B8oZY+Y8py5e+%=XxgTdmJ*JK?$?h+dt|B8oMlJUe_w2- z(o$fi)TZ}rb_(Kc_bmXQkLg(H0aBl!t3n^kTur^;Tvz(YQ~Vr7zBNiHulo2WQ{dt7O~Hrn&Hg)#nE3A8l!yEN;q zY`W@uU+pLO#uv7VN>Oj!`?+l#?k5V4pZHWmO zBfGPR)2ibvcd`>#?UVzNJo>bh?azV~O`K|n>5;W63!*44Mwsve-Dk7NEB6kG{MB#6 zE|D80sGr0kW8aTTFRdV>_Z_#U`07IiNdxgmXJ4~Cc)#JF#J9VlnyWDLX%>3Fs{h`J z^khwy8Ok+-!C`U4L4t=zyL!ZlM5HX!?qX3$ntZL!Kq01E-N9yejHIb}S9O;g0j}M6 zZ4GX3og_0^JE<7ekK4pDt4O?S>Se)bbMoLKf?qHuV%XI6pC{Tv&uGfY%B`%-HXh?h z9l@OuN_eI}S-T}AtHR7uFjd=>*cjf3b2_iiDj7W5&d@AWT0s@F7{uLoAh}j%Gv#v9 z!)4hlP@Qs|#dtucZ=Ucw5re`QP|<$|`f#iD%?Htsf}Wv?(;RT_Vam+?ED|E)gJosb z&`Jty%y7+8OZP7_n`h5rcCu_xy-_a(p469-N}+7@odPtrc{UDj`IZ<|vieu##uZv+ zR;k2;ahL2z>ZuLl%F#onUu*N+e;y(J{=KS8M5Qc=p&GdK3#aNXBKSKO99P|oYZ?6B zJd+up;QLBp*SBwg?|?hI#(L6Ka2=J?;cM!t?_BC1g?=9|%=OOPBOT$W|IMA-@_7y^ z*^V#kb_>2l026UZ??>jMbm@$Qg#(2f57%b>FRScWS!nqiE1dzAy9S4m&+yU*r;Na< zYj2cZA>q#aZ5?Tbgg8ha^8MG2OWw92c4I!(NQHcO7(QOzwC!5BNa1X7Xh`2tK7$G& zgHW2Q)K$V}t(Vp2thvgWCBdjMby6||tM*Zd`d*D@#08P<2ax%esGOlhYRaxH9gCD? z`z%;@GY4!ftqDoxsl>*N5DBi*QtPhYQ;}}4Q*mmK-4H@rG%_odWpa&eq}PqR9M4f@ z*OS0b&W*E3BO2^BotfL2_4aip?DcpY=D5bgOusQ^lM9_F#K^{cVcFn1vN30{nXOBv zUOMi()bRKu1G#M--ELf>Owj8ZPst@~{yjZja&svOZb#}>W0YZh38coiT`V-GKK9A)&j^?q zc?gE3G|O`kt<^LnU|-@Eo@^=VWPD1FlAL0dz^!cJ7#SGh$UO^u>|#jiFjurD*&?F8 z^wsx$mfyDnm)N8YtcM(#%J+MbD}{>j2*y8e|F#W{;+waB24rm@ZQO(zNi5XS4umUC zV!eayu{lX~bid<}V$@8k>W`|*`J65ro`KQ$ys2<2Ianm)^S$(7H8xP3Fm{hNb6Z@) z%Rr`dM(BBx(fkL+DU( z+|%`^biDne?`3=qm(JNZMM{d`sxxT%3L=CNzg&Nz{Dozijtip2#{X`q1&cCe30&!| z*30pde@Vn`{hjJ!+@UH%ZdVFflWMI`IQJss5=~JtgyIf?5YZ#cXlI*z)5!BlMbC@o zGX1pjTKy-!Lx)Lc!ahk=C!u>iiVCNzepd9rQgv z!eDH;?6#DXz;}%~VYcmGOT~=by>nVVZsRjH540ZoDo&4zZ!|h>)c`q**+b_BcT~1{ zgtuDRb1r*t(#%0$CtX7P?TQU9BTwgvqV9BD&`^jpfnQd&l{Wj!9yF=`k-_H4q50h< z5v3-I=HPqec}nlc1$O$vpZTN`)b~_UkMU>(7)YSoL!hK^*(Ji8=ENKsX=%% zUI?0Gaor{L*?!O{C$@ozwkR+6tWTR<{qkF&=kp^H`5c@5U%$<^U?Tl9!Npb@A~6Wc zY>?N_4*&G({r;b~1j+>&JLb{?@U^fXyg%jJ&f6ZW8O%ZxFrCFD+Lgv& zbM^_S4QOjq(mJWpb1g0bSN*f6iEYhK)2&naKBU9r?D0NCqoV+=o`Pn1fO^9K7Ai~k zzQ9volwff!@&c>zJ}I_fmD6O|Mx$TQ`nm_yLJ`BOxgGaG1)S+u+*O>lzO4Yc-MPiD z5-tz$ye&tmX`f1AT5gZ>U3G=4(+dR2T4kSZ15YD?YYI&}O?G&0@Z4yA?j08BvqwP< zRW7py-TgV=_WH}W;uFL=q$ip6{D$X)M?68V{gE~*Tmfo> zE)&Qa>tR=8WIVQT#X5fF<7oIh)!=>1DOyMRiPQ8^c&@^#;BTKz%NIvj!4gMq^C_6o z!g5_ww&Rb9P@Wfs9m`6%UNoXC%zme_mzgo(lfJm&hG}QT^0IqptS4=(ZwsY{rJzTe z9&f6M@@**l6%F?28Qzupu=GwDX?T|e)-&FI{Yf{-^U}R;m<2EO|;1W#R6RUSb#Iy?-B;( zEfbqs6SwGzAG21C|lM>SopDI$DP{u6!Rqf>a{JUW@yTX~^N5&l7(m9$D zefprAw0&+=`|3$G<5w}>YWImAYXR_ddg{mEQdmLnMDOT6G0mRXO4V9#*FK!Kji}O# z!sR9sV`vWT+8LJUd z?|bd{v0%p*Ym%9AR6#Q)30EL5HQx#op}?S!kQ&FKtJ;lemW@%fjr2o>_%ENI2jXj` zwayDd^oYSe>V_pEWF0$29BV>JHRiqp3FBA^?nV|=JBX}gg4UPwrzCd@rE-q5gJ1=d z!_9o%eqN_zb!sF7@$kTJ^Cc0iRE9^5(}K$x-z#yH3aspOf;^=S*)0sdEU!^r+3mJdC*1-ZS5OO81-o7%HHb zDLBK~Mz5e|NkPHDW{u6=3@HWulHf<`F@mG#V%FD^8l9o;v^}^tgmXK>kCfA8YiCkJ zM?t8=cBG(oIS%2mCND5z|JCDtXupU62g*McEkmJWuueze+(IhX3cuKK?1g@{*waZ) z@-v?#i|D!5JyU4T6x9TVDgs1hrGdF*xggs4iL5%B2~k_pvz%tGpT$z@y-cK7%ch^2%w+%+uy})>hNr*9u2`*e@^R!Xm$@Jb-oh0;b z;~H%C7*j-@=6YSSnn4mJxu%`(MppY&h-vPzSHVOo8ZGW-uvZ6mRg+D;Lq5$vVq2&YKbHB9g2=F76*3}~Ph2UUt(L9z z`iZM382=i3%RI4~rx;DsjSZA^I%n2|H4Y=oEQpkQ$A&%LiHw&qI|NGwf4?{m$O<0a z&3-MEUHdwl!J}rZ$0^GX>#!Em4;>iGi?DP@s-p^X#)_tYeuCR8;OMu|^}e}{Es2po zu#>!}8|&Tz<90l6pCrXGa+!#mPA>Rlsj@6iH-FgSxvO7)hFbLkn@`3w%Vk-EhCD%D zbt59###2Q|Pt?WGFF~JsqgK*S`}G?S{U<%VU~P@?kwo?5M0vIz!FDDNO&-(UiZ}k; z5Mh(yPu*uV4d1mCPW7=d?fRWI#$hqa`~aOUHf$C>W1lfpf%Pd#SnL4`+p*vC{z|-o zZqCe42r5gijVxKy{^RpTTygc?H%gd<=hm^_?m=Lc-F`tz)3a}a-B&en8!w7#vjrdG z_p9*=_(tn97pyiOJZOv%vE`>pA&H-=;xn~Qr=AuodMiX^cG~+$$vz5@ib`kfyUi;0 z|0NdX$|lmPSL?PV*^ALS1}Jb4l1I14H>d1oh1fly^Qxe&+6aJ)KMSN>PO;>%$mTI- z@bPR|IMEVP>Qa2@Caqa7N>lerzlAUq2KRkav&mr;@6*cCz3QsgdnggvnEE*R<;Loi z0Uj#vfz4SLSIkrZeg?N}#w~iz72F`%V#PZRSwv6qIyK|eIJsZF8W{=O z3WHn%v&e!iHl@jCi!D@&6e|!+VjHDD>vxHu`pI(36wiFaTp~v?RSz%@eQozO=90TR zK@lvCo3OJQx24m1lCjfy0{NtPn2;A?WFv5KX-m~K&zA}oWDxto^X>Ta^1c7oonPas zEdZKKbYJE7TRZdKrTT_Vsk_iz*3?|)Td5L;LF#3y-0np_sGlk09rC`K!O_kB#}15( zAi|~08koqKhjwh5q}(n9^&H@Z&=UiDK}mcdym5nC ziuW4JP7QEf{*@K&1R(kN@mgHae~P&_G_^k{|8@A*t^a%K33s92Y6aQbmweQUV>iCx z+}sLe0HBS$gMU=SUaDQIi2WVtb)W`HAQou-;%H-dec}PYNEdt~%TP{S_BOHmkFM4` z6Xi6k$&$~HZm_4RGS?X52mgh_|0k0*l2uSb{{#$3bC_cgsb#vYiCw~J6h{qV{4&hR{ikc9O4s-ZocL&- zt|%4NSKLozXynABzcCSO{zIBeJ_6u|Bbi_y?;GW+7gUs|M8(k^h+OcB+RtS>kCv9dx|P~96?~KPV(f19>%G` zye2MXATyj*4l(Yz;S{caTO4ywH{+>tzGk#7Yi~`RKa*Gcft&ihd`Y$~sTW4(hueBQ zwhl78h2@$Zr?3^v%t!8%xfL_FOd1zuedLHmB(ZJ5KdRr-h`2^{hHQ-->aX#ZcVeDUJf;z^$Q1-Xd+?y!l8@YD>? z;pBshOfqI@{ScGN_IcBgeCLqpdIk@mb{n&^AyC*m~?z zyTT^QCp|z3jV4KOSeYdBH!JJ!-I!-uU(O=HoXPV zPAgIbHH7T_e)Kpo6x&V{)^<{9<#<#+6&SRcX4M(E70fcrzq8(k2B;Y>_=dlBSk34S z%N(w7vYLM_>I=+#oIJ|5^i4KI-$i+6VkstUStFe8OVbV=L?C!x|Fj=bPM#1HL&L;m zb@|yhj@^t{DD?ShCh$jZxH(cg~ zmTEIa`2wzNmtQ*nI6wKcicn)K@Vx8|yF5z<3&{F)@3c(qcOh|trbs~BP4A%(UoBEo zXVTSK?#oca;anw*PFcR3tz%A|OYZniF=K+WKD={Kvd+;q;Z zIm%e#Bfe$FzB(3%+YKdrl&P*`QIX?ziE++JtHE2{*a8kqQB~OpEpCX z={ff~3;D#)2J(Iu$ZyUU!Wwl2&Cz6hs)6HLlhqdhuz4kTxeA@M;_Wa$AgTd3JO~Ia zmvS3Jm;466#3LmXLN4nDf66gF@OMticiue+mD?aak5RZXIUeJ(%9}s4a2dHY;Bwy$ zYaH%1vp^*)tYf7_b6NSB%aYcA(71Dy%paCOoH!rugLmh5b6;m(d_WSq*cobZ39}uI&-FWCc5oP_w+%hXBDWQEIeR-!h=T4moz?x=}EMo zk2LZ&2}!}mCEJW(_y&JE>ORQfIXz^KL`ZWhz53(n@YgX(90reyAgA~?$}y*^9J0gu zP?cP=T)IK%*90u^7c#hjpn{6vY5bS5ju=)QyR!OtkGoyI#@eBuD~GTJQwY1q%IC+Z zEF1D_L|<5kZU2h}Q1F)9JqCXJgY%Mhb@&bi?7*YrOmm2?rG zX``WPr@IuJ6_&QA(*?JjNY{OMaLh!g%6j7?)>wDo$Mn<%r|AinQRweEaWX_K4xq*<)$KAI6N1Hy9seSD}_UyyS8o9ujlY=J@Wmh9!)P zJ0BH2IX!MA(g!F7<{PDtvLwT)#XCEurE5_m)GBI22D%n4i5pFOBbX~3r71-eC^35w zHMF3gm!%xK;30SL!N7Z}R@Ryqyi?Os-Q7RsIQ*GQEkR`&-XOx@Y5x(Nk6GxBKdLwT1yaU)5XrxtK#Whp12p%q-&gxTG{t^ zYx||$qPq>2ie^Pp*w*>%0=_^#eJbfJYUpjG@+;wLozizU&3wQ}N zM=f+8hd4=m%bvX@CS~3mn-f1Jx{)axKSI=NY_UfHc7HEmK2HCW+^}na!GAtc6+WF~ zV^AY>_xVFn+`s6$9ltV03)oLpY=b%!9tvvfU zlw8y1*1Ih;ADYknnmOV1A}mBY469|b!lqC#(M0hT%Y-Aw#x(rJDpT*E`^>Fqg4$I_HhA{P5??ui1pCC;UoE3&!|1tS z_1s{`TGj1$&JG;|$=|aM%4uzTk6{>R%@f^OeFGeRUeLQP{`}lcQ)931>AyMu1s#*$ zoU{PNqg3O#ZJ_f6Ri*Uo#l%Gh>9H4+fn_l2;ifFL0sVm6w?sEG&fL!Ft}+j^jjJ)c zOBLuP{`f~u^hTRGiaA@DL4hjtYDT-9d!liYb*QVp8a(nt$st6ll|};X6pk6O9IyRS z($T1GvpYIp7)nxpauuBz^hPFtzs79TJ0c{1#@?Onx;!(L`dc%`^pNB#W{kHc*Vcml z6bgp9^&eY{CE4U;&R1FWhuLVdPWR)DqVZ}S0^1eCxvb%Wx;%IFmu0qbPhTBra%GGP z)Y(8P$1yc)(pP3bym3nSO}0kslLC5}qdN(TQb3Qi7)#b|88M$6H6Ckt`}%&vhRP$g z+4`c>m4$8ZxsHmLp@}&KCLQ+XlGqLd1r?B*>WWo055Dhtmx>T4LGbd*jB1Bmn0H2$ zm)vl?u%fNtD3`RLyI66WHs2eX}=@ zNcdpA6g$`C7op9FTjk)RIval3fNH@>;e^`GuLu2Vhw}Gf!yoWV=5M}3riG3%-^)L< z)f?77apf+mbl9oycV6r-jVCcWS2oz18dsbBG+?s_Q7dhL+rE@7;z#s3$<^vx;}kDC zyDvjY`M*WJ?jLN+ZC}bbxHqB6k)ki$SBqJWjU)GmafOvhU^>=V;y>NHu* zv;_NEvQ#VkR-u~d6_{`?RRVS0PS5rx$EmG6V;i38=ter@;T>sgha%z+5~GA+CP{F6 z%K9z`Y^n!Nlc{cp1qn511a)j-Yji#bkO(cc-zo`4rAl75-!?03

#a`lJVGjH=9 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 Qzsso;ZpSN*Ui$k#0Cr~B=>Px# literal 0 HcmV?d00001 diff --git a/docs/en/low-code/images/runtime-filters-has-value.png b/docs/en/low-code/images/runtime-filters-has-value.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc7b30788165eabfb82c158cce60ed09a567bdb GIT binary patch literal 72456 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 qAx}n literal 0 HcmV?d00001 diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index dd8b7298ec9..d9a208b8947 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -1,7 +1,7 @@ ```json //[doc-seo] { - "Description": "ABP Low-Code System: Build admin panels with auto-generated CRUD UI, APIs, and permissions using C# attributes and Fluent API. No boilerplate code needed." + "Description": "ABP Low-Code System: design dynamic entities, forms, pages, permissions, menus, filters, and React runtime pages with the Admin Console Low-Code Designer." } ``` @@ -9,357 +9,144 @@ > You must have an ABP Team or a higher license to use this module. -The ABP Low-Code System allows you to define entities using C# attributes or Fluent API and automatically generates: +> **Preview:** The Low-Code System is currently in preview. APIs, designer behavior, generated metadata, and React runtime details may change before general availability. Use it for evaluation and controlled projects, and review release notes before upgrading. -* **Database tables** (via EF Core migrations) -* **CRUD REST APIs** (Get, GetList, Create, Update, Delete) -* **Permissions** (View, Create, Update, Delete per entity) -* **Menu items** (auto-added to the admin sidebar) -* **Full Blazor UI** (data grid, create/edit modals, filters, foreign key lookups) +The ABP Low-Code System lets you build data-driven admin screens from metadata. The primary workflow is the **Low-Code Designer** in ABP Admin Console, backed by the **React runtime** in your application. -No need to write DTOs, application services, repositories, or UI pages manually. +Use the designer to model entities, enums, properties, relations, pages, forms, filters, permissions, actions, and health checks. The runtime uses the same metadata to provide: -![Auto-generated menu items in the sidebar](images/menu-items.png) +* CRUD REST APIs +* EF Core dynamic entity tables +* Permission definitions +* Dynamic menu items +* React data grid, kanban, calendar, gallery, form, and dashboard pages +* Create and edit forms +* Advanced filters +* Excel and CSV export -## Why Low-Code? +No DTO, repository, application service, controller, or React CRUD page is required for the standard flow. -Traditionally, adding a new entity with full CRUD functionality to an ABP application requires: +![Low-Code Designer overview](images/designer-overview.png) -* Entity class in Domain -* DbContext configuration in EF Core -* DTOs in Application.Contracts -* AppService in Application -* Controller in HttpApi -* Razor/Blazor pages in UI -* Permissions, menu items, localization +## Supported UI -**With Low-Code, a single C# class replaces all of the above:** +Low-Code runtime UI is currently documented for **React**. The backend model, APIs, permissions, scripting, and custom endpoint infrastructure are shared by the module, but the UI walkthroughs in this section focus on Admin Console plus React. -````csharp -[DynamicEntity(DefaultDisplayPropertyName = "Name")] -[DynamicEntityUI(PageTitle = "Products")] -public class Product : DynamicEntityBase -{ - [DynamicPropertyUnique] - public string Name { get; set; } - - [DynamicPropertyUI(DisplayName = "Unit Price")] - public decimal Price { get; set; } - - public int StockCount { get; set; } - - [DynamicForeignKey("MyApp.Categories.Category", "Name")] - public Guid? CategoryId { get; set; } -} -```` - -Run `dotnet ef migrations add Added_Product` and start your application. You get a complete Product management page with search, filtering, sorting, pagination, create/edit forms, and foreign key dropdown — all auto-generated. - -![Auto-generated data grid with search, filters, and actions](images/data-grid.png) - -![Auto-generated create/edit modal with form fields and foreign key lookups](images/create-modal.png) - -## Getting Started - -### 1. Create a Low-Code Initializer - -Create a static initializer class in your Domain project's `_Dynamic` folder that registers your assembly and calls `DynamicModelManager.Instance.InitializeAsync()`: - -````csharp -using Volo.Abp.Identity; -using Volo.Abp.LowCode.Configuration; -using Volo.Abp.LowCode.Modeling; -using Volo.Abp.Threading; - -namespace MyApp._Dynamic; - -public static class MyAppLowCodeInitializer -{ - private static readonly AsyncOneTimeRunner Runner = new(); - - public static async Task InitializeAsync() - { - await Runner.RunAsync(async () => - { - // Register reference entities (optional — for linking to existing C# entities) - AbpDynamicEntityConfig.ReferencedEntityList.Add( - nameof(IdentityUser.UserName), - nameof(IdentityUser.Email) - ); - - // Register assemblies containing [DynamicEntity] classes and model.json - var sourcePath = ResolveDomainSourcePath(); - AbpDynamicEntityConfig.SourceAssemblies.Add( - new DynamicEntityAssemblyInfo( - typeof(MyAppDomainModule).Assembly, - rootNamespace: "MyApp", - projectRootPath: sourcePath // Required for model.json hot-reload in development - ) - ); - - // Fluent API configurations (optional — highest priority) - AbpDynamicEntityConfig.EntityConfigurations.Configure("MyApp.Products.Product", entity => - { - entity.AddOrGetProperty("InternalNotes").AsServerOnly(); - }); - - // Initialize the dynamic model manager - await DynamicModelManager.Instance.InitializeAsync(); - }); - } - - private static string ResolveDomainSourcePath() - { - // Traverse up from bin folder to find the Domain project source - var baseDir = AppContext.BaseDirectory; - var current = new DirectoryInfo(baseDir); - - for (int i = 0; i < 10 && current != null; i++) - { - var candidate = Path.Combine(current.FullName, "src", "MyApp.Domain"); - if (Directory.Exists(Path.Combine(candidate, "_Dynamic"))) - { - return candidate; - } - current = current.Parent; - } - - // Fallback for production (embedded resource will be used instead) - return string.Empty; - } -} -```` - -> The `projectRootPath` parameter enables hot-reload of `model.json` during development. When the path is empty or the file doesn't exist, the module falls back to reading `model.json` as an embedded resource. - -### 2. Call the Initializer in Program.cs +## How to Enable -The initializer must be called **before** the application starts. Add it to `Program.cs`: - -````csharp -public static async Task Main(string[] args) -{ - // Initialize Low-Code before building the application - await MyAppLowCodeInitializer.InitializeAsync(); - - var builder = WebApplication.CreateBuilder(args); - // ... rest of your startup code -} -```` +The Low-Code System is an optional startup template feature. When creating a new application with [ABP Studio](../studio/index.md), choose a modern React application template and enable **Low-Code System** in the project creation wizard. -> **Important:** The initializer must also be called in your `DbMigrator` project and any other entry points (AuthServer, HttpApi.Host, etc.) that use dynamic entities. This ensures EF Core migrations can discover the entity schema. +ABP Studio creates the required backend module references, dynamic model initializer, EF Core configuration, Admin Console integration, and React runtime wiring. -### 3. Configure DbContext +The generated React project includes: -Call `ConfigureDynamicEntities()` in your `DbContext`: +* `@volo/abp-react-lowcode` +* `configureLowCode` +* `LowCodeLocalizationProvider` +* `createDynamicRoutes` +* `useMenuItems` +* Page, form, dashboard, file, and attachment hooks -````csharp -protected override void OnModelCreating(ModelBuilder builder) -{ - builder.ConfigureDynamicEntities(); - base.OnModelCreating(builder); -} -```` +The host application wires the low-code modules, calls the generated `_Dynamic` initializer, configures EF Core dynamic entities, and seeds the required OpenIddict clients. -### 3. Define Your First Entity +## Run the Application -````csharp -[DynamicEntity] -[DynamicEntityUI(PageTitle = "Customers")] -public class Customer : DynamicEntityBase -{ - public string Name { get; set; } +After ABP Studio creates the solution, use **Solution Runner** to run the backend host and the React application. Run the database migration task before opening the runtime pages. - [DynamicPropertyUI(DisplayName = "Phone Number")] - public string Telephone { get; set; } +The generated solution README contains the exact command-line equivalents if you prefer to run the projects outside ABP Studio. - [DynamicForeignKey("Volo.Abp.Identity.IdentityUser", "UserName")] - public Guid? UserId { get; set; } -} -```` +If you generate a solution inside another repository, make sure parent build files such as `Directory.Packages.props` are not inherited accidentally. Use an empty output folder outside another solution, or isolate the generated solution's MSBuild configuration before running `dotnet build`. -### 4. Add Migration and Run +Open Admin Console and navigate to **Low-Code Designer** after the backend is running: -```bash -dotnet ef migrations add Added_Customer -dotnet ef database update +```text +https://localhost:/admin-console/lowcode-designer ``` -Start your application — the Customer page is ready. +Open generated runtime pages after the React application is running: -## Two Ways to Define Entities - -### C# Attributes (Recommended) - -Define entities as C# classes with attributes. You get compile-time checking, IntelliSense, and refactoring support: +```text +http://localhost:/dynamic/ +``` -````csharp -[DynamicEntity] -[DynamicEntityUI(PageTitle = "Orders")] -public class Order : DynamicEntityBase -{ - [DynamicForeignKey("MyApp.Customers.Customer", "Name", ForeignAccess.Edit)] - public Guid CustomerId { get; set; } +## Designer Workflow - public decimal TotalAmount { get; set; } - public bool IsDelivered { get; set; } -} +The designer is the day-to-day entry point. -[DynamicEntity(Parent = "MyApp.Orders.Order")] -public class OrderLine : DynamicEntityBase -{ - [DynamicForeignKey("MyApp.Products.Product", "Name")] - public Guid ProductId { get; set; } +1. Use **Data** to create entities, enums, properties, and relations. +2. Use **Pages** to choose a page type, menu placement, fields, default sorting, filters, dashboards, and linked forms. +3. Use **Forms** to arrange create and edit forms with tabs, groups, controls, validations, and actions. +4. Use **Permissions** to review generated permissions and control access. +5. Use **Actions** and **Interceptors** when the standard CRUD flow needs custom logic. +6. Use **Health** to review model issues before publishing changes. - public int Quantity { get; set; } - public decimal Amount { get; set; } -} -```` +![Entity properties in the designer](images/designer-properties.png) -See [Attributes & Fluent API](fluent-api.md) for the full attribute reference. +![Form setup in the designer](images/designer-forms.png) -### model.json (Declarative) +## React Runtime -Alternatively, define entities in a JSON file without writing C# classes: +React runtime pages are generated from the same metadata. The page below was produced from a low-code page definition and includes the grid, menu item, permissions, display values, export, create form, and filters. The same runtime can render kanban, calendar, gallery, standalone form, and dashboard page definitions. -```json -{ - "entities": [ - { - "name": "MyApp.Customers.Customer", - "displayProperty": "Name", - "properties": [ - { "name": "Name", "isRequired": true }, - { "name": "Telephone", "ui": { "displayName": "Phone Number" } } - ], - "ui": { "pageTitle": "Customers" } - } - ] -} -``` +![Generated React data grid](images/runtime-data-grid.png) -See [model.json Structure](model-json.md) for the full specification. +![Generated React advanced filters](images/runtime-filters.png) -> Both approaches can be combined. The [three-layer configuration system](fluent-api.md#three-layer-configuration-system) merges Attributes, JSON, and Fluent API with clear priority rules. +![Generated React create form](images/runtime-create-form.png) -## Key Features +## Filters -| Feature | Description | Documentation | -|---------|-------------|---------------| -| **Attributes & Fluent API** | Define dynamic entities with C# attributes and configure programmatically | [Attributes & Fluent API](fluent-api.md) | -| **model.json** | Declarative dynamic entity definitions in JSON | [model.json Structure](model-json.md) | -| **Reference Entities** | Read-only access to existing C# entities (e.g., `IdentityUser`) for foreign key lookups | [Reference Entities](reference-entities.md) | -| **Interceptors** | Pre/Post hooks for Create, Update, Delete with JavaScript | [Interceptors](interceptors.md) | -| **Scripting API** | Server-side JavaScript for database queries and CRUD | [Scripting API](scripting-api.md) | -| **Custom Endpoints** | REST APIs with JavaScript handlers | [Custom Endpoints](custom-endpoints.md) | -| **Foreign Access** | View/Edit related dynamic entities from the target entity's UI | [Foreign Access](foreign-access.md) | -| **Export** | Export dynamic entity data to Excel (XLSX) or CSV | See below | +React low-code filters are type-aware. The runtime shows only operators that make sense for the field type. For example: -## Export (Excel / CSV) +* Text fields support contains, equals, starts with, ends with, and has value. +* Numeric fields support equals, comparison, between, and has value. +* Date fields use date-friendly labels such as on, after, before, and between. +* Boolean fields use an `All / Yes / No` value selector. +* File and image fields use `Has value` with an `All / Yes / No` value selector. -The Low-Code System provides built-in export functionality for all dynamic entities. Users can export filtered data to **Excel (XLSX)** or **CSV** directly from the Blazor UI. +`All` means no filter is applied. `Yes` maps to non-empty values. `No` maps to empty values. -### How It Works +![Has value filter options](images/runtime-filters-has-value.png) -1. The client calls `GET /api/low-code/entities/{entityName}/download-token` to obtain a single-use download token (valid for 30 seconds). -2. The client calls `GET /api/low-code/entities/{entityName}/export-as-excel` or `GET /api/low-code/entities/{entityName}/export-as-csv` with the token and optional filters. +## Export -### API Endpoints +Every dynamic entity page can export filtered data to Excel or CSV. Export requests use the same search, sorting, and filter input as the list endpoint. Server-only fields are excluded and foreign key values are displayed through their configured display property. | Endpoint | Description | |----------|-------------| -| `GET /api/low-code/entities/{entityName}/download-token` | Get a single-use download token | -| `GET /api/low-code/entities/{entityName}/export-as-excel` | Export as Excel (.xlsx) | -| `GET /api/low-code/entities/{entityName}/export-as-csv` | Export as CSV (.csv) | - -Export requests accept the same filtering, sorting, and search parameters as the list endpoint. Server-only properties are automatically excluded, and foreign key columns display the referenced entity's display value instead of the raw ID. - -## Custom Commands and Queries - -The Low-Code System allows you to replace or extend the default CRUD operations by implementing custom command and query handlers in C#. - -### Custom Commands - -Create a class that implements `ILcCommand` and decorate it with `[CustomCommand]`: - -````csharp -[CustomCommand("Create", "MyApp.Products.Product")] -public class CustomProductCreateCommand : CreateCommand -{ - public override async Task ExecuteWithResultAsync(DynamicCommandArgs commandArgs) - { - // Your custom create logic here - // ... - } -} -```` - -| Parameter | Description | -|-----------|-------------| -| `commandName` | The command to replace: `"Create"`, `"Update"`, or `"Delete"` | -| `entityName` | Full entity name (e.g., `"MyApp.Products.Product"`) | - -### Custom Queries - -Create a class that implements `ILcQuery` and decorate it with `[CustomQuery]`: - -````csharp -[CustomQuery("List", "MyApp.Products.Product")] -public class CustomProductListQuery : ILcQuery -{ - public async Task ExecuteAsync(DynamicQueryArgs queryArgs) - { - // Your custom list query logic here - // ... - } -} -```` - -````csharp -[CustomQuery("Single", "MyApp.Products.Product")] -public class CustomProductListQuery : ILcQuery -{ - public async Task ExecuteAsync(DynamicQueryArgs queryArgs) - { - // Your custom single query logic here - // ... - } -} -```` - -| Parameter | Description | -|-----------|-------------| -| `queryName` | The query to replace: `"List"` or `"Single"` | -| `entityName` | Full entity name (e.g., `"MyApp.Products.Product"`) | - -Custom commands and queries are automatically discovered and registered at startup. They completely replace the default handler for the specified entity and operation. - -## Internals +| `GET /api/low-code/pages/{pageName}/download-token` | Gets a short-lived download token | +| `GET /api/low-code/pages/{pageName}/export/excel` | Exports filtered data as Excel | +| `GET /api/low-code/pages/{pageName}/export/csv` | Exports filtered data as CSV | -### Domain Layer +## Advanced Configuration -* `DynamicModelManager`: Singleton managing all entity metadata with a layered configuration architecture (Code > JSON > Fluent > Defaults). -* `EntityDescriptor`: Entity definition with properties, foreign keys, interceptors, and UI configuration. -* `EntityPropertyDescriptor`: Property definition with type, validation, UI settings, and foreign key info. -* `IDynamicEntityRepository`: Repository for dynamic entity CRUD operations. +The designer stores and reads the same model metadata described in the reference pages below. Use these pages when you need source-controlled model files, custom startup wiring, script handlers, or low-level integration details. -### Application Layer +| Topic | Use it for | +|-------|------------| +| [Designer](designer.md) | Admin Console tabs, entity/page/form setup, permissions, and health | +| [React Runtime](react-runtime.md) | React package wiring, routes, menu items, filters, forms, and export | +| [Attributes & Fluent API](fluent-api.md) | Source-controlled C# metadata and runtime overrides | +| [model.json Structure](model-json.md) | JSON descriptor format used by the designer and runtime | +| [Reference Entities](reference-entities.md) | Lookups to existing entities such as Identity users | +| [Foreign Access](foreign-access.md) | Access to related dynamic entities through relations | +| [Interceptors](interceptors.md) | JavaScript lifecycle logic for CRUD operations | +| [Custom Endpoints](custom-endpoints.md) | JavaScript-backed REST endpoints | +| [Scripting API](scripting-api.md) | Server-side script context and helpers | -* `DynamicEntityAppService`: CRUD operations for all dynamic entities (Get, GetList, Create, Update, Delete, Export). -* `DynamicEntityUIAppService`: UI definitions, menu items, and page configurations. Provides: - * `GetUiDefinitionAsync(entityName)` — Full UI definition (filters, columns, forms, children, foreign access actions, permissions) - * `GetUiCreationFormDefinitionAsync(entityName)` — Creation form fields with validation rules - * `GetUiEditFormDefinitionAsync(entityName)` — Edit form fields with validation rules - * `GetMenuItemsAsync()` — Menu items for all entities that have a `pageTitle` configured (filtered by permissions) -* `DynamicPermissionDefinitionProvider`: Auto-generates permissions per entity. -* `CustomEndpointExecutor`: Executes JavaScript-based custom endpoints. +## Runtime Internals -### Database Providers +The generated pages are powered by these services: -**Entity Framework Core**: Dynamic entities are configured as EF Core [shared-type entities](https://learn.microsoft.com/en-us/ef/core/modeling/entity-types?tabs=fluent-api#shared-type-entity-types) via the `ConfigureDynamicEntities()` extension method. +* `DynamicEntityAppService` handles CRUD, list queries, filtering, sorting, and export. +* `DynamicPageAppService` exposes page-based CRUD, file, attachment, lookup, child, foreign-access, and export endpoints. +* `DynamicEntityUIAppService` returns page, form, dashboard, field, filter, and menu metadata. +* `DynamicPermissionDefinitionProvider` creates permissions for dynamic entities. +* `CustomEndpointExecutor` runs JavaScript-backed custom endpoints. +* EF Core maps dynamic entities as shared-type entities. ## See Also -* [Attributes & Fluent API](fluent-api.md) +* [Low-Code Designer](designer.md) +* [React Runtime](react-runtime.md) * [model.json Structure](model-json.md) -* [Scripting API](scripting-api.md) diff --git a/docs/en/low-code/interceptors.md b/docs/en/low-code/interceptors.md index 7eaf97eb778..048e8c61689 100644 --- a/docs/en/low-code/interceptors.md +++ b/docs/en/low-code/interceptors.md @@ -7,6 +7,10 @@ # Interceptors +> **Preview:** Interceptors and their JavaScript context are preview extension points. Script context members, validation behavior, and lifecycle hooks may change before general availability. + +Use designer actions and model metadata for standard low-code behavior first. Interceptors are an advanced extension point for adding JavaScript lifecycle logic when the generated CRUD flow needs validation, transformation, or replacement behavior. + Interceptors allow you to run custom JavaScript code before, after, or instead of Create, Update, and Delete operations on dynamic entities. ## Interceptor Types @@ -23,6 +27,31 @@ Interceptors allow you to run custom JavaScript code before, after, or instead o | `Delete` | `Post` | After entity deletion — cleanup | | `Delete` | `Replace` | Instead of entity deletion — no return value needed | +## Defining Interceptors in model.json + +The designer stores entity interceptors in the entity `interceptors` array: + +```json +{ + "name": "LowCodeDemo.Customers.Customer", + "interceptors": [ + { + "commandName": "Create", + "type": "Pre", + "javascript": "if (!args.getValue('Name')) {\n globalError = 'Name is required.';\n}" + } + ] +} +``` + +### Interceptor Descriptor + +| Field | Type | Description | +|-------|------|-------------| +| `commandName` | string | `"Create"`, `"Update"`, or `"Delete"` | +| `type` | string | `"Pre"`, `"Post"`, or `"Replace"` | +| `javascript` | string | JavaScript code to execute | + ## Defining Interceptors with Attributes Use the `[DynamicEntityCommandInterceptor]` attribute on a C# class: @@ -49,7 +78,7 @@ The `Name` parameter must be one of: `"Create"`, `"Update"`, or `"Delete"`. The ## Defining Interceptors with Fluent API -Use the `Interceptors` list on an `EntityDescriptor` to add interceptors programmatically in your [Low-Code Initializer](index.md#1-create-a-low-code-initializer): +Use the `Interceptors` list on an `EntityDescriptor` to add interceptors programmatically in startup configuration: ````csharp AbpDynamicEntityConfig.EntityConfigurations.Configure( @@ -71,32 +100,7 @@ AbpDynamicEntityConfig.EntityConfigurations.Configure( ); ```` -See [Attributes & Fluent API](fluent-api.md#adding-interceptors) for more details on Fluent API configuration. - -## Defining Interceptors in model.json - -Add interceptors to the `interceptors` array of an entity: - -```json -{ - "name": "LowCodeDemo.Customers.Customer", - "interceptors": [ - { - "commandName": "Create", - "type": "Pre", - "javascript": "if(context.commandArgs.data['Name'] == 'Invalid') {\n globalError = 'Invalid Customer Name!';\n}" - } - ] -} -``` - -### Interceptor Descriptor - -| Field | Type | Description | -|-------|------|-------------| -| `commandName` | string | `"Create"`, `"Update"`, or `"Delete"` | -| `type` | string | `"Pre"`, `"Post"`, or `"Replace"` | -| `javascript` | string | JavaScript code to execute | +See [Attributes & Fluent API](fluent-api.md) for more details on Fluent API configuration. ## JavaScript Context @@ -154,6 +158,8 @@ Inside interceptor scripts, you have access to: Full access to the [Scripting API](scripting-api.md) for querying and mutating data. +Interceptors can also use common scripting services such as `user`, `tenant`, `auth`, `settings`, `features`, `events`, `jobs`, `files`, `images`, and `attachments` when they are enabled by the scripting capability profile. + ### `globalError` Set this variable to a string to **abort** the operation and return an error: diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 2f58876a29a..28662cde7ed 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -1,27 +1,27 @@ ```json //[doc-seo] { - "Description": "Define dynamic entities using model.json in the ABP Low-Code System. Learn about entity properties, enums, foreign keys, validators, UI configuration, and migration requirements." + "Description": "Define ABP Low-Code model.json metadata for dynamic entities, pages, forms, filters, permissions, script endpoints, event handlers, background jobs, and workers." } ``` # model.json Structure -The `model.json` file defines all your dynamic entities, their properties, enums, relationships, interceptors, custom endpoints, and UI configurations. It is an alternative configuration source to [C# Attributes and Fluent API](fluent-api.md), ideal when you prefer a declarative JSON approach. +> **Preview:** The Low-Code System is currently in preview. The descriptor format is stable enough for evaluation and source control, but fields may change before general availability. + +`model.json` is the source-controlled descriptor format used by the Low-Code Designer and React runtime. Use the [Low-Code Designer](designer.md) for normal editing. Use this page when you need to review, generate, merge, or source-control the JSON metadata directly. ## File Location -Place your `model.json` in a `_Dynamic` folder inside your **Domain** project: +Generated low-code applications keep the model file in a `_Dynamic` folder under the application domain project: -``` +```text YourApp.Domain/ -└── _Dynamic/ - └── model.json +`-- _Dynamic/ + `-- model.json ``` -The module automatically discovers and loads this file at application startup. - -> A JSON Schema file (`model.schema.json`) is available in the module source for IDE IntelliSense. Reference it using the `$schema` property: +The low-code module discovers this file during application startup. A JSON Schema (`model.schema.json`) is available in the module source and can be referenced with `$schema` for IDE IntelliSense. ```json { @@ -30,280 +30,321 @@ The module automatically discovers and loads this file at application startup. } ``` -## Top-Level Structure +## Top-Level Sections -The `model.json` file has three root sections: +The current model format is page/form centered. Entities define data shape; pages and forms define the React runtime UI. ```json { "$schema": "...", "enums": [], "entities": [], - "endpoints": [] + "endpoints": [], + "eventHandlers": [], + "backgroundJobs": [], + "backgroundWorkers": [], + "pageGroups": [], + "pages": [], + "forms": [], + "permissions": [] } ``` | Section | Description | |---------|-------------| -| `enums` | Enum type definitions | -| `entities` | Entity definitions with properties, foreign keys, interceptors, and UI | -| `endpoints` | Custom REST API endpoints with JavaScript handlers | +| `enums` | Reusable enum definitions | +| `entities` | Dynamic entities, properties, relations, attachments, validations, and interceptors | +| `endpoints` | JavaScript-backed custom HTTP endpoints | +| `eventHandlers` | JavaScript handlers for distributed events | +| `backgroundJobs` | Named JavaScript background job handlers | +| `backgroundWorkers` | Scheduled JavaScript workers | +| `pageGroups` | Menu folders used by runtime pages | +| `pages` | React runtime page definitions, including data grids, kanban, calendar, gallery, form pages, and dashboards | +| `forms` | Named form definitions referenced by pages | +| `permissions` | Custom permission definitions referenced by pages and endpoints | -## Enum Definitions +## Enums -Define enums that can be used as property types: +Define enums before properties that reference them: ```json { "enums": [ { - "name": "LowCodeDemo.Organizations.OrganizationType", + "name": "Acme.Campaigns.CampaignStatus", "values": [ - { "name": "Corporate", "value": 0 }, - { "name": "Enterprise", "value": 1 }, - { "name": "Startup", "value": 2 }, - { "name": "Consulting", "value": 3 } + { "name": "Draft", "value": 0 }, + { "name": "Active", "value": 1 }, + { "name": "Paused", "value": 2 }, + { "name": "Completed", "value": 3 } ] } ] } ``` -Reference enums in entity properties using the `enumType` field: +Use the enum from a property with `type: "enum"` and `enumType`: ```json { - "name": "OrganizationType", - "enumType": "LowCodeDemo.Organizations.OrganizationType" + "name": "Status", + "type": "enum", + "enumType": "Acme.Campaigns.CampaignStatus", + "defaultValue": "0" } ``` -## Entity Definition +## Entities -Each entity has the following structure: +Entities describe the persisted data model. UI is not configured with legacy property `ui` objects. Use page `columns` and `filters`, and named `forms`, for runtime UI behavior. ```json { - "name": "LowCodeDemo.Products.Product", + "name": "Acme.Campaigns.Campaign", + "displayName": "Campaigns", "displayProperty": "Name", - "parent": null, "properties": [], - "interceptors": [], - "ui": {} -} -``` - -### Entity Attributes - -| Attribute | Type | Description | -|-----------|------|-------------| -| `name` | string | **Required.** Full entity name with namespace (e.g., `"MyApp.Products.Product"`) | -| `displayProperty` | string | Property to display in lookups and foreign key dropdowns | -| `parent` | string | Parent entity name for parent-child (master-detail) relationships | -| `properties` | array | Property definitions | -| `interceptors` | array | CRUD lifecycle interceptors | -| `ui` | object | UI configuration | - -### Parent-Child Relationships - -Use the `parent` field to create nested entities. Children are managed through the parent entity's UI: - -```json -{ - "name": "LowCodeDemo.Orders.OrderLine", - "parent": "LowCodeDemo.Orders.Order", - "properties": [ - { - "name": "ProductId", - "foreignKey": { - "entityName": "LowCodeDemo.Products.Product" - } - }, - { "name": "Quantity", "type": "int" }, - { "name": "Amount", "type": "decimal" } - ] + "crossFieldValidations": [], + "interceptors": [] } ``` -Multi-level nesting is supported (e.g., `Order > OrderLine > ShipmentItem > ShipmentTracking`). +| Field | Description | +|-------|-------------| +| `name` | Required stable full entity name, for example `Acme.Campaigns.Campaign` | +| `displayName` | Default plural/screen label | +| `displayProperty` | Property shown in lookups and foreign key display values | +| `parent` | Parent entity name for child/detail entities | +| `attachments` | Record-level attachment settings | +| `properties` | Entity property definitions | +| `crossFieldValidations` | Validation rules comparing two properties | +| `interceptors` | Create, update, and delete lifecycle scripts | -## Property Definition +### Properties ```json { - "name": "Price", - "type": "decimal", + "name": "Budget", + "type": "money", "isRequired": true, "isUnique": false, - "isMappedToDbField": true, - "serverOnly": false, "allowSetByClients": true, - "enumType": null, - "foreignKey": null, - "validators": [], - "ui": {} + "serverOnly": false, + "isMappedToDbField": true, + "validators": [ + { "type": "range", "minimum": 0, "maximum": 1000000 } + ] } ``` +| Field | Description | +|-------|-------------| +| `name` | Required PascalCase property name | +| `type` | Property type; omitted means `string` | +| `displayName` | Default field label; pages/forms can override it | +| `enumType` | Enum name when `type` is `enum` | +| `defaultValue` | Default value for new records, stored as a string and converted at runtime | +| `isRequired` | Required/not nullable backend and UI validation | +| `isUnique` | Unique value validation | +| `serverOnly` | Hidden from clients, API responses, and UI metadata | +| `allowSetByClients` | Whether create/update clients may set this value | +| `isMappedToDbField` | Whether the property is stored in the database | +| `foreignKey` | Lookup relation metadata | +| `validators` | Backend/UI validation rules | + ### Property Types | Type | Description | |------|-------------| -| `string` | Text (default if type is omitted) | -| `int` | 32-bit integer | -| `long` | 64-bit integer | -| `decimal` | Decimal number | -| `DateTime` | Date and time | +| `string` | Text | +| `int`, `long` | Whole numbers | +| `decimal`, `money` | Decimal numbers and money values | +| `dateTime`, `date`, `time` | Date/time values | | `boolean` | True/false | -| `Guid` | GUID/UUID | -| `Enum` | Enum type (requires `enumType` field) | +| `guid` | GUID value | +| `enum` | Integer-backed enum; requires `enumType` | +| `file`, `image` | Upload metadata handled by the low-code file pipeline | -### Property Flags +### File, Image, and Attachments -| Flag | Type | Default | Description | -|------|------|---------|-------------| -| `isRequired` | bool | `false` | Property must have a value | -| `isUnique` | bool | `false` | Value must be unique across all records | -| `isMappedToDbField` | bool | `true` | Property is stored in the database | -| `serverOnly` | bool | `false` | Property is hidden from API clients | -| `allowSetByClients` | bool | `true` | Whether clients can set this value | +Use `file` or `image` properties for first-class upload fields: -### Foreign Key Properties +```json +{ + "name": "CoverImage", + "type": "image", + "fileAllowedContentTypes": ["image/*"], + "fileMaxSizeBytes": 5242880, + "imageMaxWidth": 1600, + "imageMaxHeight": 900, + "imageResizeMode": "fit" +} +``` -Define a foreign key relationship inline on a property: +Use entity `attachments` when each record can have multiple arbitrary files: ```json { - "name": "CustomerId", - "foreignKey": { - "entityName": "LowCodeDemo.Customers.Customer", - "displayPropertyName": "Name", - "access": "edit" + "name": "Acme.Campaigns.Campaign", + "attachments": { + "isEnabled": true, + "maxFileCount": 10, + "maxFileSizeBytes": 5242880, + "allowedContentTypes": ["application/pdf", "image/*"] } } ``` -| Attribute | Description | -|-----------|-------------| -| `entityName` | **Required.** Full name of the target entity — can be a **dynamic entity** (e.g., `"LowCodeDemo.Customers.Customer"`) or a **[reference entity](reference-entities.md)** (e.g., `"Volo.Abp.Identity.IdentityUser"`) | -| `displayPropertyName` | Property to display in lookups (defaults to entity's `displayProperty`) | -| `access` | [Foreign access](foreign-access.md) level: `"none"`, `"view"`, or `"edit"` | +### Foreign Keys -> **Note:** [Reference entities](reference-entities.md) are existing C# entities (like ABP's `IdentityUser`) that are registered for read-only access. Unlike dynamic entities, they don't get CRUD pages — they're used only for foreign key lookups and display values. +```json +{ + "name": "OwnerId", + "type": "guid", + "foreignKey": { + "entityName": "Volo.Abp.Identity.IdentityUser", + "displayPropertyName": "UserName", + "access": "none" + } +} +``` -### Validators +`entityName` can point to another dynamic entity or a registered [reference entity](reference-entities.md). `access` controls [Foreign Access](foreign-access.md) behavior for dynamic entity relations. -Add validation rules to properties: +### Validators ```json { "name": "EmailAddress", + "type": "string", "validators": [ { "type": "required" }, - { "type": "emailAddress" }, - { "type": "minLength", "length": 5 }, + { "type": "email" }, { "type": "maxLength", "length": 255 } ] } ``` -Additional validator examples: +Common validators include `required`, `minLength`, `maxLength`, `stringLength`, `email`, `emailAddress`, `phone`, `url`, `creditCard`, `regularExpression`, `range`, `min`, and `max`. Validators can include a custom `message`. + +## Pages + +Pages create runtime routes and menu entries. They also choose how entity data is rendered in React. ```json { - "name": "Website", - "validators": [ - { "type": "url", "message": "Please enter a valid URL" } - ] -}, -{ - "name": "PhoneNumber", - "validators": [ - { "type": "phone" } - ] -}, -{ - "name": "ProductCode", - "validators": [ - { "type": "regularExpression", "pattern": "^[A-Z]{3}-\\d{4}$", "message": "Code must be in format ABC-1234" } - ] -}, -{ - "name": "Price", - "type": "decimal", - "validators": [ - { "type": "range", "minimum": 0.01, "maximum": 99999.99 } - ] + "name": "campaigns", + "title": "Campaigns", + "icon": "fa-solid fa-bullhorn", + "type": "dataGrid", + "entityName": "Acme.Campaigns.Campaign", + "group": "marketing", + "columns": [ + { "propertyName": "Name", "order": 0 }, + { "propertyName": "Status", "order": 1 }, + { "propertyName": "Budget", "order": 2 } + ], + "filters": [ + { "propertyName": "Name", "control": "text", "defaultOperator": "contains" }, + { "propertyName": "Status", "control": "select", "defaultOperator": "equal" } + ], + "createFormName": "campaign-form", + "editFormName": "campaign-form" } ``` -| Validator | Parameters | Applies To | Description | -|-----------|------------|------------|-------------| -| `required` | `allowEmptyStrings` (optional) | All types | Value is required | -| `minLength` | `length` | String | Minimum string length | -| `maxLength` | `length` | String | Maximum string length | -| `stringLength` | `minimumLength`, `maximumLength` | String | String length range (min and max together) | -| `emailAddress` | — | String | Must be a valid email | -| `phone` | — | String | Must be a valid phone number | -| `url` | — | String | Must be a valid URL | -| `creditCard` | — | String | Must be a valid credit card number | -| `regularExpression` | `pattern` | String | Must match the regex pattern | -| `range` | `minimum`, `maximum` | Numeric | Numeric range | -| `min` | `minimum` | Numeric | Minimum numeric value | -| `max` | `maximum` | Numeric | Maximum numeric value | - -> All validators accept an optional `message` parameter for a custom error message. The `regularExpression` validator also accepts the alias `pattern`, and `emailAddress` also accepts `email`. +| Page type | Required fields | Purpose | +|-----------|-----------------|---------| +| `dataGrid` | `entityName` | Searchable, sortable CRUD grid | +| `kanban` | `entityName`, `groupByProperty` | Cards grouped by an enum/status-like property | +| `calendar` | `entityName`, `calendarStartProperty` | Records shown on a calendar | +| `gallery` | `entityName` | Visual/card list, optionally using `galleryImageProperty` | +| `form` | `entityName`, `formName` | Standalone form page | +| `dashboard` | `dashboard` | Dashboard visualizations | + +Runtime routes use the page name: + +```text +/dynamic/ +/dynamic//create +/dynamic//edit/ +/dynamic// +``` -## UI Configuration +## Forms -### Entity-Level UI +Forms are named definitions referenced by pages through `formName`, `createFormName`, or `editFormName`. ```json { - "ui": { - "pageTitle": "Products" + "name": "campaign-form", + "entityName": "Acme.Campaigns.Campaign", + "enableSaveAndNew": true, + "fields": [ + { "id": "name", "label": "Name", "type": "text", "binding": "Name" }, + { "id": "status", "label": "Status", "type": "select", "binding": "Status", "enumType": "Acme.Campaigns.CampaignStatus" }, + { "id": "ownerId", "label": "Owner", "type": "lookup", "binding": "OwnerId" } + ], + "layout": { + "tabs": [ + { + "id": "main", + "title": "Main", + "isDefault": true, + "groups": [ + { + "id": "details", + "title": "Details", + "isDefault": true, + "rows": [ + { "cells": [{ "fieldId": "name", "colSpan": 4 }] }, + { "cells": [{ "fieldId": "status", "colSpan": 2 }, { "fieldId": "ownerId", "colSpan": 2 }] } + ] + } + ] + } + ] } } ``` -> Only entities with `ui.pageTitle` get a menu item and a dedicated page in the UI. +Form fields can be `text`, `textarea`, `number`, `checkbox`, `date`, `datetime`, `time`, `file`, `image`, `money`, `select`, `lookup`, `guid`, or `computed`. Form rules can hide, show, disable, enable, or set values for fields/groups. + +## Filters + +Filters are page-owned. Use `control: "auto"` unless you need a specific control. + +| Property type | Typical operators | +|---------------|-------------------| +| `string` | `contains`, `equal`, `notEqual`, `startsWith`, `endsWith`, `notContains`, `hasValue` | +| `int`, `long`, `decimal`, `money` | `between`, `equal`, `notEqual`, `greaterThan`, `greaterThanOrEqual`, `lessThan`, `lessThanOrEqual`, `hasValue` | +| `date`, `dateTime`, `time` | `between`, `equal`, `greaterThan`, `greaterThanOrEqual`, `lessThan`, `lessThanOrEqual`, `hasValue` | +| `boolean` | `All / Yes / No` value selector | +| `enum`, lookup, `guid` | `equal`, `notEqual`, `in`, `notIn`, `hasValue` | +| `file`, `image` | `hasValue` with `All / Yes / No` | -### Property-Level UI +`hasValue` is a UI alias. At runtime, `Yes` maps to `IsNotNull`, `No` maps to `IsNull`, and `All` does not add a filter. + +## Permissions + +Pages can use generated defaults or explicit permission configuration: ```json { - "name": "RegistrationNumber", - "ui": { - "displayName": "Registration Number", - "isAvailableOnDataTable": true, - "isAvailableOnDataTableFiltering": true, - "creationFormAvailability": "Hidden", - "editingFormAvailability": "NotAvailable", - "quickLookOrder": 100 + "permissionConfig": { + "view": "authenticated", + "create": "Acme.Campaigns.Create", + "update": "Acme.Campaigns.Update", + "delete": "Acme.Campaigns.Delete" } } ``` -| Attribute | Type | Default | Description | -|-----------|------|---------|-------------| -| `displayName` | string | Property name | Display label in UI | -| `isAvailableOnDataTable` | bool | `true` | Show in data grid | -| `isAvailableOnDataTableFiltering` | bool | `true` | Show in filter panel | -| `creationFormAvailability` | string | `"Available"` | Visibility in create form | -| `editingFormAvailability` | string | `"Available"` | Visibility in edit form | -| `quickLookOrder` | int | -2 | Order in quick-look panel (-2 = not shown) | - -#### Form Availability Values +Custom permission definitions live in the top-level `permissions` section and can be granted through the normal ABP permission management UI. -| Value | Description | -|-------|-------------| -| `Available` | Visible and editable | -| `Hidden` | Not visible in the form | -| `NotAvailable` | Visible but disabled/read-only | - -## Interceptors +## Scripts -Define JavaScript interceptors for CRUD lifecycle hooks: +### Interceptors ```json { @@ -311,33 +352,61 @@ Define JavaScript interceptors for CRUD lifecycle hooks: { "commandName": "Create", "type": "Pre", - "javascript": "if(!context.commandArgs.data['Name']) { globalError = 'Name is required!'; }" + "javascript": "if (!args.getValue('Name')) { globalError = 'Name is required.'; }" } ] } ``` -See [Interceptors](interceptors.md) for details. - -## Endpoints +See [Interceptors](interceptors.md) and [Scripting API](scripting-api.md). -Define custom REST endpoints with JavaScript handlers: +### Custom Endpoints ```json { "endpoints": [ { - "name": "GetProductStats", - "route": "/api/custom/products/stats", + "name": "GetCampaignStats", + "route": "/api/custom/campaigns/stats", "method": "GET", - "requireAuthentication": false, - "javascript": "var count = await db.count('Products.Product'); return ok({ total: count });" + "requireAuthentication": true, + "requiredPermissions": ["Acme.Campaigns"], + "javascript": "var count = await db.count('Acme.Campaigns.Campaign'); return ok({ total: count });" + } + ] +} +``` + +See [Custom Endpoints](custom-endpoints.md). + +### Event Handlers, Jobs, and Workers + +```json +{ + "eventHandlers": [ + { + "name": "NotifyCampaignCompleted", + "eventName": "Acme.Campaigns.CampaignCompleted", + "javascript": "log('Campaign completed: ' + eventData.id);" + } + ], + "backgroundJobs": [ + { + "name": "SendCampaignSummary", + "javascript": "log('Sending summary for ' + jobData.campaignId);" + } + ], + "backgroundWorkers": [ + { + "name": "CampaignCleanup", + "period": 3600000, + "javascript": "log('Cleaning campaign data.');" } ] } ``` -See [Custom Endpoints](custom-endpoints.md) for details. +Background workers require either `period` in milliseconds or `cronExpression`. ## Complete Example @@ -345,60 +414,84 @@ See [Custom Endpoints](custom-endpoints.md) for details. { "enums": [ { - "name": "ShipmentStatus", + "name": "Acme.Campaigns.CampaignStatus", "values": [ - { "name": "Pending", "value": 0 }, - { "name": "Shipped", "value": 2 }, - { "name": "Delivered", "value": 4 } + { "name": "Draft", "value": 0 }, + { "name": "Active", "value": 1 }, + { "name": "Completed", "value": 2 } ] } ], "entities": [ { - "name": "LowCodeDemo.Products.Product", + "name": "Acme.Campaigns.Campaign", + "displayName": "Campaigns", "displayProperty": "Name", "properties": [ - { "name": "Name", "isUnique": true, "isRequired": true }, - { "name": "Price", "type": "decimal" }, - { "name": "StockCount", "type": "int" }, - { "name": "ReleaseDate", "type": "DateTime" } - ], - "ui": { "pageTitle": "Products" } - }, + { "name": "Name", "type": "string", "isRequired": true, "validators": [{ "type": "maxLength", "length": 128 }] }, + { "name": "Status", "type": "enum", "enumType": "Acme.Campaigns.CampaignStatus", "defaultValue": "0" }, + { "name": "Budget", "type": "money" }, + { "name": "StartDate", "type": "date" }, + { "name": "CoverImage", "type": "image", "fileAllowedContentTypes": ["image/*"] } + ] + } + ], + "forms": [ { - "name": "LowCodeDemo.Orders.Order", - "displayProperty": "Id", - "properties": [ - { - "name": "CustomerId", - "foreignKey": { - "entityName": "LowCodeDemo.Customers.Customer", - "access": "edit" + "name": "campaign-form", + "entityName": "Acme.Campaigns.Campaign", + "fields": [ + { "id": "name", "label": "Name", "type": "text", "binding": "Name" }, + { "id": "status", "label": "Status", "type": "select", "binding": "Status", "enumType": "Acme.Campaigns.CampaignStatus" }, + { "id": "budget", "label": "Budget", "type": "money", "binding": "Budget" }, + { "id": "startDate", "label": "Start Date", "type": "date", "binding": "StartDate" }, + { "id": "coverImage", "label": "Cover Image", "type": "image", "binding": "CoverImage" } + ], + "layout": { + "tabs": [ + { + "id": "main", + "title": "Main", + "isDefault": true, + "groups": [ + { + "id": "details", + "title": "Details", + "isDefault": true, + "rows": [ + { "cells": [{ "fieldId": "name", "colSpan": 4 }] }, + { "cells": [{ "fieldId": "status", "colSpan": 2 }, { "fieldId": "budget", "colSpan": 2 }] }, + { "cells": [{ "fieldId": "startDate", "colSpan": 2 }, { "fieldId": "coverImage", "colSpan": 2 }] } + ] + } + ] } - }, - { "name": "TotalAmount", "type": "decimal" }, - { "name": "IsDelivered", "type": "boolean" } + ] + } + } + ], + "pageGroups": [ + { "name": "marketing", "title": "Marketing", "icon": "fa-solid fa-bullhorn", "order": 10 } + ], + "pages": [ + { + "name": "campaigns", + "title": "Campaigns", + "type": "dataGrid", + "entityName": "Acme.Campaigns.Campaign", + "group": "marketing", + "columns": [ + { "propertyName": "Name", "order": 0 }, + { "propertyName": "Status", "order": 1 }, + { "propertyName": "Budget", "order": 2 } ], - "interceptors": [ - { - "commandName": "Create", - "type": "Post", - "javascript": "context.log('Order created: ' + context.commandArgs.entityId);" - } + "filters": [ + { "propertyName": "Name", "control": "text", "defaultOperator": "contains" }, + { "propertyName": "Status", "control": "select", "defaultOperator": "equal" }, + { "propertyName": "CoverImage", "control": "exists", "defaultOperator": "hasValue" } ], - "ui": { "pageTitle": "Orders" } - }, - { - "name": "LowCodeDemo.Orders.OrderLine", - "parent": "LowCodeDemo.Orders.Order", - "properties": [ - { - "name": "ProductId", - "foreignKey": { "entityName": "LowCodeDemo.Products.Product" } - }, - { "name": "Quantity", "type": "int" }, - { "name": "Amount", "type": "decimal" } - ] + "createFormName": "campaign-form", + "editFormName": "campaign-form" } ] } @@ -406,16 +499,20 @@ See [Custom Endpoints](custom-endpoints.md) for details. ## Migration Requirements -When you modify `model.json`, you need database migrations for the changes to take effect: +Entity shape changes require database migrations before they can be used safely: -* **New entity**: `dotnet ef migrations add Added_{EntityName}` -* **New property**: `dotnet ef migrations add Added_{PropertyName}_To_{EntityName}` -* **Type change**: `dotnet ef migrations add Changed_{PropertyName}_In_{EntityName}` +* New entity +* New persisted property +* Property type change +* Required/nullability change +* Unique index change -> The same migration requirement applies when using [C# Attributes](fluent-api.md). Any change to entity structure requires an EF Core migration. +In ABP Studio, run the generated migration task for the solution. If you run the application from the command line, use the migration workflow generated by the startup template. ## See Also +* [Low-Code Designer](designer.md) +* [React Runtime](react-runtime.md) * [Attributes & Fluent API](fluent-api.md) * [Interceptors](interceptors.md) * [Custom Endpoints](custom-endpoints.md) diff --git a/docs/en/low-code/react-runtime.md b/docs/en/low-code/react-runtime.md new file mode 100644 index 00000000000..923f80fb883 --- /dev/null +++ b/docs/en/low-code/react-runtime.md @@ -0,0 +1,246 @@ +```json +//[doc-seo] +{ + "Description": "Configure the ABP React Low-Code runtime with configureLowCode, dynamic routes, dynamic menu items, generated pages, filters, forms, and export." +} +``` + +# React Runtime + +> **Preview:** The React low-code runtime is part of the preview Low-Code System. Runtime APIs, generated routes, metadata contracts, and UI behavior may change before general availability. + +The React runtime renders low-code pages from backend metadata. Generated low-code React applications include the required package and wiring. + +```json +{ + "dependencies": { + "@volo/abp-react-lowcode": "" + } +} +``` + +## Configure the Runtime + +Call `configureLowCode` once during React startup. Pass the application's Axios instance, notifications, localization, navigation integration, and optional extension points. + +```tsx +import { + configureLowCode, + LowCodeLocalizationProvider, +} from '@volo/abp-react-lowcode'; + +function configureLowCodeRuntime(translate?: (key: string, defaultValue: string) => string) { + configureLowCode({ + axios: api, + onError: (err) => toast.error(err.message), + onSuccess: (message) => toast.success(message), + translate, + navigate: (path) => router.navigate({ to: path }), + validators: { + customRule: (value) => value ? null : 'Value is required.', + }, + }); +} +``` + +Wrap the router with `LowCodeLocalizationProvider` when you want dynamic labels and validation messages to use the application localization pipeline. + +```tsx + + + +``` + +## Add Dynamic Routes + +Use `createDynamicRoutes` in the TanStack Router tree. + +```tsx +import { createDynamicRoutes } from '@volo/abp-react-lowcode'; + +const dynamicEntityRoute = createDynamicRoutes(rootRoute, { + beforeLoad: authGuard, +}); + +const routeTree = rootRoute.addChildren([ + indexRoute, + accountRoute, + identityRoute, + dynamicEntityRoute, +]); +``` + +Runtime pages are then available under: + +```text +/dynamic/ +/dynamic//create +/dynamic//edit/ +/dynamic// +``` + +`createDynamicRoutes` also accepts `basePath` when your application should mount dynamic pages somewhere other than `/dynamic`. + +Generated low-code React templates do not register every possible dynamic page path in TanStack Router's module augmentation. Page names come from backend metadata, so keep dynamic low-code routes out of the static route augmentation or cast the dynamic `path` inside your router navigation adapter if your application uses strict typed navigation. + +## Add Dynamic Menu Items + +Use `useMenuItems` to load menu items defined by low-code pages. Merge them with your static route configuration and apply the same permission checks used by the rest of the application. + +```tsx +import { useMenuItems } from '@volo/abp-react-lowcode'; + +const { data: dynamicMenuItems } = useMenuItems({ + enabled: isAuthenticated, +}); +``` + +Each menu item includes its page name, display name, icon, order, grouping information, and children. + +## Page Types + +The runtime includes built-in renderers for these page types: + +| Page type | Runtime behavior | +|-----------|------------------| +| `dataGrid` | Searchable, sortable CRUD grid | +| `kanban` | Card board grouped by a configured property | +| `calendar` | Calendar view using date/time properties | +| `gallery` | Card/gallery view, optionally image-backed | +| `form` | Standalone form page | +| `dashboard` | Dashboard rows with chart, list, and number visualizations | + +The generated data grid page includes: + +* Search +* Sorting +* Paging +* Action menu +* Create and edit forms +* Permission-aware commands +* Display values for lookups +* File and image fields +* Export +* Type-aware filters + +![Generated React data grid](images/runtime-data-grid.png) + +## Forms + +Create and edit forms are rendered from form metadata. Tabs, groups, labels, placeholders, controls, default values, validation rules, conditional form rules, and save actions come from the designer. + +![Generated create form](images/runtime-create-form.png) + +The runtime can render forms in a modal or on full pages. Full-page forms use the dynamic create/edit routes and the `navigate` callback configured in `configureLowCode`. + +## Filters + +Filters are rendered as an ABP-style advanced filter area. The runtime shows all configured filters and only exposes operator UI where it is useful. + +![Generated advanced filters](images/runtime-filters.png) + +File and image filters use a single `Has value` concept. The value selector controls whether the filter is applied: + +* `All` does not add a filter. +* `Yes` returns records with a value. +* `No` returns records without a value. + +![Has value options](images/runtime-filters-has-value.png) + +The URL keeps the existing `lcFilters` query parameter shape. The runtime maps user-friendly filter choices to the existing backend `FilterType` values. + +## Export + +The runtime export button requests a download token and then calls the Excel or CSV export endpoint with the current search, sorting, and filters. + +| Endpoint | Description | +|----------|-------------| +| `GET /api/low-code/pages/{pageName}/download-token` | Gets a short-lived token | +| `GET /api/low-code/pages/{pageName}/export/excel` | Downloads Excel | +| `GET /api/low-code/pages/{pageName}/export/csv` | Downloads CSV | + +Child and foreign-access pages use the matching `/children/{childEntityName}` and `/foreign-access/{sourceEntityName}` page endpoints. + +## Files and Attachments + +File and image fields use the page file endpoints. Record-level attachments use attachment endpoints when attachments are enabled for the entity. + +| API | Purpose | +|-----|---------| +| `uploadPageFile` | Upload a file/image field value for a page field | +| `downloadPageFile` | Download a file/image field value | +| `buildPageFileDownloadUrl` | Build a URL for image previews or download links | +| `usePageFileObjectUrl` | Create and revoke an object URL for file previews | +| `useEntityAttachments` | Load record attachments | +| `useUploadEntityAttachments` | Upload one or more attachments | +| `useDeleteEntityAttachment` | Delete an attachment | +| `downloadEntityAttachment` | Download an attachment | + +Uploads are still validated on the backend by the configured file size and content type rules. Downloads are checked against the owning record before returning the blob, and user-provided file names should be treated as display text only. Use `usePageFileObjectUrl` for previews so object URLs are revoked when the component unmounts. + +## Hooks and Components + +The package exposes hooks for composing custom pages around the same backend API: + +| API | Purpose | +|-----|---------| +| `usePageDefinitions`, `usePageDefinition` | Load page metadata | +| `useFormDefinition` | Load a named runtime form | +| `useDashboardDefinition`, `useDashboardData` | Load dashboard metadata and data | +| `usePageData`, `usePageRecord` | Load list data and a single record | +| `usePageCreate`, `usePageUpdate`, `usePageDelete` | Mutate records | +| `usePageLookup` | Load lookup/autocomplete options | +| `usePageExport` | Export current list state | + +The package also exports renderer components such as `DynamicPage`, `DynamicEntityPage`, `DynamicKanbanRenderer`, `DynamicCalendarRenderer`, `DynamicGalleryRenderer`, `DynamicDashboardRenderer`, `DynamicFormPageRenderer`, `DynamicFilters`, `DynamicEntityForm`, and `ForeignKeyAutocomplete`. + +## Extension Points + +`configureLowCode` supports these extension points: + +| Option | Purpose | +|--------|---------| +| `validators` | Custom validation functions keyed by rule type | +| `pageRenderers` | Override built-in page renderers or add new page types | +| `fieldRenderers` | Override field rendering by field type or `customRenderer` | +| `translate` | Resolve low-code localization keys through the application | +| `navigate` | Connect full-page form navigation to the application router | + +Custom page renderers receive `PageRendererProps`. Custom field renderers receive `FieldRendererProps`. + +## Runtime API Surface + +The React runtime talks to these backend endpoints: + +| Endpoint | Purpose | +|----------|---------| +| `GET /api/low-code/ui/menu-items` | Dynamic menu tree | +| `GET /api/low-code/ui/pages` | Page list | +| `GET /api/low-code/ui/pages/{pageName}` | Page summary metadata | +| `GET /api/low-code/ui/pages/{pageName}/ui-definition` | Runtime page UI definition | +| `GET /api/low-code/ui/forms/{formName}` | Runtime form definition | +| `GET /api/low-code/ui/dashboards/{pageName}` | Dashboard definition | +| `GET /api/low-code/pages/{pageName}/data` | Page data with search, filters, sorting, and paging | +| `GET /api/low-code/pages/{pageName}/data/{id}` | Single page record | +| `POST /api/low-code/pages/{pageName}/data` | Create record | +| `PUT /api/low-code/pages/{pageName}/data/{id}` | Update record | +| `DELETE /api/low-code/pages/{pageName}/data/{id}` | Delete record | +| `GET /api/low-code/pages/{pageName}/lookup/{fieldName}` | Lookup options | +| `POST /api/low-code/pages/{pageName}/files/{fieldName}` | Upload file/image field | +| `GET /api/low-code/pages/{pageName}/data/{id}/files/{fieldName}/{blobName}` | Download file/image field | +| `GET /api/low-code/pages/{pageName}/data/{id}/attachments` | List attachments | +| `POST /api/low-code/pages/{pageName}/data/{id}/attachments` | Upload attachment | +| `DELETE /api/low-code/pages/{pageName}/data/{id}/attachments/{attachmentId}` | Delete attachment | +| `POST /api/low-code/dashboards/{pageName}/data` | Dashboard visualization data | + +## Troubleshooting + +If a generated page does not appear: + +* Confirm the page exists in the designer and has a page name. +* Confirm the user has the generated page/entity permissions. +* Confirm `createDynamicRoutes` is part of the router tree. +* Confirm `useMenuItems` is enabled for authenticated users. +* Confirm the backend host has run migrations and seed data. + +If authentication loops back to the login page, check the generated OpenIddict clients and React root URL in `appsettings.json`. diff --git a/docs/en/low-code/reference-entities.md b/docs/en/low-code/reference-entities.md index b937175c7a4..f5e3e1027b9 100644 --- a/docs/en/low-code/reference-entities.md +++ b/docs/en/low-code/reference-entities.md @@ -1,12 +1,16 @@ ```json //[doc-seo] { - "Description": "Link dynamic entities to existing C# entities like IdentityUser using Reference Entities in the ABP Low-Code System." + "Description": "Link dynamic entities to existing .NET entities like IdentityUser using Reference Entities in the ABP Low-Code System." } ``` # Reference Entities +> **Preview:** Reference entity metadata is part of the preview Low-Code System. Registration APIs, relation options, and designer behavior may change before general availability. + +Use the [Low-Code Designer](designer.md) to select reference entities after they are registered in application startup. This page explains the registration and metadata details behind that designer experience. + Reference Entities allow you to create foreign key relationships from **dynamic entities** to **existing C# entities** that live outside the Low-Code System. ## Dynamic Entities vs Reference Entities @@ -34,7 +38,7 @@ Dynamic entities defined via [Attributes](fluent-api.md) or [model.json](model-j ## Registering Reference Entities -Register reference entities in your [Low-Code Initializer](index.md#1-create-a-low-code-initializer) using `AbpDynamicEntityConfig.ReferencedEntityList`: +Register reference entities in startup configuration using `AbpDynamicEntityConfig.ReferencedEntityList`: ````csharp public static async Task InitializeAsync() diff --git a/docs/en/low-code/scripting-api.md b/docs/en/low-code/scripting-api.md index a08b1107eca..422cbeb6c17 100644 --- a/docs/en/low-code/scripting-api.md +++ b/docs/en/low-code/scripting-api.md @@ -7,7 +7,13 @@ # Scripting API -The Low-Code System provides a server-side JavaScript scripting engine for executing custom business logic within [interceptors](interceptors.md) and [custom endpoints](custom-endpoints.md). Scripts run in a sandboxed environment with access to a database API backed by EF Core. +> **Preview:** The Low-Code scripting API is a preview server-side JavaScript surface. Available globals, helper methods, limits, and sandbox behavior may change before general availability. + +The designer and React runtime cover the standard CRUD, form, filter, and export workflows. Use the scripting API when an interceptor, action, or custom endpoint needs server-side JavaScript. + +The Low-Code System provides a server-side JavaScript scripting engine for executing custom business logic within [interceptors](interceptors.md), [custom endpoints](custom-endpoints.md), event handlers, background jobs, and background workers. Scripts run in a sandboxed environment with access to a database API backed by EF Core. + +Scripts are wrapped in an async function, so `await` and top-level `return` are supported. ## Unified Database API (`db`) @@ -19,9 +25,11 @@ The `db` object is the main entry point for all data operations. * **Database-Level Execution** — all operations (filters, aggregations, joins, set operations) translate to SQL via EF Core and Dynamic LINQ. * **No in-memory processing** of large datasets. +> `db.query(entityName)` is asynchronous. Always `await` it before chaining query methods, and `await` the terminal operation such as `toList()`, `count()`, `first()`, or `sum()`. + ```javascript // Immutable pattern — each call creates a new builder -var baseQuery = db.query('Entity').where(x => x.Active); +var baseQuery = (await db.query('Entity')).where(x => x.Active); var cheap = baseQuery.where(x => x.Price < 100); // baseQuery unchanged var expensive = baseQuery.where(x => x.Price > 500); // baseQuery unchanged ``` @@ -31,13 +39,15 @@ var expensive = baseQuery.where(x => x.Price > 500); // baseQuery unchanged ### Basic Queries ```javascript -var products = await db.query('LowCodeDemo.Products.Product') +var productQuery = await db.query('LowCodeDemo.Products.Product'); +var products = await productQuery .where(x => x.Price > 100) .orderBy(x => x.Price) .take(10) .toList(); -var result = await db.query('LowCodeDemo.Products.Product') +var filteredProductQuery = await db.query('LowCodeDemo.Products.Product'); +var result = await filteredProductQuery .where(x => x.Price > 100 && x.Price < 500) .where(x => x.StockCount > 0) .orderByDescending(x => x.Price) @@ -92,16 +102,19 @@ var minPrice = 100; var config = { minStock: 10 }; var nested = { range: { min: 50, max: 200 } }; -var result = await db.query('Entity').where(x => x.Price > minPrice).toList(); -var result2 = await db.query('Entity').where(x => x.StockCount > config.minStock).toList(); -var result3 = await db.query('Entity').where(x => x.Price >= nested.range.min).toList(); +var query = await db.query('Entity'); + +var result = await query.where(x => x.Price > minPrice).toList(); +var result2 = await query.where(x => x.StockCount > config.minStock).toList(); +var result3 = await query.where(x => x.Price >= nested.range.min).toList(); ``` ### Contains / IN Operator ```javascript var targetPrices = [50, 100, 200]; -var products = await db.query('Entity') +var query = await db.query('Entity'); +var products = await query .where(x => targetPrices.includes(x.Price)) .toList(); ``` @@ -109,7 +122,8 @@ var products = await db.query('Entity') ### Select Projection ```javascript -var projected = await db.query('LowCodeDemo.Products.Product') +var productQuery = await db.query('LowCodeDemo.Products.Product'); +var projected = await productQuery .where(x => x.Price > 0) .select(x => ({ ProductName: x.Name, ProductPrice: x.Price })) .toList(); @@ -120,7 +134,8 @@ var projected = await db.query('LowCodeDemo.Products.Product') ### Explicit Joins ```javascript -var orderLines = await db.query('LowCodeDemo.Orders.OrderLine') +var orderLineQuery = await db.query('LowCodeDemo.Orders.OrderLine'); +var orderLines = await orderLineQuery .join('LowCodeDemo.Products.Product', 'p', (ol, p) => ol.ProductId === p.Id) .take(10) .toList(); @@ -135,7 +150,8 @@ orderLines.forEach(line => { ### Left Join ```javascript -var orders = await db.query('LowCodeDemo.Orders.Order') +var orderQuery = await db.query('LowCodeDemo.Orders.Order'); +var orders = await orderQuery .leftJoin('LowCodeDemo.Products.Product', 'p', (o, p) => o.CustomerId === p.Id) .toList(); @@ -149,7 +165,8 @@ orders.forEach(order => { ### LINQ-Style Join ```javascript -db.query('Order') +var orderQuery = await db.query('Order'); +orderQuery .join('LowCodeDemo.Products.Product', o => o.ProductId, p => p.Id) @@ -158,9 +175,11 @@ db.query('Order') ### Join with Filtered Query ```javascript -var expensiveProducts = db.query('Product').where(p => p.Price > 100); +var productQuery = await db.query('Product'); +var expensiveProducts = productQuery.where(p => p.Price > 100); -var orders = await db.query('OrderLine') +var orderLineQuery = await db.query('OrderLine'); +var orders = await orderLineQuery .join(expensiveProducts, ol => ol.ProductId, p => p.Id) @@ -179,8 +198,9 @@ Set operations execute at the database level using SQL: | `except(query)` | `EXCEPT` | Elements in first, not second | ```javascript -var cheap = db.query('Product').where(x => x.Price <= 100); -var popular = db.query('Product').where(x => x.Rating > 4); +var productQuery = await db.query('Product'); +var cheap = productQuery.where(x => x.Price <= 100); +var popular = productQuery.where(x => x.Rating > 4); var bestDeals = await cheap.intersect(popular).toList(); var underrated = await cheap.except(popular).toList(); @@ -200,15 +220,18 @@ All aggregations execute as SQL statements: | `groupBy(x => x.Property)` | `GROUP BY ...` | `Promise` | ```javascript -var totalValue = await db.query('Product').sum(x => x.Price); -var avgPrice = await db.query('Product').where(x => x.InStock).average(x => x.Price); -var cheapest = await db.query('Product').min(x => x.Price); +var productQuery = await db.query('Product'); + +var totalValue = await productQuery.sum(x => x.Price); +var avgPrice = await productQuery.where(x => x.InStock).average(x => x.Price); +var cheapest = await productQuery.min(x => x.Price); ``` ### GroupBy with Select ```javascript -var grouped = await db.query('Product') +var productQuery = await db.query('Product'); +var grouped = await productQuery .groupBy(x => x.Category) .select(g => ({ Category: g.Key, @@ -237,7 +260,8 @@ var grouped = await db.query('Product') ### GroupBy with Items ```javascript -var grouped = await db.query('Product') +var productQuery = await db.query('Product'); +var grouped = await productQuery .groupBy(x => x.Category) .select(g => ({ Category: g.Key, @@ -258,11 +282,12 @@ var grouped = await db.query('Product') Math functions translate to SQL functions (ROUND, FLOOR, CEILING, ABS, etc.): ```javascript -var products = await db.query('Product') +var productQuery = await db.query('Product'); +var products = await productQuery .where(x => Math.round(x.Price) > 100) .toList(); -var result = await db.query('Product') +var result = await productQuery .where(x => Math.abs(x.Balance) < 10 && Math.floor(x.Rating) >= 4) .toList(); ``` @@ -274,7 +299,9 @@ Direct CRUD methods on the `db` object: | Method | Description | Returns | |--------|-------------|---------| | `db.get(entityName, id)` | Get by ID | `Promise` | +| `db.getList(entityName, take?)` | Get a list with an optional limit | `Promise` | | `db.getCount(entityName)` | Get count | `Promise` | +| `db.count(entityName)` | Alias for `db.getCount(entityName)` | `Promise` | | `db.exists(entityName)` | Check if any records exist | `Promise` | | `db.insert(entityName, entity)` | Insert new | `Promise` | | `db.update(entityName, entity)` | Update existing | `Promise` | @@ -304,47 +331,199 @@ var updated = await db.update('LowCodeDemo.Products.Product', { await db.delete('LowCodeDemo.Products.Product', id); ``` -## Context Object +## Script Context + +Scripts receive a `context` object and common global shortcuts. Available services can be enabled or disabled per script type with capability profiles. + +### Common Services + +| Global | Context property | Description | +|--------|------------------|-------------| +| `db` | `context.db` | Query and CRUD API | +| `user`, `currentUser` | `context.currentUser` | Current user information and claims | +| `tenant`, `currentTenant` | `context.currentTenant` | Current tenant information | +| `email`, `emailSender` | `context.emailSender` | Email send and queue helpers | +| `config` | `context.config` | Filtered application configuration reader | +| `http` | `context.http` | Hardened outbound HTTP client | +| `auth`, `authorization` | `context.authorization` | Permission checks | +| `settings` | `context.settings` | Filtered setting provider | +| `features` | `context.features` | Feature checks | +| `events` | `context.events` | Distributed event publishing | +| `jobs` | `context.jobs` | Dynamic background job enqueueing | +| `encryption` | `context.encryption` | String encryption and decryption | +| `textTemplating` | `context.textTemplating` | ABP text template rendering | +| `blob` | `context.blob` | Base64 blob storage wrapper | +| `files` | `context.files` | Low-code file field helper | +| `images` | `context.images` | Low-code image field helper | +| `attachments` | `context.attachments` | Record attachment helper | +| `fields` | `context.fields` | Field selector helpers for file operations | +| `log`, `logWarning`, `logError` | logging methods | Script logging | + +Global helpers are also available: + +| Helper | Description | +|--------|-------------| +| `guid()` | Generates a GUID string | +| `userFriendlyError(message)` | Throws a `UserFriendlyException` | +| `businessError(message, code?)` | Throws a `BusinessException` | + +### Interceptor Context + +Interceptors add `args` and `commandArgs`: + +| Property / Method | Description | +|-------------------|-------------| +| `commandArgs.data` | Entity data dictionary for create/update | +| `commandArgs.entityId` | Entity ID for update/delete | +| `commandArgs.commandName` | `Create`, `Update`, or `Delete` | +| `commandArgs.entityName` | Full entity name | +| `commandArgs.getValue(name)` | Get a property value | +| `commandArgs.setValue(name, value)` | Set a property value | +| `commandArgs.hasValue(name)` | Check whether the input contains a property | +| `commandArgs.removeValue(name)` | Remove a property from the input | + +Set `globalError` to abort an operation with a user-facing error: + +```javascript +if (!args.getValue('Name')) { + globalError = 'Name is required.'; +} +``` + +### Custom Endpoint Context + +Custom endpoints add request globals and response helpers. See [Custom Endpoints](custom-endpoints.md) for details. + +| Variable | Description | +|----------|-------------| +| `request` | Full request object | +| `route`, `params` | Route values | +| `query` | Query string values | +| `body` | Request body | +| `headers` | Selected safe request headers | + +### Event, Job, and Worker Context + +| Script type | Additional globals | +|-------------|--------------------| +| Event handler | `handler`, `event`, `eventName`, `eventData` | +| Background job | `job`, `jobName`, `jobData`, `jobJsonData` | +| Background worker | `worker`, `workerName` | + +## Service Helpers + +### HTTP + +The `http` helper supports outbound requests with timeout, response-size, host, and HTTPS policy checks. + +| Method | Description | +|--------|-------------| +| `http.getAsync(url, options?)` | GET | +| `http.postAsync(url, body?, options?)` | POST | +| `http.putAsync(url, body?, options?)` | PUT | +| `http.patchAsync(url, body?, options?)` | PATCH | +| `http.deleteAsync(url, options?)` | DELETE | +| `http.requestAsync(method, url, bodyOrOptions?, options?)` | Custom method | + +Options include `headers`, `query`, `timeoutMs`, `contentType`, and `responseType` (`json`, `text`, or `base64`). + +### Authorization, Settings, Features, and Config + +```javascript +if (await auth.isGrantedAsync('Acme.Campaigns.Create')) { + var enabled = await features.isEnabledAsync('Acme.Campaigns'); + var threshold = await settings.getIntAsync('Acme.Campaigns.Threshold', 10); + var baseUrl = config.get('ExternalApi:BaseUrl'); +} +``` + +### Events and Background Jobs + +```javascript +await events.publishAsync('Acme.Campaigns.CampaignCompleted', { id: campaignId }); + +await jobs.enqueueAsync('SendCampaignSummary', { campaignId: campaignId }, { + priority: 'Normal', + delayMs: 60000 +}); +``` + +### Files, Images, and Attachments -Available in [interceptors](interceptors.md): +The file helpers use low-code page services so permissions, file validation, linked-blob checks, and foreign access stay consistent with the runtime. -| Property | Type | Description | -|----------|------|-------------| -| `context.commandArgs` | object | Command arguments (data, entityId, commandName, entityName) | -| `context.commandArgs.getValue(name)` | function | Get property value | -| `context.commandArgs.setValue(name, value)` | function | Set property value | -| `context.commandArgs.hasValue(name)` | function | Check if a property exists | -| `context.commandArgs.removeValue(name)` | function | Remove a property value | -| `context.currentUser` | object | Current user info (see [Interceptors](interceptors.md) for full list) | -| `context.emailSender` | object | Email sending (`sendAsync`, `sendHtmlAsync`) | -| `context.log(msg)` | function | Log an informational message | -| `context.logWarning(msg)` | function | Log a warning message | -| `context.logError(msg)` | function | Log an error message | +| Helper | Purpose | +|--------|---------| +| `files.parse(value)` | Parse a stored file value | +| `files.format(value, includeSize?)` | Format a file display value | +| `files.save(...)` / `images.save(...)` | Save file or image content | +| `files.get(...)` / `images.get(...)` | Read file or image content | +| `files.upload(entityName, fieldName, fileInput, options?)` | Upload field content | +| `attachments.list(...)` | List record attachments | +| `attachments.upload(...)` / `attachments.save(...)` | Upload a record attachment | +| `attachments.get(...)` / `attachments.download(...)` | Download a record attachment | +| `attachments.delete(...)` | Delete a record attachment | + +File content is passed as base64 data. File operations are subject to configured read/write size limits. ## Configuration -You can configure scripting limits using `AbpLowCodeScriptingOptions` in your module's `ConfigureServices` method: +Configure scripting limits with the `LowCode:Scripting` configuration section or `AbpLowCodeScriptingOptions`. ```csharp Configure(options => { - // Script execution limits (null = no limit) options.Script.Timeout = TimeSpan.FromMinutes(1); options.Script.MaxStatements = 100_000; - options.Script.MaxMemoryBytes = 512 * 1024 * 1024; // 512 MB - options.Script.MaxRecursionDepth = 500; + options.Script.MaxMemoryBytes = 128 * 1024 * 1024; + options.Script.MaxRecursionDepth = 64; - // Query API limits (null = no limit) options.Query.MaxLimit = 10_000; options.Query.DefaultLimit = 1000; options.Query.MaxExpressionNodes = 200; - options.Query.MaxExpressionDepth = 20; + options.Query.MaxExpressionDepth = 10; options.Query.MaxArraySize = 500; options.Query.MaxGroupCount = 500; + + options.Capabilities.Endpoint.EnableHttp = false; }); ``` -All limits default to `null` (no limit). Configure them based on your security requirements and expected workload. +Most numeric limits can be set to `null` to explicitly disable that limit. Keep the defaults for untrusted or tenant-authored scripts. + +### Capability Profiles + +The same services are not required in every script type. Capability profiles let you disable services per execution type: + +```json +{ + "LowCode": { + "Scripting": { + "Capabilities": { + "Interception": { + "EnableDb": true, + "EnableHttp": false + }, + "Endpoint": { + "EnableDb": true, + "EnableHttp": true + }, + "EventHandler": { + "EnableDb": true + }, + "BackgroundJob": { + "EnableDb": true + }, + "BackgroundWorker": { + "EnableDb": true + } + } + } + } +} +``` + +Each profile supports flags such as `EnableDb`, `EnableCurrentUser`, `EnableCurrentTenant`, `EnableEmail`, `EnableConfig`, `EnableHttp`, `EnableAuthorization`, `EnableSettings`, `EnableFeatures`, `EnableEvents`, `EnableBackgroundJobs`, `EnableEncryption`, `EnableTextTemplating`, `EnableBlob`, and `EnableFiles`. ## Security @@ -352,22 +531,38 @@ All limits default to `null` (no limit). Configure them based on your security r | Constraint | Default | Configurable | |------------|---------|--------------| -| Script Timeout | No limit | Yes | -| Max Statements | No limit | Yes | -| Memory Limit | No limit | Yes | -| Recursion Depth | No limit | Yes | +| Script Timeout | 30 seconds | Yes | +| Max Statements | 100,000 | Yes | +| Memory Limit | 128 MB | Yes | +| Recursion Depth | 64 | Yes | +| Max Script Length | 500,000 characters | Yes | | CLR Access | Disabled | No | ### Query Security Limits | Limit | Default | Description | |-------|---------|-------------| -| MaxExpressionNodes | No limit | Max AST nodes per expression | -| MaxExpressionDepth | No limit | Max nesting depth | -| MaxLimit (take) | No limit | Max records per query | -| DefaultLimit | No limit | Default if `take()` not specified | -| MaxArraySize (includes) | No limit | Max array size for IN operations | -| MaxGroupCount | No limit | Max groups in GroupBy | +| MaxExpressionNodes | 200 | Max AST nodes per expression | +| MaxExpressionDepth | 10 | Max nesting depth | +| MaxLimit (take) | 10,000 | Max records per query | +| DefaultLimit | 1,000 | Default if `take()` is not specified | +| MaxArraySize (includes) | 500 | Max array size for IN operations | +| MaxGroupCount | 500 | Max groups in GroupBy | + +### Integration Limits + +| Area | Default | +|------|---------| +| HTTP timeout | 30 seconds | +| HTTP response size | 5 MB | +| HTTP requests per execution | 50 | +| HTTP blocked hosts | `localhost` and private IP ranges | +| Email sends per execution | 5 | +| Blob read/write size | 10 MB read, 5 MB write | +| Low-code file read/write size | 10 MB read, 5 MB write | +| Event publishes per execution | 10 | +| Background jobs per execution | 10 | +| Endpoint response body | 1 MB | ### Property Whitelist @@ -380,7 +575,8 @@ All values are parameterized: ```javascript var malicious = "'; DROP TABLE Products;--"; // Safely treated as a literal string — no injection -var result = await db.query('Entity').where(x => x.Name.includes(malicious)).count(); +var query = await db.query('Entity'); +var result = await query.where(x => x.Name.includes(malicious)).count(); ``` ### Blocked Features @@ -395,9 +591,16 @@ if (!context.commandArgs.getValue('Email').includes('@')) { throw new Error('Valid email is required'); } +// User-friendly ABP exception +userFriendlyError('The campaign is not ready to publish.'); + +// Business exception with a code +businessError('Budget is exceeded.', 'Acme.Campaigns:BudgetExceeded'); + // Try-catch for safe execution try { - var products = await db.query('Entity').where(x => x.Price > 0).toList(); + var query = await db.query('Entity'); + var products = await query.where(x => x.Price > 0).toList(); } catch (error) { context.log('Query failed: ' + error.message); } @@ -422,7 +625,8 @@ try { var productId = context.commandArgs.getValue('ProductId'); var quantity = context.commandArgs.getValue('Quantity'); -var product = await db.query('LowCodeDemo.Products.Product') +var productQuery = await db.query('LowCodeDemo.Products.Product'); +var product = await productQuery .where(x => x.Id === productId) .first(); @@ -435,10 +639,12 @@ context.commandArgs.setValue('TotalAmount', product.Price * quantity); ### Sales Dashboard (Custom Endpoint) ```javascript -var totalOrders = await db.query('LowCodeDemo.Orders.Order').count(); -var delivered = await db.query('LowCodeDemo.Orders.Order') +var orderQuery = await db.query('LowCodeDemo.Orders.Order'); + +var totalOrders = await orderQuery.count(); +var delivered = await orderQuery .where(x => x.IsDelivered === true).count(); -var revenue = await db.query('LowCodeDemo.Orders.Order') +var revenue = await orderQuery .where(x => x.IsDelivered === true).sum(x => x.TotalAmount); return ok({ From 1818d6b4d4dbdf79fe8651c44aa8dd8d18d9772d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Fri, 22 May 2026 10:48:01 +0300 Subject: [PATCH 02/14] Document low-code export options --- docs/en/low-code/index.md | 16 +++++++++++++++- docs/en/low-code/react-runtime.md | 24 +++++++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index d9a208b8947..c08ada2e180 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -110,7 +110,13 @@ React low-code filters are type-aware. The runtime shows only operators that mak ## Export -Every dynamic entity page can export filtered data to Excel or CSV. Export requests use the same search, sorting, and filter input as the list endpoint. Server-only fields are excluded and foreign key values are displayed through their configured display property. +Every dynamic entity page can export data to Excel or CSV. Export requests use the current search, sorting, and filters from the runtime view, so a filtered page exports the matching subset instead of the whole entity. + +The React runtime exports visible columns by default. These columns come from the page fields configured in the Low-Code Designer, so changing a page's visible fields also changes the quick export output. Users can open **Export options** to switch to all exportable fields or to export only the current page of rows. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. + +File and image fields are exported as file names by default. Export options can expand those fields into metadata columns or include small files as `data:;base64,...` values. The data URL option is intended for small files only; files over the configured `LowCode:Export:MaxDataUrlFileSizeBytes` limit are skipped with a marker instead of failing the whole export. + +Export downloads require a short-lived, single-use token. The token is bound to the tenant, page, entity, child page, and foreign-access context. Spreadsheet formula-like text values are escaped before writing CSV or Excel cells. | Endpoint | Description | |----------|-------------| @@ -118,6 +124,14 @@ Every dynamic entity page can export filtered data to Excel or CSV. Export reque | `GET /api/low-code/pages/{pageName}/export/excel` | Exports filtered data as Excel | | `GET /api/low-code/pages/{pageName}/export/csv` | Exports filtered data as CSV | +Useful export settings: + +| Setting | Default | Purpose | +|---------|---------|---------| +| `LowCode:Export:MaxRows` | `100000` | Maximum rows in one all-filtered export | +| `LowCode:Export:DownloadTokenLifetimeSeconds` | `30` | Download token lifetime | +| `LowCode:Export:MaxDataUrlFileSizeBytes` | `16384` | Maximum file size for data URL export | + ## Advanced Configuration The designer stores and reads the same model metadata described in the reference pages below. Use these pages when you need source-controlled model files, custom startup wiring, script handlers, or low-level integration details. diff --git a/docs/en/low-code/react-runtime.md b/docs/en/low-code/react-runtime.md index 923f80fb883..cf845a00eee 100644 --- a/docs/en/low-code/react-runtime.md +++ b/docs/en/low-code/react-runtime.md @@ -151,7 +151,21 @@ The URL keeps the existing `lcFilters` query parameter shape. The runtime maps u ## Export -The runtime export button requests a download token and then calls the Excel or CSV export endpoint with the current search, sorting, and filters. +The runtime export button opens a small menu with direct Excel and CSV actions. Direct export uses the current search, sorting, filters, and visible columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row or column scope. + +Available options: + +| Option | Behavior | +|--------|----------| +| Rows: all matching records | Exports all records matching the current search, filters, and sorting | +| Rows: current page | Exports only the current page using the runtime `skipCount` and `maxResultCount` | +| Columns: visible columns | Exports the columns visible in the current page definition | +| Columns: all exportable fields | Exports all non-server-only fields that can appear in generated views | +| File/image: file name | Writes the uploaded file name, or an empty value | +| File/image: metadata columns | Writes file name, content type, size, width, and height columns | +| File/image: data URL | Writes small linked files as `data:;base64,...`; large or unavailable files are written as markers | + +The runtime first requests a short-lived token and then calls the Excel or CSV export endpoint. The token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Text that looks like a spreadsheet formula is escaped in exported cells. | Endpoint | Description | |----------|-------------| @@ -161,6 +175,14 @@ The runtime export button requests a download token and then calls the Excel or Child and foreign-access pages use the matching `/children/{childEntityName}` and `/foreign-access/{sourceEntityName}` page endpoints. +Troubleshooting: + +| Symptom | Likely cause | +|---------|--------------| +| Invalid or expired download token | The token is single-use, expired, or was requested for a different page/context | +| Export row limit exceeded | Narrow the filters, export the current page, or increase `LowCode:Export:MaxRows` | +| File not exported marker | The file was missing, too large for data URL export, malformed, or no longer linked to the exported record | + ## Files and Attachments File and image fields use the page file endpoints. Record-level attachments use attachment endpoints when attachments are enabled for the entity. From 172c9d26c73e3abc13ced24e5951409b082dc9ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Fri, 22 May 2026 11:21:18 +0300 Subject: [PATCH 03/14] Document low-code exportable fields --- docs/en/low-code/designer.md | 3 +++ docs/en/low-code/index.md | 2 +- docs/en/low-code/model-json.md | 13 +++++++++++-- docs/en/low-code/react-runtime.md | 8 ++++---- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index 0ac48b6a2f6..fcaf31940c1 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -65,6 +65,7 @@ Pages can define data grid, kanban, calendar, gallery, standalone form, and dash * Entity * Create and edit forms * Visible grid/card fields +* Exportable fields for Excel and CSV * Field labels and column widths * Default sorting * Filter fields and defaults @@ -75,6 +76,8 @@ Kanban pages add `groupByProperty`, calendar pages add date/time properties, gal Pages are exposed in React under `/dynamic/` and can also appear as dynamic menu items. +The **View Fields** section has separate **Show** and **Export** choices. Use **Show** for fields that should be rendered in the runtime view. Use **Export** for fields that may be included in Excel or CSV output. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. + ## Forms Use **Forms** to define create and edit experiences. diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index c08ada2e180..4a0b6f05c25 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -112,7 +112,7 @@ React low-code filters are type-aware. The runtime shows only operators that mak Every dynamic entity page can export data to Excel or CSV. Export requests use the current search, sorting, and filters from the runtime view, so a filtered page exports the matching subset instead of the whole entity. -The React runtime exports visible columns by default. These columns come from the page fields configured in the Low-Code Designer, so changing a page's visible fields also changes the quick export output. Users can open **Export options** to switch to all exportable fields or to export only the current page of rows. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. +The React runtime exports visible exportable columns by default. These columns come from the page fields configured in the Low-Code Designer. A field can be visible but not exportable, or hidden but still available in the **All exportable fields** option. Use this when a page should display operational data that should not leave the system through Excel or CSV. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. File and image fields are exported as file names by default. Export options can expand those fields into metadata columns or include small files as `data:;base64,...` values. The data URL option is intended for small files only; files over the configured `LowCode:Export:MaxDataUrlFileSizeBytes` limit are skipped with a marker instead of failing the whole export. diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 28662cde7ed..5c7f1b6ada9 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -242,7 +242,7 @@ Pages create runtime routes and menu entries. They also choose how entity data i "columns": [ { "propertyName": "Name", "order": 0 }, { "propertyName": "Status", "order": 1 }, - { "propertyName": "Budget", "order": 2 } + { "propertyName": "Budget", "order": 2, "exportable": false } ], "filters": [ { "propertyName": "Name", "control": "text", "defaultOperator": "contains" }, @@ -253,6 +253,15 @@ Pages create runtime routes and menu entries. They also choose how entity data i } ``` +Page columns support two independent flags: + +| Field | Default | Purpose | +|-------|---------|---------| +| `visible` | `true` | Renders the field in the React page view | +| `exportable` | `true` | Allows the field to be included in Excel and CSV export | + +If `columns` is present, export uses this list as the page-level export policy. `exportable: false` prevents the field from being exported even if a caller sends the field name manually. Server-only entity properties are never exportable. + | Page type | Required fields | Purpose | |-----------|-----------------|---------| | `dataGrid` | `entityName` | Searchable, sortable CRUD grid | @@ -483,7 +492,7 @@ Background workers require either `period` in milliseconds or `cronExpression`. "columns": [ { "propertyName": "Name", "order": 0 }, { "propertyName": "Status", "order": 1 }, - { "propertyName": "Budget", "order": 2 } + { "propertyName": "Budget", "order": 2, "exportable": false } ], "filters": [ { "propertyName": "Name", "control": "text", "defaultOperator": "contains" }, diff --git a/docs/en/low-code/react-runtime.md b/docs/en/low-code/react-runtime.md index cf845a00eee..c809c89d7db 100644 --- a/docs/en/low-code/react-runtime.md +++ b/docs/en/low-code/react-runtime.md @@ -151,7 +151,7 @@ The URL keeps the existing `lcFilters` query parameter shape. The runtime maps u ## Export -The runtime export button opens a small menu with direct Excel and CSV actions. Direct export uses the current search, sorting, filters, and visible columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row or column scope. +The runtime export button opens a small menu with direct Excel and CSV actions. Direct export uses the current search, sorting, filters, and visible exportable columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row or column scope. Available options: @@ -159,13 +159,13 @@ Available options: |--------|----------| | Rows: all matching records | Exports all records matching the current search, filters, and sorting | | Rows: current page | Exports only the current page using the runtime `skipCount` and `maxResultCount` | -| Columns: visible columns | Exports the columns visible in the current page definition | -| Columns: all exportable fields | Exports all non-server-only fields that can appear in generated views | +| Columns: visible exportable columns | Exports columns that are both visible and exportable in the current page definition | +| Columns: all exportable fields | Exports page fields marked exportable in the Low-Code Designer, including fields that are hidden from the grid | | File/image: file name | Writes the uploaded file name, or an empty value | | File/image: metadata columns | Writes file name, content type, size, width, and height columns | | File/image: data URL | Writes small linked files as `data:;base64,...`; large or unavailable files are written as markers | -The runtime first requests a short-lived token and then calls the Excel or CSV export endpoint. The token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Text that looks like a spreadsheet formula is escaped in exported cells. +The runtime first requests a short-lived token and then calls the Excel or CSV export endpoint. The token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Text that looks like a spreadsheet formula is escaped in exported headers and cells. If a caller manually sends a non-exportable field name, the backend rejects the request. | Endpoint | Description | |----------|-------------| From c44bafb1f9e926b4d437aed296b21706a6ed6a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Fri, 22 May 2026 14:15:56 +0300 Subject: [PATCH 04/14] Update low-code export documentation --- docs/en/low-code/designer.md | 8 ++++++-- docs/en/low-code/index.md | 16 +++++++++++----- docs/en/low-code/model-json.md | 13 ++++++++++++- docs/en/low-code/react-runtime.md | 14 ++++++++++---- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index fcaf31940c1..341b3344946 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -65,10 +65,12 @@ Pages can define data grid, kanban, calendar, gallery, standalone form, and dash * Entity * Create and edit forms * Visible grid/card fields -* Exportable fields for Excel and CSV +* Exportable fields for Excel, CSV, and file bundles * Field labels and column widths * Default sorting * Filter fields and defaults +* Default file/image export output +* Whether file bundle ZIP export is allowed Kanban pages add `groupByProperty`, calendar pages add date/time properties, gallery pages can use an image property, form pages reference a named form, and dashboard pages define rows and visualizations. @@ -76,7 +78,9 @@ Kanban pages add `groupByProperty`, calendar pages add date/time properties, gal Pages are exposed in React under `/dynamic/` and can also appear as dynamic menu items. -The **View Fields** section has separate **Show** and **Export** choices. Use **Show** for fields that should be rendered in the runtime view. Use **Export** for fields that may be included in Excel or CSV output. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. +The **View Fields** section has separate **Show** and **Export** choices. Use **Show** for fields that should be rendered in the runtime view. Use **Export** for fields that may be included in Excel, CSV, or file bundle output. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. + +The **Export Settings** section controls page-level file behavior. **Default File/Image Output** selects whether spreadsheet export writes file names, metadata columns, or temporary download-link columns by default. **Allow file bundle export** controls whether the runtime can show **Files (.zip)** for this page. Disable it when files should not leave the system as a bulk download even if individual fields remain visible. ## Forms diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index 4a0b6f05c25..3f239388e32 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -22,7 +22,7 @@ Use the designer to model entities, enums, properties, relations, pages, forms, * React data grid, kanban, calendar, gallery, form, and dashboard pages * Create and edit forms * Advanced filters -* Excel and CSV export +* Excel, CSV, and file bundle export No DTO, repository, application service, controller, or React CRUD page is required for the standard flow. @@ -110,19 +110,23 @@ React low-code filters are type-aware. The runtime shows only operators that mak ## Export -Every dynamic entity page can export data to Excel or CSV. Export requests use the current search, sorting, and filters from the runtime view, so a filtered page exports the matching subset instead of the whole entity. +Every dynamic entity page can export data to Excel or CSV. Pages with file or image fields can also export a file bundle as a ZIP. Export requests use the current search, sorting, and filters from the runtime view, so a filtered page exports the matching subset instead of the whole entity. The React runtime exports visible exportable columns by default. These columns come from the page fields configured in the Low-Code Designer. A field can be visible but not exportable, or hidden but still available in the **All exportable fields** option. Use this when a page should display operational data that should not leave the system through Excel or CSV. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. -File and image fields are exported as file names by default. Export options can expand those fields into metadata columns or include small files as `data:;base64,...` values. The data URL option is intended for small files only; files over the configured `LowCode:Export:MaxDataUrlFileSizeBytes` limit are skipped with a marker instead of failing the whole export. +File and image fields are exported as file names by default. Export options can expand those fields into metadata columns or temporary download-link columns. Download-link columns include file name, URL, expiry, content type, size, dimensions, and status. The links are short-lived and should be treated like signed download links, not permanent public URLs. -Export downloads require a short-lived, single-use token. The token is bound to the tenant, page, entity, child page, and foreign-access context. Spreadsheet formula-like text values are escaped before writing CSV or Excel cells. +Use **Files (.zip)** when users need the actual uploaded files. The ZIP contains `manifest.csv` and files under `files/{recordId}/{fieldName}/{safeFileName}`. The manifest records missing, malformed, unlinked, and limit-skipped files instead of failing the whole export. + +Spreadsheet and ZIP exports require a short-lived, single-use download token. The token is bound to the tenant, page, entity, child page, and foreign-access context. File download links use separate short-lived tokens bound to the exported file value. Spreadsheet formula-like text values are escaped before writing CSV or Excel headers and cells. | Endpoint | Description | |----------|-------------| | `GET /api/low-code/pages/{pageName}/download-token` | Gets a short-lived download token | | `GET /api/low-code/pages/{pageName}/export/excel` | Exports filtered data as Excel | | `GET /api/low-code/pages/{pageName}/export/csv` | Exports filtered data as CSV | +| `GET /api/low-code/pages/{pageName}/export/files` | Exports selected file/image fields as a ZIP bundle | +| `GET /api/low-code/pages/export/files/{token}` | Downloads one temporary file link created by spreadsheet export | Useful export settings: @@ -130,7 +134,9 @@ Useful export settings: |---------|---------|---------| | `LowCode:Export:MaxRows` | `100000` | Maximum rows in one all-filtered export | | `LowCode:Export:DownloadTokenLifetimeSeconds` | `30` | Download token lifetime | -| `LowCode:Export:MaxDataUrlFileSizeBytes` | `16384` | Maximum file size for data URL export | +| `LowCode:Export:FileLinkTokenLifetimeSeconds` | `900` | Temporary file link lifetime | +| `LowCode:Export:MaxFileBundleFiles` | `1000` | Maximum files in one ZIP export | +| `LowCode:Export:MaxFileBundleBytes` | `268435456` | Maximum total file bytes in one ZIP export | ## Advanced Configuration diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 5c7f1b6ada9..2fe241b70cb 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -239,6 +239,8 @@ Pages create runtime routes and menu entries. They also choose how entity data i "type": "dataGrid", "entityName": "Acme.Campaigns.Campaign", "group": "marketing", + "defaultFileExportMode": 0, + "allowFileBundleExport": true, "columns": [ { "propertyName": "Name", "order": 0 }, { "propertyName": "Status", "order": 1 }, @@ -258,10 +260,19 @@ Page columns support two independent flags: | Field | Default | Purpose | |-------|---------|---------| | `visible` | `true` | Renders the field in the React page view | -| `exportable` | `true` | Allows the field to be included in Excel and CSV export | +| `exportable` | `true` | Allows the field to be included in Excel, CSV, and file bundle export | If `columns` is present, export uses this list as the page-level export policy. `exportable: false` prevents the field from being exported even if a caller sends the field name manually. Server-only entity properties are never exportable. +Page export settings: + +| Field | Default | Purpose | +|-------|---------|---------| +| `defaultFileExportMode` | `0` | Default spreadsheet output for file/image fields. `0` = file name, `1` = metadata columns, `2` = temporary download-link columns | +| `allowFileBundleExport` | `true` | Allows **Files (.zip)** export for exportable file/image columns on the page | + +ZIP file bundle export only includes selected page columns that are file or image fields and are exportable. The ZIP contains `manifest.csv` plus files under `files/{recordId}/{fieldName}/{safeFileName}`. + | Page type | Required fields | Purpose | |-----------|-----------------|---------| | `dataGrid` | `entityName` | Searchable, sortable CRUD grid | diff --git a/docs/en/low-code/react-runtime.md b/docs/en/low-code/react-runtime.md index c809c89d7db..40c7822f72e 100644 --- a/docs/en/low-code/react-runtime.md +++ b/docs/en/low-code/react-runtime.md @@ -151,7 +151,7 @@ The URL keeps the existing `lcFilters` query parameter shape. The runtime maps u ## Export -The runtime export button opens a small menu with direct Excel and CSV actions. Direct export uses the current search, sorting, filters, and visible exportable columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row or column scope. +The runtime export button opens a small menu with direct Excel and CSV actions. If the selected page has exportable file or image fields, the menu also shows **Files (.zip)**. Direct export uses the current search, sorting, filters, and visible exportable columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row, column, or file output scope. Available options: @@ -163,15 +163,19 @@ Available options: | Columns: all exportable fields | Exports page fields marked exportable in the Low-Code Designer, including fields that are hidden from the grid | | File/image: file name | Writes the uploaded file name, or an empty value | | File/image: metadata columns | Writes file name, content type, size, width, and height columns | -| File/image: data URL | Writes small linked files as `data:;base64,...`; large or unavailable files are written as markers | +| File/image: download links | Writes file name, temporary download URL, link expiry, content type, size, width, height, and status columns | -The runtime first requests a short-lived token and then calls the Excel or CSV export endpoint. The token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Text that looks like a spreadsheet formula is escaped in exported headers and cells. If a caller manually sends a non-exportable field name, the backend rejects the request. +Spreadsheet export stays tabular. It does not embed file bytes in cells. Use download-link columns when spreadsheet readers need a controlled way to fetch individual files, or use **Files (.zip)** when they need the actual file set. ZIP export contains `manifest.csv` and files under `files/{recordId}/{fieldName}/{safeFileName}`. The manifest reports missing, malformed, unlinked, skipped, and exported files. + +The runtime first requests a short-lived token and then calls the Excel, CSV, or ZIP export endpoint. The export token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Temporary file links use separate short-lived tokens bound to the exported record field and blob. Text that looks like a spreadsheet formula is escaped in exported headers and cells. If a caller manually sends a non-exportable field name, the backend rejects the request. | Endpoint | Description | |----------|-------------| | `GET /api/low-code/pages/{pageName}/download-token` | Gets a short-lived token | | `GET /api/low-code/pages/{pageName}/export/excel` | Downloads Excel | | `GET /api/low-code/pages/{pageName}/export/csv` | Downloads CSV | +| `GET /api/low-code/pages/{pageName}/export/files` | Downloads a ZIP with selected file/image fields | +| `GET /api/low-code/pages/export/files/{token}` | Downloads one temporary file link from spreadsheet link mode | Child and foreign-access pages use the matching `/children/{childEntityName}` and `/foreign-access/{sourceEntityName}` page endpoints. @@ -181,7 +185,9 @@ Troubleshooting: |---------|--------------| | Invalid or expired download token | The token is single-use, expired, or was requested for a different page/context | | Export row limit exceeded | Narrow the filters, export the current page, or increase `LowCode:Export:MaxRows` | -| File not exported marker | The file was missing, too large for data URL export, malformed, or no longer linked to the exported record | +| File link expired | Re-run export; temporary file links are intentionally short-lived | +| File not exported marker | The file was missing, malformed, no longer linked to the exported record, or skipped by ZIP file count/size limits | +| ZIP bundle export disabled | Enable file bundle export for the page in the Low-Code Designer | ## Files and Attachments From edbf3cbe8da7fbe08f31e2da16d2c4f769e74b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Fri, 22 May 2026 15:02:38 +0300 Subject: [PATCH 05/14] Update low-code export settings docs --- docs/en/low-code/designer.md | 8 ++++---- docs/en/low-code/index.md | 4 ++-- docs/en/low-code/model-json.md | 2 +- docs/en/low-code/react-runtime.md | 4 +++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index 341b3344946..117899d3746 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -65,11 +65,11 @@ Pages can define data grid, kanban, calendar, gallery, standalone form, and dash * Entity * Create and edit forms * Visible grid/card fields -* Exportable fields for Excel, CSV, and file bundles +* Export fields for Excel, CSV, download-link columns, and file bundles * Field labels and column widths * Default sorting * Filter fields and defaults -* Default file/image export output +* File/image export defaults when the page has exportable file fields * Whether file bundle ZIP export is allowed Kanban pages add `groupByProperty`, calendar pages add date/time properties, gallery pages can use an image property, form pages reference a named form, and dashboard pages define rows and visualizations. @@ -78,9 +78,9 @@ Kanban pages add `groupByProperty`, calendar pages add date/time properties, gal Pages are exposed in React under `/dynamic/` and can also appear as dynamic menu items. -The **View Fields** section has separate **Show** and **Export** choices. Use **Show** for fields that should be rendered in the runtime view. Use **Export** for fields that may be included in Excel, CSV, or file bundle output. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. +The **View Fields** section controls what users see in the runtime view. The separate **Export Fields** section controls what may leave the page through Excel, CSV, download-link columns, or file bundles. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. Use the bulk actions to copy visible fields into the export policy, enable all fields, or disable all fields. -The **Export Settings** section controls page-level file behavior. **Default File/Image Output** selects whether spreadsheet export writes file names, metadata columns, or temporary download-link columns by default. **Allow file bundle export** controls whether the runtime can show **Files (.zip)** for this page. Disable it when files should not leave the system as a bulk download even if individual fields remain visible. +The **File Export Settings** section appears only when the page has file or image fields. **Default File/Image Output** selects whether spreadsheet export writes file names, metadata columns, or temporary download-link columns by default. **Allow file bundle export** controls whether the runtime can show **Files (.zip)** for this page. If all file/image fields are disabled in **Export Fields**, the file output controls stay hidden until at least one file/image field is exportable. ## Forms diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index 3f239388e32..b45d3ce7834 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -112,11 +112,11 @@ React low-code filters are type-aware. The runtime shows only operators that mak Every dynamic entity page can export data to Excel or CSV. Pages with file or image fields can also export a file bundle as a ZIP. Export requests use the current search, sorting, and filters from the runtime view, so a filtered page exports the matching subset instead of the whole entity. -The React runtime exports visible exportable columns by default. These columns come from the page fields configured in the Low-Code Designer. A field can be visible but not exportable, or hidden but still available in the **All exportable fields** option. Use this when a page should display operational data that should not leave the system through Excel or CSV. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. +The React runtime exports visible exportable columns by default. These columns come from the page-level **Export Fields** settings in the Low-Code Designer. A field can be visible but not exportable, or hidden but still available in the **All exportable fields** option. Use this when a page should display operational data that should not leave the system through Excel or CSV. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. File and image fields are exported as file names by default. Export options can expand those fields into metadata columns or temporary download-link columns. Download-link columns include file name, URL, expiry, content type, size, dimensions, and status. The links are short-lived and should be treated like signed download links, not permanent public URLs. -Use **Files (.zip)** when users need the actual uploaded files. The ZIP contains `manifest.csv` and files under `files/{recordId}/{fieldName}/{safeFileName}`. The manifest records missing, malformed, unlinked, and limit-skipped files instead of failing the whole export. +Use **Files (.zip)** when users need the actual uploaded files. The action appears only when the Designer allows file bundle export and at least one selected file/image field is exportable. The ZIP contains `manifest.csv` and files under `files/{recordId}/{fieldName}/{safeFileName}`. The manifest records missing, malformed, unlinked, and limit-skipped files instead of failing the whole export. Spreadsheet and ZIP exports require a short-lived, single-use download token. The token is bound to the tenant, page, entity, child page, and foreign-access context. File download links use separate short-lived tokens bound to the exported file value. Spreadsheet formula-like text values are escaped before writing CSV or Excel headers and cells. diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 2fe241b70cb..56630b6ab87 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -260,7 +260,7 @@ Page columns support two independent flags: | Field | Default | Purpose | |-------|---------|---------| | `visible` | `true` | Renders the field in the React page view | -| `exportable` | `true` | Allows the field to be included in Excel, CSV, and file bundle export | +| `exportable` | `true` | Page-level export flag managed by **Export Fields**. Allows the field to be included in Excel, CSV, download-link columns, and file bundle export | If `columns` is present, export uses this list as the page-level export policy. `exportable: false` prevents the field from being exported even if a caller sends the field name manually. Server-only entity properties are never exportable. diff --git a/docs/en/low-code/react-runtime.md b/docs/en/low-code/react-runtime.md index 40c7822f72e..b8fe978c796 100644 --- a/docs/en/low-code/react-runtime.md +++ b/docs/en/low-code/react-runtime.md @@ -151,7 +151,7 @@ The URL keeps the existing `lcFilters` query parameter shape. The runtime maps u ## Export -The runtime export button opens a small menu with direct Excel and CSV actions. If the selected page has exportable file or image fields, the menu also shows **Files (.zip)**. Direct export uses the current search, sorting, filters, and visible exportable columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row, column, or file output scope. +The runtime export button opens a small menu with direct Excel and CSV actions. If the selected page has exportable file or image fields and bundle export is allowed in the Designer, the menu also shows **Files (.zip)**. Direct export uses the current search, sorting, filters, and visible exportable columns from the page definition maintained in the Low-Code Designer. Use **Export options** when users need a different row, column, or file output scope. Available options: @@ -167,6 +167,8 @@ Available options: Spreadsheet export stays tabular. It does not embed file bytes in cells. Use download-link columns when spreadsheet readers need a controlled way to fetch individual files, or use **Files (.zip)** when they need the actual file set. ZIP export contains `manifest.csv` and files under `files/{recordId}/{fieldName}/{safeFileName}`. The manifest reports missing, malformed, unlinked, skipped, and exported files. +The columns available in the runtime export dialog are controlled by the page-level **Export Fields** section in the Low-Code Designer. The runtime cannot use the dialog to bypass non-exportable fields. + The runtime first requests a short-lived token and then calls the Excel, CSV, or ZIP export endpoint. The export token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Temporary file links use separate short-lived tokens bound to the exported record field and blob. Text that looks like a spreadsheet formula is escaped in exported headers and cells. If a caller manually sends a non-exportable field name, the backend rejects the request. | Endpoint | Description | From 7a0062d27ea5f705116a80b299c7d65fe65d12f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Fri, 22 May 2026 15:24:22 +0300 Subject: [PATCH 06/14] Document low-code export field ordering --- docs/en/low-code/designer.md | 2 +- docs/en/low-code/index.md | 2 +- docs/en/low-code/model-json.md | 15 ++++++++------- docs/en/low-code/react-runtime.md | 6 +++--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index 117899d3746..c67f6832285 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -78,7 +78,7 @@ Kanban pages add `groupByProperty`, calendar pages add date/time properties, gal Pages are exposed in React under `/dynamic/` and can also appear as dynamic menu items. -The **View Fields** section controls what users see in the runtime view. The separate **Export Fields** section controls what may leave the page through Excel, CSV, download-link columns, or file bundles. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. Use the bulk actions to copy visible fields into the export policy, enable all fields, or disable all fields. +The **View Fields** section controls what users see in the runtime view. The separate **Export Fields** section controls what may leave the page through Excel, CSV, download-link columns, or file bundles. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. Export fields also have their own order, so the exported spreadsheet or file manifest can follow a different sequence than the runtime view. Use the bulk actions to copy visible fields into the export policy, enable all fields, or disable all fields. The **File Export Settings** section appears only when the page has file or image fields. **Default File/Image Output** selects whether spreadsheet export writes file names, metadata columns, or temporary download-link columns by default. **Allow file bundle export** controls whether the runtime can show **Files (.zip)** for this page. If all file/image fields are disabled in **Export Fields**, the file output controls stay hidden until at least one file/image field is exportable. diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index b45d3ce7834..b25b6060a19 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -112,7 +112,7 @@ React low-code filters are type-aware. The runtime shows only operators that mak Every dynamic entity page can export data to Excel or CSV. Pages with file or image fields can also export a file bundle as a ZIP. Export requests use the current search, sorting, and filters from the runtime view, so a filtered page exports the matching subset instead of the whole entity. -The React runtime exports visible exportable columns by default. These columns come from the page-level **Export Fields** settings in the Low-Code Designer. A field can be visible but not exportable, or hidden but still available in the **All exportable fields** option. Use this when a page should display operational data that should not leave the system through Excel or CSV. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. +The React runtime exports visible exportable columns by default. These columns and their default order come from the page-level **Export Fields** settings in the Low-Code Designer. A field can be visible but not exportable, or hidden but still available in the **All exportable fields** option. Use this when a page should display operational data that should not leave the system through Excel or CSV. Server-only fields are always excluded, and foreign key values are displayed through their configured display property. File and image fields are exported as file names by default. Export options can expand those fields into metadata columns or temporary download-link columns. Download-link columns include file name, URL, expiry, content type, size, dimensions, and status. The links are short-lived and should be treated like signed download links, not permanent public URLs. diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 56630b6ab87..5549d5ddb2b 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -242,9 +242,9 @@ Pages create runtime routes and menu entries. They also choose how entity data i "defaultFileExportMode": 0, "allowFileBundleExport": true, "columns": [ - { "propertyName": "Name", "order": 0 }, - { "propertyName": "Status", "order": 1 }, - { "propertyName": "Budget", "order": 2, "exportable": false } + { "propertyName": "Name", "order": 0, "exportOrder": 0 }, + { "propertyName": "Status", "order": 1, "exportOrder": 1 }, + { "propertyName": "Budget", "order": 2, "exportOrder": 2, "exportable": false } ], "filters": [ { "propertyName": "Name", "control": "text", "defaultOperator": "contains" }, @@ -260,9 +260,10 @@ Page columns support two independent flags: | Field | Default | Purpose | |-------|---------|---------| | `visible` | `true` | Renders the field in the React page view | +| `exportOrder` | `order` | Optional page-level export order. Lower values are exported first | | `exportable` | `true` | Page-level export flag managed by **Export Fields**. Allows the field to be included in Excel, CSV, download-link columns, and file bundle export | -If `columns` is present, export uses this list as the page-level export policy. `exportable: false` prevents the field from being exported even if a caller sends the field name manually. Server-only entity properties are never exportable. +If `columns` is present, export uses this list as the page-level export policy. `exportable: false` prevents the field from being exported even if a caller sends the field name manually. `exportOrder` controls default export order without changing display order. Server-only entity properties are never exportable. Page export settings: @@ -501,9 +502,9 @@ Background workers require either `period` in milliseconds or `cronExpression`. "entityName": "Acme.Campaigns.Campaign", "group": "marketing", "columns": [ - { "propertyName": "Name", "order": 0 }, - { "propertyName": "Status", "order": 1 }, - { "propertyName": "Budget", "order": 2, "exportable": false } + { "propertyName": "Name", "order": 0, "exportOrder": 0 }, + { "propertyName": "Status", "order": 1, "exportOrder": 1 }, + { "propertyName": "Budget", "order": 2, "exportOrder": 2, "exportable": false } ], "filters": [ { "propertyName": "Name", "control": "text", "defaultOperator": "contains" }, diff --git a/docs/en/low-code/react-runtime.md b/docs/en/low-code/react-runtime.md index b8fe978c796..01e0e37ad9d 100644 --- a/docs/en/low-code/react-runtime.md +++ b/docs/en/low-code/react-runtime.md @@ -159,15 +159,15 @@ Available options: |--------|----------| | Rows: all matching records | Exports all records matching the current search, filters, and sorting | | Rows: current page | Exports only the current page using the runtime `skipCount` and `maxResultCount` | -| Columns: visible exportable columns | Exports columns that are both visible and exportable in the current page definition | -| Columns: all exportable fields | Exports page fields marked exportable in the Low-Code Designer, including fields that are hidden from the grid | +| Columns: visible exportable columns | Exports columns that are both visible and exportable in the current page definition, ordered by Designer export order | +| Columns: all exportable fields | Exports page fields marked exportable in the Low-Code Designer, including fields that are hidden from the grid, ordered by Designer export order | | File/image: file name | Writes the uploaded file name, or an empty value | | File/image: metadata columns | Writes file name, content type, size, width, and height columns | | File/image: download links | Writes file name, temporary download URL, link expiry, content type, size, width, height, and status columns | Spreadsheet export stays tabular. It does not embed file bytes in cells. Use download-link columns when spreadsheet readers need a controlled way to fetch individual files, or use **Files (.zip)** when they need the actual file set. ZIP export contains `manifest.csv` and files under `files/{recordId}/{fieldName}/{safeFileName}`. The manifest reports missing, malformed, unlinked, skipped, and exported files. -The columns available in the runtime export dialog are controlled by the page-level **Export Fields** section in the Low-Code Designer. The runtime cannot use the dialog to bypass non-exportable fields. +The columns available in the runtime export dialog and their default order are controlled by the page-level **Export Fields** section in the Low-Code Designer. The runtime cannot use the dialog to bypass non-exportable fields. The runtime first requests a short-lived token and then calls the Excel, CSV, or ZIP export endpoint. The export token is single-use and is bound to the current page, entity, tenant, child page, and foreign-access context. Temporary file links use separate short-lived tokens bound to the exported record field and blob. Text that looks like a spreadsheet formula is escaped in exported headers and cells. If a caller manually sends a non-exportable field name, the backend rejects the request. From 3478404c99c7cb179e5693634a15afcc9a833006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Fri, 22 May 2026 15:35:37 +0300 Subject: [PATCH 07/14] Document low-code export settings defaults --- docs/en/low-code/designer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index c67f6832285..cee9fa10588 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -78,9 +78,9 @@ Kanban pages add `groupByProperty`, calendar pages add date/time properties, gal Pages are exposed in React under `/dynamic/` and can also appear as dynamic menu items. -The **View Fields** section controls what users see in the runtime view. The separate **Export Fields** section controls what may leave the page through Excel, CSV, download-link columns, or file bundles. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. Export fields also have their own order, so the exported spreadsheet or file manifest can follow a different sequence than the runtime view. Use the bulk actions to copy visible fields into the export policy, enable all fields, or disable all fields. +The **View Fields** section controls what users see in the runtime view. The separate **Export Fields** section controls what may leave the page through Excel, CSV, download-link columns, or file bundles. A visible field can be excluded from export, and an exportable field can be hidden from the page but still available through **Export options > All exportable fields**. Use the bulk actions to copy visible fields into the export policy, enable all fields, or disable all fields. -The **File Export Settings** section appears only when the page has file or image fields. **Default File/Image Output** selects whether spreadsheet export writes file names, metadata columns, or temporary download-link columns by default. **Allow file bundle export** controls whether the runtime can show **Files (.zip)** for this page. If all file/image fields are disabled in **Export Fields**, the file output controls stay hidden until at least one file/image field is exportable. +Open **Export Fields > More settings** only when you need custom export details. If **Use default export settings** is enabled, export uses display labels, the view field order, file name output, and file bundle export enabled. Turn it off to customize export labels, assign a separate export order, choose **Default File/Image Output**, or disable **Allow file bundle export**. File/image output controls appear only when the page has file or image fields, and they stay inactive until at least one file/image field is exportable. ## Forms From 02686b92785a1987088f11d27fccb2888ee0fde8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Mon, 25 May 2026 13:39:42 +0300 Subject: [PATCH 08/14] Update low-code scripting docs --- docs/en/low-code/custom-endpoints.md | 4 ++-- docs/en/low-code/interceptors.md | 8 +++++++- docs/en/low-code/scripting-api.md | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/en/low-code/custom-endpoints.md b/docs/en/low-code/custom-endpoints.md index 31bc72ff306..d9f3ad09206 100644 --- a/docs/en/low-code/custom-endpoints.md +++ b/docs/en/low-code/custom-endpoints.md @@ -43,7 +43,7 @@ Custom endpoints are defined in `model.json` or through the Low-Code Designer. E | `requireAuthentication` | bool | `true` | Whether the caller must be authenticated | | `requiredPermissions` | string[] | null | Permission names required to call the endpoint | -`requiredPermissions` is checked only when `requireAuthentication` is true. Keep endpoints authenticated by default and use `requireAuthentication: false` only for intentionally public APIs. +Permission checks require an authorized user even when `requireAuthentication` is set to `false`. Keep endpoints authenticated by default and use `requireAuthentication: false` only for intentionally public APIs without `requiredPermissions`. ## Route and Request Data @@ -194,7 +194,7 @@ Default blocked headers also include hop-by-hop headers such as `Connection`, `T ## Security Notes * Prefer authenticated endpoints with explicit `requiredPermissions`. -* Treat public endpoints as public API surface. +* Treat endpoints with `requireAuthentication: false` and no `requiredPermissions` as public API surface. * Keep endpoint scripts small and focused. * Validate route, query, and body input before using it. * Use `take()` for list queries. diff --git a/docs/en/low-code/interceptors.md b/docs/en/low-code/interceptors.md index 048e8c61689..97c401e2bc3 100644 --- a/docs/en/low-code/interceptors.md +++ b/docs/en/low-code/interceptors.md @@ -142,7 +142,13 @@ Inside interceptor scripts, you have access to: |--------|-------------| | `isAvailable` | Whether the email sender is configured and available | | `sendAsync(to, subject, body)` | Send a plain-text email | +| `sendAsync(from, to, subject, body)` | Send a plain-text email with an explicit sender | | `sendHtmlAsync(to, subject, htmlBody)` | Send an HTML email | +| `sendHtmlAsync(from, to, subject, htmlBody)` | Send an HTML email with an explicit sender | +| `queueAsync(to, subject, body)` | Queue a plain-text email | +| `queueAsync(from, to, subject, body)` | Queue a plain-text email with an explicit sender | +| `queueHtmlAsync(to, subject, htmlBody)` | Queue an HTML email | +| `queueHtmlAsync(from, to, subject, htmlBody)` | Queue an HTML email with an explicit sender | ### Logging @@ -158,7 +164,7 @@ Inside interceptor scripts, you have access to: Full access to the [Scripting API](scripting-api.md) for querying and mutating data. -Interceptors can also use common scripting services such as `user`, `tenant`, `auth`, `settings`, `features`, `events`, `jobs`, `files`, `images`, and `attachments` when they are enabled by the scripting capability profile. +Interceptors can also use common scripting services such as `user`, `tenant`, `auth`, `settings`, `features`, `config`, `http`, `events`, `jobs`, `blob`, `encryption`, `textTemplating`, `files`, `images`, and `attachments` when they are enabled by the scripting capability profile. ### `globalError` diff --git a/docs/en/low-code/scripting-api.md b/docs/en/low-code/scripting-api.md index 422cbeb6c17..c50830f1d33 100644 --- a/docs/en/low-code/scripting-api.md +++ b/docs/en/low-code/scripting-api.md @@ -217,7 +217,7 @@ All aggregations execute as SQL statements: | `min(x => x.Property)` | `SELECT MIN(...)` | `Promise` | | `max(x => x.Property)` | `SELECT MAX(...)` | `Promise` | | `distinct(x => x.Property)` | `SELECT DISTINCT ...` | `Promise` | -| `groupBy(x => x.Property)` | `GROUP BY ...` | `Promise` | +| `groupBy(x => x.Property)` | `GROUP BY ...` | `QueryBuilder` | ```javascript var productQuery = await db.query('Product'); @@ -275,7 +275,7 @@ var grouped = await productQuery | Limit | Default | Description | |-------|---------|-------------| -| `MaxGroupCount` | No limit | Maximum groups | +| `MaxGroupCount` | 500 | Maximum groups; set to `null` to disable this limit | ## Math Functions From bc8d87b0b2244705e8b11ba7da171d7c80c16211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Tue, 26 May 2026 11:37:49 +0300 Subject: [PATCH 09/14] Add Script Actions docs and dry-run details Add a new Script Actions reference (docs/en/low-code/script-actions.md) and wire it into the docs navigation. Update low-code docs (custom-endpoints.md, designer.md, index.md, model-json.md, scripting-api.md) to document the Designer code editor, autocomplete (including fileFields/imageFields and enum registries), action types (event handlers, background jobs, workers), and the built-in Test JavaScript dry-run behavior. The dry-run tables describe captured side effects, HTTP mock behavior, and rollback semantics to help authors safely test scripts in the Designer. --- docs/en/docs-nav.json | 4 + docs/en/low-code/custom-endpoints.md | 30 ++++ docs/en/low-code/designer.md | 4 + docs/en/low-code/index.md | 3 +- docs/en/low-code/model-json.md | 3 +- docs/en/low-code/script-actions.md | 259 +++++++++++++++++++++++++++ docs/en/low-code/scripting-api.md | 129 ++++++++++++- 7 files changed, 429 insertions(+), 3 deletions(-) create mode 100644 docs/en/low-code/script-actions.md diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index d6406a4db03..8b1336c8d21 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -486,6 +486,10 @@ "text": "Custom Endpoints", "path": "low-code/custom-endpoints.md" }, + { + "text": "Script Actions", + "path": "low-code/script-actions.md" + }, { "text": "Scripting API", "path": "low-code/scripting-api.md" diff --git a/docs/en/low-code/custom-endpoints.md b/docs/en/low-code/custom-endpoints.md index d9f3ad09206..23db583c3b4 100644 --- a/docs/en/low-code/custom-endpoints.md +++ b/docs/en/low-code/custom-endpoints.md @@ -161,6 +161,35 @@ Custom endpoint scripts use the same common [Scripting API](scripting-api.md) se } ``` +## Testing Endpoint Scripts + +The Low-Code Designer endpoint editor includes **Test JavaScript**. Use it to run the current editor content without saving it. + +The dry-run request editor lets you provide: + +* HTTP method +* Request path +* Route values +* Query values +* Headers +* Body JSON +* Outbound HTTP mocks + +Dry-run execution evaluates the endpoint descriptor, request context, script, authentication metadata, and required permissions against the current user. It returns the same response shape that a real endpoint execution would return. + +Side effects are captured instead of being sent to external systems: + +| Operation | Dry-run behavior | +|-----------|------------------| +| Database writes | Rolled back | +| Email send or queue | Captured under **Captured Side Effects** | +| Event publish | Captured under **Captured Side Effects** | +| Background job enqueue | Captured under **Captured Side Effects** | +| Outbound HTTP | Matched against HTTP mocks | +| File, image, and attachment operations | Captured without persisting files | + +If a script calls the `http` helper and no mock matches the method and URL, the result contains a mock miss instead of sending a real HTTP request. + ## Response Policy Dynamic endpoint responses are validated by `LowCode:Scripting:EndpointResponse`. @@ -203,5 +232,6 @@ Default blocked headers also include hop-by-hop headers such as `Connection`, `T ## See Also * [Scripting API](scripting-api.md) +* [Script Actions](script-actions.md) * [Interceptors](interceptors.md) * [model.json Structure](model-json.md) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index cee9fa10588..efa095d5865 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -122,6 +122,10 @@ Generated pages and menus are permission-aware. If a user cannot access a page, Use **Actions** only when model metadata and standard CRUD behavior are not enough. The scripting surface can define custom HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. Scripts run server-side and use the [Scripting API](scripting-api.md). +JavaScript editors in the Designer provide syntax highlighting, service autocomplete, entity name autocomplete, entity property autocomplete, enum autocomplete, and an **Available context** list. The context list reflects the services enabled for the selected script type. The `fileFields` and `imageFields` context items are selector trees for `File` and `Image` properties used by the file and image helpers; they are not lists of every entity property. + +Endpoint and event handler editors include **Test JavaScript**. Dry-run execution runs the current editor content without saving it, rolls back database writes, captures email/event/job/file side effects, and resolves outbound HTTP calls through test mocks. See [Script Actions](script-actions.md) for action descriptors and dry-run behavior. + ## Health Use **Health** before shipping changes. It helps catch missing display properties, invalid relation targets, form/page references, script problems, and other model issues that would otherwise surface at runtime. diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index b25b6060a19..034c286bacb 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -77,7 +77,7 @@ The designer is the day-to-day entry point. 2. Use **Pages** to choose a page type, menu placement, fields, default sorting, filters, dashboards, and linked forms. 3. Use **Forms** to arrange create and edit forms with tabs, groups, controls, validations, and actions. 4. Use **Permissions** to review generated permissions and control access. -5. Use **Actions** and **Interceptors** when the standard CRUD flow needs custom logic. +5. Use **Actions** and **Interceptors** when the standard CRUD flow needs custom logic, endpoints, event handlers, jobs, or workers. 6. Use **Health** to review model issues before publishing changes. ![Entity properties in the designer](images/designer-properties.png) @@ -152,6 +152,7 @@ The designer stores and reads the same model metadata described in the reference | [Foreign Access](foreign-access.md) | Access to related dynamic entities through relations | | [Interceptors](interceptors.md) | JavaScript lifecycle logic for CRUD operations | | [Custom Endpoints](custom-endpoints.md) | JavaScript-backed REST endpoints | +| [Script Actions](script-actions.md) | Event handlers, background jobs, background workers, script editor, and dry-run testing | | [Scripting API](scripting-api.md) | Server-side script context and helpers | ## Runtime Internals diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 5549d5ddb2b..48db0cdfeef 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -427,7 +427,7 @@ See [Custom Endpoints](custom-endpoints.md). } ``` -Background workers require either `period` in milliseconds or `cronExpression`. +Background workers require either `period` in milliseconds or `cronExpression`. See [Script Actions](script-actions.md) for event handler, background job, background worker, code editor, and dry-run testing details. ## Complete Example @@ -537,4 +537,5 @@ In ABP Studio, run the generated migration task for the solution. If you run the * [Attributes & Fluent API](fluent-api.md) * [Interceptors](interceptors.md) * [Custom Endpoints](custom-endpoints.md) +* [Script Actions](script-actions.md) * [Scripting API](scripting-api.md) diff --git a/docs/en/low-code/script-actions.md b/docs/en/low-code/script-actions.md new file mode 100644 index 00000000000..508237b5a1c --- /dev/null +++ b/docs/en/low-code/script-actions.md @@ -0,0 +1,259 @@ +```json +//[doc-seo] +{ + "Description": "Define event handlers, background jobs, background workers, script code editing, autocomplete, and dry-run testing in the ABP Low-Code Designer." +} +``` + +# Script Actions + +> **Preview:** Script actions are part of the preview Low-Code System. Descriptor fields, designer screens, and script context members may change before general availability. + +Use **Actions** in the Low-Code Designer when model metadata and generated CRUD behavior are not enough. Actions can add JavaScript-backed HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. + +Custom HTTP endpoints are documented separately in [Custom Endpoints](custom-endpoints.md). This page focuses on the shared action designer experience and the event handler, background job, and background worker action types. + +## Action Types + +| Type | Use it for | Runtime trigger | +|------|------------|-----------------| +| Custom endpoint | Expose a small model-owned REST API | HTTP request to the configured route | +| Event handler | React to a named distributed event | `events.publishAsync(...)` or any compatible distributed event publisher | +| Background job | Run named JavaScript work asynchronously | `jobs.enqueueAsync(...)` | +| Background worker | Run recurring JavaScript work | `period` or `cronExpression` | + +All action scripts run server-side and use the shared [Scripting API](scripting-api.md). Available services can be enabled or disabled per action type with scripting capability profiles. + +## Script Code Editor + +The Designer uses a code editor for JavaScript fields in custom endpoints, event handlers, background jobs, background workers, and interceptors. + +The editor provides: + +* Syntax highlighting for JavaScript +* Type-aware completions for low-code services +* Entity name completions for `db`, file, image, and attachment helpers +* Entity property completions for query lambda parameters and query results +* Enum completions through `enums` and `enumValues` +* File and image field selector completions through `fileFields` and `imageFields` +* An **Available context** list for the services enabled for the selected script type + +The `fileFields` and `imageFields` globals are not lists of every entity property. They are selector trees for `File` and `Image` properties used by `files.save(...)`, `files.get(...)`, `images.save(...)`, and `images.get(...)`. + +```javascript +await files.save(fileFields.Acme.Campaigns.Campaign.Document, { + fileName: 'brief.pdf', + contentType: 'application/pdf', + base64: base64Content +}); + +await images.save(imageFields.Acme.Campaigns.Campaign.BannerImage, { + fileName: 'banner.png', + contentType: 'image/png', + base64: base64Image +}); +``` + +Regular entity fields autocomplete from entity records and query lambda parameters: + +```javascript +var campaignQuery = await db.query('Acme.Campaigns.Campaign'); +var rows = await campaignQuery + .where(campaign => campaign.Name.includes('Spring')) + .select(campaign => ({ + id: campaign.Id, + name: campaign.Name + })) + .toList(); +``` + +If the selected model layer is read-only, the Designer shows the JavaScript in a read-only editor. Switch to a writable layer before editing. + +## Event Handlers + +Event handlers run when a distributed event with the configured name is published. + +### Descriptor + +| Field | Type | Description | +|-------|------|-------------| +| `name` | string | Unique event handler name | +| `eventName` | string | Distributed event name to handle | +| `javascript` | string | JavaScript handler body | +| `description` | string | Optional documentation text | + +### Context + +| Global | Description | +|--------|-------------| +| `handler` | Handler runtime metadata | +| `event` | Runtime event metadata with `name` and `data` | +| `eventName` | Event name string | +| `eventData` | Event payload | + +### Example + +```json +{ + "eventHandlers": [ + { + "name": "NotifyCampaignCompleted", + "eventName": "Acme.Campaigns.CampaignCompleted", + "description": "Logs and notifies when a campaign is completed", + "javascript": "log('Campaign completed: ' + eventData.id);\nawait email.queueAsync('ops@example.com', 'Campaign completed', eventData.id);" + } + ] +} +``` + +Publish the event from another script: + +```javascript +await events.publishAsync('Acme.Campaigns.CampaignCompleted', { + id: campaignId, + completedAt: new Date().toISOString() +}); +``` + +## Background Jobs + +Background jobs define named JavaScript handlers that can be enqueued from scripts. + +### Descriptor + +| Field | Type | Description | +|-------|------|-------------| +| `name` | string | Unique job name used by `jobs.enqueueAsync(...)` | +| `javascript` | string | JavaScript job body | +| `description` | string | Optional documentation text | + +### Context + +| Global | Description | +|--------|-------------| +| `job` | Job runtime metadata | +| `jobName` | Job name string | +| `jobData` | Parsed job payload | +| `jobJsonData` | Raw JSON payload | + +### Example + +```json +{ + "backgroundJobs": [ + { + "name": "SendCampaignSummary", + "description": "Sends a summary for one campaign", + "javascript": "var campaign = await db.get('Acme.Campaigns.Campaign', jobData.campaignId);\nif (!campaign) { userFriendlyError('Campaign not found.'); }\nawait email.queueAsync(jobData.to, 'Campaign summary', campaign.Name);" + } + ] +} +``` + +Enqueue the job from another script: + +```javascript +var jobId = await jobs.enqueueAsync('SendCampaignSummary', { + campaignId: campaignId, + to: 'ops@example.com' +}, { + priority: 'Normal', + delayMs: 60000 +}); +``` + +## Background Workers + +Background workers run recurring JavaScript work on a schedule. + +### Descriptor + +| Field | Type | Description | +|-------|------|-------------| +| `name` | string | Unique worker name | +| `period` | number | Period in milliseconds | +| `cronExpression` | string | Cron expression for scheduled execution | +| `javascript` | string | JavaScript worker body | +| `description` | string | Optional documentation text | + +Configure either `period` or `cronExpression`. + +### Context + +| Global | Description | +|--------|-------------| +| `worker` | Worker runtime metadata | +| `workerName` | Worker name string | + +### Example + +```json +{ + "backgroundWorkers": [ + { + "name": "CampaignCleanup", + "period": 3600000, + "description": "Runs every hour", + "javascript": "var query = await db.query('Acme.Campaigns.Campaign');\nvar stale = await query.where(c => c.Status === 0).take(100).toList();\nlog('Stale draft count: ' + stale.length);" + } + ] +} +``` + +## Test JavaScript + +Where the Designer shows **Test JavaScript**, you can run the current editor content without saving it. The built-in dry-run panel is available for custom endpoints, interceptors, event handlers, background jobs, and background workers. + +For custom endpoints, provide request data: + +* Method +* Path +* Route values +* Query values +* Headers +* Body JSON + +For interceptors, provide the command name, entity name, command data, and an optional record id. For event handlers, provide event data JSON. For background jobs and background workers, provide the job or worker input JSON that the script expects. + +When the script uses the HTTP API, you can also define outbound HTTP mocks. If a script calls `http.getAsync(...)`, `http.postAsync(...)`, or another HTTP helper, the dry-run engine returns the matching mock response instead of calling the real URL. If no mock matches, the result includes an HTTP mock miss. + +Dry-run behavior: + +| Operation | Dry-run behavior | +|-----------|------------------| +| Database writes | Executed in a transaction and rolled back | +| Low-code file/image/attachment operations | Captured as side effects without persisting files | +| Email send or queue | Captured as an `email` side effect; no email is sent | +| Event publish | Captured as an `event` side effect; no event is published | +| Background job enqueue | Captured as a `job` side effect; no job is enqueued | +| Outbound HTTP | Matched against HTTP mocks; no real HTTP call is made | +| Logs | Returned in the test result | +| Errors | Returned with type, message, and diagnostics when available | + +Dry-run results can include: + +* Endpoint response data +* Execution status and duration +* Logs +* Captured side effects +* Error details + +The endpoint dry-run still evaluates the endpoint authentication and permission metadata against the current user. If the test user is not authenticated or does not have the required permission, the dry-run returns the corresponding `401` or `403` endpoint response. + +## Operational Guidance + +* Prefer metadata and generated CRUD behavior before adding scripts. +* Keep scripts small and focused. +* Use explicit permissions for custom endpoints. +* Use `take()` and specific filters for database queries. +* Treat public unauthenticated endpoints as public API surface. +* Keep outbound HTTP, email, event, job, file, and blob limits enabled for tenant-authored scripts. +* Use capability profiles to disable services that a script type does not need. + +## See Also + +* [Low-Code Designer](designer.md) +* [Custom Endpoints](custom-endpoints.md) +* [Interceptors](interceptors.md) +* [Scripting API](scripting-api.md) +* [model.json Structure](model-json.md) diff --git a/docs/en/low-code/scripting-api.md b/docs/en/low-code/scripting-api.md index c50830f1d33..a0d29791510 100644 --- a/docs/en/low-code/scripting-api.md +++ b/docs/en/low-code/scripting-api.md @@ -15,6 +15,31 @@ The Low-Code System provides a server-side JavaScript scripting engine for execu Scripts are wrapped in an async function, so `await` and top-level `return` are supported. +## Designer Code Editor + +JavaScript fields in the Low-Code Designer use a code editor with syntax highlighting and low-code-aware autocomplete. The editor is available for interceptors, custom endpoints, event handlers, background jobs, and background workers. + +The **Available context** list shows the globals enabled for the current script type. The list is based on the scripting capability profile, so an application can disable services such as HTTP, email, files, or background jobs for a specific script type. + +Autocomplete covers: + +* Common globals such as `db`, `currentUser`, `emailSender`, `http`, `events`, and `jobs` +* Endpoint, event handler, background job, background worker, and interceptor context variables +* Dynamic entity names in `db.query(...)`, `db.get(...)`, file, image, and attachment helpers +* Dynamic entity properties inside query lambda parameters and query results +* Enum names and values through `enums` and `enumValues` +* File and image field selectors through `fileFields` and `imageFields` + +`fileFields` is intentionally limited to `File` properties and `imageFields` is limited to `Image` properties. They are safe selector trees for file and image helpers, not lists of every entity property. + +```javascript +await files.save(fileFields.Acme.Campaigns.Campaign.Document, { + fileName: 'brief.pdf', + contentType: 'application/pdf', + base64: base64Content +}); +``` + ## Unified Database API (`db`) The `db` object is the main entry point for all data operations. @@ -356,7 +381,9 @@ Scripts receive a `context` object and common global shortcuts. Available servic | `files` | `context.files` | Low-code file field helper | | `images` | `context.images` | Low-code image field helper | | `attachments` | `context.attachments` | Record attachment helper | -| `fields` | `context.fields` | Field selector helpers for file operations | +| `fileFields` | `context.fileFields` | File field selector tree | +| `imageFields` | `context.imageFields` | Image field selector tree | +| `enums`, `enumValues` | enum registry | Low-code enum value registry | | `log`, `logWarning`, `logError` | logging methods | Script logging | Global helpers are also available: @@ -410,6 +437,42 @@ Custom endpoints add request globals and response helpers. See [Custom Endpoints | Background job | `job`, `jobName`, `jobData`, `jobJsonData` | | Background worker | `worker`, `workerName` | +Event handlers, background jobs, and background workers are configured in the Designer **Actions** section or in `model.json`. See [Script Actions](script-actions.md) for descriptors, examples, and dry-run testing. + +Event handler example: + +```javascript +log('Received event ' + eventName); + +if (eventData && eventData.campaignId) { + await jobs.enqueueAsync('SendCampaignSummary', { + campaignId: eventData.campaignId + }); +} +``` + +Background job example: + +```javascript +var campaign = await db.get('Acme.Campaigns.Campaign', jobData.campaignId); +if (!campaign) { + userFriendlyError('Campaign not found.'); +} + +await email.queueAsync(jobData.to, 'Campaign summary', campaign.Name); +``` + +Background worker example: + +```javascript +var campaignQuery = await db.query('Acme.Campaigns.Campaign'); +var staleCount = await campaignQuery + .where(campaign => campaign.Status === 0) + .count(); + +log('Stale draft campaigns: ' + staleCount); +``` + ## Service Helpers ### HTTP @@ -466,6 +529,69 @@ The file helpers use low-code page services so permissions, file validation, lin File content is passed as base64 data. File operations are subject to configured read/write size limits. +Use `fileFields` and `imageFields` when you want typed selectors for file or image properties: + +```javascript +await files.save(fileFields.Acme.Campaigns.Campaign.Document, { + fileName: 'brief.pdf', + contentType: 'application/pdf', + base64: base64Content +}); + +var content = await images.get( + imageFields.Acme.Campaigns.Campaign.BannerImage, + campaignId +); +``` + +The selector path is based on the full entity name and the `File` or `Image` property name. Record-level attachments are entity-level, not property-level, so they use the `attachments` helper instead of field selectors. + +### Email + +The `email` and `emailSender` globals use the configured ABP `IEmailSender`. + +| Method | Description | +|--------|-------------| +| `email.sendAsync(to, subject, body)` | Send plain text email | +| `email.sendAsync(from, to, subject, body)` | Send plain text email with explicit sender | +| `email.sendHtmlAsync(to, subject, htmlBody)` | Send HTML email | +| `email.sendHtmlAsync(from, to, subject, htmlBody)` | Send HTML email with explicit sender | +| `email.queueAsync(to, subject, body)` | Queue plain text email | +| `email.queueAsync(from, to, subject, body)` | Queue plain text email with explicit sender | +| `email.queueHtmlAsync(to, subject, htmlBody)` | Queue HTML email | +| `email.queueHtmlAsync(from, to, subject, htmlBody)` | Queue HTML email with explicit sender | + +Email operations validate the recipient address, apply allowed or blocked domain rules when configured, and enforce the per-execution email limit. + +```javascript +if (email.isAvailable) { + await email.queueAsync( + 'ops@example.com', + 'Campaign completed', + 'Campaign ' + campaignId + ' completed.' + ); +} +``` + +### Test JavaScript Dry Run + +The Designer can run JavaScript without saving it where the **Test JavaScript** panel is available. The built-in dry-run panel supports custom endpoints, interceptors, event handlers, background jobs, and background workers. + +Dry-run execution returns the endpoint response or script status, logs, captured side effects, duration, and error diagnostics. + +| Operation | Dry-run behavior | +|-----------|------------------| +| Database writes | Executed in a transaction and rolled back | +| File, image, and attachment operations | Captured as side effects without persisting files | +| Email send or queue | Captured as an `email` side effect; no email is sent | +| Event publish | Captured as an `event` side effect; no event is published | +| Background job enqueue | Captured as a `job` side effect; no job is enqueued | +| Outbound HTTP | Resolved from configured HTTP mocks; no real HTTP request is sent | +| Logs | Returned in the result | +| Errors | Returned with type, message, and diagnostics when available | + +For endpoint dry runs, the request method, path, route values, query values, headers, and body are supplied by the test panel. Endpoint authentication and permission metadata are checked against the current user. For interceptor dry runs, the test panel supplies command metadata and command data. For event handler dry runs, it supplies `eventData`. For background job and worker dry runs, it supplies the job or worker input JSON. + ## Configuration Configure scripting limits with the `LowCode:Scripting` configuration section or `AbpLowCodeScriptingOptions`. @@ -658,4 +784,5 @@ return ok({ * [Interceptors](interceptors.md) * [Custom Endpoints](custom-endpoints.md) +* [Script Actions](script-actions.md) * [model.json Structure](model-json.md) From c8050daadfe00b937a137879c4420cb7775f1266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Tue, 9 Jun 2026 14:28:51 +0300 Subject: [PATCH 10/14] Add low-code model descriptor schemas --- ...command-interceptor-descriptor.schema.json | 37 +++ .../dashboard-aggregation-type.schema.json | 40 +++ .../dashboard-chart-descriptor.schema.json | 91 ++++++ .../dashboard-chart-type.schema.json | 19 ++ .../dashboard-descriptor.schema.json | 53 ++++ .../dashboard-filter-descriptor.schema.json | 47 ++++ ...board-global-filter-descriptor.schema.json | 21 ++ .../dashboard-list-descriptor.schema.json | 75 +++++ ...rd-number-container-descriptor.schema.json | 26 ++ ...shboard-number-item-descriptor.schema.json | 77 ++++++ .../dashboard-row-descriptor.schema.json | 36 +++ ...board-visualization-descriptor.schema.json | 130 +++++++++ .../dashboard-visualization-type.schema.json | 17 ++ .../endpoint-descriptor.schema.json | 60 ++++ .../entity-attachment-descriptor.schema.json | 47 ++++ ...ss-field-validation-descriptor.schema.json | 52 ++++ .../definitions/entity-descriptor.schema.json | 71 +++++ .../entity-property-descriptor.schema.json | 101 +++++++ .../entity-property-type.schema.json | 66 +++++ .../definitions/enum-descriptor.schema.json | 56 ++++ .../foreign-key-descriptor.schema.json | 60 ++++ .../definitions/form-descriptor.schema.json | 79 ++++++ .../form-field-descriptor.schema.json | 68 +++++ .../definitions/form-field-type.schema.json | 68 +++++ .../form-layout-descriptor.schema.json | 128 +++++++++ .../form-rule-descriptor.schema.json | 82 ++++++ .../definitions/interceptor-type.schema.json | 24 ++ .../page-column-descriptor.schema.json | 50 ++++ .../definitions/page-descriptor.schema.json | 260 ++++++++++++++++++ .../page-filter-descriptor.schema.json | 119 ++++++++ .../page-group-descriptor.schema.json | 44 +++ .../page-permission-config.schema.json | 27 ++ .../definitions/page-type.schema.json | 36 +++ .../permission-descriptor.schema.json | 44 +++ ...ript-background-job-descriptor.schema.json | 36 +++ ...t-background-worker-descriptor.schema.json | 58 ++++ ...cript-event-handler-descriptor.schema.json | 42 +++ .../validator-descriptor.schema.json | 96 +++++++ schemas/low-code/manifest.json | 19 ++ 39 files changed, 2462 insertions(+) create mode 100644 schemas/low-code/definitions/command-interceptor-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-aggregation-type.schema.json create mode 100644 schemas/low-code/definitions/dashboard-chart-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-chart-type.schema.json create mode 100644 schemas/low-code/definitions/dashboard-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-filter-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-global-filter-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-list-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-number-container-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-number-item-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-row-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json create mode 100644 schemas/low-code/definitions/dashboard-visualization-type.schema.json create mode 100644 schemas/low-code/definitions/endpoint-descriptor.schema.json create mode 100644 schemas/low-code/definitions/entity-attachment-descriptor.schema.json create mode 100644 schemas/low-code/definitions/entity-cross-field-validation-descriptor.schema.json create mode 100644 schemas/low-code/definitions/entity-descriptor.schema.json create mode 100644 schemas/low-code/definitions/entity-property-descriptor.schema.json create mode 100644 schemas/low-code/definitions/entity-property-type.schema.json create mode 100644 schemas/low-code/definitions/enum-descriptor.schema.json create mode 100644 schemas/low-code/definitions/foreign-key-descriptor.schema.json create mode 100644 schemas/low-code/definitions/form-descriptor.schema.json create mode 100644 schemas/low-code/definitions/form-field-descriptor.schema.json create mode 100644 schemas/low-code/definitions/form-field-type.schema.json create mode 100644 schemas/low-code/definitions/form-layout-descriptor.schema.json create mode 100644 schemas/low-code/definitions/form-rule-descriptor.schema.json create mode 100644 schemas/low-code/definitions/interceptor-type.schema.json create mode 100644 schemas/low-code/definitions/page-column-descriptor.schema.json create mode 100644 schemas/low-code/definitions/page-descriptor.schema.json create mode 100644 schemas/low-code/definitions/page-filter-descriptor.schema.json create mode 100644 schemas/low-code/definitions/page-group-descriptor.schema.json create mode 100644 schemas/low-code/definitions/page-permission-config.schema.json create mode 100644 schemas/low-code/definitions/page-type.schema.json create mode 100644 schemas/low-code/definitions/permission-descriptor.schema.json create mode 100644 schemas/low-code/definitions/script-background-job-descriptor.schema.json create mode 100644 schemas/low-code/definitions/script-background-worker-descriptor.schema.json create mode 100644 schemas/low-code/definitions/script-event-handler-descriptor.schema.json create mode 100644 schemas/low-code/definitions/validator-descriptor.schema.json create mode 100644 schemas/low-code/manifest.json diff --git a/schemas/low-code/definitions/command-interceptor-descriptor.schema.json b/schemas/low-code/definitions/command-interceptor-descriptor.schema.json new file mode 100644 index 00000000000..ee1fc6d49ae --- /dev/null +++ b/schemas/low-code/definitions/command-interceptor-descriptor.schema.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "command-interceptor-descriptor.schema.json", + "title": "CommandInterceptorDescriptor", + "description": "Describes a JavaScript interceptor for an entity Create, Update, or Delete command.", + "markdownDescription": "AI guidance: use `type: \"Pre\"` to validate or block before persistence and `type: \"Post\"` for side effects after persistence. Scripts can inspect `context.commandArgs` and may use services exposed on `context` such as `db`, `currentUser`, `currentTenant`, `emailSender`, `config`, `http`, and logging helpers depending on host configuration. To block the command with a user-facing error, assign `globalError = \"message\"` and return. Keep scripts idempotent where possible.", + "type": "object", + "properties": { + "commandName": { + "type": "string", + "description": "Entity command to intercept: Create, Update, or Delete.", + "enum": ["Create", "Update", "Delete"] + }, + "type": { + "$ref": "interceptor-type.schema.json", + "description": "Whether the script runs before or after the command." + }, + "javascript": { + "type": "string", + "description": "JavaScript code to execute. For Pre interceptors, set globalError to block the command. Example: if (!context.commandArgs.data['Name']) { globalError = 'Name is required.'; }" + } + }, + "required": ["commandName", "type", "javascript"], + "additionalProperties": false, + "examples": [ + { + "commandName": "Create", + "type": "Pre", + "javascript": "if (!context.commandArgs.data['Name']) { globalError = 'Name is required.'; }" + }, + { + "commandName": "Delete", + "type": "Pre", + "javascript": "var record = await db.get('Acme.Events.Event', context.commandArgs.entityId); if (record && record.Status === 2) { globalError = 'Completed events cannot be deleted.'; }" + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-aggregation-type.schema.json b/schemas/low-code/definitions/dashboard-aggregation-type.schema.json new file mode 100644 index 00000000000..e18a2b5b6fe --- /dev/null +++ b/schemas/low-code/definitions/dashboard-aggregation-type.schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-aggregation-type.schema.json", + "title": "DashboardAggregationType", + "description": "The type of aggregation to perform. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "markdownDescription": "`count` counts records and does not require a property. `sum`, `average`, `min`, and `max` require a property. `percentFilled` and `percentEmpty` calculate completeness for a nullable/string property.", + "type": "string", + "enum": [ + "count", + "Count", + "sum", + "Sum", + "average", + "Average", + "min", + "Min", + "max", + "Max", + "percentFilled", + "PercentFilled", + "percentEmpty", + "PercentEmpty" + ], + "enumDescriptions": [ + "Count matching records.", + "Count matching records.", + "Sum a numeric property.", + "Sum a numeric property.", + "Average a numeric property.", + "Average a numeric property.", + "Minimum property value.", + "Minimum property value.", + "Maximum property value.", + "Maximum property value.", + "Percentage of records where property has a value.", + "Percentage of records where property has a value.", + "Percentage of records where property is empty/null.", + "Percentage of records where property is empty/null." + ] +} diff --git a/schemas/low-code/definitions/dashboard-chart-descriptor.schema.json b/schemas/low-code/definitions/dashboard-chart-descriptor.schema.json new file mode 100644 index 00000000000..ade648db0fa --- /dev/null +++ b/schemas/low-code/definitions/dashboard-chart-descriptor.schema.json @@ -0,0 +1,91 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-chart-descriptor.schema.json", + "title": "DashboardChartDescriptor", + "description": "Configuration for a chart visualization.", + "markdownDescription": "AI guidance: use chart visualizations for grouped aggregations. `xAxis.property` is the grouping property. `yAxis` contains one or more aggregations. Use `count` without a property; use `sum`, `average`, `min`, or `max` with a numeric/date property. Use `dateGrouping` when xAxis is date/datetime.", + "type": "object", + "properties": { + "chartType": { + "$ref": "dashboard-chart-type.schema.json", + "description": "Chart renderer type: bar, line, pie, or donut." + }, + "xAxis": { + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Property name to group by on the X-axis. Must exist on the visualization entity." + }, + "useForeignDisplay": { + "type": "boolean", + "description": "Show the FK display property instead of the raw id when xAxis.property is a foreign key.", + "default": false + }, + "dateGrouping": { + "type": ["string", "null"], + "enum": ["", "day", "week", "month", "quarter", "year", null], + "description": "Grouping interval for date/datetime properties. Omit or use empty string for no date grouping." + } + }, + "required": ["property"], + "additionalProperties": false + }, + "yAxis": { + "type": "array", + "items": { + "type": "object", + "properties": { + "aggregation": { + "$ref": "dashboard-aggregation-type.schema.json" + }, + "property": { + "type": ["string", "null"], + "description": "Property name for sum/average/min/max/percent aggregations. Omit for count." + }, + "label": { + "type": ["string", "null"], + "description": "Display label for this series. Omit to derive from aggregation/property." + }, + "color": { + "type": ["string", "null"] + } + }, + "required": ["aggregation"], + "additionalProperties": false + }, + "minItems": 1 + }, + "barOrientation": { + "type": "string", + "enum": ["vertical", "horizontal"], + "default": "vertical" + }, + "showRecordCount": { + "type": "boolean", + "default": false + }, + "maxItems": { + "type": "integer", + "description": "Maximum number of grouped items to display in the chart.", + "default": 10, + "minimum": 1, + "maximum": 50 + } + }, + "required": ["chartType", "xAxis", "yAxis"], + "additionalProperties": false, + "examples": [ + { + "chartType": "bar", + "xAxis": { "property": "Status" }, + "yAxis": [{ "aggregation": "count", "label": "Events" }], + "maxItems": 10 + }, + { + "chartType": "line", + "xAxis": { "property": "StartDate", "dateGrouping": "month" }, + "yAxis": [{ "aggregation": "sum", "property": "Budget", "label": "Budget" }] + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-chart-type.schema.json b/schemas/low-code/definitions/dashboard-chart-type.schema.json new file mode 100644 index 00000000000..cfada5467ee --- /dev/null +++ b/schemas/low-code/definitions/dashboard-chart-type.schema.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-chart-type.schema.json", + "title": "DashboardChartType", + "description": "The type of chart. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "markdownDescription": "Use `bar` for categorical comparisons, `line` for trends over time, `pie`/`donut` for part-of-whole views with a small number of categories.", + "type": "string", + "enum": ["bar", "Bar", "line", "Line", "pie", "Pie", "donut", "Donut"], + "enumDescriptions": [ + "Bar chart.", + "Bar chart.", + "Line chart.", + "Line chart.", + "Pie chart.", + "Pie chart.", + "Donut chart.", + "Donut chart." + ] +} diff --git a/schemas/low-code/definitions/dashboard-descriptor.schema.json b/schemas/low-code/definitions/dashboard-descriptor.schema.json new file mode 100644 index 00000000000..068031a18b6 --- /dev/null +++ b/schemas/low-code/definitions/dashboard-descriptor.schema.json @@ -0,0 +1,53 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-descriptor.schema.json", + "title": "DashboardDescriptor", + "description": "Describes a dashboard page configuration with global filters and rows of visualizations.", + "markdownDescription": "AI guidance: a dashboard belongs to a page with `type: \"dashboard\"`. It contains one or more rows; each row contains chart, list, or numberContainer visualizations. Use visualization `entityName` to select data for chart/list items. Use numberContainer for KPI tiles, charts for grouped aggregations, and lists for recent/top records.", + "type": "object", + "properties": { + "description": { + "type": ["string", "null"], + "description": "Optional description text shown below the dashboard title." + }, + "globalFilters": { + "type": "array", + "description": "Global filters that affect visualizations, for example a date range. Visualizations can map the global date filter through globalDateFilterProperty.", + "items": { + "$ref": "dashboard-global-filter-descriptor.schema.json" + } + }, + "rows": { + "type": "array", + "description": "Dashboard rows. Each row contains one or more visualization items; width 2 items usually take the full row.", + "items": { + "$ref": "dashboard-row-descriptor.schema.json" + }, + "minItems": 1 + } + }, + "required": ["rows"], + "additionalProperties": false, + "examples": [ + { + "description": "Operational overview", + "rows": [ + { + "items": [ + { + "name": "events-by-status", + "type": "chart", + "title": "Events by Status", + "entityName": "Acme.Events.Event", + "chart": { + "chartType": "bar", + "xAxis": { "property": "Status" }, + "yAxis": [{ "aggregation": "count", "label": "Events" }] + } + } + ] + } + ] + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-filter-descriptor.schema.json b/schemas/low-code/definitions/dashboard-filter-descriptor.schema.json new file mode 100644 index 00000000000..93cb76e821a --- /dev/null +++ b/schemas/low-code/definitions/dashboard-filter-descriptor.schema.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-filter-descriptor.schema.json", + "title": "DashboardFilterDescriptor", + "description": "Static filter applied to a dashboard visualization or KPI item.", + "markdownDescription": "AI guidance: use dashboard filters to constrain the data behind a visualization, for example only active records or only records above a threshold. Each condition property must exist on the visualization/item entity. Combine conditions with `operator: \"and\"` or `operator: \"or\"`.", + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": ["and", "or"], + "default": "and" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Property name to filter on. Must exist on the visualization/item entityName." + }, + "filterType": { + "type": "string", + "enum": ["equal", "notEqual", "contains", "greaterThan", "lessThan", "isNull", "isNotNull"], + "default": "equal" + }, + "value": { + "description": "Filter value. Shape depends on filterType and target property type." + } + }, + "required": ["property", "filterType"], + "additionalProperties": false + } + } + }, + "required": ["conditions"], + "additionalProperties": false, + "examples": [ + { + "operator": "and", + "conditions": [ + { "property": "Status", "filterType": "equal", "value": 1 } + ] + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-global-filter-descriptor.schema.json b/schemas/low-code/definitions/dashboard-global-filter-descriptor.schema.json new file mode 100644 index 00000000000..ab1d3f79a68 --- /dev/null +++ b/schemas/low-code/definitions/dashboard-global-filter-descriptor.schema.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-global-filter-descriptor.schema.json", + "title": "DashboardGlobalFilterDescriptor", + "description": "Describes a dashboard-level filter control that can affect all visualizations on the dashboard.", + "markdownDescription": "AI guidance: use global filters for dashboard-wide controls, not for per-visualization conditions. The current supported type is `dateRange`; visualization filters can then reference date-like entity properties through their own `filter` or `userFilters` settings.", + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["dateRange"], + "default": "dateRange", + "description": "Global filter control type. Currently only 'dateRange' is supported." + } + }, + "required": ["type"], + "additionalProperties": false, + "examples": [ + { "type": "dateRange" } + ] +} diff --git a/schemas/low-code/definitions/dashboard-list-descriptor.schema.json b/schemas/low-code/definitions/dashboard-list-descriptor.schema.json new file mode 100644 index 00000000000..b7340c41183 --- /dev/null +++ b/schemas/low-code/definitions/dashboard-list-descriptor.schema.json @@ -0,0 +1,75 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-list-descriptor.schema.json", + "title": "DashboardListDescriptor", + "description": "Configuration for a dashboard list/table visualization.", + "markdownDescription": "AI guidance: use list visualizations for recent records, top records, or compact operational queues. `fields` must contain property names from the parent visualization entityName. Use `sortBy` to make results deterministic.", + "type": "object", + "properties": { + "fields": { + "type": "array", + "items": { "type": "string" }, + "description": "Property names to display as columns. Each value must reference a property on the visualization entityName." + }, + "sortBy": { + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Property name to sort by. Must exist on the visualization entityName." + }, + "direction": { + "type": "string", + "enum": ["asc", "desc"], + "default": "asc" + } + }, + "required": ["property"], + "additionalProperties": false + }, + "maxRows": { + "type": "integer", + "minimum": 1, + "maximum": 50, + "default": 10 + }, + "rowHeight": { + "type": "string", + "enum": ["compact", "normal", "tall"], + "default": "compact" + }, + "colorBy": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["property", "conditions"] + }, + "property": { + "type": "string", + "description": "Enum/status property name for automatic coloring." + } + }, + "required": ["type"], + "additionalProperties": false + }, + { + "type": "null" + } + ] + } + }, + "required": ["fields"], + "additionalProperties": false, + "examples": [ + { + "fields": ["Title", "StartDate", "Status"], + "sortBy": { "property": "StartDate", "direction": "desc" }, + "maxRows": 10, + "rowHeight": "compact", + "colorBy": { "type": "property", "property": "Status" } + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-number-container-descriptor.schema.json b/schemas/low-code/definitions/dashboard-number-container-descriptor.schema.json new file mode 100644 index 00000000000..5cac8372a9a --- /dev/null +++ b/schemas/low-code/definitions/dashboard-number-container-descriptor.schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-number-container-descriptor.schema.json", + "title": "DashboardNumberContainerDescriptor", + "description": "A container that holds multiple number/KPI items, each with its own entity and aggregation.", + "markdownDescription": "AI guidance: use numberContainer for KPI tiles. Each item chooses its own entity, aggregation, optional filter, format, and color.", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "Number/KPI items within this container. Use 1-4 items for a readable dashboard row.", + "items": { + "$ref": "dashboard-number-item-descriptor.schema.json" + } + } + }, + "required": ["items"], + "additionalProperties": false, + "examples": [ + { + "items": [ + { "name": "total-events", "title": "Total Events", "entityName": "Acme.Events.Event", "aggregation": "count", "format": "number" } + ] + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-number-item-descriptor.schema.json b/schemas/low-code/definitions/dashboard-number-item-descriptor.schema.json new file mode 100644 index 00000000000..eb98b09ac41 --- /dev/null +++ b/schemas/low-code/definitions/dashboard-number-item-descriptor.schema.json @@ -0,0 +1,77 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-number-item-descriptor.schema.json", + "title": "DashboardNumberItemDescriptor", + "description": "A single number/KPI tile within a number container.", + "markdownDescription": "AI guidance: `count` does not need aggregationProperty. `sum`, `average`, `min`, `max`, `percentFilled`, and `percentEmpty` should specify aggregationProperty. Use filter to scope the KPI, for example count only active records.", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique identifier for this number item. Prefer kebab-case such as 'total-events'.", + "minLength": 1 + }, + "title": { + "type": "string", + "description": "Display title for this KPI." + }, + "entityName": { + "type": "string", + "description": "Entity this number item sources data from. Must match an entity descriptor or known reference entity.", + "minLength": 1 + }, + "aggregation": { + "$ref": "dashboard-aggregation-type.schema.json", + "description": "Aggregation used to compute the KPI value." + }, + "aggregationProperty": { + "type": "string", + "description": "Property name for sum/average/min/max/percent aggregations. Omit for count." + }, + "format": { + "type": "string", + "enum": ["number", "currency", "percentage"], + "default": "number" + }, + "color": { + "type": "string", + "description": "Display color name (blue, green, red, purple, orange, indigo, amber, teal)" + }, + "globalDateFilterProperty": { + "type": "string", + "description": "Date/DateTime property used to apply dashboard global date filters. Defaults to CreationTime when omitted." + }, + "filter": { + "oneOf": [ + { "$ref": "dashboard-filter-descriptor.schema.json" }, + { "type": "null" } + ] + }, + "clickToSeeRecords": { + "type": "boolean", + "description": "Allow users to click to see underlying records when supported by the runtime.", + "default": false + } + }, + "required": ["name", "title", "entityName", "aggregation"], + "additionalProperties": false, + "examples": [ + { + "name": "total-events", + "title": "Total Events", + "entityName": "Acme.Events.Event", + "aggregation": "count", + "format": "number", + "color": "blue" + }, + { + "name": "total-budget", + "title": "Total Budget", + "entityName": "Acme.Events.Event", + "aggregation": "sum", + "aggregationProperty": "Budget", + "format": "currency", + "color": "green" + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-row-descriptor.schema.json b/schemas/low-code/definitions/dashboard-row-descriptor.schema.json new file mode 100644 index 00000000000..bd1abbc5913 --- /dev/null +++ b/schemas/low-code/definitions/dashboard-row-descriptor.schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-row-descriptor.schema.json", + "title": "DashboardRowDescriptor", + "description": "Describes one row in the dashboard layout grid. Each row contains one or two visualization items.", + "markdownDescription": "AI guidance: organize dashboard visualizations into rows by visual importance. Use one item for a full-width chart/list/number panel, and two items when related visualizations should be displayed side by side. Do not put more than two visualizations in a row; create another row instead.", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "Visualization items in this row. Use one item for full-width content or two items for a two-column row.", + "items": { + "$ref": "dashboard-visualization-descriptor.schema.json" + }, + "minItems": 1, + "maxItems": 2 + } + }, + "required": ["items"], + "additionalProperties": false, + "examples": [ + { + "items": [ + { + "type": "numberContainer", + "title": "Overview", + "numberContainer": { + "items": [ + { "title": "Total Records", "entity": "Acme.Events.Event", "aggregation": "count" } + ] + } + } + ] + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json b/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json new file mode 100644 index 00000000000..0a958fa9a1f --- /dev/null +++ b/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json @@ -0,0 +1,130 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-visualization-descriptor.schema.json", + "title": "DashboardVisualizationDescriptor", + "description": "A single visualization element in a dashboard row: chart, list, or number container.", + "markdownDescription": "AI guidance: set `type` and then provide the matching payload: `chart` for type chart, `list` for type list, or `numberContainer` for type numberContainer. Do not populate unrelated payloads. Chart and list visualizations require `entityName`; number containers define entityName per KPI item.", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique identifier within the dashboard. Prefer kebab-case such as 'events-by-status'.", + "minLength": 1 + }, + "type": { + "$ref": "dashboard-visualization-type.schema.json", + "description": "Visualization renderer type. Determines which payload property must be populated." + }, + "title": { + "type": "string", + "description": "Display title for the visualization." + }, + "description": { + "type": ["string", "null"], + "description": "Optional description text. Can be shown inline or as tooltip depending on showDescriptionAsTooltip." + }, + "width": { + "type": "integer", + "enum": [1, 2], + "default": 1, + "description": "Column width: 1 = half row, 2 = full row." + }, + "entityName": { + "type": "string", + "description": "Entity this visualization sources data from. Required for chart and list visualizations; numberContainer items define their own entityName." + }, + "globalDateFilterProperty": { + "type": "string", + "description": "Date/DateTime property used to apply dashboard global date filters to this visualization. Defaults to CreationTime when omitted." + }, + "filter": { + "oneOf": [ + { "$ref": "dashboard-filter-descriptor.schema.json" }, + { "type": "null" } + ] + }, + "userFilters": { + "type": "array", + "description": "Interactive filters exposed to end users on this visualization.", + "items": { + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Property name to filter on. Must exist on entityName.", + "minLength": 1 + } + }, + "required": ["property"], + "additionalProperties": false + } + }, + "showDescriptionAsTooltip": { + "type": "boolean", + "default": false + }, + "clickToSeeRecords": { + "type": "boolean", + "description": "Allow users to click to see underlying records when supported by the runtime.", + "default": false + }, + "chart": { + "oneOf": [ + { "$ref": "dashboard-chart-descriptor.schema.json" }, + { "type": "null" } + ] + }, + "list": { + "oneOf": [ + { "$ref": "dashboard-list-descriptor.schema.json" }, + { "type": "null" } + ] + }, + "numberContainer": { + "oneOf": [ + { "$ref": "dashboard-number-container-descriptor.schema.json" }, + { "type": "null" } + ] + } + }, + "required": ["name", "type", "title"], + "allOf": [ + { + "if": { "properties": { "type": { "const": "chart" } } }, + "then": { "required": ["chart", "entityName"] } + }, + { + "if": { "properties": { "type": { "const": "list" } } }, + "then": { "required": ["list", "entityName"] } + }, + { + "if": { "properties": { "type": { "const": "numberContainer" } } }, + "then": { "required": ["numberContainer"] } + } + ], + "additionalProperties": false, + "examples": [ + { + "name": "events-by-status", + "type": "chart", + "title": "Events by Status", + "entityName": "Acme.Events.Event", + "chart": { + "chartType": "bar", + "xAxis": { "property": "Status" }, + "yAxis": [{ "aggregation": "count", "label": "Events" }] + } + }, + { + "name": "recent-events", + "type": "list", + "title": "Recent Events", + "entityName": "Acme.Events.Event", + "list": { + "fields": ["Title", "StartDate", "Status"], + "sortBy": { "property": "StartDate", "direction": "desc" }, + "maxRows": 10 + } + } + ] +} diff --git a/schemas/low-code/definitions/dashboard-visualization-type.schema.json b/schemas/low-code/definitions/dashboard-visualization-type.schema.json new file mode 100644 index 00000000000..721fb2977f3 --- /dev/null +++ b/schemas/low-code/definitions/dashboard-visualization-type.schema.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-visualization-type.schema.json", + "title": "DashboardVisualizationType", + "description": "The type of dashboard visualization. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "markdownDescription": "`chart` groups/aggregates entity data into a bar/line/pie/donut chart. `list` displays recent/top records from one entity. `numberContainer` displays one or more KPI number tiles, each with its own entity and aggregation.", + "type": "string", + "enum": ["chart", "Chart", "list", "List", "numberContainer", "NumberContainer"], + "enumDescriptions": [ + "Chart visualization with x/y axis aggregation.", + "Chart visualization with x/y axis aggregation.", + "Record list visualization.", + "Record list visualization.", + "KPI number/tile container.", + "KPI number/tile container." + ] +} diff --git a/schemas/low-code/definitions/endpoint-descriptor.schema.json b/schemas/low-code/definitions/endpoint-descriptor.schema.json new file mode 100644 index 00000000000..4990fb8b89d --- /dev/null +++ b/schemas/low-code/definitions/endpoint-descriptor.schema.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "endpoint-descriptor.schema.json", + "title": "Custom Endpoint Descriptor", + "description": "Defines a custom HTTP endpoint that executes server-side JavaScript code.", + "markdownDescription": "AI guidance: use custom endpoints for model-owned actions and lightweight APIs. `name` must be unique. `route` should start with `/api/` and must not conflict with another route/method. Use `{id}` style path parameters when needed. Scripts can access request data through the endpoint context and return HTTP results with helpers such as `context.ok(value)`, `context.created(value)`, and `context.noContent()` where available. Require authentication by default and add `requiredPermissions` for protected operations.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Unique endpoint identifier used by designer/model health. Prefer PascalCase or kebab-case, for example 'SearchCustomers'." + }, + "route": { + "type": "string", + "description": "URL route pattern. Must start with '/' and should use an application-specific prefix such as '/api/low-code/events/{id}'. Route parameters use ASP.NET style braces, for example '{id}'." + }, + "method": { + "type": "string", + "description": "HTTP method. GET should be read-only; POST/PUT/PATCH/DELETE may mutate state.", + "enum": ["GET", "POST", "PUT", "DELETE", "PATCH"], + "default": "GET" + }, + "javascript": { + "type": "string", + "description": "JavaScript code to execute. Use context request/response helpers and services exposed by the host, such as db, currentUser/currentTenant, authorization, emailSender, config, http, event bus, background jobs, and logging helpers." + }, + "requireAuthentication": { + "type": "boolean", + "description": "Whether authentication is required. Keep true unless this endpoint is intentionally public.", + "default": true + }, + "requiredPermissions": { + "type": "array", + "description": "Permission names required to access the endpoint. Checked only when authentication is required. Values should reference custom permissions or known static permissions.", + "items": { + "type": "string" + } + }, + "description": { + "type": "string", + "description": "Optional human-readable description for designer documentation and model health context." + } + }, + "required": ["name", "route", "javascript"], + "additionalProperties": false, + "examples": [ + { + "name": "SearchCustomers", + "route": "/api/low-code/customers/search", + "method": "GET", + "requireAuthentication": true, + "requiredPermissions": ["Acme.Customers.View"], + "javascript": "var q = context.request.query.q || ''; var table = await db.query('Acme.Crm.Customer'); var rows = await table.where(c => c.Name.toLowerCase().includes(q.toLowerCase())).take(10).toList(); return context.ok(rows);" + } + ] +} diff --git a/schemas/low-code/definitions/entity-attachment-descriptor.schema.json b/schemas/low-code/definitions/entity-attachment-descriptor.schema.json new file mode 100644 index 00000000000..bf1be2fad43 --- /dev/null +++ b/schemas/low-code/definitions/entity-attachment-descriptor.schema.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "entity-attachment-descriptor.schema.json", + "title": "EntityAttachmentDescriptor", + "description": "Configures record-level attachments for an entity.", + "markdownDescription": "AI guidance: use entity attachments when records need a collection of arbitrary files. Use File/Image entity properties instead when the file is a named business field such as `ContractPdf` or `CoverImage`.", + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean", + "description": "When true, records of this entity can have attachments." + }, + "maxFileCount": { + "type": "integer", + "description": "Maximum number of files allowed per entity record.", + "minimum": 1 + }, + "maxFileSizeBytes": { + "type": "integer", + "description": "Maximum allowed size in bytes for a single attachment.", + "minimum": 1 + }, + "maxTotalSizeBytes": { + "type": "integer", + "description": "Maximum total attachment size in bytes per entity record.", + "minimum": 1 + }, + "allowedContentTypes": { + "type": "array", + "description": "Allowed MIME content types, wildcard MIME patterns, or file extensions. Examples: 'image/*', 'application/pdf', '.docx'.", + "items": { + "type": "string", + "minLength": 1 + } + } + }, + "required": ["isEnabled"], + "additionalProperties": false, + "examples": [ + { + "isEnabled": true, + "maxFileCount": 5, + "maxFileSizeBytes": 5242880, + "allowedContentTypes": ["image/*", "application/pdf"] + } + ] +} diff --git a/schemas/low-code/definitions/entity-cross-field-validation-descriptor.schema.json b/schemas/low-code/definitions/entity-cross-field-validation-descriptor.schema.json new file mode 100644 index 00000000000..5fff4ea5792 --- /dev/null +++ b/schemas/low-code/definitions/entity-cross-field-validation-descriptor.schema.json @@ -0,0 +1,52 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "entity-cross-field-validation-descriptor.schema.json", + "title": "EntityCrossFieldValidationDescriptor", + "description": "Describes an entity-level validation rule that compares one property against another property on the same entity.", + "markdownDescription": "AI guidance: use cross-field validations for rules such as EndDate > StartDate, Min <= Max, PasswordRepeat == Password, or PublishedOn >= CreatedOn. `propertyName` receives the validation error; `otherPropertyName` is the comparison target. Both must exist on the entity.", + "type": "object", + "properties": { + "propertyName": { + "type": "string", + "description": "Property that receives the validation error when the rule fails. Must exist on the entity.", + "minLength": 1 + }, + "operator": { + "type": "string", + "description": "Comparison operator", + "enum": [ + "equals", + "notEquals", + "greaterThan", + "greaterThanOrEqual", + "lessThan", + "lessThanOrEqual" + ] + }, + "otherPropertyName": { + "type": "string", + "description": "Property to compare against. Must exist on the same entity.", + "minLength": 1 + }, + "message": { + "type": "string", + "description": "Optional custom validation message" + } + }, + "required": ["propertyName", "operator", "otherPropertyName"], + "additionalProperties": false, + "examples": [ + { + "propertyName": "EndDate", + "operator": "greaterThan", + "otherPropertyName": "StartDate", + "message": "End Date must be greater than Start Date." + }, + { + "propertyName": "PasswordRepeat", + "operator": "equals", + "otherPropertyName": "Password", + "message": "Password repeat must match Password." + } + ] +} diff --git a/schemas/low-code/definitions/entity-descriptor.schema.json b/schemas/low-code/definitions/entity-descriptor.schema.json new file mode 100644 index 00000000000..175966db3a2 --- /dev/null +++ b/schemas/low-code/definitions/entity-descriptor.schema.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "entity-descriptor.schema.json", + "title": "EntityDescriptor", + "description": "Describes a dynamic entity. An entity is the runtime data model: it defines a table-like aggregate, its properties, validations, parent-child relation, attachment support, and create/update/delete interceptors.", + "markdownDescription": "AI guidance: create one entity per aggregate/root concept. Use a stable namespace-style `name` such as `Acme.Crm.Customer`; this name is referenced by pages, forms, foreign keys, dashboards, scripts, and permissions. Put user-facing labels in `displayName`; choose `displayProperty` as a short string property used by lookups. Use `parent` only for child/detail entities that belong to a parent record.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Stable full name of the entity, usually Namespace.Module.EntityName (for example 'Acme.Crm.Customer'). Must be unique across all model layers. Do not rename after data exists unless a migration/rename flow is intended.", + "minLength": 1 + }, + "displayName": { + "type": "string", + "description": "Default plural/screen label for this entity (for example 'Customers'). Page menu titles are configured separately on page descriptors.", + "minLength": 1 + }, + "displayProperty": { + "type": "string", + "description": "Property name used when another entity references this entity in a lookup/autocomplete. Prefer a required string property such as 'Name', 'Title', or 'Code'." + }, + "parent": { + "type": "string", + "description": "Full name of the parent entity for parent-child/detail entities. When set, records of this entity are scoped under the parent and should include an FK property to the parent.", + "minLength": 1 + }, + "attachments": { + "$ref": "entity-attachment-descriptor.schema.json", + "description": "Record-level attachment settings. Use this for multiple arbitrary files attached to a record; use File/Image properties for first-class file fields." + }, + "properties": { + "type": "array", + "description": "Entity properties. Omit framework audit/id fields such as Id, CreationTime, CreatorId, LastModificationTime, IsDeleted unless intentionally overriding metadata; the runtime supplies standard fields.", + "items": { + "$ref": "entity-property-descriptor.schema.json" + } + }, + "crossFieldValidations": { + "type": "array", + "description": "Entity-level validation rules that compare two properties from the same entity. Use for date ranges, matching password fields, numeric min/max pairs, and other cross-field rules.", + "items": { + "$ref": "entity-cross-field-validation-descriptor.schema.json" + } + }, + "interceptors": { + "type": "array", + "description": "Create/Update/Delete command interceptors. Use Pre interceptors to validate, normalize, or block a command; use Post interceptors for side effects after persistence.", + "items": { + "$ref": "command-interceptor-descriptor.schema.json" + } + } + }, + "required": ["name"], + "additionalProperties": false, + "examples": [ + { + "name": "Acme.Crm.Customer", + "displayName": "Customers", + "displayProperty": "Name", + "properties": [ + { "name": "Name", "type": "string", "isRequired": true }, + { "name": "Email", "type": "string", "validators": [{ "type": "email" }] } + ] + } + ] +} diff --git a/schemas/low-code/definitions/entity-property-descriptor.schema.json b/schemas/low-code/definitions/entity-property-descriptor.schema.json new file mode 100644 index 00000000000..c4e85cf5f63 --- /dev/null +++ b/schemas/low-code/definitions/entity-property-descriptor.schema.json @@ -0,0 +1,101 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "entity-property-descriptor.schema.json", + "title": "EntityPropertyDescriptor", + "description": "Describes one dynamic entity property. Properties define persisted data fields, enum fields, foreign keys, upload fields, server-only fields, defaults, uniqueness, and validators.", + "markdownDescription": "AI guidance: use PascalCase property names. Use `type` for primitive fields, `type: \"enum\"` with `enumType` for enum fields, and a `foreignKey` object for lookup fields. FK property names should normally end with `Id`. Keep sensitive values `serverOnly: true`. Do not add legacy UI configuration here; page columns/filters and form fields own UI behavior.", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Stable PascalCase property name, unique within the entity. Examples: 'Name', 'EmailAddress', 'CustomerId', 'StartDate'.", + "minLength": 1 + }, + "type": { + "$ref": "entity-property-type.schema.json", + "description": "Primitive or special property type. If omitted, runtime treats the property as string. Use 'enum' only with enumType; use 'file'/'image' for first-class upload fields." + }, + "displayName": { + "type": "string", + "description": "Default display label for this property. Page columns and form fields can override it. Omit when the label can be derived from the property name.", + "minLength": 1 + }, + "enumType": { + "type": "string", + "description": "Name of a JSON-defined enum from top-level enums or a full type name for code enums. Required when type is 'enum'." + }, + "allowSetByClients": { + "type": "boolean", + "description": "Controls whether create/update clients may set the property. Use false for server-computed or protected fields that can still be returned to clients." + }, + "serverOnly": { + "type": "boolean", + "description": "When true, this property is completely hidden from clients, API responses, and UI definitions. Use for secrets, internal notes, hashes, or backend-only workflow state." + }, + "isMappedToDbField": { + "type": "boolean", + "description": "Whether this property is mapped to a database column. Keep true or omit for normal persisted fields. Use false for computed/transient fields supplied by scripts or backend logic." + }, + "defaultValue": { + "type": ["string", "null"], + "description": "Default value for new records. Stored as a string in model JSON and converted to the declared property type at runtime. Examples: '0' for int/enum, 'true' for boolean, '2026-05-18T09:00:00Z' for datetime." + }, + "isUnique": { + "type": "boolean", + "description": "Whether this property value must be unique across records of this entity. Use for codes, slugs, natural keys, and names only when duplicates are not allowed." + }, + "isRequired": { + "type": "boolean", + "description": "When true, the property is required/not nullable. This affects database schema, backend validation, and generated UI validation. Existing data may need defaults before turning this on." + }, + "foreignKey": { + "$ref": "foreign-key-descriptor.schema.json", + "description": "Foreign key/lookup relation. The current property's value stores the referenced entity id. The property name should usually be 'NameId', for example 'CustomerId'." + }, + "fileMaxSizeBytes": { + "type": "integer", + "description": "Maximum allowed file size in bytes for File and Image properties. Example: 5242880 for 5 MiB.", + "minimum": 1 + }, + "fileAllowedContentTypes": { + "type": "array", + "description": "Allowed MIME content types or wildcard patterns for File and Image properties. Examples: 'image/*', 'application/pdf'.", + "items": { + "type": "string", + "minLength": 1 + } + }, + "imageMaxWidth": { + "type": "integer", + "description": "Optional maximum image width in pixels.", + "minimum": 1 + }, + "imageMaxHeight": { + "type": "integer", + "description": "Optional maximum image height in pixels.", + "minimum": 1 + }, + "imageResizeMode": { + "type": "string", + "description": "How uploaded images should be resized when image dimensions are configured. 'fit' preserves the full image inside the bounds; 'fill' crops/fills the target bounds.", + "enum": ["fit", "fill"] + }, + "validators": { + "type": "array", + "description": "Backend/UI validators for this property. Use required, length, range, pattern, email, phone, url, or creditCard as appropriate. Duplicate required can be omitted when isRequired is true unless a custom message is needed.", + "items": { + "$ref": "validator-descriptor.schema.json" + } + } + }, + "required": [ + "name" + ], + "additionalProperties": false, + "examples": [ + { "name": "Name", "type": "string", "isRequired": true, "validators": [{ "type": "maxLength", "length": 128 }] }, + { "name": "Status", "type": "enum", "enumType": "Acme.Events.EventStatus", "defaultValue": "0" }, + { "name": "CustomerId", "foreignKey": { "entityName": "Acme.Crm.Customer", "displayPropertyName": "Name" } }, + { "name": "CoverImage", "type": "image", "fileAllowedContentTypes": ["image/*"], "fileMaxSizeBytes": 5242880, "imageResizeMode": "fit" } + ] +} diff --git a/schemas/low-code/definitions/entity-property-type.schema.json b/schemas/low-code/definitions/entity-property-type.schema.json new file mode 100644 index 00000000000..89d9018446a --- /dev/null +++ b/schemas/low-code/definitions/entity-property-type.schema.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "entity-property-type.schema.json", + "title": "EntityPropertyType", + "description": "Data type of an entity property. Use canonical lowercase values for new descriptors and MCP mutations; compatibility aliases are accepted for older descriptors.", + "markdownDescription": "Use canonical lowercase values in MCP/write payloads: `string`, `int`, `long`, `decimal`, `datetime`, `boolean`, `guid`, `enum`, `date`, `time`, `file`, `image`, or `money`. `string` stores text; `int`/`long` store whole numbers; `decimal` and `money` store numeric decimals; `datetime`, `date`, and `time` model temporal values; `boolean` stores true/false; `guid` stores GUID values; `enum` requires `enumType`; `file` and `image` store upload metadata/content through the low-code file pipeline. Legacy aliases such as `String`, `Int`, `dateTime`, and `DateTime` remain accepted by the schema for compatibility, but new payloads should not use .NET aliases like `Int32`.", + "type": "string", + "enum": [ + "string", + "String", + "int", + "Int", + "long", + "Long", + "decimal", + "Decimal", + "datetime", + "dateTime", + "DateTime", + "boolean", + "Boolean", + "guid", + "Guid", + "enum", + "Enum", + "date", + "Date", + "time", + "Time", + "file", + "File", + "image", + "Image", + "money", + "Money" + ], + "enumDescriptions": [ + "Text/string value.", + "Text/string value.", + "32-bit whole number.", + "32-bit whole number.", + "64-bit whole number.", + "64-bit whole number.", + "Decimal numeric value.", + "Decimal numeric value.", + "Date and time value.", + "Date and time value.", + "Date and time value.", + "Boolean true/false value.", + "Boolean true/false value.", + "GUID/UUID value.", + "GUID/UUID value.", + "Integer-backed enum value; set enumType.", + "Integer-backed enum value; set enumType.", + "Date-only value.", + "Date-only value.", + "Time-only value.", + "Time-only value.", + "Uploaded file field.", + "Uploaded file field.", + "Uploaded image field with optional dimension constraints.", + "Uploaded image field with optional dimension constraints.", + "Money amount rendered with money-aware controls.", + "Money amount rendered with money-aware controls." + ] +} diff --git a/schemas/low-code/definitions/enum-descriptor.schema.json b/schemas/low-code/definitions/enum-descriptor.schema.json new file mode 100644 index 00000000000..129725d5ca3 --- /dev/null +++ b/schemas/low-code/definitions/enum-descriptor.schema.json @@ -0,0 +1,56 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "enum-descriptor.schema.json", + "title": "EnumDescriptor", + "description": "Describes an integer-backed enum definition for use in entity properties and select/kanban UI.", + "markdownDescription": "AI guidance: define enums before entity properties that reference them. Use a stable namespace-style `name` such as `Acme.Events.EventStatus`. Each value name should be PascalCase and unique within the enum. Use explicit integer `value`s for stable persistence; do not reorder or renumber after data exists.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Stable unique enum name. Use a namespace-style name if the enum belongs to a module/domain, for example 'Acme.Events.EventStatus'.", + "minLength": 1 + }, + "values": { + "type": "array", + "description": "Ordered list of integer-backed enum values. Values are stored as integers; names are used for display and model readability.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "PascalCase enum value name, for example 'Draft', 'Scheduled', or 'Completed'." + }, + "value": { + "type": "integer", + "description": "Stable integer value. Prefer explicit values starting at 0 so generated model JSON is deterministic." + } + }, + "required": [ + "name" + ], + "additionalProperties": false + }, + "minItems": 1 + } + }, + "required": [ + "name", + "values" + ], + "additionalProperties": false, + "examples": [ + { + "name": "Acme.Events.EventStatus", + "values": [ + { "name": "Draft", "value": 0 }, + { "name": "Scheduled", "value": 1 }, + { "name": "Completed", "value": 2 } + ] + } + ] +} diff --git a/schemas/low-code/definitions/foreign-key-descriptor.schema.json b/schemas/low-code/definitions/foreign-key-descriptor.schema.json new file mode 100644 index 00000000000..358bdee4ee4 --- /dev/null +++ b/schemas/low-code/definitions/foreign-key-descriptor.schema.json @@ -0,0 +1,60 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "foreign-key-descriptor.schema.json", + "title": "ForeignKeyDescriptor", + "description": "Describes a foreign key/lookup relationship from the owning entity property to another entity or reference entity.", + "markdownDescription": "AI guidance: put `foreignKey` on the property that stores the related record id. The property name should usually end with `Id`, for example `CustomerId`. `entityName` must match a model entity name or a registered code/reference entity such as `Volo.Abp.Identity.IdentityUser`. Use `displayPropertyName` when the target display field is not obvious. Use `dependsOn` for cascading dropdowns such as City filtered by Country. Use `access` only for reverse access from the referenced entity side: `none`, `view`, or `edit`. Do not use `lookup` as `access`; lookup is a form field/control type.", + "type": "object", + "properties": { + "entityName": { + "type": "string", + "description": "Full name of the related entity or registered reference entity. Must match an entity descriptor name or a known code/reference entity.", + "minLength": 1 + }, + "displayPropertyName": { + "type": "string", + "description": "Property name to display from the related entity in lookups/autocomplete. Omit to use the target entity displayProperty.", + "minLength": 1 + }, + "access": { + "type": "string", + "description": "Access level for managing this relation from the referenced entity side. 'none' means no reverse access; 'view' allows the referenced entity page to show related records; 'edit' allows managing related records from the referenced side.", + "enum": ["none", "None", "view", "View", "edit", "Edit"], + "default": "none" + }, + "dependsOn": { + "type": "object", + "description": "Cascading dependency: filter this FK lookup by the value of another FK property on the same owning entity. Example: CityId depends on CountryId and filters City.CountryId.", + "properties": { + "propertyName": { + "type": "string", + "description": "Property name on the owning entity whose value provides the filter (for example 'CountryId' on an Address entity).", + "minLength": 1 + }, + "filterPropertyName": { + "type": "string", + "description": "Property name on the target lookup entity to filter by (for example 'CountryId' on City).", + "minLength": 1 + } + }, + "required": ["propertyName", "filterPropertyName"], + "additionalProperties": false + } + }, + "required": ["entityName"], + "additionalProperties": false, + "examples": [ + { + "entityName": "Acme.Crm.Customer", + "displayPropertyName": "Name" + }, + { + "entityName": "Acme.Geo.City", + "displayPropertyName": "Name", + "dependsOn": { + "propertyName": "CountryId", + "filterPropertyName": "CountryId" + } + } + ] +} diff --git a/schemas/low-code/definitions/form-descriptor.schema.json b/schemas/low-code/definitions/form-descriptor.schema.json new file mode 100644 index 00000000000..f8bec6dfc8e --- /dev/null +++ b/schemas/low-code/definitions/form-descriptor.schema.json @@ -0,0 +1,79 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "form-descriptor.schema.json", + "title": "FormDescriptor", + "description": "Describes a named create/edit form definition bound to one entity.", + "markdownDescription": "AI guidance: a form is referenced by page `formName`, `createFormName`, or `editFormName`. Keep `entityName` aligned with the page entityName. Define all fields in `fields`, then place every visible field in `layout.tabs[].groups[].rows[].cells[]` by field id. Use form `rules` for conditional visibility/enabled state; use entity validators for core data validation.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Stable unique form identifier. Prefer kebab-case, for example 'customer-form' or 'event-form'. Pages reference this value.", + "minLength": 1 + }, + "entityName": { + "type": "string", + "description": "Full name of the entity this form is bound to. Must match the page entityName that uses this form.", + "minLength": 1 + }, + "enableSaveAndNew": { + "type": "boolean", + "description": "Whether the form should expose a Save and New action in addition to the standard save action. Useful for rapid data entry.", + "default": false + }, + "fields": { + "type": "array", + "description": "Flat list of all fields in this form. Field ids must be unique within the form; bound fields should point to properties on entityName.", + "items": { + "$ref": "form-field-descriptor.schema.json" + } + }, + "layout": { + "$ref": "form-layout-descriptor.schema.json", + "description": "Visual layout for the fields. Every layout cell fieldId must refer to a field in fields." + }, + "rules": { + "type": "array", + "description": "Conditional rules for field/group visibility, enabled state, and value setting. Use for simple client-side form behavior.", + "items": { + "$ref": "form-rule-descriptor.schema.json" + } + } + }, + "required": ["name", "entityName", "fields", "layout"], + "additionalProperties": false, + "examples": [ + { + "name": "event-form", + "entityName": "Acme.Events.Event", + "fields": [ + { "id": "title", "label": "Title", "type": "text", "binding": "Title" }, + { "id": "status", "label": "Status", "type": "select", "binding": "Status", "enumType": "Acme.Events.EventStatus" } + ], + "layout": { + "tabs": [ + { + "id": "main", + "title": "Main", + "isDefault": true, + "groups": [ + { + "id": "details", + "title": "Details", + "isDefault": true, + "rows": [ + { "cells": [{ "fieldId": "title", "colSpan": 4 }] }, + { "cells": [{ "fieldId": "status", "colSpan": 2 }] } + ] + } + ] + } + ] + } + } + ] +} diff --git a/schemas/low-code/definitions/form-field-descriptor.schema.json b/schemas/low-code/definitions/form-field-descriptor.schema.json new file mode 100644 index 00000000000..fd5f731e198 --- /dev/null +++ b/schemas/low-code/definitions/form-field-descriptor.schema.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "form-field-descriptor.schema.json", + "title": "FormFieldDescriptor", + "description": "Describes a single field in a form. A field may be bound to an entity property or unbound for computed/display-only UI.", + "markdownDescription": "AI guidance: use a stable camelCase `id` for each field. For ordinary data entry, set `binding` to an entity property and choose a field `type` compatible with that property. For enum selects, set `type: \"select\"` and `enumType`. For FK lookups, use `type: \"lookup\"` and bind to the FK property. Put fields into layout cells by id.", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for this field within the form. Prefer camelCase, for example 'title' or 'customerId'. Layout cells and rules reference this id.", + "minLength": 1 + }, + "label": { + "type": "string", + "description": "Display label for the field.", + "minLength": 1 + }, + "type": { + "$ref": "form-field-type.schema.json", + "description": "Visual/input control type. Choose a type compatible with the bound entity property." + }, + "binding": { + "type": ["string", "null"], + "description": "Entity property name to bind to, or null/omitted for unbound fields. Supports dotted paths like 'Parent.Name' for related entity display where supported." + }, + "enumType": { + "type": "string", + "description": "Enum name for select fields bound to enum properties. Must match the entity property's enumType or a known code enum." + }, + "defaultValue": { + "description": "Default field value used by the UI when creating a new record. Prefer entity property defaultValue for persisted defaults." + }, + "placeholder": { + "type": "string", + "description": "Placeholder text for the input" + }, + "helpText": { + "type": "string", + "description": "Help text displayed below the field" + }, + "readOnly": { + "type": "boolean", + "description": "Whether the field is read-only in the form UI. This does not by itself protect backend writes; use allowSetByClients/serverOnly for security.", + "default": false + }, + "modeVisibility": { + "type": "string", + "enum": ["both", "Both", "createOnly", "CreateOnly", "editOnly", "EditOnly"], + "description": "Controls in which form mode the field is visible: both, createOnly, or editOnly.", + "default": "both" + }, + "validations": { + "type": "array", + "description": "Form-level validation rules that supplement entity-level validators. Use when validation is specific to this form.", + "items": { + "$ref": "validator-descriptor.schema.json" + } + } + }, + "required": ["id", "label", "type"], + "additionalProperties": false, + "examples": [ + { "id": "title", "label": "Title", "type": "text", "binding": "Title", "validations": [{ "type": "required" }] }, + { "id": "status", "label": "Status", "type": "select", "binding": "Status", "enumType": "Acme.Events.EventStatus" }, + { "id": "customerId", "label": "Customer", "type": "lookup", "binding": "CustomerId" } + ] +} diff --git a/schemas/low-code/definitions/form-field-type.schema.json b/schemas/low-code/definitions/form-field-type.schema.json new file mode 100644 index 00000000000..2b0c5630f2f --- /dev/null +++ b/schemas/low-code/definitions/form-field-type.schema.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "form-field-type.schema.json", + "title": "FormFieldType", + "description": "Available form field control types. Use canonical lowercase values for new descriptors and MCP mutations; compatibility aliases are accepted for older descriptors.", + "markdownDescription": "Use canonical lowercase values in MCP/write payloads: `text`, `textarea`, `number`, `checkbox`, `date`, `datetime`, `select`, `lookup`, `guid`, `computed`, `time`, `file`, `image`, or `money`. `text`/`textarea` are for strings, `number` for numeric values, `checkbox` for boolean, `date`/`datetime`/`time` for temporal values, `select` for enum values, `lookup` for foreign keys, `guid` for GUID input/display, `computed` for unbound calculated/display fields, `file` and `image` for upload fields, and `money` for money/decimal amount input. There is no `email` field type; use `text` plus validations where needed. Legacy PascalCase aliases remain accepted by the schema for compatibility.", + "type": "string", + "enum": [ + "text", + "Text", + "textarea", + "Textarea", + "number", + "Number", + "checkbox", + "Checkbox", + "date", + "Date", + "datetime", + "DateTime", + "select", + "Select", + "lookup", + "Lookup", + "guid", + "Guid", + "computed", + "Computed", + "time", + "Time", + "file", + "File", + "image", + "Image", + "money", + "Money" + ], + "enumDescriptions": [ + "Single-line text input.", + "Single-line text input.", + "Multi-line text input.", + "Multi-line text input.", + "Numeric input.", + "Numeric input.", + "Boolean checkbox.", + "Boolean checkbox.", + "Date-only input.", + "Date-only input.", + "Date and time input.", + "Date and time input.", + "Enum/select input.", + "Enum/select input.", + "Foreign key lookup/autocomplete input.", + "Foreign key lookup/autocomplete input.", + "GUID input/display.", + "GUID input/display.", + "Unbound computed/display field.", + "Unbound computed/display field.", + "Time-only input.", + "Time-only input.", + "File upload field.", + "File upload field.", + "Image upload field.", + "Image upload field.", + "Money amount input.", + "Money amount input." + ] +} diff --git a/schemas/low-code/definitions/form-layout-descriptor.schema.json b/schemas/low-code/definitions/form-layout-descriptor.schema.json new file mode 100644 index 00000000000..6d3eb42dc00 --- /dev/null +++ b/schemas/low-code/definitions/form-layout-descriptor.schema.json @@ -0,0 +1,128 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "form-layout-descriptor.schema.json", + "title": "FormLayoutDescriptor", + "description": "Describes the visual layout of a form as tabs, groups, rows, and field cells.", + "markdownDescription": "AI guidance: the layout is a tree: tabs -> groups -> rows -> cells. Each cell `fieldId` must reference a field from the form's `fields` array. Use `colSpan` 4 for full-width fields, 2+2 for two columns, or 1+1+1+1 for four compact controls. The total effective width in a row should not exceed 4.", + "type": "object", + "properties": { + "tabs": { + "type": "array", + "description": "Ordered list of tabs in the form. Use one default tab named 'main' for simple forms.", + "minItems": 1, + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for this tab. Prefer camelCase/kebab-case such as 'main' or 'advanced'.", + "minLength": 1 + }, + "title": { + "type": "string", + "description": "Display title for the tab", + "minLength": 1 + }, + "isDefault": { + "type": "boolean", + "description": "Whether this is the default tab. The designer uses the default tab as the safe target for orphaned fields.", + "default": false + }, + "groups": { + "type": "array", + "description": "Ordered list of groups within this tab. Use one default group for simple forms.", + "minItems": 1, + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for this group. Rules can target group ids.", + "minLength": 1 + }, + "title": { + "type": ["string", "null"], + "description": "Optional display title for the group. Use null or omit for an untitled group." + }, + "isDefault": { + "type": "boolean", + "description": "Whether this is the default group. The designer uses the default group as the safe target for orphaned fields.", + "default": false + }, + "rows": { + "type": "array", + "description": "Ordered list of layout rows; each row contains one or more cells placed side-by-side.", + "items": { + "type": "object", + "properties": { + "cells": { + "type": "array", + "description": "Fields placed side-by-side in this row. The sum of colSpan values should not exceed 4.", + "minItems": 1, + "items": { + "type": "object", + "properties": { + "fieldId": { + "type": "string", + "description": "Reference to a field id in the form's fields array. Every field shown in the layout needs a matching field descriptor.", + "minLength": 1 + }, + "colSpan": { + "type": "integer", + "description": "Number of grid columns this field spans from 1 to 4. Use 4 for full-width fields.", + "minimum": 1, + "maximum": 4, + "default": 4 + }, + "colStart": { + "type": "integer", + "description": "Starting grid column from 1 to 4. Omit or null to auto-place after the previous cell.", + "minimum": 1, + "maximum": 4 + } + }, + "required": ["fieldId"], + "additionalProperties": false + } + } + }, + "required": ["cells"], + "additionalProperties": false + } + } + }, + "required": ["id", "rows"], + "additionalProperties": false + } + } + }, + "required": ["id", "title", "groups"], + "additionalProperties": false + } + } + }, + "required": ["tabs"], + "additionalProperties": false, + "examples": [ + { + "tabs": [ + { + "id": "main", + "title": "Main", + "isDefault": true, + "groups": [ + { + "id": "details", + "title": "Details", + "isDefault": true, + "rows": [ + { "cells": [{ "fieldId": "title", "colSpan": 4 }] }, + { "cells": [{ "fieldId": "startDate", "colSpan": 2 }, { "fieldId": "endDate", "colSpan": 2 }] } + ] + } + ] + } + ] + } + ] +} diff --git a/schemas/low-code/definitions/form-rule-descriptor.schema.json b/schemas/low-code/definitions/form-rule-descriptor.schema.json new file mode 100644 index 00000000000..f558b6bb1d0 --- /dev/null +++ b/schemas/low-code/definitions/form-rule-descriptor.schema.json @@ -0,0 +1,82 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "form-rule-descriptor.schema.json", + "title": "FormRuleDescriptor", + "description": "Describes a conditional form rule with one or more actions that execute when the condition is met.", + "markdownDescription": "AI guidance: use rules for simple client-side behavior such as hiding a group when a checkbox is false, disabling a field after a status is selected, or setting a default value. `condition.fieldId` and every action `targetId` must reference existing field/group ids. Rules are not security boundaries; enforce sensitive behavior with backend validation/interceptors too.", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for this rule. Prefer kebab-case or camelCase such as 'show-archive-reason'.", + "minLength": 1 + }, + "name": { + "type": "string", + "description": "Human-readable name for this rule, used by designers/documentation." + }, + "condition": { + "type": "object", + "description": "The condition that triggers this rule. For isEmpty/isNotEmpty, omit value.", + "properties": { + "fieldId": { + "type": "string", + "description": "The field whose value is evaluated. Must match a field id in the same form.", + "minLength": 1 + }, + "operator": { + "type": "string", + "enum": ["equals", "notEquals", "isEmpty", "isNotEmpty"], + "description": "Comparison operator. Use equals/notEquals with value; use isEmpty/isNotEmpty without value." + }, + "value": { + "description": "The value to compare against (not used for isEmpty/isNotEmpty)" + } + }, + "required": ["fieldId", "operator"], + "additionalProperties": false + }, + "actions": { + "type": "array", + "description": "Actions to perform when the condition is met. Actions are executed in order.", + "minItems": 1, + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["hide", "show", "disable", "enable", "setValue"], + "description": "The action type. hide/show/disable/enable target fields or groups; setValue targets fields." + }, + "targetType": { + "type": "string", + "enum": ["field", "group"], + "description": "Whether the target is a field or a group." + }, + "targetId": { + "type": "string", + "description": "The id of the target field or group. Must exist in this form's fields or layout groups.", + "minLength": 1 + }, + "value": { + "description": "The value to set. Used only for setValue actions." + } + }, + "required": ["type", "targetType", "targetId"], + "additionalProperties": false + } + } + }, + "required": ["id", "condition", "actions"], + "additionalProperties": false, + "examples": [ + { + "id": "show-archive-reason", + "name": "Show archive reason", + "condition": { "fieldId": "status", "operator": "equals", "value": 3 }, + "actions": [ + { "type": "show", "targetType": "field", "targetId": "archiveReason" } + ] + } + ] +} diff --git a/schemas/low-code/definitions/interceptor-type.schema.json b/schemas/low-code/definitions/interceptor-type.schema.json new file mode 100644 index 00000000000..49ce6eca3a0 --- /dev/null +++ b/schemas/low-code/definitions/interceptor-type.schema.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "interceptor-type.schema.json", + "title": "InterceptorType", + "description": "When an entity command interceptor runs. Prefer PascalCase values shown here.", + "markdownDescription": "`Pre` runs before the command is persisted and can block with `globalError`. `Post` runs after the command succeeds and is best for logging, notifications, publishing events, or enqueueing jobs. `Replace` is reserved for replacing command behavior where supported and should be avoided unless the host explicitly supports it.", + "type": "string", + "enum": [ + "Pre", + "pre", + "Post", + "post", + "Replace", + "replace" + ], + "enumDescriptions": [ + "Before persistence; can block with globalError.", + "Before persistence; can block with globalError.", + "After successful persistence; use for side effects.", + "After successful persistence; use for side effects.", + "Replace command behavior where supported.", + "Replace command behavior where supported." + ] +} diff --git a/schemas/low-code/definitions/page-column-descriptor.schema.json b/schemas/low-code/definitions/page-column-descriptor.schema.json new file mode 100644 index 00000000000..ebf0073e4af --- /dev/null +++ b/schemas/low-code/definitions/page-column-descriptor.schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "page-column-descriptor.schema.json", + "title": "PageColumnDescriptor", + "description": "Describes a property displayed by an entity page list, card, calendar event, or gallery item.", + "markdownDescription": "AI guidance: use page columns/card fields to control runtime page visibility. Each `propertyName` must match a property on the page entity. Keep this separate from entity property definitions so the same entity can have different views on different pages.", + "type": "object", + "properties": { + "propertyName": { + "type": "string", + "description": "Property displayed by this column/card field. Must match a property on the page entityName.", + "minLength": 1 + }, + "label": { + "type": "string", + "description": "Optional page-specific label override. Omit to use the property displayName/name.", + "minLength": 1 + }, + "order": { + "type": "integer", + "description": "Display order. Lower values appear first.", + "default": 0 + }, + "exportOrder": { + "type": "integer", + "description": "Optional export order. Lower values appear first in Excel, CSV, download-link columns, and file bundles. Omit to reuse display order." + }, + "width": { + "type": "string", + "description": "Optional CSS width for tabular columns, for example '160px', '12rem', or '20%'.", + "minLength": 1 + }, + "visible": { + "type": "boolean", + "description": "Whether the field is visible by default on this page.", + "default": true + }, + "exportable": { + "type": "boolean", + "description": "Whether the field can be exported from this page.", + "default": true + } + }, + "required": ["propertyName"], + "additionalProperties": false, + "examples": [ + { "propertyName": "Title", "label": "Title", "order": 0, "exportOrder": 0, "width": "240px", "visible": true }, + { "propertyName": "InternalNotes", "visible": false, "exportable": false } + ] +} diff --git a/schemas/low-code/definitions/page-descriptor.schema.json b/schemas/low-code/definitions/page-descriptor.schema.json new file mode 100644 index 00000000000..3b5c1a2fcd1 --- /dev/null +++ b/schemas/low-code/definitions/page-descriptor.schema.json @@ -0,0 +1,260 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "page-descriptor.schema.json", + "title": "PageDescriptor", + "description": "Describes a runtime UI page. Pages create menu items and choose how an entity or dashboard is rendered.", + "markdownDescription": "AI guidance: `name` is the stable route/menu key and should be URL-safe kebab-case (for example `customers` or `event-calendar`). `title` is user-facing. For entity pages, set `entityName` to an existing entity. Configure list/gallery/card visibility with `columns`, filtering with `filters`, and create/edit UI with form names. For `dashboard` pages, provide `dashboard` and omit entity-only fields unless intentionally supported by the runtime. Do not put page-only settings on entity properties.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Stable URL-safe page identifier. Prefer kebab-case, for example 'customers', 'event-calendar', or 'sales-dashboard'. This becomes part of the runtime route and is referenced by saveSuccessPageName.", + "minLength": 1 + }, + "title": { + "type": "string", + "description": "Display title for the menu item and page header.", + "minLength": 1 + }, + "icon": { + "type": "string", + "description": "FontAwesome icon class for the menu item, for example 'fa-solid fa-users'." + }, + "type": { + "$ref": "page-type.schema.json" + }, + "entityName": { + "type": "string", + "description": "Full name of the root entity this page displays. Required for dataGrid, kanban, calendar, gallery, and form pages. Usually omitted for dashboard pages.", + "minLength": 1 + }, + "groupByProperty": { + "type": "string", + "description": "Property name to group entities by. Required for kanban pages. Must reference a property on entityName, preferably an enum/status property with a small fixed set of values.", + "minLength": 1 + }, + "calendarStartProperty": { + "type": "string", + "description": "Date or DateTime property used as the start date for calendar pages. Required for calendar pages.", + "minLength": 1 + }, + "calendarEndProperty": { + "type": "string", + "description": "Optional Date or DateTime property used as the end date for calendar pages. Use when events can span a date range.", + "minLength": 1 + }, + "calendarTimeProperty": { + "type": "string", + "description": "Optional Time property used as the start time for calendar pages when the start date is date-only or time is stored separately.", + "minLength": 1 + }, + "calendarDurationProperty": { + "type": "string", + "description": "Optional numeric property used as duration in minutes for calendar pages. Use this instead of calendarEndProperty when records store duration.", + "minLength": 1 + }, + "galleryImageProperty": { + "type": "string", + "description": "Optional Image property used as the cover image for gallery pages. The property should have entity property type image.", + "minLength": 1 + }, + "defaultSortProperty": { + "type": "string", + "description": "Optional property used as the default sorting field when the client does not send explicit sorting. Must reference a property on entityName.", + "minLength": 1 + }, + "defaultSortDescending": { + "type": "boolean", + "description": "Whether the default sort property is sorted descending.", + "default": false + }, + "defaultFileExportMode": { + "type": "integer", + "enum": [0, 1, 2], + "description": "Default file export mode for file/image columns. 0 exports file names, 1 exports metadata columns, and 2 exports download-link columns." + }, + "allowFileBundleExport": { + "type": "boolean", + "description": "Whether file bundle export is available for this page.", + "default": true + }, + "columns": { + "type": "array", + "description": "Page-owned column/card field configuration. Use for dataGrid, kanban card fields, calendar event fields, and gallery card fields. Each propertyName must reference a property on entityName.", + "items": { + "$ref": "page-column-descriptor.schema.json" + } + }, + "filters": { + "type": "array", + "description": "Page-owned filter configuration for filterable page types. Each propertyName must reference a property on entityName. Use this instead of legacy property-level UI filter settings.", + "items": { + "$ref": "page-filter-descriptor.schema.json" + } + }, + "order": { + "type": "integer", + "description": "Menu sort order (lower values appear first)", + "default": 0 + }, + "formName": { + "type": "string", + "description": "Name of the form to render. Required when type is 'form'. Must match a form descriptor whose entityName matches this page entityName.", + "minLength": 1 + }, + "createFormName": { + "type": "string", + "description": "Name of the form to use when creating records from dataGrid, kanban, calendar, or gallery pages. Must match a form descriptor for the same entity." + }, + "editFormName": { + "type": "string", + "description": "Name of the form to use when editing records from dataGrid, kanban, calendar, or gallery pages. Must match a form descriptor for the same entity." + }, + "createFormDisplay": { + "type": "string", + "enum": ["modal", "Modal", "page", "Page"], + "description": "How to display the create form. Use 'modal' for quick CRUD; use 'page' for longer forms or when deep links are desired.", + "default": "modal" + }, + "editFormDisplay": { + "type": "string", + "enum": ["modal", "Modal", "page", "Page"], + "description": "How to display the edit form. Use 'modal' for quick CRUD; use 'page' for longer forms or when deep links are desired.", + "default": "modal" + }, + "saveSuccessNavigation": { + "type": "string", + "enum": ["stay", "page", "url"], + "description": "Navigation behavior after a standalone form page saves successfully. 'stay' keeps the user on the form page; 'page' navigates to saveSuccessPageName; 'url' navigates to saveSuccessUrl.", + "default": "stay" + }, + "saveSuccessPageName": { + "type": "string", + "description": "Existing page name to open after a form page saves successfully when saveSuccessNavigation is 'page'.", + "minLength": 1 + }, + "saveSuccessUrl": { + "type": "string", + "description": "URL or application path to open after a form page saves successfully when saveSuccessNavigation is 'url'.", + "minLength": 1 + }, + "dashboard": { + "$ref": "dashboard-descriptor.schema.json", + "description": "Dashboard layout and visualizations. Required only when type is dashboard." + }, + "group": { + "type": "string", + "description": "Name of the page group this page belongs to. Must match pageGroups[].name. Omit for root-level pages.", + "minLength": 1 + }, + "permissionConfig": { + "$ref": "page-permission-config.schema.json", + "description": "Optional page operation permission overrides. Omit operations to use generated defaults." + } + }, + "required": ["name", "title", "type"], + "allOf": [ + { + "if": { + "properties": { "type": { "enum": ["dataGrid", "DataGrid"] } } + }, + "then": { + "required": ["entityName"] + } + }, + { + "if": { + "properties": { "type": { "enum": ["kanban", "Kanban"] } } + }, + "then": { + "required": ["entityName", "groupByProperty"] + } + }, + { + "if": { + "properties": { "type": { "enum": ["calendar", "Calendar"] } } + }, + "then": { + "required": ["entityName", "calendarStartProperty"] + } + }, + { + "if": { + "properties": { "type": { "enum": ["gallery", "Gallery"] } } + }, + "then": { + "required": ["entityName"] + } + }, + { + "if": { + "properties": { "type": { "enum": ["form", "Form"] } } + }, + "then": { + "required": ["entityName", "formName"] + } + }, + { + "if": { + "properties": { "type": { "enum": ["dashboard", "Dashboard"] } } + }, + "then": { + "required": ["dashboard"] + } + } + ], + "additionalProperties": false, + "examples": [ + { + "name": "events", + "title": "Events", + "type": "dataGrid", + "entityName": "Acme.Events.Event", + "columns": [ + { "propertyName": "Title", "order": 0 }, + { "propertyName": "Status", "order": 1 } + ], + "filters": [ + { "propertyName": "Title", "control": "text", "defaultOperator": "contains" } + ], + "createFormName": "event-form", + "editFormName": "event-form" + }, + { + "name": "event-calendar", + "title": "Event Calendar", + "type": "calendar", + "entityName": "Acme.Events.Event", + "calendarStartProperty": "StartDate", + "calendarEndProperty": "EndDate" + }, + { + "name": "event-dashboard", + "title": "Event Dashboard", + "type": "dashboard", + "dashboard": { + "rows": [ + { + "items": [ + { + "name": "events-by-status", + "type": "chart", + "title": "Events by Status", + "entityName": "Acme.Events.Event", + "chart": { + "chartType": "bar", + "xAxis": { "property": "Status" }, + "yAxis": [{ "aggregation": "count", "label": "Events" }] + } + } + ] + } + ] + } + } + ] +} diff --git a/schemas/low-code/definitions/page-filter-descriptor.schema.json b/schemas/low-code/definitions/page-filter-descriptor.schema.json new file mode 100644 index 00000000000..ed63ba0653d --- /dev/null +++ b/schemas/low-code/definitions/page-filter-descriptor.schema.json @@ -0,0 +1,119 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "page-filter-descriptor.schema.json", + "title": "PageFilterDescriptor", + "description": "Describes a runtime filter control for an entity page.", + "markdownDescription": "AI guidance: each filter must point to a page entity property. Use `control: \"auto\"` unless a specific control is needed. Use text/contains for string search, range/between for numeric values, dateRange/timeRange for temporal values, select/multiSelect for enums, lookup for foreign keys, and exists for null checks. Do not use the legacy `operator` property; use `defaultOperator`.", + "type": "object", + "properties": { + "propertyName": { + "type": "string", + "description": "Property filtered by this control. Must match a property on the page entityName.", + "minLength": 1 + }, + "label": { + "type": "string", + "description": "Optional page-specific label override. Omit to use the property displayName/name.", + "minLength": 1 + }, + "order": { + "type": "integer", + "description": "Filter display order. Lower values appear first.", + "default": 0 + }, + "visible": { + "type": "boolean", + "description": "Whether the filter is shown at runtime", + "default": true + }, + "control": { + "type": "string", + "description": "Runtime control used by the filter. 'auto' selects based on property type; choose explicit controls for predictable generated UI.", + "enum": ["auto", "text", "range", "dateRange", "timeRange", "select", "multiSelect", "lookup", "exists"], + "default": "auto" + }, + "defaultOperator": { + "type": "string", + "description": "Default operator applied by this filter. Use 'contains' for text search, 'equal' for enum/FK exact matches, 'between' for ranges, and 'default' to let runtime choose.", + "enum": [ + "default", + "equal", + "notEqual", + "contains", + "notContains", + "startsWith", + "endsWith", + "greaterThan", + "greaterThanOrEqual", + "lessThan", + "lessThanOrEqual", + "between", + "hasValue", + "isNull", + "isNotNull", + "in", + "notIn" + ] + }, + "allowedOperators": { + "type": "array", + "description": "Operators the runtime filter UI allows users to choose. Omit to let the runtime choose based on property type/control.", + "items": { + "type": "string", + "enum": [ + "default", + "equal", + "notEqual", + "contains", + "notContains", + "startsWith", + "endsWith", + "greaterThan", + "greaterThanOrEqual", + "lessThan", + "lessThanOrEqual", + "between", + "hasValue", + "isNull", + "isNotNull", + "in", + "notIn" + ] + }, + "uniqueItems": true + }, + "defaultValue": { + "description": "Optional default filter value applied when the page first loads. Shape depends on control/operator." + }, + "placeholder": { + "type": "string", + "description": "Optional runtime input placeholder" + }, + "helpText": { + "type": "string", + "description": "Optional runtime help text" + }, + "allowMultipleValues": { + "type": "boolean", + "description": "Whether the filter can submit multiple values. Useful with multiSelect/in/notIn.", + "default": false + }, + "clearable": { + "type": "boolean", + "description": "Whether runtime users can clear the filter.", + "default": true + }, + "initiallyExpanded": { + "type": "boolean", + "description": "Whether the runtime filter panel opens expanded.", + "default": false + } + }, + "required": ["propertyName"], + "additionalProperties": false, + "examples": [ + { "propertyName": "Title", "control": "text", "defaultOperator": "contains", "placeholder": "Search title" }, + { "propertyName": "Status", "control": "select", "defaultOperator": "equal", "clearable": true }, + { "propertyName": "StartDate", "control": "dateRange", "defaultOperator": "between" } + ] +} diff --git a/schemas/low-code/definitions/page-group-descriptor.schema.json b/schemas/low-code/definitions/page-group-descriptor.schema.json new file mode 100644 index 00000000000..c142f45500a --- /dev/null +++ b/schemas/low-code/definitions/page-group-descriptor.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "page-group-descriptor.schema.json", + "title": "PageGroupDescriptor", + "description": "Describes a menu group/folder that can contain pages and sub-groups.", + "markdownDescription": "AI guidance: create page groups when several pages belong to the same feature area. Pages reference groups by `group`. Nested groups reference parent groups by `parent`. Use stable kebab-case names and concise user-facing titles.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Unique URL-safe identifier for the group. Prefer kebab-case, for example 'crm' or 'content-studio'.", + "minLength": 1 + }, + "title": { + "type": "string", + "description": "Display title for the menu group.", + "minLength": 1 + }, + "icon": { + "type": "string", + "description": "FontAwesome icon class, for example 'fa-solid fa-folder' or 'fa-solid fa-calendar-days'." + }, + "order": { + "type": "integer", + "description": "Sort order within the parent level (lower values appear first)", + "default": 0 + }, + "parent": { + "type": "string", + "description": "Name of the parent group for nesting. Must match another pageGroups[].name. Omit for root-level groups.", + "minLength": 1 + } + }, + "required": ["name", "title"], + "additionalProperties": false, + "examples": [ + { "name": "events", "title": "Events", "icon": "fa-solid fa-calendar-days", "order": 10 }, + { "name": "event-admin", "title": "Admin", "parent": "events", "order": 20 } + ] +} diff --git a/schemas/low-code/definitions/page-permission-config.schema.json b/schemas/low-code/definitions/page-permission-config.schema.json new file mode 100644 index 00000000000..7ae15314029 --- /dev/null +++ b/schemas/low-code/definitions/page-permission-config.schema.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "page-permission-config.schema.json", + "title": "PagePermissionConfig", + "description": "Permission configuration for a page's operations. Only overridden values are stored; omitted values use auto-generated defaults based on the page.", + "markdownDescription": "AI guidance: each operation can be `default`, `public`, `authenticated`, or a permission name. Omit an operation to use runtime-generated defaults. Use `public` only for anonymous pages. Use `authenticated` for pages any logged-in user can view. Use explicit permission names for controlled business operations.", + "type": "object", + "properties": { + "view": { + "type": "string", + "description": "Permission for viewing the page. Can be a specific permission name, 'default', 'public', or 'authenticated'. Omit to use auto-generated default." + }, + "create": { + "type": "string", + "description": "Permission for create operation on this page. Can be a specific permission name, 'default', 'public', or 'authenticated'. Omit to use auto-generated default." + }, + "update": { + "type": "string", + "description": "Permission for update operation on this page. Can be a specific permission name, 'default', 'public', or 'authenticated'. Omit to use auto-generated default." + }, + "delete": { + "type": "string", + "description": "Permission for delete operation on this page. Can be a specific permission name, 'default', 'public', or 'authenticated'. Omit to use auto-generated default." + } + }, + "additionalProperties": false +} diff --git a/schemas/low-code/definitions/page-type.schema.json b/schemas/low-code/definitions/page-type.schema.json new file mode 100644 index 00000000000..679dea16f7b --- /dev/null +++ b/schemas/low-code/definitions/page-type.schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "page-type.schema.json", + "title": "PageType", + "description": "The runtime page renderer to use. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "markdownDescription": "`dataGrid` renders searchable/filterable tabular CRUD for an entity. `kanban` renders grouped cards and requires `groupByProperty`. `calendar` renders entity records on a calendar and requires `calendarStartProperty`. `gallery` renders visual cards and may use `galleryImageProperty`. `form` renders a standalone create/edit form page and requires `formName`. `dashboard` renders dashboard rows/visualizations and requires `dashboard`.", + "type": "string", + "enum": [ + "dataGrid", + "DataGrid", + "kanban", + "Kanban", + "calendar", + "Calendar", + "form", + "Form", + "dashboard", + "Dashboard", + "gallery", + "Gallery" + ], + "enumDescriptions": [ + "Entity data grid/list page.", + "Entity data grid/list page.", + "Entity kanban board grouped by an enum/status property.", + "Entity kanban board grouped by an enum/status property.", + "Entity calendar page using date/time properties.", + "Entity calendar page using date/time properties.", + "Standalone form page bound to a form descriptor.", + "Standalone form page bound to a form descriptor.", + "Dashboard page with chart/list/number visualizations.", + "Dashboard page with chart/list/number visualizations.", + "Entity gallery/card page, optionally image-backed.", + "Entity gallery/card page, optionally image-backed." + ] +} diff --git a/schemas/low-code/definitions/permission-descriptor.schema.json b/schemas/low-code/definitions/permission-descriptor.schema.json new file mode 100644 index 00000000000..f6391be4493 --- /dev/null +++ b/schemas/low-code/definitions/permission-descriptor.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "permission-descriptor.schema.json", + "title": "PermissionDescriptor", + "description": "Defines a custom permission created through the designer. Supports parent-child hierarchy.", + "markdownDescription": "AI guidance: use stable dot-separated permission names, for example `Acme.Events.Create`. Define a parent permission for the feature and child permissions for operations. Pages and endpoints can reference these names. Permission definitions only declare permissions; roles/users must still be granted permissions through permission management.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Unique dot-separated permission name, for example 'Acme.Events.Create'.", + "minLength": 1 + }, + "displayName": { + "type": "string", + "description": "Human-readable display name shown in permission management UI.", + "minLength": 1 + }, + "children": { + "type": "array", + "description": "Child permissions forming a hierarchy. Use for feature -> operation grouping.", + "items": { + "$ref": "permission-descriptor.schema.json" + } + } + }, + "required": ["name", "displayName"], + "additionalProperties": false, + "examples": [ + { + "name": "Acme.Events", + "displayName": "Events", + "children": [ + { "name": "Acme.Events.Create", "displayName": "Create events" }, + { "name": "Acme.Events.Update", "displayName": "Update events" }, + { "name": "Acme.Events.Delete", "displayName": "Delete events" } + ] + } + ] +} diff --git a/schemas/low-code/definitions/script-background-job-descriptor.schema.json b/schemas/low-code/definitions/script-background-job-descriptor.schema.json new file mode 100644 index 00000000000..9a186ad0839 --- /dev/null +++ b/schemas/low-code/definitions/script-background-job-descriptor.schema.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "script-background-job-descriptor.schema.json", + "title": "Script Background Job Descriptor", + "description": "Defines a named JavaScript background job handler.", + "markdownDescription": "AI guidance: use background jobs for asynchronous work that is explicitly enqueued by code/scripts, such as notifications, imports, or long-running recalculations. `name` is the job identifier used by enqueue calls. Keep scripts retry-safe and idempotent because background jobs may run more than once after failures.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Unique identifier for the background job. Scripts/enqueuers reference this name.", + "minLength": 1 + }, + "javascript": { + "type": "string", + "description": "JavaScript code to execute when the job is enqueued/run. Use context payload/job arguments where available and keep retry-safe.", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Optional description for designer documentation and model health context." + } + }, + "required": ["name", "javascript"], + "additionalProperties": false, + "examples": [ + { + "name": "SendEventReminder", + "javascript": "context.log('Sending event reminder job.');" + } + ] +} diff --git a/schemas/low-code/definitions/script-background-worker-descriptor.schema.json b/schemas/low-code/definitions/script-background-worker-descriptor.schema.json new file mode 100644 index 00000000000..8e670bd1292 --- /dev/null +++ b/schemas/low-code/definitions/script-background-worker-descriptor.schema.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "script-background-worker-descriptor.schema.json", + "title": "Script Background Worker Descriptor", + "description": "Defines a scheduled JavaScript background worker.", + "markdownDescription": "AI guidance: use background workers for recurring scheduled work. Provide either `period` in milliseconds or `cronExpression`; do not provide both unless the host explicitly chooses one. Keep scripts idempotent and short. Use workers for polling, cleanup, synchronization, or recurring summary generation.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Unique identifier for the background worker.", + "minLength": 1 + }, + "period": { + "type": "integer", + "description": "Execution period in milliseconds. Example: 300000 for every 5 minutes.", + "minimum": 1 + }, + "cronExpression": { + "type": ["string", "null"], + "description": "Cron expression for scheduler-backed providers. Omit it, set it to null, or leave it empty when the worker uses period-based scheduling." + }, + "javascript": { + "type": "string", + "description": "JavaScript code to execute when the worker runs. Keep idempotent; workers may overlap or retry depending on scheduler configuration.", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Optional description for designer documentation and model health context." + } + }, + "required": ["name", "javascript"], + "anyOf": [ + { "required": ["period"] }, + { + "required": ["cronExpression"], + "properties": { + "cronExpression": { + "type": "string", + "minLength": 1 + } + } + } + ], + "additionalProperties": false, + "examples": [ + { + "name": "CleanupExpiredEvents", + "period": 3600000, + "javascript": "context.log('Running expired event cleanup.');" + } + ] +} diff --git a/schemas/low-code/definitions/script-event-handler-descriptor.schema.json b/schemas/low-code/definitions/script-event-handler-descriptor.schema.json new file mode 100644 index 00000000000..da29d7fd4d2 --- /dev/null +++ b/schemas/low-code/definitions/script-event-handler-descriptor.schema.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "script-event-handler-descriptor.schema.json", + "title": "Script Event Handler Descriptor", + "description": "Defines a named JavaScript handler for a distributed event name.", + "markdownDescription": "AI guidance: use event handlers for asynchronous reactions to domain/application events. `eventName` must match the event name published by the application or another script. Keep handlers idempotent because distributed events can be retried. Scripts can use the host-provided context, including event payload/request data where available, db, current tenant/user, email, logging, event publishing, and job enqueue helpers.", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "Optional schema reference used when this descriptor is stored as a model descriptor file." + }, + "name": { + "type": "string", + "description": "Unique identifier for the handler. Prefer a descriptive name such as 'NotifyWhenEventCompleted'.", + "minLength": 1 + }, + "eventName": { + "type": "string", + "description": "Distributed event name to subscribe to. Must exactly match the publisher's event name.", + "minLength": 1 + }, + "javascript": { + "type": "string", + "description": "JavaScript code to execute when the event is received. Keep idempotent; avoid assuming one-time delivery.", + "minLength": 1 + }, + "description": { + "type": "string", + "description": "Optional description for designer documentation and model health context." + } + }, + "required": ["name", "eventName", "javascript"], + "additionalProperties": false, + "examples": [ + { + "name": "NotifyEventCompleted", + "eventName": "Acme.Events.EventCompleted", + "javascript": "context.log('Event completed handler executed.');" + } + ] +} diff --git a/schemas/low-code/definitions/validator-descriptor.schema.json b/schemas/low-code/definitions/validator-descriptor.schema.json new file mode 100644 index 00000000000..f81f51eb9a1 --- /dev/null +++ b/schemas/low-code/definitions/validator-descriptor.schema.json @@ -0,0 +1,96 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "validator-descriptor.schema.json", + "title": "ValidatorDescriptor", + "description": "A single backend/UI validator applied to an entity property or form field.", + "markdownDescription": "AI guidance: always set `type`. Use `required` for mandatory input, `minLength`/`maxLength`/`stringLength` for strings, `min`/`max`/`range` for numbers and comparable values, `pattern` or `regularExpression` for regex, and `email`, `phone`, `url`, or `creditCard` for common formats. Use lower-case validator names for new JSON. Add `message` only when a custom localized/user-facing message is needed.", + "type": "object", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "description": "Validator type. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "enum": [ + "required", + "Required", + "minLength", + "MinLength", + "maxLength", + "MaxLength", + "stringLength", + "StringLength", + "min", + "Min", + "minimum", + "Minimum", + "max", + "Max", + "maximum", + "Maximum", + "range", + "Range", + "pattern", + "Pattern", + "regularExpression", + "RegularExpression", + "email", + "Email", + "emailAddress", + "EmailAddress", + "phone", + "Phone", + "url", + "Url", + "creditCard", + "CreditCard" + ] + }, + "message": { + "type": "string", + "description": "Optional custom error message shown when validation fails. Omit to use the default localized message." + }, + "length": { + "type": "integer", + "description": "Length value for minLength or maxLength validators. Example: { \"type\": \"maxLength\", \"length\": 128 }.", + "minimum": 0 + }, + "minimumLength": { + "type": "integer", + "description": "Minimum length for stringLength validator.", + "minimum": 0 + }, + "maximumLength": { + "type": "integer", + "description": "Maximum length for stringLength validator.", + "minimum": 0 + }, + "value": { + "type": "number", + "description": "Generic numeric value alias for single-value validators such as min/minimum, max/maximum, minLength/maxLength, and stringLength maximumLength." + }, + "minimum": { + "type": "number", + "description": "Minimum value for min/minimum or range validators." + }, + "maximum": { + "type": "number", + "description": "Maximum value for max/maximum or range validators." + }, + "pattern": { + "type": "string", + "description": "Regular expression pattern for pattern/regularExpression validators. Store the regex pattern string only; do not include leading/trailing slashes." + }, + "allowEmptyStrings": { + "type": "boolean", + "description": "Whether required validation should allow empty strings. Usually false for user-entered text." + } + }, + "additionalProperties": true, + "examples": [ + { "type": "required" }, + { "type": "maxLength", "length": 128 }, + { "type": "range", "minimum": 0, "maximum": 100 }, + { "type": "pattern", "pattern": "^[A-Z]{3}-[0-9]{4}$", "message": "Code must match ABC-1234." }, + { "type": "email" } + ] +} diff --git a/schemas/low-code/manifest.json b/schemas/low-code/manifest.json new file mode 100644 index 00000000000..de39544885e --- /dev/null +++ b/schemas/low-code/manifest.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "name": "ABP Low-Code Model Descriptor Schemas", + "version": "10.5", + "publicBaseUrl": "https://raw.githubusercontent.com/abpframework/abp/rel-10.5/schemas/low-code", + "definitionsPath": "definitions", + "descriptorSchemas": { + "enums": "definitions/enum-descriptor.schema.json", + "entities": "definitions/entity-descriptor.schema.json", + "endpoints": "definitions/endpoint-descriptor.schema.json", + "eventHandlers": "definitions/script-event-handler-descriptor.schema.json", + "backgroundJobs": "definitions/script-background-job-descriptor.schema.json", + "backgroundWorkers": "definitions/script-background-worker-descriptor.schema.json", + "pageGroups": "definitions/page-group-descriptor.schema.json", + "pages": "definitions/page-descriptor.schema.json", + "forms": "definitions/form-descriptor.schema.json", + "permissions": "definitions/permission-descriptor.schema.json" + } +} From 69cb0c1c9724decc8467cc2bbed09c016abebf25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Tue, 9 Jun 2026 14:54:04 +0300 Subject: [PATCH 11/14] Address low-code schema review feedback --- .../dashboard-row-descriptor.schema.json | 3 +- ...board-visualization-descriptor.schema.json | 50 ++++++++++++++++--- .../endpoint-descriptor.schema.json | 10 ++-- .../form-layout-descriptor.schema.json | 2 +- .../permission-descriptor.schema.json | 2 +- ...t-background-worker-descriptor.schema.json | 14 +++++- 6 files changed, 68 insertions(+), 13 deletions(-) diff --git a/schemas/low-code/definitions/dashboard-row-descriptor.schema.json b/schemas/low-code/definitions/dashboard-row-descriptor.schema.json index bd1abbc5913..909048ec295 100644 --- a/schemas/low-code/definitions/dashboard-row-descriptor.schema.json +++ b/schemas/low-code/definitions/dashboard-row-descriptor.schema.json @@ -22,11 +22,12 @@ { "items": [ { + "name": "overview", "type": "numberContainer", "title": "Overview", "numberContainer": { "items": [ - { "title": "Total Records", "entity": "Acme.Events.Event", "aggregation": "count" } + { "name": "total-records", "title": "Total Records", "entityName": "Acme.Events.Event", "aggregation": "count" } ] } } diff --git a/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json b/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json index 0a958fa9a1f..6fd6e91f31d 100644 --- a/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json +++ b/schemas/low-code/definitions/dashboard-visualization-descriptor.schema.json @@ -90,16 +90,54 @@ "required": ["name", "type", "title"], "allOf": [ { - "if": { "properties": { "type": { "const": "chart" } } }, - "then": { "required": ["chart", "entityName"] } + "if": { + "required": ["type"], + "properties": { + "type": { "enum": ["chart", "Chart"] } + } + }, + "then": { + "required": ["chart", "entityName"], + "properties": { + "chart": { "$ref": "dashboard-chart-descriptor.schema.json" }, + "entityName": { + "type": "string", + "minLength": 1 + } + } + } }, { - "if": { "properties": { "type": { "const": "list" } } }, - "then": { "required": ["list", "entityName"] } + "if": { + "required": ["type"], + "properties": { + "type": { "enum": ["list", "List"] } + } + }, + "then": { + "required": ["list", "entityName"], + "properties": { + "list": { "$ref": "dashboard-list-descriptor.schema.json" }, + "entityName": { + "type": "string", + "minLength": 1 + } + } + } }, { - "if": { "properties": { "type": { "const": "numberContainer" } } }, - "then": { "required": ["numberContainer"] } + "if": { + "required": ["type"], + "properties": { + "type": { "enum": ["numberContainer", "NumberContainer"] } + } + }, + "then": { + "required": ["numberContainer"], + "properties": { + "numberContainer": { "$ref": "dashboard-number-container-descriptor.schema.json" } + } + } } ], "additionalProperties": false, diff --git a/schemas/low-code/definitions/endpoint-descriptor.schema.json b/schemas/low-code/definitions/endpoint-descriptor.schema.json index 4990fb8b89d..cdbfaa18fb5 100644 --- a/schemas/low-code/definitions/endpoint-descriptor.schema.json +++ b/schemas/low-code/definitions/endpoint-descriptor.schema.json @@ -12,11 +12,14 @@ }, "name": { "type": "string", - "description": "Unique endpoint identifier used by designer/model health. Prefer PascalCase or kebab-case, for example 'SearchCustomers'." + "description": "Unique endpoint identifier used by designer/model health. Prefer PascalCase or kebab-case, for example 'SearchCustomers'.", + "minLength": 1 }, "route": { "type": "string", - "description": "URL route pattern. Must start with '/' and should use an application-specific prefix such as '/api/low-code/events/{id}'. Route parameters use ASP.NET style braces, for example '{id}'." + "description": "URL route pattern. Must start with '/' and should use an application-specific prefix such as '/api/low-code/events/{id}'. Route parameters use ASP.NET style braces, for example '{id}'.", + "minLength": 1, + "pattern": "^/" }, "method": { "type": "string", @@ -26,7 +29,8 @@ }, "javascript": { "type": "string", - "description": "JavaScript code to execute. Use context request/response helpers and services exposed by the host, such as db, currentUser/currentTenant, authorization, emailSender, config, http, event bus, background jobs, and logging helpers." + "description": "JavaScript code to execute. Use context request/response helpers and services exposed by the host, such as db, currentUser/currentTenant, authorization, emailSender, config, http, event bus, background jobs, and logging helpers.", + "minLength": 1 }, "requireAuthentication": { "type": "boolean", diff --git a/schemas/low-code/definitions/form-layout-descriptor.schema.json b/schemas/low-code/definitions/form-layout-descriptor.schema.json index 6d3eb42dc00..abadb86e21c 100644 --- a/schemas/low-code/definitions/form-layout-descriptor.schema.json +++ b/schemas/low-code/definitions/form-layout-descriptor.schema.json @@ -75,7 +75,7 @@ "default": 4 }, "colStart": { - "type": "integer", + "type": ["integer", "null"], "description": "Starting grid column from 1 to 4. Omit or null to auto-place after the previous cell.", "minimum": 1, "maximum": 4 diff --git a/schemas/low-code/definitions/permission-descriptor.schema.json b/schemas/low-code/definitions/permission-descriptor.schema.json index f6391be4493..1abeb498413 100644 --- a/schemas/low-code/definitions/permission-descriptor.schema.json +++ b/schemas/low-code/definitions/permission-descriptor.schema.json @@ -24,7 +24,7 @@ "type": "array", "description": "Child permissions forming a hierarchy. Use for feature -> operation grouping.", "items": { - "$ref": "permission-descriptor.schema.json" + "$ref": "#" } } }, diff --git a/schemas/low-code/definitions/script-background-worker-descriptor.schema.json b/schemas/low-code/definitions/script-background-worker-descriptor.schema.json index 8e670bd1292..2c0ba07eb86 100644 --- a/schemas/low-code/definitions/script-background-worker-descriptor.schema.json +++ b/schemas/low-code/definitions/script-background-worker-descriptor.schema.json @@ -36,9 +36,21 @@ }, "required": ["name", "javascript"], "anyOf": [ - { "required": ["period"] }, + { + "required": ["period"], + "not": { + "required": ["cronExpression"], + "properties": { + "cronExpression": { + "type": "string", + "minLength": 1 + } + } + } + }, { "required": ["cronExpression"], + "not": { "required": ["period"] }, "properties": { "cronExpression": { "type": "string", From 26cc9978d1d8300d1f43b926a580d84cfae88725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Wed, 10 Jun 2026 09:23:43 +0300 Subject: [PATCH 12/14] Use descriptor JSON wording in low-code schemas --- .../low-code/definitions/dashboard-aggregation-type.schema.json | 2 +- schemas/low-code/definitions/dashboard-chart-type.schema.json | 2 +- .../definitions/dashboard-visualization-type.schema.json | 2 +- .../low-code/definitions/entity-property-descriptor.schema.json | 2 +- schemas/low-code/definitions/enum-descriptor.schema.json | 2 +- schemas/low-code/definitions/page-type.schema.json | 2 +- schemas/low-code/definitions/validator-descriptor.schema.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/schemas/low-code/definitions/dashboard-aggregation-type.schema.json b/schemas/low-code/definitions/dashboard-aggregation-type.schema.json index e18a2b5b6fe..0de9d6da48c 100644 --- a/schemas/low-code/definitions/dashboard-aggregation-type.schema.json +++ b/schemas/low-code/definitions/dashboard-aggregation-type.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "dashboard-aggregation-type.schema.json", "title": "DashboardAggregationType", - "description": "The type of aggregation to perform. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "description": "The type of aggregation to perform. Prefer lower-case values in descriptor JSON; PascalCase aliases are accepted for compatibility.", "markdownDescription": "`count` counts records and does not require a property. `sum`, `average`, `min`, and `max` require a property. `percentFilled` and `percentEmpty` calculate completeness for a nullable/string property.", "type": "string", "enum": [ diff --git a/schemas/low-code/definitions/dashboard-chart-type.schema.json b/schemas/low-code/definitions/dashboard-chart-type.schema.json index cfada5467ee..fe3b2124e5a 100644 --- a/schemas/low-code/definitions/dashboard-chart-type.schema.json +++ b/schemas/low-code/definitions/dashboard-chart-type.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "dashboard-chart-type.schema.json", "title": "DashboardChartType", - "description": "The type of chart. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "description": "The type of chart. Prefer lower-case values in descriptor JSON; PascalCase aliases are accepted for compatibility.", "markdownDescription": "Use `bar` for categorical comparisons, `line` for trends over time, `pie`/`donut` for part-of-whole views with a small number of categories.", "type": "string", "enum": ["bar", "Bar", "line", "Line", "pie", "Pie", "donut", "Donut"], diff --git a/schemas/low-code/definitions/dashboard-visualization-type.schema.json b/schemas/low-code/definitions/dashboard-visualization-type.schema.json index 721fb2977f3..0f490d6cdf9 100644 --- a/schemas/low-code/definitions/dashboard-visualization-type.schema.json +++ b/schemas/low-code/definitions/dashboard-visualization-type.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "dashboard-visualization-type.schema.json", "title": "DashboardVisualizationType", - "description": "The type of dashboard visualization. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "description": "The type of dashboard visualization. Prefer lower-case values in descriptor JSON; PascalCase aliases are accepted for compatibility.", "markdownDescription": "`chart` groups/aggregates entity data into a bar/line/pie/donut chart. `list` displays recent/top records from one entity. `numberContainer` displays one or more KPI number tiles, each with its own entity and aggregation.", "type": "string", "enum": ["chart", "Chart", "list", "List", "numberContainer", "NumberContainer"], diff --git a/schemas/low-code/definitions/entity-property-descriptor.schema.json b/schemas/low-code/definitions/entity-property-descriptor.schema.json index c4e85cf5f63..ed4cc8da061 100644 --- a/schemas/low-code/definitions/entity-property-descriptor.schema.json +++ b/schemas/low-code/definitions/entity-property-descriptor.schema.json @@ -38,7 +38,7 @@ }, "defaultValue": { "type": ["string", "null"], - "description": "Default value for new records. Stored as a string in model JSON and converted to the declared property type at runtime. Examples: '0' for int/enum, 'true' for boolean, '2026-05-18T09:00:00Z' for datetime." + "description": "Default value for new records. Stored as a string in descriptor JSON and converted to the declared property type at runtime. Examples: '0' for int/enum, 'true' for boolean, '2026-05-18T09:00:00Z' for datetime." }, "isUnique": { "type": "boolean", diff --git a/schemas/low-code/definitions/enum-descriptor.schema.json b/schemas/low-code/definitions/enum-descriptor.schema.json index 129725d5ca3..4a70d5c8f01 100644 --- a/schemas/low-code/definitions/enum-descriptor.schema.json +++ b/schemas/low-code/definitions/enum-descriptor.schema.json @@ -27,7 +27,7 @@ }, "value": { "type": "integer", - "description": "Stable integer value. Prefer explicit values starting at 0 so generated model JSON is deterministic." + "description": "Stable integer value. Prefer explicit values starting at 0 so generated descriptor JSON is deterministic." } }, "required": [ diff --git a/schemas/low-code/definitions/page-type.schema.json b/schemas/low-code/definitions/page-type.schema.json index 679dea16f7b..5ddeec0eb59 100644 --- a/schemas/low-code/definitions/page-type.schema.json +++ b/schemas/low-code/definitions/page-type.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "page-type.schema.json", "title": "PageType", - "description": "The runtime page renderer to use. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "description": "The runtime page renderer to use. Prefer lower-case values in descriptor JSON; PascalCase aliases are accepted for compatibility.", "markdownDescription": "`dataGrid` renders searchable/filterable tabular CRUD for an entity. `kanban` renders grouped cards and requires `groupByProperty`. `calendar` renders entity records on a calendar and requires `calendarStartProperty`. `gallery` renders visual cards and may use `galleryImageProperty`. `form` renders a standalone create/edit form page and requires `formName`. `dashboard` renders dashboard rows/visualizations and requires `dashboard`.", "type": "string", "enum": [ diff --git a/schemas/low-code/definitions/validator-descriptor.schema.json b/schemas/low-code/definitions/validator-descriptor.schema.json index f81f51eb9a1..83f18a39a05 100644 --- a/schemas/low-code/definitions/validator-descriptor.schema.json +++ b/schemas/low-code/definitions/validator-descriptor.schema.json @@ -9,7 +9,7 @@ "properties": { "type": { "type": "string", - "description": "Validator type. Prefer lower-case values in model JSON; PascalCase aliases are accepted for compatibility.", + "description": "Validator type. Prefer lower-case values in descriptor JSON; PascalCase aliases are accepted for compatibility.", "enum": [ "required", "Required", From a23d04f1ae0c99c5e50829ede4406bb5682adc21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Wed, 10 Jun 2026 10:17:17 +0300 Subject: [PATCH 13/14] Update low-code descriptor docs --- docs/en/docs-nav.json | 50 ------------------- docs/en/low-code/custom-endpoints.md | 4 +- docs/en/low-code/designer.md | 8 +-- docs/en/low-code/fluent-api.md | 20 ++++---- docs/en/low-code/foreign-access.md | 4 +- docs/en/low-code/index.md | 6 +-- docs/en/low-code/interceptors.md | 6 +-- docs/en/low-code/model-json.md | 67 ++++++++++++++++++++++---- docs/en/low-code/reference-entities.md | 8 +-- docs/en/low-code/script-actions.md | 4 +- docs/en/low-code/scripting-api.md | 4 +- 11 files changed, 89 insertions(+), 92 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8b1336c8d21..72070fdea7f 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -446,56 +446,6 @@ } ] }, - { - "text": "Low-Code", - "items": [ - { - "text": "Overview", - "path": "low-code", - "isIndex": true - }, - { - "text": "Low-Code Designer", - "path": "low-code/designer.md" - }, - { - "text": "React Runtime", - "path": "low-code/react-runtime.md" - }, - { - "text": "Attributes & Fluent API", - "path": "low-code/fluent-api.md" - }, - { - "text": "model.json Structure", - "path": "low-code/model-json.md" - }, - { - "text": "Reference Entities", - "path": "low-code/reference-entities.md" - }, - { - "text": "Foreign Access", - "path": "low-code/foreign-access.md" - }, - { - "text": "Interceptors", - "path": "low-code/interceptors.md" - }, - { - "text": "Custom Endpoints", - "path": "low-code/custom-endpoints.md" - }, - { - "text": "Script Actions", - "path": "low-code/script-actions.md" - }, - { - "text": "Scripting API", - "path": "low-code/scripting-api.md" - } - ] - }, { "text": "Framework", "items": [ diff --git a/docs/en/low-code/custom-endpoints.md b/docs/en/low-code/custom-endpoints.md index 23db583c3b4..c75f92461f3 100644 --- a/docs/en/low-code/custom-endpoints.md +++ b/docs/en/low-code/custom-endpoints.md @@ -11,7 +11,7 @@ Use generated page CRUD APIs for normal dynamic entity pages. Custom endpoints are an advanced option for exposing small model-owned REST APIs that do not map to standard list, get, create, update, delete, export, file, or attachment operations. -Custom endpoints are defined in `model.json` or through the Low-Code Designer. Each endpoint executes server-side JavaScript and is registered as an ASP.NET Core route. +Custom endpoints are defined in JSON descriptor files or through the Low-Code Designer. Each endpoint executes server-side JavaScript and is registered as an ASP.NET Core route. ## Defining Endpoints @@ -234,4 +234,4 @@ Default blocked headers also include hop-by-hop headers such as `Connection`, `T * [Scripting API](scripting-api.md) * [Script Actions](script-actions.md) * [Interceptors](interceptors.md) -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) diff --git a/docs/en/low-code/designer.md b/docs/en/low-code/designer.md index efa095d5865..5f6380cc812 100644 --- a/docs/en/low-code/designer.md +++ b/docs/en/low-code/designer.md @@ -9,13 +9,13 @@ > **Preview:** The Low-Code Designer is part of the preview Low-Code System. Designer screens, metadata fields, and validation rules may change before general availability. -The Low-Code Designer is available in ABP Admin Console. It is the main UI for building and maintaining low-code models. +The Low-Code Designer is available in ABP Admin Console. It is the main UI for building and maintaining low-code descriptor metadata. ```text /admin-console/lowcode-designer ``` -The designer works with layered model metadata. In development, generated projects include a `_Dynamic/model.json` file and a generated initializer. The designer can also persist changes to the database JSON layer, depending on the selected layer and permissions. +The designer works with layered descriptor metadata. In development, generated projects include source-controlled descriptor files under `_Dynamic` and a generated initializer. The designer can also persist changes to the database JSON layer, depending on the selected layer and permissions. ![Low-Code Designer overview](images/designer-overview.png) @@ -120,7 +120,7 @@ Generated pages and menus are permission-aware. If a user cannot access a page, ## Actions and Scripts -Use **Actions** only when model metadata and standard CRUD behavior are not enough. The scripting surface can define custom HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. Scripts run server-side and use the [Scripting API](scripting-api.md). +Use **Actions** only when descriptor metadata and standard CRUD behavior are not enough. The scripting surface can define custom HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. Scripts run server-side and use the [Scripting API](scripting-api.md). JavaScript editors in the Designer provide syntax highlighting, service autocomplete, entity name autocomplete, entity property autocomplete, enum autocomplete, and an **Available context** list. The context list reflects the services enabled for the selected script type. The `fileFields` and `imageFields` context items are selector trees for `File` and `Image` properties used by the file and image helpers; they are not lists of every entity property. @@ -132,4 +132,4 @@ Use **Health** before shipping changes. It helps catch missing display propertie ## Source Control -For source-controlled models, keep `_Dynamic/model.json` and the generated initializer in your application repository. Use [model.json Structure](model-json.md), [Attributes & Fluent API](fluent-api.md), and [Reference Entities](reference-entities.md) for advanced editing and integration details. +For source-controlled models, keep the `_Dynamic` descriptor files and the generated initializer in your application repository. Use [Model Descriptor Files](model-json.md), [Attributes & Fluent API](fluent-api.md), and [Reference Entities](reference-entities.md) for advanced editing and integration details. diff --git a/docs/en/low-code/fluent-api.md b/docs/en/low-code/fluent-api.md index 5a57c36ff3f..74c0caf118e 100644 --- a/docs/en/low-code/fluent-api.md +++ b/docs/en/low-code/fluent-api.md @@ -73,7 +73,7 @@ The `Order` page now has a foreign key dropdown for Customer, and `OrderLine` is The Low-Code System uses a layered configuration model. From lowest to highest priority: 1. **Code Layer** — C# classes with `[DynamicEntity]` and other attributes -2. **JSON Layer** — `model.json` file (see [model.json Structure](model-json.md)) +2. **JSON Descriptor Layer** — source-controlled descriptor files under `_Dynamic` (see [Model Descriptor Files](model-json.md)) 3. **Fluent Layer** — `AbpDynamicEntityConfig.EntityConfigurations` A `DefaultLayer` runs last to fill in any missing values with conventions. @@ -387,16 +387,16 @@ AbpDynamicEntityConfig.SourceAssemblies.Add( new DynamicEntityAssemblyInfo( typeof(MyDomainModule).Assembly, rootNamespace: "MyApp", - projectRootPath: sourcePath // For model.json hot-reload + projectRootPath: sourcePath // For descriptor hot-reload ) ); ```` | Parameter | Description | |-----------|-------------| -| `assembly` | The assembly containing `[DynamicEntity]` classes and/or `model.json` | +| `assembly` | The assembly containing `[DynamicEntity]` classes and/or descriptor metadata | | `rootNamespace` | Root namespace for the assembly (used for embedded resource lookup) | -| `projectRootPath` | Path to the Domain project source folder (enables `model.json` hot-reload in development) | +| `projectRootPath` | Path to the Domain project source folder (enables descriptor hot-reload in development) | You can also register entity types directly: @@ -405,21 +405,21 @@ AbpDynamicEntityConfig.DynamicEntityTypes.Add(typeof(Product)); AbpDynamicEntityConfig.DynamicEnumTypes.Add(typeof(OrganizationType)); ```` -## Combining with model.json +## Combining with JSON Descriptors -Attributes and model.json work together seamlessly. A common pattern: +Attributes and JSON descriptors work together seamlessly. A common pattern: 1. **Define core entities** with C# attributes (compile-time safety) -2. **Add additional entities** via model.json (no recompilation needed) +2. **Add additional entities** via descriptor files (no recompilation needed) 3. **Fine-tune configuration** with Fluent API (overrides everything) The three-layer system merges all definitions: ``` -Fluent API (highest) > JSON (model.json) > Code (Attributes) > Defaults (lowest) +Fluent API (highest) > JSON descriptors > Code (Attributes) > Defaults (lowest) ``` -For example, if an attribute sets `[DynamicPropertyUnique]` and model.json sets `"isUnique": false`, the JSON value wins because JSON layer has higher priority than Code layer. +For example, if an attribute sets `[DynamicPropertyUnique]` and a descriptor sets `"isUnique": false`, the JSON value wins because the JSON descriptor layer has higher priority than the Code layer. ## End-to-End Example @@ -570,6 +570,6 @@ This gives you four auto-generated pages (Customers, Products, Orders with neste ## See Also -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) * [Reference Entities](reference-entities.md) * [Interceptors](interceptors.md) diff --git a/docs/en/low-code/foreign-access.md b/docs/en/low-code/foreign-access.md index 219e1827422..4c6f87e9562 100644 --- a/docs/en/low-code/foreign-access.md +++ b/docs/en/low-code/foreign-access.md @@ -56,7 +56,7 @@ AbpDynamicEntityConfig.EntityConfigurations.Configure( ); ```` -## Configuring in model.json +## Configuring in JSON Descriptors Set the `access` field on a foreign key property: @@ -145,6 +145,6 @@ The `DynamicEntityAppService` checks these relations when building entity action ## See Also -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) * [Reference Entities](reference-entities.md) * [Attributes & Fluent API](fluent-api.md) diff --git a/docs/en/low-code/index.md b/docs/en/low-code/index.md index 034c286bacb..16ba02a84c7 100644 --- a/docs/en/low-code/index.md +++ b/docs/en/low-code/index.md @@ -140,14 +140,14 @@ Useful export settings: ## Advanced Configuration -The designer stores and reads the same model metadata described in the reference pages below. Use these pages when you need source-controlled model files, custom startup wiring, script handlers, or low-level integration details. +The designer stores and reads the same descriptor metadata described in the reference pages below. Use these pages when you need source-controlled descriptor files, custom startup wiring, script handlers, or low-level integration details. | Topic | Use it for | |-------|------------| | [Designer](designer.md) | Admin Console tabs, entity/page/form setup, permissions, and health | | [React Runtime](react-runtime.md) | React package wiring, routes, menu items, filters, forms, and export | | [Attributes & Fluent API](fluent-api.md) | Source-controlled C# metadata and runtime overrides | -| [model.json Structure](model-json.md) | JSON descriptor format used by the designer and runtime | +| [Model Descriptor Files](model-json.md) | JSON descriptor files and public descriptor schemas used by the designer and runtime | | [Reference Entities](reference-entities.md) | Lookups to existing entities such as Identity users | | [Foreign Access](foreign-access.md) | Access to related dynamic entities through relations | | [Interceptors](interceptors.md) | JavaScript lifecycle logic for CRUD operations | @@ -170,4 +170,4 @@ The generated pages are powered by these services: * [Low-Code Designer](designer.md) * [React Runtime](react-runtime.md) -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) diff --git a/docs/en/low-code/interceptors.md b/docs/en/low-code/interceptors.md index 97c401e2bc3..a8f1b069428 100644 --- a/docs/en/low-code/interceptors.md +++ b/docs/en/low-code/interceptors.md @@ -9,7 +9,7 @@ > **Preview:** Interceptors and their JavaScript context are preview extension points. Script context members, validation behavior, and lifecycle hooks may change before general availability. -Use designer actions and model metadata for standard low-code behavior first. Interceptors are an advanced extension point for adding JavaScript lifecycle logic when the generated CRUD flow needs validation, transformation, or replacement behavior. +Use designer actions and descriptor metadata for standard low-code behavior first. Interceptors are an advanced extension point for adding JavaScript lifecycle logic when the generated CRUD flow needs validation, transformation, or replacement behavior. Interceptors allow you to run custom JavaScript code before, after, or instead of Create, Update, and Delete operations on dynamic entities. @@ -27,7 +27,7 @@ Interceptors allow you to run custom JavaScript code before, after, or instead o | `Delete` | `Post` | After entity deletion — cleanup | | `Delete` | `Replace` | Instead of entity deletion — no return value needed | -## Defining Interceptors in model.json +## Defining Interceptors in JSON Descriptors The designer stores entity interceptors in the entity `interceptors` array: @@ -257,5 +257,5 @@ When you need to completely replace the default create operation with custom log ## See Also * [Scripting API](scripting-api.md) -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) * [Custom Endpoints](custom-endpoints.md) diff --git a/docs/en/low-code/model-json.md b/docs/en/low-code/model-json.md index 48db0cdfeef..ce59b0b3ec4 100644 --- a/docs/en/low-code/model-json.md +++ b/docs/en/low-code/model-json.md @@ -1,42 +1,87 @@ ```json //[doc-seo] { - "Description": "Define ABP Low-Code model.json metadata for dynamic entities, pages, forms, filters, permissions, script endpoints, event handlers, background jobs, and workers." + "Description": "Define ABP Low-Code descriptor metadata and descriptor schemas for dynamic entities, pages, forms, filters, permissions, script endpoints, event handlers, background jobs, and workers." } ``` -# model.json Structure +# Model Descriptor Files > **Preview:** The Low-Code System is currently in preview. The descriptor format is stable enough for evaluation and source control, but fields may change before general availability. -`model.json` is the source-controlled descriptor format used by the Low-Code Designer and React runtime. Use the [Low-Code Designer](designer.md) for normal editing. Use this page when you need to review, generate, merge, or source-control the JSON metadata directly. +Low-code metadata is source-controlled as JSON descriptor files used by the Low-Code Designer and React runtime. Current generated projects keep descriptors as split files under `_Dynamic`; older projects may still contain an aggregate `_Dynamic/model.json` document. Use the [Low-Code Designer](designer.md) for normal editing. Use this page when you need to review, generate, merge, or source-control the JSON metadata directly. ## File Location -Generated low-code applications keep the model file in a `_Dynamic` folder under the application domain project: +Generated low-code applications keep descriptor files in a `_Dynamic` folder under the application domain project. A typical project stores one JSON file per descriptor: ```text YourApp.Domain/ `-- _Dynamic/ - `-- model.json + |-- entities/ + | `-- Acme.Campaigns.Campaign.json + |-- pages/ + | `-- campaigns.json + |-- forms/ + | `-- campaign-form.json + `-- permissions/ + `-- Acme.Campaigns.json ``` -The low-code module discovers this file during application startup. A JSON Schema (`model.schema.json`) is available in the module source and can be referenced with `$schema` for IDE IntelliSense. +Exact folders and file names are generated by the tooling for the descriptor type. Keep the whole `_Dynamic` folder and the generated initializer in source control. The low-code module discovers the descriptor metadata during application startup. + +## JSON Schemas + +ABP publishes JSON Schema definitions for the descriptor objects that make up low-code metadata. These schemas are useful when you generate descriptors, review changes in source control, or want IDE validation for split descriptor files. + +The schema files live in the ABP repository under `schemas/low-code`. Use the branch or tag that matches your ABP version. + +The schema manifest is published at: + +```text +https://raw.githubusercontent.com/abpframework/abp/rel-10.5/schemas/low-code/manifest.json +``` + +For another version, replace `rel-10.5` with the matching ABP branch or tag. + +The manifest maps each descriptor collection to its descriptor schema: + +| Descriptor collection | Descriptor schema | +|-----------------------|-------------------| +| `enums` | `definitions/enum-descriptor.schema.json` | +| `entities` | `definitions/entity-descriptor.schema.json` | +| `endpoints` | `definitions/endpoint-descriptor.schema.json` | +| `eventHandlers` | `definitions/script-event-handler-descriptor.schema.json` | +| `backgroundJobs` | `definitions/script-background-job-descriptor.schema.json` | +| `backgroundWorkers` | `definitions/script-background-worker-descriptor.schema.json` | +| `pageGroups` | `definitions/page-group-descriptor.schema.json` | +| `pages` | `definitions/page-descriptor.schema.json` | +| `forms` | `definitions/form-descriptor.schema.json` | +| `permissions` | `definitions/permission-descriptor.schema.json` | + +### Split Descriptor Files + +Use the descriptor schema directly when a descriptor is stored as its own JSON file. The descriptor object is the same shape used for one item inside the related descriptor collection. ```json { - "$schema": "path/to/model.schema.json", - "entities": [] + "$schema": "https://raw.githubusercontent.com/abpframework/abp/rel-10.5/schemas/low-code/definitions/entity-descriptor.schema.json", + "name": "Acme.Campaigns.Campaign", + "displayName": "Campaigns", + "properties": [] } ``` +For example, a file that stores one page descriptor can reference `page-descriptor.schema.json`, and a file that stores one form descriptor can reference `form-descriptor.schema.json`. + +The published schemas validate individual descriptor objects, not an aggregate descriptor document. If you still maintain an aggregate `_Dynamic/model.json`, do not point it at `entity-descriptor.schema.json`, `page-descriptor.schema.json`, or another descriptor schema; those schemas expect one descriptor object, not the top-level arrays. For aggregate metadata, use the manifest table above as the section-level reference and validate each array item with its matching descriptor schema. + ## Top-Level Sections -The current model format is page/form centered. Entities define data shape; pages and forms define the React runtime UI. +When descriptor metadata is viewed as an aggregate document, the logical sections are page/form centered. Entities define data shape; pages and forms define the React runtime UI. ```json { - "$schema": "...", "enums": [], "entities": [], "endpoints": [], @@ -431,6 +476,8 @@ Background workers require either `period` in milliseconds or `cronExpression`. ## Complete Example +The complete example below shows the logical aggregate shape. Split projects store each descriptor as its own file, but field shapes are the same. + ```json { "enums": [ diff --git a/docs/en/low-code/reference-entities.md b/docs/en/low-code/reference-entities.md index f5e3e1027b9..3e6475f258b 100644 --- a/docs/en/low-code/reference-entities.md +++ b/docs/en/low-code/reference-entities.md @@ -17,7 +17,7 @@ Reference Entities allow you to create foreign key relationships from **dynamic | | Dynamic Entities | Reference Entities | |---|-----------------|-------------------| -| **Definition** | Defined via `[DynamicEntity]` attribute or `model.json` | Existing C# classes (e.g., `IdentityUser`, `Tenant`) | +| **Definition** | Defined via `[DynamicEntity]` attribute or JSON descriptor files | Existing C# classes (e.g., `IdentityUser`, `Tenant`) | | **CRUD Operations** | Full CRUD (Create, Read, Update, Delete) | **Read-only** — no create/update/delete | | **UI Pages** | Auto-generated pages with data grids and forms | No UI pages | | **Permissions** | Auto-generated permissions | No permissions | @@ -26,7 +26,7 @@ Reference Entities allow you to create foreign key relationships from **dynamic ## Overview -Dynamic entities defined via [Attributes](fluent-api.md) or [model.json](model-json.md) can reference **other dynamic entities** using foreign keys. However, you may also need to link to entities that exist **outside** the Low-Code System — such as ABP's `IdentityUser`, `Tenant`, or your own C# entity classes. +Dynamic entities defined via [Attributes](fluent-api.md) or [JSON descriptor files](model-json.md) can reference **other dynamic entities** using foreign keys. However, you may also need to link to entities that exist **outside** the Low-Code System — such as ABP's `IdentityUser`, `Tenant`, or your own C# entity classes. **Reference entities** make this possible by exposing existing entities for: @@ -80,7 +80,7 @@ public void Add( > The entity type must implement `IEntity`. -## Using Reference Entities in model.json +## Using Reference Entities in JSON Descriptors Reference a registered entity in a foreign key definition: @@ -146,6 +146,6 @@ if (user) { ## See Also -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) * [Foreign Access](foreign-access.md) * [Attributes & Fluent API](fluent-api.md) diff --git a/docs/en/low-code/script-actions.md b/docs/en/low-code/script-actions.md index 508237b5a1c..197d59ed37f 100644 --- a/docs/en/low-code/script-actions.md +++ b/docs/en/low-code/script-actions.md @@ -9,7 +9,7 @@ > **Preview:** Script actions are part of the preview Low-Code System. Descriptor fields, designer screens, and script context members may change before general availability. -Use **Actions** in the Low-Code Designer when model metadata and generated CRUD behavior are not enough. Actions can add JavaScript-backed HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. +Use **Actions** in the Low-Code Designer when descriptor metadata and generated CRUD behavior are not enough. Actions can add JavaScript-backed HTTP endpoints, distributed event handlers, background jobs, and scheduled background workers. Custom HTTP endpoints are documented separately in [Custom Endpoints](custom-endpoints.md). This page focuses on the shared action designer experience and the event handler, background job, and background worker action types. @@ -256,4 +256,4 @@ The endpoint dry-run still evaluates the endpoint authentication and permission * [Custom Endpoints](custom-endpoints.md) * [Interceptors](interceptors.md) * [Scripting API](scripting-api.md) -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) diff --git a/docs/en/low-code/scripting-api.md b/docs/en/low-code/scripting-api.md index a0d29791510..dd5da7c0670 100644 --- a/docs/en/low-code/scripting-api.md +++ b/docs/en/low-code/scripting-api.md @@ -437,7 +437,7 @@ Custom endpoints add request globals and response helpers. See [Custom Endpoints | Background job | `job`, `jobName`, `jobData`, `jobJsonData` | | Background worker | `worker`, `workerName` | -Event handlers, background jobs, and background workers are configured in the Designer **Actions** section or in `model.json`. See [Script Actions](script-actions.md) for descriptors, examples, and dry-run testing. +Event handlers, background jobs, and background workers are configured in the Designer **Actions** section or in JSON descriptor files. See [Script Actions](script-actions.md) for descriptors, examples, and dry-run testing. Event handler example: @@ -785,4 +785,4 @@ return ok({ * [Interceptors](interceptors.md) * [Custom Endpoints](custom-endpoints.md) * [Script Actions](script-actions.md) -* [model.json Structure](model-json.md) +* [Model Descriptor Files](model-json.md) From 46571d5305a4d72f38a8e86ba4a314e48fde8550 Mon Sep 17 00:00:00 2001 From: selmankoc Date: Wed, 10 Jun 2026 11:53:56 +0300 Subject: [PATCH 14/14] Update tenant management and theme basic dependencies to version 10.5.0-rc.2 --- modules/cms-kit/angular/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index fd9963dc47c..4a198eb5097 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -18,8 +18,8 @@ "@abp/ng.account": "~10.5.0-rc.2", "@abp/ng.identity": "~10.5.0-rc.2", "@abp/ng.setting-management": "~10.5.0-rc.2", - "@abp/ng.tenant-management": "~10.5.0-rc.1", - "@abp/ng.theme.basic": "~10.5.0-rc.1", + "@abp/ng.tenant-management": "~10.5.0-rc.2", + "@abp/ng.theme.basic": "~10.5.0-rc.2", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0",

MP|(~ z!Pc`~?IBUD0mOnF@2rr=p(KE}09>+_iIN%3#`J$Zik#|hI+R70R1AtG8KIcQ-s(}q zkjwW=<#%yU8;RDMbQ`QsJAbKpbLfw=#kD|$OR4Y&dnQb81eQLukk!1iXnj|LjhhOyD-<>#6& z;IlJrY@C!Zg4+z(KFVsxEkWTQiyvjR&QTC3{Wk2;} zeA32M>nwFOnLuNs)t+$^`r1}}Y?wM3(5fdp$tHmM{_UgA4E1FMyjJlC&uruk5IP%@ zWLeukhirU0Gk{q?-Q{>FkW8!aH7L7r`5Hc{K)-YrLjqXt2>9YZ=(&EDxwL8B7yj~6A=+QWw(}A`;-}%+neytiwPQa?cjczP)hRhLgnhQ6 zx4HaxM%bJA@Uuui={4+8%cgk(5@hQ!r#@(9l@9*Ogztdar&-pXC@>$}V9ZnU(7%3Z z3p3r`PLO>&WC$CaW~uL6Q$AlI<}3C!H%N)%HREfYaHkWN5a=}Lyo_$>w{nZXPogBP zFa1_>+JUg>E8*8>I~`@hfrI99DZMQ7*8zzZ`SiV?!;=rz*%+~;-g>(B39nOT?{Nmy zR4(L-+}3(qBDEO}V7`-MgZ8Uxw$g>4Rx?QOYq2)0n=5#sf?vR;dZkPGG{OAE;a+nQ zr-u8KHNRuh1Kz@&GLVs8ZP*YK8)X!n6s$Y+3OPA}uN zv<>+7*=@n+fQnp^8Zw^mr60N9cu4##>YN?QmFFnesb<69I4K5fJ{g3F(33u~D~h;c z+7@XjK~+|MF34k*PN!a4rlrzva?BH4nK>W}bA9w^Qfeic5KvWh0`R^{u$!Go&f?D9 zh42f=@kj5un1KRT2kc6d)4G)7RCK&c33d={Dty`fisHpr9$j-RYBkg-BDd{J6T5d- zE}EUWino5KWOpC`=C7>W++^6ve1+8zuZv*Sg+^)=V0AuV*8y0qh%j#A-Bp!l-^=qO zinP_<^hir(#)=) z_mMA*;W(V|OPW)goM zaNq)$hiFMGsIb>r>R^E>0sHxscD%EbL8HmXEcp7NrWpG-d89izo)fF%Z2A?osF)Xz zxcagHkD!EYTl}G>dI*u=Pt$ABTRJ81eb2HW`A2yLuqJDxQ9?ps`Q9XecfbSc&uXUOX_j^Ix()%lUbZ@>G@l!EPOKzc^j{Vg-&{v@4=&BD{bTap;pXh0?VR~y$t1>mt5>b4(E`F+U~E#-QZmw?&scHfCwEroz|cDOPUF8X3eyL+ zm2t<98tN7SPdO{X%PLLw=U{K8_Hl>6@!6g?FB9tdr?lms9O4XG3EQr`0^s|(P71(w zr8oJG`@*$e1Ng=Oai` zS8oN4wKvk-6v9w_M)Bh({WCajh0M!Q5V?Upqwd_YIEag=wKTbi{hHmHCwv^{Q@hx- zl42sRuICO^cD^2dGgLMI&JvWWX!4bhvNS=v(v9L^;;fvjK0cYcKf;#CuD7AiejAzb zk6DNw4LG`{uOA5fxMYJFOnrTjvaCH^v%@vhHI@-23CH1)UO#YVR5f_fX*ld4WMe19 zB@&3)d{I3<$O_1uYtS^dT*D`dyDw8TqYBxz1LP;`X>RzJ785p_;Gv)e*F>%;%J~7| z2@r<*!_8cuL{r_Z<$RQFUYJT$X;dEF=<&wB z&H@)YT%Lv<@c0WE?w%vF)Z2(G@L@ll1s9_B+fVi?P1sAv!O}0r)2((#U0(|7$oOEK z`&jC#O{VTIWP}o1%+&HB);xQks1AMNv|Teb31dImPL!tAs$^G)6H?tM4Ea!GL&S|N z4AlW7ZEK;Q|LKHX@kWzX2n2Ai>^410A1@MaOl}+R3+HT`l|jPe;qPBzA7&y}A$)$H zi2a=3Xx^G_uy+e2S`+XoY>$}3a^5y?wdH05ND6>V`NFrr%NjSC@C3fmnB3NE9>v;q z8TFzjT>;N6MoVx>U5;MJ2CjfX2FC&4L!^siTv3}G0+)qbpjSq2OJ zs!Mc!u1dL6rdsGSzebGoE!MQx$3t~^daV!GK$`)`@I^WS@*0k%=K1O z4NiC+5;+*FNV>7v8T7%w^0NZ{`BL3`-V_x-u z)aR0f$tfal^TMD!C1-k;)NY{Xkcw!H&3c19C{Pr+ublx5EYPVh;!kl?=GG4GYjylO zYU#I8W_iNRss_%^D=!bNb7IuQJ ziuuzms!_IcJ{Moo=O$FF;aV0v4)M0l*DYE7u(M(Ng|l9NG7o4H8JLEBLw9A0UBTvDbe*kvu{#%!a%e!-JzbfNvKn$rdv)zicTzrP+fvoT-lPx$cVUajpRC_}4myq= zjySm?bd95EjF&)WV!+d%;eFTFtzpNpD%HR=Xkf8OJv!sykt_2>=|Tg1BV}HqIC(Dv z?f5Ri_*k|VM9Sf&2mYdaOw${_7Qq%9rzFQ`5%Z|hS?yU$3h!}g4r{|QSb}Dy&iNh^ z;`63bKO3Sc>p4(5m-f_OxL&__IWGazi-Z4VvK9+HC`;UjY_|1)_}hhY-6C`XIXjW6-OlJEjx zSi?fgSzi$)Tbg_y9x16zsr@>tL|eTeQrP?UBU$wI$Ve;5rXjj|E^cGuvC8kX z*Ni8M|0Dhiek7pVntr%9&0E==YAd=CKlv$daLUl}O1~BtT}u*qU^p>iE?LvGQa;u^ z4O<>-91%4xQQ9fD(xF$N_*IYZ@WqYUqbN|H%mFHqylSPZvXPGR2`O6R&L%B-z2D8~ z^-nb}HXh{yO?}hD%rpGSe=xw0Nb|0{gmfRCVkrPy_F@9B?mEu;AOirS8@dvWCr_h; z(bbeF)3lKnC9yl#G!YlR@)y5i9Br-_>|7bSNP+J&`PtQ`OHD^lHYhs#1LM=vg%~e% zEJN-WeX5dpZ=^iP&0~tm*vo10rgfrs?uixnISS`rL*WBo7uEwbq*d0Y*@VeLm;t}-WSjOmsip%ut$Mu;r~JdXNyC(2}$-dqtL zsnmWY-@dL0m<~fnb+v<|cWjJB>_e)$x7P#Lbon5<+&C2Tw&0*foIw#V zdXn zqK8fMe`Sh3+%9)2I1$LDYvwTQXN7F+K}1htAx0pYJ&&5#C8i}uUX7|ZC52muaS{rqDBa3zp10XsR)3v9IzhAf?nN4JKO`L~OB zU^bWi4HY)RgBmLfEp?q{?QBnJY01lVAffwCZ52V%?Lr@UX<@G9NjRbT1&+sf2i(&^ z*!@LNVkI9ZylfnCuQ{9$Nm|9r&GfCv8H6cQ5spcz&G+m!Z{Znco;DL)*=XJG71HHG z^_dmaBFZI@193W(v>5WXMY8grz&y@t3mYo^iJnv|5KVBQ>#3yV%~U{u)kSUq2< zb^R!Mh} z%Nu;gKLYSj-g8S zRr{sDU9U!Yv4>e&NRmzZg}VUWx<6W0P3GaDQ@uS4pBi4YRUQWZZisOuD-B-!vN|{T z{u%dz#Tq&pL2JUh!jPPnKPU4~Xh1E#sbsf!QvkBY+>BTpY<)lMB_zL9iKKa{fK{FI zd!7#Sm;^tt<*OTIR}2OQtl_SqDA$D-lRkSfgPG}@5q&*O-~d^=zrShOsf{M1JH2xL z^T7vVjsFq!`u`eQ`aiue^53%!rR4VCKL%6a{D zcm1W!)W}Z6nJUE3V~A>HwX1wS1+Z!uk}0Gi&DhJ2PV2a?+c+otwJ8oK3SVM??`xM{ zH1HN?8TfYR=$9Lo?I-QkR(9pv&X?v8*E$#|w@^9EYeVJ5HX6MoT@a5d8zu;7J)QfK zvsvk?Cx{p%S1&)IcK9lv(eq&%IHkW;ZL%0`r>mwU_(I1b7y+5j7C&hx zmp@(Ephdjg6;w*5`)}P!S3^%H@dt)SoaUcZHWzDHmB+04EL0Anix$r8Z&i<;!rrUpEgl1*exb`gFjW!YWeetchUIJz7IQaEZsIpWn`|Sp1GLn@c3b{N(t?yzgua>)!@Q*I@?N@g#l^a<3e|PxlzI336XwTm~6FN#0^(jd))Bnp;3N z6g-cASr+j{M;5vZ3kV%z)Fz1}5oeT0J>KCGV9*O)-3yQ3YfL!V5}V+obF6!QOLgB^ zG|L{c9$)&#J!zY$5oSzlT7Ql{NOBmEhcGP&rMIv&mqlk$J@2nE0E~pFqtw&B3_t2!V+JHp640&0ujdX08P5J&D!Sp=SmWxI7k$3L~4p!0-gt$AUTBEr&RLjDEjR~%L zqWFM{yovUEY$D!sBqKN8D`V$%2=KMFH;Q>B0v<$u8oYv;^X-a@N?35Gi%4sF+De^|&pwz8xR!bE2WdB_ohnY|$dj)X zu90hSn62wL)TfhjN}tnd8GMO!65bBavyhh*hey7b#L~q zjWLhMG4F`$_T1NrI7bKqH=-fGKxvO}V5828%cF2;(t(H%mjx+$D4|^h*EzcJAK@f^ zAiS}HzT=-_$V-W9F;kT^oW%Fk?nm?+Qi%yqpK=X7#P@_7%HrBP@ez7g<9e{nsM+2u z7*@V;U-o-YW5Z`G>O48rA`$_U$n)A$NA~dZL+8J}8F6$yD@-SzdUeqd_0Y>=e&O<{ z} z+w;yfd-Y?Q$;mRhpz*LmRWu*{iQz2F;r%DWVTTqxUm`4!4* zlcvI}G6_EF^-oU+N?F3E0NaJeRha$($SOCjsEVm-zkJ0lr{d}SKpDj}RvCLSKby-p zW?Q{dU3|A52ZaTPA4cLQQL3azUeX73JbtN`6wuuopz+zzO*ZMPo7YYA;MbiWjb;V= zr@5s1%s;wiZvd{U=+46K$)PD6Sw^vR($~upHg2CMKCmw3XW_8Aed)aLyHS37L*iX3 zdeCrW8Nk<9)vhUO&r4mkc1!;Fxg)))AH8tHy6I3(8GAs3^MQjgA7Y9!xDl$z;?Zv~ zQYnOUO;x^CcM|fW7FP*{Xja=)01iAks5she5eT=RClZqt`IVZ}wiAUx%0O16e?q<` zs(-$A=fH^t%zGuV>g56wt5UMp)GRM%l0?imfN3%f;{$?=jjUAp?_39<+4D2wg?agwGlSK! z1orf=41L_*U6Zr)Z@alWy8HLu_P=(DB-OnY9K1vfC?wZR%lcnxdmPqX;x4m`t-3dlB@n@K36QU=EW|wm* zysHjAy&dsbXbHNvyPfp*G+8WfJUgVtjp~ycVPWSA2e~+Gdf$TIkct&x_zmlUb zw>EOX%9DQU)X>jOZztNAx9@ueBzL9c+zcr_xBsPMxvO6!0bRj-t-h-Ab&Z>09WcWG zdv(P}_<$!E>V5mDefy#J>ei@t)i1L;gXLdET3!Ofdkx9r+H2{g5}Lw%eK@BVA(HI@ zo|R2Lg4Fpc@O7Z-LGh%uQ`tA`S>I3k4Z=44Dv@)Q=Zjk)K3L_=U@y^+&7ONO;D%wR z=fIqdB;#u^5!6WKON%4fNC4mlQwA+LOpD(vtylNXX)og{j~o!VUgbIw78ym56{3vC z6J?uHuq}5=6k_7$kbHZn{6MKt!+P(z%4bkPd52WoG;4K2NOY`QFcz zWG{B#abjl4%F;OtKOvv-7aK7mFV#D%YLcG1`*@$T=*OXW`pWa($j?Pjod+6Bp+oug zf+$;X=~Fa~Qh_m}-dmE&KP<{;UwnW}j%=p?u^6Gd;DN2BSnP5w2S+XV7_MoFaDiQh zh3V!*^Yjy@Ojp$sADLVRJPxz7bfmF0HDitzZsrn{aI?3iEww)jD=rT`y<%IPSTWQ0 zeHlsOC)mp0Ufod~F5`;7A{bsGAlfRjwT+-SFTFMbElY=RK&v7Ct6l4q@>E{Pq#x?v zpyS`h^VzSQtuh0J-{;MSpWQ8HNxOUw;(}D7gpIuPZ(#h5U;Rm<6azhOU%0;0AK9u5 zMQu;Gc5%dpk$HwlT`$e9gq^6q7#f$_>Mm=kFMnOgO8aADrEIk(pO#jnyu73`Ht>t% z6;S$WrN_hKFp;<2kBdCs9!^eljX(mI>&@qS$Ti)!ineV;T>DA$h{AE7A44HFlK-v= z#>0${71TT1Wnb0tipnY{_X#JfKMg;nKAP)MRHtVrGRn@>6MwwCJk;4Km0nNPJYj1M zpx^m?d*M1`FQlhSF!XM9cOe&zdN<|lobJtri~WaivnW9IX~;C4ouh9*Duz=z7(Yhf zHfGSOQPZOy{0v&z$R=+TT=n-8=+Fxtru;PexhLPxPC6!fr%jq_go+2r@M=me=2NogrGup)%`m2s&_@yR6qAWU#+I+ zJ(Bo*P=H6a+HmiZ!B%{epWpN85|*%}{fk|<&n?OT5SG7@&uUar1=SDVT@6os@55o4 zfwcUy`|{cL`l}P>76ooE3@>NHa@Hj29YZ5jg=+)4hLc8qOw9L4RoNUcNDU{n`_Zhd zP+teDOzU5L-MA2<)AFt&vq0I6T6ukef^JReJ3AKgDZGVr`3&(mp?%=UCE{mhwaP~R zN}=r#Nxn|H1%*jY-cl&(X}GavtZhX)%^0Qg@M3CLcXA7gelj_BPc zndw;Bvd{k@H-2J>kC$J!Zfy7EH!$-L+EdfHB5(H2O^@DYUUbuUHYD?(*^q3u?M~=F z6+<{K@r(mbcC@%IcWaVBsA8F6TYLDXgHC*W+q0(`eNHnJkye;hqpVEt0<+40NUNSCGI+`wIRK#<3v$mh@} zb3V$O0WCMf67+#wqLPiZ4r1I4l61^Vb##(7|0q}1HvrWx^CpxVe9JX0^v81Mt1^<> zL!z|&&Tn+S+nj#ggV{qbqINAN3(F=cd0_#Gd+#0A-`j;(h1ZR70sF#eFe~EKa zl|Gg{x7*25E)vDGzg@fPSmvz#R!uq}eA8*3aSokQu0B^E3^Ptj$`-2{cw@_&c3WHh zuosv;nC95@I`7uP@`WJ3QdbxEA&6^3mnm12wB?&yO)fORLRHhPyz@}!#=9MPpE`SW zpAef~SHc6`UsbYffmG8-bsO$`uMwNgcQsKgb)*Uj`Q$XO(RGs@Lz?#=ECR`UF+abQ zk`ayGTnUF(Ebs1pdQ5aCiaT7q@IEqVI&`q|vGuT08La82?~ULtpBO^f8Ch$asU^f^ zr-azqj^f$AEL-7uzbn`v>7>oyE;oFaB&YZ@E)}LNbGJWZ*_CaHfrm%@Qp${0m6qpc zk#TnSleYdO_leq{O%EYLsc+c6i??$Pv`Oil+3A_0Sycp|*wF*$0n-nQW+l$P)Tp7e zMjdJuPx`}Wioh`HwNnSI4SLc$(uRJ!&qq@4f1G1B{J8YyP4z*r)n;(CdaxzU1RZX4 z3s#7)UdKo6mpcNO8&`gx;E9h-i{B=$b`asG{6-0}8V6B{#mWaWg^#i8J8#2Px_xSs zulLwg=M(zo+2?u?quxC8&&ijiE`;yuB?(@7({$|jA516UW)I1eV`zITWJ5NiW! z_pV8b)L)0l*QosC$bkbNPyfd=TAbkpKL6gW?;QGRB3|bo$K5|GsRwMK0|bHP!gR%+ zd1ZeXfwNP2&i~ks0o=*u<^i7lTLRWR|8F8Kt*cyb8bxd`BB`?)@Vu_oSj7?_(>Y7x zv@(2YM|Vm&%~CRI4*IaBcr-IP@OSJD+cE?8S^m(XUvg5^uG;yNb~ttfk~pDZ+1IDD z7T`4y{9GE=_6LFg4PkWiz(sB#7xHs|c;}^swqXSIkhJnC2i2gRg)f9ZRLR~?gUkoo zVYeQgMBNxo;IZ+yB`zL`OW!WmCUYJ7{7WQnrX$tq0dwsG7SsZXe0a{_4Ja|;vAD6! zW&0mtG10)W%MPt@78iCEZ;0_5lIhXlH@RED?J`suon=zjlRx;{G|NR#e6Om5E#R(B z(6RXFYxlPh$*isfem*xbBZE_H6{Q`4ES>DJKYbDfev~?%v0tAMxiOMyJHYN!nL_qC zo_LYBbO#yV`tvd6MMs4YRl9eet~Gx9RjRHx?B0m_SN6MCL*jb zJrpQbTIWhZvlR2!)1~&Go(}9YR;`RN#L|(5tFX(e@8U3CE^+-|+(b4C5%&{r;QkxR z=ulR8=c=ozsaayC{#FL4UP`#GQAbw2BD`zWA;W1+N#dHgcyDQGiN!uYC8ct{Xwk`K z&}*-ySlLSBft!c=DD{40Y2z^?viv^dL&z)q*<_#d2`(coG^k4-b(fkEP~dgX9E}{| z@{iOl_x~|q7hO3>=^n~OUUCx4gl05uYf52xM+=D5Wn&F6AN{eN{agi!7FgF66oN~W zAJ4iuh$3Q#fJ2`y>sP+pw81Y%nn;U~8rJ7fDJF-rUcS~V5O%g>o}ggznp!fOO7lik zuV0+HS7yQIo1b!O5+kjkrRFoNX81f}Tv#QfSfS`N!zs^ zAxQJ7VGv884_bAHQSMfSn&Iyro`&9nTAj{sa#BIY=RL}fQY zG%{iF4WD{3{Nqz%(ofD0jkZ%)cbBH`x--~`mc62PZRb=fZN z50lPUZ)tZPE0xJf1wjD1fbw-$u^&ntaO6wL*GIE>PdoTktDt-N&61_}<<29)1Z~1i zbMxd%!P6(>jkAYN4)O79-zW0?MGj1i5cEh_#&PM-abL;xUiz;KR5T!Z(>){#y39%G zi6toHY+@B$wGEeEHNE>&!Y#|{^kh7Cxn@Aqye9xx)>P~`?(DL z<*QA`UF^>4nP0{=QgEUr+I>09my01nOOnKVKp=*WNO=3{;Z`U;OaV9;o*CGc-rSeS zZq+eBTvsNPgko8f-Rq>W%WLUxn{)fnRpUm{U-FpU)=d(JcMnxCwv*~E8O!D5siZ^4 zjf02U-Q)Bn49zQp%nZ%#h%Z^hO~os%ou?mMy)uwkWEc}CB&>#8g5TYyYP3~wG5w{* zrS+_xjNSP|W|7rFujx72`N1}B9%pZ_Wa?kIAn%h1hkv=dPmcCRf^9r8$Nty&;__Sxc;x*Pp7&%66QQ$vS^t+ot5C3CQPuEMe|e zYBc_#XPslW`^u`YpR$Z^`ZS*Icx?04j~%HKnWAOG_9Cph zPc++V_~&9?sRcM?&UG3w{@hvN8!2lpY-@jT_Jq;NN!0xd{0L-v=^wj$TKX2OhM9NV zxn2c^SR< zZ(6%>lq@Day?TC5E+XVYW)Z)GJ&H0?>g`he>0^14G0EZQ=;mZSZuQ=J*Va@XP{3Q} zO&ZL6=+nsV(yhmDKglp_gT!YS5HOTzkkO5`cy80?M^mf;Xb*Jp3+CR32|1=bi!NAF5ZI33R5-Ndnqq9H2 zXXZ1?>k+?_M@9pqzHhIOX-54WQ^*})9`^^ zu=zu`<|*94!OyRFHLbLf`;~+nEkJoGKq_rRY)UlCtT3ak>}*=z(TT-l+pKYwo&hZx z>DFy&5SXmmcGL97vx_@&Ug_EVgSmg~v9$l~zYNO#B|=!b@lV7UdGzORQt{sE#(#&9 z_OCbwG}i!VjT&yF*#OlB&ZkxAAMO2rx+nA*+i?v(;VZ)*#s<&#T=)0APnnL zgG8@N8$F6VnxfF>|9CGp(ENq;B}2E($G0;6(9KDIuOy9kaT)0-6C{RT5G;&!=f*4} zZ1NXdL}I{rdiu?iB^axuP8f4;uoAHyTv z`#*1={jtsM-@m|1=YW0*d9UtnJIQ-J$2({)&>cQp6|$8q*;2vWEsJ&Ima#q5!Mv9)es*xXeIro zPquH~#t6*8a@@tOatqx>W$yc=<~;bDQ_gRl%}e7H1|)oaJmFIoz7x+Ls7+9Oi`&3B z+mJdz5Sfv{#?|OsO7g+8ylMk<)cm}_eWqEC%6YWm?owPqQXpxiP})Oy;Ho&IG^fX* zUX!A6ujVnO`t?VSod7IK^guyu`-U5sD40MTg@xaC)5a$@#`< zNAHq6_6o*-)7ZaB>UH+Gg8QEMo_n&Nt7TP7RG%2HMBDdlmyye4rba3FQjj>h$Mo?> zD8!ta9n*c8A*byg;6)E_5y)m;YQIzjvx#^cal!`)hOGFkQ{Ea&4IKy$!aV#2($X znfls$O|~67ODhnHzcuWi>L_KE$X@Ti<9Z@G?qR7mHHE7ppTA-*`nOFxry*<)VNbUL z4*gbhI=@;^M(1sa_ieO1m7IYUcrEwc zRx>g}M5Ewyz+CrD{&ZrA;^#r~l}l^$AeV*cK;W57%xs)}@!;1iq@nct6C?!nW$by` z`za5KmseJyddQ$5p82reF|JNLm9aA4hhe()Psq$C;C5zaw7_G~89QOp=wMD$TI?4C zk>ERpR;Z4o1iW-=5Zu2{Cku5FYpC&bHc~d;#FfZ;d=(0AAspg14KF)QQZEApvrj@& zHlo$k&Pv$2vg+UaumjAAqlWxz)wA>@RdA|8@L+Ou?MAwEU|a06s|4=-t58`~&4snq zKv!xaAIWr^EfcBkCjH#+qWy zug^`@$%NFv9im+u3!K!dKRS)@hvaEMn+7r?IZ5!h7V#T(Lk2qL*aYTb--5vP%0N_x zseEg@Tb$fSpS}mxi~+^BBIBQ%$jTjZeSNM9OYdXTUe;JtggsEkOgA`ZNkzuYLJ?j) zQW-XMg(M^*TY673XlK=*Ie`&y@2YWm5N!|&Vakk^_DY?%E(laX7w+?!tsmtU4& zQ`=1#bk1r^kRke{I_i$c3|6zd2PrYp{aANGgznLyxM+RXA$1A4*>8$TaDrlt?4|6i z?Cdo2+4?iP$nTQ5#`$d5+4{(SM4>hI?m&N?4EDNfdvd?E+?k~y{itdIUYx2TCA0>7 zd0((45ye&zzVxZkLLuy(VfNs!5`D5{pSH#pqj^RFH8qZqxPvdXh}|yPA~BHJV!s(y z>3D}mve%}?J&53voxMAeCIz%Du&%C-hLy}+jcs;PWpU}u1c98XMyzlbrbhH;#a2tJ zGtTk_M`nwWC0XHItoe$)j;Z52ovT5ED+XQUA8n65z;nt#yN5Af5wR6iu6pf8gw8-R zRZv|OZAXrcU9-M!--yoUQv7mv2XB>YCFYKC~#a8EjzMg8r+^&<2 zKiQsK{nV(XacYlG+FT&7+_i6E9W%~cE~*C^6sDdYXHVCFPmB7WXMRec=z=?8zIx`% z{v+Apc!OAl!oJ$2D*n?a3t^6Z1jp=AeA)Fv%AF1=(fJXf^6K9Ux1n2e1>@z4FR++F zHFZP>Oj0Wa^H66>%Wka@T)Ik`>etV@_ZJs1uoi3vyid2i)oFw*-NDP&CA8ww4pm=0 z_LH4vZCN)1R`2R#+WL#E^SOWT>CZx!!l9A#`nqsyOPwI>7b`9>A~17X2Px`pPQwkz z!A*)K48`*0u@1vgg%4{hX7&i~gn`|TN*0979WO^13$jQQN8k1Ew?}`0$Xu+Pe_QJ^ zQk7^Q7KH>h-qOyyr*x)J%x5Fb<&PrJjp|zL?d=gcfexWPx4lpv+$0xLA6n+9>pVDL zWN}F^Wn;KJkbj$~Um1Zt(R}3& zSI%crekRfo92)rj?xx0jXF|96CD(C!hI^^A$e{v9t?2m({B-W|_yz)WOhn^WbFC(CTx} z7#APnV(48OJ-zSI@!&ZV@Ok8Xe*K?DA^$^|^4A3ol0PZsR$#IF-M(?>;c~msWZUmI z>a=(4nGPH<_w04!k7gYBA7h`tZu-BDp8mQ6r&%o(^L)Zr5pB;y|A~t@qwsAg^;GwR ztEuk?LT(_1xqLm0osGWtBWJO{{xPyUT6vbaWwMV#Uv?h-Cm1;*osxwmIqvA*fy^kl zocv>WBb&zpR8}Lz=_2Y+V9vR(6CZaFrDM{Ww6hy2?7ym=S}<6){4s-k?bgL~f)8PH zMal=tmRX~e$xz>P<{DSauqSgP2hW9P^}F>l=bn?7UKH+$hpP#Cd$^*-A>*4?^oL7j zqCt-6Mq^$w#n2bg^~rPcS>VBveZKIvEjMq@y`A_1t71?4d#)Q}ch9;7`&eY2f$Aq~ zc&(o*_s1$YnzJfG>s}|+4A6=KeNIr6dy*yI278B)SE1*_t*is}#>ch>S7pV@LV9XI z4r6LTkEj?cCUV>v_T)*{v`hhH()nKMRH zloU5UX-5-N;?lI&-p4ZYTkcq#_^H}tyi?C>V+709S-S-%ewf|W$2T+Wo}#eIm!&J=XAv|!a8T-F zpKGeuM13yHC;}B#`#foA9@*WTzp0?_A&r4LFLv!fCA?^(TLz~(8)z4WkC)K~c<3j- zZeb_~PwBc0EXi}8?Kgw~t1UR^W3tsqp>w&_A?oPW_2*o-) zZh!pat{GUvK20mO)8I@gM-Qcd-ISZJBE)u6Hgh#D zruVG%Uf{xI`f#aXwkC402s5=W%MCnj_`VB?)HFlJ_a?3O2dI|jsc2A0Y=@i-DpA=< zdyi;ut!A^I1YN2$`q|T)j1XUYt9=M2XAWKT@dz5GcjgW0=xW~MW60&h2Nn!X`;Seg zDIzw8yPD=SZxCI;>T;AgOB4WvDJg%T)di2o&YD`?o z^oqiBM37@DvBH*K{YpTTNTqpAev3pQrUtdGBDL&8>=6#8&OU3&AQJ4UEmbCH{kt?d zdqzQt(9nS@+Wp;9Vb63Lb%}386#f_vXTD$=DQ1J?shAe`HaMX-W7}#%rnSj%yFRtSzo%c$kpl|OIQ56XYMGT5#sDgdUT^=;#q8=j=A{})Tzsa z%C%Bc|C1fUffno;oJbXuOV6^>13EI|&KWw1gW1**m}8R5aac6=)`obQH;w(%Li$nyxW?Y?`=RZs`ctQFgt zBYB!&OSNQFE2SDrRPjde%9(`HC41hWrS%GClTLXeSNDy7lGS-C2W39HiSx(P*|~|iZMG;$lrF-)}pOhH@zQBeyh*2ILcSk z2WyanC>5LDtrON5)13Zhd)Z1v1~WxBeoNcVHSRhxsVL`&3!IVpLu$T#^n^JN-I-W7 zNK<5NtXtfLH}s9aUeW||(sL}tJJP~ppN(3H>@f?9>99g1C*EGBIa-JmQD+#0S5)LNpV zoWyomQ&sWyjvyIELn_vfPI2>lVzyn%eX0ziL1wGA+t-gcLk`|*6jGh$;FXtm^Om~Qr;LyqL zH7hxXJ6K%bX&I@2GKj;lPyH;#6(J^6;pG3uuUWo&Tpj05Dd#7I%rg*T^wIAf1ym1W zjpB8ukxz}k+8X3qP%X~7!5y2j9fkM;C#v&+b9|Z6qDW-5&2-}=b$O68D}S6i@o{n{ zf6QZj26lKRHDxpLPcucn)JMhVy*x~9;D*lSQV{YG&dZ@ZypYZ)aAg*M{kU!bRxcmg(t!T45P6}v_rt@NM>@u;$WCzQ_? zSRtGwy_U*Dwa^~j#guhn8Sac3M#?ItXhT^VvNR<5LOLbd5>m4@5`ny!I}Y6$Ju50a zq@LaJZqjr>eTp{cCwyy~<`=!!O+mz=fyL)0xo*iU1V1!IVBb4E&8K4!FzLNz7(HuZ z<=-T_hoqZnk3k0bR28uthW*)VU0_b0>`ykc@(>2OK1F{)*1V@865?LCBlPVS!YSAI zc<-T1q~HGnuo2vjc{?4O>OA8k+jFZA=&6UDBdmy(UPecR=XjUWM&mN)Cu-2QhVc;a z$4|tXNxrk!l@#A68#o7A;Zt+S83rpw9<_ zJC1Zec%Eur>Yn1m|0SlDO&{_d z?vizEmXQh}zQa}R?LlYz*Wg{B7mfJf%(4*jjfS1^sb69TBicNcXoWL|b*^+fGPA)) z7a1~@+dYY3=Fq%6Mwu&mq-8}PC|%M(=JI7YtJ9~JlsyR*ig-}7)M0CdGDHVG#!S96 z?sJVaebHU{-BBa{O1Z~SCt35cb&bNg-oT;lV!Qh8^AUxv*3{bT)6q*ZKMCnq3usF{Ws{3Fwdiq!V;2MSJy)mvB%dE$7#m8wY|a?{)KIDg_JQ}o z_lz+!V^HIPOR^=eI-Tr)!3cA40; zg^r<+#ZKfoMQ({VAv?{|Dni%QWD6|l5hX)meB(QhS#RJW2%Mbd@Ya$_i=22-CA>Cu zhPpXw6k8-pbGx_Jn-O><+m1&&SnGV(oOMt~w_ukBdg1F;_V`rqS63izdS0cy-PAKC zUkR$U7b~#xsTW%Ca~%qg?1FGoxo5AJ0T5;BX!n_X`2#4^j>I~C$<%e&NmIaxTe!W$=BObn%qTL6m$A-RpXka|8Z(~|@!ViO+7)SZ-fycoKn&jXGJ02_p|m9W>4S;F|8gQhQC zvG6<)9J0cCGS;iD_~zmWeYz8!VaFFKD-ji)~X_%k!=PK(Zd#&at501x8e4+EMPR+2H^Wjja8C49Xz1s||7Z|j3h9-zD@ zjl#?ZI9*;Z|Kmno%T8x_xmfs@kkuuaw$6x`f66xyR<6^X_%&nz-B9x=QQnQ>>v(!FPP#IAcyR*%^`qNPQ8 zOR4V|vcapm571hAp$y2t8Y4v(f_n*co&a}T>5du@tA(ePOMt&EcKS@^lkf94slMh~s zp$gA1eA{;otIQ@TjQ7*0k>3W}8xAcK-ymite^C~+5QxGA5_GfX<2yXZp!#&waen~= z(W~x@tjGxc)a$F&hgG>Rj2U_UA?Y==49P0TxNmRgLMhHMCFM_gGg0A2U0ojLx!dud z6kD|lf;X~yUEGPtlp|C8S{hY2e=3Gkod}$j4}^AEVA$U-TYxX>0OHs2RE>^mSbp1x%~+)D+U^ur`$B-N zM+$AAw{N+8kx=A+L>TSH7hkGsooZ5Da&aV)DjFYVW*s;o!y7 zf8oU!JZpI2TZPkIkAP|e61>~_MG+c7n7@8cb%oFvm2!fes+vO`)y!U6AqwESaiUVE zJD44LX#e;)oJI0)V9bi!bQ{40Tx~ZZTopwvFvsEH)YFSL#4k~F&Bb2rv4k`J)bFRd zNovgPZzTJzaL|kHiP6J0TT}liQOK@pGYmLLOz%t*I|Zv;o*wuVl7>^aI0GwbZ9!ZY zV?<7_ZC9b`dvdoZyqW1Aysdy7gdegow#8eNqLJk>201^zn-&T}=2$3ZGVZwK;T89T z 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�kkn!dlJyfn_wSlD;a@SvE^BGLdS5D_Vn4=TawmS?_R0%aQl6j@o4R% zx7JBZ=rTzZeup#$Ha01B7=V2ik8D4LhiY8=5LO$HgG`WwXSIG@sUk5|7u~Rl0n7&w zlb?-#xq*OvR%PI%)zY}UVJCT*Z&SghsBw}PvwT{kQ}a#Yc`++d6rAdd4E%nLtFx}l z0v&xNkBBEp?nTuSys=C^f{Qi>4<$~UdzhJffx22`R_TyG$archws6bb(Cu}`7458T z(pF0$cHK9d5HGau;_dR{FV$~Ah#%&MdaI&V7L41zn`@Z_9l3se!z-XT+uir$wYBr- z-UwzQ>T#c6spT#nX_zg4hUZ*xBvN#fjI`K6oHl8jrRQ)I$Zv3aR>s@UY z=K_TL+&53`P3zIH@CZNFw=`=m%+f2z=UhoKc);b?$hsd^{4bf8Ri>lj~aPr(lD-5mkLN91K3w*zXnO`^$ zeOeBb(F@#ZU_zq=Yxe5hyo=;A;}_+t&3&Z*(mRd}+(DAKs^UASsECs`LR@i{;WdZC z4)B~F0jij6pc(u!FyEx7(yFH1w=2gx0a-OQScL5u}?E{ zRfZb_wMg<1RN2?&2H*9f9#?x&Wg_k`K8#|s9#cvYe5>%VEjeV=;DtYCC`#K_E&Gi4 zHos@%4m7qI%=1=Lr>0!kJhA6No~K6xKfhKp!TGE?Y=7ekV)uZ?wrrl=CWFsSl#aqJ z*oN0b7R(mpv!F{9Bn~iX6G4IJvpOp)>;#*suvws*fJ|gyUFqjU#e2lM&ENV4Y43s3 zU)Kx=MOupYYA@_d*Cc;Jx}JBYhbK5DYV;crvDrF4DjjCOsnioj ze-{uq8X%>b=nQZQyJRHIGP%hbr;2M84C?fX+75_lTT4#3DWG!S_Wq)FP3djziNPrA zq2IgOa_|)DT3_j<(NVJJzUQVD4>%Buft5)38p@XNm|pXkdu1)aO5}c8jKA6kt*aa`KCuo{2+43nrq%HK4{~G|+$t{Fw8!`sBba=S+ z?j^4dXU-IRSy5iXsF}{nxoWP^>>4kw_#t^~gM(QveMK%N8i6sb%QyEB81W$QB22Mm5Zq3fmE%y0~ANYJ*=VoHo{om$D5^F5bLSJZ8e zk(OItFL#CQelGO9@o-z+6=5ul0@rH?s}(sk8A2hQm2-+D)q19w>uRv!uX+m%w#HA# z7Br2(XHE@dCmMD_XRpbH7zWk!(iOZaGvUygJ{w;A(6+IY=vVEvUxToo{1`k`%&-j? z&Q#12u{Fo#r<@?}xG@p#2AB0JZ6Eb46a2mzyrwdqZ-eV?QmTm1RB*J8SvDC<%)6)R zacKg^}FmXYp!Y-d$(b}N5lTtQGlM7*S(a~{FT3a z;uoDbO`0>kJo+Zp>xY3?fd?0(`CT420CKni2a96lz$@yKFz z;K-)61sasUGxV|CyHt#xpq?;8DGgysLwiZF*1G)`O9%G4Hvzj+FJ;p6q zx%2Y{g>|`Zu>b?0hoV^3bs8V*S!@6<@@Sd=gle+^B(EWJ)4J57r;9AA8N}6fd$K7v zVqEK=?~Dy7#qKOD%oQmz4*ue7eZsnd7m?bC3X$Zu6TEycG05fuV09@htR5r_X?3{f zlv7V3%BmvoQs}s63iYWeuEIMyU1#|f%L#dQ*5ry0S4FBD9Os-)6E5Hdyw$GNOW> zLxtp=j+FhpXZX_43#NwmJ}kKISMC=qmb)mrF>kaS4Upt5%bjR)`fe!sZmc3`X~?ch zE@Usx{R!=cvGjY4Ibcn=3xfW1T!9axkqk=oqvVUMAvlH)9i6e=B*spc2;4&)TDG4#_*i9CQEG*&}r`{E!}vz&g`AkuKpGge*EpvG2F+ys*#vR~Cp06EwW9`3 zGjaAXv6WXgJkW9&_VIxJfEG7e?M zf;LE-JdcE3{@JrfTWHy7UaUVo~O90meAt&o=P2&6lu;-T})pY^g7S=bO z5)Dc1XAtpgdU*V)i`(TA8bcIv9VnywU`DV3zJ)w<+4nik>o`&|8e}`KrEBe)T0F~z zp8aZbb?JqE@4jOW6%V?*U30PC4ZgB^KFwKhbrHWk#)Ze`+7Uc@dpXW^wutL{o^>Yb zZ~3L9F5CC#{?Zp$E$+>Inx(z`+I{$*Q5mzV7$?8UO+nAs^n&fHy~R^6ZgBPTM(B|| zmH&6@H|gHzTd_#?!3X|OTizu@i^~rpiVlsI2a1HSjv?&Z}wF%Lcw_r-4%ft7? z_lIB9X<@##g$#c94g7OU%7~0#4Vm;D$-9ZbI(8llJ+?6L`I&pmii>gm*a5zgAAR{s zLcDQ%Ap#BdH;4M==b=X0S%WUme$xqhZkx3FS^7h;f4sj@=E57TEP)a8*M1x1cXnAv z1`(l*jJKMo={6}_`)nqEc{hPDzu@Ijie=0cQKU0n6teuF^QVaXpZ^Qs@s*Ml}eQ3MA#J8CCJ}1`mVrY z?PSk6G4banGBoOVFv3jS?T0zs-pp1R!Bvl1Xx!ZRHmZGg`dIc7VQny@jY#{(ceocT z$6~oWUKaROx>X_$P%~TPm+6?un){%n%9${?)(6c>g@i+$8AHo@|NJx@vw+Ytbfcan zLSu)OrnQ#}bKIMWM!X0={LFWAuE!iEdkUx`FY-LF@xq&D=l1C)2A$8O+D+s4NCIfZ zm|XSGrrzymUXvLD0B`2x7Y^)o?Jd@LfM32A)&yO|p$E&@J_Y+{>q52}#OFQPem4;~>lRAy{w-!2<+$_u%djTnCrnB*C3v!QBQ6?o5Ka z3^F(bAKYEOhMaTn``xwfTDO1jqlfO^Rozv!_p_hs2Lm4 z_pa1N3Qou+p?ZJUX~E!rwe^(ToXz>(ReyDIQ%Stgmsmsn1X_|Dem-U0mRb+Vpb2S> zGTk3OYi+YHZ4P&SQWhP52N8E%d*4X-{M?B0lIMS|Woo7-9-MZ6EyMW!yC^-Rfnm03 z`((P+*pOYcb3Dfn0S+%JI9_l`PL@7gWrrY)s=7zB&595MsR$OzIYg}w3HNU@oj$hCx#%U zSi16*h02nxRag(S(4Hrvk9#K8UI{a(w)U_-)L3y8QyVD8B1e^PuG)<}%y*L!zYKJ*C zR_!?~Zb`C=i;EgxGu@Bi+IDlQIzuv8Ll6m z>n%1GZ8a#DdkV%*UPlRdxQ}#CPR|R`1eSg*+H5Ql{W@O;9bn?kX7!Lb~6uD znRmMbSKp2fk=b|`+r>emjQvN(Ac=qP?0iKX_?Y{ zaRqi4+7+K`ubNTl@?UKKD5fNF387L*jv<4@(Y?lyROf4s60Fr@x$e(dS<28NTJzoU zl&QJ+r^4mp1D2%7=l9m@%NX(*l+*gEUs4chLBjTdf~j-RY;|OO>`c9BD1Y_Pa}QWwGVKS4h0t!8>Zz z7L8G!Yf8u*)i0A5w1LvA?9(}?XQ$fZe7oAkW$nx7YSD_7sB@FhM%}f$)_GV&t+d^A za!w-e=cu2I8Wj_Jz8}LdVtyw8pHc`0SrlsQKMM!R<3nqiYyRB)5Ns+mf|Q;*IRkGM z5~fwdg)q*$LvniTS~TtF8SYN#LDH8cH?12+f1J|J*FN2O0G~|!#F=-QBeb>4Kozt|6m-YMZZ>Xp9%;dln>iU>{==0iZyX)XL2zeZ{q0TcSzJ^Au&?yl&VykL8m&+cunbLvO*iuvL_tyZ5YXd8Ta=e26{L${&?c6-2LRP4S35in zp>94I*$Y(|0IRdUcDuWR->||(gQk|~XBBAryi{x0M=y`p8)ah92w@|#4T1l-t6ms) zUZH)2DWjE7(kNwV9rw=5So;gMl&ddHs``A|E#g&rQE`6>5r}+>b{_J@=W&Z$H=8Q`3X2`kv`DHzVVc0=cXN}+=aLoS@&pK8CpdeJ^>S|&M;41pVG&@g{GmSob!9^8S8^U#6b?i z>ZIz078Os}y!JB1o3klLExRK(;{vYTI9HWAt071TL`T6ws23|}Rd%rpN?!c8j`L`IC(t=-eEw+!(oH*a7r&Jf(mOCeac)B;v zh-g=@oYHS6%deB(l?od{?+^H6MiUA+w~++pxYwzEEY3?|E`oV4kXmd1=z%sUN$Vk-|7kw8jVg^$E?*w#NJhdy$-#B1tEc-I z#mIon&Yu;m8|K791R zC7fGq6{UGxIdeZ7!diGE_AIx_i^uJbw^> z%k$l|N~F1R?nPC=fKP+-K)Z9zQ7o=Cg-Y5ROSj6Pl3Y|+qgC(aMh1to&$Z6$WCIPW z`s0Dd-z0V24fT;$_lwz!Fu8?Q@^RVJnVEPje3_b^rP>y}+g79TXXpPIYX05|DvDSr z9V2!=kXrl}%1|;=KLmck{*iWgs$_b^$94+ye1f;}JsyDsg> zWRb=n&)kjdZh~hLNL`#t@8INk)R9e&k~J{zomoQskY2g;K|$8i#ZoSI_So|60pgqZ z{D<(t@1{&@D76>m^DK~hHZnGDInz6vaZ_6rB!-kOWO*~l$qk}DOF-$w%fTA!drXUx za+t6O^zRMz54V=bo<^UlBwGZ}<(2gB)bpDJq+L8e)R-%o_4MLCJsK4@dkYEkp;eIj zOj)Tma;3gFmvk`Hdj+*Ol!#AnVlzG3s081t+omfjXqW`XjalOL(_jvUq_s(YC*3iy z{A!tilH!$I)&RRb8y;QINo93=(soWV@o2UJP-PtBnQK!ADhA&-5xsha&3J^xign9z zrp6MPUKM|4&Lbk$QV{kS~M8ikFx|#a3NxZu5zvvCObPj8d`+#?RHYaB-UkMHS;&*@k9>UndUign^I9q zahkLQW_F--tk1mF+S$QIlu_Zi$?Thgu1O9C~+pT+T3X5j8YKsOEj6~ z>=U)2Gbi_eA zS4w+=#!&;4lGb)oDx2W$W&v~LpOL4UZN(an?z*jVHhIzVRAY+Q(IU)H)@@VS_xNl_ ztngoq`FTmy8-9;T_Eq%OoQS!c&^M|`5fc*=rYu_Nxx>ALIenS2Ip(jUMdW!HYr=Z5 zNuxU;${uMO8N;*~N^8`VTcJp5USyUImQlG1a?8uhPowWGEDEiA1&XvEGbDZ(k_ZvH zd42AAx(e}URLEWpNhg%ZgWwn0=DE4~?@(URE~#kH6Arup8lXa9m_|)+xZU*Sap(o_;eAX!&pAPRXv>Be)oi?UKw|pEb!r( zz)>mQh*(YM>~p%Mwi>pX2#86nEca$ADFR9Y`GFo4M%s-TmUs->s?oy#Y5-1??;>c& z3v_pN-Cn;J5fxntd+ouJL={7XLI<}<>^IIE)=u}or6%4@PA2$@`mb2Qg@xrmBj6Km za&qC187|J%r!In6LSLv%2eq|X;IBz8MR<15WD*orRIp6`GSO5eKYVtd1MCxmXmJmBJj9h9QP+O12(?QjE+I~gfAtgKS}k(dTbiPg_LEu zpL&|-2Sx#5sxfRKath)z=x-+er~h(>5d5OzY|$)UJhfMPE*<23q(Zimeoo5&Sd9`aEpJ6jqUvIPtHMG@l}gxE%q_!SdFt zzJ&#S1R5HFtk_r2ke?BxupHoLL>6u)GBY1t`1?Om9LWLvi7hKDpwEeSjUL%7emkzW zS1z>P2~@fFayugY5LQg|42RzJOso8WeRN^d?Jc}}Fu z>Hd3Yeb&uA?5cecdr!*Pp=jf%Dx@kF4`YGV%;*z;0diCGSM2$4HyLX}YfrN*BdxU$ zyGyxw-|?iKSpA~jCU&<5hpNLAVPm(lqN1W7?K-LD`$krlm$S2t?{1lHScySNvMP^V z87-HclcSI!kmjY9%m_%A)YjG_9KicaF-P)<6Wj?3Wb<$;_Mgt0rb|noK>MW~oDR;& z3R=>?vFhr^2ncTSxs_M$1sNSOBdccBuI@ao7;vg`ys9(;HN|P*V4iiLH{}MqR~54q zEbOf*YG~gaez|NK==K~^TOCSdynaqbCJ=7xs zxjoa-)zv*xv(&bNj~B%PrqRQhvfbtnFUU+IR1f$^-iKevVkm1s1kXGM&p(!AVXoGAHT^72sX@4cTAj;;q?lMGPkq;vdgs1; z_yuza>zof)$P6GhHX@|Dd_aOONMAo98Nf7p-aCjn!jZ<~NgJy7gNIiB%_f_hm*PI= zkbVg3HiiPv3&VW%wJq+sd3U2Ay*_I&PUw4D(9N$JH{`Y4>}V+vt=oU&-!JO?OiBW7 zB_i@wm(ll#t+~WKp;#Ls(oC@mFHG=6S>KO!VS-cZh2=C`nHM)jGy@2pSmVZGL+bYHY?s| zj?IzI5Wf8TT2@8j>HdnMdUA|WIR8y|j?%gN`7xzntshA`KjQ7U>?7<>Yz7CZ@`S}wTqx*m6~Ut*_dT*%ejB8d<=!ef5T|vo=&DS*Qz19o<(v$N?mD> z#bu^5A9L&0n^@ezm}HaEj|WocQGRuVa#lVY4wNERd>jKG#1%U84wLA?s0S!Gq_jQOM#virV401qu=BY{pD}^;Unzp+Or?8E%`=khw->*jZ!GK; z4aK=m^IKAe_Cx!@lZCU$W)Yj^7VsJ00}fxrW(q*TL_E%fWv~Zt6qp4Ov8kYjOvE=} z^DjMytz(2dw$Rjjyd}VK)MAE@d-x2h-m5_9!EnZQB^caD-fHr`~qZfZ!jF!38G#7t_Vt zTdP|3T=#;*OreeMC5dKcyLTX1i*=+hGY@yjbdBmDDB=32!z8&)ol_10cA=nPV$Zu4CcCUcysWLLU-bkem*T(a-uC38G%ytgw=^op`l)FrXz z)<*1Njs2Jp_p{pkNY&RK6s({k))@kte70(w`+HBXNeul8P^-a2ZT0(`bp^aCa~-8$ zxx_*b{((x%=5gVVgC4xA#*7!4_R;7UQ&UsRJlaqdvTmeJ-`atxcW%1JvtFL2OLJz> z*5NgEz5G&qFIU}3pBK&TR-5~XqT;Q&di&epZO%CeeX>}+v&t5KsW3Uj$9wVbCjPZ-mp#1I$jqo(i`LhgigL9z_ady9X{jawJpWEiNP3gx#J7BJ`#I>g8>> zyJKX?vFW$PE9etOm^@*yN-egUvHfgP33t1Y_46@t=Rj;3u9=)<S^6B(oNNXTp3{fxP`K#GTs^8IN`>*gRdt;A9u*jE+p`w$ zKXnRPT}vbGhu~*eT5Kqar`CJPnTUrUJu72K*{4jNnZVRCovgKve;#!=&sQd9VxBd$ zi3d>f{@l%;e-2AFP{WzdO$N0ubHe1N?K$4bBfzDu-}wWuaXd@CQD^SRrRhzvf5Ck~ zcPDkUa8Bm;uV!d2>@F_s401I_oz=Myo@g);F2QRWIxd|&4-{=}^;a5i1+QzZ`wuD5 zi6b5D#}5}ba7_3!3nm1c8eQiM_D6PWaQqjcwS!k>g>F9KMj@V@avHb9io#UcAEy=G zxNp|aRkRH3*LiYg;wYwD}-pVP4)&Ej* zpWuzZUL$$qmfm5j;Y4nF4-V#izzcRHH1azhPr9oBO`c_=<#4D%21->NKfBQlKOX3A zyLT)&m`jO=anPVO5O?iFKV6$!qe|tR%^pdgX??UC+%p_2q-<_L z^`~~wD4@V{KGiB#y|eeExrU=kI6dff;Azt6f>mUEf7z|=X;q%;#v%!lq?DlSjO_eW zyRxK-(t`sPCki8Yq{u!m-6}f{EKjYP@$N{<0H3BZj}Ezi}4x*Ep$| zbUubYHIZUO0VeH)_*|+v@VBdi%LwKDk9bPhZ><@wyl^eKAI( z^-CyA*l%P}W8U;#kd;W)VcCzChv4s>x@7ES2;3R*(BFWIuiJR=ZwV8b9q@6tAx5f(NxdG9V3l1q{M60|_;@e7=XI6m`DWh((9I z)?+me(~d25i*~V|-W%h}t}~uS95+eUybDzZMS85=JG}M{D;7;9R3p9Yne5+TpFXjU zd#jxn2hAti5?3giZ=BbnzHHZlk|3s~3K#b|NJ%?8Udf_He0|4ls%|<09W4XjrM@&L zWBXalfwO%^oHREsaOn2^=AzZW|1@rfC2M7*Y2%^{l189EIyUU{Igu$Kd(XcF*4iYP z%a^v)tGXS_eFkSQ>u-&12k$hFIespvdnq%K;pQL-i;Ixc*7)J`XJ6$DH36rVqJrCK zVgI#@!W-uWWx3VNABmWlF>l-Mr_LCzDYn9QvM+A6iX7D{T< z8fVl~W$IeXNk8>Dp-xOex$91|@!S;#brXSAIZqIeIw+yUiQn>mw%0ENXHbk|N@zt{u`3hIj{n z^bm7fR;vU4!veC?7s6Ljwfk1|>0e|n(R~-omCAEc4=`lq1;JShBPQD>+6lKM()F2* z+7Pu!%NGpj%qH!|v?e`o*?fJwW6)X1WeGW$(;AG9K5lq_qYE>~OV~|}+Fo4U#qpW1 z3@h1hgrDE=ggeNd%9H`BlgvhYI~1#J55ADVC2BOysx*EgeBZfQ&2t682yt|VPLQ^cuxlhjB7wwuzsTs7uR{Jpwk1)y7 zn8WSW>7wub?flvLV2VbOvbf2Y<#1m(nh?h}XRm{8d2iUYr$Py%Q!>v)yQ^8s9&@qJ zriz^I;s@jK>)orp*=-2CjPJ#trZ2^nb5)KX^UVvXWn7S23V3d(tlOZ!6RAyIS5(S( zdxwoV!_r$)e2Z{=9BMQQ2g*EZbBF1=(9=NYOmht_rE(dL*{a^ND6_6*x)%D`Zv2CO zNc28oADn;INR9Gtx%-2OLIM-gBNHm&rp})~`x}YK=|JiO>zCQ@v)l{J)G3WfNO{(% zONicJ2D%lQe_&c$Qbfdl(%@OxpFG6dG;DQq&V~BE~Ux~XytzNRhVJsb}Q9-6=NmCCM9uCPg+afx+>^rO5U4`h>A7ZJ<9qu8LT&F}@XHLBiC0 z38|w8OJR$E=(UxJCd;4zP%ah`fhztb;rHGnDi)2;GRWEf)@^@*7#lmzu`DD+x*zE&taSBi^haP)) z6~_~Ztv@LheC3UH@1-XHtCrk@T-`qj(p5*e#G~YT{6FB&|F7IC^r21=p(l0qHPLVK ztiQ!htGM8vCmA#@h-5Nc9$jR2hDjSf7JmSD zJivrTPDy1b{g8g}W?%jL3;}rp#Omy$XK+>&PVr~A%Kxc=dik?`v~N!6ewjIIwe8hE!5%tV|SoCMJNI z&doKyc5UPZhJzM_F3PoUAx?-d97Nuzf>|sTBcKXQ4MWY=e@uwaoAx_t2I+?6u3Ap; zeLuV{ld7m?-1UfuHP>6tW`7z>S08pw_atYpC7NqA=rnrEl6H!^$(-Hz{PglRXkMXh zHT#4!Pv+)O(_r*Xt=rIOTHbq43BD;0LE)S@cn9;M>Zp88Q7B>K``hMKuS>JUqDbOU z?{QtML-QlwnFG9Zw*KVwtE^1Wy5 z2-{YWGrzT{fZd+A&|?I++1F?d3}9oxj-aP zC72%=SnJ9R_eDhb)!nO%K#cFa*L+@6-~hHxrtIgu?#d58^Tb8D=RGLPhqHCFgxc4; zphev062iQWHl(8_lnj}Sa{NDd#ZOh44Su|0Q7SN#cHqvR=FDR^&CWVC_w>f`#_mgS z02da}ip5KG<=sC=N5jiDnc0r<*MI4wJ5X;Rid5ta4^(G&)AL~6rw_}|%QaKkR_4UG zBP17VHqvzdX(W%dHUj5tBS}S5w&u>Zb+;s~>36pDT7iM0?y>t2W~S=1;smI#O7>uV zrKN|{3%)XJr3|24{cnA(cm`c42tCYyFk_CUrU0#AN-HaIf10;I>-|bR)1nV}7#YvB zKKsk6s2C_{JdF6tS3=0UsrM@j_sX@ON%_69H*)u9@lC5WZFIjz7g45TDGp{4MGe)+)_eiHn!QDHOu#ZU0j5K3OkOO0U?N{y!BJ9)Wvnz} z(K1o3J_$SqQX5YItLf+jrXX2GP;;fOIk668P}=dz@91z`))EVoS9c@Ei|vZ;HW$0w zt%l25s$WMYpc)F#Aty@;F_vyO=g&GqFM^%AN%$sdmGV?2wrN3XBGi2L-IqT#FZ-K< z?DVm*ExIKseuWX z%Rf<9@o1-Q*~JE=I@NHWY}O@J-z~JH(S6hRVtfD1$Hg3j1!rL+FyfG?@ixOEsck=7;9C@bursy2e-L}_A3HgjWil=_-ZsS(MM@8SHKHaf~y7p$LabuKZk@SSlR#nm@ zLO96KMF-dWp#6fFKi~7-Qqfr5O-AmE?!kGbmLzF0l_>Bvqq-$965jh1k99^UU+>5@ znKzNhudqgk5t{GIO%PSOO|HN9!A4xAu5fTTn$i@%djIep5Rtb`#4Xr=wBya=%m8}$ zJ?+ue>Fl)l%~-hL?2Ttq|CJMM*|sWZc7L1c>kw$sle27~&h|LPm)vonQ*IXbX`)+( zYE$)veT=VMlJmU1Vicy@(<4ZC5b$(V%r4M;LG}C6ff&-d^ts(W~hn*>Ju?Jq-ZDt%%7&IFkP?mKzw@n2?YF7>nSj z45+m0>hg7F#?<8sw)ZESQ=&bI-lzny_3`Yo+s2*bp7I+v+mO=Pimw%)J#4#6n>s(% z&@&xK)682{n$wHdmo%T9cYY$I77w-=&ngYs&LAh&E_!WBE2rw71$rev9*z4E z*eIcTB7=w^l;9RS+^3y?3+OsPPr|QPpK#U0pqF4IRTENF?B^v?NXv zLNppT{CH0`@q81)v9DTv)3T#M;TE;lCp?zI6uJQRiNdhs(y^}Gz@`wVjlw5)$!%yA z*2`zu|MbpJK^2(Gl07)$lpdBo7OIxrxCJi&H>g~tc(MuepnMJS%_%A`CU+E16X53) zv_Mn>w_lVI|AP_{9gX}O(%5(dZZ;avt5Nh8q~0VQ{aM3e!vS6x(PRcU$}iUT>jv^t z$6q`&4LG8A1>X84Eb<@8d|Gy9E9el9q%(c%)A9yd`7Oq1)zK&}m5PGm}A$ z?B`pQivs;l;e7J!n1C+{qzU|*DTw{^P-V<2ojOX5Q(TF!u7#_!$y(F3t}9e#QbLHF zO+|-I5s5eMMiw*y<1-OHzrKot_(j*{Lj3xYRfMrF-kBQybAlI`@$%3hxr*(hcUH=u zN^(#0!3F%1)N1&ClD7*632AzZ;)#=8C;l435@=L|BivxUc(HK1gM0$DrtMaq)Ptra zaKqxS=i|Oo*>rqV)eGCgSOij(CK+VqAr!7pQ=HSA2524XBZi?1$Ko7|D2l&K$bmd1 z%iZ;nn`ri8T8^>ObusFYMBy7AhG&fDCFGTQaP`>vrwB{L%y|6j`fQsA?ImXhbmiMK z)uaQw6b~=>>5q{1aeNROwhF<_+u5R!OnyRi&h(kk*9b!ECPmMx%R*`*LN0`&Fz&B1 z=S|MX;ZDlL`lFwgjxgCp&W3mhOuR1VOgkrdTKlxXU!dfYdKe*rzaexI3eAC`IB@+t@W7*N3Zb@t7Gob$-oCz?PaNTM3uEoGwV;c8TmahsdG=ANd#&y6Cd5hBSmJAw>N)` z%KKvNOS?tKhM3}rNQ46)Qis=V7-rC)>$8+BTPJ#Z(;76#YY_1WWf5K6N#*`UU~m`^ z(a6!fg@P(UZRABb~TO-iqr7nAR^5Hw~$yM=MFwq-dG=$5^F>?iR_)M2oD17O546=9~ zWdz<^DiwVn)x>nQsIgd1VodeqOd+lD>X(KS58e9h3f`E@Rj3`QO-7wXcNQf1yx76I zdwlQ^X}!GW@;%h^v|607-*&TP^ZY=q^U~U5yC`I;TkhHWO|!C6Ob?5NHxqva7mmV! zM9o|x=>b|87QwSg;%7}fT3f+O{KizaOop>N8Gz6##)7qHLwlPfx~NTAso;Uo8(vug zy~Ba1y@Iyo6Z!_(`-Q#I-{CKwl|EBj+-o%Se3^n6uTmX!-*VJFVZJ9W!)dHp)gO20 zN=1$=QSYI3LPAvMTQls`0=}h24W9X67UZj|1gA1PDJm&^d(h$8zN2RT6_9r?n!hOG zw}!vWT%x6OR8UmxnU#ye7b^j(0{WH*(ANjV9#?+`J`2!t@=tQ$7PHq;x z@1ilXX7HP@NZeEYK$(8VMxrCL8ggXc;4Zp-fXvZcijs}LrLt)`NKOr6B3<6H6_ zOaF`QouW-Vyu`>iQ&sz#Q8J@%ci<|fkS&+(O6OEe?ZOvLdtv`zGChns zGNz}y$y2`@>YN=QxjpImw@arbqyD9W<%<_BgH`;j^TQpKXH9q-ptGyoqru-W5zxBr zkI@R}gD+ZR&GZWMjjs0d^(iSBi?S=vKJwP{Y!WSO;>1N~EA?ldW{T_ZbMEWGRhNfL zo9;i_oSot!B{C2iaPG}qh3qM{)ZVe>O|Kfc;wq8zc?Fe*oj4og0 zoqK-mygy|Nf)3+nj%1Vqm$tuNGLHu_&I&8}514V|j2ZO=J#6>2v6l06P7+$!3E^% zhu*ZRxTq=hO-m7_0!x%fBw;-6K0o#3S^#5T_AvA-d&i3JS6#h88Q4ccLM=_|^P;`+ zJq&B_&^|JRkoy)cz>*wjfmG}UfGK+d(f4!S+*RVNB9Sc2IH~sWU zmS>a;r9YJ_HoEX#u@{7XC#0}v#^YB@f|YtH;&Oh(y8M9ZOaNOhj>CDi4k^T3Dt~YF z^2^jE?@ZIJC3_Uh+x-|XD?tR!^LFy!R7pHXps``II!R$3H0d`R7B}YTlHRXA87Sf9 zsKyqlTj}`yCyY}T|0HE(grj_Vf--H5efvD+%()$WYJ6S#njo*Q_O48R>vA$OtzUkc zqjsaLQcve$msY?}$%q4+8dnZlcQU5n6A!G|x)Zm8=k0AM$=f<4$0~Lwb`OGGGy)3C z>#yFkXvdAvXJO*`bj@m9$Ns&=6jU%!1dJwDxf+=`81cBVF#}7;3IS^EZ3dwQARY!e$G0VC&t3pzq~x z>e7E!xGXzwqwkj>KNxtVXc>gRC^>NQ12#r4Z-EaZ=9;LPyp|9$PtY$GmJiZv`5LFO z<+`bCcr@9{@2b8zLl?V=jxEecaF0R`9v1=s`NMJ5>?;Hz)fB`;@4pddgu zSSei=twLg`(~HQs-i=T7C?dE^@;sNpPk87Up&`%z>8&K{x>vJQvJk23z3(VJQ|1ZF`W*C4^eRv2zu2&N&t}?1QcdC zEg3)NzvzlzRJ3c%7XVR;5zZM=&K>Ry`wws+rQUsuBt9MrhHp1}(E2h&`2yHbvk!yc zlX59ccn{NC74w~k01G&x8CbxM#le51mJ!Gx9xp3aeqX~ zfY^oZ@9)4V#Qy-JUy?lB9X%#J%rT%yG*&hiW;Oy>U4#q{fYtr?AT5G}qsd}G^5}4v z_CemBP7#C*9*O^U$hquAf>>uexqTP9@xOsWJo1rO}I0T+=UMUDlDF zY)Tv)ho7T$kJ>uyFM4y?(}=Qv zer5+6(8)CgnJ?g6H&WWkhNgIW9`glKa+p~~`SJaSfcZTU`IylZ!jMHS3|%{_28ZS& z2bFUhDAwxQ7uOFnFf-vUpUHAoXidx2Pba@2*~#2o;jg*bOS1cF_GiPa2`1f8JHik@ zZ-Yg#vVz=s)*;c|#JUbiqmb#fE6+t2d{Kw*L%V+2FsL-BY$IF8mh%Uf9y^7c2xmTl zQ>{!+DU!kguk6$+y7?t^#+H^-XDeZv|A`~ve|u1&_#<1-x$@d-q9IZyC4+6Yytqn{nrcA;e|nUkPTthAUY&0ehG45^4uIY;50FbO+UHrdG| zTCu6)YpD1ZTkpW>((HM&)Os}5MeX|YO|^HjT4<8GtsokU3TXbFq{ASSP;-zYC?z&j zm_DI#+ntNd9h8&O3QsP2unPcM{hrY8NLz?~{v6J?ep;;Y@RdlFN{wb~voP>`dw)|7 zd_wc)rfj}cv*w0(Fw}6gDYnen!@M>?Z9*1DmxJCwO;<%uKyyq;iBhx^Yz4MObSn=5 z?+%FNKmE*BAx%KJTTN-97KRElQ>(ezwT8->J0m5{Q;=~2`!fq6V$(;VeZKfWF0hd6 zY?(GJ@UU9_;spq*Mr%jZS)ocV%}o0&`q-Wx6v@!1#zW2P${GCwX=bpM_8DT-Lf>mv z13JX8Igzh%#;FSE%*mIwFzY+SZ1H9Fxt7!PKiy`G1tNOTG}^p{S(Oqw^3rJHo;n&p zQ|)PVoB-a~ceO&rFOM)Ld~{?adVw)HIT@EpU)KYP*6)dslI^mb;Tl2|d$$@zFoPN# z^s79bR6De7802s?9V(x8I4x0_5dFlNQFHl|eDJE%qS=!1xeoJg97xHH> zP8F`YE5E}DA${Y2*buPU3>8GeaA}nrs~ zGINXEW_5=xQ#{rt>Bztq**NBkcophm4Bf2wSq)FL2oKr<;<_N3e$Ki#`y2)75mrl1 z)RF~k9LwWpI#l!FXGOJ!*KEbMTBNR}eAIsu3C9HgZ2S|J}eVtGxWd;mdPwhCmhNMJ+9q>F0-JC zh-7@4j>oPa+}0=uWaIw+7Zji>f^vb$3z%?rYM9`m@w1XqS(Vw-23bac`9HR`V+PN>q^rEZLX(q>4u@&!E9>?@38B*giaS>2eE}sND z_Cy*LU6Gxd&WZzb;pgA*xPmRn%O9V;90I_kIz(sA9N1&S-Hb{)#Xad7Q+em&N3gPrRtK zWsdI;`R_LyfVXi`ZTTjy)Z$=sWE8p2x)V}jqjXfYED=wyUUFkvQFncJeEqd0CIP3v zm9Ke#RS0NK3h-t#?L(XFPgJXEu6HrM5n8{5EGn4tk$qkqA}jtPnzBWur%|rj(0sD8 zzP=Yx8fVH_GBe0u{=5PSR$IwN*yOVKvr*Z&v^Cx5oRdpk+1Y|)U!j5R-oIFj`&vt9 zy;hlh=uDkz5nj4cZL}_kEXh_{QkXmHwKv`x5<%Uqom`XL0MJEUF#y;IQ2v#r=len_NBa0Xjt&O{Z92(}3pwMr zy)TBqLfh|_jJ72=<$W9J`)lxYabfm@wSscGXPbug6)B8=ruY8GxJ|X!8Bhixp>swxcWE7^81YFX|`(cILuw!+qOPL+E4O_w*|FhZBr9dtMmQ zujAP-A7$XAZKBM2?pL$x|1;GQdf(xPol}2*NHlKhJCR}g&s>v3cK>Y=lKK_kwgAg- zewI?BKJ1IPC)$nA*_=8hFx(oX098Dc3_@xJY0IC1_j@tMu3`R(%KZk^3X z{7LmUQhfo7;HIq8n_+HmiHyeU$5LxbyzjP?3kyP2+O>8=S7+`2VF7gLfi7@WEgdQ% z9xaAxV*Ju%5N~EiDVxFg?r6hJpdNXa$YwzciS$T?!CqhEfO9PrH@n2Cd@@#^YM5@Z zRYuQ}{h3@VZpt^2y!l?`mPoNLL3L?S5cgKKwWlFy2GX9^l)x)HD*a_ls4)K-`|e;e zp(aM|83!{?Ap3SuSyIbka;-EHEHrA81aiEjwPa3M$5*vIk!|R?Lh75kZ=TOoU0l7Z zIjjhLtkw@7>%rxI+(tuUw)3sPE?r+7S{7cdr~WMn7O{>*U(g~}+GTXS_syq8w?z47 z;rZ;!GFSO(rQn@C+jG5HaBo>PF58FCoVW>=@ItE9ql@!WYT=I1<;Kbm>xx78&GOa0 zd-#P#W%{+PeBA@AcL{@in{Sm*Wdn`YX}lcW9^|WGA}(m)rqZY7{b`3a%IU7(NivoX z&=qdY0XjotBV^-UaVKrbsaF9j- zj1?4OIjrq2v~Ac8i@3^R9yflgx;*@c)^`g0G^xj5W^|3#r zRj3o{Y)f!dt$68zJ%HJC3 z->d}mW*Z!fBWOeA5=mQzb7D33KB@hNf;;DgzB&H&^S!Fy0vIVS0t>Z7Iu{q)L)Z}9 zX4wPiD*40iu8OVV!Eb$e{#bDwOvc4ZK1&Y6z^kol+Wj1RiYUnO@J4!UVPyuz+JG=w z)y4l_N`cTK9N2tx)tWj{fzR>0LHBOXZumq?fTbI^_TT5eV1V-lODSXP)r0gN`)AKoiOb8zu~@$4F-$JZQXE9Is?6T`NwbPp`74pM1m~6IwSSN{;5Li z0YO1Bb`(z)$$oIjrj1StG3RBa>1Q0!6PkGh%M)Hr;4B}mQCurbjawOO3G>Yef*PU* zHyhBqo(OS}0}Jn02?Ybe&BGNG9J&YEE1A>X^}gVPcYqRTG;?+3f$!#iICB5n$!Vfm zd?TQVrG4*#t74jvb&s8XFc)&di=YizUjC4FaT`<9L;8P*?sgq z{p*6${iV64s_jW@rMErS%fWiTMLrL^?d|$VU%cO)HyrqqnR`Sm+(hO2=D7ck)YI+9 zwPcASPDKH(+l6g=%|D1_FCPXo0t>y$`sMM4+umG=$DznWr&)%Cg~cu~ESy+|?R2Kq@qG2Uu_$UJQ@Kv-3|}^Zt)2+sDt<*mKp~S$$~O%-0vySE_oH`IOQV1{ z_2^1z$7GAwm}q-kU4?r~Ajawz?k0B* zzSd24T$0q$rvJHiG+bZN2LO_u|MIdc7fqT#at)xi2WhbVWOq(an=-hoog_(oUD1Eh zu8?bOFvVVsPjq6Cb9T!950KjgqIqjXGAE zavwi37Tad=kntgl`uoCZy@C2aH4z036_wZ%d?7=MmObfmAELav4g{8Z6H?E%g}IC}ozwy^<4a?YWaFA)4*LASF`z>h@DRZJ@& z3KPa6&B)BkB1b?Fktz>@7H2j3g5J@8BP$OP5k=B}Z>SOSx3kMmue}|PcvmJgWbL^7b>1@g!v~8yH+*?*X z7YaOAbA5SW@g3xOSOkpwhle2ueR1?U8~~>gwV~=DMCw#ss|FWNbm8r1%d62u1HV;b1n55OP}V}Gz5m41lPVSdXh=oj=kJll zmiS*^nv}f9uB)^5!f(s-fjMc8s@`7mTGnFQ7d#u^Q#IKHA2L7ek8by5<>gF0X>jO>>vcexXMQO&`9|-6{B(hR zsuZXCE6Kt>wIr(Weah}6_fHJC@OT%)EoJ@T+_B@wLQMK!KW%78SRxhm zpMU0$4*Qe+D9?xrQS7JTJRtSF=A+&iH%FoC!_FoS>=|r&-uEorm6h$I9pMA|0ZF=& zTS_9$gxV}Ulj~PsllJ2~G^r9YXX`9(u3BKos$LW6>$pP$-BS-Boh@FepO2XCNw zjr_|W66{yxd`l*73|kkj65}Put`(B=RX_@Uc6FM3)!Y7vS6F|2H&VBd{-#G(UYv4c zw3Pe5N$1{KDr__7p1VAk$#*X7_q%1Qo*NFGg^L2(BkhHS`TEGY4cs)C6*HJ0ub!Ea zhS>P|r|1X8ueS>6ecA+d@G!BRUs$5c+%kyJ)#ZRVZ ze~k>bG|(tq_1%!S9N^F-?h&HJ`9(`AI=D519Ij7~Jf`_ZG-Q8Bhbd3|hD<%k&3s)q zjqUgK1#uS@O0s!jKO|2HD1Lr>uZLXWZZF7OgUBhrC8;X>Ef&mv@Nb6T3A;Rj^_K9Z zw~uo(irv1YoCV!}O_gjD%<=*&=4#;Lmi*F0yzsHS|F#ySSBabUTxRg{>^xEUM#n(R ze2qX|dmYrUHJdTUqt?Xa)0dxp=-pmsh$l_&aJ}`kRPU%*>WXIX_nV%M@f)=T0xNF& zFTY7P`N!%@JQ#4f{rT-(80#a4ojoN-h!W?t(v>bXhhu<&#d0NO66I`EkL-L0xE~gn zgmgDH)gAL!(Ot2Yw7GB!;rTs1Bk7-6bniDgisNwlb=LNUeS7{ODMjCcgP{jBlbRfs z#ug67n)aJ5Pfjh~VMHaZbfL?w9yYj|lAEt9vQ@B4pzdvxM}#3b1U#+7XCXB0`jf*( z8L~oHQg=rU&<>XLM_GCgP8n+OE$CFpndBwst;C5`p27a-?C#xP6mjTWK5uQW(mOof%MW){$woNtasJ4vOI{fnf2koVt)s4sKA4NC zDW`#O=I6sInzRaO=$YtqC%R*@@*+1BUC+B+Y+h=9*7e;jlA|xM*^-wwR(r&6^a_vr z88UYD%ywoH9m{C@gR^Bs>`@I}fn|VZ_1m@8M}jDwZcmGyccFI6%##!Au7}fLy>mc{ zTYW`C-;B|EEq2W@X=x)UH4SO|s=vNSO6Ye~iJrE{G>_Y(V3PK*0Ffd{qj%NiFV4@d zR0LNkzoa>7(z$4@X!k|oM%i167J(#fl`K=4Ik!V=y1|CxOVj-QL*qX;6y-;5sH#ue zrYB?{iS+G4?#e_z#uiZ8(I8T5?VKki1WL?5q=Y0l!~HwwMk2QyTvs0ndAJ-8T^~{! z{H*%WlLnip=E1Sg4hDZ^s^Nx3VL#JG>b}!h0QyP*Im17@=hbQ2F20WeaEOLiPO|>}i=)-bk*j{N?Xw7Ptd! z&;96{uc7^m)_iX9P;*S%n9W7qq#%4h*33KIwBzcsIyl8JJm&1X6N0n*ywOy(19Y;4 zj#>8nG1`CYFOCd-!spXlhN|GX+@?su)os3v%}fyHSO!`0H5%FK)(vE`f5$uz~7Le zOqf?UZ(00dZ>VMm^!}?>X})uYQP(jFhI<=Q8KgE}w3k}bv^@KwHJz^K0U(q?Wm9RT z!Sxo+J$MFhTue17jb8RK8=3|+NvbiAPa(Q}qMb-S{?35zhl&43!N*?B7aBxqs z#>?Ds?HVPC3SXai=k1;jA3<)m(-<|GS#V+>`n$sT?jVx>rcOq_4EQbW{g@fRLtgq+ zmbc8?6tLybK*zXMnqU7VZmgo(sNSdk#n3nCJC5WI4{GNW8mKo6&gltJDA>f9@J~aa z+KDgn(g{iq>s(^|nbw`9P13(*%kFgI+6F7AUXB>KC<`J!o7reE!Wjy3gx_EgW9z>@ z?IVO&y#*|S-SR{SYLol&6~I;OWEi^`-`z3FA1blS<%~v6w5}=5-4BsbO<&G{1hE@i zS=|rXM@JjuRzoqQ*Qpt>iZatf_lpK> z{(3L+2Zh*er>eqUptc0L{Dh?vr0miN@XP*owYMks3yqYf{_qfy0-L}TU94Z$O$IWm zC7*s&vOi}2SKE=FtLK4W;4hgkRXYMT=oDYog(l{R&*=5VIo#J*aPLP+I%tRcYw^Re?ljxXB{fYib+ZmU#nN2q)hlciZP_l(R%$GJ>^pXs6y?fGFIo+ zD}BFaB|dJTGv#XfS$1{c85rs4=y3cpZ_{&N(x-=GPs35!rKJ{|oy$Pyn+IvF9|1I% z5=3_8CR$AxZC;)br+Hbz;PhbS>i}wchf9nQG7>+HRFips1Zb4s+kYy9--rBDQyY^arw=dzOBg<(>iHz)C%|Bz`3vxi#7-2zs$l@5Xc3~t_M_*a( zNJW3^%4T9qTFZ0R{0JU`Ozp2wNRaI17i5HhlP~^%!DNu`DIrt?+@q_r^ELR(W&D2Y z4IdxX+uVWgWmS|r`d(`2-0uZJD#w~gSHqxB$}vKIe)K!EgiNegi3bYrxxxu994Nkl zxbdDEV$_Vb(bj)oz5;eqp+BcG6l?^40`0)J?TD~Uzm||uwl*)e0qw!YuhT@5cUmP> z-<8;JdMg?XEKfOqTHJK}>mA|U#Q~e!Y?}Oh^evv*imT{{KrW&~w7O z_&)zQH)b%kJZYZEvsaUzTk>V2<OS=!!io4b!6S^^H8?6z-z2;nLB%(mV{UjQcZt)jWouD3xEnb|LfMi1JkLOiL}~c&n;z zZ*1!_p=ZOTG5A*MsJ0jk zOU8@8p|^nbJ#rr3YV>7Ilv{4-OS;e$snfEoUT#3Wv+qvAAADNL4_fqxuyGr*V)nt3Imaq1n8eXt z`w*(ijXEb>8mp^V-1x9JDv_Skug=b)D2CiDqiO&16|(1TH%=H8m4g;?;JXJ#-UGjj zLCReDP9{*O-gob4)1r)=PZi1FY>$}bP4n~Jj;9B>8dhE;Xj~t-4a4d&6JqHj}B}m)PJWDqm~*k)zwkC-S~A{z!6%! zF@${Tg^!cU3<4JVzUE2VI~3;GORMwT)MMm?k6!cKTNlAQro8!zd0sXj85>4d=^J_d z#K;0=R7q7-0OdUM;f>?HoVssk*}MCj8Yn?Rj<^Iv@}Q8~U`1XnmZ%RFgkSy!rKEa? z@sHKT;vMeCy<%alz`< z``d<5(^q+I{v=F~p1DaeE3w048ah~ur^8GI%qO2g?bWo@xD&5Ab|j%<1aDBQx{g@Ai?ptyv8B1jR%13+gmy3N7RAK_GQRDfWwWQ@>pNHOVa=Sbx%dIke~-c|^wY7z zNu=6x?u#SYHuGOxB@nC_$P`2Z2!^jphhw>S|PsS>)Z9hT4Oahx6`0C zKvn_0w17DA(yDH}dEUHgZGyXzXvx6x9UfX{AG5cpiYCWbzbG<~@3}#N2SFq)+FPwZ&PhrQ! zARK(kLXv$oI++)Zvkc(KhN_)9N1o|MYK9?MZ#mzCs-M-QJ^$!J{p5M|oR_W|JSp#@ zTPoq8V{q+<BlRT z*-oc;GLBdJ`p}Z3p0B1ourjaR5^F0n6D!pMIMBD`Y|p|Oa!b*%r*e(1N-{qw%pOYa z)>Z7~j!c`Y59VScnx+gArBC9q17kHj4??ce?=10qVH`)TXHq%0>}jU!(nagCt$$`X+vgfx?>>J*1sg}lMqgtcId!fN(6zEkDw_RII!lMQxWtc54i`mWNe&#=n}fJ?J99f z8px%k9H3#mjXncZPD#zY73jIi22hw#k>+j*56xJ76LI9H{~GTZiHnJs-`Fh~NaXA{ zm=qeP0wv_neyq*84`&rTPkOmuI(f%h$mg&*SMz0Yf@ks6S4y!6NU1s7Ce!JNGFyBY z^zZoWbMiFuv!K;#5LT%%FF=g@l}Akb$In-9HpYhI%v6N;ybtrHWxFywAzKfA1u$Db znHhqe4%Dbb%1My-*K1uNkLu1JyX){2`q^jQl`_S-8?bm7HF4r-zpfOHSYBule|agf zH0`-hsnIjeSDy5oi#Or0k)Iiyp3IlTDBgWh0b(_q0U@h&7XFC*IK@NEMFzvk5o=@(@$s=v4k>vUQn@e`o4Q7L_>AT&O%4$p6e;L3HLDXl4L&e ztwa|al|g)p6fGpsTCH-Qv~nK~GCIu-2mWMj$~hBxgH4f~!1RQjAY)CyP@h$&+2Og+ zFK@??uis!jQarlqZry<yrqk z-`fSqu_uoK8+MeWckcIdt5JDV`9{SsAi-;FL2=J3KXSSvw5gw2EFL98lu`V>Y!7-_ zAZO0Vb*cV12Vyb1iW#^HOyfWD=4Ttn1(TG+Z>wx30gUTGS?UYLF3DDrXN{^_VmZ?*)vGa*h0Qpq?t}Tta+f2@7}e1a&UB!;w_}Aq*misa6orOon&UBx>ns>*j3#4GD1Ue4|*$NwT+FC|Pj!X4Fxtpw~z zQ7@)65>@|+=s1CBekPxrW7=MHZ=GaVaLq8X0?R_);{uAb$qvq|oI5cIC)?Ktr=W;K zHOR3J_;;q`A2T^w;JVCdu(q*LS6@HnQSrxn>U?e`rL%8t;^)@W zY<`}{Ja>EXLT{l!NpY!}4G#U&N5zt7S@7tl~o^`k=b8kxvq z%5=j{GNN{D0}kDiu%x|pYjTj9EHHO(1EHm*RYyoomGf5$2)s&m?Hw7V(-okpBe>5O z0<SB+Z9p!{{8zw(prCed;3D!tux;T z-rRRFFqq!+^l&&VBS|*7E@zi8n3Pkn4#hDJU!YOq(L?$8;`bPv*7goI_!*>ol>0WW zP>6c0J89+#=#kjZ+?}C~`AN&E6DY(PdHl@h?i3ihCwuUxtE zlQwYSZGt{^bdibtIsGSRT&R58f}-E3ri%d&fWZ$+&VSik6=2Zo*;n6Ajr9XPLYepM z>vA$bdVVg&1_^Jdn)e;NL>Bb*_Z8CJ+s<1#tx&M0aMiZpJdBNJuiI0RF$6C(aUB}U zx6JDbXagT!XTS@ zb7|;2(CTTrGPH$nj>6Odj2pjhRKGJ!2ZGK0Fc^~}{>mdByic3<-CYmp%+E8Vp2c;Q zt`58QyRsD0{lcvW4496cnW?wMU2uiAk~Sy_KDal$37}(i8R-Cb!b(gQz9)N*sG5%j zffkI?{mpGJS?(VETyEKg`Af(5V=VKOiFKh&;%m*0RBOWvXAlAW#6n*2n-{+X95YLT zW=la$pr4gm9h7tz1J#h%jh+Y(9NM9UHTUtW4=JmTU2NS7$gd%U?s0nC=w zFEpQ@tA2(s^t0=+)E^#|IL>sRm7xwZ-dNf`JB&~65O>*lAySx;VqpBgl@*#EdR z&x87Sd6~3TCK+HHKNlt&V7bRVef9?jmYpX-zSVVqgnDX^0BYIjrA|RCp7VDII0)Sb zxecI{bj@x8Qn!yLqa3PT&-Yoc4KDb74|{fbg(L1CYuQq`#~Y1lL1%*;KIbCD)__M&5f?#Tnaf>lnt?sG>q66AW%o6Lc4;_XrUQLHWE4)*8AD@1#Ov>;`_41v7O#%Dspp zb+6Z~!Ab~q$%ajMNFG6yjDZ=u^xnJe4Czfa;*c)LK(8*q>_>VH$Q=%1ZPn4+IgS){ zM^_iG;;sc$tR8NDI>S6b>F18FeIZ5c1O;GSH;fK`nesmLYb`+1e!_OpddWEz5n59wOp*zN1$cOsMQr#Q2&baTnx+TY;}7_1H=))(A77 zkBB$*Y%2~R)C}d|nSG45(Nes;(LtiI zf1}&_=>B|s$RAbS@?OS+G>-OqZaX9lobX<%!F#r}98;HEHDAhj@JR{TbAc={Itb9} zxMP*vF0>p4yqpi+zU()*MBhkPN}3GZ$0$>#Nqhq+U@Ln+MA`aBQ)wefy~dJjlO zWQ#4Lw%i<90+T9tJxF=PX{2*3%xq;mrH9aMsUmbAt_c-GNS6N0PE!n36c#uES6DU4 z4BpAIOE_R_kJ8{(C(7P_G9$puT<+GnofB(Y%5d;$Z-BvKM-Nd&(%Tz|#l`=mgaq{L z;mOES+=^4ltmKticLjvqKxiY-ftD#~Yz^Fs*ph{z_Wy{i12tG9?qHh^B6(NzC+6l$ z)1A5=fR27>z|@tGLdy)t++mzj0d`}DsJqkpm*9t}Wa+%HCQqAI+ky6HvW@R#wgNfB zm=gj}(!%1nu`miD-qc1X*a7c_!1=jpgC|luhXzp0@zf*Z0V%0X9J&=FV6BuRoL z(6ETb`dPtn0*y6T_3_LoABUc|YXo+la?P+7bbtRZZG`?l~wGW{yGf)q#_#ly{1K=>}F z+{#CkH!WSkE$+69Ew!xyE^CUN5~9x0h)maVxwLUAd{S7*a!^e8$Cm3y-j_z{WZ?~e zo~@3eU}dXZ2-_q`e5Mjx7hV&twa^|M7Yt+aF&i!vUTsGQccvdtes~}?#q+8T)5BNC zJvolu)0y|FvpL4V(vnHrhaXCt%1r}llsH@G*H0UfKS!umt(59v45|;M)00K)Cl{PS zy7fzA1GD+f#Qq>YV3DYa-r-h1%;Dxc!_;_n%^GnFM6WF7XzI&xV7P{qVSRZa>kqm9 zTc^wKR6i2qBpv#$g@r1o=%>j^iDO;&!JY)fY`&c#X-ybdT(h^$R+C3E3*v8dX`eJO z_oyyrS1b$u0s#Y82KW+Mj3h#(L@d1mqmxeO+voI^O_eTV$fzxtqTS)3s<_R z%gEXz0uct{flE3~F1!nljU-Kf=@b-`Hm)n`LLD~r4PIFba3j?%H8*-&Ua~YR1rr8& zH~dUCKg9NQSVqz}cpdz-UQ9#@dA~6&0@W6mV}*STua!zJm!_BIufe47Ex&y0xIk`4 zo&mK1coOX`>N{f~_%3{mMO~S>x!Ue{N`)nHBxKu+zY|^VsH~%}S10_;i{y+tFtLum zrrFPMJac3lYEQ^LhI5vxIhcOXz?*irSpK#0KCaiND4edI=_Tq zf2mVZ3RY4~Iz+cG#7cQP;ISRq$((CgROPeFLt-%E+PTOwKhwVP688)}gXwqF_IoV& zbd$xoA;0e40x<2G}B?3dYuQq5}EN$p?nw58^$h~P7ssL6R9d?rHp z)ZGshS}3OWKbQhTB#av7D=Vo&@9wuj2=o40Sk!CNHDzpzr%IPz>$57*^1w}+UtG4G z(sy+Xb>J1G6}0ePZ@}(R^JSEwp^hgmu(8fFB*JnbPeniGaz@TYFi2a|*jRwG-qQ}n zG}yShM%r#G1lIEOx17qfbV&5WYNVcH(5jsw6B#=}4EVhbihsvJwi#qT$RQdZRy$4+ zz=iI5bp#Ll#dRGi!p1vkp2P0+pm$hWI5iz!!T?aR+?|tJ&;A7YE*Zm zRYop?JZ}}Krud=_?M_ZodlD%0xPggPt20h=?JrM!k=D>-O&H7QLUc?|3_uJ3&hql7 zSTTqVXy&5_K~|9gxdx+-Y%reahWOh$ig{^9~krxawW137mndJdoha9~d(y{Yzw62ArB zi`4Yb4ytHwr2%_EL^eQw!X#%dtxv_0#B4U`lLeMj>1Pg}{iK^kAUsDm;I1CaN&u+y zbw%g}U$|iDVMjEAHU4?_smSgHC@N3{6UE!Uzt1kZUXCh8O(Yrr;2ZA6ig2C+E+hKA zb$GOTEZI=)BdzuYp9xik%K-4f0g&r_VAhi2B>+NNdSZ^3YVF;9_uTv-cY=e1Yj@5~ z#sJ_4=o(=UvRqDcbKfyWx_4cmvFeLhd4HKqRu({17jDv~AQ!>Q&0znoT2w385@OiI zea8Onjc?I?Grof&S%SW{08F)qUpIJiW@ZHdKzYRiVji1V_A|O27l82X{R;Ab0UVte zv;Pb|{phhlwfF<5=KhW;8yPkPfbXgReD?=1`^irEfOUm{gR4%Tb@*I2%fG=%7CaE7 ziW;A>!fShxvC+Zw#(Y+F#YEj$Lb=UbVzI1}&h?1s$-_FugjPNVwI04`sjfnfx<_oj zyHRED+79VfwRI(Nw_7I%0!mmRF6{wlD2B+`ay){An>?|A;k~A_ZECsQVHv2_^Xs)K z)7AOqLEW#%!jIHkr&QO!JxhvcsIYPFrY+0Y)k^8noJ7y=t?NKiCrXYc;>YLnY8!p! z(7z^!^0Gx3G8V!zB=zXxmGz(0K1@ltJ5Z&QV`{0$2??T!I(f&{p;-w>?8I!k^jWfN z8r$bA|JRKtlUg3-G$3A|3*Dv4E6(n@Wf`YciZx2QxU#xhS$W)J5fYQ0pMzsJqwpQr z?j71V&s}b>|AK7hA>i+p`!{(YkVgca6MBQ}k+8q_F&Q|@x4VEgUrYDYDZP_)-wWmx4 zTr!_uj(9v!YE;Ta&&ZV0l0Ey!fTa5+f`f8|j-a{r>pBjaP+D_p4K+zgh4kvDK{*fN z&6YKz8A|H?rc*vY@iW;j_>fjKoEVW5cWe0*oce9=ky5&wUM_LeC5o+Ai6dxkwueF$ zvDwTbwY+;injT%X++~)O>d_%52+HkQ+xyepL;LWfQ~45eRCD3{W1G8!oQInTV?U4W zo&)%yR15H($EZ?Mqz0VHnGe2K^)dKOa3sRv2-6UahrIZq)yvWCD^ukmY7Pe`Z;1C; zgSUx&xy%PQZ)|tjIXj%APLPwg^js+W7_AYN zwoin#lpv6mRCmb&O?eJk1P)aM4&OmPlPkS`G{2;@-fGwWLXQRZP-5Q}y+`}tWoPp) zv3iReBf!^W*;!n@qd6Lqsjw9?Sxs-@S*NX)=wSA(6wEF8-8?V(nHjU7{lO6&C$_`m zU0%oqc6Dpbxk>KuK4qF=-nLn ziFht~&+Bq8Evq17#cuH-lCh>C;da$f=WW%6^t$Dg*F8H_j7+z9A&l9DF4m1EqFO?( z^qvn7aX%6*Llg!XKZrCSVI6?->~RrzN#6(FnY zoaqX7(yUxXZykX_Fd_lnuB9hWH8`5!n1764wumxAWxj*v#?Y}*dOGaUUB-YG}M8gLY$c>2`3JU^%&g**qvrEfT678 z zk&_`XU6~~qYG3IqbK_2!URBnXinta#qnIeOMit(dD?u;HC^(h9_vT*I6H9+mS&o=2 zTb_7kfLg?dM-UM<0eejG@vUpz;s%PiBPZIV^?NG%nnDGYHdf9nM!Kp=rN<>3wZ*dV zgSl4h2`#Q914fyk4vt=0-jW2V?1jM1>85N{N})GP^a61qVXZ~N z-+;d-E^>Hxy;2}ivb8!mEiFF9Wih+p5svdGXWT9~v**NfzgModd+QMyz!+Sz$Tb6X z{c$%!>bGlKo4x%3PUYD zwN?y9cG_^$Z>jYQ^`APuLVb%4$)R|U$8l4Hdd|>1QajR3h;c{~e@q*EeOfjmF-gwE zs`1xe+i~(WrZLyptK4Z%ytEzgVQwm}NvxqU5T>nmL%I`E`{(5sA^0%+%w&^@{B>Zf~*;hlm<& z4gOP3XCGY^R@Hj(jh2m;dOYJ}OuUdp(>bbSiTGU+n!Dfzqi8kBQLQ(ovix;R5X{%4 zWJ}jQY**A5@$0Lub59)&E|k={Y8hZ;{^6+ssuFk*)f&>;+BHiTMg+1R#;=}>_@o)o zMF5t-JlXF5m*oFH9}p;&4Y(lT4B~bRF*j!uPE|CqPg-9P01fJ+Om55D1?YySVA9Xw zCmjpFD*OhlQ{SK7h(TA?tCjJWGLtp~vgT%(g(oxkPZv3nkk1#DlIbHpgojx;vZo8} zYd3SrvVJ;%cEDJvI7Fv@$O!053T}p4UigPUru`er(^okUCpg~}M3+=lwg}2O6 zUzoLB5kU(Fl*&Fo?kv(-u~DbDJOpzJn7qxp&>pVk#B8$pu1vwYdw@+i*Y4-$lF=`| zj>lEhWvS`OhM3p%dQl*Wus+y8!KEHs)impE(FI7((hp-wUPou53Z-lJG|jg1Q-_81 zDH=h64GW8jm7BKwV`h@EkKoVp(hHf=2vu*GB&7uG?W~B8a@>E%aVBF5PbMnm#IZka zBqKx{Y>+8T^UF$hZxW%oK_P+3OT$lm+NPeC=cfADu+r(-Mg@qPkH62%j#IjwVm9#5 zo=wMfFf#*8-#LfOx;4eLT_P}$MJXW1EGUH%=A;Y#M6qPiVVj?#p2+mrKhqd0o86^M zfo{Hej(TMhXY=^+IAwbMcjr}mc-se8V;@YhTWwE&o+kJ0bG!3xcPKx=G zEM}|U4SpLI7aw_--`m7$;(b=4b^KG|ju5GprCi-44&)!n3RzyJV{>0G$7*DF$^ow9 zAL5OPLmt$dp;LF^6#Urix7mC=q+X=ZjC+NDVR*6G@oCiv2^zKZq3nX zsMHbnbK5KLF%@_aVn$ADPF3@4``6@G(3?!NmCbT5Z%oN?ugp3m^>FzyX8gfIUMdF$ zImZ%hEa=Kwyb~o&HOmtQDJ%9)yo^Q{=&xQCF!98bC3L6wZG_yQS~xj9wx7Pl|+_kOGdry)e zu1PM1!6#DpiRb8cf!t^N&VcLWlvMb-!EQvom4V2fjg5_O9Al zOr9)y5hMfn8vot|8Es9=2;7zCue;L5#|1xwE(`0v*3(bXQPqhB>u5Ao4-cJ~>Ietz z8GT;0DX`1P=+uE5UDzXk`L`V^9KBDI>g#|X+lMzZl;z}$TIKtCR6WNI>)rPIm?zO({ zDSMP;bXR$&_%!nQom;MQd!yzp))DZtk6vK|+&75(N(yY_B9`%284dYZ@%o+qeV>z= z{eJklIFgAh*e>>DUCi^03BR3Y?ft^dqI+R@tb_GxS~MXayCQ9$H03*5J=+uZtddwj zt^L(-aw$XtFn+)D0uB}j2xllc(j|C&7fz;~#q`o@<=fF9ns$p^Myj0P0#?vZdRBF6 z=GatYIS4t-vyUh_GoyvR^j5e43PhCY0>|MEMLeEad*K6#JA)^QTF?D@j5<)L`AzG+ zQ=avcb<$~i%FUd}kQe@9v&wM|01c3r9^k`CelC>tl#hFE7?sv! z=DspCTmB)P-oOvzjVCqX;7-{>;^H$?!@Si*VjNYJB(BPcFwsH3C)FIFN$Ht(ZCqlz zVyERu|0DaMw47o1!cCD1rDjT+(|g~;rnnBu5glK=c)|q`p-QH+v5lSyPwiEo>o6cxd0Js1x68$;XP5V`(4 zPJ2z%eRcGY^g28EjfjzuP$@&dwJP4JB-9zxA02C}QakHfdXu+INfCDj9Gixns+abl zE8cw&;(Q!tw)c*sxSRWt^L`l5<(pDo89-*A^1ZstG7g301IOPBgpx=ZRI$kmfuZUC z3#Q~K(2rwBf7WWJ_n{y=%+!fIe<(d*20bLb;9p+w*tStnevgk87=Z=Ry#LK$>%}ZA zJrrej1CkOXWYyD+8p@QTY3Uz3=>Cy5ea3WesAm7zyXC9o{)Z=Gb=<#bV685wY(ls@ zQt?51@s!7%{ox#3VrULFN>${-3mp*TvDNRdbTAq<8fJs#OOjI6M`E8)$!PyxN~x44q2}XJ>MGvu5G|Pg)Bap~w)_83FgA`sgGM)WOswyG z+Z4gE<#6d6L+%#SP{W1pf^D|#x-#NqDjm34G+w_f%}{D4scq4CfRmEZdxb^{@4}Pf zLE2`dbgw~HQ9PDR*k~`{WShEaA>}%;4}^6VNpHgJ>kCwFVZHml99haW0wpkSg+nj_ z8N5gFHG(JGMHb>6D6j7iCdX{09Uj;vOQt7W0ZvFP1kxL#$fh%-L#I;p zYVAJN<8~TlB{j#(iFL3?0}*KVo)`We9Ywb7eai7Eo+M&Z2y0uNU=9w@no$KWujf5o z%muv|*{!LSx$8T3siFw25{?a)R?eMO)CT?o6gPKDTbIKz4cysAiLm7<{2p_@I7c%% zCU2@gL-*?-DXLADE<{gcpMv*r28vGUct6(h3sUcdYmo9XmMN>L>Y%K$Kk|DCB#xYn zc-KA5bn?Oyk3l1?S@49Tc*6Md*nYE0w1LiXdr5efjj63x>kXJrT-I8;e@-Gh=1qDj2 zw-O*VPWel0U;9CrNy^z?3|_f>EZT8)N=mR8CIJi)@!~sMHJFU$neF6T;``{$-eC&| zld6As6e^`Ju<$CjW`r=4UGT%^fbszM9pHQ41=%18ID}}c)0(1kJj!{dY1u%a-Vdor zzP{vlo1TdY41z6DLd0YJk!}V%kLZ@DQl>=@1Lt|`apcPJAW@We^g{z@wfVX;;s*!Z zOocjNo`#i0Je#DRR2_L5RSB%UAy2~}M*zmltQtCMnX@mnv|;%jVQ2Z(gWq8ZnZ>)i zO$Cr}WKem151w2o$|2VeBwLHK8! z9A8clGDFxz%j(TAlyHLZNO&ygHu;@~qbS4hNF&Kz^ye{3J#IEN|NPZb!3V36PM9ug zADVV)hQenOj)!pKVdPcM>S}VgDqWHNG+4wXTWNwGmEms2W^W%X-iStoFSYh0cc^-B z(7?TczQ)mRFvar(&yvl_6Ymm6 zBkV#SP+m;>hn`6DCn|7Ox$tw{VF>ihxOZ}?=gH0|6d`~=aXcB zuIb(`$CN!2j0HSFw$()kiZ8n@wiXu8?BjH)h62mf`lp&tk=0N(d1>D|slO2WB}GSv z^ul5j9DUK<-kJ60GULI-_&{q<)=1ANmCyFLe6s(~3@Kk)!zAaO(M6V+2+@$P^JIaZ zazIpXrXEr4)ae~wKsMu{h>*n z^mJ{;Bc)_yx@*v9mlNQ#oz3sjVdivZA~d$`R(ZoJ`?x+XEyrj3&s1;U{F zwto$odU=qMIaS*M)pb9dVeUgExG@pe>7fxtd84;le6W`4%v!fUcz7%?Qa(o1&*eKg=DU-tND?j1LttekaYy7AjoE~TYESEY{o$3s znxZ&|=FENbS?a7>3+a_{T(_qEIUs^}5{Y$s30K!+^x4Hsnq6>K^|BoFwT6B_S378R zJ7s+JiI+N5u$7nF&vc~(wpiEQU6MT5qrV@Y*hM#PD4GwqL6rB&I&emQ7^lr+E?v=U z-4;Y6tFnFHS8L~yil7t-RZ<^{gIMol&gx4hd>>_tlzj-dt z*%6RK$u=F{)|m!dCOU^%Mf;S84+jTrJ#<=DDQj)l(CXI9Y1>EZMcMFqxPa``=Gl~c(bo* z$;a9CgS1NSVVvLL_w{5-Ok@K(`C9HHQGeI=NGj2F#NL>LZhEV`HP&uaNjQ11b1|1c zeov83Bu{O_*V{wV0Ma*FX5uh3|6?6UnP4guW~`5R2FgWOLoZB&O38`o zHr;IK0s+lMsn+eSg1)j9|Djd1n?0@_q@AF=QA1%lNP+IKrISpPNkn0*g(|?-p)j1%n)Q99@#Fko21)W&L+?z;Hp;e;-Ca6#m@Ne2fmtp$G%4DO~Q=3-xSlL4ri; zEg2^9PirA@$dr~>JqvoD*MYuH?2*Jj^m`0D2LUl^CCt<5gedv=^4PO|8>Rqf8TRF00B25 mk=6>bcYr@Gp1kBavaSd+U+16)SYQvC+-s#*r7!<{|Nj75h!_C? literal 0 HcmV?d00001 diff --git a/docs/en/low-code/images/designer-overview.png b/docs/en/low-code/images/designer-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..f75ced14790a1aa69dc08e73c2b12f6221775d57 GIT binary patch literal 29320 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 L`@ZP(jUWF7cBZ&F literal 0 HcmV?d00001 diff --git a/docs/en/low-code/images/designer-page-filters.png b/docs/en/low-code/images/designer-page-filters.png new file mode 100644 index 0000000000000000000000000000000000000000..647df1e0648c11256ac008407441711dd9714b69 GIT binary patch literal 71733 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%0AuCiH-73K5GXpq zMb9;*SEO}Yx;2?gL~bJ<91E*l>M=qz#sE(c-o`N1=+VkPhd3k|!z9tF>tO zXk3=|q(w#26?Js=C}EpbJr#n>(bl7cNX>gOz;gr$aG5S*M&=&bh0UZNWnHS4soeFp z-CY0qxO$6LF>tk_ zuYNQ!PRo4Azcn;#Q(Rc=2-dJ;0#qq+;GQZww1DjwQw(ZYW@hF2?H98R$|6Rsb)u>A zw1l)Sp9YB`bnGJS3A$i+ZO>=m6_$3-6mS@<(x1{FE3D~Kzr@qPUEDFUU}<4xS}c=w z_lDKLfROet7BZh$G9= z-gO;;q;0u7l|BPjurw;|UZ?X$K7VL=& z&0tR#CX-hJgBsSvav$Yd=~*7yJ|>F7kO# z?fmBN=Ven9ZNTvI8P2~hl}(1Hzf9;06xl3L*-kR)REXI%{$ll^$d2+Q^EZBL1;J*= zp{YaH`Yg^u)LZZmt6K@93-&UHD518$Obj&F1fiz}a-~&$ANhlA7~QAn&GLGtJQ*O} zB79C$vHeM|$JESUc8XYmC#MKMhYLOF7d_p-Rvuk*F+we;JIl$&EbeU6i7L}rcw5h@ zQiP|suTi}4Mv0h-!K(i&WI?m;(ps3B^UgjvFQ>Nl1=#nrH=3PV|A>1g&+#LyR6?ez zzCxsM30Y{__gLpwHYaCYp7#Cq`d${!V#cXt&DbdFC+?H6I@_L|GdE%G(>nW6rM2x1 z4J+Ff3BEJ3=ObbWJSxyWpU)Yt93hora*ou_3lUo`y(cS(f-Zp=hdI|T+BqT|Q)OhH zBSJyQ8o&zW?`u;Ltk8+a7>~cIUP!unx4_9H!1Ri@E6?ogN=n(@$d-aF&mYcM!ygUu zj~#4|l-G0vu{bRYks5*b7)lWhc>R6n6Ki-CGns#vjjKqT*lnmyPGIsUk+AZ|?ooRj z;Yqvfh6Iz2k(RR3Yakd(TZsNqdCiJkm3UYh@FxiM*ZE}jX4s3WN1h#iA-pFH)K&m~ z%o~dWCT{8Q?qyzkwi-g-5Cs&TCHw>76%7QT{`~g;&t`!K@{V}C+SR$wK+A{-JLM%% XaQ7YS&qBWE4=XFJAXW78{pbG$TW7H- literal 0 HcmV?d00001 diff --git a/docs/en/low-code/images/designer-properties.png b/docs/en/low-code/images/designer-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9cdf8569ee9afa6ad8740dc772438b1827d4d8 GIT binary patch literal 94043 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 literal 0 HcmV?d00001 diff --git a/docs/en/low-code/images/foreign-access-modal.png b/docs/en/low-code/images/foreign-access-modal.png deleted file mode 100644 index b7a9c3189e7c33f0da500488da8cfd6df7dfaeb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7005 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 diff --git a/docs/en/low-code/images/menu-items.png b/docs/en/low-code/images/menu-items.png deleted file mode 100644 index d2fd84b0098b2c642982079ef71b0ba62b388e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7409 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