How the Builder Works Overview
The visual form editor works on drag-and-drop principles: you drag components from the palette onto the canvas and configure their properties, while the platform generates the finished form for you.
Workspace
- Left palette: components are grouped into categories — "Basic" and "Layout" are always available; the "Advanced" and "Data" categories appear after enabling Advanced Mode. The top of the palette has a live search by component name.
- Working canvas: an interactive mock-up of the future form. A new component is inserted by dragging or by clicking a palette item (it is added to the end of the form).
- Quick actions panel: appears when you hover over a component on the canvas.
Component Actions
| Action | What it does |
|---|---|
| Settings | Opens the component properties dialog (see Common Settings Tabs). |
| Copy | Places the component with all nested fields and rules into the builder clipboard. |
| Paste below | Inserts a previously copied component under the current one. |
| Move | Lets you drag a component to another position without unwrapping the whole nesting chain. |
| Delete | Removes the component from the schema. Nested fields are deleted together with the container. |
| JSON | Direct editing of the component JSON schema. Available only in Advanced Mode. |
📌 Not Part of the Builder
Digital signature requirements (EDS/Ncalayer), geolocation policy, page branding and language translations are configured at the publication level — on the "General", "Design" and "Translations" screens of the manager.
Single-Page and Multi-Page Forms Modes
The mode switcher sits above the builder canvas:
📄 Single-Page
All questions are placed on one page. Suitable for short surveys, applications and questionnaires with up to 15–20 questions.
🗂 Multi-Page (Wizard)
The form is split into steps. The respondent goes through them sequentially, sees the progress and can go back without losing entered data.
Working in Multi-Page Mode
- Each page is a separate tab above the canvas. Add pages with the "+ Page" button.
- The page title is shown to the respondent in the navigation; configure it in the page properties.
- Pages can be renamed, reordered by dragging and deleted.
- The form submission button is automatically placed on the last page.
- Validation checks the current page before moving to the next one: the respondent cannot "leave" with unfilled required fields.
⚠️ Switching Modes
When converting a single-page form to multi-page mode, all existing fields end up on the first page — distribute them across steps manually. Switching back collects all fields onto a single page.
Common Component Settings Tabs Properties
The settings dialog opens with the button when hovering over a component. The set of tabs depends on the component type, but the basic set is the same:
| Tab | Main parameters |
|---|---|
| Display | Field label, in-field hint (Placeholder), description under the field, tooltip, prefix and suffix, label hiding, extra CSS classes, Tab key navigation. |
| Data | Default value, behavior when hidden fields are cleared, form recalculation on value change. |
| Validation | Required field, minimum/maximum length, regular expression, minimum/maximum value (for numbers and dates), custom error message text. |
| API Properties | Field key (Property Name) — the name under which the value appears in the response, webhook and Excel export. Extra Key-Value metadata for integrations. |
| Conditional Visibility | Rules for component visibility depending on responses (see Conditional Visibility). |
| Layout | Field width in the 12-column grid (including mobile devices), offset, automatic size. |
💡 Field Key (Property Name)
Use meaningful Latin keys (full_name, iin, work_phone): responses arrive in the webhook, Excel export and external API under these names. The key is generated automatically from the label, but it is better to check and rename it manually — changing the key after a publication goes live will break the continuity of historical data.
Common Field Properties Reference
These settings exist for most builder fields. They are grouped by the tabs of the component properties dialog; component-specific settings are described in the Detailed Component Settings section.
The Advanced mark means the property is available only after enabling Advanced Mode.
Display Tab
| Property | Description |
|---|---|
| Label (Field Title) | The field name the respondent sees. |
| Label Position | Position of the label relative to the field: top, left, right, bottom. |
| Label Width / Label Margin | Label width and the margin after it as a percentage of the row width (for horizontal positioning). |
| Description | Text under the field: explanations, format, sample input. |
| Tooltip | Text of the "?" icon next to the label; shown on hover/focus. |
| Custom CSS Class | Extra class for targeted field styling. |
| Tab Index | Overrides the Tab key navigation order. |
| Hidden | The field is invisible to the respondent, but the value is still submitted (for technical values). |
| Hide Label | Show the field without a title (for example, inside grids). |
| Autofocus | The cursor is automatically placed in this field. |
| Disabled (Read Only) | The field is visible but cannot be changed. |
| Show in Table | The value is displayed in the tabular view of responses (affects submission viewing and exports). |
| Modal Edit | Long values are edited in a popup window. |
| Show Label in DataGrid | Show the field label inside every data grid row. |
Data Tab
| Property | Description |
|---|---|
| Default Value | A pre-filled value before the user enters data. |
| Persistent | Whether the value is included in the submitted form data (usually "Yes"). |
| Protected | The value is saved but is not returned to external systems via the API and webhooks. |
| Database Index | Creates a database index on the field (for large forms; requires a DB administrator). |
| Encrypted | The value is encrypted on the server side. |
| Redraw On | Redraw the component when the specified field changes (for complex display logic). |
| Clear Value When Hidden | If the field is hidden by a condition, its value is not included in the submission. |
| Custom Default Value (JS) Advanced | A default value computed by a JavaScript expression. |
| Calculated Value (JS) Advanced | Automatic calculation of the value from other fields (for example, a table sum). |
| Calculate Server Side Advanced | The calculation runs on the server instead of the browser. |
| Allow Manual Override of Calculated Value Advanced | The user can override the calculated value. |
| Server Overriable (JSON) Advanced | JSON with component settings substituted on the server. |
Validation Tab
| Property | Description |
|---|---|
| Required | Blocks form submission with an unfilled field. |
| Validate On | Validation moment: on change, on blur or on form submission. |
| Validate When Hidden | Validate the field even when it is hidden by a condition. |
| Error Label | How the field is named in error messages (handy for long labels). |
| Custom Error Message | The text the respondent sees when a rule is violated; translated into all form languages. |
| Custom JS Validation, JSONLogic Advanced | Arbitrary validation rules — see Advanced Mode. |
API Properties Tab
| Property | Description |
|---|---|
| Property Name | The field name in the submission, webhook, Excel export and external API. Use meaningful Latin keys and do not change them after a publication goes live. |
| Field Tags | Arbitrary tags for grouping fields in custom logic. |
| Additional Metadata (Key-Value) | Arbitrary pairs for external integrations. |
Conditional Visibility Tab
| Property | Description |
|---|---|
| This component should display: | "True" — show when the condition is met, "False" — hide when met. |
| When the form component: / Has the value: | Simple condition builder: select a field and the value to compare. More details — Conditional Visibility. |
| JSON condition (Custom Conditional) Advanced | A condition in JSONLogic format for compound rules. |
Layout Tab
| Property | Description |
|---|---|
| Column width / offset | Field width in the 12-column grid (including mobile and tablet breakpoints) and the left offset. |
| HTML Attributes | Arbitrary HTML attributes for the input element. |
Logic Tab Advanced
Rules of the form "when trigger → perform action". Full description — in the Advanced Mode section.
| Element | Description |
|---|---|
| Logic name / Type | Rule name and trigger type: simple condition, JavaScript or JSONLogic. |
| "When / Equals" trigger | Comparison of a field with a value (as in conditional visibility). |
| "Component Property" action | Change a field property (for example, make it required). |
| "Set State" / "Text" action | Mark the field as invalid with an arbitrary message. |
| "Value (Javascript)" action | Calculate and set the field value. |
| "Schema Definition" action | Merge a schema fragment into the current component. |
| "Custom Action (Javascript)" action | Arbitrary code executed when the trigger fires. |
| "Event Name" action | Emit a form event. |
Conditional Visibility Logic
Conditional visibility lets you show or hide questions depending on the respondent's previous answers. It is configured in the "Conditional" tab of the properties dialog:
- Specify whether the component should be displayed when the condition is met (True) or when it is not (False).
- Select the source field of the condition from the dropdown of all form components.
- Set the value to compare. The condition fires on an exact match of the answer with the specified value.
Example
The field "Enter your driver's license number" is displayed only when the "Car ownership" switch is set to "Yes".
Fields hidden by a condition are not included in the submission unless explicitly allowed in the component settings. For complex conditions (multiple fields at once, number comparisons, computed expressions) use Advanced Mode — JSONLogic conditions.
Basic Fields Components
The main building blocks for collecting information from respondents, available without extra modes.
Text Field
Single-line input: full name, address, arbitrary text.
Text Area
Comments, reviews, extended answers.
Number
Age, amounts, quantitative indicators.
Password
Input with masked characters.
Checkbox
Consent to terms, a single yes/no switch.
Checkbox Group
Multiple choice: the respondent marks any number of options.
Select (Dropdown)
Choosing one or more options from a compact list.
Radio
Single choice from 2–5 options (gender, yes/no).
Button
Action buttons inside the form: submit, reset, custom logic.
File Uploads File Security
Two specialized upload components with mandatory antivirus scanning.
File
Documents, scans, PDFs, archives.
Photo / Video
Images and videos with previews.
Secure File Processing Pipeline
- The respondent selects a file in the form.
- The file is sent to the platform's protected file gateway and placed in a temporary isolated buffer.
- The ClamAV service scans the file for viruses and malicious signatures.
- A clean file is saved to protected S3 storage, and a safe unique file UUID is written into the form submission.
- If a virus is detected — the upload is blocked and the file is immediately destroyed.
The maximum file size is set by an administrator in "System Settings". Programmatic downloading of uploaded files and access policies are described in the File Downloads (File API) section.
Layout & Grids Layout
Components that do not collect data but structure the form: group fields, style text and control placement.
HTML Element
Inserting arbitrary HTML markup: headings, dividers, links.
Content (Text Block)
Formatted explanatory text: instructions, disclaimers, contact blocks.
Columns
Placing fields in one row on the 12-column grid: for example, "First name" (6) and "Last name" (6).
Fieldset
A logical group of fields with a common title and frame (legend).
Panel (Card)
A container with a title and styling. Splits long surveys into meaningful blocks ("Personal data", "Work experience").
Table
A fixed "rows × columns" grid for complex layouts and cross tables.
Tabs
Switchable tabs within a single form page.
Well (Bordered Container)
A block with a background for visually highlighting a group of fields or text.
Advanced Fields Advanced Mode
These components appear in the palette after enabling Advanced Mode in "System Settings".
An email address with built-in format validation.
URL
A website or resource address with URL correctness validation.
Phone Number
A phone number with an input mask.
Tags
Entering a list of values as "chips": skills, keywords.
Address
A structured address or geo-search via an external provider.
Date & Time
Picking a date and/or time from a calendar.
Day (Date)
A date from three dropdown lists: day, month, year.
Time
Choosing a time (hours:minutes) without a date.
Currency (Amount)
A monetary amount with formatting.
Survey Matrix
A "question × answer option" table: the respondent marks cells (for example, satisfaction with parameters).
Signature
A handwritten signature with a mouse or stylus on a touch screen.
Data Components Advanced Mode
Containers for organizing the structure of responses and repeating blocks. Available in Advanced Mode.
Container
Groups nested fields into a separate response object: passport: {number, issued}.
Data Grid (Table)
Repeating rows with a fixed set of columns: family members, addresses, goods.
Data Map (Key-Value)
Arbitrary "key → value" pairs entered by the respondent on the fly.
Edit Grid (EditGrid)
Repeating blocks of arbitrary complexity: each row is an expandable form.
Hidden
A field invisible to the respondent: technical values, data from the URL, computed constants.
Detailed Component Settings Reference
An exhaustive list of settings for the most demanded components of corporate forms. Common properties (label, description, requiredness, API key, etc.) are listed in the Common Field Properties section — only specifics are shown here.
The set of settings matches the current platform version. The Advanced mark — the property is available in Advanced Mode.
Text Field, Text Area, Number
Common text input settings
| Property | Description |
|---|---|
| Placeholder | Gray sample text in an empty field; not included in the data. |
| Prefix (left icon) / Suffix (right icon) | Constant text inside the field: currency, units, "+7". |
| Widget + widget settings | An alternative input control (for example, a calendar). Leave "Input string" if no special scenario is needed. |
| Input Mask | A strict format template: 9 — digit, a — letter, * — letter or digit. Phone example: +7(999)999-99-99. |
| Display Mask | Pretty display of the input that does not change the saved value. To make the mask affect the value as well, use only the "Input Mask". |
| Apply Mask On | Change (default) — the mask is checked on every change; Blur — when leaving the field. |
| Input Mask Placeholder Char | The placeholder character for unfilled mask positions; if it occurs inside the mask itself, it is replaced with a space. |
| Allow Multiple Masks + mask list | Several alternative masks: the field gets a dropdown for choosing the required format. |
| Calendar widget (Widget) | Turns a text field into a date picker with a string value: display format and storage format are configured separately, the value does not depend on the user's time zone. For full-fledged date handling, prefer the "Date & Time" component. |
| Browser Autocomplete | Standard browser hints (off, name, email, tel…). |
| Spellcheck | Browser highlighting of spelling errors. |
| Show character/word counter | A live counter under the field; useful together with length limits. |
| Masked input | The input is masked (like a password); the value is stored in plain text — do not use it for secrets. |
| Allow multiple values (multiple) | The field accepts an array of values; in exports and the API — a list. |
| Input Format (inputFormat) | Value sanitization: text / "raw" / HTML (XSS protection). |
| Text Case | Automatic conversion to upper/lower case. |
| Truncate Multiple Spaces | Collapse repeated spaces. |
| Unique value in database | Server-side check that such a value has not been submitted before in this publication. |
| Min/max length, Regular expression, Min/max words | Text constraints; expression recipes — Validation Recipes. |
Text Area only
| Property | Description |
|---|---|
| Rows | Initial field height in rows (3 by default). |
| Auto Expand | The field automatically grows in height while typing. |
| Editor | Plain text or a visual formatting editor (bold, lists). Note: rich text in forms can harm accessibility (WCAG) — use it deliberately. |
| Editor Settings (JSON) | JSON configuration of the visual editor (toolbar, styles). Advanced |
| Enable Image Upload + storage/URL/directory/file key | Inserting images into the editor text. Usually disabled for corporate forms — collect files with the "File" component instead. |
| Save As | Value storage format: string, JSON or HTML. |
Number only
| Property | Description |
|---|---|
| Use Thousands Separator | Separate thousands with a space/comma (1 000 000). |
| Decimal Places | Maximum number of decimal places. |
| Require Decimal | Always show decimal places, including zeros (10.00). |
| Decimal Symbol Advanced | The decimal separator symbol (for example, a comma); hidden in the dialog — set it in the schema JSON as "decimalSymbol": ",". |
| Minimum / Maximum (validation) | The allowed number range; used in reporting and calculations. |
| Integer (validation) | Allow only whole values without a fractional part. |
| Step (validation) | Value granularity (multiples of the step); "any" by default. |
Checkbox, Checkbox Group, Radio
Checkbox only
| Property | Description |
|---|---|
| Input Type | HTML control type (checkbox or radio button). |
| Radio Key (name) | Group name: several checkboxes with the same name work as a radio selection. |
| Radio Value | The value submitted when the checkbox is checked ("true" by default). |
| Shortcut | Quick keyboard access to the field. |
Common options settings (Checkbox Group and Radio)
| Property | Description |
|---|---|
| Values | Options table: Label — what the respondent sees, Value — what is saved in data and reports (strings or numbers only!), Shortcut — hotkey. The order of options changes by dragging. |
| Options Label Position | Position of option captions (right/left/top/bottom). |
| Inline Layout | Options in one line (compact) or as a list. |
| Data source type (dataSrc) | Options are set manually or loaded from a URL (JSON array): Data Source URL, Value Property, option display template. |
| Data type (dataType) — Radio only | Type of the saved value: string, number, boolean, object. |
| Authenticate / Disables caching — for URL sources | Request authorization and response caching. Leave disabled for SuraqHub dictionaries — the endpoint is public within the form. |
The "Checkbox Group" additionally has: Minimum/Maximum checked number — minimum and maximum number of checked options with error texts (Minimum/Maximum checked error message). When the maximum is reached, the remaining options are automatically deactivated.
For the "Radio": clicking the selected option again clears the selection (the respondent can leave the question unanswered after clicking — use "Required" if this is unacceptable).
Select (Dropdown)
Data source
| Property | Description |
|---|---|
| Data source type (dataSrc) | Values — manual list (label/value); URL — JSON from an external source, including platform dictionaries /api/v1/dictionaries/{code}; JSON — paste the array directly into the setting; Custom — JavaScript function Advanced. The "Resource" mode is not used in SuraqHub. |
| Data Source URL | Address of the JSON array of options. For dictionaries — the renderer's Runtime Dictionary API. |
| Data Source Raw JSON | An array of options in JSON format right in the setting. |
| Value Property | Which field of the JSON element counts as the value (for example, code) and which as the caption (via a template). If left empty — the entire object is saved as the answer. |
| Data Path (selectValues) | Path to the array inside the response if the JSON is wrapped (for example, data.items). |
| ID Path / Select Fields | The identifier field and the list of returned fields (for server sources). |
| Item Template | HTML template of the option row (several element fields can be shown). |
| Data type (dataType) | Casting of the saved value: string, number, boolean, object. |
| Allow multiple values (multiple) | Multiple selection; an array in the data. |
| Unique Options | Hide duplicate options. |
| Widget Type | A modern searchable list (Choices) or the native HTML5 <select>. |
Server-side filtering and search (for URL sources)
| Property | Description |
|---|---|
| Search Query Name | Name of the query parameter the search phrase is put into. |
| Search request delay | Delay before sending the search request in seconds (0.3 by default), so that a request is not sent for every character. For example, URL …/dictionaries/orgs + parameter q + phrase "tax" → request …/dictionaries/orgs?q=tax. |
| Minimum Search Length | Minimum phrase length before the search starts. |
| Enable Static Search | Search over the already loaded list (no server requests). |
| Use exact search | Exact match instead of fuzzy search. |
| Search Threshold | Fuzziness threshold: 0.0 — exact matches only, 1.0 — everything matches; 0.3 by default. |
| Filter Query / Sort Query | Extra query parameters for filtering and sorting. Sorting syntax: created — ascending, -created — descending, data.field_name — by a response field (minus — descending). |
| Request Headers | Arbitrary headers for the URL source (for example, an external API token). Advanced |
| Limit | Limit on the number of loaded options. |
| Disable limiting response | Do not send limit/skip in the request (load everything). |
| Lazy Load Data | Request options only when the list is opened, not on form load. |
| Disable Options Refresh When Scrolling | Do not load more options while scrolling the list. |
Behavior and integrations
| Property | Description |
|---|---|
| Refresh Options On / On Blur | Reload the options when another field changes/blurs (cascading lists: country → city). |
| Clear Value On Refresh Options | Reset the selected value when the list is refreshed. |
| Placeholder | Text of the empty list ("— select —"). |
| Read Only Value | In read-only mode show the "raw" value instead of the caption. |
| Choices.js options (customOptions) | Raw JSON config of the list. Advanced |
| Add Resource / Add Resource Label, Save as reference | Creating records of the built-in resource storage. Not used in SuraqHub. |
| "Only available items" check | Forbid values missing from the list (recommended for reference fields). |
| Unique value in database | Server-side uniqueness check of the answer. |
Date & Time
All settings
| Property | Description |
|---|---|
| Enable date / time picking | Separate switches: the date field, the time fields or both. |
| Date display format | Format mask (yyyy-MM-dd hh:mm a by default, for example dd.MM.yyyy); also defines how the user types the value. The value is always stored in ISO 8601 — convenient for filtering and reporting. |
| Allow Manual Input | Typing the date with the keyboard (enabled by default); if disabled — calendar selection only. |
| Use Locale Settings | Format per the respondent's browser locale. |
| Display in Timezone / Select Timezone | In which time zone to show the saved value: viewer's locale, submission zone, a fixed zone from the list or UTC. For multi-region forms. |
| Default Date | Default date; supports moment expressions, for example moment().subtract(10, 'days') — "10 days ago". Advanced |
| Minimum Date / Maximum Date | Range of allowed dates (birth dates, acceptance periods). The "Use Input…" switches allow setting boundaries with a moment expression. Advanced |
| Disable weekends / Disable weekdays | Forbid weekends or, conversely, weekdays. |
| Disable specific dates | A blacklist of dates in the (yyyy-MM-dd) format or ranges (yyyy-MM-dd - yyyy-MM-dd). |
| Disabling dates by a function | A JS function forbidding dates, for example date.getDay() === 0 || date.getDay() === 6 — all Sundays and Saturdays. Advanced |
| Hour Step Size / Minute Step Size | Step of the hour and minute arrows in the time selector. |
| 12-hour format (AM/PM) | 12-hour time display. |
| Flatpickr options (customOptions) | Raw JSON config of the calendar. Advanced |
| Allow multiple values (multiple) | A list of dates. |
Button
All settings
| Property | Description |
|---|---|
| Action | Submit — form submission; Save in state — save a draft under the state name without validation (the "Save as draft" button); Reset — return all fields to the initial state; Event — emit an event for the form logic; URL — submit the submission to the specified address; Custom — a JavaScript handler Advanced. |
| Label / Value | The button text and the technical value of the click in the data. |
| Theme | Color style: primary, secondary, info, success, warning, danger, link. |
| Size / Block Button | Button size and stretching over the full container width. |
| Left Icon / Right Icon | Icons to the left/right of the text (an icon CSS class, for example bi bi-send). |
| Disable on invalid (disableOnInvalid) | The button is inactive while the form has validation errors. |
| Show Validations | Show all form validation errors on click. |
| Save On Enter | Form submission with the Enter key. |
| Shortcut | Hotkey for the click. |
| OAuth Provider | Login via an external OAuth provider. Not used in SuraqHub — authentication is at the publication level. |
File and Photo / Video
All settings
"Photo / Video" is the same "File" component with preset Display as image(s) and the image/*,video/* pattern. Uploads always go through the platform's protected file gateway with ClamAV scanning.
| Property | Description |
|---|---|
| Storage / Upload URL | Storage type and upload address — configured by the platform. Do not change manually. |
| Allowed file types | Pattern of allowed types: .pdf,.docx, image/*, application/*. Empty — any files. |
| Minimum / Maximum file size | Restrictions in bytes or with a suffix (for example, 10MB). The overall maximum is set in "System Settings". |
| Allow multiple values (multiple) | Uploading several files into one field. |
| Display as image(s) | Show image thumbnails instead of a list of links. |
| Image Size | Size of the image previews. |
| Enable web camera / Webcam Width | Taking a photo with the device camera right in the form. |
| Enable device capture | On mobile, open the camera/microphone directly in capture mode. |
| Upload Only | Upload only: downloading from the form is forbidden (files are available to operators via the File API). |
| Private Download | Downloading via an authorized POST request (for protected files). |
| Directory / File Name Template | Storage directory (must end with /) and the template of the uploaded file name; configured by the platform. |
| File form-data key | Name of the multipart request field during upload; fixed by the platform. |
| Use the S3 Multipart Upload API / Part Size | Multipart upload of large files directly to S3. Not used in SuraqHub — the upload gateway is our own. |
Data Grid (Table)
All settings
Grid columns are any components dragged inside. In data and exports the grid is saved as an array of objects.
| Property | Description |
|---|---|
| Number of Rows | Number of rows added on form load. |
| Initialize Empty | Show no rows until the user adds them. |
| Disable Adding / Removing Rows | Hide the add/remove row buttons (a fixed table). |
| Conditional Add Button | A condition under which the add-row button is shown. Advanced |
| Add Another Text | Custom caption on the add-row button. |
| Add Another Position | Placement of the add button (top/bottom/both). |
| Allow Reorder | Dragging rows to change the order. |
| Equal column width | Equal-width columns instead of auto-fitting. |
| Enable Row Groups / Hide Group on Header Click | Grouping rows by expression and collapsing groups by clicking the header. Advanced |
| Min/max rows (validation) | Limit on the number of filled rows. When the minimum is reached the row delete button hides, when the maximum is reached — the add button. |
Edit Grid (EditGrid)
All settings
A relative of the "Data Grid": each row is an expandable form (editing in a modal window by default). Suitable for blocks of many fields: education, work history, inquiries.
| Property | Description |
|---|---|
| Display as Modal | Adding/editing a row in a modal window (by default) or inline editing in place. |
| Inline Editing | Changes in edit mode are saved into the form response immediately, without a row confirm button. |
| Open First Row when Empty | The first row is open for filling right away when the table is empty. |
| Disable Adding / Removing Rows | Hide the add/remove row buttons (a fixed set). |
| Conditional Add Button | A condition for showing the add-row button. Advanced |
| Add Another Text / Save Row Text / Remove Row Text | Custom captions on the add, save and remove row buttons. |
| Header / Table Header / Row / Table Row / Footer Template | HTML templates of the header, row and footer in view mode (for example, show a row as "Full name — position" in one line). Advanced |
| Row CSS Class | Extra CSS class of the editable row wrapper. Advanced |
| Enable Row Drafts | Allow saving a row as a draft even if its fields fail validation. |
| Min/max rows (validation) | As in the Data Grid: buttons hide themselves at the limits. |
Address
All settings
An address field with two modes: autocomplete from an external geo-service or manual structured input. For corporate networks without access to external mapping APIs, use manual mode.
| Property | Description |
|---|---|
| Enable Manual Mode | Allow manual address entry (without the geo-service). A reliable option for internal networks. |
| Switch To Manual Mode Label | Caption of the "Enter manually" switch. |
| Disable Clear Icon | Hide the quick value-clear icon. |
| Provider | Autocomplete provider (Google, Azure Maps, etc.). Requires a key and service availability from the respondent's network. |
| API Key / Subscription Key | Keys of the corresponding providers. |
| URL / Query Property / Params | Your own geo-service: search address, name of the query parameter with the search phrase, extra parameters as a JSON object. Advanced |
| Response Property / Display Value Property | Path to the address array in the response and the field for displaying the option. Advanced |
| Manual Mode View String | Template of the address line in manual input. Advanced |
| Placeholder / Multiple values / Default value | As in regular text fields. |
Currency (Amount)
Specific settings only
A variety of the number field with a currency mask: thousands separators are placed automatically. Common text input properties (masks, prefix/suffix, input masking) — as in text fields.
| Property | Description |
|---|---|
| Currency | Currency choice — defines the prefix symbol in the field and the amount display format. |
| Prefix / Suffix | Extra text around the amount (for example, "tenge"); the currency already adds its own symbol. |
| Minimum / Maximum / Integer (validation) | Amount range and forbidding cents — for fields like "contract amount". |
Signature
Specific settings only
A handwritten signature with a mouse or stylus; saved as an image in the form response. Do not confuse it with the EDS (Ncalayer) — the cryptographic signature is enabled by publication settings.
| Property | Description |
|---|---|
| Width / Height | Dimensions of the signature canvas. |
| Keep Overlay Aspect Ratio | The preview keeps the canvas proportions. |
| Background Color / Pen Color | Canvas background color and pen color. |
| Footer Label | Text under the canvas (for example, "Applicant's signature"). |
Tags
Specific settings only
Entering a list of values as "chips" (each value is a separate tag); an array of strings is saved in the response.
| Property | Description |
|---|---|
| Delimiter | Which character separates one tag from another while typing (comma, space, Enter). |
| Max Tags | Maximum number of tags. |
| Store As (Storeas) | Array storage format: a delimited string or a real array. Advanced |
| Default Value | Pre-filled tags. |
Practical Scenarios How-To
Ready recipes for typical tasks: which components and settings to combine to get the required form behavior.
📋 Scenario 1. IIN/BIN field with a mask and validation
- Add a Text Field, name it "IIN/BIN".
- In "Display" set the Input Mask
999999999999— exactly 12 digits — and Browser Autocomplete =off. - In the "Validation" tab: enable Required, set the Regular expression
^\d{12}$and a clear error text: "The IIN/BIN consists of 12 digits". - In "API Properties" check the field key — for example,
iin_bin: reports and webhooks will receive the value under this name.
Result: the respondent physically cannot enter letters or extra digits, and the server rejects a wrong length even if the form is submitted programmatically.
🗺 Scenario 2. Cascading lists "Region → City"
- Create two Dropdown (Select) fields: "Region" and "City".
- Set both to Data source type = URL and the dictionary address (your own REST endpoint or a platform dictionary
/api/v1/dictionaries/{code}). - For the "City" list, in the Refresh Options On field select the "Region" component — the city list will reload when the region changes.
- Enable Clear Value On Refresh Options — when the region changes, the previously selected city resets (otherwise a city from a foreign region remains).
- In the city URL source, pass the selected region as a parameter:
?region={{ data.region }}— this way the server returns only matching cities.
Enable Lazy Load Data on both lists so the dictionaries load only when opened, not on form load.
✅ Scenario 3. Data processing consent checkbox
- Add a Checkbox labeled "I consent to the processing of personal data".
- In the "Validation" tab enable Required and set the error text: "Consent to personal data processing is required".
- Place the checkbox as the last field before the submit button; add the policy link via a Content (Text Block) above the checkbox.
Do not set "Default value = checked" for the checkbox: consent must be a deliberate action.
💾 Scenario 4. A "Save draft" button
- Add a Button next to the main submit button.
- In "Action" choose Save in state and specify a state name, for example
draft. - Turn off Show Validations and Disable on invalid — a draft must save even with unfilled required fields.
- Set the button theme to "secondary" to visually distinguish it from the main submit button.
For periodic forms, drafts work together with the "Continue current report" setting — the respondent can fill in the survey gradually during the period. Details: Periodic Reporting.
👨👩👧 Scenario 5. A "Family members" table with limits
- Add a Data Grid (Table) "Family members".
- Drag fields inside: full name (Text Field), date of birth (Date & Time), degree of kinship (a dictionary-based Dropdown).
- In the "Validation" tab set Minimum/Maximum rows — for example, minimum 1, maximum 10.
- In "Add Another Text" write "+ Add a family member", and set "Number of Rows" to 1.
In the Excel export every table row lands in the response as a separate object of the family_members array — identical field keys inside the rows are mandatory.
📚 Scenario 6. A dropdown from a platform dictionary
- Create a Dropdown (Select), data source — URL.
- Specify the dictionary address:
/api/v1/dictionaries/{dictionary code}— the data is managed in the reference data catalog, without rebuilding the form. - Set the Value Property according to the dictionary structure (for example,
code) and configure the caption with the Item Template. - Enable the "Only available items" check so the respondent cannot submit a value outside the dictionary.
When the reference data is updated, the form picks up the new options automatically — no form revision required.
Data Validation and Conditional Logic Logic
✅ Validation Rules
- Required: blocks form submission when the field is empty.
- Minimum / maximum length: for text fields.
- Regular expressions (Regex Pattern): validation of IIN/BIN, phone numbers, passports and any formats (see Validation Recipes).
- Minimum / maximum: for numbers and dates.
- Custom error messages: your own text the user sees when a rule is violated. Supported in all form languages.
🔀 Conditional Visibility
Fields are shown or hidden depending on the respondent's answers. Configured in the "Conditional" tab of the component properties dialog:
Example
The field "Enter your driver's license number" is displayed only when the "Car ownership" switch is set to "Yes".
Advanced mode offers JSONLogic conditions — compound rules over several fields, number and date comparisons, nested branches.
Advanced Mode Advanced
A mode for experienced form developers. Enabled in the "System Settings" section of the manager — the "Advanced mode" checkbox (full access to JSON, PDF and complex logic).
What It Unlocks
- The "Advanced" and "Data" palette categories: specialized fields and data containers.
- The "JSON" button on components: direct editing of any field's JSON schema.
- The "Logic" tab in the component properties dialog (see below).
- Calculated value: a JavaScript expression that automatically computes the field value from other responses (for example, a table sum).
- Custom JS validation: arbitrary value checking with a JavaScript function.
- JSONLogic: compound visibility and validation conditions in a declarative format.
- Server-side value recalculation and allowing manual override of calculated fields.
The full list of JS settings with available variables and code examples — in the JavaScript Properties of Components section.
The "Logic" Tab
Extended logic is described by rules of the form "when trigger → perform action":
- Triggers: a simple field condition, a JSONLogic expression or a JavaScript function.
- Actions: change a component property (for example, make a field required), change state, merge part of the schema, run arbitrary code.
This is how scenarios like "if the loan amount is above 1 000 000 — show the guarantors block and make the IIN field required" are implemented.
⚠️ Responsibility
Custom JavaScript and the JSON editor run in the respondent's browser: a code error can break the form display or submission. After enabling advanced logic, always test the form in "Preview" in all publication languages.
JavaScript Properties of Components Advanced
Fields have a number of settings that accept JavaScript code: calculated values, custom validation, JS conditions, data sources and logic actions. All of them are available only in Advanced Mode.
Whatever can be solved with a simple condition or a regular expression is better solved with them: JS code runs with "safe evaluation" and slows the form down when overused.
Available Variables (Common Context)
The same variables are available in all JS entry points:
| Variable | Content |
|---|---|
data | All entered form data (an object: field key → value). |
row | Data of the current row — inside the Data Grid, Edit Grid and Container. |
form | The full form JSON. |
submission | The full submission object. |
component | JSON of the current component. |
instance | Instance of the current component (the field API). |
value | Current value of the component. |
moment | Date handling library (for example, moment().subtract(10, 'days')). |
_ | Lodash. |
utils / util | Platform utilities for working with forms. |
Reference other fields by their Property Name (the "API Properties" tab); for Radios, Selects and Checkbox Groups — by the option's value, not its label.
All JavaScript Entry Points
| Property (where to find it) | What is written |
|---|---|
| JSON visibility condition |
A boolean expression starting with show =. Example: the field is visible only for single/widowed respondents with income below 45 000: |
| Custom Default Value (JS) |
Computes the default value on form load, for example pre-filling a date: value = moment().format('DD.MM.YYYY'); |
| Calculated Value (JS) |
An assignment to value; recalculated when the source fields change. Example of a table row sum:Nearby: "Calculate on server", "Allow manual override". |
| Custom JS validation |
An expression starting with valid =; the current field value is in the input variable; true — the field is valid, a string — the error text. Example of email confirmation: |
| "Javascript" trigger |
The rule firing condition — the same context as visibility conditions; returns a boolean. |
| "Value (Javascript)" action |
Changes the field value when the trigger fires; row, data, component and result are available. |
| "Custom Action (Javascript)" action |
Arbitrary code on an event: hide/show blocks, change several fields, emit a form event. |
| Custom button logic |
Code executed when the button is pressed — for example, validating a group of fields and showing a dialog. |
| Custom options source |
Fills the list options from form data or an external request (may return a Promise): |
| Conditional add-row button |
A condition (JS or JSONLogic) under which the "+ Add row" button is shown — for example, no more than 5 rows for a certain application type. |
💡 Good Practices
- Check data for existence (
data.items || []): a field may be empty or hidden. - Do not use JS where a simple condition suffices — it is faster and more reliable.
- Test the form in "Preview" in all languages and with empty values.
- Remember: the code runs in the respondent's browser — do not put secrets in it and do not rely on it as the only data protection (server-side validation is mandatory).
Validation Recipes Patterns
Ready regular expressions for the "Validation" tab → the "Regular expression" field. Also provide a clear error text.
| Format | Regular expression | Explanation |
|---|---|---|
| IIN / BIN | ^\d{12}$ |
Exactly 12 digits. |
| KZ mobile number | ^\+7\d{10}$ |
Format +7XXXXXXXXXX. For the 8XXXXXXXXXX format use ^8\d{10}$. |
| built-in | Use the "Email" component — format validation is already included. | |
| Letters and spaces only | ^[А-Яа-яЁёA-Za-z\s-]+$ |
A full name without digits or special characters. |
| Document number | ^[A-Z0-9]{8,12}$ |
Capital Latin letters and digits, 8 to 12 characters. |
| Bank card number (mask) | ^\d{4}(\s?\d{4}){3}$ |
16 digits, spaces between groups are allowed. |
⚠️ Personal Data
Do not request IIN, passport data or card requisites without necessity: a publication with such fields must have a meaningful legal basis and a limited circle of respondents (role-based access).