Context object.
The form result.
interface myInterface {
   myField: string;
   myNumber: string;
   hiddenField: string;
   disabledField: string;
 }
 const result = await showForm<myInterface>(ctx, {
   title: 'Title of the step',
   description: 'Description of the step',
   text: 'Message for the user',
   overlay: true,
   overlayProps: {
     blur: true,
     blurIntensity: 10,
     background: 'grey',
   },
   fields: [
     {
       type: 'group',
       fields: [
         {
           name: 'myField',
           type: 'text',
           label: 'Field label',
           defaultValue: 'Initial value',
           validation: [{type: 'required', message: 'This field is required'}],
           format: ['trim', 'uppercase', (value: string) => value + ' formatted'],
         },
         {
           name: 'myNumber',
           type: 'number',
           label: 'My number',
           validation: [
             {type: 'integer', message: 'Has to be integer'},
             {type: 'moreThan', moreThan: 1, message: 'Has to be more than 1'},
             {
               type: 'custom',
               fn: (value: number) => value >= 3,
               message: 'Has to be more then 3 custom',
             },
             {
               type: 'custom',
               fn: (value: number) => value < 15,
               message: 'Has to be lower then 15',
             },
           ],
         },
         {
           name: 'hiddenField',
           type: 'text',
           label: 'This field is hidden until myField has a value',
           hidden: async (data) => !data.myField,
         },
         {
           name: 'disabledField',
           type: 'text',
           label: 'This field is disabled until myNumber is valid',
           disabled: async (data) =>
             !(data.myNumber && data.myNumber < 15 && data.myNumber >= 3),
         },
       ],
     },
   ],
   buttons: [{value: 'ok', text: 'Submit'}],
 });
showForm supports the following options:
showForm supports the following field types:
// ...
fields: [
     {
       type: 'group',
       fields: [
         {
           type: 'horizontal',
           fields: [
             {
               name: 'myField1',
               type: 'text',
               label: 'Text field 1',
             },
             {
               name: 'myField2',
               type: 'text',
               label: 'Text field 2',
             },
           ],
         },
         {type: 'statictext', text: 'Static text'},
       ],
// ...
// ...
fields: [
     {
       type: 'group',
       fields: [
         {
           name: 'myField1',
           type: 'text',
           label: 'Text field',
         },
         {
           name: 'myField2',
           type: 'password',
           label: 'Password field',
         },
         {
           name: 'myField3',
           type: 'number',
           label: 'Number field',
         },
         {
           name: 'myField4',
           type: 'email',
           label: 'Email field',
         },
         {
           name: 'myField5',
           type: 'tel',
           label: 'Tel field',
         },
         {
           name: 'myField6',
           type: 'url',
           label: 'URL field',
         },
         {
           name: 'myField7',
           type: 'search',
           label: 'Search field',
         },
       ],
     },
   ],
 // ...
// ...
fields: [
     {
       type: 'group',
       fields: [
         {
           name: 'myField1',
           type: 'date',
           label: 'Date field',
         },
         {
           name: 'myField2',
           type: 'datetime-local',
           label: 'Date time field',
         },
         {
           name: 'myField5',
           type: 'month',
           label: 'Month field',
         },
         {
           name: 'myField5',
           type: 'time',
           label: 'Time field',
         },
         {
           name: 'myField5',
           type: 'week',
           label: 'Week field',
         },
       ],
     },
   ],
   // ...
// ...
fields: [
     {
       type: 'group',
       fields: [
         {
           name: 'myField2',
           type: 'checkboxlist',
           label: 'Checkbox list field',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
         },
         {
           name: 'myField3',
           type: 'radiolist',
           label: 'Radio list field',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
         },
         {
           name: 'myField4',
           type: 'segmented',
           label: 'Segmented field',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
         },
         {
           name: 'myField5',
           type: 'toggle',
           label: 'Toggle field',
         },
       ],
     },
   ],
   // ...

// a showForm with all possible field types
const result = await showForm<myInterface>(ctx, {
   title: 'Title of the step',
   description: 'Description of the step',
   text: 'Message for the user',
   overlay: true,
   fields: [
     {
       type: 'group',
       fields: [
         {
           type: 'horizontal',
           fields: [
             {
               name: 'myField1',
               type: 'text',
               label: 'Text field 1',
             },
             {
               name: 'myField2',
               type: 'text',
               label: 'Text field 2',
             },
           ],
         },
         {type: 'statictext', text: 'Static text'},
       ],
     },
     {
       type: 'group',
       fields: [
         {
           name: 'myField3',
           type: 'text',
           label: 'Text field',
         },
         {
           name: 'myField4',
           type: 'password',
           label: 'Password field',
         },
         {
           name: 'myField5',
           type: 'number',
           label: 'Number field',
         },
         {
           name: 'myField6',
           type: 'email',
           label: 'Email field',
         },
         {
           name: 'myField7',
           type: 'tel',
           label: 'Tel field',
         },
         {
           name: 'myField8',
           type: 'url',
           label: 'URL field',
         },
         {
           name: 'myField9',
           type: 'search',
           label: 'Search field',
         },
       ],
     },
     {
       type: 'group',
       fields: [
         {
           name: 'myField10',
           type: 'date',
           label: 'Date field',
         },
         {
           name: 'myField11',
           type: 'datetime-local',
           label: 'Date time field',
         },
         {
           name: 'myField13',
           type: 'month',
           label: 'Month field',
         },
         {
           name: 'myField14',
           type: 'time',
           label: 'Time field',
         },
         {
           name: 'myField15',
           type: 'week',
           label: 'Week field',
         },
       ],
     },
     {
       type: 'group',
       fields: [
         {
           name: 'myField17',
           type: 'checkboxlist',
           label: 'Checkbox list field',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
         },
         {
           name: 'myField18',
           type: 'radiolist',
           label: 'Radio list field',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
         },
         {
           name: 'myField19',
           type: 'segmented',
           label: 'Segmented field',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
         },
         {
           name: 'myField20',
           type: 'toggle',
           label: 'Toggle field',
         },
       ],
     },
   ],
   buttons: [{value: 'ok', text: 'Submit'}],
 });
showForm supports displaying images in the form. To display an image, use the image field type.
Only type and src are required properties.
The src property should be a base64 encoded image, like data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA....
It also supports Tiff images by making src start with data:image/tiff or data:image/x-tiff.
The image can be positioned horizontally in the bubble using the position property.
fields: [
{
     name: 'myField',
     type: 'image',
     src: 'base64 image code',
     alt: 'Image alt',
     label: 'My image',
     className: 'test-image',
     variant: 'full',
     width: '100px',
     height: '100px',
     fallback: 'base64 image code',
     position: 'end',
   },
]
fields: [
  {
     type: 'summary',
     label: 'Summary',
     statuses: [
       {text: 'Task 1', status: 'success'},
       {text: 'Task 2', status: 'info'},
       {text: 'Task 3', status: 'error'},
       {text: 'Task 4', status: 'warning'},
     ],
   }
]
fields: [
  {
     type: 'automation',
     items: [
       {
         title: 'Automation 1',
         description: 'Description 1',
         status: ProgressibleStatus.RUNNING,
       },
       {
         title: 'Automation 2',
         description: 'Description 2',
         status: ProgressibleStatus.DONE,
       },
     ],
   },
]
fields: [
  {
     type: 'verify',
     label: 'Verify label',
     value: 'true',
     verifyFailureText: 'Verification failed',
     verifyShowActualValue: true,
     verifySuccessText: 'Verification successful',
   },
]
showForm validation is an array of validation objects. Each object has a type property that specifies the type of validation, a message property that specifies the error message to display if the validation fails, and a property that is specific to the validation type.
showForm supports the following validation types:
String validation:
Dates validation:
Numbers validation:
// ...
fields: [
     {
       type: 'group',
       fields: [
         {
           name: 'myField1',
           type: 'text',
           label: 'Text field',
           validation: [
             {type: 'required', message: 'This field is required'},
             {
               type: 'custom',
               fn: (value: string) => value === 'test',
               message: 'This field must be "test"',
             },
             {
               type: 'length',
               length: 4,
               message: 'This field must be 4 characters long',
             },
           ],
         },
         {
           name: 'myField2',
           type: 'checkboxlist',
           items: [
             {value: '1', label: 'Option 1'},
             {value: '2', label: 'Option 2'},
           ],
           validation: [
             {
               type: 'minSelection',
               minSelection: 2,
               message: 'Select at least 2',
             },
           ],
         },
       ],
     },
   ],
   // ...
showForm supports the following transformation types:
// ...
fields: [
         {
           name: 'myField1',
           type: 'text',
           label: 'Text field',
           validation: [{type: 'required', message: 'This field is required'}],
           format: [
             'trim',
             'lowercase',
             (value: string) => value.replaceAll(' ', '-'),
           ],
         }
       ],
   // ...

   interface myInterface {
   myField: string;
   myNumber: number;
   hiddenField: string;
   disabledField: string;
   dynamicSelect: string;
 }
 const result = await showForm<myInterface>(ctx, {
   title: 'Title of the step',
   description: 'Description of the step',
   text: 'Message for the user',
   overlay: true,
   overlayProps: {
     blur: true,
     blurIntensity: 10,
     background: 'grey',
   },
   fields: [
     {
       type: 'group',
       fields: [
         {
           name: 'myField',
           type: 'text',
           label: 'Field label',
           defaultValue: 'Initial value',
           validation: [{type: 'required', message: 'This field is required'}],
           format: [
             'trim',
             'uppercase',
             (value: string) => value + ' formatted',
           ],
         },
         {
           name: 'myNumber',
           type: 'number',
           label: 'My number',
           validation: [
             {type: 'integer', message: 'Has to be integer'},
             {type: 'moreThan', moreThan: 1, message: 'Has to be more than 1'},
             {
               type: 'custom',
               fn: (value: number) => value >= 3,
               message: 'Has to be more then 3 custom',
             },
             {
               type: 'custom',
               fn: (value: number) => value < 15,
               message: 'Has to be lower then 15',
             },
           ],
         },
         {
           name: 'hiddenField',
           type: 'text',
           label: 'This field is hidden until myField has a value',
           hidden: async (data) => !data.myField,
         },
         {
           name: 'disabledField',
           type: 'text',
           label: 'This field is disabled until myNumber is valid',
           disabled: async (data) =>
             !(data.myNumber && data.myNumber < 15 && data.myNumber >= 3),
         },
         {
           name: 'dynamicSelect',
           type: 'select',
           label: 'Dynamic select',
           items: [
             {
               value: '1',
               label: 'One',
             },
             {
               value: '2',
               label: 'Two',
             },
             {
               value: '3',
               label: 'Three',
             },
           ],
           setDynamicItems: async (data) => {
             if (data.myNumber && data.myNumber < 15 && data.myNumber >= 3) {
               return [
                 {
                   value: '4',
                   label: 'Four',
                 },
                 {
                   value: '5',
                   label: 'Five',
                 },
               ];
             } else {
               return [
                 {value: '1', label: 'One'},
                 {
                   value: '2',
                   label: 'Two',
                 },
                 {
                   value: '3',
                   label: 'Three',
                 },
               ];
             }
           },
         },
       ],
     },
   ],
   buttons: [{value: 'ok', text: 'Submit'}],
 });
const result = await showForm(ctx, {
  title: 'Dynamic update example',
  fields: [
    {
      name: 'firstName',
      type: 'text',
      label: 'First Name',
    },
    {
      name: 'greeting',
      type: 'text',
      label: 'Greeting',
      disabled: true,
    },
  ],
  setDynamicValues: (data) => {
    if (data.firstName) {
      return { greeting: `Hello, ${data.firstName}!` };
    }
    return {greeting: ''};
  },
});
Shows a form with the provided schema and resolves to the content of the form.