> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Widget UI Schema

Plan: Stencil Developer

Lesson 8 of 22 · 45 min

When building custom widgets, the schema property allows the widget template developer to build custom user interfaces within the BigCommerce page builder platform. BigCommerce provides all the setting logic and design, the widget author just needs to tell us about the various settings that make up the widget. These settings make building custom widgets fast and easy! This is the exact mechanism we use for all the platform-provided widgets as well.

![Example of a widget template settings menu, you can see many of the types of setting controls BigCommerce provides. View schema code.](/_fern-img/f5b7bb7a14abd7f9510f9e0df38a047e017ff8d2f9bb3154019d454a9d8eb5e6.webp)

## Tabs and Sections

Within the *schema* property of the Create a Widget Template endpoint, settings are grouped into *tabs* and *sections*.

### Tabs

Tabs are a part of the Page Builder schema structure. The schema requires using a single root-level *tab* to contain all visible sections.

> **Info**
>
> Sections render in the same order they are listed within a tab.

![Tabs in widget schema](/_fern-img/c265fac02cfb7d49a52392f4ffc800b021d8303b1b42a8c04dc2afff6250fa57.webp)

* When there is only a single tab, the tab interface will not be shown
* Tabs will display in the order they are provided.
* Tabs contain a list of sections which are rendered in the order in which they are provided.

```json showLineNumbers={false}
[{
  "type": "tab",
  "label": "Content",
  "sections": [...]
},
{
  "type": "tab",
  "label": "Design",
  "sections": [...]
}]
```

### Sections

![Product ratings widget](/_fern-img/ce477fb57fc30b196a3958cc25c48a10404b465da71c692bc45bdea9c14bc5b3.webp)

* Sections are groups of related settings.
* Each section will have a title that the user can collapse.
* Section labels are optional but are not collapsible without a label.
* Settings render in the same order they are listed within a section.

```json showLineNumbers={false}
[{
  "type": "tab",
  "label": "Content",
  "sections": {
    "label": "Product ratings",
    "settings": [...]
  }
}]
```

## Array Type

Arrays allow for building collections of elements within the widget. Array elements live at the top level of the schema. Each element in the array can contain an entire schema.

Elements in the list have settings defined by the array's schema, which you can build using tabs, sections, and settings.

![Array schema](/_fern-img/bd98b83f9d9c44ade5b391cd1399a103736d037107452c4a343727baba032da3.webp)

* Each element in the list can have tabs and sections included.
* The defaultCount attribute is the number of elements that are displayed in the list by default.
* Use the thumbnail attribute to display an image stored at the specified attribute name.
* Use the entryLabel attribute to set a name for each element in the list.

```json showLineNumbers={false}
{
  "type": "array",
  "label": "Product list",
  "id": "products",
  "defaultCount": 2,
  "entryLabel": "Product",
  "thumbnail": "productImage",
  "schema": [
    {
      "type": "tab",
      "label": "Product",
      "sections": [
        {
          "label": "Display",
          "settings": [
            {
              "type": "productId",
              "label": "Product",
              "id": "productId",
              "typeMeta": {
                 "placeholder": "Search by name or SKU"
              }
            }
          ]
        }
      ]
    }
  ]
}
```

## Hidden Settings

You can use hidden settings to set up controls that have no user interface drawn in Page Builder. Hidden settings live at the schema's top level because they are not grouped into any other tabs or arrays. You can use them in advanced widgets with complex interactions in the preview pane, such as inline editing.

```json showLineNumbers={false}
{
  "type": "hidden",
  "settings": [
    {
      "id": "title",
      "default": "Sample title text"
    },
    {
      "id": "subtitle",
      "default": "Description text goes here"
    }
  ]
}
```

## Schema Settings

Common fields between schema settings:

| Setting       | Description                                                                                                                                                                                                                         |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *type*        | The type of setting component to display. You can view the list of elements below to discover which are available to use.                                                                                                           |
| *label*       | The user-friendly message to inform the user how they can use this setting.                                                                                                                                                         |
| *id*          | The variable name where the setting value will be available in the widget template.                                                                                                                                                 |
| *default*     | The default value to use when rendering the widget for the first time.                                                                                                                                                              |
| *typeMeta*    | Additional information needed based on the selected setting type.                                                                                                                                                                   |
| *conditional* | An optional property that can be added to each setting to control whether it should be displayed to the user while editing in Page Builder. This does not clear the value in the setting, just controls the display of the setting. |

Below are examples of the different schema settings you can use in your custom widget template.

## Alignment

![Alignment setting](/_fern-files/bigcommerce.docs.buildwithfern.com/18272b0971c7c4caf8678e1646d85c3b9afdecea6e29711b4379a19cd476f115/assets/learn/widgets-rest-api/alignment.png)

* It is possible to display "horizontal", "vertical", or "both" alignment controls depending on use case
* Possible values for horizontal are: "left", "right", "center"
* Possible values for vertical are: "top", "bottom", "middle"

```json showLineNumbers={false}
{
  "type": "alignment",
  "label": "Content alignment",
  "id": "contentAlignment",
  "default": {
    "horizontal": "center",
    "vertical": "middle"
  },
  "typeMeta": {
    "display": "both"
  }
}

Setting output: {
  "contentAlignment": {
    "horizontal": "center",
    "vertical": "middle"
  }
}
```

## Boolean

![Boolean setting](/_fern-img/2f67b65ec86595ac36ecb8aed16f988f3f4810d6a1bccc44263c56e218181229.webp)

```json showLineNumbers={false}
{
  "type": "boolean",
  "label": "Enable touch support",
  "id": "draggable",
  "default": true
}

Setting output:
{
  "draggable": true
}
```

## Box Model

![Box model setting](/_fern-img/987bd201e48e40f1dcb667ba8a3a08f75ad81da431291bf024315f59e641f971.webp)

* Note that currently, values are in string format. this may change to number in the future. Stay tuned for updates.
* Clicking the lock will make sure all dimensions match the first value.

```json showLineNumbers={false}
{
  "type": "boxModel",
  "label": "Margin",
  "id": "productCardMargin",
  "default": {
    "top": {
      "value": "0",
      "type": "px"
    },
    "right": {
      "value": "10.5",
      "type": "px"
    },
    "bottom": {
      "value": "0",
      "type": "px"
    },
    "left": {
      "value": "10.5",
      "type": "px"
    }
  }
}

Setting output:
{
  "productCardMargin": {
    "top": {
      "value": "0",
      "type": "px"
    },
    "right": {
      "value": "10.5",
      "type": "px"
    },
    "bottom": {
      "value": "0",
      "type": "px"
    },
    "left": {
      "value": "10.5",
      "type": "px"
    }
  }
}
```

## Code

![Code setting](/_fern-files/bigcommerce.docs.buildwithfern.com/35a47980365be448287c246eecef77d6ef7e0062e2f9e4f53766a4fd7c75dfb5/assets/learn/widgets-rest-api/code.png)

* In the future, we may add more options for the language (syntax highlighting). Currently only "HTML" is supported.

```json showLineNumbers={false}
{
  "id": "htmlCode",
  "label": "HTML Code",
  "default": "<div>html code can go here</div>",
  "type": "code",
  "typeMeta": {
    "language": "html",
    "placeholder": "Insert HTML code here"
  }
}

Setting output:
{
  "html": "<div>html code can go here</div>"
}
```

## Color

![Color picker setting](/_fern-img/9fce4e642acc0d6cfeeaeb47abb3d81999d737138f6b75e6753530e07d471a6b.webp)

* Color picker supports RGBA
* Transparent can be selected, in which case the returned value is 'transparent'.

```json showLineNumbers={false}
{
  "type": "color",
  "label": "Star ratings color (full)",
  "id": "productRatingStarColorFull",
  "default": "#80000B"
}

Setting output:
{
  "productRatingStarColorFull": "#80000B"
}
```

## Image Manager

![Image Manager setting](/_fern-img/19407f411d192eb90305722d61a453bbd58501d07c2b5b27faa13fe8399e935a.webp)

* Uploaded images go to the stores Image Manager
* "My Images" allows the user to select from previously uploaded images

```json showLineNumbers={false}
{
  "type": "imageManager",
  "id": "imageUrl",
  "default": "https://images.unsplash.com/photo-1548768041"
}

Setting output:
{
  "imageUrl": "https://images.unsplash.com/photo-1548768041"
}
```

## Input

![Input setting](/_fern-img/79f51027d71673825fed489e958a9a27a668d31decfa711e2659295157f37c14.webp)

```json showLineNumbers={false}
{
  "type": "input",
  "label": "Alt text",
  "id": "altText",
  "default": "A cool grey shirt"
}

Setting output:
{
  "altText": "A cool grey shirt"
}
```

## Number

![Number setting](/_fern-img/3696faa19d7eabca66063ba9d2cc7c766ec7e4c5e80bec5756d85bf1760d4aa5.webp)

* Response value will be a number, including information about the type (px, rem, etc)
* Two parse types are supported: "integer" and "float"

```json showLineNumbers={false}
{
  "type": "number",
  "label": "Font size",
  "id": "fontSize",
  "default": {
    "value": 32,
    "type": "px"
  },
  "typeMeta": {
    "parseType": "integer"
  }
}

Setting output:
{
  "fontSize": {
    "value": 32,
    "type": "px"
  }
}
```

## Product ID

![Product ID setting](/_fern-img/486c11a3d518574deb2d3a50920e8abe5d8ce6045bd817ffb21db6e4515c7938.webp)

* Note that currently, id values are in string format. This may change to number in the future. Stay tuned for updates.

```json showLineNumbers={false}
{
  "type": "productId",
  "label": "Product",
  "id": "productId",
  "typeMeta": {
    "placeholder": "Search by name or SKU"
  }
}

Setting output:
{
  "productId":"80"
}
```

## Product Image

![Product Image setting](/_fern-img/f4b37869d15cb04c6636d30171280a9066c28e28f5183057618d7f07906f158b.webp)

* Looks up product images based on the reference attribute
* Works nicely with productId setting type

```json showLineNumbers={false}
{
  "type": "productImage",
  "label": "Product image",
  "id": "productImage",
  "typeMeta": {
    "reference": "productId"
  }
}

Setting output:
{
  "productImage": "https://store-url.com/products/80/images/272.png"
}
```

## Range

![Range setting](/_fern-img/6e8fe3a0c37f0bc475f0a0f0f0a2934824f15ec5b0c01b0a0d0d902385984775.webp)

* The units are not currently returned. Expect some updates to return unit / value similar to number type. Stay tuned for updates.

```json showLineNumbers={false}
{
  "type": "range",
  "label": "Border radius",
  "id": "buttonBorderRadius",
  "default": 4,
  "typeMeta": {
    "rangeValues": {
      "min": 0,
      "max": 100,
      "step": 1,
      "unit": "px"
    }
  }
}

Setting output:
{
  "buttonBorderRadius": 4
}
```

## Regex Input

![Regex setting](/_fern-img/b9714c5f07bee169860da01e3ac4a96330b98f68badfc2e8e1ef8eecfdf60e5b.webp)

* Regex setting can capture and provide conditional state to other schema settings.
* In the example, we only want to show the autoplay video setting if the user has a URL which includes "youtube" or "youtu"

```json showLineNumbers={false}
{
  "type": "regexInput",
  "label": "Video URL (YouTube or Vimeo)",
  "id": "videoUrl",
  "default": "",
  "typeMeta": {
    "placeholder": "https://",
    "regExPatterns": [
      {
        "pattern": "(vimeo|youtube|youtu)",
        "matchIndex": 0,
        "configKey": "type"
      }
    ]
  }
}
[...]
{
  "type": "boolean",
  "label": "Autoplay video",
  "id": "autoplay",
  "default": false,
  "conditional": {
    "key": "videoUrl.parts.type",
    "operator": "IN",
    "value": [
      "youtube",
      "youtu"
    ]
  }
}

Setting output:
{
  "videoUrl": {
    "value": "https://www.youtube.com/watch?v=-5EQIiabJvk",
    "parts": {
      "type":"youtube"
    }
  }
}
```

## Select

![Select setting](/_fern-img/ebf597d1c7e9e2f9016a4f2f6f71308ea4aa2fb3a04569e9c2276ed4a99e71d3.webp)

```json showLineNumbers={false}
{
  "type": "select",
  "label": "Link decoration",
  "id": "linkDecoration",
  "default": "none",
  "typeMeta": {
    "selectOptions" : [
      {
        "label": "None",
        "value": "none"
      },
      {
        "label": "Underline",
        "value": "underline"
      }
    ]
  }
}

Setting output:
{
  "linkDecoration": "none"
}
```

## Text

![Text setting](/_fern-img/5357848356387259bc5fe0e02e9ff4fd0b04c37bc8ff1e9fffe01dea89f18e70.webp)

* New line characters are not supported. This is similar to "input" type, but displays more of the text and wraps lines.

```json showLineNumbers={false}
{
  "type": "text",
  "label": "Body text",
  "id": "bodyText",
  "default": "This is some text."
}

Setting output:
{
  "bodyText": "This is some text."
}
```

## Toggle

![Toggle setting](/_fern-files/bigcommerce.docs.buildwithfern.com/504d95de47e0d434d8398c92ffbf9cf7e34e2bd8398a352bdd1f9a63032697e3/assets/learn/widgets-rest-api/toggle.png)

* This should be used purely to conditionally render settings based on the users selection.
* You can put other schema settings in each "condition" (color in this example)

```json showLineNumbers={false}
{
  "type" : "toggle",
  "id": "buttonToggle",
  "default": "normal",
  "typeMeta": {
    "selectOptions": [
      {
        "label": "Normal",
        "value": "normal"
      },
      {
        "label": "Hover",
        "value": "hover"
      }
    ],
    "conditionalSettings": [
      {
        "condition": "normal",
        "settings": [
          {
            "type": "color",
            "label": "Border color",
            "id": "borderColor",
            "default": "#ff0000"
          }
        ]
      },
      {
        "condition": "hover",
        "settings": [
          {
            "type": "color",
            "label": "Border color",
            "id": "borderColorHover",
            "default": "#00ff00"
          }
        ]
      }
    ]
  }
}

Setting output: N/A
```

## Completed Example

```json showLineNumbers={false}
[
  {
    "type": "tab",
    "label": "Content",
    "sections": [
      {
        "label": "Product cards",
        "settings": [
          {
            "type": "boolean",
            "label": "Show product name",
            "id": "showProductName",
            "default": true
          },
          {
            "type": "boolean",
            "label": "Show product description",
            "id": "showProductDescription",
            "default": true
          },
          {
            "type": "boolean",
            "label": "Show product ratings",
            "id": "showProductRatings",
            "default": true
          },
          {
            "type": "boolean",
            "label": "Show product price",
            "id": "showProductPrice",
            "default": true
          },
          {
            "type": "boolean",
            "label": "Show button",
            "id": "showButton",
            "default": true
          },
          {
            "type": "select",
            "label": "Number of products per row",
            "id": "productsPerRow",
            "default": "3",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "2",
                  "value": "2"
                },
                {
                  "label": "3",
                  "value": "3"
                },
                {
                  "label": "4",
                  "value": "4"
                }
              ]
            }
          }
        ]
      },
      {
        "label": "Button",
        "settings": [
          {
            "type": "input",
            "label": "Button label",
            "id": "buttonLabel",
            "default": "Add to Cart"
          },
          {
            "type": "select",
            "label": "Button action",
            "id": "buttonActionType",
            "default": "addToCart",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Add to Cart",
                  "value": "addToCart"
                },
                {
                  "label": "Add to Wishlist",
                  "value": "addToWishlist"
                },
                {
                  "label": "Go to Product Page",
                  "value": "goToProduct"
                }
              ]
            }
          }
        ]
      }
    ]
  },
  {
    "type": "tab",
    "label": "Design",
    "sections": [
      {
        "label": "Product cards",
        "settings": [
          {
            "type": "color",
            "label": "Background color",
            "id": "productCardBackgroundColor",
            "default": "rgba(255,255,255,1)"
          },
          {
            "type": "color",
            "label": "Border color",
            "id": "productCardBorderColor",
            "default": "#D9DCE9"
          },
          {
            "type": "boxModel",
            "label": "Margin",
            "id": "productCardMargin",
            "default": {
              "top": {
                "value": "0",
                "type": "px"
              },
              "right": {
                "value": "10.5",
                "type": "px"
              },
              "bottom": {
                "value": "0",
                "type": "px"
              },
              "left": {
                "value": "10.5",
                "type": "px"
              }
            }
          },
          {
            "type": "boxModel",
            "label": "Padding",
            "id": "productCardPadding",
            "default": {
              "top": {
                "value": "0",
                "type": "px"
              },
              "right": {
                "value": "0",
                "type": "px"
              },
              "bottom": {
                "value": "16",
                "type": "px"
              },
              "left": {
                "value": "0",
                "type": "px"
              }
            }
          },
          {
            "type": "alignment",
            "label": "Content alignment",
            "id": "productCardContentAlignment",
            "default": {
              "horizontal": "center"
            },
            "typeMeta": {
              "display": "horizontal"
            }
          }
        ]
      },
      {
        "label": "Product image",
        "settings": [
          {
            "type": "input",
            "label": "Image height (px)",
            "id": "productImageHeight",
            "default": "252"
          }
        ]
      },
      {
        "label": "Product name",
        "settings": [
          {
            "type": "select",
            "label": "Font family",
            "id": "productNameFontFamily",
            "default": "inherit",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Default",
                  "value": "inherit"
                },
                {
                  "label": "Arial",
                  "value": "Arial"
                },
                {
                  "label": "Times New Roman",
                  "value": "Times New Roman"
                },
                {
                  "label": "Karla",
                  "value": "Karla"
                },
                {
                  "label": "Roboto",
                  "value": "Roboto"
                },
                {
                  "label": "Source Sans Pro",
                  "value": "Source Sans Pro"
                },
                {
                  "label": "Montserrat",
                  "value": "Montserrat"
                },
                {
                  "label": "Open Sans",
                  "value": "Open Sans"
                },
                {
                  "label": "Volkhov",
                  "value": "Volkhov"
                }
              ]
            }
          },
          {
            "type": "select",
            "label": "Font weight",
            "id": "productNameFontWeight",
            "default": "400",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Thin",
                  "value": "100"
                },
                {
                  "label": "Extra Light (Ultra Light)",
                  "value": "200"
                },
                {
                  "label": "Light",
                  "value": "300"
                },
                {
                  "label": "Normal",
                  "value": "400"
                },
                {
                  "label": "Medium",
                  "value": "500"
                },
                {
                  "label": "Semi Bold (Demi Bold)",
                  "value": "600"
                },
                {
                  "label": "Bold",
                  "value": "700"
                },
                {
                  "label": "Extra Bold (Ultra Bold)",
                  "value": "800"
                },
                {
                  "label": "Black (Heavy)",
                  "value": "900"
                }
              ]
            }
          },
          {
            "type": "input",
            "label": "Font size (px)",
            "id": "productNameFontSize",
            "default": "22"
          },
          {
            "type": "input",
            "label": "Line height (px)",
            "id": "productNameLineHeight",
            "default": "33"
          },
          {
            "type" : "toggle",
            "id": "productNamePseudo",
            "default": "normal",
            "typeMeta": {
              "selectOptions": [
                {
                  "label": "Normal",
                  "value": "normal"
                },
                {
                  "label": "Hover",
                  "value": "hover"
                }
              ],
              "conditionalSettings": [
                {
                  "condition": "normal",
                  "settings": [
                    {
                      "type": "color",
                      "label": "Text color",
                      "id": "productNameTextColor",
                      "default": "#000000"
                    },
                    {
                      "type": "select",
                      "label": "Text decoration",
                      "id": "productNameTextDecoration",
                      "default": "none",
                      "typeMeta": {
                        "selectOptions" : [
                          {
                            "label": "None",
                            "value": "none"
                          },
                          {
                            "label": "Underline",
                            "value": "underline"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "condition": "hover",
                  "settings": [
                    {
                      "type": "color",
                      "label": "Text color",
                      "id": "productNameTextColorHover",
                      "default": "#000000"
                    },
                    {
                      "type": "select",
                      "label": "Text decoration",
                      "id": "productNameTextDecorationHover",
                      "default": "none",
                      "typeMeta": {
                        "selectOptions" : [
                          {
                            "label": "None",
                            "value": "none"
                          },
                          {
                            "label": "Underline",
                            "value": "underline"
                          }
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          }
        ]
      },
      {
        "label": "Product description",
        "settings": [
          {
            "type": "select",
            "label": "Font family",
            "id": "productDescriptionFontFamily",
            "default": "inherit",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Default",
                  "value": "inherit"
                },
                {
                  "label": "Arial",
                  "value": "Arial"
                },
                {
                  "label": "Times New Roman",
                  "value": "Times New Roman"
                },
                {
                  "label": "Karla",
                  "value": "Karla"
                },
                {
                  "label": "Roboto",
                  "value": "Roboto"
                },
                {
                  "label": "Source Sans Pro",
                  "value": "Source Sans Pro"
                },
                {
                  "label": "Montserrat",
                  "value": "Montserrat"
                },
                {
                  "label": "Open Sans",
                  "value": "Open Sans"
                },
                {
                  "label": "Volkhov",
                  "value": "Volkhov"
                }
              ]
            }
          },
          {
            "type": "select",
            "label": "Font weight",
            "id": "productDescriptionFontWeight",
            "default": "400",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Thin",
                  "value": "100"
                },
                {
                  "label": "Extra Light (Ultra Light)",
                  "value": "200"
                },
                {
                  "label": "Light",
                  "value": "300"
                },
                {
                  "label": "Normal",
                  "value": "400"
                },
                {
                  "label": "Medium",
                  "value": "500"
                },
                {
                  "label": "Semi Bold (Demi Bold)",
                  "value": "600"
                },
                {
                  "label": "Bold",
                  "value": "700"
                },
                {
                  "label": "Extra Bold (Ultra Bold)",
                  "value": "800"
                },
                {
                  "label": "Black (Heavy)",
                  "value": "900"
                }
              ]
            }
          },
          {
            "type": "input",
            "label": "Font size (px)",
            "id": "productDescriptionFontSize",
            "default": "14"
          },
          {
            "type": "input",
            "label": "Line height (px)",
            "id": "productDescriptionLineHeight",
            "default": "21"
          },
          {
            "type": "color",
            "label": "Text color",
            "id": "productDescriptionTextColor",
            "default": "#000000"
          }
        ]
      },
      {
        "label": "Product ratings",
        "settings": [
          {
            "type": "color",
            "label": "Star ratings color (full)",
            "id": "productRatingStarColorFull",
            "default": "#80000B"
          },
          {
            "type": "color",
            "label": "Star ratings color (empty)",
            "id": "productRatingStarColorEmpty",
            "default": "#D9DCE9"
          },
          {
            "type": "color",
            "label": "Reviews text color",
            "id": "productRatingsTextColor",
            "default": "#8C93AD"
          }
        ]
      },
      {
        "label": "Product price",
        "settings": [
          {
            "type": "select",
            "label": "Font family",
            "id": "productPriceFontFamily",
            "default": "inherit",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Default",
                  "value": "inherit"
                },
                {
                  "label": "Arial",
                  "value": "Arial"
                },
                {
                  "label": "Times New Roman",
                  "value": "Times New Roman"
                },
                {
                  "label": "Karla",
                  "value": "Karla"
                },
                {
                  "label": "Roboto",
                  "value": "Roboto"
                },
                {
                  "label": "Source Sans Pro",
                  "value": "Source Sans Pro"
                },
                {
                  "label": "Montserrat",
                  "value": "Montserrat"
                },
                {
                  "label": "Open Sans",
                  "value": "Open Sans"
                },
                {
                  "label": "Volkhov",
                  "value": "Volkhov"
                }
              ]
            }
          },
          {
            "type": "select",
            "label": "Font weight",
            "id": "productPriceFontWeight",
            "default": "400",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Thin",
                  "value": "100"
                },
                {
                  "label": "Extra Light (Ultra Light)",
                  "value": "200"
                },
                {
                  "label": "Light",
                  "value": "300"
                },
                {
                  "label": "Normal",
                  "value": "400"
                },
                {
                  "label": "Medium",
                  "value": "500"
                },
                {
                  "label": "Semi Bold (Demi Bold)",
                  "value": "600"
                },
                {
                  "label": "Bold",
                  "value": "700"
                },
                {
                  "label": "Extra Bold (Ultra Bold)",
                  "value": "800"
                },
                {
                  "label": "Black (Heavy)",
                  "value": "900"
                }
              ]
            }
          },
          {
            "type": "input",
            "label": "Font size (px)",
            "id": "productPriceFontSize",
            "default": "14"
          },
          {
            "type": "input",
            "label": "Line height (px)",
            "id": "productPriceLineHeight",
            "default": "21"
          },
          {
            "type": "color",
            "label": "Text color",
            "id": "productPriceTextColor",
            "default": "#000000"
          }
        ]
      },
      {
        "label": "Button",
        "settings": [
          {
            "type": "range",
            "label": "Border radius",
            "id": "buttonBorderRadius",
            "default": 4,
            "typeMeta": {
              "rangeValues": {
                "min": 0,
                "max": 100,
                "step": 1,
                "unit": "px"
              }
            }
          },
          {
            "type": "select",
            "label": "Font family",
            "id": "buttonFontFamily",
            "default": "inherit",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Default",
                  "value": "inherit"
                },
                {
                  "label": "Arial",
                  "value": "Arial"
                },
                {
                  "label": "Times New Roman",
                  "value": "Times New Roman"
                },
                {
                  "label": "Karla",
                  "value": "Karla"
                },
                {
                  "label": "Roboto",
                  "value": "Roboto"
                },
                {
                  "label": "Source Sans Pro",
                  "value": "Source Sans Pro"
                },
                {
                  "label": "Montserrat",
                  "value": "Montserrat"
                },
                {
                  "label": "Open Sans",
                  "value": "Open Sans"
                },
                {
                  "label": "Volkhov",
                  "value": "Volkhov"
                }
              ]
            }
          },
          {
            "type": "select",
            "label": "Font weight",
            "id": "buttonFontWeight",
            "default": "400",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Thin",
                  "value": "100"
                },
                {
                  "label": "Extra Light (Ultra Light)",
                  "value": "200"
                },
                {
                  "label": "Light",
                  "value": "300"
                },
                {
                  "label": "Normal",
                  "value": "400"
                },
                {
                  "label": "Medium",
                  "value": "500"
                },
                {
                  "label": "Semi Bold (Demi Bold)",
                  "value": "600"
                },
                {
                  "label": "Bold",
                  "value": "700"
                },
                {
                  "label": "Extra Bold (Ultra Bold)",
                  "value": "800"
                },
                {
                  "label": "Black (Heavy)",
                  "value": "900"
                }
              ]
            }
          },
          {
            "type": "input",
            "label": "Font size (px)",
            "id": "buttonFontSize",
            "default": "14"
          },
          {
            "type" : "toggle",
            "id": "buttonPseudo",
            "default": "normal",
            "typeMeta": {
              "selectOptions": [
                {
                  "label": "Normal",
                  "value": "normal"
                },
                {
                  "label": "Hover",
                  "value": "hover"
                }
              ],
              "conditionalSettings": [
                {
                  "condition": "normal",
                  "settings": [
                    {
                      "type": "color",
                      "label": "Text color",
                      "id": "buttonTextColor",
                      "default": "rgba(255,255,255,1)"
                    },
                    {
                      "type": "select",
                      "label": "Text decoration",
                      "id": "buttonTextDecoration",
                      "default": "none",
                      "typeMeta": {
                        "selectOptions" : [
                          {
                            "label": "None",
                            "value": "none"
                          },
                          {
                            "label": "Underline",
                            "value": "underline"
                          }
                        ]
                      }
                    },
                    {
                      "type": "color",
                      "label": "Button color",
                      "id": "buttonColor",
                      "default": "rgba(68,68,68,1)"
                    },
                    {
                      "type": "color",
                      "label": "Border color",
                      "id": "buttonBorderColor",
                      "default": "rgba(102,102,102,1);"
                    }
                  ]
                },
                {
                  "condition": "hover",
                  "settings": [
                    {
                      "type": "color",
                      "label": "Text color",
                      "id": "buttonTextColorHover",
                      "default": "rgba(255,255,255,1)"
                    },
                    {
                      "type": "select",
                      "label": "Text decoration",
                      "id": "buttonTextDecorationHover",
                      "default": "none",
                      "typeMeta": {
                        "selectOptions" : [
                          {
                            "label": "None",
                            "value": "none"
                          },
                          {
                            "label": "Underline",
                            "value": "underline"
                          }
                        ]
                      }
                    },
                    {
                      "type": "color",
                      "label": "Button color",
                      "id": "buttonColorHover",
                      "default": "rgba(102,102,102,1);"
                    },
                    {
                      "type": "color",
                      "label": "Border color",
                      "id": "buttonBorderColorHover",
                      "default": "rgba(102,102,102,1);"
                    }
                  ]
                }
              ]
            }
          }
        ]
      },
      {
        "label": "Arrows",
        "settings": [
          {
            "type": "color",
            "label": "Arrow color",
            "id": "carouselArrowColor",
            "default": "#D9DCE9"
          },
          {
            "type": "color",
            "label": "Arrow background color",
            "id": "carouselArrowBackgroundColor",
            "default": "rgba(255,255,255,0.0)"
          },
          {
            "type": "color",
            "label": "Arrow border color",
            "id": "carouselArrowBorderColor",
            "default": "rgba(255,255,255,0.0)"
          }
        ]
      },
      {
        "label": "Animation and effects",
        "settings": [
          {
            "type": "boolean",
            "label": "Touch support",
            "id": "draggable",
            "default": true
          },
          {
            "type": "select",
            "label": "Easing method",
            "id": "easingMethod",
            "default": "ease",
            "typeMeta": {
              "selectOptions" : [
                {
                  "label": "Ease",
                  "value": "ease"
                },
                {
                  "label": "Linear",
                  "value": "linear"
                },
                {
                  "label": "Ease-in",
                  "value": "ease-in"
                },
                {
                  "label": "Ease-out",
                  "value": "ease-out"
                },
                {
                  "label": "Ease-in-out",
                  "value": "ease-in-out"
                }
              ]
            }
          },
          {
            "type": "input",
            "label": "Animation duration (ms)",
            "id": "animationDuration",
            "default": "400"
          }
        ]
      }
    ]
  },
  {
    "type": "array",
    "label": "Product List",
    "id": "products",
    "defaultCount": 3,
    "entryLabel": "Product",
    "thumbnail": "productImage",
    "schema": [
      {
        "type": "tab",
        "label": "Product",
        "sections": [
          {
            "label": "Display",
            "settings": [
              {
                "type": "productId",
                "label": "Product",
                "id": "productId",
                "typeMeta": {
                  "placeholder": "Search by name or SKU"
                }
              },
              {
                "type": "input",
                "label": "Description",
                "id": "productDescription",
                "default": ""
              },
              {
                "type": "productImage",
                "label": "Product image",
                "id": "productImage",
                "typeMeta": {
                  "reference": "productId"
                }
              },
              {
                "type": "select",
                "label": "Image fit",
                "id": "productImageFit",
                "default": "fit",
                "typeMeta": {
                  "selectOptions" : [
                    {
                      "label": "Fill to box",
                      "value": "fill"
                    },
                    {
                      "label": "Fit to box",
                      "value": "fit"
                    }
                  ]
                }
              },
              {
                "type": "alignment",
                "label": "Image alignment",
                "id": "productImageAlignment",
                "default": {
                  "horizontal": "center",
                  "vertical": "middle"
                },
                "typeMeta": {
                  "display": "both"
                }
              }
            ]
          }
        ]
      }
    ]
  }
]
```