Dynamic structure properties
Below is a list of all supported properties for the dynamic structure configuration of Table columns and Form/Detail inputs:
// Example:
[
'full_name',
{ prop: 'id', type: 'number', primaryKey: true, color: 'danger' },
{ prop: 'full_name' },
{ prop: 'avatar', type: 'image' },
{ prop: 'email', type: 'link' },
{
prop: 'email',
type: 'button',
text: '\{\{value}}',
triggers: {
buttonClick: [`\{\{actions.onClick.trigger(value)}}`],
},
labelConfig: {
align: 'center',
position: 'horizontal',
},
},
];
// Default type if not specified - string
// Required keys - prop, primaryKey (at least one column must be a primary key for table)
// Common fields for all components
export class BaseComponent {
prop: string, // Field name
editable: boolean, // Always display as editable
forceView: boolean, // Do not allow editing this field
title: string, // Title
primaryKey: boolean, // Primary key
sortable: boolean, // Enable sorting
filter: boolean, // Enable filtering
enableAdding: boolean, // Enable adding
visible: boolean, // Visible
pinColumn: string, // Pin column
passEventOutside: boolean, // Select row on click
disabled: boolean, // Disabled
__UIBAKERY__SHOW__CONDITION__PRESERVE__: boolean, // Preserve space when hidden
// for Table structure only
width: number, // Width
widthMode: 'auto' | 'fixed', // 'auto' is for Min mode
viewTooltipMode: 'overflow' | 'custom', // View tooltip mode
}
// image component
export class ImageComponent extends BaseComponent {
alt: string, // Alt text
linkInfo: object
{
active: 'internalPath' | 'externalPath', // Defines which link type is used
internalPath: string, // Path for internal navigation (e.g., '/dashboard')
externalPath: string, // URL for external navigation (e.g., 'https://example.com')
}
queryParams: object
{
[key: string]: string, // Query params to append to link URL (e.g. { theme: 'dark' } → /path?theme=dark)
}
openInNewTab: boolean, // Open in new tab
helpTooltip: string, // Help tooltip
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
imageShape: string, // Image shape
fullWidth: boolean, // Full width
fileInputType: FileInputType.FILE, // Type of file allowed
fileUploadType: object
{
fileType: 'image',
userDefinedTypes: [], // Upload configuration: main file type and optional array of user-defined types
}
maxFileSize: number, // Max file size (Mb)
multipleFileUpload: boolean, // Multiple file upload
required: boolean, // Required field
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
radius: string, // Radius
fit: string, // Fit
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// number component
export class NumberComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
showCopyButton: boolean, // Show copy button
filterVariation: string, // Filter type: 'includes', 'range', 'equal'
fieldTooltip: string, // Field tooltip
mappedValue: string, // Tag mapper
viewTooltip: string, // See detailed description below
range: object
{
min: value, // Minimum allowed value
max: value // Maximum allowed values
}
required: boolean, // Required field
display: string, // Format
fraction: string, // Fraction
textStyle: object, // See detailed description below
color: string, // See detailed description below
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
locale: string, // Locale
disableFormatting: boolean, // Disable number formatting
decoration: string, // Decoration
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc.)
editModeValue: number, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// string component
export class StringComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
maskConfig: string, // Input mask
maskErrorMessage: string, // Mask error message
filterVariation: string, // Filter type: 'includes', 'equal'
fieldTooltip: string, // Field tooltip
mappedValue: string, // Tag mapper
viewTooltip: string, // See detailed description below
textStyle: object, // See detailed description below
color: string, // See detailed description below
inputType: string, // Input type
length: object, // See detailed description below
required: boolean, // Required field
markdownSupport: boolean, // Support Markdown
showCopyButton: boolean, // Show copy button
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
decoration: string, // Decoration
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc.)
editModeValue: string, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// text component
export class TextComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
filterVariation: string, // Filter type: 'includes', 'equal'
fieldTooltip: string, // Field tooltip
mappedValue: string, // Tag mapper
viewTooltip: string, // See detailed description below
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc.)
textStyle: object, // See detailed description below
color: string, // See detailed description below
lines: number, // Lines number
length: object, // See detailed description below
required: boolean, // Required field
markdownSupport: boolean, // Support Markdown
showCopyButton: boolean, // Show copy button
expandable: boolean, // Whether the component can be expanded
expandOnClick: boolean, // Expand on click
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
decoration: string, // Decoration
editModeValue: string, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// link component
export class LinkComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
filterVariation: string, // Filter type: 'includes', 'equal'
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc
mappedValue: string, // Tag mapper
text: string, // Text
lines: number, // Lines number
textStyle: object, // See detailed description below
color: string, // See detailed description below
openInNewTab: boolean, // Open in new tab
decoration: string, // Decoration
required: boolean, // Required field
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
editModeValue: string, // Only for edit mode. Affects the input’s value
triggers?: {
linkClick: CodeString[], // On Click event
},
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// boolean component
export class BooleanComponent extends BaseComponent {
trueText: string, // True text
falseText: string, // False text
helpTooltip: string, // Help tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
required: boolean, // Required field
filterVariation: string, // Filter type: 'logical equal'
display: string, // Display
decoration: string, // Decoration
textStyle: object, // See detailed description below
color: string, // See detailed description below
status: string, // Status
controlType: string, // Type of control: 'checkbox', 'toggle'
fontSize: string, // Font size
editModeValue: boolean, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// dateTime component
export class DateTimeComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
showCopyButton: boolean, // Show copy button
filterVariation: string, // Filter type: 'includes', 'range', 'equal'
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
dateFormat: string, // See all supported formats below
timeFormat: string, // See all supported formats below
required: boolean, // Required field
decoration: string, // Decoration
textStyle: object, // See detailed description below
color: string, // See detailed description below
fontSize: string, // Font size
allowResetValue: boolean, // Show reset button
withSeconds: boolean, // With seconds
twelveHoursFormat: boolean, // Use Twelve Hours format
timeStep: object
{
active: boolean, // Whether the time step is enabled
step: value, // Defines the time interval (in minutes) between the items displayed in the time picker; default - 60
}
minDate: date | moment, // The minimum selectable date (for example, minDate: new Date(2025, 9, 1) | minDate: moment('2025-09-01'))
maxDate: date | moment, // The maximum selectable date (for example, maxDate: new Date(2027, 9, 1) | maxDate: moment('2027-09-01'))
timezone: string, // Timezone
startView: string, // Start view
firstDayOfWeek: string, // First day of week
editModeValue: date | moment, // Only for edit mode. Affects the input’s value. Example: editModeValue: new Date(2025, 9, 1) | editModeValue: moment('2025-09-01')
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// currency component
export class CurrencyComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
filterVariation: string, // Filter type: 'includes', 'range', 'equal'
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
range: object
{
min: value, // Minimum allowed value
max: value // Maximum allowed values
}
required: boolean, // Required field
currencyCode: string, // Currency
fraction: string, // Fraction
display: string, // Display
textStyle: object, // See detailed description below
color: string, // See detailed description below
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
locale: string, // Locale
disableFormatting: boolean, // Disable number formatting
showCopyButton: boolean, // Show copy button
fontSize: string, // Font size
decoration: string, // Decoration
icon: string, // Icon
iconPlacement: string, // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc)
editModeValue: number, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// button component
export class ButtonComponent extends BaseComponent {
text: string, // Text
showLoading: boolean, // Show loading
status: string, // Status
appearance: string, // Appearance
icon: string, // Icon
iconPlacement: string, // Position of the icon relative to the component: 'left' | 'center' | 'right' | 'none'
linkInfo: object
{
active: 'internalPath' | 'externalPath', // Defines which link type is used
internalPath: string, // Path for internal navigation (e.g., '/dashboard')
externalPath: string, // URL for external navigation (e.g., 'https://example.com')
}
queryParams: boolean, // Query params
openInNewTab: boolean, // Open in new tab
fieldTooltip: string, // Field tooltip
triggers?: {
buttonClick: CodeString[], // On Click event
},
alignment: string, // Alignment
}
// contextMenuButton component
export class ContextMenuButtonComponent extends BaseComponent {
text: string, // Text
showLoading: boolean, // Show loading
status: string, // Status
appearance: string, // Appearance
icon: string, // Icon
iconPlacement: string, // Position of the icon relative to the component: 'left' | 'center' | 'right' | 'none'
contextMenuTrigger: string, // Menu trigger
contextMenuPosition: string, // Menu position
contextMenuAdjustment: string, // Menu adjustment
contextMenuItems: object, // Menu items
fieldTooltip: string, // Field tooltip
triggers?: {
buttonClick: CodeString[], // On Click event
menuItemClick: CodeString[], // On Menu Item Click event
},
alignment: string, // Alignment
}
// select component
export class SelectComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
filterVariation: string, // Filter type: 'includes', 'equal'
fieldTooltip: string, // Field tooltip
required: boolean, // Required field
viewTooltip: string, // See detailed description below
options: array // The list of selectable options for this field
{
value: string,
color: string, // See available colors below
}
appearance: string, // Appearance
withOptionsAutocomplete: boolean, // Enable options autocomplete
mappedValue: string, // Tag mapper
mappedColor: string, // Tag color mapper
allowResetValue: boolean, // Allow reset value
editModeValue: string, // Only for edit mode. Affects the input’s value
triggers?: {
autocompleteChange: CodeString[], // On Autocomplete Search event
tagClick: CodeString[], // On Tag Click event
},
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// multiselect component
export class MultiselectComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
filterVariation: string, // Filter type: 'intersection', 'includes'
fieldTooltip: string, // Field tooltip
required: boolean, // Required field
viewTooltip: string, // See detailed description below
options: array // The list of selectable options for this field
{
value: string,
color: string, // See available colors below
}
appearance: string,
mappedValue: string, // Tag mapper
mappedColor: string, // Tag color mapper
withOptionsAutocomplete: boolean, // Enable options autocomplete
allowResetValue: boolean, // Show reset button
allowSelectAll: boolean, // Show select all option
editModeValue: string, // Only for edit mode. Affects the input’s value
triggers?: {
autocompleteChange: CodeString[], // On Autocomplete Search event
tagClick: CodeString[], // On Tag Click event
},
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// file component
export class FileComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
fileInputType: string, // File input type
fileUploadType: object // File upload type
{
fileType: 'any',
userDefinedTypes: [], // Upload configuration: main file type and optional array of user-defined types
}
maxFileSize: number, // Max file size (Mb)
multipleFileUpload: boolean, // Enable multiple file upload
appendFiles: boolean, // Enable append new files to existing ones
required: boolean, // Required field
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// percent component
export class PercentComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
showCopyButton: boolean, // Show copy button
filterVariation: string, // Filter type: 'includes', 'range', 'equal'
fieldTooltip: string, // Field tooltip
mappedValue: string, // Tag mapper
viewTooltip: string, // See detailed description below
range: object
{
min: value, // Minimum allowed value
max: value // Maximum allowed values
}
required: boolean, // Required field
display: string, // Format
fraction: string, // Fraction
textStyle: object, // See detailed description below
color: string, // See detailed description below
status: string, // Status
regexpPattern: string, // Regexp pattern
regexpPatternErrorMessage: string, // Regexp pattern error message
view: string, // Type
displayValue: boolean, // Display value
locale: string, // Locale
disableFormatting: boolean, // Disable number formatting
decoration: string, // Decoration
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc)
editModeValue: number, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// jsonEditor component
export class JsonEditorComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
showCopyButton: boolean, // Show copy button
filterVariation: string, // Filter type: 'includes', 'equal'
viewTooltip: string, // See detailed description below
editDisplayMode: string, // Edit display mode
viewDisplayMode: string, // View display mode
lines: number, // Lines number
required: boolean, // Required field
editModeValue: string, // Only for edit mode. Affects the input’s value
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// date component
export class DateComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
showCopyButton: boolean, // Show copy button
filterVariation: string, // Filter type: 'includes', 'range', 'equal'
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
dateFormat: string, // See all supported formats below
required: boolean, // Required field
allowResetValue: boolean, // Show reset button
decoration: string, // Decoration
textStyle: object, // See detailed description below
color: string, // See detailed description below
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc)
minDate: date | moment, // The minimum selectable date (for example, minDate: new Date(2025, 9, 1) | minDate: moment('2025-09-01'))
maxDate: date | moment, // The maximum selectable date (for example, maxDate: new Date(2027, 9, 1) | maxDate: moment('2027-09-01'))
timezone: string, // Timezone
startView: string, // Start view
firstDayOfWeek: string, // First day of week
editModeValue: date | moment, // Only for edit mode. Affects the input’s value. Example: editModeValue: new Date(2025, 9, 1) | editModeValue: moment('2025-09-01')
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
// time component
export class TimeComponent extends BaseComponent {
helpTooltip: string, // Help tooltip
showCopyButton: boolean, // Show copy button
filterVariation: string, // Filter type: 'includes', 'range', 'equal'
fieldTooltip: string, // Field tooltip
viewTooltip: string, // See detailed description below
mappedValue: string, // Tag mapper
timeFormat: string, // See all supported formats below
required: boolean, // Required field
allowResetValue: boolean, // Show reset button
decoration: string, // Decoration
textStyle: object, // See detailed description below
color: string, // See detailed description below
fontSize: string, // Font size
icon: string, // Icon
iconPlacement: string, // Position of the icon relative to the component: 'left' | 'right' | 'none'
iconColor: string, // Predefined color for the icon (e.g. 'basic', 'primary', etc)
withSeconds: boolean, // With seconds
twelveHoursFormat: boolean, // Use Twelve Hours format
timeStep: object
{
active: boolean, // Whether the time step is enabled
step: value, // Defines the time interval (in minutes) between the items displayed in the time picker; default - 60
}
timezone: string, // Timezone
editModeValue: date, // Only for edit mode. Affects the input's value. Example: editModeValue: new Date(00, 00, 00)
labelConfig: object, // See detailed description below
labelWidth: number, // Width of the label in pixels
labelColor: string, // Color of the label text (any valid CSS color)
}
type textStyle = {
style?: ('bold', 'italic')[], // text style
transform?: 'uppercase' | 'lowercase' | 'capitalize' | 'none', // text transformation
}
type labelConfig = {
align: 'left' | 'center' | 'right'; // label alignment
position: 'vertical' | 'horizontal'; // label placement
}
type viewTooltip = string,
type viewTooltipMode = 'custom' | 'overflow' = 'overflow'; // Default is the Overflow mode; to configure a custom tooltip, specify the mode and the tooltip, for example, viewTooltipMode = 'custom', viewTooltip = 'Hello, world!'
type color = 'basic', 'alternate', 'disabled', 'hint', 'white', 'primary', 'success', 'info', 'warning', 'danger', 'primary-light', 'success-light', 'info-light', 'warning-light', 'danger-light', 'primary-dark', 'success-dark', 'info-dark', 'warning-dark', 'danger-dark', 'also any valid css color accepted here'
type length = {
min: null, // minimum length
max: null, // maximum length
}
type timeFormat // Default format options\n'HH:mm', 'HH:mm:ss', 'hh:mm aaa', 'hh:mm:ss aaa'\n\n// For custom format check\n// https://date-fns.org/docs/format\n\n// Empty string '', `null`, and `undefined` will hide time\n\n// If date format and time format are invalid,\n// we will fallback them to default 'MMM dd, yyyy HH:mm format'"
type dateFormat // Default format options
\n'yyyy-MM-dd', 'dd.MM.yyyy', 'MM-dd-yyyy', 'MM/dd/yy', 'MMM dd, yyyy',\n'MMMM dd, yyyy', 'dd MMM yyyy', 'MMM dd', 'MMMM dd', 'EEEE MMMM d, y'\n\n// For custom format check\n// https://date-fns.org/docs/format\n\n// Empty string '', `null`, and `undefined` will hide date\n\n// If date format and time format are invalid,\n// we will fallback them to default 'MMM dd, yyyy HH:mm format'"
Use case: Dynamic button group column in the table
To configure columns dynamically, you first have to create a JavaScript Code action and specify the columns configuration you need using the list of supported properties above. This is an example of the code we used to set up a button group column in the table:
const columns = [
{
"prop": "id",
"type": "number",
"primaryKey": true
},
"name",
{
"prop": "type",
"type": "select"
},
{
"prop": "avatar",
"type": "image"
},
"title",
"description",
];
const buttonColumns = Math.max(...state.tableData.map(row => row.buttons.length));
return [
...columns,
...Array.from({ length: buttonColumns }).map((item, i) => ({
"prop": "buttons",
"type": "button",
"title": i === 0 ? "Actions" : " ",
text: `\{\{value[${i}]?.title}}`,
viewContentHidden: `\{\{!value[${i}]}}`,
triggers: {
buttonClick: [`\{\{actions.onClick.trigger(value[${i}])}}`],
},
width: "100",
widthMode: "fixed",
}))
]
return columns;
Next, you need to assign this action to the table's Columns property in the JS mode. That's it!

Last updated
Was this helpful?