Source: types/types.js

/**
 * #### Required module/group fields
 * @typedef {Object} COMMON_FIELDS
 * @property {string} name
 * @property {string} label
 * @property {string} type
 * @property {string} [tab]
 * @property {Array<COMMON_FIELDS>} [children]
 */

/**
 * #### CSS unit
 * @typedef {'px'|'pt'|'em'|'rem'|'%'|'ex'|'ch'|'vh'|'vmax'|'vmin'|'vw'} CSS_UNIT
 */

/**
 * #### Hidden subfields properties
 * @memberof Types
 * @typedef {Object} HIDDEN_SUBFIELDS
 * @property {boolean} [margin]
 * @property {boolean} [padding]
 * @property {boolean} [bold]
 * @property {boolean} [italic]
 * @property {boolean} [underline]
 * @property {boolean} [color]
 * @property {boolean} [size]
 */

/**
 * #### Advanced visibility criteria
 * @memberof Types
 * @typedef {Object} ADVANCED_VISIBILITY_CRITERIA
 * @property {string} [controlling_field_path] Path of the field that controls the display condition
 * @property {'NOT_EQUAL'|'EQUAL'|'EMPTY'|'NOT_EMPTY'|'MATCHES_REGEX'} operator
 * @property {string} [controlling_value_regex] The regular expression in the controlling field that needs to be present for the field to display.
 * @property {string} [property] Sets visibility based on a specific property (`src`, `name`)
 */

/**
 * #### Advanced visibility
 * @memberof Types
 * @typedef {Object} ADVANCED_VISIBILITY
 * @property {'AND'|'OR'} boolean_operator `OR` The boolean operator for the conditional criteria. Can be `AND` or `OR`
 * @property {Array<ADVANCED_VISIBILITY_CRITERIA>} [advanced_visibility.criteria] An array of visibility objects that defines the conditional criteria that needs to be met for the field to display.
 * @property {Array<ADVANCED_VISIBILITY>} [advanced_visibility.children]
 */

/**
 * #### Base field properties
 * @memberof Types
 * @typedef {Object} BASE_FIELDS
 * @property {'half_width'} [display_width] Side by side fields
 * @property {string} [help_text] Display help text
 * @property {?string} [inline_help_text] Display help text inline
 * @property {boolean} [required] Make the field required
 * @property {boolean} [locked] Hide the field from the user
 * @property {Object} [inherited_value] Inherited value options
 * @property {string} [inherited_value.default_value_path]
 * @property {Object} [inherited_value.property_value_paths]
 * @property {string} [inherited_value.property_value_paths.color]
 * @property {Object} [occurrence] Repeated fields options
 * @property {number} [occurrence.min] Minimum number of repeated fields
 * @property {?number} [occurrence.max] Maximum number of repeated fields
 * @property {string} [occurrence.sorting_label_field] Field to sort the repeated fields
 * @property {?number} [occurrence.default] Default number of repeated fields
 * @property {Object} [visibility] Display conditions
 * @property {?string} [visibility.controlling_field_path] Path of the field that controls the display condition
 * @property {?string} [visibility.controlling_value_regex] The regular expression in the controlling field that needs to be present for the field to display.
 * @property {'NOT_EQUAL'|'EQUAL'|'EMPTY'|'NOT_EMPTY'|'MATCHES_REGEX'|null} [visibility.operator]
 * @property {?string} [visibility.property] Sets visibility based on a specific property (`src`, `name`)
 * @property {HIDDEN_SUBFIELDS} [visibility.hidden_subfields] Hide subfields of a field. For example, you can hide the margin from spacing field and show only the padding. Ony works for Theme settings fields.
 * @property {'ADVANCED'} [visibility_rules]
 * @property {ADVANCED_VISIBILITY} [advanced_visibility] To include multiple criteria with multiple operators, as well as order of operations, you can use advanced_visibility.
 */

/**
 * #### Group field properties
 * @memberof Types
 * @typedef {Object} GROUP_FIELD
 * @property {boolean} [expanded] Show the group expanded
 * @property {Array<any>|Object} [default]
 */

// ========================
// General module fields
// ========================
/**
 * #### boolean field properties
 * @memberof Types
 * @typedef {Object} BOOLEAN_FIELD
 * @property {boolean} [default]
 * @property {'toggle'|'checkbox'} [display]
 */

/**
 * #### choice field properties
 * @memberof Types
 * @typedef {Object} CHOICE_FIELD
 * @property {Array<string[]>} choices
 * @property {string|number|Array<string|number>} [default]
 * @property {'radio'|'select'|'checkbox'} [display]
 * @property {boolean} [multiple]
 * @property {boolean} [reordering_enabled]
 * @property {string} [placeholder]
 * @property {string} [preset] https://developers.hubspot.com/beta-docs/reference/cms/fields/module-theme-fields#choice-button-presets
 */

/**
 * #### number field properties
 * @memberof Types
 * @typedef {Object} NUMBER_FIELD
 * @property {number|number[]|null} [default]
 * @property {string} [prefix]
 * @property {string} [suffix]
 * @property {number} [min]
 * @property {number} [max]
 * @property {number} [step]
 * @property {'text'|'slider'} [display]
 * @property {'ANY'|'INTEGER'} [format]
 * @property {string} [placeholder]
*/

/**
 * #### color field properties
 * @memberof Types
 * @typedef {Object} COLOR_FIELD
 * @property {boolean} [show_opacity]
 * @property {Object|Array<Object>} [default]
 * @property {string} [default.color]
 * @property {string} [default.css]
 * @property {string} [default.hex]
 * @property {number} [default.opacity]
 * @property {string} [default.rgb]
 * @property {string} [default.rgba]
 */

/**
 * #### icon field properties
 * @memberof Types
 * @typedef {Object} ICON_FIELD
 * @property {'fontawesome-5'|'fontawesome-5.0.10'|'fontawesome-5.14.0'|'fontawesome-6.4.2'} [set]
 * @property {Object} [default]
 * @property {string} [default.name]
 * @property {'SOLID'|'REGULAR'} [default.type]
 * @property {string} [default.unicode]
 */

/**
 * #### image field properties
 * @memberof Types
 * @typedef {Object} IMAGE_FIELD
 * @property {boolean} [resizable]
 * @property {boolean} [responsive]
 * @property {boolean} [show_loading]
 * @property {Object} [default]
 * @property {string} [default.src]
 * @property {string} [default.alt]
 * @property {number} [default.width]
 * @property {number} [default.height]
 * @property {number} [default.max_width]
 * @property {number} [default.max_height]
 * @property {'auto'|'auto_custom_max'|'auto_full_width'|'exact'} [default.size_type]
 * @property {'disabled'|'eager'|'lazy'} [default.loading]
 */

/**
 * #### FontVariants field properties
 * @memberof Types
 * @typedef {'100'|'100i'|'200'|'200i'|'300'|'300i'|'400'|'400i'|'500'|'500i'|'600'|'600i'|'700'|'700i'|'800'|'800i'|'900'|'900i'} FONT_VARIANTS_FIELD
 */

/**
 * @typedef {Object} TEXT_STYLES
 * @property {'underline'|'none'} [`text-decoration`]
 * @property {'italic'|'normal'} [`font-style`]
 * @property {'bold'|'normal'} [`font-weight`]
 */

/**
 * #### font field properties
 * @memberof Types
 * @typedef {Object} FONT_FIELD
 * @property {boolean} [load_external_fonts]
 * @property {Object} [default]
 * @property {string} default.font
 * @property {'DEFAULT'|'GOOGLE'|'CUSTOM'} [default.font_set]
 * @property {Array<FONT_VARIANTS_FIELD>} [default.google_font_variants]
 * @property {number} [default.size]
 * @property {CSS_UNIT} [default.size_unit]
 * @property {string} [default.color]
 * @property {TEXT_STYLES} [default.styles]
 * @property {string} [default.variant]
 * @property {string} [default.fallback]
 */

// ========================
// Content module fields
// ========================
/**
 * #### Text field properties
 * @memberof Types
 * @typedef {Object} TEXT_FIELD
 * @property {string} [default]
 * @property {string} [validation_regex] Regular expression to validate the field
 * @property {string} [validation_error_message] Error message to display when the field does not match the regular expression
 * @property {string} [placeholder] Placeholder text
 * @property {boolean} [allow_new_line] Allow new line
 * @property {boolean} [show_emoji_picker] Show emoji picker
 */

/**
 * #### URL types
 * @memberof Types
 * @typedef {'EXTERNAL' | 'CONTENT' | 'FILE' | 'EMAIL_ADDRESS' | 'BLOG' | 'CALL_TO_ACTION' | 'WHATSAPP_NUMBER' | 'PHONE_NUMBER' | 'PAYMENT'} URL_TYPES
 */

/**
 * #### link field properties
 * @memberof Types
 * @typedef {Object} LINK_FIELD
 * @property {string} [placeholder]
 * @property {boolean} [show_advanced_rel_options]
 * @property {Array<URL_TYPES>} [supported_types]
 * @property {Object} [default]
 * @property {Object} [default.url]
 * @property {URL_TYPES} [default.url.type]
 * @property {number} [default.url.content_id]
 * @property {string} [default.url.href]
 * @property {boolean} [default.open_in_new_tab]
 * @property {boolean} [default.no_follow]
 * @property {boolean} [default.sponsored]
 * @property {boolean} [default.user_generated_content]
 */

/**
 * #### RichTextFeatures field properties
 * @memberof Types
 * @typedef {'block'|'font_family'|'font_size'|'bold'|'italic'|'underline'|'text_color'|'background_color'|'alignment'|'bulleted_list'|'numbered_list'|'lineheight'|'outdent'|'indent'|'strikethrough'|'superscript'|'subscript'|'code_format'|'link'|'image'|'emoji'|'personalize'|'cta'|'embed'|'video'|'table'|'charmap'|'anchor'|'hr'|'nonbreaking_space'|'source_code'|'visual_blocks'|'colors'|'fonts'|'indents'|'lists'|'standard_emphasis'|'advanced_emphasis'} RICH_TEXT_FEATURES
 */

/**
 * #### richtext field properties
 * @memberof Types
 * @typedef {Object} RICHTEXT_FIELD
 * @property {string} [default]
 * @property {Array<RICH_TEXT_FEATURES>} [enabled_features]
 */

/**
 * #### url field properties
 * @memberof Types
 * @typedef {Object} URL_FIELD
 * @property {Array<URL_TYPES>} supportedTypes
 * @property {Object} [default]
 * @property {URL_TYPES} [default.type]
 * @property {string} [default.href]
 * @property {number} [default.content_id]
 * @property {Array<URL_TYPES>} [default.supported_types]
 */

/**
 * #### video field properties
 * @memberof Types
 * @typedef {Object} VIDEO_FIELD
 * @property {boolean} [resizable]
 * @property {boolean} [show_advanced_options]
 * @property {boolean} [show_preview]
 * @property {Object} [default]
 * @property {number} [default.player_id]
 * @property {number} [default.width]
 * @property {number} [default.height]
 * @property {number} [default.max_width]
 * @property {number} [default.max_height]
 * @property {'exact'|'auto'|'auto_custom_max'|'auto_full_width'} [default.size_type]
 * @property {string} [default.player_type]
 * @property {boolean} [default.loop_video]
 * @property {boolean} [default.mute_by_default]
 * @property {boolean} [default.autoplay]
 * @property {boolean} [default.hide_controls]
 * @property {any} [default.conversion_asset]
 */

/**
 * #### Date field properties
 * @memberof Types
 * @typedef {Object} DATE_FIELD
 * @property {number} [default]
 */

/**
 * #### DataAndTime field properties
 * @memberof Types
 * @typedef {Object} DATA_AND_TIME_FIELD
 * @property {number} [default]
 * @property {number} [step]
 */

/**
 * #### Embeded field properties
 * @memberof Types
 * @typedef {Object} EMBEDED_FIELD
  * @property {Array<'oembed'|'html'|'media_bridge'>} [supported_source_types]
  * @property {Array<'photo'|'video'|'link'|'rich'>} [supported_oembed_types]
  * @property {Array<number>} [supported_media_bridge_providers]
  * @property {boolean} [resizable]
  * @property {boolean} [show_preview]
  * @property {Object} [default]
  * @property {'oembed'|'html'|'media_bridge'} [default.source_type]
  * @property {string} [default.oembed_string]
  * @property {Object} [default.oembed_response]
  * @property {'auto'|'auto_custom_max'|'auto_full_width'|'exact'} [default.size_type]
  * @property {number} [default.width]
  * @property {number} [default.height]
  * @property {number} [default.max_width]
  * @property {number} [default.max_height]
  * @property {string} [default.embed_type]
  * @property {Object} [default.media_bridge_object]
 */

/**
 * #### Simple menu field properties
 * @memberof Types
 * @typedef {Object} SIMPLE_MENU_FIELD
 * @property {Array<{}>} [default]
 */

/**
 * #### Blog field properties
 * @memberof Types
 * @typedef {Object} BLOG_FIELD
 * @property {string} [placeholder]
 * @property {number|Array<number>} [default]
 */

/**
 * #### CRMobject field properties
 * @memberof Types
 * @typedef {Object} CRM_OBJECT_FIELD
 * @property {'COMPANY'|'CONTACT'|'TICKET'|'QUOTE'|'PRODUCT'|'MARKETING EVENT'|'DEAL'} object_type
 * @property {Array<string>} [properties_to_fetch]
 * @property {string} [displayFormat]
 * @property {Array<string>} [display_properties]
 * @property {string} [placeholder]
 * @property {Object} [default]
 * @property {number} [default.id]
*/

/**
 * #### CRMobjectProperty field properties
 * @memberof Types
 * @typedef {Object} CRM_OBJECT_PROPERTY_FIELD
 * @property {'COMPANY'|'CONTACT'|'TICKET'|'QUOTE'|'PRODUCT'|'MARKETING EVENT'|'DEAL'} object_type
 * @property {string} [placeholder]
 * @property {Object} [default]
 * @property {string} [default.property]
 */

/**
 * #### EmailAddress field properties
 * @memberof Types
 * @typedef {Object} EMAIL_ADDRESS_FIELD
 * @property {Array<string>} [default]
 * @property {boolean} [allow_custom_email_addresses]
 */

/**
 * #### File field properties
 * @memberof Types
 * @typedef {Object} FILE_FIELD
 * @property {'file'|'image'|'video'|'document'|'audio'} picker
 * @property {string} [default]
 */

/**
 * #### Form field properties
 * @memberof Types
 * @typedef {Object} FORM_FIELD
 * @property {boolean} [allow_inline_form_editing]
 * @property {boolean} [disable_inline_form_editing]
 * @property {Object} [default]
 * @property {string} [default.form_id]
 * @property {'HUBSPOT'|'TICKET_FORM'} [default.form_type]
 * @property {'inline'|'redirect'} [default.response_type]
 * @property {string} [default.message]
 * @property {number} [default.redirect_id]
 * @property {string} [default.redirect_url]
 * @property {Array<number>} [default.workflow_id]
 */

/**
 * #### HubDbRow field properties
 * @memberof Types
 * @typedef {Object} HUBDB_ROW_FIELD
 * @property {string|number} table_name_or_id
 * @property {Array<string>} [columns_to_fetch]
 * @property {string} [display_format]
 * @property {Array<string>} [display_columns]
 * @property {string} [placeholder]
 * @property {Object} [default]
 * @property {number} [default.id]
 */

/**
 * #### HubDbTable field properties
 * @memberof Types
 * @typedef {Object} HUBDB_TABLE_FIELD
 * @property {string} [placeholder]
 * @property {string|number} [default]
 */

/**
 * #### Logo field properties
 * @memberof Types
 * @typedef {Object} LOGO_FIELD
 * @property {Object} [default]
 * @property {string} [default.src]
 * @property {string} [default.alt]
 * @property {number} [default.width]
 * @property {number} [default.height]
 * @property {boolean} [default.override_inherited_src]
 * @property {string} [default.loading]
 * @property {boolean} [default.suppress_company_name]
 * @property {boolean} show_loading
 */

/**
 * #### Meeting field properties
 * @memberof Types
 * @typedef {Object} MEETING_FIELD
 * @property {boolean} [embeddable]
 * @property {string} [placeholder]
 * @property {string} [default]
 */

/**
 * #### Menu field properties
 * @memberof Types
 * @typedef {Object} MENU_FIELD
 * @property {string} [placeholder]
 * @property {number|string} [default]
 */

/**
 * #### Page field properties
 * @memberof Types
 * @typedef {Object} PAGE_FIELD
 * @property {string} [placeholder]
 * @property {number|number[]} [default]
 */

/**
 * #### Payment field properties
 * @memberof Types
 * @typedef {Object} PAYMENT_FIELD
 * @property {Object} [default]
 * @property {number} [default.id]
 */

/**
 * #### podcast field properties
 * @memberof Types
 * @typedef {Object} PODCAST_FIELD
 * @property {Object} [default]
 * @property {number} [default.episode_id]
 * @property {number} [default.show_id]
 */

/**
 * #### Product field properties
 * @memberof Types
 * @typedef {Object} PRODUCT_FIELD
 */

/**
 * #### Tag field properties
 * @memberof Types
 * @typedef {Object} TAG_FIELD
 * @property {'SLUG'|'NAME'|'ID'|'ALL'} tagValue
 * @property {string|number|{slug: string, id: string, name: string}} [default]
 */

/**
 * #### HUBL field properties
 * @memberof Types
 * @typedef {Object} HUBL_FIELD
 * @property {string} [default]
 */

/**
 * #### HTML field properties
 * @memberof Types
 * @typedef {Object} HTML_FIELD
 * @property {string} [default]
 */

/**
 * #### cta field properties
 * @memberof Types
 * @typedef {Object} CTA_FIELD
 * @property {string} [default]
 */

/**
 * #### Audio field properties
 * @memberof Types
 * @typedef {Object} AUDIO_FIELD
 * @property {Object} [default]
 * @property {number} [default.file_id]
 * @property {number} [default.file_duration]
 * @property {string} [default.file_extension]
 * @property {string} [default.file_url]
 * @property {string} [default.title]
 */

// ========================
// Style module fields
// ========================
/**
 * #### alignment field properties
 * @memberof Types
 * @typedef {Object} ALIGNMENT_FIELD
 * @property {'HORIZONTAL'|'VERTICAL'|'BOTH'} [alignment_direction]
 * @property {Object} [default]
 * @property {'LEFT'|'CENTER'|'RIGHT'} [default.horizontal_align]
 * @property {'TOP'|'MIDDLE'|'BOTTOM'} [default.vertical_align]
 */

/**
 * #### SpacingValueType field properties
 * @memberof Types
 * @typedef {Object} SPACING_VALUE_TYPE
 * @property {number} value
 * @property {CSS_UNIT} units
 */

/**
 * #### SpacingLimitType field properties
 * @memberof Types
 * @typedef {Object} SPACING_LIMIT_TYPE
 * @property {number} min
 * @property {number} max
 * @property {Array<CSS_UNIT>} units
 */

/**
 * #### spacing field properties
 * @memberof Types
 * @typedef {Object} SPACING_FIELD
 * @property {Object} [limits]
 * @property {Object} [limits.padding]
 * @property {SPACING_LIMIT_TYPE} [limits.padding.top]
 * @property {SPACING_LIMIT_TYPE} [limits.padding.right]
 * @property {SPACING_LIMIT_TYPE} [limits.padding.bottom]
 * @property {SPACING_LIMIT_TYPE} [limits.padding.left]
 * @property {Object} [limits.margin]
 * @property {SPACING_LIMIT_TYPE} [limits.margin.top]
 * @property {SPACING_LIMIT_TYPE} [limits.margin.right]
 * @property {SPACING_LIMIT_TYPE} [limits.margin.bottom]
 * @property {SPACING_LIMIT_TYPE} [limits.margin.left]
 * @property {Object} [default]
 * @property {Object} [default.padding]
 * @property {SPACING_LIMIT_TYPE} [default.padding.top]
 * @property {SPACING_LIMIT_TYPE} [default.padding.right]
 * @property {SPACING_LIMIT_TYPE} [default.padding.bottom]
 * @property {SPACING_LIMIT_TYPE} [default.padding.left]
 * @property {Object} [default.margin]
 * @property {SPACING_LIMIT_TYPE} [default.margin.top]
 * @property {SPACING_LIMIT_TYPE} [default.margin.right]
 * @property {SPACING_LIMIT_TYPE} [default.margin.bottom]
 * @property {SPACING_LIMIT_TYPE} [default.margin.left]
 */

/**
 * #### GradientColorType field properties
 * @memberof Types
 * @typedef {Object} GRADIENT_COLOR_TYPE
 * @property {Object} color
 * @property {string} color.r
 * @property {string} color.g
 * @property {string} color.b
 * @property {number} color.a
 */

/**
 * #### gradient field properties
 * @memberof Types
 * @typedef {Object} GRADIENT_FIELD
 * @property {Object} [default]
 * @property {Object} [default.side_or_corner]
 * @property {'TOP'|'BOTTOM'} [default.side_or_corner.verticalSide]
 * @property {'LEFT'|'RIGHT'} [default.side_or_corner.horizontalSide]
 * @property {Array<GRADIENT_COLOR_TYPE>} [default.colors]
 */

/**
 * #### backgroundimage field properties
 * @memberof Types
 * @typedef {Object} BACKGROUND_IMAGE_FIELD
 * @property {Object} [default]
 * @property {string} [default.src]
 * @property {'TOP_LEFT'|'TOP_CENTER'|'TOP_RIGHT'|'MIDDLE_LEFT'|'MIDDLE_CENTER'|'MIDDLE_RIGHT'|'BOTTOM_LEFT'|'BOTTOM_CENTER'|'BOTTOM_RIGHT'} [default.background_position]
 * @property {'COVER'|'CONTAIN'|'AUTO'} [default.background_size]
 */

/**
 * #### border field properties
 * @memberof Types
 * @typedef {Object} BORDER_SIDE_TYPE
 * @property {Object} [width]
 * @property {number} width.value
 * @property {CSS_UNIT} width.units
 * @property {number} [opacity]
 * @property {'none'|'solid'|'dashed'|'double'|'groove'|'ridge'|'inset'|'outset'} [style]
 * @property {string} [color]
 */

/**
 * #### border field properties
 * @memberof Types
 * @typedef {Object} BORDER_FIELD
 * @property {boolean} [allow_custom_border_sides]
 * @property {Object} [default]
 * @property {Object} [default.border_radius]
 * @property {number} default.border_radius.value
 * @property {CSS_UNIT} default.border_radius.units
 * @property {BORDER_SIDE_TYPE} [default.top]
 * @property {BORDER_SIDE_TYPE} [default.right]
 * @property {BORDER_SIDE_TYPE} [default.bottom]
 * @property {BORDER_SIDE_TYPE} [default.left]
 */

/**
 * #### textalignment field properties
 * @memberof Types
 * @typedef {Object} TEXT_ALIGNMENT_FIELD
 * @property {Object} [default]
 * @property {'LEFT'|'CENTER'|'RIGHT'|'JUSTIFY'} [default.text_align]
 */

/**
 * #### textalignment field properties
 * @memberof Types
 * @typedef {Array<COMMON_FIELDS|COMMON_FIELDS[]|COMMON_FIELDS[][]|Array<COMMON_FIELDS|COMMON_FIELDS[]>>} CHILDRENS
 */

Table of contents