@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.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import Ids from 'ids';
2
- import { isString, get, isNumber, set, findIndex, isArray, isObject, values, uniqueBy, isFunction, bind, assign, isNil, groupBy, flatten, isUndefined } from 'min-dash';
2
+ import { isString, get, isNumber, set, findIndex, isArray, isObject, isNil, values, uniqueBy, isFunction, bind, assign, groupBy, flatten, isUndefined } from 'min-dash';
3
3
  import Big from 'big.js';
4
4
  import { parseExpression, parseUnaryTests, evaluate, unaryTest } from 'feelin';
5
5
  import { evaluate as evaluate$1, parser, buildSimpleTree } from 'feelers';
@@ -425,7 +425,7 @@ function prefixId(id, formId) {
425
425
  return `fjs-form-${id}`;
426
426
  }
427
427
 
428
- const type$d = 'button';
428
+ const type$e = 'button';
429
429
  function Button(props) {
430
430
  const {
431
431
  disabled,
@@ -437,7 +437,7 @@ function Button(props) {
437
437
  action = 'submit'
438
438
  } = field;
439
439
  return jsx("div", {
440
- class: formFieldClasses(type$d),
440
+ class: formFieldClasses(type$e),
441
441
  children: jsx("button", {
442
442
  class: "fjs-button",
443
443
  type: action,
@@ -449,7 +449,7 @@ function Button(props) {
449
449
  });
450
450
  }
451
451
  Button.config = {
452
- type: type$d,
452
+ type: type$e,
453
453
  keyed: false,
454
454
  label: 'Button',
455
455
  group: 'action',
@@ -747,7 +747,7 @@ function Label(props) {
747
747
  });
748
748
  }
749
749
 
750
- const type$c = 'checkbox';
750
+ const type$d = 'checkbox';
751
751
  function Checkbox(props) {
752
752
  const {
753
753
  disabled,
@@ -780,7 +780,7 @@ function Checkbox(props) {
780
780
  } = useContext(FormContext$1);
781
781
  const errorMessageId = errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;
782
782
  return jsxs("div", {
783
- class: classNames(formFieldClasses(type$c, {
783
+ class: classNames(formFieldClasses(type$d, {
784
784
  errors,
785
785
  disabled,
786
786
  readonly
@@ -812,7 +812,7 @@ function Checkbox(props) {
812
812
  });
813
813
  }
814
814
  Checkbox.config = {
815
- type: type$c,
815
+ type: type$d,
816
816
  keyed: true,
817
817
  label: 'Checkbox',
818
818
  group: 'selection',
@@ -826,54 +826,54 @@ Checkbox.config = {
826
826
  };
827
827
 
828
828
  // parses the options data from the provided form field and form data
829
- function getValuesData(formField, formData) {
829
+ function getOptionsData(formField, formData) {
830
830
  const {
831
- valuesKey,
832
- values
831
+ valuesKey: optionsKey,
832
+ values: staticOptions
833
833
  } = formField;
834
- return valuesKey ? get(formData, [valuesKey]) : values;
834
+ return optionsKey ? get(formData, [optionsKey]) : staticOptions;
835
835
  }
836
836
 
837
837
  // transforms the provided options into a normalized format, trimming invalid options
838
- function normalizeValuesData(valuesData) {
839
- return valuesData.filter(_isValueSomething).map(v => _normalizeValueData(v)).filter(v => v);
838
+ function normalizeOptionsData(optionsData) {
839
+ return optionsData.filter(_isOptionSomething).map(v => _normalizeOptionsData(v)).filter(v => v);
840
840
  }
841
- function _normalizeValueData(valueData) {
842
- if (_isAllowedValue(valueData)) {
841
+ function _normalizeOptionsData(optionData) {
842
+ if (_isAllowedOption(optionData)) {
843
843
  // if a primitive is provided, use it as label and value
844
844
  return {
845
- value: valueData,
846
- label: `${valueData}`
845
+ value: optionData,
846
+ label: `${optionData}`
847
847
  };
848
848
  }
849
- if (typeof valueData === 'object') {
850
- if (!valueData.label && _isAllowedValue(valueData.value)) {
849
+ if (typeof optionData === 'object') {
850
+ if (!optionData.label && _isAllowedOption(optionData.value)) {
851
851
  // if no label is provided, use the value as label
852
852
  return {
853
- value: valueData.value,
854
- label: `${valueData.value}`
853
+ value: optionData.value,
854
+ label: `${optionData.value}`
855
855
  };
856
856
  }
857
- if (_isValueSomething(valueData.value) && _isAllowedValue(valueData.label)) {
857
+ if (_isOptionSomething(optionData.value) && _isAllowedOption(optionData.label)) {
858
858
  // if both value and label are provided, use them as is, in this scenario, the value may also be an object
859
- return valueData;
859
+ return optionData;
860
860
  }
861
861
  }
862
862
  return null;
863
863
  }
864
- function _isAllowedValue(value) {
865
- return _isReadableType(value) && _isValueSomething(value);
864
+ function _isAllowedOption(option) {
865
+ return _isReadableType(option) && _isOptionSomething(option);
866
866
  }
867
- function _isReadableType(value) {
868
- return ['number', 'string', 'boolean'].includes(typeof value);
867
+ function _isReadableType(option) {
868
+ return ['number', 'string', 'boolean'].includes(typeof option);
869
869
  }
870
- function _isValueSomething(value) {
871
- return value || value === 0 || value === false;
870
+ function _isOptionSomething(option) {
871
+ return option || option === 0 || option === false;
872
872
  }
873
873
  function createEmptyOptions(options = {}) {
874
874
  const defaults = {};
875
875
 
876
- // provide default values if valuesKey and valuesExpression are not set
876
+ // provide default options if valuesKey and valuesExpression are not set
877
877
  if (!options.valuesKey && !options.valuesExpression) {
878
878
  defaults.values = [{
879
879
  label: 'Value',
@@ -896,72 +896,96 @@ const LOAD_STATES = {
896
896
  };
897
897
 
898
898
  /**
899
- * @typedef {Object} ValuesGetter
900
- * @property {Object[]} values - The values data
901
- * @property {(LOAD_STATES)} state - The values data's loading state, to use for conditional rendering
899
+ * @typedef {Object} OptionsGetter
900
+ * @property {Object[]} options - The options data
901
+ * @property {(LOAD_STATES)} loadState - The options data's loading state, to use for conditional rendering
902
902
  */
903
903
 
904
904
  /**
905
- * A hook to load values for single and multiselect components.
905
+ * A hook to load options for single and multiselect components.
906
906
  *
907
- * @param {Object} field - The form field to handle values for
908
- * @return {ValuesGetter} valuesGetter - A values getter object providing loading state and values
907
+ * @param {Object} field - The form field to handle options for
908
+ * @return {OptionsGetter} optionsGetter - A options getter object providing loading state and options
909
909
  */
910
- function useValuesAsync (field) {
910
+ function useOptionsAsync (field) {
911
911
  const {
912
- valuesExpression,
913
- valuesKey,
914
- values: staticValues
912
+ valuesExpression: optionsExpression,
913
+ valuesKey: optionsKey,
914
+ values: staticOptions
915
915
  } = field;
916
- const [valuesGetter, setValuesGetter] = useState({
917
- values: [],
916
+ const [optionsGetter, setOptionsGetter] = useState({
917
+ options: [],
918
918
  error: undefined,
919
- state: LOAD_STATES.LOADING
919
+ loadState: LOAD_STATES.LOADING
920
920
  });
921
921
  const initialData = useService('form')._getState().initialData;
922
- const expressionEvaluation = useExpressionEvaluation(valuesExpression);
923
- const evaluatedValues = useDeepCompareState(expressionEvaluation || [], []);
922
+ const expressionEvaluation = useExpressionEvaluation(optionsExpression);
923
+ const evaluatedOptions = useDeepCompareState(expressionEvaluation || [], []);
924
924
  useEffect(() => {
925
- let values = [];
925
+ let options = [];
926
926
 
927
- // dynamic values
928
- if (valuesKey !== undefined) {
929
- const keyedValues = (initialData || {})[valuesKey];
930
- if (keyedValues && Array.isArray(keyedValues)) {
931
- values = keyedValues;
927
+ // dynamic options
928
+ if (optionsKey !== undefined) {
929
+ const keyedOptions = (initialData || {})[optionsKey];
930
+ if (keyedOptions && Array.isArray(keyedOptions)) {
931
+ options = keyedOptions;
932
932
  }
933
933
 
934
- // static values
935
- } else if (staticValues !== undefined) {
936
- values = Array.isArray(staticValues) ? staticValues : [];
934
+ // static options
935
+ } else if (staticOptions !== undefined) {
936
+ options = Array.isArray(staticOptions) ? staticOptions : [];
937
937
 
938
938
  // expression
939
- } else if (valuesExpression) {
940
- if (evaluatedValues && Array.isArray(evaluatedValues)) {
941
- values = evaluatedValues;
939
+ } else if (optionsExpression) {
940
+ if (evaluatedOptions && Array.isArray(evaluatedOptions)) {
941
+ options = evaluatedOptions;
942
942
  }
943
943
  } else {
944
- setValuesGetter(buildErrorState('No values source defined in the form definition'));
944
+ setOptionsGetter(buildErrorState('No options source defined in the form definition'));
945
945
  return;
946
946
  }
947
947
 
948
948
  // normalize data to support primitives and partially defined objects
949
- values = normalizeValuesData(values);
950
- setValuesGetter(buildLoadedState(values));
951
- }, [valuesKey, staticValues, initialData, valuesExpression, evaluatedValues]);
952
- return valuesGetter;
949
+ options = normalizeOptionsData(options);
950
+ setOptionsGetter(buildLoadedState(options));
951
+ }, [optionsKey, staticOptions, initialData, optionsExpression, evaluatedOptions]);
952
+ return optionsGetter;
953
953
  }
954
954
  const buildErrorState = error => ({
955
- values: [],
955
+ options: [],
956
956
  error,
957
- state: LOAD_STATES.ERROR
957
+ loadState: LOAD_STATES.ERROR
958
958
  });
959
- const buildLoadedState = values => ({
960
- values,
959
+ const buildLoadedState = options => ({
960
+ options,
961
961
  error: undefined,
962
- state: LOAD_STATES.LOADED
962
+ loadState: LOAD_STATES.LOADED
963
963
  });
964
964
 
965
+ function useCleanupMultiSelectValues (props) {
966
+ const {
967
+ field,
968
+ options,
969
+ loadState,
970
+ onChange,
971
+ values
972
+ } = props;
973
+
974
+ // Ensures that the values are always a subset of the possible options
975
+ useEffect(() => {
976
+ if (loadState !== LOAD_STATES.LOADED) {
977
+ return;
978
+ }
979
+ const hasValuesNotInOptions = values.some(v => !options.map(o => o.value).includes(v));
980
+ if (hasValuesNotInOptions) {
981
+ onChange({
982
+ field,
983
+ value: values.filter(v => options.map(o => o.value).includes(v))
984
+ });
985
+ }
986
+ }, [field, options, onChange, JSON.stringify(values), loadState]);
987
+ }
988
+
965
989
  // config ///////////////////
966
990
 
967
991
  const MINUTES_IN_DAY = 60 * 24;
@@ -1175,7 +1199,7 @@ function sanitizeSingleSelectValue(options) {
1175
1199
  value
1176
1200
  } = options;
1177
1201
  try {
1178
- const validValues = normalizeValuesData(getValuesData(formField, data)).map(v => v.value);
1202
+ const validValues = normalizeOptionsData(getOptionsData(formField, data)).map(v => v.value);
1179
1203
  return validValues.includes(value) ? value : null;
1180
1204
  } catch (error) {
1181
1205
  // use default value in case of formatting error
@@ -1190,7 +1214,7 @@ function sanitizeMultiSelectValue(options) {
1190
1214
  value
1191
1215
  } = options;
1192
1216
  try {
1193
- const validValues = normalizeValuesData(getValuesData(formField, data)).map(v => v.value);
1217
+ const validValues = normalizeOptionsData(getOptionsData(formField, data)).map(v => v.value);
1194
1218
  return value.filter(v => validValues.includes(v));
1195
1219
  } catch (error) {
1196
1220
  // use default value in case of formatting error
@@ -1199,7 +1223,7 @@ function sanitizeMultiSelectValue(options) {
1199
1223
  }
1200
1224
  }
1201
1225
 
1202
- const type$b = 'checklist';
1226
+ const type$c = 'checklist';
1203
1227
  function Checklist(props) {
1204
1228
  const {
1205
1229
  disabled,
@@ -1208,7 +1232,7 @@ function Checklist(props) {
1208
1232
  onFocus,
1209
1233
  field,
1210
1234
  readonly,
1211
- value = []
1235
+ value: values = []
1212
1236
  } = props;
1213
1237
  const {
1214
1238
  description,
@@ -1221,7 +1245,7 @@ function Checklist(props) {
1221
1245
  required
1222
1246
  } = validate;
1223
1247
  const toggleCheckbox = v => {
1224
- let newValue = [...value];
1248
+ let newValue = [...values];
1225
1249
  if (!newValue.includes(v)) {
1226
1250
  newValue.push(v);
1227
1251
  } else {
@@ -1245,15 +1269,22 @@ function Checklist(props) {
1245
1269
  onFocus && onFocus();
1246
1270
  };
1247
1271
  const {
1248
- state: loadState,
1249
- values: options
1250
- } = useValuesAsync(field);
1272
+ loadState,
1273
+ options
1274
+ } = useOptionsAsync(field);
1275
+ useCleanupMultiSelectValues({
1276
+ field,
1277
+ loadState,
1278
+ options,
1279
+ values,
1280
+ onChange: props.onChange
1281
+ });
1251
1282
  const {
1252
1283
  formId
1253
1284
  } = useContext(FormContext$1);
1254
1285
  const errorMessageId = errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;
1255
1286
  return jsxs("div", {
1256
- class: classNames(formFieldClasses(type$b, {
1287
+ class: classNames(formFieldClasses(type$c, {
1257
1288
  errors,
1258
1289
  disabled,
1259
1290
  readonly
@@ -1267,11 +1298,11 @@ function Checklist(props) {
1267
1298
  id: prefixId(`${id}-${index}`, formId),
1268
1299
  label: v.label,
1269
1300
  class: classNames({
1270
- 'fjs-checked': value.includes(v.value)
1301
+ 'fjs-checked': values.includes(v.value)
1271
1302
  }),
1272
1303
  required: false,
1273
1304
  children: jsx("input", {
1274
- checked: value.includes(v.value),
1305
+ checked: values.includes(v.value),
1275
1306
  class: "fjs-input",
1276
1307
  disabled: disabled,
1277
1308
  readOnly: readonly,
@@ -1292,9 +1323,9 @@ function Checklist(props) {
1292
1323
  });
1293
1324
  }
1294
1325
  Checklist.config = {
1295
- type: type$b,
1326
+ type: type$c,
1296
1327
  keyed: true,
1297
- label: 'Checklist',
1328
+ label: 'Checkbox group',
1298
1329
  group: 'selection',
1299
1330
  emptyValue: [],
1300
1331
  sanitizeValue: sanitizeMultiSelectValue,
@@ -1444,16 +1475,16 @@ FormComponent$1.config = {
1444
1475
  })
1445
1476
  };
1446
1477
 
1447
- var _path$i;
1448
- 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); }
1478
+ var _path$k;
1479
+ 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); }
1449
1480
  var SvgCalendar = function SvgCalendar(props) {
1450
- return /*#__PURE__*/React.createElement("svg", _extends$l({
1481
+ return /*#__PURE__*/React.createElement("svg", _extends$m({
1451
1482
  xmlns: "http://www.w3.org/2000/svg",
1452
1483
  width: 14,
1453
1484
  height: 15,
1454
1485
  fill: "none",
1455
1486
  viewBox: "0 0 28 30"
1456
- }, props), _path$i || (_path$i = /*#__PURE__*/React.createElement("path", {
1487
+ }, props), _path$k || (_path$k = /*#__PURE__*/React.createElement("path", {
1457
1488
  fill: "currentColor",
1458
1489
  fillRule: "evenodd",
1459
1490
  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",
@@ -1716,19 +1747,19 @@ function Datepicker(props) {
1716
1747
  });
1717
1748
  }
1718
1749
 
1719
- var _path$h, _path2$3;
1720
- 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); }
1750
+ var _path$j, _path2$4;
1751
+ 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); }
1721
1752
  var SvgClock = function SvgClock(props) {
1722
- return /*#__PURE__*/React.createElement("svg", _extends$k({
1753
+ return /*#__PURE__*/React.createElement("svg", _extends$l({
1723
1754
  xmlns: "http://www.w3.org/2000/svg",
1724
1755
  width: 16,
1725
1756
  height: 16,
1726
1757
  fill: "none",
1727
1758
  viewBox: "0 0 28 29"
1728
- }, props), _path$h || (_path$h = /*#__PURE__*/React.createElement("path", {
1759
+ }, props), _path$j || (_path$j = /*#__PURE__*/React.createElement("path", {
1729
1760
  fill: "currentColor",
1730
1761
  d: "M13 14.41 18.59 20 20 18.59l-5-5.01V5h-2v9.41Z"
1731
- })), _path2$3 || (_path2$3 = /*#__PURE__*/React.createElement("path", {
1762
+ })), _path2$4 || (_path2$4 = /*#__PURE__*/React.createElement("path", {
1732
1763
  fill: "currentColor",
1733
1764
  fillRule: "evenodd",
1734
1765
  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",
@@ -1999,7 +2030,7 @@ function Timepicker(props) {
1999
2030
  });
2000
2031
  }
2001
2032
 
2002
- const type$a = 'datetime';
2033
+ const type$b = 'datetime';
2003
2034
  function Datetime(props) {
2004
2035
  const {
2005
2036
  disabled,
@@ -2171,7 +2202,7 @@ function Datetime(props) {
2171
2202
  'aria-describedby': errorMessageId
2172
2203
  };
2173
2204
  return jsxs("div", {
2174
- class: formFieldClasses(type$a, {
2205
+ class: formFieldClasses(type$b, {
2175
2206
  errors: allErrors,
2176
2207
  disabled,
2177
2208
  readonly
@@ -2195,7 +2226,7 @@ function Datetime(props) {
2195
2226
  });
2196
2227
  }
2197
2228
  Datetime.config = {
2198
- type: type$a,
2229
+ type: type$b,
2199
2230
  keyed: true,
2200
2231
  label: 'Date time',
2201
2232
  group: 'basic-input',
@@ -2375,7 +2406,7 @@ Group.config = {
2375
2406
  type: 'group',
2376
2407
  pathed: true,
2377
2408
  label: 'Group',
2378
- group: 'presentation',
2409
+ group: 'container',
2379
2410
  create: (options = {}) => ({
2380
2411
  components: [],
2381
2412
  showOutline: true,
@@ -2389,6 +2420,7 @@ const ALLOWED_NODES = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'em', 'a', 'p
2389
2420
  const ALLOWED_ATTRIBUTES = ['align', 'alt', 'class', 'href', 'id', 'name', 'rel', 'target', 'src'];
2390
2421
  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
2391
2422
  const ALLOWED_IMAGE_SRC_PATTERN = /^(https?|data):.*/i; // eslint-disable-line no-useless-escape
2423
+ const ALLOWED_IFRAME_SRC_PATTERN = /^(https):\/\/*/i; // eslint-disable-line no-useless-escape
2392
2424
  const ATTR_WHITESPACE_PATTERN = /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g; // eslint-disable-line no-control-regex
2393
2425
 
2394
2426
  const FORM_ELEMENT = document.createElement('form');
@@ -2429,6 +2461,18 @@ function sanitizeImageSource(src) {
2429
2461
  return valid ? src : '';
2430
2462
  }
2431
2463
 
2464
+ /**
2465
+ * Sanitizes an iframe source to ensure we only allow for links
2466
+ * that start with http(s).
2467
+ *
2468
+ * @param {string} src
2469
+ * @returns {string}
2470
+ */
2471
+ function sanitizeIFrameSource(src) {
2472
+ const valid = ALLOWED_IFRAME_SRC_PATTERN.test(src);
2473
+ return valid ? src : '';
2474
+ }
2475
+
2432
2476
  /**
2433
2477
  * Recursively sanitize a HTML node, potentially
2434
2478
  * removing it, its children or attributes.
@@ -2510,9 +2554,77 @@ function isValidAttribute(lcTag, lcName, value) {
2510
2554
  return true;
2511
2555
  }
2512
2556
 
2513
- 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); }
2557
+ const type$a = 'iframe';
2558
+ const DEFAULT_HEIGHT = 300;
2559
+ function IFrame(props) {
2560
+ const {
2561
+ field,
2562
+ disabled,
2563
+ readonly
2564
+ } = props;
2565
+ const {
2566
+ height = DEFAULT_HEIGHT,
2567
+ id,
2568
+ label,
2569
+ url
2570
+ } = field;
2571
+ const evaluatedUrl = useSingleLineTemplateEvaluation(url, {
2572
+ debug: true
2573
+ });
2574
+ const safeUrl = useMemo(() => sanitizeIFrameSource(evaluatedUrl), [evaluatedUrl]);
2575
+ const evaluatedLabel = useSingleLineTemplateEvaluation(label, {
2576
+ debug: true
2577
+ });
2578
+ const {
2579
+ formId
2580
+ } = useContext(FormContext$1);
2581
+ return jsxs("div", {
2582
+ class: formFieldClasses(type$a, {
2583
+ disabled,
2584
+ readonly
2585
+ }),
2586
+ children: [jsx(Label, {
2587
+ id: prefixId(id, formId),
2588
+ label: evaluatedLabel
2589
+ }), !evaluatedUrl && jsx(IFramePlaceholder, {
2590
+ text: "No content to show."
2591
+ }), evaluatedUrl && safeUrl && jsx("iframe", {
2592
+ src: safeUrl,
2593
+ title: evaluatedLabel,
2594
+ height: height,
2595
+ class: "fjs-iframe",
2596
+ id: prefixId(id, formId),
2597
+ sandbox: ""
2598
+ }), evaluatedUrl && !safeUrl && jsx(IFramePlaceholder, {
2599
+ text: "External content couldn't be loaded."
2600
+ })]
2601
+ });
2602
+ }
2603
+ function IFramePlaceholder(props) {
2604
+ const {
2605
+ text = 'iFrame'
2606
+ } = props;
2607
+ return jsx("div", {
2608
+ class: "fjs-iframe-placeholder",
2609
+ children: jsx("p", {
2610
+ class: "fjs-iframe-placeholder-text",
2611
+ children: text
2612
+ })
2613
+ });
2614
+ }
2615
+ IFrame.config = {
2616
+ type: type$a,
2617
+ keyed: false,
2618
+ label: 'iFrame',
2619
+ group: 'container',
2620
+ create: (options = {}) => ({
2621
+ ...options
2622
+ })
2623
+ };
2624
+
2625
+ 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); }
2514
2626
  var SvgImagePlaceholder = function SvgImagePlaceholder(props) {
2515
- return /*#__PURE__*/React.createElement("svg", _extends$j({
2627
+ return /*#__PURE__*/React.createElement("svg", _extends$k({
2516
2628
  xmlns: "http://www.w3.org/2000/svg",
2517
2629
  xmlSpace: "preserve",
2518
2630
  width: 64,
@@ -2617,14 +2729,14 @@ function TemplatedInputAdorner(props) {
2617
2729
  });
2618
2730
  }
2619
2731
 
2620
- var _path$g;
2621
- 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); }
2732
+ var _path$i;
2733
+ 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); }
2622
2734
  var SvgAngelDown = function SvgAngelDown(props) {
2623
- return /*#__PURE__*/React.createElement("svg", _extends$i({
2735
+ return /*#__PURE__*/React.createElement("svg", _extends$j({
2624
2736
  xmlns: "http://www.w3.org/2000/svg",
2625
2737
  width: 8,
2626
2738
  height: 8
2627
- }, props), _path$g || (_path$g = /*#__PURE__*/React.createElement("path", {
2739
+ }, props), _path$i || (_path$i = /*#__PURE__*/React.createElement("path", {
2628
2740
  fill: "currentColor",
2629
2741
  fillRule: "evenodd",
2630
2742
  stroke: "currentColor",
@@ -2635,14 +2747,14 @@ var SvgAngelDown = function SvgAngelDown(props) {
2635
2747
  };
2636
2748
  var AngelDownIcon = SvgAngelDown;
2637
2749
 
2638
- var _path$f;
2639
- 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); }
2750
+ var _path$h;
2751
+ 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); }
2640
2752
  var SvgAngelUp = function SvgAngelUp(props) {
2641
- return /*#__PURE__*/React.createElement("svg", _extends$h({
2753
+ return /*#__PURE__*/React.createElement("svg", _extends$i({
2642
2754
  xmlns: "http://www.w3.org/2000/svg",
2643
2755
  width: 8,
2644
2756
  height: 8
2645
- }, props), _path$f || (_path$f = /*#__PURE__*/React.createElement("path", {
2757
+ }, props), _path$h || (_path$h = /*#__PURE__*/React.createElement("path", {
2646
2758
  fill: "currentColor",
2647
2759
  fillRule: "evenodd",
2648
2760
  stroke: "currentColor",
@@ -2899,13 +3011,10 @@ Numberfield.config = {
2899
3011
  value,
2900
3012
  formField
2901
3013
  }) => {
2902
- // null state is allowed
2903
- if (isNullEquivalentValue(value)) return null;
3014
+ // invalid value types are sanitized to null
3015
+ if (isNullEquivalentValue(value) || !isValidNumber(value)) return null;
2904
3016
 
2905
- // if data cannot be parsed as a valid number, go into invalid NaN state
2906
- if (!isValidNumber(value)) return 'NaN';
2907
-
2908
- // otherwise parse to formatting type
3017
+ // otherwise, we return a string or a number depending on the form field configuration
2909
3018
  return formField.serializeToString ? value.toString() : Number(value);
2910
3019
  },
2911
3020
  create: (options = {}) => ({
@@ -2913,6 +3022,30 @@ Numberfield.config = {
2913
3022
  })
2914
3023
  };
2915
3024
 
3025
+ function useCleanupSingleSelectValue (props) {
3026
+ const {
3027
+ field,
3028
+ options,
3029
+ loadState,
3030
+ onChange,
3031
+ value
3032
+ } = props;
3033
+
3034
+ // Ensures that the value is always one of the possible options
3035
+ useEffect(() => {
3036
+ if (loadState !== LOAD_STATES.LOADED) {
3037
+ return;
3038
+ }
3039
+ const hasValueNotInOptions = value && !options.map(o => o.value).includes(value);
3040
+ if (hasValueNotInOptions) {
3041
+ onChange({
3042
+ field,
3043
+ value: null
3044
+ });
3045
+ }
3046
+ }, [field, options, onChange, value, loadState]);
3047
+ }
3048
+
2916
3049
  const type$7 = 'radio';
2917
3050
  function Radio(props) {
2918
3051
  const {
@@ -2953,9 +3086,16 @@ function Radio(props) {
2953
3086
  onFocus && onFocus();
2954
3087
  };
2955
3088
  const {
2956
- state: loadState,
2957
- values: options
2958
- } = useValuesAsync(field);
3089
+ loadState,
3090
+ options
3091
+ } = useOptionsAsync(field);
3092
+ useCleanupSingleSelectValue({
3093
+ field,
3094
+ loadState,
3095
+ options,
3096
+ value,
3097
+ onChange: props.onChange
3098
+ });
2959
3099
  const {
2960
3100
  formId
2961
3101
  } = useContext(FormContext$1);
@@ -3002,21 +3142,21 @@ function Radio(props) {
3002
3142
  Radio.config = {
3003
3143
  type: type$7,
3004
3144
  keyed: true,
3005
- label: 'Radio',
3145
+ label: 'Radio group',
3006
3146
  group: 'selection',
3007
3147
  emptyValue: null,
3008
3148
  sanitizeValue: sanitizeSingleSelectValue,
3009
3149
  create: createEmptyOptions
3010
3150
  };
3011
3151
 
3012
- var _path$e;
3013
- 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); }
3152
+ var _path$g;
3153
+ 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); }
3014
3154
  var SvgXMark = function SvgXMark(props) {
3015
- return /*#__PURE__*/React.createElement("svg", _extends$g({
3155
+ return /*#__PURE__*/React.createElement("svg", _extends$h({
3016
3156
  xmlns: "http://www.w3.org/2000/svg",
3017
3157
  width: 8,
3018
3158
  height: 8
3019
- }, props), _path$e || (_path$e = /*#__PURE__*/React.createElement("path", {
3159
+ }, props), _path$g || (_path$g = /*#__PURE__*/React.createElement("path", {
3020
3160
  fill: "currentColor",
3021
3161
  fillRule: "evenodd",
3022
3162
  stroke: "currentColor",
@@ -3048,9 +3188,16 @@ function SearchableSelect(props) {
3048
3188
  const searchbarRef = useRef();
3049
3189
  const eventBus = useService('eventBus');
3050
3190
  const {
3051
- state: loadState,
3052
- values: options
3053
- } = useValuesAsync(field);
3191
+ loadState,
3192
+ options
3193
+ } = useOptionsAsync(field);
3194
+ useCleanupSingleSelectValue({
3195
+ field,
3196
+ loadState,
3197
+ options,
3198
+ value,
3199
+ onChange: props.onChange
3200
+ });
3054
3201
 
3055
3202
  // 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
3056
3203
  const valueToOptionMap = useMemo(() => Object.assign({}, ...options.map((o, x) => ({
@@ -3208,10 +3355,18 @@ function SimpleSelect(props) {
3208
3355
  } = useContext(FormContext$1);
3209
3356
  const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);
3210
3357
  const selectRef = useRef();
3358
+ const inputRef = useRef();
3211
3359
  const {
3212
- state: loadState,
3213
- values: options
3214
- } = useValuesAsync(field);
3360
+ loadState,
3361
+ options
3362
+ } = useOptionsAsync(field);
3363
+ useCleanupSingleSelectValue({
3364
+ field,
3365
+ loadState,
3366
+ options,
3367
+ value,
3368
+ onChange: props.onChange
3369
+ });
3215
3370
 
3216
3371
  // 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
3217
3372
  const valueToOptionMap = useMemo(() => Object.assign({}, ...options.map((o, x) => ({
@@ -3232,12 +3387,12 @@ function SimpleSelect(props) {
3232
3387
  return ds;
3233
3388
  }, [disabled, isDropdownExpanded, loadState, value]);
3234
3389
  const onMouseDown = useCallback(e => {
3235
- const select = selectRef.current;
3390
+ const input = inputRef.current;
3236
3391
  setIsDropdownExpanded(!isDropdownExpanded);
3237
3392
  if (isDropdownExpanded) {
3238
- select.blur();
3393
+ input.blur();
3239
3394
  } else {
3240
- select.focus();
3395
+ input.focus();
3241
3396
  }
3242
3397
  e.preventDefault();
3243
3398
  }, [isDropdownExpanded]);
@@ -3274,6 +3429,7 @@ function SimpleSelect(props) {
3274
3429
  id: prefixId(`${id}-display`, formId),
3275
3430
  children: valueLabel || 'Select'
3276
3431
  }), !disabled && jsx("input", {
3432
+ ref: inputRef,
3277
3433
  id: prefixId(`${id}-search`, formId),
3278
3434
  class: "fjs-select-hidden-input",
3279
3435
  value: valueLabel,
@@ -3472,34 +3628,36 @@ function Taglist(props) {
3472
3628
  } = useContext(FormContext$1);
3473
3629
  const errorMessageId = errors.length === 0 ? undefined : `${prefixId(id, formId)}-error-message`;
3474
3630
  const [filter, setFilter] = useState('');
3475
- const [filteredOptions, setFilteredOptions] = useState([]);
3476
3631
  const [isDropdownExpanded, setIsDropdownExpanded] = useState(false);
3477
- const [hasOptionsLeft, setHasOptionsLeft] = useState(true);
3478
3632
  const [isEscapeClosed, setIsEscapeClose] = useState(false);
3479
3633
  const focusScopeRef = useRef();
3480
3634
  const inputRef = useRef();
3481
3635
  const eventBus = useService('eventBus');
3482
3636
  const {
3483
- state: loadState,
3484
- values: options
3485
- } = useValuesAsync(field);
3637
+ loadState,
3638
+ options
3639
+ } = useOptionsAsync(field);
3640
+ useCleanupMultiSelectValues({
3641
+ field,
3642
+ loadState,
3643
+ options,
3644
+ values,
3645
+ onChange: props.onChange
3646
+ });
3486
3647
 
3487
3648
  // 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
3488
3649
  const valueToOptionMap = useMemo(() => Object.assign({}, ...options.map((o, x) => ({
3489
3650
  [o.value]: options[x]
3490
3651
  }))), [options]);
3652
+ const hasOptionsLeft = useMemo(() => options.length > values.length, [options.length, values.length]);
3491
3653
 
3492
3654
  // Usage of stringify is necessary here because we want this effect to only trigger when there is a value change to the array
3493
- useEffect(() => {
3494
- if (loadState === LOAD_STATES.LOADED) {
3495
- setFilteredOptions(options.filter(o => o.label && o.value && o.label.toLowerCase().includes(filter.toLowerCase()) && !values.includes(o.value)));
3496
- } else {
3497
- setFilteredOptions([]);
3655
+ const filteredOptions = useMemo(() => {
3656
+ if (loadState !== LOAD_STATES.LOADED) {
3657
+ return [];
3498
3658
  }
3499
- }, [filter, JSON.stringify(values), options, loadState]);
3500
- useEffect(() => {
3501
- setHasOptionsLeft(options.length > values.length);
3502
- }, [options.length, values.length]);
3659
+ return options.filter(o => o.label && o.value && o.label.toLowerCase().includes(filter.toLowerCase()) && !values.includes(o.value));
3660
+ }, [filter, options, JSON.stringify(values), loadState]);
3503
3661
  const selectValue = value => {
3504
3662
  if (filter) {
3505
3663
  setFilter('');
@@ -3626,7 +3784,7 @@ function Taglist(props) {
3626
3784
  onMouseDown: e => e.preventDefault(),
3627
3785
  children: [jsx("span", {
3628
3786
  class: "fjs-taglist-tag-label",
3629
- children: valueToOptionMap[v] ? valueToOptionMap[v].label : `unexpected value{${v}}`
3787
+ children: valueToOptionMap[v] ? valueToOptionMap[v].label : undefined
3630
3788
  }), !disabled && !readonly && jsx("button", {
3631
3789
  type: "button",
3632
3790
  title: "Remove tag",
@@ -3847,7 +4005,7 @@ Textfield.config = {
3847
4005
  sanitizeValue: ({
3848
4006
  value
3849
4007
  }) => {
3850
- if (isArray(value) || isObject(value)) {
4008
+ if (isArray(value) || isObject(value) || isNil(value)) {
3851
4009
  return '';
3852
4010
  }
3853
4011
 
@@ -3938,7 +4096,7 @@ Textarea.config = {
3938
4096
  emptyValue: '',
3939
4097
  sanitizeValue: ({
3940
4098
  value
3941
- }) => isArray(value) || isObject(value) ? '' : String(value),
4099
+ }) => isArray(value) || isObject(value) || isNil(value) ? '' : String(value),
3942
4100
  create: (options = {}) => ({
3943
4101
  ...options
3944
4102
  })
@@ -3962,84 +4120,64 @@ const autoSizeTextarea = textarea => {
3962
4120
  textarea.style.overflow = calculatedHeight > maxHeight ? 'visible' : 'hidden';
3963
4121
  };
3964
4122
 
3965
- var _path$d;
3966
- 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); }
4123
+ var _path$f;
4124
+ 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); }
3967
4125
  var SvgButton = function SvgButton(props) {
3968
- return /*#__PURE__*/React.createElement("svg", _extends$f({
4126
+ return /*#__PURE__*/React.createElement("svg", _extends$g({
3969
4127
  xmlns: "http://www.w3.org/2000/svg",
3970
4128
  width: 54,
3971
4129
  height: 54,
3972
4130
  fill: "currentcolor"
3973
- }, props), _path$d || (_path$d = /*#__PURE__*/React.createElement("path", {
4131
+ }, props), _path$f || (_path$f = /*#__PURE__*/React.createElement("path", {
3974
4132
  fillRule: "evenodd",
3975
4133
  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"
3976
4134
  })));
3977
4135
  };
3978
4136
  var ButtonIcon = SvgButton;
3979
4137
 
3980
- var _path$c;
3981
- 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); }
4138
+ var _path$e;
4139
+ 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); }
3982
4140
  var SvgCheckbox = function SvgCheckbox(props) {
3983
- return /*#__PURE__*/React.createElement("svg", _extends$e({
4141
+ return /*#__PURE__*/React.createElement("svg", _extends$f({
3984
4142
  xmlns: "http://www.w3.org/2000/svg",
3985
4143
  width: 54,
3986
4144
  height: 54,
3987
4145
  fill: "currentcolor"
3988
- }, props), _path$c || (_path$c = /*#__PURE__*/React.createElement("path", {
4146
+ }, props), _path$e || (_path$e = /*#__PURE__*/React.createElement("path", {
3989
4147
  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"
3990
4148
  })));
3991
4149
  };
3992
4150
  var CheckboxIcon = SvgCheckbox;
3993
4151
 
3994
- var _g, _use, _use2, _use3, _defs;
3995
- 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); }
4152
+ var _path$d;
4153
+ 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); }
3996
4154
  var SvgChecklist = function SvgChecklist(props) {
3997
- return /*#__PURE__*/React.createElement("svg", _extends$d({
4155
+ return /*#__PURE__*/React.createElement("svg", _extends$e({
3998
4156
  xmlns: "http://www.w3.org/2000/svg",
3999
- xmlnsXlink: "http://www.w3.org/1999/xlink",
4000
4157
  width: 54,
4001
4158
  height: 54,
4002
- fill: "currentcolor"
4003
- }, props), _g || (_g = /*#__PURE__*/React.createElement("g", {
4004
- fillRule: "evenodd"
4005
- }, /*#__PURE__*/React.createElement("use", {
4006
- xlinkHref: "#Checklist_svg__a"
4007
- }), /*#__PURE__*/React.createElement("use", {
4008
- xlinkHref: "#Checklist_svg__a",
4009
- y: 24
4010
- }), /*#__PURE__*/React.createElement("use", {
4011
- xlinkHref: "#Checklist_svg__a",
4012
- y: 12
4013
- }))), _use || (_use = /*#__PURE__*/React.createElement("use", {
4014
- xlinkHref: "#Checklist_svg__b"
4015
- })), _use2 || (_use2 = /*#__PURE__*/React.createElement("use", {
4016
- xlinkHref: "#Checklist_svg__b",
4017
- y: 12
4018
- })), _use3 || (_use3 = /*#__PURE__*/React.createElement("use", {
4019
- xlinkHref: "#Checklist_svg__b",
4020
- y: 24
4021
- })), _defs || (_defs = /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("path", {
4022
- id: "Checklist_svg__a",
4023
- 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"
4024
- }), /*#__PURE__*/React.createElement("path", {
4025
- id: "Checklist_svg__b",
4026
- 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"
4027
- }))));
4159
+ fill: "none"
4160
+ }, props), _path$d || (_path$d = /*#__PURE__*/React.createElement("path", {
4161
+ fill: "currentColor",
4162
+ fillRule: "evenodd",
4163
+ 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",
4164
+ clipRule: "evenodd"
4165
+ })));
4028
4166
  };
4029
4167
  var ChecklistIcon = SvgChecklist;
4030
4168
 
4031
- var _path$b, _path2$2, _path3;
4032
- 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); }
4169
+ var _path$c, _path2$3, _path3;
4170
+ 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); }
4033
4171
  var SvgDatetime = function SvgDatetime(props) {
4034
- return /*#__PURE__*/React.createElement("svg", _extends$c({
4172
+ return /*#__PURE__*/React.createElement("svg", _extends$d({
4035
4173
  xmlns: "http://www.w3.org/2000/svg",
4036
4174
  width: 54,
4037
4175
  height: 54,
4038
4176
  fill: "currentcolor"
4039
- }, props), _path$b || (_path$b = /*#__PURE__*/React.createElement("path", {
4177
+ }, props), _path$c || (_path$c = /*#__PURE__*/React.createElement("path", {
4040
4178
  fillRule: "evenodd",
4041
4179
  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"
4042
- })), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", {
4180
+ })), _path2$3 || (_path2$3 = /*#__PURE__*/React.createElement("path", {
4043
4181
  d: "m35.13 37.603 1.237-1.237-3.468-3.475v-5.926h-1.754v6.654l3.984 3.984Z"
4044
4182
  })), _path3 || (_path3 = /*#__PURE__*/React.createElement("path", {
4045
4183
  fillRule: "evenodd",
@@ -4048,27 +4186,27 @@ var SvgDatetime = function SvgDatetime(props) {
4048
4186
  };
4049
4187
  var DatetimeIcon = SvgDatetime;
4050
4188
 
4051
- var _path$a, _path2$1;
4052
- 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); }
4189
+ var _path$b, _path2$2;
4190
+ 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); }
4053
4191
  var SvgTaglist = function SvgTaglist(props) {
4054
- return /*#__PURE__*/React.createElement("svg", _extends$b({
4192
+ return /*#__PURE__*/React.createElement("svg", _extends$c({
4055
4193
  xmlns: "http://www.w3.org/2000/svg",
4056
4194
  width: 54,
4057
4195
  height: 54,
4058
4196
  fill: "currentcolor"
4059
- }, props), _path$a || (_path$a = /*#__PURE__*/React.createElement("path", {
4197
+ }, props), _path$b || (_path$b = /*#__PURE__*/React.createElement("path", {
4060
4198
  fillRule: "evenodd",
4061
4199
  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"
4062
- })), _path2$1 || (_path2$1 = /*#__PURE__*/React.createElement("path", {
4200
+ })), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", {
4063
4201
  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"
4064
4202
  })));
4065
4203
  };
4066
4204
  var TaglistIcon = SvgTaglist;
4067
4205
 
4068
4206
  var _rect, _rect2, _rect3;
4069
- 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); }
4207
+ 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); }
4070
4208
  var SvgForm = function SvgForm(props) {
4071
- return /*#__PURE__*/React.createElement("svg", _extends$a({
4209
+ return /*#__PURE__*/React.createElement("svg", _extends$b({
4072
4210
  xmlns: "http://www.w3.org/2000/svg",
4073
4211
  width: 54,
4074
4212
  height: 54
@@ -4094,9 +4232,24 @@ var SvgForm = function SvgForm(props) {
4094
4232
  };
4095
4233
  var FormIcon = SvgForm;
4096
4234
 
4235
+ var _path$a;
4236
+ 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); }
4237
+ var SvgGroup = function SvgGroup(props) {
4238
+ return /*#__PURE__*/React.createElement("svg", _extends$a({
4239
+ xmlns: "http://www.w3.org/2000/svg",
4240
+ width: 54,
4241
+ height: 54,
4242
+ fill: "currentcolor"
4243
+ }, props), _path$a || (_path$a = /*#__PURE__*/React.createElement("path", {
4244
+ fillRule: "evenodd",
4245
+ 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"
4246
+ })));
4247
+ };
4248
+ var GroupIcon = SvgGroup;
4249
+
4097
4250
  var _path$9;
4098
4251
  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); }
4099
- var SvgGroup = function SvgGroup(props) {
4252
+ var SvgNumber = function SvgNumber(props) {
4100
4253
  return /*#__PURE__*/React.createElement("svg", _extends$9({
4101
4254
  xmlns: "http://www.w3.org/2000/svg",
4102
4255
  width: 54,
@@ -4104,58 +4257,58 @@ var SvgGroup = function SvgGroup(props) {
4104
4257
  fill: "currentcolor"
4105
4258
  }, props), _path$9 || (_path$9 = /*#__PURE__*/React.createElement("path", {
4106
4259
  fillRule: "evenodd",
4107
- 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"
4260
+ 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"
4108
4261
  })));
4109
4262
  };
4110
- var GroupIcon = SvgGroup;
4263
+ var NumberIcon = SvgNumber;
4111
4264
 
4112
4265
  var _path$8;
4113
4266
  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); }
4114
- var SvgNumber = function SvgNumber(props) {
4267
+ var SvgRadio = function SvgRadio(props) {
4115
4268
  return /*#__PURE__*/React.createElement("svg", _extends$8({
4116
4269
  xmlns: "http://www.w3.org/2000/svg",
4117
4270
  width: 54,
4118
4271
  height: 54,
4119
4272
  fill: "currentcolor"
4120
4273
  }, props), _path$8 || (_path$8 = /*#__PURE__*/React.createElement("path", {
4121
- fillRule: "evenodd",
4122
- 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"
4274
+ 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"
4123
4275
  })));
4124
4276
  };
4125
- var NumberIcon = SvgNumber;
4277
+ var RadioIcon = SvgRadio;
4126
4278
 
4127
4279
  var _path$7;
4128
4280
  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); }
4129
- var SvgRadio = function SvgRadio(props) {
4281
+ var SvgSelect = function SvgSelect(props) {
4130
4282
  return /*#__PURE__*/React.createElement("svg", _extends$7({
4131
4283
  xmlns: "http://www.w3.org/2000/svg",
4132
4284
  width: 54,
4133
4285
  height: 54,
4134
4286
  fill: "currentcolor"
4135
4287
  }, props), _path$7 || (_path$7 = /*#__PURE__*/React.createElement("path", {
4136
- 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"
4288
+ fillRule: "evenodd",
4289
+ 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"
4137
4290
  })));
4138
4291
  };
4139
- var RadioIcon = SvgRadio;
4292
+ var SelectIcon = SvgSelect;
4140
4293
 
4141
4294
  var _path$6;
4142
4295
  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); }
4143
- var SvgSelect = function SvgSelect(props) {
4296
+ var SvgSeparator = function SvgSeparator(props) {
4144
4297
  return /*#__PURE__*/React.createElement("svg", _extends$6({
4145
4298
  xmlns: "http://www.w3.org/2000/svg",
4146
4299
  width: 54,
4147
4300
  height: 54,
4148
- fill: "currentcolor"
4301
+ fill: "none"
4149
4302
  }, props), _path$6 || (_path$6 = /*#__PURE__*/React.createElement("path", {
4150
- fillRule: "evenodd",
4151
- 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"
4303
+ fill: "currentColor",
4304
+ 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"
4152
4305
  })));
4153
4306
  };
4154
- var SelectIcon = SvgSelect;
4307
+ var SeparatorIcon = SvgSeparator;
4155
4308
 
4156
4309
  var _path$5;
4157
4310
  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); }
4158
- var SvgSeparator = function SvgSeparator(props) {
4311
+ var SvgSpacer = function SvgSpacer(props) {
4159
4312
  return /*#__PURE__*/React.createElement("svg", _extends$5({
4160
4313
  xmlns: "http://www.w3.org/2000/svg",
4161
4314
  width: 54,
@@ -4163,43 +4316,43 @@ var SvgSeparator = function SvgSeparator(props) {
4163
4316
  fill: "none"
4164
4317
  }, props), _path$5 || (_path$5 = /*#__PURE__*/React.createElement("path", {
4165
4318
  fill: "currentColor",
4166
- 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"
4319
+ 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"
4167
4320
  })));
4168
4321
  };
4169
- var SeparatorIcon = SvgSeparator;
4322
+ var SpacerIcon = SvgSpacer;
4170
4323
 
4171
4324
  var _path$4;
4172
4325
  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); }
4173
- var SvgSpacer = function SvgSpacer(props) {
4326
+ var SvgText = function SvgText(props) {
4174
4327
  return /*#__PURE__*/React.createElement("svg", _extends$4({
4175
4328
  xmlns: "http://www.w3.org/2000/svg",
4176
4329
  width: 54,
4177
4330
  height: 54,
4178
- fill: "none"
4331
+ fill: "currentcolor"
4179
4332
  }, props), _path$4 || (_path$4 = /*#__PURE__*/React.createElement("path", {
4180
- fill: "currentColor",
4181
- 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"
4333
+ 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"
4182
4334
  })));
4183
4335
  };
4184
- var SpacerIcon = SvgSpacer;
4336
+ var TextIcon = SvgText;
4185
4337
 
4186
4338
  var _path$3;
4187
4339
  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); }
4188
- var SvgText = function SvgText(props) {
4340
+ var SvgTextfield = function SvgTextfield(props) {
4189
4341
  return /*#__PURE__*/React.createElement("svg", _extends$3({
4190
4342
  xmlns: "http://www.w3.org/2000/svg",
4191
4343
  width: 54,
4192
4344
  height: 54,
4193
4345
  fill: "currentcolor"
4194
4346
  }, props), _path$3 || (_path$3 = /*#__PURE__*/React.createElement("path", {
4195
- 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"
4347
+ fillRule: "evenodd",
4348
+ 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"
4196
4349
  })));
4197
4350
  };
4198
- var TextIcon = SvgText;
4351
+ var TextfieldIcon = SvgTextfield;
4199
4352
 
4200
4353
  var _path$2;
4201
4354
  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); }
4202
- var SvgTextfield = function SvgTextfield(props) {
4355
+ var SvgTextarea = function SvgTextarea(props) {
4203
4356
  return /*#__PURE__*/React.createElement("svg", _extends$2({
4204
4357
  xmlns: "http://www.w3.org/2000/svg",
4205
4358
  width: 54,
@@ -4207,25 +4360,30 @@ var SvgTextfield = function SvgTextfield(props) {
4207
4360
  fill: "currentcolor"
4208
4361
  }, props), _path$2 || (_path$2 = /*#__PURE__*/React.createElement("path", {
4209
4362
  fillRule: "evenodd",
4210
- 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"
4363
+ 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"
4211
4364
  })));
4212
4365
  };
4213
- var TextfieldIcon = SvgTextfield;
4366
+ var TextareaIcon = SvgTextarea;
4214
4367
 
4215
- var _path$1;
4368
+ var _path$1, _path2$1;
4216
4369
  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); }
4217
- var SvgTextarea = function SvgTextarea(props) {
4370
+ var SvgIFrame = function SvgIFrame(props) {
4218
4371
  return /*#__PURE__*/React.createElement("svg", _extends$1({
4219
4372
  xmlns: "http://www.w3.org/2000/svg",
4220
4373
  width: 54,
4221
4374
  height: 54,
4222
- fill: "currentcolor"
4375
+ fill: "none"
4223
4376
  }, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
4377
+ fill: "currentcolor",
4378
+ 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"
4379
+ })), _path2$1 || (_path2$1 = /*#__PURE__*/React.createElement("path", {
4380
+ fill: "currentcolor",
4224
4381
  fillRule: "evenodd",
4225
- 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"
4382
+ 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",
4383
+ clipRule: "evenodd"
4226
4384
  })));
4227
4385
  };
4228
- var TextareaIcon = SvgTextarea;
4386
+ var IFrameIcon = SvgIFrame;
4229
4387
 
4230
4388
  var _path, _path2;
4231
4389
  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); }
@@ -4255,6 +4413,7 @@ const iconsByType = type => {
4255
4413
  columns: GroupIcon,
4256
4414
  datetime: DatetimeIcon,
4257
4415
  group: GroupIcon,
4416
+ iframe: IFrameIcon,
4258
4417
  image: ImageIcon,
4259
4418
  number: NumberIcon,
4260
4419
  radio: RadioIcon,
@@ -4269,7 +4428,7 @@ const iconsByType = type => {
4269
4428
  }[type];
4270
4429
  };
4271
4430
 
4272
- const formFields = [Button, Checkbox, Checklist, FormComponent$1, Group, Image, Numberfield, Datetime, Radio, Select, Spacer, Separator, Taglist, Text, Textfield, Textarea];
4431
+ const formFields = [Button, Checkbox, Checklist, FormComponent$1, Group, IFrame, Image, Numberfield, Datetime, Radio, Select, Spacer, Separator, Taglist, Text, Textfield, Textarea];
4273
4432
 
4274
4433
  class FormFields {
4275
4434
  constructor() {
@@ -4341,8 +4500,8 @@ function createFormContainer(prefix = 'fjs') {
4341
4500
  return container;
4342
4501
  }
4343
4502
 
4344
- const EXPRESSION_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'conditional.hide', 'description', 'label', 'source', 'readonly', 'text', 'validate.min', 'validate.max', 'validate.minLength', 'validate.maxLength', 'valuesExpression'];
4345
- const TEMPLATE_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'description', 'label', 'source', 'text'];
4503
+ 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'];
4504
+ const TEMPLATE_PROPERTIES = ['alt', 'appearance.prefixAdorner', 'appearance.suffixAdorner', 'description', 'label', 'source', 'text', 'url'];
4346
4505
  function isRequired(field) {
4347
4506
  return field.required;
4348
4507
  }
@@ -6837,7 +6996,7 @@ class Form {
6837
6996
  }
6838
6997
  }
6839
6998
 
6840
- const schemaVersion = 12;
6999
+ const schemaVersion = 13;
6841
7000
 
6842
7001
  /**
6843
7002
  * @typedef { import('./types').CreateFormOptions } CreateFormOptions
@@ -6862,5 +7021,5 @@ function createForm(options) {
6862
7021
  });
6863
7022
  }
6864
7023
 
6865
- export { Button, Checkbox, Checklist, ConditionChecker, DATETIME_SUBTYPES, DATETIME_SUBTYPES_LABELS, DATETIME_SUBTYPE_PATH, DATE_DISALLOW_PAST_PATH, DATE_LABEL_PATH, Datetime, FormComponent$1 as Default, Description, Errors, ExpressionLanguageModule, FeelExpressionLanguage, FeelersTemplating, FieldFactory, Form, FormComponent, FormContext$1 as FormContext, FormField, FormFieldRegistry, FormFields, FormLayouter, FormRenderContext$1 as FormRenderContext, Group, Image, Importer, Label, MINUTES_IN_DAY, MarkdownModule, MarkdownRenderer, Numberfield, PathRegistry, Radio, Select, Separator, Spacer, TIME_INTERVAL_PATH, TIME_LABEL_PATH, TIME_SERIALISINGFORMAT_LABELS, TIME_SERIALISING_FORMATS, TIME_SERIALISING_FORMAT_PATH, TIME_USE24H_PATH, Taglist, Text, Textarea, Textfield, VALUES_SOURCES, VALUES_SOURCES_DEFAULTS, VALUES_SOURCES_LABELS, VALUES_SOURCES_PATHS, VALUES_SOURCE_DEFAULT, ViewerCommands, ViewerCommandsModule, clone, createForm, createFormContainer, createInjector, formFields, generateIdForType, generateIndexForType, getSchemaVariables, getValuesSource, iconsByType, isRequired, pathParse, pathsEqual, runRecursively, sanitizeHTML, sanitizeImageSource, schemaVersion };
7024
+ export { Button, Checkbox, Checklist, ConditionChecker, DATETIME_SUBTYPES, DATETIME_SUBTYPES_LABELS, DATETIME_SUBTYPE_PATH, DATE_DISALLOW_PAST_PATH, DATE_LABEL_PATH, Datetime, FormComponent$1 as Default, Description, Errors, ExpressionLanguageModule, FeelExpressionLanguage, FeelersTemplating, FieldFactory, Form, FormComponent, FormContext$1 as FormContext, FormField, FormFieldRegistry, FormFields, FormLayouter, FormRenderContext$1 as FormRenderContext, Group, IFrame, Image, Importer, Label, MINUTES_IN_DAY, MarkdownModule, MarkdownRenderer, Numberfield, PathRegistry, Radio, Select, Separator, Spacer, TIME_INTERVAL_PATH, TIME_LABEL_PATH, TIME_SERIALISINGFORMAT_LABELS, TIME_SERIALISING_FORMATS, TIME_SERIALISING_FORMAT_PATH, TIME_USE24H_PATH, Taglist, Text, Textarea, Textfield, VALUES_SOURCES, VALUES_SOURCES_DEFAULTS, VALUES_SOURCES_LABELS, VALUES_SOURCES_PATHS, VALUES_SOURCE_DEFAULT, ViewerCommands, ViewerCommandsModule, clone, createForm, createFormContainer, createInjector, formFields, generateIdForType, generateIndexForType, getSchemaVariables, getValuesSource, iconsByType, isRequired, pathParse, pathsEqual, runRecursively, sanitizeHTML, sanitizeIFrameSource, sanitizeImageSource, schemaVersion, useExpressionEvaluation, useSingleLineTemplateEvaluation, useTemplateEvaluation };
6866
7025
  //# sourceMappingURL=index.es.js.map