# HybridForms ## 10.0 ### Custom Code Guide #### [๐Ÿ“„๏ธ Integration](https://manuals.hybridforms.net/docs/10.0/custom-code-guide/integration.md) [We strongly advice for TypeScript over JavaScript when implementing Custom Code.](https://manuals.hybridforms.net/docs/10.0/custom-code-guide/integration.md) --- ### Custom Styling Guide #### [๐Ÿ“„๏ธ Integration](https://manuals.hybridforms.net/docs/10.0/custom-styling-guide/integration.md) [SCSS files cannot be directly included in the Form, they must first be compiled into standard CSS files.](https://manuals.hybridforms.net/docs/10.0/custom-styling-guide/integration.md) --- ### Features #### [๐Ÿ“„๏ธ Conditions](https://manuals.hybridforms.net/docs/10.0/form-templates/features/conditions.md) [Conditions enable you to offer different options of form parts based on the input, alter the visibility of form parts or create dependencies.](https://manuals.hybridforms.net/docs/10.0/form-templates/features/conditions.md) --- ### Form Controls #### [๐Ÿ“„๏ธ ButtonControl](https://manuals.hybridforms.net/docs/10.0/form-controls/buttoncontrol.md) [The ButtonControl invokes a predefined custom callback.](https://manuals.hybridforms.net/docs/10.0/form-controls/buttoncontrol.md) --- ### Form Templates #### [๐Ÿ“„๏ธ Folder Structure](https://manuals.hybridforms.net/docs/10.0/form-templates/folder-structure.md) [Form Templates and Areas](https://manuals.hybridforms.net/docs/10.0/form-templates/folder-structure.md) --- ### FormDev #### [๐Ÿ“„๏ธ Quickstart](https://manuals.hybridforms.net/docs/10.0/formdev/quickstart.md) [Form development environment for developing Form Templates locally](https://manuals.hybridforms.net/docs/10.0/formdev/quickstart.md) --- ### HF Utilitiy Classes #### [๐Ÿ“„๏ธ Borders](https://manuals.hybridforms.net/docs/10.0/custom-styling-guide/hf-utility-classes/borders.md) [Use border utilities to easily style the border and border-radius of an element. This is especially useful for images, buttons, and other elements.](https://manuals.hybridforms.net/docs/10.0/custom-styling-guide/hf-utility-classes/borders.md) --- ### HTML Template File #### [๐Ÿ“„๏ธ Basics](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/basics.md) [The General Structure](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/basics.md) --- ### JS (deprecated) #### [๐Ÿ“„๏ธ Integration](https://manuals.hybridforms.net/docs/10.0/custom-code-guide/js/integration.md) [There are two possible ways to implement JS functionality:](https://manuals.hybridforms.net/docs/10.0/custom-code-guide/js/integration.md) --- ### Controls Custom Controls in HybridForms are specialized TypeScript classes designed to enhance Form Development by providing tailored functionality and visual components. Derived from `HybridForms.API.UIControls.BaseControl`, these controls have the capability to render HTML elements, manage events, and seamlessly integrate with the HybridForms Framework. The key features of Custom Controls include: * **HTML Rendering**: Custom Controls can generate HTML elements dynamically, allowing for the creation of customized user interfaces tailored to specific Form requirements. * **Event Management**: These controls are equipped with event registration and deregistration mechanisms, enabling developers to handle user interactions and trigger actions within the Form. * **Modularity**: Custom Controls promote code modularity and reusability by encapsulating functionality within self-contained TypeScript classes. This modular approach simplifies Form development and maintenance, enhancing overall code organization and readability. By leveraging Custom Controls, developers can extend the capabilities of HybridForms, streamline Form development workflows, and create rich, interactive user experiences tailored to their unique requirements. #### Integration within the HTML[โ€‹](#integration-within-the-html "Direct link to Integration within the HTML") ```html
``` Note IMPORTANT FACTS * All registered event handlers have to get deregistered (dispose pattern) when the Form is left. Therefore you have to implement your `dispose()` method within your control. * It is recommended that all Custom Controls derive from the HybridForms BaseControl `HybridForms.API.UIControls.BaseControl` * This control adds the `win-disposable` class to the HTML markup and calls the dispose method when leaving the page. * Override the `dispose`-method where to remove all previously registered event handlers. #### Example usage in TypeScript and HTML[โ€‹](#example-usage-in-typescript-and-html "Direct link to Example usage in TypeScript and HTML") * TypeScript * HTML ```typescript export class CustomControl extends HybridForms.API.UIControls.BaseControl { // instance properties private onRendered: () => void; public publicProp1: string; // instance methods constructor(element, options) { super(element, options); } protected createControl(): Promise { // will be called by base class console.log('createControl'); // return a promise here, when all ui relevant work is done! return Promise.resolve(); } protected createView() { // will be called by base class // get called on PDF creation } protected registerEvents() { // will be called by base class // registerEvents here console.log('registerEvents'); this.onRendered = () => { console.log('form is rendered and ready'); }; HybridForms.API.Page.addEventListener('rendered', this.onRendered); HybridForms.API.Page.addEventListener('viewrendered', this.onRendered); } public dispose() { if (this.disposed) { return; } // dispose registered events here if (this.onRendered) { HybridForms.API.Page.removeEventListener('rendered', this.onRendered); HybridForms.API.Page.removeEventListener('viewrendered', this.onRendered); } this.disposed = true; } public static staticMethod() { // static method } } ``` ```html
``` --- ### Examples In HybridForms development, TypeScript functions are crucial for creating dynamic Forms. This guide explores their syntax, strategies, and best practices within the Framework. From event handling to data manipulation, functions empower developers to optimize Form performance and enhance user experience. Our reliance on the FormAPI is significant for tasks such as retrieving and setting Form Control values, data manipulation, and managing Form events. For further details, please refer to our documentation available [here](https://manuals.hybridforms.net/form-api). #### Combining Two ComboBoxes[โ€‹](#combining-two-comboboxes "Direct link to Combining Two ComboBoxes") * TypeScript * HTML ```typescript namespace HFFormdefinition.SomeNamespace { /* * filterData * Type: onChanged Method * Description: * When choosing a Value from the Main ComboBox, the content in the Sub ComboBox * will change to the relevant content for the selection. * Works in both non- and repeating units. * @data-hf-options: * subCtrlId[string](required): formcontrol-id of effected ComboBox */ export function filterData() { const filterField = this.val(); let currentRU = ''; if (HybridForms.API.RepeatingUnits.isRepeatingUnit(this.element)) { currentRU = HybridForms.API.RepeatingUnits.getPostfixFieldId(this.element); } const comboBoxTargetCtrl = HybridForms.API.FormControls.getCtrl(this.subCtrlId + currentRU); if (typeof comboBoxTargetCtrl === 'undefined') { return; } const dataSource = comboBoxTargetCtrl.dataSource; if (!filterField || !filterField.value) { comboBoxTargetCtrl.setDataSource(dataSource); return; } const filterByValue = filterField.value; const filtered = dataSource.filter(function (item) { return filterByValue === item.kat; }); comboBoxTargetCtrl.setDataSource(filtered); } } ``` ```html
``` #### Initializr Control[โ€‹](#initializr-control "Direct link to Initializr Control") * TypeScript * HTML ```typescript namespace HFFormdefinition.SomeNamespace { export function highlightCell() { $('input:radio, input:checkbox').each(function () { const id = this.dataset?.hfId ? this.dataset.hfId : this.id; const ctrl = HybridForms.API.FormControls.getCtrl(id); const val = ctrl.val(); $(this) .closest('div.color') .toggleClass('highlight', val ? val : false); }); } /** * Initializr: calls a callback function when the form is rendered */ export class Initializr extends HybridForms.API.UIControls.BaseControl { private onRendered: () => void; public callback: () => void; constructor(element, options) { super(element, options); if (typeof this.callback === 'function') { this.onRendered = () => { this.callback.call(this); }; HybridForms.API.Page.addEventListener('rendered', this.onRendered); HybridForms.API.Page.addEventListener('viewrendered', this.onRendered); } } public dispose() { if (this.disposed) { return; } if (this.onRendered) { HybridForms.API.Page.removeEventListener('rendered', this.onRendered); HybridForms.API.Page.removeEventListener('viewrendered', this.onRendered); } this.disposed = true; } } } ``` ```html
``` #### Data Source Handling[โ€‹](#data-source-handling "Direct link to Data Source Handling") * TypeScript * HTML ```typescript namespace HFFormdefinition.SomeNamespace { /** * setDataSource: sets the data source for a control */ export function setDataSource() { HybridForms.API.FormStorage.getCatalog('StateCatalog').then((dataSource) => { const amountField = HybridForms.API.Fields.getById('programmatic_set_datasource'); const fieldValue = amountField.value; const amountCtrl = HybridForms.API.FormControls.getCtrl('programmatic_set_datasource'); amountCtrl.isLoaded().then(() => { amountCtrl.setDataSource(dataSource); if (fieldValue) { amountCtrl.val(fieldValue); } }); }); } } ``` ```html /api/catalogs/Staat?$select=Title,KatalogText&$orderby=KatalogText&$top=5000 ``` #### User Display Name Handling[โ€‹](#user-display-name-handling "Direct link to User Display Name Handling") * TypeScript * HTML ```typescript namespace HFFormdefinition.SomeNamespace { export function setUser() { return HybridForms.API.User.get().displayName || ''; } } ``` ```html ``` #### Repeating Inputs[โ€‹](#repeating-inputs "Direct link to Repeating Inputs") * TypeScript * HTML * SCSS ```typescript namespace HFFormdefinition.SomeNamespace { export class addInput extends HybridForms.API.UIControls.BaseControl { constructor(element, options) { super(element, options); } private clickEvent(event) { const targetId = event.currentTarget.id; const $block = $(`#${targetId}`).closest('.repeating-input-container'); $('.repeating-input.hf-hide', $block).first().removeClass('hf-hide'); } private getElementId(element: HTMLElement): string { if (this.isView) { return element.dataset.hfId; } return element.id; } private showRepeatingInputs($ct: JQuery | HTMLElement) { $('.repeating-input:not(.init)', $ct).each((idx, element) => { const $element = $(element); const $input = $('.hf-formcontrol', $element); let filled = false; $input.each((index, el) => { const field = HybridForms.API.Fields.getById(this.getElementId(el)); const value = field?.value; if (value) { filled = true; } }); if (filled) { $element.removeClass('hf-hide'); } else { $element.addClass('hf-hide'); } }); } protected createView() { const $ct = this.$element.closest('.repeating-input-container'); this.showRepeatingInputs($ct); } protected createControl(): Promise { const currentStatus = HybridForms.API.Form.getStatus(); if (currentStatus > 1) { this.$element.parents('.add-input-wrapper').addClass('hf-hide'); } const $ct = this.$element.closest('.repeating-input-container'); this.showRepeatingInputs($ct); this.$element.on('click', (ev) => { ev.stopImmediatePropagation(); ev.preventDefault(); this.clickEvent(ev); }); return Promise.resolve(); } public dispose() { if (this.disposed) { return; } this.$element.off('click'); this.disposed = true; } } export class removeInput extends HybridForms.API.UIControls.BaseControl { constructor(element, options) { super(element, options); } private clickEvent(event) { const targetId = event.currentTarget.id; const $block = $(`#${targetId}`).closest('.repeating-input-container'); const $inputBlock = $('#' + event.currentTarget.id, $block).closest('.repeating-input'); const $input = $('.hf-formcontrol', $inputBlock); $input.each((idx, element) => { HybridForms.API.FormControls.getCtrl(element.id).val(null); }); const $ruInputs = $('.repeating-input:not(.hf-hide)', $block); $ruInputs.each((idx, context) => { const $context = $(context); const idPostfix = idx + 1; let emptyRow = true; const $formControls = $('.hf-formcontrol', $context); $formControls.each((index, element) => { if ($(element).hasClass('filled')) { emptyRow = false; } }); if (emptyRow && idPostfix < $ruInputs.length) { $formControls.each((index, element) => { const id = element.id; const ctrl = HybridForms.API.FormControls.getCtrl(id); const nextId = id.replace(/input_(?:\d*)/, `input_${idPostfix + 1}`); let nextCtrl = HybridForms.API.FormControls.getCtrl(nextId); let nextVal = nextCtrl.val(); if (nextVal && typeof nextVal.value !== 'undefined') { nextVal = nextCtrl.val().value; } ctrl.val(nextVal); nextCtrl.val(null); nextCtrl = null; }); } }); $('.repeating-input:not(.hf-hide):not(.init)', $block).last().addClass('hf-hide'); } protected createControl(): Promise { const currentStatus = HybridForms.API.Form.getStatus(); if (currentStatus > 1) { this.$element.addClass('hf-hide'); } this.$element.on('click', (ev) => { ev.stopImmediatePropagation(); ev.preventDefault(); this.clickEvent(ev); }); return Promise.resolve(); } public dispose() { if (this.disposed) { return; } this.$element.off('click'); this.disposed = true; } } } ``` ```html

 
 

Hinzufรผgen

``` ```scss /* Repeating Input START */ .add-input-wrapper { margin-bottom: 15px; } .add-input { background-color: #d9d9d9; border-radius: 4px; padding: 10px 0; cursor: pointer; &:hover { background-color: #cccccc; } p { text-align: center; margin: 0 !important; } } .remove-input { position: absolute; top: 0; right: 10px; width: 30px; height: 30px; padding: 5px; z-index: 9; .remove-icon { text-align: center; color: black !important; background-color: #d9d9d9; margin: 0 !important; height: 20px; width: 20px; border-radius: 100%; cursor: pointer; &:hover { background-color: #cccccc; } } } .repeating-input.multiline { .remove-input { position: relative; right: 0; margin-left: 10px; padding: 0; .remove-icon { display: flex; justify-content: center; align-items: center; border-radius: 4px; width: 30px; height: 30px; } } .flex-1-shrink { align-self: flex-end; margin-bottom: 10px; } &:nth-child(even) { background-color: rgba(217, 217, 217, 0.3); } } .repeating-input { display: none; &.init { display: block; } &:not(.multiline) { .hf-numericfield:not(.no-padding) .k-input, .hf-textfield:not(.no-padding) { padding-right: 30px; } } .hf-formcontrol { &.hf-view { display: none; &.filled { display: block; } } } } /* Repeating Input END */ ``` --- ### Functions Functions in TypeScript play a crucial role in enhancing the functionality of HybridForms by encapsulating reusable code that can be invoked as needed. #### Integration within the HTML[โ€‹](#integration-within-the-html "Direct link to Integration within the HTML") Incorporating functions into your Form Definition in HybridForms offers versatile opportunities. For instance, you can utilize `onChanged` methods of Form Controls or callbacks of ListTemplates. These functions serve various purposes such as reacting to user inputs, customizing the interface, or implementing intricate business logic. The function context within this integration is typically bound to the Form Control that triggers the function. Therefore, `this` refers to the Form Control itself, providing direct access to its properties and methods. #### Example usage in TypeScript and HTML[โ€‹](#example-usage-in-typescript-and-html "Direct link to Example usage in TypeScript and HTML") * TypeScript * HTML ```typescript namespace HFFormdefinition.SomeNamespace { export function doSomethingOnChange(value) { console.log('value: ', value); console.log('ctrl: ', this); } } ``` ```html
``` --- ### Integration We strongly advice for TypeScript over JavaScript when implementing Custom Code. TypeScript offers type safety and significantly improved support for autocompletion in code editors. However, if you prefer to use JavaScript, you can find the documentation [here](https://manuals.hybridforms.net/docs/10.0/custom-code-guide/js/integration.md). To incorporate TypeScript into your Form Development process, create a "tsconfig.json" file within the Form Definition folder. You can find a sample configuration file included in our "formDev" project. Since TypeScript files cannot be directly included in the Form, they need to be transpiled into regular JavaScript files first. This transpilation process occurs automatically upon saving your files or can be triggered manually using the Template Exporter tool. Once transpiled, link the JavaScript files in the script tag within the header of your Form Definition: ```html ``` For detailed examples, explore the Forms provided within the FormDefinitions folder of the "formDev" project. #### The basic structure of HybridForms TypeScript (file)[โ€‹](#the-basic-structure-of-hybridforms-typescript-file "Direct link to The basic structure of HybridForms TypeScript (file)") **Define your namespace** ```typescript namespace HFFormdefinition.BaseHelpers { // variables, functions and classes } ``` **Naming Convention for Namespacing:** * HFFormdefinition.\[FORMDEFINITION-TITLE] * HFFormdefinition.\[EXTERNAL-JS-FILENAME] Note Define the namespace **once** within the HTML Form Definition, especially when utilizing external files. Ensure that each Form Definition has a unique namespace to prevent any potential issues. #### Full TypeScript example[โ€‹](#full-typescript-example "Direct link to Full TypeScript example") * TypeScript * HTML ```typescript namespace HFFormdefinition.BaseHelpers { export function doSomethingOnChange(value) { console.log('value: ', value); console.log('ctrl: ', this); } } ``` ```html [...] [...] ``` --- ### Controls Custom Controls in HybridForms are specialized WinJS classes designed to enhance Form development by providing tailored functionality and visual components. Derived from `HybridForms.API.UIControls.BaseControl`, these controls have the capability to render HTML elements, manage events, and seamlessly integrate with the HybridForms framework. Key features of Custom Controls include: * **HTML Rendering**: Custom Controls can generate HTML elements dynamically, allowing for the creation of customized user interfaces tailored to specific Form requirements. * **Event Management**: These controls are equipped with event registration and deregistration mechanisms, enabling developers to handle user interactions and trigger actions within the Form. * **Modularity**: Custom Controls promote code modularity and reusability by encapsulating functionality within self-contained WinJS classes. This modular approach simplifies Form development and maintenance, enhancing overall code organization and readability. By leveraging Custom Controls, developers can extend the capabilities of HybridForms, streamline Form development workflows, and create rich, interactive user experiences tailored to their unique requirements. #### Integration within the HTML[โ€‹](#integration-within-the-html "Direct link to Integration within the HTML") ```html
``` Note IMPORTANT FACTS * All registered event handlers have to get deregistered (dispose pattern) when the Form is left. Therefore you have to implement your `dispose()` method within your control. * It is recommended that all Custom Controls derive from the HybridForms BaseControl `HybridForms.API.UIControls.BaseControl` * This control adds the `win-disposable` class to the HTML markup and calls the dispose method when leaving the page. * Override the `dispose`-method where to remove all previously registered event handlers. #### Example usage in TypeScript and HTML[โ€‹](#example-usage-in-typescript-and-html "Direct link to Example usage in TypeScript and HTML") * JavaScript * HTML ```javascript CustomControl: WinJS.Class.derive( HybridForms.API.UIControls.BaseControl, function (element, options) { HybridForms.API.UIControls.BaseControl.call(this, element, options); }, { // instance properties _onRendered: null, publicProp1: null, // instance methods _init: function (element) { // _init Method gets called in BaseControl. // call the BaseControl _init Method with the call-Method HybridForms.API.UIControls.BaseControl.prototype._init.call(this, element); }, createControl: function () { // will be called by base class console.log('createControl'); // return a promise here, when all ui relevant work is done! return Promise.resolve(); }, registerEvents: function () { // will be called by base class // registerEvents here console.log('registerEvents'); this._onRendered = function () { console.log('form is rendered and ready'); }; HybridForms.API.Page.addEventListener('rendered', this._onRendered); HybridForms.API.Page.addEventListener('viewrendered', this._onRendered); }, dispose: function () { if (this.disposed) { return; } // dispose registered events here if (this.onRendered) { HybridForms.API.Page.removeEventListener('rendered', this._onRendered); HybridForms.API.Page.removeEventListener('viewrendered', this._onRendered); } this.disposed = true; }, }, { //Static methods }, ); ``` ```html
``` --- ### Functions Functions in TypeScript play a crucial role in enhancing the functionality of HybridForms by encapsulating reusable code that can be invoked as needed. #### Integration within the HTML[โ€‹](#integration-within-the-html "Direct link to Integration within the HTML") Incorporating functions into your Form Definition in HybridForms offers versatile opportunities. For instance, you can utilize `onChanged` methods of Form Controls or callbacks of ListTemplates. These functions serve various purposes such as reacting to user inputs, customizing the interface, or implementing intricate business logic. The function context within this integration is typically bound to the Form Control that triggers the function. Therefore, `this` refers to the Form Control itself, providing direct access to its properties and methods. #### Example usage in JavaScript and HTML[โ€‹](#example-usage-in-javascript-and-html "Direct link to Example usage in JavaScript and HTML") * JavaScript * HTML ```javascript (function () { 'use strict'; // forcing browser to strict mode Javascript WinJS.Namespace.define('HFFormdefinition.SomeNamespace', { doSomethingOnChange: function (value) { console.log('value: ', value); console.log('ctrl: ', this); }, }); })(); //# sourceURL=[onChangedExample].js ``` ```html
``` --- ### Integration There are two possible ways to implement JS functionality: 1. Directly within the HTML Form Definition in the head section or within HybridForms blocks: ```html ``` 2. Via an external file and linked scriptTag within the Form Definition's header: ```html ``` For detailed examples, explore the Forms provided within the FormDefinitions folder of the "formDev" project. #### The basic structure of HybridForms JavaScript (file)[โ€‹](#the-basic-structure-of-hybridforms-javascript-file "Direct link to The basic structure of HybridForms JavaScript (file)") 1. **Pack JS within an IIFE (Immediately Invoked Function Expression)** ```javascript (function () { 'use strict'; // forcing browser to strict mode Javascript // code here })(); ``` 2. **Define your WinJS namespace** ```javascript WinJS.Namespace.define('HFFormdefinition.NamespaceChild', { // variables, functions and classes }); ``` 3. **For browser (e.g. chrome) debbugging purposes, add the following at the end of the file** ```javascript //# sourceURL=[Name of the js file].js ``` 4. **If you are using ESLint and the `no-undef-rule`, add globals at the beginning of the file to prevent ESLint errors** ```javascript /* global $ WinJS Icomedias HybridForms [...] */ ``` **Naming convention for namespacing:** * HFFormdefinition.\[FORMDEFINITION-TITLE] * HFFormdefinition.\[EXTERNAL-JS-FILENAME] Note Define the namespace once within the HTML Form Definition, especially when utilizing external files. Ensure that each Form Definition has a unique namespace to prevent any potential issues. #### Full JavaScript example[โ€‹](#full-javascript-example "Direct link to Full JavaScript example") * JavaScript * HTML ```javascript /* ESLint no-undef-rule: define globals to prevent ESLint errors */ /* global $ WinJS IcoWinJS kendo HFWinJS HybridForms Icomedias HFFormdefinition */ (function () { 'use strict'; // forcing browser to strict mode JavaScript WinJS.Namespace.define('HFFormdefinition.BaseHelpers', { // variables, functions and classes }); })(); //# sourceURL=[Name of the js file].js ``` ```html [...] [โ€ฆ] ``` --- ### Borders Use border utilities to easily style the border and border-radius of an element. This is especially useful for images, buttons, and other elements. Below, you can see how to set the border, adjust the border width, omit the border, set the border color, and add a border radius. #### Additive[โ€‹](#additive "Direct link to Additive") Result Loading... Live Editor Result Loading... Live Editor #### Subtractive[โ€‹](#subtractive "Direct link to Subtractive") Result Loading... Live Editor #### Border Color[โ€‹](#border-color "Direct link to Border Color") Result Loading... Live Editor #### Border Radius[โ€‹](#border-radius "Direct link to Border Radius") Result Loading... Live Editor --- ### Button Use button utilities to quickly style buttons in HybridForms Forms. #### Button Colors[โ€‹](#button-colors "Direct link to Button Colors") Use FormButton color classes to style them in different colors. You can set the button to have default, primary, warning, or error styles. ##### Default Button[โ€‹](#default-button "Direct link to Default Button") ![default style](data:image/png;base64,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#light-mode-only)![Dark default style](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAa0AAABYCAYAAABGfqgpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA3hSURBVHhe7d19TFV3nsfxN1qqwdCLcOkEFFFLVaRF1O2INeAaHcusdaoyJmorpWpXtlYxrNSH4DpuHR8G14iIi2tbGY3aydaHWWsrrsSIcWS1CrWLD1Stig+1IJVtLlNjC/sHcJUzF+Xivdf78Hkl/HG/v3N/J7/k6/nkHH4c/fr27duAiIiIB+hgLIiIiLgrhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMhZaIiHgMv/a+5d0vLJwOwSEQEAB+fsbh9mlogLo66mtu03DzhnHUKZyyDpG2UL+LL3FQv9sdWn6dO9PhueehSxfjkGNZLNRf/JqGH380jjiEy9Yh0hbqd/Elj9Hvdj8edFnjd+nSeC4ncdk6RNpC/S6+5DH63a7Q8gsLd23jd+nSeE4Hc/k6RNpC/S6+pJ39bldodQgOMZaczhnndMacIo7gjN50xpwijtCe3rQrtAgIMFaczxnndMacIo7gjN50xpwijtCO3rQvtJ7EbiNnnNMZc4o4gjN60xlzijhCO3rTrt2DHX8Zbyw91KsvD2XYiy/Sr0cEfSIiqKis5NzVSo5+9RWf/uWY8fBW/Xy8xFh6LPauw8hR6xKxxd36XcSZ7O33jmaz+XfGYms6dOtuLLVq1vhxLJr6Bt/W1HDpxg0Ol5XxQ91fCXnmGWa8OgY/4MS5c8av2dRw/Zqx9FjsWYeRI9clYos79buIs9nb70650yrfUgDAym3b2Vp4wDjM1FdGs+D1KQDEpKQah/+GvUn8KG1dh5Gj1yVii7v0u4gr2Nvv9v1Oqw3Wz02Hpou2rQs7wNbCA9aLevPx7s4l60qaz6mlk4zVxxL95nIOp+uiJSLewaGhNSExgRGDBpK2eo1xyKa01WsYMWggExITjENuxVXrSo2NopOx+FgiSe5v/99BiIi4K4eG1sA+fThy+jRHTp82DlnNGj+OgoULAKzHDuzTx3iYW3HFurKWbSLzBX/olUT5lgLKtywls2ks7h9mszdvU2N98wb2picRZ/1mFKnpyyn5sKBpfBMlazKY2X0kOXlLmRwG5sFpjWO5s63fEhHxRA4Nrb49Iqi+U2ssW80aP453xo9jR1GRtVZ9p5a+PSJaHOduXLGuZVlvU/AN8M1+YlJSiUlZQjbAsNnkTIyi6kAuY1NSGbvuc6qiJpHzbtMjv9cmMSf2Hp+uX0RMSipjV2xl5xdnKL5WRPqsfA7WQvXJ/MY5Z+cazioi4lkcGloxPXty8/Zt6+eChQt4f8Z0eODCnrE+j8LjJ6zH3Lx9m5iePa2f3dGTXNfMEbEEnv2caX8+zSXgUulesr+4gTn6ZZIBnvanE3DX0vjW5EsVxWRv389Z40Qi8lBj3pzNnFhj1X6Omkdsc2holV++TFjI/ddy7CgqYkJiQqsXdoCwkBDKL19uUXM3T25d8fT/hT+dXpjU9Miw8eeTkeEQaKI3wH9uZeOFICYv3MThZbPJTIzEbJxGRB4hntF/F8Vzgca6vRw1j7TGoaF1/mol5iCT9XPh8RNkrM/jpX79bF7YAcxBJs5frTSW3cqTXpf18V6Ln6bHh1xg3Yp0Bi3KZfPlAEa9sZQD2WkkBxtnERHbRpKzJoVRJhMJb26gJD+bPwwFiGLOwhxOfbiJU5sLKFl1/9+VOTGNvXmbOPXhJsq3bKJk+TTGtDqPOJJDQ6u0ooKE2FgSYu/fGxceP0HqipU2L+zNx5ZWVBiH3MqTW1cJZ27dw/yL54k2DhndPE3BB6t4ZcFezgbHM3mk8QARsa2I9IxizlLLkT++Q3xaJu8dg1EzZzIz9CzvZb7NoLeWsfPHwWROGwnEs3jiYKr2zWPQ9LeJmbuM7L1fsK+VecSxHBpau4qPcOhUKfnzMoxDNuXPy+DQqVJ2FR8xDrkVV63rTE0tBIczOQwINmEGNh46TXX3RNb+UxJxYQDhxA1NIuu1po0Yw8aS+ffRRAc3jf0yku7+tVy/AXCWazUQGPo8Q4Ib5xSRtohn7AtBlB3O52ANwAWyj13g6V4DSOYsZ25B/yG/IbmHCWqusPNY6zuLxbEcGloA767Ngaa3R0x9ZbRxGJreHNH8donm492dK9a17/Ni/odoslYVUP5vs5kCcDSXt/54jB/6JrNtVQHlW5azbcavGRLa9P8jde7GqIkZfLK2aWxiJNf2b+H9owC1bC4q4bp5JB+tLaD8Xya3PKGItKIb3Uz+xCXf/11y+ZRoOgWa6E0tGzcsI/tCOP+4aDWncrPIGqq/h3QVp7zGiQd21R0u+5Lvvv+eqjt3CA0K4tmuXRkeN4ANu/eQt3uP8Ws22fuaj0exZx1GjlyXiC3u1O++YxKfbBnK9Y3ppB8FiCcndzqB+95m2n7jsQ8yMWRsGn+YGMCnc5eQXWOcRx7F3n53+J1Ws7zde5ifv5Fai4UBUc/xzvhxDIh6jlqLhfn5Gz32wu6t6xLxbRbu3gsg0NT8CL2EA+friBuRxpiw5mPCiesTDkQyZHBU4+5darn4TRX/97M/nUy25hFHc9qdliPZm8SP8qTWIdIW6vcnY8yM5SweFs7T96o4uDmT945FkZo+jbTYcJ7mHp2A6tMfMzyniqylaUzoFQD3oBO1lBVtIX37SaptzmM8kzzI3n5XaIm4GfW7+BJ7+92+x4MNbc43x3HGOZ0xp4gjqDdFHsq+0KqrM1aczxnndMacIo6g3hR5KLtCq77m/vv3XMUZ53TGnCKOoN4UeTi7Qqvh5g2wWIxl57FYGs/pYC5fh0hbOKnfRbyJXaEFUH/xa9dc8C2WxnM5icvWIdIWTu53EW/R0Ww2/85YfKiffqKh6juor8fvqafA3x/8/IxHtU9DA9TVUX/rW+ovXYSffjIe4TjOXIdIW7io3zt0624sibiNhuvXjKWHsmvLu4h4Hm15F3fm3C3vIiIiT5BCS0REPIYeD4p4OV9/PPjqy0MZ9uKL9OsRQZ+ICCoqKzl3tZKjX33Fp3/RO5aeNHsfD9q/EUNEPIovb8SYNX4ci6a+wbc1NVy6cYPDZWX8UPdXQp55hhmvjsEPOHHunPFr4kLaiCEiLfjqnVbz/223ctt2thYeMA4z9ZXRLHh9CgAxKanGYXERe++09DstEfE66+emQ1MY2QosgK2FB6xh1Xz8w0WStSqHnGHG+uNI4qP/WEqmsSytUmiJiFeZkJjAiEEDSVu9xjhkU9rqNYwYNJAJiQnGoZZ6JTLE+n9rOUjSAOI6G4vyMHo8KOLlfO3x4PszphMaZHpoaM0aP46X+vUjdcVKAPLnZVB1p5bFH3xoPLTRyNmUvDGYwI73S9Un8xmeUwLBg8l8N4XJvUx06gh3ay+wY2su2cdrAROjpsxm8cgozP4A97hbc4Ndf1pCcdRS1v4qkk4PnObsZ6n89uMHCj5AjwdFxKf17RFB9Z1aY9lq1vhxvDN+HDuKiqy16ju19O0R0eK4Fopyif/gJNXUcnBjKjEpqY2BRSRz0tOY3PlLfr8knZi5S/j9/wYweWYGc3oBsZPJTArlzMdLGJ6SyvCsfNad/ILSY1C8dQmDPrsCXKEgpXFOXwus9lBoiYhXienZk5u3778tv2DhAt6fMR0eCKyM9XkUHj9hPebm7dvE9Oxp/dxmsb9mTK8qdm36iJ1Xa6HmCjs3FlP2cySJQ03QxZ/OAHfvUA1UXz1Jwda97DPOI22m0BIRr1J++TJhISHWzzuKipiQmNBqYAGEhYRQfvlyi1qb9A+jO+FMXlpA+Zbmn0kM6QyhodFwbAvrjloY+FYOJWvm869JsfQ2ziF2UWiJiFc5f7USc5DJ+rnw+Aky1ufxUr9+NgMLwBxk4vzVSmO5je4/3nvwp/HxYS07Ny4i/p+XkH28jv5jM9ibl8WcPsY5pK0UWiLiVUorKkiIjSUhNtZaKzx+gtQVK20GVvOxpRUVxqFHO3OTa4TSe6RxwKDmCjs/zuW3s3LZdy+K5NG+tTnGkRRaIuJVdhUf4dCpUvLnZRiHbMqfl8GhU6XsKj5iHGrpbBVVBNCtdzRmwBxsgtOfs+8bfxInZJE5OLKx3iOa5NcmkRoLxCYxJymeuDAAE9GD+9M7EKqqzzbOWVlNNUH0HhkOmDAHG84pf0Nb3kW8nK9teW/m+DdimEieOZ/M+HACO0L1sXyG/3sJBEczZ9o0pkSHEti0rf2H6gtsL1jFOpLZNi2JuGD/xinu1XHp9H+xOGc/ZQBEMWfhbFKjTXQCyv6cyus7W5zU69m75V2hJeLlfDW0eGC34OGyL/nu+++punOH0KAgnu3aleFxA9iwew95u/cYvyYuZG9o6YW5Il7Ol1+Ye+LcOa7eusWzXbvyQq+eJA0Zgv9THbleXc1Hn33Gtv8+aPyKuJhemCsiLfjynZa4P3vvtLQRQ0REPIZCS0REPIZCS0REPIZCS8TbNejX1uKm2tGbCi0Rb1dXZ6yIuId29KZCS8TL1dfcf+O5iDtpT28qtES8XMPNG2CxGMsiT5bF0tibdlJoifiA+otfK7jEfVgsjT3ZDvrjYhEf4hcWTofgEAgIAD8/47CI8zQ0QF0d9TW323WH1UyhJSIiHkOPB0VExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGMotERExGP8P9s+dni3+03zAAAAAElFTkSuQmCC#dark-mode-only) ##### Primary Button[โ€‹](#primary-button "Direct link to Primary Button") Primary style: `class="hf-formbutton-primary"`. ![primary style](data:image/png;base64,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#light-mode-only)![Dark primary style](data:image/png;base64,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#dark-mode-only) ```html
``` ##### Warning Button[โ€‹](#warning-button "Direct link to Warning Button") Warning style: `class="hf-formbutton-warning"`. ![warning style](data:image/png;base64,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#light-mode-only)![Dark warning style](data:image/png;base64,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#dark-mode-only) ```html
``` ##### Error Button[โ€‹](#error-button "Direct link to Error Button") Error style: `class="hf-formbutton-error"`. ![error style](data:image/png;base64,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#light-mode-only)![Dark error style](data:image/png;base64,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#dark-mode-only) ```html
``` #### CheckBox as a Button style[โ€‹](#checkbox-as-a-button-style "Direct link to CheckBox as a Button style") Use button style utility to quickly style CheckBoxes like buttons. ![button style](data:image/png;base64,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whvnXLzhhYiIiMiQov6H+sjkycarmtx8ZomIiIiofhiWiIiIiEy4NCyVNm6M48eP4/Tp0y45pC6pk4iIiOhicemepebquNPLC/YPeP6lZC/w+xUV+knVRERERL+GuvYsuTQsERERETU03OBNREREVA8MS0REREQmGJaIiIiITDAsEREREZlgWCIiIiIywbBEREREZIJhiYiIiMgEwxIRERGRCYYlIiIiIhMMS0REREQmGJaIiIiITNT5t+GIiIiI3N0v/kO673z9tfETERERkfu65/rrjZ9qqjMstbnqKuMVERERkfs5fOKEaVjiniUiIiIiEwxLRERERCYYloiIiIhMMCwRERERmWBYIiIiIjLBsERERERkwvVh6aefcO7MGZccUhcRERHRxeTS5yxV/PADfjhxAh4eHsaZ+jl37hyaqs/3atrUOENERETkWnU9Z8mlYan02DF4eXmhcWPXTFidP38eFRUV8G7Z0jhDRERE5FoX9KGUMhPkqqAkpC6pk4iIiOhi4QZvIiIiIhMMS0REREQmXLpn6eTRo2jWrJnxyjXKyspwZatWxqsqH2dm4m8LFhivHOtw002Y8uyzaHL55caZC6NQ9cPWN9/EJ1lZKC8v1+eu/N3vcHePHrhvyBC8vXMnPj1w4IK0Lf/wYSxZuBDRzzyDwDZtjLPV7dqy5YK1pzbShjeTkoxXFk2aNMEfbr4Z90VGos2NN6JRo0b6/JmKCiyLjcXlV1yBRx9/3GU3FDjbD67sr5Pff485zz2HP/XujX6DBhlniYjoQnLbP6R786234pX4+MrjvogItG3XDguWLKk890RMDLzUgFtfMjjKURfJnXt378bMp5/WA/v0OXN0O15auhQD779fD/4enp5GabJn//09PWMGmjVvjr9Mn67D59mzZ3W5xiocXXPttfBu0UK/JiIi+jU12LB0mZeXnq2xHper/8P3vOwy+Fx5ZeW55mqgtc5G/FLlp0/rWQRn5P7739iwdi2GPPggHnvySVwfGKjb4XvNNej25z/rmYP6tsed2X9/N3bogDFPPIHxkyfrsPqvDz/U5WQm6YGRI/XhqlklIiKi2rj9niVZstm9bRsmqoF11P3363/ltZy3OvjFF3g+Jka/L8eTo0djfWIi/v3553hm4kT9viwRyXtPT5igl07syV17/0xN1QGpW8+edYYimYX6Ijsb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#light-mode-only)![Dark button style](data:image/png;base64,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sqhbRr0kTLojdZC70qR8SHCwbjOpwzcWfxmxURNQfv68vkXfGVkH3vUm5WSUTBZUS3vL9S+aNUsdJwglpyr1SFeaaltpc1mDJNNzEhTlPDLa5vwcRtoOrp/fSD4nKSdTgHIHpdweJ6FJtuX30OwfgKZrvOuNiOhButNdb6M2KEmnJndbyboh6cjmZKSrjj1djxhIEJE1StI5z0idovfPNsKMfL/NhwcO6M65Q3Ws0vFJuJihzjE9JRmt168PWdAs5Hwlp07pzly+v0iOK8eUY8tt6NJJy3fruKurcA1KMm0l3/Eji4UzExMxJzNdBaBUfT1yfhlhkXPWXK7XZSTQSZksVUeZ5pHjuAYlKS8BSdYqyYjZybPndPiRu8rkT6xISJw7NQNx0Vb9XVIyJSnXK6SuUh9ZtD07I0Ofa/JEq7577P0Pd6FJBdNvPvmkbt9t+z/RX6kg5Lyx6j1p8fH6utx9W7q0idyaL3WX8CUPuaa26zf03YESwpwhSQwMSsGBYzFd2jojTbe3XJv86Ri5y07WSsk6tDHmMZiqPlv5HUiLT1D7GvUdcjKqJF/HINcmdRhJO7h+fiP5nKScTBtK22WrOkg9E6KjdR0CjGk7BiUiogfnTkFpVHzhJBEREdHdGnV/642IiIjofmBQIiIiIvLAa0Gpy8f7mevzOCYRERHRSHktiVw3+aPT1w92+HjlIceSYxIRERE9KF5bzE1ERET0MOJibiIiIqK7wKBERERE5AGDEhEREZEHDEpEREREHjAoEREREXnAoERERETkAYMSERERkQcMSkREREQeMCgRERERecCgREREROQBgxIRERGRBwxKRERERB54/KO4RERERH/rOKJERERE5AGDEhEREZEHDEpEREREHjAoEREREXnAoERERETkAYMSERERkQcMSkREREQeMCgRERERecCgREREROQW8P8BjcNWhwJDnmAAAAAASUVORK5CYII=#dark-mode-only) ```html
``` #### Button Inline[โ€‹](#button-inline "Direct link to Button Inline") Use button inline utility to quickly place a small button inline with a TextField under a label. ![button inline](data:image/png;base64,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#light-mode-only)![Dark button inline](data:image/png;base64,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#dark-mode-only) ```html
``` #### Button Inline with validator[โ€‹](#button-inline-with-validator "Direct link to Button Inline with validator") FormControl with error text has to be wrapped in a `hf-button-inline-input` container to work properly. ![button inline with validation](data:image/png;base64,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#light-mode-only)![Dark button inline with validation](data:image/png;base64,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#dark-mode-only) ```html
``` --- ### Color Use color utilities to quickly style the text and background color of an element. Great for container, buttons, or any other element. Below, you can find how to style text color, background, buttons, or radio buttons. #### Text Color[โ€‹](#text-color "Direct link to Text Color") Result Loading... Live Editor #### Background Color[โ€‹](#background-color "Direct link to Background Color") Result Loading... Live Editor #### Button Color[โ€‹](#button-color "Direct link to Button Color") Result Loading... Live Editor #### Radio Button Color[โ€‹](#radio-button-color "Direct link to Radio Button Color") Result Loading... Live Editor --- ### Helpers There are several helper utilities for quick styling. #### Cursor[โ€‹](#cursor "Direct link to Cursor") Result Loading... Live Editor #### Input disabled style[โ€‹](#input-disabled-style "Direct link to Input disabled style") Style any HTML tag as disabled input control. Result Loading... Live Editor --- ### Layout Use layout utilities to quickly add layout specific stylings. #### Flex[โ€‹](#flex "Direct link to Flex") Quickly manage the layout, alignment, and sizing of grid columns, navigation, components, and more with a full suite of responsive flexbox utilities. ##### Enable flex behaviors[โ€‹](#enable-flex-behaviors "Direct link to Enable flex behaviors") Result Loading... Live Editor ##### Direction[โ€‹](#direction "Direct link to Direction") Result Loading... Live Editor Result Loading... Live Editor ##### Gap[โ€‹](#gap "Direct link to Gap") Result Loading... Live Editor Result Loading... Live Editor ##### Grow[โ€‹](#grow "Direct link to Grow") Result Loading... Live Editor ##### Shrink[โ€‹](#shrink "Direct link to Shrink") Result Loading... Live Editor ##### Auto[โ€‹](#auto "Direct link to Auto") Result Loading... Live Editor ##### Justify Content[โ€‹](#justify-content "Direct link to Justify Content") Result Loading... Live Editor ##### Align Items[โ€‹](#align-items "Direct link to Align Items") Result Loading... Live Editor ##### Align Self[โ€‹](#align-self "Direct link to Align Self") Result Loading... Live Editor #### Float[โ€‹](#float "Direct link to Float") Toggle floats on any element, across any breakpoint, using the responsive float utilities. Result Loading... Live Editor #### Width[โ€‹](#width "Direct link to Width") Set element to full width. Result Loading... Live Editor #### Display[โ€‹](#display "Direct link to Display") Quickly toggle the display value of components. ```html
``` Hide elements if the Form has only one column (mobile devices). Result Loading... Live Editor --- ### Integration SCSS files cannot be directly included in the Form, they must first be compiled into standard CSS files. The CSS files must be linked using the `link` tag within the Form Definition's header: ```html ``` Note For detailed examples have a look at the Forms provided within the FormDefinitions folder of the "formDev" or visit the official [Sass/Scss documentation.](https://sass-lang.com/) --- ### Theming Unlock creativity with our powerful theming system! Effortlessly customize the look and feel of HybridForms using intuitive themes, CSS variables for dynamic styling, and extensive style customization options. #### Color Palettes[โ€‹](#color-palettes "Direct link to Color Palettes") color-palettes.scss ```scss :where(:root) { // color scales // blue scale based on primary --blue-50: #f2f7fd; --blue-100: #e3edfb; --blue-150: #d3e5f3; //primary-light //--blue-200: #c1dcf6; // neu --blue-200: #d5ebfa; // primary-light-20 --blue-250: #a7bed5; // Primary-dirty --blue-299: #7fb8e6; //* redesign, rahmenfarbe dashboard listpage --blue-300: #66a0d2; --blue-400: #4d9ee3; --blue-500: #0072ce; // primary --blue-600: #1866b1; --blue-700: #145190; --blue-800: #154677; --blue-850: #175082; // primary-dark --blue-900: #173b63; --blue-950: #0f2642; --blue-1000: #233543; //* redesign, background color required fields // neu --mint-green: #ccebe9; --mint-green-50: #f1fafa; --mint-green-100: #ccebe9; --mint-green-200: #bde4e2; --mint-green-300: #8fd1cf; --mint-green-400: #5ab6b4; --mint-green-500: #3e9c9c; --mint-green-600: #368184; --mint-green-700: #31696d; --mint-green-800: #2f575b; --mint-green-900: #2b494e; --mint-green-950: #183034; --mint-green-dark-500: #2a5d5f; --mint-green-dark-700: #00454a; //yellorange --yellorange-50: #fff9eb; --yellorange-100: #ffedc6; --yellorange-125: #fef5e2; // background-highlight-area --yellorange-150: #ffdd9e; // warning-light --yellorange-200: #ffd988; --yellorange-225: #f9cf77; // hightlighting-border color --yellorange-250: #F89303; --yellorange-300: #d28900; //warning --yellorange-350: #ffbe67; --yellorange-400: #ffa620; --yellorange-500: #f98207; --yellorange-600: #dd5c02; --yellorange-700: #b73e06; --yellorange-800: #942f0c; --yellorange-900: #7a280d; --yellorange-950: #461202; --brownish-500: #5c461a; --brownish-700: #3a2f1a; // red --red-100: #FDE6E5; --red-200: #ff9999; --red-300: #fd8484; --red-400: #ff6666; --red-500: #ff0000; // danger --red-600: #EB0D00; --red-700: #cc0000; --red-800: #b30000; --red-900: #a80011; // green --forest-green-50: #f2fcf1; --forest-green-100: #defade; --forest-green-200: #c0f3bf; --forest-green-300: #8fe78e; --forest-green-350: #87c79f; --forest-green-400: #55d355; --forest-green-450: #62a87c; --forest-green-500: #2eb92e; --forest-green-550: #457556; --forest-green-600: #24ab24; // success --forest-green-700: #1d781d; --forest-green-800: #1c5f1c; --forest-green-900: #194e1a; --forest-green-950: #082b0a; // gray --gray-50: #F8F8F8; --gray-75: #f6f6f6; //* light-10 --gray-100: #efefef; --gray-101: #e0e0e0; //* textcolor dark --gray-150: #ededed; //print-border-color --gray-175: #e6e6e6; //print-border-color --gray-200: #dcdcdc; // light-20 --gray-250: #cccccc; // light-25 --gray-300: #bdbdbd; // light-30 --gray-400: #989898; --gray-450: #929694; --gray-500: #7c7c7c; --gray-550: #757575; --gray-600: #656565; --gray-701: #5f5f5f; //* zB, --header-icon-bg --gray-700: #525252; --gray-800: #464646; --gray-850: #333333; --gray-900: #3d3d3d; --gray-925: #333333; --gray-950: #272727; //* li item background --gray-970: #212121; --gray-990: #1d1d1d; --gray-999: #121212; //* body background --gray-200-alpha-50: rgba(220, 220, 220, 0); --white-color: #ffffff; --black-color: #000000; --gradient-blue-green: linear-gradient(90deg, #175082 53%, #0c6577 100%); // shadows --shadow-key-umbra-opacity: 0.2; --shadow-key-penumbra-opacity: 0.14; --shadow-ambient-shadow-opacity: 0.12; --shadow-0: none; --shadow-1: 0px 2px 1px -1px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 1px 1px 0px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 1px 3px 0px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-2: 0px 3px 1px -2px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 2px 2px 0px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 1px 5px 0px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-3: 0px 3px 3px -2px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 3px 4px 0px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 1px 8px 0px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-4: 0px 2px 4px -1px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 4px 5px 0px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 1px 10px 0px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-5: 0px 3px 5px -1px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 5px 8px 0px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 1px 14px 0px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-6: 0px 3px 5px -1px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 6px 10px 0px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 1px 18px 0px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-7: 0px 4px 5px -2px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 7px 10px 1px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 2px 16px 1px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-8: 0px 5px 5px -3px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 8px 10px 1px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 3px 14px 2px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-9: 0px 5px 6px -3px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 9px 12px 1px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 3px 16px 2px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-10: 0px 6px 6px -3px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 10px 14px 1px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 4px 18px 3px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-11: 0px 6px 7px -4px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 11px 15px 1px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 4px 20px 3px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-12: 0px 7px 8px -4px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 12px 17px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 5px 22px 4px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-13: 0px 7px 8px -4px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 13px 19px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 5px 24px 4px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-14: 0px 7px 9px -4px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 14px 21px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 5px 26px 4px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-15: 0px 8px 9px -5px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 15px 22px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 6px 28px 5px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-16: 0px 8px 10px -5px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 16px 24px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 6px 30px 5px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-17: 0px 8px 11px -5px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 17px 26px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 6px 32px 5px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-18: 0px 9px 11px -5px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 18px 28px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 7px 34px 6px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-19: 0px 9px 12px -6px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 19px 29px 2px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 7px 36px 6px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-20: 0px 10px 13px -6px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 20px 31px 3px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 8px 38px 7px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-21: 0px 10px 13px -6px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 21px 33px 3px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 8px 40px 7px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-22: 0px 10px 14px -6px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 22px 35px 3px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 8px 42px 7px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-23: 0px 11px 14px -7px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 23px 36px 3px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 9px 44px 8px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); --shadow-24: 0px 11px 15px -7px rgba(0, 0, 0, var(--shadow-key-umbra-opacity)), 0px 24px 38px 3px rgba(0, 0, 0, var(--shadow-key-penumbra-opacity)), 0px 9px 46px 8px rgba(0, 0, 0, var(--shadow-ambient-shadow-opacity)); } ``` #### Default Variables[โ€‹](#default-variables "Direct link to Default Variables") css-variables.scss ```scss :where(:root) { /* SAVE-AREAS: needed for getting th safe-area-inset-top value programmatically in Scaler.ts in JS, eg: getComputedStyle(document.documentElement).getPropertyValue('--sat') */ --sat: var(--safe-area-inset-top, env(safe-area-inset-top, 0px)); --sar: var(--safe-area-inset-right, env(safe-area-inset-right, 0px)); --sab: var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px)); --sal: var(--safe-area-inset-left, env(safe-area-inset-left, 0px)); --theme: light; --bg-body: var(--blue-200); --bg-body-sec: var(--color-light); // Splashscreen --bg-splash: var(--bg-body-sec); --progress-splash: var(--color-primary); // COLORS // base definitions --color-primary: var(--blue-500); --color-primary-bg: var(--color-primary); --color-primary-light: color-mix(in srgb, var(--color-primary) 20%, var(--white-color)); --color-primary-dark: color-mix(in srgb, var(--color-primary) 65%, var(--black-color)); --color-secondary: var(--mint-green-300); --color-secondary-light: var(--mint-green-200); --color-tertiary: var(--yellorange-200); --color-tertiary-light: var(--yellorange-100); --color-tertiary-dark: var(--yellorange-250); --color-warning: var(--yellorange-250); --color-warning-light: var(--yellorange-150); --color-warning-dark: var(--yellorange-400); --color-warning-text: var(--gray-925); --color-error: var(--red-600); --color-error-text: var(--color-light); --color-danger: var(--red-500); --color-danger-light: var(--red-100); --color-success: var(--forest-green-600); --color-success-dark: var(--forest-green-800); --color-highlight: var(--yellorange-100); --color-hyperlink: var(--color-primary); --color-hyperlink-hover: var(--color-primary-dark); --bg-disabled: repeating-linear-gradient( 145deg, var(--gray-100), var(--gray-100) 3px, var(--gray-200) 3px, var(--gray-200) 6px ); // checkbox und radiobox colors --color-radio-checkbox-bg: var(--color-light); --color-radio-checkbox-bg-disabled: var(--gray-100); --color-radio-checkbox: var(--blue-500); --color-radio-checkbox-checked: var(--blue-500); //light colors --bg-light: var(--white-color); --bordercolor-light: var(--white-color); --textcolor-light: var(--white-color); --color-light: var(--white-color); --color-light-inverted: var(--white-color); // dark colors --textcolor-dark: var(--black-color); --bordercolor-dark: var(--black-color); --bg-dark: var(--black-color); --overlay-bg: var(--gray-925); --color-dark: var(--black-color); --color-dark-inverted: var(--black-color); // only formpage --formpage-bg-body: var(--bg-body); --formpage-color-primary: var(--color-primary); --formpage-color-primary-bg: var(--formpage-color-primary); --formpage-color-primary-light: color-mix(in srgb, var(--formpage-color-primary) 20%, var(--white-color)); --formpage-color-primary-lighter: color-mix(in srgb, var(--formpage-color-primary) 6%, var(--white-color)); --formpage-color-primary-dark: color-mix(in srgb, var(--formpage-color-primary) 65%, var(--black-color)); --formpage-color-primary-darker: color-mix(in srgb, var(--formpage-color-primary) 25%, var(--black-color)); // fonts & font-sizes --font-stack: 'Open Sans', 'Helvetica Neue Light', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; --font-stack-monospace: Courier New, Courier, monospace; --fontsize-control: 15px; --fontsize-control-label: 13px; --fontsize-filterbar: 11px; --textcolor: var(--gray-925); --textcolor-inverted: var(--color-light); --textcolor-invalid: var(--black-color); --textcolor-hover: var(--gray-700); --textcolor-sec: var(--gray-600); --textcolor-placeholder: var(--gray-600); --selection-textcolor: var(--color-light); --selection-bg: var(--color-primary-dark); --header-button-bg: transparent; --header-button-bg-active: var(--bg-body); --header-button-bg-hover: transparent; --header-button-color: var(--gray-50); --header-button-border: var(--bg-body); --header-button-border-hover: var(--color-secondary); --info-msg-bg: var(--gray-950); --info-msg-bg-lighter: var(--gray-950); --info-msg-textcolor: var(--color-light); --info-msg-bordercolor: var(--blue-299); // Block title --block-separator-color: var(--formpage-color-primary-light); --blocktitle-padding-left: 0px; // status-icons --status-icon-color: var(--formpage-color-primary); // controls --control-bg: var(--gray-50); --control-bg-transparent: transparent; --control-bg-filled: var(--bg-light); --control-bg-disabled: var(--bg-disabled); --control-bg-req: var(--formpage-color-primary-lighter); --control-textcolor: var(--color-dark); --control-textcolor-placeholder: var(--textcolor-placeholder); --control-bg-feature: var(--formpage-bg-body); --control-border-color-feature: var(--color-light); --control-bordercolor: var(--gray-450); --control-bordercolor-required-not-filled: var(--formpage-color-primary); --control-bordercolor-view: var(--gray-450); --control-bordercolor-disabled: var(--gray-200); --control-bordercolor-hover: var(--gray-500); --control-icon-color: var(--color-dark); --control-icon-color-disabled: var(--gray-550); --control-checkbox-bg: var(--color-radio-checkbox-bg); --control-checkbox-bg-filled: var(--color-radio-checkbox-checked); --control-checkbox-icon: var(--color-radio-checkbox-bg); --control-check-radiobox-border: var(--gray-700); --control-checkbox-border-filled: var(--color-radio-checkbox-checked); --control-radiobox-bg: var(--color-radio-checkbox-bg); --control-radiobox-icon: var(--color-radio-checkbox-checked); --control-radiobox-border-filled: var(--color-radio-checkbox-checked); --control-radioCheck-highlight-inactive: var(--gray-600); --control-radioCheck-highlight-active: var(--gray-925); --control-toggle-btn-active: var(--formpage-color-primary); --control-toggle-btn-bg: var(--bg-light); --control-toggle-btn-border: var(--gray-250); --control-toggle-btn-text: var(--textcolor-dark); --label-bg: var(--gray-550); --feature-label-bg: var(--gray-550); --label-bg-required: var(--formpage-color-primary-bg); --label-textcolor: var(--textcolor-light); --label-checkbox-textcolor: var(--color-dark); --label-textcolor-filled: var(--color-light); // formpage block content --highlight-border-color: var(--yellorange-225); --highlight-area-bg: var(--yellorange-125); // tooltip // default --tooltip-textcolor: var(--color-light); // required --tooltip-textcolor-req: var(--label-bg-required); --tooltip-flyout-bg: var(--bg-light); --tooltip-flyout-accent: var(--blue-299); // badge-new --badge-new-bg-color: var(--textcolor); --badge-new-textcolor: var(--textcolor-inverted); // kendo --kendo-popup-bg: var(--white-color); --kendo-popup-textcolor: var(--gray-800); --kendo-popup-textcolor-dim: var(--gray-600); --kendo-link-color: var(--formpage-color-primary-dark); --kendo-link-color-hover: var(--kendo-link-color); --kendo-chip-bg: var(--gray-100); --kendo-chip-bg-hover: var(--gray-200); --kendo-chip-border-color: var(--gray-200); // SelectControls --kendo-list-item-bg-odd: var(--gray-150); // DatePicker --kendo-calendar-header-bg: var(--gray-50); --kendo-item-bg-hover: var(--gray-150); // TimePicker --kendo-time-highlight-bordercolor: rgba(0, 0, 0, 0.16); // NumericField --kendo-input-button-bg: var(--gray-50); --kendo-input-button-bg-hover: var(--gray-100); // print --print-textcolor-label: var(--gray-100); --print-bordercolor: var(--gray-150); // buttons --btn-bg: var(--gray-100); --btn-dark-color: var(--gray-800); --btn-dark-color-hover: var(--gray-600); --btn-dark-textcolor: var(--color-light); --btn-textcolor-dark: var(--color-dark); --btn-textcolor-light: var(--color-light); --btn-primary-color: var(--color-primary); --btn-primary-color-light: var(--blue-300); --btn-primary-color-dark: var(--color-primary-dark); // for focus/hover and border --btn-primary-textcolor: var(--color-light); --btn-primary-color-disabled: var(--blue-200); --btn-primary-color-dark-disabled: var(--blue-250); --btn-primary-textcolor-disabled: var(--gray-550); --btn-secondary-color: var(--color-secondary-light); --btn-secondary-color-dark: var(--color-secondary); // for focus/hover and border --btn-secondary-color-toggled: var(--btn-secondary-color-dark); --btn-secondary-color-border: var(--color-secondary); // for focus/hover and border --btn-secondary-textcolor: var(--color-dark); --btn-secondary-textcolor-dark: var(--btn-secondary-textcolor); --btn-secondary-textcolor-disabled: var(--gray-550); --btn-accent-bordercolor: var(--bg-light); --btn-tertiary-color: var(--color-tertiary); --btn-gray-color: var(--gray-250); --btn-gray-color-light: var(--gray-150); --btn-gray-color-dark: var(--gray-550); --btn-gray-textcolor: var(--textcolor); --btn-gray-textcolor-light: var(--textcolor-inverted); --btn-gray-color-disabled: var(--gray-100); --btn-gray-color-dark-disabled: var(--gray-200); --btn-gray-textcolor-disabled: var(--gray-550); --btn-danger-color: var(--red-500); --btn-danger-color-light: var(--red-300); --btn-danger-color-dark: var(--red-900); --btn-danger-textcolor: var(--color-light); --btn-danger-color-disabled: var(--red-200); --btn-danger-color-dark-disabled: var(--red-100); --btn-danger-textcolor-disabled: var(--gray-550); --btn-warning-color: var(--color-warning); --btn-warning-color-light: var(--color-warning-light); --btn-warning-color-dark: var(--yellorange-300); --btn-warning-textcolor: var(--color-dark); --btn-warning-color-disabled: var(--yellorange-100); --btn-warning-color-dark-disabled: var(--yellorange-150); --btn-warning-textcolor-disabled: var(--gray-550); --btn-success-color: var(--forest-green-400); --btn-success-color-light: var(--forest-green-300); --btn-success-color-dark: var(--color-success); --btn-success-textcolor: var(--color-dark); --btn-success-color-disabled: var(--forest-green-100); --btn-success-color-dark-disabled: var(--forest-green-200); --btn-success-textcolor-disabled: var(--gray-550); --btn-radio-gray: #f1f1f1; --btn-radio-gray-highlight: #b3b3b3; --btn-radio-green: color-mix(in srgb, var(--btn-radio-green-highlight) 10%, var(--white-color)); --btn-radio-green-highlight: #2c8a4a; --btn-radio-lightGreen: color-mix(in srgb, var(--btn-radio-lightGreen-highlight) 10%, var(--white-color)); --btn-radio-lightGreen-highlight: #73c82b; --btn-radio-yellow: color-mix(in srgb, var(--btn-radio-yellow-highlight) 10%, var(--white-color)); --btn-radio-yellow-highlight: #fbc706; --btn-radio-orange: color-mix(in srgb, var(--btn-radio-orange-highlight) 10%, var(--white-color)); --btn-radio-orange-highlight: #f47216; --btn-radio-red: color-mix(in srgb, var(--btn-radio-red-highlight) 10%, var(--white-color)); --btn-radio-red-highlight: #ef3121; // header --header-bg: var(--bg-light); --header-textcolor: var(--textcolor); --header-icon-bg: var(--gray-100); --header-icon-success-color: #85b773; --header-bar-bg: var(--bg-light); --header-bar-bg-selected: var(--btn-secondary-color); --header-bar-textcolor: var(--textcolor); --header-bar-textcolor-selected: var(--textcolor); --header-bar-bordercolor: var(--header-bar-bg-selected); --header-search-bg: var(--gray-200); --listitems-bg: var(--bg-light); --listitems-bg-secondary: var(--gray-150); --listitems-unselected-icon-color: var(--gray-200); --listitems-addbutton-bg: var(--btn-secondary-color); --featureitems-bg: var(--bg-light); --featureitems-bg-secondary: var(--tab-content-bg); --featureitems-color: var(--textcolor); --featureitems-info-icons-bg: var(--gray-200); --dialog-bg: var(--bg-light); --tab-content-bg: var(--bg-light); --tab-content-border: none; --tab-bg: var(--tab-content-bg); --tab-bg-inactive: var(--formpage-bg-body); --tab-list-active-borderbottom: none; --tab-list-color-active: var(--textcolor); --tab-list-color-inactive: var(--gray-550); --tab-nav-bg: var(--gray-200); --tab-nav-bg-active: var(--gray-300); --tab-anchor-bg: var(--gray-200); --tabmenu-border-color: var(--color-light); --splitview-bg: var(--bg-light); --splitview-textcolor: var(--color-dark); --splitview-textcolor-accent: var(--textcolor-inverted); --splitview-btn-inactive: var(--bg-light); --splitview-btn-active: var(--formpage-bg-body); --splitview-btn-border: var(--formpage-bg-body); --splitview-features-bg: var(--formpage-bg-body); --splitview-btn-border-features: var(--formpage-bg-body); --splitview-btn-border-features-active: var(--splitview-btn-border-features); --splitview-icon-color: var(--formpage-color-primary); --splitview-icon-completed-color: var(--gray-550); --splitview-icon-textcolor: var(--color-light); --splitview-feature-icon-color: var(--gray-550); --toolbar-bg: var(--bg-light); --toolbar-btn-hover: var(--bg-light); --toolbar-btn-selected: var(--color-secondary); --toolbar-btn-selected-textcolor: var(--btn-secondary-textcolor-dark); --toolbar-bordercolor: var(--gray-250); --toolbar-inline-bg: var(--gray-200); --view-bg: var(--bg-light); --border-radius-xs: calc(var(--border-radius) - 4px); --border-radius-sm: calc(var(--border-radius) - 2px); --border-radius: 6px; --border-radius-lg: calc(var(--border-radius) + 2px); // CheckBox, RadioButton sizes --radio-button-size: 20px; --radio-checked-multiplier: 0.5; --check-button-size: 20px; --check-checked-multiplier: 0.5; // maps --map-btn-bg: var(--bg-light); --map-ml-btn-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1); --ol-background-color: white; --ol-accent-background-color: #f5f5f5; --ol-subtle-background-color: rgba(128, 128, 128, 0.25); --ol-partial-background-color: rgba(255, 255, 255, 0.75); --ol-foreground-color: #333333; --ol-subtle-foreground-color: #666666; --ol-brand-color: #00aaff; // Opacity disabled --opacity-disabled: 1; --btn-bg-disabled: var(--bg-disabled); --ease-transition-all: all 0.25s cubic-bezier(0, 0, 0.2, 1), outline 0s, outline-offset 0s; } :where([data-theme-mode='dark']) { --color-dark: var(--gray-999); --theme: dark; --bg-body: var(--color-dark); --bg-body-sec: var(--gray-990); --bg-disabled: repeating-linear-gradient( 145deg, var(--gray-950), var(--gray-950) 3px, var(--gray-800) 3px, var(--gray-800) 6px ); --progress-splash: var(--white-color); --color-danger: #c12828; --color-danger-light: var(--yellorange-900); --color-error: #c12828; --color-primary: var(--blue-500); --color-primary-light: color-mix(in srgb, var(--color-primary) 50%, var(--black-color)); --color-primary-dark: color-mix(in srgb, var(--color-primary) 50%, var(--white-color)); --color-secondary-light: var(--mint-green-dark-500); --color-secondary: var(--mint-green-dark-700); --color-tertiary: var(--color-warning); --color-tertiary-light: var(--color-warning-light); --color-tertiary-dark: var(--color-warning-dark); --formpage-color-primary-light: color-mix(in srgb, var(--formpage-color-primary) 50%, var(--black-color)); --formpage-color-primary-dark: color-mix(in srgb, var(--formpage-color-primary) 50%, var(--white-color)); --color-warning: #ca9c45; --color-warning-light: #4e3e31; --color-warning-dark: #573f12; --color-radio-checkbox-bg: var(--gray-900); --color-radio-checkbox-bg-disabled: var(--gray-950); --color-radio-checkbox: var(--color-light); --color-radio-checkbox-checked: var(--color-light); --color-highlight: var(--yellorange-200); --color-light-inverted: var(--color-dark); --color-dark-inverted: var(--white-color); --textcolor: var(--gray-101); --textcolor-hover: var(--gray-300); --textcolor-sec: var(--gray-300); --textcolor-inverted: var(--color-dark); --textcolor-invalid: var(--gray-100); --textcolor-placeholder: var(--gray-500); --header-bg: var(--gray-950); //* hsi --gray-950 --header-icon-bg: var(--gray-701); --header-icon-color: var(--gray-100); --header-icon-success-color: #608c42; --header-bar-bg: var(--gray-850); --header-bar-bg-selected: var(--gray-101); --header-bar-textcolor: var(--textcolor); --header-bar-textcolor-selected: var(--textcolor-inverted); --header-bar-bordercolor: var(--gray-101); --header-button: var(--gray-800); --header-search-bg: var(--gray-800); --listitems-bg: var(--gray-850); //* hsi --gray-950 --listitems-bg-secondary: var(--gray-990); --listitems-unselected-icon-color: var(--gray-900); --listitems-addbutton-bg: transparent; --featureitems-color: var(--color-light); --toolbar-bg: var(--gray-950); --toolbar-btn-hover: var(--gray-950); --toolbar-bordercolor: var(--gray-800); --toolbar-inline-bg: var(--gray-800); --dialog-bg: var(--gray-950); --splitview-bg: var(--gray-950); --splitview-page-icon-color-required: var(--formpage-color-primary); --splitview-textcolor: var(--textcolor); --splitview-textcolor-accent: var(--textcolor); --splitview-btn-inactive: var(--gray-600); --splitview-page-icon-color: var(--gray-600); --splitview-btn-border: var(--gray-800); --splitview-features-bg: var(--formpage-bg-body); --splitview-btn-border-features: var(--gray-800); --splitview-btn-border-features-active: var(--formpage-bg-body); --splitview-icon-completed-color: var(--gray-701); --splitview-feature-icon-color: var(--gray-300); --tab-content-bg: var(--gray-950); --tab-list-active-borderbottom: 1px solid var(--gray-990); --tab-list-color-inactive: var(--textcolor-sec); --tab-nav-bg: var(--gray-990); --tab-nav-bg-active: var(--gray-970); --tab-anchor-bg: var(--gray-900); --tabmenu-border-color: var(--gray-800); --control-bg: var(--gray-990); --control-bg-req: var(--formpage-color-primary-darker); --control-bg-filled: var(--gray-990); // only modern --control-textcolor: var(--gray-75); --control-textcolor-placeholder: var(--textcolor-placeholder); --control-border-color-feature: var(--gray-701); --control-bordercolor: var(--gray-701); --control-bordercolor-view: var(--gray-250); --control-bordercolor-disabled: var(--gray-950); --control-bordercolor-hover: var(--gray-700); --control-checkbox-bg-filled: var(--white-color); --control-check-radiobox-border: var(--gray-700); --control-radioCheck-highlight-inactive: var(--textcolor); --control-radioCheck-highlight-active: var(--textcolor); --control-toggle-btn-bg: var(--gray-950); --control-toggle-btn-border: var(--gray-950); --control-toggle-btn-text: var(--gray-75); --control-icon-color: var(--gray-200); --control-icon-color-disabled: var(--gray-800); --tooltip-textcolor: var(--label-textcolor); --tooltip-textcolor-req: var(--tooltip-textcolor); --label-bg: var(--gray-701); --feature-label-bg: var(--gray-701); --label-textcolor: var(--textcolor); --label-checkbox-textcolor: var(--textcolor); --tooltip-flyout-bg: var(--gray-990); // formpage block content --highlight-border-color: var(--brownish-500); --highlight-area-bg: var(--brownish-700); // badge-new --badge-new-textcolor: var(--textcolor-inverted); // kendo --kendo-popup-bg: var(--gray-800); --kendo-popup-textcolor: var(--gray-200); --kendo-popup-textcolor-dim: var(--gray-400); --kendo-link-color-hover: var(--formpage-color-primary); --kendo-chip-bg: var(--gray-700); --kendo-chip-bg-hover: var(--gray-600); --kendo-chip-border-color: var(--gray-600); --kendo-item-bg-hover: var(--gray-600); // SelectControls --kendo-list-item-bg-odd: var(--gray-900); // DatePicker --kendo-calendar-header-bg: var(--gray-900); // TimePicker --kendo-time-highlight-bordercolor: rgba(255, 255, 255, 0.26); // NumericField --kendo-input-button-bg: var(--gray-970); --kendo-input-button-bg-hover: var(--gray-900); // --btn-bg: var(--gray-950); --btn-bg: var(--gray-990); --btn-gray-color: var(--gray-700); --btn-gray-color-light: var(--gray-600); --btn-gray-color-dark: var(--gray-800); --btn-gray-textcolor: var(--textcolor); --btn-gray-textcolor-light: var(--textcolor); --btn-gray-color-disabled: var(--gray-500); --btn-gray-color-dark-disabled: var(--gray-700); --btn-gray-textcolor-disabled: var(--textcolor-sec); --btn-secondary-textcolor: var(--white-color); --btn-secondary-textcolor-disabled: var(--white-color); --btn-accent-bordercolor: var(--gray-600); --btn-radio-gray: #373737; --btn-radio-gray-highlight: #7a7a7a; --btn-radio-green: color-mix(in srgb, var(--btn-radio-green-highlight) 20%, var(--black-color)); --btn-radio-green-highlight: #246e3b; --btn-radio-lightGreen: color-mix(in srgb, var(--btn-radio-lightGreen-highlight) 20%, var(--black-color)); --btn-radio-lightGreen-highlight: #5ca023; --btn-radio-yellow: color-mix(in srgb, var(--btn-radio-yellow-highlight) 20%, var(--black-color)); --btn-radio-yellow-highlight: #c99f04; --btn-radio-orange: color-mix(in srgb, var(--btn-radio-orange-highlight) 20%, var(--black-color)); --btn-radio-orange-highlight: #c35b10; --btn-radio-red: color-mix(in srgb, var(--btn-radio-red-highlight) 20%, var(--black-color)); --btn-radio-red-highlight: #bf271a; } :where([data-theme-type^='modern']) { --blocktitle-padding-left: 5px; // tooltip // default --tooltip-textcolor: var(--label-bg); } :where([data-theme-type^='modern'][data-theme-mode='light']) { --theme: light; // label --label-bg: var(--gray-500); --feature-label-bg: var(--gray-500); --label-textcolor: var(--gray-600); --label-textcolor-req: var(--formpage-color-primary-dark); } :where([data-theme-type^='modern'][data-theme-mode='dark']) { --label-bg: var(--gray-600); --feature-label-bg: var(--gray-600); --label-textcolor: var(--gray-200); --label-textcolor-req: var(--formpage-color-primary-dark); // tooltip // default --tooltip-textcolor: var(--label-textcolor); --control-bg: var(--gray-925); --control-bordercolor: var(--gray-700); --color-primary-light: color-mix(in srgb, var(--formpage-color-primary) 50%, var(--black-color)); } [data-theme-type='pdf'] { --bg-body: var(--bg-light); --control-bordercolor-required-not-filled: var(--gray-450); } ``` --- ### ButtonControl The ButtonControl invokes a predefined custom callback. ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** ##### buttonType - required[โ€‹](#buttonType "Direct link to buttonType") Define the size of the Button. **How to use:** `buttonType: 'medium'` **Type:** `'small' | 'medium' | 'large'` *** ##### callback - required[โ€‹](#callback "Direct link to callback") Call a pre-defined JS-method to do something when the Button is invoked. **How to use:** `callback: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function() => Promise` *** ##### audioFeedback[โ€‹](#audioFeedback "Direct link to audioFeedback") Enable/Disable audio feedback on click. **How to use:** `audioFeedback: true` **Type:** `boolean` **Default:** `true` *** ##### buttonHeading[โ€‹](#buttonHeading "Direct link to buttonHeading") Define a label for the control element. **How to use:** `buttonHeading: 'Test'` **Type:** `string` *** ##### buttonLabel[โ€‹](#buttonLabel "Direct link to buttonLabel") Define the Button caption.
Only visible by choosing buttonType 'medium' or 'large'. **How to use:** `buttonType: 'medium'` **Type:** `string` *** ##### buttonStyle[โ€‹](#buttonStyle "Direct link to buttonStyle") Define the style of the Button. **How to use:** `buttonStyle: 'primary'` **Type:** `'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning'` *** ##### callbackFeedback[โ€‹](#callbackFeedback "Direct link to callbackFeedback") Enable/Disable callback feedback on callback funtion return. **How to use:** `callbackFeedback: true` **Type:** `boolean` **Default:** `true` *** ##### disableOnClick[โ€‹](#disableOnClick "Direct link to disableOnClick") Disable Button while callback function is executed. **How to use:** `disableOnClick: false` **Type:** `boolean` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### icon[โ€‹](#icon "Direct link to icon") Sets the icon of the Button. Can be FontAwesome Icon or SVG Image. **How to use:** `icon: 'fa-barcode-scan'` **Type:** `string` *** ##### nextToField[โ€‹](#nextToField "Direct link to nextToField") Define the Form Control the Button should be placed next to. Looks like [this](https://manuals.hybridforms.net/docs/10.0/custom-styling-guide/hf-utility-classes/button.md#button-inline-with-validator) **How to use:** `nextToField: 'address_city'` **Type:** `string` *** ##### vibrationFeedback[โ€‹](#vibrationFeedback "Direct link to vibrationFeedback") Enable/Disable vibration feedback on click. **How to use:** `vibrationFeedback: true` **Type:** `Boolean` **Default:** `true` --- ### CheckBox An HTML CheckBox to be used in Forms. ```html ``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** ##### defaultValue[โ€‹](#defaultValue "Direct link to defaultValue") Set the defaultValue to "true" to display the CheckBox as checked by default. A Custom Code function can be used to set defaultValue. **How to use:** `defaultValue: true` **Type:** `boolean | function` **Signature:** `function() => boolean` *** ##### disabled[โ€‹](#disabled "Direct link to disabled") Set "true" whenever the CheckBox should be disabled. **How to use:** `disabled: true` **Type:** `boolean` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### htmlLabel[โ€‹](#htmlLabel "Direct link to htmlLabel") Define a label that allows HTML tags inside the text set next to the CheckBox. If a label and a htmlLabel is set, the htmlLabel overwrites the label. **How to use:** `htmlLabel: 'Cover glass broken'` **Type:** `string` *** ##### label[โ€‹](#label "Direct link to label") Define a label set next to the CheckBox (optional) **How to use:** `label: 'Cover glass broken'` **Type:** `string` *** ##### list[โ€‹](#list "Direct link to list") Set this property to "true", if data connected with this control should be used as a sorting/filtering/grouping option on the ListPage, in template objects (eg. the [listTemplate](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/titletemplates.md#list-template-list-entry)) and in Admin UI listings. **How to use:** `list: true` **Type:** `boolean` *** ##### listOptions[โ€‹](#listOptions "Direct link to listOptions") Define additional options for controls where list equals true. E.g. set custom label for filter/sort/group dialogs or hide them completely. **How to use:** `listOptions: {...}` **Type:** `{ dialogText: string, dialogHide: boolean }` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(data: { value: boolean, hfValue: string }) => void` *** ##### persistent[โ€‹](#persistent "Direct link to persistent") It is the value where the "user" sets the initial value of the CheckBox to the value of the previous Form Item of the current user and overwrites any defaultValue. **How to use:** `persistent: 'user'` **Type:** `'user'` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `Boolean` *** ##### style[โ€‹](#style "Direct link to style") Define the display behaviour of the RadioBox and its label depending on its status (checked/unchecked). Default is the previously familiar behavior, highlightChecked softens the unchecked input ctrl and its label and emphasizes the checked control by bold font and dark font color. **How to use:** `style: 'default'` **Type:** `'default' | 'highlightChecked' | 'toggleButton' | 'backgroundHighlight'` *** ##### toggle[โ€‹](#toggle "Direct link to toggle") Define up to two CSS classes applied to the container-div of the CheckBox to emphasize the toggle-effect of the Form Control. At least the "defaultClass" has to be defined. **Note**: Use in case of style: 'toggleButton' to assign the background color, this option is ignored in case of the other two possibilities. **How to use:** `toggle: {defaultClass: 'hf-radio-orange', checkedClass: 'highlight'}` **Type:** `string` *** ##### visiting[โ€‹](#visiting "Direct link to visiting") Set "true" whenever the Form element should be marked as "visited" when the user has clicked or tapped at the Form field. **How to use:** `visiting: true` **Type:** `boolean` #### listOptions Object[โ€‹](#listoptions-object "Direct link to listOptions Object") *** ##### dialogHide[โ€‹](#dialogHide "Direct link to dialogHide") Hide field from filter/sort/group dialogs. **How to use:** `dialogHide: true` **Type:** `boolean` *** ##### dialogText[โ€‹](#dialogText "Direct link to dialogText") Set custom label for filter/sort/group dialogs. **How to use:** `dialogText: 'Display Text'` **Type:** `string` #### copyValueFrom[โ€‹](#copyvaluefrom "Direct link to copyValueFrom") *** Define a FormControl that synchronizes its value with the current field. This synchronization process occurs upon navigating to the page where the current control is situated. It only occurs if the field is empty or the mode is set to "overwrite". ```html ``` Option interface ```typescript interface ICopyValueFromObject { sourceId: string; mode: 'overwrite' | null; callback: (value: string) => string; } type CopyValueFromType = string | ICopyValueFromObject; ``` ##### callback[โ€‹](#callback "Direct link to callback") Specify a function to process value before copy. **How to use:** `callback: HFFormDefinition.Namespace.processValue` **Type:** `function` **Signature:** `function(value: string) => string` *** ##### mode[โ€‹](#mode "Direct link to mode") Specify if target field gets overwritten. Default behaviour is to only copy to empty fields. **How to use:** `mode: 'overwrite'` **Type:** `string` *** ##### sourceId[โ€‹](#sourceId "Direct link to sourceId") Specify source id **How to use:** `sourceId: 'target_id'` **Type:** `string` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") ```html ``` For each checked CheckBox inside your Forms there are two value pairs of stored data: First the information if the Checkbox is checked ```json { "id": "repair_cover_glass_broken", "value": true } ``` and for the defined value: ```json { "id": "repair_cover_glass_broken_HFValue", "value": "Cover glass broken" } ``` --- ### ComboBox The values of the control "ComboBox" can be provided as static datasource (data formatted like a Json Array inside your template) or in case of a external datasource e.g. by referencing a SharePoint list by linking to the URL or by providing a oData source. **static datasource:** ```html
``` **external datasource (URL):** ```html
``` **multilingual external datasource (URL):** ```html
``` **external datasource (oData):** ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** Options of the kendo component are also available. [read more](https://docs.telerik.com/kendo-ui/api/javascript/ui/combobox) ##### dataTextField - required[โ€‹](#dataTextField "Direct link to dataTextField") Define the text of the key-value pair. **How to use:** `dataTextField: 'name'` **Type:** `string` *** ##### dataValueField - required[โ€‹](#dataValueField "Direct link to dataValueField") Define the value of the key-value pair. **How to use:** `dataValueField: 'code'` **Type:** `string` *** ##### anytext[โ€‹](#anytext "Direct link to anytext") Set "false" whenever free text input should be prevented. **How to use:** `anytext: false` **Type:** `boolean` **Default:** `true` *** ##### checkValueInitially[โ€‹](#checkValueInitially "Direct link to checkValueInitially") Stored values gets initially checked if they are contained in the data source that is defined on the control. In certain scenarios this is not desireable. **How to use:** `checkValueInitially: true` **Type:** `boolean` **Default:** `true` *** ##### dataSource[โ€‹](#dataSource "Direct link to dataSource") Provide the data for the drop down selection formatted like a Json Array inside your template. **How to use:** `dataSource: [{name: 'Bauer, F', code: 'Bauer, F'}, {name: 'Gruber, P', code: 'Gruber,P'}]` **Type:** `json pseudo array` *** ##### defaultValue[โ€‹](#defaultValue "Direct link to defaultValue") Define the value selected in newly created Forms. **Note:** This must be the appropiate dataValueField value. A Custom Code function can be used to set defaultValue. **How to use:** `defaultValue: 'Title1',` **Type:** `string | function` **Signature:** `function() => string` *** ##### disabled[โ€‹](#disabled "Direct link to disabled") Set "true" whenever the ComboBox should be disabled. **How to use:** `disabled: true` **Type:** `boolean` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### filterItems[โ€‹](#filterItems "Direct link to filterItems") Define the filtering options for the DropDownList. Can be used to search the list in more than one datasource column. A field entry is required. The operator's default entry is `contains`. [More infos](https://docs.telerik.com/kendo-ui/api/javascript/data/datasource/configuration/filter) **How to use:** `[{ field: 'name', operator: 'contains' }, { field: 'address' }]` **Type:** `{ field: string; operator?: string; }[]` *** ##### formControlMapping[โ€‹](#formControlMapping "Direct link to formControlMapping") Define a mapping object to copy fields from the selected dataItem to given Form Controls. [More infos](#formcontrolmapping) **How to use:** `{ example_id: 'example_key' }` **Type:** `IFormControlMapping` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### highlightTemplate[โ€‹](#highlightTemplate "Direct link to highlightTemplate") Define the highlight format for filtered results of the ComboBox popup. Accepts a [Kendo Template](https://docs.telerik.com/kendo-ui/api/javascript/kendo/methods/template). **Important:** Kendo Templates use `highlight` as default placeholder for the highlighted text. **How to use:** `highlightTemplate: '#: highlight #'` **Type:** `string` *** ##### i18nDataTextField[โ€‹](#i18nDataTextField "Direct link to i18nDataTextField") Use the i18nDataTextfield instead of the dataTextfield to use multilingual catalogs in addition to the translation.json file. **How to use:** `{ en: 'Streetname', de: 'PLZ', default: โ€˜Streetname' }` **Type:** `{ default: string, [langCode: string]: string }` *** ##### itemTemplate[โ€‹](#itemTemplate "Direct link to itemTemplate") Define the formatting of the ComboBox values for display e.g. combining one or more columns of the datasource for single selection. Accepts a [Kendo Template](https://docs.telerik.com/kendo-ui/api/javascript/kendo/methods/template) or a function returning a string. **Important:** Have to return string inside a wrapping element. Unless `template` option, `itemTemplate` keeps the original filter highlighting. **How to use:** `itemTemplate: '#: entry1 # - #: entry2 #'` **Type:** `string | function` **Signature:** `function(item: any) => string` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'Technician'` **Type:** `string` *** ##### list[โ€‹](#list "Direct link to list") Set this property to "true" if data connected with this control should be a sorting/filtering/grouping option on the ListPage, is used in template objects (eg. the [listTemplate](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/titletemplates.md#list-template-list-entry)) or it should show up in Admin UI listings. **How to use:** `list: true` **Type:** `boolean` *** ##### listOptions[โ€‹](#listOptions "Direct link to listOptions") Set additional options for controls with list equals true. E.g. set custom label for filter/sort/group dialogs or hide them completely. **How to use:** `listOptions: {...}` **Type:** `{ dialogText: string, dialogHide: boolean }` *** ##### minLength[โ€‹](#minLength "Direct link to minLength") The minimum number of characters the user needs to type before a search is performed. Set a higher value than 1 whenever the search could match a lot of items. **How to use:** `minLength: 3` **Type:** `number` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(data: { value: string, text: string }) => void` *** ##### persistent[โ€‹](#persistent "Direct link to persistent") It is the value where the "user" sets the initial selected value of the ComboBox to the value of the previous Form Item of the current user and overwrites any defaultValue. **How to use:** `persistent: 'user'` **Type:** `'user'` *** ##### placeholder[โ€‹](#placeholder "Direct link to placeholder") Define a placeholder text for the ComboBox. **How to use:** `placeholder: 'Please select ...'` **Type:** `string` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `boolean` *** ##### tooltip[โ€‹](#tooltip "Direct link to tooltip") Write a comment to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the information will occur. **How to use:** `tooltip: 'Please indicate at least one cause of damage.'` **Type:** `string` *** ##### tooltipTemplate[โ€‹](#tooltipTemplate "Direct link to tooltipTemplate") Write an ID of an HTML container to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the content of the container will occur. **How to use:** `tooltipTemplate: 'example_control_tooltip'` **Type:** `string` *** ##### url[โ€‹](#url "Direct link to url") The URL must be a server relative SharePoint URL. For instance, the oData link to a SharePoint list. **How to use:** `url: '/_api/web/lists/getbytitle('SP')/Items?$select=Title&$orderby=Title'` **Type:** `string` *** ##### valueMapperDelay[โ€‹](#valueMapperDelay "Direct link to valueMapperDelay") Add a delay to the Kendo ValueMapper. Useful for very large catalogs. **How to use:** `valueMapperDelay: true` **Type:** `boolean` *** ##### visiting[โ€‹](#visiting "Direct link to visiting") Set "true" whenever the Form element should be marked as "visited" when the user has clicked or tapped at the Form field. **How to use:** `visiting: true` **Type:** `boolean` #### listOptions Object[โ€‹](#listoptions-object "Direct link to listOptions Object") *** ##### dialogHide[โ€‹](#dialogHide "Direct link to dialogHide") Hide field from filter/sort/group dialogs. **How to use:** `dialogHide: true` **Type:** `boolean` *** ##### dialogText[โ€‹](#dialogText "Direct link to dialogText") Set custom label for filter/sort/group dialogs. **How to use:** `dialogText: 'Display Text'` **Type:** `string` Note Please follow the conventions to build an OData Source Link by considering the following documentations: * [Working with lists and list items with REST](https://msdn.microsoft.com/EN-US/library/dn292552.aspx) * [Use oData query operations in SharePoint REST requests](https://msdn.microsoft.com/EN-US/library/fp142385.aspx) * [oData - the best way to REST](http://www.odata.org/) #### formControlMapping[โ€‹](#formcontrolmapping "Direct link to formcontrolmapping") The mapping objects consist of keys which are the Form Control IDs to copy to and the value which can be a data source key or an object with the data source key and a format function. By every value change the specified data source entries are copied to the given Form Controls. ```html
``` ```typescript type FormControlMappingType = { key: string; callback: (dataItem: any, dataKey: string) => any; }; interface IFormControlMapping { [id: string]: string | FormControlMappingType; } ``` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") ```html
``` For each ComboBox inside your Forms there are two value pairs of stored data: First the information for the ComboBox itself ```json { "id": "technician", "value": "3521" } ``` and second for the selected value: ```json { "id": "technician_HFComboText", "value": "Simon, R" } ``` --- ### Condition Conditions can be set to HTML areas using the `
` tag and the control `Condition` within a block. Info For detailed information visit [Conditions](https://manuals.hybridforms.net/docs/10.0/form-templates/features/conditions.md) ```html
``` --- ### DataControl Example ```html
``` Note The DataControl is a hidden control that can be used to store data in the Form. The data is stored in the Form as a JSON string. #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** ##### defaultValue[โ€‹](#defaultValue "Direct link to defaultValue") Provide a default object for the control. A Custom Code function can be used to set defaultValue. **How to use:** `defaultValue: { testEntry: 'testValue' }` **Type:** `object | function` **Signature:** `function() => object` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(value: object) => void` *** ##### persistent[โ€‹](#persistent "Direct link to persistent") It is the value where the "user" sets the initial value of the DataControl to the value of the previous Form item of the current user and overwrites any defaultValue. **How to use:** `persistent: 'user'` **Type:** `'user'` #### copyValueFrom[โ€‹](#copyvaluefrom "Direct link to copyValueFrom") *** Define a FormControl that synchronizes its value with the current field. This synchronization process occurs upon navigating to the page where the current control is situated. It only occurs if the field is empty or the mode is set to "overwrite". ```html
``` Option interface ```typescript interface ICopyValueFromObject { sourceId: string; mode: 'overwrite' | null; callback: (value: string) => string; } type CopyValueFromType = string | ICopyValueFromObject; ``` ##### callback[โ€‹](#callback "Direct link to callback") Specify a function to process value before copy. **How to use:** `callback: HFFormDefinition.Namespace.processValue` **Type:** `function` **Signature:** `function(value: string) => string` *** ##### mode[โ€‹](#mode "Direct link to mode") Specify if target field gets overwritten. Default behaviour is to only copy to empty fields. **How to use:** `mode: 'overwrite'` **Type:** `string` *** ##### sourceId[โ€‹](#sourceId "Direct link to sourceId") Specify source id **How to use:** `sourceId: 'target_id'` **Type:** `string` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") The simplest storage โ€“ ID and the filled-in stringified value: ```json { "id": "data_control_test", "value": "{\"testEntry\":\"test\"}" } ``` --- ### DatePicker A DatePicker is a control element that allows the user to select a date from a calendar. It is based on the Kendo UI DatePicker. The date can be entered manually or selected from a calendar. ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** Options of the kendo component are also available. [read more](https://docs.telerik.com/kendo-ui/api/javascript/ui/datepicker) ##### convertToLocalDate[โ€‹](#convertToLocalDate "Direct link to convertToLocalDate") If set to true, the selected date is converted to the local date of the device. **How to use:** `convertToLocalDate: true` **Type:** `boolean` *** ##### copyValueTo[โ€‹](#copyValueTo "Direct link to copyValueTo") Copy value to specified FormControls. **How to use:** `copyValueTo: ...` **Type:** `CopyValueToType` *** ##### defaultValue[โ€‹](#defaultValue "Direct link to defaultValue") Use the value "now" to offer the current ('local') date. A Custom Code function can be used to set defaultValue. **How to use:** `defaultValue: 'now'` **Type:** `string | function` **Signature:** `function() => string | Date` *** ##### disableCalendar[โ€‹](#disableCalendar "Direct link to disableCalendar") Set "true" whenever the DatePicker control calendar flyout should be disabled. **How to use:** `disableCalendar: true` **Type:** `boolean` *** ##### disabled[โ€‹](#disabled "Direct link to disabled") Set "true" whenever the DatePicker should be disabled. **How to use:** `disabled: true` **Type:** `boolean` *** ##### displayValueFormat[โ€‹](#displayValueFormat "Direct link to displayValueFormat") To change the format of the displayed date. For more information visit: . **How to use:** `displayValueFormat: 'dd.MM.yyyy'` **Type:** `string` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### emptyContent[โ€‹](#emptyContent "Direct link to emptyContent") Write a short word to indicate that the appropriate date can/must be chosen. **How to use:** `emptyContent: 'Select ...'` **Type:** `string` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'Date'` **Type:** `string` *** ##### list[โ€‹](#list "Direct link to list") Set this property to "true" if data connected with this control should be a sorting/filtering/grouping option on the ListPage, is used in template objects (eg. the [listTemplate](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/titletemplates.md#list-template-list-entry)) or it should show up in Admin UI listings. **How to use:** `list: true` **Type:** `boolean` *** ##### listOptions[โ€‹](#listOptions "Direct link to listOptions") Set additional options for controls with list equals true. E.g. set custom label for filter/sort/group dialogs or hide them completely. **How to use:** `listOptions: {...}` **Type:** `{ dialogText: string, dialogHide: boolean }` *** ##### max[โ€‹](#max "Direct link to max") Set to allow entries up to until this date. With "now" the newest possible entry is the current day. Format for fixed dates is *yyyy-MM-dd*. **How to use:** `max: 'now'` **Type:** `string` *** ##### min[โ€‹](#min "Direct link to min") Set to allow entries from that date on. Format is *yyyy-MM-dd*. **How to use:** `min: '1965-05-14'` **Type:** `string` **Default:** `1900-01-01` *** ##### mobilePicker[โ€‹](#mobilePicker "Direct link to mobilePicker") Use native date picker on mobile devices. There are settings restrictions e.g. formatting or start interval. **How to use:** `mobilePicker: true` **Type:** `boolean` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(value: Date) => void` *** ##### parseFormats[โ€‹](#parseFormats "Direct link to parseFormats") Used to give the user several format options to type in the date. "Converts" the date to format which is set with displayValueFormat. **How to use:** `parseFormats: ['ddMMyyyy', 'dd/MM/yyyy', 'dd-MM-yyyy']` **Type:** `string[]` *** ##### persistent[โ€‹](#persistent "Direct link to persistent") It is the value where the "user" sets the initial value of the DatePicker to the value of the previous Form item of the current user and overwrites any defaultValue. **How to use:** `persistent: 'user'` **Type:** `'user'` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `boolean` *** ##### start[โ€‹](#start "Direct link to start") Used to control which area the DatePicker view starts when opened. Allowed values: month / year / decade / century. **How to use:** `start: 'decade'` **Type:** `month | year | decade | century` **Default:** `month` *** ##### tooltip[โ€‹](#tooltip "Direct link to tooltip") Write a comment to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the information will occur. **How to use:** `tooltip: 'Please indicate at least one cause of damage.'` **Type:** `string` *** ##### tooltipTemplate[โ€‹](#tooltipTemplate "Direct link to tooltipTemplate") Write an ID of an HTML container to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the content of the container will occur. **How to use:** `tooltipTemplate: 'example_control_tooltip'` **Type:** `string` *** ##### visiting[โ€‹](#visiting "Direct link to visiting") Set "true" whenever the Form element should be marked as "visited" when the user has clicked or tapped at the Form field. **How to use:** `visiting: true` **Type:** `boolean` #### listOptions Object[โ€‹](#listoptions-object "Direct link to listOptions Object") *** ##### dialogHide[โ€‹](#dialogHide "Direct link to dialogHide") Hide field from filter/sort/group dialogs. **How to use:** `dialogHide: true` **Type:** `boolean` *** ##### dialogText[โ€‹](#dialogText "Direct link to dialogText") Set custom label for filter/sort/group dialogs. **How to use:** `dialogText: 'Display Text'` **Type:** `string` #### copyValueTo[โ€‹](#copyvalueto "Direct link to copyValueTo") *** Define FormControls in which the entered value should be copied. Example ```html
``` Option interface ```typescript interface ICopyValueToObject { targetId: string; mode: 'overwrite' | null; shadowPostfix: string; callback: (value: string) => string; } type CopyValueToType = string | ICopyValueToObject | Array; ``` ##### callback[โ€‹](#callback "Direct link to callback") Specify a function to process value before copy. **How to use:** `callback: HFFormDefinition.Namespace.processValue` **Type:** `function` **Signature:** `function(value: string) => string` *** ##### mode[โ€‹](#mode "Direct link to mode") Specify if target field gets overwritten. Default behaviour is to only copy to empty fields. **How to use:** `mode: 'overwrite'` **Type:** `string` *** ##### shadowPostfix[โ€‹](#shadowPostfix "Direct link to shadowPostfix") Specify which shadow field is copied. **How to use:** `shadowPostfix: '_HFNumericField'` **Type:** `string` *** ##### targetId[โ€‹](#targetId "Direct link to targetId") Specify target id **How to use:** `targetId: 'target_id'` **Type:** `string` #### copyValueFrom[โ€‹](#copyvaluefrom "Direct link to copyValueFrom") *** Define a FormControl that synchronizes its value with the current field. This synchronization process occurs upon navigating to the page where the current control is situated. It only occurs if the field is empty or the mode is set to "overwrite". ```html
``` Option interface ```typescript interface ICopyValueFromObject { sourceId: string; mode: 'overwrite' | null; callback: (value: string) => string; } type CopyValueFromType = string | ICopyValueFromObject; ``` ##### callback[โ€‹](#callback "Direct link to callback") Specify a function to process value before copy. **How to use:** `callback: HFFormDefinition.Namespace.processValue` **Type:** `function` **Signature:** `function(value: string) => string` *** ##### mode[โ€‹](#mode "Direct link to mode") Specify if target field gets overwritten. Default behaviour is to only copy to empty fields. **How to use:** `mode: 'overwrite'` **Type:** `string` *** ##### sourceId[โ€‹](#sourceId "Direct link to sourceId") Specify source id **How to use:** `sourceId: 'target_id'` **Type:** `string` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") ```html
``` For each DatePicker inside your Forms there is one value pair of stored data. Date format according [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) ```json { "id": "pg_date", "value": "2021-07-15T22:00:00.000Z" } ``` ```json { "id": "pg_date_HFDate", "value": "16. Jul. 2021" } ``` ```json { "id": "pg_date_HFLocal", "value": "2021-07-16T00:00:00.000+02:00" } ``` --- ### DateTimePicker A DateTimePicker is a control element that allows the user to select date and time from a calendar. It is based on the Kendo UI DateTimePicker. The date can be entered manually or selected from a calendar. ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** Options of the kendo component are also available. [read more](https://docs.telerik.com/kendo-ui/api/javascript/ui/datetimepicker) ##### convertToLocalDate[โ€‹](#convertToLocalDate "Direct link to convertToLocalDate") If set to true, the selected date is converted to the local date of the device. **How to use:** `convertToLocalDate: true` **Type:** `boolean` *** ##### copyValueTo[โ€‹](#copyValueTo "Direct link to copyValueTo") Copy value to specified FormControls. **How to use:** `copyValueTo: ...` **Type:** `CopyValueToType` *** ##### defaultValue[โ€‹](#defaultValue "Direct link to defaultValue") Use the value "now" to offer the current ('local') date. A Custom Code function can be used to set defaultValue. **How to use:** `defaultValue: 'now'` **Type:** `string | function` **Signature:** `function() => string | Date` *** ##### disabled[โ€‹](#disabled "Direct link to disabled") Set "true" whenever the DateTimePicker should be disabled. **How to use:** `disabled: true` **Type:** `boolean` *** ##### displayValueFormat[โ€‹](#displayValueFormat "Direct link to displayValueFormat") Use to change the format of the displayed date. For more information visit: . **How to use:** `displayValueFormat: 'dd.MM.yyyy HH:mm'` **Type:** `string` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### emptyContent[โ€‹](#emptyContent "Direct link to emptyContent") Write a short word to indicate that the appropriate date can/must be chosen. **How to use:** `emptyContent: 'Select ...'` **Type:** `string` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'Date'` **Type:** `string` *** ##### list[โ€‹](#list "Direct link to list") Set this property to "true" if data connected with this control should be a sorting/filtering/grouping option on the ListPage, is used in template objects (eg. the [listTemplate](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/titletemplates.md#list-template-list-entry)) or it should show up in Admin UI listings. **How to use:** `list: true` **Type:** `boolean` *** ##### listOptions[โ€‹](#listOptions "Direct link to listOptions") Set additional options for controls with list equals true. E.g. set custom label for filter/sort/group dialogs or hide them completely. **How to use:** `listOptions: {...}` **Type:** `{ dialogText: string, dialogHide: boolean }` *** ##### max[โ€‹](#max "Direct link to max") Set to allow entries up to until this date. With "now" the newest possible entry is the current day. Format for fixed dates is *yyyy-MM-dd*. **How to use:** `max: 'now'` **Type:** `string` *** ##### min[โ€‹](#min "Direct link to min") Set to allow entries from that date on. Format is *yyyy-MM-dd*. **How to use:** `min: '1965-05-14'` **Type:** `string` **Default:** `1900-01-01` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(value: Date) => void` *** ##### parseFormats[โ€‹](#parseFormats "Direct link to parseFormats") Used to give the user several format options to type in the date. "Converts" the date to format which is set with displayValueFormat. **How to use:** `parseFormats: ['ddMMyyyy', 'dd/MM/yyyy', 'dd-MM-yyyy']` **Type:** `string[]` *** ##### persistent[โ€‹](#persistent "Direct link to persistent") It is the value where the "user" sets the initial value of the DateTimePicker to the value of the previous Form Item of the current user and overwrites any defaultValue. **How to use:** `persistent: 'user'` **Type:** `'user'` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `boolean` *** ##### start[โ€‹](#start "Direct link to start") Used to control which area the DateTimePicker view starts when opened. Allowed values: month / year / decade / century. **How to use:** `start: 'decade'` **Type:** `month | year | decade | century` **Default:** `month` *** ##### tooltip[โ€‹](#tooltip "Direct link to tooltip") Write a comment to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the information will occur. **How to use:** `tooltip: 'Please indicate at least one cause of damage.'` **Type:** `string` *** ##### tooltipTemplate[โ€‹](#tooltipTemplate "Direct link to tooltipTemplate") Write an ID of an HTML container to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the content of the container will occur. **How to use:** `tooltipTemplate: 'example_control_tooltip'` **Type:** `string` *** ##### visiting[โ€‹](#visiting "Direct link to visiting") Set "true" whenever the Form element should be marked as "visited" when the user has clicked or tapped at the Form field. **How to use:** `visiting: true` **Type:** `boolean` #### listOptions Object[โ€‹](#listoptions-object "Direct link to listOptions Object") *** ##### dialogHide[โ€‹](#dialogHide "Direct link to dialogHide") Hide field from filter/sort/group dialogs. **How to use:** `dialogHide: true` **Type:** `boolean` *** ##### dialogText[โ€‹](#dialogText "Direct link to dialogText") Set custom label for filter/sort/group dialogs. **How to use:** `dialogText: 'Display Text'` **Type:** `string` #### copyValueTo[โ€‹](#copyvalueto "Direct link to copyValueTo") *** Define FormControls in which the entered value should be copied. Example ```html
``` Option interface ```typescript interface ICopyValueToObject { targetId: string; mode: 'overwrite' | null; shadowPostfix: string; callback: (value: string) => string; } type CopyValueToType = string | ICopyValueToObject | Array; ``` ##### callback[โ€‹](#callback "Direct link to callback") Specify a function to process value before copy. **How to use:** `callback: HFFormDefinition.Namespace.processValue` **Type:** `function` **Signature:** `function(value: string) => string` *** ##### mode[โ€‹](#mode "Direct link to mode") Specify if target field gets overwritten. Default behaviour is to only copy to empty fields. **How to use:** `mode: 'overwrite'` **Type:** `string` *** ##### shadowPostfix[โ€‹](#shadowPostfix "Direct link to shadowPostfix") Specify which shadow field is copied. **How to use:** `shadowPostfix: '_HFNumericField'` **Type:** `string` *** ##### targetId[โ€‹](#targetId "Direct link to targetId") Specify target id **How to use:** `targetId: 'target_id'` **Type:** `string` #### copyValueFrom[โ€‹](#copyvaluefrom "Direct link to copyValueFrom") *** Define a FormControl that synchronizes its value with the current field. This synchronization process occurs upon navigating to the page where the current control is situated. It only occurs if the field is empty or the mode is set to "overwrite". ```html
``` Option interface ```typescript interface ICopyValueFromObject { sourceId: string; mode: 'overwrite' | null; callback: (value: string) => string; } type CopyValueFromType = string | ICopyValueFromObject; ``` ##### callback[โ€‹](#callback "Direct link to callback") Specify a function to process value before copy. **How to use:** `callback: HFFormDefinition.Namespace.processValue` **Type:** `function` **Signature:** `function(value: string) => string` *** ##### mode[โ€‹](#mode "Direct link to mode") Specify if target field gets overwritten. Default behaviour is to only copy to empty fields. **How to use:** `mode: 'overwrite'` **Type:** `string` *** ##### sourceId[โ€‹](#sourceId "Direct link to sourceId") Specify source id **How to use:** `sourceId: 'target_id'` **Type:** `string` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") ```html
``` For each DateTimePicker inside your Forms there is one value pair of stored data. Date format according [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) ```json { "id": "pg_datetime", "value": "2021-07-15T7:30:00.000Z" } ``` ```json { "id": "pg_date_HFDateTime", "value": "15. Jul. 2021 09:30" } ``` ```json { "id": "pg_date_HFLocal", "value": "2021-07-15T09:30:00.000+02:00" } ``` --- ### DrawingControl The DrawingControl is a control element that allows the user to draw on a given image. This can be used to mark damages on a picture. ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** ##### image - required[โ€‹](#image "Direct link to image") Write down the path to connect the field with your picture. The first part of the path represents a placeholder and will be changed at runtime. **How to use:** `image: '{{HFFormPath}}/watermeter.png'` **Type:** `string` *** ##### disabled[โ€‹](#disabled "Direct link to disabled") Set "true" whenever the DrawingControl should be disabled. **How to use:** `disabled: true` **Type:** `boolean` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### height[โ€‹](#height "Direct link to height") Needs to be set for this control to define the height of the field. The value is defined in pixels. **How to use:** `height: 280` **Type:** `number` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'Mark damage with pen'` **Type:** `string` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(value: boolean) => void` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `boolean` *** ##### responsive[โ€‹](#responsive "Direct link to responsive") Set "true" whenever the DrawingControl should be responsive. It overwrites given width and height values. **How to use:** `responsive: true` **Type:** `boolean` *** ##### tooltip[โ€‹](#tooltip "Direct link to tooltip") Write a comment to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the information will occur. **How to use:** `tooltip: 'Please indicate at least one cause of damage.'` **Type:** `string` *** ##### tooltipTemplate[โ€‹](#tooltipTemplate "Direct link to tooltipTemplate") Write an ID of an HTML container to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the content of the container will occur. **How to use:** `tooltipTemplate: 'example_control_tooltip'` **Type:** `string` *** ##### width[โ€‹](#width "Direct link to width") Needs to be set for this control to define the width of the field. The value is in pixels. The maximum is always 460 px. **How to use:** `width: 226` **Type:** `number` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") ```html
``` For each DrawingControl inside your Forms there are several value pairs of stored data: The first two value pairs are the default data to be stored โ€“ the first pair indicates the DrawingControl has been used โ€ฆ ```json { "id": "mark_damage", "value": true } ``` โ€ฆ and the second pair stores the information on the created image: ```json { "id": "mark_damage_HFDrawingImageMerged", "value": "mark_damage_merged.png" } ``` Finally, the third pair stores the information of the strokes: ```json { "id": "mark_damage_HFDrawingStrokes", "value": "fabric.Objects" } ``` --- ### DropDownList The new control is an alternative to the Control "ComboBox". The values of the control "DropDownList" can be provided as static datasource (data formatted as JSON Array inside your Template) or by an external datasource e.g. by referencing a HFSqlServer list by linking to the URL or by providing an oData source as known of the ComboBox control. **static datasource:** ```html
``` **external datasource (URL):** ```html
``` **multilingual external datasource (URL):** ```html
``` **external datasource (OData):** ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** Options of the kendo component are also available. [read more](https://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist) ##### dataTextField - required[โ€‹](#dataTextField "Direct link to dataTextField") Define the key of the key-value pair. **How to use:** `dataTextField: 'name'` **Type:** `string` *** ##### dataValueField - required[โ€‹](#dataValueField "Direct link to dataValueField") Define the value of the key-value pair. **How to use:** `dataValueField: 'code'` **Type:** `string` *** ##### autoBind[โ€‹](#autoBind "Direct link to autoBind") Controls whether to bind the control to the data source on initialization. Use false if you use in multiple controls the same data source. This reduces server requests. **How to use:** `autoBind: false` **Type:** `boolean` **Default:** `true` *** ##### checkValueInitially[โ€‹](#checkValueInitially "Direct link to checkValueInitially") Stored values gets initially checked if they are contained in the data source that is defined on the control. In certain scenarios this is not desireable. **How to use:** `checkValueInitially: true` **Type:** `boolean` **Default:** `true` *** ##### dataSource[โ€‹](#dataSource "Direct link to dataSource") Provide the data for the drop down selection formatted like a JSON Array inside your template **How to use:** `dataSource: [{name: 'Bauer, F', code: 'Bauer, F'}, {name: 'Gruber, P', code: 'Gruber,P'}]` **Type:** `json pseudo array` *** ##### defaultValue[โ€‹](#defaultValue "Direct link to defaultValue") Define the value selected in newly created Forms. **Note:** This must be the appropiate dataValueField value. A Custom Code function can be used to set defaultValue. **How to use:** `defaultValue: 'Title1',` **Type:** `string | function` **Signature:** `function() => string` *** ##### disabled[โ€‹](#disabled "Direct link to disabled") Set "true" whenever the DropDownList should be disabled. **How to use:** `disabled: true` **Type:** `boolean` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### filterItems[โ€‹](#filterItems "Direct link to filterItems") Define the filtering options for the DropDownList. Can be used to search the list in more than one datasource column. A field entry is required. The operator's default entry is `contains`. [More infos](https://docs.telerik.com/kendo-ui/api/javascript/data/datasource/configuration/filter) **How to use:** `[{ field: 'name', operator: 'contains' }, { field: 'address' }]` **Type:** `{ field: string; operator?: string; }[]` *** ##### formControlMapping[โ€‹](#formControlMapping "Direct link to formControlMapping") Define a mapping object to copy fields from the selected dataItem to given Form controls. [More infos](#formcontrolmapping) **How to use:** `{ example_id: 'example_key' }` **Type:** `IFormControlMapping` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### highlightTemplate[โ€‹](#highlightTemplate "Direct link to highlightTemplate") Define the highlight format for filtered results of the DropDownList popup. Accepts a [kendo template](https://docs.telerik.com/kendo-ui/api/javascript/kendo/methods/template). **Important:** kendo templates use `highlight` as default placeholder for the highlighted text. **How to use:** `highlightTemplate: '#: highlight #'` **Type:** `string` *** ##### i18nDataTextField[โ€‹](#i18nDataTextField "Direct link to i18nDataTextField") Use the i18nDataTextfield instead of the dataTextfield to use multilingual catalogs in addition to the translation.json file. **How to use:** `{ en: 'Streetname', de: 'Strassenname', default: โ€˜Streetname' }` **Type:** `{ default: string, [langCode: string]: string }` *** ##### itemTemplate[โ€‹](#itemTemplate "Direct link to itemTemplate") Define the formatting of the DropDownList values for display e.g. combining one or more columns of the datasource for single selection. Accepts a [kendo template](https://docs.telerik.com/kendo-ui/api/javascript/kendo/methods/template) or a function returning a string. **Important:** Have to return string inside a wrapping element. Unless `template` option, `itemTemplate` keeps the original filter highlighting. **How to use:** `itemTemplate: '#: entry1 # - #: entry2 #'` **Type:** `string | function` **Signature:** `function(item: any) => string` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'Technician'` **Type:** `string` *** ##### list[โ€‹](#list "Direct link to list") Set this property to "true" if data connected with this control should be a sorting/filtering/grouping option on the ListPage, is used in template objects (eg. the [listTemplate](https://manuals.hybridforms.net/docs/10.0/form-templates/html-template-file/titletemplates.md#list-template-list-entry)) or it should show up in Admin UI listings. **How to use:** `list: true` **Type:** `boolean` *** ##### listOptions[โ€‹](#listOptions "Direct link to listOptions") Set additional options for controls with list equals true. E.g. set custom label for filter/sort/group dialogs or hide them completely. **How to use:** `listOptions: {...}` **Type:** `{ dialogText: string, dialogHide: boolean }` *** ##### minLength[โ€‹](#minLength "Direct link to minLength") The minimum number of characters the user needs to type before a search is performed. Set a higher value than 1 whenever the search could match a lot of items. **How to use:** `minLength: 3` **Type:** `number` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(data: { value: string, text: string }) => void` *** ##### optionLabel[โ€‹](#optionLabel "Direct link to optionLabel") Define a placeholder text for the DropDownList. **How to use:** `optionLabel: 'Please select ...'` **Type:** `string` *** ##### optionTemplate[โ€‹](#optionTemplate "Direct link to optionTemplate") Define a placeholder template for the DropDownList. **How to use:** `optionTemplate: 'label'` **Type:** `string` *** ##### persistent[โ€‹](#persistent "Direct link to persistent") It is the value where the "user" sets the initial selected value of the DropDownList to the value of the previous Form item of the current user and overwrites any defaultValue. **How to use:** `persistent: 'user'` **Type:** `'user'` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `boolean` *** ##### tooltip[โ€‹](#tooltip "Direct link to tooltip") Write a comment to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the information will occur. **How to use:** `tooltip: 'Please indicate at least one cause of damage.'` **Type:** `string` *** ##### tooltipTemplate[โ€‹](#tooltipTemplate "Direct link to tooltipTemplate") Write an ID of an HTML container to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the content of the container will occur. **How to use:** `tooltipTemplate: 'example_control_tooltip'` **Type:** `string` *** ##### typeAhead[โ€‹](#typeAhead "Direct link to typeAhead") Enable/Disable filter for DropDownList. **How to use:** `typeAhead: false,` **Type:** `boolean` **Default:** `true` *** ##### url[โ€‹](#url "Direct link to url") The URL must be a HFSql server relative URL. For instance, the oData link to a HFSql server list. **How to use:** `url: '/api/catalogs/Items?$select=Title,KatalogText&$orderby=Title'` **Type:** `string` *** ##### valueMapperDelay[โ€‹](#valueMapperDelay "Direct link to valueMapperDelay") Add a delay to the Kendo ValueMapper. Useful for very large catalogs. **How to use:** `valueMapperDelay: true` **Type:** `boolean` *** ##### valueTemplate[โ€‹](#valueTemplate "Direct link to valueTemplate") Define the formatting of the DropDownList values for saved value e.g. combining one or more columns of the datasource for single selection. **How to use:** `valueTemplate: '#: Streetname # (#: PLZ # #: Postort #)'` **Type:** `string` *** ##### visiting[โ€‹](#visiting "Direct link to visiting") Set "true" whenever the Form element should be marked as "visited" when the user has clicked or tapped at the Form element field. **How to use:** `visiting: true` **Type:** `boolean` #### listOptions Object[โ€‹](#listoptions-object "Direct link to listOptions Object") *** ##### dialogHide[โ€‹](#dialogHide "Direct link to dialogHide") Hide field from filter/sort/group dialogs. **How to use:** `dialogHide: true` **Type:** `boolean` *** ##### dialogText[โ€‹](#dialogText "Direct link to dialogText") Set custom label for filter/sort/group dialogs. **How to use:** `dialogText: 'Display Text'` **Type:** `string` Note Please follow the conventions to build an oData Source Link by considering the following documentations: * [Working with lists and list items with REST](https://msdn.microsoft.com/EN-US/library/dn292552.aspx) * [Use oData query operations in SharePoint REST requests](https://msdn.microsoft.com/EN-US/library/fp142385.aspx) * [oData - the best way to REST](http://www.odata.org/) #### formControlMapping[โ€‹](#formcontrolmapping "Direct link to formcontrolmapping") The mapping objects consists of keys which are the Form control ID's to copy to and the value which can be a data source key or an object with the data source key and a format function. By every value change the specified data source entries are copied to the given Form controls. ```html
``` ```typescript type FormControlMappingType = { key: string; callback: (dataItem: any, dataKey: string) => any; }; interface IFormControlMapping { [id: string]: string | FormControlMappingType; } ``` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") ```html
``` For each DropDownList inside your Forms there are two value pairs of stored data: First the information for the DropDownList itself... ```json { "id": "technician", "value": "3521" } ``` ...and second for the selected value: ```json { "id": "technician_HFDropDownListText", "value": "Simon, R" } ``` --- ### FileUploader The FileUploader ctrl enables the user to upload files inside the Form. ```html
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** ##### allowedCharacters[โ€‹](#allowedCharacters "Direct link to allowedCharacters") Set the allowed characters for the filename. If not set, the media settings whitelist property or the Form settings whitelist property is used (in this order). If none of these properties is set, all characters are allowed. **How to use:** `allowedCharacters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789` **Type:** `string` *** ##### allowedCharactersRegExp[โ€‹](#allowedCharactersRegExp "Direct link to allowedCharactersRegExp") Set the allowed characters for the filename in RegExp-format. If not set, the media settings whitelist property or the Form settings whitelist property is used (in this order). If none of these properties is set, all characters are allowed. **How to use:** `allowedCharactersRegExp: [a-zA-Z0-9]` **Type:** `string` *** ##### allowedFormats[โ€‹](#allowedFormats "Direct link to allowedFormats") Define the allowed file formats by listing the file extensions. **How to use:** `allowedFormats: ['pdf', 'jpeg', 'jpg', 'png']` **Type:** `string[]` *** ##### buttonLabel[โ€‹](#buttonLabel "Direct link to buttonLabel") Provide an individual button label string. **How to use:** `buttonLabel: 'Add file'` **Type:** `string` *** ##### deleteOnNotFullfilledCondition[โ€‹](#deleteOnNotFullfilledCondition "Direct link to deleteOnNotFullfilledCondition") De/activate deletion of attachments on not fullfilled conditions. **How to use:** `deleteOnNotFullfilledCondition: false` **Type:** `boolean` **Default:** `true` *** ##### descriptionEnd[โ€‹](#descriptionEnd "Direct link to descriptionEnd") Provide an additional information placed beyond the "file list". (Plain text or restricted HTML text) **How to use:** `descriptionEnd: '
Only PDF, JPEG and PNG Dateien allowed.
(Minimum file size: 5 KB, maximum file size: 5 MB, at most 7 files).
'` **Type:** `string` *** ##### descriptionStart[โ€‹](#descriptionStart "Direct link to descriptionStart") Provide a short intro text. (Plain text or restricted HTML text) **How to use:** `descriptionStart: 'Hier kรถnnen Sie ihre Unterlagen hochladen.'` **Type:** `string` *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'File Uploader'` **Type:** `string` *** ##### maxDurationSec[โ€‹](#maxDurationSec "Direct link to maxDurationSec") Define the maximum duration of an audio or video file (other file types ignore this config). **How to use:** `maxDurationSec: 120` **Type:** `number` *** ##### maxFilenameLength[โ€‹](#maxFilenameLength "Direct link to maxFilenameLength") Define the maximum length of a filename. **How to use:** `maxFilenameLength: 100` **Type:** `number` **Default:** `70` *** ##### maxFileSizeKb[โ€‹](#maxFileSizeKb "Direct link to maxFileSizeKb") Define the maximum file size of the uploaded file kB. **How to use:** `maxFileSizeKb: 5000` **Type:** `number` *** ##### maxFileUploads[โ€‹](#maxFileUploads "Direct link to maxFileUploads") Set the limit of files the user can upload. **How to use:** `maxFileUploads: 10` **Type:** `number` *** ##### maxImagePixel[โ€‹](#maxImagePixel "Direct link to maxImagePixel") Define the maximum pixel width of the uploaded image. **How to use:** `maxImagePixel: 5000` **Type:** `number` *** ##### maxVideoPixel[โ€‹](#maxVideoPixel "Direct link to maxVideoPixel") Define the maximum pixel width of the uploaded video. **How to use:** `maxVideoPixel: 1920` **Type:** `number` **Default:** `1920` *** ##### minDurationSec[โ€‹](#minDurationSec "Direct link to minDurationSec") Define the minimum duration of an audio or video file (other file types ignore this config). **How to use:** `minDurationSec: 3` **Type:** `number` *** ##### minFileSizeKb[โ€‹](#minFileSizeKb "Direct link to minFileSizeKb") Define the minimum file size of the uploaded file in kB. **How to use:** `minFileSizeKb: 100` **Type:** `number` *** ##### minImagePixel[โ€‹](#minImagePixel "Direct link to minImagePixel") Define the minimum pixel width of the uploaded image. **How to use:** `minImagePixel: 10` **Type:** `number` *** ##### minVideoPixel[โ€‹](#minVideoPixel "Direct link to minVideoPixel") Define the minimum pixel width of the uploaded video. **How to use:** `minVideoPixel: 100` **Type:** `number` **Default:** `100` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(value: IFileUploaderItem[]) => void` *** ##### renameFileIfExists[โ€‹](#renameFileIfExists "Direct link to renameFileIfExists") Set "true" for renaming the uploaded file if another one with the same name already exists. **How to use:** `renameFileIfExists: true` **Type:** `boolean` **Default:**\`\` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in i.e. at least one file has to be uploaded. **How to use:** `required: true` **Type:** `boolean` Info A FileUploader is used to dynamically add files to a Form. ```typescript interface IFileUploaderItem { name: string; size: number; mimeType: string; width?: number; height?: number; } ``` #### Stored data[โ€‹](#stored-data "Direct link to stored-data") For each uploaded file inside your Forms there are two ways of stored data: The information contained by the upload control as JSON object... ```json { "id": "repair_cover_glass_brokenfileuploader-ctrl", "value": "[{\"name\":\"standgeraet.png\",\"size\":355283,\"mimeType\":\"image/png\",\"width\":1369,\"height\":1058}]" } ``` ...and the information of the files attached to the Form item (they are also listed by the feature "documents"): ```json "files": [ { "filename": "standgeraet.png", "size": 355283, "contentType": "image/png", "modified": "2021-04-30T07:07:41.3235667Z", "version": 637553632613235700, "fileID": 104115 } ] ``` --- ### Highlighter A Highlighter is used to highlight text. It is possible to place an initial value as children to the control but it is very limited which tags can be placed. ```html
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Eleifend porttitor vehicula facilisi urna euismod litora diam viverra primis accumsan ultrices mi suscipit. Mus ad quam conubia hendrerit torquent ullamcorper elementum consequat eu amet velit consequat condimentum.
  • Item 1
  • Item 2
  • Item 3
``` #### FormControl Options[โ€‹](#formcontrol-options "Direct link to FormControl Options") *** ##### doNotCopy[โ€‹](#doNotCopy "Direct link to doNotCopy") Set "true" whenever the field should get deleted if the Form is copied. **How to use:** `doNotCopy: true` **Type:** `boolean` *** ##### hidden[โ€‹](#hidden "Direct link to hidden") Hide FormControl in Form. **How to use:** `hidden: true` **Type:** `boolean` *** ##### label[โ€‹](#label "Direct link to label") Define a label for your control element. **How to use:** `label: 'HTML Container'` **Type:** `string` *** ##### mark[โ€‹](#mark "Direct link to mark") Set the mark type for the highlighter. **How to use:** `mark: 'highlight'` **Type:** `'highlight' | 'bold' | 'strikethrough'` **Default:** `highlight` *** ##### onChanged[โ€‹](#onChanged "Direct link to onChanged") Call a pre-defined JS-method to do something when the status of the control changes. **How to use:** `onChanged: HFFormdefinition.Namespace.Method` **Type:** `function` **Signature:** `function(value: string) => void` *** ##### required[โ€‹](#required "Direct link to required") Set "true" if the control has to be filled in. **How to use:** `required: true` **Type:** `boolean` *** ##### tooltip[โ€‹](#tooltip "Direct link to tooltip") Write a comment to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the information will occur. **How to use:** `tooltip: 'sample tooltip'` **Type:** `string` *** ##### tooltipTemplate[โ€‹](#tooltipTemplate "Direct link to tooltipTemplate") Write an ID of an HTML container to provide further information about the field. A question mark will then be shown within the label and with a click/tap on it, the content of the container will occur. **How to use:** `tooltipTemplate: 'example_control_tooltip'` **Type:** `string` #### Usage[โ€‹](#usage "Direct link to usage") The following describes which tags are allowed and how the control is used. ##### DefaultValue[โ€‹](#value "Direct link to value") The dafault value of the Highlighter is simple HTML code which describes the children of the FormControl. To highlight text initiallly, the text has to be wrapped in a `` tag with the class `highlight` and a data attribute `data-highlighted="true"`. ```html Lorem ipsum dolor sit amet, consectetur adipiscing elit. Eleifend porttitor vehicula facilisi ``` ##### Allowed tags[โ€‹](#allowed-tags "Direct link to allowed-tags") 1. **Container:** `
`, ``, `
`, `