{ "$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')", "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" } }, "required": ["name", "title", "type", "entityName"], "allOf": [ { "if": { "properties": { "type": { "const": "kanban" } } }, "then": { "required": ["groupByProperty"] } }, { "if": { "properties": { "type": { "const": "form" } } }, "then": { "required": ["formName"] } } ], "additionalProperties": false }