{"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/context/FormRenderContext.js","../src/render/context/FormContext.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/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';\r\n\r\nexport function createInjector(bootstrapModules) {\r\n  const modules = [],\r\n        components = [];\r\n\r\n  function hasModule(module) {\r\n    return modules.includes(module);\r\n  }\r\n\r\n  function addModule(module) {\r\n    modules.push(module);\r\n  }\r\n\r\n  function visit(module) {\r\n    if (hasModule(module)) {\r\n      return;\r\n    }\r\n\r\n    (module.__depends__ || []).forEach(visit);\r\n\r\n    if (hasModule(module)) {\r\n      return;\r\n    }\r\n\r\n    addModule(module);\r\n\r\n    (module.__init__ || []).forEach(function(component) {\r\n      components.push(component);\r\n    });\r\n  }\r\n\r\n  bootstrapModules.forEach(visit);\r\n\r\n  const injector = new Injector(modules);\r\n\r\n  components.forEach(function(component) {\r\n    try {\r\n      injector[ typeof component === 'string' ? 'get' : 'invoke' ](component);\r\n    } catch (err) {\r\n      console.error('Failed to instantiate component');\r\n      console.error(err.stack);\r\n\r\n      throw err;\r\n    }\r\n  });\r\n\r\n  return injector;\r\n}","/**\r\n * @param {string?} prefix\r\n *\r\n * @returns Element\r\n */\r\nexport function createFormContainer(prefix = 'fjs') {\r\n  const container = document.createElement('div');\r\n\r\n  container.classList.add(`${ prefix }-container`);\r\n\r\n  return container;\r\n}","export * from './injector';\r\nexport * from './form';\r\n\r\nexport function findErrors(errors, path) {\r\n  return errors[ pathStringify(path) ];\r\n}\r\n\r\nexport function isRequired(field) {\r\n  return field.required;\r\n}\r\n\r\nexport function pathParse(path) {\r\n  if (!path) {\r\n    return [];\r\n  }\r\n\r\n  return path.split('.').map(key => {\r\n    return isNaN(parseInt(key)) ? key : parseInt(key);\r\n  });\r\n}\r\n\r\nexport function pathsEqual(a, b) {\r\n  return (\r\n    a &&\r\n    b &&\r\n    a.length === b.length &&\r\n    a.every((value, index) => value === b[ index ])\r\n  );\r\n}\r\n\r\nexport function pathStringify(path) {\r\n  if (!path) {\r\n    return '';\r\n  }\r\n\r\n  return path.join('.');\r\n}\r\n\r\nconst indices = {};\r\n\r\nexport function generateIndexForType(type) {\r\n  if (type in indices) {\r\n    indices[ type ]++;\r\n  } else {\r\n    indices[ type ] = 1;\r\n  }\r\n\r\n  return indices[ type ];\r\n}\r\n\r\nexport function generateIdForType(type) {\r\n  return `${ type }${ generateIndexForType(type) }`;\r\n}\r\n\r\n/**\r\n * @template T\r\n * @param {T} data\r\n * @param {(this: any, key: string, value: any) => any} [replacer]\r\n * @return {T}\r\n */\r\nexport function clone(data, replacer) {\r\n  return JSON.parse(JSON.stringify(data, replacer));\r\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","import { isNil } from 'min-dash';\r\n\r\nexport default class Validator {\r\n\r\n  validateField(field, value) {\r\n\r\n    const { validate } = field;\r\n\r\n    let errors = [];\r\n\r\n    if (!validate) {\r\n      return errors;\r\n    }\r\n\r\n    if (validate.pattern && value && !new RegExp(validate.pattern).test(value)) {\r\n      errors = [\r\n        ...errors,\r\n        `Field must match pattern ${ validate.pattern }.`\r\n      ];\r\n    }\r\n\r\n    if (validate.required && (isNil(value) || value === '')) {\r\n      errors = [\r\n        ...errors,\r\n        'Field is required.'\r\n      ];\r\n    }\r\n\r\n    if ('min' in validate && value && value < validate.min) {\r\n      errors = [\r\n        ...errors,\r\n        `Field must have minimum value of ${ validate.min }.`\r\n      ];\r\n    }\r\n\r\n    if ('max' in validate && value && value > validate.max) {\r\n      errors = [\r\n        ...errors,\r\n        `Field must have maximum value of ${ validate.max }.`\r\n      ];\r\n    }\r\n\r\n    if ('minLength' in validate && value && value.trim().length < validate.minLength) {\r\n      errors = [\r\n        ...errors,\r\n        `Field must have minimum length of ${ validate.minLength }.`\r\n      ];\r\n    }\r\n\r\n    if ('maxLength' in validate && value && value.trim().length > validate.maxLength) {\r\n      errors = [\r\n        ...errors,\r\n        `Field must have maximum length of ${ validate.maxLength }.`\r\n      ];\r\n    }\r\n\r\n    return errors;\r\n  }\r\n}","import Ids from 'ids';\r\n\r\nexport default class FormFieldRegistry {\r\n  constructor(eventBus) {\r\n    this._eventBus = eventBus;\r\n\r\n    this._formFields = {};\r\n\r\n    eventBus.on('form.clear', () => this.clear());\r\n\r\n    this._ids = new Ids([ 32, 36, 1 ]);\r\n    this._keys = new Ids([ 32, 36, 1 ]);\r\n  }\r\n\r\n  add(formField) {\r\n    const { id } = formField;\r\n\r\n    if (this._formFields[ id ]) {\r\n      throw new Error(`form field with ID ${ id } already exists`);\r\n    }\r\n\r\n    this._eventBus.fire('formField.add', { formField });\r\n\r\n    this._formFields[ id ] = formField;\r\n  }\r\n\r\n  remove(formField) {\r\n    const { id } = formField;\r\n\r\n    if (!this._formFields[ id ]) {\r\n      return;\r\n    }\r\n\r\n    this._eventBus.fire('formField.remove', { formField });\r\n\r\n    delete this._formFields[ id ];\r\n  }\r\n\r\n  get(id) {\r\n    return this._formFields[ id ];\r\n  }\r\n\r\n  getAll() {\r\n    return Object.values(this._formFields);\r\n  }\r\n\r\n  forEach(callback) {\r\n    this.getAll().forEach((formField) => callback(formField));\r\n  }\r\n\r\n  clear() {\r\n    this._formFields = {};\r\n\r\n    this._ids.clear();\r\n    this._keys.clear();\r\n  }\r\n\r\n}\r\n\r\nFormFieldRegistry.$inject = [ 'eventBus' ];","import {\r\n  get,\r\n  isUndefined\r\n} from 'min-dash';\r\n\r\nimport {\r\n  clone,\r\n  generateIdForType\r\n} from '../util';\r\n\r\n\r\nexport default class Importer {\r\n\r\n  /**\r\n   * @constructor\r\n   * @param { import('../core').FormFieldRegistry } formFieldRegistry\r\n   * @param { import('../render/FormFields').default } formFields\r\n   */\r\n  constructor(formFieldRegistry, formFields) {\r\n    this._formFieldRegistry = formFieldRegistry;\r\n    this._formFields = formFields;\r\n  }\r\n\r\n  /**\r\n   * Import schema adding `id`, `_parent` and `_path`\r\n   * information to each field and adding it to the\r\n   * form field registry.\r\n   *\r\n   * @param {any} schema\r\n   * @param {any} [data]\r\n   *\r\n   * @return { { warnings: Array<any>, schema: any, data: any } }\r\n   */\r\n  importSchema(schema, data = {}) {\r\n\r\n    // TODO: Add warnings\r\n    const warnings = [];\r\n\r\n    try {\r\n      const importedSchema = this.importFormField(clone(schema)),\r\n            importedData = this.importData(clone(data));\r\n\r\n      return {\r\n        warnings,\r\n        schema: importedSchema,\r\n        data: importedData\r\n      };\r\n    } catch (err) {\r\n      err.warnings = warnings;\r\n\r\n      throw err;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {any} formField\r\n   * @param {string} [parentId]\r\n   *\r\n   * @return {any} importedField\r\n   */\r\n  importFormField(formField, parentId) {\r\n    const {\r\n      components,\r\n      key,\r\n      type,\r\n      id = generateIdForType(type)\r\n    } = formField;\r\n\r\n    if (parentId) {\r\n\r\n      // set form field parent\r\n      formField._parent = parentId;\r\n    }\r\n\r\n    if (!this._formFields.get(type)) {\r\n      throw new Error(`form field of type <${ type }> not supported`);\r\n    }\r\n\r\n    if (key) {\r\n\r\n      // validate <key> uniqueness\r\n      if (this._formFieldRegistry._keys.assigned(key)) {\r\n        throw new Error(`form field with key <${ key }> already exists`);\r\n      }\r\n\r\n      this._formFieldRegistry._keys.claim(key, formField);\r\n\r\n      // TODO: buttons should not have key\r\n      if (type !== 'button') {\r\n\r\n        // set form field path\r\n        formField._path = [ key ];\r\n      }\r\n    }\r\n\r\n    if (id) {\r\n\r\n      // validate <id> uniqueness\r\n      if (this._formFieldRegistry._ids.assigned(id)) {\r\n        throw new Error(`form field with id <${ id }> already exists`);\r\n      }\r\n\r\n      this._formFieldRegistry._ids.claim(id, formField);\r\n    }\r\n\r\n    // set form field ID\r\n    formField.id = id;\r\n\r\n    this._formFieldRegistry.add(formField);\r\n\r\n    if (components) {\r\n      this.importFormFields(components, id);\r\n    }\r\n\r\n    return formField;\r\n  }\r\n\r\n  importFormFields(components, parentId) {\r\n    components.forEach((component) => {\r\n      this.importFormField(component, parentId);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * @param {Object} data\r\n   *\r\n   * @return {Object} importedData\r\n   */\r\n  importData(data) {\r\n    return this._formFieldRegistry.getAll().reduce((importedData, formField) => {\r\n      const {\r\n        defaultValue,\r\n        _path,\r\n        type\r\n      } = formField;\r\n\r\n      if (!_path) {\r\n        return importedData;\r\n      }\r\n\r\n      // (1) try to get value from data\r\n      // (2) try to get default value from form field\r\n      // (3) get empty value from form field\r\n      return {\r\n        ...importedData,\r\n        [ _path[ 0 ] ]: get(data, _path, isUndefined(defaultValue) ? this._formFields.get(type).emptyValue : defaultValue)\r\n      };\r\n    }, {});\r\n  }\r\n}\r\n\r\nImporter.$inject = [ 'formFieldRegistry', 'formFields' ];","import Importer from './Importer';\r\n\r\nexport default {\r\n  importer: [ 'type', Importer ]\r\n};","const NODE_TYPE_TEXT = 3,\r\n      NODE_TYPE_ELEMENT = 1;\r\n\r\nconst ALLOWED_NODES = [\r\n  'h1',\r\n  'h2',\r\n  'h3',\r\n  'h4',\r\n  'h5',\r\n  'span',\r\n  'em',\r\n  'a',\r\n  'p',\r\n  'div',\r\n  'ul',\r\n  'ol',\r\n  'li',\r\n  'hr',\r\n  'blockquote',\r\n  'img',\r\n  'pre',\r\n  'code',\r\n  'br',\r\n  'strong'\r\n];\r\n\r\nconst ALLOWED_ATTRIBUTES = [\r\n  'align',\r\n  'alt',\r\n  'class',\r\n  'href',\r\n  'id',\r\n  'name',\r\n  'rel',\r\n  'target',\r\n  'src'\r\n];\r\n\r\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\r\nconst ATTR_WHITESPACE_PATTERN = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g; // eslint-disable-line no-control-regex\r\n\r\nconst FORM_ELEMENT = document.createElement('form');\r\n\r\n/**\r\n * Sanitize a HTML string and return the cleaned, safe version.\r\n *\r\n * @param {string} html\r\n * @return {string}\r\n */\r\nexport function sanitizeHTML(html) {\r\n\r\n  const doc = new DOMParser().parseFromString(\r\n    `<!DOCTYPE html>\\n<html><body><div>${ html }`,\r\n    'text/html'\r\n  );\r\n\r\n  doc.normalize();\r\n\r\n  const element = doc.body.firstChild;\r\n\r\n  if (element) {\r\n    sanitizeNode(/** @type Element */ (element));\r\n\r\n    return new XMLSerializer().serializeToString(element);\r\n  } else {\r\n\r\n    // handle the case that document parsing\r\n    // does not work at all, due to HTML gibberish\r\n    return '';\r\n  }\r\n}\r\n\r\n/**\r\n * Recursively sanitize a HTML node, potentially\r\n * removing it, its children or attributes.\r\n *\r\n * Inspired by https://github.com/developit/snarkdown/issues/70\r\n * and https://github.com/cure53/DOMPurify. Simplified\r\n * for our use-case.\r\n *\r\n * @param {Element} node\r\n */\r\nfunction sanitizeNode(node) {\r\n\r\n  // allow text nodes\r\n  if (node.nodeType === NODE_TYPE_TEXT) {\r\n    return;\r\n  }\r\n\r\n  // disallow all other nodes but Element\r\n  if (node.nodeType !== NODE_TYPE_ELEMENT) {\r\n    return node.remove();\r\n  }\r\n\r\n  const lcTag = node.tagName.toLowerCase();\r\n\r\n  // disallow non-whitelisted tags\r\n  if (!ALLOWED_NODES.includes(lcTag)) {\r\n    return node.remove();\r\n  }\r\n\r\n  const attributes = node.attributes;\r\n\r\n  // clean attributes\r\n  for (let i = attributes.length; i--;) {\r\n    const attribute = attributes[i];\r\n\r\n    const name = attribute.name;\r\n    const lcName = name.toLowerCase();\r\n\r\n    // normalize node value\r\n    const value = attribute.value.trim();\r\n\r\n    node.removeAttribute(name);\r\n\r\n    const valid = isValidAttribute(lcTag, lcName, value);\r\n\r\n    if (valid) {\r\n      node.setAttribute(name, value);\r\n    }\r\n\r\n  }\r\n\r\n  // force noopener on target=\"_blank\" links\r\n  if (lcTag === 'a' && node.getAttribute('target') === '_blank' && node.getAttribute('rel') !== 'noopener') {\r\n    node.setAttribute('rel', 'noopener');\r\n  }\r\n\r\n  for (let i = node.childNodes.length; i--;) {\r\n    sanitizeNode(/** @type Element */ (node.childNodes[i]));\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Validates attributes for validity.\r\n *\r\n * @param {string} lcTag\r\n * @param {string} lcName\r\n * @param {string} value\r\n * @return {boolean}\r\n */\r\nfunction isValidAttribute(lcTag, lcName, value) {\r\n\r\n  // disallow most attributes based on whitelist\r\n  if (!ALLOWED_ATTRIBUTES.includes(lcName)) {\r\n    return false;\r\n  }\r\n\r\n  // disallow \"DOM clobbering\" / polution of document and wrapping form elements\r\n  if ((lcName === 'id' || lcName === 'name') && (value in document || value in FORM_ELEMENT)) {\r\n    return false;\r\n  }\r\n\r\n  if (lcName === 'target' && value !== '_blank') {\r\n    return false;\r\n  }\r\n\r\n  // allow valid url links only\r\n  if (lcName === 'href' && !ALLOWED_URI_PATTERN.test(value.replace(ATTR_WHITESPACE_PATTERN, ''))) {\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}","import snarkdown from '@bpmn-io/snarkdown';\r\n\r\nimport { sanitizeHTML } from './Sanitizer';\r\n\r\nexport function formFieldClasses(type, errors = []) {\r\n  if (!type) {\r\n    throw new Error('type required');\r\n  }\r\n\r\n  const classes = [\r\n    'fjs-form-field',\r\n    `fjs-form-field-${ type }`\r\n  ];\r\n\r\n  if (errors.length) {\r\n    classes.push('fjs-has-errors');\r\n  }\r\n\r\n  return classes.join(' ');\r\n}\r\n\r\nexport function prefixId(id, formId) {\r\n  if (formId) {\r\n    return `fjs-form-${ formId }-${ id }`;\r\n  }\r\n\r\n  return `fjs-form-${ id }`;\r\n}\r\n\r\nexport function markdownToHTML(markdown) {\r\n  const htmls = markdown\r\n    .split(/(?:\\r?\\n){2,}/)\r\n    .map(line =>\r\n      /^((\\d+.)|[><\\s#-*])/.test(line)\r\n        ? snarkdown(line)\r\n        : `<p>${ snarkdown(line) }</p>`,\r\n    );\r\n\r\n  return htmls.join('\\n\\n');\r\n}\r\n\r\n// see https://github.com/developit/snarkdown/issues/70\r\nexport function safeMarkdown(markdown) {\r\n  const html = markdownToHTML(markdown);\r\n\r\n  return sanitizeHTML(html);\r\n}","import { formFieldClasses } from '../Util';\r\n\r\nconst type = 'button';\r\n\r\n\r\nexport default function Button(props) {\r\n  const {\r\n    disabled,\r\n    field\r\n  } = props;\r\n\r\n  const { action = 'submit' } = field;\r\n\r\n  return <div class={ formFieldClasses(type) }>\r\n    <button class=\"fjs-button\" type={ action } disabled={ disabled }>{ field.label }</button>\r\n  </div>;\r\n}\r\n\r\nButton.create = function(options = {}) {\r\n\r\n  return {\r\n    action: 'submit',\r\n    ...options\r\n  };\r\n};\r\n\r\nButton.type = type;\r\nButton.label = 'Button';\r\nButton.keyed = true;","import { createContext } from 'preact';\r\n\r\nconst FormRenderContext = createContext({\r\n  Empty: (props) => {\r\n    return null;\r\n  },\r\n  Children: (props) => {\r\n    return props.children;\r\n  },\r\n  Element: (props) => {\r\n    return props.children;\r\n  }\r\n});\r\n\r\nexport default FormRenderContext;","import { createContext } from 'preact';\r\n\r\n/**\r\n * @param {string} type\r\n * @param {boolean} [strict]\r\n *\r\n * @returns {any}\r\n */\r\nfunction getService(type, strict) {}\r\n\r\nconst FormContext = createContext({\r\n  getService,\r\n  formId: null\r\n});\r\n\r\nexport default FormContext;","export default function Description(props) {\r\n  const { description } = props;\r\n\r\n  if (!description) {\r\n    return null;\r\n  }\r\n\r\n  return <div class=\"fjs-form-field-description\">{ description }</div>;\r\n}","export default function Errors(props) {\r\n  const { errors } = props;\r\n\r\n  if (!errors.length) {\r\n    return null;\r\n  }\r\n\r\n  return <div class=\"fjs-form-field-error\">\r\n    <ul>\r\n      {\r\n        errors.map(error => {\r\n          return <li>{ error }</li>;\r\n        })\r\n      }\r\n    </ul>\r\n  </div>;\r\n}","export default function Label(props) {\r\n  const {\r\n    id,\r\n    label,\r\n    required = false\r\n  } = props;\r\n\r\n  return (\r\n    <label for={ id } class=\"fjs-form-field-label\">\r\n      { props.children }\r\n      { label || '' }\r\n      {\r\n        required && <span class=\"fjs-asterix\">*</span>\r\n      }\r\n    </label>\r\n  );\r\n}","import { useContext } from 'preact/hooks';\r\n\r\nimport { FormContext } from '../../context';\r\n\r\nimport Description from '../Description';\r\nimport Errors from '../Errors';\r\nimport Label from '../Label';\r\n\r\nimport {\r\n  formFieldClasses,\r\n  prefixId\r\n} from '../Util';\r\n\r\nconst type = 'checkbox';\r\n\r\n\r\nexport default function Checkbox(props) {\r\n  const {\r\n    disabled,\r\n    errors = [],\r\n    field,\r\n    value = false\r\n  } = props;\r\n\r\n  const {\r\n    description,\r\n    id,\r\n    label\r\n  } = field;\r\n\r\n  const onChange = ({ target }) => {\r\n    props.onChange({\r\n      field,\r\n      value: target.checked\r\n    });\r\n  };\r\n\r\n  const { formId } = useContext(FormContext);\r\n\r\n  return <div class={ formFieldClasses(type, errors) }>\r\n    <Label\r\n      id={ prefixId(id, formId) }\r\n      label={ label }\r\n      required={ false }>\r\n      <input\r\n        checked={ value }\r\n        class=\"fjs-input\"\r\n        disabled={ disabled }\r\n        id={ prefixId(id, formId) }\r\n        type=\"checkbox\"\r\n        onChange={ onChange } />\r\n    </Label>\r\n    <Description description={ description } />\r\n    <Errors errors={ errors } />\r\n  </div>;\r\n}\r\n\r\nCheckbox.create = function(options = {}) {\r\n  return {\r\n    ...options\r\n  };\r\n};\r\n\r\nCheckbox.type = type;\r\nCheckbox.label = 'Checkbox';\r\nCheckbox.keyed = true;\r\nCheckbox.emptyValue = false;","import {\r\n  useContext\r\n} from 'preact/hooks';\r\n\r\nimport { FormContext } from '../context';\r\n\r\n\r\nexport default function(type, strict) {\r\n  const {\r\n    getService\r\n  } = useContext(FormContext);\r\n\r\n  return getService(type, strict);\r\n}","import { useContext } from 'preact/hooks';\r\n\r\nimport { get } from 'min-dash';\r\n\r\nimport { FormRenderContext } from '../context';\r\n\r\nimport useService from '../hooks/useService';\r\n\r\nimport { findErrors } from '../../util';\r\n\r\nconst noop = () => false;\r\n\r\n\r\nexport default function FormField(props) {\r\n  const {\r\n    field,\r\n    onChange\r\n  } = props;\r\n\r\n  const { _path } = field;\r\n\r\n  const formFields = useService('formFields'),\r\n        form = useService('form');\r\n\r\n  const {\r\n    data,\r\n    errors,\r\n    properties\r\n  } = form._getState();\r\n\r\n  const {\r\n    Element\r\n  } = useContext(FormRenderContext);\r\n\r\n  const FormFieldComponent = formFields.get(field.type);\r\n\r\n  if (!FormFieldComponent) {\r\n    throw new Error(`cannot render field <${field.type}>`);\r\n  }\r\n\r\n  const value = get(data, _path);\r\n\r\n  const fieldErrors = findErrors(errors, _path);\r\n\r\n  const disabled = properties.readOnly || field.disabled || false;\r\n\r\n  return (\r\n    <Element field={ field }>\r\n      <FormFieldComponent\r\n        { ...props }\r\n        disabled={ disabled }\r\n        errors={ fieldErrors }\r\n        onChange={ disabled ? noop : onChange }\r\n        value={ value } />\r\n    </Element>\r\n  );\r\n}","import { useContext } from 'preact/hooks';\r\n\r\nimport FormField from '../FormField';\r\n\r\nimport { FormRenderContext } from '../../context';\r\n\r\n\r\nexport default function Default(props) {\r\n  const {\r\n    Children,\r\n    Empty\r\n  } = useContext(FormRenderContext);\r\n\r\n  const { field } = props;\r\n\r\n  const { components = [] } = field;\r\n\r\n  return <Children class=\"fjs-vertical-layout\" field={ field }>\r\n    {\r\n      components.map(childField => {\r\n        return <FormField\r\n          { ...props }\r\n          key={ childField.id }\r\n          field={ childField } />;\r\n      })\r\n    }\r\n    {\r\n      components.length ? null : <Empty />\r\n    }\r\n  </Children>;\r\n}\r\n\r\nDefault.create = function(options = {}) {\r\n  return {\r\n    components: [],\r\n    ...options\r\n  };\r\n};\r\n\r\nDefault.type = 'default';\r\nDefault.keyed = false;","/**\r\n * This file must not be changed or exchanged.\r\n *\r\n * @see http://bpmn.io/license for more information.\r\n */\r\nimport { Fragment } from 'preact';\r\nimport { useState } from 'preact/hooks';\r\nimport { createPortal } from 'preact/compat';\r\n\r\nfunction Logo() {\r\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>;\r\n}\r\n\r\nfunction Lightbox(props) {\r\n  const { open } = props;\r\n\r\n  if (!open) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div class=\"fjs-powered-by-lightbox\" style=\"z-index: 100; position: fixed; top: 0; left: 0;right: 0; bottom: 0\">\r\n      <div class=\"backdrop\" style=\"width: 100%; height: 100%; background: rgba(40 40 40 / 20%)\" onClick={ props.onBackdropClick }></div>\r\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\">\r\n        <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\" style=\"margin: 15px 20px 15px 10px; align-self: center; color: #404040\">\r\n          <Logo />\r\n        </a>\r\n        <span>\r\n          Web-based tooling for BPMN, DMN, and forms\r\n          powered by <a href=\"https://bpmn.io\" target=\"_blank\" rel=\"noopener\">bpmn.io</a>.\r\n        </span>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nfunction Link(props) {\r\n  return (\r\n    <div class=\"fjs-powered-by fjs-form-field\" style=\"text-align: right\">\r\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>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default function PoweredBy(props) {\r\n\r\n  const [ open, setOpen ] = useState(false);\r\n\r\n  function toggleOpen(open) {\r\n    return (event) => {\r\n      event.preventDefault();\r\n\r\n      setOpen(open);\r\n    };\r\n  }\r\n\r\n  return (\r\n    <Fragment>\r\n      {\r\n        createPortal(\r\n          <Lightbox open={ open } onBackdropClick={ toggleOpen(false) } />,\r\n          document.body\r\n        )\r\n      }\r\n      <Link onClick={ toggleOpen(true) } />\r\n    </Fragment>\r\n  );\r\n}","import FormField from './FormField';\r\n\r\nimport PoweredBy from './PoweredBy';\r\n\r\nimport useService from '../hooks/useService';\r\n\r\nconst noop = () => {};\r\n\r\nexport default function FormComponent(props) {\r\n  const form = useService('form');\r\n\r\n  const { schema } = form._getState();\r\n\r\n  const {\r\n    onSubmit = noop,\r\n    onReset = noop,\r\n    onChange = noop,\r\n  } = props;\r\n\r\n  const handleSubmit = (event) => {\r\n    event.preventDefault();\r\n\r\n    onSubmit();\r\n  };\r\n\r\n  const handleReset = (event) => {\r\n    event.preventDefault();\r\n\r\n    onReset();\r\n  };\r\n\r\n  return (\r\n    <form\r\n      class=\"fjs-form\"\r\n      onSubmit={ handleSubmit }\r\n      onReset={ handleReset }\r\n    >\r\n      <FormField\r\n        field={ schema }\r\n        onChange={ onChange }\r\n      />\r\n\r\n      <PoweredBy />\r\n    </form>\r\n  );\r\n}","import { useContext } from 'preact/hooks';\r\n\r\nimport { FormContext } from '../../context';\r\n\r\nimport Description from '../Description';\r\nimport Errors from '../Errors';\r\nimport Label from '../Label';\r\n\r\nimport {\r\n  formFieldClasses,\r\n  prefixId\r\n} from '../Util';\r\n\r\nconst type = 'number';\r\n\r\n\r\nexport default function Number(props) {\r\n  const {\r\n    disabled,\r\n    errors = [],\r\n    field,\r\n    value\r\n  } = props;\r\n\r\n  const {\r\n    description,\r\n    id,\r\n    label,\r\n    validate = {}\r\n  } = field;\r\n\r\n  const { required } = validate;\r\n\r\n  const onChange = ({ target }) => {\r\n    const parsedValue = parseInt(target.value, 10);\r\n\r\n    props.onChange({\r\n      field,\r\n      value: isNaN(parsedValue) ? null : parsedValue\r\n    });\r\n  };\r\n\r\n  const { formId } = useContext(FormContext);\r\n\r\n  return <div class={ formFieldClasses(type, errors) }>\r\n    <Label\r\n      id={ prefixId(id, formId) }\r\n      label={ label }\r\n      required={ required } />\r\n    <input\r\n      class=\"fjs-input\"\r\n      disabled={ disabled }\r\n      id={ prefixId(id, formId) }\r\n      onInput={ onChange }\r\n      type=\"number\"\r\n      value={ value || '' } />\r\n    <Description description={ description } />\r\n    <Errors errors={ errors } />\r\n  </div>;\r\n}\r\n\r\nNumber.create = function(options = {}) {\r\n  return {\r\n    ...options\r\n  };\r\n};\r\n\r\nNumber.type = type;\r\nNumber.keyed = true;\r\nNumber.label = 'Number';\r\nNumber.emptyValue = null;","import { useContext } from 'preact/hooks';\r\n\r\nimport { FormContext } from '../../context';\r\n\r\nimport Description from '../Description';\r\nimport Errors from '../Errors';\r\nimport Label from '../Label';\r\n\r\nimport {\r\n  formFieldClasses,\r\n  prefixId\r\n} from '../Util';\r\n\r\nconst type = 'radio';\r\n\r\n\r\nexport default function Radio(props) {\r\n  const {\r\n    disabled,\r\n    errors = [],\r\n    field,\r\n    value\r\n  } = props;\r\n\r\n  const {\r\n    description,\r\n    id,\r\n    label,\r\n    validate = {},\r\n    values\r\n  } = field;\r\n\r\n  const { required } = validate;\r\n\r\n  const onChange = (v) => {\r\n    props.onChange({\r\n      field,\r\n      value: v\r\n    });\r\n  };\r\n\r\n  const { formId } = useContext(FormContext);\r\n\r\n  return <div class={ formFieldClasses(type, errors) }>\r\n    <Label\r\n      label={ label }\r\n      required={ required } />\r\n    {\r\n      values.map((v, index) => {\r\n        return (\r\n          <Label\r\n            id={ prefixId(`${ id }-${ index }`, formId) }\r\n            key={ `${ id }-${ index }` }\r\n            label={ v.label }\r\n            required={ false }>\r\n            <input\r\n              checked={ v.value === value }\r\n              class=\"fjs-input\"\r\n              disabled={ disabled }\r\n              id={ prefixId(`${ id }-${ index }`, formId) }\r\n              type=\"radio\"\r\n              onClick={ () => onChange(v.value) } />\r\n          </Label>\r\n        );\r\n      })\r\n    }\r\n    <Description description={ description } />\r\n    <Errors errors={ errors } />\r\n  </div>;\r\n}\r\n\r\nRadio.create = function(options = {}) {\r\n  return {\r\n    values: [\r\n      {\r\n        label: 'Value',\r\n        value: 'value'\r\n      }\r\n    ],\r\n    ...options\r\n  };\r\n};\r\n\r\nRadio.type = type;\r\nRadio.label = 'Radio';\r\nRadio.keyed = true;\r\nRadio.emptyValue = null;","import { useContext } from 'preact/hooks';\r\n\r\nimport { FormContext } from '../../context';\r\n\r\nimport Description from '../Description';\r\nimport Errors from '../Errors';\r\nimport Label from '../Label';\r\n\r\nimport {\r\n  formFieldClasses,\r\n  prefixId\r\n} from '../Util';\r\n\r\nconst type = 'select';\r\n\r\nexport default function Select(props) {\r\n  const {\r\n    disabled,\r\n    errors = [],\r\n    field,\r\n    value\r\n  } = props;\r\n\r\n  const {\r\n    description,\r\n    id,\r\n    label,\r\n    validate = {},\r\n    values\r\n  } = field;\r\n\r\n  const { required } = validate;\r\n\r\n  const onChange = ({ target }) => {\r\n    props.onChange({\r\n      field,\r\n      value: target.value === '' ? null : target.value\r\n    });\r\n  };\r\n\r\n  const { formId } = useContext(FormContext);\r\n\r\n  return <div class={ formFieldClasses(type, errors) }>\r\n    <Label\r\n      id={ prefixId(id, formId) }\r\n      label={ label }\r\n      required={ required } />\r\n    <select\r\n      class=\"fjs-select\"\r\n      disabled={ disabled }\r\n      id={ prefixId(id, formId) }\r\n      onChange={ onChange }\r\n      value={ value || '' }>\r\n      <option value=\"\"></option>\r\n      {\r\n        values.map((v, index) => {\r\n          return (\r\n            <option\r\n              key={ `${ id }-${ index }` }\r\n              value={ v.value }>\r\n              { v.label }\r\n            </option>\r\n          );\r\n        })\r\n      }\r\n    </select>\r\n    <Description description={ description } />\r\n    <Errors errors={ errors } />\r\n  </div>;\r\n}\r\n\r\nSelect.create = function(options = {}) {\r\n\r\n  return {\r\n    values: [\r\n      {\r\n        label: 'Value',\r\n        value: 'value'\r\n      }\r\n    ],\r\n    ...options\r\n  };\r\n};\r\n\r\nSelect.type = type;\r\nSelect.label = 'Select';\r\nSelect.keyed = true;\r\nSelect.emptyValue = null;","import Markup from 'preact-markup';\r\n\r\nimport {\r\n  formFieldClasses,\r\n  safeMarkdown\r\n} from '../Util';\r\n\r\nconst type = 'text';\r\n\r\n\r\nexport default function Text(props) {\r\n  const { field } = props;\r\n\r\n  const { text = '' } = field;\r\n\r\n  return <div class={ formFieldClasses(type) }>\r\n    <Markup markup={ safeMarkdown(text) } trim={ false } />\r\n  </div>;\r\n}\r\n\r\nText.create = function(options = {}) {\r\n  return {\r\n    text: '# Text',\r\n    ...options\r\n  };\r\n};\r\n\r\nText.type = type;\r\nText.keyed = false;","import { useContext } from 'preact/hooks';\r\n\r\nimport { FormContext } from '../../context';\r\n\r\nimport Description from '../Description';\r\nimport Errors from '../Errors';\r\nimport Label from '../Label';\r\n\r\nimport {\r\n  formFieldClasses,\r\n  prefixId\r\n} from '../Util';\r\n\r\nconst type = 'textfield';\r\n\r\n\r\nexport default function Textfield(props) {\r\n  const {\r\n    disabled,\r\n    errors = [],\r\n    field,\r\n    value = ''\r\n  } = props;\r\n\r\n  const {\r\n    description,\r\n    id,\r\n    label,\r\n    validate = {}\r\n  } = field;\r\n\r\n  const { required } = validate;\r\n\r\n  const onChange = ({ target }) => {\r\n    props.onChange({\r\n      field,\r\n      value: target.value\r\n    });\r\n  };\r\n\r\n  const { formId } = useContext(FormContext);\r\n\r\n  return <div class={ formFieldClasses(type, errors) }>\r\n    <Label\r\n      id={ prefixId(id, formId) }\r\n      label={ label }\r\n      required={ required } />\r\n    <input\r\n      class=\"fjs-input\"\r\n      disabled={ disabled }\r\n      id={ prefixId(id, formId) }\r\n      onInput={ onChange }\r\n      type=\"text\"\r\n      value={ value } />\r\n    <Description description={ description } />\r\n    <Errors errors={ errors } />\r\n  </div>;\r\n}\r\n\r\nTextfield.create = function(options = {}) {\r\n  return {\r\n    ...options\r\n  };\r\n};\r\n\r\nTextfield.type = type;\r\nTextfield.label = 'Text Field';\r\nTextfield.keyed = true;\r\nTextfield.emptyValue = '';","import Button from './form-fields/Button';\r\nimport Checkbox from './form-fields/Checkbox';\r\nimport Default from './form-fields/Default';\r\nimport FormComponent from './FormComponent';\r\nimport Number from './form-fields/Number';\r\nimport Radio from './form-fields/Radio';\r\nimport Select from './form-fields/Select';\r\nimport Text from './form-fields/Text';\r\nimport Textfield from './form-fields/Textfield';\r\n\r\nexport {\r\n  Button,\r\n  Checkbox,\r\n  Default,\r\n  FormComponent,\r\n  Number,\r\n  Radio,\r\n  Select,\r\n  Text,\r\n  Textfield\r\n};\r\n\r\nexport const formFields = [\r\n  Button,\r\n  Checkbox,\r\n  Default,\r\n  Number,\r\n  Radio,\r\n  Select,\r\n  Text,\r\n  Textfield\r\n];","import { formFields } from './components';\r\n\r\nexport default class FormFields {\r\n  constructor() {\r\n    this._formFields = {};\r\n\r\n    formFields.forEach((formField) => {\r\n      const { type } = formField;\r\n\r\n      this.register(type, formField);\r\n    });\r\n  }\r\n\r\n  register(type, formField) {\r\n    this._formFields[ type ] = formField;\r\n  }\r\n\r\n  get(type) {\r\n    return this._formFields[ type ];\r\n  }\r\n}","import { render } from 'preact';\r\nimport { useCallback, useState } from 'preact/hooks';\r\n\r\nimport FormComponent from './components/FormComponent';\r\n\r\nimport { FormContext } from './context';\r\n\r\n/**\r\n * @typedef { { container } } Config\r\n * @typedef { import('didi').Injector } Injector\r\n * @typedef { import('../core/EventBus').default } EventBus\r\n * @typedef { import('../Form').default } Form\r\n */\r\n\r\n/**\r\n * @param {Config} config\r\n * @param {EventBus} eventBus\r\n * @param {Form} form\r\n * @param {Injector} injector\r\n */\r\nexport default function Renderer(config, eventBus, form, injector) {\r\n\r\n  const App = () => {\r\n    const [ state, setState ] = useState(form._getState());\r\n\r\n    const formContext = {\r\n      getService(type, strict = true) {\r\n        return injector.get(type, strict);\r\n      },\r\n      formId: form._id\r\n    };\r\n\r\n    eventBus.on('changed', (newState) => {\r\n      setState(newState);\r\n    });\r\n\r\n    const onChange = useCallback((update) => form._update(update), [ form ]);\r\n\r\n    const { properties } = state;\r\n\r\n    const { readOnly } = properties;\r\n\r\n    const onSubmit = useCallback(() => {\r\n      if (!readOnly) {\r\n        form.submit();\r\n      }\r\n    }, [ form, readOnly ]);\r\n\r\n    const onReset = useCallback(() => form.reset(), [ form ]);\r\n\r\n    const { schema } = state;\r\n\r\n    if (!schema) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <FormContext.Provider value={ formContext }>\r\n        <FormComponent\r\n          onChange={ onChange }\r\n          onSubmit={ onSubmit }\r\n          onReset={ onReset } />\r\n      </FormContext.Provider>\r\n    );\r\n  };\r\n\r\n  const { container } = config;\r\n\r\n  eventBus.on('form.init', () => {\r\n    render(<App />, container);\r\n  });\r\n\r\n  eventBus.on('form.destroy', () => {\r\n    render(null, container);\r\n  });\r\n}\r\n\r\nRenderer.$inject = [ 'config.renderer', 'eventBus', 'form', 'injector' ];","import FormFields from './FormFields';\r\nimport Renderer from './Renderer';\r\n\r\nexport { FormFields };\r\n\r\nexport * from './components';\r\nexport * from './context';\r\n\r\nexport default {\r\n  __init__: [ 'formFields', 'renderer' ],\r\n  formFields: [ 'type', FormFields ],\r\n  renderer: [ 'type', Renderer ]\r\n};","import EventBus from './EventBus';\r\nimport Validator from './Validator';\r\nimport FormFieldRegistry from './FormFieldRegistry';\r\n\r\nimport importModule from '../import';\r\nimport renderModule from '../render';\r\n\r\nexport { FormFieldRegistry };\r\n\r\nexport default {\r\n  __depends__: [ importModule, renderModule ],\r\n  eventBus: [ 'type', EventBus ],\r\n  formFieldRegistry: [ 'type', FormFieldRegistry ],\r\n  validator: [ 'type', Validator ]\r\n};","import Ids from 'ids';\r\n\r\nimport {\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\nconst ids = new Ids([ 32, 36, 1 ]);\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     * @public\r\n     * @type {String}\r\n     */\r\n    this._id = ids.next();\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    const data = formFieldRegistry.getAll().reduce((data, field) => {\r\n      const {\r\n        disabled,\r\n        _path\r\n      } = field;\r\n\r\n      // do not submit disabled form fields\r\n      if (disabled || !_path) {\r\n        return data;\r\n      }\r\n\r\n      const value = get(this._getState().data, _path);\r\n\r\n      return {\r\n        ...data,\r\n        [ _path[ 0 ] ]: value\r\n      };\r\n    }, {});\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 = 4;\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","isNil","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","importedSchema","importFormField","importedData","importData","parentId","_parent","assigned","claim","_path","importFormFields","reduce","defaultValue","isUndefined","emptyValue","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","formId","markdownToHTML","markdown","htmls","line","snarkdown","safeMarkdown","Button","props","disabled","action","_jsx","label","create","options","keyed","FormRenderContext","createContext","Empty","Children","children","Element","getService","strict","FormContext","Description","description","Errors","Label","_jsxs","Checkbox","onChange","target","checked","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","_id","newState","useCallback","update","_update","submit","reset","render","renderer","importModule","renderModule","validator","ids","Form","_container","_createInjector","_state","initialData","invoke","attachTo","_emit","destroy","_detach","Promise","resolve","reject","_setState","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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"}