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

ActionWhat it does
SettingsOpens the component properties dialog (see Common Settings Tabs).
CopyPlaces the component with all nested fields and rules into the builder clipboard.
Paste belowInserts a previously copied component under the current one.
MoveLets you drag a component to another position without unwrapping the whole nesting chain.
DeleteRemoves the component from the schema. Nested fields are deleted together with the container.
JSONDirect 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:

TabMain 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

PropertyDescription
Label (Field Title)The field name the respondent sees.
Label PositionPosition of the label relative to the field: top, left, right, bottom.
Label Width / Label MarginLabel width and the margin after it as a percentage of the row width (for horizontal positioning).
DescriptionText under the field: explanations, format, sample input.
TooltipText of the "?" icon next to the label; shown on hover/focus.
Custom CSS ClassExtra class for targeted field styling.
Tab IndexOverrides the Tab key navigation order.
HiddenThe field is invisible to the respondent, but the value is still submitted (for technical values).
Hide LabelShow the field without a title (for example, inside grids).
AutofocusThe cursor is automatically placed in this field.
Disabled (Read Only)The field is visible but cannot be changed.
Show in TableThe value is displayed in the tabular view of responses (affects submission viewing and exports).
Modal EditLong values are edited in a popup window.
Show Label in DataGridShow the field label inside every data grid row.

Data Tab

PropertyDescription
Default ValueA pre-filled value before the user enters data.
PersistentWhether the value is included in the submitted form data (usually "Yes").
ProtectedThe value is saved but is not returned to external systems via the API and webhooks.
Database IndexCreates a database index on the field (for large forms; requires a DB administrator).
EncryptedThe value is encrypted on the server side.
Redraw OnRedraw the component when the specified field changes (for complex display logic).
Clear Value When HiddenIf the field is hidden by a condition, its value is not included in the submission.
Custom Default Value (JS) AdvancedA default value computed by a JavaScript expression.
Calculated Value (JS) AdvancedAutomatic calculation of the value from other fields (for example, a table sum).
Calculate Server Side AdvancedThe calculation runs on the server instead of the browser.
Allow Manual Override of Calculated Value AdvancedThe user can override the calculated value.
Server Overriable (JSON) AdvancedJSON with component settings substituted on the server.

Validation Tab

PropertyDescription
RequiredBlocks form submission with an unfilled field.
Validate OnValidation moment: on change, on blur or on form submission.
Validate When HiddenValidate the field even when it is hidden by a condition.
Error LabelHow the field is named in error messages (handy for long labels).
Custom Error MessageThe text the respondent sees when a rule is violated; translated into all form languages.
Custom JS Validation, JSONLogic AdvancedArbitrary validation rules — see Advanced Mode.

API Properties Tab

PropertyDescription
Property NameThe 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 TagsArbitrary tags for grouping fields in custom logic.
Additional Metadata (Key-Value)Arbitrary pairs for external integrations.

Conditional Visibility Tab

PropertyDescription
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) AdvancedA condition in JSONLogic format for compound rules.

Layout Tab

PropertyDescription
Column width / offsetField width in the 12-column grid (including mobile and tablet breakpoints) and the left offset.
HTML AttributesArbitrary HTML attributes for the input element.

Logic Tab Advanced

Rules of the form "when trigger → perform action". Full description — in the Advanced Mode section.

ElementDescription
Logic name / TypeRule name and trigger type: simple condition, JavaScript or JSONLogic.
"When / Equals" triggerComparison of a field with a value (as in conditional visibility).
"Component Property" actionChange a field property (for example, make it required).
"Set State" / "Text" actionMark the field as invalid with an arbitrary message.
"Value (Javascript)" actionCalculate and set the field value.
"Schema Definition" actionMerge a schema fragment into the current component.
"Custom Action (Javascript)" actionArbitrary code executed when the trigger fires.
"Event Name" actionEmit 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:

  1. Specify whether the component should be displayed when the condition is met (True) or when it is not (False).
  2. Select the source field of the condition from the dropdown of all form components.
  3. 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.

Length (min/max), regular expression, prefix/suffix, input mask.

Text Area

Comments, reviews, extended answers.

Number of rows, auto-resize by content, character counter, length limit.

Number

Age, amounts, quantitative indicators.

Step, minimum and maximum, number of decimal places, thousands format.

Password

Input with masked characters.

Masks the input; stored in responses as a plain value — do not use it for secrets.

Checkbox

Consent to terms, a single yes/no switch.

Requiredness (for example, a consent checkbox), default value.

Checkbox Group

Multiple choice: the respondent marks any number of options.

Values list, minimum and maximum selected, horizontal/vertical layout.

Select (Dropdown)

Choosing one or more options from a compact list.

Static values, REST source (URL with JSON), live search over options, multiple selection mode.

Radio

Single choice from 2–5 options (gender, yes/no).

Values list, horizontal/vertical layout.

Button

Action buttons inside the form: submit, reset, custom logic.

Action (Submit/Reset/Event), style, size, lock after click, show validations.

File Uploads File Security

Two specialized upload components with mandatory antivirus scanning.

File

Documents, scans, PDFs, archives.

Allowed types (file pattern), size and count limits, multiple files at once.

Photo / Video

Images and videos with previews.

Accepts image/* and video/*, shows a thumbnail gallery, supports multiple uploads.

Secure File Processing Pipeline

  1. The respondent selects a file in the form.
  2. The file is sent to the platform's protected file gateway and placed in a temporary isolated buffer.
  3. The ClamAV service scans the file for viruses and malicious signatures.
  4. A clean file is saved to protected S3 storage, and a safe unique file UUID is written into the form submission.
  5. 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.

Tag (h2, hr, p…), attributes, CSS class, content.

Content (Text Block)

Formatted explanatory text: instructions, disclaimers, contact blocks.

Rich text editor, HTML mode. Content is not saved in responses.

Columns

Placing fields in one row on the 12-column grid: for example, "First name" (6) and "Last name" (6).

Width of each column, offsets, adaptive reflow on mobile.

Fieldset

A logical group of fields with a common title and frame (legend).

Group title, title hiding, arbitrary CSS classes.

Panel (Card)

A container with a title and styling. Splits long surveys into meaningful blocks ("Personal data", "Work experience").

Collapsible, collapsed by default, theme color.

Table

A fixed "rows × columns" grid for complex layouts and cross tables.

Number of rows and columns, cell width, headers, row striping.

Tabs

Switchable tabs within a single form page.

Tab names, default active tab. Do not confuse with the multi-page form mode.

Well (Bordered Container)

A block with a background for visually highlighting a group of fields or text.

Nesting: any fields and other containers can be dragged into the container.

Advanced Fields Advanced Mode

These components appear in the palette after enabling Advanced Mode in "System Settings".

Email

An email address with built-in format validation.

Out-of-the-box e-mail validation, extra rules via regular expression.

URL

A website or resource address with URL correctness validation.

Built-in link validation.

Phone Number

A phone number with an input mask.

Mask (input pattern), stores both the "raw" and the formatted value.

Tags

Entering a list of values as "chips": skills, keywords.

Maximum number of tags, delimiter, stored as an array.

Address

A structured address or geo-search via an external provider.

Manual input mode or autocomplete provider, country restriction.

Date & Time

Picking a date and/or time from a calendar.

Display format, minimum/maximum date, enabling time and time zone, "date only" mode.

Day (Date)

A date from three dropdown lists: day, month, year.

Separate selects instead of a calendar — convenient for birth dates.

Time

Choosing a time (hours:minutes) without a date.

12/24 hour format, minute step, minimum and maximum time.

Currency (Amount)

A monetary amount with formatting.

Currency symbol, thousands and decimal separators, decimal places limit.

Survey Matrix

A "question × answer option" table: the respondent marks cells (for example, satisfaction with parameters).

Lists of questions (Rows) and options (Columns), stored as a nested object.

Signature

A handwritten signature with a mouse or stylus on a touch screen.

Canvas width and height, pen and background color. Saved as an image.

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}.

Nesting in the export and webhook follows the container structure.

Data Grid (Table)

Repeating rows with a fixed set of columns: family members, addresses, goods.

Column components, default row count, respondent row add/remove, limits (min/max rows).

Data Map (Key-Value)

Arbitrary "key → value" pairs entered by the respondent on the fly.

Suitable for requisites and characteristics with an unknown set in advance.

Edit Grid (EditGrid)

Repeating blocks of arbitrary complexity: each row is an expandable form.

Row template (any components), row header/footer templates, adding and editing in a modal window.

Hidden

A field invisible to the respondent: technical values, data from the URL, computed constants.

Default value; conditional visibility is not needed — the field is always hidden but included in the response.

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
PropertyDescription
PlaceholderGray 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 settingsAn alternative input control (for example, a calendar). Leave "Input string" if no special scenario is needed.
Input MaskA strict format template: 9 — digit, a — letter, * — letter or digit. Phone example: +7(999)999-99-99.
Display MaskPretty 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 OnChange (default) — the mask is checked on every change; Blur — when leaving the field.
Input Mask Placeholder CharThe placeholder character for unfilled mask positions; if it occurs inside the mask itself, it is replaced with a space.
Allow Multiple Masks + mask listSeveral 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 AutocompleteStandard browser hints (off, name, email, tel…).
SpellcheckBrowser highlighting of spelling errors.
Show character/word counterA live counter under the field; useful together with length limits.
Masked inputThe 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 CaseAutomatic conversion to upper/lower case.
Truncate Multiple SpacesCollapse repeated spaces.
Unique value in databaseServer-side check that such a value has not been submitted before in this publication.
Min/max length, Regular expression, Min/max wordsText constraints; expression recipes — Validation Recipes.
Text Area only
PropertyDescription
RowsInitial field height in rows (3 by default).
Auto ExpandThe field automatically grows in height while typing.
EditorPlain 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 keyInserting images into the editor text. Usually disabled for corporate forms — collect files with the "File" component instead.
Save AsValue storage format: string, JSON or HTML.
Number only
PropertyDescription
Use Thousands SeparatorSeparate thousands with a space/comma (1 000 000).
Decimal PlacesMaximum number of decimal places.
Require DecimalAlways show decimal places, including zeros (10.00).
Decimal Symbol AdvancedThe 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
PropertyDescription
Input TypeHTML control type (checkbox or radio button).
Radio Key (name)Group name: several checkboxes with the same name work as a radio selection.
Radio ValueThe value submitted when the checkbox is checked ("true" by default).
ShortcutQuick keyboard access to the field.
Common options settings (Checkbox Group and Radio)
PropertyDescription
ValuesOptions 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 PositionPosition of option captions (right/left/top/bottom).
Inline LayoutOptions 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 onlyType of the saved value: string, number, boolean, object.
Authenticate / Disables caching — for URL sourcesRequest 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
PropertyDescription
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 URLAddress of the JSON array of options. For dictionaries — the renderer's Runtime Dictionary API.
Data Source Raw JSONAn array of options in JSON format right in the setting.
Value PropertyWhich 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 FieldsThe identifier field and the list of returned fields (for server sources).
Item TemplateHTML 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 OptionsHide duplicate options.
Widget TypeA modern searchable list (Choices) or the native HTML5 <select>.
Server-side filtering and search (for URL sources)
PropertyDescription
Search Query NameName of the query parameter the search phrase is put into.
Search request delayDelay 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 LengthMinimum phrase length before the search starts.
Enable Static SearchSearch over the already loaded list (no server requests).
Use exact searchExact match instead of fuzzy search.
Search ThresholdFuzziness threshold: 0.0 — exact matches only, 1.0 — everything matches; 0.3 by default.
Filter Query / Sort QueryExtra query parameters for filtering and sorting. Sorting syntax: created — ascending, -created — descending, data.field_name — by a response field (minus — descending).
Request HeadersArbitrary headers for the URL source (for example, an external API token). Advanced
LimitLimit on the number of loaded options.
Disable limiting responseDo not send limit/skip in the request (load everything).
Lazy Load DataRequest options only when the list is opened, not on form load.
Disable Options Refresh When ScrollingDo not load more options while scrolling the list.
Behavior and integrations
PropertyDescription
Refresh Options On / On BlurReload the options when another field changes/blurs (cascading lists: country → city).
Clear Value On Refresh OptionsReset the selected value when the list is refreshed.
PlaceholderText of the empty list ("— select —").
Read Only ValueIn 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 referenceCreating records of the built-in resource storage. Not used in SuraqHub.
"Only available items" checkForbid values missing from the list (recommended for reference fields).
Unique value in databaseServer-side uniqueness check of the answer.

Date & Time

All settings
PropertyDescription
Enable date / time pickingSeparate switches: the date field, the time fields or both.
Date display formatFormat 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 InputTyping the date with the keyboard (enabled by default); if disabled — calendar selection only.
Use Locale SettingsFormat per the respondent's browser locale.
Display in Timezone / Select TimezoneIn 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 DateDefault date; supports moment expressions, for example moment().subtract(10, 'days') — "10 days ago". Advanced
Minimum Date / Maximum DateRange of allowed dates (birth dates, acceptance periods). The "Use Input…" switches allow setting boundaries with a moment expression. Advanced
Disable weekends / Disable weekdaysForbid weekends or, conversely, weekdays.
Disable specific datesA blacklist of dates in the (yyyy-MM-dd) format or ranges (yyyy-MM-dd - yyyy-MM-dd).
Disabling dates by a functionA JS function forbidding dates, for example date.getDay() === 0 || date.getDay() === 6 — all Sundays and Saturdays. Advanced
Hour Step Size / Minute Step SizeStep 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
PropertyDescription
ActionSubmit — 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 / ValueThe button text and the technical value of the click in the data.
ThemeColor style: primary, secondary, info, success, warning, danger, link.
Size / Block ButtonButton size and stretching over the full container width.
Left Icon / Right IconIcons 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 ValidationsShow all form validation errors on click.
Save On EnterForm submission with the Enter key.
ShortcutHotkey for the click.
OAuth ProviderLogin 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.

PropertyDescription
Storage / Upload URLStorage type and upload address — configured by the platform. Do not change manually.
Allowed file typesPattern of allowed types: .pdf,.docx, image/*, application/*. Empty — any files.
Minimum / Maximum file sizeRestrictions 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 SizeSize of the image previews.
Enable web camera / Webcam WidthTaking a photo with the device camera right in the form.
Enable device captureOn mobile, open the camera/microphone directly in capture mode.
Upload OnlyUpload only: downloading from the form is forbidden (files are available to operators via the File API).
Private DownloadDownloading via an authorized POST request (for protected files).
Directory / File Name TemplateStorage directory (must end with /) and the template of the uploaded file name; configured by the platform.
File form-data keyName of the multipart request field during upload; fixed by the platform.
Use the S3 Multipart Upload API / Part SizeMultipart 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.

PropertyDescription
Number of RowsNumber of rows added on form load.
Initialize EmptyShow no rows until the user adds them.
Disable Adding / Removing RowsHide the add/remove row buttons (a fixed table).
Conditional Add ButtonA condition under which the add-row button is shown. Advanced
Add Another TextCustom caption on the add-row button.
Add Another PositionPlacement of the add button (top/bottom/both).
Allow ReorderDragging rows to change the order.
Equal column widthEqual-width columns instead of auto-fitting.
Enable Row Groups / Hide Group on Header ClickGrouping 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.

PropertyDescription
Display as ModalAdding/editing a row in a modal window (by default) or inline editing in place.
Inline EditingChanges in edit mode are saved into the form response immediately, without a row confirm button.
Open First Row when EmptyThe first row is open for filling right away when the table is empty.
Disable Adding / Removing RowsHide the add/remove row buttons (a fixed set).
Conditional Add ButtonA condition for showing the add-row button. Advanced
Add Another Text / Save Row Text / Remove Row TextCustom captions on the add, save and remove row buttons.
Header / Table Header / Row / Table Row / Footer TemplateHTML 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 ClassExtra CSS class of the editable row wrapper. Advanced
Enable Row DraftsAllow 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.

PropertyDescription
Enable Manual ModeAllow manual address entry (without the geo-service). A reliable option for internal networks.
Switch To Manual Mode LabelCaption of the "Enter manually" switch.
Disable Clear IconHide the quick value-clear icon.
ProviderAutocomplete provider (Google, Azure Maps, etc.). Requires a key and service availability from the respondent's network.
API Key / Subscription KeyKeys of the corresponding providers.
URL / Query Property / ParamsYour 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 PropertyPath to the address array in the response and the field for displaying the option. Advanced
Manual Mode View StringTemplate of the address line in manual input. Advanced
Placeholder / Multiple values / Default valueAs 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.

PropertyDescription
CurrencyCurrency choice — defines the prefix symbol in the field and the amount display format.
Prefix / SuffixExtra 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.

PropertyDescription
Width / HeightDimensions of the signature canvas.
Keep Overlay Aspect RatioThe preview keeps the canvas proportions.
Background Color / Pen ColorCanvas background color and pen color.
Footer LabelText 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.

PropertyDescription
DelimiterWhich character separates one tag from another while typing (comma, space, Enter).
Max TagsMaximum number of tags.
Store As (Storeas)Array storage format: a delimited string or a real array. Advanced
Default ValuePre-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

  1. Add a Text Field, name it "IIN/BIN".
  2. In "Display" set the Input Mask 999999999999 — exactly 12 digits — and Browser Autocomplete = off.
  3. In the "Validation" tab: enable Required, set the Regular expression ^\d{12}$ and a clear error text: "The IIN/BIN consists of 12 digits".
  4. 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"

  1. Create two Dropdown (Select) fields: "Region" and "City".
  2. Set both to Data source type = URL and the dictionary address (your own REST endpoint or a platform dictionary /api/v1/dictionaries/{code}).
  3. For the "City" list, in the Refresh Options On field select the "Region" component — the city list will reload when the region changes.
  4. Enable Clear Value On Refresh Options — when the region changes, the previously selected city resets (otherwise a city from a foreign region remains).
  5. 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

  1. Add a Checkbox labeled "I consent to the processing of personal data".
  2. In the "Validation" tab enable Required and set the error text: "Consent to personal data processing is required".
  3. 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

  1. Add a Button next to the main submit button.
  2. In "Action" choose Save in state and specify a state name, for example draft.
  3. Turn off Show Validations and Disable on invalid — a draft must save even with unfilled required fields.
  4. 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

  1. Add a Data Grid (Table) "Family members".
  2. Drag fields inside: full name (Text Field), date of birth (Date & Time), degree of kinship (a dictionary-based Dropdown).
  3. In the "Validation" tab set Minimum/Maximum rows — for example, minimum 1, maximum 10.
  4. 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

  1. Create a Dropdown (Select), data source — URL.
  2. Specify the dictionary address: /api/v1/dictionaries/{dictionary code} — the data is managed in the reference data catalog, without rebuilding the form.
  3. Set the Value Property according to the dictionary structure (for example, code) and configure the caption with the Item Template.
  4. 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:

VariableContent
dataAll entered form data (an object: field key → value).
rowData of the current row — inside the Data Grid, Edit Grid and Container.
formThe full form JSON.
submissionThe full submission object.
componentJSON of the current component.
instanceInstance of the current component (the field API).
valueCurrent value of the component.
momentDate handling library (for example, moment().subtract(10, 'days')).
_Lodash.
utils / utilPlatform 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
Conditional tab
A boolean expression starting with show =. Example: the field is visible only for single/widowed respondents with income below 45 000:
show = (data.income < 45000) &&
  (data.maritalStatus == 'single' || data.maritalStatus == 'widowed');
Custom Default Value (JS)
Data tab
Computes the default value on form load, for example pre-filling a date: value = moment().format('DD.MM.YYYY');
Calculated Value (JS)
Data tab
An assignment to value; recalculated when the source fields change. Example of a table row sum:
value = (data.items || [])
  .reduce((sum, row) => sum + (Number(row.amount) || 0), 0);
Nearby: "Calculate on server", "Allow manual override".
Custom JS validation
Validation tab
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:
valid = (input === data.email)
  ? true : 'Email addresses do not match';
"Javascript" trigger
Logic tab
The rule firing condition — the same context as visibility conditions; returns a boolean.
"Value (Javascript)" action
Logic tab
Changes the field value when the trigger fires; row, data, component and result are available.
"Custom Action (Javascript)" action
Logic tab
Arbitrary code on an event: hide/show blocks, change several fields, emit a form event.
Custom button logic
"Button" component, "Custom" action
Code executed when the button is pressed — for example, validating a group of fields and showing a dialog.
Custom options source
Select, "Custom" source
Fills the list options from form data or an external request (may return a Promise):
values = [
  { label: 'Option A', value: 'a' },
  { label: 'Option B', value: 'b' }
];
Conditional add-row button
Data Grid / Edit Grid
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}$.
Email 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).