@bpmn-io/form-js-playground 0.8.0-alpha.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -7,9 +7,12 @@ var fileDrop = require('file-drops');
7
7
  var mitt = require('mitt');
8
8
  var hooks = require('preact/hooks');
9
9
  var download = require('downloadjs');
10
- var formJs = require('@bpmn-io/form-js');
10
+ var classNames = require('classnames');
11
+ var formJsViewer = require('@bpmn-io/form-js-viewer');
12
+ var formJsEditor = require('@bpmn-io/form-js-editor');
11
13
  var jsxRuntime = require('preact/jsx-runtime');
12
- var basicSetup = require('@codemirror/basic-setup');
14
+ var codemirror = require('codemirror');
15
+ var view = require('@codemirror/view');
13
16
  var state = require('@codemirror/state');
14
17
  var langJson = require('@codemirror/lang-json');
15
18
 
@@ -18,6 +21,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
18
21
  var fileDrop__default = /*#__PURE__*/_interopDefaultLegacy(fileDrop);
19
22
  var mitt__default = /*#__PURE__*/_interopDefaultLegacy(mitt);
20
23
  var download__default = /*#__PURE__*/_interopDefaultLegacy(download);
24
+ var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
21
25
 
22
26
  function Modal(props) {
23
27
  hooks.useEffect(() => {
@@ -123,53 +127,53 @@ function JSONEditor(options = {}) {
123
127
  function createState(doc, extensions = []) {
124
128
  return state.EditorState.create({
125
129
  doc,
126
- extensions: [basicSetup.basicSetup, language, tabSize, ...extensions]
130
+ extensions: [codemirror.basicSetup, language, tabSize, ...extensions]
127
131
  });
128
132
  }
129
133
 
130
134
  function createView(readonly) {
131
- const updateListener = basicSetup.EditorView.updateListener.of(update => {
135
+ const updateListener = view.EditorView.updateListener.of(update => {
132
136
  if (update.docChanged) {
133
137
  emitter.emit('changed', {
134
138
  value: update.view.state.doc.toString()
135
139
  });
136
140
  }
137
141
  });
138
- const editable = basicSetup.EditorView.editable.of(!readonly);
139
- const view = new basicSetup.EditorView({
142
+ const editable = view.EditorView.editable.of(!readonly);
143
+ const view$1 = new view.EditorView({
140
144
  state: createState('', [updateListener, editable])
141
145
  });
142
146
 
143
- view.setValue = function (value) {
147
+ view$1.setValue = function (value) {
144
148
  this.setState(createState(value, [updateListener, editable]));
145
149
  };
146
150
 
147
- return view;
151
+ return view$1;
148
152
  }
149
153
 
150
- const view = createView(readonly);
154
+ const view$1 = createView(readonly);
151
155
 
152
156
  this.setValue = function (value) {
153
- view.setValue(value);
157
+ view$1.setValue(value);
154
158
  };
155
159
 
156
160
  this.getValue = function () {
157
- return view.state.doc.toString();
161
+ return view$1.state.doc.toString();
158
162
  };
159
163
 
160
164
  this.on = emitter.on;
161
165
  this.off = emitter.off;
162
166
 
163
167
  this.attachTo = function (container) {
164
- container.appendChild(view.dom);
168
+ container.appendChild(view$1.dom);
165
169
  };
166
170
 
167
171
  this.destroy = function () {
168
- if (view.dom.parentNode) {
169
- view.dom.parentNode.removeChild(view.dom);
172
+ if (view$1.dom.parentNode) {
173
+ view$1.dom.parentNode.removeChild(view$1.dom);
170
174
  }
171
175
 
172
- view.destroy();
176
+ view$1.destroy();
173
177
  };
174
178
  }
175
179
 
@@ -206,24 +210,50 @@ Section.HeaderItem = function (props) {
206
210
  };
207
211
 
208
212
  function PlaygroundRoot(props) {
213
+ const {
214
+ actions: actionsConfig = {},
215
+ editor: editorConfig = {},
216
+ emit,
217
+ exporter: exporterConfig = {}
218
+ } = props;
219
+ const {
220
+ display: displayActions = true
221
+ } = actionsConfig;
222
+ const {
223
+ inlinePropertiesPanel = true
224
+ } = editorConfig;
209
225
  const paletteContainerRef = hooks.useRef();
210
226
  const editorContainerRef = hooks.useRef();
211
227
  const formContainerRef = hooks.useRef();
212
228
  const dataContainerRef = hooks.useRef();
213
229
  const resultContainerRef = hooks.useRef();
230
+ const propertiesPanelContainerRef = hooks.useRef();
231
+ const paletteRef = hooks.useRef();
214
232
  const formEditorRef = hooks.useRef();
215
233
  const formRef = hooks.useRef();
216
234
  const dataEditorRef = hooks.useRef();
217
235
  const resultViewRef = hooks.useRef();
236
+ const propertiesPanelRef = hooks.useRef();
218
237
  const [showEmbed, setShowEmbed] = hooks.useState(false);
219
238
  const [initialData] = hooks.useState(props.data || {});
220
239
  const [initialSchema, setInitialSchema] = hooks.useState(props.schema);
221
240
  const [data, setData] = hooks.useState(props.data || {});
222
241
  const [schema, setSchema] = hooks.useState(props.schema);
223
- const [resultData, setResultData] = hooks.useState(props.data || {});
242
+ const [resultData, setResultData] = hooks.useState(props.data || {}); // pipe to playground API
243
+
224
244
  hooks.useEffect(() => {
225
245
  props.onInit({
226
- setSchema: setInitialSchema
246
+ attachDataContainer: node => dataEditorRef.current.attachTo(node),
247
+ attachEditorContainer: node => formEditorRef.current.attachTo(node),
248
+ attachFormContainer: node => formRef.current.attachTo(node),
249
+ attachPaletteContainer: node => paletteRef.current.attachTo(node),
250
+ attachPropertiesPanelContainer: node => propertiesPanelRef.current.attachTo(node),
251
+ attachResultContainer: node => resultViewRef.current.attachTo(node),
252
+ get: (name, strict) => formEditorRef.current.get(name, strict),
253
+ getEditor: () => formEditorRef.current,
254
+ getSchema: () => formEditorRef.current.getSchema(),
255
+ setSchema: setInitialSchema,
256
+ saveSchema: () => formEditorRef.current.saveSchema()
227
257
  });
228
258
  });
229
259
  hooks.useEffect(() => {
@@ -237,18 +267,28 @@ function PlaygroundRoot(props) {
237
267
  readonly: true,
238
268
  value: toJSON(resultData)
239
269
  });
240
- const form = formRef.current = new formJs.Form();
241
- const formEditor = formEditorRef.current = new formJs.FormEditor({
270
+ const form = formRef.current = new formJsViewer.Form();
271
+ const formEditor = formEditorRef.current = new formJsEditor.FormEditor({
242
272
  renderer: {
243
273
  compact: true
244
274
  },
245
275
  palette: {
246
276
  parent: paletteContainerRef.current
247
- }
277
+ },
278
+ propertiesPanel: {
279
+ parent: !inlinePropertiesPanel && propertiesPanelContainerRef.current
280
+ },
281
+ exporter: exporterConfig
248
282
  });
283
+ paletteRef.current = formEditor.get('palette');
284
+ propertiesPanelRef.current = formEditor.get('propertiesPanel');
249
285
  formEditor.on('changed', () => {
250
286
  setSchema(formEditor.getSchema());
251
287
  });
288
+ formEditor.on('formEditor.rendered', () => {
289
+ // notifiy interested parties after render
290
+ emit('formPlayground.rendered');
291
+ });
252
292
  form.on('changed', event => {
253
293
  setResultData(event.data);
254
294
  });
@@ -277,10 +317,10 @@ function PlaygroundRoot(props) {
277
317
  dataEditorRef.current.setValue(toJSON(initialData));
278
318
  }, [initialData]);
279
319
  hooks.useEffect(() => {
280
- formEditorRef.current.importSchema(initialSchema);
320
+ initialSchema && formEditorRef.current.importSchema(initialSchema);
281
321
  }, [initialSchema]);
282
322
  hooks.useEffect(() => {
283
- formRef.current.importSchema(schema, data);
323
+ schema && formRef.current.importSchema(schema, data);
284
324
  }, [schema, data]);
285
325
  hooks.useEffect(() => {
286
326
  resultViewRef.current.setValue(toJSON(resultData));
@@ -301,7 +341,9 @@ function PlaygroundRoot(props) {
301
341
  setShowEmbed(true);
302
342
  }, []);
303
343
  return jsxRuntime.jsxs("div", {
304
- class: "fjs-container fjs-pgl-root",
344
+ class: classNames__default['default']('fjs-container', 'fjs-pgl-root', {
345
+ 'fjs-pgl-inline-editor-panel': inlinePropertiesPanel
346
+ }),
305
347
  children: [jsxRuntime.jsx("div", {
306
348
  class: "fjs-pgl-modals",
307
349
  children: showEmbed ? jsxRuntime.jsx(EmbedModal, {
@@ -316,14 +358,14 @@ function PlaygroundRoot(props) {
316
358
  class: "fjs-pgl-main",
317
359
  children: [jsxRuntime.jsxs(Section, {
318
360
  name: "Form Definition",
319
- children: [jsxRuntime.jsx(Section.HeaderItem, {
361
+ children: [displayActions && jsxRuntime.jsx(Section.HeaderItem, {
320
362
  children: jsxRuntime.jsx("button", {
321
363
  class: "fjs-pgl-button",
322
364
  title: "Download form definition",
323
365
  onClick: handleDownload,
324
366
  children: "Download"
325
367
  })
326
- }), jsxRuntime.jsx(Section.HeaderItem, {
368
+ }), displayActions && jsxRuntime.jsx(Section.HeaderItem, {
327
369
  children: jsxRuntime.jsx("button", {
328
370
  class: "fjs-pgl-button",
329
371
  onClick: showEmbedModal,
@@ -352,6 +394,9 @@ function PlaygroundRoot(props) {
352
394
  class: "fjs-pgl-text-container"
353
395
  })
354
396
  })]
397
+ }), jsxRuntime.jsx("div", {
398
+ class: "fjs-pgl-properties-container",
399
+ ref: propertiesPanelContainerRef
355
400
  })]
356
401
  });
357
402
  } // helpers ///////////////
@@ -364,7 +409,8 @@ function Playground(options) {
364
409
  const {
365
410
  container: parent,
366
411
  schema,
367
- data
412
+ data,
413
+ ...rest
368
414
  } = options;
369
415
  const emitter = mitt__default['default']();
370
416
  let state = {
@@ -374,7 +420,11 @@ function Playground(options) {
374
420
  let ref;
375
421
  const container = document.createElement('div');
376
422
  container.classList.add('fjs-pgl-parent');
377
- parent.appendChild(container);
423
+
424
+ if (parent) {
425
+ parent.appendChild(container);
426
+ }
427
+
378
428
  const handleDrop = fileDrop__default['default']('Drop a form file', function (files) {
379
429
  const file = files[0];
380
430
 
@@ -385,12 +435,30 @@ function Playground(options) {
385
435
  }
386
436
  }
387
437
  });
438
+
439
+ const withRef = function (fn) {
440
+ return function (...args) {
441
+ if (!ref) {
442
+ throw new Error('Playground is not initialized.');
443
+ }
444
+
445
+ return fn(...args);
446
+ };
447
+ };
448
+
449
+ const onInit = function (_ref) {
450
+ ref = _ref;
451
+ emitter.emit('formPlayground.init');
452
+ };
453
+
388
454
  container.addEventListener('dragover', handleDrop);
389
455
  preact.render(jsxRuntime.jsx(PlaygroundRoot, {
390
- schema: schema,
391
456
  data: data,
457
+ emit: emitter.emit,
458
+ onInit: onInit,
392
459
  onStateChanged: _state => state = _state,
393
- onInit: _ref => ref = _ref
460
+ schema: schema,
461
+ ...rest
394
462
  }), container);
395
463
  this.on = emitter.on;
396
464
  this.off = emitter.off;
@@ -406,13 +474,44 @@ function Playground(options) {
406
474
  return state;
407
475
  };
408
476
 
409
- this.setSchema = function (schema) {
477
+ this.getSchema = withRef(function () {
478
+ return ref.getSchema();
479
+ });
480
+ this.setSchema = withRef(function (schema) {
410
481
  return ref.setSchema(schema);
411
- };
482
+ });
483
+ this.saveSchema = withRef(function () {
484
+ return ref.saveSchema();
485
+ });
486
+ this.get = withRef(function (name, strict) {
487
+ return ref.get(name, strict);
488
+ });
489
+ this.getEditor = withRef(function () {
490
+ return ref.getEditor();
491
+ });
412
492
 
413
493
  this.destroy = function () {
414
494
  this.emit('destroy');
415
495
  };
496
+
497
+ this.attachEditorContainer = withRef(function (node) {
498
+ return ref.attachEditorContainer(node);
499
+ });
500
+ this.attachPreviewContainer = withRef(function (node) {
501
+ return ref.attachFormContainer(node);
502
+ });
503
+ this.attachDataContainer = withRef(function (node) {
504
+ return ref.attachDataContainer(node);
505
+ });
506
+ this.attachResultContainer = withRef(function (node) {
507
+ return ref.attachResultContainer(node);
508
+ });
509
+ this.attachPaletteContainer = withRef(function (node) {
510
+ return ref.attachPaletteContainer(node);
511
+ });
512
+ this.attachPropertiesPanelContainer = withRef(function (node) {
513
+ return ref.attachPropertiesPanelContainer(node);
514
+ });
416
515
  }
417
516
 
418
517
  exports.Playground = Playground;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/components/Modal.js","../src/components/EmbedModal.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\n useEffect(() => {\n function handleKey(event) {\n\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\">\n { props.children }\n </div>\n <div class=\"fjs-pgl-modal-footer\">\n <button class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={ props.onClose }>Close</button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'preact/hooks';\n\nimport { Modal } from './Modal';\n\n\nexport function EmbedModal(props) {\n\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>Use the following HTML snippet to embed your form with <a href=\"https://github.com/bpmn-io/form-js\">form-js</a>:</p>\n\n <textarea spellCheck=\"false\" ref={ fieldRef }>{snippet}</textarea>\n </Modal>\n );\n}\n\n\n// helpers ///////////\n\nfunction serializeValue(obj) {\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}","import mitt from 'mitt';\n\nimport { basicSetup, EditorView } from '@codemirror/basic-setup';\nimport { EditorState, Compartment } from '@codemirror/state';\nimport { json } from '@codemirror/lang-json';\n\n\nexport function JSONEditor(options = {}) {\n\n const emitter = mitt();\n\n const {\n readonly = false\n } = options;\n\n let language = new Compartment().of(json());\n let tabSize = new Compartment().of(EditorState.tabSize.of(2));\n\n function createState(doc, extensions = []) {\n return EditorState.create({\n doc,\n extensions: [\n basicSetup,\n language,\n tabSize,\n ...extensions\n ]\n });\n }\n\n function createView(readonly) {\n\n const updateListener = EditorView.updateListener.of(update => {\n if (update.docChanged) {\n emitter.emit('changed', {\n value: update.view.state.doc.toString()\n });\n }\n });\n\n const editable = EditorView.editable.of(!readonly);\n\n const view = new EditorView({\n state: createState('', [ updateListener, editable ])\n });\n\n view.setValue = function(value) {\n this.setState(createState(value, [ updateListener, editable ]));\n };\n\n return view;\n }\n\n const view = createView(readonly);\n\n this.setValue = function(value) {\n view.setValue(value);\n };\n\n this.getValue = function() {\n return view.state.doc.toString();\n };\n\n this.on = emitter.on;\n this.off = emitter.off;\n\n this.attachTo = function(container) {\n container.appendChild(view.dom);\n };\n\n this.destroy = function() {\n if (view.dom.parentNode) {\n view.dom.parentNode.removeChild(view.dom);\n }\n\n view.destroy();\n };\n}\n","export function Section(props) {\n\n const elements =\n Array.isArray(props.children)\n ? props.children :\n [ props.children ];\n\n const {\n headerItems,\n children\n } = elements.reduce((_, child) => {\n const bucket =\n child.type === Section.HeaderItem\n ? _.headerItems\n : _.children;\n\n bucket.push(child);\n\n return _;\n }, { headerItems: [], children: [] });\n\n return (\n <div class=\"fjs-pgl-section\">\n <h1 class=\"header\">{ props.name } { headerItems.length ? <span class=\"header-items\">{ headerItems }</span> : null }</h1>\n <div class=\"body\">\n { children }\n </div>\n </div>\n );\n}\n\nSection.HeaderItem = function(props) {\n return props.children;\n};","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\n\nimport download from 'downloadjs';\n\nimport {\n Form,\n FormEditor\n} from '@bpmn-io/form-js';\n\nimport { EmbedModal } from './EmbedModal';\nimport { JSONEditor } from './JSONEditor';\nimport { Section } from './Section';\n\n\nimport './FileDrop.css';\nimport './PlaygroundRoot.css';\n\n\nexport function PlaygroundRoot(props) {\n\n const paletteContainerRef = useRef();\n const editorContainerRef = useRef();\n const formContainerRef = useRef();\n const dataContainerRef = useRef();\n const resultContainerRef = useRef();\n\n const formEditorRef = useRef();\n const formRef = useRef();\n const dataEditorRef = useRef();\n const resultViewRef = useRef();\n\n const [ showEmbed, setShowEmbed ] = useState(false);\n\n const [ initialData ] = useState(props.data || {});\n const [ initialSchema, setInitialSchema ] = useState(props.schema);\n\n const [ data, setData ] = useState(props.data || {});\n const [ schema, setSchema ] = useState(props.schema);\n\n const [ resultData, setResultData ] = useState(props.data || {});\n\n useEffect(() => {\n props.onInit({\n setSchema: setInitialSchema\n });\n });\n\n useEffect(() => {\n setInitialSchema(props.schema || {});\n }, [ props.schema ]);\n\n useEffect(() => {\n const dataEditor = dataEditorRef.current = new JSONEditor({\n value: toJSON(data)\n });\n\n const resultView = resultViewRef.current = new JSONEditor({\n readonly: true,\n value: toJSON(resultData)\n });\n\n const form = formRef.current = new Form();\n const formEditor = formEditorRef.current = new FormEditor({\n renderer: {\n compact: true\n },\n palette: {\n parent: paletteContainerRef.current\n }\n });\n\n formEditor.on('changed', () => {\n setSchema(formEditor.getSchema());\n });\n\n form.on('changed', event => {\n setResultData(event.data);\n });\n\n dataEditor.on('changed', event => {\n try {\n setData(JSON.parse(event.value));\n } catch (err) {\n\n // TODO(nikku): indicate JSON parse error\n }\n });\n\n const formContainer = formContainerRef.current;\n const editorContainer = editorContainerRef.current;\n const dataContainer = dataContainerRef.current;\n const resultContainer = resultContainerRef.current;\n\n dataEditor.attachTo(dataContainer);\n resultView.attachTo(resultContainer);\n form.attachTo(formContainer);\n formEditor.attachTo(editorContainer);\n\n return () => {\n dataEditor.destroy();\n resultView.destroy();\n form.destroy();\n formEditor.destroy();\n };\n }, []);\n\n useEffect(() => {\n dataEditorRef.current.setValue(toJSON(initialData));\n }, [ initialData ]);\n\n useEffect(() => {\n formEditorRef.current.importSchema(initialSchema);\n }, [ initialSchema ]);\n\n useEffect(() => {\n formRef.current.importSchema(schema, data);\n }, [ schema, data ]);\n\n useEffect(() => {\n resultViewRef.current.setValue(toJSON(resultData));\n }, [ resultData ]);\n\n useEffect(() => {\n props.onStateChanged({\n schema,\n data\n });\n }, [ schema, data ]);\n\n const handleDownload = useCallback(() => {\n\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=\"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\n <Section name=\"Form Definition\">\n <Section.HeaderItem>\n <button\n class=\"fjs-pgl-button\"\n title=\"Download form definition\"\n onClick={ handleDownload }\n >Download</button>\n </Section.HeaderItem>\n <Section.HeaderItem>\n <button\n class=\"fjs-pgl-button\"\n onClick={ showEmbedModal }\n >Embed</button>\n </Section.HeaderItem>\n <div ref={ editorContainerRef } class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Preview\">\n <div ref={ formContainerRef } class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Data (Input)\">\n <div ref={ dataContainerRef } class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Data (Submit)\">\n <div ref={ resultContainerRef } class=\"fjs-pgl-text-container\"></div>\n </Section>\n </div>\n </div>\n );\n}\n\n\n// helpers ///////////////\n\nfunction toJSON(obj) {\n return JSON.stringify(obj, null, ' ');\n}","import { render } from 'preact';\n\nimport fileDrop from 'file-drops';\n\nimport mitt from 'mitt';\n\nimport { PlaygroundRoot } from './components/PlaygroundRoot';\n\n\nexport default function Playground(options) {\n\n const {\n container: parent,\n schema,\n data\n } = options;\n\n const emitter = mitt();\n\n let state = { data, schema };\n let ref;\n\n const container = document.createElement('div');\n\n container.classList.add('fjs-pgl-parent');\n\n parent.appendChild(container);\n\n const handleDrop = fileDrop('Drop a form file', function(files) {\n const file = files[0];\n\n if (file) {\n try {\n ref.setSchema(JSON.parse(file.contents));\n } catch (err) {\n\n // TODO(nikku): indicate JSON parse error\n }\n }\n });\n\n container.addEventListener('dragover', handleDrop);\n\n render(\n <PlaygroundRoot\n schema={ schema }\n data={ data }\n onStateChanged={ (_state) => state = _state }\n onInit={ _ref => ref = _ref }\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', function() {\n render(null, container);\n });\n\n this.on('destroy', function() {\n parent.removeChild(container);\n });\n\n this.getState = function() {\n return state;\n };\n\n this.setSchema = function(schema) {\n return ref.setSchema(schema);\n };\n\n this.destroy = function() {\n this.emit('destroy');\n };\n}"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","_jsx","name","children","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","obj","JSON","stringify","replace","JSONEditor","options","emitter","mitt","readonly","language","Compartment","of","json","tabSize","EditorState","createState","doc","extensions","create","basicSetup","createView","updateListener","EditorView","update","docChanged","emit","value","view","state","toString","editable","setValue","setState","getValue","on","off","attachTo","container","appendChild","dom","destroy","parentNode","removeChild","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","type","HeaderItem","push","length","PlaygroundRoot","paletteContainerRef","editorContainerRef","formContainerRef","dataContainerRef","resultContainerRef","formEditorRef","formRef","dataEditorRef","resultViewRef","showEmbed","setShowEmbed","useState","initialData","initialSchema","setInitialSchema","setData","setSchema","resultData","setResultData","onInit","dataEditor","toJSON","resultView","form","Form","formEditor","FormEditor","renderer","compact","palette","parent","getSchema","parse","err","formContainer","editorContainer","dataContainer","resultContainer","importSchema","onStateChanged","handleDownload","useCallback","download","hideEmbedModal","showEmbedModal","Playground","ref","createElement","classList","add","handleDrop","fileDrop","files","file","contents","render","_state","_ref","getState"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/Modal.js","../src/components/EmbedModal.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\n useEffect(() => {\n function handleKey(event) {\n\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\">\n { props.children }\n </div>\n <div class=\"fjs-pgl-modal-footer\">\n <button class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={ props.onClose }>Close</button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'preact/hooks';\n\nimport { Modal } from './Modal';\n\n\nexport function EmbedModal(props) {\n\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>Use the following HTML snippet to embed your form with <a href=\"https://github.com/bpmn-io/form-js\">form-js</a>:</p>\n\n <textarea spellCheck=\"false\" ref={ fieldRef }>{snippet}</textarea>\n </Modal>\n );\n}\n\n\n// helpers ///////////\n\nfunction serializeValue(obj) {\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}","import mitt from 'mitt';\n\nimport { basicSetup } from 'codemirror';\nimport { EditorView } from '@codemirror/view';\nimport { EditorState, Compartment } from '@codemirror/state';\nimport { json } from '@codemirror/lang-json';\n\n\nexport function JSONEditor(options = {}) {\n\n const emitter = mitt();\n\n const {\n readonly = false\n } = options;\n\n let language = new Compartment().of(json());\n let tabSize = new Compartment().of(EditorState.tabSize.of(2));\n\n function createState(doc, extensions = []) {\n return EditorState.create({\n doc,\n extensions: [\n basicSetup,\n language,\n tabSize,\n ...extensions\n ]\n });\n }\n\n function createView(readonly) {\n\n const updateListener = EditorView.updateListener.of(update => {\n if (update.docChanged) {\n emitter.emit('changed', {\n value: update.view.state.doc.toString()\n });\n }\n });\n\n const editable = EditorView.editable.of(!readonly);\n\n const view = new EditorView({\n state: createState('', [ updateListener, editable ])\n });\n\n view.setValue = function(value) {\n this.setState(createState(value, [ updateListener, editable ]));\n };\n\n return view;\n }\n\n const view = createView(readonly);\n\n this.setValue = function(value) {\n view.setValue(value);\n };\n\n this.getValue = function() {\n return view.state.doc.toString();\n };\n\n this.on = emitter.on;\n this.off = emitter.off;\n\n this.attachTo = function(container) {\n container.appendChild(view.dom);\n };\n\n this.destroy = function() {\n if (view.dom.parentNode) {\n view.dom.parentNode.removeChild(view.dom);\n }\n\n view.destroy();\n };\n}\n","export function Section(props) {\n\n const elements =\n Array.isArray(props.children)\n ? props.children :\n [ props.children ];\n\n const {\n headerItems,\n children\n } = elements.reduce((_, child) => {\n const bucket =\n child.type === Section.HeaderItem\n ? _.headerItems\n : _.children;\n\n bucket.push(child);\n\n return _;\n }, { headerItems: [], children: [] });\n\n return (\n <div class=\"fjs-pgl-section\">\n <h1 class=\"header\">{ props.name } { headerItems.length ? <span class=\"header-items\">{ headerItems }</span> : null }</h1>\n <div class=\"body\">\n { children }\n </div>\n </div>\n );\n}\n\nSection.HeaderItem = function(props) {\n return props.children;\n};","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\n\nimport download from 'downloadjs';\n\nimport classNames from 'classnames';\n\nimport {\n Form\n} from '@bpmn-io/form-js-viewer';\n\nimport {\n FormEditor\n} from '@bpmn-io/form-js-editor';\n\nimport { EmbedModal } from './EmbedModal';\nimport { JSONEditor } from './JSONEditor';\nimport { Section } from './Section';\n\n\nimport './FileDrop.css';\nimport './PlaygroundRoot.css';\n\n\nexport function PlaygroundRoot(props) {\n\n const {\n actions: actionsConfig = {},\n editor: editorConfig = {},\n emit,\n exporter: exporterConfig = {}\n } = props;\n\n const {\n display: displayActions = true\n } = actionsConfig;\n\n const {\n inlinePropertiesPanel = true\n } = editorConfig;\n\n const paletteContainerRef = useRef();\n const editorContainerRef = useRef();\n const formContainerRef = useRef();\n const dataContainerRef = useRef();\n const resultContainerRef = useRef();\n const propertiesPanelContainerRef = useRef();\n\n const paletteRef = useRef();\n const formEditorRef = useRef();\n const formRef = useRef();\n const dataEditorRef = useRef();\n const resultViewRef = useRef();\n const propertiesPanelRef = useRef();\n\n const [ showEmbed, setShowEmbed ] = useState(false);\n\n const [ initialData ] = useState(props.data || {});\n const [ initialSchema, setInitialSchema ] = useState(props.schema);\n\n const [ data, setData ] = useState(props.data || {});\n const [ schema, setSchema ] = useState(props.schema);\n\n const [ resultData, setResultData ] = useState(props.data || {});\n\n // pipe to playground API\n useEffect(() => {\n props.onInit({\n attachDataContainer: (node) => dataEditorRef.current.attachTo(node),\n attachEditorContainer: (node) => formEditorRef.current.attachTo(node),\n attachFormContainer: (node) => formRef.current.attachTo(node),\n attachPaletteContainer: (node) => paletteRef.current.attachTo(node),\n attachPropertiesPanelContainer: (node) => propertiesPanelRef.current.attachTo(node),\n attachResultContainer: (node) => resultViewRef.current.attachTo(node),\n get: (name, strict) => formEditorRef.current.get(name, strict),\n getEditor: () => formEditorRef.current,\n getSchema: () => formEditorRef.current.getSchema(),\n setSchema: setInitialSchema,\n saveSchema: () => formEditorRef.current.saveSchema()\n });\n });\n\n useEffect(() => {\n setInitialSchema(props.schema || {});\n }, [ props.schema ]);\n\n useEffect(() => {\n const dataEditor = dataEditorRef.current = new JSONEditor({\n value: toJSON(data)\n });\n\n const resultView = resultViewRef.current = new JSONEditor({\n readonly: true,\n value: toJSON(resultData)\n });\n\n const form = formRef.current = new Form();\n const formEditor = formEditorRef.current = new FormEditor({\n renderer: {\n compact: true\n },\n palette: {\n parent: paletteContainerRef.current\n },\n propertiesPanel: {\n parent: !inlinePropertiesPanel && propertiesPanelContainerRef.current\n },\n exporter: exporterConfig\n });\n\n paletteRef.current = formEditor.get('palette');\n propertiesPanelRef.current = formEditor.get('propertiesPanel');\n\n formEditor.on('changed', () => {\n setSchema(formEditor.getSchema());\n });\n\n formEditor.on('formEditor.rendered', () => {\n\n // notifiy interested parties after render\n emit('formPlayground.rendered');\n });\n\n form.on('changed', event => {\n setResultData(event.data);\n });\n\n dataEditor.on('changed', event => {\n try {\n setData(JSON.parse(event.value));\n } catch (err) {\n\n // TODO(nikku): indicate JSON parse error\n }\n });\n\n const formContainer = formContainerRef.current;\n const editorContainer = editorContainerRef.current;\n const dataContainer = dataContainerRef.current;\n const resultContainer = resultContainerRef.current;\n\n dataEditor.attachTo(dataContainer);\n resultView.attachTo(resultContainer);\n form.attachTo(formContainer);\n formEditor.attachTo(editorContainer);\n\n return () => {\n dataEditor.destroy();\n resultView.destroy();\n form.destroy();\n formEditor.destroy();\n };\n }, []);\n\n useEffect(() => {\n dataEditorRef.current.setValue(toJSON(initialData));\n }, [ initialData ]);\n\n useEffect(() => {\n initialSchema && formEditorRef.current.importSchema(initialSchema);\n }, [ initialSchema ]);\n\n useEffect(() => {\n schema && formRef.current.importSchema(schema, data);\n }, [ schema, data ]);\n\n useEffect(() => {\n resultViewRef.current.setValue(toJSON(resultData));\n }, [ resultData ]);\n\n useEffect(() => {\n props.onStateChanged({\n schema,\n data\n });\n }, [ schema, data ]);\n\n const handleDownload = useCallback(() => {\n\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(\n 'fjs-container',\n 'fjs-pgl-root',\n { 'fjs-pgl-inline-editor-panel': inlinePropertiesPanel }) }>\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\n <Section name=\"Form Definition\">\n\n {\n displayActions && <Section.HeaderItem>\n <button\n class=\"fjs-pgl-button\"\n title=\"Download form definition\"\n onClick={ handleDownload }\n >Download</button>\n </Section.HeaderItem>\n }\n\n {\n displayActions && <Section.HeaderItem>\n <button\n class=\"fjs-pgl-button\"\n onClick={ showEmbedModal }\n >Embed</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={ formContainerRef } class=\"fjs-pgl-form-container\"></div>\n </Section>\n <Section name=\"Form Data (Input)\">\n <div ref={ dataContainerRef } class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Data (Submit)\">\n <div ref={ resultContainerRef } 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\n// helpers ///////////////\n\nfunction toJSON(obj) {\n return JSON.stringify(obj, null, ' ');\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 { {\n * actions?: { display: Boolean }\n * container?: Element\n * data: any\n * editor?: { inlinePropertiesPanel: Boolean }\n * exporter?: { name: String, version: String }\n * schema: any\n * } } FormPlaygroundOptions\n */\n\n/**\n * @param {FormPlaygroundOptions} options\n */\nexport default function Playground(options) {\n\n const {\n container: parent,\n schema,\n data,\n ...rest\n } = options;\n\n const emitter = mitt();\n\n let state = { data, schema };\n let ref;\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 ref.setSchema(JSON.parse(file.contents));\n } catch (err) {\n\n // TODO(nikku): indicate JSON parse error\n }\n }\n });\n\n const withRef = function(fn) {\n return function(...args) {\n if (!ref) {\n throw new Error('Playground is not initialized.');\n }\n\n return fn(...args);\n };\n };\n\n const onInit = function(_ref) {\n ref = _ref;\n emitter.emit('formPlayground.init');\n };\n\n container.addEventListener('dragover', handleDrop);\n\n render(\n <PlaygroundRoot\n data={ data }\n emit={ emitter.emit }\n onInit={ onInit }\n onStateChanged={ (_state) => state = _state }\n schema={ schema }\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', function() {\n render(null, container);\n });\n\n this.on('destroy', function() {\n parent.removeChild(container);\n });\n\n this.getState = function() {\n return state;\n };\n\n this.getSchema = withRef(function() {\n return ref.getSchema();\n });\n\n this.setSchema = withRef(function(schema) {\n return ref.setSchema(schema);\n });\n\n this.saveSchema = withRef(function() {\n return ref.saveSchema();\n });\n\n this.get = withRef(function(name, strict) {\n return ref.get(name, strict);\n });\n\n this.getEditor = withRef(function() {\n return ref.getEditor();\n });\n\n this.destroy = function() {\n this.emit('destroy');\n };\n\n this.attachEditorContainer = withRef(function(node) {\n return ref.attachEditorContainer(node);\n });\n\n this.attachPreviewContainer = withRef(function(node) {\n return ref.attachFormContainer(node);\n });\n\n this.attachDataContainer = withRef(function(node) {\n return ref.attachDataContainer(node);\n });\n\n this.attachResultContainer = withRef(function(node) {\n return ref.attachResultContainer(node);\n });\n\n this.attachPaletteContainer = withRef(function(node) {\n return ref.attachPaletteContainer(node);\n });\n\n this.attachPropertiesPanelContainer = withRef(function(node) {\n return ref.attachPropertiesPanelContainer(node);\n });\n}"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","_jsx","name","children","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","obj","JSON","stringify","replace","JSONEditor","options","emitter","mitt","readonly","language","Compartment","of","json","tabSize","EditorState","createState","doc","extensions","create","basicSetup","createView","updateListener","EditorView","update","docChanged","emit","value","view","state","toString","editable","setValue","setState","getValue","on","off","attachTo","container","appendChild","dom","destroy","parentNode","removeChild","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","type","HeaderItem","push","length","PlaygroundRoot","actions","actionsConfig","editor","editorConfig","exporter","exporterConfig","display","displayActions","inlinePropertiesPanel","paletteContainerRef","editorContainerRef","formContainerRef","dataContainerRef","resultContainerRef","propertiesPanelContainerRef","paletteRef","formEditorRef","formRef","dataEditorRef","resultViewRef","propertiesPanelRef","showEmbed","setShowEmbed","useState","initialData","initialSchema","setInitialSchema","setData","setSchema","resultData","setResultData","onInit","attachDataContainer","node","attachEditorContainer","attachFormContainer","attachPaletteContainer","attachPropertiesPanelContainer","attachResultContainer","get","strict","getEditor","getSchema","saveSchema","dataEditor","toJSON","resultView","form","Form","formEditor","FormEditor","renderer","compact","palette","parent","propertiesPanel","parse","err","formContainer","editorContainer","dataContainer","resultContainer","importSchema","onStateChanged","handleDownload","useCallback","download","hideEmbedModal","showEmbedModal","classNames","Playground","rest","ref","createElement","classList","add","handleDrop","fileDrop","files","file","contents","withRef","fn","args","Error","_ref","render","_state","getState","attachPreviewContainer"],"mappings":"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"}