text: /*
   * Copyright 2012 Amadeus s.a.s.
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *    http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  var Aria = require("../Aria");
  var ariaCoreJsonTypes = require("../core/JsonTypes");
  var ariaTemplatesCfgBeans = require("../templates/CfgBeans");
  var ariaCoreEnvironmentEnvironmentBaseCfgBeans = require("../core/environment/EnvironmentBaseCfgBeans");
  var ariaWidgetsFormListCfgBeans = require("./form/list/CfgBeans");
  var ariaUtilsDragdropDragDropBean = require("../utils/dragdrop/DragDropBean");
  var ariaWidgetLibsCommonBeans = require("../widgetLibs/CommonBeans");
  
  module.exports = Aria.beanDefinitions({
      $package : "aria.widgets.CfgBeans",
      $description : "Definition of the JSON beans used by the aria widgets library",
      $namespaces : {
          "json" : ariaCoreJsonTypes,
          "templates" : ariaTemplatesCfgBeans,
          "environmentBase" : ariaCoreEnvironmentEnvironmentBaseCfgBeans,
          "FormListCfg" : ariaWidgetsFormListCfgBeans,
          "dragDrop" : ariaUtilsDragdropDragDropBean,
          "common" : ariaWidgetLibsCommonBeans
      },
      $beans : {
          "WidgetCfg" : {
              $type : "json:Object",
              $description : "Base config object used for any widget",
              $properties : {
                  "id" : {
                      $type : "json:String",
                      $description : "unique id (within the template) to associate to the widget - if not provided, a unique id will automatically be generated by the framework",
                      $mandatory : false
                  },
                  "bind" : {
                      $type : "json:Object",
                      $description : "List of properties that we want to bind for this widget - the property name being used as Map item key",
                      $properties : {
                          "tooltip" : {
                              $type : "common:BindingRef"
                          }
                      },
                      $sample : {
                          "tooltip" : {
                              to : "name",
                              inside : "REF HERE - e.g.: data"
                          }
                      }
                  },
                  "tooltip" : {
                      $type : "json:String",
                      $description : "Floating text to display when mouse is over the widget - if empty or null the tooltip will be considered as unset",
                      $default : null
                  },
                  "tooltipId" : {
                      $type : "json:String",
                      $description : "Id of the tooltip widget to be displayed when mouse is over the widget. - if empty or null no tooltip widget will be displayed",
                      $default : null
                  },
                  "width" : {
                      $type : "json:Integer",
                      $description : "Widget width in pixel - note: some widgets may ignore this property. If negative, the width will be considered as unset and the widget will use the most appropriate width when possible",
                      $default : -1
                  },
                  "verticalAlign" : {
                      $type : "json:String",
                      $description : "Define the vertical alignment of the widget. It can be any valid vertical-align CSS values. Nothing is set by default if the widgetSettings.middleAlignment environment property value is set to false, otherwise, the default value is middle."
                  },
                  "margins" : {
                      $type : "json:String",
                      $description : "Width margin in the format: top right bottom left. Each margin is either an json:Integer or an x (meaning no change)",
                      $default : null
                  },
                  "block" : {
                      $type : "json:Boolean",
                      $description : "This determines whether a display:block or display:inline-block should be used for the top-level span",
                      $default : false
                  },
                  "printOptions" : {
                      $type : "templates:PrintOptions"
                  },
                  "sclass" : {
                      $type : "json:String",
                      $description : "which class defined in the skin is being used",
                      $default : "std"
                  },
                  "tabIndex" : {
                      $type : "json:Integer",
                      $description : "The tab index of the widget. If null it's not taken into account, if 0 or above the widget will be focusable thorugh tab, if negative it won't be focusable.",
                      $default : null
                  },
                  "waiAria" : {
                      $type : "json:Boolean",
                      $description : "If true, and if the widget supports it, accessibility-related DOM attributes are enabled on this widget, to comply with WAI-ARIA specifications. This allows screen readers and other accessibility tools to work better."
                  }
              }
          },
  
          "ContainerCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "Container widget which is used to give control over size and scrolling of widgets",
              $properties : {}
          },
  
          "ResizableWidgetCfg" : {
              $type : "WidgetCfg",
              $description : "Base config for any widget that can be resized in width and height (by default widgets only support width)",
              $properties : {
                  "height" : {
                      $type : "json:Integer",
                      $description : "Widget height in pixels - note: some widgets may ignore this property. If negative, the height will be considered as unset and the widget will use the most appropriate height when possible",
                      $default : -1
                  },
                  "minWidth" : {
                      $type : "json:Integer",
                      $description : "Minimum widget width in pixels - note: some widgets may ignore this property. This requires width unset/equals to -1. Note that this might be constrained further for some widgets to fit into viewport if the viewport is not big enough."
                  },
                  "maxWidth" : {
                      $type : "json:Integer",
                      $description : "Maximum widget width in pixels - note: some widgets may ignore this property. This requires width unset/equals to -1."
                  },
                  "minHeight" : {
                      $type : "json:Integer",
                      $description : "Minimum widget height in pixels - note: some widgets may ignore this property. This requires height unset/equals to -1. Note that this might be constrained further for some widgets to fit into viewport if the viewport is not big enough."
                  },
                  "maxHeight" : {
                      $type : "json:Integer",
                      $description : "Maximum widget height in pixels - note: some widgets may ignore this property. This requires height unset/equals to -1."
                  },
                  "scrollBarX" : {
                      $type : "json:Boolean",
                      $description : "Display horizontal scrollbar. This must be set to true if the list should overflow on the X axis.",
                      $default : false
                  },
                  "scrollBarY" : {
                      $type : "json:Boolean",
                      $description : "Display vertical scrollbar. This must be set to false if the list shouldn't overflow on the Y axis.",
                      $default : true
                  }
              }
          },
  
          "InputCfg" : {
              $type : "WidgetCfg",
              $description : "Base config for any input object - adds label support to any widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "label" : {
                              $type : "common:BindingRef"
                          },
                          "value" : {
                              $type : "common:BindingRef"
                          },
                          "mandatory" : {
                              $type : "common:BindingRef"
                          },
                          "readOnly" : {
                              $type : "common:BindingRef"
                          },
                          "disabled" : {
                              $type : "common:BindingRef"
                          },
                          "error" : {
                              $type : "common:BindingRef"
                          },
                          "errorMessages" : {
                              $type : "common:BindingRef"
                          },
                          "formatError" : {
                              $type : "common:BindingRef"
                          },
                          "formatErrorMessages" : {
                              $type : "common:BindingRef"
                          },
                          "invalidText" : {
                              $type : "common:BindingRef"
                          },
                          "requireFocus" : {
                              $type : "common:BindingRef"
                          },
                          "name" : {
                              $type : "common:BindingRef"
                          },
                          "errorTipPosition" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "inputMetaData" : {
                      $type : "json:String",
                      $description : "Reference to the object that holds the input data (this object may contain $value, mandatory, readOnly, error, errorMessages, formatError, formatErrorMessages and validators properties that will be automatically bound to the widget)"
                  },
  
                  // Properties associated to the input management
                  "value" : {
                      $type : "json:MultiTypes",
                      $description : "Internal value associated to the widget - may be different from the text displayed or entered by the user (e.g. in case of codes or enums)"
                  },
                  "mandatory" : {
                      $type : "json:Boolean",
                      $description : "Indicates if the widget value must be provided (a specific style may apply to the widget to highlight this state to the user)",
                      $default : false
                  },
                  "readOnly" : {
                      $type : "json:Boolean",
                      $description : "Indicates if the widget must be read-only or if it can be edited",
                      $default : false
                  },
                  "error" : {
                      $type : "json:Boolean",
                      $description : "Highlights the input widget to notify an error to the user, defined in a template script.",
                      $default : false
                  },
                  "errorMessages" : {
                      $type : "json:Array",
                      $description : "List of error messages associated to the input widget, defined in a template script - these messages will be automatically displayed in a contextual error tooltip. If this array is not empty the error property is automatically set to true",
                      $contentType : {
                          $type : "json:String",
                          $description : "Error message associated to the widget (can be generated by one of the validators)"
                      },
                      $default : []
                  },
                  "formatError" : {
                      $type : "json:Boolean",
                      $description : "Highlights the input widget to notify an error to the user, defined in the framework."
                  },
                  "formatErrorMessages" : {
                      $type : "json:Array",
                      $description : "List of error messages associated to the input widget, defined in the framework. - these messages will be automatically displayed in a contextual error tooltip.",
                      $contentType : {
                          $type : "json:String",
                          $description : "Error messages associated to the widget, defined in the framework."
                      },
                      $default : []
                  },
                  "invalidText" : {
                      $type : "json:String",
                      $description : "Text displayed in the input when the field is invalid"
                  },
                  "requireFocus" : {
                      $type : "json:Boolean",
                      $description : "Set this bindable property to true to put the focus on the field. As soon as the focus has been put on the field, the property will be set back to false.",
                      $default : false
                  },
                  "directOnBlurValidation" : {
                      $type : "json:Boolean",
                      $description : "Whether validation on input widgets is automatically called by default on blur."
                  },
                  "validationGroups" : {
                      $type : "json:Array",
                      $description : "Contains groups that validation should occur for onblur.",
                      $contentType : {
                          $type : "json:String",
                          $description : "Contains the groups to validate."
                      }
                  },
                  "validationEvent" : {
                      $type : "json:Enum",
                      $enumValues : ["onFocus", "onBlur", "onError", "none"],
                      $default : "onFocus",
                      $description : "contains the event used to display the error tip"
                  },
                  // Input properties not automatically bound through the input
                  // property
                  "name" : {
                      $type : "json:String",
                      $description : "name of the input in current language - useful to describe the error location to the user",
                      $mandatory : false
                  },
                  "disabled" : {
                      $type : "json:Boolean",
                      $description : "Indicates if the widget must be disabled",
                      $default : false
                  },
  
                  // Properties associated to the label management
                  "label" : {
                      $type : "json:String", // TODO: sub-type to prevent from
                      // HTML tags in label
                      $description : "Label text to associate to the control - must contain a separator if needed (e.g. :)",
                      $default : null
                  },
                  "labelAlign" : {
                      $type : "json:Enum",
                      $description : "Alignment of the label",
                      $enumValues : ["left", "right", "center"],
                      $default : "left"
                  },
                  "labelPos" : {
                      $type : "json:Enum",
                      $description : "Position of the label from the widget",
                      $enumValues : ["left", "top", "right", "bottom"],
                      $default : "left"
                  },
                  "labelWidth" : {
                      $type : "json:Integer",
                      $description : "Width of the label container in px - if negative, the value is considered as unset",
                      $default : -1
                  },
                  "labelHeight" : {
                      $type : "json:Integer",
                      $description : "Height of the label container in px - if negative, the value is considered as unset",
                      $default : -1
                  },
                  "hideLabel" : {
                      $type : "json:Boolean",
                      $description : "Indicates if the label must be displayed or not (if true the label is hidden)",
                      $default : false
                  },
                  "waiLabel" : {
                      $type : "json:String",
                      $description : "Sets aria-label on the input, value will be used as the attributes value"
                  },
                  "waiDescribedBy" : {
                      $type : "json:String",
                      $description : "Sets aria-describedby on the input, value will be used as the attributes value"
                  },
                  "waiLabelledBy" : {
                      $type : "json:String",
                      $description : "Sets aria-labelledby on the input, value will be used as the attributes value"
                  },
                  "waiLabelHidden" : {
                      $type : "json:Boolean",
                      $description : "Sets aria-hidden on the label when set to true",
                      $default : false
                  },
                  "errorTipPosition" : {
                      $type : "json:String",
                      $description : "Possible values are: 'bottom left', 'bottom right', 'top left', 'top right'.",
                      $default : "top right"
                  }
              }
          },
  
          "CheckBoxCfg" : {
              $type : "InputCfg",
              $description : "Base config for any check box widget",
              $properties : {
                  "labelPos" : {
                      $type : "InputCfg.labelPos",
                      $description : "Position of the Checkbox (or radio box) label",
                      $default : "right"
                  },
                  "value" : {
                      $type : "InputCfg.value",
                      $description : "Value associated to the widget representing the selected state",
                      $default : false
                  },
                  "onfocus" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the widget gets the focus"
                  },
                  "onchange" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the state of the widget changes due to user action(click)"
                  },
  
                  "icon" : {
                      $type : "json:String",
                      $description : "The name of the sprite and the icon that is to be used in the form sprite:icon",
                      $default : null
                  },
                  "tabIndex" : {
                      $type : "WidgetCfg.tabIndex",
                      $default : 0
                  }
              }
          },
  
          "RadioButtonCfg" : {
              $type : "CheckBoxCfg",
              $description : "Configuration for a radio button",
              $properties : {
                  "bind" : {
                      $type : "CheckBoxCfg.bind",
                      $properties : {
                          "keyValue" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "value" : {
                      $type : "CheckBoxCfg.value",
                      $description : "Value associated to the widget representing the selected value",
                      $default : ""
                  },
                  "keyValue" : {
                      $type : "json:String",
                      $description : "Indicates the selected value",
                      $default : ""
                  }
              }
          },
  
          "TextInputCfg" : {
              $type : "InputCfg",
              $description : "Base config for any text input widgets",
              $properties : {
                  "maxlength" : {
                      $type : "json:Integer",
                      $description : "Maximum number of characters to allow in the textinput - if negative, no maximum applies",
                      $default : -1
                  },
                  "helptext" : {
                      $type : "json:String",
                      $description : "Text to be initially put in the text input in italics to help the user"
                  },
                  "validationDelay" : {
                      $type : "json:Integer",
                      $description : "The time period (in miliseconds) after which validation will be triggered on keydown event",
                      $default : null
                  },
                  "onchange" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user changes the value from this widget"
                  },
                  "onclick" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user clicks on the autocomplete."
                  },
                  "onfocus" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the autocomplete receives focus."
                  },
                  "onblur" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the autocomplete loses focus."
                  },
                  "spellCheck" : {
                      $type : "json:Boolean",
                      $description : "Specifies whether native spell check from the browser is enabled or not on this field. If null, uses the default behaviour from the browser. If true or false, tries to enable or disable native spell check from the browser."
                  },
                  "autoselect" : {
                      $type : "json:Boolean",
                      $description : "Specifies whether display text should be highlighted when the field gains focus."
                  },
                  "fullWidth" : {
                      $type : "json:Boolean",
                      $description : "Specifies whether the widget should be displayed in full width or not. The true value is supported only for textinput widgets, without icons and only if they use Simple Frame or FixedHeight frame.",
                      $default: false
                  },
                  "bind" : {
                      $type : "InputCfg.bind",
                      $properties : {
                          "prefill" : {
                              $type : "common:BindingRef"
                          },
                          "prefillError" : {
                              $type : "common:BindingRef"
                          }
                      }
                  }
  
              }
          },
          "TextFieldCfg" : {
              $type : "TextInputCfg",
              $description : "The configuration for a text field",
              $properties : {}
          },
          "TextareaCfg" : {
              $type : "TextInputCfg",
              $description : "The configuration for a text field",
              $properties : {
                  "height" : {
                      $type : "json:Integer",
                      $description : "Widget height in pixel. If negative, the height will be considered as unset and the widget will use the most appropriate height when possible",
                      $default : -1
                  }
              }
          },
          "SortIndicatorCfg" : {
              $type : "ActionWidgetCfg",
              $description : "The configuration for a sort list widget",
              $properties : {
                  "view" : {
                      $type : "json:ObjectRef",
                      $description : "Passes the view name that is to be applied when using Sort List",
                      $classpath : "aria.templates.View"
                  },
                  "sortKeyGetter" : {
                      $type : "common:Callback",
                      $description : "An callback to return the field by which we want to sort. If this property is null, clicking on the sort indicator does not change the sort order, and only calls the onclick callback."
                  },
                  "refreshArgs" : {
                      $type : "json:Array",
                      $description : "Which section should the sort list refresh",
                      $contentType : {
                          $type : "templates:RefreshCfg"
                      }
                  },
                  "sortName" : {
                      $type : "json:String",
                      $description : "Name of the current sort",
                      $mandatory : true
                  },
                  "labelWidth" : {
                      $type : "json:Integer",
                      $description : "Widget width in pixel - If negative, the width will be considered as unset and the widget will use the most appropriate width when possible",
                      $default : -1
                  },
                  "activateEllipsis" : {
                      $type : "json:Boolean",
                      $description : "DEPRECATED. Ellipsis is now automatically activated if you specify a non-empty ellipsis parameter.",
                      $default : false
                  },
                  "ellipsis" : {
                      $type : "json:String",
                      $description : "What characters to use for ellipsis, by default this will be '...'"
                  },
                  "ellipsisLocation" : {
                      $type : "json:Enum",
                      $enumValues : ["left", "right"],
                      $description : "Which side will the ellipsis be, left or right",
                      $default : "right"
                  },
                  "ellipsisEndStyle" : {
                      $type : "json:Enum",
                      $enumValues : ["clipped", "fullCharacter"],
                      $description : "How the truncated text should end. Default to 'clipped'",
                      $default : "clipped"
                  }
              }
          },
          "PasswordFieldCfg" : {
              $type : "TextInputCfg",
              $description : "The configuration for a text field",
              $properties : {}
          },
          "DateFieldCfg" : {
              $type : "TextInputCfg",
              $description : "The configuration for a text field",
              $properties : {
                  "pattern" : {
                      $type : "environmentBase:FormatTypes",
                      $description : "Date pattern used to propose a best value for the date entry"
                  },
                  "minValue" : {
                      $type : "json:Date",
                      $description : "Minimum date for the value property."
                  },
                  "maxValue" : {
                      $type : "json:Date",
                      $description : "Maximum date for the value property."
                  },
                  "referenceDate" : {
                      $type : "json:Date",
                      $description : "Reference date from which value can be calculated."
                  },
                  "bind" : {
                      $type : "TextInputCfg.bind",
                      $properties : {
                          "referenceDate" : {
                              $type : "common:BindingRef"
                          },
                          "defaultErrorMessages" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "defaultErrorMessages" : {
                      $type : "json:Object",
                      $description : "Default values for error messages.",
                      $properties : {
                          "validation" : {
                              $type : "json:String",
                              $description : "Default message for validation error.",
                              $default : null
                          },
                          "minValue": {
                              $type : "json:String",
                              $description : "Default message for minimum value validation error.",
                              $default : null
                          },
                          "maxValue": {
                              $type : "json:String",
                              $description : "Default message for maximum value validation error.",
                              $default : null
                          }
                      },
                      $default : {}
                  }
              }
          },
  
          "TimeFieldCfg" : {
              $type : "TextInputCfg",
              $description : "The configuration for a text field",
              $properties : {
                  "pattern" : {
                      $type : "environmentBase:FormatTypes",
                      $description : "Time pattern used to generate a value for the time entry"
                  },
                  "bind" : {
                      $type : "TextInputCfg.bind",
                      $properties : {
                          "defaultErrorMessages" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "defaultErrorMessages" : {
                      $type : "json:Object",
                      $description : "Default values for error messages.",
                      $properties : {
                          "validation" : {
                              $type : "json:String",
                              $description : "Default message for validation error.",
                              $default : null
                          }
                      },
                      $default : {}
                  }
              }
          },
  
          "NumberFieldCfg" : {
              $type : "TextInputCfg",
              $description : "The configuration for a text field",
              $properties : {
                  "pattern" : {
                      $type : "environmentBase:FormatTypes",
                      $description : "Formatting pattern used to format number fields",
                      $default : ""
                  },
                  "value" : {
                      $type : "TextInputCfg.value",
                      $description : "Number currently displayed.",
                      $contentTypes : [{
                                  $type : "json:Float",
                                  $description : ""
                              }]
                  },
                  "bind" : {
                      $type : "TextInputCfg.bind",
                      $properties : {
                          "defaultErrorMessages" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "defaultErrorMessages" : {
                      $type : "json:Object",
                      $description : "Default values for error messages.",
                      $properties : {
                          "validation" : {
                              $type : "json:String",
                              $description : "Default message for validation error.",
                              $default : null
                          }
                      },
                      $default : {}
                  }
              }
          },
  
          "DropDownTextInputCfg" : {
              $type : "TextInputCfg",
              $description : "The base configuration for any widget extending DropDownInput",
              $properties : {
                  "popupWidth" : {
                      $type : "json:Integer",
                      $description : "Width of the dropdown popup in px - if negative, the width is computed dynamically.",
                      $default : -1
                  },
                  "popupOpen" : {
                      $type : "json:Boolean",
                      $description : "When this value is true, popup is automatically opened"
                  },
                  "bind" : {
                      $type : "TextInputCfg.bind",
                      $properties : {
                          "popupOpen" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "iconTooltip" : {
                      $type : "json:String",
                      $description : "Tooltip for the icon, if any"
                  },
                  "waiIconLabel" : {
                      $type : "json:String",
                      $description : "aria-label attribute on the icon, when waiAria is activated"
                  }
              }
          },
          "DropDownInputCfg" : {
              $type : "InputCfg",
              $description : "Configuration for widgets extending DropDownInput",
              $properties : {
                  "popupWidth" : {
                      $type : "json:Integer",
                      $description : "Width of the dropdown popup in px - if negative, the width is computed dynamically.",
                      $default : -1
                  },
                  "popupOpen" : {
                      $type : "json:Boolean",
                      $description : "When this value is true, popup is automatically opened"
                  },
                  "bind" : {
                      $type : "InputCfg.bind",
                      $properties : {
                          "popupOpen" : {
                              $type : "common:BindingRef"
                          }
                      }
                  }
              }
          },
          "ListItemCfg" : {
              $type : "json:Object",
              $description : "Option structure",
              // open configuration
              $restricted : false,
              $properties : {
                  "value" : {
                      $type : "json:MultiTypes",
                      $description : "Internal value associated to the option - usually a language-independent code",
                      $mandatory : true,
                      $contentTypes : [{
                                  $type : "json:Integer",
                                  $description : ""
                              }, {
                                  $type : "json:String",
                                  $description : ""
                              }]
                  },
                  "label" : {
                      $type : "json:String",
                      $description : "Text to display to the user - must be in translated in user language",
                      $mandatory : true
                  }
              }
          },
  
          "MultiSelectCfg" : {
              $type : "DropDownTextInputCfg",
              $description : "The base configuration for any widget extending DropDownInput",
              $properties : {
                  "activateSort" : {
                      $type : "json:Boolean",
                      $description : "Allows the developer to specify if the list of options should be sorted by labels",
                      $default : false
                  },
                  "fieldSeparator" : {
                      $type : "json:String",
                      $description : "Template to use to display the list.",
                      $default : ','
                  },
                  "maxOptions" : {
                      $type : "json:Integer",
                      $description : "Maximum number of options that can be selected at the same time.",
                      $minValue : 1
                  },
                  "fieldDisplay" : {
                      $type : "json:Enum",
                      $description : "Whether to display code or value in the text input value.",
                      $enumValues : ["code", "label"],
                      $default : 'label'
                  },
                  "valueOrderedByClick" : {
                      $type : "json:Boolean",
                      $description : "Whether to display the values in the order they were clicked.",
                      $default : true
                  },
                  "instantBind" : {
                      $type : "json:Boolean",
                      $description : "If true, the 'value' property is refreshed (and 'onchange' is triggered) each time user clicks on one of the options of a dropdown. Otherwise, it's refreshed after the dropdown is closed.",
                      $default : false
                  },
                  "listTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template to use to display the list.",
                      $default : "aria.widgets.form.templates.TemplateMultiSelect"
                  },
                  "listSclass" : {
                      $type : "json:String",
                      $description : "sclass of the list used in the dropdown. The default value for this property is taken from the skin."
                  },
                  "items" : {
                      $type : "ListCfg.items",
                      $description : "List of options on a MultiSelect"
                  },
                  "numberOfColumns" : {
                      $type : "FormListCfg:numberOfColumns",
                      $description : "Number of Columns used in the template"
                  },
                  "numberOfRows" : {
                      $type : "FormListCfg:numberOfRows",
                      $description : "Number of Rows used in the template"
                  },
                  "displayOptions" : {
                      $type : "FormListCfg:displayOptions",
                      $description : "Display options that are not interpreted by the list controller."
                  },
                  "readOnlyTextField" : {
                      $type: "json:Boolean",
                      $description : "If true, the user can only modify the value of the widget by opening the popup (the text field is not modifiable)."
                  }
              }
          },
  
          "DatePickerCfg" : {
              $type : "DropDownTextInputCfg",
              $description : "Configuration of a DatePicker",
              $properties : {
                  "pattern" : {
                      $type : "environmentBase:FormatTypes",
                      $description : "Date pattern used to propose a best value for the date entry in the date picker field."
                  },
                  "inputPattern" : {
                      $type : "environmentBase:inputFormatTypes",
                      $description : "Date pattern used to match user input and convert it in a Javascript valid date."
                  },
                  "waiAriaDateFormat" : {
                      $type : "environmentBase:inputFormatTypes",
                      $description : "Date pattern used by screen readers to read the selected date in the calendar (only used when waiAria is true)."
                  },
                  "waiAriaConfirmDateFormat" : {
                      $type : "environmentBase:inputFormatTypes",
                      $description : "Date pattern used by screen readers to read the input date in the text field (only used when waiAria is true)."
                  },
                  "waiAriaConfirmDateDelay" : {
                      $type : "json:Integer",
                      $description : "Delay (in milliseconds) for the debouncing of key events used to make the date read when the user types it in.",
                      $default: 50
                  },
                  "minValue" : {
                      $type : "json:Date",
                      $description : "Minimum date for the value property."
                  },
                  "maxValue" : {
                      $type : "json:Date",
                      $description : "Maximum date for the value property."
                  },
                  "referenceDate" : {
                      $type : "json:Date",
                      $description : "Reference date from which value can be calculated."
                  },
                  "calendarTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template to use to display the calendar."
                  },
                  "calendarLabel" : {
                      $type : "json:String",
                      $description : "Label to be displayed inside the calendar when the DatePicker is open."
                  },
                  "calendarDisplayUnit" : {
                      $type : "json:Enum",
                      $description : "Minimum time unit which must be displayed entirely in the calendar. May be either month (M) or week (W). The default template currently only supports month (M).",
                      $enumValues : ["M", "W"]
                  },
                  "calendarNumberOfUnits" : {
                      $type : "json:Integer",
                      $description : "Number of display units to show at the same time in the calendar."
                  },
                  "calendarFirstDayOfWeek" : {
                      $type : "json:Integer",
                      $description : "First day of the week for the display of the calendar. 0 = Sunday, ... 6 = Saturday. The null value means that it is set according to the regional settings.",
                      $minValue : 0,
                      $maxValue : 6
                  },
                  "calendarMonthLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying each month in the calendar."
                  },
                  "calendarDayOfWeekLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying each day of the week in the calendar."
                  },
                  "calendarDateLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying each date in the calendar."
                  },
                  "calendarCompleteDateLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying complete dates in the calendar."
                  },
                  "calendarShowWeekNumbers" : {
                      $type : "json:Boolean",
                      $description : "Specifies whether week numbers should be displayed."
                  },
                  "calendarShowShortcuts" : {
                      $type : "json:Boolean",
                      $description : "Specifies if today and selected day shortcuts should be displayed"
                  },
                  "calendarRestrainedNavigation" : {
                      $type : "json:Boolean",
                      $description : "Specifies if today and selected day shortcuts should be displayed"
                  },
                  "calendarSclass" : {
                      $type : "json:String",
                      $description : "sclass of the calendar used in the dropdown. The default value for this property is taken from the skin."
                  },
                  "waiAriaCalendarLabel": {
                      $type : "json:String",
                      $description : "aria-label to set on the calendar (only used when waiAria is true)."
                  },
                  "bind" : {
                      $type : "DropDownTextInputCfg.bind",
                      $properties : {
                          "referenceDate" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "value" : {
                      $type : "InputCfg.value",
                      $description : "Date currently selected in the date picker.",
                      $contentTypes : [{
                                  $type : "json:Date",
                                  $description : ""
                              }]
                  }
              }
          },
  
          "SelectBoxCfg" : {
              $type : "DropDownTextInputCfg",
              $description : "Configuration of a SelectBox",
              $properties : {
                  "listTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template to use to display the list."
                  },
                  "listSclass" : {
                      $type : "json:String",
                      $description : "sclass of the list used in the dropdown. The default value for this property is taken from the skin."
                  },
                  "options" : {
                      $type : "json:Array",
                      $description : "List of the possible values that have to be proposed to the user. Note that the `value` of SelectBox is validated each time it's set and it must be one of the entries of the `options` array.",
                      $contentType : {
                          $type : "ListItemCfg"
                      },
                      $default : []
                  },
                  "bind" : {
                      $type : "DropDownTextInputCfg.bind",
                      $properties : {
                          "options" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "preselect" : {
                      $type : "json:Enum",
                      $description : "when set to \"always\", the first option in the list is highlighted, so that it can be selected by hitting the ENTER key. When set to \"none\", no option will be automatically highlighted. The user will have to use navigation keys to move through the list and select an item.",
                      $enumValues : ["always", "none"],
                      $default : "always"
                  },
                  "waiSuggestionsStatusGetter" : {
                      $type : "common:Callback",
                      $description : "The callback specified in this parameter is called when the number of suggestions changes. It receives the new number of suggestions and should return the message to be read by screen readers. This parameter is only used if waiAria is true."
                  }
              }
          },
  
          "SelectCfg" : {
              $type : "DropDownInputCfg",
              $description : "Configuration of a Select",
              $properties : {
                  "tabIndex" : {
                      $type : "WidgetCfg.tabIndex",
                      $default : 0
                  },
                  "listTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template used for displaying the list."
                  },
                  "listSclass" : {
                      $type : "json:String",
                      $description : "sclass of the list used in the dropdown. The default value for this property is taken from the skin."
                  },
                  "options" : {
                      $type : "json:Array",
                      $description : "List of the possible values displayed to the user",
                      $contentType : {
                          $type : "ListItemCfg"
                      },
                      $default : []
                  },
                  "onchange" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the state of the widget changes."
                  },
                  "onblur" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the widget loses focus."
                  },
                  "bind" : {
                      $type : "DropDownInputCfg.bind",
                      $properties : {
                          "options" : {
                              $type : "common:BindingRef"
                          }
                      }
                  }
              }
          },
  
          "AutoCompleteCfg" : {
              $type : "DropDownTextInputCfg",
              $description : "Configuration of an AutoComplete",
              $properties : {
                  "autoFill" : {
                      $type : "json:Boolean",
                      $description : "Autofill the autocomplete textfield on navigation in the suggestions",
                      $default : true
                  },
                  "freeText" : {
                      $type : "json:Boolean",
                      $description : "Specifies if the user can enter its own text",
                      $default : true
                  },
                  "suggestionsTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template to use to display the list."
                  },
                  "resourcesHandler" : {
                      $type : "json:MultiTypes",
                      $description : "",
                      $contentTypes : [{
                                  $type : "json:PackageName",
                                  $description : "Classpath of the resources handler"
                              }, {
                                  $type : "json:ObjectRef",
                                  $description : "Instance of a resources handler"
                              }],
                      $mandatory : true
                  },
                  "preselect" : {
                      $type : "json:Enum",
                      $description : "when set to \"always\", the first option in the list is highlighted, so that it can be selected by hitting the ENTER key. When set to \"none\", no option will be automatically highlighted. The user will have to use navigation keys to move through the list and select an item. When set to \"strict\", the first suggestion will be selected only if it is an \"exactMatch\" (which means, in the default case, that the value of the input field coincides with its code)",
                      $enumValues : ["strict", "always", "none"],
                      $default : "strict"
                  },
                  "expandButton" : {
                      $type : "json:Boolean",
                      $description : "Specifies if the button to get all the suggestions is displayed. Note that the getAllSuggestions method must be implemented on the resources handler for this feature to work (which is not the case for the default Air and Cities resources handlers).",
                      $default : false
                  },
                  "popupMaxHeight" : {
                      $type : "json:Integer",
                      $description : "Maximum height of the dropdown."
                  },
                  "listSclass" : {
                      $type : "json:String",
                      $description : "sclass of the list used in the dropdown. The default value for this property is taken from the skin."
                  },
                  "selectionKeys" : {
                      $type : "json:Array",
                      $description : "Keys defined for submitting a selected item from autocomplete dropdown, key codes and strings can be taken from aria.DomEven",
                      $contentType : {
                          $type : "json:Object",
                          $properties : {
                              "key" : {
                                  $type : "json:MultiTypes",
                                  $description : "description of the key",
                                  $mandatory : true,
                                  $contentTypes : [{
                                              $type : "json:Integer",
                                              $description : "key code"
                                          }, {
                                              $type : "json:String",
                                              $description : "String representing the key",
                                              $sample : "F4"
                                          }]
                              },
                              "ctrl" : {
                                  $type : "json:Boolean",
                                  $description : "Whether or not the ctrl key has to pressed",
                                  $default : false
                              },
                              "shift" : {
                                  $type : "json:Boolean",
                                  $description : "Whether or not the shift key has to pressed",
                                  $default : false
                              },
                              "alt" : {
                                  $type : "json:Boolean",
                                  $description : "Whether or not the alt key has to pressed",
                                  $default : false
                              }
                          }
                      },
                      $default : [{
                                  key : "ENTER"
                              }]
                  },
                  "bind" : {
                      $type : "DropDownTextInputCfg.bind",
                      $properties : {
                          "defaultErrorMessages" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "defaultErrorMessages" : {
                      $type : "json:Object",
                      $description : "Default values for error messages.",
                      $properties : {
                          "validation" : {
                              $type : "json:String",
                              $description : "Default message for validation error.",
                              $default : null
                          }
                      },
                      $default : {}
                  },
                  "waiSuggestionsStatusGetter" : {
                      $type : "common:Callback",
                      $description : "The callback specified in this parameter is called when the number of suggestions changes. It receives the new number of suggestions and should return the message to be read by screen readers. This parameter is only used if waiAria is true."
                  },
                  "waiSuggestionAriaLabelGetter" : {
                      $type : "common:Callback",
                      $description : "The callback specified in this parameter is called for each suggestion when the set of suggestions changes. It should return the aria-label attribute to set on the suggestion. This parameter is only used if waiAria is true."
                  }
              }
          },
  
          "MultiAutoCompleteCfg" : {
              $type : "AutoCompleteCfg",
              $description : "The base configuration for the MultiAutoComplete widget",
              $properties : {
                  "maxOptions" : {
                      $type : "json:Integer",
                      $description : "Maximum no of options that can be selected with MultiAutoComplete."
                  },
                  "freeText" : {
                      $type : "AutoCompleteCfg.freeText",
                      $description : "Specifies if the user can enter its own text and user can edit the text as well on double click",
                      $default : true
                  }
              }
          },
  
          "ActionWidgetCfg" : {
              $type : "WidgetCfg",
              $description : "The base configuration for the button widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "error" : {
                              $type : "common:BindingRef"
                          },
                          "errorMessages" : {
                              $type : "common:BindingRef"
                          },
                          "errorTipPosition" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "label" : {
                      $type : "json:String",
                      $description : "Text to put inside the label in the button",
                      $default : ""
                  },
                  "onclick" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user clicks on the button."
                  },
                  "error" : {
                      $type : "json:Boolean",
                      $description : "Highlights the widget to notify an error to the user, defined in a template script.",
                      $default : false
                  },
                  "errorMessages" : {
                      $type : "json:Array",
                      $description : "List of error messages associated to the widget, defined in a template script - these messages will be automatically displayed in a contextual error tooltip. If this array is not empty the error property is automatically set to true",
                      $contentType : {
                          $type : "json:String",
                          $description : "Error message associated to the widget"
                      },
                      $default : []
                  },
                  "errorTipPosition" : {
                      $type : "json:String",
                      $description : "Possible values are: 'bottom left', 'bottom right', 'top left', 'top right'.",
                      $default : "top right"
                  },
                  "waiLabel" : {
                      $type : "json:String",
                      $description : "Sets aria-label on the widget, value will be used as the attribute's value"
                  },
                  "waiDescribedBy" : {
                      $type : "json:String",
                      $description : "Sets aria-describedby on the widget, value will be used as the attribute's value"
                  },
                  "waiLabelledBy" : {
                      $type : "json:String",
                      $description : "Sets aria-labelledby on the widget, value will be used as the attribute's value"
                  },
                  "waiHasPopup" : {
                      $type : "json:Boolean",
                      $description : "If true, sets aria-haspopup=\"true\" on the widget. Only used if waiAria is true."
                  }
              }
          },
  
          "ButtonCfg" : {
              $type : "ActionWidgetCfg",
              $description : "The base configuration for the button widget",
              $properties : {
                  "bind" : {
                      $type : "ActionWidgetCfg.bind",
                      $properties : {
                          "disabled" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "blurBeforeAction" : {
                      $type : "json:Boolean",
                      $description : "If true, the button blurs any other focused element on the page before calling the onclick handler."
                  },
                  "height" : {
                      $type : "json:Integer",
                      $description : "The height of the button",
                      $default : -1
                  },
                  "disabled" : {
                      $type : "json:Boolean",
                      $description : "A boolean whether the button is disabled or not",
                      $default : false
                  },
                  "selected" : { // Backward compatibility for "selected"
                      // property to be removed in the near future
                      $type : "json:Boolean",
                      $description : "DEPRECATED: A boolean whether the button is selected or not",
                      $default : false
                  },
                  "tabIndex" : {
                      $type : "WidgetCfg.tabIndex",
                      $default : 0
                  },
                  "focusableWhenDisabled" : {
                      $type : "json:Boolean",
                      $description : "Whether the button can be focused when it is disabled.",
                      $default : false
                  }
              }
          },
          "TextCfg" : {
              $type : "WidgetCfg",
              $description : "The base configuration for the Text widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "text" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "text" : {
                      $type : "json:String",
                      $description : "The text to be displayed",
                      $default : ""
                  },
                  "activateEllipsis" : {
                      $type : "json:Boolean",
                      $description : "DEPRECATED. Ellipsis is now automatically activated if you specify a non-empty ellipsis parameter.",
                      $default : false
                  },
                  "ellipsis" : {
                      $type : "json:String",
                      $description : "The string to be used as ellipsis"
                  },
                  "ellipsisLocation" : {
                      $type : "json:Enum",
                      $enumValues : ["left", "right"],
                      $description : "Which side will the ellipsis be, left or right",
                      $default : "right"
                  },
                  "ellipsisEndStyle" : {
                      $type : "json:Enum",
                      $enumValues : ["clipped", "fullCharacter"],
                      $description : "How the truncated text should end. Default to 'clipped'",
                      $default : "clipped"
                  }
              }
          },
  
          "IconButtonCfg" : {
              $type : "ButtonCfg",
              $description : "The base configuration for the icon button widget",
              $properties : {
                  "icon" : {
                      $type : "json:String",
                      $description : "The name of the sprite and the icon that is to be used in the form sprite:icon",
                      $default : null
                  },
                  "sourceImage" : {
                      $type : "json:Object",
                      $description : "Configuration for custom image",
                      $properties : {
                          "path" : {
                              $type : "json:String",
                              $description : "Path of the image",
                              $default : null
                          },
                          "width" : {
                              $type : "json:Integer",
                              $description : "Width of the image",
                              $default : 16
                          },
                          "height" : {
                              $type : "json:Integer",
                              $description : "Height of the image",
                              $default : 16
                          }
                      }
                  }
              }
          },
  
          "LinkCfg" : {
              $type : "ActionWidgetCfg",
              $description : "The base configuration for the link widget",
              $properties : {
                  "bind" : {
                      $type : "ActionWidgetCfg.bind",
                      $properties : {
                          "disabled" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "disabled" : {
                      $type : "json:Boolean",
                      $description : "A boolean whether the button is disabled or not",
                      $default : false
                  }
              }
          },
  
          "SpriteCfg" : {
              $type : "json:Object",
              $description : "Configuration needed when registering a new icon library",
              $properties : {
                  "name" : {
                      $type : "json:String",
                      $description : "Name used to identify the icon lib that is being declared",
                      $default : null
                  },
                  "cssClass" : {
                      $type : "json:String",
                      $description : "A css class that provides the sprite - either this or the spriteURL is needed",
                      $default : ""
                  },
                  "spriteURL" : {
                      $type : "json:String",
                      $description : "A URL to the sprite",
                      $default : null
                  },
                  "spriteSpacing" : {
                      $type : "json:Integer",
                      $description : "The number of pixels between each icon in the sprite - constant for all icons in this sprite",
                      $default : 0
                  },
                  "iconWidth" : {
                      $type : "json:Integer",
                      $description : "The width of each icon in the sprite in pixels - constant across all icons in this sprite",
                      $default : -1
                  },
                  "iconHeight" : {
                      $type : "json:Integer",
                      $description : "The height of each icon in the sprite in pixels - constant across all icons in this sprite",
                      $default : -1
                  },
                  "biDimensional" : {
                      $type : "json:Boolean",
                      $description : "This indicates whether the images are all in 1 line if false or in rows and columns if true",
                      $default : false
                  },
                  "direction" : {
                      $type : "json:String",
                      $description : "This can take two values x or y. It is used if the sprite is 1-dimensional, it corresponds to whether the icons are side-by-side (x), or one on top of another (y)",
                      $default : "x"
                  },
                  "content" : {
                      $type : "json:Map",
                      $description : "This is the object that names each icon and gives a position",
                      $contentType : {
                          $type : "json:MultiTypes",
                          $description : "",
                          $contentTypes : [{
                                      $type : "json:Integer",
                                      $description : "A position in the sprite"
                                  }, {
                                      $type : "json:String",
                                      $description : "A 2D position in the form x_y"
                                  }]
                      }
                  }
              }
          },
  
          "IconCfg" : {
              $type : "WidgetCfg",
              $description : "Configuration needed to use an icon in a template",
              $properties : {
                  "icon" : {
                      $type : "json:String",
                      $description : "The name of the sprite and the icon that is to be used in the form sprite:icon",
                      $default : null
                  },
                  "onclick" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user clicks on the icon."
                  },
                  "label" : {
                      $type : "json:String",
                      $description : "The label to use for the icon (used for accessibility only)."
                  },
                  "sourceImage" : {
                      $type : "json:Object",
                      $description : "Configuration for custom image",
                      $properties : {
                          "path" : {
                              $type : "json:String",
                              $description : "Path of the image",
                              $default : null
                          },
                          "width" : {
                              $type : "json:Integer",
                              $description : "Width of the image",
                              $default : 16
                          },
                          "height" : {
                              $type : "json:Integer",
                              $description : "Height of the image",
                              $default : 16
                          }
                      }
                  },
                  "role" : {
                      $type : "json:String",
                      $description : "The role (attribute) to give to the widget (only used when waiAria is true).",
                      $default : null
                  }
              }
          },
          "DivCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "The base configuration for the div widget",
              $properties : {
                  "bind" : {
                      $type : "ResizableWidgetCfg.bind",
                      $properties : {
                          "width" : {
                              $type : "common:BindingRef"
                          },
                          "height" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "cssClass" : {
                      $type : "json:String",
                      $description : "A string to be used to inject a Class into the main content area",
                      $default : ""
                  },
                  "minWidth" : {
                      $type : "ResizableWidgetCfg.minWidth",
                      $description : "Minimum widget width in pixels. Works also when width is defined and > 0 (to allow constraints on bindable width). Note that this might be constrained further for some widgets to fit into viewport if the viewport is not big enough."
                  },
                  "maxWidth" : {
                      $type : "ResizableWidgetCfg.maxWidth",
                      $description : "Maximum widget width in pixels. Works also when width is defined and > 0 (to allow constraints on bindable width)."
                  },
                  "minHeight" : {
                      $type : "ResizableWidgetCfg.minHeight",
                      $description : "Minimum widget height in pixels. Works also when height is defined and > 0 (to allow constraints on bindable height). Note that this might be constrained further for some widgets to fit into viewport if the viewport is not big enough."
                  },
                  "maxHeight" : {
                      $type : "ResizableWidgetCfg.maxHeight",
                      $description : "Maximum widget height in pixels. Works also when height is defined and > 0 (to allow constraints on bindable height)."
                  }
              }
          },
          "TemplateCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "The configuration for the template widget, to display sub-templates.",
              $properties : {
                  "printOptions" : {
                      $type : "WidgetCfg.printOptions",
                      $default : "adaptXY"
                  },
                  "defaultTemplate" : {
                      $type : "json:PackageName",
                      $description : "Classpath of the template to be displayed when no customization has been done.",
                      $mandatory : true
                  },
                  "data" : {
                      $type : "json:ObjectRef",
                      $description : "JSON object to be made accessible in the sub-template as this.data. By default, use the parent template data, unless moduleCtrl is specified, in which case the data model of that module controller is used.",
                      $mandatory : false
                  },
                  "moduleCtrl" : {
                      $type : "templates:ModuleCtrl",
                      $description : "Module controller to be used with the sub-template. By default, use the parent template module controller, unless data is specified and is the data model of one of the sub-modules of the parent template module controller, in which case that sub-module is used.",
                      $mandatory : false
                  },
                  "args" : {
                      $type : "json:Array",
                      $description : "Parameters to pass to the main macro in the sub-template.",
                      $contentType : {
                          $type : "json:MultiTypes",
                          $description : "Any parameter to be passed to the main macro in the sub-template."
                      },
                      $default : []
                  },
                  "baseTabIndex" : {
                      $type : "json:Integer",
                      $description : "The base tab index that will be added to all tab indexes in the template",
                      $default : 0
                  },
                  "xForceScrollbar" : {
                      $type : "json:Boolean",
                      $description : "Force display horizontal scrollbar. This must be set to true if the list should overflow on the X axis.",
                      $default : false
                  },
                  "yForceScrollbar" : {
                      $type : "json:Boolean",
                      $description : "Force display vertical scrollbar. This must be set to true if the list should overflow on the Y axis.",
                      $default : false
                  }
  
              }
          },
          "TooltipCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "",
              $properties : {
                  "id" : {
                      $type : "WidgetCfg.id",
                      $mandatory : true
                  },
                  "macro" : {
                      $type : "templates:MacroCfg",
                      $description : "Macro to call to get the tooltip content.",
                      $mandatory : true
                  },
                  "sclass" : {
                      $type : "WidgetCfg.sclass",
                      $default : "tooltip"
                  },
                  "showOnlyOnMouseStill" : {
                      $type : "json:Boolean",
                      $description : "",
                      $default : true
                  },
                  "showDelay" : {
                      $type : "json:Integer",
                      $description : "Delay before the tooltip is shown.",
                      $default : 100
                  },
                  "closeOnMouseClick" : {
                      $type : "json:Boolean",
                      $description : "Close the tooltip when the user clicks outside of the tooltip",
                      $default : true
                  },
                  "closeOnMouseOut" : {
                      $type : "json:Boolean",
                      $description : "Close the tooltip when the user leaves the tooltip, after a delay, set in closeOnMouseOutDelay",
                      $default : true
                  },
                  "closeOnMouseOutDelay" : {
                      $type : "json:Integer",
                      $description : "Delay before closing the tooltip when the user leaves the tooltip",
                      $default : 100
                  },
                  "closeOnMouseScroll" : {
                      $type : "json:Boolean",
                      $description : "Close the tooltip when the user scrolls outside of the popup",
                      $default : true
                  }
              }
          },
          "ErrorListCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "Configuration for the ErrorList widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "messages" : {
                              $type : "common:BindingRef"
                          },
                          "requireFocus" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "defaultTemplate" : {
                      $type : "json:String",
                      $description : "Template used to display the messages list.",
                      $default : "aria.widgets.errorlist.ErrorListTemplate"
                  },
                  "displayOptions" : {
                      $type : "json:MultiTypes",
                      $description : "Custom options that are not interpreted and passed to the template."
                  },
                  "messages" : {
                      $type : "json:ObjectRef",
                      $description : "Messages list (of type aria.validators.CfgBeans.MessagesList) to be displayed in the widget.",
                      $default : []
                  },
                  "displayCodes" : {
                      $type : "json:Boolean",
                      $description : "True if message codes should be displayed along with localized messages.",
                      $default : true
                  },
                  "title" : {
                      $type : "json:String",
                      $description : "Title to be displayed in the widget.",
                      $default : ""
                  },
                  "titleTag" : {
                      $type : "json:String",
                      $description : "HTML tag used to display the title in the widget.",
                      $regExp: /^[a-z0-9]+$/i
                  },
                  "titleClassName" : {
                      $type : "json:String",
                      $description : "CSS classes to style the title. It is only taken into account if titleTag is specified."
                  },
                  "filterTypes" : {
                      $type : "json:Array",
                      $description : "If not null, specifies the types of messages which should be displayed in the widget. It must match the type property in aria.utils.validators.CfgBeans.Message.",
                      $default : null,
                      $contentType : {
                          $type : "json:String",
                          $description : "Type of message.",
                          $mandatory : true
                      },
                      $sample : ["F", "E"]
                  },
                  "block" : {
                      $type : "ResizableWidgetCfg.block",
                      $default : true
                  },
                  "requireFocus" : {
                      $type : "json:Boolean",
                      $description : "Set this bindable property to true to put the focus on the first item. As soon as the focus has been set, the property will be set back to false.",
                      $default : false
                  },
                  "ariaLive" : {
                      $type : "json:Boolean",
                      $description : "Specifies whether role=alert and aria-live=assertive are included (true) or omitted (false) on the container element (defaults to true, only used if waiAria is true)",
                      $default : true
                  }
              }
          },
          "RangeCalendarCfg" : {
              $type : "BaseCalendarCfg",
              $description : "Configuration for the RangeCalendar widget",
              $properties : {
                  "bind" : {
                      $type : "BaseCalendarCfg.bind",
                      $properties : {
                          "fromDate" : {
                              $type : "common:BindingRef"
                          },
                          "toDate" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "fromDate" : {
                      $type : "json:Date",
                      $description : "First date of the range selection."
                  },
                  "toDate" : {
                      $type : "json:Date",
                      $description : "Last date of the range selection."
                  },
                  "onDateSelect" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user selects a date in the calendar. If the cancelDefault property on the event object is not set to true, the range calendar will alternatively set the fromDate or the toDate value with the selected date."
                  }
              }
          },
          "CalendarCfg" : {
              $type : "BaseCalendarCfg",
              $description : "Configuration for the Calendar widget",
              $properties : {
                  "bind" : {
                      $type : "BaseCalendarCfg.bind",
                      $properties : {
                          "value" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "value" : {
                      $type : "json:Date",
                      $description : "Date currently selected in the calendar."
                  },
                  "showShortcuts" : {
                      $type : "json:Boolean",
                      $description : "Specifies if today and selected day shortcuts should be displayed",
                      $default : true
                  }
              }
          },
          "BaseCalendarCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "Common configuration properties for the Calendar and RangeCalendar widgets",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "startDate" : {
                              $type : "common:BindingRef"
                          },
                          "ranges" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "ranges" : {
                      $type : "json:Array",
                      $description : "Ranges of days to highlight.",
                      $contentType : {
                          $type : "json:ObjectRef",
                          $mandatory : true,
                          $description : "Range of dates (of type aria.widgets.calendar.CfgBeans.Range) to be highlighted."
                      }
                  },
                  "tabIndex" : {
                      $type : "WidgetCfg.tabIndex",
                      $default : 0
                  },
                  "label" : {
                      $type : "json:String",
                      $description : "Label text to associate to the calendar."
                  },
                  "showWeekNumbers" : {
                      $type : "json:Boolean",
                      $description : "Specifies whether week numbers should be displayed.",
                      $default : true
                  },
                  "defaultTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template to use to display the calendar."
                  },
                  "onclick" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user clicks on a date in the calendar, before it is actually selected."
                  },
                  "onmouseover" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user moves the mouse on a date."
                  },
                  "onmouseout" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user moves the mouse out of a date."
                  },
                  "onchange" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the selected date or range in the calendar changes because of user action (click or keyboard selection)."
                  },
                  "onfocus" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the calendar widget is focused."
                  },
                  "onblur" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the calendar widget is blured."
                  },
                  "onkeydown" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user types a key while the widget is focused."
                  },
                  "onmousedown" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user presses the mouse on the calendar."
                  },
                  "minValue" : {
                      $type : "json:Date",
                      $description : "Minimum date for the value property."
                  },
                  "maxValue" : {
                      $type : "json:Date",
                      $description : "Maximum date for the value property."
                  },
                  "displayUnit" : {
                      $type : "json:Enum",
                      $description : "Minimum time unit which must be displayed entirely in the calendar. May be either month (M) or week (W). The default template currently only supports month (M).",
                      $enumValues : ["M", "W"]
                  },
                  "numberOfUnits" : {
                      $type : "json:Integer",
                      $description : "Number of display units to show at the same time.",
                      $default : 3
                  },
                  "startDate" : {
                      $type : "json:Date",
                      $description : "Approximate first date in the currently displayed calendar. However, as the calendar may have a display with whole weeks or whole months, dates before this date may also appear."
                  },
                  "firstDayOfWeek" : {
                      $type : "json:Integer",
                      $description : "First day of the week. 0 = Sunday, ... 6 = Saturday. The null value means that it is set according to the application environment.",
                      $minValue : 0,
                      $maxValue : 6
                  },
                  "waiAriaDateFormat" : {
                      $type : "environmentBase:inputFormatTypes",
                      $description : "Date pattern used by screen readers to read the date (only used when waiAria is true)."
                  },
                  "waiAriaLabel": {
                      $type : "json:String",
                      $description : "aria-label to set on the whole calendar (only used when waiAria is true)."
                  },
                  "monthLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying each month."
                  },
                  "dayOfWeekLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying each day of the week."
                  },
                  "dateLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying each date in the calendar."
                  },
                  "completeDateLabelFormat" : {
                      $type : "json:String",
                      $description : "Date pattern to be used when displaying complete dates."
                  },
                  "restrainedNavigation" : {
                      $type : "json:Boolean",
                      $description : "Specifies if today and selected day shortcuts should be displayed",
                      $default : true
                  }
              }
          },
          "ListCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "Configuration for the List widget. ",
              $properties : {
                  "tabIndex" : {
                      $type : "WidgetCfg.tabIndex",
                      $default : 0
                  },
                  "defaultTemplate" : {
                      $type : "json:PackageName",
                      $description : "Template to use to display the list.",
                      $default : "aria.widgets.form.list.templates.ListTemplate"
                  },
                  "preselect" : {
                      $type : "json:Enum",
                      $description : "when set to \"always\", the first option in the list is highlighted, so that it can be selected by hitting the ENTER key. When set to \"none\", no option will be automatically highlighted. The user will have to use navigation keys to move through the list and select an item. The \"strict\" option does not make sense when the List widget is used on its own, but needs to be added here for compatibility with respect to the AutoComplete and MultiAutoComplete widgets that use a List.",
                      $enumValues : ["strict", "always", "none"],
                      $default : "strict"
                  },
                  "items" : {
                      $type : "json:MultiTypes",
                      $description : "The possible choices in the list.",
                      $contentTypes : [{
                                  $type : "json:Array",
                                  $description : "value/label pairs",
                                  $contentType : {
                                      $type : "json:Object",
                                      $description : "Label/value pairs",
                                      $properties : {
                                          "label" : {
                                              $type : "json:String",
                                              $description : "The string to show"
                                          },
                                          "value" : {
                                              $type : "json:MultiTypes",
                                              $description : "The value of the item"
                                          },
                                          "ariaLabel" : {
                                              $type : "json:String",
                                              $description : "The string to set in the aria-label attribute (only used when waiAria is true)"
                                          }
                                      }
                                  }
                              }, {
                                  $type : "json:Object",
                                  $description : "Container reference with Label/value property names",
                                  $properties : {
                                      "container" : {
                                          $type : "json:Object",
                                          $description : "The container to take the items from",
                                          $default : {}
                                      },
                                      "labelProperty" : {
                                          $type : "json:String",
                                          $description : "The name of the property containing the label",
                                          $default : ""
                                      },
                                      "ariaLabelProperty" : {
                                          $type : "json:String",
                                          $description : "The name of the property containing the aria-label",
                                          $default : ""
                                      },
                                      "valueProperty" : {
                                          $type : "json:String",
                                          $description : "The name of the property containing the value",
                                          $default : ""
                                      }
                                  }
                              }]
                  },
                  "selectedValues" : {
                      $type : "json:Array",
                      $description : "Values of currently selected items.",
                      $default : [],
                      $contentType : {
                          $type : "json:MultiTypes",
                          $description : "Same type as the key for the items"
                      }
                  },
                  "selectedIndex" : {
                      $type : "json:Integer",
                      $description : "Index of the selected element in the list, if only one is or should be selected. -1 means no element is selected. A null value means several elements are selected."
                  },
                  "maxOptions" : {
                      $type : "json:Integer",
                      $description : "Maximum number of options that can be selected at the same time. It is only taken into account if multipleSelect is true. A null value means there is no maximum.",
                      $minValue : 1
                  },
                  "multipleSelect" : {
                      $type : "json:Boolean",
                      $description : "This must be set to true if several items can be selected at the same time.",
                      $default : false
                  },
                  "activateSort" : {
                      $type : "json:Boolean",
                      $description : "Allows the developer to specify if the list of options should be sorted by labels",
                      $default : false
                  },
                  "disabled" : {
                      $type : "json:Boolean",
                      $description : "true if input is disabled",
                      $default : false
                  },
                  "onclick" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user clicks on an element in the list, before it is actually selected."
                  },
                  "onchange" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the state of the widget changes due to user action (click or keyboard)."
                  },
                  "onkeyevent" : {
                      $type : "common:Callback",
                      $description : "Function to be called when a key event occurs."
                  },
                  "onmouseover" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user moves the mouse over an item in the list."
                  },
                  "onmousedown" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user clicks the mouse in the list."
                  },
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "selectedValues" : {
                              $type : "common:BindingRef"
                          },
                          "selectedIndex" : {
                              $type : "common:BindingRef"
                          },
                          "items" : {
                              $type : "common:BindingRef"
                          },
                          "disabled" : {
                              $type : "common:BindingRef"
                          },
                          "multipleSelect" : {
                              $type : "common:BindingRef"
                          },
                          "maxOptions" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "displayOptions" : {
                      $type : "FormListCfg:displayOptions",
                      $description : "This is a configuration object that is used by the multi-select"
                  },
                  "numberOfColumns" : {
                      $type : "FormListCfg:numberOfColumns",
                      $description : "Number of Columns used by the multi-select List. This property can be applied only with multi-select List"
                  },
                  "numberOfRows" : {
                      $type : "FormListCfg:numberOfRows",
                      $description : "Number of Rows used by the multi-select List. This property can be applied only with multi-select List"
                  },
                  "onclose" : {
                      $type : "common:Callback",
                      $description : "Function to be called when the user triggers the close event of the List"
                  }
              }
          },
          "DialogCfg" : {
              $type : "DivCfg", // It would be cleaner to put here ResizableWidgetCfg instead
              $description : "The base configuration for the Dialog widget",
              $properties : {
                  "bind" : {
                      $type : "DivCfg.bind",
                      $properties : {
                          "visible" : {
                              $type : "common:BindingRef"
                          },
                          "movable" : {
                              $type : "common:BindingRef"
                          },
                          "macro" : {
                              $type : "common:BindingRef"
                          },
                          "title" : {
                              $type : "common:BindingRef"
                          },
                          "xpos" : {
                              $type : "common:BindingRef"
                          },
                          "ypos" : {
                              $type : "common:BindingRef"
                          },
                          "maximized" : {
                              $type : "common:BindingRef",
                              $description : "Whether the Dialog is occupying the whole viewport. Set to true takes precedence over center, xpos, ypos, width, height and also ignores maxWidth and maxHeight. Unmaximize the Dialog first to change those settings."
                          },
                          "center" : {
                              $type : "common:BindingRef"
                          },
                          "restoreFocusOnClose": {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "title" : {
                      $type : "json:String",
                      $description : "The title of the dialog which will be displayed in the header",
                      $default : ""
                  },
                  "titleTag" : {
                      $type : "json:String",
                      $description : "HTML tag used to display the title in the widget. The default value is 'h1' when waiAria is true and 'span' otherwise.",
                      $regExp: /^[a-z0-9]+$/i
                  },
                  "visible" : {
                      $type : "json:Boolean",
                      $description : "A boolean whether the dialog is visible",
                      $default : false
                  },
                  "macro" : {
                      $type : "templates:MacroCfg",
                      $description : "Required. The macro that will be used as dialog content. Browser will freeze if it does not find this property as part of widget or bindable property."
                  },
                  "icon" : {
                      $type : "json:String",
                      $description : "Icon to use in the title bar (same as the icon property of the Icon widget)"
                  },
                  "modal" : {
                      $type : "json:Boolean",
                      $description : "Whether the dialog box is modal. If it is modal, a mask is shown behind the dialog box so that mouse and keyboard interraction with elements behind the dialog box is not possible.",
                      $default : false
                  },
                  "closable" : {
                      $type : "json:Boolean",
                      $description : "Whether the dialog has a close button in its title bar.",
                      $default : true
                  },
                  "closeLabel" : {
                      $type : "json:String",
                      $description : "The label to use for the close icon (can be used in various ways such as for tooltip or accessibility)."
                  },
                  "waiOpenMsg" : {
                      $type : "json:String",
                      $description : "When waiAria is activated, this property specifies the message to read when the modal dialog is opened."
                  },
                  "waiEscapeMsg" : {
                      $type : "json:String",
                      $description : "If this property is defined and if waiAria is activated, the user has to press escape twice (instead of only once) to close the dialog. This property specifies the message to read after the user pressed escape the first time."
                  },
                  "waiCloseMsg" : {
                      $type : "json:String",
                      $description : "When waiAria is activated, this property specifies the message to read when the modal dialog is closed."
                  },
                  "maximizable" : {
                      $type : "json:Boolean",
                      $description : "Whether the dialog has a maximize button in its title bar. Note that you can set this to false and programatically maximize the Dialog to achieve a fullscreen-only Dialog solution.",
                      $default : false
                  },
                  "maximizeLabel" : {
                      $type : "json:String",
                      $description : "The label to use for the maximize icon (can be used in various ways such as for tooltip or accessibility)."
                  },
                  "closeOnMouseClick" : {
                      $type : "json:Boolean",
                      $description : "Close the dialog when the user clicks outside of it",
                      $default : false
                  },
                  "center" : {
                      $type : "json:Boolean",
                      $description : "If true, the dialog is always centered in the browser window. Takes priority over xpos and ypos. However, if the dialog box is movable and the user manually moves it, the centered behavior will be switched off.",
                      $default : true
                  },
                  "autoFocus" : {
                      $type : "json:Boolean",
                      $description : "Whether the first element in the dialog is automatically focused when the dialog is displayed. By default, it is true for modal dialogs and false for other dialogs."
                  },
                  "focusableTitle" : {
                      $type : "json:Boolean",
                      $description : "Whether the title of the dialog is focusable. By default, this property takes the same value as waiAria."
                  },
                  "focusableMaximize" : {
                      $type : "json:Boolean",
                      $description : "Whether the maximize button of the dialog is focusable. By default, this property is true only if waiAria is true and maximizeLabel is defined."
                  },
                  "focusableClose" : {
                      $type : "json:Boolean",
                      $description : "Whether the close button of the dialog is focusable. By default, this property is true only if waiAria is true and closeLabel is defined."
                  },
                  "xpos" : {
                      $type : "json:Integer",
                      $description : "x position of the top left corner of the dialog box.",
                      $default : 0
                  },
                  "ypos" : {
                      $type : "json:Integer",
                      $description : "y position of the top left corner of the dialog box.",
                      $default : 0
                  },
                  "movable" : {
                      $type : "json:Boolean",
                      $description : "If true, the dialog can be moved. The default is read from the application environment."
                  },
                  "resizable" : {
                      $type : "json:Boolean",
                      $description : "If true, the dialog can be resizable. The default is false.",
                      $default : false
                  },
                  "movableProxy" : {
                      $type : "dragDrop:ProxyCfg",
                      $description : "Specifies the type of proxy dor the dialog motion. The default is read from the application environment."
                  },
                  "onOpen" : {
                      $type : "common:Callback",
                      $description : "Callback called when the dialog is open, right after it is displayed. Can be used to set the focus on the right element in the dialog."
                  },
                  "onClose" : {
                      $type : "common:Callback",
                      $description : "Callback called when the dialog is closed."
                  },
                  "onCloseClick" : {
                      $type : "common:Callback",
                      $description : "Callback called when the close button is clicked. If not specified, the dialog will simply be closed when clicking on the close button. If specified, the dialog will only be closed if the callback either sets the visible property of the Dialog to false (through bindings) or sets to false the cancelDefault property of its first parameter. This allows the developper to give the same callback method to both the onCloseClick property of the dialog and the onclick property of a close button inside the dialog."
                  },
                  "ondragstart" : {
                      $type : "common:Callback",
                      $description : "Callback called after the dialog starts to be dragged."
                  },
                  "ondragend" : {
                      $type : "common:Callback",
                      $description : "Callback called after the dialog movement ends."
                  },
                  "beforeresize" : {
                      $type : "common:Callback",
                      $description : "Callback called after the dialog starts to be resized."
                  },
                  "resizeend" : {
                      $type : "common:Callback",
                      $description : "Callback called after the dialog resizing ends."
                  },
                  "restoreFocusOnClose" : {
                      $type : "json:Boolean",
                      $description : "If the dialog is modal and this parameter is true, the element which was focused before the dialog was displayed will be focused back when the dialog is closed. This parameter is ignored for non-modal dialogs.",
                      $default : true
                  },
                  "container" : {
                      $type : "json:MultiTypes",
                      $description : "Element which will contain the dialog. It can be specified either by its id or by an HTMLElement object. If not specified, the dialog will be in document.body.",
                      $contentTypes : [{
                          $type : "json:String",
                          $description : "Id of the DOM element which will contain the dialog."
                      }, {
                          $type : "json:ObjectRef",
                          $description : "{HTMLElement} The DOM element which will contain the dialog."
                      }]
                  }
              }
          },
          "FieldsetCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "The base configuration for the Fieldset widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "width" : {
                              $type : "common:BindingRef"
                          },
                          "height" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "onSubmit" : {
                      $type : "common:Callback",
                      $description : "Callback function called when the user presses ENTER in a field inside the fieldset."
                  },
                  "label" : {
                      $type : "json:String",
                      $description : "Text to put on the fieldset to describe its content."
                  },
                  "minWidth" : {
                      $type : "ResizableWidgetCfg.minWidth",
                      $description : "Minimum widget width in pixels. Works also when width is defined and > 0 (to allow constraints on bindable width)."
                  },
                  "maxWidth" : {
                      $type : "ResizableWidgetCfg.maxWidth",
                      $description : "Maximum widget width in pixels. Works also when width is defined and > 0 (to allow constraints on bindable width)."
                  },
                  "minHeight" : {
                      $type : "ResizableWidgetCfg.minHeight",
                      $description : "Minimum widget height in pixels. Works also when height is defined and > 0 (to allow constraints on bindable height)."
                  },
                  "maxHeight" : {
                      $type : "ResizableWidgetCfg.maxHeight",
                      $description : "Maximum widget height in pixels. Works also when height is defined and > 0 (to allow constraints on bindable height)."
                  }
              }
          },
          "TabCfg" : {
              $type : "ContainerCfg",
              $description : "The base configuration for the Tab widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "selectedTab" : {
                              $type : "common:BindingRef"
                          },
                          "labelId" : {
                              $type : "common:BindingRef"
                          },
                          "controlledTabPanelId" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "tabId" : {
                      $type : "json:String",
                      $description : "The id of the tab",
                      $mandatory : true
                  },
                  "disabled" : {
                      $type : "json:Boolean",
                      $description : "A boolean whether the tab is disabled",
                      $default : false
                  },
                  "selectedTab" : {
                      $type : "json:String",
                      $description : "The id of the currently selected tab"
                  },
                  "waiHidden" : {
                      $type : "json:Boolean",
                      $description : "Sets aria-hidden on the tab when set to true",
                      $default : false
                  },
                  "waiLabel" : {
                      $type : "json:String",
                      $description : "Sets aria-label on the widget, value will be used as the attribute's value"
                  },
                  "waiLabelledBy" : {
                      $type : "json:String",
                      $description : "Sets aria-labelledby on the widget, value will be used as the attribute's value"
                  },
                  "waiDescribedBy" : {
                      $type : "json:String",
                      $description : "Sets aria-describedby on the widget, value will be used as the attribute's value"
                  },
                  "waiTitleTag" : {
                      $type : "json:String",
                      $description : "Adds a wrapper element around the widget element if specified, value sets the tag name of the element"
                  }
              }
          },
          "TabPanelCfg" : {
              $type : "ContainerCfg",
              $description : "The base configuration for the TabPanel widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "width" : {
                              $type : "common:BindingRef"
                          },
                          "height" : {
                              $type : "common:BindingRef"
                          },
                          "selectedTab" : {
                              $type : "common:BindingRef"
                          },
                          "labelId" : {
                              $type : "common:BindingRef"
                          },
                          "controlledTabPanelId" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "selectedTab" : {
                      $type : "json:String",
                      $description : "The id of the currently selected tab"
                  },
                  "macro" : {
                      $type : "templates:MacroCfg",
                      $description : "Macro to call to display the content of the TabPanel",
                      $mandatory : true
                  },
                  "block" : {
                      $type : "WidgetCfg.block",
                      $default : true
                  },
                  "minWidth" : {
                      $type : "ResizableWidgetCfg.minWidth",
                      $description : "Minimum widget width in pixels. Works also when width is defined and > 0 (to allow constraints on bindable width)."
                  },
                  "maxWidth" : {
                      $type : "ResizableWidgetCfg.maxWidth",
                      $description : "Maximum widget width in pixels. Works also when width is defined and > 0 (to allow constraints on bindable width)."
                  },
                  "minHeight" : {
                      $type : "ResizableWidgetCfg.minHeight",
                      $description : "Minimum widget height in pixels. Works also when height is defined and > 0 (to allow constraints on bindable height)."
                  },
                  "maxHeight" : {
                      $type : "ResizableWidgetCfg.maxHeight",
                      $description : "Maximum widget height in pixels. Works also when height is defined and > 0 (to allow constraints on bindable height)."
                  }
              }
          },
          "GaugeCfg" : {
              $type : "WidgetCfg",
              $description : "The base configuration for the Gauge widget",
              $properties : {
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "label" : {
                              $type : "common:BindingRef"
                          },
                          "currentValue" : {
                              $type : "common:BindingRef"
                          },
                          "maxValue" : {
                              $type : "common:BindingRef"
                          }
                      }
                  },
                  "label" : {
                      $type : "json:String",
                      $description : "The label to be displayed in the gauge",
                      $default : ""
                  },
                  "labelWidth" : {
                      $type : "json:Integer",
                      $description : "Width of the label container in px - if negative, the value is considered as unset.",
                      $default : -1
                  },
                  "labelAlign" : {
                      $type : "json:Enum",
                      $description : "Alignment of the label",
                      $enumValues : ["left", "right", "center"],
                      $default : "center"
                  },
                  "gaugeWidth" : {
                      $type : "json:Integer",
                      $description : "The width of the gauge",
                      $default : 150
                  },
                  "minValue" : {
                      $type : "json:Integer",
                      $description : "The min value of the gauge",
                      $default : 0
                  },
                  "maxValue" : {
                      $type : "json:Integer",
                      $description : "The max value of the gauge",
                      $default : 100
                  },
                  "currentValue" : {
                      $type : "json:Integer",
                      $description : "The current value of the gauge",
                      $default : 0
                  }
              }
          },
          "SplitterCfg" : {
              $type : "ResizableWidgetCfg",
              $description : "Base config for any Splitter widget",
              $properties : {
                  "macro1" : {
                      $type : "templates:MacroCfg",
                      $description : "Defines the macro for first panel.",
                      $mandatory : true
                  },
                  "macro2" : {
                      $type : "templates:MacroCfg",
                      $description : "Defines the macro for second panel.",
                      $mandatory : true
                  },
                  "size1" : {
                      $type : "json:Integer",
                      $description : "Defines the size of the first panel in pixels"
                  },
                  "size2" : {
                      $type : "json:Integer",
                      $description : "Defines the size of the second panel in pixels"
                  },
                  "height" : {
                      $type : "ResizableWidgetCfg.height",
                      $mandatory : true
                  },
                  "width" : {
                      $type : "ResizableWidgetCfg.width",
                      $mandatory : true
                  },
                  "adapt" : {
                      $type : "json:Enum",
                      $enumValues : ["size1", "size2", "both"],
                      $description : "Size adapted when the size of the splitter is different than the sum of size1 and size2",
                      $default : "both"
                  },
                  "orientation" : {
                      $type : "json:Enum",
                      $enumValues : ["horizontal", "vertical"],
                      $description : "Defines the position horizontal or vertical for the splitter ",
                      $default : "horizontal"
                  },
                  "border" : {
                      $type : "json:Boolean",
                      $description : "This determines whether a border should be shown around the splitter",
                      $default : true
                  },
                  "bind" : {
                      $type : "WidgetCfg.bind",
                      $properties : {
                          "size1" : {
                              $type : "common:BindingRef"
                          },
                          "size2" : {
                              $type : "common:BindingRef"
                          }
  
                      }
                  }
              }
          }
  
      }
  });
  