@tsed/react-formio 1.13.1 → 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/components/actions-table/actionsTable.component.d.ts +0 -1
  2. package/dist/components/actions-table/actionsTable.stories.d.ts +0 -1
  3. package/dist/components/alert/alert.component.d.ts +1 -2
  4. package/dist/components/alert/alert.stories.d.ts +0 -1
  5. package/dist/components/card/card.stories.d.ts +0 -1
  6. package/dist/components/form/form.component.d.ts +1 -2
  7. package/dist/components/form/form.component.spec.d.ts +1 -0
  8. package/dist/components/form/form.stories.d.ts +3745 -172
  9. package/dist/components/form/useForm.hook.d.ts +1 -2
  10. package/dist/components/form-access/formAccess.stories.d.ts +1 -2
  11. package/dist/components/form-action/formAction.stories.d.ts +0 -1
  12. package/dist/components/form-builder/formBuilder.stories.d.ts +518 -153
  13. package/dist/components/form-edit/formEdit.component.d.ts +0 -1
  14. package/dist/components/form-edit/formEdit.stories.d.ts +18 -19
  15. package/dist/components/form-settings/formSettings.component.d.ts +0 -1
  16. package/dist/components/form-settings/formSettings.stories.d.ts +1 -2
  17. package/dist/components/forms-table/components/formCell.component.d.ts +0 -1
  18. package/dist/components/forms-table/formsTable.component.d.ts +0 -1
  19. package/dist/components/forms-table/formsTable.stories.d.ts +0 -1
  20. package/dist/components/input-tags/inputTags.component.d.ts +0 -1
  21. package/dist/components/input-tags/inputTags.stories.d.ts +2 -3
  22. package/dist/components/input-text/inputText.component.d.ts +0 -1
  23. package/dist/components/input-text/inputText.stories.d.ts +0 -1
  24. package/dist/components/loader/loader.component.d.ts +1 -1
  25. package/dist/components/loader/loader.stories.d.ts +0 -1
  26. package/dist/components/modal/modal.component.d.ts +1 -1
  27. package/dist/components/modal/modal.stories.d.ts +0 -1
  28. package/dist/components/pagination/pagination.component.d.ts +0 -1
  29. package/dist/components/pagination/pagination.stories.d.ts +0 -1
  30. package/dist/components/react-component/reactComponent.component.d.ts +3 -3
  31. package/dist/components/select/select.stories.d.ts +2 -3
  32. package/dist/components/submissions-table/submissionsTable.component.d.ts +0 -1
  33. package/dist/components/submissions-table/submissionsTable.stories.d.ts +13 -14
  34. package/dist/components/table/components/defaultArrowSort.component.d.ts +0 -1
  35. package/dist/components/table/components/defaultCell.component.d.ts +0 -1
  36. package/dist/components/table/components/defaultCellHeader.component.d.ts +0 -1
  37. package/dist/components/table/components/defaultCellOperations.component.d.ts +0 -1
  38. package/dist/components/table/components/defaultOperationButton.component.d.ts +0 -1
  39. package/dist/components/table/filters/defaultColumnFilter.component.d.ts +0 -1
  40. package/dist/components/table/filters/selectColumnFilter.component.d.ts +0 -1
  41. package/dist/components/table/filters/sliderColumnFilter.component.d.ts +0 -1
  42. package/dist/components/table/table.stories.d.ts +4 -5
  43. package/dist/components/tabs/tabs.component.stories.d.ts +0 -1
  44. package/dist/hooks/useTooltip.d.ts +1 -1
  45. package/dist/index.js +297 -276
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.modern.js +294 -272
  48. package/dist/index.modern.js.map +1 -1
  49. package/dist/stores/auth/auth.selectors.d.ts +1 -1
  50. package/jest.config.js +1 -1
  51. package/package.json +5 -5
  52. package/src/components/__fixtures__/form.fixture.json +23 -0
  53. package/src/components/form/form.component.spec.tsx +56 -0
  54. package/src/components/form/form.component.tsx +2 -2
  55. package/src/components/form/form.stories.tsx +141 -34
  56. package/src/components/form/useForm.hook.ts +39 -38
  57. package/src/components/form-access/formAccess.component.tsx +1 -1
  58. package/src/components/form-access/formAccess.utils.ts +13 -13
  59. package/src/components/form-action/formAction.component.tsx +1 -1
  60. package/src/components/form-builder/formBuilder.component.tsx +1 -1
  61. package/src/components/form-edit/formCtas.component.tsx +32 -30
  62. package/src/components/form-edit/formEdit.component.tsx +1 -1
  63. package/src/components/form-settings/formSettings.utils.ts +3 -3
  64. package/src/components/input-tags/inputTags.component.tsx +3 -3
  65. package/src/components/input-text/inputText.component.tsx +2 -2
  66. package/src/components/modal/modal.component.tsx +2 -2
  67. package/src/components/react-component/reactComponent.component.tsx +9 -6
  68. package/src/components/select/select.component.tsx +2 -2
  69. package/src/components/submissions-table/submissionsTable.component.tsx +6 -6
  70. package/src/components/table/table.component.tsx +58 -44
  71. package/src/components/table/utils/mapFormToColumns.tsx +1 -1
  72. package/src/components/tabs/tabs.component.tsx +1 -1
  73. package/src/hooks/useTooltip.ts +1 -1
  74. package/src/stores/action-info/action-info.selectors.ts +1 -1
  75. package/src/stores/auth/auth.utils.tsx +2 -2
  76. package/src/stores/auth/getAccess.action.ts +2 -2
  77. package/src/stores/auth/logout.action.spec.ts +1 -0
  78. package/src/stores/form/form.selectors.ts +1 -1
  79. package/src/stores/root/root.selectors.ts +2 -2
  80. package/tsconfig.json +10 -27
  81. package/tsconfig.node.json +8 -0
  82. package/craco.config.js +0 -11
  83. package/tsconfig.test.json +0 -6
@@ -361,7 +361,7 @@ function checkRoleFormAccess(auth, form, roles) {
361
361
  return true;
362
362
  }
363
363
 
364
- return !!(roles.includes("owner") && get(form, "owner") === get(auth, "user._id"));
364
+ return roles.includes("owner") && get(form, "owner") === get(auth, "user._id");
365
365
  }
366
366
 
367
367
  return true;
@@ -1191,24 +1191,24 @@ function FormControl({
1191
1191
  label,
1192
1192
  className
1193
1193
  }) {
1194
- return React.createElement("div", {
1194
+ return /*#__PURE__*/React.createElement("div", {
1195
1195
  id: `form-group-${name || ""}`,
1196
1196
  className: classnames("form-group", className)
1197
- }, label && React.createElement("label", {
1197
+ }, label && /*#__PURE__*/React.createElement("label", {
1198
1198
  htmlFor: name,
1199
1199
  className: `col-form-label ${required ? " field-required" : ""}`
1200
- }, label), React.createElement("div", {
1200
+ }, label), /*#__PURE__*/React.createElement("div", {
1201
1201
  className: "input-group"
1202
- }, prefix && React.createElement("div", {
1203
- className: 'input-group-prepend'
1204
- }, React.createElement("span", {
1205
- className: 'input-group-text'
1206
- }, prefix)), children, suffix && React.createElement("div", {
1207
- className: 'input-group-append'
1208
- }, React.createElement("span", {
1209
- className: 'input-group-text'
1210
- }, suffix))), description && React.createElement("div", {
1211
- className: 'form-text text-muted'
1202
+ }, prefix && /*#__PURE__*/React.createElement("div", {
1203
+ className: "input-group-prepend"
1204
+ }, /*#__PURE__*/React.createElement("span", {
1205
+ className: "input-group-text"
1206
+ }, prefix)), children, suffix && /*#__PURE__*/React.createElement("div", {
1207
+ className: "input-group-append"
1208
+ }, /*#__PURE__*/React.createElement("span", {
1209
+ className: "input-group-text"
1210
+ }, suffix))), description && /*#__PURE__*/React.createElement("div", {
1211
+ className: "form-text text-muted"
1212
1212
  }, description));
1213
1213
  }
1214
1214
  FormControl.propTypes = {
@@ -1256,7 +1256,7 @@ function Select(_ref) {
1256
1256
  label: placeholder,
1257
1257
  value: ""
1258
1258
  }, ...choices];
1259
- return React.createElement(FormControl, {
1259
+ return /*#__PURE__*/React.createElement(FormControl, {
1260
1260
  name: name,
1261
1261
  label: label,
1262
1262
  required: required,
@@ -1264,7 +1264,7 @@ function Select(_ref) {
1264
1264
  prefix: prefix,
1265
1265
  suffix: suffix,
1266
1266
  shadow: false
1267
- }, React.createElement("select", Object.assign({
1267
+ }, /*#__PURE__*/React.createElement("select", _extends({
1268
1268
  ref: ref
1269
1269
  }, props, {
1270
1270
  "data-testid": `select_${name}`,
@@ -1275,13 +1275,13 @@ function Select(_ref) {
1275
1275
  value: value || "",
1276
1276
  placeholder: placeholder,
1277
1277
  onChange: event => {
1278
- onChange(name, getEventValue(event));
1278
+ onChange && onChange(name, getEventValue(event));
1279
1279
  }
1280
1280
  }), choices.map(({
1281
1281
  label,
1282
1282
  value
1283
1283
  }) => {
1284
- return React.createElement("option", {
1284
+ return /*#__PURE__*/React.createElement("option", {
1285
1285
  key: String(value),
1286
1286
  label: label,
1287
1287
  value: value
@@ -1356,8 +1356,8 @@ function PaginationButton(props) {
1356
1356
  } = props,
1357
1357
  otherProps = _objectWithoutPropertiesLoose(props, ["component", "children", "disabled", "active"]);
1358
1358
 
1359
- return React.createElement(Component, Object.assign({}, otherProps, {
1360
- "data-testid": 'pagination-button',
1359
+ return /*#__PURE__*/React.createElement(Component, _extends({}, otherProps, {
1360
+ "data-testid": "pagination-button",
1361
1361
  disabled: disabled,
1362
1362
  className: classnames("page-link", disabled ? "disabled" : "", active ? "" : "", props.className)
1363
1363
  }), children);
@@ -1388,56 +1388,56 @@ function Pagination(props) {
1388
1388
  value,
1389
1389
  label: value
1390
1390
  }));
1391
- return React.createElement("nav", {
1392
- "aria-label": 'Page navigation',
1391
+ return /*#__PURE__*/React.createElement("nav", {
1392
+ "aria-label": "Page navigation",
1393
1393
  className: classnames("pagination-group -mb-3", className)
1394
- }, React.createElement("ul", {
1395
- className: 'pagination mb-3 mr-3'
1396
- }, React.createElement("li", {
1394
+ }, /*#__PURE__*/React.createElement("ul", {
1395
+ className: "pagination mb-3 mr-3"
1396
+ }, /*#__PURE__*/React.createElement("li", {
1397
1397
  className: classnames("page-item", !canPreviousPage && "disabled")
1398
- }, React.createElement(PaginationButton, {
1398
+ }, /*#__PURE__*/React.createElement(PaginationButton, {
1399
1399
  tabIndex: -1,
1400
1400
  disabled: !canPreviousPage,
1401
1401
  onClick: () => previousPage()
1402
1402
  }, i18n("Previous"))), pageNumbers.map(page => {
1403
1403
  if ([LEFT_PAGE, RIGHT_PAGE].includes(page)) {
1404
- return React.createElement("li", {
1405
- className: 'page-item',
1404
+ return /*#__PURE__*/React.createElement("li", {
1405
+ className: "page-item",
1406
1406
  key: page
1407
- }, React.createElement(PaginationButton, {
1408
- "aria-hidden": 'true'
1407
+ }, /*#__PURE__*/React.createElement(PaginationButton, {
1408
+ "aria-hidden": "true"
1409
1409
  }, "..."));
1410
1410
  }
1411
1411
 
1412
1412
  const active = page - 1 === pageIndex;
1413
- return React.createElement("li", {
1413
+ return /*#__PURE__*/React.createElement("li", {
1414
1414
  className: classnames("page-item", active && "active"),
1415
1415
  key: page
1416
- }, React.createElement(PaginationButton, {
1416
+ }, /*#__PURE__*/React.createElement(PaginationButton, {
1417
1417
  tabIndex: pageIndex,
1418
1418
  active: active,
1419
1419
  onClick: () => gotoPage(page - 1)
1420
1420
  }, page));
1421
- }), React.createElement("li", {
1421
+ }), /*#__PURE__*/React.createElement("li", {
1422
1422
  className: classnames("page-item", !canNextPage && "disabled")
1423
- }, React.createElement(PaginationButton, {
1423
+ }, /*#__PURE__*/React.createElement(PaginationButton, {
1424
1424
  tabIndex: pageNumbers.length,
1425
1425
  disabled: !canNextPage,
1426
1426
  onClick: () => nextPage()
1427
- }, i18n("Next")))), React.createElement("li", {
1428
- className: 'mb-3 mr-3 flex items-center'
1429
- }, React.createElement(Select, {
1427
+ }, i18n("Next")))), /*#__PURE__*/React.createElement("li", {
1428
+ className: "mb-3 mr-3 flex items-center"
1429
+ }, /*#__PURE__*/React.createElement(Select, {
1430
1430
  name: "page",
1431
1431
  value: pageSize,
1432
1432
  choices: choices,
1433
1433
  onChange: (name, value) => {
1434
1434
  setPageSize(+value);
1435
1435
  }
1436
- }), React.createElement("span", {
1436
+ }), /*#__PURE__*/React.createElement("span", {
1437
1437
  className: "ml-3"
1438
- }, i18n("items per page"))), pageOptions && React.createElement("li", {
1438
+ }, i18n("items per page"))), pageOptions && /*#__PURE__*/React.createElement("li", {
1439
1439
  className: "mb-3 flex items-center"
1440
- }, React.createElement("span", null, i18n("Page"), "\u00A0"), React.createElement("strong", null, pageIndex + 1, " of ", pageOptions.length)));
1440
+ }, /*#__PURE__*/React.createElement("span", null, i18n("Page"), "\xA0"), /*#__PURE__*/React.createElement("strong", null, pageIndex + 1, " of ", pageOptions.length)));
1441
1441
  }
1442
1442
 
1443
1443
  function DefaultArrowSort({
@@ -1447,9 +1447,9 @@ function DefaultArrowSort({
1447
1447
  isSorted,
1448
1448
  isSortedDesc
1449
1449
  } = column;
1450
- return React.createElement("span", {
1450
+ return /*#__PURE__*/React.createElement("span", {
1451
1451
  className: "table-arrow-sort"
1452
- }, isSorted ? React.createElement("i", {
1452
+ }, isSorted ? /*#__PURE__*/React.createElement("i", {
1453
1453
  className: iconClass(undefined, isSortedDesc ? "sort-up" : "sort-down")
1454
1454
  }) : "");
1455
1455
  }
@@ -1457,12 +1457,12 @@ function DefaultArrowSort({
1457
1457
  function DefaultCellHeader({
1458
1458
  column
1459
1459
  }) {
1460
- return React.createElement("div", {
1460
+ return /*#__PURE__*/React.createElement("div", {
1461
1461
  className: "table-cell-header"
1462
- }, React.createElement("div", Object.assign({
1463
- className: 'table-cell-header__label'
1464
- }, column.getSortByToggleProps()), React.createElement("span", null, column.render("Header")), column.render("ArrowSort")), column.canFilter ? React.createElement("div", {
1465
- className: 'table-cell-header__filter'
1462
+ }, /*#__PURE__*/React.createElement("div", _extends({
1463
+ className: "table-cell-header__label"
1464
+ }, column.getSortByToggleProps()), /*#__PURE__*/React.createElement("span", null, column.render("Header")), column.render("ArrowSort")), column.canFilter ? /*#__PURE__*/React.createElement("div", {
1465
+ className: "table-cell-header__filter"
1466
1466
  }, column.render("Filter")) : null);
1467
1467
  }
1468
1468
 
@@ -1496,11 +1496,11 @@ function InputText(_ref) {
1496
1496
  props = _objectWithoutPropertiesLoose(_ref, ["name", "value", "label", "onChange", "required", "size", "type", "prefix", "suffix", "description", "className", "placeholder"]);
1497
1497
 
1498
1498
  const [localValue, setValue] = useState(value);
1499
- const change = useMemo(() => callLast(onChange, 300), [onChange]);
1499
+ const change = useMemo(() => onChange && callLast(onChange, 300), [onChange]);
1500
1500
  useEffect(() => {
1501
1501
  setValue(value);
1502
1502
  }, [value]);
1503
- return React.createElement(FormControl, {
1503
+ return /*#__PURE__*/React.createElement(FormControl, {
1504
1504
  name: name,
1505
1505
  label: label,
1506
1506
  required: required,
@@ -1508,7 +1508,7 @@ function InputText(_ref) {
1508
1508
  prefix: prefix,
1509
1509
  suffix: suffix,
1510
1510
  className: className
1511
- }, React.createElement("input", Object.assign({
1511
+ }, /*#__PURE__*/React.createElement("input", _extends({
1512
1512
  type: type || "text"
1513
1513
  }, props, {
1514
1514
  "data-testid": `input_${name}`,
@@ -1520,7 +1520,7 @@ function InputText(_ref) {
1520
1520
  onChange: event => {
1521
1521
  const value = getEventValue(event);
1522
1522
  setValue(value);
1523
- return change(name, value);
1523
+ return change && change(name, value);
1524
1524
  }
1525
1525
  })));
1526
1526
  }
@@ -1552,7 +1552,7 @@ function DefaultColumnFilter(props) {
1552
1552
  setFilterId(id);
1553
1553
  setFilter(value || undefined);
1554
1554
  }, [id, setValue, setFilterId, setFilter]);
1555
- return React.createElement(InputText, {
1555
+ return /*#__PURE__*/React.createElement(InputText, {
1556
1556
  size: "sm",
1557
1557
  id: id,
1558
1558
  name: id,
@@ -1581,12 +1581,12 @@ function DefaultOperationButton(props) {
1581
1581
  title = "",
1582
1582
  i18n = f => f
1583
1583
  } = props;
1584
- return React.createElement("button", {
1584
+ return /*#__PURE__*/React.createElement("button", {
1585
1585
  className: classnames(className, ["btn", buttonOutline && "outline", buttonType].filter(Boolean).join("-"), `btn-${buttonSize}`),
1586
1586
  onClick: stopPropagationWrapper(() => onClick(action))
1587
- }, icon ? React.createElement(React.Fragment, null, React.createElement("i", {
1587
+ }, icon ? /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("i", {
1588
1588
  className: iconClass(undefined, icon)
1589
- }), " ", title && " ") : null, title && React.createElement("span", {
1589
+ }), " ", title && " ") : null, title && /*#__PURE__*/React.createElement("span", {
1590
1590
  className: icon && title ? "ml-1" : ""
1591
1591
  }, i18n(title)));
1592
1592
  }
@@ -1599,8 +1599,8 @@ function DefaultCellOperations({
1599
1599
  i18n
1600
1600
  }) {
1601
1601
  const data = row.original;
1602
- return React.createElement("div", {
1603
- className: 'btn-group'
1602
+ return /*#__PURE__*/React.createElement("div", {
1603
+ className: "btn-group"
1604
1604
  }, operations.filter(({
1605
1605
  permissionsResolver
1606
1606
  }) => !permissionsResolver || permissionsResolver(data, ctx)).map(_ref => {
@@ -1609,7 +1609,7 @@ function DefaultCellOperations({
1609
1609
  } = _ref,
1610
1610
  operation = _objectWithoutPropertiesLoose(_ref, ["OperationButton"]);
1611
1611
 
1612
- return React.createElement(OperationButton, Object.assign({
1612
+ return /*#__PURE__*/React.createElement(OperationButton, _extends({
1613
1613
  key: operation.action
1614
1614
  }, operation, {
1615
1615
  onClick: action => onClick(data, action),
@@ -1636,10 +1636,10 @@ function useOperations({
1636
1636
  return [...columns, {
1637
1637
  id: "operations",
1638
1638
  groupByBoundary: true,
1639
- Header: () => React.createElement("div", {
1639
+ Header: () => /*#__PURE__*/React.createElement("div", {
1640
1640
  className: "text-center"
1641
1641
  }, i18n("Operations")),
1642
- Cell: props => React.createElement(CellOperations, Object.assign({}, props, {
1642
+ Cell: props => /*#__PURE__*/React.createElement(CellOperations, _extends({}, props, {
1643
1643
  operations: operations,
1644
1644
  onClick: onClick,
1645
1645
  ctx: ctx,
@@ -1661,14 +1661,14 @@ function getOperationCallback(operations, onClick) {
1661
1661
  }
1662
1662
 
1663
1663
  function DefaultLoader() {
1664
- return React.createElement("div", {
1664
+ return /*#__PURE__*/React.createElement("div", {
1665
1665
  className: "text-center p-2 pb-4 font-bold"
1666
1666
  }, "Loading in progress");
1667
1667
  }
1668
1668
 
1669
1669
  function DefaultEmptyData() {
1670
- return React.createElement("div", {
1671
- className: 'text-center p-2 pb-4 font-bold'
1670
+ return /*#__PURE__*/React.createElement("div", {
1671
+ className: "text-center p-2 pb-4 font-bold"
1672
1672
  }, "No data found");
1673
1673
  }
1674
1674
 
@@ -1753,22 +1753,23 @@ function Table(props) {
1753
1753
  });
1754
1754
  }, [onChange, pageIndex, pageSize, sortBy, filters, filterId]); // Render the UI for your table
1755
1755
 
1756
- return React.createElement("div", {
1756
+ return /*#__PURE__*/React.createElement("div", {
1757
1757
  className: classnames("table-group table-responsive", className)
1758
- }, React.createElement("table", Object.assign({
1758
+ }, /*#__PURE__*/React.createElement("table", _extends({
1759
1759
  className: "table table-striped table-hover"
1760
- }, tableInstance.getTableProps()), React.createElement("thead", null, tableInstance.headerGroups.map((headerGroup, i) => React.createElement("tr", Object.assign({
1760
+ }, tableInstance.getTableProps()), /*#__PURE__*/React.createElement("thead", null, tableInstance.headerGroups.map((headerGroup, i) => /*#__PURE__*/React.createElement("tr", _extends({}, headerGroup.getHeaderGroupProps(), {
1761
1761
  key: `tableInstance.headerGroups${i}`
1762
- }, headerGroup.getHeaderGroupProps()), headerGroup.headers.map(column => React.createElement("th", Object.assign({
1762
+ }), headerGroup.headers.map(column => /*#__PURE__*/React.createElement("th", _extends({}, column.getHeaderProps(), {
1763
1763
  key: `tableInstance.headers.column.${column.id}`
1764
- }, column.getHeaderProps()), React.createElement(CellHeader, {
1764
+ }), /*#__PURE__*/React.createElement(CellHeader, {
1765
1765
  column: column
1766
- })))))), !isLoading ? React.createElement("tbody", Object.assign({}, tableInstance.getTableBodyProps()), tableInstance.page.map(row => {
1766
+ })))))), !isLoading ? /*#__PURE__*/React.createElement("tbody", tableInstance.getTableBodyProps(), tableInstance.page.map(row => {
1767
1767
  tableInstance.prepareRow(row);
1768
- return React.createElement("tr", Object.assign({
1769
- key: `tableInstance.page.${row.id}`,
1768
+ return /*#__PURE__*/React.createElement("tr", _extends({
1770
1769
  onClick: () => _onClick(row.original, "row")
1771
- }, row.getRowProps()), row.cells.map((cell, i) => {
1770
+ }, row.getRowProps(), {
1771
+ key: `tableInstance.page.${row.id}`
1772
+ }), row.cells.map((cell, i) => {
1772
1773
  const {
1773
1774
  hidden,
1774
1775
  colspan
@@ -1778,14 +1779,15 @@ function Table(props) {
1778
1779
  return null;
1779
1780
  }
1780
1781
 
1781
- return React.createElement("td", Object.assign({
1782
- key: `tableInstance.page.cells.${cell.value || "value"}.${i}`,
1782
+ return /*#__PURE__*/React.createElement("td", _extends({
1783
1783
  colSpan: colspan
1784
- }, cell.getCellProps()), cell.render("Cell"));
1784
+ }, cell.getCellProps(), {
1785
+ key: `tableInstance.page.cells.${cell.value || "value"}.${i}`
1786
+ }), cell.render("Cell"));
1785
1787
  }));
1786
- })) : null), isLoading ? React.createElement(Loader, null) : null, !data.length ? React.createElement(EmptyData, null) : null, !isLoading && data.length && !disablePagination ? React.createElement("div", {
1788
+ })) : null), isLoading ? /*#__PURE__*/React.createElement(Loader, null) : null, !data.length ? /*#__PURE__*/React.createElement(EmptyData, null) : null, !isLoading && data.length && !disablePagination ? /*#__PURE__*/React.createElement("div", {
1787
1789
  className: "overflow-hidden"
1788
- }, React.createElement(Pagination$1, Object.assign({}, tableInstance, {
1790
+ }, /*#__PURE__*/React.createElement(Pagination$1, _extends({}, tableInstance, {
1789
1791
  className: "text-sm",
1790
1792
  pageIndex: pageIndex,
1791
1793
  pageSize: pageSize,
@@ -1815,13 +1817,13 @@ function ActionsTable(_ref) {
1815
1817
  id: "title"
1816
1818
  }];
1817
1819
  }, []);
1818
- return React.createElement(Table, Object.assign({}, props, {
1820
+ return /*#__PURE__*/React.createElement(Table, _extends({}, props, {
1819
1821
  disableFilters: disableFilters,
1820
1822
  disablePagination: disablePagination,
1821
1823
  columns: columns
1822
- }), React.createElement("div", {
1824
+ }), /*#__PURE__*/React.createElement("div", {
1823
1825
  className: "pagination-group"
1824
- }, React.createElement(Select, {
1826
+ }, /*#__PURE__*/React.createElement(Select, {
1825
1827
  name: "actions",
1826
1828
  value: currentAction,
1827
1829
  choices: [{
@@ -1829,15 +1831,15 @@ function ActionsTable(_ref) {
1829
1831
  value: ""
1830
1832
  }].concat(availableActions),
1831
1833
  onChange: (name, action) => setAction(action)
1832
- }), React.createElement("div", {
1834
+ }), /*#__PURE__*/React.createElement("div", {
1833
1835
  className: "pl-3"
1834
- }, React.createElement("button", {
1836
+ }, /*#__PURE__*/React.createElement("button", {
1835
1837
  "data-testid": "submit",
1836
1838
  disabled: currentAction === "",
1837
1839
  className: "btn btn-success",
1838
1840
  onClick: () => currentAction && onAddAction(currentAction),
1839
1841
  type: "submit"
1840
- }, React.createElement("i", {
1842
+ }, /*#__PURE__*/React.createElement("i", {
1841
1843
  className: classnames(iconClass(undefined, "plus"), "mr-1")
1842
1844
  }), " ", i18n("Add action")))));
1843
1845
  }
@@ -1854,9 +1856,9 @@ function formatError(error) {
1854
1856
  if (Object.prototype.hasOwnProperty.call(error, "errors")) {
1855
1857
  return Object.keys(error.errors).map((key, index) => {
1856
1858
  const item = error.errors[key];
1857
- return React.createElement("div", {
1859
+ return /*#__PURE__*/React.createElement("div", {
1858
1860
  key: index
1859
- }, React.createElement("strong", null, item.name, " (", item.path, ")"), " ", "- ", item.message);
1861
+ }, /*#__PURE__*/React.createElement("strong", null, item.name, " (", item.path, ")"), " ", "- ", item.message);
1860
1862
  });
1861
1863
  } // If this is a standard error.
1862
1864
 
@@ -1868,7 +1870,7 @@ function formatError(error) {
1868
1870
 
1869
1871
  if (Object.prototype.hasOwnProperty.call(error, "name") && error.name === "ValidationError") {
1870
1872
  return error.details.map((item, index) => {
1871
- return React.createElement("div", {
1873
+ return /*#__PURE__*/React.createElement("div", {
1872
1874
  key: index
1873
1875
  }, item.message);
1874
1876
  });
@@ -1890,9 +1892,9 @@ function Alert({
1890
1892
  return null;
1891
1893
  }
1892
1894
 
1893
- return React.createElement("div", {
1895
+ return /*#__PURE__*/React.createElement("div", {
1894
1896
  className: `alert alert-${type}`,
1895
- role: 'alert'
1897
+ role: "alert"
1896
1898
  }, formatError(error));
1897
1899
  }
1898
1900
 
@@ -1901,18 +1903,46 @@ function Card({
1901
1903
  label,
1902
1904
  className
1903
1905
  }) {
1904
- return React.createElement("div", {
1906
+ return /*#__PURE__*/React.createElement("div", {
1905
1907
  className: classnames("card", className)
1906
- }, React.createElement("div", {
1908
+ }, /*#__PURE__*/React.createElement("div", {
1907
1909
  className: "card-header "
1908
- }, React.createElement("h4", {
1910
+ }, /*#__PURE__*/React.createElement("h4", {
1909
1911
  className: "card-title"
1910
- }, label)), React.createElement("div", {
1912
+ }, label)), /*#__PURE__*/React.createElement("div", {
1911
1913
  className: "card-body",
1912
1914
  role: "article"
1913
1915
  }, children));
1914
1916
  }
1915
1917
 
1918
+ function useDebounce(event, callback, events) {
1919
+ useEffect(() => {
1920
+ callback && events.set(event, callLast(callback, 100));
1921
+ }, [callback, event, events]);
1922
+ }
1923
+
1924
+ function useEvents(funcs) {
1925
+ const events = useRef(new Map());
1926
+
1927
+ const hasEvent = event => {
1928
+ return funcs.hasOwnProperty(event) && typeof funcs[event] === "function";
1929
+ };
1930
+
1931
+ const emit = (event, ...args) => {
1932
+ if (hasEvent(event)) {
1933
+ const fn = events.current.has(event) ? events.current.get(event) : funcs[event];
1934
+ return fn(...args);
1935
+ }
1936
+ };
1937
+
1938
+ useDebounce("onChange", funcs.onChange, events.current);
1939
+ return {
1940
+ events,
1941
+ emit,
1942
+ hasEvent
1943
+ };
1944
+ }
1945
+
1916
1946
  function useForm(props) {
1917
1947
  const {
1918
1948
  src,
@@ -1926,12 +1956,15 @@ function useForm(props) {
1926
1956
  const element = useRef();
1927
1957
  const isLoaded = useRef();
1928
1958
  const instance = useRef();
1929
- const events = useRef(new Map());
1959
+ const {
1960
+ emit,
1961
+ hasEvent
1962
+ } = useEvents(funcs);
1930
1963
 
1931
1964
  async function customValidation(submission, callback) {
1932
- if (events.current.has("onAsyncSubmit")) {
1965
+ if (hasEvent("onAsyncSubmit")) {
1933
1966
  try {
1934
- await events.current.get("onAsyncSubmit")(submission);
1967
+ await emit("onAsyncSubmit", submission, instance.current);
1935
1968
  } catch (err) {
1936
1969
  callback((err == null ? void 0 : err.errors) || err);
1937
1970
  }
@@ -1958,24 +1991,15 @@ function useForm(props) {
1958
1991
  }
1959
1992
 
1960
1993
  if (event.startsWith("formio.")) {
1961
- const funcName = `on${event.charAt(7).toUpperCase()}${event.slice(8)}`;
1994
+ const eventName = `on${event.charAt(7).toUpperCase()}${event.slice(8)}`;
1962
1995
 
1963
- if (funcName === "onChange") {
1996
+ if (eventName === "onChange") {
1964
1997
  if (isEqual(get$1(submission, "data"), args[0].data)) {
1965
1998
  return;
1966
1999
  }
1967
2000
  }
1968
2001
 
1969
- if ( // eslint-disable-next-line no-prototype-builtins
1970
- props.hasOwnProperty(funcName) && typeof funcs[funcName] === "function") {
1971
- if (!events.current.has(funcName)) {
1972
- const fn = callLast(funcs[funcName], 100);
1973
- events.current.set(funcName, fn);
1974
- }
1975
-
1976
- instance.current.instance.setAlert("success", "");
1977
- events.current.get(funcName)(...args, instance.current);
1978
- }
2002
+ emit(eventName, ...args, instance.current);
1979
2003
  }
1980
2004
  });
1981
2005
  instance.current.ready.then(formio => {
@@ -2030,15 +2054,6 @@ function useForm(props) {
2030
2054
  instance.current && instance.current.destroy(true);
2031
2055
  };
2032
2056
  }, []);
2033
- useEffect(() => {
2034
- props.onSubmit && events.current.set("onSubmit", props.onSubmit);
2035
- }, [props.onSubmit, events]);
2036
- useEffect(() => {
2037
- props.onAsyncSubmit && events.current.set("onAsyncSubmit", props.onAsyncSubmit);
2038
- }, [props.onAsyncSubmit, events]);
2039
- useEffect(() => {
2040
- props.onSubmitDone && events.current.set("onSubmitDone", props.onSubmitDone);
2041
- }, [props.onSubmitDone, events]);
2042
2057
  return {
2043
2058
  element
2044
2059
  };
@@ -2049,8 +2064,8 @@ function Form(props) {
2049
2064
  const {
2050
2065
  element
2051
2066
  } = useForm(props);
2052
- return React.createElement("div", {
2053
- "data-testid": "formioContainer" + (props.name || ""),
2067
+ return /*#__PURE__*/React.createElement("div", {
2068
+ "data-testid": `formioContainer${props.name || ""}`,
2054
2069
  ref: element,
2055
2070
  className: props.className
2056
2071
  });
@@ -2239,8 +2254,8 @@ function getAccessPermissionForm({
2239
2254
  function rolesToChoices(roles) {
2240
2255
  return Object.values(roles).map(role => {
2241
2256
  return {
2242
- label: role.title,
2243
- value: role._id
2257
+ label: role.title || "",
2258
+ value: role._id || ""
2244
2259
  };
2245
2260
  });
2246
2261
  }
@@ -2250,7 +2265,7 @@ function accessToHash(keys, access = []) {
2250
2265
  o[role.type] = role.roles;
2251
2266
  return o;
2252
2267
  }, {});
2253
- return keys.reduce((data, key) => {
2268
+ return (keys || []).filter(Boolean).reduce((data, key) => {
2254
2269
  return _extends({}, data, {
2255
2270
  [key]: hash[key] || []
2256
2271
  });
@@ -2349,7 +2364,7 @@ function useFormAccess({
2349
2364
  submissions,
2350
2365
  onChange,
2351
2366
  onSubmit: () => {
2352
- onSubmit(submissionsToDataAccess(formDefinition, submissions));
2367
+ onSubmit && onSubmit(submissionsToDataAccess(formDefinition, submissions));
2353
2368
  }
2354
2369
  };
2355
2370
  }
@@ -2364,7 +2379,7 @@ function NamedFormAccess({
2364
2379
  children
2365
2380
  }) {
2366
2381
  const [isValid, setIsValid] = useState(true);
2367
- return React.createElement(React.Fragment, null, React.createElement(Form, {
2382
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Form, {
2368
2383
  name: name,
2369
2384
  form: form[name],
2370
2385
  submission: submissions[name],
@@ -2378,11 +2393,11 @@ function NamedFormAccess({
2378
2393
  setIsValid(isValid);
2379
2394
  },
2380
2395
  options: options
2381
- }), React.createElement("button", {
2396
+ }), /*#__PURE__*/React.createElement("button", {
2382
2397
  disabled: !isValid,
2383
2398
  className: "mt-5 btn btn-primary",
2384
2399
  onClick: onSubmit
2385
- }, "Save access"), children, React.createElement("div", {
2400
+ }, "Save access"), children, /*#__PURE__*/React.createElement("div", {
2386
2401
  className: "alert alert-warning mt-5"
2387
2402
  }, "Elevated permissions allow users to access and modify other user's entities. Assign with caution."));
2388
2403
  }
@@ -2396,43 +2411,43 @@ function FormAccess(props) {
2396
2411
  onChange,
2397
2412
  onSubmit
2398
2413
  } = useFormAccess(props);
2399
- return React.createElement("div", null, props.children, React.createElement("div", {
2414
+ return /*#__PURE__*/React.createElement("div", null, props.children, /*#__PURE__*/React.createElement("div", {
2400
2415
  className: "flex mb-5"
2401
- }, React.createElement(Card, {
2416
+ }, /*#__PURE__*/React.createElement(Card, {
2402
2417
  label: "Manage submission access",
2403
2418
  className: "flex-1"
2404
- }, React.createElement(NamedFormAccess, {
2419
+ }, /*#__PURE__*/React.createElement(NamedFormAccess, {
2405
2420
  name: "submissionAccess",
2406
2421
  form: form,
2407
2422
  submissions: submissions,
2408
2423
  onChange: onChange,
2409
2424
  onSubmit: onSubmit,
2410
2425
  options: options
2411
- }, props.children)), React.createElement("div", {
2426
+ }, props.children)), /*#__PURE__*/React.createElement("div", {
2412
2427
  className: "w-1/4 pl-4"
2413
- }, React.createElement(Card, {
2428
+ }, /*#__PURE__*/React.createElement(Card, {
2414
2429
  label: "About Submission Data Permissions"
2415
- }, React.createElement("p", null, "Submission Data Permissions allow you to control who can create, view, and modify form submission data."), React.createElement("ul", {
2430
+ }, /*#__PURE__*/React.createElement("p", null, "Submission Data Permissions allow you to control who can create, view, and modify form submission data."), /*#__PURE__*/React.createElement("ul", {
2416
2431
  className: "mt-5 pl-7 list-disc"
2417
- }, React.createElement("li", {
2432
+ }, /*#__PURE__*/React.createElement("li", {
2418
2433
  className: "pb-2"
2419
- }, React.createElement("strong", null, "Own Permissions"), " - These permissions apply if the user is the original creator of the submission data and is listed as the owner of the submission in submission.owner. This allows users to create and edit their own submission data without seeing other user's data."), React.createElement("li", null, React.createElement("strong", null, "All Permissions"), " - These permissions apply to all submission data regardless of who owns it."))))), React.createElement("div", {
2434
+ }, /*#__PURE__*/React.createElement("strong", null, "Own Permissions"), " - These permissions apply if the user is the original creator of the submission data and is listed as the owner of the submission in submission.owner. This allows users to create and edit their own submission data without seeing other user's data."), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "All Permissions"), " - These permissions apply to all submission data regardless of who owns it."))))), /*#__PURE__*/React.createElement("div", {
2420
2435
  className: "flex mb-5"
2421
- }, React.createElement(Card, {
2436
+ }, /*#__PURE__*/React.createElement(Card, {
2422
2437
  label: `Manage ${type} definition access`,
2423
2438
  className: "flex-1"
2424
- }, React.createElement(NamedFormAccess, {
2439
+ }, /*#__PURE__*/React.createElement(NamedFormAccess, {
2425
2440
  name: "access",
2426
2441
  form: form,
2427
2442
  submissions: submissions,
2428
2443
  onChange: onChange,
2429
2444
  onSubmit: onSubmit,
2430
2445
  options: options
2431
- }, props.children)), React.createElement("div", {
2446
+ }, props.children)), /*#__PURE__*/React.createElement("div", {
2432
2447
  className: "w-1/4 pl-4"
2433
- }, React.createElement(Card, {
2448
+ }, /*#__PURE__*/React.createElement(Card, {
2434
2449
  label: "About Form Definition Access"
2435
- }, React.createElement("p", null, "These permissions allow you to give access to a single form's JSON definition so they can render the form."), React.createElement("p", null, "Typically you will want to allow all of your roles to be able to Read the form definition."), React.createElement("p", null, "Each form also has an owner at ", React.createElement("strong", null, "form.owner"), " which is the user who created the form. In some applications users are allowed to create their own forms. In those cases it is helpful to have Owner based permissions as well.")))));
2450
+ }, /*#__PURE__*/React.createElement("p", null, "These permissions allow you to give access to a single form's JSON definition so they can render the form."), /*#__PURE__*/React.createElement("p", null, "Typically you will want to allow all of your roles to be able to Read the form definition."), /*#__PURE__*/React.createElement("p", null, "Each form also has an owner at ", /*#__PURE__*/React.createElement("strong", null, "form.owner"), " which is the user who created the form. In some applications users are allowed to create their own forms. In those cases it is helpful to have Owner based permissions as well.")))));
2436
2451
  }
2437
2452
  FormAccess.propTypes = {
2438
2453
  type: PropTypes.string.isRequired,
@@ -2490,7 +2505,7 @@ function FormAction(_ref2) {
2490
2505
  }
2491
2506
  };
2492
2507
  }, [props.submission, actionInfo.settingsForm]);
2493
- return React.createElement("div", null, children, React.createElement(Form, {
2508
+ return /*#__PURE__*/React.createElement("div", null, children, /*#__PURE__*/React.createElement(Form, {
2494
2509
  form: form,
2495
2510
  submission: submission,
2496
2511
  onSubmit: onSubmit,
@@ -2537,6 +2552,8 @@ async function createBuilder(el, {
2537
2552
  class FormBuilder extends React.Component {
2538
2553
  constructor(props) {
2539
2554
  super(props);
2555
+ this.elRef = void 0;
2556
+ this.builderRef = void 0;
2540
2557
  this.state = {
2541
2558
  display: props.display,
2542
2559
  components: cloneDeep(props.components)
@@ -2613,17 +2630,17 @@ class FormBuilder extends React.Component {
2613
2630
  }, () => {
2614
2631
  var _this$props;
2615
2632
 
2616
- (_this$props = this.props) == null ? void 0 : _this$props.onChange(components);
2633
+ ((_this$props = this.props) == null ? void 0 : _this$props.onChange) && this.props.onChange(components);
2617
2634
  });
2618
2635
  }
2619
2636
 
2620
2637
  render() {
2621
- return React.createElement("div", {
2638
+ return /*#__PURE__*/React.createElement("div", {
2622
2639
  ref: ref => {
2623
2640
  this.elRef = ref;
2624
2641
  },
2625
2642
  onClick: e => e.stopPropagation()
2626
- }, React.createElement("div", null));
2643
+ }, /*#__PURE__*/React.createElement("div", null));
2627
2644
  }
2628
2645
 
2629
2646
  }
@@ -2693,37 +2710,37 @@ function FormEditCTAs({
2693
2710
  placement: "top",
2694
2711
  title: t("Reset all changes")
2695
2712
  });
2696
- return React.createElement("div", {
2713
+ return /*#__PURE__*/React.createElement("div", {
2697
2714
  className: "form-edit__actions"
2698
- }, React.createElement("div", null, React.createElement("button", {
2715
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("button", {
2699
2716
  className: `btn btn-primary btn-save flex ${disabled ? "disabled" : ""}`,
2700
2717
  disabled: disabled,
2701
- onClick: () => !disabled && onSubmit()
2702
- }, React.createElement("i", {
2718
+ onClick: () => !disabled && onSubmit && onSubmit()
2719
+ }, /*#__PURE__*/React.createElement("i", {
2703
2720
  className: `mr-1 ${iconClass(options.iconset, "save")}`
2704
- }), saveText), React.createElement("div", null, React.createElement("button", {
2721
+ }), saveText), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("button", {
2705
2722
  className: `btn btn-light btn-undo ${hasUndo ? "" : "disabled"}`,
2706
- onClick: () => onUndo(),
2723
+ onClick: () => onUndo && onUndo(),
2707
2724
  ref: undoTooltipRef
2708
- }, React.createElement("i", {
2725
+ }, /*#__PURE__*/React.createElement("i", {
2709
2726
  className: iconClass(options.iconset, "undo")
2710
- })), React.createElement("button", {
2727
+ })), /*#__PURE__*/React.createElement("button", {
2711
2728
  className: `btn btn-light btn-redo ${hasRedo ? "" : "disabled"}`,
2712
- onClick: () => onRedo(),
2729
+ onClick: () => onRedo && onRedo(),
2713
2730
  ref: redoTooltipRef
2714
- }, React.createElement("i", {
2731
+ }, /*#__PURE__*/React.createElement("i", {
2715
2732
  className: iconClass(options.iconset, "redo")
2716
- }))), React.createElement("div", null, onCopy && React.createElement("button", {
2717
- className: 'btn btn-light',
2733
+ }))), /*#__PURE__*/React.createElement("div", null, onCopy && /*#__PURE__*/React.createElement("button", {
2734
+ className: "btn btn-light",
2718
2735
  onClick: () => onCopy(),
2719
2736
  ref: copyTooltipRef
2720
- }, React.createElement("i", {
2737
+ }, /*#__PURE__*/React.createElement("i", {
2721
2738
  className: iconClass(options.iconset, "copy")
2722
- })), React.createElement("button", {
2739
+ })), /*#__PURE__*/React.createElement("button", {
2723
2740
  className: `btn btn-light btn-reset`,
2724
- onClick: () => onReset(),
2741
+ onClick: () => onReset && onReset(),
2725
2742
  ref: resetTooltipRef
2726
- }, React.createElement("i", {
2743
+ }, /*#__PURE__*/React.createElement("i", {
2727
2744
  className: iconClass(options.iconset, "reset")
2728
2745
  })))));
2729
2746
  }
@@ -2760,25 +2777,25 @@ function InputTags(_ref) {
2760
2777
  });
2761
2778
  instance.setValue([].concat(value, []));
2762
2779
  instance.passedElement.element.addEventListener("addItem", event => {
2763
- onChange(name, uniq(value.concat(event.detail.value)));
2780
+ onChange && onChange(name, uniq(value.concat(event.detail.value)));
2764
2781
  });
2765
2782
  instance.passedElement.element.addEventListener("removeItem", event => {
2766
- onChange(name, value.filter(v => v !== event.detail.value));
2783
+ onChange && onChange(name, value.filter(v => v !== event.detail.value));
2767
2784
  });
2768
2785
  return () => {
2769
2786
  instance.destroy();
2770
2787
  };
2771
2788
  }, []);
2772
- return React.createElement(FormControl, {
2789
+ return /*#__PURE__*/React.createElement(FormControl, {
2773
2790
  name: name,
2774
2791
  label: label,
2775
2792
  required: required,
2776
2793
  description: description,
2777
2794
  prefix: prefix,
2778
2795
  suffix: suffix
2779
- }, React.createElement("input", Object.assign({
2796
+ }, /*#__PURE__*/React.createElement("input", _extends({
2780
2797
  ref: ref,
2781
- type: 'text'
2798
+ type: "text"
2782
2799
  }, props, {
2783
2800
  id: name,
2784
2801
  required: required
@@ -2811,36 +2828,36 @@ function FormParameters({
2811
2828
  className = ""
2812
2829
  }) {
2813
2830
  const hasTypeChoices = typeChoices && typeChoices.length > 1;
2814
- return React.createElement("div", {
2831
+ return /*#__PURE__*/React.createElement("div", {
2815
2832
  className: `form-edit__settings ${className}`
2816
- }, React.createElement("div", {
2833
+ }, /*#__PURE__*/React.createElement("div", {
2817
2834
  className: "w-1/3"
2818
- }, React.createElement(InputText, {
2835
+ }, /*#__PURE__*/React.createElement(InputText, {
2819
2836
  label: "Title",
2820
- placeholder: 'Enter the form title',
2837
+ placeholder: "Enter the form title",
2821
2838
  name: "title",
2822
2839
  required: true,
2823
2840
  value: form.title,
2824
2841
  onChange: onChange
2825
- })), React.createElement("div", {
2842
+ })), /*#__PURE__*/React.createElement("div", {
2826
2843
  className: "w-1/3"
2827
- }, React.createElement(InputText, {
2844
+ }, /*#__PURE__*/React.createElement(InputText, {
2828
2845
  label: "Name",
2829
- placeholder: 'Enter the form machine name',
2846
+ placeholder: "Enter the form machine name",
2830
2847
  name: "name",
2831
2848
  required: true,
2832
2849
  value: form.name,
2833
2850
  onChange: onChange
2834
- })), React.createElement("div", {
2851
+ })), /*#__PURE__*/React.createElement("div", {
2835
2852
  className: "w-1/3"
2836
- }, React.createElement(InputText, {
2853
+ }, /*#__PURE__*/React.createElement(InputText, {
2837
2854
  label: "Path",
2838
- placeholder: 'example',
2855
+ placeholder: "example",
2839
2856
  name: "path",
2840
2857
  className: "mb-0",
2841
- description: React.createElement("span", {
2858
+ description: /*#__PURE__*/React.createElement("span", {
2842
2859
  className: "text-xxs flex items-center"
2843
- }, React.createElement("i", {
2860
+ }, /*#__PURE__*/React.createElement("i", {
2844
2861
  className: "bx bx-link ml-1 mr-1"
2845
2862
  }), window.location.origin + "/" + form.path),
2846
2863
  required: true,
@@ -2850,25 +2867,25 @@ function FormParameters({
2850
2867
  width: "120px"
2851
2868
  },
2852
2869
  onChange: onChange
2853
- })), React.createElement("div", {
2870
+ })), /*#__PURE__*/React.createElement("div", {
2854
2871
  className: "w-1/3"
2855
- }, React.createElement(Select, {
2872
+ }, /*#__PURE__*/React.createElement(Select, {
2856
2873
  label: "Display as",
2857
2874
  name: "display",
2858
2875
  value: form.display,
2859
2876
  choices: displayChoices,
2860
2877
  onChange: onChange
2861
- })), hasTypeChoices && React.createElement("div", {
2878
+ })), hasTypeChoices && /*#__PURE__*/React.createElement("div", {
2862
2879
  className: "w-1/3"
2863
- }, React.createElement(Select, {
2880
+ }, /*#__PURE__*/React.createElement(Select, {
2864
2881
  label: "Type",
2865
2882
  name: "type",
2866
2883
  value: form.type,
2867
2884
  choices: typeChoices,
2868
2885
  onChange: onChange
2869
- })), enableTags && React.createElement("div", {
2886
+ })), enableTags && /*#__PURE__*/React.createElement("div", {
2870
2887
  className: "w-1/3"
2871
- }, React.createElement(InputTags, {
2888
+ }, /*#__PURE__*/React.createElement(InputTags, {
2872
2889
  label: "Tags",
2873
2890
  name: "tags",
2874
2891
  value: form.tags,
@@ -3056,14 +3073,14 @@ function FormEdit(props) {
3056
3073
  options = {},
3057
3074
  builder
3058
3075
  } = props;
3059
- return React.createElement("div", null, React.createElement("div", {
3060
- className: 'form-edit'
3061
- }, React.createElement(FormParameters, Object.assign({}, props, {
3076
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
3077
+ className: "form-edit"
3078
+ }, /*#__PURE__*/React.createElement(FormParameters, _extends({}, props, {
3062
3079
  className: "",
3063
3080
  key: `form-settings-${form._id}`,
3064
3081
  form: form,
3065
3082
  onChange: setChange
3066
- })), React.createElement(FormEditCTAs, Object.assign({}, props, {
3083
+ })), /*#__PURE__*/React.createElement(FormEditCTAs, _extends({}, props, {
3067
3084
  className: "",
3068
3085
  key: `form-edit-ctas-${form._id}`,
3069
3086
  options: options,
@@ -3075,7 +3092,7 @@ function FormEdit(props) {
3075
3092
  onReset: reset,
3076
3093
  onCopy: onCopy,
3077
3094
  onSubmit: onSubmit
3078
- }))), React.createElement(FormBuilder, {
3095
+ }))), /*#__PURE__*/React.createElement(FormBuilder, {
3079
3096
  key: `form-builder-${form._id}`,
3080
3097
  components: form.components,
3081
3098
  display: form.display,
@@ -3222,13 +3239,13 @@ function FormSettings(props) {
3222
3239
 
3223
3240
  const i18n = options.i18n || (f => f);
3224
3241
 
3225
- return React.createElement("div", null, React.createElement(Form, {
3242
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Form, {
3226
3243
  form: form,
3227
3244
  submission: submission,
3228
3245
  onChange: onChange,
3229
3246
  options: options
3230
- }), React.createElement("button", {
3231
- "data-testid": 'submit',
3247
+ }), /*#__PURE__*/React.createElement("button", {
3248
+ "data-testid": "submit",
3232
3249
  disabled: !isValid,
3233
3250
  className: "mt-5 btn btn-primary",
3234
3251
  onClick: onSubmit,
@@ -3252,7 +3269,7 @@ function SelectColumnFilter({
3252
3269
  label: value,
3253
3270
  value
3254
3271
  }));
3255
- return React.createElement(Select, {
3272
+ return /*#__PURE__*/React.createElement(Select, {
3256
3273
  key: `filter-${column.id}`,
3257
3274
  name: `filter-${column.id}`,
3258
3275
  size: "sm",
@@ -8397,30 +8414,30 @@ function FormsCell(props) {
8397
8414
  original: form
8398
8415
  }
8399
8416
  } = props;
8400
- return React.createElement("div", {
8417
+ return /*#__PURE__*/React.createElement("div", {
8401
8418
  className: "p-1"
8402
- }, React.createElement("h4", {
8419
+ }, /*#__PURE__*/React.createElement("h4", {
8403
8420
  className: "text-primary text-lg flex items-center"
8404
- }, React.createElement("i", {
8421
+ }, /*#__PURE__*/React.createElement("i", {
8405
8422
  className: classnames(iconClass(undefined, icon), "mr-1")
8406
- }), form.title), React.createElement("ul", {
8407
- className: 'reset-list text-gray-500'
8408
- }, React.createElement("li", {
8423
+ }), form.title), /*#__PURE__*/React.createElement("ul", {
8424
+ className: "reset-list text-gray-500"
8425
+ }, /*#__PURE__*/React.createElement("li", {
8409
8426
  className: "text-sm"
8410
- }, "Name: ", form.name || form.machineName), React.createElement("li", {
8411
- className: 'mt-5'
8412
- }, React.createElement("span", {
8413
- className: 'badge bg-light mr-1'
8414
- }, React.createElement("i", {
8427
+ }, "Name: ", form.name || form.machineName), /*#__PURE__*/React.createElement("li", {
8428
+ className: "mt-5"
8429
+ }, /*#__PURE__*/React.createElement("span", {
8430
+ className: "badge bg-light mr-1"
8431
+ }, /*#__PURE__*/React.createElement("i", {
8415
8432
  className: classnames(iconClass(undefined, "history"), "mr-1")
8416
- }), React.createElement("span", null, "Updated ", moment(form.modified).fromNow())), (form.tags || []).map((tag, index) => React.createElement("button", {
8433
+ }), /*#__PURE__*/React.createElement("span", null, "Updated ", moment(form.modified).fromNow())), (form.tags || []).map((tag, index) => /*#__PURE__*/React.createElement("button", {
8417
8434
  key: index,
8418
- className: 'badge badge-hover bg-secondary mr-1',
8435
+ className: "badge badge-hover bg-secondary mr-1",
8419
8436
  onClick: stopPropagationWrapper(() => {
8420
8437
  props.setFilter("tags", tag);
8421
8438
  props.gotoPage(0);
8422
8439
  })
8423
- }, React.createElement("i", {
8440
+ }, /*#__PURE__*/React.createElement("i", {
8424
8441
  className: classnames(iconClass(undefined, "tags"), "mr-1")
8425
8442
  }), tag)))));
8426
8443
  }
@@ -8440,7 +8457,7 @@ function FormsTable(_ref) {
8440
8457
  Header: i18n("Title"),
8441
8458
  accessor: "title",
8442
8459
  id: "title",
8443
- Cell: props => React.createElement(FormCell, Object.assign({}, props, {
8460
+ Cell: props => /*#__PURE__*/React.createElement(FormCell, _extends({}, props, {
8444
8461
  icon: props.icon,
8445
8462
  i18n: i18n
8446
8463
  })),
@@ -8451,13 +8468,13 @@ function FormsTable(_ref) {
8451
8468
  accessor: "tags",
8452
8469
  id: "tags",
8453
8470
  hidden: true,
8454
- Filter: props => tags && tags.length ? React.createElement(SelectColumnFilter, Object.assign({}, props, {
8471
+ Filter: props => tags && tags.length ? /*#__PURE__*/React.createElement(SelectColumnFilter, _extends({}, props, {
8455
8472
  column: _extends({}, props.columns, {
8456
8473
  choices: tags
8457
8474
  })
8458
- })) : React.createElement(DefaultColumnFilter, Object.assign({}, props))
8475
+ })) : /*#__PURE__*/React.createElement(DefaultColumnFilter, props)
8459
8476
  }], [Cell]);
8460
- return React.createElement(Table, Object.assign({}, props, {
8477
+ return /*#__PURE__*/React.createElement(Table, _extends({}, props, {
8461
8478
  columns: columns
8462
8479
  }));
8463
8480
  }
@@ -8515,37 +8532,37 @@ function Modal(_ref) {
8515
8532
  return null;
8516
8533
  }
8517
8534
 
8518
- return React.createElement("div", {
8535
+ return /*#__PURE__*/React.createElement("div", {
8519
8536
  role: "dialog",
8520
8537
  className: `formio-dialog formio-dialog-theme-default ${className}`
8521
- }, React.createElement("div", {
8522
- className: 'formio-dialog-overlay',
8538
+ }, /*#__PURE__*/React.createElement("div", {
8539
+ className: "formio-dialog-overlay",
8523
8540
  onClick: onClickClose
8524
- }), React.createElement("div", {
8541
+ }), /*#__PURE__*/React.createElement("div", {
8525
8542
  style: style,
8526
8543
  className: "formio-dialog-content"
8527
- }, React.createElement("div", {
8544
+ }, /*#__PURE__*/React.createElement("div", {
8528
8545
  className: "formio-dialog-wrapper"
8529
- }, title ? React.createElement("div", {
8546
+ }, title ? /*#__PURE__*/React.createElement("div", {
8530
8547
  className: "formio-dialog-title",
8531
8548
  ref: titleRef,
8532
8549
  "data-testid": "modalTitle"
8533
- }, title) : null, React.createElement("div", {
8534
- className: 'formio-dialog-body',
8550
+ }, title) : null, /*#__PURE__*/React.createElement("div", {
8551
+ className: "formio-dialog-body",
8535
8552
  style: {
8536
8553
  maxHeight
8537
8554
  },
8538
8555
  "data-testid": "modalBody"
8539
- }, show && children), ModalFooter ? React.createElement("div", {
8556
+ }, show && children), ModalFooter ? /*#__PURE__*/React.createElement("div", {
8540
8557
  className: "formio-dialog-footer",
8541
8558
  ref: footerRef,
8542
8559
  "data-testid": "modalFooter"
8543
- }, React.createElement(ModalFooter, Object.assign({}, props, {
8560
+ }, /*#__PURE__*/React.createElement(ModalFooter, _extends({}, props, {
8544
8561
  closeModal: closeModal,
8545
8562
  onClose: onClickClose
8546
- }))) : null), React.createElement("button", {
8547
- className: 'formio-dialog-close float-right btn btn-secondary btn-sm',
8548
- "aria-label": 'close',
8563
+ }))) : null), /*#__PURE__*/React.createElement("button", {
8564
+ className: "formio-dialog-close float-right btn btn-secondary btn-sm",
8565
+ "aria-label": "close",
8549
8566
  "data-testid": "closeModal",
8550
8567
  onClick: onClickClose
8551
8568
  })));
@@ -8558,22 +8575,22 @@ function RemoveModalFooter({
8558
8575
  onClose,
8559
8576
  i18n = f => f
8560
8577
  }) {
8561
- return React.createElement("div", {
8578
+ return /*#__PURE__*/React.createElement("div", {
8562
8579
  className: "flex items-center justify-center bg-white p-2"
8563
- }, React.createElement("button", {
8564
- "data-testid": 'customCloseModal',
8580
+ }, /*#__PURE__*/React.createElement("button", {
8581
+ "data-testid": "customCloseModal",
8565
8582
  className: "btn btn-outline-dark mx-2",
8566
8583
  onClick: onClose
8567
- }, i18n("Cancel")), React.createElement("button", {
8584
+ }, i18n("Cancel")), /*#__PURE__*/React.createElement("button", {
8568
8585
  disabled: valueToCompare !== value,
8569
- "data-testid": 'customSubmitModal',
8586
+ "data-testid": "customSubmitModal",
8570
8587
  className: "btn btn-danger mx-2",
8571
8588
  onClick: e => {
8572
8589
  if (valueToCompare === value) {
8573
8590
  onSubmit(e);
8574
8591
  }
8575
8592
  }
8576
- }, React.createElement("i", {
8593
+ }, /*#__PURE__*/React.createElement("i", {
8577
8594
  className: classnames(iconClass(undefined, "trash"), "mr-2")
8578
8595
  }), i18n("Remove")));
8579
8596
  }
@@ -8591,7 +8608,7 @@ function RemoveModal(_ref) {
8591
8608
  i18n = noop
8592
8609
  } = props;
8593
8610
  const [value, setValue] = useState();
8594
- return React.createElement(Modal, Object.assign({}, props, {
8611
+ return /*#__PURE__*/React.createElement(Modal, _extends({}, props, {
8595
8612
  className: classnames(props.className, "formio-dialog-theme-remove"),
8596
8613
  style: {
8597
8614
  maxWidth
@@ -8599,12 +8616,12 @@ function RemoveModal(_ref) {
8599
8616
  title: `Drop ${(_props$itemType = props.itemType) == null ? void 0 : _props$itemType.toLowerCase()}`,
8600
8617
  value: value,
8601
8618
  footer: RemoveModalFooter
8602
- }), React.createElement("div", {
8619
+ }), /*#__PURE__*/React.createElement("div", {
8603
8620
  className: "px-4 pt-3 pb-5"
8604
- }, React.createElement("div", {
8621
+ }, /*#__PURE__*/React.createElement("div", {
8605
8622
  className: "pb-1"
8606
- }, children, i18n("To drop"), " ", React.createElement("strong", null, props.valueToCompare), ",\u00A0", i18n("type the"), "\u00A0", React.createElement("strong", null, "\"", (_props$itemType2 = props.itemType) == null ? void 0 : _props$itemType2.toLowerCase(), "\""), "\u00A0", i18n("name"), " ", React.createElement("strong", null, "\"", props.valueToCompare, "\""), "."), React.createElement(InputText, {
8607
- name: 'remove',
8623
+ }, children, i18n("To drop"), " ", /*#__PURE__*/React.createElement("strong", null, props.valueToCompare), ",\xA0", i18n("type the"), "\xA0", /*#__PURE__*/React.createElement("strong", null, "\"", (_props$itemType2 = props.itemType) == null ? void 0 : _props$itemType2.toLowerCase(), "\""), "\xA0", i18n("name"), " ", /*#__PURE__*/React.createElement("strong", null, "\"", props.valueToCompare, "\""), "."), /*#__PURE__*/React.createElement(InputText, {
8624
+ name: "remove",
8608
8625
  value: value,
8609
8626
  onChange: (name, value) => setValue(value)
8610
8627
  })));
@@ -8621,12 +8638,9 @@ class ReactComponent extends Components.components.field {
8621
8638
  // eslint-disable-next-line no-useless-constructor
8622
8639
  constructor(component, options, data) {
8623
8640
  super(component, options, data);
8624
- /**
8625
- * The user has changed the value in the component and the value needs to be updated on the main submission object and other components notified of a change event.
8626
- *
8627
- * @param value
8628
- * @param flags
8629
- */
8641
+ this.reactInstance = void 0;
8642
+ this.shouldSetValue = void 0;
8643
+ this.dataForSetting = void 0;
8630
8644
 
8631
8645
  this.updateValue = (value, flags) => {
8632
8646
  flags = flags || {};
@@ -8687,9 +8701,10 @@ class ReactComponent extends Components.components.field {
8687
8701
 
8688
8702
  this.loadRefs(element, {
8689
8703
  [`react-${this.id}`]: "single"
8690
- });
8704
+ }); // @ts-ignore
8691
8705
 
8692
8706
  if (this.refs[`react-${this.id}`]) {
8707
+ // @ts-ignore
8693
8708
  this.reactInstance = this.attachReact(this.refs[`react-${this.id}`]);
8694
8709
 
8695
8710
  if (this.shouldSetValue) {
@@ -8705,7 +8720,9 @@ class ReactComponent extends Components.components.field {
8705
8720
 
8706
8721
 
8707
8722
  detach() {
8723
+ // @ts-ignore
8708
8724
  if (this.refs[`react-${this.id}`]) {
8725
+ // @ts-ignore
8709
8726
  this.detachReact(this.refs[`react-${this.id}`]);
8710
8727
  }
8711
8728
 
@@ -8748,7 +8765,6 @@ class ReactComponent extends Components.components.field {
8748
8765
  * @param value
8749
8766
  * @param flags
8750
8767
  */
8751
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
8752
8768
 
8753
8769
 
8754
8770
  setValue(value, flags) {
@@ -8762,15 +8778,21 @@ class ReactComponent extends Components.components.field {
8762
8778
  this.dataForSetting = value;
8763
8779
  }
8764
8780
 
8765
- return undefined;
8781
+ return false;
8766
8782
  }
8767
8783
  /**
8768
- * Get the current value of the component. Should return the value set in the react component.
8784
+ * The user has changed the value in the component and the value needs to be updated on the main submission object and other components notified of a change event.
8769
8785
  *
8770
- * @returns {*}
8786
+ * @param value
8787
+ * @param flags
8771
8788
  */
8772
8789
 
8773
8790
 
8791
+ /**
8792
+ * Get the current value of the component. Should return the value set in the react component.
8793
+ *
8794
+ * @returns {*}
8795
+ */
8774
8796
  getValue() {
8775
8797
  if (this.reactInstance) {
8776
8798
  return this.reactInstance.state.value;
@@ -8810,31 +8832,31 @@ function DefaultCell({
8810
8832
  render = f => f
8811
8833
  }) {
8812
8834
  if (value === undefined) {
8813
- return React.createElement(React.Fragment, null);
8835
+ return /*#__PURE__*/React.createElement(Fragment, null);
8814
8836
  }
8815
8837
 
8816
8838
  const rendered = render(value);
8817
8839
 
8818
8840
  if (value !== rendered) {
8819
- return React.createElement("div", {
8841
+ return /*#__PURE__*/React.createElement("div", {
8820
8842
  dangerouslySetInnerHTML: {
8821
8843
  __html: rendered
8822
8844
  }
8823
8845
  });
8824
8846
  }
8825
8847
 
8826
- return React.createElement("span", null, String(value));
8848
+ return /*#__PURE__*/React.createElement("span", null, String(value));
8827
8849
  }
8828
8850
 
8829
8851
  function mapFormToColumns(form) {
8830
8852
  const columns = [];
8831
8853
  FormioUtils.eachComponent(form.components, component => {
8832
8854
  if (component.tableView && component.key) {
8833
- const cmp = Components.create(component, null, null, true);
8855
+ const cmp = Components.create(component, {}, null, true);
8834
8856
  const column = {
8835
8857
  Header: component.label || component.title || component.key,
8836
8858
  accessor: `data.${component.key}`,
8837
- Cell: props => React.createElement(DefaultCell, Object.assign({}, props, {
8859
+ Cell: props => /*#__PURE__*/React.createElement(DefaultCell, _extends({}, props, {
8838
8860
  render: value => cmp.asString(value)
8839
8861
  }))
8840
8862
  };
@@ -8856,8 +8878,8 @@ function SubmissionsTable(_ref) {
8856
8878
  } = _ref,
8857
8879
  props = _objectWithoutPropertiesLoose(_ref, ["form"]);
8858
8880
 
8859
- const columns = React.useMemo(() => form && mapFormToColumns(form), [form]);
8860
- return React.createElement(Table, Object.assign({}, props, {
8881
+ const columns = form && mapFormToColumns(form);
8882
+ return /*#__PURE__*/React.createElement(Table, _extends({}, props, {
8861
8883
  columns: columns
8862
8884
  }));
8863
8885
  }
@@ -8879,15 +8901,15 @@ function SliderColumnFilter({
8879
8901
  });
8880
8902
  return [min, max];
8881
8903
  }, [id, preFilteredRows]);
8882
- return React.createElement(React.Fragment, null, React.createElement("input", {
8883
- type: 'range',
8904
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("input", {
8905
+ type: "range",
8884
8906
  min: min,
8885
8907
  max: max,
8886
8908
  value: filterValue || min,
8887
8909
  onChange: e => {
8888
8910
  setFilter(parseInt(e.target.value, 10));
8889
8911
  }
8890
- }), React.createElement("button", {
8912
+ }), /*#__PURE__*/React.createElement("button", {
8891
8913
  onClick: () => setFilter(undefined)
8892
8914
  }, "Off"));
8893
8915
  }
@@ -8902,18 +8924,18 @@ function ButtonTab({
8902
8924
  className,
8903
8925
  after
8904
8926
  }) {
8905
- return React.createElement("div", {
8927
+ return /*#__PURE__*/React.createElement("div", {
8906
8928
  title: 'button-wrapper',
8907
8929
  className: classnames("tw-tabs__button-wrapper", isActive ? "-active" : "", back ? "-back" : "", className)
8908
- }, React.createElement("button", {
8930
+ }, /*#__PURE__*/React.createElement("button", {
8909
8931
  title: 'button-tab',
8910
8932
  className: classnames("tw-tabs__button", reverse ? "-reverse" : "", isActive ? "-active" : "", back ? "-back" : ""),
8911
8933
  onClick: onClick
8912
- }, icon && React.createElement("i", {
8934
+ }, icon && /*#__PURE__*/React.createElement("i", {
8913
8935
  className: classnames(iconClass(undefined, icon), "tw-tabs__button-icon")
8914
- }), React.createElement("span", {
8936
+ }), /*#__PURE__*/React.createElement("span", {
8915
8937
  className: "tw-tabs__button-label"
8916
- }, children), after), React.createElement("div", {
8938
+ }, children), after), /*#__PURE__*/React.createElement("div", {
8917
8939
  className: classnames("tw-tabs__button-border", isActive ? "-active" : "")
8918
8940
  }));
8919
8941
  }
@@ -8932,18 +8954,18 @@ function Tabs(_ref) {
8932
8954
  } = _ref,
8933
8955
  additionalProps = _objectWithoutPropertiesLoose(_ref, ["style", "current", "items", "children", "HeaderChildren", "AddButton", "Button", "className", "onClick", "i18n"]);
8934
8956
 
8935
- return React.createElement("div", {
8957
+ return /*#__PURE__*/React.createElement("div", {
8936
8958
  "data-testid": 'tabs-comp',
8937
8959
  className: `tw-tabs ${className}`,
8938
8960
  style: style
8939
- }, React.createElement("div", null, React.createElement("nav", {
8940
- className: 'tw-tabs__header'
8941
- }, React.createElement("div", {
8942
- className: 'tw-tabs__header-wrapper'
8943
- }, React.createElement("div", {
8944
- className: 'tw-tabs__header-border'
8961
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("nav", {
8962
+ className: "tw-tabs__header"
8963
+ }, /*#__PURE__*/React.createElement("div", {
8964
+ className: "tw-tabs__header-wrapper"
8965
+ }, /*#__PURE__*/React.createElement("div", {
8966
+ className: "tw-tabs__header-border"
8945
8967
  }), items.filter(item => item.label || item.icon).map((item, index) => {
8946
- return React.createElement(Button, Object.assign({
8968
+ return /*#__PURE__*/React.createElement(Button, _extends({
8947
8969
  key: index,
8948
8970
  back: item.back,
8949
8971
  isActive: (current == null ? void 0 : current.action) === item.action,
@@ -8951,12 +8973,12 @@ function Tabs(_ref) {
8951
8973
  onClick: () => {
8952
8974
  onClick && onClick(item);
8953
8975
  }
8954
- }, additionalProps, item), i18n(item.label));
8955
- }), AddButton && React.createElement(AddButton, Object.assign({}, additionalProps, {
8976
+ }, additionalProps, item), i18n(item.label || ""));
8977
+ }), AddButton && /*#__PURE__*/React.createElement(AddButton, _extends({}, additionalProps, {
8956
8978
  current: current
8957
- })))), HeaderChildren && React.createElement(HeaderChildren, Object.assign({}, additionalProps, {
8979
+ })))), HeaderChildren && /*#__PURE__*/React.createElement(HeaderChildren, _extends({}, additionalProps, {
8958
8980
  current: current
8959
- }))), React.createElement("div", {
8981
+ }))), /*#__PURE__*/React.createElement("div", {
8960
8982
  title: "tab-body",
8961
8983
  className: "tw-tabs__body"
8962
8984
  }, children));
@@ -8969,9 +8991,9 @@ function Loader({
8969
8991
  className = ""
8970
8992
  }) {
8971
8993
  if (isActive) {
8972
- return React.createElement("div", {
8994
+ return /*#__PURE__*/React.createElement("div", {
8973
8995
  className: classnames("opacity-85 z-20 flex items-center justify-center p-5 absolute top-0 right-0 left-0 bottom-0 bg-white", className)
8974
- }, React.createElement("span", {
8996
+ }, /*#__PURE__*/React.createElement("span", {
8975
8997
  "data-testid": `icon_${icon}`,
8976
8998
  color: color,
8977
8999
  className: `text-11xl ${iconClass(undefined, icon, true)}`