group#
The group property enables logical grouping of one or more nested properties in a collapsible UI block. Groups help organize related fields (e.g., typography, spacing, layout options), and optionally support being toggled on/off by the user via can_disable.
group Definition#
{
  "code": "text_settings",
  "prompt": "Text Settings",
  "type": "group",
  "can_disable": true,
  "properties": [
    {
      "code": "heading",
      "prompt": "Heading",
      "type": "text"
    },
    {
      "code": "heading_color",
      "prompt": "Heading Color",
      "type": "color"
    }
  ]
}
Supported Fields#
| Field | Type | Required | Description | 
|---|---|---|---|
| code | string | Yes | Unique identifier for the group. | 
| prompt | string | Yes | Label shown in the admin UI. | 
| type | string | Yes | Must be "group". | 
| properties | array | Yes | List of nested property definitions. | 
| can_disable | boolean | No | If true, users can toggle the group on/off. | 
| preview_property_selector | string | No | Used to target preview DOM nodes. | 
| visibility_conditions | object | No | Used for conditional UI logic. | 
l.settings:instance Structure#
Groups are flattened into the instance object using the group’s code as a namespace. If can_disable: true, a settings.enabled flag is added.
:text_settings:settings:enabled=1
:text_settings:heading:value=Welcome to Our Store
:text_settings:heading_color:value=#000000
If can_disable is not present, the settings block will not exist.
Template Usage#
Accessing Grouped Fields#
<h2 style="color: &mvte:instance:text_settings:heading_color:value;">
  &mvte:instance:text_settings:heading:value;
</h2>
Conditional Rendering#
<mvt:if expr="l.settings:instance:text_settings:settings:enabled">
  <h2 style="color: &mvte:instance:text_settings:heading_color:value;">
    &mvte:instance:text_settings:heading:value;
  </h2>
</mvt:if>
JavaScript Access#
<script>
  const group = l.settings.instance.text_settings;
  if (!group.settings || group.settings.enabled) {
    console.log(group.heading.value);
    console.log(group.heading_color.value);
  }
</script>
defaults Definition#
To pre-fill group fields with defaults:
"defaults": {
  "text_settings": {
    "settings": {
      "enabled": true
    },
    "heading": {
      "value": "Default Heading"
    },
    "heading_color": {
      "value": "#333333"
    }
  }
}
Best Practices#
- Use groupto keep related properties organized.
- Set can_disableif the group should be toggleable (e.g., style blocks).
- Use settings.enabledin your template to conditionally render grouped content.
- Keep codeconsistent and lowercase, especially when referencing froml.settings:instance.
Complete Example#
{
  "code": "style_group",
  "prompt": "Text Style Group",
  "type": "group",
  "can_disable": true,
  "properties": [
    {
      "code": "font_color",
      "prompt": "Font Color",
      "type": "color"
    },
    {
      "code": "font_size",
      "prompt": "Font Size",
      "type": "text",
      "text_type": "number",
      "label": "px"
    }
  ]
}
Output#
:style_group:settings:enabled=1
:style_group:font_color:value=#333333
:style_group:font_size:value=16
Template#
<mvt:if expr="l.settings:instance:style_group:settings:enabled">
  <p style="color: &mvte:instance:style_group:font_color:value; font-size: &mvte:instance:style_group:font_size:value;px;">
    Styled text here
  </p>
</mvt:if>