@bpmn-io/form-js-viewer 1.4.0 → 1.5.0

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 (53) hide show
  1. package/dist/assets/form-js-base.css +24 -0
  2. package/dist/assets/form-js.css +457 -654
  3. package/dist/index.cjs +394 -230
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.es.js +391 -232
  6. package/dist/index.es.js.map +1 -1
  7. package/dist/types/core/FieldFactory.d.ts +1 -1
  8. package/dist/types/core/FormFieldRegistry.d.ts +1 -1
  9. package/dist/types/core/FormLayouter.d.ts +2 -2
  10. package/dist/types/core/Importer.d.ts +1 -1
  11. package/dist/types/core/PathRegistry.d.ts +1 -1
  12. package/dist/types/core/Validator.d.ts +1 -1
  13. package/dist/types/core/index.d.ts +8 -8
  14. package/dist/types/features/expression-language/ConditionChecker.d.ts +1 -1
  15. package/dist/types/features/expression-language/FeelExpressionLanguage.d.ts +1 -1
  16. package/dist/types/features/expression-language/FeelersTemplating.d.ts +1 -1
  17. package/dist/types/features/expression-language/index.d.ts +4 -4
  18. package/dist/types/features/markdown/MarkdownRenderer.d.ts +1 -1
  19. package/dist/types/features/markdown/index.d.ts +2 -2
  20. package/dist/types/features/viewerCommands/ViewerCommands.d.ts +1 -1
  21. package/dist/types/features/viewerCommands/cmd/UpdateFieldValidationHandler.d.ts +1 -1
  22. package/dist/types/features/viewerCommands/index.d.ts +3 -3
  23. package/dist/types/index.d.ts +1 -1
  24. package/dist/types/render/Renderer.d.ts +1 -1
  25. package/dist/types/render/components/Sanitizer.d.ts +8 -0
  26. package/dist/types/render/components/form-fields/Button.d.ts +3 -3
  27. package/dist/types/render/components/form-fields/Checkbox.d.ts +4 -4
  28. package/dist/types/render/components/form-fields/Checklist.d.ts +5 -5
  29. package/dist/types/render/components/form-fields/Datetime.d.ts +4 -4
  30. package/dist/types/render/components/form-fields/Default.d.ts +4 -4
  31. package/dist/types/render/components/form-fields/Group.d.ts +4 -4
  32. package/dist/types/render/components/form-fields/IFrame.d.ts +12 -0
  33. package/dist/types/render/components/form-fields/Image.d.ts +3 -3
  34. package/dist/types/render/components/form-fields/Number.d.ts +4 -4
  35. package/dist/types/render/components/form-fields/Radio.d.ts +5 -5
  36. package/dist/types/render/components/form-fields/Select.d.ts +5 -5
  37. package/dist/types/render/components/form-fields/Separator.d.ts +3 -3
  38. package/dist/types/render/components/form-fields/Spacer.d.ts +3 -3
  39. package/dist/types/render/components/form-fields/Taglist.d.ts +5 -5
  40. package/dist/types/render/components/form-fields/Text.d.ts +3 -3
  41. package/dist/types/render/components/form-fields/Textarea.d.ts +4 -4
  42. package/dist/types/render/components/form-fields/Textfield.d.ts +4 -4
  43. package/dist/types/render/components/index.d.ts +3 -2
  44. package/dist/types/render/components/util/optionsUtil.d.ts +8 -0
  45. package/dist/types/render/hooks/useCleanupMultiSelectValues.d.ts +1 -0
  46. package/dist/types/render/hooks/useCleanupSingleSelectValue.d.ts +1 -0
  47. package/dist/types/render/hooks/useOptionsAsync.d.ts +28 -0
  48. package/dist/types/render/index.d.ts +4 -3
  49. package/dist/types/util/constants/DatetimeConstants.d.ts +6 -6
  50. package/dist/types/util/constants/ValuesSourceConstants.d.ts +3 -3
  51. package/package.json +4 -4
  52. package/dist/types/render/components/util/valuesUtil.d.ts +0 -8
  53. package/dist/types/render/hooks/useValuesAsync.d.ts +0 -28
package/dist/index.cjs CHANGED
@@ -445,7 +445,7 @@ function prefixId(id, formId) {
445
445
  return `fjs-form-${id}`;
446
446
  }
447
447
 
448
- const type$d = 'button';
448
+ const type$e = 'button';
449
449
  function Button(props) {
450
450
  const {
451
451
  disabled,
@@ -457,7 +457,7 @@ function Button(props) {
457
457
  action = 'submit'
458
458
  } = field;
459
459
  return jsxRuntime.jsx("div", {
460
- class: formFieldClasses(type$d),
460
+ class: formFieldClasses(type$e),
461
461
  children: jsxRuntime.jsx("button", {
462
462
  class: "fjs-button",
463
463
  type: action,
@@ -469,7 +469,7 @@ function Button(props) {
469
469
  });
470
470
  }
471
471
  Button.config = {
472
- type: type$d,
472
+ type: type$e,
473
473
  keyed: false,
474
474
  label: 'Button',
475
475
  group: 'action',
@@ -767,7 +767,7 @@ function Label(props) {
767
767
  });
768
768
  }
769
769
 
770
- const type$c = 'checkbox';
770
+ const type$d = 'checkbox';
771
771
  function Checkbox(props) {
772
772
  const {
773
773
  disabled,
@@ -800,7 +800,7 @@ function Checkbox(props) {
800
800
  } = hooks.useContext(FormContext$1);
801
801
  const errorMessageId = errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;
802
802
  return jsxRuntime.jsxs("div", {
803
- class: classNames(formFieldClasses(type$c, {
803
+ class: classNames(formFieldClasses(type$d, {
804
804
  errors,
805
805
  disabled,
806
806
  readonly
@@ -832,7 +832,7 @@ function Checkbox(props) {
832
832
  });
833
833
  }
834
834
  Checkbox.config = {
835
- type: type$c,
835
+ type: type$d,
836
836
  keyed: true,
837
837
  label: 'Checkbox',
838
838
  group: 'selection',
@@ -846,54 +846,54 @@ Checkbox.config = {
846
846
  };
847
847
 
848
848
  // parses the options data from the provided form field and form data
849
- function getValuesData(formField, formData) {
849
+ function getOptionsData(formField, formData) {
850
850
  const {
851
- valuesKey,
852
- values
851
+ valuesKey: optionsKey,
852
+ values: staticOptions
853
853
  } = formField;
854
- return valuesKey ? minDash.get(formData, [valuesKey]) : values;
854
+ return optionsKey ? minDash.get(formData, [optionsKey]) : staticOptions;
855
855
  }
856
856
 
857
857
  // transforms the provided options into a normalized format, trimming invalid options
858
- function normalizeValuesData(valuesData) {
859
- return valuesData.filter(_isValueSomething).map(v => _normalizeValueData(v)).filter(v => v);
858
+ function normalizeOptionsData(optionsData) {
859
+ return optionsData.filter(_isOptionSomething).map(v => _normalizeOptionsData(v)).filter(v => v);
860
860
  }
861
- function _normalizeValueData(valueData) {
862
- if (_isAllowedValue(valueData)) {
861
+ function _normalizeOptionsData(optionData) {
862
+ if (_isAllowedOption(optionData)) {
863
863
  // if a primitive is provided, use it as label and value
864
864
  return {
865
- value: valueData,
866
- label: `${valueData}`
865
+ value: optionData,
866
+ label: `${optionData}`
867
867
  };
868
868
  }
869
- if (typeof valueData === 'object') {
870
- if (!valueData.label && _isAllowedValue(valueData.value)) {
869
+ if (typeof optionData === 'object') {
870
+ if (!optionData.label && _isAllowedOption(optionData.value)) {
871
871
  // if no label is provided, use the value as label
872
872
  return {
873
- value: valueData.value,
874
- label: `${valueData.value}`
873
+ value: optionData.value,
874
+ label: `${optionData.value}`
875
875
  };
876
876
  }
877
- if (_isValueSomething(valueData.value) && _isAllowedValue(valueData.label)) {
877
+ if (_isOptionSomething(optionData.value) && _isAllowedOption(optionData.label)) {
878
878
  // if both value and label are provided, use them as is, in this scenario, the value may also be an object
879
- return valueData;
879
+ return optionData;
880
880
  }
881
881
  }
882
882
  return null;
883
883
  }
884
- function _isAllowedValue(value) {
885
- return _isReadableType(value) && _isValueSomething(value);
884
+ function _isAllowedOption(option) {
885
+ return _isReadableType(option) && _isOptionSomething(option);
886
886
  }
887
- function _isReadableType(value) {
888
- return ['number', 'string', 'boolean'].includes(typeof value);
887
+ function _isReadableType(option) {
888
+ return ['number', 'string', 'boolean'].includes(typeof option);
889
889
  }
890
- function _isValueSomething(value) {
891
- return value || value === 0 || value === false;
890
+ function _isOptionSomething(option) {
891
+ return option || option === 0 || option === false;
892
892
  }
893
893
  function createEmptyOptions(options = {}) {
894
894
  const defaults = {};
895
895
 
896
- // provide default values if valuesKey and valuesExpression are not set
896
+ // provide default options if valuesKey and valuesExpression are not set
897
897
  if (!options.valuesKey && !options.valuesExpression) {
898
898
  defaults.values = [{
899
899
  label: 'Value',
@@ -916,72 +916,96 @@ const LOAD_STATES = {
916
916
  };
917
917
 
918
918
  /**
919
- * @typedef {Object} ValuesGetter
920
- * @property {Object[]} values - The values data
921
- * @property {(LOAD_STATES)} state - The values data's loading state, to use for conditional rendering
919
+ * @typedef {Object} OptionsGetter
920
+ * @property {Object[]} options - The options data
921
+ * @property {(LOAD_STATES)} loadState - The options data's loading state, to use for conditional rendering
922
922
  */
923
923
 
924
924
  /**
925
- * A hook to load values for single and multiselect components.
925
+ * A hook to load options for single and multiselect components.
926
926
  *
927
- * @param {Object} field - The form field to handle values for
928
- * @return {ValuesGetter} valuesGetter - A values getter object providing loading state and values
927
+ * @param {Object} field - The form field to handle options for
928
+ * @return {OptionsGetter} optionsGetter - A options getter object providing loading state and options
929
929
  */
930
- function useValuesAsync (field) {
930
+ function useOptionsAsync (field) {
931
931
  const {
932
- valuesExpression,
933
- valuesKey,
934
- values: staticValues
932
+ valuesExpression: optionsExpression,
933
+ valuesKey: optionsKey,
934
+ values: staticOptions
935
935
  } = field;
936
- const [valuesGetter, setValuesGetter] = hooks.useState({
937
- values: [],
936
+ const [optionsGetter, setOptionsGetter] = hooks.useState({
937
+ options: [],
938
938
  error: undefined,
939
- state: LOAD_STATES.LOADING
939
+ loadState: LOAD_STATES.LOADING
940
940
  });
941
941
  const initialData = useService('form')._getState().initialData;
942
- const expressionEvaluation = useExpressionEvaluation(valuesExpression);
943
- const evaluatedValues = useDeepCompareState(expressionEvaluation || [], []);
942
+ const expressionEvaluation = useExpressionEvaluation(optionsExpression);
943
+ const evaluatedOptions = useDeepCompareState(expressionEvaluation || [], []);
944
944
  hooks.useEffect(() => {
945
- let values = [];
945
+ let options = [];
946
946
 
947
- // dynamic values
948
- if (valuesKey !== undefined) {
949
- const keyedValues = (initialData || {})[valuesKey];
950
- if (keyedValues && Array.isArray(keyedValues)) {
951
- values = keyedValues;
947
+ // dynamic options
948
+ if (optionsKey !== undefined) {
949
+ const keyedOptions = (initialData || {})[optionsKey];
950
+ if (keyedOptions && Array.isArray(keyedOptions)) {
951
+ options = keyedOptions;
952
952
  }
953
953
 
954
- // static values
955
- } else if (staticValues !== undefined) {
956
- values = Array.isArray(staticValues) ? staticValues : [];
954
+ // static options
955
+ } else if (staticOptions !== undefined) {
956
+ options = Array.isArray(staticOptions) ? staticOptions : [];
957
957
 
958
958
  // expression
959
- } else if (valuesExpression) {
960
- if (evaluatedValues && Array.isArray(evaluatedValues)) {
961
- values = evaluatedValues;
959
+ } else if (optionsExpression) {
960
+ if (evaluatedOptions && Array.isArray(evaluatedOptions)) {
961
+ options = evaluatedOptions;
962
962
  }
963
963
  } else {
964
- setValuesGetter(buildErrorState('No values source defined in the form definition'));
964
+ setOptionsGetter(buildErrorState('No options source defined in the form definition'));
965
965
  return;
966
966
  }
967
967
 
968
968
  // normalize data to support primitives and partially defined objects
969
- values = normalizeValuesData(values);
970
- setValuesGetter(buildLoadedState(values));
971
- }, [valuesKey, staticValues, initialData, valuesExpression, evaluatedValues]);
972
- return valuesGetter;
969
+ options = normalizeOptionsData(options);
970
+ setOptionsGetter(buildLoadedState(options));
971
+ }, [optionsKey, staticOptions, initialData, optionsExpression, evaluatedOptions]);
972
+ return optionsGetter;
973
973
  }
974
974
  const buildErrorState = error => ({
975
- values: [],
975
+ options: [],
976
976
  error,
977
- state: LOAD_STATES.ERROR
977
+ loadState: LOAD_STATES.ERROR
978
978
  });
979
- const buildLoadedState = values => ({
980
- values,
979
+ const buildLoadedState = options => ({
980
+ options,
981
981
  error: undefined,
982
- state: LOAD_STATES.LOADED
982
+ loadState: LOAD_STATES.LOADED
983
983
  });
984
984
 
985
+ function useCleanupMultiSelectValues (props) {
986
+ const {
987
+ field,
988
+ options,
989
+ loadState,
990
+ onChange,
991
+ values
992
+ } = props;
993
+
994
+ // Ensures that the values are always a subset of the possible options
995
+ hooks.useEffect(() => {
996
+ if (loadState !== LOAD_STATES.LOADED) {
997
+ return;
998
+ }
999
+ const hasValuesNotInOptions = values.some(v => !options.map(o => o.value).includes(v));
1000
+ if (hasValuesNotInOptions) {
1001
+ onChange({
1002
+ field,
1003
+ value: values.filter(v => options.map(o => o.value).includes(v))
1004
+ });
1005
+ }
1006
+ }, [field, options, onChange, JSON.stringify(values), loadState]);
1007
+ }
1008
+
985
1009
  // config ///////////////////
986
1010
 
987
1011
  const MINUTES_IN_DAY = 60 * 24;
@@ -1195,7 +1219,7 @@ function sanitizeSingleSelectValue(options) {
1195
1219
  value
1196
1220
  } = options;
1197
1221
  try {
1198
- const validValues = normalizeValuesData(getValuesData(formField, data)).map(v => v.value);
1222
+ const validValues = normalizeOptionsData(getOptionsData(formField, data)).map(v => v.value);
1199
1223
  return validValues.includes(value) ? value : null;
1200
1224
  } catch (error) {
1201
1225
  // use default value in case of formatting error
@@ -1210,7 +1234,7 @@ function sanitizeMultiSelectValue(options) {
1210
1234
  value
1211
1235
  } = options;
1212
1236
  try {
1213
- const validValues = normalizeValuesData(getValuesData(formField, data)).map(v => v.value);
1237
+ const validValues = normalizeOptionsData(getOptionsData(formField, data)).map(v => v.value);
1214
1238
  return value.filter(v => validValues.includes(v));
1215
1239
  } catch (error) {
1216
1240
  // use default value in case of formatting error
@@ -1219,7 +1243,7 @@ function sanitizeMultiSelectValue(options) {
1219
1243
  }
1220
1244
  }
1221
1245
 
1222
- const type$b = 'checklist';
1246
+ const type$c = 'checklist';
1223
1247
  function Checklist(props) {
1224
1248
  const {
1225
1249
  disabled,
@@ -1228,7 +1252,7 @@ function Checklist(props) {
1228
1252
  onFocus,
1229
1253
  field,
1230
1254
  readonly,
1231
- value = []
1255
+ value: values = []
1232
1256
  } = props;
1233
1257
  const {
1234
1258
  description,
@@ -1241,7 +1265,7 @@ function Checklist(props) {
1241
1265
  required
1242
1266
  } = validate;
1243
1267
  const toggleCheckbox = v => {
1244
- let newValue = [...value];
1268
+ let newValue = [...values];
1245
1269
  if (!newValue.includes(v)) {
1246
1270
  newValue.push(v);
1247
1271
  } else {
@@ -1265,15 +1289,22 @@ function Checklist(props) {
1265
1289
  onFocus && onFocus();
1266
1290
  };
1267
1291
  const {
1268
- state: loadState,
1269
- values: options
1270
- } = useValuesAsync(field);
1292
+ loadState,
1293
+ options
1294
+ } = useOptionsAsync(field);
1295
+ useCleanupMultiSelectValues({
1296
+ field,
1297
+ loadState,
1298
+ options,
1299
+ values,
1300
+ onChange: props.onChange
1301
+ });
1271
1302
  const {
1272
1303
  formId
1273
1304
  } = hooks.useContext(FormContext$1);
1274
1305
  const errorMessageId = errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;
1275
1306
  return jsxRuntime.jsxs("div", {
1276
- class: classNames(formFieldClasses(type$b, {
1307
+ class: classNames(formFieldClasses(type$c, {
1277
1308
  errors,
1278
1309
  disabled,
1279
1310
  readonly
@@ -1287,11 +1318,11 @@ function Checklist(props) {
1287
1318
  id: prefixId(`${id}-${index}`, formId),
1288
1319
  label: v.label,
1289
1320
  class: classNames({
1290
- 'fjs-checked': value.includes(v.value)
1321
+ 'fjs-checked': values.includes(v.value)
1291
1322
  }),
1292
1323
  required: false,
1293
1324
  children: jsxRuntime.jsx("input", {
1294
- checked: value.includes(v.value),
1325
+ checked: values.includes(v.value),
1295
1326
  class: "fjs-input",
1296
1327
  disabled: disabled,
1297
1328
  readOnly: readonly,
@@ -1312,9 +1343,9 @@ function Checklist(props) {
1312
1343
  });
1313
1344
  }
1314
1345
  Checklist.config = {
1315
- type: type$b,
1346
+ type: type$c,
1316
1347
  keyed: true,
1317
- label: 'Checklist',
1348
+ label: 'Checkbox group',
1318
1349
  group: 'selection',
1319
1350
  emptyValue: [],
1320
1351
  sanitizeValue: sanitizeMultiSelectValue,
@@ -1464,16 +1495,16 @@ FormComponent$1.config = {
1464
1495
  })
1465
1496
  };
1466
1497
 
1467
- var _path$i;
1468
- function _extends$l() { _extends$l = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$l.apply(this, arguments); }
1498
+ var _path$k;
1499
+ function _extends$m() { _extends$m = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$m.apply(this, arguments); }
1469
1500
  var SvgCalendar = function SvgCalendar(props) {
1470
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$l({
1501
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$m({
1471
1502
  xmlns: "http://www.w3.org/2000/svg",
1472
1503
  width: 14,
1473
1504
  height: 15,
1474
1505
  fill: "none",
1475
1506
  viewBox: "0 0 28 30"
1476
- }, props), _path$i || (_path$i = /*#__PURE__*/React__namespace.createElement("path", {
1507
+ }, props), _path$k || (_path$k = /*#__PURE__*/React__namespace.createElement("path", {
1477
1508
  fill: "currentColor",
1478
1509
  fillRule: "evenodd",
1479
1510
  d: "M19 2H9V0H7v2H2a2 2 0 0 0-2 2v24a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-5V0h-2v2ZM7 7V4H2v5h24V4h-5v3h-2V4H9v3H7Zm-5 4v17h24V11H2Z",
@@ -1736,19 +1767,19 @@ function Datepicker(props) {
1736
1767
  });
1737
1768
  }
1738
1769
 
1739
- var _path$h, _path2$3;
1740
- function _extends$k() { _extends$k = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$k.apply(this, arguments); }
1770
+ var _path$j, _path2$4;
1771
+ function _extends$l() { _extends$l = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$l.apply(this, arguments); }
1741
1772
  var SvgClock = function SvgClock(props) {
1742
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$k({
1773
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$l({
1743
1774
  xmlns: "http://www.w3.org/2000/svg",
1744
1775
  width: 16,
1745
1776
  height: 16,
1746
1777
  fill: "none",
1747
1778
  viewBox: "0 0 28 29"
1748
- }, props), _path$h || (_path$h = /*#__PURE__*/React__namespace.createElement("path", {
1779
+ }, props), _path$j || (_path$j = /*#__PURE__*/React__namespace.createElement("path", {
1749
1780
  fill: "currentColor",
1750
1781
  d: "M13 14.41 18.59 20 20 18.59l-5-5.01V5h-2v9.41Z"
1751
- })), _path2$3 || (_path2$3 = /*#__PURE__*/React__namespace.createElement("path", {
1782
+ })), _path2$4 || (_path2$4 = /*#__PURE__*/React__namespace.createElement("path", {
1752
1783
  fill: "currentColor",
1753
1784
  fillRule: "evenodd",
1754
1785
  d: "M6.222 25.64A14 14 0 1 0 21.778 2.36 14 14 0 0 0 6.222 25.64ZM7.333 4.023a12 12 0 1 1 13.334 19.955A12 12 0 0 1 7.333 4.022Z",
@@ -2019,7 +2050,7 @@ function Timepicker(props) {
2019
2050
  });
2020
2051
  }
2021
2052
 
2022
- const type$a = 'datetime';
2053
+ const type$b = 'datetime';
2023
2054
  function Datetime(props) {
2024
2055
  const {
2025
2056
  disabled,
@@ -2191,7 +2222,7 @@ function Datetime(props) {
2191
2222
  'aria-describedby': errorMessageId
2192
2223
  };
2193
2224
  return jsxRuntime.jsxs("div", {
2194
- class: formFieldClasses(type$a, {
2225
+ class: formFieldClasses(type$b, {
2195
2226
  errors: allErrors,
2196
2227
  disabled,
2197
2228
  readonly
@@ -2215,7 +2246,7 @@ function Datetime(props) {
2215
2246
  });
2216
2247
  }
2217
2248
  Datetime.config = {
2218
- type: type$a,
2249
+ type: type$b,
2219
2250
  keyed: true,
2220
2251
  label: 'Date time',
2221
2252
  group: 'basic-input',
@@ -2395,7 +2426,7 @@ Group.config = {
2395
2426
  type: 'group',
2396
2427
  pathed: true,
2397
2428
  label: 'Group',
2398
- group: 'presentation',
2429
+ group: 'container',
2399
2430
  create: (options = {}) => ({
2400
2431
  components: [],
2401
2432
  showOutline: true,
@@ -2409,6 +2440,7 @@ const ALLOWED_NODES = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'em', 'a', 'p
2409
2440
  const ALLOWED_ATTRIBUTES = ['align', 'alt', 'class', 'href', 'id', 'name', 'rel', 'target', 'src'];
2410
2441
  const ALLOWED_URI_PATTERN = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i; // eslint-disable-line no-useless-escape
2411
2442
  const ALLOWED_IMAGE_SRC_PATTERN = /^(https?|data):.*/i; // eslint-disable-line no-useless-escape
2443
+ const ALLOWED_IFRAME_SRC_PATTERN = /^(https):\/\/*/i; // eslint-disable-line no-useless-escape
2412
2444
  const ATTR_WHITESPACE_PATTERN = /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g; // eslint-disable-line no-control-regex
2413
2445
 
2414
2446
  const FORM_ELEMENT = document.createElement('form');
@@ -2449,6 +2481,18 @@ function sanitizeImageSource(src) {
2449
2481
  return valid ? src : '';
2450
2482
  }
2451
2483
 
2484
+ /**
2485
+ * Sanitizes an iframe source to ensure we only allow for links
2486
+ * that start with http(s).
2487
+ *
2488
+ * @param {string} src
2489
+ * @returns {string}
2490
+ */
2491
+ function sanitizeIFrameSource(src) {
2492
+ const valid = ALLOWED_IFRAME_SRC_PATTERN.test(src);
2493
+ return valid ? src : '';
2494
+ }
2495
+
2452
2496
  /**
2453
2497
  * Recursively sanitize a HTML node, potentially
2454
2498
  * removing it, its children or attributes.
@@ -2530,9 +2574,77 @@ function isValidAttribute(lcTag, lcName, value) {
2530
2574
  return true;
2531
2575
  }
2532
2576
 
2533
- function _extends$j() { _extends$j = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$j.apply(this, arguments); }
2577
+ const type$a = 'iframe';
2578
+ const DEFAULT_HEIGHT = 300;
2579
+ function IFrame(props) {
2580
+ const {
2581
+ field,
2582
+ disabled,
2583
+ readonly
2584
+ } = props;
2585
+ const {
2586
+ height = DEFAULT_HEIGHT,
2587
+ id,
2588
+ label,
2589
+ url
2590
+ } = field;
2591
+ const evaluatedUrl = useSingleLineTemplateEvaluation(url, {
2592
+ debug: true
2593
+ });
2594
+ const safeUrl = hooks.useMemo(() => sanitizeIFrameSource(evaluatedUrl), [evaluatedUrl]);
2595
+ const evaluatedLabel = useSingleLineTemplateEvaluation(label, {
2596
+ debug: true
2597
+ });
2598
+ const {
2599
+ formId
2600
+ } = hooks.useContext(FormContext$1);
2601
+ return jsxRuntime.jsxs("div", {
2602
+ class: formFieldClasses(type$a, {
2603
+ disabled,
2604
+ readonly
2605
+ }),
2606
+ children: [jsxRuntime.jsx(Label, {
2607
+ id: prefixId(id, formId),
2608
+ label: evaluatedLabel
2609
+ }), !evaluatedUrl && jsxRuntime.jsx(IFramePlaceholder, {
2610
+ text: "No content to show."
2611
+ }), evaluatedUrl && safeUrl && jsxRuntime.jsx("iframe", {
2612
+ src: safeUrl,
2613
+ title: evaluatedLabel,
2614
+ height: height,
2615
+ class: "fjs-iframe",
2616
+ id: prefixId(id, formId),
2617
+ sandbox: ""
2618
+ }), evaluatedUrl && !safeUrl && jsxRuntime.jsx(IFramePlaceholder, {
2619
+ text: "External content couldn't be loaded."
2620
+ })]
2621
+ });
2622
+ }
2623
+ function IFramePlaceholder(props) {
2624
+ const {
2625
+ text = 'iFrame'
2626
+ } = props;
2627
+ return jsxRuntime.jsx("div", {
2628
+ class: "fjs-iframe-placeholder",
2629
+ children: jsxRuntime.jsx("p", {
2630
+ class: "fjs-iframe-placeholder-text",
2631
+ children: text
2632
+ })
2633
+ });
2634
+ }
2635
+ IFrame.config = {
2636
+ type: type$a,
2637
+ keyed: false,
2638
+ label: 'iFrame',
2639
+ group: 'container',
2640
+ create: (options = {}) => ({
2641
+ ...options
2642
+ })
2643
+ };
2644
+
2645
+ function _extends$k() { _extends$k = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$k.apply(this, arguments); }
2534
2646
  var SvgImagePlaceholder = function SvgImagePlaceholder(props) {
2535
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$j({
2647
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$k({
2536
2648
  xmlns: "http://www.w3.org/2000/svg",
2537
2649
  xmlSpace: "preserve",
2538
2650
  width: 64,
@@ -2637,14 +2749,14 @@ function TemplatedInputAdorner(props) {
2637
2749
  });
2638
2750
  }
2639
2751
 
2640
- var _path$g;
2641
- function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); }
2752
+ var _path$i;
2753
+ function _extends$j() { _extends$j = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$j.apply(this, arguments); }
2642
2754
  var SvgAngelDown = function SvgAngelDown(props) {
2643
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$i({
2755
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$j({
2644
2756
  xmlns: "http://www.w3.org/2000/svg",
2645
2757
  width: 8,
2646
2758
  height: 8
2647
- }, props), _path$g || (_path$g = /*#__PURE__*/React__namespace.createElement("path", {
2759
+ }, props), _path$i || (_path$i = /*#__PURE__*/React__namespace.createElement("path", {
2648
2760
  fill: "currentColor",
2649
2761
  fillRule: "evenodd",
2650
2762
  stroke: "currentColor",
@@ -2655,14 +2767,14 @@ var SvgAngelDown = function SvgAngelDown(props) {
2655
2767
  };
2656
2768
  var AngelDownIcon = SvgAngelDown;
2657
2769
 
2658
- var _path$f;
2659
- function _extends$h() { _extends$h = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$h.apply(this, arguments); }
2770
+ var _path$h;
2771
+ function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); }
2660
2772
  var SvgAngelUp = function SvgAngelUp(props) {
2661
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$h({
2773
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$i({
2662
2774
  xmlns: "http://www.w3.org/2000/svg",
2663
2775
  width: 8,
2664
2776
  height: 8
2665
- }, props), _path$f || (_path$f = /*#__PURE__*/React__namespace.createElement("path", {
2777
+ }, props), _path$h || (_path$h = /*#__PURE__*/React__namespace.createElement("path", {
2666
2778
  fill: "currentColor",
2667
2779
  fillRule: "evenodd",
2668
2780
  stroke: "currentColor",
@@ -2919,13 +3031,10 @@ Numberfield.config = {
2919
3031
  value,
2920
3032
  formField
2921
3033
  }) => {
2922
- // null state is allowed
2923
- if (isNullEquivalentValue(value)) return null;
3034
+ // invalid value types are sanitized to null
3035
+ if (isNullEquivalentValue(value) || !isValidNumber(value)) return null;
2924
3036
 
2925
- // if data cannot be parsed as a valid number, go into invalid NaN state
2926
- if (!isValidNumber(value)) return 'NaN';
2927
-
2928
- // otherwise parse to formatting type
3037
+ // otherwise, we return a string or a number depending on the form field configuration
2929
3038
  return formField.serializeToString ? value.toString() : Number(value);
2930
3039
  },
2931
3040
  create: (options = {}) => ({
@@ -2933,6 +3042,30 @@ Numberfield.config = {
2933
3042
  })
2934
3043
  };
2935
3044
 
3045
+ function useCleanupSingleSelectValue (props) {
3046
+ const {
3047
+ field,
3048
+ options,
3049
+ loadState,
3050
+ onChange,
3051
+ value
3052
+ } = props;
3053
+
3054
+ // Ensures that the value is always one of the possible options
3055
+ hooks.useEffect(() => {
3056
+ if (loadState !== LOAD_STATES.LOADED) {
3057
+ return;
3058
+ }
3059
+ const hasValueNotInOptions = value && !options.map(o => o.value).includes(value);
3060
+ if (hasValueNotInOptions) {
3061
+ onChange({
3062
+ field,
3063
+ value: null
3064
+ });
3065
+ }
3066
+ }, [field, options, onChange, value, loadState]);
3067
+ }
3068
+
2936
3069
  const type$7 = 'radio';
2937
3070
  function Radio(props) {
2938
3071
  const {
@@ -2973,9 +3106,16 @@ function Radio(props) {
2973
3106
  onFocus && onFocus();
2974
3107
  };
2975
3108
  const {
2976
- state: loadState,
2977
- values: options
2978
- } = useValuesAsync(field);
3109
+ loadState,
3110
+ options
3111
+ } = useOptionsAsync(field);
3112
+ useCleanupSingleSelectValue({
3113
+ field,
3114
+ loadState,
3115
+ options,
3116
+ value,
3117
+ onChange: props.onChange
3118
+ });
2979
3119
  const {
2980
3120
  formId
2981
3121
  } = hooks.useContext(FormContext$1);
@@ -3022,21 +3162,21 @@ function Radio(props) {
3022
3162
  Radio.config = {
3023
3163
  type: type$7,
3024
3164
  keyed: true,
3025
- label: 'Radio',
3165
+ label: 'Radio group',
3026
3166
  group: 'selection',
3027
3167
  emptyValue: null,
3028
3168
  sanitizeValue: sanitizeSingleSelectValue,
3029
3169
  create: createEmptyOptions
3030
3170
  };
3031
3171
 
3032
- var _path$e;
3033
- function _extends$g() { _extends$g = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$g.apply(this, arguments); }
3172
+ var _path$g;
3173
+ function _extends$h() { _extends$h = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$h.apply(this, arguments); }
3034
3174
  var SvgXMark = function SvgXMark(props) {
3035
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$g({
3175
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$h({
3036
3176
  xmlns: "http://www.w3.org/2000/svg",
3037
3177
  width: 8,
3038
3178
  height: 8
3039
- }, props), _path$e || (_path$e = /*#__PURE__*/React__namespace.createElement("path", {
3179
+ }, props), _path$g || (_path$g = /*#__PURE__*/React__namespace.createElement("path", {
3040
3180
  fill: "currentColor",
3041
3181
  fillRule: "evenodd",
3042
3182
  stroke: "currentColor",
@@ -3068,9 +3208,16 @@ function SearchableSelect(props) {
3068
3208
  const searchbarRef = hooks.useRef();
3069
3209
  const eventBus = useService('eventBus');
3070
3210
  const {
3071
- state: loadState,
3072
- values: options
3073
- } = useValuesAsync(field);
3211
+ loadState,
3212
+ options
3213
+ } = useOptionsAsync(field);
3214
+ useCleanupSingleSelectValue({
3215
+ field,
3216
+ loadState,
3217
+ options,
3218
+ value,
3219
+ onChange: props.onChange
3220
+ });
3074
3221
 
3075
3222
  // We cache a map of option values to their index so that we don't need to search the whole options array every time to correlate the label
3076
3223
  const valueToOptionMap = hooks.useMemo(() => Object.assign({}, ...options.map((o, x) => ({
@@ -3228,10 +3375,18 @@ function SimpleSelect(props) {
3228
3375
  } = hooks.useContext(FormContext$1);
3229
3376
  const [isDropdownExpanded, setIsDropdownExpanded] = hooks.useState(false);
3230
3377
  const selectRef = hooks.useRef();
3378
+ const inputRef = hooks.useRef();
3231
3379
  const {
3232
- state: loadState,
3233
- values: options
3234
- } = useValuesAsync(field);
3380
+ loadState,
3381
+ options
3382
+ } = useOptionsAsync(field);
3383
+ useCleanupSingleSelectValue({
3384
+ field,
3385
+ loadState,
3386
+ options,
3387
+ value,
3388
+ onChange: props.onChange
3389
+ });
3235
3390
 
3236
3391
  // We cache a map of option values to their index so that we don't need to search the whole options array every time to correlate the label
3237
3392
  const valueToOptionMap = hooks.useMemo(() => Object.assign({}, ...options.map((o, x) => ({
@@ -3252,12 +3407,12 @@ function SimpleSelect(props) {
3252
3407
  return ds;
3253
3408
  }, [disabled, isDropdownExpanded, loadState, value]);
3254
3409
  const onMouseDown = hooks.useCallback(e => {
3255
- const select = selectRef.current;
3410
+ const input = inputRef.current;
3256
3411
  setIsDropdownExpanded(!isDropdownExpanded);
3257
3412
  if (isDropdownExpanded) {
3258
- select.blur();
3413
+ input.blur();
3259
3414
  } else {
3260
- select.focus();
3415
+ input.focus();
3261
3416
  }
3262
3417
  e.preventDefault();
3263
3418
  }, [isDropdownExpanded]);
@@ -3294,6 +3449,7 @@ function SimpleSelect(props) {
3294
3449
  id: prefixId(`${id}-display`, formId),
3295
3450
  children: valueLabel || 'Select'
3296
3451
  }), !disabled && jsxRuntime.jsx("input", {
3452
+ ref: inputRef,
3297
3453
  id: prefixId(`${id}-search`, formId),
3298
3454
  class: "fjs-select-hidden-input",
3299
3455
  value: valueLabel,
@@ -3492,34 +3648,36 @@ function Taglist(props) {
3492
3648
  } = hooks.useContext(FormContext$1);
3493
3649
  const errorMessageId = errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;
3494
3650
  const [filter, setFilter] = hooks.useState('');
3495
- const [filteredOptions, setFilteredOptions] = hooks.useState([]);
3496
3651
  const [isDropdownExpanded, setIsDropdownExpanded] = hooks.useState(false);
3497
- const [hasOptionsLeft, setHasOptionsLeft] = hooks.useState(true);
3498
3652
  const [isEscapeClosed, setIsEscapeClose] = hooks.useState(false);
3499
3653
  const focusScopeRef = hooks.useRef();
3500
3654
  const inputRef = hooks.useRef();
3501
3655
  const eventBus = useService('eventBus');
3502
3656
  const {
3503
- state: loadState,
3504
- values: options
3505
- } = useValuesAsync(field);
3657
+ loadState,
3658
+ options
3659
+ } = useOptionsAsync(field);
3660
+ useCleanupMultiSelectValues({
3661
+ field,
3662
+ loadState,
3663
+ options,
3664
+ values,
3665
+ onChange: props.onChange
3666
+ });
3506
3667
 
3507
3668
  // We cache a map of option values to their index so that we don't need to search the whole options array every time to correlate the label
3508
3669
  const valueToOptionMap = hooks.useMemo(() => Object.assign({}, ...options.map((o, x) => ({
3509
3670
  [o.value]: options[x]
3510
3671
  }))), [options]);
3672
+ const hasOptionsLeft = hooks.useMemo(() => options.length > values.length, [options.length, values.length]);
3511
3673
 
3512
3674
  // Usage of stringify is necessary here because we want this effect to only trigger when there is a value change to the array
3513
- hooks.useEffect(() => {
3514
- if (loadState === LOAD_STATES.LOADED) {
3515
- setFilteredOptions(options.filter(o => o.label && o.value && o.label.toLowerCase().includes(filter.toLowerCase()) && !values.includes(o.value)));
3516
- } else {
3517
- setFilteredOptions([]);
3675
+ const filteredOptions = hooks.useMemo(() => {
3676
+ if (loadState !== LOAD_STATES.LOADED) {
3677
+ return [];
3518
3678
  }
3519
- }, [filter, JSON.stringify(values), options, loadState]);
3520
- hooks.useEffect(() => {
3521
- setHasOptionsLeft(options.length > values.length);
3522
- }, [options.length, values.length]);
3679
+ return options.filter(o => o.label && o.value && o.label.toLowerCase().includes(filter.toLowerCase()) && !values.includes(o.value));
3680
+ }, [filter, options, JSON.stringify(values), loadState]);
3523
3681
  const selectValue = value => {
3524
3682
  if (filter) {
3525
3683
  setFilter('');
@@ -3646,7 +3804,7 @@ function Taglist(props) {
3646
3804
  onMouseDown: e => e.preventDefault(),
3647
3805
  children: [jsxRuntime.jsx("span", {
3648
3806
  class: "fjs-taglist-tag-label",
3649
- children: valueToOptionMap[v] ? valueToOptionMap[v].label : `unexpected value{${v}}`
3807
+ children: valueToOptionMap[v] ? valueToOptionMap[v].label : undefined
3650
3808
  }), !disabled && !readonly && jsxRuntime.jsx("button", {
3651
3809
  type: "button",
3652
3810
  title: "Remove tag",
@@ -3867,7 +4025,7 @@ Textfield.config = {
3867
4025
  sanitizeValue: ({
3868
4026
  value
3869
4027
  }) => {
3870
- if (minDash.isArray(value) || minDash.isObject(value)) {
4028
+ if (minDash.isArray(value) || minDash.isObject(value) || minDash.isNil(value)) {
3871
4029
  return '';
3872
4030
  }
3873
4031
 
@@ -3958,7 +4116,7 @@ Textarea.config = {
3958
4116
  emptyValue: '',
3959
4117
  sanitizeValue: ({
3960
4118
  value
3961
- }) => minDash.isArray(value) || minDash.isObject(value) ? '' : String(value),
4119
+ }) => minDash.isArray(value) || minDash.isObject(value) || minDash.isNil(value) ? '' : String(value),
3962
4120
  create: (options = {}) => ({
3963
4121
  ...options
3964
4122
  })
@@ -3982,84 +4140,64 @@ const autoSizeTextarea = textarea => {
3982
4140
  textarea.style.overflow = calculatedHeight > maxHeight ? 'visible' : 'hidden';
3983
4141
  };
3984
4142
 
3985
- var _path$d;
3986
- function _extends$f() { _extends$f = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$f.apply(this, arguments); }
4143
+ var _path$f;
4144
+ function _extends$g() { _extends$g = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$g.apply(this, arguments); }
3987
4145
  var SvgButton = function SvgButton(props) {
3988
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$f({
4146
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$g({
3989
4147
  xmlns: "http://www.w3.org/2000/svg",
3990
4148
  width: 54,
3991
4149
  height: 54,
3992
4150
  fill: "currentcolor"
3993
- }, props), _path$d || (_path$d = /*#__PURE__*/React__namespace.createElement("path", {
4151
+ }, props), _path$f || (_path$f = /*#__PURE__*/React__namespace.createElement("path", {
3994
4152
  fillRule: "evenodd",
3995
4153
  d: "M45 17a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V20a3 3 0 0 1 3-3h36zm-9 8.889H18v2.222h18v-2.222z"
3996
4154
  })));
3997
4155
  };
3998
4156
  var ButtonIcon = SvgButton;
3999
4157
 
4000
- var _path$c;
4001
- function _extends$e() { _extends$e = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$e.apply(this, arguments); }
4158
+ var _path$e;
4159
+ function _extends$f() { _extends$f = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$f.apply(this, arguments); }
4002
4160
  var SvgCheckbox = function SvgCheckbox(props) {
4003
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$e({
4161
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$f({
4004
4162
  xmlns: "http://www.w3.org/2000/svg",
4005
4163
  width: 54,
4006
4164
  height: 54,
4007
4165
  fill: "currentcolor"
4008
- }, props), _path$c || (_path$c = /*#__PURE__*/React__namespace.createElement("path", {
4166
+ }, props), _path$e || (_path$e = /*#__PURE__*/React__namespace.createElement("path", {
4009
4167
  d: "M34 18H20a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V20a2 2 0 0 0-2-2zm-9 14-5-5 1.41-1.41L25 29.17l7.59-7.59L34 23l-9 9z"
4010
4168
  })));
4011
4169
  };
4012
4170
  var CheckboxIcon = SvgCheckbox;
4013
4171
 
4014
- var _g, _use, _use2, _use3, _defs;
4015
- function _extends$d() { _extends$d = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$d.apply(this, arguments); }
4172
+ var _path$d;
4173
+ function _extends$e() { _extends$e = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$e.apply(this, arguments); }
4016
4174
  var SvgChecklist = function SvgChecklist(props) {
4017
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$d({
4175
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$e({
4018
4176
  xmlns: "http://www.w3.org/2000/svg",
4019
- xmlnsXlink: "http://www.w3.org/1999/xlink",
4020
4177
  width: 54,
4021
4178
  height: 54,
4022
- fill: "currentcolor"
4023
- }, props), _g || (_g = /*#__PURE__*/React__namespace.createElement("g", {
4024
- fillRule: "evenodd"
4025
- }, /*#__PURE__*/React__namespace.createElement("use", {
4026
- xlinkHref: "#Checklist_svg__a"
4027
- }), /*#__PURE__*/React__namespace.createElement("use", {
4028
- xlinkHref: "#Checklist_svg__a",
4029
- y: 24
4030
- }), /*#__PURE__*/React__namespace.createElement("use", {
4031
- xlinkHref: "#Checklist_svg__a",
4032
- y: 12
4033
- }))), _use || (_use = /*#__PURE__*/React__namespace.createElement("use", {
4034
- xlinkHref: "#Checklist_svg__b"
4035
- })), _use2 || (_use2 = /*#__PURE__*/React__namespace.createElement("use", {
4036
- xlinkHref: "#Checklist_svg__b",
4037
- y: 12
4038
- })), _use3 || (_use3 = /*#__PURE__*/React__namespace.createElement("use", {
4039
- xlinkHref: "#Checklist_svg__b",
4040
- y: 24
4041
- })), _defs || (_defs = /*#__PURE__*/React__namespace.createElement("defs", null, /*#__PURE__*/React__namespace.createElement("path", {
4042
- id: "Checklist_svg__a",
4043
- d: "M18 12h-6v6h6v-6zm-6-2a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2h-6z"
4044
- }), /*#__PURE__*/React__namespace.createElement("path", {
4045
- id: "Checklist_svg__b",
4046
- d: "M23 14.5a1 1 0 0 1 1-1h19a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H24a1 1 0 0 1-1-1v-1z"
4047
- }))));
4179
+ fill: "none"
4180
+ }, props), _path$d || (_path$d = /*#__PURE__*/React__namespace.createElement("path", {
4181
+ fill: "currentColor",
4182
+ fillRule: "evenodd",
4183
+ d: "M14.35 24.75H19v4.65h-4.65v-4.65Zm-1.414-1.414a2 2 0 0 1 1.414-.586H19a2 2 0 0 1 2 2v4.65a2 2 0 0 1-2 2h-4.65a2 2 0 0 1-2-2v-4.65a2 2 0 0 1 .586-1.414ZM14.35 37.05H19v4.65h-4.65v-4.65Zm-1.414-1.414a2 2 0 0 1 1.414-.586H19a2 2 0 0 1 2 2v4.65a2 2 0 0 1-2 2h-4.65a2 2 0 0 1-2-2v-4.65a2 2 0 0 1 .586-1.414ZM14.35 12.45H19v4.65h-4.65v-4.65Zm-1.414-1.414a2 2 0 0 1 1.414-.586H19a2 2 0 0 1 2 2v4.65a2 2 0 0 1-2 2h-4.65a2 2 0 0 1-2-2v-4.65a2 2 0 0 1 .586-1.414Zm12.007 14.977a1 1 0 0 0-.293.707v.65a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-.65a1 1 0 0 0-1-1h-15a1 1 0 0 0-.707.293Zm0 12.3a1 1 0 0 0-.293.707v.65a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-.65a1 1 0 0 0-1-1h-15a1 1 0 0 0-.707.293Zm0-24.6a1 1 0 0 0-.293.707v.65a1 1 0 0 0 1 1h15a1 1 0 0 0 1-1v-.65a1 1 0 0 0-1-1h-15a1 1 0 0 0-.707.293Z",
4184
+ clipRule: "evenodd"
4185
+ })));
4048
4186
  };
4049
4187
  var ChecklistIcon = SvgChecklist;
4050
4188
 
4051
- var _path$b, _path2$2, _path3;
4052
- function _extends$c() { _extends$c = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$c.apply(this, arguments); }
4189
+ var _path$c, _path2$3, _path3;
4190
+ function _extends$d() { _extends$d = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$d.apply(this, arguments); }
4053
4191
  var SvgDatetime = function SvgDatetime(props) {
4054
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$c({
4192
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$d({
4055
4193
  xmlns: "http://www.w3.org/2000/svg",
4056
4194
  width: 54,
4057
4195
  height: 54,
4058
4196
  fill: "currentcolor"
4059
- }, props), _path$b || (_path$b = /*#__PURE__*/React__namespace.createElement("path", {
4197
+ }, props), _path$c || (_path$c = /*#__PURE__*/React__namespace.createElement("path", {
4060
4198
  fillRule: "evenodd",
4061
4199
  d: "M37.908 13.418h-5.004v-2.354h-1.766v2.354H21.13v-2.354h-1.766v2.354H14.36a2.07 2.07 0 0 0-2.06 2.06v23.549a2.07 2.07 0 0 0 2.06 2.06h6.77v-1.766h-6.358a.707.707 0 0 1-.706-.706V15.89c0-.39.316-.707.706-.707h4.592v2.355h1.766v-2.355h10.008v2.355h1.766v-2.355h4.592a.71.71 0 0 1 .707.707v6.358h1.765v-6.77c0-1.133-.927-2.06-2.06-2.06z"
4062
- })), _path2$2 || (_path2$2 = /*#__PURE__*/React__namespace.createElement("path", {
4200
+ })), _path2$3 || (_path2$3 = /*#__PURE__*/React__namespace.createElement("path", {
4063
4201
  d: "m35.13 37.603 1.237-1.237-3.468-3.475v-5.926h-1.754v6.654l3.984 3.984Z"
4064
4202
  })), _path3 || (_path3 = /*#__PURE__*/React__namespace.createElement("path", {
4065
4203
  fillRule: "evenodd",
@@ -4068,27 +4206,27 @@ var SvgDatetime = function SvgDatetime(props) {
4068
4206
  };
4069
4207
  var DatetimeIcon = SvgDatetime;
4070
4208
 
4071
- var _path$a, _path2$1;
4072
- function _extends$b() { _extends$b = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$b.apply(this, arguments); }
4209
+ var _path$b, _path2$2;
4210
+ function _extends$c() { _extends$c = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$c.apply(this, arguments); }
4073
4211
  var SvgTaglist = function SvgTaglist(props) {
4074
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$b({
4212
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$c({
4075
4213
  xmlns: "http://www.w3.org/2000/svg",
4076
4214
  width: 54,
4077
4215
  height: 54,
4078
4216
  fill: "currentcolor"
4079
- }, props), _path$a || (_path$a = /*#__PURE__*/React__namespace.createElement("path", {
4217
+ }, props), _path$b || (_path$b = /*#__PURE__*/React__namespace.createElement("path", {
4080
4218
  fillRule: "evenodd",
4081
4219
  d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36Zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1Z"
4082
- })), _path2$1 || (_path2$1 = /*#__PURE__*/React__namespace.createElement("path", {
4220
+ })), _path2$2 || (_path2$2 = /*#__PURE__*/React__namespace.createElement("path", {
4083
4221
  d: "M11 22a1 1 0 0 1 1-1h19a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H12a1 1 0 0 1-1-1V22Z"
4084
4222
  })));
4085
4223
  };
4086
4224
  var TaglistIcon = SvgTaglist;
4087
4225
 
4088
4226
  var _rect, _rect2, _rect3;
4089
- function _extends$a() { _extends$a = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$a.apply(this, arguments); }
4227
+ function _extends$b() { _extends$b = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$b.apply(this, arguments); }
4090
4228
  var SvgForm = function SvgForm(props) {
4091
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$a({
4229
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$b({
4092
4230
  xmlns: "http://www.w3.org/2000/svg",
4093
4231
  width: 54,
4094
4232
  height: 54
@@ -4114,9 +4252,24 @@ var SvgForm = function SvgForm(props) {
4114
4252
  };
4115
4253
  var FormIcon = SvgForm;
4116
4254
 
4255
+ var _path$a;
4256
+ function _extends$a() { _extends$a = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$a.apply(this, arguments); }
4257
+ var SvgGroup = function SvgGroup(props) {
4258
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$a({
4259
+ xmlns: "http://www.w3.org/2000/svg",
4260
+ width: 54,
4261
+ height: 54,
4262
+ fill: "currentcolor"
4263
+ }, props), _path$a || (_path$a = /*#__PURE__*/React__namespace.createElement("path", {
4264
+ fillRule: "evenodd",
4265
+ d: "M8 33v5a1 1 0 0 0 1 1h4v2H9a3 3 0 0 1-3-3v-5h2Zm18 6v2H15v-2h11Zm13 0v2H28v-2h11Zm9-6v5a3 3 0 0 1-3 3h-4v-2h4a1 1 0 0 0 .993-.883L46 38v-5h2ZM8 22v9H6v-9h2Zm40 0v9h-2v-9h2Zm-35-9v2H9a1 1 0 0 0-.993.883L8 16v4H6v-4a3 3 0 0 1 3-3h4Zm32 0a3 3 0 0 1 3 3v4h-2v-4a1 1 0 0 0-.883-.993L45 15h-4v-2h4Zm-6 0v2H28v-2h11Zm-13 0v2H15v-2h11Z"
4266
+ })));
4267
+ };
4268
+ var GroupIcon = SvgGroup;
4269
+
4117
4270
  var _path$9;
4118
4271
  function _extends$9() { _extends$9 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$9.apply(this, arguments); }
4119
- var SvgGroup = function SvgGroup(props) {
4272
+ var SvgNumber = function SvgNumber(props) {
4120
4273
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$9({
4121
4274
  xmlns: "http://www.w3.org/2000/svg",
4122
4275
  width: 54,
@@ -4124,58 +4277,58 @@ var SvgGroup = function SvgGroup(props) {
4124
4277
  fill: "currentcolor"
4125
4278
  }, props), _path$9 || (_path$9 = /*#__PURE__*/React__namespace.createElement("path", {
4126
4279
  fillRule: "evenodd",
4127
- d: "M8 33v5a1 1 0 0 0 1 1h4v2H9a3 3 0 0 1-3-3v-5h2Zm18 6v2H15v-2h11Zm13 0v2H28v-2h11Zm9-6v5a3 3 0 0 1-3 3h-4v-2h4a1 1 0 0 0 .993-.883L46 38v-5h2ZM8 22v9H6v-9h2Zm40 0v9h-2v-9h2Zm-35-9v2H9a1 1 0 0 0-.993.883L8 16v4H6v-4a3 3 0 0 1 3-3h4Zm32 0a3 3 0 0 1 3 3v4h-2v-4a1 1 0 0 0-.883-.993L45 15h-4v-2h4Zm-6 0v2H28v-2h11Zm-13 0v2H15v-2h11Z"
4280
+ d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zM35 28.444h7l-3.5 4-3.5-4zM35 26h7l-3.5-4-3.5 4z"
4128
4281
  })));
4129
4282
  };
4130
- var GroupIcon = SvgGroup;
4283
+ var NumberIcon = SvgNumber;
4131
4284
 
4132
4285
  var _path$8;
4133
4286
  function _extends$8() { _extends$8 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$8.apply(this, arguments); }
4134
- var SvgNumber = function SvgNumber(props) {
4287
+ var SvgRadio = function SvgRadio(props) {
4135
4288
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$8({
4136
4289
  xmlns: "http://www.w3.org/2000/svg",
4137
4290
  width: 54,
4138
4291
  height: 54,
4139
4292
  fill: "currentcolor"
4140
4293
  }, props), _path$8 || (_path$8 = /*#__PURE__*/React__namespace.createElement("path", {
4141
- fillRule: "evenodd",
4142
- d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zM35 28.444h7l-3.5 4-3.5-4zM35 26h7l-3.5-4-3.5 4z"
4294
+ d: "M27 22c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10zm0 18a8 8 0 1 1 0-16 8 8 0 1 1 0 16z"
4143
4295
  })));
4144
4296
  };
4145
- var NumberIcon = SvgNumber;
4297
+ var RadioIcon = SvgRadio;
4146
4298
 
4147
4299
  var _path$7;
4148
4300
  function _extends$7() { _extends$7 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$7.apply(this, arguments); }
4149
- var SvgRadio = function SvgRadio(props) {
4301
+ var SvgSelect = function SvgSelect(props) {
4150
4302
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$7({
4151
4303
  xmlns: "http://www.w3.org/2000/svg",
4152
4304
  width: 54,
4153
4305
  height: 54,
4154
4306
  fill: "currentcolor"
4155
4307
  }, props), _path$7 || (_path$7 = /*#__PURE__*/React__namespace.createElement("path", {
4156
- d: "M27 22c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10zm0 18a8 8 0 1 1 0-16 8 8 0 1 1 0 16z"
4308
+ fillRule: "evenodd",
4309
+ d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm-12 7h9l-4.5 6-4.5-6z"
4157
4310
  })));
4158
4311
  };
4159
- var RadioIcon = SvgRadio;
4312
+ var SelectIcon = SvgSelect;
4160
4313
 
4161
4314
  var _path$6;
4162
4315
  function _extends$6() { _extends$6 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$6.apply(this, arguments); }
4163
- var SvgSelect = function SvgSelect(props) {
4316
+ var SvgSeparator = function SvgSeparator(props) {
4164
4317
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$6({
4165
4318
  xmlns: "http://www.w3.org/2000/svg",
4166
4319
  width: 54,
4167
4320
  height: 54,
4168
- fill: "currentcolor"
4321
+ fill: "none"
4169
4322
  }, props), _path$6 || (_path$6 = /*#__PURE__*/React__namespace.createElement("path", {
4170
- fillRule: "evenodd",
4171
- d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm-12 7h9l-4.5 6-4.5-6z"
4323
+ fill: "currentColor",
4324
+ d: "M26.293 16.293a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1-1.414 1.414L27 18.414l-3.293 3.293a1 1 0 0 1-1.414-1.414l4-4ZM9 26h36v2H9v-2Zm13.293 7.707 4 4a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L27 35.586l-3.293-3.293a1 1 0 0 0-1.414 1.414Z"
4172
4325
  })));
4173
4326
  };
4174
- var SelectIcon = SvgSelect;
4327
+ var SeparatorIcon = SvgSeparator;
4175
4328
 
4176
4329
  var _path$5;
4177
4330
  function _extends$5() { _extends$5 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5.apply(this, arguments); }
4178
- var SvgSeparator = function SvgSeparator(props) {
4331
+ var SvgSpacer = function SvgSpacer(props) {
4179
4332
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$5({
4180
4333
  xmlns: "http://www.w3.org/2000/svg",
4181
4334
  width: 54,
@@ -4183,43 +4336,43 @@ var SvgSeparator = function SvgSeparator(props) {
4183
4336
  fill: "none"
4184
4337
  }, props), _path$5 || (_path$5 = /*#__PURE__*/React__namespace.createElement("path", {
4185
4338
  fill: "currentColor",
4186
- d: "M26.293 16.293a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1-1.414 1.414L27 18.414l-3.293 3.293a1 1 0 0 1-1.414-1.414l4-4ZM9 26h36v2H9v-2Zm13.293 7.707 4 4a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L27 35.586l-3.293-3.293a1 1 0 0 0-1.414 1.414Z"
4339
+ d: "M9 15v2h36v-2H9Zm0 22v2h36v-2H9Zm17.293-17.707a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1-1.414 1.414L27 21.414l-3.293 3.293a1 1 0 0 1-1.414-1.414l4-4Zm-4 11.414 4 4a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L27 32.586l-3.293-3.293a1 1 0 0 0-1.414 1.414Z"
4187
4340
  })));
4188
4341
  };
4189
- var SeparatorIcon = SvgSeparator;
4342
+ var SpacerIcon = SvgSpacer;
4190
4343
 
4191
4344
  var _path$4;
4192
4345
  function _extends$4() { _extends$4 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$4.apply(this, arguments); }
4193
- var SvgSpacer = function SvgSpacer(props) {
4346
+ var SvgText = function SvgText(props) {
4194
4347
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({
4195
4348
  xmlns: "http://www.w3.org/2000/svg",
4196
4349
  width: 54,
4197
4350
  height: 54,
4198
- fill: "none"
4351
+ fill: "currentcolor"
4199
4352
  }, props), _path$4 || (_path$4 = /*#__PURE__*/React__namespace.createElement("path", {
4200
- fill: "currentColor",
4201
- d: "M9 15v2h36v-2H9Zm0 22v2h36v-2H9Zm17.293-17.707a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1-1.414 1.414L27 21.414l-3.293 3.293a1 1 0 0 1-1.414-1.414l4-4Zm-4 11.414 4 4a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L27 32.586l-3.293-3.293a1 1 0 0 0-1.414 1.414Z"
4353
+ d: "M20.58 33.77h-3l-1.18-3.08H11l-1.1 3.08H7l5.27-13.54h2.89zm-5-5.36-1.86-5-1.83 5zM22 20.23h5.41a15.47 15.47 0 0 1 2.4.14 3.42 3.42 0 0 1 1.41.55 3.47 3.47 0 0 1 1 1.14 3 3 0 0 1 .42 1.58 3.26 3.26 0 0 1-1.91 2.94 3.63 3.63 0 0 1 1.91 1.22 3.28 3.28 0 0 1 .66 2 4 4 0 0 1-.43 1.8 3.63 3.63 0 0 1-1.09 1.4 3.89 3.89 0 0 1-1.83.65q-.69.07-3.3.09H22zm2.73 2.25v3.13h3.8a1.79 1.79 0 0 0 1.1-.49 1.41 1.41 0 0 0 .41-1 1.49 1.49 0 0 0-.35-1 1.54 1.54 0 0 0-1-.48c-.27 0-1.05-.05-2.34-.05zm0 5.39v3.62h2.57a11.52 11.52 0 0 0 1.88-.09 1.65 1.65 0 0 0 1-.54 1.6 1.6 0 0 0 .38-1.14 1.75 1.75 0 0 0-.29-1 1.69 1.69 0 0 0-.86-.62 9.28 9.28 0 0 0-2.41-.23zm19.62.92 2.65.84a5.94 5.94 0 0 1-2 3.29A5.74 5.74 0 0 1 41.38 34a5.87 5.87 0 0 1-4.44-1.84 7.09 7.09 0 0 1-1.73-5A7.43 7.43 0 0 1 37 21.87 6 6 0 0 1 41.54 20a5.64 5.64 0 0 1 4 1.47A5.33 5.33 0 0 1 47 24l-2.7.65a2.8 2.8 0 0 0-2.86-2.27A3.09 3.09 0 0 0 39 23.42a5.31 5.31 0 0 0-.93 3.5 5.62 5.62 0 0 0 .93 3.65 3 3 0 0 0 2.4 1.09 2.72 2.72 0 0 0 1.82-.66 4 4 0 0 0 1.13-2.21z"
4202
4354
  })));
4203
4355
  };
4204
- var SpacerIcon = SvgSpacer;
4356
+ var TextIcon = SvgText;
4205
4357
 
4206
4358
  var _path$3;
4207
4359
  function _extends$3() { _extends$3 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$3.apply(this, arguments); }
4208
- var SvgText = function SvgText(props) {
4360
+ var SvgTextfield = function SvgTextfield(props) {
4209
4361
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({
4210
4362
  xmlns: "http://www.w3.org/2000/svg",
4211
4363
  width: 54,
4212
4364
  height: 54,
4213
4365
  fill: "currentcolor"
4214
4366
  }, props), _path$3 || (_path$3 = /*#__PURE__*/React__namespace.createElement("path", {
4215
- d: "M20.58 33.77h-3l-1.18-3.08H11l-1.1 3.08H7l5.27-13.54h2.89zm-5-5.36-1.86-5-1.83 5zM22 20.23h5.41a15.47 15.47 0 0 1 2.4.14 3.42 3.42 0 0 1 1.41.55 3.47 3.47 0 0 1 1 1.14 3 3 0 0 1 .42 1.58 3.26 3.26 0 0 1-1.91 2.94 3.63 3.63 0 0 1 1.91 1.22 3.28 3.28 0 0 1 .66 2 4 4 0 0 1-.43 1.8 3.63 3.63 0 0 1-1.09 1.4 3.89 3.89 0 0 1-1.83.65q-.69.07-3.3.09H22zm2.73 2.25v3.13h3.8a1.79 1.79 0 0 0 1.1-.49 1.41 1.41 0 0 0 .41-1 1.49 1.49 0 0 0-.35-1 1.54 1.54 0 0 0-1-.48c-.27 0-1.05-.05-2.34-.05zm0 5.39v3.62h2.57a11.52 11.52 0 0 0 1.88-.09 1.65 1.65 0 0 0 1-.54 1.6 1.6 0 0 0 .38-1.14 1.75 1.75 0 0 0-.29-1 1.69 1.69 0 0 0-.86-.62 9.28 9.28 0 0 0-2.41-.23zm19.62.92 2.65.84a5.94 5.94 0 0 1-2 3.29A5.74 5.74 0 0 1 41.38 34a5.87 5.87 0 0 1-4.44-1.84 7.09 7.09 0 0 1-1.73-5A7.43 7.43 0 0 1 37 21.87 6 6 0 0 1 41.54 20a5.64 5.64 0 0 1 4 1.47A5.33 5.33 0 0 1 47 24l-2.7.65a2.8 2.8 0 0 0-2.86-2.27A3.09 3.09 0 0 0 39 23.42a5.31 5.31 0 0 0-.93 3.5 5.62 5.62 0 0 0 .93 3.65 3 3 0 0 0 2.4 1.09 2.72 2.72 0 0 0 1.82-.66 4 4 0 0 0 1.13-2.21z"
4367
+ fillRule: "evenodd",
4368
+ d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm-32 4v10h-2V22h2z"
4216
4369
  })));
4217
4370
  };
4218
- var TextIcon = SvgText;
4371
+ var TextfieldIcon = SvgTextfield;
4219
4372
 
4220
4373
  var _path$2;
4221
4374
  function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }
4222
- var SvgTextfield = function SvgTextfield(props) {
4375
+ var SvgTextarea = function SvgTextarea(props) {
4223
4376
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
4224
4377
  xmlns: "http://www.w3.org/2000/svg",
4225
4378
  width: 54,
@@ -4227,25 +4380,30 @@ var SvgTextfield = function SvgTextfield(props) {
4227
4380
  fill: "currentcolor"
4228
4381
  }, props), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", {
4229
4382
  fillRule: "evenodd",
4230
- d: "M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1zm-32 4v10h-2V22h2z"
4383
+ d: "M45 13a3 3 0 0 1 3 3v22a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V16a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v22a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V16a1 1 0 0 0-1-1zm-1.136 15.5.849.849-6.364 6.364-.849-.849 6.364-6.364zm.264 3.5.849.849-2.828 2.828-.849-.849L44.128 34zM13 19v10h-2V19h2z"
4231
4384
  })));
4232
4385
  };
4233
- var TextfieldIcon = SvgTextfield;
4386
+ var TextareaIcon = SvgTextarea;
4234
4387
 
4235
- var _path$1;
4388
+ var _path$1, _path2$1;
4236
4389
  function _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); }
4237
- var SvgTextarea = function SvgTextarea(props) {
4390
+ var SvgIFrame = function SvgIFrame(props) {
4238
4391
  return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({
4239
4392
  xmlns: "http://www.w3.org/2000/svg",
4240
4393
  width: 54,
4241
4394
  height: 54,
4242
- fill: "currentcolor"
4395
+ fill: "none"
4243
4396
  }, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", {
4397
+ fill: "currentcolor",
4398
+ d: "M34.467 37.3 41 31l-6.533-6.3-1.32 1.273L38.36 31l-5.213 5.027 1.32 1.273ZM19.533 24.7 13 31l6.533 6.3 1.32-1.273L15.64 31l5.214-5.027-1.32-1.273Zm4.127 14.832 1.805.468 4.875-17.532L28.535 22 23.66 39.532Z"
4399
+ })), _path2$1 || (_path2$1 = /*#__PURE__*/React__namespace.createElement("path", {
4400
+ fill: "currentcolor",
4244
4401
  fillRule: "evenodd",
4245
- d: "M45 13a3 3 0 0 1 3 3v22a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V16a3 3 0 0 1 3-3h36zm0 2H9a1 1 0 0 0-1 1v22a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V16a1 1 0 0 0-1-1zm-1.136 15.5.849.849-6.364 6.364-.849-.849 6.364-6.364zm.264 3.5.849.849-2.828 2.828-.849-.849L44.128 34zM13 19v10h-2V19h2z"
4402
+ d: "M46 9a3 3 0 0 1 3 3v30a3 3 0 0 1-3 3H8a3 3 0 0 1-3-3V12a3 3 0 0 1 3-3h38Zm0 2H8a1 1 0 0 0-1 1v4h40v-4a1 1 0 0 0-1-1ZM7 42V18h40v24a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1Z",
4403
+ clipRule: "evenodd"
4246
4404
  })));
4247
4405
  };
4248
- var TextareaIcon = SvgTextarea;
4406
+ var IFrameIcon = SvgIFrame;
4249
4407
 
4250
4408
  var _path, _path2;
4251
4409
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
@@ -4275,6 +4433,7 @@ const iconsByType = type => {
4275
4433
  columns: GroupIcon,
4276
4434
  datetime: DatetimeIcon,
4277
4435
  group: GroupIcon,
4436
+ iframe: IFrameIcon,
4278
4437
  image: ImageIcon,
4279
4438
  number: NumberIcon,
4280
4439
  radio: RadioIcon,
@@ -4289,7 +4448,7 @@ const iconsByType = type => {
4289
4448
  }[type];
4290
4449
  };
4291
4450
 
4292
- const formFields = [Button, Checkbox, Checklist, FormComponent$1, Group, Image, Numberfield, Datetime, Radio, Select, Spacer, Separator, Taglist, Text, Textfield, Textarea];
4451
+ const formFields = [Button, Checkbox, Checklist, FormComponent$1, Group, IFrame, Image, Numberfield, Datetime, Radio, Select, Spacer, Separator, Taglist, Text, Textfield, Textarea];
4293
4452
 
4294
4453
  class FormFields {
4295
4454
  constructor() {
@@ -4361,8 +4520,8 @@ function createFormContainer(prefix = 'fjs') {
4361
4520
  return container;
4362
4521
  }
4363
4522
 
4364
- const EXPRESSION_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'conditional.hide', 'description', 'label', 'source', 'readonly', 'text', 'validate.min', 'validate.max', 'validate.minLength', 'validate.maxLength', 'valuesExpression'];
4365
- const TEMPLATE_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'description', 'label', 'source', 'text'];
4523
+ const EXPRESSION_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'conditional.hide', 'description', 'label', 'source', 'readonly', 'text', 'validate.min', 'validate.max', 'validate.minLength', 'validate.maxLength', 'valuesExpression', 'url'];
4524
+ const TEMPLATE_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'description', 'label', 'source', 'text', 'url'];
4366
4525
  function isRequired(field) {
4367
4526
  return field.required;
4368
4527
  }
@@ -6857,7 +7016,7 @@ class Form {
6857
7016
  }
6858
7017
  }
6859
7018
 
6860
- const schemaVersion = 12;
7019
+ const schemaVersion = 13;
6861
7020
 
6862
7021
  /**
6863
7022
  * @typedef { import('./types').CreateFormOptions } CreateFormOptions
@@ -6908,6 +7067,7 @@ exports.FormFields = FormFields;
6908
7067
  exports.FormLayouter = FormLayouter;
6909
7068
  exports.FormRenderContext = FormRenderContext$1;
6910
7069
  exports.Group = Group;
7070
+ exports.IFrame = IFrame;
6911
7071
  exports.Image = Image;
6912
7072
  exports.Importer = Importer;
6913
7073
  exports.Label = Label;
@@ -6952,6 +7112,10 @@ exports.pathParse = pathParse;
6952
7112
  exports.pathsEqual = pathsEqual;
6953
7113
  exports.runRecursively = runRecursively;
6954
7114
  exports.sanitizeHTML = sanitizeHTML;
7115
+ exports.sanitizeIFrameSource = sanitizeIFrameSource;
6955
7116
  exports.sanitizeImageSource = sanitizeImageSource;
6956
7117
  exports.schemaVersion = schemaVersion;
7118
+ exports.useExpressionEvaluation = useExpressionEvaluation;
7119
+ exports.useSingleLineTemplateEvaluation = useSingleLineTemplateEvaluation;
7120
+ exports.useTemplateEvaluation = useTemplateEvaluation;
6957
7121
  //# sourceMappingURL=index.cjs.map