@bpmn-io/form-js-playground 1.8.4 → 1.8.6

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.
@@ -60350,6 +60350,20 @@
60350
60350
  function clone(data, replacer) {
60351
60351
  return JSON.parse(JSON.stringify(data, replacer));
60352
60352
  }
60353
+ function runRecursively(formField, fn) {
60354
+ const components = formField.components || [];
60355
+ components.forEach((component, _) => {
60356
+ runRecursively(component, fn);
60357
+ });
60358
+ fn(formField);
60359
+ }
60360
+ function wrapObjectKeysWithUnderscores(obj) {
60361
+ const newObj = {};
60362
+ for (const [key, value] of Object.entries(obj)) {
60363
+ newObj[`_${key}_`] = value;
60364
+ }
60365
+ return newObj;
60366
+ }
60353
60367
 
60354
60368
  /**
60355
60369
  * Transform a LocalExpressionContext object into a usable FEEL context.
@@ -60366,25 +60380,24 @@
60366
60380
  return {
60367
60381
  ...specialContextKeys,
60368
60382
  ...data,
60369
- ..._wrapObjectKeysWithUnderscores(specialContextKeys)
60383
+ ...wrapObjectKeysWithUnderscores(specialContextKeys)
60370
60384
  };
60371
60385
  }
60372
- function runRecursively(formField, fn) {
60373
- const components = formField.components || [];
60374
- components.forEach((component, index) => {
60375
- runRecursively(component, fn);
60376
- });
60377
- fn(formField);
60378
- }
60379
-
60380
- // helpers //////////////////////
60381
60386
 
60382
- function _wrapObjectKeysWithUnderscores(obj) {
60383
- const newObj = {};
60384
- for (const [key, value] of Object.entries(obj)) {
60385
- newObj[`_${key}_`] = value;
60387
+ /**
60388
+ * Evaluate a string based on the expressionLanguage and context information.
60389
+ * If the string is not an expression, it is returned as is.
60390
+ *
60391
+ * @param {any} expressionLanguage - The expression language to use.
60392
+ * @param {string} value - The string to evaluate.
60393
+ * @param {Object} expressionContextInfo - The context information to use.
60394
+ * @returns {any} - Evaluated value or the original value if not an expression.
60395
+ */
60396
+ function runExpressionEvaluation(expressionLanguage, value, expressionContextInfo) {
60397
+ if (expressionLanguage && expressionLanguage.isExpression(value)) {
60398
+ return expressionLanguage.evaluate(value, buildExpressionContext(expressionContextInfo));
60386
60399
  }
60387
- return newObj;
60400
+ return value;
60388
60401
  }
60389
60402
 
60390
60403
  /**
@@ -60517,12 +60530,7 @@
60517
60530
  function useExpressionEvaluation(value) {
60518
60531
  const expressionLanguage = useService$2('expressionLanguage');
60519
60532
  const expressionContextInfo = F$1(LocalExpressionContext);
60520
- return d(() => {
60521
- if (expressionLanguage && expressionLanguage.isExpression(value)) {
60522
- return expressionLanguage.evaluate(value, buildExpressionContext(expressionContextInfo));
60523
- }
60524
- return value;
60525
- }, [expressionLanguage, expressionContextInfo, value]);
60533
+ return d(() => runExpressionEvaluation(expressionLanguage, value, expressionContextInfo), [expressionLanguage, expressionContextInfo, value]);
60526
60534
  }
60527
60535
 
60528
60536
  /**
@@ -61387,7 +61395,6 @@
61387
61395
  target
61388
61396
  }) => {
61389
61397
  props.onChange({
61390
- field,
61391
61398
  value: target.checked
61392
61399
  });
61393
61400
  };
@@ -61465,7 +61472,6 @@
61465
61472
  const toggleCheckbox = toggledValue => {
61466
61473
  const newValues = hasEqualValue(toggledValue, values) ? values.filter(value => !isEqual$1(value, toggledValue)) : [...values, toggledValue];
61467
61474
  props.onChange({
61468
- field,
61469
61475
  value: newValues
61470
61476
  });
61471
61477
  };
@@ -61552,7 +61558,7 @@
61552
61558
  const {
61553
61559
  field,
61554
61560
  indexes,
61555
- onChange
61561
+ onChange: _onChange
61556
61562
  } = props;
61557
61563
  const formFields = useService$2('formFields'),
61558
61564
  viewerCommands = useService$2('viewerCommands', false),
@@ -61594,21 +61600,22 @@
61594
61600
  // add precedence: global readonly > form field disabled
61595
61601
  const disabled = !properties.readOnly && (properties.disabled || field.disabled || false);
61596
61602
  const hidden = useCondition(field.conditional && field.conditional.hide || null);
61603
+ const fieldInstance = d(() => ({
61604
+ id: field.id,
61605
+ expressionContextInfo: localExpressionContext,
61606
+ valuePath,
61607
+ indexes
61608
+ }), [field.id, valuePath, localExpressionContext, indexes]);
61597
61609
 
61598
61610
  // register form field instance
61599
61611
  y(() => {
61600
61612
  if (formFieldInstanceRegistry && !hidden) {
61601
- const instanceId = formFieldInstanceRegistry.add({
61602
- id: field.id,
61603
- expressionContextInfo: localExpressionContext,
61604
- valuePath,
61605
- indexes
61606
- });
61613
+ const instanceId = formFieldInstanceRegistry.add(fieldInstance);
61607
61614
  return () => {
61608
61615
  formFieldInstanceRegistry.remove(instanceId);
61609
61616
  };
61610
61617
  }
61611
- }, [formFieldInstanceRegistry, field.id, localExpressionContext, valuePath, indexes, hidden]);
61618
+ }, [fieldInstance, formFieldInstanceRegistry, hidden]);
61612
61619
 
61613
61620
  // ensures the initial validation behavior can be re-triggered upon form reset
61614
61621
  y(() => {
@@ -61629,34 +61636,33 @@
61629
61636
  const hasInitialValue = initialValue && !isEqual$1(initialValue, []);
61630
61637
  if (initialValidationTrigger && hasInitialValue) {
61631
61638
  setInitialValidationTrigger(false);
61632
- viewerCommands.updateFieldValidation(field, initialValue, indexes);
61639
+ viewerCommands.updateFieldInstanceValidation(fieldInstance, initialValue);
61633
61640
  }
61634
- }, [viewerCommands, field, initialValue, initialValidationTrigger, indexes]);
61641
+ }, [fieldInstance, initialValidationTrigger, initialValue, viewerCommands]);
61635
61642
  const onBlur = A$1(() => {
61636
61643
  const value = get$1(data, valuePath);
61637
61644
  if (initialValidationTrigger) {
61638
61645
  setInitialValidationTrigger(false);
61639
- viewerCommands.updateFieldValidation(field, value, indexes);
61646
+ viewerCommands.updateFieldInstanceValidation(fieldInstance, value);
61640
61647
  }
61641
61648
  eventBus.fire('formField.blur', {
61642
61649
  formField: field
61643
61650
  });
61644
- }, [eventBus, field, indexes, viewerCommands, initialValidationTrigger, data, valuePath]);
61651
+ }, [data, eventBus, field, fieldInstance, initialValidationTrigger, valuePath, viewerCommands]);
61645
61652
  const onFocus = A$1(() => {
61646
61653
  eventBus.fire('formField.focus', {
61647
61654
  formField: field
61648
61655
  });
61649
61656
  }, [eventBus, field]);
61650
- const onChangeIndexed = A$1(update => {
61651
- // any data change will trigger validation
61657
+ const onChange = A$1(update => {
61652
61658
  setInitialValidationTrigger(false);
61653
-
61654
- // add indexes of the keyed field to the update, if any
61655
- onChange(fieldConfig.keyed ? {
61656
- ...update,
61657
- indexes
61658
- } : update);
61659
- }, [onChange, fieldConfig.keyed, indexes]);
61659
+ _onChange({
61660
+ field,
61661
+ indexes,
61662
+ fieldInstance,
61663
+ ...update
61664
+ });
61665
+ }, [_onChange, field, fieldInstance, indexes]);
61660
61666
  if (hidden) {
61661
61667
  return e(Hidden, {
61662
61668
  field: field
@@ -61669,11 +61675,12 @@
61669
61675
  disabled: disabled,
61670
61676
  errors: fieldErrors,
61671
61677
  domId: domId,
61672
- onChange: disabled || readonly ? noop$1$1 : onChangeIndexed,
61678
+ onChange: disabled || readonly ? noop$1$1 : onChange,
61673
61679
  onBlur: disabled || readonly ? noop$1$1 : onBlur,
61674
61680
  onFocus: disabled || readonly ? noop$1$1 : onFocus,
61675
61681
  readonly: readonly,
61676
- value: value
61682
+ value: value,
61683
+ fieldInstance: fieldInstance
61677
61684
  });
61678
61685
  if (fieldConfig.escapeGridRender) {
61679
61686
  return formFieldElement;
@@ -63795,7 +63802,6 @@
63795
63802
  } = validate;
63796
63803
  const onChange = v => {
63797
63804
  props.onChange({
63798
- field,
63799
63805
  value: v
63800
63806
  });
63801
63807
  };
@@ -63954,10 +63960,9 @@
63954
63960
  const setValue = A$1(option => {
63955
63961
  setFilter(option && option.label || '');
63956
63962
  props.onChange({
63957
- value: option && option.value || null,
63958
- field
63963
+ value: option && option.value || null
63959
63964
  });
63960
- }, [field, props]);
63965
+ }, [props]);
63961
63966
  const displayState = d(() => {
63962
63967
  const ds = {};
63963
63968
  ds.componentReady = !disabled && !readonly && loadState === LOAD_STATES.LOADED;
@@ -64102,10 +64107,9 @@
64102
64107
  const valueLabel = d(() => value && getLabelCorrelation(value), [value, getLabelCorrelation]);
64103
64108
  const setValue = A$1(option => {
64104
64109
  props.onChange({
64105
- value: option && option.value || null,
64106
- field
64110
+ value: option && option.value || null
64107
64111
  });
64108
- }, [field, props]);
64112
+ }, [props]);
64109
64113
  const displayState = d(() => {
64110
64114
  const ds = {};
64111
64115
  ds.componentReady = !disabled && !readonly && loadState === LOAD_STATES.LOADED;
@@ -64437,15 +64441,13 @@
64437
64441
  return;
64438
64442
  }
64439
64443
  props.onChange({
64440
- value: [...values, value],
64441
- field
64444
+ value: [...values, value]
64442
64445
  });
64443
64446
  };
64444
64447
  const deselectValue = value => {
64445
64448
  const newValues = values.filter(v => !isEqual$1(v, value));
64446
64449
  props.onChange({
64447
- value: newValues,
64448
- field
64450
+ value: newValues
64449
64451
  });
64450
64452
  };
64451
64453
  const onInputChange = ({
@@ -64929,7 +64931,6 @@
64929
64931
  target
64930
64932
  }) => {
64931
64933
  props.onChange({
64932
- field,
64933
64934
  value: target.value
64934
64935
  });
64935
64936
  });
@@ -65028,7 +65029,6 @@
65028
65029
  target
65029
65030
  }) => {
65030
65031
  props.onChange({
65031
- field,
65032
65032
  value: target.value
65033
65033
  });
65034
65034
  });
@@ -66534,6 +66534,10 @@
66534
66534
  var commandModule$1 = {
66535
66535
  commandStack: ['type', CommandStack$1]
66536
66536
  };
66537
+
66538
+ /**
66539
+ * @deprecated
66540
+ */
66537
66541
  class UpdateFieldValidationHandler {
66538
66542
  constructor(form, validator) {
66539
66543
  this._form = form;
@@ -66562,6 +66566,37 @@
66562
66566
  }
66563
66567
  }
66564
66568
  UpdateFieldValidationHandler.$inject = ['form', 'validator'];
66569
+ class UpdateFieldInstanceValidationHandler {
66570
+ constructor(form, validator) {
66571
+ this._form = form;
66572
+ this._validator = validator;
66573
+ }
66574
+ execute(context) {
66575
+ const {
66576
+ fieldInstance,
66577
+ value
66578
+ } = context;
66579
+ const {
66580
+ id,
66581
+ indexes
66582
+ } = fieldInstance;
66583
+ const {
66584
+ errors
66585
+ } = this._form._getState();
66586
+ context.oldErrors = clone(errors);
66587
+ const fieldErrors = this._validator.validateFieldInstance(fieldInstance, value);
66588
+ const updatedErrors = set$2(errors, [id, ...Object.values(indexes || {})], fieldErrors.length ? fieldErrors : undefined);
66589
+ this._form._setState({
66590
+ errors: updatedErrors
66591
+ });
66592
+ }
66593
+ revert(context) {
66594
+ this._form._setState({
66595
+ errors: context.oldErrors
66596
+ });
66597
+ }
66598
+ }
66599
+ UpdateFieldInstanceValidationHandler.$inject = ['form', 'validator'];
66565
66600
  class ViewerCommands {
66566
66601
  constructor(commandStack, eventBus) {
66567
66602
  this._commandStack = commandStack;
@@ -66576,9 +66611,14 @@
66576
66611
  }
66577
66612
  getHandlers() {
66578
66613
  return {
66579
- 'formField.validation.update': UpdateFieldValidationHandler
66614
+ 'formField.validation.update': UpdateFieldValidationHandler,
66615
+ 'formFieldInstance.validation.update': UpdateFieldInstanceValidationHandler
66580
66616
  };
66581
66617
  }
66618
+
66619
+ /**
66620
+ * @deprecated
66621
+ */
66582
66622
  updateFieldValidation(field, value, indexes) {
66583
66623
  const context = {
66584
66624
  field,
@@ -66587,6 +66627,13 @@
66587
66627
  };
66588
66628
  this._commandStack.execute('formField.validation.update', context);
66589
66629
  }
66630
+ updateFieldInstanceValidation(fieldInstance, value) {
66631
+ const context = {
66632
+ fieldInstance,
66633
+ value
66634
+ };
66635
+ this._commandStack.execute('formFieldInstance.validation.update', context);
66636
+ }
66590
66637
  }
66591
66638
  ViewerCommands.$inject = ['commandStack', 'eventBus'];
66592
66639
  const ViewerCommandsModule = {
@@ -66818,9 +66865,7 @@
66818
66865
  updatedValues.push(newItem);
66819
66866
  shouldScroll.current = true;
66820
66867
  props.onChange({
66821
- field: repeaterField,
66822
- value: updatedValues,
66823
- indexes
66868
+ value: updatedValues
66824
66869
  });
66825
66870
  setSharedRepeatState(state => ({
66826
66871
  ...state,
@@ -67476,11 +67521,18 @@
67476
67521
  const PHONE_PATTERN = /(\+|00)(297|93|244|1264|358|355|376|971|54|374|1684|1268|61|43|994|257|32|229|226|880|359|973|1242|387|590|375|501|1441|591|55|1246|673|975|267|236|1|61|41|56|86|225|237|243|242|682|57|269|238|506|53|5999|61|1345|357|420|49|253|1767|45|1809|1829|1849|213|593|20|291|212|34|372|251|358|679|500|33|298|691|241|44|995|44|233|350|224|590|220|245|240|30|1473|299|502|594|1671|592|852|504|385|509|36|62|44|91|246|353|98|964|354|972|39|1876|44|962|81|76|77|254|996|855|686|1869|82|383|965|856|961|231|218|1758|423|94|266|370|352|371|853|590|212|377|373|261|960|52|692|389|223|356|95|382|976|1670|258|222|1664|596|230|265|60|262|264|687|227|672|234|505|683|31|47|977|674|64|968|92|507|64|51|63|680|675|48|1787|1939|850|351|595|970|689|974|262|40|7|250|966|249|221|65|500|4779|677|232|503|378|252|508|381|211|239|597|421|386|46|268|1721|248|963|1649|235|228|66|992|690|993|670|676|1868|216|90|688|886|255|256|380|598|1|998|3906698|379|1784|58|1284|1340|84|678|681|685|967|27|260|263)(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\d{4,20}$/;
67477
67522
  const VALIDATE_FEEL_PROPERTIES = ['min', 'max', 'minLength', 'maxLength'];
67478
67523
  class Validator {
67479
- constructor(expressionLanguage, conditionChecker, form) {
67524
+ constructor(expressionLanguage, conditionChecker, form, formFieldRegistry) {
67480
67525
  this._expressionLanguage = expressionLanguage;
67481
67526
  this._conditionChecker = conditionChecker;
67482
67527
  this._form = form;
67528
+ this._formFieldRegistry = formFieldRegistry;
67483
67529
  }
67530
+
67531
+ /**
67532
+ * Validate against a field definition, does not support proper expression evaluation.
67533
+ *
67534
+ * @deprecated use validateFieldInstance instead
67535
+ */
67484
67536
  validateField(field, value) {
67485
67537
  const {
67486
67538
  type,
@@ -67488,72 +67540,124 @@
67488
67540
  } = field;
67489
67541
  let errors = [];
67490
67542
  if (type === 'number') {
67491
- const {
67492
- decimalDigits,
67493
- increment
67494
- } = field;
67495
- if (value === 'NaN') {
67496
- errors = [...errors, 'Value is not a number.'];
67497
- } else if (value) {
67498
- if (decimalDigits >= 0 && countDecimals$1(value) > decimalDigits) {
67499
- errors = [...errors, 'Value is expected to ' + (decimalDigits === 0 ? 'be an integer' : `have at most ${decimalDigits} decimal digit${decimalDigits > 1 ? 's' : ''}`) + '.'];
67500
- }
67501
- if (increment) {
67502
- const bigValue = Big$1(value);
67503
- const bigIncrement = Big$1(increment);
67504
- const offset = bigValue.mod(bigIncrement);
67505
- if (offset.cmp(0) !== 0) {
67506
- const previousValue = bigValue.minus(offset);
67507
- const nextValue = previousValue.plus(bigIncrement);
67508
- errors = [...errors, `Please select a valid value, the two nearest valid values are ${previousValue} and ${nextValue}.`];
67509
- }
67510
- }
67511
- }
67543
+ errors = [...errors, ...runNumberValidation(field, value)];
67512
67544
  }
67513
67545
  if (!validate) {
67514
67546
  return errors;
67515
67547
  }
67516
- const evaluatedValidation = evaluateFEELValues(validate, this._expressionLanguage, this._conditionChecker, this._form);
67517
- if (evaluatedValidation.pattern && value && !new RegExp(evaluatedValidation.pattern).test(value)) {
67518
- errors = [...errors, `Field must match pattern ${evaluatedValidation.pattern}.`];
67519
- }
67520
- if (evaluatedValidation.required) {
67521
- const isUncheckedCheckbox = type === 'checkbox' && value === false;
67522
- const isUnsetValue = isNil$1(value) || value === '';
67523
- const isEmptyMultiselect = Array.isArray(value) && value.length === 0;
67524
- if (isUncheckedCheckbox || isUnsetValue || isEmptyMultiselect) {
67525
- errors = [...errors, 'Field is required.'];
67526
- }
67527
- }
67528
- if ('min' in evaluatedValidation && (value || value === 0) && value < evaluatedValidation.min) {
67529
- errors = [...errors, `Field must have minimum value of ${evaluatedValidation.min}.`];
67530
- }
67531
- if ('max' in evaluatedValidation && (value || value === 0) && value > evaluatedValidation.max) {
67532
- errors = [...errors, `Field must have maximum value of ${evaluatedValidation.max}.`];
67533
- }
67534
- if ('minLength' in evaluatedValidation && value && value.trim().length < evaluatedValidation.minLength) {
67535
- errors = [...errors, `Field must have minimum length of ${evaluatedValidation.minLength}.`];
67536
- }
67537
- if ('maxLength' in evaluatedValidation && value && value.trim().length > evaluatedValidation.maxLength) {
67538
- errors = [...errors, `Field must have maximum length of ${evaluatedValidation.maxLength}.`];
67548
+ const evaluatedValidation = oldEvaluateFEELValues(validate, this._expressionLanguage, this._conditionChecker, this._form);
67549
+ errors = [...errors, ...runPresetValidation(field, evaluatedValidation, value)];
67550
+ return errors;
67551
+ }
67552
+
67553
+ /**
67554
+ * Validate a field instance.
67555
+ *
67556
+ * @param {Object} fieldInstance
67557
+ * @param {string} value
67558
+ *
67559
+ * @returns {Array<string>}
67560
+ */
67561
+ validateFieldInstance(fieldInstance, value) {
67562
+ const {
67563
+ id,
67564
+ expressionContextInfo
67565
+ } = fieldInstance;
67566
+ const field = this._formFieldRegistry.get(id);
67567
+ if (!field) {
67568
+ return [];
67539
67569
  }
67540
- if ('validationType' in evaluatedValidation && value && evaluatedValidation.validationType === 'phone' && !PHONE_PATTERN.test(value)) {
67541
- errors = [...errors, 'Field must be a valid international phone number. (e.g. +4930664040900)'];
67570
+ const {
67571
+ type,
67572
+ validate
67573
+ } = field;
67574
+ let errors = [];
67575
+ if (type === 'number') {
67576
+ errors = [...errors, ...runNumberValidation(field, value)];
67542
67577
  }
67543
- if ('validationType' in evaluatedValidation && value && evaluatedValidation.validationType === 'email' && !EMAIL_PATTERN.test(value)) {
67544
- errors = [...errors, 'Field must be a valid email.'];
67578
+ if (!validate) {
67579
+ return errors;
67545
67580
  }
67581
+ const evaluatedValidation = evaluateFEELValues(validate, this._expressionLanguage, expressionContextInfo);
67582
+ errors = [...errors, ...runPresetValidation(field, evaluatedValidation, value)];
67546
67583
  return errors;
67547
67584
  }
67548
67585
  }
67549
- Validator.$inject = ['expressionLanguage', 'conditionChecker', 'form'];
67586
+ Validator.$inject = ['expressionLanguage', 'conditionChecker', 'form', 'formFieldRegistry'];
67550
67587
 
67551
67588
  // helpers //////////
67552
67589
 
67553
- /**
67554
- * Helper function to evaluate optional FEEL validation values.
67555
- */
67556
- function evaluateFEELValues(validate, expressionLanguage, conditionChecker, form) {
67590
+ function runNumberValidation(field, value) {
67591
+ const {
67592
+ decimalDigits,
67593
+ increment
67594
+ } = field;
67595
+ const errors = [];
67596
+ if (value === 'NaN') {
67597
+ errors.push('Value is not a number.');
67598
+ } else if (value) {
67599
+ if (decimalDigits >= 0 && countDecimals$1(value) > decimalDigits) {
67600
+ errors.push('Value is expected to ' + (decimalDigits === 0 ? 'be an integer' : `have at most ${decimalDigits} decimal digit${decimalDigits > 1 ? 's' : ''}`) + '.');
67601
+ }
67602
+ if (increment) {
67603
+ const bigValue = Big$1(value);
67604
+ const bigIncrement = Big$1(increment);
67605
+ const offset = bigValue.mod(bigIncrement);
67606
+ if (offset.cmp(0) !== 0) {
67607
+ const previousValue = bigValue.minus(offset);
67608
+ const nextValue = previousValue.plus(bigIncrement);
67609
+ errors.push(`Please select a valid value, the two nearest valid values are ${previousValue} and ${nextValue}.`);
67610
+ }
67611
+ }
67612
+ }
67613
+ return errors;
67614
+ }
67615
+ function runPresetValidation(field, validation, value) {
67616
+ const errors = [];
67617
+ if (validation.pattern && value && !new RegExp(validation.pattern).test(value)) {
67618
+ errors.push(`Field must match pattern ${validation.pattern}.`);
67619
+ }
67620
+ if (validation.required) {
67621
+ const isUncheckedCheckbox = field.type === 'checkbox' && value === false;
67622
+ const isUnsetValue = isNil$1(value) || value === '';
67623
+ const isEmptyMultiselect = Array.isArray(value) && value.length === 0;
67624
+ if (isUncheckedCheckbox || isUnsetValue || isEmptyMultiselect) {
67625
+ errors.push('Field is required.');
67626
+ }
67627
+ }
67628
+ if ('min' in validation && (value || value === 0) && value < validation.min) {
67629
+ errors.push(`Field must have minimum value of ${validation.min}.`);
67630
+ }
67631
+ if ('max' in validation && (value || value === 0) && value > validation.max) {
67632
+ errors.push(`Field must have maximum value of ${validation.max}.`);
67633
+ }
67634
+ if ('minLength' in validation && value && value.trim().length < validation.minLength) {
67635
+ errors.push(`Field must have minimum length of ${validation.minLength}.`);
67636
+ }
67637
+ if ('maxLength' in validation && value && value.trim().length > validation.maxLength) {
67638
+ errors.push(`Field must have maximum length of ${validation.maxLength}.`);
67639
+ }
67640
+ if ('validationType' in validation && value && validation.validationType === 'phone' && !PHONE_PATTERN.test(value)) {
67641
+ errors.push('Field must be a valid international phone number. (e.g. +4930664040900)');
67642
+ }
67643
+ if ('validationType' in validation && value && validation.validationType === 'email' && !EMAIL_PATTERN.test(value)) {
67644
+ errors.push('Field must be a valid email.');
67645
+ }
67646
+ return errors;
67647
+ }
67648
+ function evaluateFEELValues(validate, expressionLanguage, expressionContextInfo) {
67649
+ const evaluatedValidate = {
67650
+ ...validate
67651
+ };
67652
+ VALIDATE_FEEL_PROPERTIES.forEach(property => {
67653
+ const path = property.split('.');
67654
+ const value = get$1(evaluatedValidate, path);
67655
+ const evaluatedValue = runExpressionEvaluation(expressionLanguage, value, expressionContextInfo);
67656
+ set$2(evaluatedValidate, path, evaluatedValue === null ? undefined : evaluatedValue);
67657
+ });
67658
+ return evaluatedValidate;
67659
+ }
67660
+ function oldEvaluateFEELValues(validate, expressionLanguage, conditionChecker, form) {
67557
67661
  const evaluatedValidate = {
67558
67662
  ...validate
67559
67663
  };
@@ -68279,6 +68383,10 @@
68279
68383
  valuePath,
68280
68384
  indexes
68281
68385
  };
68386
+ this._eventBus.fire('formFieldInstanceRegistry.changed', {
68387
+ instanceId,
68388
+ action: 'added'
68389
+ });
68282
68390
  return instanceId;
68283
68391
  }
68284
68392
  remove(instanceId) {
@@ -68286,6 +68394,10 @@
68286
68394
  return;
68287
68395
  }
68288
68396
  delete this._formFieldInstances[instanceId];
68397
+ this._eventBus.fire('formFieldInstanceRegistry.changed', {
68398
+ instanceId,
68399
+ action: 'removed'
68400
+ });
68289
68401
  }
68290
68402
  getAll() {
68291
68403
  return Object.values(this._formFieldInstances);
@@ -68294,9 +68406,13 @@
68294
68406
  return this.getAll().filter(({
68295
68407
  id
68296
68408
  }) => {
68409
+ const formFieldDefinition = this._formFieldRegistry.get(id);
68410
+ if (!formFieldDefinition) {
68411
+ return false;
68412
+ }
68297
68413
  const {
68298
68414
  type
68299
- } = this._formFieldRegistry.get(id);
68415
+ } = formFieldDefinition;
68300
68416
  const {
68301
68417
  config
68302
68418
  } = this._formFields.get(type);
@@ -68553,11 +68669,12 @@
68553
68669
  } = this._getState();
68554
68670
  const errors = {};
68555
68671
  const getErrorPath = (id, indexes) => [id, ...Object.values(indexes || {})];
68556
- formFieldInstanceRegistry.getAllKeyed().forEach(({
68557
- id,
68558
- valuePath,
68559
- indexes
68560
- }) => {
68672
+ formFieldInstanceRegistry.getAllKeyed().forEach(fieldInstance => {
68673
+ const {
68674
+ id,
68675
+ valuePath,
68676
+ indexes
68677
+ } = fieldInstance;
68561
68678
  const field = formFieldRegistry.get(id);
68562
68679
 
68563
68680
  // (1) Skip disabled fields
@@ -68565,9 +68682,9 @@
68565
68682
  return;
68566
68683
  }
68567
68684
 
68568
- // (2) Validate the field
68685
+ // (2) Validate the field instance
68569
68686
  const value = get$1(data, valuePath);
68570
- const fieldErrors = validator.validateField(field, value);
68687
+ const fieldErrors = validator.validateFieldInstance(fieldInstance, value);
68571
68688
  if (fieldErrors.length) {
68572
68689
  set$2(errors, getErrorPath(field.id, indexes), fieldErrors);
68573
68690
  }
@@ -68672,26 +68789,26 @@
68672
68789
  /**
68673
68790
  * @internal
68674
68791
  *
68675
- * @param { { field: any, indexes: object, value: any } } update
68792
+ * @param { { fieldInstance: any, value: any } } update
68676
68793
  */
68677
68794
  _update(update) {
68678
68795
  const {
68679
- field,
68680
- indexes,
68796
+ fieldInstance,
68681
68797
  value
68682
68798
  } = update;
68799
+ const {
68800
+ id,
68801
+ valuePath,
68802
+ indexes
68803
+ } = fieldInstance;
68683
68804
  const {
68684
68805
  data,
68685
68806
  errors
68686
68807
  } = this._getState();
68687
- const validator = this.get('validator'),
68688
- pathRegistry = this.get('pathRegistry');
68689
- const fieldErrors = validator.validateField(field, value);
68690
- const valuePath = pathRegistry.getValuePath(field, {
68691
- indexes
68692
- });
68808
+ const validator = this.get('validator');
68809
+ const fieldErrors = validator.validateFieldInstance(fieldInstance, value);
68693
68810
  set$2(data, valuePath, value);
68694
- set$2(errors, [field.id, ...Object.values(indexes || {})], fieldErrors.length ? fieldErrors : undefined);
68811
+ set$2(errors, [id, ...Object.values(indexes || {})], fieldErrors.length ? fieldErrors : undefined);
68695
68812
  this._emit('field.updated', update);
68696
68813
  this._setState({
68697
68814
  data: clone(data),
@@ -89040,12 +89157,14 @@
89040
89157
  // notify interested parties after render
89041
89158
  emit('formPlayground.rendered');
89042
89159
  });
89043
-
89044
- // pipe viewer changes to output data editor
89045
- formViewer.on('changed', () => {
89160
+ const updateOutputData = () => {
89046
89161
  const submitData = formViewer._getSubmitData();
89047
89162
  outputDataEditor.setValue(toString(submitData));
89048
- });
89163
+ };
89164
+
89165
+ // pipe viewer changes to output data editor
89166
+ formViewer.on('changed', updateOutputData);
89167
+ formViewer.on('formFieldInstanceRegistry.changed', updateOutputData);
89049
89168
  inputDataEditor.on('changed', event => {
89050
89169
  try {
89051
89170
  setData(JSON.parse(event.value));
package/dist/index.cjs CHANGED
@@ -416,12 +416,14 @@ function PlaygroundRoot(config) {
416
416
  // notify interested parties after render
417
417
  emit('formPlayground.rendered');
418
418
  });
419
-
420
- // pipe viewer changes to output data editor
421
- formViewer.on('changed', () => {
419
+ const updateOutputData = () => {
422
420
  const submitData = formViewer._getSubmitData();
423
421
  outputDataEditor.setValue(toString(submitData));
424
- });
422
+ };
423
+
424
+ // pipe viewer changes to output data editor
425
+ formViewer.on('changed', updateOutputData);
426
+ formViewer.on('formFieldInstanceRegistry.changed', updateOutputData);
425
427
  inputDataEditor.on('changed', event => {
426
428
  try {
427
429
  setData(JSON.parse(event.value));
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/components/Modal.js","../src/components/EmbedModal.js","../src/components/autocompletion/VariablesFacet.js","../src/components/autocompletion/index.js","../src/components/JSONEditor.js","../src/components/Section.js","../src/components/PlaygroundRoot.js","../src/Playground.js"],"sourcesContent":["import { useEffect } from 'preact/hooks';\n\nexport function Modal(props) {\n useEffect(() => {\n function handleKey(event) {\n if (event.key === 'Escape') {\n event.stopPropagation();\n\n props.onClose();\n }\n }\n\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('keydown', handleKey);\n };\n });\n\n return (\n <div class=\"fjs-pgl-modal\">\n <div class=\"fjs-pgl-modal-backdrop\" onClick={props.onClose}></div>\n <div class=\"fjs-pgl-modal-content\">\n <h1 class=\"fjs-pgl-modal-header\">{props.name}</h1>\n <div class=\"fjs-pgl-modal-body\">{props.children}</div>\n <div class=\"fjs-pgl-modal-footer\">\n <button type=\"button\" class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={props.onClose}>\n Close\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'preact/hooks';\n\nimport { Modal } from './Modal';\n\nexport function EmbedModal(props) {\n const schema = serializeValue(props.schema);\n const data = serializeValue(props.data || {});\n\n const fieldRef = useRef();\n\n const snippet = `<!-- styles needed for rendering -->\n<link rel=\"stylesheet\" href=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/assets/form-js.css\">\n\n<!-- container to render the form into -->\n<div class=\"fjs-pgl-form-container\"></div>\n\n<!-- scripts needed for embedding -->\n<script src=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/form-viewer.umd.js\"></script>\n\n<!-- actual script to instantiate the form and load form schema + data -->\n<script>\n const data = JSON.parse(${data});\n const schema = JSON.parse(${schema});\n\n const form = new FormViewer.Form({\n container: document.querySelector(\".fjs-pgl-form-container\")\n });\n\n form.on(\"submit\", (event) => {\n console.log(event.data, event.errors);\n });\n\n form.importSchema(schema, data).catch(err => {\n console.error(\"Failed to render form\", err);\n });\n</script>\n `.trim();\n\n useEffect(() => {\n fieldRef.current.select();\n });\n\n return (\n <Modal name=\"Embed form\" onClose={props.onClose}>\n <p>\n Use the following HTML snippet to embed your form with <a href=\"https://github.com/bpmn-io/form-js\">form-js</a>:\n </p>\n\n <textarea spellCheck=\"false\" ref={fieldRef}>\n {snippet}\n </textarea>\n </Modal>\n );\n}\n\n// helpers ///////////\n\nfunction serializeValue(obj) {\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n","import { Facet } from '@codemirror/state';\n\n/**\n * @type {Facet<import('..').Variables>} Variables\n */\nexport const variablesFacet = Facet.define();\n","import { autocompletion } from '@codemirror/autocomplete';\nimport { variablesFacet } from './VariablesFacet';\n\nimport { syntaxTree } from '@codemirror/language';\n\nexport function autocompletionExtension() {\n return [\n autocompletion({\n override: [completions],\n }),\n ];\n}\n\nfunction completions(context) {\n const variables = context.state.facet(variablesFacet)[0];\n\n const options = variables.map((v) => ({\n label: v,\n type: 'variable',\n }));\n\n let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n // handle inside property name as explicit call\n if (nodeBefore.type.name === 'PropertyName') {\n context.explicit = true;\n }\n\n let word = context.matchBefore(/\\w*/);\n\n if (word.from == word.to && !context.explicit) {\n return null;\n }\n\n return {\n from: word.from,\n options,\n };\n}\n","import mitt from 'mitt';\nimport { basicSetup } from 'codemirror';\nimport { EditorView, keymap, placeholder } from '@codemirror/view';\nimport { EditorState, Compartment } from '@codemirror/state';\nimport { lintGutter, linter } from '@codemirror/lint';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport { indentWithTab } from '@codemirror/commands';\nimport { autocompletionExtension } from './autocompletion/index';\nimport { variablesFacet } from './autocompletion/VariablesFacet';\nimport { classes as domClasses } from 'min-dom';\n\nconst NO_LINT_CLS = 'fjs-cm-no-lint';\n\n/**\n * @param {object} options\n * @param {boolean} [options.readonly]\n * @param {object} [options.contentAttributes]\n * @param {string | HTMLElement} [options.placeholder]\n */\nexport function JSONEditor(options = {}) {\n const { contentAttributes = {}, placeholder: editorPlaceholder, readonly = false } = options;\n const emitter = mitt();\n\n const languageCompartment = new Compartment().of(json());\n const tabSizeCompartment = new Compartment().of(EditorState.tabSize.of(2));\n const autocompletionConfCompartment = new Compartment();\n const placeholderLinterExtension = createPlaceholderLinterExtension();\n\n let container = null;\n\n function createState(doc, variables = []) {\n const extensions = [\n basicSetup,\n languageCompartment,\n tabSizeCompartment,\n lintGutter(),\n linter(jsonParseLinter()),\n placeholderLinterExtension,\n autocompletionConfCompartment.of(variablesFacet.of(variables)),\n autocompletionExtension(),\n keymap.of([indentWithTab]),\n editorPlaceholder ? placeholder(editorPlaceholder) : [],\n EditorState.readOnly.of(readonly),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n emitter.emit('changed', { value: update.state.doc.toString() });\n }\n }),\n EditorView.contentAttributes.of(contentAttributes),\n ];\n\n return EditorState.create({ doc, extensions });\n }\n\n const view = new EditorView({\n state: createState(''),\n });\n\n this.setValue = function (newValue) {\n const oldValue = view.state.doc.toString();\n\n const diff = findDiff(oldValue, newValue);\n\n if (diff) {\n view.dispatch({\n changes: { from: diff.start, to: diff.end, insert: diff.text },\n selection: { anchor: diff.start + diff.text.length },\n });\n }\n };\n\n this.getValue = function () {\n return view.state.doc.toString();\n };\n\n this.setVariables = function (variables) {\n view.dispatch({ effects: autocompletionConfCompartment.reconfigure(variablesFacet.of(variables)) });\n };\n\n this.getView = function () {\n return view;\n };\n\n this.on = emitter.on;\n this.off = emitter.off;\n this.emit = emitter.emit;\n\n this.attachTo = function (_container) {\n container = _container;\n container.appendChild(view.dom);\n domClasses(container, document.body).add('fjs-json-editor');\n };\n\n this.destroy = function () {\n if (container && view.dom) {\n container.removeChild(view.dom);\n domClasses(container, document.body).remove('fjs-json-editor');\n }\n view.destroy();\n };\n\n function createPlaceholderLinterExtension() {\n return linter((view) => {\n const placeholders = view.dom.querySelectorAll('.cm-placeholder');\n if (placeholders.length > 0) {\n domClasses(container, document.body).add(NO_LINT_CLS);\n } else {\n domClasses(container, document.body).remove(NO_LINT_CLS);\n }\n return [];\n });\n }\n}\n\nfunction findDiff(oldStr, newStr) {\n if (oldStr === newStr) {\n return null;\n }\n\n oldStr = oldStr || '';\n newStr = newStr || '';\n\n let minLength = Math.min(oldStr.length, newStr.length);\n let start = 0;\n\n while (start < minLength && oldStr[start] === newStr[start]) {\n start++;\n }\n\n if (start === minLength) {\n return {\n start: start,\n text: newStr.slice(start),\n end: oldStr.length,\n };\n }\n\n let endOld = oldStr.length;\n let endNew = newStr.length;\n\n while (endOld > start && endNew > start && oldStr[endOld - 1] === newStr[endNew - 1]) {\n endOld--;\n endNew--;\n }\n\n return {\n start: start,\n text: newStr.slice(start, endNew),\n end: endOld,\n };\n}\n","export function Section(props) {\n const elements = Array.isArray(props.children) ? props.children : [props.children];\n\n const { headerItems, children } = elements.reduce(\n (_, child) => {\n const bucket = child.type === Section.HeaderItem ? _.headerItems : _.children;\n\n bucket.push(child);\n\n return _;\n },\n { headerItems: [], children: [] },\n );\n\n return (\n <div class=\"fjs-pgl-section\">\n <h1 class=\"header\">\n {props.name} {headerItems.length ? <span class=\"header-items\">{headerItems}</span> : null}\n </h1>\n <div class=\"body\">{children}</div>\n </div>\n );\n}\n\nSection.HeaderItem = function (props) {\n return props.children;\n};\n","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\nimport { isFunction } from 'min-dash';\nimport download from 'downloadjs';\n\nimport classNames from 'classnames';\n\nimport { Form, getSchemaVariables } from '@bpmn-io/form-js-viewer';\n\nimport { FormEditor } from '@bpmn-io/form-js-editor';\n\nimport { EmbedModal } from './EmbedModal';\nimport { JSONEditor } from './JSONEditor';\nimport { Section } from './Section';\n\nimport './FileDrop.css';\nimport './PlaygroundRoot.css';\n\nexport function PlaygroundRoot(config) {\n const {\n additionalModules, // goes into both editor + viewer\n actions: actionsConfig,\n emit,\n exporter: exporterConfig,\n viewerProperties,\n editorProperties,\n viewerAdditionalModules,\n editorAdditionalModules,\n propertiesPanel: propertiesPanelConfig,\n apiLinkTarget,\n onInit,\n } = config;\n\n const { display: displayActions = true } = actionsConfig || {};\n\n const editorContainerRef = useRef();\n const paletteContainerRef = useRef();\n const propertiesPanelContainerRef = useRef();\n const viewerContainerRef = useRef();\n const inputDataContainerRef = useRef();\n const outputDataContainerRef = useRef();\n\n const formEditorRef = useRef();\n const formViewerRef = useRef();\n const inputDataRef = useRef();\n const outputDataRef = useRef();\n\n const [showEmbed, setShowEmbed] = useState(false);\n const [schema, setSchema] = useState();\n const [data, setData] = useState();\n\n const load = useCallback((schema, data) => {\n formEditorRef.current.importSchema(schema, data);\n inputDataRef.current.setValue(toString(data));\n setSchema(schema);\n setData(data);\n }, []);\n\n // initialize and link the editors\n useEffect(() => {\n const inputDataEditor = (inputDataRef.current = new JSONEditor({\n contentAttributes: { 'aria-label': 'Form Input', tabIndex: 0 },\n placeholder: createDataEditorPlaceholder(),\n }));\n\n const outputDataEditor = (outputDataRef.current = new JSONEditor({\n readonly: true,\n contentAttributes: { 'aria-label': 'Form Output', tabIndex: 0 },\n }));\n\n const formViewer = (formViewerRef.current = new Form({\n container: viewerContainerRef.current,\n additionalModules: [...(additionalModules || []), ...(viewerAdditionalModules || [])],\n properties: {\n ...(viewerProperties || {}),\n ariaLabel: 'Form Preview',\n },\n }));\n\n const formEditor = (formEditorRef.current = new FormEditor({\n container: editorContainerRef.current,\n renderer: {\n compact: true,\n },\n palette: {\n parent: paletteContainerRef.current,\n },\n propertiesPanel: {\n parent: propertiesPanelContainerRef.current,\n ...(propertiesPanelConfig || {}),\n },\n exporter: exporterConfig,\n properties: {\n ...(editorProperties || {}),\n ariaLabel: 'Form Definition',\n },\n additionalModules: [...(additionalModules || []), ...(editorAdditionalModules || [])],\n }));\n\n formEditor.on('formField.add', ({ formField }) => {\n const formFields = formEditor.get('formFields');\n const { config } = formFields.get(formField.type);\n const { generateInitialDemoData } = config;\n const { id } = formField;\n\n if (!isFunction(generateInitialDemoData)) {\n return;\n }\n\n const initialDemoData = generateInitialDemoData(formField);\n\n if ([initialDemoData, id].includes(undefined)) {\n return;\n }\n\n setData((currentData) => {\n const newData = {\n ...currentData,\n [id]: initialDemoData,\n };\n\n inputDataRef.current.setValue(toString(newData));\n\n return newData;\n });\n });\n\n formEditor.on('changed', () => {\n setSchema(formEditor.getSchema());\n });\n\n formEditor.on('formEditor.rendered', () => {\n // notify interested parties after render\n emit('formPlayground.rendered');\n });\n\n // pipe viewer changes to output data editor\n formViewer.on('changed', () => {\n const submitData = formViewer._getSubmitData();\n outputDataEditor.setValue(toString(submitData));\n });\n\n inputDataEditor.on('changed', (event) => {\n try {\n setData(JSON.parse(event.value));\n } catch (error) {\n // notify interested about input data error\n emit('formPlayground.inputDataError', error);\n }\n });\n\n inputDataEditor.attachTo(inputDataContainerRef.current);\n outputDataEditor.attachTo(outputDataContainerRef.current);\n\n return () => {\n inputDataEditor.destroy();\n outputDataEditor.destroy();\n formViewer.destroy();\n formEditor.destroy();\n };\n }, [\n additionalModules,\n editorAdditionalModules,\n editorProperties,\n emit,\n exporterConfig,\n propertiesPanelConfig,\n viewerAdditionalModules,\n viewerProperties,\n ]);\n\n // initialize data through props\n useEffect(() => {\n if (!config.initialSchema) {\n return;\n }\n\n load(config.initialSchema, config.initialData || {});\n }, [config.initialSchema, config.initialData, load]);\n\n useEffect(() => {\n schema && formViewerRef.current.importSchema(schema, data);\n }, [schema, data]);\n\n useEffect(() => {\n if (schema && inputDataContainerRef.current) {\n const variables = getSchemaVariables(schema);\n inputDataRef.current.setVariables(variables);\n }\n }, [schema]);\n\n // exposes api to parent\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api = {\n attachDataContainer: (node) => inputDataRef.current.attachTo(node),\n attachResultContainer: (node) => outputDataRef.current.attachTo(node),\n attachFormContainer: (node) => formViewerRef.current.attachTo(node),\n attachEditorContainer: (node) => formEditorRef.current.attachTo(node),\n attachPaletteContainer: (node) => formEditorRef.current.get('palette').attachTo(node),\n attachPropertiesPanelContainer: (node) => formEditorRef.current.get('propertiesPanel').attachTo(node),\n get: (name, strict) => formEditorRef.current.get(name, strict),\n getDataEditor: () => inputDataRef.current,\n getEditor: () => formEditorRef.current,\n getForm: () => formViewerRef.current,\n getResultView: () => outputDataRef.current,\n getSchema: () => formEditorRef.current.getSchema(),\n saveSchema: () => formEditorRef.current.saveSchema(),\n setSchema: setSchema,\n setData: setData,\n };\n\n onInit();\n }, [apiLinkTarget, onInit]);\n\n // separate effect for state to avoid re-creating the api object every time\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api.getState = () => ({ schema, data });\n apiLinkTarget.api.load = load;\n }, [apiLinkTarget, schema, data, load]);\n\n const handleDownload = useCallback(() => {\n download(JSON.stringify(schema, null, ' '), 'form.json', 'text/json');\n }, [schema]);\n\n const hideEmbedModal = useCallback(() => {\n setShowEmbed(false);\n }, []);\n\n const showEmbedModal = useCallback(() => {\n setShowEmbed(true);\n }, []);\n\n return (\n <div class={classNames('fjs-container', 'fjs-pgl-root')}>\n <div class=\"fjs-pgl-modals\">\n {showEmbed ? <EmbedModal schema={schema} data={data} onClose={hideEmbedModal} /> : null}\n </div>\n <div class=\"fjs-pgl-palette-container\" ref={paletteContainerRef} />\n <div class=\"fjs-pgl-main\">\n <Section name=\"Form Definition\">\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" title=\"Download form definition\" onClick={handleDownload}>\n Download\n </button>\n </Section.HeaderItem>\n )}\n\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" onClick={showEmbedModal}>\n Embed\n </button>\n </Section.HeaderItem>\n )}\n\n <div ref={editorContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Preview\">\n <div ref={viewerContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Input\">\n <div ref={inputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Output\">\n <div ref={outputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n </div>\n <div class=\"fjs-pgl-properties-container\" ref={propertiesPanelContainerRef} />\n </div>\n );\n}\n\n// helpers ///////////////\n\nfunction toString(obj) {\n return JSON.stringify(obj, null, ' ');\n}\n\nfunction createDataEditorPlaceholder() {\n const element = document.createElement('p');\n\n element.innerHTML =\n 'Use this panel to simulate the form input, such as process variables.\\nThis helps to test the form by populating the preview.\\n\\n' +\n 'Follow the JSON format like this:\\n\\n' +\n '{\\n \"variable\": \"value\"\\n}';\n\n return element;\n}\n","import { render } from 'preact';\n\nimport fileDrop from 'file-drops';\n\nimport mitt from 'mitt';\n\nimport { PlaygroundRoot } from './components/PlaygroundRoot';\n\n/**\n * @typedef { import('@bpmn-io/form-js-viewer/dist/types/types').FormProperties } FormProperties\n * @typedef { import('@bpmn-io/form-js-editor/dist/types/types').FormEditorProperties } FormEditorProperties\n *\n * @typedef { {\n * actions?: { display: Boolean }\n * additionalModules?: Array<any>\n * container?: Element\n * data: any\n * editor?: { inlinePropertiesPanel: Boolean }\n * editorAdditionalModules?: Array<any>\n * editorProperties?: FormEditorProperties\n * exporter?: { name: String, version: String }\n * propertiesPanel?: { parent: Element, feelPopupContainer: Element }\n * schema: any\n * viewerAdditionalModules?: Array<any>\n * viewerProperties?: FormProperties\n * } } FormPlaygroundOptions\n */\n\n/**\n * @param {FormPlaygroundOptions} options\n */\nfunction Playground(options) {\n const { container: parent, schema: initialSchema, data: initialData, ...rest } = options;\n\n const emitter = mitt();\n\n const container = document.createElement('div');\n\n container.classList.add('fjs-pgl-parent');\n\n if (parent) {\n parent.appendChild(container);\n }\n\n const handleDrop = fileDrop('Drop a form file', function (files) {\n const file = files[0];\n\n if (file) {\n try {\n this.api.setSchema(JSON.parse(file.contents));\n } catch (err) {\n // TODO(nikku): indicate JSON parse error\n }\n }\n });\n\n const safe = function (fn) {\n return function (...args) {\n if (!this.api) {\n throw new Error('Playground is not initialized.');\n }\n\n return fn(...args);\n };\n };\n\n const onInit = function () {\n emitter.emit('formPlayground.init');\n };\n\n container.addEventListener('dragover', handleDrop);\n\n render(\n <PlaygroundRoot\n initialSchema={initialSchema}\n initialData={initialData}\n emit={emitter.emit}\n apiLinkTarget={this}\n onInit={onInit}\n {...rest}\n />,\n container,\n );\n\n this.on = emitter.on;\n this.off = emitter.off;\n\n this.emit = emitter.emit;\n\n this.on('destroy', () => {\n render(null, container);\n parent.removeChild(container);\n });\n\n this.destroy = () => this.emit('destroy');\n\n this.getState = safe(() => this.api.getState());\n\n this.getSchema = safe(() => this.api.getSchema());\n\n this.setSchema = safe((schema) => this.api.setSchema(schema));\n\n this.saveSchema = safe(() => this.api.saveSchema());\n\n this.get = safe((name, strict) => this.api.get(name, strict));\n\n this.getDataEditor = safe(() => this.api.getDataEditor());\n\n this.getEditor = safe(() => this.api.getEditor());\n\n this.getForm = safe((name, strict) => this.api.getForm(name, strict));\n\n this.getResultView = safe(() => this.api.getResultView());\n\n this.attachEditorContainer = safe((node) => this.api.attachEditorContainer(node));\n\n this.attachPreviewContainer = safe((node) => this.api.attachFormContainer(node));\n\n this.attachDataContainer = safe((node) => this.api.attachDataContainer(node));\n\n this.attachResultContainer = safe((node) => this.api.attachResultContainer(node));\n\n this.attachPaletteContainer = safe((node) => this.api.attachPaletteContainer(node));\n\n this.attachPropertiesPanelContainer = safe((node) => this.api.attachPropertiesPanelContainer(node));\n}\n\nexport { Playground };\n"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","class","children","_jsx","onClick","name","type","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","href","spellCheck","ref","obj","JSON","stringify","replace","variablesFacet","Facet","define","autocompletionExtension","autocompletion","override","completions","context","variables","state","facet","options","map","v","label","nodeBefore","syntaxTree","resolve","pos","explicit","word","matchBefore","from","to","NO_LINT_CLS","JSONEditor","contentAttributes","placeholder","editorPlaceholder","readonly","emitter","mitt","languageCompartment","Compartment","of","json","tabSizeCompartment","EditorState","tabSize","autocompletionConfCompartment","placeholderLinterExtension","createPlaceholderLinterExtension","container","createState","doc","extensions","basicSetup","lintGutter","linter","jsonParseLinter","keymap","indentWithTab","readOnly","EditorView","updateListener","update","docChanged","emit","value","toString","create","view","setValue","newValue","oldValue","diff","findDiff","dispatch","changes","start","end","insert","text","selection","anchor","length","getValue","setVariables","effects","reconfigure","getView","on","off","attachTo","_container","appendChild","dom","domClasses","body","add","destroy","removeChild","remove","placeholders","querySelectorAll","oldStr","newStr","minLength","Math","min","slice","endOld","endNew","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","HeaderItem","push","PlaygroundRoot","config","additionalModules","actions","actionsConfig","exporter","exporterConfig","viewerProperties","editorProperties","viewerAdditionalModules","editorAdditionalModules","propertiesPanel","propertiesPanelConfig","apiLinkTarget","onInit","display","displayActions","editorContainerRef","paletteContainerRef","propertiesPanelContainerRef","viewerContainerRef","inputDataContainerRef","outputDataContainerRef","formEditorRef","formViewerRef","inputDataRef","outputDataRef","showEmbed","setShowEmbed","useState","setSchema","setData","load","useCallback","importSchema","inputDataEditor","tabIndex","createDataEditorPlaceholder","outputDataEditor","formViewer","Form","properties","ariaLabel","formEditor","FormEditor","renderer","compact","palette","parent","formField","formFields","get","generateInitialDemoData","id","isFunction","initialDemoData","includes","undefined","currentData","newData","getSchema","submitData","_getSubmitData","parse","error","initialSchema","initialData","getSchemaVariables","api","attachDataContainer","node","attachResultContainer","attachFormContainer","attachEditorContainer","attachPaletteContainer","attachPropertiesPanelContainer","strict","getDataEditor","getEditor","getForm","getResultView","saveSchema","getState","handleDownload","download","hideEmbedModal","showEmbedModal","classNames","title","element","createElement","innerHTML","Playground","rest","classList","handleDrop","fileDrop","files","file","contents","err","safe","fn","args","Error","render","attachPreviewContainer"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/Modal.js","../src/components/EmbedModal.js","../src/components/autocompletion/VariablesFacet.js","../src/components/autocompletion/index.js","../src/components/JSONEditor.js","../src/components/Section.js","../src/components/PlaygroundRoot.js","../src/Playground.js"],"sourcesContent":["import { useEffect } from 'preact/hooks';\n\nexport function Modal(props) {\n useEffect(() => {\n function handleKey(event) {\n if (event.key === 'Escape') {\n event.stopPropagation();\n\n props.onClose();\n }\n }\n\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('keydown', handleKey);\n };\n });\n\n return (\n <div class=\"fjs-pgl-modal\">\n <div class=\"fjs-pgl-modal-backdrop\" onClick={props.onClose}></div>\n <div class=\"fjs-pgl-modal-content\">\n <h1 class=\"fjs-pgl-modal-header\">{props.name}</h1>\n <div class=\"fjs-pgl-modal-body\">{props.children}</div>\n <div class=\"fjs-pgl-modal-footer\">\n <button type=\"button\" class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={props.onClose}>\n Close\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'preact/hooks';\n\nimport { Modal } from './Modal';\n\nexport function EmbedModal(props) {\n const schema = serializeValue(props.schema);\n const data = serializeValue(props.data || {});\n\n const fieldRef = useRef();\n\n const snippet = `<!-- styles needed for rendering -->\n<link rel=\"stylesheet\" href=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/assets/form-js.css\">\n\n<!-- container to render the form into -->\n<div class=\"fjs-pgl-form-container\"></div>\n\n<!-- scripts needed for embedding -->\n<script src=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/form-viewer.umd.js\"></script>\n\n<!-- actual script to instantiate the form and load form schema + data -->\n<script>\n const data = JSON.parse(${data});\n const schema = JSON.parse(${schema});\n\n const form = new FormViewer.Form({\n container: document.querySelector(\".fjs-pgl-form-container\")\n });\n\n form.on(\"submit\", (event) => {\n console.log(event.data, event.errors);\n });\n\n form.importSchema(schema, data).catch(err => {\n console.error(\"Failed to render form\", err);\n });\n</script>\n `.trim();\n\n useEffect(() => {\n fieldRef.current.select();\n });\n\n return (\n <Modal name=\"Embed form\" onClose={props.onClose}>\n <p>\n Use the following HTML snippet to embed your form with <a href=\"https://github.com/bpmn-io/form-js\">form-js</a>:\n </p>\n\n <textarea spellCheck=\"false\" ref={fieldRef}>\n {snippet}\n </textarea>\n </Modal>\n );\n}\n\n// helpers ///////////\n\nfunction serializeValue(obj) {\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n","import { Facet } from '@codemirror/state';\n\n/**\n * @type {Facet<import('..').Variables>} Variables\n */\nexport const variablesFacet = Facet.define();\n","import { autocompletion } from '@codemirror/autocomplete';\nimport { variablesFacet } from './VariablesFacet';\n\nimport { syntaxTree } from '@codemirror/language';\n\nexport function autocompletionExtension() {\n return [\n autocompletion({\n override: [completions],\n }),\n ];\n}\n\nfunction completions(context) {\n const variables = context.state.facet(variablesFacet)[0];\n\n const options = variables.map((v) => ({\n label: v,\n type: 'variable',\n }));\n\n let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n // handle inside property name as explicit call\n if (nodeBefore.type.name === 'PropertyName') {\n context.explicit = true;\n }\n\n let word = context.matchBefore(/\\w*/);\n\n if (word.from == word.to && !context.explicit) {\n return null;\n }\n\n return {\n from: word.from,\n options,\n };\n}\n","import mitt from 'mitt';\nimport { basicSetup } from 'codemirror';\nimport { EditorView, keymap, placeholder } from '@codemirror/view';\nimport { EditorState, Compartment } from '@codemirror/state';\nimport { lintGutter, linter } from '@codemirror/lint';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport { indentWithTab } from '@codemirror/commands';\nimport { autocompletionExtension } from './autocompletion/index';\nimport { variablesFacet } from './autocompletion/VariablesFacet';\nimport { classes as domClasses } from 'min-dom';\n\nconst NO_LINT_CLS = 'fjs-cm-no-lint';\n\n/**\n * @param {object} options\n * @param {boolean} [options.readonly]\n * @param {object} [options.contentAttributes]\n * @param {string | HTMLElement} [options.placeholder]\n */\nexport function JSONEditor(options = {}) {\n const { contentAttributes = {}, placeholder: editorPlaceholder, readonly = false } = options;\n const emitter = mitt();\n\n const languageCompartment = new Compartment().of(json());\n const tabSizeCompartment = new Compartment().of(EditorState.tabSize.of(2));\n const autocompletionConfCompartment = new Compartment();\n const placeholderLinterExtension = createPlaceholderLinterExtension();\n\n let container = null;\n\n function createState(doc, variables = []) {\n const extensions = [\n basicSetup,\n languageCompartment,\n tabSizeCompartment,\n lintGutter(),\n linter(jsonParseLinter()),\n placeholderLinterExtension,\n autocompletionConfCompartment.of(variablesFacet.of(variables)),\n autocompletionExtension(),\n keymap.of([indentWithTab]),\n editorPlaceholder ? placeholder(editorPlaceholder) : [],\n EditorState.readOnly.of(readonly),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n emitter.emit('changed', { value: update.state.doc.toString() });\n }\n }),\n EditorView.contentAttributes.of(contentAttributes),\n ];\n\n return EditorState.create({ doc, extensions });\n }\n\n const view = new EditorView({\n state: createState(''),\n });\n\n this.setValue = function (newValue) {\n const oldValue = view.state.doc.toString();\n\n const diff = findDiff(oldValue, newValue);\n\n if (diff) {\n view.dispatch({\n changes: { from: diff.start, to: diff.end, insert: diff.text },\n selection: { anchor: diff.start + diff.text.length },\n });\n }\n };\n\n this.getValue = function () {\n return view.state.doc.toString();\n };\n\n this.setVariables = function (variables) {\n view.dispatch({ effects: autocompletionConfCompartment.reconfigure(variablesFacet.of(variables)) });\n };\n\n this.getView = function () {\n return view;\n };\n\n this.on = emitter.on;\n this.off = emitter.off;\n this.emit = emitter.emit;\n\n this.attachTo = function (_container) {\n container = _container;\n container.appendChild(view.dom);\n domClasses(container, document.body).add('fjs-json-editor');\n };\n\n this.destroy = function () {\n if (container && view.dom) {\n container.removeChild(view.dom);\n domClasses(container, document.body).remove('fjs-json-editor');\n }\n view.destroy();\n };\n\n function createPlaceholderLinterExtension() {\n return linter((view) => {\n const placeholders = view.dom.querySelectorAll('.cm-placeholder');\n if (placeholders.length > 0) {\n domClasses(container, document.body).add(NO_LINT_CLS);\n } else {\n domClasses(container, document.body).remove(NO_LINT_CLS);\n }\n return [];\n });\n }\n}\n\nfunction findDiff(oldStr, newStr) {\n if (oldStr === newStr) {\n return null;\n }\n\n oldStr = oldStr || '';\n newStr = newStr || '';\n\n let minLength = Math.min(oldStr.length, newStr.length);\n let start = 0;\n\n while (start < minLength && oldStr[start] === newStr[start]) {\n start++;\n }\n\n if (start === minLength) {\n return {\n start: start,\n text: newStr.slice(start),\n end: oldStr.length,\n };\n }\n\n let endOld = oldStr.length;\n let endNew = newStr.length;\n\n while (endOld > start && endNew > start && oldStr[endOld - 1] === newStr[endNew - 1]) {\n endOld--;\n endNew--;\n }\n\n return {\n start: start,\n text: newStr.slice(start, endNew),\n end: endOld,\n };\n}\n","export function Section(props) {\n const elements = Array.isArray(props.children) ? props.children : [props.children];\n\n const { headerItems, children } = elements.reduce(\n (_, child) => {\n const bucket = child.type === Section.HeaderItem ? _.headerItems : _.children;\n\n bucket.push(child);\n\n return _;\n },\n { headerItems: [], children: [] },\n );\n\n return (\n <div class=\"fjs-pgl-section\">\n <h1 class=\"header\">\n {props.name} {headerItems.length ? <span class=\"header-items\">{headerItems}</span> : null}\n </h1>\n <div class=\"body\">{children}</div>\n </div>\n );\n}\n\nSection.HeaderItem = function (props) {\n return props.children;\n};\n","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\nimport { isFunction } from 'min-dash';\nimport download from 'downloadjs';\n\nimport classNames from 'classnames';\n\nimport { Form, getSchemaVariables } from '@bpmn-io/form-js-viewer';\n\nimport { FormEditor } from '@bpmn-io/form-js-editor';\n\nimport { EmbedModal } from './EmbedModal';\nimport { JSONEditor } from './JSONEditor';\nimport { Section } from './Section';\n\nimport './FileDrop.css';\nimport './PlaygroundRoot.css';\n\nexport function PlaygroundRoot(config) {\n const {\n additionalModules, // goes into both editor + viewer\n actions: actionsConfig,\n emit,\n exporter: exporterConfig,\n viewerProperties,\n editorProperties,\n viewerAdditionalModules,\n editorAdditionalModules,\n propertiesPanel: propertiesPanelConfig,\n apiLinkTarget,\n onInit,\n } = config;\n\n const { display: displayActions = true } = actionsConfig || {};\n\n const editorContainerRef = useRef();\n const paletteContainerRef = useRef();\n const propertiesPanelContainerRef = useRef();\n const viewerContainerRef = useRef();\n const inputDataContainerRef = useRef();\n const outputDataContainerRef = useRef();\n\n const formEditorRef = useRef();\n const formViewerRef = useRef();\n const inputDataRef = useRef();\n const outputDataRef = useRef();\n\n const [showEmbed, setShowEmbed] = useState(false);\n const [schema, setSchema] = useState();\n const [data, setData] = useState();\n\n const load = useCallback((schema, data) => {\n formEditorRef.current.importSchema(schema, data);\n inputDataRef.current.setValue(toString(data));\n setSchema(schema);\n setData(data);\n }, []);\n\n // initialize and link the editors\n useEffect(() => {\n const inputDataEditor = (inputDataRef.current = new JSONEditor({\n contentAttributes: { 'aria-label': 'Form Input', tabIndex: 0 },\n placeholder: createDataEditorPlaceholder(),\n }));\n\n const outputDataEditor = (outputDataRef.current = new JSONEditor({\n readonly: true,\n contentAttributes: { 'aria-label': 'Form Output', tabIndex: 0 },\n }));\n\n const formViewer = (formViewerRef.current = new Form({\n container: viewerContainerRef.current,\n additionalModules: [...(additionalModules || []), ...(viewerAdditionalModules || [])],\n properties: {\n ...(viewerProperties || {}),\n ariaLabel: 'Form Preview',\n },\n }));\n\n const formEditor = (formEditorRef.current = new FormEditor({\n container: editorContainerRef.current,\n renderer: {\n compact: true,\n },\n palette: {\n parent: paletteContainerRef.current,\n },\n propertiesPanel: {\n parent: propertiesPanelContainerRef.current,\n ...(propertiesPanelConfig || {}),\n },\n exporter: exporterConfig,\n properties: {\n ...(editorProperties || {}),\n ariaLabel: 'Form Definition',\n },\n additionalModules: [...(additionalModules || []), ...(editorAdditionalModules || [])],\n }));\n\n formEditor.on('formField.add', ({ formField }) => {\n const formFields = formEditor.get('formFields');\n const { config } = formFields.get(formField.type);\n const { generateInitialDemoData } = config;\n const { id } = formField;\n\n if (!isFunction(generateInitialDemoData)) {\n return;\n }\n\n const initialDemoData = generateInitialDemoData(formField);\n\n if ([initialDemoData, id].includes(undefined)) {\n return;\n }\n\n setData((currentData) => {\n const newData = {\n ...currentData,\n [id]: initialDemoData,\n };\n\n inputDataRef.current.setValue(toString(newData));\n\n return newData;\n });\n });\n\n formEditor.on('changed', () => {\n setSchema(formEditor.getSchema());\n });\n\n formEditor.on('formEditor.rendered', () => {\n // notify interested parties after render\n emit('formPlayground.rendered');\n });\n\n const updateOutputData = () => {\n const submitData = formViewer._getSubmitData();\n outputDataEditor.setValue(toString(submitData));\n };\n\n // pipe viewer changes to output data editor\n formViewer.on('changed', updateOutputData);\n formViewer.on('formFieldInstanceRegistry.changed', updateOutputData);\n\n inputDataEditor.on('changed', (event) => {\n try {\n setData(JSON.parse(event.value));\n } catch (error) {\n // notify interested about input data error\n emit('formPlayground.inputDataError', error);\n }\n });\n\n inputDataEditor.attachTo(inputDataContainerRef.current);\n outputDataEditor.attachTo(outputDataContainerRef.current);\n\n return () => {\n inputDataEditor.destroy();\n outputDataEditor.destroy();\n formViewer.destroy();\n formEditor.destroy();\n };\n }, [\n additionalModules,\n editorAdditionalModules,\n editorProperties,\n emit,\n exporterConfig,\n propertiesPanelConfig,\n viewerAdditionalModules,\n viewerProperties,\n ]);\n\n // initialize data through props\n useEffect(() => {\n if (!config.initialSchema) {\n return;\n }\n\n load(config.initialSchema, config.initialData || {});\n }, [config.initialSchema, config.initialData, load]);\n\n useEffect(() => {\n schema && formViewerRef.current.importSchema(schema, data);\n }, [schema, data]);\n\n useEffect(() => {\n if (schema && inputDataContainerRef.current) {\n const variables = getSchemaVariables(schema);\n inputDataRef.current.setVariables(variables);\n }\n }, [schema]);\n\n // exposes api to parent\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api = {\n attachDataContainer: (node) => inputDataRef.current.attachTo(node),\n attachResultContainer: (node) => outputDataRef.current.attachTo(node),\n attachFormContainer: (node) => formViewerRef.current.attachTo(node),\n attachEditorContainer: (node) => formEditorRef.current.attachTo(node),\n attachPaletteContainer: (node) => formEditorRef.current.get('palette').attachTo(node),\n attachPropertiesPanelContainer: (node) => formEditorRef.current.get('propertiesPanel').attachTo(node),\n get: (name, strict) => formEditorRef.current.get(name, strict),\n getDataEditor: () => inputDataRef.current,\n getEditor: () => formEditorRef.current,\n getForm: () => formViewerRef.current,\n getResultView: () => outputDataRef.current,\n getSchema: () => formEditorRef.current.getSchema(),\n saveSchema: () => formEditorRef.current.saveSchema(),\n setSchema: setSchema,\n setData: setData,\n };\n\n onInit();\n }, [apiLinkTarget, onInit]);\n\n // separate effect for state to avoid re-creating the api object every time\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api.getState = () => ({ schema, data });\n apiLinkTarget.api.load = load;\n }, [apiLinkTarget, schema, data, load]);\n\n const handleDownload = useCallback(() => {\n download(JSON.stringify(schema, null, ' '), 'form.json', 'text/json');\n }, [schema]);\n\n const hideEmbedModal = useCallback(() => {\n setShowEmbed(false);\n }, []);\n\n const showEmbedModal = useCallback(() => {\n setShowEmbed(true);\n }, []);\n\n return (\n <div class={classNames('fjs-container', 'fjs-pgl-root')}>\n <div class=\"fjs-pgl-modals\">\n {showEmbed ? <EmbedModal schema={schema} data={data} onClose={hideEmbedModal} /> : null}\n </div>\n <div class=\"fjs-pgl-palette-container\" ref={paletteContainerRef} />\n <div class=\"fjs-pgl-main\">\n <Section name=\"Form Definition\">\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" title=\"Download form definition\" onClick={handleDownload}>\n Download\n </button>\n </Section.HeaderItem>\n )}\n\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" onClick={showEmbedModal}>\n Embed\n </button>\n </Section.HeaderItem>\n )}\n\n <div ref={editorContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Preview\">\n <div ref={viewerContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Input\">\n <div ref={inputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Output\">\n <div ref={outputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n </div>\n <div class=\"fjs-pgl-properties-container\" ref={propertiesPanelContainerRef} />\n </div>\n );\n}\n\n// helpers ///////////////\n\nfunction toString(obj) {\n return JSON.stringify(obj, null, ' ');\n}\n\nfunction createDataEditorPlaceholder() {\n const element = document.createElement('p');\n\n element.innerHTML =\n 'Use this panel to simulate the form input, such as process variables.\\nThis helps to test the form by populating the preview.\\n\\n' +\n 'Follow the JSON format like this:\\n\\n' +\n '{\\n \"variable\": \"value\"\\n}';\n\n return element;\n}\n","import { render } from 'preact';\n\nimport fileDrop from 'file-drops';\n\nimport mitt from 'mitt';\n\nimport { PlaygroundRoot } from './components/PlaygroundRoot';\n\n/**\n * @typedef { import('@bpmn-io/form-js-viewer/dist/types/types').FormProperties } FormProperties\n * @typedef { import('@bpmn-io/form-js-editor/dist/types/types').FormEditorProperties } FormEditorProperties\n *\n * @typedef { {\n * actions?: { display: Boolean }\n * additionalModules?: Array<any>\n * container?: Element\n * data: any\n * editor?: { inlinePropertiesPanel: Boolean }\n * editorAdditionalModules?: Array<any>\n * editorProperties?: FormEditorProperties\n * exporter?: { name: String, version: String }\n * propertiesPanel?: { parent: Element, feelPopupContainer: Element }\n * schema: any\n * viewerAdditionalModules?: Array<any>\n * viewerProperties?: FormProperties\n * } } FormPlaygroundOptions\n */\n\n/**\n * @param {FormPlaygroundOptions} options\n */\nfunction Playground(options) {\n const { container: parent, schema: initialSchema, data: initialData, ...rest } = options;\n\n const emitter = mitt();\n\n const container = document.createElement('div');\n\n container.classList.add('fjs-pgl-parent');\n\n if (parent) {\n parent.appendChild(container);\n }\n\n const handleDrop = fileDrop('Drop a form file', function (files) {\n const file = files[0];\n\n if (file) {\n try {\n this.api.setSchema(JSON.parse(file.contents));\n } catch (err) {\n // TODO(nikku): indicate JSON parse error\n }\n }\n });\n\n const safe = function (fn) {\n return function (...args) {\n if (!this.api) {\n throw new Error('Playground is not initialized.');\n }\n\n return fn(...args);\n };\n };\n\n const onInit = function () {\n emitter.emit('formPlayground.init');\n };\n\n container.addEventListener('dragover', handleDrop);\n\n render(\n <PlaygroundRoot\n initialSchema={initialSchema}\n initialData={initialData}\n emit={emitter.emit}\n apiLinkTarget={this}\n onInit={onInit}\n {...rest}\n />,\n container,\n );\n\n this.on = emitter.on;\n this.off = emitter.off;\n\n this.emit = emitter.emit;\n\n this.on('destroy', () => {\n render(null, container);\n parent.removeChild(container);\n });\n\n this.destroy = () => this.emit('destroy');\n\n this.getState = safe(() => this.api.getState());\n\n this.getSchema = safe(() => this.api.getSchema());\n\n this.setSchema = safe((schema) => this.api.setSchema(schema));\n\n this.saveSchema = safe(() => this.api.saveSchema());\n\n this.get = safe((name, strict) => this.api.get(name, strict));\n\n this.getDataEditor = safe(() => this.api.getDataEditor());\n\n this.getEditor = safe(() => this.api.getEditor());\n\n this.getForm = safe((name, strict) => this.api.getForm(name, strict));\n\n this.getResultView = safe(() => this.api.getResultView());\n\n this.attachEditorContainer = safe((node) => this.api.attachEditorContainer(node));\n\n this.attachPreviewContainer = safe((node) => this.api.attachFormContainer(node));\n\n this.attachDataContainer = safe((node) => this.api.attachDataContainer(node));\n\n this.attachResultContainer = safe((node) => this.api.attachResultContainer(node));\n\n this.attachPaletteContainer = safe((node) => this.api.attachPaletteContainer(node));\n\n this.attachPropertiesPanelContainer = safe((node) => this.api.attachPropertiesPanelContainer(node));\n}\n\nexport { Playground };\n"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","class","children","_jsx","onClick","name","type","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","href","spellCheck","ref","obj","JSON","stringify","replace","variablesFacet","Facet","define","autocompletionExtension","autocompletion","override","completions","context","variables","state","facet","options","map","v","label","nodeBefore","syntaxTree","resolve","pos","explicit","word","matchBefore","from","to","NO_LINT_CLS","JSONEditor","contentAttributes","placeholder","editorPlaceholder","readonly","emitter","mitt","languageCompartment","Compartment","of","json","tabSizeCompartment","EditorState","tabSize","autocompletionConfCompartment","placeholderLinterExtension","createPlaceholderLinterExtension","container","createState","doc","extensions","basicSetup","lintGutter","linter","jsonParseLinter","keymap","indentWithTab","readOnly","EditorView","updateListener","update","docChanged","emit","value","toString","create","view","setValue","newValue","oldValue","diff","findDiff","dispatch","changes","start","end","insert","text","selection","anchor","length","getValue","setVariables","effects","reconfigure","getView","on","off","attachTo","_container","appendChild","dom","domClasses","body","add","destroy","removeChild","remove","placeholders","querySelectorAll","oldStr","newStr","minLength","Math","min","slice","endOld","endNew","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","HeaderItem","push","PlaygroundRoot","config","additionalModules","actions","actionsConfig","exporter","exporterConfig","viewerProperties","editorProperties","viewerAdditionalModules","editorAdditionalModules","propertiesPanel","propertiesPanelConfig","apiLinkTarget","onInit","display","displayActions","editorContainerRef","paletteContainerRef","propertiesPanelContainerRef","viewerContainerRef","inputDataContainerRef","outputDataContainerRef","formEditorRef","formViewerRef","inputDataRef","outputDataRef","showEmbed","setShowEmbed","useState","setSchema","setData","load","useCallback","importSchema","inputDataEditor","tabIndex","createDataEditorPlaceholder","outputDataEditor","formViewer","Form","properties","ariaLabel","formEditor","FormEditor","renderer","compact","palette","parent","formField","formFields","get","generateInitialDemoData","id","isFunction","initialDemoData","includes","undefined","currentData","newData","getSchema","updateOutputData","submitData","_getSubmitData","parse","error","initialSchema","initialData","getSchemaVariables","api","attachDataContainer","node","attachResultContainer","attachFormContainer","attachEditorContainer","attachPaletteContainer","attachPropertiesPanelContainer","strict","getDataEditor","getEditor","getForm","getResultView","saveSchema","getState","handleDownload","download","hideEmbedModal","showEmbedModal","classNames","title","element","createElement","innerHTML","Playground","rest","classList","handleDrop","fileDrop","files","file","contents","err","safe","fn","args","Error","render","attachPreviewContainer"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -414,12 +414,14 @@ function PlaygroundRoot(config) {
414
414
  // notify interested parties after render
415
415
  emit('formPlayground.rendered');
416
416
  });
417
-
418
- // pipe viewer changes to output data editor
419
- formViewer.on('changed', () => {
417
+ const updateOutputData = () => {
420
418
  const submitData = formViewer._getSubmitData();
421
419
  outputDataEditor.setValue(toString(submitData));
422
- });
420
+ };
421
+
422
+ // pipe viewer changes to output data editor
423
+ formViewer.on('changed', updateOutputData);
424
+ formViewer.on('formFieldInstanceRegistry.changed', updateOutputData);
423
425
  inputDataEditor.on('changed', event => {
424
426
  try {
425
427
  setData(JSON.parse(event.value));
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/components/Modal.js","../src/components/EmbedModal.js","../src/components/autocompletion/VariablesFacet.js","../src/components/autocompletion/index.js","../src/components/JSONEditor.js","../src/components/Section.js","../src/components/PlaygroundRoot.js","../src/Playground.js"],"sourcesContent":["import { useEffect } from 'preact/hooks';\n\nexport function Modal(props) {\n useEffect(() => {\n function handleKey(event) {\n if (event.key === 'Escape') {\n event.stopPropagation();\n\n props.onClose();\n }\n }\n\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('keydown', handleKey);\n };\n });\n\n return (\n <div class=\"fjs-pgl-modal\">\n <div class=\"fjs-pgl-modal-backdrop\" onClick={props.onClose}></div>\n <div class=\"fjs-pgl-modal-content\">\n <h1 class=\"fjs-pgl-modal-header\">{props.name}</h1>\n <div class=\"fjs-pgl-modal-body\">{props.children}</div>\n <div class=\"fjs-pgl-modal-footer\">\n <button type=\"button\" class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={props.onClose}>\n Close\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'preact/hooks';\n\nimport { Modal } from './Modal';\n\nexport function EmbedModal(props) {\n const schema = serializeValue(props.schema);\n const data = serializeValue(props.data || {});\n\n const fieldRef = useRef();\n\n const snippet = `<!-- styles needed for rendering -->\n<link rel=\"stylesheet\" href=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/assets/form-js.css\">\n\n<!-- container to render the form into -->\n<div class=\"fjs-pgl-form-container\"></div>\n\n<!-- scripts needed for embedding -->\n<script src=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/form-viewer.umd.js\"></script>\n\n<!-- actual script to instantiate the form and load form schema + data -->\n<script>\n const data = JSON.parse(${data});\n const schema = JSON.parse(${schema});\n\n const form = new FormViewer.Form({\n container: document.querySelector(\".fjs-pgl-form-container\")\n });\n\n form.on(\"submit\", (event) => {\n console.log(event.data, event.errors);\n });\n\n form.importSchema(schema, data).catch(err => {\n console.error(\"Failed to render form\", err);\n });\n</script>\n `.trim();\n\n useEffect(() => {\n fieldRef.current.select();\n });\n\n return (\n <Modal name=\"Embed form\" onClose={props.onClose}>\n <p>\n Use the following HTML snippet to embed your form with <a href=\"https://github.com/bpmn-io/form-js\">form-js</a>:\n </p>\n\n <textarea spellCheck=\"false\" ref={fieldRef}>\n {snippet}\n </textarea>\n </Modal>\n );\n}\n\n// helpers ///////////\n\nfunction serializeValue(obj) {\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n","import { Facet } from '@codemirror/state';\n\n/**\n * @type {Facet<import('..').Variables>} Variables\n */\nexport const variablesFacet = Facet.define();\n","import { autocompletion } from '@codemirror/autocomplete';\nimport { variablesFacet } from './VariablesFacet';\n\nimport { syntaxTree } from '@codemirror/language';\n\nexport function autocompletionExtension() {\n return [\n autocompletion({\n override: [completions],\n }),\n ];\n}\n\nfunction completions(context) {\n const variables = context.state.facet(variablesFacet)[0];\n\n const options = variables.map((v) => ({\n label: v,\n type: 'variable',\n }));\n\n let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n // handle inside property name as explicit call\n if (nodeBefore.type.name === 'PropertyName') {\n context.explicit = true;\n }\n\n let word = context.matchBefore(/\\w*/);\n\n if (word.from == word.to && !context.explicit) {\n return null;\n }\n\n return {\n from: word.from,\n options,\n };\n}\n","import mitt from 'mitt';\nimport { basicSetup } from 'codemirror';\nimport { EditorView, keymap, placeholder } from '@codemirror/view';\nimport { EditorState, Compartment } from '@codemirror/state';\nimport { lintGutter, linter } from '@codemirror/lint';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport { indentWithTab } from '@codemirror/commands';\nimport { autocompletionExtension } from './autocompletion/index';\nimport { variablesFacet } from './autocompletion/VariablesFacet';\nimport { classes as domClasses } from 'min-dom';\n\nconst NO_LINT_CLS = 'fjs-cm-no-lint';\n\n/**\n * @param {object} options\n * @param {boolean} [options.readonly]\n * @param {object} [options.contentAttributes]\n * @param {string | HTMLElement} [options.placeholder]\n */\nexport function JSONEditor(options = {}) {\n const { contentAttributes = {}, placeholder: editorPlaceholder, readonly = false } = options;\n const emitter = mitt();\n\n const languageCompartment = new Compartment().of(json());\n const tabSizeCompartment = new Compartment().of(EditorState.tabSize.of(2));\n const autocompletionConfCompartment = new Compartment();\n const placeholderLinterExtension = createPlaceholderLinterExtension();\n\n let container = null;\n\n function createState(doc, variables = []) {\n const extensions = [\n basicSetup,\n languageCompartment,\n tabSizeCompartment,\n lintGutter(),\n linter(jsonParseLinter()),\n placeholderLinterExtension,\n autocompletionConfCompartment.of(variablesFacet.of(variables)),\n autocompletionExtension(),\n keymap.of([indentWithTab]),\n editorPlaceholder ? placeholder(editorPlaceholder) : [],\n EditorState.readOnly.of(readonly),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n emitter.emit('changed', { value: update.state.doc.toString() });\n }\n }),\n EditorView.contentAttributes.of(contentAttributes),\n ];\n\n return EditorState.create({ doc, extensions });\n }\n\n const view = new EditorView({\n state: createState(''),\n });\n\n this.setValue = function (newValue) {\n const oldValue = view.state.doc.toString();\n\n const diff = findDiff(oldValue, newValue);\n\n if (diff) {\n view.dispatch({\n changes: { from: diff.start, to: diff.end, insert: diff.text },\n selection: { anchor: diff.start + diff.text.length },\n });\n }\n };\n\n this.getValue = function () {\n return view.state.doc.toString();\n };\n\n this.setVariables = function (variables) {\n view.dispatch({ effects: autocompletionConfCompartment.reconfigure(variablesFacet.of(variables)) });\n };\n\n this.getView = function () {\n return view;\n };\n\n this.on = emitter.on;\n this.off = emitter.off;\n this.emit = emitter.emit;\n\n this.attachTo = function (_container) {\n container = _container;\n container.appendChild(view.dom);\n domClasses(container, document.body).add('fjs-json-editor');\n };\n\n this.destroy = function () {\n if (container && view.dom) {\n container.removeChild(view.dom);\n domClasses(container, document.body).remove('fjs-json-editor');\n }\n view.destroy();\n };\n\n function createPlaceholderLinterExtension() {\n return linter((view) => {\n const placeholders = view.dom.querySelectorAll('.cm-placeholder');\n if (placeholders.length > 0) {\n domClasses(container, document.body).add(NO_LINT_CLS);\n } else {\n domClasses(container, document.body).remove(NO_LINT_CLS);\n }\n return [];\n });\n }\n}\n\nfunction findDiff(oldStr, newStr) {\n if (oldStr === newStr) {\n return null;\n }\n\n oldStr = oldStr || '';\n newStr = newStr || '';\n\n let minLength = Math.min(oldStr.length, newStr.length);\n let start = 0;\n\n while (start < minLength && oldStr[start] === newStr[start]) {\n start++;\n }\n\n if (start === minLength) {\n return {\n start: start,\n text: newStr.slice(start),\n end: oldStr.length,\n };\n }\n\n let endOld = oldStr.length;\n let endNew = newStr.length;\n\n while (endOld > start && endNew > start && oldStr[endOld - 1] === newStr[endNew - 1]) {\n endOld--;\n endNew--;\n }\n\n return {\n start: start,\n text: newStr.slice(start, endNew),\n end: endOld,\n };\n}\n","export function Section(props) {\n const elements = Array.isArray(props.children) ? props.children : [props.children];\n\n const { headerItems, children } = elements.reduce(\n (_, child) => {\n const bucket = child.type === Section.HeaderItem ? _.headerItems : _.children;\n\n bucket.push(child);\n\n return _;\n },\n { headerItems: [], children: [] },\n );\n\n return (\n <div class=\"fjs-pgl-section\">\n <h1 class=\"header\">\n {props.name} {headerItems.length ? <span class=\"header-items\">{headerItems}</span> : null}\n </h1>\n <div class=\"body\">{children}</div>\n </div>\n );\n}\n\nSection.HeaderItem = function (props) {\n return props.children;\n};\n","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\nimport { isFunction } from 'min-dash';\nimport download from 'downloadjs';\n\nimport classNames from 'classnames';\n\nimport { Form, getSchemaVariables } from '@bpmn-io/form-js-viewer';\n\nimport { FormEditor } from '@bpmn-io/form-js-editor';\n\nimport { EmbedModal } from './EmbedModal';\nimport { JSONEditor } from './JSONEditor';\nimport { Section } from './Section';\n\nimport './FileDrop.css';\nimport './PlaygroundRoot.css';\n\nexport function PlaygroundRoot(config) {\n const {\n additionalModules, // goes into both editor + viewer\n actions: actionsConfig,\n emit,\n exporter: exporterConfig,\n viewerProperties,\n editorProperties,\n viewerAdditionalModules,\n editorAdditionalModules,\n propertiesPanel: propertiesPanelConfig,\n apiLinkTarget,\n onInit,\n } = config;\n\n const { display: displayActions = true } = actionsConfig || {};\n\n const editorContainerRef = useRef();\n const paletteContainerRef = useRef();\n const propertiesPanelContainerRef = useRef();\n const viewerContainerRef = useRef();\n const inputDataContainerRef = useRef();\n const outputDataContainerRef = useRef();\n\n const formEditorRef = useRef();\n const formViewerRef = useRef();\n const inputDataRef = useRef();\n const outputDataRef = useRef();\n\n const [showEmbed, setShowEmbed] = useState(false);\n const [schema, setSchema] = useState();\n const [data, setData] = useState();\n\n const load = useCallback((schema, data) => {\n formEditorRef.current.importSchema(schema, data);\n inputDataRef.current.setValue(toString(data));\n setSchema(schema);\n setData(data);\n }, []);\n\n // initialize and link the editors\n useEffect(() => {\n const inputDataEditor = (inputDataRef.current = new JSONEditor({\n contentAttributes: { 'aria-label': 'Form Input', tabIndex: 0 },\n placeholder: createDataEditorPlaceholder(),\n }));\n\n const outputDataEditor = (outputDataRef.current = new JSONEditor({\n readonly: true,\n contentAttributes: { 'aria-label': 'Form Output', tabIndex: 0 },\n }));\n\n const formViewer = (formViewerRef.current = new Form({\n container: viewerContainerRef.current,\n additionalModules: [...(additionalModules || []), ...(viewerAdditionalModules || [])],\n properties: {\n ...(viewerProperties || {}),\n ariaLabel: 'Form Preview',\n },\n }));\n\n const formEditor = (formEditorRef.current = new FormEditor({\n container: editorContainerRef.current,\n renderer: {\n compact: true,\n },\n palette: {\n parent: paletteContainerRef.current,\n },\n propertiesPanel: {\n parent: propertiesPanelContainerRef.current,\n ...(propertiesPanelConfig || {}),\n },\n exporter: exporterConfig,\n properties: {\n ...(editorProperties || {}),\n ariaLabel: 'Form Definition',\n },\n additionalModules: [...(additionalModules || []), ...(editorAdditionalModules || [])],\n }));\n\n formEditor.on('formField.add', ({ formField }) => {\n const formFields = formEditor.get('formFields');\n const { config } = formFields.get(formField.type);\n const { generateInitialDemoData } = config;\n const { id } = formField;\n\n if (!isFunction(generateInitialDemoData)) {\n return;\n }\n\n const initialDemoData = generateInitialDemoData(formField);\n\n if ([initialDemoData, id].includes(undefined)) {\n return;\n }\n\n setData((currentData) => {\n const newData = {\n ...currentData,\n [id]: initialDemoData,\n };\n\n inputDataRef.current.setValue(toString(newData));\n\n return newData;\n });\n });\n\n formEditor.on('changed', () => {\n setSchema(formEditor.getSchema());\n });\n\n formEditor.on('formEditor.rendered', () => {\n // notify interested parties after render\n emit('formPlayground.rendered');\n });\n\n // pipe viewer changes to output data editor\n formViewer.on('changed', () => {\n const submitData = formViewer._getSubmitData();\n outputDataEditor.setValue(toString(submitData));\n });\n\n inputDataEditor.on('changed', (event) => {\n try {\n setData(JSON.parse(event.value));\n } catch (error) {\n // notify interested about input data error\n emit('formPlayground.inputDataError', error);\n }\n });\n\n inputDataEditor.attachTo(inputDataContainerRef.current);\n outputDataEditor.attachTo(outputDataContainerRef.current);\n\n return () => {\n inputDataEditor.destroy();\n outputDataEditor.destroy();\n formViewer.destroy();\n formEditor.destroy();\n };\n }, [\n additionalModules,\n editorAdditionalModules,\n editorProperties,\n emit,\n exporterConfig,\n propertiesPanelConfig,\n viewerAdditionalModules,\n viewerProperties,\n ]);\n\n // initialize data through props\n useEffect(() => {\n if (!config.initialSchema) {\n return;\n }\n\n load(config.initialSchema, config.initialData || {});\n }, [config.initialSchema, config.initialData, load]);\n\n useEffect(() => {\n schema && formViewerRef.current.importSchema(schema, data);\n }, [schema, data]);\n\n useEffect(() => {\n if (schema && inputDataContainerRef.current) {\n const variables = getSchemaVariables(schema);\n inputDataRef.current.setVariables(variables);\n }\n }, [schema]);\n\n // exposes api to parent\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api = {\n attachDataContainer: (node) => inputDataRef.current.attachTo(node),\n attachResultContainer: (node) => outputDataRef.current.attachTo(node),\n attachFormContainer: (node) => formViewerRef.current.attachTo(node),\n attachEditorContainer: (node) => formEditorRef.current.attachTo(node),\n attachPaletteContainer: (node) => formEditorRef.current.get('palette').attachTo(node),\n attachPropertiesPanelContainer: (node) => formEditorRef.current.get('propertiesPanel').attachTo(node),\n get: (name, strict) => formEditorRef.current.get(name, strict),\n getDataEditor: () => inputDataRef.current,\n getEditor: () => formEditorRef.current,\n getForm: () => formViewerRef.current,\n getResultView: () => outputDataRef.current,\n getSchema: () => formEditorRef.current.getSchema(),\n saveSchema: () => formEditorRef.current.saveSchema(),\n setSchema: setSchema,\n setData: setData,\n };\n\n onInit();\n }, [apiLinkTarget, onInit]);\n\n // separate effect for state to avoid re-creating the api object every time\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api.getState = () => ({ schema, data });\n apiLinkTarget.api.load = load;\n }, [apiLinkTarget, schema, data, load]);\n\n const handleDownload = useCallback(() => {\n download(JSON.stringify(schema, null, ' '), 'form.json', 'text/json');\n }, [schema]);\n\n const hideEmbedModal = useCallback(() => {\n setShowEmbed(false);\n }, []);\n\n const showEmbedModal = useCallback(() => {\n setShowEmbed(true);\n }, []);\n\n return (\n <div class={classNames('fjs-container', 'fjs-pgl-root')}>\n <div class=\"fjs-pgl-modals\">\n {showEmbed ? <EmbedModal schema={schema} data={data} onClose={hideEmbedModal} /> : null}\n </div>\n <div class=\"fjs-pgl-palette-container\" ref={paletteContainerRef} />\n <div class=\"fjs-pgl-main\">\n <Section name=\"Form Definition\">\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" title=\"Download form definition\" onClick={handleDownload}>\n Download\n </button>\n </Section.HeaderItem>\n )}\n\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" onClick={showEmbedModal}>\n Embed\n </button>\n </Section.HeaderItem>\n )}\n\n <div ref={editorContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Preview\">\n <div ref={viewerContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Input\">\n <div ref={inputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Output\">\n <div ref={outputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n </div>\n <div class=\"fjs-pgl-properties-container\" ref={propertiesPanelContainerRef} />\n </div>\n );\n}\n\n// helpers ///////////////\n\nfunction toString(obj) {\n return JSON.stringify(obj, null, ' ');\n}\n\nfunction createDataEditorPlaceholder() {\n const element = document.createElement('p');\n\n element.innerHTML =\n 'Use this panel to simulate the form input, such as process variables.\\nThis helps to test the form by populating the preview.\\n\\n' +\n 'Follow the JSON format like this:\\n\\n' +\n '{\\n \"variable\": \"value\"\\n}';\n\n return element;\n}\n","import { render } from 'preact';\n\nimport fileDrop from 'file-drops';\n\nimport mitt from 'mitt';\n\nimport { PlaygroundRoot } from './components/PlaygroundRoot';\n\n/**\n * @typedef { import('@bpmn-io/form-js-viewer/dist/types/types').FormProperties } FormProperties\n * @typedef { import('@bpmn-io/form-js-editor/dist/types/types').FormEditorProperties } FormEditorProperties\n *\n * @typedef { {\n * actions?: { display: Boolean }\n * additionalModules?: Array<any>\n * container?: Element\n * data: any\n * editor?: { inlinePropertiesPanel: Boolean }\n * editorAdditionalModules?: Array<any>\n * editorProperties?: FormEditorProperties\n * exporter?: { name: String, version: String }\n * propertiesPanel?: { parent: Element, feelPopupContainer: Element }\n * schema: any\n * viewerAdditionalModules?: Array<any>\n * viewerProperties?: FormProperties\n * } } FormPlaygroundOptions\n */\n\n/**\n * @param {FormPlaygroundOptions} options\n */\nfunction Playground(options) {\n const { container: parent, schema: initialSchema, data: initialData, ...rest } = options;\n\n const emitter = mitt();\n\n const container = document.createElement('div');\n\n container.classList.add('fjs-pgl-parent');\n\n if (parent) {\n parent.appendChild(container);\n }\n\n const handleDrop = fileDrop('Drop a form file', function (files) {\n const file = files[0];\n\n if (file) {\n try {\n this.api.setSchema(JSON.parse(file.contents));\n } catch (err) {\n // TODO(nikku): indicate JSON parse error\n }\n }\n });\n\n const safe = function (fn) {\n return function (...args) {\n if (!this.api) {\n throw new Error('Playground is not initialized.');\n }\n\n return fn(...args);\n };\n };\n\n const onInit = function () {\n emitter.emit('formPlayground.init');\n };\n\n container.addEventListener('dragover', handleDrop);\n\n render(\n <PlaygroundRoot\n initialSchema={initialSchema}\n initialData={initialData}\n emit={emitter.emit}\n apiLinkTarget={this}\n onInit={onInit}\n {...rest}\n />,\n container,\n );\n\n this.on = emitter.on;\n this.off = emitter.off;\n\n this.emit = emitter.emit;\n\n this.on('destroy', () => {\n render(null, container);\n parent.removeChild(container);\n });\n\n this.destroy = () => this.emit('destroy');\n\n this.getState = safe(() => this.api.getState());\n\n this.getSchema = safe(() => this.api.getSchema());\n\n this.setSchema = safe((schema) => this.api.setSchema(schema));\n\n this.saveSchema = safe(() => this.api.saveSchema());\n\n this.get = safe((name, strict) => this.api.get(name, strict));\n\n this.getDataEditor = safe(() => this.api.getDataEditor());\n\n this.getEditor = safe(() => this.api.getEditor());\n\n this.getForm = safe((name, strict) => this.api.getForm(name, strict));\n\n this.getResultView = safe(() => this.api.getResultView());\n\n this.attachEditorContainer = safe((node) => this.api.attachEditorContainer(node));\n\n this.attachPreviewContainer = safe((node) => this.api.attachFormContainer(node));\n\n this.attachDataContainer = safe((node) => this.api.attachDataContainer(node));\n\n this.attachResultContainer = safe((node) => this.api.attachResultContainer(node));\n\n this.attachPaletteContainer = safe((node) => this.api.attachPaletteContainer(node));\n\n this.attachPropertiesPanelContainer = safe((node) => this.api.attachPropertiesPanelContainer(node));\n}\n\nexport { Playground };\n"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","class","children","_jsx","onClick","name","type","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","href","spellCheck","ref","obj","JSON","stringify","replace","variablesFacet","Facet","define","autocompletionExtension","autocompletion","override","completions","context","variables","state","facet","options","map","v","label","nodeBefore","syntaxTree","resolve","pos","explicit","word","matchBefore","from","to","NO_LINT_CLS","JSONEditor","contentAttributes","placeholder","editorPlaceholder","readonly","emitter","mitt","languageCompartment","Compartment","of","json","tabSizeCompartment","EditorState","tabSize","autocompletionConfCompartment","placeholderLinterExtension","createPlaceholderLinterExtension","container","createState","doc","extensions","basicSetup","lintGutter","linter","jsonParseLinter","keymap","indentWithTab","readOnly","EditorView","updateListener","update","docChanged","emit","value","toString","create","view","setValue","newValue","oldValue","diff","findDiff","dispatch","changes","start","end","insert","text","selection","anchor","length","getValue","setVariables","effects","reconfigure","getView","on","off","attachTo","_container","appendChild","dom","domClasses","body","add","destroy","removeChild","remove","placeholders","querySelectorAll","oldStr","newStr","minLength","Math","min","slice","endOld","endNew","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","HeaderItem","push","PlaygroundRoot","config","additionalModules","actions","actionsConfig","exporter","exporterConfig","viewerProperties","editorProperties","viewerAdditionalModules","editorAdditionalModules","propertiesPanel","propertiesPanelConfig","apiLinkTarget","onInit","display","displayActions","editorContainerRef","paletteContainerRef","propertiesPanelContainerRef","viewerContainerRef","inputDataContainerRef","outputDataContainerRef","formEditorRef","formViewerRef","inputDataRef","outputDataRef","showEmbed","setShowEmbed","useState","setSchema","setData","load","useCallback","importSchema","inputDataEditor","tabIndex","createDataEditorPlaceholder","outputDataEditor","formViewer","Form","properties","ariaLabel","formEditor","FormEditor","renderer","compact","palette","parent","formField","formFields","get","generateInitialDemoData","id","isFunction","initialDemoData","includes","undefined","currentData","newData","getSchema","submitData","_getSubmitData","parse","error","initialSchema","initialData","getSchemaVariables","api","attachDataContainer","node","attachResultContainer","attachFormContainer","attachEditorContainer","attachPaletteContainer","attachPropertiesPanelContainer","strict","getDataEditor","getEditor","getForm","getResultView","saveSchema","getState","handleDownload","download","hideEmbedModal","showEmbedModal","classNames","title","element","createElement","innerHTML","Playground","rest","classList","handleDrop","fileDrop","files","file","contents","err","safe","fn","args","Error","render","attachPreviewContainer"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/components/Modal.js","../src/components/EmbedModal.js","../src/components/autocompletion/VariablesFacet.js","../src/components/autocompletion/index.js","../src/components/JSONEditor.js","../src/components/Section.js","../src/components/PlaygroundRoot.js","../src/Playground.js"],"sourcesContent":["import { useEffect } from 'preact/hooks';\n\nexport function Modal(props) {\n useEffect(() => {\n function handleKey(event) {\n if (event.key === 'Escape') {\n event.stopPropagation();\n\n props.onClose();\n }\n }\n\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('keydown', handleKey);\n };\n });\n\n return (\n <div class=\"fjs-pgl-modal\">\n <div class=\"fjs-pgl-modal-backdrop\" onClick={props.onClose}></div>\n <div class=\"fjs-pgl-modal-content\">\n <h1 class=\"fjs-pgl-modal-header\">{props.name}</h1>\n <div class=\"fjs-pgl-modal-body\">{props.children}</div>\n <div class=\"fjs-pgl-modal-footer\">\n <button type=\"button\" class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={props.onClose}>\n Close\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'preact/hooks';\n\nimport { Modal } from './Modal';\n\nexport function EmbedModal(props) {\n const schema = serializeValue(props.schema);\n const data = serializeValue(props.data || {});\n\n const fieldRef = useRef();\n\n const snippet = `<!-- styles needed for rendering -->\n<link rel=\"stylesheet\" href=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/assets/form-js.css\">\n\n<!-- container to render the form into -->\n<div class=\"fjs-pgl-form-container\"></div>\n\n<!-- scripts needed for embedding -->\n<script src=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/form-viewer.umd.js\"></script>\n\n<!-- actual script to instantiate the form and load form schema + data -->\n<script>\n const data = JSON.parse(${data});\n const schema = JSON.parse(${schema});\n\n const form = new FormViewer.Form({\n container: document.querySelector(\".fjs-pgl-form-container\")\n });\n\n form.on(\"submit\", (event) => {\n console.log(event.data, event.errors);\n });\n\n form.importSchema(schema, data).catch(err => {\n console.error(\"Failed to render form\", err);\n });\n</script>\n `.trim();\n\n useEffect(() => {\n fieldRef.current.select();\n });\n\n return (\n <Modal name=\"Embed form\" onClose={props.onClose}>\n <p>\n Use the following HTML snippet to embed your form with <a href=\"https://github.com/bpmn-io/form-js\">form-js</a>:\n </p>\n\n <textarea spellCheck=\"false\" ref={fieldRef}>\n {snippet}\n </textarea>\n </Modal>\n );\n}\n\n// helpers ///////////\n\nfunction serializeValue(obj) {\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n","import { Facet } from '@codemirror/state';\n\n/**\n * @type {Facet<import('..').Variables>} Variables\n */\nexport const variablesFacet = Facet.define();\n","import { autocompletion } from '@codemirror/autocomplete';\nimport { variablesFacet } from './VariablesFacet';\n\nimport { syntaxTree } from '@codemirror/language';\n\nexport function autocompletionExtension() {\n return [\n autocompletion({\n override: [completions],\n }),\n ];\n}\n\nfunction completions(context) {\n const variables = context.state.facet(variablesFacet)[0];\n\n const options = variables.map((v) => ({\n label: v,\n type: 'variable',\n }));\n\n let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n // handle inside property name as explicit call\n if (nodeBefore.type.name === 'PropertyName') {\n context.explicit = true;\n }\n\n let word = context.matchBefore(/\\w*/);\n\n if (word.from == word.to && !context.explicit) {\n return null;\n }\n\n return {\n from: word.from,\n options,\n };\n}\n","import mitt from 'mitt';\nimport { basicSetup } from 'codemirror';\nimport { EditorView, keymap, placeholder } from '@codemirror/view';\nimport { EditorState, Compartment } from '@codemirror/state';\nimport { lintGutter, linter } from '@codemirror/lint';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport { indentWithTab } from '@codemirror/commands';\nimport { autocompletionExtension } from './autocompletion/index';\nimport { variablesFacet } from './autocompletion/VariablesFacet';\nimport { classes as domClasses } from 'min-dom';\n\nconst NO_LINT_CLS = 'fjs-cm-no-lint';\n\n/**\n * @param {object} options\n * @param {boolean} [options.readonly]\n * @param {object} [options.contentAttributes]\n * @param {string | HTMLElement} [options.placeholder]\n */\nexport function JSONEditor(options = {}) {\n const { contentAttributes = {}, placeholder: editorPlaceholder, readonly = false } = options;\n const emitter = mitt();\n\n const languageCompartment = new Compartment().of(json());\n const tabSizeCompartment = new Compartment().of(EditorState.tabSize.of(2));\n const autocompletionConfCompartment = new Compartment();\n const placeholderLinterExtension = createPlaceholderLinterExtension();\n\n let container = null;\n\n function createState(doc, variables = []) {\n const extensions = [\n basicSetup,\n languageCompartment,\n tabSizeCompartment,\n lintGutter(),\n linter(jsonParseLinter()),\n placeholderLinterExtension,\n autocompletionConfCompartment.of(variablesFacet.of(variables)),\n autocompletionExtension(),\n keymap.of([indentWithTab]),\n editorPlaceholder ? placeholder(editorPlaceholder) : [],\n EditorState.readOnly.of(readonly),\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n emitter.emit('changed', { value: update.state.doc.toString() });\n }\n }),\n EditorView.contentAttributes.of(contentAttributes),\n ];\n\n return EditorState.create({ doc, extensions });\n }\n\n const view = new EditorView({\n state: createState(''),\n });\n\n this.setValue = function (newValue) {\n const oldValue = view.state.doc.toString();\n\n const diff = findDiff(oldValue, newValue);\n\n if (diff) {\n view.dispatch({\n changes: { from: diff.start, to: diff.end, insert: diff.text },\n selection: { anchor: diff.start + diff.text.length },\n });\n }\n };\n\n this.getValue = function () {\n return view.state.doc.toString();\n };\n\n this.setVariables = function (variables) {\n view.dispatch({ effects: autocompletionConfCompartment.reconfigure(variablesFacet.of(variables)) });\n };\n\n this.getView = function () {\n return view;\n };\n\n this.on = emitter.on;\n this.off = emitter.off;\n this.emit = emitter.emit;\n\n this.attachTo = function (_container) {\n container = _container;\n container.appendChild(view.dom);\n domClasses(container, document.body).add('fjs-json-editor');\n };\n\n this.destroy = function () {\n if (container && view.dom) {\n container.removeChild(view.dom);\n domClasses(container, document.body).remove('fjs-json-editor');\n }\n view.destroy();\n };\n\n function createPlaceholderLinterExtension() {\n return linter((view) => {\n const placeholders = view.dom.querySelectorAll('.cm-placeholder');\n if (placeholders.length > 0) {\n domClasses(container, document.body).add(NO_LINT_CLS);\n } else {\n domClasses(container, document.body).remove(NO_LINT_CLS);\n }\n return [];\n });\n }\n}\n\nfunction findDiff(oldStr, newStr) {\n if (oldStr === newStr) {\n return null;\n }\n\n oldStr = oldStr || '';\n newStr = newStr || '';\n\n let minLength = Math.min(oldStr.length, newStr.length);\n let start = 0;\n\n while (start < minLength && oldStr[start] === newStr[start]) {\n start++;\n }\n\n if (start === minLength) {\n return {\n start: start,\n text: newStr.slice(start),\n end: oldStr.length,\n };\n }\n\n let endOld = oldStr.length;\n let endNew = newStr.length;\n\n while (endOld > start && endNew > start && oldStr[endOld - 1] === newStr[endNew - 1]) {\n endOld--;\n endNew--;\n }\n\n return {\n start: start,\n text: newStr.slice(start, endNew),\n end: endOld,\n };\n}\n","export function Section(props) {\n const elements = Array.isArray(props.children) ? props.children : [props.children];\n\n const { headerItems, children } = elements.reduce(\n (_, child) => {\n const bucket = child.type === Section.HeaderItem ? _.headerItems : _.children;\n\n bucket.push(child);\n\n return _;\n },\n { headerItems: [], children: [] },\n );\n\n return (\n <div class=\"fjs-pgl-section\">\n <h1 class=\"header\">\n {props.name} {headerItems.length ? <span class=\"header-items\">{headerItems}</span> : null}\n </h1>\n <div class=\"body\">{children}</div>\n </div>\n );\n}\n\nSection.HeaderItem = function (props) {\n return props.children;\n};\n","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\nimport { isFunction } from 'min-dash';\nimport download from 'downloadjs';\n\nimport classNames from 'classnames';\n\nimport { Form, getSchemaVariables } from '@bpmn-io/form-js-viewer';\n\nimport { FormEditor } from '@bpmn-io/form-js-editor';\n\nimport { EmbedModal } from './EmbedModal';\nimport { JSONEditor } from './JSONEditor';\nimport { Section } from './Section';\n\nimport './FileDrop.css';\nimport './PlaygroundRoot.css';\n\nexport function PlaygroundRoot(config) {\n const {\n additionalModules, // goes into both editor + viewer\n actions: actionsConfig,\n emit,\n exporter: exporterConfig,\n viewerProperties,\n editorProperties,\n viewerAdditionalModules,\n editorAdditionalModules,\n propertiesPanel: propertiesPanelConfig,\n apiLinkTarget,\n onInit,\n } = config;\n\n const { display: displayActions = true } = actionsConfig || {};\n\n const editorContainerRef = useRef();\n const paletteContainerRef = useRef();\n const propertiesPanelContainerRef = useRef();\n const viewerContainerRef = useRef();\n const inputDataContainerRef = useRef();\n const outputDataContainerRef = useRef();\n\n const formEditorRef = useRef();\n const formViewerRef = useRef();\n const inputDataRef = useRef();\n const outputDataRef = useRef();\n\n const [showEmbed, setShowEmbed] = useState(false);\n const [schema, setSchema] = useState();\n const [data, setData] = useState();\n\n const load = useCallback((schema, data) => {\n formEditorRef.current.importSchema(schema, data);\n inputDataRef.current.setValue(toString(data));\n setSchema(schema);\n setData(data);\n }, []);\n\n // initialize and link the editors\n useEffect(() => {\n const inputDataEditor = (inputDataRef.current = new JSONEditor({\n contentAttributes: { 'aria-label': 'Form Input', tabIndex: 0 },\n placeholder: createDataEditorPlaceholder(),\n }));\n\n const outputDataEditor = (outputDataRef.current = new JSONEditor({\n readonly: true,\n contentAttributes: { 'aria-label': 'Form Output', tabIndex: 0 },\n }));\n\n const formViewer = (formViewerRef.current = new Form({\n container: viewerContainerRef.current,\n additionalModules: [...(additionalModules || []), ...(viewerAdditionalModules || [])],\n properties: {\n ...(viewerProperties || {}),\n ariaLabel: 'Form Preview',\n },\n }));\n\n const formEditor = (formEditorRef.current = new FormEditor({\n container: editorContainerRef.current,\n renderer: {\n compact: true,\n },\n palette: {\n parent: paletteContainerRef.current,\n },\n propertiesPanel: {\n parent: propertiesPanelContainerRef.current,\n ...(propertiesPanelConfig || {}),\n },\n exporter: exporterConfig,\n properties: {\n ...(editorProperties || {}),\n ariaLabel: 'Form Definition',\n },\n additionalModules: [...(additionalModules || []), ...(editorAdditionalModules || [])],\n }));\n\n formEditor.on('formField.add', ({ formField }) => {\n const formFields = formEditor.get('formFields');\n const { config } = formFields.get(formField.type);\n const { generateInitialDemoData } = config;\n const { id } = formField;\n\n if (!isFunction(generateInitialDemoData)) {\n return;\n }\n\n const initialDemoData = generateInitialDemoData(formField);\n\n if ([initialDemoData, id].includes(undefined)) {\n return;\n }\n\n setData((currentData) => {\n const newData = {\n ...currentData,\n [id]: initialDemoData,\n };\n\n inputDataRef.current.setValue(toString(newData));\n\n return newData;\n });\n });\n\n formEditor.on('changed', () => {\n setSchema(formEditor.getSchema());\n });\n\n formEditor.on('formEditor.rendered', () => {\n // notify interested parties after render\n emit('formPlayground.rendered');\n });\n\n const updateOutputData = () => {\n const submitData = formViewer._getSubmitData();\n outputDataEditor.setValue(toString(submitData));\n };\n\n // pipe viewer changes to output data editor\n formViewer.on('changed', updateOutputData);\n formViewer.on('formFieldInstanceRegistry.changed', updateOutputData);\n\n inputDataEditor.on('changed', (event) => {\n try {\n setData(JSON.parse(event.value));\n } catch (error) {\n // notify interested about input data error\n emit('formPlayground.inputDataError', error);\n }\n });\n\n inputDataEditor.attachTo(inputDataContainerRef.current);\n outputDataEditor.attachTo(outputDataContainerRef.current);\n\n return () => {\n inputDataEditor.destroy();\n outputDataEditor.destroy();\n formViewer.destroy();\n formEditor.destroy();\n };\n }, [\n additionalModules,\n editorAdditionalModules,\n editorProperties,\n emit,\n exporterConfig,\n propertiesPanelConfig,\n viewerAdditionalModules,\n viewerProperties,\n ]);\n\n // initialize data through props\n useEffect(() => {\n if (!config.initialSchema) {\n return;\n }\n\n load(config.initialSchema, config.initialData || {});\n }, [config.initialSchema, config.initialData, load]);\n\n useEffect(() => {\n schema && formViewerRef.current.importSchema(schema, data);\n }, [schema, data]);\n\n useEffect(() => {\n if (schema && inputDataContainerRef.current) {\n const variables = getSchemaVariables(schema);\n inputDataRef.current.setVariables(variables);\n }\n }, [schema]);\n\n // exposes api to parent\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api = {\n attachDataContainer: (node) => inputDataRef.current.attachTo(node),\n attachResultContainer: (node) => outputDataRef.current.attachTo(node),\n attachFormContainer: (node) => formViewerRef.current.attachTo(node),\n attachEditorContainer: (node) => formEditorRef.current.attachTo(node),\n attachPaletteContainer: (node) => formEditorRef.current.get('palette').attachTo(node),\n attachPropertiesPanelContainer: (node) => formEditorRef.current.get('propertiesPanel').attachTo(node),\n get: (name, strict) => formEditorRef.current.get(name, strict),\n getDataEditor: () => inputDataRef.current,\n getEditor: () => formEditorRef.current,\n getForm: () => formViewerRef.current,\n getResultView: () => outputDataRef.current,\n getSchema: () => formEditorRef.current.getSchema(),\n saveSchema: () => formEditorRef.current.saveSchema(),\n setSchema: setSchema,\n setData: setData,\n };\n\n onInit();\n }, [apiLinkTarget, onInit]);\n\n // separate effect for state to avoid re-creating the api object every time\n useEffect(() => {\n if (!apiLinkTarget) {\n return;\n }\n\n apiLinkTarget.api.getState = () => ({ schema, data });\n apiLinkTarget.api.load = load;\n }, [apiLinkTarget, schema, data, load]);\n\n const handleDownload = useCallback(() => {\n download(JSON.stringify(schema, null, ' '), 'form.json', 'text/json');\n }, [schema]);\n\n const hideEmbedModal = useCallback(() => {\n setShowEmbed(false);\n }, []);\n\n const showEmbedModal = useCallback(() => {\n setShowEmbed(true);\n }, []);\n\n return (\n <div class={classNames('fjs-container', 'fjs-pgl-root')}>\n <div class=\"fjs-pgl-modals\">\n {showEmbed ? <EmbedModal schema={schema} data={data} onClose={hideEmbedModal} /> : null}\n </div>\n <div class=\"fjs-pgl-palette-container\" ref={paletteContainerRef} />\n <div class=\"fjs-pgl-main\">\n <Section name=\"Form Definition\">\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" title=\"Download form definition\" onClick={handleDownload}>\n Download\n </button>\n </Section.HeaderItem>\n )}\n\n {displayActions && (\n <Section.HeaderItem>\n <button type=\"button\" class=\"fjs-pgl-button\" onClick={showEmbedModal}>\n Embed\n </button>\n </Section.HeaderItem>\n )}\n\n <div ref={editorContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Preview\">\n <div ref={viewerContainerRef} class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Input\">\n <div ref={inputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Output\">\n <div ref={outputDataContainerRef} class=\"fjs-pgl-text-container\"></div>\n </Section>\n </div>\n <div class=\"fjs-pgl-properties-container\" ref={propertiesPanelContainerRef} />\n </div>\n );\n}\n\n// helpers ///////////////\n\nfunction toString(obj) {\n return JSON.stringify(obj, null, ' ');\n}\n\nfunction createDataEditorPlaceholder() {\n const element = document.createElement('p');\n\n element.innerHTML =\n 'Use this panel to simulate the form input, such as process variables.\\nThis helps to test the form by populating the preview.\\n\\n' +\n 'Follow the JSON format like this:\\n\\n' +\n '{\\n \"variable\": \"value\"\\n}';\n\n return element;\n}\n","import { render } from 'preact';\n\nimport fileDrop from 'file-drops';\n\nimport mitt from 'mitt';\n\nimport { PlaygroundRoot } from './components/PlaygroundRoot';\n\n/**\n * @typedef { import('@bpmn-io/form-js-viewer/dist/types/types').FormProperties } FormProperties\n * @typedef { import('@bpmn-io/form-js-editor/dist/types/types').FormEditorProperties } FormEditorProperties\n *\n * @typedef { {\n * actions?: { display: Boolean }\n * additionalModules?: Array<any>\n * container?: Element\n * data: any\n * editor?: { inlinePropertiesPanel: Boolean }\n * editorAdditionalModules?: Array<any>\n * editorProperties?: FormEditorProperties\n * exporter?: { name: String, version: String }\n * propertiesPanel?: { parent: Element, feelPopupContainer: Element }\n * schema: any\n * viewerAdditionalModules?: Array<any>\n * viewerProperties?: FormProperties\n * } } FormPlaygroundOptions\n */\n\n/**\n * @param {FormPlaygroundOptions} options\n */\nfunction Playground(options) {\n const { container: parent, schema: initialSchema, data: initialData, ...rest } = options;\n\n const emitter = mitt();\n\n const container = document.createElement('div');\n\n container.classList.add('fjs-pgl-parent');\n\n if (parent) {\n parent.appendChild(container);\n }\n\n const handleDrop = fileDrop('Drop a form file', function (files) {\n const file = files[0];\n\n if (file) {\n try {\n this.api.setSchema(JSON.parse(file.contents));\n } catch (err) {\n // TODO(nikku): indicate JSON parse error\n }\n }\n });\n\n const safe = function (fn) {\n return function (...args) {\n if (!this.api) {\n throw new Error('Playground is not initialized.');\n }\n\n return fn(...args);\n };\n };\n\n const onInit = function () {\n emitter.emit('formPlayground.init');\n };\n\n container.addEventListener('dragover', handleDrop);\n\n render(\n <PlaygroundRoot\n initialSchema={initialSchema}\n initialData={initialData}\n emit={emitter.emit}\n apiLinkTarget={this}\n onInit={onInit}\n {...rest}\n />,\n container,\n );\n\n this.on = emitter.on;\n this.off = emitter.off;\n\n this.emit = emitter.emit;\n\n this.on('destroy', () => {\n render(null, container);\n parent.removeChild(container);\n });\n\n this.destroy = () => this.emit('destroy');\n\n this.getState = safe(() => this.api.getState());\n\n this.getSchema = safe(() => this.api.getSchema());\n\n this.setSchema = safe((schema) => this.api.setSchema(schema));\n\n this.saveSchema = safe(() => this.api.saveSchema());\n\n this.get = safe((name, strict) => this.api.get(name, strict));\n\n this.getDataEditor = safe(() => this.api.getDataEditor());\n\n this.getEditor = safe(() => this.api.getEditor());\n\n this.getForm = safe((name, strict) => this.api.getForm(name, strict));\n\n this.getResultView = safe(() => this.api.getResultView());\n\n this.attachEditorContainer = safe((node) => this.api.attachEditorContainer(node));\n\n this.attachPreviewContainer = safe((node) => this.api.attachFormContainer(node));\n\n this.attachDataContainer = safe((node) => this.api.attachDataContainer(node));\n\n this.attachResultContainer = safe((node) => this.api.attachResultContainer(node));\n\n this.attachPaletteContainer = safe((node) => this.api.attachPaletteContainer(node));\n\n this.attachPropertiesPanelContainer = safe((node) => this.api.attachPropertiesPanelContainer(node));\n}\n\nexport { Playground };\n"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","class","children","_jsx","onClick","name","type","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","href","spellCheck","ref","obj","JSON","stringify","replace","variablesFacet","Facet","define","autocompletionExtension","autocompletion","override","completions","context","variables","state","facet","options","map","v","label","nodeBefore","syntaxTree","resolve","pos","explicit","word","matchBefore","from","to","NO_LINT_CLS","JSONEditor","contentAttributes","placeholder","editorPlaceholder","readonly","emitter","mitt","languageCompartment","Compartment","of","json","tabSizeCompartment","EditorState","tabSize","autocompletionConfCompartment","placeholderLinterExtension","createPlaceholderLinterExtension","container","createState","doc","extensions","basicSetup","lintGutter","linter","jsonParseLinter","keymap","indentWithTab","readOnly","EditorView","updateListener","update","docChanged","emit","value","toString","create","view","setValue","newValue","oldValue","diff","findDiff","dispatch","changes","start","end","insert","text","selection","anchor","length","getValue","setVariables","effects","reconfigure","getView","on","off","attachTo","_container","appendChild","dom","domClasses","body","add","destroy","removeChild","remove","placeholders","querySelectorAll","oldStr","newStr","minLength","Math","min","slice","endOld","endNew","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","HeaderItem","push","PlaygroundRoot","config","additionalModules","actions","actionsConfig","exporter","exporterConfig","viewerProperties","editorProperties","viewerAdditionalModules","editorAdditionalModules","propertiesPanel","propertiesPanelConfig","apiLinkTarget","onInit","display","displayActions","editorContainerRef","paletteContainerRef","propertiesPanelContainerRef","viewerContainerRef","inputDataContainerRef","outputDataContainerRef","formEditorRef","formViewerRef","inputDataRef","outputDataRef","showEmbed","setShowEmbed","useState","setSchema","setData","load","useCallback","importSchema","inputDataEditor","tabIndex","createDataEditorPlaceholder","outputDataEditor","formViewer","Form","properties","ariaLabel","formEditor","FormEditor","renderer","compact","palette","parent","formField","formFields","get","generateInitialDemoData","id","isFunction","initialDemoData","includes","undefined","currentData","newData","getSchema","updateOutputData","submitData","_getSubmitData","parse","error","initialSchema","initialData","getSchemaVariables","api","attachDataContainer","node","attachResultContainer","attachFormContainer","attachEditorContainer","attachPaletteContainer","attachPropertiesPanelContainer","strict","getDataEditor","getEditor","getForm","getResultView","saveSchema","getState","handleDownload","download","hideEmbedModal","showEmbedModal","classNames","title","element","createElement","innerHTML","Playground","rest","classList","handleDrop","fileDrop","files","file","contents","err","safe","fn","args","Error","render","attachPreviewContainer"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEO,SAASA,KAAKA,CAACC,KAAK,EAAE;AAC3BC,EAAAA,SAAS,CAAC,MAAM;IACd,SAASC,SAASA,CAACC,KAAK,EAAE;AACxB,MAAA,IAAIA,KAAK,CAACC,GAAG,KAAK,QAAQ,EAAE;QAC1BD,KAAK,CAACE,eAAe,EAAE,CAAA;QAEvBL,KAAK,CAACM,OAAO,EAAE,CAAA;AACjB,OAAA;AACF,KAAA;AAEAC,IAAAA,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEN,SAAS,CAAC,CAAA;AAE/C,IAAA,OAAO,MAAM;AACXK,MAAAA,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEP,SAAS,CAAC,CAAA;KACnD,CAAA;AACH,GAAC,CAAC,CAAA;AAEF,EAAA,OACEQ,IAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAC,eAAe;AAAAC,IAAAA,QAAA,GACxBC,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,KAAK,EAAC,wBAAwB;MAACG,OAAO,EAAEd,KAAK,CAACM,OAAAA;KAAc,CAAC,EAClEI,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,KAAK,EAAC,uBAAuB;AAAAC,MAAAA,QAAA,GAChCC,GAAA,CAAA,IAAA,EAAA;AAAIF,QAAAA,KAAK,EAAC,sBAAsB;QAAAC,QAAA,EAAEZ,KAAK,CAACe,IAAAA;OAAS,CAAC,EAClDF,GAAA,CAAA,KAAA,EAAA;AAAKF,QAAAA,KAAK,EAAC,oBAAoB;QAAAC,QAAA,EAAEZ,KAAK,CAACY,QAAAA;OAAc,CAAC,EACtDC,GAAA,CAAA,KAAA,EAAA;AAAKF,QAAAA,KAAK,EAAC,sBAAsB;AAAAC,QAAAA,QAAA,EAC/BC,GAAA,CAAA,QAAA,EAAA;AAAQG,UAAAA,IAAI,EAAC,QAAQ;AAACL,UAAAA,KAAK,EAAC,uCAAuC;UAACG,OAAO,EAAEd,KAAK,CAACM,OAAQ;AAAAM,UAAAA,QAAA,EAAC,OAAA;SAEpF,CAAA;AAAC,OACN,CAAC,CAAA;AAAA,KACH,CAAC,CAAA;AAAA,GACH,CAAC,CAAA;AAEV;;AC7BO,SAASK,UAAUA,CAACjB,KAAK,EAAE;AAChC,EAAA,MAAMkB,MAAM,GAAGC,cAAc,CAACnB,KAAK,CAACkB,MAAM,CAAC,CAAA;EAC3C,MAAME,IAAI,GAAGD,cAAc,CAACnB,KAAK,CAACoB,IAAI,IAAI,EAAE,CAAC,CAAA;AAE7C,EAAA,MAAMC,QAAQ,GAAGC,MAAM,EAAE,CAAA;AAEzB,EAAA,MAAMC,OAAO,GAAI,CAAA;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAA,EAA4BH,IAAK,CAAA;AACjC,4BAAA,EAA8BF,MAAO,CAAA;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAG,CAAA,CAACM,IAAI,EAAE,CAAA;AAERvB,EAAAA,SAAS,CAAC,MAAM;AACdoB,IAAAA,QAAQ,CAACI,OAAO,CAACC,MAAM,EAAE,CAAA;AAC3B,GAAC,CAAC,CAAA;EAEF,OACEhB,IAAA,CAACX,KAAK,EAAA;AAACgB,IAAAA,IAAI,EAAC,YAAY;IAACT,OAAO,EAAEN,KAAK,CAACM,OAAQ;AAAAM,IAAAA,QAAA,GAC9CF,IAAA,CAAA,GAAA,EAAA;MAAAE,QAAA,EAAA,CAAG,yDACsD,EAAAC,GAAA,CAAA,GAAA,EAAA;AAAGc,QAAAA,IAAI,EAAC,oCAAoC;AAAAf,QAAAA,QAAA,EAAC,SAAA;AAAO,OAAG,CAAC,EACjH,GAAA,CAAA;KAAG,CAAC,EAEJC,GAAA,CAAA,UAAA,EAAA;AAAUe,MAAAA,UAAU,EAAC,OAAO;AAACC,MAAAA,GAAG,EAAER,QAAS;AAAAT,MAAAA,QAAA,EACxCW,OAAAA;AAAO,KACA,CAAC,CAAA;AAAA,GACN,CAAC,CAAA;AAEZ,CAAA;;AAEA;;AAEA,SAASJ,cAAcA,CAACW,GAAG,EAAE;EAC3B,OAAOC,IAAI,CAACC,SAAS,CAACD,IAAI,CAACC,SAAS,CAACF,GAAG,CAAC,CAAC,CAACG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AACxF;;ACzDA;AACA;AACA;AACO,MAAMC,cAAc,GAAGC,KAAK,CAACC,MAAM,EAAE;;ACArC,SAASC,uBAAuBA,GAAG;EACxC,OAAO,CACLC,cAAc,CAAC;IACbC,QAAQ,EAAE,CAACC,WAAW,CAAA;AACxB,GAAC,CAAC,CACH,CAAA;AACH,CAAA;AAEA,SAASA,WAAWA,CAACC,OAAO,EAAE;AAC5B,EAAA,MAAMC,SAAS,GAAGD,OAAO,CAACE,KAAK,CAACC,KAAK,CAACV,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AAExD,EAAA,MAAMW,OAAO,GAAGH,SAAS,CAACI,GAAG,CAAEC,CAAC,KAAM;AACpCC,IAAAA,KAAK,EAAED,CAAC;AACR/B,IAAAA,IAAI,EAAE,UAAA;AACR,GAAC,CAAC,CAAC,CAAA;AAEH,EAAA,IAAIiC,UAAU,GAAGC,UAAU,CAACT,OAAO,CAACE,KAAK,CAAC,CAACQ,OAAO,CAACV,OAAO,CAACW,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;;AAEnE;AACA,EAAA,IAAIH,UAAU,CAACjC,IAAI,CAACD,IAAI,KAAK,cAAc,EAAE;IAC3C0B,OAAO,CAACY,QAAQ,GAAG,IAAI,CAAA;AACzB,GAAA;AAEA,EAAA,IAAIC,IAAI,GAAGb,OAAO,CAACc,WAAW,CAAC,KAAK,CAAC,CAAA;AAErC,EAAA,IAAID,IAAI,CAACE,IAAI,IAAIF,IAAI,CAACG,EAAE,IAAI,CAAChB,OAAO,CAACY,QAAQ,EAAE;AAC7C,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA,OAAO;IACLG,IAAI,EAAEF,IAAI,CAACE,IAAI;AACfX,IAAAA,OAAAA;GACD,CAAA;AACH;;AC3BA,MAAMa,WAAW,GAAG,gBAAgB,CAAA;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAACd,OAAO,GAAG,EAAE,EAAE;EACvC,MAAM;IAAEe,iBAAiB,GAAG,EAAE;AAAEC,IAAAA,WAAW,EAAEC,iBAAiB;AAAEC,IAAAA,QAAQ,GAAG,KAAA;AAAM,GAAC,GAAGlB,OAAO,CAAA;AAC5F,EAAA,MAAMmB,OAAO,GAAGC,IAAI,EAAE,CAAA;AAEtB,EAAA,MAAMC,mBAAmB,GAAG,IAAIC,WAAW,EAAE,CAACC,EAAE,CAACC,IAAI,EAAE,CAAC,CAAA;AACxD,EAAA,MAAMC,kBAAkB,GAAG,IAAIH,WAAW,EAAE,CAACC,EAAE,CAACG,WAAW,CAACC,OAAO,CAACJ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1E,EAAA,MAAMK,6BAA6B,GAAG,IAAIN,WAAW,EAAE,CAAA;AACvD,EAAA,MAAMO,0BAA0B,GAAGC,gCAAgC,EAAE,CAAA;EAErE,IAAIC,SAAS,GAAG,IAAI,CAAA;AAEpB,EAAA,SAASC,WAAWA,CAACC,GAAG,EAAEpC,SAAS,GAAG,EAAE,EAAE;AACxC,IAAA,MAAMqC,UAAU,GAAG,CACjBC,UAAU,EACVd,mBAAmB,EACnBI,kBAAkB,EAClBW,UAAU,EAAE,EACZC,MAAM,CAACC,eAAe,EAAE,CAAC,EACzBT,0BAA0B,EAC1BD,6BAA6B,CAACL,EAAE,CAAClC,cAAc,CAACkC,EAAE,CAAC1B,SAAS,CAAC,CAAC,EAC9DL,uBAAuB,EAAE,EACzB+C,MAAM,CAAChB,EAAE,CAAC,CAACiB,aAAa,CAAC,CAAC,EAC1BvB,iBAAiB,GAAGD,WAAW,CAACC,iBAAiB,CAAC,GAAG,EAAE,EACvDS,WAAW,CAACe,QAAQ,CAAClB,EAAE,CAACL,QAAQ,CAAC,EACjCwB,UAAU,CAACC,cAAc,CAACpB,EAAE,CAAEqB,MAAM,IAAK;MACvC,IAAIA,MAAM,CAACC,UAAU,EAAE;AACrB1B,QAAAA,OAAO,CAAC2B,IAAI,CAAC,SAAS,EAAE;UAAEC,KAAK,EAAEH,MAAM,CAAC9C,KAAK,CAACmC,GAAG,CAACe,QAAQ,EAAC;AAAE,SAAC,CAAC,CAAA;AACjE,OAAA;KACD,CAAC,EACFN,UAAU,CAAC3B,iBAAiB,CAACQ,EAAE,CAACR,iBAAiB,CAAC,CACnD,CAAA;IAED,OAAOW,WAAW,CAACuB,MAAM,CAAC;MAAEhB,GAAG;AAAEC,MAAAA,UAAAA;AAAW,KAAC,CAAC,CAAA;AAChD,GAAA;AAEA,EAAA,MAAMgB,IAAI,GAAG,IAAIR,UAAU,CAAC;IAC1B5C,KAAK,EAAEkC,WAAW,CAAC,EAAE,CAAA;AACvB,GAAC,CAAC,CAAA;AAEF,EAAA,IAAI,CAACmB,QAAQ,GAAG,UAAUC,QAAQ,EAAE;IAClC,MAAMC,QAAQ,GAAGH,IAAI,CAACpD,KAAK,CAACmC,GAAG,CAACe,QAAQ,EAAE,CAAA;AAE1C,IAAA,MAAMM,IAAI,GAAGC,QAAQ,CAACF,QAAQ,EAAED,QAAQ,CAAC,CAAA;AAEzC,IAAA,IAAIE,IAAI,EAAE;MACRJ,IAAI,CAACM,QAAQ,CAAC;AACZC,QAAAA,OAAO,EAAE;UAAE9C,IAAI,EAAE2C,IAAI,CAACI,KAAK;UAAE9C,EAAE,EAAE0C,IAAI,CAACK,GAAG;UAAEC,MAAM,EAAEN,IAAI,CAACO,IAAAA;SAAM;AAC9DC,QAAAA,SAAS,EAAE;UAAEC,MAAM,EAAET,IAAI,CAACI,KAAK,GAAGJ,IAAI,CAACO,IAAI,CAACG,MAAAA;AAAO,SAAA;AACrD,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAED,IAAI,CAACC,QAAQ,GAAG,YAAY;IAC1B,OAAOf,IAAI,CAACpD,KAAK,CAACmC,GAAG,CAACe,QAAQ,EAAE,CAAA;GACjC,CAAA;AAED,EAAA,IAAI,CAACkB,YAAY,GAAG,UAAUrE,SAAS,EAAE;IACvCqD,IAAI,CAACM,QAAQ,CAAC;MAAEW,OAAO,EAAEvC,6BAA6B,CAACwC,WAAW,CAAC/E,cAAc,CAACkC,EAAE,CAAC1B,SAAS,CAAC,CAAA;AAAE,KAAC,CAAC,CAAA;GACpG,CAAA;EAED,IAAI,CAACwE,OAAO,GAAG,YAAY;AACzB,IAAA,OAAOnB,IAAI,CAAA;GACZ,CAAA;AAED,EAAA,IAAI,CAACoB,EAAE,GAAGnD,OAAO,CAACmD,EAAE,CAAA;AACpB,EAAA,IAAI,CAACC,GAAG,GAAGpD,OAAO,CAACoD,GAAG,CAAA;AACtB,EAAA,IAAI,CAACzB,IAAI,GAAG3B,OAAO,CAAC2B,IAAI,CAAA;AAExB,EAAA,IAAI,CAAC0B,QAAQ,GAAG,UAAUC,UAAU,EAAE;AACpC1C,IAAAA,SAAS,GAAG0C,UAAU,CAAA;AACtB1C,IAAAA,SAAS,CAAC2C,WAAW,CAACxB,IAAI,CAACyB,GAAG,CAAC,CAAA;IAC/BC,OAAU,CAAC7C,SAAS,EAAErE,QAAQ,CAACmH,IAAI,CAAC,CAACC,GAAG,CAAC,iBAAiB,CAAC,CAAA;GAC5D,CAAA;EAED,IAAI,CAACC,OAAO,GAAG,YAAY;AACzB,IAAA,IAAIhD,SAAS,IAAImB,IAAI,CAACyB,GAAG,EAAE;AACzB5C,MAAAA,SAAS,CAACiD,WAAW,CAAC9B,IAAI,CAACyB,GAAG,CAAC,CAAA;MAC/BC,OAAU,CAAC7C,SAAS,EAAErE,QAAQ,CAACmH,IAAI,CAAC,CAACI,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAChE,KAAA;IACA/B,IAAI,CAAC6B,OAAO,EAAE,CAAA;GACf,CAAA;EAED,SAASjD,gCAAgCA,GAAG;IAC1C,OAAOO,MAAM,CAAEa,IAAI,IAAK;MACtB,MAAMgC,YAAY,GAAGhC,IAAI,CAACyB,GAAG,CAACQ,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;AACjE,MAAA,IAAID,YAAY,CAAClB,MAAM,GAAG,CAAC,EAAE;QAC3BY,OAAU,CAAC7C,SAAS,EAAErE,QAAQ,CAACmH,IAAI,CAAC,CAACC,GAAG,CAACjE,WAAW,CAAC,CAAA;AACvD,OAAC,MAAM;QACL+D,OAAU,CAAC7C,SAAS,EAAErE,QAAQ,CAACmH,IAAI,CAAC,CAACI,MAAM,CAACpE,WAAW,CAAC,CAAA;AAC1D,OAAA;AACA,MAAA,OAAO,EAAE,CAAA;AACX,KAAC,CAAC,CAAA;AACJ,GAAA;AACF,CAAA;AAEA,SAAS0C,QAAQA,CAAC6B,MAAM,EAAEC,MAAM,EAAE;EAChC,IAAID,MAAM,KAAKC,MAAM,EAAE;AACrB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEAD,MAAM,GAAGA,MAAM,IAAI,EAAE,CAAA;EACrBC,MAAM,GAAGA,MAAM,IAAI,EAAE,CAAA;AAErB,EAAA,IAAIC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACJ,MAAM,CAACpB,MAAM,EAAEqB,MAAM,CAACrB,MAAM,CAAC,CAAA;EACtD,IAAIN,KAAK,GAAG,CAAC,CAAA;AAEb,EAAA,OAAOA,KAAK,GAAG4B,SAAS,IAAIF,MAAM,CAAC1B,KAAK,CAAC,KAAK2B,MAAM,CAAC3B,KAAK,CAAC,EAAE;AAC3DA,IAAAA,KAAK,EAAE,CAAA;AACT,GAAA;EAEA,IAAIA,KAAK,KAAK4B,SAAS,EAAE;IACvB,OAAO;AACL5B,MAAAA,KAAK,EAAEA,KAAK;AACZG,MAAAA,IAAI,EAAEwB,MAAM,CAACI,KAAK,CAAC/B,KAAK,CAAC;MACzBC,GAAG,EAAEyB,MAAM,CAACpB,MAAAA;KACb,CAAA;AACH,GAAA;AAEA,EAAA,IAAI0B,MAAM,GAAGN,MAAM,CAACpB,MAAM,CAAA;AAC1B,EAAA,IAAI2B,MAAM,GAAGN,MAAM,CAACrB,MAAM,CAAA;EAE1B,OAAO0B,MAAM,GAAGhC,KAAK,IAAIiC,MAAM,GAAGjC,KAAK,IAAI0B,MAAM,CAACM,MAAM,GAAG,CAAC,CAAC,KAAKL,MAAM,CAACM,MAAM,GAAG,CAAC,CAAC,EAAE;AACpFD,IAAAA,MAAM,EAAE,CAAA;AACRC,IAAAA,MAAM,EAAE,CAAA;AACV,GAAA;EAEA,OAAO;AACLjC,IAAAA,KAAK,EAAEA,KAAK;IACZG,IAAI,EAAEwB,MAAM,CAACI,KAAK,CAAC/B,KAAK,EAAEiC,MAAM,CAAC;AACjChC,IAAAA,GAAG,EAAE+B,MAAAA;GACN,CAAA;AACH;;ACtJO,SAASE,OAAOA,CAACzI,KAAK,EAAE;AAC7B,EAAA,MAAM0I,QAAQ,GAAGC,KAAK,CAACC,OAAO,CAAC5I,KAAK,CAACY,QAAQ,CAAC,GAAGZ,KAAK,CAACY,QAAQ,GAAG,CAACZ,KAAK,CAACY,QAAQ,CAAC,CAAA;EAElF,MAAM;IAAEiI,WAAW;AAAEjI,IAAAA,QAAAA;GAAU,GAAG8H,QAAQ,CAACI,MAAM,CAC/C,CAACC,CAAC,EAAEC,KAAK,KAAK;AACZ,IAAA,MAAMC,MAAM,GAAGD,KAAK,CAAChI,IAAI,KAAKyH,OAAO,CAACS,UAAU,GAAGH,CAAC,CAACF,WAAW,GAAGE,CAAC,CAACnI,QAAQ,CAAA;AAE7EqI,IAAAA,MAAM,CAACE,IAAI,CAACH,KAAK,CAAC,CAAA;AAElB,IAAA,OAAOD,CAAC,CAAA;AACV,GAAC,EACD;AAAEF,IAAAA,WAAW,EAAE,EAAE;AAAEjI,IAAAA,QAAQ,EAAE,EAAA;AAAG,GAClC,CAAC,CAAA;AAED,EAAA,OACEF,IAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAC,iBAAiB;AAAAC,IAAAA,QAAA,GAC1BF,IAAA,CAAA,IAAA,EAAA;AAAIC,MAAAA,KAAK,EAAC,QAAQ;MAAAC,QAAA,EAAA,CACfZ,KAAK,CAACe,IAAI,EAAC,GAAC,EAAC8H,WAAW,CAAChC,MAAM,GAAGhG,GAAA,CAAA,MAAA,EAAA;AAAMF,QAAAA,KAAK,EAAC,cAAc;AAAAC,QAAAA,QAAA,EAAEiI,WAAAA;OAAkB,CAAC,GAAG,IAAI,CAAA;KACvF,CAAC,EACLhI,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,KAAK,EAAC,MAAM;AAAAC,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAAC,CAAA;AAAA,GAC/B,CAAC,CAAA;AAEV,CAAA;AAEA6H,OAAO,CAACS,UAAU,GAAG,UAAUlJ,KAAK,EAAE;EACpC,OAAOA,KAAK,CAACY,QAAQ,CAAA;AACvB,CAAC;;ACTM,SAASwI,cAAcA,CAACC,MAAM,EAAE;EACrC,MAAM;IACJC,iBAAiB;AAAE;AACnBC,IAAAA,OAAO,EAAEC,aAAa;IACtB7D,IAAI;AACJ8D,IAAAA,QAAQ,EAAEC,cAAc;IACxBC,gBAAgB;IAChBC,gBAAgB;IAChBC,uBAAuB;IACvBC,uBAAuB;AACvBC,IAAAA,eAAe,EAAEC,qBAAqB;IACtCC,aAAa;AACbC,IAAAA,MAAAA;AACF,GAAC,GAAGb,MAAM,CAAA;EAEV,MAAM;IAAEc,OAAO,EAAEC,cAAc,GAAG,IAAA;AAAK,GAAC,GAAGZ,aAAa,IAAI,EAAE,CAAA;AAE9D,EAAA,MAAMa,kBAAkB,GAAG/I,MAAM,EAAE,CAAA;AACnC,EAAA,MAAMgJ,mBAAmB,GAAGhJ,MAAM,EAAE,CAAA;AACpC,EAAA,MAAMiJ,2BAA2B,GAAGjJ,MAAM,EAAE,CAAA;AAC5C,EAAA,MAAMkJ,kBAAkB,GAAGlJ,MAAM,EAAE,CAAA;AACnC,EAAA,MAAMmJ,qBAAqB,GAAGnJ,MAAM,EAAE,CAAA;AACtC,EAAA,MAAMoJ,sBAAsB,GAAGpJ,MAAM,EAAE,CAAA;AAEvC,EAAA,MAAMqJ,aAAa,GAAGrJ,MAAM,EAAE,CAAA;AAC9B,EAAA,MAAMsJ,aAAa,GAAGtJ,MAAM,EAAE,CAAA;AAC9B,EAAA,MAAMuJ,YAAY,GAAGvJ,MAAM,EAAE,CAAA;AAC7B,EAAA,MAAMwJ,aAAa,GAAGxJ,MAAM,EAAE,CAAA;EAE9B,MAAM,CAACyJ,SAAS,EAAEC,YAAY,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC,CAAA;EACjD,MAAM,CAAC/J,MAAM,EAAEgK,SAAS,CAAC,GAAGD,QAAQ,EAAE,CAAA;EACtC,MAAM,CAAC7J,IAAI,EAAE+J,OAAO,CAAC,GAAGF,QAAQ,EAAE,CAAA;EAElC,MAAMG,IAAI,GAAGC,WAAW,CAAC,CAACnK,MAAM,EAAEE,IAAI,KAAK;IACzCuJ,aAAa,CAAClJ,OAAO,CAAC6J,YAAY,CAACpK,MAAM,EAAEE,IAAI,CAAC,CAAA;IAChDyJ,YAAY,CAACpJ,OAAO,CAACuE,QAAQ,CAACH,QAAQ,CAACzE,IAAI,CAAC,CAAC,CAAA;IAC7C8J,SAAS,CAAChK,MAAM,CAAC,CAAA;IACjBiK,OAAO,CAAC/J,IAAI,CAAC,CAAA;GACd,EAAE,EAAE,CAAC,CAAA;;AAEN;AACAnB,EAAAA,SAAS,CAAC,MAAM;IACd,MAAMsL,eAAe,GAAIV,YAAY,CAACpJ,OAAO,GAAG,IAAIkC,UAAU,CAAC;AAC7DC,MAAAA,iBAAiB,EAAE;AAAE,QAAA,YAAY,EAAE,YAAY;AAAE4H,QAAAA,QAAQ,EAAE,CAAA;OAAG;MAC9D3H,WAAW,EAAE4H,2BAA2B,EAAC;AAC3C,KAAC,CAAE,CAAA;IAEH,MAAMC,gBAAgB,GAAIZ,aAAa,CAACrJ,OAAO,GAAG,IAAIkC,UAAU,CAAC;AAC/DI,MAAAA,QAAQ,EAAE,IAAI;AACdH,MAAAA,iBAAiB,EAAE;AAAE,QAAA,YAAY,EAAE,aAAa;AAAE4H,QAAAA,QAAQ,EAAE,CAAA;AAAE,OAAA;AAChE,KAAC,CAAE,CAAA;IAEH,MAAMG,UAAU,GAAIf,aAAa,CAACnJ,OAAO,GAAG,IAAImK,IAAI,CAAC;MACnDhH,SAAS,EAAE4F,kBAAkB,CAAC/I,OAAO;AACrC6H,MAAAA,iBAAiB,EAAE,CAAC,IAAIA,iBAAiB,IAAI,EAAE,CAAC,EAAE,IAAIO,uBAAuB,IAAI,EAAE,CAAC,CAAC;AACrFgC,MAAAA,UAAU,EAAE;AACV,QAAA,IAAIlC,gBAAgB,IAAI,EAAE,CAAC;AAC3BmC,QAAAA,SAAS,EAAE,cAAA;AACb,OAAA;AACF,KAAC,CAAE,CAAA;IAEH,MAAMC,UAAU,GAAIpB,aAAa,CAAClJ,OAAO,GAAG,IAAIuK,UAAU,CAAC;MACzDpH,SAAS,EAAEyF,kBAAkB,CAAC5I,OAAO;AACrCwK,MAAAA,QAAQ,EAAE;AACRC,QAAAA,OAAO,EAAE,IAAA;OACV;AACDC,MAAAA,OAAO,EAAE;QACPC,MAAM,EAAE9B,mBAAmB,CAAC7I,OAAAA;OAC7B;AACDsI,MAAAA,eAAe,EAAE;QACfqC,MAAM,EAAE7B,2BAA2B,CAAC9I,OAAO;QAC3C,IAAIuI,qBAAqB,IAAI,EAAE,CAAA;OAChC;AACDP,MAAAA,QAAQ,EAAEC,cAAc;AACxBmC,MAAAA,UAAU,EAAE;AACV,QAAA,IAAIjC,gBAAgB,IAAI,EAAE,CAAC;AAC3BkC,QAAAA,SAAS,EAAE,iBAAA;OACZ;AACDxC,MAAAA,iBAAiB,EAAE,CAAC,IAAIA,iBAAiB,IAAI,EAAE,CAAC,EAAE,IAAIQ,uBAAuB,IAAI,EAAE,CAAC,CAAA;AACtF,KAAC,CAAE,CAAA;AAEHiC,IAAAA,UAAU,CAAC5E,EAAE,CAAC,eAAe,EAAE,CAAC;AAAEkF,MAAAA,SAAAA;AAAU,KAAC,KAAK;AAChD,MAAA,MAAMC,UAAU,GAAGP,UAAU,CAACQ,GAAG,CAAC,YAAY,CAAC,CAAA;MAC/C,MAAM;AAAElD,QAAAA,MAAAA;OAAQ,GAAGiD,UAAU,CAACC,GAAG,CAACF,SAAS,CAACrL,IAAI,CAAC,CAAA;MACjD,MAAM;AAAEwL,QAAAA,uBAAAA;AAAwB,OAAC,GAAGnD,MAAM,CAAA;MAC1C,MAAM;AAAEoD,QAAAA,EAAAA;AAAG,OAAC,GAAGJ,SAAS,CAAA;AAExB,MAAA,IAAI,CAACK,UAAU,CAACF,uBAAuB,CAAC,EAAE;AACxC,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,MAAMG,eAAe,GAAGH,uBAAuB,CAACH,SAAS,CAAC,CAAA;MAE1D,IAAI,CAACM,eAAe,EAAEF,EAAE,CAAC,CAACG,QAAQ,CAACC,SAAS,CAAC,EAAE;AAC7C,QAAA,OAAA;AACF,OAAA;MAEA1B,OAAO,CAAE2B,WAAW,IAAK;AACvB,QAAA,MAAMC,OAAO,GAAG;AACd,UAAA,GAAGD,WAAW;AACd,UAAA,CAACL,EAAE,GAAGE,eAAAA;SACP,CAAA;QAED9B,YAAY,CAACpJ,OAAO,CAACuE,QAAQ,CAACH,QAAQ,CAACkH,OAAO,CAAC,CAAC,CAAA;AAEhD,QAAA,OAAOA,OAAO,CAAA;AAChB,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AAEFhB,IAAAA,UAAU,CAAC5E,EAAE,CAAC,SAAS,EAAE,MAAM;AAC7B+D,MAAAA,SAAS,CAACa,UAAU,CAACiB,SAAS,EAAE,CAAC,CAAA;AACnC,KAAC,CAAC,CAAA;AAEFjB,IAAAA,UAAU,CAAC5E,EAAE,CAAC,qBAAqB,EAAE,MAAM;AACzC;MACAxB,IAAI,CAAC,yBAAyB,CAAC,CAAA;AACjC,KAAC,CAAC,CAAA;IAEF,MAAMsH,gBAAgB,GAAGA,MAAM;AAC7B,MAAA,MAAMC,UAAU,GAAGvB,UAAU,CAACwB,cAAc,EAAE,CAAA;AAC9CzB,MAAAA,gBAAgB,CAAC1F,QAAQ,CAACH,QAAQ,CAACqH,UAAU,CAAC,CAAC,CAAA;KAChD,CAAA;;AAED;AACAvB,IAAAA,UAAU,CAACxE,EAAE,CAAC,SAAS,EAAE8F,gBAAgB,CAAC,CAAA;AAC1CtB,IAAAA,UAAU,CAACxE,EAAE,CAAC,mCAAmC,EAAE8F,gBAAgB,CAAC,CAAA;AAEpE1B,IAAAA,eAAe,CAACpE,EAAE,CAAC,SAAS,EAAGhH,KAAK,IAAK;MACvC,IAAI;QACFgL,OAAO,CAACpJ,IAAI,CAACqL,KAAK,CAACjN,KAAK,CAACyF,KAAK,CAAC,CAAC,CAAA;OACjC,CAAC,OAAOyH,KAAK,EAAE;AACd;AACA1H,QAAAA,IAAI,CAAC,+BAA+B,EAAE0H,KAAK,CAAC,CAAA;AAC9C,OAAA;AACF,KAAC,CAAC,CAAA;AAEF9B,IAAAA,eAAe,CAAClE,QAAQ,CAACoD,qBAAqB,CAAChJ,OAAO,CAAC,CAAA;AACvDiK,IAAAA,gBAAgB,CAACrE,QAAQ,CAACqD,sBAAsB,CAACjJ,OAAO,CAAC,CAAA;AAEzD,IAAA,OAAO,MAAM;MACX8J,eAAe,CAAC3D,OAAO,EAAE,CAAA;MACzB8D,gBAAgB,CAAC9D,OAAO,EAAE,CAAA;MAC1B+D,UAAU,CAAC/D,OAAO,EAAE,CAAA;MACpBmE,UAAU,CAACnE,OAAO,EAAE,CAAA;KACrB,CAAA;AACH,GAAC,EAAE,CACD0B,iBAAiB,EACjBQ,uBAAuB,EACvBF,gBAAgB,EAChBjE,IAAI,EACJ+D,cAAc,EACdM,qBAAqB,EACrBH,uBAAuB,EACvBF,gBAAgB,CACjB,CAAC,CAAA;;AAEF;AACA1J,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI,CAACoJ,MAAM,CAACiE,aAAa,EAAE;AACzB,MAAA,OAAA;AACF,KAAA;IAEAlC,IAAI,CAAC/B,MAAM,CAACiE,aAAa,EAAEjE,MAAM,CAACkE,WAAW,IAAI,EAAE,CAAC,CAAA;AACtD,GAAC,EAAE,CAAClE,MAAM,CAACiE,aAAa,EAAEjE,MAAM,CAACkE,WAAW,EAAEnC,IAAI,CAAC,CAAC,CAAA;AAEpDnL,EAAAA,SAAS,CAAC,MAAM;IACdiB,MAAM,IAAI0J,aAAa,CAACnJ,OAAO,CAAC6J,YAAY,CAACpK,MAAM,EAAEE,IAAI,CAAC,CAAA;AAC5D,GAAC,EAAE,CAACF,MAAM,EAAEE,IAAI,CAAC,CAAC,CAAA;AAElBnB,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAIiB,MAAM,IAAIuJ,qBAAqB,CAAChJ,OAAO,EAAE;AAC3C,MAAA,MAAMiB,SAAS,GAAG8K,kBAAkB,CAACtM,MAAM,CAAC,CAAA;AAC5C2J,MAAAA,YAAY,CAACpJ,OAAO,CAACsF,YAAY,CAACrE,SAAS,CAAC,CAAA;AAC9C,KAAA;AACF,GAAC,EAAE,CAACxB,MAAM,CAAC,CAAC,CAAA;;AAEZ;AACAjB,EAAAA,SAAS,CAAC,MAAM;IACd,IAAI,CAACgK,aAAa,EAAE;AAClB,MAAA,OAAA;AACF,KAAA;IAEAA,aAAa,CAACwD,GAAG,GAAG;MAClBC,mBAAmB,EAAGC,IAAI,IAAK9C,YAAY,CAACpJ,OAAO,CAAC4F,QAAQ,CAACsG,IAAI,CAAC;MAClEC,qBAAqB,EAAGD,IAAI,IAAK7C,aAAa,CAACrJ,OAAO,CAAC4F,QAAQ,CAACsG,IAAI,CAAC;MACrEE,mBAAmB,EAAGF,IAAI,IAAK/C,aAAa,CAACnJ,OAAO,CAAC4F,QAAQ,CAACsG,IAAI,CAAC;MACnEG,qBAAqB,EAAGH,IAAI,IAAKhD,aAAa,CAAClJ,OAAO,CAAC4F,QAAQ,CAACsG,IAAI,CAAC;AACrEI,MAAAA,sBAAsB,EAAGJ,IAAI,IAAKhD,aAAa,CAAClJ,OAAO,CAAC8K,GAAG,CAAC,SAAS,CAAC,CAAClF,QAAQ,CAACsG,IAAI,CAAC;AACrFK,MAAAA,8BAA8B,EAAGL,IAAI,IAAKhD,aAAa,CAAClJ,OAAO,CAAC8K,GAAG,CAAC,iBAAiB,CAAC,CAAClF,QAAQ,CAACsG,IAAI,CAAC;AACrGpB,MAAAA,GAAG,EAAEA,CAACxL,IAAI,EAAEkN,MAAM,KAAKtD,aAAa,CAAClJ,OAAO,CAAC8K,GAAG,CAACxL,IAAI,EAAEkN,MAAM,CAAC;AAC9DC,MAAAA,aAAa,EAAEA,MAAMrD,YAAY,CAACpJ,OAAO;AACzC0M,MAAAA,SAAS,EAAEA,MAAMxD,aAAa,CAAClJ,OAAO;AACtC2M,MAAAA,OAAO,EAAEA,MAAMxD,aAAa,CAACnJ,OAAO;AACpC4M,MAAAA,aAAa,EAAEA,MAAMvD,aAAa,CAACrJ,OAAO;MAC1CuL,SAAS,EAAEA,MAAMrC,aAAa,CAAClJ,OAAO,CAACuL,SAAS,EAAE;MAClDsB,UAAU,EAAEA,MAAM3D,aAAa,CAAClJ,OAAO,CAAC6M,UAAU,EAAE;AACpDpD,MAAAA,SAAS,EAAEA,SAAS;AACpBC,MAAAA,OAAO,EAAEA,OAAAA;KACV,CAAA;AAEDjB,IAAAA,MAAM,EAAE,CAAA;AACV,GAAC,EAAE,CAACD,aAAa,EAAEC,MAAM,CAAC,CAAC,CAAA;;AAE3B;AACAjK,EAAAA,SAAS,CAAC,MAAM;IACd,IAAI,CAACgK,aAAa,EAAE;AAClB,MAAA,OAAA;AACF,KAAA;AAEAA,IAAAA,aAAa,CAACwD,GAAG,CAACc,QAAQ,GAAG,OAAO;MAAErN,MAAM;AAAEE,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;AACrD6I,IAAAA,aAAa,CAACwD,GAAG,CAACrC,IAAI,GAAGA,IAAI,CAAA;GAC9B,EAAE,CAACnB,aAAa,EAAE/I,MAAM,EAAEE,IAAI,EAAEgK,IAAI,CAAC,CAAC,CAAA;AAEvC,EAAA,MAAMoD,cAAc,GAAGnD,WAAW,CAAC,MAAM;AACvCoD,IAAAA,QAAQ,CAAC1M,IAAI,CAACC,SAAS,CAACd,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACxE,GAAC,EAAE,CAACA,MAAM,CAAC,CAAC,CAAA;AAEZ,EAAA,MAAMwN,cAAc,GAAGrD,WAAW,CAAC,MAAM;IACvCL,YAAY,CAAC,KAAK,CAAC,CAAA;GACpB,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,MAAM2D,cAAc,GAAGtD,WAAW,CAAC,MAAM;IACvCL,YAAY,CAAC,IAAI,CAAC,CAAA;GACnB,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,OACEtK,IAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,KAAK,EAAEiO,UAAU,CAAC,eAAe,EAAE,cAAc,CAAE;AAAAhO,IAAAA,QAAA,GACtDC,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,KAAK,EAAC,gBAAgB;AAAAC,MAAAA,QAAA,EACxBmK,SAAS,GAAGlK,GAAA,CAACI,UAAU,EAAA;AAACC,QAAAA,MAAM,EAAEA,MAAO;AAACE,QAAAA,IAAI,EAAEA,IAAK;AAACd,QAAAA,OAAO,EAAEoO,cAAAA;AAAe,OAAE,CAAC,GAAG,IAAA;KAChF,CAAC,EACN7N,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,KAAK,EAAC,2BAA2B;AAACkB,MAAAA,GAAG,EAAEyI,mBAAAA;KAAsB,CAAC,EACnE5J,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,KAAK,EAAC,cAAc;MAAAC,QAAA,EAAA,CACvBF,IAAA,CAAC+H,OAAO,EAAA;AAAC1H,QAAAA,IAAI,EAAC,iBAAiB;AAAAH,QAAAA,QAAA,GAC5BwJ,cAAc,IACbvJ,GAAA,CAAC4H,OAAO,CAACS,UAAU,EAAA;AAAAtI,UAAAA,QAAA,EACjBC,GAAA,CAAA,QAAA,EAAA;AAAQG,YAAAA,IAAI,EAAC,QAAQ;AAACL,YAAAA,KAAK,EAAC,gBAAgB;AAACkO,YAAAA,KAAK,EAAC,0BAA0B;AAAC/N,YAAAA,OAAO,EAAE0N,cAAe;AAAA5N,YAAAA,QAAA,EAAC,UAAA;WAE/F,CAAA;SACU,CACrB,EAEAwJ,cAAc,IACbvJ,GAAA,CAAC4H,OAAO,CAACS,UAAU,EAAA;AAAAtI,UAAAA,QAAA,EACjBC,GAAA,CAAA,QAAA,EAAA;AAAQG,YAAAA,IAAI,EAAC,QAAQ;AAACL,YAAAA,KAAK,EAAC,gBAAgB;AAACG,YAAAA,OAAO,EAAE6N,cAAe;AAAA/N,YAAAA,QAAA,EAAC,OAAA;WAE9D,CAAA;SACU,CACrB,EAEDC,GAAA,CAAA,KAAA,EAAA;AAAKgB,UAAAA,GAAG,EAAEwI,kBAAmB;AAAC1J,UAAAA,KAAK,EAAC,wBAAA;AAAwB,SAAM,CAAC,CAAA;AAAA,OAC5D,CAAC,EACVE,GAAA,CAAC4H,OAAO,EAAA;AAAC1H,QAAAA,IAAI,EAAC,cAAc;AAAAH,QAAAA,QAAA,EAC1BC,GAAA,CAAA,KAAA,EAAA;AAAKgB,UAAAA,GAAG,EAAE2I,kBAAmB;AAAC7J,UAAAA,KAAK,EAAC,wBAAA;SAA8B,CAAA;AAAC,OAC5D,CAAC,EACVE,GAAA,CAAC4H,OAAO,EAAA;AAAC1H,QAAAA,IAAI,EAAC,YAAY;AAAAH,QAAAA,QAAA,EACxBC,GAAA,CAAA,KAAA,EAAA;AAAKgB,UAAAA,GAAG,EAAE4I,qBAAsB;AAAC9J,UAAAA,KAAK,EAAC,wBAAA;SAA8B,CAAA;AAAC,OAC/D,CAAC,EACVE,GAAA,CAAC4H,OAAO,EAAA;AAAC1H,QAAAA,IAAI,EAAC,aAAa;AAAAH,QAAAA,QAAA,EACzBC,GAAA,CAAA,KAAA,EAAA;AAAKgB,UAAAA,GAAG,EAAE6I,sBAAuB;AAAC/J,UAAAA,KAAK,EAAC,wBAAA;SAA8B,CAAA;AAAC,OAChE,CAAC,CAAA;KACP,CAAC,EACNE,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,KAAK,EAAC,8BAA8B;AAACkB,MAAAA,GAAG,EAAE0I,2BAAAA;AAA4B,KAAE,CAAC,CAAA;AAAA,GAC3E,CAAC,CAAA;AAEV,CAAA;;AAEA;;AAEA,SAAS1E,QAAQA,CAAC/D,GAAG,EAAE;EACrB,OAAOC,IAAI,CAACC,SAAS,CAACF,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,CAAA;AAEA,SAAS2J,2BAA2BA,GAAG;AACrC,EAAA,MAAMqD,OAAO,GAAGvO,QAAQ,CAACwO,aAAa,CAAC,GAAG,CAAC,CAAA;AAE3CD,EAAAA,OAAO,CAACE,SAAS,GACf,mIAAmI,GACnI,uCAAuC,GACvC,6BAA6B,CAAA;AAE/B,EAAA,OAAOF,OAAO,CAAA;AAChB;;AC3QA,SAASG,UAAUA,CAACpM,OAAO,EAAE;EAC3B,MAAM;AAAE+B,IAAAA,SAAS,EAAEwH,MAAM;AAAElL,IAAAA,MAAM,EAAEoM,aAAa;AAAElM,IAAAA,IAAI,EAAEmM,WAAW;IAAE,GAAG2B,IAAAA;AAAK,GAAC,GAAGrM,OAAO,CAAA;AAExF,EAAA,MAAMmB,OAAO,GAAGC,IAAI,EAAE,CAAA;AAEtB,EAAA,MAAMW,SAAS,GAAGrE,QAAQ,CAACwO,aAAa,CAAC,KAAK,CAAC,CAAA;AAE/CnK,EAAAA,SAAS,CAACuK,SAAS,CAACxH,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAEzC,EAAA,IAAIyE,MAAM,EAAE;AACVA,IAAAA,MAAM,CAAC7E,WAAW,CAAC3C,SAAS,CAAC,CAAA;AAC/B,GAAA;EAEA,MAAMwK,UAAU,GAAGC,QAAQ,CAAC,kBAAkB,EAAE,UAAUC,KAAK,EAAE;AAC/D,IAAA,MAAMC,IAAI,GAAGD,KAAK,CAAC,CAAC,CAAC,CAAA;AAErB,IAAA,IAAIC,IAAI,EAAE;MACR,IAAI;AACF,QAAA,IAAI,CAAC9B,GAAG,CAACvC,SAAS,CAACnJ,IAAI,CAACqL,KAAK,CAACmC,IAAI,CAACC,QAAQ,CAAC,CAAC,CAAA;OAC9C,CAAC,OAAOC,GAAG,EAAE;AACZ;AAAA,OAAA;AAEJ,KAAA;AACF,GAAC,CAAC,CAAA;AAEF,EAAA,MAAMC,IAAI,GAAG,UAAUC,EAAE,EAAE;IACzB,OAAO,UAAU,GAAGC,IAAI,EAAE;AACxB,MAAA,IAAI,CAAC,IAAI,CAACnC,GAAG,EAAE;AACb,QAAA,MAAM,IAAIoC,KAAK,CAAC,gCAAgC,CAAC,CAAA;AACnD,OAAA;AAEA,MAAA,OAAOF,EAAE,CAAC,GAAGC,IAAI,CAAC,CAAA;KACnB,CAAA;GACF,CAAA;AAED,EAAA,MAAM1F,MAAM,GAAG,YAAY;AACzBlG,IAAAA,OAAO,CAAC2B,IAAI,CAAC,qBAAqB,CAAC,CAAA;GACpC,CAAA;AAEDf,EAAAA,SAAS,CAACpE,gBAAgB,CAAC,UAAU,EAAE4O,UAAU,CAAC,CAAA;EAElDU,MAAM,CACJjP,GAAA,CAACuI,cAAc,EAAA;AACbkE,IAAAA,aAAa,EAAEA,aAAc;AAC7BC,IAAAA,WAAW,EAAEA,WAAY;IACzB5H,IAAI,EAAE3B,OAAO,CAAC2B,IAAK;AACnBsE,IAAAA,aAAa,EAAE,IAAK;AACpBC,IAAAA,MAAM,EAAEA,MAAO;IAAA,GACXgF,IAAAA;GACL,CAAC,EACFtK,SACF,CAAC,CAAA;AAED,EAAA,IAAI,CAACuC,EAAE,GAAGnD,OAAO,CAACmD,EAAE,CAAA;AACpB,EAAA,IAAI,CAACC,GAAG,GAAGpD,OAAO,CAACoD,GAAG,CAAA;AAEtB,EAAA,IAAI,CAACzB,IAAI,GAAG3B,OAAO,CAAC2B,IAAI,CAAA;AAExB,EAAA,IAAI,CAACwB,EAAE,CAAC,SAAS,EAAE,MAAM;AACvB2I,IAAAA,MAAM,CAAC,IAAI,EAAElL,SAAS,CAAC,CAAA;AACvBwH,IAAAA,MAAM,CAACvE,WAAW,CAACjD,SAAS,CAAC,CAAA;AAC/B,GAAC,CAAC,CAAA;EAEF,IAAI,CAACgD,OAAO,GAAG,MAAM,IAAI,CAACjC,IAAI,CAAC,SAAS,CAAC,CAAA;AAEzC,EAAA,IAAI,CAAC4I,QAAQ,GAAGmB,IAAI,CAAC,MAAM,IAAI,CAACjC,GAAG,CAACc,QAAQ,EAAE,CAAC,CAAA;AAE/C,EAAA,IAAI,CAACvB,SAAS,GAAG0C,IAAI,CAAC,MAAM,IAAI,CAACjC,GAAG,CAACT,SAAS,EAAE,CAAC,CAAA;AAEjD,EAAA,IAAI,CAAC9B,SAAS,GAAGwE,IAAI,CAAExO,MAAM,IAAK,IAAI,CAACuM,GAAG,CAACvC,SAAS,CAAChK,MAAM,CAAC,CAAC,CAAA;AAE7D,EAAA,IAAI,CAACoN,UAAU,GAAGoB,IAAI,CAAC,MAAM,IAAI,CAACjC,GAAG,CAACa,UAAU,EAAE,CAAC,CAAA;EAEnD,IAAI,CAAC/B,GAAG,GAAGmD,IAAI,CAAC,CAAC3O,IAAI,EAAEkN,MAAM,KAAK,IAAI,CAACR,GAAG,CAAClB,GAAG,CAACxL,IAAI,EAAEkN,MAAM,CAAC,CAAC,CAAA;AAE7D,EAAA,IAAI,CAACC,aAAa,GAAGwB,IAAI,CAAC,MAAM,IAAI,CAACjC,GAAG,CAACS,aAAa,EAAE,CAAC,CAAA;AAEzD,EAAA,IAAI,CAACC,SAAS,GAAGuB,IAAI,CAAC,MAAM,IAAI,CAACjC,GAAG,CAACU,SAAS,EAAE,CAAC,CAAA;EAEjD,IAAI,CAACC,OAAO,GAAGsB,IAAI,CAAC,CAAC3O,IAAI,EAAEkN,MAAM,KAAK,IAAI,CAACR,GAAG,CAACW,OAAO,CAACrN,IAAI,EAAEkN,MAAM,CAAC,CAAC,CAAA;AAErE,EAAA,IAAI,CAACI,aAAa,GAAGqB,IAAI,CAAC,MAAM,IAAI,CAACjC,GAAG,CAACY,aAAa,EAAE,CAAC,CAAA;AAEzD,EAAA,IAAI,CAACP,qBAAqB,GAAG4B,IAAI,CAAE/B,IAAI,IAAK,IAAI,CAACF,GAAG,CAACK,qBAAqB,CAACH,IAAI,CAAC,CAAC,CAAA;AAEjF,EAAA,IAAI,CAACoC,sBAAsB,GAAGL,IAAI,CAAE/B,IAAI,IAAK,IAAI,CAACF,GAAG,CAACI,mBAAmB,CAACF,IAAI,CAAC,CAAC,CAAA;AAEhF,EAAA,IAAI,CAACD,mBAAmB,GAAGgC,IAAI,CAAE/B,IAAI,IAAK,IAAI,CAACF,GAAG,CAACC,mBAAmB,CAACC,IAAI,CAAC,CAAC,CAAA;AAE7E,EAAA,IAAI,CAACC,qBAAqB,GAAG8B,IAAI,CAAE/B,IAAI,IAAK,IAAI,CAACF,GAAG,CAACG,qBAAqB,CAACD,IAAI,CAAC,CAAC,CAAA;AAEjF,EAAA,IAAI,CAACI,sBAAsB,GAAG2B,IAAI,CAAE/B,IAAI,IAAK,IAAI,CAACF,GAAG,CAACM,sBAAsB,CAACJ,IAAI,CAAC,CAAC,CAAA;AAEnF,EAAA,IAAI,CAACK,8BAA8B,GAAG0B,IAAI,CAAE/B,IAAI,IAAK,IAAI,CAACF,GAAG,CAACO,8BAA8B,CAACL,IAAI,CAAC,CAAC,CAAA;AACrG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bpmn-io/form-js-playground",
3
- "version": "1.8.4",
3
+ "version": "1.8.6",
4
4
  "description": "A form-js playground",
5
5
  "files": [
6
6
  "dist"
@@ -45,8 +45,8 @@
45
45
  "url": "https://github.com/bpmn-io"
46
46
  },
47
47
  "dependencies": {
48
- "@bpmn-io/form-js-editor": "^1.8.4",
49
- "@bpmn-io/form-js-viewer": "^1.8.4",
48
+ "@bpmn-io/form-js-editor": "^1.8.6",
49
+ "@bpmn-io/form-js-viewer": "^1.8.6",
50
50
  "@codemirror/autocomplete": "^6.12.0",
51
51
  "@codemirror/commands": "^6.1.2",
52
52
  "@codemirror/lang-json": "^6.0.1",
@@ -71,5 +71,5 @@
71
71
  "rollup-plugin-css-only": "^4.0.0",
72
72
  "style-loader": "^4.0.0"
73
73
  },
74
- "gitHead": "c9a4761209756fce5711053526023f42bf3b7b54"
74
+ "gitHead": "a3222e98b2334fa0d53887cb8bb25ab3665c2b91"
75
75
  }