16 KiB
16 KiB
UI Mockup Generator JSON Schema
This document provides a detailed specification of the JSON schema used for configuring mockup UI elements in the UI Mockup Generator application.
Base Schema
All mockups follow this base schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "UI Mockup",
"type": "object",
"required": ["version", "canvas", "components"],
"properties": {
"version": {
"type": "string",
"description": "Schema version"
},
"canvas": {
"type": "object",
"description": "Canvas properties",
"required": ["width", "height"],
"properties": {
"width": {
"type": "number",
"description": "Canvas width in pixels"
},
"height": {
"type": "number",
"description": "Canvas height in pixels"
},
"background": {
"type": "string",
"description": "Canvas background color (hex, rgb, or named)"
},
"gridSize": {
"type": "number",
"description": "Size of grid for snapping (if enabled)"
},
"showGrid": {
"type": "boolean",
"description": "Whether to display the grid"
}
}
},
"components": {
"type": "array",
"description": "Array of UI components",
"items": {
"type": "object",
"required": ["id", "type", "position"],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the component"
},
"type": {
"type": "string",
"description": "Component type",
"enum": ["funnel", "chart", "table", "card", "text", "image", "button", "input", "container", "icon", "avatar", "navigation", "modal", "alert"]
},
"position": {
"type": "object",
"description": "Position on canvas",
"required": ["x", "y"],
"properties": {
"x": {
"type": "number",
"description": "X coordinate"
},
"y": {
"type": "number",
"description": "Y coordinate"
},
"z": {
"type": "number",
"description": "Z-index/layer order"
}
}
},
"size": {
"type": "object",
"description": "Component dimensions",
"properties": {
"width": {
"type": "number",
"description": "Width in pixels"
},
"height": {
"type": "number",
"description": "Height in pixels"
}
}
},
"style": {
"type": "object",
"description": "Visual styling properties",
"properties": {
"backgroundColor": {
"type": "string",
"description": "Background color"
},
"borderRadius": {
"type": "number",
"description": "Border radius in pixels"
},
"borderWidth": {
"type": "number",
"description": "Border width in pixels"
},
"borderColor": {
"type": "string",
"description": "Border color"
},
"borderStyle": {
"type": "string",
"enum": ["solid", "dashed", "dotted", "none"],
"description": "Border style"
},
"fontFamily": {
"type": "string",
"description": "Font family"
},
"fontSize": {
"type": "number",
"description": "Font size in pixels"
},
"fontWeight": {
"type": "string",
"description": "Font weight",
"enum": ["normal", "bold", "lighter", "bolder", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
},
"fontStyle": {
"type": "string",
"description": "Font style",
"enum": ["normal", "italic", "oblique"]
},
"textAlign": {
"type": "string",
"description": "Text alignment",
"enum": ["left", "center", "right", "justify"]
},
"color": {
"type": "string",
"description": "Text color"
},
"opacity": {
"type": "number",
"description": "Opacity (0-1)"
},
"boxShadow": {
"type": "string",
"description": "Box shadow CSS value"
},
"padding": {
"type": "string",
"description": "Padding (CSS shorthand or object)"
},
"margin": {
"type": "string",
"description": "Margin (CSS shorthand or object)"
}
}
}
}
}
}
}
}
Component-Specific Schemas
Funnel Component
{
"type": "funnel",
"data": {
"title": {
"type": "string",
"description": "Funnel title"
},
"steps": {
"type": "array",
"description": "Funnel steps",
"items": {
"type": "object",
"required": ["label", "value"],
"properties": {
"label": {
"type": "string",
"description": "Step label"
},
"value": {
"type": "number",
"description": "Step value"
},
"dropoff": {
"type": "number",
"description": "Dropoff percentage"
},
"color": {
"type": "string",
"description": "Custom color for this step"
},
"icon": {
"type": "string",
"description": "Icon identifier for this step"
},
"conversion": {
"type": "boolean",
"description": "Whether this step represents conversion"
}
}
}
},
"options": {
"type": "object",
"properties": {
"showPercentages": {
"type": "boolean",
"description": "Whether to show percentages"
},
"showLabels": {
"type": "boolean",
"description": "Whether to show step labels"
},
"showValues": {
"type": "boolean",
"description": "Whether to show absolute values"
},
"orientation": {
"type": "string",
"enum": ["vertical", "horizontal"],
"description": "Funnel orientation"
},
"stepNumbering": {
"type": "boolean",
"description": "Whether to show step numbers"
}
}
},
"colors": {
"type": "object",
"properties": {
"primary": {
"type": "string",
"description": "Primary color"
},
"secondary": {
"type": "string",
"description": "Secondary color (dropoff)"
},
"tertiary": {
"type": "string",
"description": "Tertiary color (background)"
},
"success": {
"type": "string",
"description": "Success color (conversion)"
}
}
}
}
}
Chart Component
{
"type": "chart",
"chartType": {
"type": "string",
"enum": ["bar", "line", "pie", "area", "scatter", "radar", "bubble", "heatmap"],
"description": "Type of chart to display"
},
"data": {
"title": {
"type": "string",
"description": "Chart title"
},
"labels": {
"type": "array",
"description": "Labels for data points",
"items": {
"type": "string"
}
},
"datasets": {
"type": "array",
"description": "Data series",
"items": {
"type": "object",
"required": ["label", "data"],
"properties": {
"label": {
"type": "string",
"description": "Dataset label"
},
"data": {
"type": "array",
"description": "Data points",
"items": {
"type": "number"
}
},
"backgroundColor": {
"type": ["string", "array"],
"description": "Background color(s)"
},
"borderColor": {
"type": ["string", "array"],
"description": "Border color(s)"
},
"borderWidth": {
"type": "number",
"description": "Border width"
},
"fill": {
"type": "boolean",
"description": "Whether to fill area (for area charts)"
},
"tension": {
"type": "number",
"description": "Line tension (for line and area charts)"
},
"pointRadius": {
"type": "number",
"description": "Point radius (for line and scatter charts)"
}
}
}
}
},
"options": {
"type": "object",
"properties": {
"showLegend": {
"type": "boolean",
"description": "Whether to show legend"
},
"legendPosition": {
"type": "string",
"enum": ["top", "bottom", "left", "right"],
"description": "Legend position"
},
"showGrid": {
"type": "boolean",
"description": "Whether to show grid lines"
},
"showTooltip": {
"type": "boolean",
"description": "Whether to show tooltips"
},
"stacked": {
"type": "boolean",
"description": "Whether to stack data (bar, area)"
},
"aspectRatio": {
"type": "number",
"description": "Aspect ratio of the chart"
},
"axisLabels": {
"type": "object",
"properties": {
"x": {
"type": "string",
"description": "X-axis label"
},
"y": {
"type": "string",
"description": "Y-axis label"
}
}
}
}
}
}
Card Component
{
"type": "card",
"data": {
"header": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Card title"
},
"subtitle": {
"type": "string",
"description": "Card subtitle"
},
"icon": {
"type": "string",
"description": "Icon identifier"
},
"avatar": {
"type": "string",
"description": "Avatar image URL"
}
}
},
"body": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Text content"
},
"image": {
"type": "string",
"description": "Image URL"
},
"imagePosition": {
"type": "string",
"enum": ["top", "bottom", "left", "right", "background"],
"description": "Image position"
}
}
},
"footer": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Footer content"
},
"actions": {
"type": "array",
"description": "Action buttons",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Button label"
},
"icon": {
"type": "string",
"description": "Button icon"
},
"variant": {
"type": "string",
"enum": ["primary", "secondary", "outline", "ghost", "link"],
"description": "Button variant"
}
}
}
}
}
}
},
"options": {
"type": "object",
"properties": {
"elevation": {
"type": "number",
"description": "Card elevation level (0-5)"
},
"hoverable": {
"type": "boolean",
"description": "Whether card has hover effect"
},
"outlined": {
"type": "boolean",
"description": "Whether to use outline style"
}
}
}
}
Text Component
{
"type": "text",
"data": {
"content": {
"type": "string",
"description": "Text content"
},
"variant": {
"type": "string",
"enum": ["h1", "h2", "h3", "h4", "h5", "h6", "body1", "body2", "caption", "overline"],
"description": "Text variant"
},
"truncate": {
"type": "boolean",
"description": "Whether to truncate with ellipsis"
},
"maxLines": {
"type": "number",
"description": "Maximum number of lines"
}
}
}
Additional Components
Additional component schemas will follow similar patterns for:
- Table/Data Grid
- Button
- Input (text, checkbox, select, etc.)
- Container/Box
- Icon
- Avatar
- Navigation (tabs, breadcrumbs, etc.)
- Modal/Dialog
- Alert/Notification
- Image
- Progress indicators
Example Complete Mockup
{
"version": "1.0",
"canvas": {
"width": 1200,
"height": 800,
"background": "#f5f5f5",
"gridSize": 8,
"showGrid": true
},
"components": [
{
"id": "header-1",
"type": "text",
"position": { "x": 40, "y": 40, "z": 1 },
"data": {
"content": "FUNNEL VIEWER",
"variant": "h2"
},
"style": {
"fontFamily": "Arial",
"fontWeight": "bold",
"color": "#1a2b47"
}
},
{
"id": "steps-label",
"type": "text",
"position": { "x": 40, "y": 100, "z": 1 },
"data": {
"content": "STEPS",
"variant": "body2"
},
"style": {
"fontFamily": "Arial",
"fontWeight": "bold",
"color": "#666666"
}
},
{
"id": "funnel-1",
"type": "funnel",
"position": { "x": 100, "y": 140, "z": 1 },
"size": { "width": 500, "height": 400 },
"data": {
"steps": [
{ "label": "Product Details - Viewed", "value": 100, "dropoff": 36 },
{ "label": "Add to Cart - Clicked", "value": 64, "dropoff": 27 },
{ "label": "Details - Entered", "value": 37, "dropoff": 33 },
{ "label": "Place Order - Clicked", "value": 16, "conversion": true }
],
"options": {
"showPercentages": true,
"showLabels": true,
"orientation": "vertical",
"stepNumbering": true
},
"colors": {
"primary": "#1a2b47",
"secondary": "#e0756b",
"tertiary": "#d3d3d3",
"success": "#4caf50"
}
},
"style": {
"borderRadius": 5,
"fontFamily": "Arial",
"fontSize": 14
}
},
{
"id": "segments-card",
"type": "card",
"position": { "x": 650, "y": 140, "z": 1 },
"size": { "width": 400, "height": 250 },
"data": {
"header": {
"title": "SEGMENTS & FILTERS"
},
"body": {
"content": ""
}
},
"style": {
"backgroundColor": "#f0f4ff",
"borderRadius": 8,
"padding": "16px"
}
},
{
"id": "replay-card",
"type": "card",
"position": { "x": 650, "y": 410, "z": 1 },
"size": { "width": 400, "height": 250 },
"data": {
"header": {
"title": "ANALYSIS REPLAY"
},
"body": {
"content": ""
}
},
"style": {
"backgroundColor": "#e6fff0",
"borderRadius": 8,
"padding": "16px"
}
}
]
}
This schema provides a foundation for defining UI mockups in a structured, consistent format that can be easily generated by LLMs or created through the UI Mockup Generator application.