From 445f3e5e4158fc9df0fe7fe93c8f20eb2decefb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2026 04:18:00 +0300 Subject: [PATCH 1/4] Add dashboard schemas and page dashboard support Introduce a set of JSON Schema definitions to support dashboards and visualizations (aggregation, chart, chart-type, descriptor, filter, group, list, number, position, user-filter, visualization, visualization-type). Update page-descriptor.schema.json to include a dashboard property and a conditional requirement when page type is "dashboard", and extend page-type.schema.json enum to include "dashboard". These changes add schema-level validation for dashboard configuration, visualizations (number/chart/list), positioning, and filters. --- .../dashboard-aggregation-type.schema.json | 8 ++ .../dashboard-chart-descriptor.schema.json | 74 +++++++++++++++++++ .../dashboard-chart-type.schema.json | 8 ++ .../dashboard-descriptor.schema.json | 23 ++++++ .../dashboard-filter-descriptor.schema.json | 38 ++++++++++ .../dashboard-group-descriptor.schema.json | 54 ++++++++++++++ .../dashboard-list-descriptor.schema.json | 55 ++++++++++++++ .../dashboard-number-descriptor.schema.json | 48 ++++++++++++ .../dashboard-position-descriptor.schema.json | 29 ++++++++ ...shboard-user-filter-descriptor.schema.json | 21 ++++++ ...board-visualization-descriptor.schema.json | 65 ++++++++++++++++ .../dashboard-visualization-type.schema.json | 8 ++ .../definitions/page-descriptor.schema.json | 11 +++ .../schema/definitions/page-type.schema.json | 2 +- 14 files changed, 443 insertions(+), 1 deletion(-) create mode 100644 lowcode/schema/definitions/dashboard-aggregation-type.schema.json create mode 100644 lowcode/schema/definitions/dashboard-chart-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-chart-type.schema.json create mode 100644 lowcode/schema/definitions/dashboard-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-filter-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-group-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-list-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-number-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-position-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json create mode 100644 lowcode/schema/definitions/dashboard-visualization-type.schema.json diff --git a/lowcode/schema/definitions/dashboard-aggregation-type.schema.json b/lowcode/schema/definitions/dashboard-aggregation-type.schema.json new file mode 100644 index 0000000000..59294c051a --- /dev/null +++ b/lowcode/schema/definitions/dashboard-aggregation-type.schema.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-aggregation-type.schema.json", + "title": "DashboardAggregationType", + "description": "The type of aggregation to perform", + "type": "string", + "enum": ["count", "sum", "average", "min", "max", "percentFilled", "percentEmpty"] +} diff --git a/lowcode/schema/definitions/dashboard-chart-descriptor.schema.json b/lowcode/schema/definitions/dashboard-chart-descriptor.schema.json new file mode 100644 index 0000000000..f03fda2887 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-chart-descriptor.schema.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-chart-descriptor.schema.json", + "title": "DashboardChartDescriptor", + "description": "Configuration for a chart visualization", + "type": "object", + "properties": { + "chartType": { + "$ref": "dashboard-chart-type.schema.json" + }, + "xAxis": { + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Property name to group by on the X-axis" + }, + "useForeignDisplay": { + "type": "boolean", + "description": "Show the FK display property instead of the raw ID", + "default": false + }, + "dateGrouping": { + "type": "string", + "enum": ["day", "week", "month", "quarter", "year"], + "description": "Grouping interval for DateTime properties" + } + }, + "required": ["property"], + "additionalProperties": false + }, + "yAxis": { + "type": "array", + "items": { + "type": "object", + "properties": { + "aggregation": { + "$ref": "dashboard-aggregation-type.schema.json" + }, + "property": { + "type": "string", + "description": "Property name for sum/average/min/max" + }, + "label": { + "type": "string", + "description": "Display label for this series" + }, + "color": { + "type": "string" + } + }, + "required": ["aggregation"], + "additionalProperties": false + }, + "minItems": 1 + }, + "size": { + "type": "string", + "enum": ["small", "medium", "large"], + "default": "medium" + }, + "barOrientation": { + "type": "string", + "enum": ["vertical", "horizontal"], + "default": "vertical" + }, + "showRecordCount": { + "type": "boolean", + "default": false + } + }, + "required": ["chartType", "xAxis", "yAxis"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-chart-type.schema.json b/lowcode/schema/definitions/dashboard-chart-type.schema.json new file mode 100644 index 0000000000..4e33a65841 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-chart-type.schema.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-chart-type.schema.json", + "title": "DashboardChartType", + "description": "The type of chart", + "type": "string", + "enum": ["bar", "line", "pie", "donut"] +} diff --git a/lowcode/schema/definitions/dashboard-descriptor.schema.json b/lowcode/schema/definitions/dashboard-descriptor.schema.json new file mode 100644 index 0000000000..7b63da4cf0 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-descriptor.schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-descriptor.schema.json", + "title": "DashboardDescriptor", + "description": "Describes a dashboard configuration with groups and visualizations", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Description text shown below the dashboard title" + }, + "groups": { + "type": "array", + "description": "Dashboard groups, each bound to a single entity", + "items": { + "$ref": "dashboard-group-descriptor.schema.json" + }, + "minItems": 1 + } + }, + "required": ["groups"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-filter-descriptor.schema.json b/lowcode/schema/definitions/dashboard-filter-descriptor.schema.json new file mode 100644 index 0000000000..1a5b7570e8 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-filter-descriptor.schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-filter-descriptor.schema.json", + "title": "DashboardFilterDescriptor", + "description": "Static filter applied to a dashboard group or visualization", + "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" + }, + "filterType": { + "type": "string", + "enum": ["equal", "notEqual", "contains", "greaterThan", "lessThan", "isNull", "isNotNull"], + "default": "equal" + }, + "value": { + "description": "Filter value" + } + }, + "required": ["property", "filterType"], + "additionalProperties": false + } + } + }, + "required": ["conditions"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-group-descriptor.schema.json b/lowcode/schema/definitions/dashboard-group-descriptor.schema.json new file mode 100644 index 0000000000..2286c5ebc9 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-group-descriptor.schema.json @@ -0,0 +1,54 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-group-descriptor.schema.json", + "title": "DashboardGroupDescriptor", + "description": "A dashboard group bound to a single entity, containing visualizations", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique identifier for this group within the dashboard", + "minLength": 1 + }, + "title": { + "type": "string", + "description": "Display title for the group section" + }, + "entityName": { + "type": "string", + "description": "Full entity name this group sources data from", + "minLength": 1 + }, + "filter": { + "$ref": "dashboard-filter-descriptor.schema.json" + }, + "userFilters": { + "type": "array", + "description": "Properties exposed as dynamic filters for end users", + "items": { + "$ref": "dashboard-user-filter-descriptor.schema.json" + } + }, + "appearance": { + "type": "object", + "properties": { + "useBackground": { + "type": "boolean", + "description": "Show light background color for this group", + "default": false + } + }, + "additionalProperties": false + }, + "visualizations": { + "type": "array", + "description": "Visualizations within this group", + "items": { + "$ref": "dashboard-visualization-descriptor.schema.json" + }, + "minItems": 1 + } + }, + "required": ["name", "entityName", "visualizations"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-list-descriptor.schema.json b/lowcode/schema/definitions/dashboard-list-descriptor.schema.json new file mode 100644 index 0000000000..6155142c30 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-list-descriptor.schema.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-list-descriptor.schema.json", + "title": "DashboardListDescriptor", + "description": "Configuration for a list/table visualization", + "type": "object", + "properties": { + "fields": { + "type": "array", + "items": { "type": "string" }, + "description": "Property names to display as columns" + }, + "sortBy": { + "type": "object", + "properties": { + "property": { "type": "string" }, + "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": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["property", "conditions"] + }, + "property": { + "type": "string", + "description": "Enum property name for automatic coloring" + } + }, + "required": ["type"], + "additionalProperties": false + } + }, + "required": ["fields"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-number-descriptor.schema.json b/lowcode/schema/definitions/dashboard-number-descriptor.schema.json new file mode 100644 index 0000000000..77d6815ed6 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-number-descriptor.schema.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-number-descriptor.schema.json", + "title": "DashboardNumberDescriptor", + "description": "Configuration for a number/KPI visualization", + "type": "object", + "properties": { + "aggregation": { + "$ref": "dashboard-aggregation-type.schema.json" + }, + "aggregationProperty": { + "type": "string", + "description": "Property name for sum/average/min/max aggregations" + }, + "format": { + "type": "string", + "enum": ["number", "currency", "percentage"], + "default": "number" + }, + "color": { + "type": "string", + "description": "Display color name (blue, green, red, purple, orange, indigo, amber, teal)" + }, + "useBackgroundColor": { + "type": "boolean", + "default": false + }, + "conditionalColors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": ["greaterThan", "lessThan", "equals", "between"] + }, + "value": { "type": "number" }, + "valueTo": { "type": "number" }, + "color": { "type": "string" } + }, + "required": ["operator", "value", "color"], + "additionalProperties": false + } + } + }, + "required": ["aggregation"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-position-descriptor.schema.json b/lowcode/schema/definitions/dashboard-position-descriptor.schema.json new file mode 100644 index 0000000000..2148ecc59f --- /dev/null +++ b/lowcode/schema/definitions/dashboard-position-descriptor.schema.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-position-descriptor.schema.json", + "title": "DashboardPositionDescriptor", + "description": "Grid position for a visualization (4-column grid)", + "type": "object", + "properties": { + "row": { + "type": "integer", + "minimum": 0, + "description": "Row index (0-based)" + }, + "col": { + "type": "integer", + "minimum": 0, + "maximum": 3, + "description": "Column index (0-based, max 3)" + }, + "colSpan": { + "type": "integer", + "minimum": 1, + "maximum": 4, + "default": 1, + "description": "Number of columns this visualization spans" + } + }, + "required": ["row", "col", "colSpan"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json b/lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json new file mode 100644 index 0000000000..d3a52f0edd --- /dev/null +++ b/lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-user-filter-descriptor.schema.json", + "title": "DashboardUserFilterDescriptor", + "description": "An interactive filter exposed to end users as a dropdown or input", + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Property name to filter on", + "minLength": 1 + }, + "displayType": { + "type": "string", + "enum": ["dropdown", "dateRange", "text", "range"], + "default": "dropdown" + } + }, + "required": ["property"], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json b/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json new file mode 100644 index 0000000000..90f258a7f2 --- /dev/null +++ b/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json @@ -0,0 +1,65 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-visualization-descriptor.schema.json", + "title": "DashboardVisualizationDescriptor", + "description": "A single visualization element (number, chart, or list) within a dashboard group", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique identifier within the group", + "minLength": 1 + }, + "type": { + "$ref": "dashboard-visualization-type.schema.json" + }, + "title": { + "type": "string", + "description": "Display title for the visualization" + }, + "description": { + "type": "string", + "description": "Optional description text" + }, + "position": { + "$ref": "dashboard-position-descriptor.schema.json" + }, + "filter": { + "$ref": "dashboard-filter-descriptor.schema.json" + }, + "showDescriptionAsTooltip": { + "type": "boolean", + "default": false + }, + "clickToSeeRecords": { + "type": "boolean", + "description": "Allow users to click to see underlying records", + "default": false + }, + "number": { + "$ref": "dashboard-number-descriptor.schema.json" + }, + "chart": { + "$ref": "dashboard-chart-descriptor.schema.json" + }, + "list": { + "$ref": "dashboard-list-descriptor.schema.json" + } + }, + "required": ["name", "type", "title", "position"], + "allOf": [ + { + "if": { "properties": { "type": { "const": "number" } } }, + "then": { "required": ["number"] } + }, + { + "if": { "properties": { "type": { "const": "chart" } } }, + "then": { "required": ["chart"] } + }, + { + "if": { "properties": { "type": { "const": "list" } } }, + "then": { "required": ["list"] } + } + ], + "additionalProperties": false +} diff --git a/lowcode/schema/definitions/dashboard-visualization-type.schema.json b/lowcode/schema/definitions/dashboard-visualization-type.schema.json new file mode 100644 index 0000000000..ea316146ca --- /dev/null +++ b/lowcode/schema/definitions/dashboard-visualization-type.schema.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "dashboard-visualization-type.schema.json", + "title": "DashboardVisualizationType", + "description": "The type of dashboard visualization", + "type": "string", + "enum": ["number", "chart", "list"] +} diff --git a/lowcode/schema/definitions/page-descriptor.schema.json b/lowcode/schema/definitions/page-descriptor.schema.json index b328dbe073..7301334099 100644 --- a/lowcode/schema/definitions/page-descriptor.schema.json +++ b/lowcode/schema/definitions/page-descriptor.schema.json @@ -61,6 +61,9 @@ "enum": ["modal", "page"], "description": "How to display the edit form", "default": "modal" + }, + "dashboard": { + "$ref": "dashboard-descriptor.schema.json" } }, "required": ["name", "title", "type", "entityName"], @@ -80,6 +83,14 @@ "then": { "required": ["formName"] } + }, + { + "if": { + "properties": { "type": { "const": "dashboard" } } + }, + "then": { + "required": ["dashboard"] + } } ], "additionalProperties": false diff --git a/lowcode/schema/definitions/page-type.schema.json b/lowcode/schema/definitions/page-type.schema.json index 8a185619fe..e6f99465ac 100644 --- a/lowcode/schema/definitions/page-type.schema.json +++ b/lowcode/schema/definitions/page-type.schema.json @@ -4,5 +4,5 @@ "title": "PageType", "description": "The type of page to render", "type": "string", - "enum": ["dataGrid", "kanban", "calendar", "form"] + "enum": ["dataGrid", "kanban", "calendar", "form", "dashboard"] } From 1976a2ff7cfaf3556018763c7af0d87d3c01b76f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2026 04:50:09 +0300 Subject: [PATCH 2/4] Update page-descriptor.schema.json --- .../definitions/page-descriptor.schema.json | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lowcode/schema/definitions/page-descriptor.schema.json b/lowcode/schema/definitions/page-descriptor.schema.json index 7301334099..c31f526dde 100644 --- a/lowcode/schema/definitions/page-descriptor.schema.json +++ b/lowcode/schema/definitions/page-descriptor.schema.json @@ -24,7 +24,7 @@ }, "entityName": { "type": "string", - "description": "Full name of the root entity this page displays (e.g., 'Namespace.EntityName')", + "description": "Full name of the root entity this page displays (e.g., 'Namespace.EntityName'). Not required for dashboard pages.", "minLength": 1 }, "groupByProperty": { @@ -66,14 +66,30 @@ "$ref": "dashboard-descriptor.schema.json" } }, - "required": ["name", "title", "type", "entityName"], + "required": ["name", "title", "type"], "allOf": [ + { + "if": { + "properties": { "type": { "const": "dataGrid" } } + }, + "then": { + "required": ["entityName"] + } + }, { "if": { "properties": { "type": { "const": "kanban" } } }, "then": { - "required": ["groupByProperty"] + "required": ["entityName", "groupByProperty"] + } + }, + { + "if": { + "properties": { "type": { "const": "calendar" } } + }, + "then": { + "required": ["entityName"] } }, { @@ -81,7 +97,7 @@ "properties": { "type": { "const": "form" } } }, "then": { - "required": ["formName"] + "required": ["entityName", "formName"] } }, { From 4498e1cd13c6623b09f638a22ab0c931e3f0faea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2026 05:07:09 +0300 Subject: [PATCH 3/4] Support per-visualization entityName override Remove entityName from the required fields of dashboard-group-descriptor so group definitions no longer must specify an entity. Add an optional entityName string property to dashboard-visualization-descriptor (minLength: 1) so individual visualizations can override the group's entityName. If the visualization-level entityName is omitted, the group's entityName is used. --- .../definitions/dashboard-group-descriptor.schema.json | 2 +- .../dashboard-visualization-descriptor.schema.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lowcode/schema/definitions/dashboard-group-descriptor.schema.json b/lowcode/schema/definitions/dashboard-group-descriptor.schema.json index 2286c5ebc9..8e849a66f5 100644 --- a/lowcode/schema/definitions/dashboard-group-descriptor.schema.json +++ b/lowcode/schema/definitions/dashboard-group-descriptor.schema.json @@ -49,6 +49,6 @@ "minItems": 1 } }, - "required": ["name", "entityName", "visualizations"], + "required": ["name", "visualizations"], "additionalProperties": false } diff --git a/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json b/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json index 90f258a7f2..6e535aa1de 100644 --- a/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json +++ b/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json @@ -36,6 +36,11 @@ "description": "Allow users to click to see underlying records", "default": false }, + "entityName": { + "type": "string", + "description": "Override entity for this visualization. If omitted, uses the group's entityName.", + "minLength": 1 + }, "number": { "$ref": "dashboard-number-descriptor.schema.json" }, From a6386408e743fe6f74348cc17da377bd8f63e996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 9 Mar 2026 21:36:37 +0300 Subject: [PATCH 4/4] remove lc schema --- ...command-interceptor-descriptor.schema.json | 23 ---- .../dashboard-aggregation-type.schema.json | 8 -- .../dashboard-chart-descriptor.schema.json | 74 ------------ .../dashboard-chart-type.schema.json | 8 -- .../dashboard-descriptor.schema.json | 23 ---- .../dashboard-filter-descriptor.schema.json | 38 ------ .../dashboard-group-descriptor.schema.json | 54 --------- .../dashboard-list-descriptor.schema.json | 55 --------- .../dashboard-number-descriptor.schema.json | 48 -------- .../dashboard-position-descriptor.schema.json | 29 ----- ...shboard-user-filter-descriptor.schema.json | 21 ---- ...board-visualization-descriptor.schema.json | 70 ----------- .../dashboard-visualization-type.schema.json | 8 -- .../endpoint-descriptor.schema.json | 45 ------- .../definitions/entity-descriptor.schema.json | 42 ------- .../entity-property-descriptor.schema.json | 58 --------- .../entity-property-type.schema.json | 25 ---- .../entity-property-ui-descriptor.schema.json | 32 ----- ...-property-ui-form-availability.schema.json | 15 --- .../entity-ui-descriptor.schema.json | 14 --- .../definitions/enum-descriptor.schema.json | 41 ------- .../foreign-key-descriptor.schema.json | 45 ------- .../definitions/form-descriptor.schema.json | 38 ------ .../form-field-descriptor.schema.json | 61 ---------- .../definitions/form-field-type.schema.json | 18 --- .../form-layout-descriptor.schema.json | 105 ---------------- .../form-rule-descriptor.schema.json | 71 ----------- .../definitions/interceptor-type.schema.json | 15 --- .../definitions/page-descriptor.schema.json | 113 ------------------ .../schema/definitions/page-type.schema.json | 8 -- .../validator-descriptor.schema.json | 69 ----------- lowcode/schema/model.schema.json | 49 -------- 32 files changed, 1323 deletions(-) delete mode 100644 lowcode/schema/definitions/command-interceptor-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-aggregation-type.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-chart-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-chart-type.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-filter-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-group-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-list-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-number-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-position-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/dashboard-visualization-type.schema.json delete mode 100644 lowcode/schema/definitions/endpoint-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/entity-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/entity-property-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/entity-property-type.schema.json delete mode 100644 lowcode/schema/definitions/entity-property-ui-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/entity-property-ui-form-availability.schema.json delete mode 100644 lowcode/schema/definitions/entity-ui-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/enum-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/foreign-key-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/form-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/form-field-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/form-field-type.schema.json delete mode 100644 lowcode/schema/definitions/form-layout-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/form-rule-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/interceptor-type.schema.json delete mode 100644 lowcode/schema/definitions/page-descriptor.schema.json delete mode 100644 lowcode/schema/definitions/page-type.schema.json delete mode 100644 lowcode/schema/definitions/validator-descriptor.schema.json delete mode 100644 lowcode/schema/model.schema.json diff --git a/lowcode/schema/definitions/command-interceptor-descriptor.schema.json b/lowcode/schema/definitions/command-interceptor-descriptor.schema.json deleted file mode 100644 index ad0d0b02bd..0000000000 --- a/lowcode/schema/definitions/command-interceptor-descriptor.schema.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "command-interceptor-descriptor.schema.json", - "title": "CommandInterceptorDescriptor", - "description": "Describes a command interceptor", - "type": "object", - "properties": { - "commandName": { - "type": "string", - "description": "Name of the command to intercept", - "enum": ["Create", "Update", "Delete"] - }, - "type": { - "$ref": "interceptor-type.schema.json" - }, - "javascript": { - "type": "string", - "description": "JavaScript code to execute" - } - }, - "required": ["commandName", "type", "javascript"], - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/dashboard-aggregation-type.schema.json b/lowcode/schema/definitions/dashboard-aggregation-type.schema.json deleted file mode 100644 index 59294c051a..0000000000 --- a/lowcode/schema/definitions/dashboard-aggregation-type.schema.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-aggregation-type.schema.json", - "title": "DashboardAggregationType", - "description": "The type of aggregation to perform", - "type": "string", - "enum": ["count", "sum", "average", "min", "max", "percentFilled", "percentEmpty"] -} diff --git a/lowcode/schema/definitions/dashboard-chart-descriptor.schema.json b/lowcode/schema/definitions/dashboard-chart-descriptor.schema.json deleted file mode 100644 index f03fda2887..0000000000 --- a/lowcode/schema/definitions/dashboard-chart-descriptor.schema.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-chart-descriptor.schema.json", - "title": "DashboardChartDescriptor", - "description": "Configuration for a chart visualization", - "type": "object", - "properties": { - "chartType": { - "$ref": "dashboard-chart-type.schema.json" - }, - "xAxis": { - "type": "object", - "properties": { - "property": { - "type": "string", - "description": "Property name to group by on the X-axis" - }, - "useForeignDisplay": { - "type": "boolean", - "description": "Show the FK display property instead of the raw ID", - "default": false - }, - "dateGrouping": { - "type": "string", - "enum": ["day", "week", "month", "quarter", "year"], - "description": "Grouping interval for DateTime properties" - } - }, - "required": ["property"], - "additionalProperties": false - }, - "yAxis": { - "type": "array", - "items": { - "type": "object", - "properties": { - "aggregation": { - "$ref": "dashboard-aggregation-type.schema.json" - }, - "property": { - "type": "string", - "description": "Property name for sum/average/min/max" - }, - "label": { - "type": "string", - "description": "Display label for this series" - }, - "color": { - "type": "string" - } - }, - "required": ["aggregation"], - "additionalProperties": false - }, - "minItems": 1 - }, - "size": { - "type": "string", - "enum": ["small", "medium", "large"], - "default": "medium" - }, - "barOrientation": { - "type": "string", - "enum": ["vertical", "horizontal"], - "default": "vertical" - }, - "showRecordCount": { - "type": "boolean", - "default": false - } - }, - "required": ["chartType", "xAxis", "yAxis"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-chart-type.schema.json b/lowcode/schema/definitions/dashboard-chart-type.schema.json deleted file mode 100644 index 4e33a65841..0000000000 --- a/lowcode/schema/definitions/dashboard-chart-type.schema.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-chart-type.schema.json", - "title": "DashboardChartType", - "description": "The type of chart", - "type": "string", - "enum": ["bar", "line", "pie", "donut"] -} diff --git a/lowcode/schema/definitions/dashboard-descriptor.schema.json b/lowcode/schema/definitions/dashboard-descriptor.schema.json deleted file mode 100644 index 7b63da4cf0..0000000000 --- a/lowcode/schema/definitions/dashboard-descriptor.schema.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-descriptor.schema.json", - "title": "DashboardDescriptor", - "description": "Describes a dashboard configuration with groups and visualizations", - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "Description text shown below the dashboard title" - }, - "groups": { - "type": "array", - "description": "Dashboard groups, each bound to a single entity", - "items": { - "$ref": "dashboard-group-descriptor.schema.json" - }, - "minItems": 1 - } - }, - "required": ["groups"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-filter-descriptor.schema.json b/lowcode/schema/definitions/dashboard-filter-descriptor.schema.json deleted file mode 100644 index 1a5b7570e8..0000000000 --- a/lowcode/schema/definitions/dashboard-filter-descriptor.schema.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-filter-descriptor.schema.json", - "title": "DashboardFilterDescriptor", - "description": "Static filter applied to a dashboard group or visualization", - "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" - }, - "filterType": { - "type": "string", - "enum": ["equal", "notEqual", "contains", "greaterThan", "lessThan", "isNull", "isNotNull"], - "default": "equal" - }, - "value": { - "description": "Filter value" - } - }, - "required": ["property", "filterType"], - "additionalProperties": false - } - } - }, - "required": ["conditions"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-group-descriptor.schema.json b/lowcode/schema/definitions/dashboard-group-descriptor.schema.json deleted file mode 100644 index 8e849a66f5..0000000000 --- a/lowcode/schema/definitions/dashboard-group-descriptor.schema.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-group-descriptor.schema.json", - "title": "DashboardGroupDescriptor", - "description": "A dashboard group bound to a single entity, containing visualizations", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Unique identifier for this group within the dashboard", - "minLength": 1 - }, - "title": { - "type": "string", - "description": "Display title for the group section" - }, - "entityName": { - "type": "string", - "description": "Full entity name this group sources data from", - "minLength": 1 - }, - "filter": { - "$ref": "dashboard-filter-descriptor.schema.json" - }, - "userFilters": { - "type": "array", - "description": "Properties exposed as dynamic filters for end users", - "items": { - "$ref": "dashboard-user-filter-descriptor.schema.json" - } - }, - "appearance": { - "type": "object", - "properties": { - "useBackground": { - "type": "boolean", - "description": "Show light background color for this group", - "default": false - } - }, - "additionalProperties": false - }, - "visualizations": { - "type": "array", - "description": "Visualizations within this group", - "items": { - "$ref": "dashboard-visualization-descriptor.schema.json" - }, - "minItems": 1 - } - }, - "required": ["name", "visualizations"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-list-descriptor.schema.json b/lowcode/schema/definitions/dashboard-list-descriptor.schema.json deleted file mode 100644 index 6155142c30..0000000000 --- a/lowcode/schema/definitions/dashboard-list-descriptor.schema.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-list-descriptor.schema.json", - "title": "DashboardListDescriptor", - "description": "Configuration for a list/table visualization", - "type": "object", - "properties": { - "fields": { - "type": "array", - "items": { "type": "string" }, - "description": "Property names to display as columns" - }, - "sortBy": { - "type": "object", - "properties": { - "property": { "type": "string" }, - "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": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["property", "conditions"] - }, - "property": { - "type": "string", - "description": "Enum property name for automatic coloring" - } - }, - "required": ["type"], - "additionalProperties": false - } - }, - "required": ["fields"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-number-descriptor.schema.json b/lowcode/schema/definitions/dashboard-number-descriptor.schema.json deleted file mode 100644 index 77d6815ed6..0000000000 --- a/lowcode/schema/definitions/dashboard-number-descriptor.schema.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-number-descriptor.schema.json", - "title": "DashboardNumberDescriptor", - "description": "Configuration for a number/KPI visualization", - "type": "object", - "properties": { - "aggregation": { - "$ref": "dashboard-aggregation-type.schema.json" - }, - "aggregationProperty": { - "type": "string", - "description": "Property name for sum/average/min/max aggregations" - }, - "format": { - "type": "string", - "enum": ["number", "currency", "percentage"], - "default": "number" - }, - "color": { - "type": "string", - "description": "Display color name (blue, green, red, purple, orange, indigo, amber, teal)" - }, - "useBackgroundColor": { - "type": "boolean", - "default": false - }, - "conditionalColors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": ["greaterThan", "lessThan", "equals", "between"] - }, - "value": { "type": "number" }, - "valueTo": { "type": "number" }, - "color": { "type": "string" } - }, - "required": ["operator", "value", "color"], - "additionalProperties": false - } - } - }, - "required": ["aggregation"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-position-descriptor.schema.json b/lowcode/schema/definitions/dashboard-position-descriptor.schema.json deleted file mode 100644 index 2148ecc59f..0000000000 --- a/lowcode/schema/definitions/dashboard-position-descriptor.schema.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-position-descriptor.schema.json", - "title": "DashboardPositionDescriptor", - "description": "Grid position for a visualization (4-column grid)", - "type": "object", - "properties": { - "row": { - "type": "integer", - "minimum": 0, - "description": "Row index (0-based)" - }, - "col": { - "type": "integer", - "minimum": 0, - "maximum": 3, - "description": "Column index (0-based, max 3)" - }, - "colSpan": { - "type": "integer", - "minimum": 1, - "maximum": 4, - "default": 1, - "description": "Number of columns this visualization spans" - } - }, - "required": ["row", "col", "colSpan"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json b/lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json deleted file mode 100644 index d3a52f0edd..0000000000 --- a/lowcode/schema/definitions/dashboard-user-filter-descriptor.schema.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-user-filter-descriptor.schema.json", - "title": "DashboardUserFilterDescriptor", - "description": "An interactive filter exposed to end users as a dropdown or input", - "type": "object", - "properties": { - "property": { - "type": "string", - "description": "Property name to filter on", - "minLength": 1 - }, - "displayType": { - "type": "string", - "enum": ["dropdown", "dateRange", "text", "range"], - "default": "dropdown" - } - }, - "required": ["property"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json b/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json deleted file mode 100644 index 6e535aa1de..0000000000 --- a/lowcode/schema/definitions/dashboard-visualization-descriptor.schema.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-visualization-descriptor.schema.json", - "title": "DashboardVisualizationDescriptor", - "description": "A single visualization element (number, chart, or list) within a dashboard group", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Unique identifier within the group", - "minLength": 1 - }, - "type": { - "$ref": "dashboard-visualization-type.schema.json" - }, - "title": { - "type": "string", - "description": "Display title for the visualization" - }, - "description": { - "type": "string", - "description": "Optional description text" - }, - "position": { - "$ref": "dashboard-position-descriptor.schema.json" - }, - "filter": { - "$ref": "dashboard-filter-descriptor.schema.json" - }, - "showDescriptionAsTooltip": { - "type": "boolean", - "default": false - }, - "clickToSeeRecords": { - "type": "boolean", - "description": "Allow users to click to see underlying records", - "default": false - }, - "entityName": { - "type": "string", - "description": "Override entity for this visualization. If omitted, uses the group's entityName.", - "minLength": 1 - }, - "number": { - "$ref": "dashboard-number-descriptor.schema.json" - }, - "chart": { - "$ref": "dashboard-chart-descriptor.schema.json" - }, - "list": { - "$ref": "dashboard-list-descriptor.schema.json" - } - }, - "required": ["name", "type", "title", "position"], - "allOf": [ - { - "if": { "properties": { "type": { "const": "number" } } }, - "then": { "required": ["number"] } - }, - { - "if": { "properties": { "type": { "const": "chart" } } }, - "then": { "required": ["chart"] } - }, - { - "if": { "properties": { "type": { "const": "list" } } }, - "then": { "required": ["list"] } - } - ], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/dashboard-visualization-type.schema.json b/lowcode/schema/definitions/dashboard-visualization-type.schema.json deleted file mode 100644 index ea316146ca..0000000000 --- a/lowcode/schema/definitions/dashboard-visualization-type.schema.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "dashboard-visualization-type.schema.json", - "title": "DashboardVisualizationType", - "description": "The type of dashboard visualization", - "type": "string", - "enum": ["number", "chart", "list"] -} diff --git a/lowcode/schema/definitions/endpoint-descriptor.schema.json b/lowcode/schema/definitions/endpoint-descriptor.schema.json deleted file mode 100644 index 7837e47f69..0000000000 --- a/lowcode/schema/definitions/endpoint-descriptor.schema.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "urn:abp:lowcode:endpoint-descriptor", - "title": "Custom Endpoint Descriptor", - "description": "Defines a custom HTTP endpoint that executes JavaScript code", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Unique identifier for the endpoint" - }, - "route": { - "type": "string", - "description": "URL route pattern (e.g., '/api/custom/products/{id}')" - }, - "method": { - "type": "string", - "description": "HTTP method", - "enum": ["GET", "POST", "PUT", "DELETE", "PATCH"], - "default": "GET" - }, - "javascript": { - "type": "string", - "description": "JavaScript code to execute. Has access to context object with request, db, currentUser, emailSender." - }, - "requireAuthentication": { - "type": "boolean", - "description": "Whether authentication is required", - "default": true - }, - "requiredPermissions": { - "type": "array", - "description": "Permission names required to access the endpoint", - "items": { - "type": "string" - } - }, - "description": { - "type": "string", - "description": "Optional description for documentation" - } - }, - "required": ["name", "route", "javascript"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/entity-descriptor.schema.json b/lowcode/schema/definitions/entity-descriptor.schema.json deleted file mode 100644 index 2023a043bc..0000000000 --- a/lowcode/schema/definitions/entity-descriptor.schema.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "entity-descriptor.schema.json", - "title": "EntityDescriptor", - "description": "Describes an entity configuration", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Full name of the entity (e.g., 'Namespace.EntityName')", - "minLength": 1 - }, - "displayProperty": { - "type": "string", - "description": "The property to be used as the display property for the entity" - }, - "parent": { - "type": "string", - "description": "Full name of the parent entity (e.g., 'Namespace.EntityName')", - "minLength": 1 - }, - "ui": { - "$ref": "entity-ui-descriptor.schema.json" - }, - "properties": { - "type": "array", - "description": "List of property descriptors", - "items": { - "$ref": "entity-property-descriptor.schema.json" - } - }, - "interceptors": { - "type": "array", - "description": "List of command interceptors", - "items": { - "$ref": "command-interceptor-descriptor.schema.json" - } - } - }, - "required": ["name"], - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/entity-property-descriptor.schema.json b/lowcode/schema/definitions/entity-property-descriptor.schema.json deleted file mode 100644 index ceeeb9eb60..0000000000 --- a/lowcode/schema/definitions/entity-property-descriptor.schema.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "entity-property-descriptor.schema.json", - "title": "EntityPropertyDescriptor", - "description": "Describes a property configuration", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the property", - "minLength": 1 - }, - "type": { - "$ref": "entity-property-type.schema.json" - }, - "enumType": { - "type": "string", - "description": "Name of a JSON-defined enum (or full type name for code enums)" - }, - "allowSetByClients": { - "type": "boolean", - "description": "Indicates whether clients are allowed to set this property" - }, - "serverOnly": { - "type": "boolean", - "description": "When true, this property is completely hidden from clients (API responses and UI definitions). Use for sensitive data like passwords." - }, - "isMappedToDbField": { - "type": "boolean", - "description": "Indicates whether the property is mapped to a database field" - }, - "isUnique": { - "type": "boolean", - "description": "Indicates whether the property value must be unique across all entities" - }, - "isRequired": { - "type": "boolean", - "description": "When true, the property is required (not nullable). Affects DB column (NOT NULL), UI validation, and backend validation." - }, - "ui": { - "$ref": "entity-property-ui-descriptor.schema.json" - }, - "foreignKey": { - "$ref": "foreign-key-descriptor.schema.json" - }, - "validators": { - "type": "array", - "description": "Array of validators to apply to this property", - "items": { - "$ref": "validator-descriptor.schema.json" - } - } - }, - "required": [ - "name" - ], - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/entity-property-type.schema.json b/lowcode/schema/definitions/entity-property-type.schema.json deleted file mode 100644 index 5eb7defa6a..0000000000 --- a/lowcode/schema/definitions/entity-property-type.schema.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "entity-property-type.schema.json", - "title": "EntityPropertyType", - "description": "Data type of the property", - "type": "string", - "enum": [ - "string", - "String", - "int", - "Int", - "long", - "Long", - "decimal", - "Decimal", - "dateTime", - "DateTime", - "boolean", - "Boolean", - "guid", - "Guid", - "enum", - "Enum" - ] -} \ No newline at end of file diff --git a/lowcode/schema/definitions/entity-property-ui-descriptor.schema.json b/lowcode/schema/definitions/entity-property-ui-descriptor.schema.json deleted file mode 100644 index 1a0ded7b76..0000000000 --- a/lowcode/schema/definitions/entity-property-ui-descriptor.schema.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "entity-property-ui-descriptor.schema.json", - "title": "EntityPropertyUIDescriptor", - "description": "UI configuration for a property", - "type": "object", - "properties": { - "displayName": { - "type": "string", - "description": "Display name for the property in UI. Falls back to property name if not set." - }, - "isAvailableOnDataTable": { - "type": "boolean", - "description": "Whether the property is shown in the data table listing" - }, - "isAvailableOnDataTableFiltering": { - "type": "boolean", - "description": "Whether the property is available for filtering in the data table" - }, - "creationFormAvailability": { - "$ref": "entity-property-ui-form-availability.schema.json" - }, - "editingFormAvailability": { - "$ref": "entity-property-ui-form-availability.schema.json" - }, - "quickLookOrder": { - "type": "integer", - "description": "Order of the property in quick look views. Higher numbers appear first. Set to -1 to exclude from quick look. If no property has a value, first 5 properties by name are shown." - } - }, - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/entity-property-ui-form-availability.schema.json b/lowcode/schema/definitions/entity-property-ui-form-availability.schema.json deleted file mode 100644 index dff4a5665c..0000000000 --- a/lowcode/schema/definitions/entity-property-ui-form-availability.schema.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "entity-property-ui-form-availability.schema.json", - "title": "EntityPropertyUIFormAvailability", - "description": "Availability of the property on forms", - "type": "string", - "enum": [ - "Available", - "available", - "Hidden", - "hidden", - "NotAvailable", - "notAvailable" - ] -} \ No newline at end of file diff --git a/lowcode/schema/definitions/entity-ui-descriptor.schema.json b/lowcode/schema/definitions/entity-ui-descriptor.schema.json deleted file mode 100644 index 3525d6c38e..0000000000 --- a/lowcode/schema/definitions/entity-ui-descriptor.schema.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "entity-ui-descriptor.schema.json", - "title": "EntityUIDescriptor", - "description": "UI configuration for the entity", - "type": "object", - "properties": { - "pageTitle": { - "type": "string", - "description": "Title to display on the entity's page" - } - }, - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/enum-descriptor.schema.json b/lowcode/schema/definitions/enum-descriptor.schema.json deleted file mode 100644 index 347f7e66ff..0000000000 --- a/lowcode/schema/definitions/enum-descriptor.schema.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "enum-descriptor.schema.json", - "title": "EnumDescriptor", - "description": "Describes an enum definition for use in entity properties", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Unique name for the enum", - "minLength": 1 - }, - "values": { - "type": "array", - "description": "List of enum values", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Display name of the enum value" - }, - "value": { - "type": "integer", - "description": "Integer value (auto-assigned if omitted)" - } - }, - "required": [ - "name" - ], - "additionalProperties": false - }, - "minItems": 1 - } - }, - "required": [ - "name", - "values" - ], - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/foreign-key-descriptor.schema.json b/lowcode/schema/definitions/foreign-key-descriptor.schema.json deleted file mode 100644 index 8c38f0acf7..0000000000 --- a/lowcode/schema/definitions/foreign-key-descriptor.schema.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "foreign-key-descriptor.schema.json", - "title": "ForeignKeyDescriptor", - "description": "Describes a foreign key relationship", - "type": "object", - "properties": { - "entityName": { - "type": "string", - "description": "Full name of the related entity", - "minLength": 1 - }, - "displayPropertyName": { - "type": "string", - "description": "Property name to display from the related entity", - "minLength": 1 - }, - "access": { - "type": "string", - "description": "Access level for managing this relation from the referenced entity side. When set to 'view' or 'edit', the referenced entity can see/manage items that reference it.", - "enum": ["none", "view", "edit"], - "default": "none" - }, - "dependsOn": { - "type": "object", - "description": "Cascading dependency: filter this FK's lookup by the value of another FK property on the same entity.", - "properties": { - "propertyName": { - "type": "string", - "description": "The property name on the owning entity whose value provides the filter (e.g. 'CountryId' on Author)", - "minLength": 1 - }, - "filterPropertyName": { - "type": "string", - "description": "The property name on the target (lookup) entity to filter by (e.g. 'CountryId' on City)", - "minLength": 1 - } - }, - "required": ["propertyName", "filterPropertyName"], - "additionalProperties": false - } - }, - "required": ["entityName"], - "additionalProperties": false -} \ No newline at end of file diff --git a/lowcode/schema/definitions/form-descriptor.schema.json b/lowcode/schema/definitions/form-descriptor.schema.json deleted file mode 100644 index 60a0b14f0e..0000000000 --- a/lowcode/schema/definitions/form-descriptor.schema.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "form-descriptor.schema.json", - "title": "FormDescriptor", - "description": "Describes a named form definition bound to an entity", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Unique identifier for the form", - "minLength": 1 - }, - "entityName": { - "type": "string", - "description": "Full name of the entity this form is bound to (e.g., 'Namespace.EntityName')", - "minLength": 1 - }, - "fields": { - "type": "array", - "description": "Flat list of all field definitions in this form", - "items": { - "$ref": "form-field-descriptor.schema.json" - } - }, - "layout": { - "$ref": "form-layout-descriptor.schema.json" - }, - "rules": { - "type": "array", - "description": "Conditional rules for field/group visibility and enabled state", - "items": { - "$ref": "form-rule-descriptor.schema.json" - } - } - }, - "required": ["name", "entityName", "fields", "layout"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/form-field-descriptor.schema.json b/lowcode/schema/definitions/form-field-descriptor.schema.json deleted file mode 100644 index b5334cc583..0000000000 --- a/lowcode/schema/definitions/form-field-descriptor.schema.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "$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", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for this field within the form", - "minLength": 1 - }, - "label": { - "type": "string", - "description": "Display label for the field", - "minLength": 1 - }, - "type": { - "$ref": "form-field-type.schema.json" - }, - "binding": { - "type": ["string", "null"], - "description": "Entity property name to bind to, or null for unbound fields. Supports dotted paths like 'Parent.Name' for related entity display." - }, - "enumType": { - "type": "string", - "description": "Full enum type name for select fields" - }, - "defaultValue": { - "description": "Default value for the field" - }, - "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", - "default": false - }, - "modeVisibility": { - "type": "string", - "enum": ["both", "createOnly", "editOnly"], - "description": "Controls in which form mode the field is visible", - "default": "both" - }, - "validations": { - "type": "array", - "description": "Form-level validation rules (override or extend entity-level validators)", - "items": { - "$ref": "validator-descriptor.schema.json" - } - } - }, - "required": ["id", "label", "type"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/form-field-type.schema.json b/lowcode/schema/definitions/form-field-type.schema.json deleted file mode 100644 index 03af7d0117..0000000000 --- a/lowcode/schema/definitions/form-field-type.schema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "form-field-type.schema.json", - "title": "FormFieldType", - "description": "Available field types for form fields", - "type": "string", - "enum": [ - "text", - "textarea", - "number", - "checkbox", - "date", - "select", - "lookup", - "guid", - "computed" - ] -} diff --git a/lowcode/schema/definitions/form-layout-descriptor.schema.json b/lowcode/schema/definitions/form-layout-descriptor.schema.json deleted file mode 100644 index 74457b0ed6..0000000000 --- a/lowcode/schema/definitions/form-layout-descriptor.schema.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "$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 (tabs > groups > field placements)", - "type": "object", - "properties": { - "tabs": { - "type": "array", - "description": "Ordered list of tabs in the form", - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for this tab", - "minLength": 1 - }, - "title": { - "type": "string", - "description": "Display title for the tab", - "minLength": 1 - }, - "isDefault": { - "type": "boolean", - "description": "Whether this is the default tab (cannot be deleted, receives orphaned fields)", - "default": false - }, - "groups": { - "type": "array", - "description": "Ordered list of groups within this tab", - "minItems": 1, - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for this group", - "minLength": 1 - }, - "title": { - "type": ["string", "null"], - "description": "Optional display title for the group" - }, - "isDefault": { - "type": "boolean", - "description": "Whether this is the default group (cannot be deleted, receives orphaned fields)", - "default": false - }, - "rows": { - "type": "array", - "description": "Ordered list of layout rows; each row contains one or more cells (fields placed side-by-side)", - "items": { - "type": "object", - "properties": { - "cells": { - "type": "array", - "description": "Fields placed side-by-side in this row (total colSpan 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", - "minLength": 1 - }, - "colSpan": { - "type": "integer", - "description": "Number of grid columns this field spans (1-4)", - "minimum": 1, - "maximum": 4, - "default": 4 - }, - "colStart": { - "type": "integer", - "description": "Starting grid column (1-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 -} diff --git a/lowcode/schema/definitions/form-rule-descriptor.schema.json b/lowcode/schema/definitions/form-rule-descriptor.schema.json deleted file mode 100644 index aeee227991..0000000000 --- a/lowcode/schema/definitions/form-rule-descriptor.schema.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "form-rule-descriptor.schema.json", - "title": "FormRuleDescriptor", - "description": "Describes a conditional rule with one or more actions that execute when the condition is met", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for this rule", - "minLength": 1 - }, - "name": { - "type": "string", - "description": "Human-readable name for this rule (optional)" - }, - "condition": { - "type": "object", - "description": "The condition that triggers this rule", - "properties": { - "fieldId": { - "type": "string", - "description": "The field whose value is evaluated", - "minLength": 1 - }, - "operator": { - "type": "string", - "enum": ["equals", "notEquals", "isEmpty", "isNotEmpty"], - "description": "Comparison operator" - }, - "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 condition is met (executed in order)", - "minItems": 1, - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": ["hide", "show", "disable", "enable", "setValue"], - "description": "The action type" - }, - "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", - "minLength": 1 - }, - "value": { - "description": "The value to set (only for setValue action)" - } - }, - "required": ["type", "targetType", "targetId"], - "additionalProperties": false - } - } - }, - "required": ["id", "condition", "actions"], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/interceptor-type.schema.json b/lowcode/schema/definitions/interceptor-type.schema.json deleted file mode 100644 index 435c26b434..0000000000 --- a/lowcode/schema/definitions/interceptor-type.schema.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "interceptor-type.schema.json", - "title": "InterceptorType", - "description": "When the interceptor runs", - "type": "string", - "enum": [ - "Pre", - "pre", - "Post", - "post", - "Replace", - "replace" - ] -} \ No newline at end of file diff --git a/lowcode/schema/definitions/page-descriptor.schema.json b/lowcode/schema/definitions/page-descriptor.schema.json deleted file mode 100644 index c31f526dde..0000000000 --- a/lowcode/schema/definitions/page-descriptor.schema.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "page-descriptor.schema.json", - "title": "PageDescriptor", - "description": "Describes a UI page bound to an entity", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Unique URL-safe identifier for the page", - "minLength": 1 - }, - "title": { - "type": "string", - "description": "Display title for the menu item and page header", - "minLength": 1 - }, - "icon": { - "type": "string", - "description": "FontAwesome icon class (e.g., 'fa-solid fa-users')" - }, - "type": { - "$ref": "page-type.schema.json" - }, - "entityName": { - "type": "string", - "description": "Full name of the root entity this page displays (e.g., 'Namespace.EntityName'). Not required for dashboard pages.", - "minLength": 1 - }, - "groupByProperty": { - "type": "string", - "description": "Property name to group entities by (required for kanban). Must reference an enum property.", - "minLength": 1 - }, - "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')", - "minLength": 1 - }, - "createFormName": { - "type": "string", - "description": "Name of the form to use for creating entities (for dataGrid/kanban pages)" - }, - "editFormName": { - "type": "string", - "description": "Name of the form to use for editing entities (for dataGrid/kanban pages)" - }, - "createFormDisplay": { - "type": "string", - "enum": ["modal", "page"], - "description": "How to display the create form", - "default": "modal" - }, - "editFormDisplay": { - "type": "string", - "enum": ["modal", "page"], - "description": "How to display the edit form", - "default": "modal" - }, - "dashboard": { - "$ref": "dashboard-descriptor.schema.json" - } - }, - "required": ["name", "title", "type"], - "allOf": [ - { - "if": { - "properties": { "type": { "const": "dataGrid" } } - }, - "then": { - "required": ["entityName"] - } - }, - { - "if": { - "properties": { "type": { "const": "kanban" } } - }, - "then": { - "required": ["entityName", "groupByProperty"] - } - }, - { - "if": { - "properties": { "type": { "const": "calendar" } } - }, - "then": { - "required": ["entityName"] - } - }, - { - "if": { - "properties": { "type": { "const": "form" } } - }, - "then": { - "required": ["entityName", "formName"] - } - }, - { - "if": { - "properties": { "type": { "const": "dashboard" } } - }, - "then": { - "required": ["dashboard"] - } - } - ], - "additionalProperties": false -} diff --git a/lowcode/schema/definitions/page-type.schema.json b/lowcode/schema/definitions/page-type.schema.json deleted file mode 100644 index e6f99465ac..0000000000 --- a/lowcode/schema/definitions/page-type.schema.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "page-type.schema.json", - "title": "PageType", - "description": "The type of page to render", - "type": "string", - "enum": ["dataGrid", "kanban", "calendar", "form", "dashboard"] -} diff --git a/lowcode/schema/definitions/validator-descriptor.schema.json b/lowcode/schema/definitions/validator-descriptor.schema.json deleted file mode 100644 index 7eeac0eba9..0000000000 --- a/lowcode/schema/definitions/validator-descriptor.schema.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "validator-descriptor.schema.json", - "title": "ValidatorDescriptor", - "description": "A single validator in the validators array", - "type": "object", - "required": ["type"], - "properties": { - "type": { - "type": "string", - "description": "Type of validator", - "enum": [ - "required", - "minLength", - "maxLength", - "stringLength", - "min", - "minimum", - "max", - "maximum", - "range", - "pattern", - "regularExpression", - "email", - "emailAddress", - "phone", - "url", - "creditCard" - ] - }, - "message": { - "type": "string", - "description": "Custom error message for this validator" - }, - "length": { - "type": "integer", - "description": "Length value for minLength, maxLength validators", - "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": "Value for min/minimum, max/maximum validators" - }, - "minimum": { - "type": "number", - "description": "Minimum value for range validator" - }, - "maximum": { - "type": "number", - "description": "Maximum value for range validator" - }, - "pattern": { - "type": "string", - "description": "Regular expression pattern for pattern/regularExpression validators" - } - }, - "additionalProperties": true -} - diff --git a/lowcode/schema/model.schema.json b/lowcode/schema/model.schema.json deleted file mode 100644 index 2315475939..0000000000 --- a/lowcode/schema/model.schema.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "model.schema.json", - "title": "ABP Low Code Model", - "description": "Schema for ABP Low Code model.json configuration file", - "type": "object", - "properties": { - "$schema": { - "type": "string", - "description": "Reference to the JSON schema" - }, - "enums": { - "type": "array", - "description": "List of enum definitions", - "items": { - "$ref": "definitions/enum-descriptor.schema.json" - } - }, - "entities": { - "type": "array", - "description": "List of entity descriptors", - "items": { - "$ref": "definitions/entity-descriptor.schema.json" - } - }, - "endpoints": { - "type": "array", - "description": "List of custom HTTP endpoints that execute JavaScript code", - "items": { - "$ref": "definitions/endpoint-descriptor.schema.json" - } - }, - "pages": { - "type": "array", - "description": "List of UI pages that appear as menu items and define how entities are displayed", - "items": { - "$ref": "definitions/page-descriptor.schema.json" - } - }, - "forms": { - "type": "array", - "description": "List of named form definitions for entity create/edit", - "items": { - "$ref": "definitions/form-descriptor.schema.json" - } - } - }, - "additionalProperties": false -} \ No newline at end of file