@bpmn-io/form-js-viewer 0.3.1 → 0.4.4

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 (41) hide show
  1. package/dist/index.cjs +98 -39
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.es.js +97 -40
  4. package/dist/index.es.js.map +1 -1
  5. package/dist/types/Form.d.ts +143 -143
  6. package/dist/types/core/EventBus.d.ts +1 -1
  7. package/dist/types/core/FormFieldRegistry.d.ts +17 -2
  8. package/dist/types/core/Validator.d.ts +3 -3
  9. package/dist/types/core/index.d.ts +16 -14
  10. package/dist/types/import/Importer.d.ts +38 -38
  11. package/dist/types/import/index.d.ts +5 -5
  12. package/dist/types/index.d.ts +18 -17
  13. package/dist/types/render/FormFields.d.ts +5 -5
  14. package/dist/types/render/Renderer.d.ts +23 -23
  15. package/dist/types/render/components/Description.d.ts +1 -1
  16. package/dist/types/render/components/Errors.d.ts +1 -1
  17. package/dist/types/render/components/FormComponent.d.ts +1 -1
  18. package/dist/types/render/components/FormField.d.ts +1 -1
  19. package/dist/types/render/components/Label.d.ts +1 -1
  20. package/dist/types/render/components/PoweredBy.d.ts +1 -1
  21. package/dist/types/render/components/Sanitizer.d.ts +7 -7
  22. package/dist/types/render/components/Util.d.ts +4 -4
  23. package/dist/types/render/components/form-fields/Button.d.ts +11 -11
  24. package/dist/types/render/components/form-fields/Checkbox.d.ts +9 -9
  25. package/dist/types/render/components/form-fields/Default.d.ts +9 -9
  26. package/dist/types/render/components/form-fields/Number.d.ts +9 -9
  27. package/dist/types/render/components/form-fields/Radio.d.ts +14 -14
  28. package/dist/types/render/components/form-fields/Select.d.ts +14 -14
  29. package/dist/types/render/components/form-fields/Text.d.ts +10 -10
  30. package/dist/types/render/components/form-fields/Textfield.d.ts +9 -9
  31. package/dist/types/render/components/index.d.ts +11 -11
  32. package/dist/types/render/context/FormContext.d.ts +11 -11
  33. package/dist/types/render/context/FormRenderContext.d.ts +6 -6
  34. package/dist/types/render/context/index.d.ts +2 -2
  35. package/dist/types/render/hooks/useService.d.ts +1 -1
  36. package/dist/types/render/index.d.ts +11 -11
  37. package/dist/types/types.d.ts +1 -1
  38. package/dist/types/util/form.d.ts +6 -6
  39. package/dist/types/util/index.d.ts +16 -16
  40. package/dist/types/util/injector.d.ts +1 -1
  41. package/package.json +3 -3
package/dist/index.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var minDash = require('min-dash');
6
+ var Ids = require('ids');
6
7
  var snarkdown = require('@bpmn-io/snarkdown');
7
8
  var jsxRuntime = require('preact/jsx-runtime');
8
9
  var hooks = require('preact/hooks');
@@ -13,6 +14,7 @@ var didi = require('didi');
13
14
 
14
15
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
15
16
 
17
+ var Ids__default = /*#__PURE__*/_interopDefaultLegacy(Ids);
16
18
  var snarkdown__default = /*#__PURE__*/_interopDefaultLegacy(snarkdown);
17
19
  var Markup__default = /*#__PURE__*/_interopDefaultLegacy(Markup);
18
20
 
@@ -462,11 +464,10 @@ EventBus.prototype._invokeListener = function (event, args, listener) {
462
464
  if (returnValue === false) {
463
465
  event.preventDefault();
464
466
  }
465
- } catch (e) {
466
- if (!this.handleError(e)) {
467
- console.error('unhandled error in event listener');
468
- console.error(e.stack);
469
- throw e;
467
+ } catch (error) {
468
+ if (!this.handleError(error)) {
469
+ console.error('unhandled error in event listener', error);
470
+ throw error;
470
471
  }
471
472
  }
472
473
 
@@ -634,12 +635,74 @@ class Validator {
634
635
 
635
636
  }
636
637
 
637
- var FormFieldRegistry = Map;
638
+ class FormFieldRegistry {
639
+ constructor(eventBus) {
640
+ this._eventBus = eventBus;
641
+ this._formFields = {};
642
+ eventBus.on('form.clear', () => this.clear());
643
+ this._ids = new Ids__default['default']([32, 36, 1]);
644
+ this._keys = new Ids__default['default']([32, 36, 1]);
645
+ }
646
+
647
+ add(formField) {
648
+ const {
649
+ id
650
+ } = formField;
651
+
652
+ if (this._formFields[id]) {
653
+ throw new Error(`form field with ID ${id} already exists`);
654
+ }
655
+
656
+ this._eventBus.fire('formField.add', {
657
+ formField
658
+ });
659
+
660
+ this._formFields[id] = formField;
661
+ }
662
+
663
+ remove(formField) {
664
+ const {
665
+ id
666
+ } = formField;
667
+
668
+ if (!this._formFields[id]) {
669
+ return;
670
+ }
671
+
672
+ this._eventBus.fire('formField.remove', {
673
+ formField
674
+ });
675
+
676
+ delete this._formFields[id];
677
+ }
678
+
679
+ get(id) {
680
+ return this._formFields[id];
681
+ }
682
+
683
+ getAll() {
684
+ return Object.values(this._formFields);
685
+ }
686
+
687
+ forEach(callback) {
688
+ this.getAll().forEach(formField => callback(formField));
689
+ }
690
+
691
+ clear() {
692
+ this._formFields = {};
693
+
694
+ this._ids.clear();
695
+
696
+ this._keys.clear();
697
+ }
698
+
699
+ }
700
+ FormFieldRegistry.$inject = ['eventBus'];
638
701
 
639
702
  class Importer {
640
703
  /**
641
704
  * @constructor
642
- * @param { import('../core/FormFieldRegistry').default } formFieldRegistry
705
+ * @param { import('../core').FormFieldRegistry } formFieldRegistry
643
706
  * @param { import('../render/FormFields').default } formFields
644
707
  */
645
708
  constructor(formFieldRegistry, formFields) {
@@ -693,7 +756,7 @@ class Importer {
693
756
  } = formField;
694
757
 
695
758
  if (parentId) {
696
- // Set form field parent
759
+ // set form field parent
697
760
  formField._parent = parentId;
698
761
  }
699
762
 
@@ -702,28 +765,30 @@ class Importer {
702
765
  }
703
766
 
704
767
  if (key) {
705
- this._formFieldRegistry.forEach(formField => {
706
- if (formField.key === key) {
707
- throw new Error(`form field with key <${key}> already exists`);
708
- }
709
- }); // Set form field path
768
+ // validate <key> uniqueness
769
+ if (this._formFieldRegistry._keys.assigned(key)) {
770
+ throw new Error(`form field with key <${key}> already exists`);
771
+ }
772
+
773
+ this._formFieldRegistry._keys.claim(key, formField); // set form field path
710
774
 
711
775
 
712
776
  formField._path = [key];
713
777
  }
714
778
 
715
779
  if (id) {
716
- this._formFieldRegistry.forEach(formField => {
717
- if (formField.id === id) {
718
- throw new Error(`form field with id <${id}> already exists`);
719
- }
720
- });
721
- } // Set form field ID
780
+ // validate <id> uniqueness
781
+ if (this._formFieldRegistry._ids.assigned(id)) {
782
+ throw new Error(`form field with id <${id}> already exists`);
783
+ }
784
+
785
+ this._formFieldRegistry._ids.claim(id, formField);
786
+ } // set form field ID
722
787
 
723
788
 
724
789
  formField.id = id;
725
790
 
726
- this._formFieldRegistry.set(id, formField);
791
+ this._formFieldRegistry.add(formField);
727
792
 
728
793
  if (components) {
729
794
  this.importFormFields(components, data, id);
@@ -884,7 +949,7 @@ function prefixId(id) {
884
949
  function markdownToHTML(markdown) {
885
950
  const htmls = markdown.split(/(?:\r?\n){2,}/).map(line => /^((\d+.)|[><\s#-*])/.test(line) ? snarkdown__default['default'](line) : `<p>${snarkdown__default['default'](line)}</p>`);
886
951
  return htmls.join('\n\n');
887
- } // See https://github.com/developit/snarkdown/issues/70
952
+ } // see https://github.com/developit/snarkdown/issues/70
888
953
 
889
954
  function safeMarkdown(markdown) {
890
955
  const html = markdownToHTML(markdown);
@@ -964,15 +1029,10 @@ function Label(props) {
964
1029
  label,
965
1030
  required = false
966
1031
  } = props;
967
-
968
- if (!label) {
969
- return null;
970
- }
971
-
972
1032
  return jsxRuntime.jsxs("label", {
973
1033
  for: id,
974
1034
  class: "fjs-form-field-label",
975
- children: [props.children, label, required && jsxRuntime.jsx("span", {
1035
+ children: [props.children, label || '', required && jsxRuntime.jsx("span", {
976
1036
  class: "fjs-asterix",
977
1037
  children: "*"
978
1038
  })]
@@ -1279,7 +1339,7 @@ function Number(props) {
1279
1339
  disabled,
1280
1340
  errors = [],
1281
1341
  field,
1282
- value = ''
1342
+ value
1283
1343
  } = props;
1284
1344
  const {
1285
1345
  description,
@@ -1313,7 +1373,7 @@ function Number(props) {
1313
1373
  id: prefixId(id),
1314
1374
  onInput: onChange,
1315
1375
  type: "number",
1316
- value: value
1376
+ value: value || ''
1317
1377
  }), jsxRuntime.jsx(Description, {
1318
1378
  description: description
1319
1379
  }), jsxRuntime.jsx(Errors, {
@@ -1353,7 +1413,7 @@ function Radio(props) {
1353
1413
  const onChange = v => {
1354
1414
  props.onChange({
1355
1415
  field,
1356
- value: v === value ? undefined : v
1416
+ value: v
1357
1417
  });
1358
1418
  };
1359
1419
 
@@ -1437,7 +1497,7 @@ function Select(props) {
1437
1497
  disabled: disabled,
1438
1498
  id: prefixId(id),
1439
1499
  onChange: onChange,
1440
- value: value,
1500
+ value: value || '',
1441
1501
  children: [jsxRuntime.jsx("option", {
1442
1502
  value: ""
1443
1503
  }), values.map(v => {
@@ -1704,13 +1764,11 @@ class Form {
1704
1764
  }
1705
1765
 
1706
1766
  clear() {
1707
- // Clear form services
1708
- this._emit('diagram.clear'); // Clear diagram services (e.g. EventBus)
1767
+ // clear form services
1768
+ this._emit('diagram.clear'); // clear diagram services (e.g. EventBus)
1709
1769
 
1710
1770
 
1711
1771
  this._emit('form.clear');
1712
-
1713
- this.get('formFieldRegistry').clear();
1714
1772
  }
1715
1773
  /**
1716
1774
  * Destroy the form, removing it from DOM,
@@ -1719,8 +1777,8 @@ class Form {
1719
1777
 
1720
1778
 
1721
1779
  destroy() {
1722
- // Destroy form services
1723
- this.get('eventBus').fire('form.destroy'); // Destroy diagram services (e.g. EventBus)
1780
+ // destroy form services
1781
+ this.get('eventBus').fire('form.destroy'); // destroy diagram services (e.g. EventBus)
1724
1782
 
1725
1783
  this.get('eventBus').fire('diagram.destroy');
1726
1784
 
@@ -1788,7 +1846,7 @@ class Form {
1788
1846
 
1789
1847
  const formFieldRegistry = this.get('formFieldRegistry'); // do not submit disabled form fields
1790
1848
 
1791
- const data = Array.from(formFieldRegistry.values()).reduce((data, field) => {
1849
+ const data = formFieldRegistry.getAll().reduce((data, field) => {
1792
1850
  const {
1793
1851
  disabled,
1794
1852
  _path
@@ -1835,7 +1893,7 @@ class Form {
1835
1893
  data
1836
1894
  } = this._getState();
1837
1895
 
1838
- const errors = Array.from(formFieldRegistry.values()).reduce((errors, field) => {
1896
+ const errors = formFieldRegistry.getAll().reduce((errors, field) => {
1839
1897
  const {
1840
1898
  disabled,
1841
1899
  _path
@@ -2055,6 +2113,7 @@ exports.Default = Default;
2055
2113
  exports.Form = Form;
2056
2114
  exports.FormComponent = FormComponent;
2057
2115
  exports.FormContext = FormContext;
2116
+ exports.FormFieldRegistry = FormFieldRegistry;
2058
2117
  exports.FormFields = FormFields;
2059
2118
  exports.FormRenderContext = FormRenderContext;
2060
2119
  exports.Number = Number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/util/injector.js","../src/util/form.js","../src/util/index.js","../../../node_modules/diagram-js/lib/core/EventBus.js","../src/core/Validator.js","../src/core/FormFieldRegistry.js","../src/import/Importer.js","../src/import/index.js","../src/render/components/Sanitizer.js","../src/render/components/Util.js","../src/render/components/form-fields/Button.js","../src/render/components/Description.js","../src/render/components/Errors.js","../src/render/components/Label.js","../src/render/components/form-fields/Checkbox.js","../src/render/context/FormRenderContext.js","../src/render/context/FormContext.js","../src/render/hooks/useService.js","../src/render/components/FormField.js","../src/render/components/form-fields/Default.js","../src/render/components/PoweredBy.js","../src/render/components/FormComponent.js","../src/render/components/form-fields/Number.js","../src/render/components/form-fields/Radio.js","../src/render/components/form-fields/Select.js","../src/render/components/form-fields/Text.js","../src/render/components/form-fields/Textfield.js","../src/render/components/index.js","../src/render/FormFields.js","../src/render/Renderer.js","../src/render/index.js","../src/core/index.js","../src/Form.js","../src/index.js"],"sourcesContent":["import { Injector } from 'didi';\n\nexport function createInjector(bootstrapModules) {\n const modules = [],\n components = [];\n\n function hasModule(module) {\n return modules.includes(module);\n }\n\n function addModule(module) {\n modules.push(module);\n }\n\n function visit(module) {\n if (hasModule(module)) {\n return;\n }\n\n (module.__depends__ || []).forEach(visit);\n\n if (hasModule(module)) {\n return;\n }\n\n addModule(module);\n\n (module.__init__ || []).forEach(function(component) {\n components.push(component);\n });\n }\n\n bootstrapModules.forEach(visit);\n\n const injector = new Injector(modules);\n\n components.forEach(function(component) {\n try {\n injector[ typeof component === 'string' ? 'get' : 'invoke' ](component);\n } catch (err) {\n console.error('Failed to instantiate component');\n console.error(err.stack);\n\n throw err;\n }\n });\n\n return injector;\n}","/**\n * @param {string?} prefix\n *\n * @returns Element\n */\nexport function createFormContainer(prefix = 'fjs') {\n const container = document.createElement('div');\n\n container.classList.add(`${ prefix }-container`);\n\n return container;\n}","export * from './injector';\nexport * from './form';\n\nexport function findErrors(errors, path) {\n return errors[ pathStringify(path) ];\n}\n\nexport function isRequired(field) {\n return field.required;\n}\n\nexport function pathParse(path) {\n if (!path) {\n return [];\n }\n\n return path.split('.').map(key => {\n return isNaN(parseInt(key)) ? key : parseInt(key);\n });\n}\n\nexport function pathsEqual(a, b) {\n return (\n a &&\n b &&\n a.length === b.length &&\n a.every((value, index) => value === b[ index ])\n );\n}\n\nexport function pathStringify(path) {\n if (!path) {\n return '';\n }\n\n return path.join('.');\n}\n\nconst indices = {};\n\nexport function generateIndexForType(type) {\n if (type in indices) {\n indices[ type ]++;\n } else {\n indices[ type ] = 1;\n }\n\n return indices[ type ];\n}\n\nexport function generateIdForType(type) {\n return `${ type }${ generateIndexForType(type) }`;\n}\n\n/**\n * @template T\n * @param {T} data\n * @param {(this: any, key: string, value: any) => any} [replacer]\n * @return {T}\n */\nexport function clone(data, replacer) {\n return JSON.parse(JSON.stringify(data, replacer));\n}","import {\n isFunction,\n isArray,\n isNumber,\n bind,\n assign\n} from 'min-dash';\n\nvar FN_REF = '__fn';\n\nvar DEFAULT_PRIORITY = 1000;\n\nvar slice = Array.prototype.slice;\n\n/**\n * A general purpose event bus.\n *\n * This component is used to communicate across a diagram instance.\n * Other parts of a diagram can use it to listen to and broadcast events.\n *\n *\n * ## Registering for Events\n *\n * The event bus provides the {@link EventBus#on} and {@link EventBus#once}\n * methods to register for events. {@link EventBus#off} can be used to\n * remove event registrations. Listeners receive an instance of {@link Event}\n * as the first argument. It allows them to hook into the event execution.\n *\n * ```javascript\n *\n * // listen for event\n * eventBus.on('foo', function(event) {\n *\n * // access event type\n * event.type; // 'foo'\n *\n * // stop propagation to other listeners\n * event.stopPropagation();\n *\n * // prevent event default\n * event.preventDefault();\n * });\n *\n * // listen for event with custom payload\n * eventBus.on('bar', function(event, payload) {\n * console.log(payload);\n * });\n *\n * // listen for event returning value\n * eventBus.on('foobar', function(event) {\n *\n * // stop event propagation + prevent default\n * return false;\n *\n * // stop event propagation + return custom result\n * return {\n * complex: 'listening result'\n * };\n * });\n *\n *\n * // listen with custom priority (default=1000, higher is better)\n * eventBus.on('priorityfoo', 1500, function(event) {\n * console.log('invoked first!');\n * });\n *\n *\n * // listen for event and pass the context (`this`)\n * eventBus.on('foobar', function(event) {\n * this.foo();\n * }, this);\n * ```\n *\n *\n * ## Emitting Events\n *\n * Events can be emitted via the event bus using {@link EventBus#fire}.\n *\n * ```javascript\n *\n * // false indicates that the default action\n * // was prevented by listeners\n * if (eventBus.fire('foo') === false) {\n * console.log('default has been prevented!');\n * };\n *\n *\n * // custom args + return value listener\n * eventBus.on('sum', function(event, a, b) {\n * return a + b;\n * });\n *\n * // you can pass custom arguments + retrieve result values.\n * var sum = eventBus.fire('sum', 1, 2);\n * console.log(sum); // 3\n * ```\n */\nexport default function EventBus() {\n this._listeners = {};\n\n // cleanup on destroy on lowest priority to allow\n // message passing until the bitter end\n this.on('diagram.destroy', 1, this._destroy, this);\n}\n\n\n/**\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @param {string|Array<string>} events\n * @param {number} [priority=1000] the priority in which this listener is called, larger is higher\n * @param {Function} callback\n * @param {Object} [that] Pass context (`this`) to the callback\n */\nEventBus.prototype.on = function(events, priority, callback, that) {\n\n events = isArray(events) ? events : [ events ];\n\n if (isFunction(priority)) {\n that = callback;\n callback = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (!isNumber(priority)) {\n throw new Error('priority must be a number');\n }\n\n var actualCallback = callback;\n\n if (that) {\n actualCallback = bind(callback, that);\n\n // make sure we remember and are able to remove\n // bound callbacks via {@link #off} using the original\n // callback\n actualCallback[FN_REF] = callback[FN_REF] || callback;\n }\n\n var self = this;\n\n events.forEach(function(e) {\n self._addListener(e, {\n priority: priority,\n callback: actualCallback,\n next: null\n });\n });\n};\n\n\n/**\n * Register an event listener that is executed only once.\n *\n * @param {string} event the event name to register for\n * @param {number} [priority=1000] the priority in which this listener is called, larger is higher\n * @param {Function} callback the callback to execute\n * @param {Object} [that] Pass context (`this`) to the callback\n */\nEventBus.prototype.once = function(event, priority, callback, that) {\n var self = this;\n\n if (isFunction(priority)) {\n that = callback;\n callback = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (!isNumber(priority)) {\n throw new Error('priority must be a number');\n }\n\n function wrappedCallback() {\n wrappedCallback.__isTomb = true;\n\n var result = callback.apply(that, arguments);\n\n self.off(event, wrappedCallback);\n\n return result;\n }\n\n // make sure we remember and are able to remove\n // bound callbacks via {@link #off} using the original\n // callback\n wrappedCallback[FN_REF] = callback;\n\n this.on(event, priority, wrappedCallback);\n};\n\n\n/**\n * Removes event listeners by event and callback.\n *\n * If no callback is given, all listeners for a given event name are being removed.\n *\n * @param {string|Array<string>} events\n * @param {Function} [callback]\n */\nEventBus.prototype.off = function(events, callback) {\n\n events = isArray(events) ? events : [ events ];\n\n var self = this;\n\n events.forEach(function(event) {\n self._removeListener(event, callback);\n });\n\n};\n\n\n/**\n * Create an EventBus event.\n *\n * @param {Object} data\n *\n * @return {Object} event, recognized by the eventBus\n */\nEventBus.prototype.createEvent = function(data) {\n var event = new InternalEvent();\n\n event.init(data);\n\n return event;\n};\n\n\n/**\n * Fires a named event.\n *\n * @example\n *\n * // fire event by name\n * events.fire('foo');\n *\n * // fire event object with nested type\n * var event = { type: 'foo' };\n * events.fire(event);\n *\n * // fire event with explicit type\n * var event = { x: 10, y: 20 };\n * events.fire('element.moved', event);\n *\n * // pass additional arguments to the event\n * events.on('foo', function(event, bar) {\n * alert(bar);\n * });\n *\n * events.fire({ type: 'foo' }, 'I am bar!');\n *\n * @param {string} [name] the optional event name\n * @param {Object} [event] the event object\n * @param {...Object} additional arguments to be passed to the callback functions\n *\n * @return {boolean} the events return value, if specified or false if the\n * default action was prevented by listeners\n */\nEventBus.prototype.fire = function(type, data) {\n var event,\n firstListener,\n returnValue,\n args;\n\n args = slice.call(arguments);\n\n if (typeof type === 'object') {\n data = type;\n type = data.type;\n }\n\n if (!type) {\n throw new Error('no event type specified');\n }\n\n firstListener = this._listeners[type];\n\n if (!firstListener) {\n return;\n }\n\n // we make sure we fire instances of our home made\n // events here. We wrap them only once, though\n if (data instanceof InternalEvent) {\n\n // we are fine, we alread have an event\n event = data;\n } else {\n event = this.createEvent(data);\n }\n\n // ensure we pass the event as the first parameter\n args[0] = event;\n\n // original event type (in case we delegate)\n var originalType = event.type;\n\n // update event type before delegation\n if (type !== originalType) {\n event.type = type;\n }\n\n try {\n returnValue = this._invokeListeners(event, args, firstListener);\n } finally {\n\n // reset event type after delegation\n if (type !== originalType) {\n event.type = originalType;\n }\n }\n\n // set the return value to false if the event default\n // got prevented and no other return value exists\n if (returnValue === undefined && event.defaultPrevented) {\n returnValue = false;\n }\n\n return returnValue;\n};\n\n\nEventBus.prototype.handleError = function(error) {\n return this.fire('error', { error: error }) === false;\n};\n\n\nEventBus.prototype._destroy = function() {\n this._listeners = {};\n};\n\nEventBus.prototype._invokeListeners = function(event, args, listener) {\n\n var returnValue;\n\n while (listener) {\n\n // handle stopped propagation\n if (event.cancelBubble) {\n break;\n }\n\n returnValue = this._invokeListener(event, args, listener);\n\n listener = listener.next;\n }\n\n return returnValue;\n};\n\nEventBus.prototype._invokeListener = function(event, args, listener) {\n\n var returnValue;\n\n if (listener.callback.__isTomb) {\n return returnValue;\n }\n\n try {\n\n // returning false prevents the default action\n returnValue = invokeFunction(listener.callback, args);\n\n // stop propagation on return value\n if (returnValue !== undefined) {\n event.returnValue = returnValue;\n event.stopPropagation();\n }\n\n // prevent default on return false\n if (returnValue === false) {\n event.preventDefault();\n }\n } catch (e) {\n if (!this.handleError(e)) {\n console.error('unhandled error in event listener');\n console.error(e.stack);\n\n throw e;\n }\n }\n\n return returnValue;\n};\n\n/*\n * Add new listener with a certain priority to the list\n * of listeners (for the given event).\n *\n * The semantics of listener registration / listener execution are\n * first register, first serve: New listeners will always be inserted\n * after existing listeners with the same priority.\n *\n * Example: Inserting two listeners with priority 1000 and 1300\n *\n * * before: [ 1500, 1500, 1000, 1000 ]\n * * after: [ 1500, 1500, (new=1300), 1000, 1000, (new=1000) ]\n *\n * @param {string} event\n * @param {Object} listener { priority, callback }\n */\nEventBus.prototype._addListener = function(event, newListener) {\n\n var listener = this._getListeners(event),\n previousListener;\n\n // no prior listeners\n if (!listener) {\n this._setListeners(event, newListener);\n\n return;\n }\n\n // ensure we order listeners by priority from\n // 0 (high) to n > 0 (low)\n while (listener) {\n\n if (listener.priority < newListener.priority) {\n\n newListener.next = listener;\n\n if (previousListener) {\n previousListener.next = newListener;\n } else {\n this._setListeners(event, newListener);\n }\n\n return;\n }\n\n previousListener = listener;\n listener = listener.next;\n }\n\n // add new listener to back\n previousListener.next = newListener;\n};\n\n\nEventBus.prototype._getListeners = function(name) {\n return this._listeners[name];\n};\n\nEventBus.prototype._setListeners = function(name, listener) {\n this._listeners[name] = listener;\n};\n\nEventBus.prototype._removeListener = function(event, callback) {\n\n var listener = this._getListeners(event),\n nextListener,\n previousListener,\n listenerCallback;\n\n if (!callback) {\n\n // clear listeners\n this._setListeners(event, null);\n\n return;\n }\n\n while (listener) {\n\n nextListener = listener.next;\n\n listenerCallback = listener.callback;\n\n if (listenerCallback === callback || listenerCallback[FN_REF] === callback) {\n if (previousListener) {\n previousListener.next = nextListener;\n } else {\n\n // new first listener\n this._setListeners(event, nextListener);\n }\n }\n\n previousListener = listener;\n listener = nextListener;\n }\n};\n\n/**\n * A event that is emitted via the event bus.\n */\nfunction InternalEvent() { }\n\nInternalEvent.prototype.stopPropagation = function() {\n this.cancelBubble = true;\n};\n\nInternalEvent.prototype.preventDefault = function() {\n this.defaultPrevented = true;\n};\n\nInternalEvent.prototype.init = function(data) {\n assign(this, data || {});\n};\n\n\n/**\n * Invoke function. Be fast...\n *\n * @param {Function} fn\n * @param {Array<Object>} args\n *\n * @return {Any}\n */\nfunction invokeFunction(fn, args) {\n return fn.apply(null, args);\n}\n","export default class Validator {\n\n validateField(field, value) {\n\n const { validate } = field;\n\n let errors = [];\n\n if (!validate) {\n return errors;\n }\n\n if (validate.pattern && value && !new RegExp(validate.pattern).test(value)) {\n errors = [\n ...errors,\n `Field must match pattern ${ validate.pattern }.`\n ];\n }\n\n if (validate.required && (typeof value === 'undefined' || value === '')) {\n errors = [\n ...errors,\n 'Field is required.'\n ];\n }\n\n if ('min' in validate && value && value < validate.min) {\n errors = [\n ...errors,\n `Field must have minimum value of ${ validate.min }.`\n ];\n }\n\n if ('max' in validate && value && value > validate.max) {\n errors = [\n ...errors,\n `Field must have maximum value of ${ validate.max }.`\n ];\n }\n\n if ('minLength' in validate && value && value.trim().length < validate.minLength) {\n errors = [\n ...errors,\n `Field must have minimum length of ${ validate.minLength }.`\n ];\n }\n\n if ('maxLength' in validate && value && value.trim().length > validate.maxLength) {\n errors = [\n ...errors,\n `Field must have maximum length of ${ validate.maxLength }.`\n ];\n }\n\n return errors;\n }\n}","export default Map;","import { clone, generateIdForType } from '../util';\n\n\nexport default class Importer {\n\n /**\n * @constructor\n * @param { import('../core/FormFieldRegistry').default } formFieldRegistry\n * @param { import('../render/FormFields').default } formFields\n */\n constructor(formFieldRegistry, formFields) {\n this._formFieldRegistry = formFieldRegistry;\n this._formFields = formFields;\n }\n\n /**\n * Import schema adding `id`, `_parent` and `_path`\n * information to each field and adding it to the\n * form field registry.\n *\n * @param {any} schema\n * @param {any} [data]\n *\n * @return { { warnings: Array<any>, schema: any, data: any } }\n */\n importSchema(schema, data = {}) {\n\n // TODO: Add warnings\n const warnings = [];\n\n try {\n const importedData = clone(data);\n const importedSchema = this.importFormField(clone(schema), importedData);\n\n return {\n warnings,\n schema: importedSchema,\n data: importedData\n };\n } catch (err) {\n err.warnings = warnings;\n\n throw err;\n }\n }\n\n /**\n * @param {any} formField\n * @param {Object} [data]\n * @param {string} [parentId]\n *\n * @return {any} field\n */\n importFormField(formField, data = {}, parentId) {\n const {\n components,\n key,\n type,\n id = generateIdForType(type)\n } = formField;\n\n if (parentId) {\n\n // Set form field parent\n formField._parent = parentId;\n }\n\n if (!this._formFields.get(type)) {\n throw new Error(`form field of type <${ type }> not supported`);\n }\n\n if (key) {\n this._formFieldRegistry.forEach((formField) => {\n if (formField.key === key) {\n throw new Error(`form field with key <${ key }> already exists`);\n }\n });\n\n // Set form field path\n formField._path = [ key ];\n }\n\n if (id) {\n this._formFieldRegistry.forEach((formField) => {\n if (formField.id === id) {\n throw new Error(`form field with id <${ id }> already exists`);\n }\n });\n }\n\n // Set form field ID\n formField.id = id;\n\n this._formFieldRegistry.set(id, formField);\n\n if (components) {\n this.importFormFields(components, data, id);\n }\n\n return formField;\n }\n\n importFormFields(components, data = {}, parentId) {\n components.forEach((component) => {\n this.importFormField(component, data, parentId);\n });\n }\n}\n\nImporter.$inject = [ 'formFieldRegistry', 'formFields' ];","import Importer from './Importer';\n\nexport default {\n importer: [ 'type', Importer ]\n};","const NODE_TYPE_TEXT = 3,\n NODE_TYPE_ELEMENT = 1;\n\nconst ALLOWED_NODES = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'span',\n 'em',\n 'a',\n 'p',\n 'div',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'blockquote',\n 'img',\n 'pre',\n 'code',\n 'br',\n 'strong'\n];\n\nconst ALLOWED_ATTRIBUTES = [\n 'align',\n 'alt',\n 'class',\n 'href',\n 'id',\n 'name',\n 'rel',\n 'target',\n 'src'\n];\n\nconst ALLOWED_URI_PATTERN = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst ATTR_WHITESPACE_PATTERN = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g; // eslint-disable-line no-control-regex\n\nconst FORM_ELEMENT = document.createElement('form');\n\n/**\n * Sanitize a HTML string and return the cleaned, safe version.\n *\n * @param {string} html\n * @return {string}\n */\nexport function sanitizeHTML(html) {\n\n const doc = new DOMParser().parseFromString(\n `<!DOCTYPE html>\\n<html><body><div>${ html }`,\n 'text/html'\n );\n\n doc.normalize();\n\n const element = doc.body.firstChild;\n\n if (element) {\n sanitizeNode(/** @type Element */ (element));\n\n return new XMLSerializer().serializeToString(element);\n } else {\n\n // handle the case that document parsing\n // does not work at all, due to HTML gibberish\n return '';\n }\n}\n\n/**\n * Recursively sanitize a HTML node, potentially\n * removing it, its children or attributes.\n *\n * Inspired by https://github.com/developit/snarkdown/issues/70\n * and https://github.com/cure53/DOMPurify. Simplified\n * for our use-case.\n *\n * @param {Element} node\n */\nfunction sanitizeNode(node) {\n\n // allow text nodes\n if (node.nodeType === NODE_TYPE_TEXT) {\n return;\n }\n\n // disallow all other nodes but Element\n if (node.nodeType !== NODE_TYPE_ELEMENT) {\n return node.remove();\n }\n\n const lcTag = node.tagName.toLowerCase();\n\n // disallow non-whitelisted tags\n if (!ALLOWED_NODES.includes(lcTag)) {\n return node.remove();\n }\n\n const attributes = node.attributes;\n\n // clean attributes\n for (let i = attributes.length; i--;) {\n const attribute = attributes[i];\n\n const name = attribute.name;\n const lcName = name.toLowerCase();\n\n // normalize node value\n const value = attribute.value.trim();\n\n node.removeAttribute(name);\n\n const valid = isValidAttribute(lcTag, lcName, value);\n\n if (valid) {\n node.setAttribute(name, value);\n }\n\n }\n\n // force noopener on target=\"_blank\" links\n if (lcTag === 'a' && node.getAttribute('target') === '_blank' && node.getAttribute('rel') !== 'noopener') {\n node.setAttribute('rel', 'noopener');\n }\n\n for (let i = node.childNodes.length; i--;) {\n sanitizeNode(/** @type Element */ (node.childNodes[i]));\n }\n}\n\n\n/**\n * Validates attributes for validity.\n *\n * @param {string} lcTag\n * @param {string} lcName\n * @param {string} value\n * @return {boolean}\n */\nfunction isValidAttribute(lcTag, lcName, value) {\n\n // disallow most attributes based on whitelist\n if (!ALLOWED_ATTRIBUTES.includes(lcName)) {\n return false;\n }\n\n // disallow \"DOM clobbering\" / polution of document and wrapping form elements\n if ((lcName === 'id' || lcName === 'name') && (value in document || value in FORM_ELEMENT)) {\n return false;\n }\n\n if (lcName === 'target' && value !== '_blank') {\n return false;\n }\n\n // allow valid url links only\n if (lcName === 'href' && !ALLOWED_URI_PATTERN.test(value.replace(ATTR_WHITESPACE_PATTERN, ''))) {\n return false;\n }\n\n return true;\n}","import snarkdown from '@bpmn-io/snarkdown';\n\nimport { sanitizeHTML } from './Sanitizer';\n\nexport function formFieldClasses(type, errors = []) {\n if (!type) {\n throw new Error('type required');\n }\n\n const classes = [\n 'fjs-form-field',\n `fjs-form-field-${ type }`\n ];\n\n if (errors.length) {\n classes.push('fjs-has-errors');\n }\n\n return classes.join(' ');\n}\n\nexport function prefixId(id) {\n return `fjs-form-${ id }`;\n}\n\nexport function markdownToHTML(markdown) {\n const htmls = markdown\n .split(/(?:\\r?\\n){2,}/)\n .map(line =>\n /^((\\d+.)|[><\\s#-*])/.test(line)\n ? snarkdown(line)\n : `<p>${ snarkdown(line) }</p>`,\n );\n\n return htmls.join('\\n\\n');\n}\n\n// See https://github.com/developit/snarkdown/issues/70\nexport function safeMarkdown(markdown) {\n const html = markdownToHTML(markdown);\n\n return sanitizeHTML(html);\n}","import { formFieldClasses } from '../Util';\n\nconst type = 'button';\n\n\nexport default function Button(props) {\n const {\n disabled,\n field\n } = props;\n\n const { action = 'submit' } = field;\n\n return <div class={ formFieldClasses(type) }>\n <button class=\"fjs-button\" type={ action } disabled={ disabled }>{ field.label }</button>\n </div>;\n}\n\nButton.create = function(options = {}) {\n\n return {\n action: 'submit',\n ...options\n };\n};\n\nButton.type = type;\nButton.label = 'Button';\nButton.keyed = true;","export default function Description(props) {\n const { description } = props;\n\n if (!description) {\n return null;\n }\n\n return <div class=\"fjs-form-field-description\">{ description }</div>;\n}","export default function Errors(props) {\n const { errors } = props;\n\n if (!errors.length) {\n return null;\n }\n\n return <div class=\"fjs-form-field-error\">\n <ul>\n {\n errors.map(error => {\n return <li>{ error }</li>;\n })\n }\n </ul>\n </div>;\n}","export default function Label(props) {\n const {\n id,\n label,\n required = false\n } = props;\n\n if (!label) {\n return null;\n }\n\n return <label for={ id } class=\"fjs-form-field-label\">\n { props.children }\n { label }\n {\n required && <span class=\"fjs-asterix\">*</span>\n }\n </label>;\n}","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'checkbox';\n\n\nexport default function Checkbox(props) {\n const {\n disabled,\n errors = [],\n field,\n value = false\n } = props;\n\n const {\n description,\n id,\n label\n } = field;\n\n const onChange = ({ target }) => {\n props.onChange({\n field,\n value: target.checked\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ false }>\n <input\n checked={ value }\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(id) }\n type=\"checkbox\"\n onChange={ onChange } />\n </Label>\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nCheckbox.create = function(options = {}) {\n return {\n ...options\n };\n};\n\nCheckbox.type = type;\nCheckbox.label = 'Checkbox';\nCheckbox.keyed = true;","import { createContext } from 'preact';\n\nconst FormRenderContext = createContext({\n Empty: (props) => {\n return null;\n },\n Children: (props) => {\n return props.children;\n },\n Element: (props) => {\n return props.children;\n }\n});\n\nexport default FormRenderContext;","import { createContext } from 'preact';\n\n/**\n * @param {string} type\n * @param {boolean} [strict]\n *\n * @returns {any}\n */\nfunction getService(type, strict) {}\n\nconst FormContext = createContext({\n getService\n});\n\nexport default FormContext;","import {\n useContext\n} from 'preact/hooks';\n\nimport { FormContext } from '../context';\n\n\nexport default function(type, strict) {\n const {\n getService\n } = useContext(FormContext);\n\n return getService(type, strict);\n}","import { useContext } from 'preact/hooks';\n\nimport { get } from 'min-dash';\n\nimport { FormRenderContext } from '../context';\n\nimport useService from '../hooks/useService';\n\nimport { findErrors } from '../../util';\n\nconst noop = () => false;\n\n\nexport default function FormField(props) {\n const {\n field,\n onChange\n } = props;\n\n const { _path } = field;\n\n const formFields = useService('formFields'),\n form = useService('form');\n\n const {\n data,\n errors,\n properties\n } = form._getState();\n\n const {\n Element\n } = useContext(FormRenderContext);\n\n const FormFieldComponent = formFields.get(field.type);\n\n if (!FormFieldComponent) {\n throw new Error(`cannot render field <${field.type}>`);\n }\n\n const value = get(data, _path);\n\n const fieldErrors = findErrors(errors, _path);\n\n const disabled = properties.readOnly || field.disabled || false;\n\n return (\n <Element field={ field }>\n <FormFieldComponent\n { ...props }\n disabled={ disabled }\n errors={ fieldErrors }\n onChange={ disabled ? noop : onChange }\n value={ value } />\n </Element>\n );\n}","import { useContext } from 'preact/hooks';\n\nimport FormField from '../FormField';\n\nimport { FormRenderContext } from '../../context';\n\n\nexport default function Default(props) {\n const {\n Children,\n Empty\n } = useContext(FormRenderContext);\n\n const { field } = props;\n\n const { components = [] } = field;\n\n return <Children class=\"fjs-vertical-layout\" field={ field }>\n {\n components.map(childField => {\n return <FormField\n { ...props }\n key={ childField.id }\n field={ childField } />;\n })\n }\n {\n components.length ? null : <Empty />\n }\n </Children>;\n}\n\nDefault.create = function(options = {}) {\n return {\n components: [],\n ...options\n };\n};\n\nDefault.type = 'default';\nDefault.keyed = false;","/**\n * This file must not be changed or exchanged.\n *\n * @see http://bpmn.io/license for more information.\n */\nimport { Fragment } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { createPortal } from 'preact/compat';\n\nfunction Logo() {\n return <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14.02 5.57\" width=\"53\" height=\"21\" style=\"vertical-align:middle\"><path fill=\"currentColor\" d=\"M1.88.92v.14c0 .41-.13.68-.4.8.33.14.46.44.46.86v.33c0 .61-.33.95-.95.95H0V0h.95c.65 0 .93.3.93.92zM.63.57v1.06h.24c.24 0 .38-.1.38-.43V.98c0-.28-.1-.4-.32-.4zm0 1.63v1.22h.36c.2 0 .32-.1.32-.39v-.35c0-.37-.12-.48-.4-.48H.63zM4.18.99v.52c0 .64-.31.98-.94.98h-.3V4h-.62V0h.92c.63 0 .94.35.94.99zM2.94.57v1.35h.3c.2 0 .3-.09.3-.37v-.6c0-.29-.1-.38-.3-.38h-.3zm2.89 2.27L6.25 0h.88v4h-.6V1.12L6.1 3.99h-.6l-.46-2.82v2.82h-.55V0h.87zM8.14 1.1V4h-.56V0h.79L9 2.4V0h.56v4h-.64zm2.49 2.29v.6h-.6v-.6zM12.12 1c0-.63.33-1 .95-1 .61 0 .95.37.95 1v2.04c0 .64-.34 1-.95 1-.62 0-.95-.37-.95-1zm.62 2.08c0 .28.13.39.33.39s.32-.1.32-.4V.98c0-.29-.12-.4-.32-.4s-.33.11-.33.4z\" /><path fill=\"currentColor\" d=\"M0 4.53h14.02v1.04H0zM11.08 0h.63v.62h-.63zm.63 4V1h-.63v2.98z\" /></svg>;\n}\n\nfunction Lightbox(props) {\n const { open } = props;\n\n if (!open) {\n return null;\n }\n\n return (\n <div class=\"fjs-powered-by-lightbox\" style=\"z-index: 100; position: fixed; top: 0; left: 0;right: 0; bottom: 0\">\n <div class=\"backdrop\" style=\"width: 100%; height: 100%; background: rgba(40 40 40 / 20%)\" onClick={ props.onBackdropClick }></div>\n <div class=\"notice\" style=\"position: absolute; left: 50%; top: 40%; transform: translate(-50%); width: 260px; padding: 10px; background: white; box-shadow: 0 1px 4px rgba(0 0 0 / 30%); font-family: Helvetica, Arial, sans-serif; font-size: 14px; display: flex; line-height: 1.3\">\n <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\" style=\"margin: 15px 20px 15px 10px; align-self: center; color: #404040\">\n <Logo />\n </a>\n <span>\n Web-based tooling for BPMN, DMN, and forms\n powered by <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\">bpmn.io</a>.\n </span>\n </div>\n </div>\n );\n}\n\nfunction Link(props) {\n return (\n <div class=\"fjs-powered-by fjs-form-field\" style=\"text-align: right\">\n <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\" class=\"fjs-powered-by-link\" title=\"Powered by bpmn.io\" style=\"color: #404040\" onClick={ props.onClick }><Logo /></a>\n </div>\n );\n}\n\nexport default function PoweredBy(props) {\n\n const [ open, setOpen ] = useState(false);\n\n function toggleOpen(open) {\n return (event) => {\n event.preventDefault();\n\n setOpen(open);\n };\n }\n\n return (\n <Fragment>\n {\n createPortal(\n <Lightbox open={ open } onBackdropClick={ toggleOpen(false) } />,\n document.body\n )\n }\n <Link onClick={ toggleOpen(true) } />\n </Fragment>\n );\n}","import FormField from './FormField';\n\nimport PoweredBy from './PoweredBy';\n\nimport useService from '../hooks/useService';\n\nconst noop = () => {};\n\nexport default function FormComponent(props) {\n const form = useService('form');\n\n const { schema } = form._getState();\n\n const {\n onSubmit = noop,\n onReset = noop,\n onChange = noop,\n } = props;\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n onSubmit();\n };\n\n const handleReset = (event) => {\n event.preventDefault();\n\n onReset();\n };\n\n return (\n <form\n class=\"fjs-form\"\n onSubmit={ handleSubmit }\n onReset={ handleReset }\n >\n <FormField\n field={ schema }\n onChange={ onChange }\n />\n\n <PoweredBy />\n </form>\n );\n}","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'number';\n\n\nexport default function Number(props) {\n const {\n disabled,\n errors = [],\n field,\n value = ''\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {}\n } = field;\n\n const { required } = validate;\n\n const onChange = ({ target }) => {\n const parsedValue = parseInt(target.value, 10);\n\n props.onChange({\n field,\n value: isNaN(parsedValue) ? undefined : parsedValue\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ required } />\n <input\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(id) }\n onInput={ onChange }\n type=\"number\"\n value={ value } />\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nNumber.create = function(options = {}) {\n return {\n ...options\n };\n};\n\nNumber.type = type;\nNumber.keyed = true;\nNumber.label = 'Number';","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'radio';\n\n\nexport default function Radio(props) {\n const {\n disabled,\n errors = [],\n field,\n value\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {},\n values\n } = field;\n\n const { required } = validate;\n\n const onChange = (v) => {\n props.onChange({\n field,\n value: v === value ? undefined : v\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n label={ label }\n required={ required } />\n {\n values.map((v, index) => {\n return (\n <Label\n id={ prefixId(`${ id }-${ index }`) }\n key={ v.value }\n label={ v.label }\n required={ false }>\n <input\n checked={ v.value === value }\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(`${ id }-${ index }`) }\n type=\"radio\"\n onClick={ () => onChange(v.value) } />\n </Label>\n );\n })\n }\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nRadio.create = function(options = {}) {\n return {\n values: [\n {\n label: 'Value',\n value: 'value'\n }\n ],\n ...options\n };\n};\n\nRadio.type = type;\nRadio.label = 'Radio';\nRadio.keyed = true;","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'select';\n\nexport default function Select(props) {\n const {\n disabled,\n errors = [],\n field,\n value\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {},\n values\n } = field;\n\n const { required } = validate;\n\n const onChange = ({ target }) => {\n props.onChange({\n field,\n value: target.value === '' ? undefined : target.value\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ required } />\n <select\n class=\"fjs-select\"\n disabled={ disabled }\n id={ prefixId(id) }\n onChange={ onChange }\n value={ value }>\n <option value=\"\"></option>\n {\n values.map((v) => {\n return (\n <option\n key={ v.value }\n value={ v.value }>\n { v.label }\n </option>\n );\n })\n }\n </select>\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nSelect.create = function(options = {}) {\n\n return {\n values: [\n {\n label: 'Value',\n value: 'value'\n }\n ],\n ...options\n };\n};\n\nSelect.type = type;\nSelect.label = 'Select';\nSelect.keyed = true;","import Markup from 'preact-markup';\n\nimport {\n formFieldClasses,\n safeMarkdown\n} from '../Util';\n\nconst type = 'text';\n\n\nexport default function Text(props) {\n const { field } = props;\n\n const { text = '' } = field;\n\n return <div class={ formFieldClasses(type) }>\n <Markup markup={ safeMarkdown(text) } trim={ false } />\n </div>;\n}\n\nText.create = function(options = {}) {\n return {\n text: '# Text',\n ...options\n };\n};\n\nText.type = type;\nText.keyed = false;","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'textfield';\n\n\nexport default function Textfield(props) {\n const {\n disabled,\n errors = [],\n field,\n value = ''\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {}\n } = field;\n\n const { required } = validate;\n\n const onChange = ({ target }) => {\n props.onChange({\n field,\n value: target.value\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ required } />\n <input\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(id) }\n onInput={ onChange }\n type=\"text\"\n value={ value } />\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nTextfield.create = function(options = {}) {\n return {\n ...options\n };\n};\n\nTextfield.type = type;\nTextfield.label = 'Text Field';\nTextfield.keyed = true;","import Button from './form-fields/Button';\nimport Checkbox from './form-fields/Checkbox';\nimport Default from './form-fields/Default';\nimport FormComponent from './FormComponent';\nimport Number from './form-fields/Number';\nimport Radio from './form-fields/Radio';\nimport Select from './form-fields/Select';\nimport Text from './form-fields/Text';\nimport Textfield from './form-fields/Textfield';\n\nexport {\n Button,\n Checkbox,\n Default,\n FormComponent,\n Number,\n Radio,\n Select,\n Text,\n Textfield\n};\n\nexport const formFields = [\n Button,\n Checkbox,\n Default,\n Number,\n Radio,\n Select,\n Text,\n Textfield\n];","import { formFields } from './components';\n\nexport default class FormFields {\n constructor() {\n this._formFields = {};\n\n formFields.forEach((formField) => {\n const { type } = formField;\n\n this.register(type, formField);\n });\n }\n\n register(type, formField) {\n this._formFields[ type ] = formField;\n }\n\n get(type) {\n return this._formFields[ type ];\n }\n}","import { render } from 'preact';\nimport { useCallback, useState } from 'preact/hooks';\n\nimport FormComponent from './components/FormComponent';\n\nimport { FormContext } from './context';\n\n/**\n * @typedef { { container } } Config\n * @typedef { import('didi').Injector } Injector\n * @typedef { import('../core/EventBus').default } EventBus\n * @typedef { import('../Form').default } Form\n */\n\n/**\n * @param {Config} config\n * @param {EventBus} eventBus\n * @param {Form} form\n * @param {Injector} injector\n */\nexport default function Renderer(config, eventBus, form, injector) {\n\n const App = () => {\n const [ state, setState ] = useState(form._getState());\n\n const formContext = {\n getService(type, strict = true) {\n return injector.get(type, strict);\n }\n };\n\n eventBus.on('changed', (newState) => {\n setState(newState);\n });\n\n const onChange = useCallback((update) => form._update(update), [ form ]);\n\n const { properties } = state;\n\n const { readOnly } = properties;\n\n const onSubmit = useCallback(() => {\n if (!readOnly) {\n form.submit();\n }\n }, [ form, readOnly ]);\n\n const onReset = useCallback(() => form.reset(), [ form ]);\n\n const { schema } = state;\n\n if (!schema) {\n return null;\n }\n\n return (\n <FormContext.Provider value={ formContext }>\n <FormComponent\n onChange={ onChange }\n onSubmit={ onSubmit }\n onReset={ onReset } />\n </FormContext.Provider>\n );\n };\n\n const { container } = config;\n\n eventBus.on('form.init', () => {\n render(<App />, container);\n });\n\n eventBus.on('form.destroy', () => {\n render(null, container);\n });\n}\n\nRenderer.$inject = [ 'config.renderer', 'eventBus', 'form', 'injector' ];","import FormFields from './FormFields';\nimport Renderer from './Renderer';\n\nexport { FormFields };\n\nexport * from './components';\nexport * from './context';\n\nexport default {\n __init__: [ 'formFields', 'renderer' ],\n formFields: [ 'type', FormFields ],\n renderer: [ 'type', Renderer ]\n};","import EventBus from './EventBus';\nimport Validator from './Validator';\nimport FormFieldRegistry from './FormFieldRegistry';\n\nimport importModule from '../import';\nimport renderModule from '../render';\n\nexport default {\n __depends__: [ importModule, renderModule ],\n eventBus: [ 'type', EventBus ],\n formFieldRegistry: [ 'type', FormFieldRegistry ],\n validator: [ 'type', Validator ]\n};","import {\r\n get,\r\n isString,\r\n set\r\n} from 'min-dash';\r\n\r\nimport {\r\n clone,\r\n createInjector,\r\n createFormContainer,\r\n pathStringify\r\n} from './util';\r\n\r\nimport core from './core';\r\n\r\n/**\r\n * @typedef { import('./types').Injector } Injector\r\n * @typedef { import('./types').Data } Data\r\n * @typedef { import('./types').Errors } Errors\r\n * @typedef { import('./types').Schema } Schema\r\n * @typedef { import('./types').FormProperties } FormProperties\r\n * @typedef { import('./types').FormProperty } FormProperty\r\n * @typedef { import('./types').FormEvent } FormEvent\r\n * @typedef { import('./types').FormOptions } FormOptions\r\n *\r\n * @typedef { {\r\n * data: Data,\r\n * initialData: Data,\r\n * errors: Errors,\r\n * properties: FormProperties,\r\n * schema: Schema\r\n * } } State\r\n */\r\n\r\n\r\n/**\r\n * The form.\r\n */\r\nexport default class Form {\r\n\r\n /**\r\n * @constructor\r\n * @param {FormOptions} options\r\n */\r\n constructor(options = {}) {\r\n\r\n /**\r\n * @private\r\n * @type {Element}\r\n */\r\n this._container = createFormContainer();\r\n\r\n const {\r\n container,\r\n injector = this._createInjector(options, this._container),\r\n properties = {}\r\n } = options;\r\n\r\n /**\r\n * @private\r\n * @type {State}\r\n */\r\n this._state = {\r\n initialData: null,\r\n data: null,\r\n properties,\r\n errors: {},\r\n schema: null\r\n };\r\n\r\n this.get = injector.get;\r\n\r\n this.invoke = injector.invoke;\r\n\r\n this.get('eventBus').fire('form.init');\r\n\r\n if (container) {\r\n this.attachTo(container);\r\n }\r\n }\r\n\r\n clear() {\r\n\r\n // Clear form services\r\n this._emit('diagram.clear');\r\n\r\n // Clear diagram services (e.g. EventBus)\r\n this._emit('form.clear');\r\n\r\n this.get('formFieldRegistry').clear();\r\n }\r\n\r\n /**\r\n * Destroy the form, removing it from DOM,\r\n * if attached.\r\n */\r\n destroy() {\r\n\r\n // Destroy form services\r\n this.get('eventBus').fire('form.destroy');\r\n\r\n // Destroy diagram services (e.g. EventBus)\r\n this.get('eventBus').fire('diagram.destroy');\r\n\r\n this._detach(false);\r\n }\r\n\r\n /**\r\n * Open a form schema with the given initial data.\r\n *\r\n * @param {Schema} schema\r\n * @param {Data} [data]\r\n *\r\n * @return Promise<{ warnings: Array<any> }>\r\n */\r\n importSchema(schema, data = {}) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n this.clear();\r\n\r\n const {\r\n schema: importedSchema,\r\n data: importedData,\r\n warnings\r\n } = this.get('importer').importSchema(schema, data);\r\n\r\n this._setState({\r\n data: importedData,\r\n errors: {},\r\n schema: importedSchema,\r\n initialData: clone(importedData)\r\n });\r\n\r\n this._emit('import.done', { warnings });\r\n\r\n return resolve({ warnings });\r\n } catch (error) {\r\n this._emit('import.done', {\r\n error,\r\n warnings: error.warnings || []\r\n });\r\n\r\n return reject(error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Submit the form, triggering all field validations.\r\n *\r\n * @returns { { data: Data, errors: Errors } }\r\n */\r\n submit() {\r\n\r\n const {\r\n properties\r\n } = this._getState();\r\n\r\n if (properties.readOnly) {\r\n throw new Error('form is read-only');\r\n }\r\n\r\n const formFieldRegistry = this.get('formFieldRegistry');\r\n\r\n // do not submit disabled form fields\r\n const data = Array.from(formFieldRegistry.values()).reduce((data, field) => {\r\n const {\r\n disabled,\r\n _path\r\n } = field;\r\n\r\n if (disabled) {\r\n\r\n // strip disabled field value\r\n set(data, _path, undefined);\r\n }\r\n\r\n return data;\r\n }, clone(this._getState().data));\r\n\r\n const errors = this.validate();\r\n\r\n this._emit('submit', {\r\n data,\r\n errors\r\n });\r\n\r\n return {\r\n data,\r\n errors\r\n };\r\n }\r\n\r\n reset() {\r\n this._emit('reset');\r\n\r\n this._setState({\r\n data: clone(this._state.initialData),\r\n errors: {}\r\n });\r\n }\r\n\r\n /**\r\n * @returns {Errors}\r\n */\r\n validate() {\r\n const formFieldRegistry = this.get('formFieldRegistry'),\r\n validator = this.get('validator');\r\n\r\n const { data } = this._getState();\r\n\r\n const errors = Array.from(formFieldRegistry.values()).reduce((errors, field) => {\r\n const {\r\n disabled,\r\n _path\r\n } = field;\r\n\r\n if (disabled) {\r\n return errors;\r\n }\r\n\r\n const value = get(data, _path);\r\n\r\n const fieldErrors = validator.validateField(field, value);\r\n\r\n return set(errors, [ pathStringify(_path) ], fieldErrors.length ? fieldErrors : undefined);\r\n }, /** @type {Errors} */ ({}));\r\n\r\n this._setState({ errors });\r\n\r\n return errors;\r\n }\r\n\r\n /**\r\n * @param {Element|string} parentNode\r\n */\r\n attachTo(parentNode) {\r\n if (!parentNode) {\r\n throw new Error('parentNode required');\r\n }\r\n\r\n this.detach();\r\n\r\n if (isString(parentNode)) {\r\n parentNode = document.querySelector(parentNode);\r\n }\r\n\r\n const container = this._container;\r\n\r\n parentNode.appendChild(container);\r\n\r\n this._emit('attach');\r\n }\r\n\r\n detach() {\r\n this._detach();\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @param {boolean} [emit]\r\n */\r\n _detach(emit = true) {\r\n const container = this._container,\r\n parentNode = container.parentNode;\r\n\r\n if (!parentNode) {\r\n return;\r\n }\r\n\r\n if (emit) {\r\n this._emit('detach');\r\n }\r\n\r\n parentNode.removeChild(container);\r\n }\r\n\r\n /**\r\n * @param {FormProperty} property\r\n * @param {any} value\r\n */\r\n setProperty(property, value) {\r\n const properties = set(this._getState().properties, [ property ], value);\r\n\r\n this._setState({ properties });\r\n }\r\n\r\n /**\r\n * @param {FormEvent} type\r\n * @param {number} priority\r\n * @param {Function} handler\r\n */\r\n on(type, priority, handler) {\r\n this.get('eventBus').on(type, priority, handler);\r\n }\r\n\r\n /**\r\n * @param {FormEvent} type\r\n * @param {Function} handler\r\n */\r\n off(type, handler) {\r\n this.get('eventBus').off(type, handler);\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @param {FormOptions} options\r\n * @param {Element} container\r\n *\r\n * @returns {Injector}\r\n */\r\n _createInjector(options, container) {\r\n const {\r\n additionalModules = [],\r\n modules = []\r\n } = options;\r\n\r\n const config = {\r\n renderer: {\r\n container\r\n }\r\n };\r\n\r\n return createInjector([\r\n { config: [ 'value', config ] },\r\n { form: [ 'value', this ] },\r\n core,\r\n ...modules,\r\n ...additionalModules\r\n ]);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n _emit(type, data) {\r\n this.get('eventBus').fire(type, data);\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * @param { { add?: boolean, field: any, remove?: number, value?: any } } update\r\n */\r\n _update(update) {\r\n const {\r\n field,\r\n value\r\n } = update;\r\n\r\n const { _path } = field;\r\n\r\n let {\r\n data,\r\n errors\r\n } = this._getState();\r\n\r\n const validator = this.get('validator');\r\n\r\n const fieldErrors = validator.validateField(field, value);\r\n\r\n set(data, _path, value);\r\n\r\n set(errors, [ pathStringify(_path) ], fieldErrors.length ? fieldErrors : undefined);\r\n\r\n this._setState({\r\n data: clone(data),\r\n errors: clone(errors)\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n _getState() {\r\n return this._state;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n _setState(state) {\r\n this._state = {\r\n ...this._state,\r\n ...state\r\n };\r\n\r\n this._emit('changed', this._getState());\r\n }\r\n\r\n}","import Form from './Form';\r\n\r\nexport * from './render';\r\nexport * from './util';\r\n\r\nconst schemaVersion = 2;\r\n\r\nexport {\r\n Form,\r\n schemaVersion\r\n};\r\n\r\n/**\r\n * @typedef { import('./types').CreateFormOptions } CreateFormOptions\r\n */\r\n\r\n/**\r\n * Create a form.\r\n *\r\n * @param {CreateFormOptions} options\r\n *\r\n * @return {Promise<Form>}\r\n */\r\nexport function createForm(options) {\r\n const {\r\n data,\r\n schema,\r\n ...rest\r\n } = options;\r\n\r\n const form = new Form(rest);\r\n\r\n return form.importSchema(schema, data).then(function() {\r\n return form;\r\n });\r\n}"],"names":["createInjector","bootstrapModules","modules","components","hasModule","module","includes","addModule","push","visit","__depends__","forEach","__init__","component","injector","Injector","err","console","error","stack","createFormContainer","prefix","container","document","createElement","classList","add","findErrors","errors","path","pathStringify","isRequired","field","required","pathParse","split","map","key","isNaN","parseInt","pathsEqual","a","b","length","every","value","index","join","indices","generateIndexForType","type","generateIdForType","clone","data","replacer","JSON","parse","stringify","FN_REF","DEFAULT_PRIORITY","slice","Array","prototype","EventBus","_listeners","on","_destroy","events","priority","callback","that","isArray","isFunction","isNumber","Error","actualCallback","bind","self","e","_addListener","next","once","event","wrappedCallback","__isTomb","result","apply","arguments","off","_removeListener","createEvent","InternalEvent","init","fire","firstListener","returnValue","args","call","originalType","_invokeListeners","undefined","defaultPrevented","handleError","listener","cancelBubble","_invokeListener","invokeFunction","stopPropagation","preventDefault","newListener","_getListeners","previousListener","_setListeners","name","nextListener","listenerCallback","assign","fn","Validator","validateField","validate","pattern","RegExp","test","min","max","trim","minLength","maxLength","Map","Importer","constructor","formFieldRegistry","formFields","_formFieldRegistry","_formFields","importSchema","schema","warnings","importedData","importedSchema","importFormField","formField","parentId","id","_parent","get","_path","set","importFormFields","$inject","importer","NODE_TYPE_TEXT","NODE_TYPE_ELEMENT","ALLOWED_NODES","ALLOWED_ATTRIBUTES","ALLOWED_URI_PATTERN","ATTR_WHITESPACE_PATTERN","FORM_ELEMENT","sanitizeHTML","html","doc","DOMParser","parseFromString","normalize","element","body","firstChild","sanitizeNode","XMLSerializer","serializeToString","node","nodeType","remove","lcTag","tagName","toLowerCase","attributes","i","attribute","lcName","removeAttribute","valid","isValidAttribute","setAttribute","getAttribute","childNodes","replace","formFieldClasses","classes","prefixId","markdownToHTML","markdown","htmls","line","snarkdown","safeMarkdown","Button","props","disabled","action","_jsx","label","create","options","keyed","Description","description","Errors","Label","_jsxs","children","Checkbox","onChange","target","checked","FormRenderContext","createContext","Empty","Children","Element","getService","strict","FormContext","useContext","noop","FormField","useService","form","properties","_getState","FormFieldComponent","fieldErrors","readOnly","Default","childField","_createElement","Logo","Lightbox","open","onBackdropClick","Link","onClick","PoweredBy","setOpen","useState","toggleOpen","Fragment","createPortal","FormComponent","onSubmit","onReset","handleSubmit","handleReset","Number","parsedValue","Radio","values","v","Select","Text","text","Markup","Textfield","FormFields","register","Renderer","config","eventBus","App","state","setState","formContext","newState","useCallback","update","_update","submit","reset","render","renderer","importModule","renderModule","FormFieldRegistry","validator","Form","_container","_createInjector","_state","initialData","invoke","attachTo","clear","_emit","destroy","_detach","Promise","resolve","reject","_setState","from","reduce","parentNode","detach","isString","querySelector","appendChild","emit","removeChild","setProperty","property","handler","additionalModules","core","schemaVersion","createForm","rest","then"],"mappings":"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ACA;AACA;AACA;AACA;;AACO,SAASE,KAAT,CAAeC,IAAf,EAAqBC,QAArB,EAA+B;AACpC,SAAOC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAeJ,IAAf,EAAqBC,QAArB,CAAX,CAAP;AACD;;ACtDD,IAAII,MAAM,GAAG,MAAb;AAEA,IAAIC,gBAAgB,GAAG,IAAvB;AAEA,IAAIC,KAAK,GAAGC,KAAK,CAACC,SAAN,CAAgBF,KAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASG,QAAT,GAAoB;AACjC,OAAKC,UAAL,GAAkB,EAAlB,CADiC;AAIjC;;AACA,OAAKC,EAAL,CAAQ,iBAAR,EAA2B,CAA3B,EAA8B,KAAKC,QAAnC,EAA6C,IAA7C;AACD;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACAH,QAAQ,CAACD,SAAT,CAAmBG,EAAnB,GAAwB,UAASE,MAAT,EAAiBC,QAAjB,EAA2BC,QAA3B,EAAqCC,IAArC,EAA2C;AAEjEH,EAAAA,MAAM,GAAGI,eAAO,CAACJ,MAAD,CAAP,GAAkBA,MAAlB,GAA2B,CAAEA,MAAF,CAApC;;AAEA,MAAIK,kBAAU,CAACJ,QAAD,CAAd,EAA0B;AACxBE,IAAAA,IAAI,GAAGD,QAAP;AACAA,IAAAA,QAAQ,GAAGD,QAAX;AACAA,IAAAA,QAAQ,GAAGT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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/util/injector.js","../src/util/form.js","../src/util/index.js","../../../node_modules/diagram-js/lib/core/EventBus.js","../src/core/Validator.js","../src/core/FormFieldRegistry.js","../src/import/Importer.js","../src/import/index.js","../src/render/components/Sanitizer.js","../src/render/components/Util.js","../src/render/components/form-fields/Button.js","../src/render/components/Description.js","../src/render/components/Errors.js","../src/render/components/Label.js","../src/render/components/form-fields/Checkbox.js","../src/render/context/FormRenderContext.js","../src/render/context/FormContext.js","../src/render/hooks/useService.js","../src/render/components/FormField.js","../src/render/components/form-fields/Default.js","../src/render/components/PoweredBy.js","../src/render/components/FormComponent.js","../src/render/components/form-fields/Number.js","../src/render/components/form-fields/Radio.js","../src/render/components/form-fields/Select.js","../src/render/components/form-fields/Text.js","../src/render/components/form-fields/Textfield.js","../src/render/components/index.js","../src/render/FormFields.js","../src/render/Renderer.js","../src/render/index.js","../src/core/index.js","../src/Form.js","../src/index.js"],"sourcesContent":["import { Injector } from 'didi';\n\nexport function createInjector(bootstrapModules) {\n const modules = [],\n components = [];\n\n function hasModule(module) {\n return modules.includes(module);\n }\n\n function addModule(module) {\n modules.push(module);\n }\n\n function visit(module) {\n if (hasModule(module)) {\n return;\n }\n\n (module.__depends__ || []).forEach(visit);\n\n if (hasModule(module)) {\n return;\n }\n\n addModule(module);\n\n (module.__init__ || []).forEach(function(component) {\n components.push(component);\n });\n }\n\n bootstrapModules.forEach(visit);\n\n const injector = new Injector(modules);\n\n components.forEach(function(component) {\n try {\n injector[ typeof component === 'string' ? 'get' : 'invoke' ](component);\n } catch (err) {\n console.error('Failed to instantiate component');\n console.error(err.stack);\n\n throw err;\n }\n });\n\n return injector;\n}","/**\n * @param {string?} prefix\n *\n * @returns Element\n */\nexport function createFormContainer(prefix = 'fjs') {\n const container = document.createElement('div');\n\n container.classList.add(`${ prefix }-container`);\n\n return container;\n}","export * from './injector';\nexport * from './form';\n\nexport function findErrors(errors, path) {\n return errors[ pathStringify(path) ];\n}\n\nexport function isRequired(field) {\n return field.required;\n}\n\nexport function pathParse(path) {\n if (!path) {\n return [];\n }\n\n return path.split('.').map(key => {\n return isNaN(parseInt(key)) ? key : parseInt(key);\n });\n}\n\nexport function pathsEqual(a, b) {\n return (\n a &&\n b &&\n a.length === b.length &&\n a.every((value, index) => value === b[ index ])\n );\n}\n\nexport function pathStringify(path) {\n if (!path) {\n return '';\n }\n\n return path.join('.');\n}\n\nconst indices = {};\n\nexport function generateIndexForType(type) {\n if (type in indices) {\n indices[ type ]++;\n } else {\n indices[ type ] = 1;\n }\n\n return indices[ type ];\n}\n\nexport function generateIdForType(type) {\n return `${ type }${ generateIndexForType(type) }`;\n}\n\n/**\n * @template T\n * @param {T} data\n * @param {(this: any, key: string, value: any) => any} [replacer]\n * @return {T}\n */\nexport function clone(data, replacer) {\n return JSON.parse(JSON.stringify(data, replacer));\n}","import {\n isFunction,\n isArray,\n isNumber,\n bind,\n assign\n} from 'min-dash';\n\nvar FN_REF = '__fn';\n\nvar DEFAULT_PRIORITY = 1000;\n\nvar slice = Array.prototype.slice;\n\n/**\n * A general purpose event bus.\n *\n * This component is used to communicate across a diagram instance.\n * Other parts of a diagram can use it to listen to and broadcast events.\n *\n *\n * ## Registering for Events\n *\n * The event bus provides the {@link EventBus#on} and {@link EventBus#once}\n * methods to register for events. {@link EventBus#off} can be used to\n * remove event registrations. Listeners receive an instance of {@link Event}\n * as the first argument. It allows them to hook into the event execution.\n *\n * ```javascript\n *\n * // listen for event\n * eventBus.on('foo', function(event) {\n *\n * // access event type\n * event.type; // 'foo'\n *\n * // stop propagation to other listeners\n * event.stopPropagation();\n *\n * // prevent event default\n * event.preventDefault();\n * });\n *\n * // listen for event with custom payload\n * eventBus.on('bar', function(event, payload) {\n * console.log(payload);\n * });\n *\n * // listen for event returning value\n * eventBus.on('foobar', function(event) {\n *\n * // stop event propagation + prevent default\n * return false;\n *\n * // stop event propagation + return custom result\n * return {\n * complex: 'listening result'\n * };\n * });\n *\n *\n * // listen with custom priority (default=1000, higher is better)\n * eventBus.on('priorityfoo', 1500, function(event) {\n * console.log('invoked first!');\n * });\n *\n *\n * // listen for event and pass the context (`this`)\n * eventBus.on('foobar', function(event) {\n * this.foo();\n * }, this);\n * ```\n *\n *\n * ## Emitting Events\n *\n * Events can be emitted via the event bus using {@link EventBus#fire}.\n *\n * ```javascript\n *\n * // false indicates that the default action\n * // was prevented by listeners\n * if (eventBus.fire('foo') === false) {\n * console.log('default has been prevented!');\n * };\n *\n *\n * // custom args + return value listener\n * eventBus.on('sum', function(event, a, b) {\n * return a + b;\n * });\n *\n * // you can pass custom arguments + retrieve result values.\n * var sum = eventBus.fire('sum', 1, 2);\n * console.log(sum); // 3\n * ```\n */\nexport default function EventBus() {\n this._listeners = {};\n\n // cleanup on destroy on lowest priority to allow\n // message passing until the bitter end\n this.on('diagram.destroy', 1, this._destroy, this);\n}\n\n\n/**\n * Register an event listener for events with the given name.\n *\n * The callback will be invoked with `event, ...additionalArguments`\n * that have been passed to {@link EventBus#fire}.\n *\n * Returning false from a listener will prevent the events default action\n * (if any is specified). To stop an event from being processed further in\n * other listeners execute {@link Event#stopPropagation}.\n *\n * Returning anything but `undefined` from a listener will stop the listener propagation.\n *\n * @param {string|Array<string>} events\n * @param {number} [priority=1000] the priority in which this listener is called, larger is higher\n * @param {Function} callback\n * @param {Object} [that] Pass context (`this`) to the callback\n */\nEventBus.prototype.on = function(events, priority, callback, that) {\n\n events = isArray(events) ? events : [ events ];\n\n if (isFunction(priority)) {\n that = callback;\n callback = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (!isNumber(priority)) {\n throw new Error('priority must be a number');\n }\n\n var actualCallback = callback;\n\n if (that) {\n actualCallback = bind(callback, that);\n\n // make sure we remember and are able to remove\n // bound callbacks via {@link #off} using the original\n // callback\n actualCallback[FN_REF] = callback[FN_REF] || callback;\n }\n\n var self = this;\n\n events.forEach(function(e) {\n self._addListener(e, {\n priority: priority,\n callback: actualCallback,\n next: null\n });\n });\n};\n\n\n/**\n * Register an event listener that is executed only once.\n *\n * @param {string} event the event name to register for\n * @param {number} [priority=1000] the priority in which this listener is called, larger is higher\n * @param {Function} callback the callback to execute\n * @param {Object} [that] Pass context (`this`) to the callback\n */\nEventBus.prototype.once = function(event, priority, callback, that) {\n var self = this;\n\n if (isFunction(priority)) {\n that = callback;\n callback = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (!isNumber(priority)) {\n throw new Error('priority must be a number');\n }\n\n function wrappedCallback() {\n wrappedCallback.__isTomb = true;\n\n var result = callback.apply(that, arguments);\n\n self.off(event, wrappedCallback);\n\n return result;\n }\n\n // make sure we remember and are able to remove\n // bound callbacks via {@link #off} using the original\n // callback\n wrappedCallback[FN_REF] = callback;\n\n this.on(event, priority, wrappedCallback);\n};\n\n\n/**\n * Removes event listeners by event and callback.\n *\n * If no callback is given, all listeners for a given event name are being removed.\n *\n * @param {string|Array<string>} events\n * @param {Function} [callback]\n */\nEventBus.prototype.off = function(events, callback) {\n\n events = isArray(events) ? events : [ events ];\n\n var self = this;\n\n events.forEach(function(event) {\n self._removeListener(event, callback);\n });\n\n};\n\n\n/**\n * Create an EventBus event.\n *\n * @param {Object} data\n *\n * @return {Object} event, recognized by the eventBus\n */\nEventBus.prototype.createEvent = function(data) {\n var event = new InternalEvent();\n\n event.init(data);\n\n return event;\n};\n\n\n/**\n * Fires a named event.\n *\n * @example\n *\n * // fire event by name\n * events.fire('foo');\n *\n * // fire event object with nested type\n * var event = { type: 'foo' };\n * events.fire(event);\n *\n * // fire event with explicit type\n * var event = { x: 10, y: 20 };\n * events.fire('element.moved', event);\n *\n * // pass additional arguments to the event\n * events.on('foo', function(event, bar) {\n * alert(bar);\n * });\n *\n * events.fire({ type: 'foo' }, 'I am bar!');\n *\n * @param {string} [name] the optional event name\n * @param {Object} [event] the event object\n * @param {...Object} additional arguments to be passed to the callback functions\n *\n * @return {boolean} the events return value, if specified or false if the\n * default action was prevented by listeners\n */\nEventBus.prototype.fire = function(type, data) {\n var event,\n firstListener,\n returnValue,\n args;\n\n args = slice.call(arguments);\n\n if (typeof type === 'object') {\n data = type;\n type = data.type;\n }\n\n if (!type) {\n throw new Error('no event type specified');\n }\n\n firstListener = this._listeners[type];\n\n if (!firstListener) {\n return;\n }\n\n // we make sure we fire instances of our home made\n // events here. We wrap them only once, though\n if (data instanceof InternalEvent) {\n\n // we are fine, we alread have an event\n event = data;\n } else {\n event = this.createEvent(data);\n }\n\n // ensure we pass the event as the first parameter\n args[0] = event;\n\n // original event type (in case we delegate)\n var originalType = event.type;\n\n // update event type before delegation\n if (type !== originalType) {\n event.type = type;\n }\n\n try {\n returnValue = this._invokeListeners(event, args, firstListener);\n } finally {\n\n // reset event type after delegation\n if (type !== originalType) {\n event.type = originalType;\n }\n }\n\n // set the return value to false if the event default\n // got prevented and no other return value exists\n if (returnValue === undefined && event.defaultPrevented) {\n returnValue = false;\n }\n\n return returnValue;\n};\n\n\nEventBus.prototype.handleError = function(error) {\n return this.fire('error', { error: error }) === false;\n};\n\n\nEventBus.prototype._destroy = function() {\n this._listeners = {};\n};\n\nEventBus.prototype._invokeListeners = function(event, args, listener) {\n\n var returnValue;\n\n while (listener) {\n\n // handle stopped propagation\n if (event.cancelBubble) {\n break;\n }\n\n returnValue = this._invokeListener(event, args, listener);\n\n listener = listener.next;\n }\n\n return returnValue;\n};\n\nEventBus.prototype._invokeListener = function(event, args, listener) {\n\n var returnValue;\n\n if (listener.callback.__isTomb) {\n return returnValue;\n }\n\n try {\n\n // returning false prevents the default action\n returnValue = invokeFunction(listener.callback, args);\n\n // stop propagation on return value\n if (returnValue !== undefined) {\n event.returnValue = returnValue;\n event.stopPropagation();\n }\n\n // prevent default on return false\n if (returnValue === false) {\n event.preventDefault();\n }\n } catch (error) {\n if (!this.handleError(error)) {\n console.error('unhandled error in event listener', error);\n\n throw error;\n }\n }\n\n return returnValue;\n};\n\n/*\n * Add new listener with a certain priority to the list\n * of listeners (for the given event).\n *\n * The semantics of listener registration / listener execution are\n * first register, first serve: New listeners will always be inserted\n * after existing listeners with the same priority.\n *\n * Example: Inserting two listeners with priority 1000 and 1300\n *\n * * before: [ 1500, 1500, 1000, 1000 ]\n * * after: [ 1500, 1500, (new=1300), 1000, 1000, (new=1000) ]\n *\n * @param {string} event\n * @param {Object} listener { priority, callback }\n */\nEventBus.prototype._addListener = function(event, newListener) {\n\n var listener = this._getListeners(event),\n previousListener;\n\n // no prior listeners\n if (!listener) {\n this._setListeners(event, newListener);\n\n return;\n }\n\n // ensure we order listeners by priority from\n // 0 (high) to n > 0 (low)\n while (listener) {\n\n if (listener.priority < newListener.priority) {\n\n newListener.next = listener;\n\n if (previousListener) {\n previousListener.next = newListener;\n } else {\n this._setListeners(event, newListener);\n }\n\n return;\n }\n\n previousListener = listener;\n listener = listener.next;\n }\n\n // add new listener to back\n previousListener.next = newListener;\n};\n\n\nEventBus.prototype._getListeners = function(name) {\n return this._listeners[name];\n};\n\nEventBus.prototype._setListeners = function(name, listener) {\n this._listeners[name] = listener;\n};\n\nEventBus.prototype._removeListener = function(event, callback) {\n\n var listener = this._getListeners(event),\n nextListener,\n previousListener,\n listenerCallback;\n\n if (!callback) {\n\n // clear listeners\n this._setListeners(event, null);\n\n return;\n }\n\n while (listener) {\n\n nextListener = listener.next;\n\n listenerCallback = listener.callback;\n\n if (listenerCallback === callback || listenerCallback[FN_REF] === callback) {\n if (previousListener) {\n previousListener.next = nextListener;\n } else {\n\n // new first listener\n this._setListeners(event, nextListener);\n }\n }\n\n previousListener = listener;\n listener = nextListener;\n }\n};\n\n/**\n * A event that is emitted via the event bus.\n */\nfunction InternalEvent() { }\n\nInternalEvent.prototype.stopPropagation = function() {\n this.cancelBubble = true;\n};\n\nInternalEvent.prototype.preventDefault = function() {\n this.defaultPrevented = true;\n};\n\nInternalEvent.prototype.init = function(data) {\n assign(this, data || {});\n};\n\n\n/**\n * Invoke function. Be fast...\n *\n * @param {Function} fn\n * @param {Array<Object>} args\n *\n * @return {Any}\n */\nfunction invokeFunction(fn, args) {\n return fn.apply(null, args);\n}\n","export default class Validator {\n\n validateField(field, value) {\n\n const { validate } = field;\n\n let errors = [];\n\n if (!validate) {\n return errors;\n }\n\n if (validate.pattern && value && !new RegExp(validate.pattern).test(value)) {\n errors = [\n ...errors,\n `Field must match pattern ${ validate.pattern }.`\n ];\n }\n\n if (validate.required && (typeof value === 'undefined' || value === '')) {\n errors = [\n ...errors,\n 'Field is required.'\n ];\n }\n\n if ('min' in validate && value && value < validate.min) {\n errors = [\n ...errors,\n `Field must have minimum value of ${ validate.min }.`\n ];\n }\n\n if ('max' in validate && value && value > validate.max) {\n errors = [\n ...errors,\n `Field must have maximum value of ${ validate.max }.`\n ];\n }\n\n if ('minLength' in validate && value && value.trim().length < validate.minLength) {\n errors = [\n ...errors,\n `Field must have minimum length of ${ validate.minLength }.`\n ];\n }\n\n if ('maxLength' in validate && value && value.trim().length > validate.maxLength) {\n errors = [\n ...errors,\n `Field must have maximum length of ${ validate.maxLength }.`\n ];\n }\n\n return errors;\n }\n}","import Ids from 'ids';\n\nexport default class FormFieldRegistry {\n constructor(eventBus) {\n this._eventBus = eventBus;\n\n this._formFields = {};\n\n eventBus.on('form.clear', () => this.clear());\n\n this._ids = new Ids([ 32, 36, 1 ]);\n this._keys = new Ids([ 32, 36, 1 ]);\n }\n\n add(formField) {\n const { id } = formField;\n\n if (this._formFields[ id ]) {\n throw new Error(`form field with ID ${ id } already exists`);\n }\n\n this._eventBus.fire('formField.add', { formField });\n\n this._formFields[ id ] = formField;\n }\n\n remove(formField) {\n const { id } = formField;\n\n if (!this._formFields[ id ]) {\n return;\n }\n\n this._eventBus.fire('formField.remove', { formField });\n\n delete this._formFields[ id ];\n }\n\n get(id) {\n return this._formFields[ id ];\n }\n\n getAll() {\n return Object.values(this._formFields);\n }\n\n forEach(callback) {\n this.getAll().forEach((formField) => callback(formField));\n }\n\n clear() {\n this._formFields = {};\n\n this._ids.clear();\n this._keys.clear();\n }\n\n}\n\nFormFieldRegistry.$inject = [ 'eventBus' ];","import { clone, generateIdForType } from '../util';\n\n\nexport default class Importer {\n\n /**\n * @constructor\n * @param { import('../core').FormFieldRegistry } formFieldRegistry\n * @param { import('../render/FormFields').default } formFields\n */\n constructor(formFieldRegistry, formFields) {\n this._formFieldRegistry = formFieldRegistry;\n this._formFields = formFields;\n }\n\n /**\n * Import schema adding `id`, `_parent` and `_path`\n * information to each field and adding it to the\n * form field registry.\n *\n * @param {any} schema\n * @param {any} [data]\n *\n * @return { { warnings: Array<any>, schema: any, data: any } }\n */\n importSchema(schema, data = {}) {\n\n // TODO: Add warnings\n const warnings = [];\n\n try {\n const importedData = clone(data);\n const importedSchema = this.importFormField(clone(schema), importedData);\n\n return {\n warnings,\n schema: importedSchema,\n data: importedData\n };\n } catch (err) {\n err.warnings = warnings;\n\n throw err;\n }\n }\n\n /**\n * @param {any} formField\n * @param {Object} [data]\n * @param {string} [parentId]\n *\n * @return {any} field\n */\n importFormField(formField, data = {}, parentId) {\n const {\n components,\n key,\n type,\n id = generateIdForType(type)\n } = formField;\n\n if (parentId) {\n\n // set form field parent\n formField._parent = parentId;\n }\n\n if (!this._formFields.get(type)) {\n throw new Error(`form field of type <${ type }> not supported`);\n }\n\n if (key) {\n\n // validate <key> uniqueness\n if (this._formFieldRegistry._keys.assigned(key)) {\n throw new Error(`form field with key <${ key }> already exists`);\n }\n\n this._formFieldRegistry._keys.claim(key, formField);\n\n // set form field path\n formField._path = [ key ];\n }\n\n if (id) {\n\n // validate <id> uniqueness\n if (this._formFieldRegistry._ids.assigned(id)) {\n throw new Error(`form field with id <${ id }> already exists`);\n }\n\n this._formFieldRegistry._ids.claim(id, formField);\n }\n\n // set form field ID\n formField.id = id;\n\n this._formFieldRegistry.add(formField);\n\n if (components) {\n this.importFormFields(components, data, id);\n }\n\n return formField;\n }\n\n importFormFields(components, data = {}, parentId) {\n components.forEach((component) => {\n this.importFormField(component, data, parentId);\n });\n }\n}\n\nImporter.$inject = [ 'formFieldRegistry', 'formFields' ];","import Importer from './Importer';\n\nexport default {\n importer: [ 'type', Importer ]\n};","const NODE_TYPE_TEXT = 3,\n NODE_TYPE_ELEMENT = 1;\n\nconst ALLOWED_NODES = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'span',\n 'em',\n 'a',\n 'p',\n 'div',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'blockquote',\n 'img',\n 'pre',\n 'code',\n 'br',\n 'strong'\n];\n\nconst ALLOWED_ATTRIBUTES = [\n 'align',\n 'alt',\n 'class',\n 'href',\n 'id',\n 'name',\n 'rel',\n 'target',\n 'src'\n];\n\nconst ALLOWED_URI_PATTERN = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst ATTR_WHITESPACE_PATTERN = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g; // eslint-disable-line no-control-regex\n\nconst FORM_ELEMENT = document.createElement('form');\n\n/**\n * Sanitize a HTML string and return the cleaned, safe version.\n *\n * @param {string} html\n * @return {string}\n */\nexport function sanitizeHTML(html) {\n\n const doc = new DOMParser().parseFromString(\n `<!DOCTYPE html>\\n<html><body><div>${ html }`,\n 'text/html'\n );\n\n doc.normalize();\n\n const element = doc.body.firstChild;\n\n if (element) {\n sanitizeNode(/** @type Element */ (element));\n\n return new XMLSerializer().serializeToString(element);\n } else {\n\n // handle the case that document parsing\n // does not work at all, due to HTML gibberish\n return '';\n }\n}\n\n/**\n * Recursively sanitize a HTML node, potentially\n * removing it, its children or attributes.\n *\n * Inspired by https://github.com/developit/snarkdown/issues/70\n * and https://github.com/cure53/DOMPurify. Simplified\n * for our use-case.\n *\n * @param {Element} node\n */\nfunction sanitizeNode(node) {\n\n // allow text nodes\n if (node.nodeType === NODE_TYPE_TEXT) {\n return;\n }\n\n // disallow all other nodes but Element\n if (node.nodeType !== NODE_TYPE_ELEMENT) {\n return node.remove();\n }\n\n const lcTag = node.tagName.toLowerCase();\n\n // disallow non-whitelisted tags\n if (!ALLOWED_NODES.includes(lcTag)) {\n return node.remove();\n }\n\n const attributes = node.attributes;\n\n // clean attributes\n for (let i = attributes.length; i--;) {\n const attribute = attributes[i];\n\n const name = attribute.name;\n const lcName = name.toLowerCase();\n\n // normalize node value\n const value = attribute.value.trim();\n\n node.removeAttribute(name);\n\n const valid = isValidAttribute(lcTag, lcName, value);\n\n if (valid) {\n node.setAttribute(name, value);\n }\n\n }\n\n // force noopener on target=\"_blank\" links\n if (lcTag === 'a' && node.getAttribute('target') === '_blank' && node.getAttribute('rel') !== 'noopener') {\n node.setAttribute('rel', 'noopener');\n }\n\n for (let i = node.childNodes.length; i--;) {\n sanitizeNode(/** @type Element */ (node.childNodes[i]));\n }\n}\n\n\n/**\n * Validates attributes for validity.\n *\n * @param {string} lcTag\n * @param {string} lcName\n * @param {string} value\n * @return {boolean}\n */\nfunction isValidAttribute(lcTag, lcName, value) {\n\n // disallow most attributes based on whitelist\n if (!ALLOWED_ATTRIBUTES.includes(lcName)) {\n return false;\n }\n\n // disallow \"DOM clobbering\" / polution of document and wrapping form elements\n if ((lcName === 'id' || lcName === 'name') && (value in document || value in FORM_ELEMENT)) {\n return false;\n }\n\n if (lcName === 'target' && value !== '_blank') {\n return false;\n }\n\n // allow valid url links only\n if (lcName === 'href' && !ALLOWED_URI_PATTERN.test(value.replace(ATTR_WHITESPACE_PATTERN, ''))) {\n return false;\n }\n\n return true;\n}","import snarkdown from '@bpmn-io/snarkdown';\n\nimport { sanitizeHTML } from './Sanitizer';\n\nexport function formFieldClasses(type, errors = []) {\n if (!type) {\n throw new Error('type required');\n }\n\n const classes = [\n 'fjs-form-field',\n `fjs-form-field-${ type }`\n ];\n\n if (errors.length) {\n classes.push('fjs-has-errors');\n }\n\n return classes.join(' ');\n}\n\nexport function prefixId(id) {\n return `fjs-form-${ id }`;\n}\n\nexport function markdownToHTML(markdown) {\n const htmls = markdown\n .split(/(?:\\r?\\n){2,}/)\n .map(line =>\n /^((\\d+.)|[><\\s#-*])/.test(line)\n ? snarkdown(line)\n : `<p>${ snarkdown(line) }</p>`,\n );\n\n return htmls.join('\\n\\n');\n}\n\n// see https://github.com/developit/snarkdown/issues/70\nexport function safeMarkdown(markdown) {\n const html = markdownToHTML(markdown);\n\n return sanitizeHTML(html);\n}","import { formFieldClasses } from '../Util';\n\nconst type = 'button';\n\n\nexport default function Button(props) {\n const {\n disabled,\n field\n } = props;\n\n const { action = 'submit' } = field;\n\n return <div class={ formFieldClasses(type) }>\n <button class=\"fjs-button\" type={ action } disabled={ disabled }>{ field.label }</button>\n </div>;\n}\n\nButton.create = function(options = {}) {\n\n return {\n action: 'submit',\n ...options\n };\n};\n\nButton.type = type;\nButton.label = 'Button';\nButton.keyed = true;","export default function Description(props) {\n const { description } = props;\n\n if (!description) {\n return null;\n }\n\n return <div class=\"fjs-form-field-description\">{ description }</div>;\n}","export default function Errors(props) {\n const { errors } = props;\n\n if (!errors.length) {\n return null;\n }\n\n return <div class=\"fjs-form-field-error\">\n <ul>\n {\n errors.map(error => {\n return <li>{ error }</li>;\n })\n }\n </ul>\n </div>;\n}","export default function Label(props) {\n const {\n id,\n label,\n required = false\n } = props;\n\n return (\n <label for={ id } class=\"fjs-form-field-label\">\n { props.children }\n { label || '' }\n {\n required && <span class=\"fjs-asterix\">*</span>\n }\n </label>\n );\n}","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'checkbox';\n\n\nexport default function Checkbox(props) {\n const {\n disabled,\n errors = [],\n field,\n value = false\n } = props;\n\n const {\n description,\n id,\n label\n } = field;\n\n const onChange = ({ target }) => {\n props.onChange({\n field,\n value: target.checked\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ false }>\n <input\n checked={ value }\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(id) }\n type=\"checkbox\"\n onChange={ onChange } />\n </Label>\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nCheckbox.create = function(options = {}) {\n return {\n ...options\n };\n};\n\nCheckbox.type = type;\nCheckbox.label = 'Checkbox';\nCheckbox.keyed = true;","import { createContext } from 'preact';\n\nconst FormRenderContext = createContext({\n Empty: (props) => {\n return null;\n },\n Children: (props) => {\n return props.children;\n },\n Element: (props) => {\n return props.children;\n }\n});\n\nexport default FormRenderContext;","import { createContext } from 'preact';\n\n/**\n * @param {string} type\n * @param {boolean} [strict]\n *\n * @returns {any}\n */\nfunction getService(type, strict) {}\n\nconst FormContext = createContext({\n getService\n});\n\nexport default FormContext;","import {\n useContext\n} from 'preact/hooks';\n\nimport { FormContext } from '../context';\n\n\nexport default function(type, strict) {\n const {\n getService\n } = useContext(FormContext);\n\n return getService(type, strict);\n}","import { useContext } from 'preact/hooks';\n\nimport { get } from 'min-dash';\n\nimport { FormRenderContext } from '../context';\n\nimport useService from '../hooks/useService';\n\nimport { findErrors } from '../../util';\n\nconst noop = () => false;\n\n\nexport default function FormField(props) {\n const {\n field,\n onChange\n } = props;\n\n const { _path } = field;\n\n const formFields = useService('formFields'),\n form = useService('form');\n\n const {\n data,\n errors,\n properties\n } = form._getState();\n\n const {\n Element\n } = useContext(FormRenderContext);\n\n const FormFieldComponent = formFields.get(field.type);\n\n if (!FormFieldComponent) {\n throw new Error(`cannot render field <${field.type}>`);\n }\n\n const value = get(data, _path);\n\n const fieldErrors = findErrors(errors, _path);\n\n const disabled = properties.readOnly || field.disabled || false;\n\n return (\n <Element field={ field }>\n <FormFieldComponent\n { ...props }\n disabled={ disabled }\n errors={ fieldErrors }\n onChange={ disabled ? noop : onChange }\n value={ value } />\n </Element>\n );\n}","import { useContext } from 'preact/hooks';\n\nimport FormField from '../FormField';\n\nimport { FormRenderContext } from '../../context';\n\n\nexport default function Default(props) {\n const {\n Children,\n Empty\n } = useContext(FormRenderContext);\n\n const { field } = props;\n\n const { components = [] } = field;\n\n return <Children class=\"fjs-vertical-layout\" field={ field }>\n {\n components.map(childField => {\n return <FormField\n { ...props }\n key={ childField.id }\n field={ childField } />;\n })\n }\n {\n components.length ? null : <Empty />\n }\n </Children>;\n}\n\nDefault.create = function(options = {}) {\n return {\n components: [],\n ...options\n };\n};\n\nDefault.type = 'default';\nDefault.keyed = false;","/**\n * This file must not be changed or exchanged.\n *\n * @see http://bpmn.io/license for more information.\n */\nimport { Fragment } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { createPortal } from 'preact/compat';\n\nfunction Logo() {\n return <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14.02 5.57\" width=\"53\" height=\"21\" style=\"vertical-align:middle\"><path fill=\"currentColor\" d=\"M1.88.92v.14c0 .41-.13.68-.4.8.33.14.46.44.46.86v.33c0 .61-.33.95-.95.95H0V0h.95c.65 0 .93.3.93.92zM.63.57v1.06h.24c.24 0 .38-.1.38-.43V.98c0-.28-.1-.4-.32-.4zm0 1.63v1.22h.36c.2 0 .32-.1.32-.39v-.35c0-.37-.12-.48-.4-.48H.63zM4.18.99v.52c0 .64-.31.98-.94.98h-.3V4h-.62V0h.92c.63 0 .94.35.94.99zM2.94.57v1.35h.3c.2 0 .3-.09.3-.37v-.6c0-.29-.1-.38-.3-.38h-.3zm2.89 2.27L6.25 0h.88v4h-.6V1.12L6.1 3.99h-.6l-.46-2.82v2.82h-.55V0h.87zM8.14 1.1V4h-.56V0h.79L9 2.4V0h.56v4h-.64zm2.49 2.29v.6h-.6v-.6zM12.12 1c0-.63.33-1 .95-1 .61 0 .95.37.95 1v2.04c0 .64-.34 1-.95 1-.62 0-.95-.37-.95-1zm.62 2.08c0 .28.13.39.33.39s.32-.1.32-.4V.98c0-.29-.12-.4-.32-.4s-.33.11-.33.4z\" /><path fill=\"currentColor\" d=\"M0 4.53h14.02v1.04H0zM11.08 0h.63v.62h-.63zm.63 4V1h-.63v2.98z\" /></svg>;\n}\n\nfunction Lightbox(props) {\n const { open } = props;\n\n if (!open) {\n return null;\n }\n\n return (\n <div class=\"fjs-powered-by-lightbox\" style=\"z-index: 100; position: fixed; top: 0; left: 0;right: 0; bottom: 0\">\n <div class=\"backdrop\" style=\"width: 100%; height: 100%; background: rgba(40 40 40 / 20%)\" onClick={ props.onBackdropClick }></div>\n <div class=\"notice\" style=\"position: absolute; left: 50%; top: 40%; transform: translate(-50%); width: 260px; padding: 10px; background: white; box-shadow: 0 1px 4px rgba(0 0 0 / 30%); font-family: Helvetica, Arial, sans-serif; font-size: 14px; display: flex; line-height: 1.3\">\n <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\" style=\"margin: 15px 20px 15px 10px; align-self: center; color: #404040\">\n <Logo />\n </a>\n <span>\n Web-based tooling for BPMN, DMN, and forms\n powered by <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\">bpmn.io</a>.\n </span>\n </div>\n </div>\n );\n}\n\nfunction Link(props) {\n return (\n <div class=\"fjs-powered-by fjs-form-field\" style=\"text-align: right\">\n <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\" class=\"fjs-powered-by-link\" title=\"Powered by bpmn.io\" style=\"color: #404040\" onClick={ props.onClick }><Logo /></a>\n </div>\n );\n}\n\nexport default function PoweredBy(props) {\n\n const [ open, setOpen ] = useState(false);\n\n function toggleOpen(open) {\n return (event) => {\n event.preventDefault();\n\n setOpen(open);\n };\n }\n\n return (\n <Fragment>\n {\n createPortal(\n <Lightbox open={ open } onBackdropClick={ toggleOpen(false) } />,\n document.body\n )\n }\n <Link onClick={ toggleOpen(true) } />\n </Fragment>\n );\n}","import FormField from './FormField';\n\nimport PoweredBy from './PoweredBy';\n\nimport useService from '../hooks/useService';\n\nconst noop = () => {};\n\nexport default function FormComponent(props) {\n const form = useService('form');\n\n const { schema } = form._getState();\n\n const {\n onSubmit = noop,\n onReset = noop,\n onChange = noop,\n } = props;\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n onSubmit();\n };\n\n const handleReset = (event) => {\n event.preventDefault();\n\n onReset();\n };\n\n return (\n <form\n class=\"fjs-form\"\n onSubmit={ handleSubmit }\n onReset={ handleReset }\n >\n <FormField\n field={ schema }\n onChange={ onChange }\n />\n\n <PoweredBy />\n </form>\n );\n}","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'number';\n\n\nexport default function Number(props) {\n const {\n disabled,\n errors = [],\n field,\n value\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {}\n } = field;\n\n const { required } = validate;\n\n const onChange = ({ target }) => {\n const parsedValue = parseInt(target.value, 10);\n\n props.onChange({\n field,\n value: isNaN(parsedValue) ? undefined : parsedValue\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ required } />\n <input\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(id) }\n onInput={ onChange }\n type=\"number\"\n value={ value || '' } />\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nNumber.create = function(options = {}) {\n return {\n ...options\n };\n};\n\nNumber.type = type;\nNumber.keyed = true;\nNumber.label = 'Number';","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'radio';\n\n\nexport default function Radio(props) {\n const {\n disabled,\n errors = [],\n field,\n value\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {},\n values\n } = field;\n\n const { required } = validate;\n\n const onChange = (v) => {\n props.onChange({\n field,\n value: v\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n label={ label }\n required={ required } />\n {\n values.map((v, index) => {\n return (\n <Label\n id={ prefixId(`${ id }-${ index }`) }\n key={ v.value }\n label={ v.label }\n required={ false }>\n <input\n checked={ v.value === value }\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(`${ id }-${ index }`) }\n type=\"radio\"\n onClick={ () => onChange(v.value) } />\n </Label>\n );\n })\n }\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nRadio.create = function(options = {}) {\n return {\n values: [\n {\n label: 'Value',\n value: 'value'\n }\n ],\n ...options\n };\n};\n\nRadio.type = type;\nRadio.label = 'Radio';\nRadio.keyed = true;","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'select';\n\nexport default function Select(props) {\n const {\n disabled,\n errors = [],\n field,\n value\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {},\n values\n } = field;\n\n const { required } = validate;\n\n const onChange = ({ target }) => {\n props.onChange({\n field,\n value: target.value === '' ? undefined : target.value\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ required } />\n <select\n class=\"fjs-select\"\n disabled={ disabled }\n id={ prefixId(id) }\n onChange={ onChange }\n value={ value || '' }>\n <option value=\"\"></option>\n {\n values.map((v) => {\n return (\n <option\n key={ v.value }\n value={ v.value }>\n { v.label }\n </option>\n );\n })\n }\n </select>\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nSelect.create = function(options = {}) {\n\n return {\n values: [\n {\n label: 'Value',\n value: 'value'\n }\n ],\n ...options\n };\n};\n\nSelect.type = type;\nSelect.label = 'Select';\nSelect.keyed = true;","import Markup from 'preact-markup';\n\nimport {\n formFieldClasses,\n safeMarkdown\n} from '../Util';\n\nconst type = 'text';\n\n\nexport default function Text(props) {\n const { field } = props;\n\n const { text = '' } = field;\n\n return <div class={ formFieldClasses(type) }>\n <Markup markup={ safeMarkdown(text) } trim={ false } />\n </div>;\n}\n\nText.create = function(options = {}) {\n return {\n text: '# Text',\n ...options\n };\n};\n\nText.type = type;\nText.keyed = false;","import Description from '../Description';\nimport Errors from '../Errors';\nimport Label from '../Label';\n\nimport {\n formFieldClasses,\n prefixId\n} from '../Util';\n\nconst type = 'textfield';\n\n\nexport default function Textfield(props) {\n const {\n disabled,\n errors = [],\n field,\n value = ''\n } = props;\n\n const {\n description,\n id,\n label,\n validate = {}\n } = field;\n\n const { required } = validate;\n\n const onChange = ({ target }) => {\n props.onChange({\n field,\n value: target.value\n });\n };\n\n return <div class={ formFieldClasses(type, errors) }>\n <Label\n id={ prefixId(id) }\n label={ label }\n required={ required } />\n <input\n class=\"fjs-input\"\n disabled={ disabled }\n id={ prefixId(id) }\n onInput={ onChange }\n type=\"text\"\n value={ value } />\n <Description description={ description } />\n <Errors errors={ errors } />\n </div>;\n}\n\nTextfield.create = function(options = {}) {\n return {\n ...options\n };\n};\n\nTextfield.type = type;\nTextfield.label = 'Text Field';\nTextfield.keyed = true;","import Button from './form-fields/Button';\nimport Checkbox from './form-fields/Checkbox';\nimport Default from './form-fields/Default';\nimport FormComponent from './FormComponent';\nimport Number from './form-fields/Number';\nimport Radio from './form-fields/Radio';\nimport Select from './form-fields/Select';\nimport Text from './form-fields/Text';\nimport Textfield from './form-fields/Textfield';\n\nexport {\n Button,\n Checkbox,\n Default,\n FormComponent,\n Number,\n Radio,\n Select,\n Text,\n Textfield\n};\n\nexport const formFields = [\n Button,\n Checkbox,\n Default,\n Number,\n Radio,\n Select,\n Text,\n Textfield\n];","import { formFields } from './components';\n\nexport default class FormFields {\n constructor() {\n this._formFields = {};\n\n formFields.forEach((formField) => {\n const { type } = formField;\n\n this.register(type, formField);\n });\n }\n\n register(type, formField) {\n this._formFields[ type ] = formField;\n }\n\n get(type) {\n return this._formFields[ type ];\n }\n}","import { render } from 'preact';\nimport { useCallback, useState } from 'preact/hooks';\n\nimport FormComponent from './components/FormComponent';\n\nimport { FormContext } from './context';\n\n/**\n * @typedef { { container } } Config\n * @typedef { import('didi').Injector } Injector\n * @typedef { import('../core/EventBus').default } EventBus\n * @typedef { import('../Form').default } Form\n */\n\n/**\n * @param {Config} config\n * @param {EventBus} eventBus\n * @param {Form} form\n * @param {Injector} injector\n */\nexport default function Renderer(config, eventBus, form, injector) {\n\n const App = () => {\n const [ state, setState ] = useState(form._getState());\n\n const formContext = {\n getService(type, strict = true) {\n return injector.get(type, strict);\n }\n };\n\n eventBus.on('changed', (newState) => {\n setState(newState);\n });\n\n const onChange = useCallback((update) => form._update(update), [ form ]);\n\n const { properties } = state;\n\n const { readOnly } = properties;\n\n const onSubmit = useCallback(() => {\n if (!readOnly) {\n form.submit();\n }\n }, [ form, readOnly ]);\n\n const onReset = useCallback(() => form.reset(), [ form ]);\n\n const { schema } = state;\n\n if (!schema) {\n return null;\n }\n\n return (\n <FormContext.Provider value={ formContext }>\n <FormComponent\n onChange={ onChange }\n onSubmit={ onSubmit }\n onReset={ onReset } />\n </FormContext.Provider>\n );\n };\n\n const { container } = config;\n\n eventBus.on('form.init', () => {\n render(<App />, container);\n });\n\n eventBus.on('form.destroy', () => {\n render(null, container);\n });\n}\n\nRenderer.$inject = [ 'config.renderer', 'eventBus', 'form', 'injector' ];","import FormFields from './FormFields';\nimport Renderer from './Renderer';\n\nexport { FormFields };\n\nexport * from './components';\nexport * from './context';\n\nexport default {\n __init__: [ 'formFields', 'renderer' ],\n formFields: [ 'type', FormFields ],\n renderer: [ 'type', Renderer ]\n};","import EventBus from './EventBus';\nimport Validator from './Validator';\nimport FormFieldRegistry from './FormFieldRegistry';\n\nimport importModule from '../import';\nimport renderModule from '../render';\n\nexport { FormFieldRegistry };\n\nexport default {\n __depends__: [ importModule, renderModule ],\n eventBus: [ 'type', EventBus ],\n formFieldRegistry: [ 'type', FormFieldRegistry ],\n validator: [ 'type', Validator ]\n};","import {\r\n get,\r\n isString,\r\n set\r\n} from 'min-dash';\r\n\r\nimport {\r\n clone,\r\n createInjector,\r\n createFormContainer,\r\n pathStringify\r\n} from './util';\r\n\r\nimport core from './core';\r\n\r\n/**\r\n * @typedef { import('./types').Injector } Injector\r\n * @typedef { import('./types').Data } Data\r\n * @typedef { import('./types').Errors } Errors\r\n * @typedef { import('./types').Schema } Schema\r\n * @typedef { import('./types').FormProperties } FormProperties\r\n * @typedef { import('./types').FormProperty } FormProperty\r\n * @typedef { import('./types').FormEvent } FormEvent\r\n * @typedef { import('./types').FormOptions } FormOptions\r\n *\r\n * @typedef { {\r\n * data: Data,\r\n * initialData: Data,\r\n * errors: Errors,\r\n * properties: FormProperties,\r\n * schema: Schema\r\n * } } State\r\n */\r\n\r\n\r\n/**\r\n * The form.\r\n */\r\nexport default class Form {\r\n\r\n /**\r\n * @constructor\r\n * @param {FormOptions} options\r\n */\r\n constructor(options = {}) {\r\n\r\n /**\r\n * @private\r\n * @type {Element}\r\n */\r\n this._container = createFormContainer();\r\n\r\n const {\r\n container,\r\n injector = this._createInjector(options, this._container),\r\n properties = {}\r\n } = options;\r\n\r\n /**\r\n * @private\r\n * @type {State}\r\n */\r\n this._state = {\r\n initialData: null,\r\n data: null,\r\n properties,\r\n errors: {},\r\n schema: null\r\n };\r\n\r\n this.get = injector.get;\r\n\r\n this.invoke = injector.invoke;\r\n\r\n this.get('eventBus').fire('form.init');\r\n\r\n if (container) {\r\n this.attachTo(container);\r\n }\r\n }\r\n\r\n clear() {\r\n\r\n // clear form services\r\n this._emit('diagram.clear');\r\n\r\n // clear diagram services (e.g. EventBus)\r\n this._emit('form.clear');\r\n }\r\n\r\n /**\r\n * Destroy the form, removing it from DOM,\r\n * if attached.\r\n */\r\n destroy() {\r\n\r\n // destroy form services\r\n this.get('eventBus').fire('form.destroy');\r\n\r\n // destroy diagram services (e.g. EventBus)\r\n this.get('eventBus').fire('diagram.destroy');\r\n\r\n this._detach(false);\r\n }\r\n\r\n /**\r\n * Open a form schema with the given initial data.\r\n *\r\n * @param {Schema} schema\r\n * @param {Data} [data]\r\n *\r\n * @return Promise<{ warnings: Array<any> }>\r\n */\r\n importSchema(schema, data = {}) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n this.clear();\r\n\r\n const {\r\n schema: importedSchema,\r\n data: importedData,\r\n warnings\r\n } = this.get('importer').importSchema(schema, data);\r\n\r\n this._setState({\r\n data: importedData,\r\n errors: {},\r\n schema: importedSchema,\r\n initialData: clone(importedData)\r\n });\r\n\r\n this._emit('import.done', { warnings });\r\n\r\n return resolve({ warnings });\r\n } catch (error) {\r\n this._emit('import.done', {\r\n error,\r\n warnings: error.warnings || []\r\n });\r\n\r\n return reject(error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Submit the form, triggering all field validations.\r\n *\r\n * @returns { { data: Data, errors: Errors } }\r\n */\r\n submit() {\r\n\r\n const {\r\n properties\r\n } = this._getState();\r\n\r\n if (properties.readOnly) {\r\n throw new Error('form is read-only');\r\n }\r\n\r\n const formFieldRegistry = this.get('formFieldRegistry');\r\n\r\n // do not submit disabled form fields\r\n const data = formFieldRegistry.getAll().reduce((data, field) => {\r\n const {\r\n disabled,\r\n _path\r\n } = field;\r\n\r\n if (disabled) {\r\n\r\n // strip disabled field value\r\n set(data, _path, undefined);\r\n }\r\n\r\n return data;\r\n }, clone(this._getState().data));\r\n\r\n const errors = this.validate();\r\n\r\n this._emit('submit', {\r\n data,\r\n errors\r\n });\r\n\r\n return {\r\n data,\r\n errors\r\n };\r\n }\r\n\r\n reset() {\r\n this._emit('reset');\r\n\r\n this._setState({\r\n data: clone(this._state.initialData),\r\n errors: {}\r\n });\r\n }\r\n\r\n /**\r\n * @returns {Errors}\r\n */\r\n validate() {\r\n const formFieldRegistry = this.get('formFieldRegistry'),\r\n validator = this.get('validator');\r\n\r\n const { data } = this._getState();\r\n\r\n const errors = formFieldRegistry.getAll().reduce((errors, field) => {\r\n const {\r\n disabled,\r\n _path\r\n } = field;\r\n\r\n if (disabled) {\r\n return errors;\r\n }\r\n\r\n const value = get(data, _path);\r\n\r\n const fieldErrors = validator.validateField(field, value);\r\n\r\n return set(errors, [ pathStringify(_path) ], fieldErrors.length ? fieldErrors : undefined);\r\n }, /** @type {Errors} */ ({}));\r\n\r\n this._setState({ errors });\r\n\r\n return errors;\r\n }\r\n\r\n /**\r\n * @param {Element|string} parentNode\r\n */\r\n attachTo(parentNode) {\r\n if (!parentNode) {\r\n throw new Error('parentNode required');\r\n }\r\n\r\n this.detach();\r\n\r\n if (isString(parentNode)) {\r\n parentNode = document.querySelector(parentNode);\r\n }\r\n\r\n const container = this._container;\r\n\r\n parentNode.appendChild(container);\r\n\r\n this._emit('attach');\r\n }\r\n\r\n detach() {\r\n this._detach();\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @param {boolean} [emit]\r\n */\r\n _detach(emit = true) {\r\n const container = this._container,\r\n parentNode = container.parentNode;\r\n\r\n if (!parentNode) {\r\n return;\r\n }\r\n\r\n if (emit) {\r\n this._emit('detach');\r\n }\r\n\r\n parentNode.removeChild(container);\r\n }\r\n\r\n /**\r\n * @param {FormProperty} property\r\n * @param {any} value\r\n */\r\n setProperty(property, value) {\r\n const properties = set(this._getState().properties, [ property ], value);\r\n\r\n this._setState({ properties });\r\n }\r\n\r\n /**\r\n * @param {FormEvent} type\r\n * @param {number} priority\r\n * @param {Function} handler\r\n */\r\n on(type, priority, handler) {\r\n this.get('eventBus').on(type, priority, handler);\r\n }\r\n\r\n /**\r\n * @param {FormEvent} type\r\n * @param {Function} handler\r\n */\r\n off(type, handler) {\r\n this.get('eventBus').off(type, handler);\r\n }\r\n\r\n /**\r\n * @private\r\n *\r\n * @param {FormOptions} options\r\n * @param {Element} container\r\n *\r\n * @returns {Injector}\r\n */\r\n _createInjector(options, container) {\r\n const {\r\n additionalModules = [],\r\n modules = []\r\n } = options;\r\n\r\n const config = {\r\n renderer: {\r\n container\r\n }\r\n };\r\n\r\n return createInjector([\r\n { config: [ 'value', config ] },\r\n { form: [ 'value', this ] },\r\n core,\r\n ...modules,\r\n ...additionalModules\r\n ]);\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n _emit(type, data) {\r\n this.get('eventBus').fire(type, data);\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * @param { { add?: boolean, field: any, remove?: number, value?: any } } update\r\n */\r\n _update(update) {\r\n const {\r\n field,\r\n value\r\n } = update;\r\n\r\n const { _path } = field;\r\n\r\n let {\r\n data,\r\n errors\r\n } = this._getState();\r\n\r\n const validator = this.get('validator');\r\n\r\n const fieldErrors = validator.validateField(field, value);\r\n\r\n set(data, _path, value);\r\n\r\n set(errors, [ pathStringify(_path) ], fieldErrors.length ? fieldErrors : undefined);\r\n\r\n this._setState({\r\n data: clone(data),\r\n errors: clone(errors)\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n _getState() {\r\n return this._state;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n _setState(state) {\r\n this._state = {\r\n ...this._state,\r\n ...state\r\n };\r\n\r\n this._emit('changed', this._getState());\r\n }\r\n\r\n}","import Form from './Form';\r\n\r\nexport { FormFieldRegistry } from './core';\r\nexport * from './render';\r\nexport * from './util';\r\n\r\nconst schemaVersion = 2;\r\n\r\nexport {\r\n Form,\r\n schemaVersion\r\n};\r\n\r\n/**\r\n * @typedef { import('./types').CreateFormOptions } CreateFormOptions\r\n */\r\n\r\n/**\r\n * Create a form.\r\n *\r\n * @param {CreateFormOptions} options\r\n *\r\n * @return {Promise<Form>}\r\n */\r\nexport function createForm(options) {\r\n const {\r\n data,\r\n schema,\r\n ...rest\r\n } = options;\r\n\r\n const form = new Form(rest);\r\n\r\n return form.importSchema(schema, data).then(function() {\r\n return form;\r\n });\r\n}"],"names":["createInjector","bootstrapModules","modules","components","hasModule","module","includes","addModule","push","visit","__depends__","forEach","__init__","component","injector","Injector","err","console","error","stack","createFormContainer","prefix","container","document","createElement","classList","add","findErrors","errors","path","pathStringify","isRequired","field","required","pathParse","split","map","key","isNaN","parseInt","pathsEqual","a","b","length","every","value","index","join","indices","generateIndexForType","type","generateIdForType","clone","data","replacer","JSON","parse","stringify","FN_REF","DEFAULT_PRIORITY","slice","Array","prototype","EventBus","_listeners","on","_destroy","events","priority","callback","that","isArray","isFunction","isNumber","Error","actualCallback","bind","self","e","_addListener","next","once","event","wrappedCallback","__isTomb","result","apply","arguments","off","_removeListener","createEvent","InternalEvent","init","fire","firstListener","returnValue","args","call","originalType","_invokeListeners","undefined","defaultPrevented","handleError","listener","cancelBubble","_invokeListener","invokeFunction","stopPropagation","preventDefault","newListener","_getListeners","previousListener","_setListeners","name","nextListener","listenerCallback","assign","fn","Validator","validateField","validate","pattern","RegExp","test","min","max","trim","minLength","maxLength","FormFieldRegistry","constructor","eventBus","_eventBus","_formFields","clear","_ids","Ids","_keys","formField","id","remove","get","getAll","Object","values","$inject","Importer","formFieldRegistry","formFields","_formFieldRegistry","importSchema","schema","warnings","importedData","importedSchema","importFormField","parentId","_parent","assigned","claim","_path","importFormFields","importer","NODE_TYPE_TEXT","NODE_TYPE_ELEMENT","ALLOWED_NODES","ALLOWED_ATTRIBUTES","ALLOWED_URI_PATTERN","ATTR_WHITESPACE_PATTERN","FORM_ELEMENT","sanitizeHTML","html","doc","DOMParser","parseFromString","normalize","element","body","firstChild","sanitizeNode","XMLSerializer","serializeToString","node","nodeType","lcTag","tagName","toLowerCase","attributes","i","attribute","lcName","removeAttribute","valid","isValidAttribute","setAttribute","getAttribute","childNodes","replace","formFieldClasses","classes","prefixId","markdownToHTML","markdown","htmls","line","snarkdown","safeMarkdown","Button","props","disabled","action","_jsx","label","create","options","keyed","Description","description","Errors","Label","_jsxs","children","Checkbox","onChange","target","checked","FormRenderContext","createContext","Empty","Children","Element","getService","strict","FormContext","useContext","noop","FormField","useService","form","properties","_getState","FormFieldComponent","fieldErrors","readOnly","Default","childField","_createElement","Logo","Lightbox","open","onBackdropClick","Link","onClick","PoweredBy","setOpen","useState","toggleOpen","Fragment","createPortal","FormComponent","onSubmit","onReset","handleSubmit","handleReset","Number","parsedValue","Radio","v","Select","Text","text","Markup","Textfield","FormFields","register","Renderer","config","App","state","setState","formContext","newState","useCallback","update","_update","submit","reset","render","renderer","importModule","renderModule","validator","Form","_container","_createInjector","_state","initialData","invoke","attachTo","_emit","destroy","_detach","Promise","resolve","reject","_setState","reduce","set","parentNode","detach","isString","querySelector","appendChild","emit","removeChild","setProperty","property","handler","additionalModules","core","schemaVersion","createForm","rest","then"],"mappings":"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;AACA;AACA;AACA;AACA;;AACO,SAASE,KAAT,CAAeC,IAAf,EAAqBC,QAArB,EAA+B;AACpC,SAAOC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAeJ,IAAf,EAAqBC,QAArB,CAAX,CAAP;AACD;;ACtDD,IAAII,MAAM,GAAG,MAAb;AAEA,IAAIC,gBAAgB,GAAG,IAAvB;AAEA,IAAIC,KAAK,GAAGC,KAAK,CAACC,SAAN,CAAgBF,KAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASG,QAAT,GAAoB;AACjC,OAAKC,UAAL,GAAkB,EAAlB,CADiC;AAIjC;;AACA,OAAKC,EAAL,CAAQ,iBAAR,EAA2B,CAA3B,EAA8B,KAAKC,QAAnC,EAA6C,IAA7C;AACD;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACAH,QAAQ,CAACD,SAAT,CAAmBG,EAAnB,GAAwB,UAASE,MAAT,EAAiBC,QAAjB,EAA2BC,QAA3B,EAAqCC,IAArC,EAA2C;AAEjEH,EAAAA,MAAM,GAAGI,eAAO,CAACJ,MAAD,CAAP,GAAkBA,MAAlB,GAA2B,CAAEA,MAAF,CAApC;;AAEA,MAAIK,kBAAU,CAACJ,QAAD,CAAd,EAA0B;AACxBE,IAAAA,IAAI,GAAGD,QAAP;AACAA,IAAAA,QAAQ,GAAGD,QAAX;AACAA,IAAAA,QAAQ,GAA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"}
package/dist/index.es.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { isArray, isFunction, isNumber, bind, assign, get, set, isString } from 'min-dash';
2
+ import Ids from 'ids';
2
3
  import snarkdown from '@bpmn-io/snarkdown';
3
4
  import { jsx, jsxs } from 'preact/jsx-runtime';
4
5
  import { useContext, useState, useCallback } from 'preact/hooks';
@@ -453,11 +454,10 @@ EventBus.prototype._invokeListener = function (event, args, listener) {
453
454
  if (returnValue === false) {
454
455
  event.preventDefault();
455
456
  }
456
- } catch (e) {
457
- if (!this.handleError(e)) {
458
- console.error('unhandled error in event listener');
459
- console.error(e.stack);
460
- throw e;
457
+ } catch (error) {
458
+ if (!this.handleError(error)) {
459
+ console.error('unhandled error in event listener', error);
460
+ throw error;
461
461
  }
462
462
  }
463
463
 
@@ -625,12 +625,74 @@ class Validator {
625
625
 
626
626
  }
627
627
 
628
- var FormFieldRegistry = Map;
628
+ class FormFieldRegistry {
629
+ constructor(eventBus) {
630
+ this._eventBus = eventBus;
631
+ this._formFields = {};
632
+ eventBus.on('form.clear', () => this.clear());
633
+ this._ids = new Ids([32, 36, 1]);
634
+ this._keys = new Ids([32, 36, 1]);
635
+ }
636
+
637
+ add(formField) {
638
+ const {
639
+ id
640
+ } = formField;
641
+
642
+ if (this._formFields[id]) {
643
+ throw new Error(`form field with ID ${id} already exists`);
644
+ }
645
+
646
+ this._eventBus.fire('formField.add', {
647
+ formField
648
+ });
649
+
650
+ this._formFields[id] = formField;
651
+ }
652
+
653
+ remove(formField) {
654
+ const {
655
+ id
656
+ } = formField;
657
+
658
+ if (!this._formFields[id]) {
659
+ return;
660
+ }
661
+
662
+ this._eventBus.fire('formField.remove', {
663
+ formField
664
+ });
665
+
666
+ delete this._formFields[id];
667
+ }
668
+
669
+ get(id) {
670
+ return this._formFields[id];
671
+ }
672
+
673
+ getAll() {
674
+ return Object.values(this._formFields);
675
+ }
676
+
677
+ forEach(callback) {
678
+ this.getAll().forEach(formField => callback(formField));
679
+ }
680
+
681
+ clear() {
682
+ this._formFields = {};
683
+
684
+ this._ids.clear();
685
+
686
+ this._keys.clear();
687
+ }
688
+
689
+ }
690
+ FormFieldRegistry.$inject = ['eventBus'];
629
691
 
630
692
  class Importer {
631
693
  /**
632
694
  * @constructor
633
- * @param { import('../core/FormFieldRegistry').default } formFieldRegistry
695
+ * @param { import('../core').FormFieldRegistry } formFieldRegistry
634
696
  * @param { import('../render/FormFields').default } formFields
635
697
  */
636
698
  constructor(formFieldRegistry, formFields) {
@@ -684,7 +746,7 @@ class Importer {
684
746
  } = formField;
685
747
 
686
748
  if (parentId) {
687
- // Set form field parent
749
+ // set form field parent
688
750
  formField._parent = parentId;
689
751
  }
690
752
 
@@ -693,28 +755,30 @@ class Importer {
693
755
  }
694
756
 
695
757
  if (key) {
696
- this._formFieldRegistry.forEach(formField => {
697
- if (formField.key === key) {
698
- throw new Error(`form field with key <${key}> already exists`);
699
- }
700
- }); // Set form field path
758
+ // validate <key> uniqueness
759
+ if (this._formFieldRegistry._keys.assigned(key)) {
760
+ throw new Error(`form field with key <${key}> already exists`);
761
+ }
762
+
763
+ this._formFieldRegistry._keys.claim(key, formField); // set form field path
701
764
 
702
765
 
703
766
  formField._path = [key];
704
767
  }
705
768
 
706
769
  if (id) {
707
- this._formFieldRegistry.forEach(formField => {
708
- if (formField.id === id) {
709
- throw new Error(`form field with id <${id}> already exists`);
710
- }
711
- });
712
- } // Set form field ID
770
+ // validate <id> uniqueness
771
+ if (this._formFieldRegistry._ids.assigned(id)) {
772
+ throw new Error(`form field with id <${id}> already exists`);
773
+ }
774
+
775
+ this._formFieldRegistry._ids.claim(id, formField);
776
+ } // set form field ID
713
777
 
714
778
 
715
779
  formField.id = id;
716
780
 
717
- this._formFieldRegistry.set(id, formField);
781
+ this._formFieldRegistry.add(formField);
718
782
 
719
783
  if (components) {
720
784
  this.importFormFields(components, data, id);
@@ -875,7 +939,7 @@ function prefixId(id) {
875
939
  function markdownToHTML(markdown) {
876
940
  const htmls = markdown.split(/(?:\r?\n){2,}/).map(line => /^((\d+.)|[><\s#-*])/.test(line) ? snarkdown(line) : `<p>${snarkdown(line)}</p>`);
877
941
  return htmls.join('\n\n');
878
- } // See https://github.com/developit/snarkdown/issues/70
942
+ } // see https://github.com/developit/snarkdown/issues/70
879
943
 
880
944
  function safeMarkdown(markdown) {
881
945
  const html = markdownToHTML(markdown);
@@ -955,15 +1019,10 @@ function Label(props) {
955
1019
  label,
956
1020
  required = false
957
1021
  } = props;
958
-
959
- if (!label) {
960
- return null;
961
- }
962
-
963
1022
  return jsxs("label", {
964
1023
  for: id,
965
1024
  class: "fjs-form-field-label",
966
- children: [props.children, label, required && jsx("span", {
1025
+ children: [props.children, label || '', required && jsx("span", {
967
1026
  class: "fjs-asterix",
968
1027
  children: "*"
969
1028
  })]
@@ -1270,7 +1329,7 @@ function Number(props) {
1270
1329
  disabled,
1271
1330
  errors = [],
1272
1331
  field,
1273
- value = ''
1332
+ value
1274
1333
  } = props;
1275
1334
  const {
1276
1335
  description,
@@ -1304,7 +1363,7 @@ function Number(props) {
1304
1363
  id: prefixId(id),
1305
1364
  onInput: onChange,
1306
1365
  type: "number",
1307
- value: value
1366
+ value: value || ''
1308
1367
  }), jsx(Description, {
1309
1368
  description: description
1310
1369
  }), jsx(Errors, {
@@ -1344,7 +1403,7 @@ function Radio(props) {
1344
1403
  const onChange = v => {
1345
1404
  props.onChange({
1346
1405
  field,
1347
- value: v === value ? undefined : v
1406
+ value: v
1348
1407
  });
1349
1408
  };
1350
1409
 
@@ -1428,7 +1487,7 @@ function Select(props) {
1428
1487
  disabled: disabled,
1429
1488
  id: prefixId(id),
1430
1489
  onChange: onChange,
1431
- value: value,
1490
+ value: value || '',
1432
1491
  children: [jsx("option", {
1433
1492
  value: ""
1434
1493
  }), values.map(v => {
@@ -1695,13 +1754,11 @@ class Form {
1695
1754
  }
1696
1755
 
1697
1756
  clear() {
1698
- // Clear form services
1699
- this._emit('diagram.clear'); // Clear diagram services (e.g. EventBus)
1757
+ // clear form services
1758
+ this._emit('diagram.clear'); // clear diagram services (e.g. EventBus)
1700
1759
 
1701
1760
 
1702
1761
  this._emit('form.clear');
1703
-
1704
- this.get('formFieldRegistry').clear();
1705
1762
  }
1706
1763
  /**
1707
1764
  * Destroy the form, removing it from DOM,
@@ -1710,8 +1767,8 @@ class Form {
1710
1767
 
1711
1768
 
1712
1769
  destroy() {
1713
- // Destroy form services
1714
- this.get('eventBus').fire('form.destroy'); // Destroy diagram services (e.g. EventBus)
1770
+ // destroy form services
1771
+ this.get('eventBus').fire('form.destroy'); // destroy diagram services (e.g. EventBus)
1715
1772
 
1716
1773
  this.get('eventBus').fire('diagram.destroy');
1717
1774
 
@@ -1779,7 +1836,7 @@ class Form {
1779
1836
 
1780
1837
  const formFieldRegistry = this.get('formFieldRegistry'); // do not submit disabled form fields
1781
1838
 
1782
- const data = Array.from(formFieldRegistry.values()).reduce((data, field) => {
1839
+ const data = formFieldRegistry.getAll().reduce((data, field) => {
1783
1840
  const {
1784
1841
  disabled,
1785
1842
  _path
@@ -1826,7 +1883,7 @@ class Form {
1826
1883
  data
1827
1884
  } = this._getState();
1828
1885
 
1829
- const errors = Array.from(formFieldRegistry.values()).reduce((errors, field) => {
1886
+ const errors = formFieldRegistry.getAll().reduce((errors, field) => {
1830
1887
  const {
1831
1888
  disabled,
1832
1889
  _path
@@ -2040,5 +2097,5 @@ function createForm(options) {
2040
2097
  });
2041
2098
  }
2042
2099
 
2043
- export { Button, Checkbox, Default, Form, FormComponent, FormContext, FormFields, FormRenderContext, Number, Radio, Select, Text, Textfield, clone, createForm, createFormContainer, createInjector, findErrors, formFields, generateIdForType, generateIndexForType, isRequired, pathParse, pathStringify, pathsEqual, schemaVersion };
2100
+ export { Button, Checkbox, Default, Form, FormComponent, FormContext, FormFieldRegistry, FormFields, FormRenderContext, Number, Radio, Select, Text, Textfield, clone, createForm, createFormContainer, createInjector, findErrors, formFields, generateIdForType, generateIndexForType, isRequired, pathParse, pathStringify, pathsEqual, schemaVersion };
2044
2101
  //# sourceMappingURL=index.es.js.map