diff --git a/dist/1.0.0/incentro.CustomGroupbox.mpk b/dist/1.0.0/incentro.CustomGroupbox.mpk
new file mode 100644
index 0000000..7a27e4c
Binary files /dev/null and b/dist/1.0.0/incentro.CustomGroupbox.mpk differ
diff --git a/dist/tmp/widgets/CustomGroupbox.xml b/dist/tmp/widgets/CustomGroupbox.xml
new file mode 100644
index 0000000..cf3f030
--- /dev/null
+++ b/dist/tmp/widgets/CustomGroupbox.xml
@@ -0,0 +1,33 @@
+
+
+ Custom Groupbox
+ Groupbox with content in the header
+
+
+
+
+ Header
+ Content of the header
+
+
+ Content
+ Content of the groupbox
+
+
+ Divider
+ Show a simple divider between items.
+
+
+ Expand icon
+ Icon used to indicate that the group box can be expanded.
+
+
+ Collapse icon
+ Icon used to indicate that the group box can be collapsed.
+
+
+
+
diff --git a/dist/tmp/widgets/incentro/customgroupbox/CustomGroupbox.js b/dist/tmp/widgets/incentro/customgroupbox/CustomGroupbox.js
new file mode 100644
index 0000000..c83fcb2
--- /dev/null
+++ b/dist/tmp/widgets/incentro/customgroupbox/CustomGroupbox.js
@@ -0,0 +1,332 @@
+module.exports =
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./src/CustomGroupbox.tsx");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
+/*!*****************************************************************!*\
+ !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
+ \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i0&&arguments[0]!==undefined?arguments[0]:"";try{return style.split(";").reduce(function(styleObject,line){var pair=line.split(":");if(pair.length===2){var name=pair[0].trim().replace(/(-.)/g,function(match){return match[1].toUpperCase();});styleObject[name]=pair[1].trim();}return styleObject;},{});}catch(_){return{};}}exports.parseInlineStyle=parseInlineStyle;
+
+/***/ }),
+
+/***/ "./src/CustomGroupbox.tsx":
+/*!********************************!*\
+ !*** ./src/CustomGroupbox.tsx ***!
+ \********************************/
+/*! exports provided: CustomGroupbox */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomGroupbox", function() { return CustomGroupbox; });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-native */ "react-native");
+/* harmony import */ var react_native__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_native__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var mendix_components_native_Icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! mendix/components/native/Icon */ "mendix/components/native/Icon");
+/* harmony import */ var mendix_components_native_Icon__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(mendix_components_native_Icon__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _mendix_pluggable_widgets_tools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mendix/pluggable-widgets-tools */ "./node_modules/@mendix/pluggable-widgets-tools/dist/index.js");
+/* harmony import */ var _mendix_pluggable_widgets_tools__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_mendix_pluggable_widgets_tools__WEBPACK_IMPORTED_MODULE_3__);
+
+
+
+
+const defaultStyle = {
+ headerContainer: {},
+ label: {},
+ innerContainer: {},
+ selectedContainer: {},
+ divider: {
+ backgroundColor: '#A2A2A2',
+ height: 1,
+ },
+ icon: {
+ alignSelf: 'flex-end'
+ },
+ groupboxParent: {}
+};
+const defaultCollapseIconGlyph = "glyphicon-minus";
+const defaultExpandIconGlyph = "glyphicon-plus";
+class CustomGroupbox extends react__WEBPACK_IMPORTED_MODULE_0__["Component"] {
+ constructor(props) {
+ super(props);
+ this.styles = Object(_mendix_pluggable_widgets_tools__WEBPACK_IMPORTED_MODULE_3__["mergeNativeStyles"])(defaultStyle, this.props.style);
+ this.renderIcon = (glyph, toBeRenderedIcon) => {
+ const nativeIcon = toBeRenderedIcon && toBeRenderedIcon.status === "available" /* Available */
+ ? toBeRenderedIcon.value
+ : { type: "glyph", iconClass: glyph };
+ return Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(mendix_components_native_Icon__WEBPACK_IMPORTED_MODULE_2__["Icon"], { icon: nativeIcon });
+ };
+ this.toggleContent = this.toggleContent.bind(this);
+ this.state = { showContent: false, };
+ }
+ render() {
+ const icons = {
+ collapseIcon: this.renderIcon(defaultCollapseIconGlyph, this.props.collapseIcon),
+ expandIcon: this.renderIcon(defaultExpandIconGlyph, this.props.expandIcon),
+ };
+ return (Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], { style: this.styles.groupboxParent },
+ Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["TouchableOpacity"], { onPress: this.toggleContent },
+ Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], { style: this.styles.headerContainer },
+ Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], null, this.props.header),
+ Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], { style: this.styles.icon }, this.state.showContent ? icons.collapseIcon : icons.expandIcon))),
+ Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], { style: this.state.showContent ? this.styles.selectedContainer : null },
+ this.state.showContent && Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], { style: this.styles.innerContainer }, this.props.content),
+ this.props.showDivider && Object(react__WEBPACK_IMPORTED_MODULE_0__["createElement"])(react_native__WEBPACK_IMPORTED_MODULE_1__["View"], { style: this.styles.divider }))));
+ }
+ toggleContent() {
+ this.setState({ showContent: !this.state.showContent });
+ }
+}
+
+
+/***/ }),
+
+/***/ "mendix/components/native/Icon":
+/*!************************************************!*\
+ !*** external "mendix/components/native/Icon" ***!
+ \************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = require("mendix/components/native/Icon");
+
+/***/ }),
+
+/***/ "react":
+/*!************************!*\
+ !*** external "react" ***!
+ \************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = require("react");
+
+/***/ }),
+
+/***/ "react-native":
+/*!*******************************!*\
+ !*** external "react-native" ***!
+ \*******************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = require("react-native");
+
+/***/ })
+
+/******/ });
+//# sourceMappingURL=CustomGroupbox.js.map
\ No newline at end of file
diff --git a/dist/tmp/widgets/incentro/customgroupbox/CustomGroupbox.js.map b/dist/tmp/widgets/incentro/customgroupbox/CustomGroupbox.js.map
new file mode 100644
index 0000000..3ec3f0c
--- /dev/null
+++ b/dist/tmp/widgets/incentro/customgroupbox/CustomGroupbox.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/extends.js","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@mendix/pluggable-widgets-tools/dist/index.js","webpack:///./node_modules/@mendix/pluggable-widgets-tools/dist/native/common.js","webpack:///./node_modules/@mendix/pluggable-widgets-tools/dist/web/common.js","webpack:///./src/CustomGroupbox.tsx","webpack:///external \"mendix/components/native/Icon\"","webpack:///external \"react\"","webpack:///external \"react-native\""],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","module","exports","arrayLikeToArray","require","_arrayWithoutHoles","isArray","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","_extends","assign","target","arguments","source","prototype","hasOwnProperty","call","apply","_interopRequireDefault","__esModule","_iterableToArray","iter","Symbol","iterator","from","_nonIterableSpread","TypeError","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_toConsumableArray","_unsupportedIterableToArray","o","minLen","n","toString","slice","constructor","name","test","__createBinding","create","m","k","k2","undefined","get","__exportStar","p","mergeNativeStyles","defaultStyle","overrideStyles","styles","filter","object","keys","reduce","flattened","currentKey","styleItems","map","flattenObjects","objects","merged","parseInlineStyle","style","split","styleObject","line","pair","trim","replace","match","toUpperCase","_"],"mappings":"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","file":"widgets/incentro/customgroupbox/CustomGroupbox.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/CustomGroupbox.tsx\");\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./native/common\"), exports);\n__exportStar(require(\"./web/common\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mergeNativeStyles = void 0;\nfunction mergeNativeStyles(defaultStyle, overrideStyles) {\n const styles = [defaultStyle, ...overrideStyles.filter((object) => object !== undefined)];\n return Object.keys(defaultStyle).reduce((flattened, currentKey) => {\n const styleItems = styles.map(object => object[currentKey]);\n return Object.assign(Object.assign({}, flattened), { [currentKey]: flattenObjects(styleItems) });\n }, {});\n}\nexports.mergeNativeStyles = mergeNativeStyles;\nfunction flattenObjects(objects) {\n return objects.reduce((merged, object) => (Object.assign(Object.assign({}, merged), object)), {});\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseInlineStyle = void 0;\nfunction parseInlineStyle(style = \"\") {\n try {\n return style.split(\";\").reduce((styleObject, line) => {\n const pair = line.split(\":\");\n if (pair.length === 2) {\n const name = pair[0].trim().replace(/(-.)/g, match => match[1].toUpperCase());\n styleObject[name] = pair[1].trim();\n }\n return styleObject;\n }, {});\n }\n catch (_) {\n return {};\n }\n}\nexports.parseInlineStyle = parseInlineStyle;\n","import { Component, ReactNode, createElement } from \"react\";\nimport { TextStyle, ViewStyle, View, TouchableOpacity } from \"react-native\";\nimport { DynamicValue, NativeIcon, ValueStatus } from \"mendix\";\nimport { Icon } from 'mendix/components/native/Icon';\n\nimport { Style, mergeNativeStyles } from '@mendix/pluggable-widgets-tools';\n\nimport { CustomGroupboxProps } from '../typings/CustomGroupboxProps';\n\nexport interface CustomStyle extends Style {\n headerContainer: ViewStyle;\n label: TextStyle;\n innerContainer: ViewStyle;\n selectedContainer: ViewStyle;\n divider: ViewStyle;\n icon: ViewStyle;\n groupboxParent: ViewStyle\n}\n\nconst defaultStyle: CustomStyle = {\n headerContainer: {},\n label: {},\n innerContainer: {},\n selectedContainer: {},\n divider: {\n backgroundColor: '#A2A2A2',\n height: 1,\n },\n icon: {\n alignSelf: 'flex-end'\n },\n groupboxParent: {}\n};\n\ninterface State {\n showContent: boolean;\n}\n\nconst defaultCollapseIconGlyph = \"glyphicon-minus\";\nconst defaultExpandIconGlyph = \"glyphicon-plus\";\n\nexport class CustomGroupbox extends Component, State> {\n constructor(props: CustomGroupboxProps){\n super(props)\n this.toggleContent = this.toggleContent.bind(this)\n this.state = { showContent: false, }\n }\n\n private readonly styles = mergeNativeStyles(defaultStyle, this.props.style);\n \n render(): ReactNode {\n const icons = {\n collapseIcon: this.renderIcon(defaultCollapseIconGlyph, this.props.collapseIcon),\n expandIcon: this.renderIcon(defaultExpandIconGlyph, this.props.expandIcon),\n };\n \n return (\n \n \n \n {this.props.header}\n {this.state.showContent ? icons.collapseIcon : icons.expandIcon}\n \n \n\n \n {this.state.showContent && {this.props.content}}\n {this.props.showDivider && }\n \n \n \n );\n }\n\n toggleContent() {\n this.setState({ showContent: !this.state.showContent })\n }\n\n private renderIcon = (glyph: string, toBeRenderedIcon?: DynamicValue) => {\n const nativeIcon: NativeIcon =\n toBeRenderedIcon && toBeRenderedIcon.status === ValueStatus.Available\n ? toBeRenderedIcon.value\n : { type: \"glyph\", iconClass: glyph };\n\n return ;\n };\n}","module.exports = require(\"mendix/components/native/Icon\");","module.exports = require(\"react\");","module.exports = require(\"react-native\");"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/tmp/widgets/package.xml b/dist/tmp/widgets/package.xml
new file mode 100644
index 0000000..8f27d56
--- /dev/null
+++ b/dist/tmp/widgets/package.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/CustomGroupbox.tsx b/src/CustomGroupbox.tsx
index fc73356..14a5703 100644
--- a/src/CustomGroupbox.tsx
+++ b/src/CustomGroupbox.tsx
@@ -8,16 +8,17 @@ import { Style, mergeNativeStyles } from '@mendix/pluggable-widgets-tools';
import { CustomGroupboxProps } from '../typings/CustomGroupboxProps';
export interface CustomStyle extends Style {
- container: ViewStyle;
+ headerContainer: ViewStyle;
label: TextStyle;
innerContainer: ViewStyle;
selectedContainer: ViewStyle;
divider: ViewStyle;
icon: ViewStyle;
+ groupboxParent: ViewStyle
}
const defaultStyle: CustomStyle = {
- container: {},
+ headerContainer: {},
label: {},
innerContainer: {},
selectedContainer: {},
@@ -27,7 +28,8 @@ const defaultStyle: CustomStyle = {
},
icon: {
alignSelf: 'flex-end'
- }
+ },
+ groupboxParent: {}
};
interface State {
@@ -53,20 +55,25 @@ export class CustomGroupbox extends Component,
};
return (
-
- {this.state.showContent ? icons.collapseIcon : icons.expandIcon}
+
+
+
+ {this.props.header}
+ {this.state.showContent ? icons.collapseIcon : icons.expandIcon}
+
+
- {this.props.header}
-
+
{this.state.showContent && {this.props.content}}
-
{this.props.showDivider && }
+
+
);
}
toggleContent() {
- this.setState({showContent: !this.state.showContent})
+ this.setState({ showContent: !this.state.showContent })
}
private renderIcon = (glyph: string, toBeRenderedIcon?: DynamicValue) => {