{"title":"JSON schema for Blockstudio","$schema":"http://json-schema.org/draft-07/schema#","definitions":{"Attribute":{"type":"object","required":["type"],"properties":{"id":{"type":"string","description":"A unique identifier for the field, which will be used get the value inside block templates. Must be unique within the current context."},"key":{"type":"string","description":"Another identifier that can be used to uniquely identify fields across different contexts. (inside repeaters etc.)"},"type":{"type":"string","anyOf":[{"enum":["attributes","block","checkbox","classes","code","color","date","datetime","files","gradient","html-tag","icon","link","message","number","radio","range","select","tabs","text","textarea","toggle","repeater","richtext","unit","wysiwyg"]},{"pattern":"^custom/.+$","description":"Custom field reference in format 'custom/{name}'."}]},"label":{"type":"string","description":"The label for the field."},"description":{"type":"string","description":"The description for the field. Will be displayed underneath the field."},"help":{"type":"string","description":"The help text for the field. Will be displayed in a tooltip next to the label."},"hidden":{"type":"boolean","description":"Whether to hide the field UI in the editor. This is handy when using the variations API."},"storage":{"type":"object","description":"Configure where the field value should be stored.","properties":{"type":{"type":["string","array"],"description":"Storage location(s). Can be a single type or array of types.","enum":["block","postMeta","option"]},"postMetaKey":{"type":"string","description":"Custom meta key for post meta storage. Defaults to {block_name}_{field_id}."},"optionKey":{"type":"string","description":"Custom option key for options storage. Defaults to {block_name}_{field_id}."}}},"switch":{"type":"boolean","description":"Display a toggle that can disable the field. Shows an eye icon in the field label. Defaults to false.","default":false},"idStructure":{"type":"string","description":"ID pattern for expanded custom fields. Use {id} as placeholder for the original field ID.","default":"{id}","example":"hero_{id}"},"overrides":{"type":"object","description":"Per-field property overrides for custom fields. Keys are original field IDs from the field definition.","additionalProperties":{"type":"object"}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}}},"anyOf":[{"example":"attributes","description":"Renders data attribute inputs.","properties":{"type":{"const":"attributes"},"default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"link":{"type":"boolean","description":"Enables link selection from dropdown."},"media":{"type":"boolean","description":"Enables media selection from dropdown."}}},{"description":"References another Blockstudio block, expanding its fields inline. In templates, the value returns the rendered block output.","properties":{"type":{"const":"block"},"block":{"type":"string","description":"The name of the block to reference (e.g., \"mytheme/card\")."},"returnFormat":{"type":"string","description":"How the value should be returned in templates.","enum":["rendered","data","both"],"default":"rendered"}}},{"example":"option-multiple","description":"Renders a set of checkbox inputs.","properties":{"type":{"const":"checkbox"},"default":{"type":["array","string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","string","number"],"description":"Fallback value that that will display when field value is empty."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}}},{"example":"single","description":"Renders a field to select CSS classes.","properties":{"type":{"const":"classes"},"default":{"type":["string"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["string"],"description":"Fallback value that that will display when field value is empty."},"tailwind":{"type":"boolean","description":"Whether to enable Tailwind classes for this input field."}}},{"example":"single","description":"Renders a code editor.","properties":{"type":{"const":"code"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"autoCompletion":{"type":"boolean","description":"Whether to enable autocompletion or not."},"foldGutter":{"type":"boolean","description":"Whether to show the fold gutter or not."},"height":{"type":"string","description":"The height of the editor."},"language":{"type":"string","description":"The language to use for syntax highlighting.","enum":["css","html","javascript","json","scss","twig"]},"lineNumbers":{"type":"boolean","description":"Whether to display line numbers or not."},"maxHeight":{"type":"string","description":"The maximum height of the editor."},"minHeight":{"type":"string","description":"The minimum height of the editor."},"popout":{"type":"boolean","description":"Whether to show a button that opens the editor in a popup window."}}},{"example":"option","description":"Renders a color palette and color picker.","properties":{"type":{"const":"color"},"options":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}},"description":"Options to choose from."}},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["function","custom"]},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"}}},"clearable":{"type":"boolean","description":"Whether the palette should have a clearing button or not."},"disableCustomColors":{"type":"boolean","description":"Whether to allow custom color or not."}}},{"example":"single","description":"Renders a date picker.","properties":{"type":{"const":"date"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"startOfWeek":{"type":"number","description":"The day that the week should start on. 0 for Sunday, 1 for Monday, etc."}}},{"example":"single","description":"Renders a date and time picker.","properties":{"type":{"const":"datetime"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"is12Hour":{"type":"boolean","description":"Whether we use a 12-hour clock. With a 12-hour clock, an AM/PM widget is displayed and the time format is assumed to be MM-DD-YYYY (as opposed to the default format DD-MM-YYYY)."}}},{"example":"files","description":"Renders a button to the media library. Picked items can be reordered inline.","properties":{"type":{"const":"files"},"default":{"type":["array","object","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","object","number"],"description":"Fallback value that that will display when field value is empty."},"addToGallery":{"type":"boolean","description":"If true, the gallery media modal opens directly in the media library where the user can add additional images. If false the gallery media modal opens in the edit mode where the user can edit existing images, by reordering them, remove them, or change their attributes. Only applies if gallery === true."},"allowedTypes":{"type":["array","string"],"description":"Array with the types of the media to upload/select from the media library. Each type is a string that can contain the general mime type e.g: 'image', 'audio', 'text', or the complete mime type e.g: 'audio/mpeg', 'image/gif'. If allowedTypes is unset all mime types should be allowed."},"gallery":{"type":"boolean","description":"If true, the component will initiate all the states required to represent a gallery. By default, the media modal opens in the gallery edit frame, but that can be changed using the addToGalleryflag."},"max":{"type":"number","description":"Maximum amount of files that can be added."},"min":{"type":"number","description":"Minimum amount of files that can be added."},"multiple":{"type":"boolean","description":"Whether to allow multiple selections or not."},"size":{"type":"boolean","description":"Adds a media size dropdown to the field."},"textMediaButton":{"type":"string","description":"Media button text."},"title":{"type":"string","description":"Title displayed in the media modal."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["object","id","url"],"default":"object"},"returnSize":{"type":"string","description":"The media size to return when using the URL return format."}}},{"example":"option","description":"Renders a gradient palette and gradient picker","properties":{"type":{"const":"gradient"},"options":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}},"description":"Options to choose from."}},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["function","custom"]},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"}}},"clearable":{"type":"boolean","description":"Whether the palette should have a clearing button or not."},"disableCustomGradients":{"type":"boolean","description":"Whether to allow custom color or not."}}},{"description":"Renders an HTML tag selector. Useful for choosing heading levels or semantic elements.","properties":{"type":{"const":"html-tag"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"tags":{"type":["string","array"],"description":"Which tags to include. Use a preset string or an array of tag names.","enum":["heading","text","structural","all"]},"exclude":{"type":"array","items":{"type":"string"},"description":"Tags to exclude from the preset. Only applies when using a preset string for tags."}}},{"example":"icon","description":"Renders an SVG icon from an icon set.","properties":{"default":{"type":"object","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"object","description":"Fallback value that that will display when field value is empty."},"type":{"const":"icon"},"sets":{"type":["array","string"],"description":"Which icon set to include. Leave empty to include all."},"subSets":{"type":["array","string"],"description":"Which sub icon set to include. Leave empty to include all."},"returnFormat":{"type":"string","description":"The format to return the icon in.","enum":["object","element"]}}},{"example":"link","description":"Renders a link control to choose internal or external links.","properties":{"type":{"const":"link"},"default":{"type":"object","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"object","description":"Fallback value that that will display when field value is empty."},"hasRichPreviews":{"type":"boolean","description":"Whether rich previews should be shown when adding an URL."},"noDirectEntry":{"type":"boolean","description":"Whether to allow turning a URL-like search query directly into a link."},"noURLSuggestion":{"type":"boolean","description":"Whether to add a fallback suggestion which treats the search query as a URL."},"opensInNewTab":{"type":"boolean","description":"Adds a toggle control to the link modal."},"showSuggestions":{"type":"boolean","description":"Whether to present suggestions when typing the URL."},"textButton":{"type":"string","description":"Custom text that should be displayed inside the link button."},"withCreateSuggestion":{"type":"boolean","description":"Whether to allow creation of link value from suggestion."}}},{"description":"Renders a message with custom content.","properties":{"type":{"const":"message"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"value":{"type":"string","description":"The message to display. Block and attribute data is available in bracket syntax, e.g.: `{block.title}` or `{attributes.text}`"}}},{"example":"single","description":"Renders a number input.","properties":{"type":{"const":"number"},"default":{"type":"number","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"number","description":"Fallback value that that will display when field value is empty."},"dragDirection":{"type":"string","description":"Determines the drag axis to increment/decrement the value.","enum":["n","e","s","w"]},"dragThreshold":{"type":"number","description":"If isDragEnabled is true, this controls the amount of px to have been dragged before the value changes."},"hideHTMLArrows":{"type":"boolean","description":"If true, the default input HTML arrows will be hidden."},"isShiftStepEnabled":{"type":"boolean","description":"If true, enables mouse drag gesture to increment/decrement the number value. Holding SHIFT while dragging will increase the value by the shiftStep."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"required":{"type":"boolean","description":"If true enforces a valid number within the control’s min/max range. If false allows an empty string as a valid value."},"shiftStep":{"type":"number","description":"Amount to increment by when the SHIFT key is held down. This shift value is a multiplier to the step value. For example, if the step value is 5, and shiftStep is 10, each jump would increment/decrement by 50."},"step":{"type":"number","description":"Amount by which the value is changed when incrementing/decrementing. It is also a factor in validation as value must be a multiple of step (offset by min, if specified) to be valid. Accepts the special string value any that voids the validation constraint and causes stepping actions to increment/decrement by 1."}}},{"example":"option","description":"Renders a set of radio inputs.","properties":{"type":{"const":"radio"},"default":{"type":["string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["string","number"],"description":"Fallback value that that will display when field value is empty."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}}},{"example":"single","description":"Renders a range input to set a numerical value between two points.","properties":{"type":{"const":"range"},"default":{"type":"number","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"number","description":"Fallback value that that will display when field value is empty."},"allowReset":{"type":"boolean","description":"If this property is true, a button to reset the slider is rendered."},"initialPosition":{"type":"number","description":"The slider starting position, used when no value is passed. The initialPosition will be clamped between the provided min and max prop values."},"isShiftStepEnabled":{"type":"boolean","description":"If true, enables mouse drag gesture to increment/decrement the number value. Holding SHIFT while dragging will increase the value by the shiftStep."},"marks":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"}}},"description":"Renders a visual representation of step ticks. Custom mark indicators can be provided by an Array."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"railColor":{"type":"string","description":"CSS color string to customize the rail element’s background."},"resetFallbackValue":{"type":"number","description":"The value to revert to if the Reset button is clicked (enabled by allowReset)"},"separatorType":{"type":"string","description":"Define if separator line under/above control row should be disabled or full width. By default it is placed below excluding underline the control icon.","enum":["none","fullWidth","topFullWidth"]},"shiftStep":{"type":"number","description":"Amount to increment by when the SHIFT key is held down. This shift value is a multiplier to the step value. For example, if the step value is 5, and shiftStep is 10, each jump would increment/decrement by 50."},"showTooltip":{"type":"boolean","description":"Forcing the Tooltip UI to show or hide. This is overridden to false when step is set to the special string value any."},"step":{"type":"number","description":"Amount by which the value is changed when incrementing/decrementing. It is also a factor in validation as value must be a multiple of step (offset by min, if specified) to be valid. Accepts the special string value any that voids the validation constraint and causes stepping actions to increment/decrement by 1."},"trackColor":{"type":"string","description":"CSS color string to customize the track element’s background."},"withInputField":{"type":"boolean","description":"Determines if the input number field will render next to the RangeControl. This is overridden to false when step is set to the special string value any."}}},{"example":["option","option-multiple"],"description":"Renders a select input with support for single or multiple selections.","properties":{"type":{"const":"select"},"default":{"type":["array","string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","string","number"],"description":"Fallback value that that will display when field value is empty."},"multiple":{"type":"boolean","description":"If true, multiple options can be selected. \"stylisedUi\" will be automatically enabled."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"fetch":{"type":"boolean","description":"If true, search value will be used to search through data. Only works with \"query\" type."},"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}},"stylisedUi":{"type":"boolean","description":"Renders a stylised version of a select with the ability to search through items."},"allowNull":{"type":["boolean","string"],"description":"Allows the user to select an empty choice. If true, the label will be empty, otherwise the option will render the specified string."},"allowReset":{"type":"boolean","description":"If this property is true, a button to reset the select is rendered."}}},{"description":"Renders a tabbed interface for grouping fields.","properties":{"type":{"const":"tabs"},"tabs":{"type":"array","description":"The tabs to display.","items":{"type":"object","required":["title"],"properties":{"title":{"type":"string","description":"The title of the tab."},"attributes":{"type":"array","description":"Custom attributes that will be applied to the block.","items":{"$ref":"#/definitions/Attribute"}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}},"blockEditor":{"type":"object","description":"Block specific options for rendering inside the Block Editor.","properties":{"disableLoading":{"type":"boolean","description":"Whether the block should should load inside the Block Editor or show a placeholder."}}},"editor":{"type":"object","description":"Block specific options for the editor.","properties":{"assets":{"type":"array","description":"List of WordPress script or style handles that should be added to the preview.","items":{"type":"string"}}}},"interactivity":{"oneOf":[{"type":"boolean"},{"type":"object","properties":{"enqueue":{"type":"boolean","description":"Enqueue the Interactivity API."}}}],"description":"Enable the WordPress Interactivity API for this block."},"icon":{"type":"string","description":"Custom SVG icon to be displayed inside the editor."},"innerBlocks":{"type":"string","description":"HTML content that will be rendered as the inner blocks."},"component":{"type":"boolean","description":"Whether this block is a component. Components go through the full Blockstudio pipeline but do not appear in the editor inserter. They can only be rendered via block tags or bs_render_block()."},"override":{"type":"boolean","description":"Whether this block should overwrite another block."},"refreshOn":{"type":"array","description":"When the block should refresh. This is useful when the block relies on external data like custom fields.","items":{"type":"string"}},"transforms":{"type":"object","description":"Custom block transforms.","properties":{"from":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["block","enter","prefix"]},"blocks":{"type":"array","items":{"type":"string"}},"regExp":{"type":"string"},"prefix":{"type":"string"}},"required":["type"],"additionalProperties":false}}},"required":["from"],"additionalProperties":false}}}}}},{"example":"single","description":"Renders a single line text input.","properties":{"type":{"const":"text"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."}}},{"example":"single","description":"Renders a textarea input.","properties":{"type":{"const":"textarea"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"rows":{"type":"number","description":"The number of rows the textarea should contain."}}},{"example":"toggle","description":"Renders a true/false toggle.","properties":{"type":{"const":"toggle"},"default":{"type":"boolean","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"boolean","description":"Fallback value that that will display when field value is empty."}}},{"example":"single","description":"Attribute field for RichText fields.","properties":{"type":{"const":"richtext"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."}}},{"example":"single","description":"Renders a number input with a unit dropdown.","properties":{"type":{"const":"unit"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"disableUnits":{"type":"boolean","description":"If true, the unit select field is hidden."},"isPressEnterToChange":{"type":"boolean","description":"If true, the ENTER key press is required in order to trigger an onChange. If enabled, a change is also triggered when tabbing away."},"isResetValueOnUnitChange":{"type":"boolean","description":"If true, and the selected unit provides a default value, this value is set when changing units."},"isUnitSelectTabbable":{"type":"boolean","description":"Determines if the unit select field is tabbable."},"units":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"default":{"type":"number"},"label":{"type":"string"},"value":{"type":"string"}}}}}},{"example":"single","description":"Renders a WYSIWYG editor.","properties":{"type":{"const":"wysiwyg"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"toolbar":{"type":"object","description":"The toolbar configuration for the editor.","properties":{"tags":{"type":"object","description":"Which HTML tags are allowed.","properties":{"headings":{"type":"array","description":"Which HTML headings levels are allowed."}}},"formats":{"type":"object","description":"Which text formats are allowed.","properties":{"bold":{"type":"boolean","description":"Whether bold text format is allowed."},"italic":{"type":"boolean","description":"Whether italic text format is allowed."},"orderedList":{"type":"boolean","description":"Whether ordered list text format is allowed."},"strikethrough":{"type":"boolean","description":"Whether strikethrough text format is allowed."},"underline":{"type":"boolean","description":"Whether underline text format is allowed."},"unorderedList":{"type":"boolean","description":"Whether unordered list text format is allowed."},"textAlign":{"type":"object","description":"Which text alignment formats are allowed.","properties":{"alignments":{"type":"array","description":"Which text alignments are allowed.","items":{"type":"string","enum":["left","center","right","justify"]}}}}}}}}}},{"properties":{"type":{"pattern":"^custom/.+$","description":"References a reusable custom field definition."}},"required":["type"]}]},"Block":{"type":"object","properties":{"name":{"type":"string"},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}},"attributes":{"type":"object","additionalProperties":true}},"required":["name"]}},"type":"object","properties":{"$schema":{"type":"string"},"apiVersion":{"description":"The version of the Block API used by the block. If the block is registered with API version 2 or lower, the post editor may work as a non-iframe editor. Since all editors are planned to work as iframes in the future, it is recommended to set the `apiVersion` field to 3 and test the block inside the iframe editor.\n\nSee the API versions documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-api-versions/block-migration-for-iframe-editor-compatibility/ for more details.","type":"integer","const":3},"name":{"description":"The name for a block is a unique string that identifies a block. Names have to be structured as `namespace/block-name`, where namespace is the name of your plugin or theme.","type":"string","pattern":"^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$"},"__experimental":{"description":"The name of the experiment this block is a part of, or boolean true if there is no specific experiment name.","anyOf":[{"type":"string"},{"type":"boolean"}]},"title":{"description":"This is the display title for your block, which can be translated with our translation functions. The block inserter will show this name.","type":"string"},"category":{"description":"Blocks are grouped into categories to help users browse and discover them.\n Core provided categories are: text, media, design, widgets, theme, embed\n\nPlugins and Themes can also register custom block categories.\n\nhttps://developer.wordpress.org/block-editor/reference-guides/filters/block-filters/#managing-block-categories","anyOf":[{"type":"string"},{"type":"string","enum":["text","media","design","widgets","theme","embed"]}]},"parent":{"description":"Setting parent lets a block require that it is only available when nested within the specified blocks. For example, you might want to allow an ‘Add to Cart’ block to only be available within a ‘Product’ block.","type":"array","items":{"type":"string"}},"ancestor":{"description":"The `ancestor` property makes a block available inside the specified block types at any position of the ancestor block subtree. That allows, for example, to place a ‘Comment Content’ block inside a ‘Column’ block, as long as ‘Column’ is somewhere within a ‘Comment Template’ block.","type":"array","items":{"type":"string"}},"allowedBlocks":{"description":"The `allowedBlocks` property specifies that only the listed block types can be the children of this block. For example, a ‘List’ block allows only ‘List Item’ blocks as direct children.","type":"array","items":{"type":"string"}},"icon":{"description":"An icon property should be specified to make it easier to identify a block. These can be any of WordPress’ Dashicons (slug serving also as a fallback in non-js contexts).","type":"string"},"description":{"description":"This is a short description for your block, which can be translated with our translation functions. This will be shown in the block inspector.","type":"string"},"keywords":{"description":"Sometimes a block could have aliases that help users discover it while searching. For example, an image block could also want to be discovered by photo. You can do so by providing an array of unlimited terms (which are translated).","type":"array","items":{"type":"string"}},"version":{"description":"The current version number of the block, such as 1.0 or 1.0.3. It’s similar to how plugins are versioned. This field might be used with block assets to control cache invalidation, and when the block author omits it, then the installed version of WordPress is used instead.","type":"string"},"textdomain":{"description":"The gettext text domain of the plugin/block. More information can be found in the Text Domain section of the How to Internationalize your Plugin page.\n\nhttps://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/","type":"string"},"attributes":{"description":"Attributes provide the structured data needs of a block. They can exist in different forms when they are serialized, but they are declared together under a common interface.\n\nSee the attributes documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/ for more details.","type":"object","patternProperties":{"[a-zA-Z]":{"type":"object","properties":{"type":{"description":"The type indicates the type of data that is stored by the attribute. It does not indicate where the data is stored, which is defined by the source field.\n\nA type is required, unless an enum is provided. A type can be used with an enum.\n\nNote that the validity of an object is determined by your source. For an example, see the query details below.","oneOf":[{"type":"string","enum":["null","boolean","object","array","string","rich-text","integer","number"]},{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["null","boolean","object","array","string","integer","number"]}}]},"enum":{"description":"An attribute can be defined as one of a fixed set of values. This is specified by an enum, which contains an array of allowed values:","type":"array","items":{"oneOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}]}},"source":{"description":"Attribute sources are used to define how the attribute values are extracted from saved post content. They provide a mechanism to map from the saved markup to a JavaScript representation of a block.","type":"string","enum":["attribute","text","rich-text","html","raw","query","meta"]},"selector":{"description":"The selector can be an HTML tag, or anything queryable with querySelector, such as a class or id attribute. Examples are given below.\n\nFor example, a selector of img will match an img element, and img.class will match an img element that has a class of class.","type":"string"},"attribute":{"description":"Use an attribute source to extract the value from an attribute in the markup. The attribute is specified by the attribute field, which must be supplied.\n\nExample: Extract the src attribute from an image found in the block’s markup.","type":"string"},"query":{"description":"Use query to extract an array of values from markup. Entries of the array are determined by the selector argument, where each matched element within the block will have an entry structured corresponding to the second argument, an object of attribute sources.","type":"object"},"meta":{"description":"Although attributes may be obtained from a post’s meta, meta attribute sources are considered deprecated; EntityProvider and related hook APIs should be used instead, as shown in the Create Meta Block how-to here:\n\nhttps://developer.wordpress.org/block-editor/how-to-guides/metabox/#step-2-add-meta-block","type":"string"},"role":{"description":"Designates the conceptual type of the attribute.\n\nThe `content` value marks the attribute as user-editable content, and the `local` value marks the attribute as temporary and non-persistable.","type":"string","enum":["content","local"]},"default":{"description":"A block attribute can contain a default value, which will be used if the type and source do not match anything within the block content.\n\nThe value is provided by the default field, and the value should match the expected format of the attribute."}},"anyOf":[{"required":["type"]},{"required":["enum"]}]}},"additionalProperties":false},"providesContext":{"description":"Context provided for available access by descendants of blocks of this type, in the form of an object which maps a context name to one of the block’s own attribute.\n\nSee the block context documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-context/ for more details.","type":"object","patternProperties":{"[a-zA-Z]":{"type":"string"}}},"usesContext":{"description":"Array of the names of context values to inherit from an ancestor provider.\n\nSee the block context documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-context/ for more details.","type":"array","items":{"type":"string"}},"supports":{"description":"It contains as set of options to control features used in the editor. See the supports documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/ for more details.","type":"object","properties":{"anchor":{"description":"Anchors let you link directly to a specific block on a page. This property adds a field to define an id for the block and a button to copy the direct link.","type":"boolean","default":false},"align":{"description":"This property adds block controls which allow to change block’s alignment.","oneOf":[{"type":"boolean"},{"type":"array","items":{"type":"string","enum":["wide","full","left","center","right"]}}],"default":false},"alignWide":{"description":"This property allows to enable wide alignment for your theme. To disable this behavior for a single block, set this flag to false.","type":"boolean","default":true},"allowedBlocks":{"description":"This property adds UI controls which enable the user to select allowed child blocks for a block container. Note: To use this feature, pass `attributes.allowedBlocks` as the `allowedBlocks` property in the options object of `useInnerBlocksProps`.","type":"boolean","default":false},"ariaLabel":{"description":"ARIA-labels let you define an accessible label for elements. This property allows enabling the definition of an aria-label for the block, without exposing a UI field.","oneOf":[{"type":"boolean"},{"type":"object"}],"default":false},"className":{"description":"By default, the class .wp-block-your-block-name is added to the root element of your saved markup. This helps having a consistent mechanism for styling blocks that themes and plugins can rely on. If, for whatever reason, a class is not desired on the markup, this functionality can be disabled.","type":"boolean","default":true},"color":{"description":"This value signals that a block supports some of the properties related to color. When it does, the block editor will show UI controls for the user to set their values.\n\nNote that the background and text keys have a default value of true, so if the color property is present they’ll also be considered enabled","type":"object","properties":{"background":{"description":"This property adds UI controls which allow the user to apply a solid background color to a block.\n\nWhen color support is declared, this property is enabled by default (along with text), so simply setting color will enable background color.\n\nTo disable background support while keeping other color supports enabled, set to false.\n\nWhen the block declares support for color.background, its attributes definition is extended to include two new attributes: backgroundColor and style","type":"boolean","default":true},"gradients":{"description":"This property adds UI controls which allow the user to apply a gradient background to a block.\n\nGradient presets are sourced from editor-gradient-presets theme support.\n\nWhen the block declares support for color.gradient, its attributes definition is extended to include two new attributes: gradient and style","type":"boolean","default":false},"link":{"description":"This property adds block controls which allow the user to set link color in a block, link color is disabled by default.\n\nLink color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.link, its attributes definition is extended to include the style attribute","type":"boolean","default":false},"text":{"description":"This property adds block controls which allow the user to set text color in a block.\n\nWhen color support is declared, this property is enabled by default (along with background), so simply setting color will enable text color.\n\nText color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.text, its attributes definition is extended to include two new attributes: textColor and style","type":"boolean","default":true},"heading":{"description":"This property adds block controls which allow the user to set heading colors in a block. Heading color is disabled by default.\n\nHeading color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.heading, its attributes definition is extended to include the style attribute","type":"boolean","default":false},"button":{"description":"This property adds block controls which allow the user to set button colors in a block. Button color is disabled by default.\n\nButton color presets are sourced from the editor-color-palette theme support.\n\nWhen the block declares support for color.button, its attributes definition is extended to include the style attribute","type":"boolean","default":false},"enableContrastChecker":{"description":"Determines whether the contrast checker widget displays in the block editor UI.\n\nThe contrast checker appears only if the block declares support for color. It tests the readability of color combinations and warns if there is a potential issue. The property is enabled by default.\n\nSet to `false` to explicitly disable.","type":"boolean","default":true}}},"customClassName":{"description":"This property adds a field to define a custom className for the block's wrapper.","type":"boolean","default":true},"customCSS":{"description":"This property adds a field to define custom CSS for the block instance.","type":"boolean","default":true},"dimensions":{"description":"This value signals that a block supports some of the CSS style properties related to dimensions. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific dimensions property, its attributes definition is extended to include the style attribute.","type":"object","properties":{"aspectRatio":{"description":"Allow blocks to define an aspect ratio value.","type":"boolean","default":false},"height":{"description":"Allow blocks to define a height value.","type":"boolean","default":false},"minHeight":{"description":"Allow blocks to define a minimum height value.","type":"boolean","default":false},"width":{"description":"Allow blocks to define a width value.","type":"boolean","default":false}}},"filter":{"description":"This value signals that a block supports some of the properties related to filters. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific filter property, its attributes definition is extended to include the style attribute.","type":"object","properties":{"duotone":{"description":"Allow blocks to define a duotone filter.","type":"boolean","default":false}}},"background":{"description":"This value signals that a block supports some of the CSS style properties related to background. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific background property, its attributes definition is extended to include the style attribute.","type":"object","properties":{"backgroundImage":{"description":"Allow blocks to define a background image.","type":"boolean","default":false},"backgroundSize":{"description":"Allow blocks to define values related to the size of a background image, including size, position, and repeat controls","type":"boolean","default":false},"gradient":{"description":"Allow blocks to define gradient values.","type":"boolean","default":false}}},"html":{"description":"By default, a block’s markup can be edited individually. To disable this behavior, set html to false.","type":"boolean","default":true},"inserter":{"description":"By default, all blocks will appear in the inserter, block transforms menu, Style Book, etc. To hide a block from all parts of the user interface so that it can only be inserted programmatically, set inserter to false.","type":"boolean","default":true},"renaming":{"description":"By default, a block can be renamed by a user from the block 'Options' dropdown or the 'Advanced' panel. To disable this behavior, set renaming to false.","type":"boolean","default":true},"visibility":{"description":"By default, a block can be hidden by a user from the block 'Options' dropdown. To disable this behavior, set visibility to false.","type":"boolean","default":true},"layout":{"description":"This value only applies to blocks that are containers for inner blocks. If set to `true` the layout type will be `flow`. For other layout types it's necessary to set the `type` explicitly inside the `default` object.","oneOf":[{"type":"boolean"},{"type":"object","properties":{"default":{"description":"Allows setting the `type` property to define what layout type is default for the block, and also default values for any properties inherent to that layout type, e.g., for a `flex` layout, a default value can be set for `flexWrap`.","type":"object","properties":{"type":{"description":"The layout type.","type":"string","enum":["constrained","grid","flex"]},"contentSize":{"description":"The content size used on all children.","type":"string"},"wideSize":{"description":"The wide size used on alignwide children.","type":"string"},"justifyContent":{"description":"Content justification value.","type":"string","enum":["right","center","space-between","left","stretch"]},"orientation":{"description":"The orientation of the layout.","type":"string","enum":["horizontal","vertical"]},"flexWrap":{"description":"The flex wrap value.","type":"string","enum":["wrap","nowrap"]},"verticalAlignment":{"description":"The vertical alignment value.","type":"string","enum":["top","center","bottom","space-between","stretch"]},"minimumColumnWidth":{"description":"The minimum column width value.","type":"string"},"columnCount":{"description":"The column count value.","type":"number"}}},"allowSwitching":{"description":"Exposes a switcher control that allows toggling between all existing layout types.","type":"boolean","default":false},"allowEditing":{"description":"Determines display of layout controls in the block sidebar. If set to false, layout controls will be hidden.","type":"boolean","default":true},"allowInheriting":{"description":"For the `flow` layout type only, determines display of the `Inner blocks use content width` toggle.","type":"boolean","default":true},"allowSizingOnChildren":{"description":"For the `flex` layout type only, determines display of sizing controls (Fit/Fill/Fixed) on all child blocks of the flex block.","type":"boolean","default":false},"allowVerticalAlignment":{"description":"For the `flex` layout type only, determines display of vertical alignment controls in the block toolbar.","type":"boolean","default":true},"allowJustification":{"description":"For the `flex` layout type, determines display of justification controls in the block toolbar and block sidebar. For the `constrained` layout type, determines display of justification control in the block sidebar.","type":"boolean","default":true},"allowOrientation":{"description":"For the `flex` layout type only, determines display of the orientation control in the block toolbar.","type":"boolean","default":true},"allowWrap":{"description":"For the `flex` layout type only, determines display of the wrap toggle in the block sidebar.","type":"boolean","default":true},"allowCustomContentAndWideSize":{"description":"For the `constrained` layout type only, determines display of the custom content and wide size controls in the block sidebar.","type":"boolean","default":true}}}],"default":false},"multiple":{"description":"A non-multiple block can be inserted into each post, one time only. For example, the built-in ‘More’ block cannot be inserted again if it already exists in the post being edited. A non-multiple block’s icon is automatically dimmed (unclickable) to prevent multiple instances.","type":"boolean","default":true},"reusable":{"description":"A block may want to disable the ability of being converted into a reusable block. By default all blocks can be converted to a reusable block. If supports reusable is set to false, the option to convert the block into a reusable block will not appear.","type":"boolean","default":true},"lock":{"description":"A block may want to disable the ability to toggle the lock state. It can be locked/unlocked by a user from the block 'Options' dropdown by default. To disable this behavior, set lock to false.","type":"boolean","default":true},"position":{"description":"This value signals that a block supports some of the CSS style properties related to position. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific position property, its attributes definition is extended to include the style attribute.","type":"object","properties":{"sticky":{"description":"Allow blocks to stick to their immediate parent when scrolling the page.","type":"boolean","default":false}}},"spacing":{"description":"This value signals that a block supports some of the CSS style properties related to spacing. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific spacing property, its attributes definition is extended to include the style attribute.","type":"object","properties":{"margin":{"oneOf":[{"type":"boolean"},{"type":"array","items":{"type":"string","enum":["top","right","left","bottom"]}},{"type":"array","items":{"type":"string","enum":["vertical","horizontal"]}}]},"padding":{"oneOf":[{"type":"boolean"},{"type":"array","items":{"type":"string","enum":["top","right","left","bottom"]}},{"type":"array","items":{"type":"string","enum":["vertical","horizontal"]}}]}}},"shadow":{"description":"Allow blocks to define a box shadow.","oneOf":[{"description":"Defines whether a box shadow is enabled or not.","type":"boolean"},{"type":"object"}],"default":false},"typography":{"description":"This value signals that a block supports some of the CSS style properties related to typography. When it does, the block editor will show UI controls for the user to set their values if the theme declares support.\n\nWhen the block declares support for a specific typography property, its attributes definition is extended to include the style attribute.","type":"object","properties":{"fontSize":{"description":"This value signals that a block supports the font-size CSS style property. When it does, the block editor will show an UI control for the user to set its value.\n\nThe values shown in this control are the ones declared by the theme via the editor-font-sizes theme support, or the default ones if none is provided.\n\nWhen the block declares support for fontSize, its attributes definition is extended to include two new attributes: fontSize and style","type":"boolean","default":false},"lineHeight":{"description":"This value signals that a block supports the line-height CSS style property. When it does, the block editor will show an UI control for the user to set its value if the theme declares support.\n\nWhen the block declares support for lineHeight, its attributes definition is extended to include a new attribute style of object type with no default assigned. It stores the custom value set by the user. The block can apply a default style by specifying its own style attribute with a default","type":"boolean","default":false},"textAlign":{"description":"This property adds block toolbar controls which allow to change block's text alignment.","oneOf":[{"type":"boolean"},{"type":"array","items":{"type":"string","enum":["left","center","right"]}}],"default":false},"fitText":{"description":"Enable fit text support for the block. This allows text content to automatically adjust its font size to fit within the block's dimensions.","type":"boolean","default":false},"textIndent":{"description":"This value signals that a block supports the text-indent CSS style property. When it does, the block editor will show a UI control for the user to set its value if the theme declares support.\n\nWhen the block declares support for textIndent, its attributes definition is extended to include the style attribute.","type":"boolean","default":false}}},"interactivity":{"description":"Indicates if the block is using Interactivity API features.","oneOf":[{"description":"Indicates whether the block is using the Interactivity API directives.","type":"boolean","default":false},{"type":"object","properties":{"clientNavigation":{"description":"Indicates whether a block is compatible with the Interactivity API client-side navigation.\n\nSet it to true only if the block is not interactive or if it is interactive using the Interactivity API. Set it to false if the block is interactive but uses vanilla JS, jQuery or another JS framework/library other than the Interactivity API.","type":"boolean","default":false},"interactive":{"description":"Indicates whether the block is using the Interactivity API directives.","type":"boolean","default":false}}}]},"contentRole":{"description":"This property marks the block itself as content. It is intended primarily for blocks that do not declare content attributes, or whose content is expressed only through their inner blocks. When enabled, content-only editing modes can still edit these blocks and allow inner blocks to be added or removed.","type":"boolean","default":false},"listView":{"description":"This property enables a dedicated List View panel in the block inspector for the block. When enabled, the inspector shows a List View tree for the block's inner blocks, allowing users to inspect, reorder, and manage the block's items from the sidebar instead of only using the global document List View.","type":"boolean","default":false},"splitting":{"description":"This property indicates whether the block can split when the Enter key is pressed or when blocks are pasted.","type":"boolean","default":false}},"additionalProperties":true},"selectors":{"description":"Provides custom CSS selectors and mappings for the block. Selectors may be set for the block itself or per-feature e.g. typography. Custom selectors per feature or sub-feature, allow different block styles to be applied to different elements within the block.","type":"object","properties":{"root":{"description":"The primary CSS class to apply to the block. This replaces the `.wp-block-name` class if set.","type":"string"},"border":{"description":"Custom CSS selector used to generate rules for the block's theme.json border styles.","oneOf":[{"type":"string"},{"type":"object","properties":{"root":{"type":"string"},"color":{"type":"string"},"radius":{"type":"string"},"style":{"type":"string"},"width":{"type":"string"}}}]},"color":{"description":"Custom CSS selector used to generate rules for the block's theme.json color styles.","oneOf":[{"type":"string"},{"type":"object","properties":{"root":{"type":"string"},"text":{"type":"string"},"background":{"type":"string"}}}]},"dimensions":{"description":"Custom CSS selector used to generate rules for the block's theme.json dimensions styles.","oneOf":[{"type":"string"},{"type":"object","properties":{"root":{"type":"string"},"aspectRatio":{"type":"string"},"height":{"type":"string"},"minHeight":{"type":"string"},"width":{"type":"string"}}}]},"spacing":{"description":"Custom CSS selector used to generate rules for the block's theme.json spacing styles.","oneOf":[{"type":"string"},{"type":"object","properties":{"root":{"type":"string"},"blockGap":{"type":"string"},"padding":{"type":"string"},"margin":{"type":"string"}}}]},"typography":{"description":"Custom CSS selector used to generate rules for the block's theme.json typography styles.","oneOf":[{"type":"string"},{"type":"object","properties":{"root":{"type":"string"},"fontFamily":{"type":"string"},"fontSize":{"type":"string"},"fontStyle":{"type":"string"},"fontWeight":{"type":"string"},"lineHeight":{"type":"string"},"letterSpacing":{"type":"string"},"textDecoration":{"type":"string"},"textIndent":{"type":"string"},"textTransform":{"type":"string"}}}]},"css":{"description":"Custom CSS selector used when generating the block's custom CSS rules set via Global Styles.","oneOf":[{"type":"string"},{"type":"object","properties":{"root":{"type":"string"}}}]}}},"styles":{"description":"Block styles can be used to provide alternative styles to block. It works by adding a class name to the block’s wrapper. Using CSS, a theme developer can target the class name for the block style if it is selected.\n\nPlugins and Themes can also register custom block style for existing blocks.\n\nhttps://developer.wordpress.org/block-editor/reference-guides/block-api/block-styles/","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"isDefault":{"type":"boolean","default":false}},"required":["name","label"],"additionalProperties":false}},"example":{"description":"It provides structured example data for the block. This data is used to construct a preview for the block to be shown in the Inspector Help Panel when the user mouses over the block.\n\nSee the example documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#example-optional for more details.","type":"object","properties":{"viewportWidth":{"description":"The viewportWidth controls the width of the iFrame container in which the block preview will get rendered","type":"number","default":1200},"attributes":{"description":"Set the attributes for the block example","type":"object"},"innerBlocks":{"description":"Set the inner blocks that should be used within the block example. The blocks should be defined as a nested array like this:\n\n[ { \"name\": \"core/heading\", \"attributes\": { \"content\": \"This is an Example\" } } ]\n\nWhere each block itself is an object that contains the block name, the block attributes, and the blocks inner blocks.","type":"array"}}},"blockHooks":{"description":"Block Hooks allow a block to automatically insert itself next to all instances of a given block type.\n\nSee the Block Hooks documentation at https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/#block-hooks-optional for more details.","type":"object","patternProperties":{"^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$":{"type":"string","enum":["before","after","firstChild","lastChild"]}},"additionalProperties":false},"editorScript":{"description":"Block type editor script definition. It will only be enqueued in the context of the editor.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"script":{"description":"Block type frontend and editor script definition. It will be enqueued both in the editor and when viewing the content on the front of the site.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"viewScript":{"description":"Block type frontend script definition. It will be enqueued only when viewing the content on the front of the site.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"viewScriptModule":{"description":"Block type frontend script module definition. It will be enqueued only when viewing the content on the front of the site.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"editorStyle":{"description":"Block type editor style definition. It will only be enqueued in the context of the editor.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"style":{"description":"Block type frontend style definition. It will be enqueued both in the editor and when viewing the content on the front of the site.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"viewStyle":{"description":"Block type frontend style definition. It will be enqueued only when viewing the content on the front of the site.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"variations":{"description":"Block Variations is the API that allows a block to have similar versions of it, but all these versions share some common functionality.","oneOf":[{"description":"The path to a PHP file that returns an array of block variations.","type":"string"},{"description":"An array of block variations.","type":"array","items":{"type":"object","properties":{"name":{"description":"The unique and machine-readable name.","type":"string"},"title":{"description":"A human-readable variation title.","type":"string"},"description":{"description":"A detailed variation description.","type":"string"},"category":{"description":"A category classification, used in search interfaces to arrange block types by category.","anyOf":[{"type":"string"},{"type":"string","enum":["text","media","design","widgets","theme","embed"]}]},"icon":{"description":"An icon helping to visualize the variation. It can have the same shape as the block type.","type":"string"},"isDefault":{"description":"Indicates whether the current variation is the default one.","type":"boolean","default":false},"attributes":{"description":"Values that override block attributes.","type":"object"},"innerBlocks":{"description":"Initial configuration of nested blocks.","type":"array","items":{"type":"array"}},"example":{"description":"Example provides structured data for the block preview. You can set to undefined to disable the preview shown for the block type.","type":"object"},"scope":{"description":"The list of scopes where the variation is applicable.","type":"array","items":{"type":"string","enum":["inserter","block","transform"]},"default":["inserter","block"]},"keywords":{"description":"An array of terms (which can be translated) that help users discover the variation while searching.","type":"array","items":{"type":"string"}},"isActive":{"description":"The list of attributes that should be compared. Each attributes will be matched and the variation will be active if all of them are matching.","type":"array","items":{"type":"string"}}},"required":["name","title"],"additionalProperties":false}}]},"render":{"description":"Template file loaded on the server when rendering a block.","type":"string"},"blockstudio":{"type":["object","boolean"],"description":"Blockstudio specific settings.","properties":{"attributes":{"type":"array","description":"Custom attributes that will be applied to the block.","items":{"type":"object","required":["type"],"properties":{"id":{"type":"string","description":"A unique identifier for the field, which will be used get the value inside block templates. Must be unique within the current context."},"key":{"type":"string","description":"Another identifier that can be used to uniquely identify fields across different contexts. (inside repeaters etc.)"},"type":{"type":"string","anyOf":[{"enum":["attributes","block","checkbox","classes","code","color","date","datetime","files","gradient","group","html-tag","icon","link","message","number","radio","range","select","tabs","text","textarea","toggle","repeater","richtext","unit","wysiwyg"]},{"pattern":"^custom/.+$","description":"Custom field reference in format 'custom/{name}'."}]},"label":{"type":"string","description":"The label for the field."},"description":{"type":"string","description":"The description for the field. Will be displayed underneath the field."},"help":{"type":"string","description":"The help text for the field. Will be displayed in a tooltip next to the label."},"hidden":{"type":"boolean","description":"Whether to hide the field UI in the editor. This is handy when using the variations API."},"storage":{"type":"object","description":"Configure where the field value should be stored.","properties":{"type":{"type":["string","array"],"description":"Storage location(s). Can be a single type or array of types.","enum":["block","postMeta","option"]},"postMetaKey":{"type":"string","description":"Custom meta key for post meta storage. Defaults to {block_name}_{field_id}."},"optionKey":{"type":"string","description":"Custom option key for options storage. Defaults to {block_name}_{field_id}."}}},"switch":{"type":"boolean","description":"Display a toggle that can disable the field. Shows an eye icon in the field label. Defaults to false.","default":false},"idStructure":{"type":"string","description":"ID pattern for expanded custom fields. Use {id} as placeholder for the original field ID.","default":"{id}","example":"hero_{id}"},"overrides":{"type":"object","description":"Per-field property overrides for custom fields. Keys are original field IDs from the field definition.","additionalProperties":{"type":"object"}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}}},"anyOf":[{"example":"attributes","description":"Renders data attribute inputs.","properties":{"type":{"const":"attributes"},"default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"link":{"type":"boolean","description":"Enables link selection from dropdown."},"media":{"type":"boolean","description":"Enables media selection from dropdown."}}},{"description":"References another Blockstudio block, expanding its fields inline. In templates, the value returns the rendered block output.","properties":{"type":{"const":"block"},"block":{"type":"string","description":"The name of the block to reference (e.g., \"mytheme/card\")."},"returnFormat":{"type":"string","description":"How the value should be returned in templates.","enum":["rendered","data","both"],"default":"rendered"}}},{"example":"option-multiple","description":"Renders a set of checkbox inputs.","properties":{"type":{"const":"checkbox"},"default":{"type":["array","string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","string","number"],"description":"Fallback value that that will display when field value is empty."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}}},{"example":"single","description":"Renders a field to select CSS classes.","properties":{"type":{"const":"classes"},"default":{"type":["string"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["string"],"description":"Fallback value that that will display when field value is empty."},"tailwind":{"type":"boolean","description":"Whether to enable Tailwind classes for this input field."}}},{"example":"single","description":"Renders a code editor.","properties":{"type":{"const":"code"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"autoCompletion":{"type":"boolean","description":"Whether to enable autocompletion or not."},"foldGutter":{"type":"boolean","description":"Whether to show the fold gutter or not."},"height":{"type":"string","description":"The height of the editor."},"language":{"type":"string","description":"The language to use for syntax highlighting.","enum":["css","html","javascript","json","scss","twig"]},"lineNumbers":{"type":"boolean","description":"Whether to display line numbers or not."},"maxHeight":{"type":"string","description":"The maximum height of the editor."},"minHeight":{"type":"string","description":"The minimum height of the editor."},"popout":{"type":"boolean","description":"Whether to show a button that opens the editor in a popup window."}}},{"example":"option","description":"Renders a color palette and color picker.","properties":{"type":{"const":"color"},"options":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}},"description":"Options to choose from."}},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["function","custom"]},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"}}},"clearable":{"type":"boolean","description":"Whether the palette should have a clearing button or not."},"disableCustomColors":{"type":"boolean","description":"Whether to allow custom color or not."}}},{"example":"single","description":"Renders a date picker.","properties":{"type":{"const":"date"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"startOfWeek":{"type":"number","description":"The day that the week should start on. 0 for Sunday, 1 for Monday, etc."}}},{"example":"single","description":"Renders a date and time picker.","properties":{"type":{"const":"datetime"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"is12Hour":{"type":"boolean","description":"Whether we use a 12-hour clock. With a 12-hour clock, an AM/PM widget is displayed and the time format is assumed to be MM-DD-YYYY (as opposed to the default format DD-MM-YYYY)."}}},{"example":"files","description":"Renders a button to the media library. Picked items can be reordered inline.","properties":{"type":{"const":"files"},"default":{"type":["array","object","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","object","number"],"description":"Fallback value that that will display when field value is empty."},"addToGallery":{"type":"boolean","description":"If true, the gallery media modal opens directly in the media library where the user can add additional images. If false the gallery media modal opens in the edit mode where the user can edit existing images, by reordering them, remove them, or change their attributes. Only applies if gallery === true."},"allowedTypes":{"type":["array","string"],"description":"Array with the types of the media to upload/select from the media library. Each type is a string that can contain the general mime type e.g: 'image', 'audio', 'text', or the complete mime type e.g: 'audio/mpeg', 'image/gif'. If allowedTypes is unset all mime types should be allowed."},"gallery":{"type":"boolean","description":"If true, the component will initiate all the states required to represent a gallery. By default, the media modal opens in the gallery edit frame, but that can be changed using the addToGalleryflag."},"max":{"type":"number","description":"Maximum amount of files that can be added."},"min":{"type":"number","description":"Minimum amount of files that can be added."},"multiple":{"type":"boolean","description":"Whether to allow multiple selections or not."},"size":{"type":"boolean","description":"Adds a media size dropdown to the field."},"textMediaButton":{"type":"string","description":"Media button text."},"title":{"type":"string","description":"Title displayed in the media modal."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["object","id","url"],"default":"object"},"returnSize":{"type":"string","description":"The media size to return when using the URL return format."}}},{"example":"option","description":"Renders a gradient palette and gradient picker","properties":{"type":{"const":"gradient"},"options":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}},"description":"Options to choose from."}},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["function","custom"]},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"}}},"clearable":{"type":"boolean","description":"Whether the palette should have a clearing button or not."},"disableCustomGradients":{"type":"boolean","description":"Whether to allow custom color or not."}}},{"description":"Renders multiple fields in an (optionally) collapsible container.","properties":{"type":{"const":"group"},"title":{"type":"string","description":"Title text. It shows even when the component is closed."},"opened":{"type":"boolean","description":"When set to true, the component will remain open regardless of the initialOpen prop and the"},"initialOpen":{"type":"boolean","description":"Whether or not the panel will start open."},"scrollAfterOpen":{"type":"boolean","description":"Scrolls the content into view when visible."},"class":{"type":"string","description":"Custom CSS class that will be applied to the group."},"style":{"type":"object","description":"Custom CSS styles that will be applied to the group."},"attributes":{"type":"array","description":"Accepts all other field types besides another tabs.","items":{"type":"object","required":["type"],"properties":{"id":{"type":"string","description":"A unique identifier for the field, which will be used get the value inside block templates. Must be unique within the current context."},"key":{"type":"string","description":"Another identifier that can be used to uniquely identify fields across different contexts. (inside repeaters etc.)"},"type":{"type":"string","anyOf":[{"enum":["attributes","block","checkbox","classes","code","color","date","datetime","files","gradient","html-tag","icon","link","message","number","radio","range","select","tabs","text","textarea","toggle","repeater","richtext","unit","wysiwyg"]},{"pattern":"^custom/.+$","description":"Custom field reference in format 'custom/{name}'."}]},"label":{"type":"string","description":"The label for the field."},"description":{"type":"string","description":"The description for the field. Will be displayed underneath the field."},"help":{"type":"string","description":"The help text for the field. Will be displayed in a tooltip next to the label."},"hidden":{"type":"boolean","description":"Whether to hide the field UI in the editor. This is handy when using the variations API."},"storage":{"type":"object","description":"Configure where the field value should be stored.","properties":{"type":{"type":["string","array"],"description":"Storage location(s). Can be a single type or array of types.","enum":["block","postMeta","option"]},"postMetaKey":{"type":"string","description":"Custom meta key for post meta storage. Defaults to {block_name}_{field_id}."},"optionKey":{"type":"string","description":"Custom option key for options storage. Defaults to {block_name}_{field_id}."}}},"switch":{"type":"boolean","description":"Display a toggle that can disable the field. Shows an eye icon in the field label. Defaults to false.","default":false},"idStructure":{"type":"string","description":"ID pattern for expanded custom fields. Use {id} as placeholder for the original field ID.","default":"{id}","example":"hero_{id}"},"overrides":{"type":"object","description":"Per-field property overrides for custom fields. Keys are original field IDs from the field definition.","additionalProperties":{"type":"object"}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}}},"anyOf":[{"example":"attributes","description":"Renders data attribute inputs.","properties":{"type":{"const":"attributes"},"default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"link":{"type":"boolean","description":"Enables link selection from dropdown."},"media":{"type":"boolean","description":"Enables media selection from dropdown."}}},{"description":"References another Blockstudio block, expanding its fields inline. In templates, the value returns the rendered block output.","properties":{"type":{"const":"block"},"block":{"type":"string","description":"The name of the block to reference (e.g., \"mytheme/card\")."},"returnFormat":{"type":"string","description":"How the value should be returned in templates.","enum":["rendered","data","both"],"default":"rendered"}}},{"example":"option-multiple","description":"Renders a set of checkbox inputs.","properties":{"type":{"const":"checkbox"},"default":{"type":["array","string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","string","number"],"description":"Fallback value that that will display when field value is empty."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}}},{"example":"single","description":"Renders a field to select CSS classes.","properties":{"type":{"const":"classes"},"default":{"type":["string"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["string"],"description":"Fallback value that that will display when field value is empty."},"tailwind":{"type":"boolean","description":"Whether to enable Tailwind classes for this input field."}}},{"example":"single","description":"Renders a code editor.","properties":{"type":{"const":"code"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"autoCompletion":{"type":"boolean","description":"Whether to enable autocompletion or not."},"foldGutter":{"type":"boolean","description":"Whether to show the fold gutter or not."},"height":{"type":"string","description":"The height of the editor."},"language":{"type":"string","description":"The language to use for syntax highlighting.","enum":["css","html","javascript","json","scss","twig"]},"lineNumbers":{"type":"boolean","description":"Whether to display line numbers or not."},"maxHeight":{"type":"string","description":"The maximum height of the editor."},"minHeight":{"type":"string","description":"The minimum height of the editor."},"popout":{"type":"boolean","description":"Whether to show a button that opens the editor in a popup window."}}},{"example":"option","description":"Renders a color palette and color picker.","properties":{"type":{"const":"color"},"options":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}},"description":"Options to choose from."}},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["function","custom"]},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"}}},"clearable":{"type":"boolean","description":"Whether the palette should have a clearing button or not."},"disableCustomColors":{"type":"boolean","description":"Whether to allow custom color or not."}}},{"example":"single","description":"Renders a date picker.","properties":{"type":{"const":"date"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"startOfWeek":{"type":"number","description":"The day that the week should start on. 0 for Sunday, 1 for Monday, etc."}}},{"example":"single","description":"Renders a date and time picker.","properties":{"type":{"const":"datetime"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"is12Hour":{"type":"boolean","description":"Whether we use a 12-hour clock. With a 12-hour clock, an AM/PM widget is displayed and the time format is assumed to be MM-DD-YYYY (as opposed to the default format DD-MM-YYYY)."}}},{"example":"files","description":"Renders a button to the media library. Picked items can be reordered inline.","properties":{"type":{"const":"files"},"default":{"type":["array","object","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","object","number"],"description":"Fallback value that that will display when field value is empty."},"addToGallery":{"type":"boolean","description":"If true, the gallery media modal opens directly in the media library where the user can add additional images. If false the gallery media modal opens in the edit mode where the user can edit existing images, by reordering them, remove them, or change their attributes. Only applies if gallery === true."},"allowedTypes":{"type":["array","string"],"description":"Array with the types of the media to upload/select from the media library. Each type is a string that can contain the general mime type e.g: 'image', 'audio', 'text', or the complete mime type e.g: 'audio/mpeg', 'image/gif'. If allowedTypes is unset all mime types should be allowed."},"gallery":{"type":"boolean","description":"If true, the component will initiate all the states required to represent a gallery. By default, the media modal opens in the gallery edit frame, but that can be changed using the addToGalleryflag."},"max":{"type":"number","description":"Maximum amount of files that can be added."},"min":{"type":"number","description":"Minimum amount of files that can be added."},"multiple":{"type":"boolean","description":"Whether to allow multiple selections or not."},"size":{"type":"boolean","description":"Adds a media size dropdown to the field."},"textMediaButton":{"type":"string","description":"Media button text."},"title":{"type":"string","description":"Title displayed in the media modal."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["object","id","url"],"default":"object"},"returnSize":{"type":"string","description":"The media size to return when using the URL return format."}}},{"example":"option","description":"Renders a gradient palette and gradient picker","properties":{"type":{"const":"gradient"},"options":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"slug":{"type":"string"}},"description":"Options to choose from."}},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["function","custom"]},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"}}},"clearable":{"type":"boolean","description":"Whether the palette should have a clearing button or not."},"disableCustomGradients":{"type":"boolean","description":"Whether to allow custom color or not."}}},{"description":"Renders an HTML tag selector. Useful for choosing heading levels or semantic elements.","properties":{"type":{"const":"html-tag"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"tags":{"type":["string","array"],"description":"Which tags to include. Use a preset string or an array of tag names.","enum":["heading","text","structural","all"]},"exclude":{"type":"array","items":{"type":"string"},"description":"Tags to exclude from the preset. Only applies when using a preset string for tags."}}},{"example":"icon","description":"Renders an SVG icon from an icon set.","properties":{"default":{"type":"object","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"object","description":"Fallback value that that will display when field value is empty."},"type":{"const":"icon"},"sets":{"type":["array","string"],"description":"Which icon set to include. Leave empty to include all."},"subSets":{"type":["array","string"],"description":"Which sub icon set to include. Leave empty to include all."},"returnFormat":{"type":"string","description":"The format to return the icon in.","enum":["object","element"]}}},{"example":"link","description":"Renders a link control to choose internal or external links.","properties":{"type":{"const":"link"},"default":{"type":"object","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"object","description":"Fallback value that that will display when field value is empty."},"hasRichPreviews":{"type":"boolean","description":"Whether rich previews should be shown when adding an URL."},"noDirectEntry":{"type":"boolean","description":"Whether to allow turning a URL-like search query directly into a link."},"noURLSuggestion":{"type":"boolean","description":"Whether to add a fallback suggestion which treats the search query as a URL."},"opensInNewTab":{"type":"boolean","description":"Adds a toggle control to the link modal."},"showSuggestions":{"type":"boolean","description":"Whether to present suggestions when typing the URL."},"textButton":{"type":"string","description":"Custom text that should be displayed inside the link button."},"withCreateSuggestion":{"type":"boolean","description":"Whether to allow creation of link value from suggestion."}}},{"description":"Renders a message with custom content.","properties":{"type":{"const":"message"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"value":{"type":"string","description":"The message to display. Block and attribute data is available in bracket syntax, e.g.: `{block.title}` or `{attributes.text}`"}}},{"example":"single","description":"Renders a number input.","properties":{"type":{"const":"number"},"default":{"type":"number","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"number","description":"Fallback value that that will display when field value is empty."},"dragDirection":{"type":"string","description":"Determines the drag axis to increment/decrement the value.","enum":["n","e","s","w"]},"dragThreshold":{"type":"number","description":"If isDragEnabled is true, this controls the amount of px to have been dragged before the value changes."},"hideHTMLArrows":{"type":"boolean","description":"If true, the default input HTML arrows will be hidden."},"isShiftStepEnabled":{"type":"boolean","description":"If true, enables mouse drag gesture to increment/decrement the number value. Holding SHIFT while dragging will increase the value by the shiftStep."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"required":{"type":"boolean","description":"If true enforces a valid number within the control’s min/max range. If false allows an empty string as a valid value."},"shiftStep":{"type":"number","description":"Amount to increment by when the SHIFT key is held down. This shift value is a multiplier to the step value. For example, if the step value is 5, and shiftStep is 10, each jump would increment/decrement by 50."},"step":{"type":"number","description":"Amount by which the value is changed when incrementing/decrementing. It is also a factor in validation as value must be a multiple of step (offset by min, if specified) to be valid. Accepts the special string value any that voids the validation constraint and causes stepping actions to increment/decrement by 1."}}},{"example":"option","description":"Renders a set of radio inputs.","properties":{"type":{"const":"radio"},"default":{"type":["string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["string","number"],"description":"Fallback value that that will display when field value is empty."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}}},{"example":"single","description":"Renders a range input to set a numerical value between two points.","properties":{"type":{"const":"range"},"default":{"type":"number","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"number","description":"Fallback value that that will display when field value is empty."},"allowReset":{"type":"boolean","description":"If this property is true, a button to reset the slider is rendered."},"initialPosition":{"type":"number","description":"The slider starting position, used when no value is passed. The initialPosition will be clamped between the provided min and max prop values."},"isShiftStepEnabled":{"type":"boolean","description":"If true, enables mouse drag gesture to increment/decrement the number value. Holding SHIFT while dragging will increase the value by the shiftStep."},"marks":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"}}},"description":"Renders a visual representation of step ticks. Custom mark indicators can be provided by an Array."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"railColor":{"type":"string","description":"CSS color string to customize the rail element’s background."},"resetFallbackValue":{"type":"number","description":"The value to revert to if the Reset button is clicked (enabled by allowReset)"},"separatorType":{"type":"string","description":"Define if separator line under/above control row should be disabled or full width. By default it is placed below excluding underline the control icon.","enum":["none","fullWidth","topFullWidth"]},"shiftStep":{"type":"number","description":"Amount to increment by when the SHIFT key is held down. This shift value is a multiplier to the step value. For example, if the step value is 5, and shiftStep is 10, each jump would increment/decrement by 50."},"showTooltip":{"type":"boolean","description":"Forcing the Tooltip UI to show or hide. This is overridden to false when step is set to the special string value any."},"step":{"type":"number","description":"Amount by which the value is changed when incrementing/decrementing. It is also a factor in validation as value must be a multiple of step (offset by min, if specified) to be valid. Accepts the special string value any that voids the validation constraint and causes stepping actions to increment/decrement by 1."},"trackColor":{"type":"string","description":"CSS color string to customize the track element’s background."},"withInputField":{"type":"boolean","description":"Determines if the input number field will render next to the RangeControl. This is overridden to false when step is set to the special string value any."}}},{"example":["option","option-multiple"],"description":"Renders a select input with support for single or multiple selections.","properties":{"type":{"const":"select"},"default":{"type":["array","string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","string","number"],"description":"Fallback value that that will display when field value is empty."},"multiple":{"type":"boolean","description":"If true, multiple options can be selected. \"stylisedUi\" will be automatically enabled."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"fetch":{"type":"boolean","description":"If true, search value will be used to search through data. Only works with \"query\" type."},"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}},"stylisedUi":{"type":"boolean","description":"Renders a stylised version of a select with the ability to search through items."},"allowNull":{"type":["boolean","string"],"description":"Allows the user to select an empty choice. If true, the label will be empty, otherwise the option will render the specified string."},"allowReset":{"type":"boolean","description":"If this property is true, a button to reset the select is rendered."}}},{"description":"Renders a tabbed interface for grouping fields.","properties":{"type":{"const":"tabs"},"tabs":{"type":"array","description":"The tabs to display.","items":{"type":"object","required":["title"],"properties":{"title":{"type":"string","description":"The title of the tab."},"attributes":{"type":"array","description":"Custom attributes that will be applied to the block.","items":{"$ref":"#/definitions/Attribute"}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}},"blockEditor":{"type":"object","description":"Block specific options for rendering inside the Block Editor.","properties":{"disableLoading":{"type":"boolean","description":"Whether the block should should load inside the Block Editor or show a placeholder."}}},"editor":{"type":"object","description":"Block specific options for the editor.","properties":{"assets":{"type":"array","description":"List of WordPress script or style handles that should be added to the preview.","items":{"type":"string"}}}},"interactivity":{"oneOf":[{"type":"boolean"},{"type":"object","properties":{"enqueue":{"type":"boolean","description":"Enqueue the Interactivity API."}}}],"description":"Enable the WordPress Interactivity API for this block."},"icon":{"type":"string","description":"Custom SVG icon to be displayed inside the editor."},"innerBlocks":{"type":"string","description":"HTML content that will be rendered as the inner blocks."},"component":{"type":"boolean","description":"Whether this block is a component. Components go through the full Blockstudio pipeline but do not appear in the editor inserter. They can only be rendered via block tags or bs_render_block()."},"override":{"type":"boolean","description":"Whether this block should overwrite another block."},"refreshOn":{"type":"array","description":"When the block should refresh. This is useful when the block relies on external data like custom fields.","items":{"type":"string"}},"transforms":{"type":"object","description":"Custom block transforms.","properties":{"from":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["block","enter","prefix"]},"blocks":{"type":"array","items":{"type":"string"}},"regExp":{"type":"string"},"prefix":{"type":"string"}},"required":["type"],"additionalProperties":false}}},"required":["from"],"additionalProperties":false}}}}}},{"example":"single","description":"Renders a single line text input.","properties":{"type":{"const":"text"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."}}},{"example":"single","description":"Renders a textarea input.","properties":{"type":{"const":"textarea"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"rows":{"type":"number","description":"The number of rows the textarea should contain."}}},{"example":"toggle","description":"Renders a true/false toggle.","properties":{"type":{"const":"toggle"},"default":{"type":"boolean","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"boolean","description":"Fallback value that that will display when field value is empty."}}},{"description":"Renders a set of fields that can be repeated.","properties":{"type":{"const":"repeater"},"min":{"type":"number","description":"Minimum amount of rows."},"max":{"type":"number","description":"Maximum amount of rows."},"textButton":{"type":"string","description":"Text for the add button."},"textMinimized":{"type":["string","object"],"description":"Text that will be displayed when rows are minimized.","properties":{"id":{"type":"string","description":"ID of the attribute which should be used as the text."},"key":{"type":"string","description":"Sub-property to read when the field value is an object (e.g. \"title\" for link fields)."},"fallback":{"type":"string","description":"Fallback text if the attribute is not set."},"prefix":{"type":"string","description":"Prefix for the text."},"suffix":{"type":"string","description":"Suffix for the text."}}},"textRemove":{"type":["string","boolean"],"description":"Text to display in alert when removing repeater row."},"attributes":{"type":"array","description":"Accepts all other field types besides another tabs.","items":{"$ref":"#/definitions/Attribute"}}}},{"example":"single","description":"Attribute field for RichText fields.","properties":{"type":{"const":"richtext"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."}}},{"example":"single","description":"Renders a number input with a unit dropdown.","properties":{"type":{"const":"unit"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"disableUnits":{"type":"boolean","description":"If true, the unit select field is hidden."},"isPressEnterToChange":{"type":"boolean","description":"If true, the ENTER key press is required in order to trigger an onChange. If enabled, a change is also triggered when tabbing away."},"isResetValueOnUnitChange":{"type":"boolean","description":"If true, and the selected unit provides a default value, this value is set when changing units."},"isUnitSelectTabbable":{"type":"boolean","description":"Determines if the unit select field is tabbable."},"units":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"default":{"type":"number"},"label":{"type":"string"},"value":{"type":"string"}}}}}},{"example":"single","description":"Renders a WYSIWYG editor.","properties":{"type":{"const":"wysiwyg"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"toolbar":{"type":"object","description":"The toolbar configuration for the editor.","properties":{"tags":{"type":"object","description":"Which HTML tags are allowed.","properties":{"headings":{"type":"array","description":"Which HTML headings levels are allowed."}}},"formats":{"type":"object","description":"Which text formats are allowed.","properties":{"bold":{"type":"boolean","description":"Whether bold text format is allowed."},"italic":{"type":"boolean","description":"Whether italic text format is allowed."},"orderedList":{"type":"boolean","description":"Whether ordered list text format is allowed."},"strikethrough":{"type":"boolean","description":"Whether strikethrough text format is allowed."},"underline":{"type":"boolean","description":"Whether underline text format is allowed."},"unorderedList":{"type":"boolean","description":"Whether unordered list text format is allowed."},"textAlign":{"type":"object","description":"Which text alignment formats are allowed.","properties":{"alignments":{"type":"array","description":"Which text alignments are allowed.","items":{"type":"string","enum":["left","center","right","justify"]}}}}}}}}}},{"properties":{"type":{"pattern":"^custom/.+$","description":"References a reusable custom field definition."}},"required":["type"]}]}}}},{"description":"Renders an HTML tag selector. Useful for choosing heading levels or semantic elements.","properties":{"type":{"const":"html-tag"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"tags":{"type":["string","array"],"description":"Which tags to include. Use a preset string or an array of tag names.","enum":["heading","text","structural","all"]},"exclude":{"type":"array","items":{"type":"string"},"description":"Tags to exclude from the preset. Only applies when using a preset string for tags."}}},{"example":"icon","description":"Renders an SVG icon from an icon set.","properties":{"default":{"type":"object","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"object","description":"Fallback value that that will display when field value is empty."},"type":{"const":"icon"},"sets":{"type":["array","string"],"description":"Which icon set to include. Leave empty to include all."},"subSets":{"type":["array","string"],"description":"Which sub icon set to include. Leave empty to include all."},"returnFormat":{"type":"string","description":"The format to return the icon in.","enum":["object","element"]}}},{"example":"link","description":"Renders a link control to choose internal or external links.","properties":{"type":{"const":"link"},"default":{"type":"object","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"object","description":"Fallback value that that will display when field value is empty."},"hasRichPreviews":{"type":"boolean","description":"Whether rich previews should be shown when adding an URL."},"noDirectEntry":{"type":"boolean","description":"Whether to allow turning a URL-like search query directly into a link."},"noURLSuggestion":{"type":"boolean","description":"Whether to add a fallback suggestion which treats the search query as a URL."},"opensInNewTab":{"type":"boolean","description":"Adds a toggle control to the link modal."},"showSuggestions":{"type":"boolean","description":"Whether to present suggestions when typing the URL."},"textButton":{"type":"string","description":"Custom text that should be displayed inside the link button."},"withCreateSuggestion":{"type":"boolean","description":"Whether to allow creation of link value from suggestion."}}},{"description":"Renders a message with custom content.","properties":{"type":{"const":"message"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"value":{"type":"string","description":"The message to display. Block and attribute data is available in bracket syntax, e.g.: `{block.title}` or `{attributes.text}`"}}},{"example":"single","description":"Renders a number input.","properties":{"type":{"const":"number"},"default":{"type":"number","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"number","description":"Fallback value that that will display when field value is empty."},"dragDirection":{"type":"string","description":"Determines the drag axis to increment/decrement the value.","enum":["n","e","s","w"]},"dragThreshold":{"type":"number","description":"If isDragEnabled is true, this controls the amount of px to have been dragged before the value changes."},"hideHTMLArrows":{"type":"boolean","description":"If true, the default input HTML arrows will be hidden."},"isShiftStepEnabled":{"type":"boolean","description":"If true, enables mouse drag gesture to increment/decrement the number value. Holding SHIFT while dragging will increase the value by the shiftStep."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"required":{"type":"boolean","description":"If true enforces a valid number within the control’s min/max range. If false allows an empty string as a valid value."},"shiftStep":{"type":"number","description":"Amount to increment by when the SHIFT key is held down. This shift value is a multiplier to the step value. For example, if the step value is 5, and shiftStep is 10, each jump would increment/decrement by 50."},"step":{"type":"number","description":"Amount by which the value is changed when incrementing/decrementing. It is also a factor in validation as value must be a multiple of step (offset by min, if specified) to be valid. Accepts the special string value any that voids the validation constraint and causes stepping actions to increment/decrement by 1."}}},{"example":"option","description":"Renders a set of radio inputs.","properties":{"type":{"const":"radio"},"default":{"type":["string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["string","number"],"description":"Fallback value that that will display when field value is empty."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}}},{"example":"single","description":"Renders a range input to set a numerical value between two points.","properties":{"type":{"const":"range"},"default":{"type":"number","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"number","description":"Fallback value that that will display when field value is empty."},"allowReset":{"type":"boolean","description":"If this property is true, a button to reset the slider is rendered."},"initialPosition":{"type":"number","description":"The slider starting position, used when no value is passed. The initialPosition will be clamped between the provided min and max prop values."},"isShiftStepEnabled":{"type":"boolean","description":"If true, enables mouse drag gesture to increment/decrement the number value. Holding SHIFT while dragging will increase the value by the shiftStep."},"marks":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"}}},"description":"Renders a visual representation of step ticks. Custom mark indicators can be provided by an Array."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"railColor":{"type":"string","description":"CSS color string to customize the rail element’s background."},"resetFallbackValue":{"type":"number","description":"The value to revert to if the Reset button is clicked (enabled by allowReset)"},"separatorType":{"type":"string","description":"Define if separator line under/above control row should be disabled or full width. By default it is placed below excluding underline the control icon.","enum":["none","fullWidth","topFullWidth"]},"shiftStep":{"type":"number","description":"Amount to increment by when the SHIFT key is held down. This shift value is a multiplier to the step value. For example, if the step value is 5, and shiftStep is 10, each jump would increment/decrement by 50."},"showTooltip":{"type":"boolean","description":"Forcing the Tooltip UI to show or hide. This is overridden to false when step is set to the special string value any."},"step":{"type":"number","description":"Amount by which the value is changed when incrementing/decrementing. It is also a factor in validation as value must be a multiple of step (offset by min, if specified) to be valid. Accepts the special string value any that voids the validation constraint and causes stepping actions to increment/decrement by 1."},"trackColor":{"type":"string","description":"CSS color string to customize the track element’s background."},"withInputField":{"type":"boolean","description":"Determines if the input number field will render next to the RangeControl. This is overridden to false when step is set to the special string value any."}}},{"example":["option","option-multiple"],"description":"Renders a select input with support for single or multiple selections.","properties":{"type":{"const":"select"},"default":{"type":["array","string","number"],"description":"Default value that should be applied when first adding the block."},"fallback":{"type":["array","string","number"],"description":"Fallback value that that will display when field value is empty."},"multiple":{"type":"boolean","description":"If true, multiple options can be selected. \"stylisedUi\" will be automatically enabled."},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number"]},"innerBlocks":{"type":"array","items":{"$ref":"#/definitions/Block"}}},"required":["value"]},"description":"Options to choose from."},"returnFormat":{"type":"string","description":"Specifies the return format value.","enum":["value","label","both"],"default":"value"},"populate":{"type":"object","properties":{"fetch":{"type":"boolean","description":"If true, search value will be used to search through data. Only works with \"query\" type."},"function":{"type":"string","description":"The function that should be executed."},"type":{"type":"string","enum":["query","function","custom","fetch"]},"query":{"type":"string","enum":["posts","users","terms"],"description":"Type of query that should be used to fetch data."},"arguments":{"type":["object","array"],"description":"Query or fetch arguments.","properties":{"urlSearch":{"type":"string","description":"Search URL when using the \"fetch\" type."}}},"custom":{"type":"string","description":"Custom data ID."},"position":{"type":"string","description":"How the data should be positioned in regards to the default options.","enum":["before","after"],"default":"after"},"returnFormat":{"type":"object","description":"Format of the returning data when using objects.","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}},"stylisedUi":{"type":"boolean","description":"Renders a stylised version of a select with the ability to search through items."},"allowNull":{"type":["boolean","string"],"description":"Allows the user to select an empty choice. If true, the label will be empty, otherwise the option will render the specified string."},"allowReset":{"type":"boolean","description":"If this property is true, a button to reset the select is rendered."}}},{"description":"Renders a tabbed interface for grouping fields.","properties":{"type":{"const":"tabs"},"tabs":{"type":"array","description":"The tabs to display.","items":{"type":"object","required":["title"],"properties":{"title":{"type":"string","description":"The title of the tab."},"attributes":{"type":"array","description":"Custom attributes that will be applied to the block.","items":{"$ref":"#/definitions/Attribute"}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}},"blockEditor":{"type":"object","description":"Block specific options for rendering inside the Block Editor.","properties":{"disableLoading":{"type":"boolean","description":"Whether the block should should load inside the Block Editor or show a placeholder."}}},"editor":{"type":"object","description":"Block specific options for the editor.","properties":{"assets":{"type":"array","description":"List of WordPress script or style handles that should be added to the preview.","items":{"type":"string"}}}},"interactivity":{"oneOf":[{"type":"boolean"},{"type":"object","properties":{"enqueue":{"type":"boolean","description":"Enqueue the Interactivity API."}}}],"description":"Enable the WordPress Interactivity API for this block."},"icon":{"type":"string","description":"Custom SVG icon to be displayed inside the editor."},"innerBlocks":{"type":"string","description":"HTML content that will be rendered as the inner blocks."},"component":{"type":"boolean","description":"Whether this block is a component. Components go through the full Blockstudio pipeline but do not appear in the editor inserter. They can only be rendered via block tags or bs_render_block()."},"override":{"type":"boolean","description":"Whether this block should overwrite another block."},"refreshOn":{"type":"array","description":"When the block should refresh. This is useful when the block relies on external data like custom fields.","items":{"type":"string"}},"transforms":{"type":"object","description":"Custom block transforms.","properties":{"from":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["block","enter","prefix"]},"blocks":{"type":"array","items":{"type":"string"}},"regExp":{"type":"string"},"prefix":{"type":"string"}},"required":["type"],"additionalProperties":false}}},"required":["from"],"additionalProperties":false}}}}}},{"example":"single","description":"Renders a single line text input.","properties":{"type":{"const":"text"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."}}},{"example":"single","description":"Renders a textarea input.","properties":{"type":{"const":"textarea"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"max":{"type":"number","description":"The maximum value length."},"min":{"type":"number","description":"Minimum value length."},"rows":{"type":"number","description":"The number of rows the textarea should contain."}}},{"example":"toggle","description":"Renders a true/false toggle.","properties":{"type":{"const":"toggle"},"default":{"type":"boolean","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"boolean","description":"Fallback value that that will display when field value is empty."}}},{"description":"Renders a set of fields that can be repeated.","properties":{"type":{"const":"repeater"},"min":{"type":"number","description":"Minimum amount of rows."},"max":{"type":"number","description":"Maximum amount of rows."},"textButton":{"type":"string","description":"Text for the add button."},"textMinimized":{"type":["string","object"],"description":"Text that will be displayed when rows are minimized.","properties":{"id":{"type":"string","description":"ID of the attribute which should be used as the text."},"key":{"type":"string","description":"Sub-property to read when the field value is an object (e.g. \"title\" for link fields)."},"fallback":{"type":"string","description":"Fallback text if the attribute is not set."},"prefix":{"type":"string","description":"Prefix for the text."},"suffix":{"type":"string","description":"Suffix for the text."}}},"textRemove":{"type":["string","boolean"],"description":"Text to display in alert when removing repeater row."},"attributes":{"type":"array","description":"Accepts all other field types besides another tabs.","items":{"$ref":"#/definitions/Attribute"}}}},{"example":"single","description":"Attribute field for RichText fields.","properties":{"type":{"const":"richtext"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."}}},{"example":"single","description":"Renders a number input with a unit dropdown.","properties":{"type":{"const":"unit"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"disableUnits":{"type":"boolean","description":"If true, the unit select field is hidden."},"isPressEnterToChange":{"type":"boolean","description":"If true, the ENTER key press is required in order to trigger an onChange. If enabled, a change is also triggered when tabbing away."},"isResetValueOnUnitChange":{"type":"boolean","description":"If true, and the selected unit provides a default value, this value is set when changing units."},"isUnitSelectTabbable":{"type":"boolean","description":"Determines if the unit select field is tabbable."},"units":{"type":"array","default":{"type":"array","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"array","description":"Fallback value that that will display when field value is empty."},"items":{"type":"object","properties":{"default":{"type":"number"},"label":{"type":"string"},"value":{"type":"string"}}}}}},{"example":"single","description":"Renders a WYSIWYG editor.","properties":{"type":{"const":"wysiwyg"},"default":{"type":"string","description":"Default value that should be applied when first adding the block."},"fallback":{"type":"string","description":"Fallback value that that will display when field value is empty."},"toolbar":{"type":"object","description":"The toolbar configuration for the editor.","properties":{"tags":{"type":"object","description":"Which HTML tags are allowed.","properties":{"headings":{"type":"array","description":"Which HTML headings levels are allowed."}}},"formats":{"type":"object","description":"Which text formats are allowed.","properties":{"bold":{"type":"boolean","description":"Whether bold text format is allowed."},"italic":{"type":"boolean","description":"Whether italic text format is allowed."},"orderedList":{"type":"boolean","description":"Whether ordered list text format is allowed."},"strikethrough":{"type":"boolean","description":"Whether strikethrough text format is allowed."},"underline":{"type":"boolean","description":"Whether underline text format is allowed."},"unorderedList":{"type":"boolean","description":"Whether unordered list text format is allowed."},"textAlign":{"type":"object","description":"Which text alignment formats are allowed.","properties":{"alignments":{"type":"array","description":"Which text alignments are allowed.","items":{"type":"string","enum":["left","center","right","justify"]}}}}}}}}}},{"properties":{"type":{"pattern":"^custom/.+$","description":"References a reusable custom field definition."}},"required":["type"]}]}},"conditions":{"type":"array","description":"Conditional logic detailing when the field should be displayed in the editor.","items":{"type":"array","items":{"type":"object","required":["operator"],"properties":{"id":{"type":"string","description":"ID of the field whose value will be used for the conditionally render it."},"operator":{"type":"string","description":"How the values should be compared.","enum":["==","!=","includes","!includes","empty","!empty","<",">","<=",">="]},"type":{"type":"string","description":"Condition type."},"value":{"type":["string","number","boolean"],"description":"Value that will be compared."}}}}},"blockEditor":{"type":"object","description":"Block specific options for rendering inside the Block Editor.","properties":{"disableLoading":{"type":"boolean","description":"Whether the block should should load inside the Block Editor or show a placeholder."}}},"editor":{"type":"object","description":"Block specific options for the editor.","properties":{"assets":{"type":"array","description":"List of WordPress script or style handles that should be added to the preview.","items":{"type":"string"}}}},"interactivity":{"oneOf":[{"type":"boolean"},{"type":"object","properties":{"enqueue":{"type":"boolean","description":"Enqueue the Interactivity API."}}}],"description":"Enable the WordPress Interactivity API for this block."},"icon":{"type":"string","description":"Custom SVG icon to be displayed inside the editor."},"innerBlocks":{"type":"string","description":"HTML content that will be rendered as the inner blocks."},"component":{"type":"boolean","description":"Whether this block is a component. Components go through the full Blockstudio pipeline but do not appear in the editor inserter. They can only be rendered via block tags or bs_render_block()."},"override":{"type":"boolean","description":"Whether this block should overwrite another block."},"refreshOn":{"type":"array","description":"When the block should refresh. This is useful when the block relies on external data like custom fields.","items":{"type":"string"}},"transforms":{"type":"object","description":"Custom block transforms.","properties":{"from":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["block","enter","prefix"]},"blocks":{"type":"array","items":{"type":"string"}},"regExp":{"type":"string"},"prefix":{"type":"string"}},"required":["type"],"additionalProperties":false}}},"required":["from"],"additionalProperties":false}},"additionalProperties":false}},"required":["apiVersion","name","title"],"additionalProperties":false}