parameters:
  builderius_setting.setting.data_vars.type.values:
    - graphQLQuery: 'Query to DB (GraphQL)'
      integer: 'Static integer value'
      float: 'Static float value'
      string: 'Static string value'
      bool: 'Static boolean value'
      json: 'Static json value'
      expression: 'Expression'
  builderius_setting.setting.heading_tag.values: [ 'h1','h2','h3','h4','h5','h6' ]
  builderius_setting.setting.html_element_tag.values: [ 'div','section','main','nav','figure','address','aside','article','header','footer','details','picture', 'span', 'ul', 'ol', 'li', 'dl', 'label', 'button', 'video', 'audio', 'script' ]
  builderius_setting.setting.htmlattribute.forbidden.values: [ 'className','tabIndex','htmlFor','ref','dateTime', 'contentEditable', 'content-editable', 'data','onClick','onChange','onKeyPress','onKeyDown','onKeyUp','onLoad','onCopy','onCut','onPaste','onFocus','onBlur','onInput','onInvalid','onReset','onSubmit','onError','onTouchCancel','onTouchEnd','onTouchMove','onTouchStart','onclick','onchange','onkeypress','onkeydown','onkeyup','onload','oncopy','oncut','onpaste','onfocus','onblur','oninput','oninvalid','onreset','onsubmit','onerror','ontouchcancel','ontouchend','ontouchmove','ontouchstart' ]
  builderius_setting.setting.responsive_strategy.values: ['desktop-first', 'mobile-first']
  builderius_setting.setting.datetimeformat.grouped_parts:
    - 'Day': [ 'd','D','j','l','N','S','w','z' ]
      'Week': [ 'W' ]
      'Month': [ 'F','m','M','n','t' ]
      'Year': [ 'L','o','Y','y' ]
      'Time': [ 'a','A','B','g','G','h','H','i','s','u','v' ]
      'Timezone': [ 'e','I','O','P','T','Z' ]
      'Full_Date/Time': [ 'c','r','U' ]
      'Special_Symbols': [ ':',';',',','.','/','|','-','_',' ' ]

services:
  #----------------- Module settings ------------------------------------

  builderius_setting.setting.html_element_tag:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - displayLabel: true
        name: 'tag'
        label: 'HTML Tag'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingChangeHtmlTag'
        appliedToModules: [ 'HtmlElement', 'Collection', 'SubCollection' ]
        showIf: 'true'
    calls:
      - [ 'addDefaultValue', [ '@builderius_setting.setting.html_element_tag.default_value' ] ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.component_properties:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - displayLabel: true
        name: 'componentProperties'
        label: 'Component properties'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingComponentProperties'
        appliedToModules: [ 'Component' ]
        dynamicData: true
        dynamicDataTypes: [ 'scalar' ]
        schema:
          type: 'array'
        showIf: 'true'
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.content:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'content'
        label: 'Content'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingDynamicTextarea'
        appliedToModules: [ 'HtmlElement', 'Shortcode' ]
        dynamicData: true
        dynamicDataTypes: ['scalar']
        showIf: 'true'
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.content_svg:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'contentSvg'
        label: 'Content Editor (HTML)'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingHtmlEditorInline'
        appliedToModules: [ 'SvgCode' ]
        schema:
          type: 'string'
          validators:
            - type: svgOrDynamic
        dynamicData: true
        dynamicDataTypes: ['scalar']
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.content_html:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'contentHtml'
        label: 'Content Editor (HTML)'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingHtmlEditorInline'
        appliedToModules: [ 'HtmlCode', 'SvgCode' ]
        schema:
          type: 'string'
        dynamicData: true
        dynamicDataTypes: ['scalar']
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.is_link_wrapper:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'isLinkWrapper'
        label: 'Transform into link?'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 3
        component: 'SettingCheckbox'
        appliedToModules: [ 'HtmlElement' ]
        schema:
          type: 'boolean'
    calls:
      - [ 'addDefaultValue', [ '@builderius_setting.setting.islinkwrapper.default_value' ] ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.time_content:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'contentTime'
        label: 'Time tag content'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingDatetimePicker'
        appliedToModules: [ 'Time' ]
        schema:
          type: 'string'
          validators:
            - type: dateTimeIso8601OrDynamic
        dynamicData: true
        dynamicDataTypes: ['scalar']
    calls:
      - [ 'addDefaultValue', [ '@builderius_setting.setting.time_content.default_value' ] ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.datetime_format:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'dateTimeFormat'
        label: 'Date/Time format'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 7
        component: 'SettingTagify'
        options:
          values: '%builderius_setting.setting.datetimeformat.grouped_parts%'
          multiple: false
        appliedToModules: [ 'Time' ]
        schema:
          type: 'array'
          validators:
            - type: dateTimeFormat
        showIf: true
    calls:
      - [ 'addDefaultValue', [ '@builderius_setting.setting.datetimeformat.default_value' ] ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.interactive_mode:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'interactiveMode'
        label: 'Interactive Mode'
        contentType: 'modulesWithAssetsContextPart'
        paths: ['@builderius_setting.path.module.primary.content']
        sortOrder: 1
        component: 'SettingCheckbox'
        appliedToModules: ['Collection']
        schema:
          type: 'boolean'
    calls:
      - [ 'addDefaultValue', [ '@builderius_setting.setting.interactive_mode.default_value' ] ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.mediaUrl:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'mediaUrl'
        label: 'Media library'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 1
        component: 'SettingMedia'
        appliedToModules: [ 'HtmlElement' ]
        dynamicData: true
        dynamicDataTypes: ['scalar']
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.attrAlt:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'attrAlt'
        label: 'Alt text'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingDynamicInput'
        appliedToModules: [ 'HtmlElement' ]
        dynamicData: true
        dynamicDataTypes: [ 'scalar' ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.re_init_btn:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'reInitBtn'
        label: 'Debug/re-initialize the script'
        contentType: 'html'
        paths: ['@builderius_setting.path.module.primary.content']
        sortOrder: 2
        component: 'SettingReInitBtn'
        appliedToModules: ['Collection', 'Accordion', 'Cookieconsent']
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.shortcode_content:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'contentShortcode'
        label: 'Content (Shortcode)'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingTextareaAsync'
        appliedToModules: [ 'Shortcode' ]
        dynamicData: true
        dynamicDataTypes: ['scalar']
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.gblock_content:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'contentGutenbergBlock'
        label: 'Content (Block Code)'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingTextareaAsync'
        appliedToModules: [ 'GutenbergBlock' ]
        dynamicData: true
        dynamicDataTypes: ['scalar']
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.component_name:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'componentName'
        label: 'Component Name'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.content' ]
        sortOrder: 2
        component: 'SettingTextareaAsync'
        appliedToModules: [ 'Component' ]
        dynamicData: false
    tags:
      - { name: builderius_setting }

  #-----------------Category HTML attributes---------------------------------------

  builderius_setting.setting.tag_class:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'tagClass'
        label: 'Classes'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.html_attr' ]
        sortOrder: 1
        component: 'SettingTagClass'
        appliedToAllModules: true
        schema:
          type: 'array'
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.tag_id:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'tagId'
        label: 'ID'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.html_attr' ]
        sortOrder: 2
        component: 'SettingDynamicInput'
        appliedToAllModules: true
        dynamicData: true
        dynamicDataTypes: ['scalar']
        schema:
          type: 'string'
          validators:
            - type: tagId
              message: 'HTML id is not valid'
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.htmlattribute:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    public: true
    arguments:
      - name: 'htmlAttribute'
        label: 'HTML Attributes'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.html_attr' ]
        sortOrder: 3
        component: 'SettingHtmlAttribute'
        appliedToAllModules: true
        dynamicData: true
        dynamicDataTypes: [ 'scalar' ]
        options:
          forbiddenNames: '%builderius_setting.setting.htmlattribute.forbidden.values%'
        schema:
          type: 'array'
          of:
            type: 'object'
            shape:
              name:
                type: 'string'
                validators:
                  - type: notInArray
                    params:
                      - '%builderius_setting.setting.htmlattribute.forbidden.values%'
                    message: 'html tag attribute name must not be in {{haystack}}'
                  - type: attributeName
                    message: 'Only a-z, A-Z, 0-9 and "-" are allowed for html attribute name, and "-" must not be first or last symbol. Must be longer than 1 symbol.'
              value:
                type: 'mixed'
                validators:
                  - type: attributeValue
                    message: 'All letters, digits, single quote and special chars (EXCEPT double quotes) or valid serialized json are allowed'
    tags:
      - { name: builderius_setting }

  #-----------------Category Conditions -----------------------------------------

  builderius_setting.setting.visibility_condition:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    public: true
    arguments:
      - name: 'visibilityCondition'
        label: 'Rendering conditions'
        contentType: 'html'
        paths: [ '@builderius_setting.path.module.primary.conditions' ]
        sortOrder: 10
        component: 'SettingRenderingCondition'
        appliedToAllModules: true
        dynamicData: false
        dynamicDataTypes: []
        schema:
          type: 'object'
    calls:
      - [ 'addValueExpression', [ '@builderius_setting.setting.visibility_condition.value_expression.visibility_condition' ] ]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.visibility_condition.value_expression.visibility_condition:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSettingValueExpression
    arguments:
      - formatExpression: 'processVisibilityCondition(value)'

  #-----------------Category Data Variables--------------------------------------

  builderius_setting.setting.data_vars:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSetting
    arguments:
      - name: 'dataVars'
        label: 'Data Variables'
        contentType: 'dataVars'
        sortOrder: 1
        component: 'SettingDataVariables'
        options:
          variablesTypes: '%builderius_setting.setting.data_vars.type.values%'
        schema:
          type: 'array'
          validators:
            - type: unique
              params:
                - 'b1'
              message: 'Data variables names must be unique. Names "wp" and "props" are reserved.'
          of:
            type: 'object'
            validators:
              - type: dataVariableIntValue
              - type: dataVariableFloatValue
              - type: dataVariableBooleanValue
              - type: dataVariableJsonValue
            shape:
              a1:   # type
                type: 'string'
              b1:   # name
                type: 'string'
                validators:
                  - type: required
                    message: "name can't be blank"
                  - type: dataVariableName
              c1:   # value
                type: 'mixed'
              d1:   # value
                type: 'mixed'
    calls:
      - ['addValueExpression', ['@builderius_setting.setting.data_vars.value_expression.data_vars']]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.data_vars.value_expression.data_vars:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSettingValueExpression
    arguments:
      - formatExpression: 'foreach(value, (item) -> { {"name": item.b1, "type": item.a1, "value": (item.a1 === "graphQLQuery" ? {"query": item.c1, "variables": item.d1} : item.c1)} })'

  #-----------------Category CSS---------------------------------------

  builderius_setting.setting.css:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusModuleSetting
    arguments:
      - name: 'css'
        label: 'CSS'
        contentType: 'css'
        sortOrder: 2
        component: 'SettingDynamicTextareaJson'
        appliedToAllModules: true
        excludedFromModules: ['HtmlCode', 'Template', 'Shortcode', 'GutenbergBlock']
    calls:
      - [ 'addDefaultValue', [ '@builderius_setting.setting.collection.css.default_value', [ 'Collection' ] ] ]
      - [ 'addDefaultValue', [ '@builderius_setting.setting.accordion.css.default_value', [ 'Accordion' ] ] ]
    tags:
      - { name: builderius_setting }

  #----------------------Fonts-----------------------------------------

  builderius_setting.setting.fonts:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSetting
    arguments:
      - name: 'fonts'
        label: 'Fonts'
        contentType: 'fonts'
        sortOrder: 1
        component: 'SettingInput'
        schema:
          type: 'array'
          of:
            type: 'object'
            shape:
              type:
                type: 'string'
              content:
                type: 'string'
    tags:
      - { name: builderius_setting }

  #--------------- Category Media Queries -----------------

  builderius_setting.setting.responsive_strategy:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSetting
    arguments:
      - name: 'responsiveStrategy'
        label: 'Responsive Strategy'
        contentType: 'mediaQueries'
        appliedToAllTemplateTypes: true
        appliedToAllTechnologies: true
        sortOrder: 1
        component: 'SettingSelect'
        options:
          values: '%builderius_setting.setting.responsive_strategy.values%'
          multiple: false
        schema:
          type: 'string'
          validators:
            - type: inArray
              params:
                - '%builderius_setting.setting.responsive_strategy.values%'
    calls:
      - ['addDefaultValue', ['@builderius_setting.setting.responsive_strategy.default_value']]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.breakpoints:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSetting
    arguments:
      - name: 'breakpoints'
        label: 'Breakpoints'
        contentType: 'mediaQueries'
        sortOrder: 1
        component: 'SettingInput'
        schema:
          type: 'array'
          of:
            type: 'object'
            shape:
              name:
                type: 'string'
              label:
                type: 'string'
              width:
                type: 'number'
              width_builder:
                type: 'number'
              icon:
                type: 'string'
              deletable:
                type: 'boolean'
    calls:
      - ['addDefaultValue', ['@builderius_setting.setting.breakpoints.default_value']]
    tags:
      - { name: builderius_setting }

  builderius_setting.setting.componentTmplProperties:
    class: Builderius\Bundle\SettingBundle\Model\BuilderiusSetting
    arguments:
      - name: 'componentTmplProperties'
        label: 'Properties'
        contentType: 'componentTmplProperties'
        sortOrder: 1
        component: 'SettingInput'
        schema:
          type: 'array'
    tags:
      - { name: builderius_setting }
