@bpmn-io/form-js-playground 1.2.0 → 1.3.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
@@ -17,6 +17,7 @@ var langJson = require('@codemirror/lang-json');
17
17
  var commands = require('@codemirror/commands');
18
18
  var autocomplete = require('@codemirror/autocomplete');
19
19
  var language = require('@codemirror/language');
20
+ var minDom = require('min-dom');
20
21
 
21
22
  function Modal(props) {
22
23
  hooks.useEffect(() => {
@@ -112,8 +113,8 @@ function serializeValue(obj) {
112
113
  return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');
113
114
  }
114
115
 
115
- /**
116
- * @type {Facet<import('..').Variables>} Variables
116
+ /**
117
+ * @type {Facet<import('..').Variables>} Variables
117
118
  */
118
119
  const variablesFacet = state.Facet.define();
119
120
 
@@ -144,25 +145,46 @@ function completions(context) {
144
145
  };
145
146
  }
146
147
 
148
+ const NO_LINT_CLS = 'fjs-no-json-lint';
149
+
150
+ /**
151
+ * @param {object} options
152
+ * @param {boolean} [options.readonly]
153
+ * @param {object} [options.contentAttributes]
154
+ * @param {string | HTMLElement} [options.placeholder]
155
+ */
147
156
  function JSONEditor(options = {}) {
148
157
  const {
149
- readonly = false,
150
- contentAttributes = {}
158
+ contentAttributes = {},
159
+ placeholder: editorPlaceholder,
160
+ readonly = false
151
161
  } = options;
152
162
  const emitter = mitt();
153
163
  let language = new state.Compartment().of(langJson.json());
154
164
  let tabSize = new state.Compartment().of(state.EditorState.tabSize.of(2));
165
+ let container = null;
155
166
 
156
- /**
157
- * @typedef {Array<string>} Variables
167
+ /**
168
+ * @typedef {Array<string>} Variables
158
169
  */
159
170
 
160
171
  const autocompletionConf = new state.Compartment();
161
172
  const linterExtension = lint.linter(langJson.jsonParseLinter());
173
+
174
+ // this sets no-linting mode if placeholders are present
175
+ const placeholderLinterExtension = lint.linter(view => {
176
+ const placeholders = view.dom.querySelectorAll('.cm-placeholder');
177
+ if (placeholders.length > 0) {
178
+ set(container, NO_LINT_CLS);
179
+ } else {
180
+ unset(container, NO_LINT_CLS);
181
+ }
182
+ return [];
183
+ });
162
184
  function createState(doc, extensions = [], variables = []) {
163
185
  return state.EditorState.create({
164
186
  doc,
165
- extensions: [codemirror.basicSetup, language, tabSize, linterExtension, lint.lintGutter(), autocompletionConf.of(variablesFacet.of(variables)), autocompletion(), view.keymap.of([commands.indentWithTab]), ...extensions]
187
+ extensions: [codemirror.basicSetup, language, tabSize, linterExtension, placeholderLinterExtension, lint.lintGutter(), autocompletionConf.of(variablesFacet.of(variables)), autocompletion(), view.keymap.of([commands.indentWithTab]), editorPlaceholder ? view.placeholder(editorPlaceholder) : [], ...extensions]
166
188
  });
167
189
  }
168
190
  function createView(readonly) {
@@ -194,8 +216,8 @@ function JSONEditor(options = {}) {
194
216
  return view$1.state.doc.toString();
195
217
  };
196
218
 
197
- /**
198
- * @param {Variables} variables
219
+ /**
220
+ * @param {Variables} variables
199
221
  */
200
222
  this.setVariables = function (variables) {
201
223
  view$1.setVariables(variables);
@@ -203,7 +225,8 @@ function JSONEditor(options = {}) {
203
225
  this.on = emitter.on;
204
226
  this.off = emitter.off;
205
227
  this.emit = emitter.emit;
206
- this.attachTo = function (container) {
228
+ this.attachTo = function (_container) {
229
+ container = _container;
207
230
  container.appendChild(view$1.dom);
208
231
  };
209
232
  this.destroy = function () {
@@ -214,6 +237,17 @@ function JSONEditor(options = {}) {
214
237
  };
215
238
  }
216
239
 
240
+ // helpers //////////////////////
241
+
242
+ function set(node, cls) {
243
+ const classes = minDom.classes(node, document.body);
244
+ classes.add(cls);
245
+ }
246
+ function unset(node, cls) {
247
+ const classes = minDom.classes(node, document.body);
248
+ classes.remove(cls);
249
+ }
250
+
217
251
  function Section(props) {
218
252
  const elements = Array.isArray(props.children) ? props.children : [props.children];
219
253
  const {
@@ -253,7 +287,8 @@ function PlaygroundRoot(props) {
253
287
  viewerProperties = {},
254
288
  editorProperties = {},
255
289
  viewerAdditionalModules = [],
256
- editorAdditionalModules = []
290
+ editorAdditionalModules = [],
291
+ propertiesPanel: propertiesPanelConfig = {}
257
292
  } = props;
258
293
  const {
259
294
  display: displayActions = true
@@ -271,7 +306,7 @@ function PlaygroundRoot(props) {
271
306
  const resultViewRef = hooks.useRef();
272
307
  const propertiesPanelRef = hooks.useRef();
273
308
  const [showEmbed, setShowEmbed] = hooks.useState(false);
274
- const [initialData] = hooks.useState(props.data || {});
309
+ const [initialData] = hooks.useState(props.data || undefined);
275
310
  const [initialSchema, setInitialSchema] = hooks.useState(props.schema);
276
311
  const [data, setData] = hooks.useState(props.data || {});
277
312
  const [schema, setSchema] = hooks.useState(props.schema);
@@ -304,7 +339,8 @@ function PlaygroundRoot(props) {
304
339
  value: toString(data),
305
340
  contentAttributes: {
306
341
  'aria-label': 'Form Input'
307
- }
342
+ },
343
+ placeholder: createDataEditorPlaceholder()
308
344
  });
309
345
  const resultView = resultViewRef.current = new JSONEditor({
310
346
  readonly: true,
@@ -328,7 +364,8 @@ function PlaygroundRoot(props) {
328
364
  parent: paletteContainerRef.current
329
365
  },
330
366
  propertiesPanel: {
331
- parent: propertiesPanelContainerRef.current
367
+ parent: propertiesPanelContainerRef.current,
368
+ ...propertiesPanelConfig
332
369
  },
333
370
  exporter: exporterConfig,
334
371
  properties: {
@@ -472,6 +509,11 @@ function PlaygroundRoot(props) {
472
509
  function toString(obj) {
473
510
  return JSON.stringify(obj, null, ' ');
474
511
  }
512
+ function createDataEditorPlaceholder() {
513
+ const element = document.createElement('p');
514
+ element.innerHTML = 'Use this panel to simulate the form input, such as process variables.\nThis helps to test the form by populating the preview.\n\n' + 'Follow the JSON format like this:\n\n' + '{\n "variable": "value"\n}';
515
+ return element;
516
+ }
475
517
 
476
518
  function Playground(options) {
477
519
  const {
@@ -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';\r\n\r\nexport function Modal(props) {\r\n\r\n useEffect(() => {\r\n function handleKey(event) {\r\n\r\n if (event.key === 'Escape') {\r\n event.stopPropagation();\r\n\r\n props.onClose();\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKey);\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKey);\r\n };\r\n });\r\n\r\n return (\r\n <div class=\"fjs-pgl-modal\">\r\n <div class=\"fjs-pgl-modal-backdrop\" onClick={ props.onClose }></div>\r\n <div class=\"fjs-pgl-modal-content\">\r\n <h1 class=\"fjs-pgl-modal-header\">{ props.name }</h1>\r\n <div class=\"fjs-pgl-modal-body\">\r\n { props.children }\r\n </div>\r\n <div class=\"fjs-pgl-modal-footer\">\r\n <button class=\"fjs-pgl-button fjs-pgl-button-default\" onClick={ props.onClose }>Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef } from 'preact/hooks';\r\n\r\nimport { Modal } from './Modal';\r\n\r\n\r\nexport function EmbedModal(props) {\r\n\r\n const schema = serializeValue(props.schema);\r\n const data = serializeValue(props.data || {});\r\n\r\n const fieldRef = useRef();\r\n\r\n const snippet = `<!-- styles needed for rendering -->\r\n<link rel=\"stylesheet\" href=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/assets/form-js.css\">\r\n\r\n<!-- container to render the form into -->\r\n<div class=\"fjs-pgl-form-container\"></div>\r\n\r\n<!-- scripts needed for embedding -->\r\n<script src=\"https://unpkg.com/@bpmn-io/form-js@0.2.4/dist/form-viewer.umd.js\"></script>\r\n\r\n<!-- actual script to instantiate the form and load form schema + data -->\r\n<script>\r\n const data = JSON.parse(${data});\r\n const schema = JSON.parse(${schema});\r\n\r\n const form = new FormViewer.Form({\r\n container: document.querySelector(\".fjs-pgl-form-container\")\r\n });\r\n\r\n form.on(\"submit\", (event) => {\r\n console.log(event.data, event.errors);\r\n });\r\n\r\n form.importSchema(schema, data).catch(err => {\r\n console.error(\"Failed to render form\", err);\r\n });\r\n</script>\r\n `.trim();\r\n\r\n useEffect(() => {\r\n fieldRef.current.select();\r\n });\r\n\r\n return (\r\n <Modal name=\"Embed form\" onClose={ props.onClose }>\r\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>\r\n\r\n <textarea spellCheck=\"false\" ref={ fieldRef }>{snippet}</textarea>\r\n </Modal>\r\n );\r\n}\r\n\r\n\r\n// helpers ///////////\r\n\r\nfunction serializeValue(obj) {\r\n return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n}","import { Facet } from '@codemirror/state';\r\n\r\n/**\r\n * @type {Facet<import('..').Variables>} Variables\r\n */\r\nexport const variablesFacet = Facet.define();","import { autocompletion } from '@codemirror/autocomplete';\r\n\r\nimport { syntaxTree } from '@codemirror/language';\r\n\r\nimport { variablesFacet } from './VariablesFacet';\r\n\r\nexport default function() {\r\n return [\r\n autocompletion({\r\n override: [\r\n completions\r\n ]\r\n })\r\n ];\r\n}\r\n\r\nfunction completions(context) {\r\n\r\n const variables = context.state.facet(variablesFacet)[0];\r\n\r\n const options = variables.map(v => ({\r\n label: v,\r\n type: 'variable'\r\n }));\r\n\r\n let nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\r\n\r\n // handle inside property name as explicit call\r\n if (nodeBefore.type.name === 'PropertyName') {\r\n context.explicit = true;\r\n }\r\n\r\n let word = context.matchBefore(/\\w*/);\r\n\r\n if (word.from == word.to && !context.explicit) {\r\n return null;\r\n }\r\n\r\n return {\r\n from: word.from,\r\n options\r\n };\r\n}","import mitt from 'mitt';\r\n\r\nimport { basicSetup } from 'codemirror';\r\nimport { EditorView, keymap } from '@codemirror/view';\r\nimport { EditorState, Compartment } from '@codemirror/state';\r\nimport { lintGutter, linter } from '@codemirror/lint';\r\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\r\nimport { indentWithTab } from '@codemirror/commands';\r\n\r\nimport autocompletion from './autocompletion/index';\r\nimport { variablesFacet } from './autocompletion/VariablesFacet';\r\n\r\n\r\nexport function JSONEditor(options = {}) {\r\n const {\r\n readonly = false,\r\n contentAttributes = {}\r\n } = options;\r\n\r\n const emitter = mitt();\r\n\r\n let language = new Compartment().of(json());\r\n let tabSize = new Compartment().of(EditorState.tabSize.of(2));\r\n\r\n\r\n /**\r\n * @typedef {Array<string>} Variables\r\n */\r\n\r\n const autocompletionConf = new Compartment();\r\n\r\n const linterExtension = linter(jsonParseLinter());\r\n\r\n function createState(doc, extensions = [], variables = []) {\r\n return EditorState.create({\r\n doc,\r\n extensions: [\r\n basicSetup,\r\n language,\r\n tabSize,\r\n linterExtension,\r\n lintGutter(),\r\n autocompletionConf.of(variablesFacet.of(variables)),\r\n autocompletion(),\r\n keymap.of([ indentWithTab ]),\r\n ...extensions\r\n ]\r\n });\r\n }\r\n\r\n function createView(readonly) {\r\n\r\n const updateListener = EditorView.updateListener.of(update => {\r\n if (update.docChanged) {\r\n emitter.emit('changed', {\r\n value: update.view.state.doc.toString()\r\n });\r\n }\r\n });\r\n\r\n const editable = EditorView.editable.of(!readonly);\r\n\r\n const contentAttributesExtension = EditorView.contentAttributes.of(contentAttributes);\r\n\r\n const view = new EditorView({\r\n state: createState('', [ updateListener, editable, contentAttributesExtension ])\r\n });\r\n\r\n view.setValue = function(value) {\r\n this.setState(createState(value, [ updateListener, editable, contentAttributesExtension ]));\r\n };\r\n\r\n view.setVariables = function(variables) {\r\n this.setState(createState(\r\n view.state.doc.toString(),\r\n [ updateListener, editable, contentAttributesExtension ],\r\n variables\r\n ));\r\n };\r\n\r\n return view;\r\n }\r\n\r\n const view = this._view = createView(readonly);\r\n\r\n this.setValue = function(value) {\r\n view.setValue(value);\r\n };\r\n\r\n this.getValue = function() {\r\n return view.state.doc.toString();\r\n };\r\n\r\n /**\r\n * @param {Variables} variables\r\n */\r\n this.setVariables = function(variables) {\r\n view.setVariables(variables);\r\n };\r\n\r\n this.on = emitter.on;\r\n this.off = emitter.off;\r\n this.emit = emitter.emit;\r\n\r\n this.attachTo = function(container) {\r\n container.appendChild(view.dom);\r\n };\r\n\r\n this.destroy = function() {\r\n if (view.dom.parentNode) {\r\n view.dom.parentNode.removeChild(view.dom);\r\n }\r\n\r\n view.destroy();\r\n };\r\n}\r\n","export function Section(props) {\r\n\r\n const elements =\r\n Array.isArray(props.children)\r\n ? props.children :\r\n [ props.children ];\r\n\r\n const {\r\n headerItems,\r\n children\r\n } = elements.reduce((_, child) => {\r\n const bucket =\r\n child.type === Section.HeaderItem\r\n ? _.headerItems\r\n : _.children;\r\n\r\n bucket.push(child);\r\n\r\n return _;\r\n }, { headerItems: [], children: [] });\r\n\r\n return (\r\n <div class=\"fjs-pgl-section\">\r\n <h1 class=\"header\">{ props.name } { headerItems.length ? <span class=\"header-items\">{ headerItems }</span> : null }</h1>\r\n <div class=\"body\">\r\n { children }\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nSection.HeaderItem = function(props) {\r\n return props.children;\r\n};","import { useRef, useEffect, useState, useCallback } from 'preact/hooks';\r\n\r\nimport download from 'downloadjs';\r\n\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n Form,\r\n getSchemaVariables\r\n} from '@bpmn-io/form-js-viewer';\r\n\r\nimport {\r\n FormEditor\r\n} from '@bpmn-io/form-js-editor';\r\n\r\nimport { EmbedModal } from './EmbedModal';\r\nimport { JSONEditor } from './JSONEditor';\r\nimport { Section } from './Section';\r\n\r\n\r\nimport './FileDrop.css';\r\nimport './PlaygroundRoot.css';\r\n\r\n\r\nexport function PlaygroundRoot(props) {\r\n\r\n const {\r\n actions: actionsConfig = {},\r\n emit,\r\n exporter: exporterConfig = {},\r\n viewerProperties = {},\r\n editorProperties = {},\r\n viewerAdditionalModules = [],\r\n editorAdditionalModules = []\r\n } = props;\r\n\r\n const {\r\n display: displayActions = true\r\n } = actionsConfig;\r\n\r\n const paletteContainerRef = useRef();\r\n const editorContainerRef = useRef();\r\n const formContainerRef = useRef();\r\n const dataContainerRef = useRef();\r\n const resultContainerRef = useRef();\r\n const propertiesPanelContainerRef = useRef();\r\n\r\n const paletteRef = useRef();\r\n const formEditorRef = useRef();\r\n const formRef = useRef();\r\n const dataEditorRef = useRef();\r\n const resultViewRef = useRef();\r\n const propertiesPanelRef = useRef();\r\n\r\n const [ showEmbed, setShowEmbed ] = useState(false);\r\n\r\n const [ initialData ] = useState(props.data || {});\r\n const [ initialSchema, setInitialSchema ] = useState(props.schema);\r\n\r\n const [ data, setData ] = useState(props.data || {});\r\n const [ schema, setSchema ] = useState(props.schema);\r\n\r\n const [ resultData, setResultData ] = useState({});\r\n\r\n // pipe to playground API\r\n useEffect(() => {\r\n props.onInit({\r\n attachDataContainer: (node) => dataEditorRef.current.attachTo(node),\r\n attachEditorContainer: (node) => formEditorRef.current.attachTo(node),\r\n attachFormContainer: (node) => formRef.current.attachTo(node),\r\n attachPaletteContainer: (node) => paletteRef.current.attachTo(node),\r\n attachPropertiesPanelContainer: (node) => propertiesPanelRef.current.attachTo(node),\r\n attachResultContainer: (node) => resultViewRef.current.attachTo(node),\r\n get: (name, strict) => formEditorRef.current.get(name, strict),\r\n getDataEditor: () => dataEditorRef.current,\r\n getEditor: () => formEditorRef.current,\r\n getForm: () => formRef.current,\r\n getResultView: () => resultViewRef.current,\r\n getSchema: () => formEditorRef.current.getSchema(),\r\n setSchema: setInitialSchema,\r\n saveSchema: () => formEditorRef.current.saveSchema()\r\n });\r\n });\r\n\r\n useEffect(() => {\r\n setInitialSchema(props.schema || {});\r\n }, [ props.schema ]);\r\n\r\n useEffect(() => {\r\n const dataEditor = dataEditorRef.current = new JSONEditor({\r\n value: toString(data),\r\n contentAttributes: { 'aria-label': 'Form Input' }\r\n });\r\n\r\n const resultView = resultViewRef.current = new JSONEditor({\r\n readonly: true,\r\n value: toString(resultData),\r\n contentAttributes: { 'aria-label': 'Form Output' }\r\n });\r\n\r\n const form = formRef.current = new Form({\r\n additionalModules: viewerAdditionalModules,\r\n properties: {\r\n ...viewerProperties,\r\n 'ariaLabel': 'Form Preview'\r\n }\r\n });\r\n\r\n const formEditor = formEditorRef.current = new FormEditor({\r\n renderer: {\r\n compact: true\r\n },\r\n palette: {\r\n parent: paletteContainerRef.current\r\n },\r\n propertiesPanel: {\r\n parent: propertiesPanelContainerRef.current\r\n },\r\n exporter: exporterConfig,\r\n properties: {\r\n ...editorProperties,\r\n 'ariaLabel': 'Form Definition'\r\n },\r\n additionalModules: editorAdditionalModules\r\n });\r\n\r\n paletteRef.current = formEditor.get('palette');\r\n propertiesPanelRef.current = formEditor.get('propertiesPanel');\r\n\r\n formEditor.on('changed', () => {\r\n setSchema(formEditor.getSchema());\r\n });\r\n\r\n formEditor.on('formEditor.rendered', () => {\r\n\r\n // notifiy interested parties after render\r\n emit('formPlayground.rendered');\r\n });\r\n\r\n form.on('changed', () => {\r\n setResultData(form._getSubmitData());\r\n });\r\n\r\n dataEditor.on('changed', event => {\r\n try {\r\n setData(JSON.parse(event.value));\r\n } catch (error) {\r\n\r\n // notify interested about input data error\r\n emit('formPlayground.inputDataError', error);\r\n }\r\n });\r\n\r\n const formContainer = formContainerRef.current;\r\n const editorContainer = editorContainerRef.current;\r\n const dataContainer = dataContainerRef.current;\r\n const resultContainer = resultContainerRef.current;\r\n\r\n dataEditor.attachTo(dataContainer);\r\n resultView.attachTo(resultContainer);\r\n form.attachTo(formContainer);\r\n formEditor.attachTo(editorContainer);\r\n\r\n return () => {\r\n dataEditor.destroy();\r\n resultView.destroy();\r\n form.destroy();\r\n formEditor.destroy();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n dataEditorRef.current.setValue(toString(initialData));\r\n }, [ initialData ]);\r\n\r\n useEffect(() => {\r\n if (initialSchema) {\r\n formEditorRef.current.importSchema(initialSchema);\r\n dataEditorRef.current.setVariables(getSchemaVariables(initialSchema));\r\n }\r\n }, [ initialSchema ]);\r\n\r\n useEffect(() => {\r\n if (schema && dataContainerRef.current) {\r\n const variables = getSchemaVariables(schema);\r\n dataEditorRef.current.setVariables(variables);\r\n }\r\n }, [ schema ]);\r\n\r\n useEffect(() => {\r\n schema && formRef.current.importSchema(schema, data);\r\n }, [ schema, data ]);\r\n\r\n useEffect(() => {\r\n resultViewRef.current.setValue(toString(resultData));\r\n }, [ resultData ]);\r\n\r\n useEffect(() => {\r\n props.onStateChanged({\r\n schema,\r\n data\r\n });\r\n }, [ schema, data ]);\r\n\r\n const handleDownload = useCallback(() => {\r\n\r\n download(JSON.stringify(schema, null, ' '), 'form.json', 'text/json');\r\n }, [ schema ]);\r\n\r\n const hideEmbedModal = useCallback(() => {\r\n setShowEmbed(false);\r\n }, []);\r\n\r\n const showEmbedModal = useCallback(() => {\r\n setShowEmbed(true);\r\n }, []);\r\n\r\n return (\r\n <div class={ classNames(\r\n 'fjs-container',\r\n 'fjs-pgl-root'\r\n ) }>\r\n <div class=\"fjs-pgl-modals\">\r\n { showEmbed ? <EmbedModal schema={ schema } data={ data } onClose={ hideEmbedModal } /> : null }\r\n </div>\r\n <div class=\"fjs-pgl-palette-container\" ref={ paletteContainerRef } />\r\n <div class=\"fjs-pgl-main\">\r\n\r\n <Section name=\"Form Definition\">\r\n\r\n {\r\n displayActions && <Section.HeaderItem>\r\n <button\r\n class=\"fjs-pgl-button\"\r\n title=\"Download form definition\"\r\n onClick={ handleDownload }\r\n >Download</button>\r\n </Section.HeaderItem>\r\n }\r\n\r\n {\r\n displayActions && <Section.HeaderItem>\r\n <button\r\n class=\"fjs-pgl-button\"\r\n onClick={ showEmbedModal }\r\n >Embed</button>\r\n </Section.HeaderItem>\r\n }\r\n\r\n <div ref={ editorContainerRef } class=\"fjs-pgl-form-container\"></div>\r\n </Section>\r\n <Section name=\"Form Preview\">\r\n <div ref={ formContainerRef } class=\"fjs-pgl-form-container\"></div>\r\n </Section>\r\n <Section name=\"Form Input\">\r\n <div ref={ dataContainerRef } class=\"fjs-pgl-text-container\"></div>\r\n </Section>\r\n <Section name=\"Form Output\">\r\n <div ref={ resultContainerRef } class=\"fjs-pgl-text-container\"></div>\r\n </Section>\r\n </div>\r\n <div class=\"fjs-pgl-properties-container\" ref={ propertiesPanelContainerRef } />\r\n </div>\r\n );\r\n}\r\n\r\n\r\n// helpers ///////////////\r\n\r\nfunction toString(obj) {\r\n return JSON.stringify(obj, null, ' ');\r\n}","import { render } from 'preact';\r\n\r\nimport fileDrop from 'file-drops';\r\n\r\nimport mitt from 'mitt';\r\n\r\nimport { PlaygroundRoot } from './components/PlaygroundRoot';\r\n\r\n/**\r\n * @typedef { {\r\n * actions?: { display: Boolean }\r\n * container?: Element\r\n * data: any\r\n * editor?: { inlinePropertiesPanel: Boolean }\r\n * exporter?: { name: String, version: String }\r\n * schema: any\r\n * } } FormPlaygroundOptions\r\n */\r\n\r\n/**\r\n * @param {FormPlaygroundOptions} options\r\n */\r\nexport default function Playground(options) {\r\n\r\n const {\r\n container: parent,\r\n schema,\r\n data,\r\n ...rest\r\n } = options;\r\n\r\n const emitter = mitt();\r\n\r\n let state = { data, schema };\r\n let ref;\r\n\r\n const container = document.createElement('div');\r\n\r\n container.classList.add('fjs-pgl-parent');\r\n\r\n if (parent) {\r\n parent.appendChild(container);\r\n }\r\n\r\n const handleDrop = fileDrop('Drop a form file', function(files) {\r\n const file = files[0];\r\n\r\n if (file) {\r\n try {\r\n ref.setSchema(JSON.parse(file.contents));\r\n } catch (err) {\r\n\r\n // TODO(nikku): indicate JSON parse error\r\n }\r\n }\r\n });\r\n\r\n const withRef = function(fn) {\r\n return function(...args) {\r\n if (!ref) {\r\n throw new Error('Playground is not initialized.');\r\n }\r\n\r\n return fn(...args);\r\n };\r\n };\r\n\r\n const onInit = function(_ref) {\r\n ref = _ref;\r\n emitter.emit('formPlayground.init');\r\n };\r\n\r\n container.addEventListener('dragover', handleDrop);\r\n\r\n render(\r\n <PlaygroundRoot\r\n data={ data }\r\n emit={ emitter.emit }\r\n onInit={ onInit }\r\n onStateChanged={ (_state) => state = _state }\r\n schema={ schema }\r\n { ...rest }\r\n />,\r\n container\r\n );\r\n\r\n this.on = emitter.on;\r\n this.off = emitter.off;\r\n\r\n this.emit = emitter.emit;\r\n\r\n this.on('destroy', function() {\r\n render(null, container);\r\n });\r\n\r\n this.on('destroy', function() {\r\n parent.removeChild(container);\r\n });\r\n\r\n this.getState = function() {\r\n return state;\r\n };\r\n\r\n this.getSchema = withRef(() => ref.getSchema());\r\n\r\n this.setSchema = withRef((schema) => ref.setSchema(schema));\r\n\r\n this.saveSchema = withRef(() => ref.saveSchema());\r\n\r\n this.get = withRef((name, strict) => ref.get(name, strict));\r\n\r\n this.getDataEditor = withRef(() => ref.getDataEditor());\r\n\r\n this.getEditor = withRef(() => ref.getEditor());\r\n\r\n this.getForm = withRef((name, strict) => ref.getForm(name, strict));\r\n\r\n this.getResultView = withRef(() => ref.getResultView());\r\n\r\n this.destroy = function() {\r\n this.emit('destroy');\r\n };\r\n\r\n this.attachEditorContainer = withRef((node) => ref.attachEditorContainer(node));\r\n\r\n this.attachPreviewContainer = withRef((node) => ref.attachFormContainer(node));\r\n\r\n this.attachDataContainer = withRef((node) => ref.attachDataContainer(node));\r\n\r\n this.attachResultContainer = withRef((node) => ref.attachResultContainer(node));\r\n\r\n this.attachPaletteContainer = withRef((node) => ref.attachPaletteContainer(node));\r\n\r\n this.attachPropertiesPanelContainer = withRef((node) => ref.attachPropertiesPanelContainer(node));\r\n}"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","class","children","_jsx","onClick","name","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","href","spellCheck","ref","obj","JSON","stringify","replace","variablesFacet","Facet","define","autocompletion","override","completions","context","variables","state","facet","options","map","v","label","type","nodeBefore","syntaxTree","resolve","pos","explicit","word","matchBefore","from","to","JSONEditor","readonly","contentAttributes","emitter","mitt","language","Compartment","of","json","tabSize","EditorState","autocompletionConf","linterExtension","linter","jsonParseLinter","createState","doc","extensions","create","basicSetup","lintGutter","keymap","indentWithTab","createView","updateListener","EditorView","update","docChanged","emit","value","view","toString","editable","contentAttributesExtension","setValue","setState","setVariables","_view","getValue","on","off","attachTo","container","appendChild","dom","destroy","parentNode","removeChild","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","HeaderItem","push","length","PlaygroundRoot","actions","actionsConfig","exporter","exporterConfig","viewerProperties","editorProperties","viewerAdditionalModules","editorAdditionalModules","display","displayActions","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","getDataEditor","getEditor","getForm","getResultView","getSchema","saveSchema","dataEditor","resultView","form","Form","additionalModules","properties","formEditor","FormEditor","renderer","compact","palette","parent","propertiesPanel","_getSubmitData","parse","error","formContainer","editorContainer","dataContainer","resultContainer","importSchema","getSchemaVariables","onStateChanged","handleDownload","useCallback","download","hideEmbedModal","showEmbedModal","classNames","title","Playground","rest","createElement","classList","add","handleDrop","fileDrop","files","file","contents","err","withRef","fn","args","Error","_ref","render","_state","getState","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\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 { Facet } from '@codemirror/state';\n\n/**\n * @type {Facet<import('..').Variables>} Variables\n */\nexport const variablesFacet = Facet.define();","import { autocompletion } from '@codemirror/autocomplete';\n\nimport { syntaxTree } from '@codemirror/language';\n\nimport { variablesFacet } from './VariablesFacet';\n\nexport default function() {\n return [\n autocompletion({\n override: [\n completions\n ]\n })\n ];\n}\n\nfunction completions(context) {\n\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}","import mitt from 'mitt';\n\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';\n\nimport autocompletion from './autocompletion/index';\nimport { variablesFacet } from './autocompletion/VariablesFacet';\n\nimport {\n classes as domClasses\n} from 'min-dom';\n\nconst NO_LINT_CLS = 'fjs-no-json-lint';\n\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 {\n contentAttributes = {},\n placeholder: editorPlaceholder,\n readonly = false,\n } = options;\n\n const emitter = mitt();\n\n let language = new Compartment().of(json());\n let tabSize = new Compartment().of(EditorState.tabSize.of(2));\n\n let container = null;\n\n\n /**\n * @typedef {Array<string>} Variables\n */\n\n const autocompletionConf = new Compartment();\n\n const linterExtension = linter(jsonParseLinter());\n\n // this sets no-linting mode if placeholders are present\n const placeholderLinterExtension = linter(view => {\n const placeholders = view.dom.querySelectorAll('.cm-placeholder');\n\n if (placeholders.length > 0) {\n set(container, NO_LINT_CLS);\n } else {\n unset(container, NO_LINT_CLS);\n }\n\n return [];\n });\n\n function createState(doc, extensions = [], variables = []) {\n return EditorState.create({\n doc,\n extensions: [\n basicSetup,\n language,\n tabSize,\n linterExtension,\n placeholderLinterExtension,\n lintGutter(),\n autocompletionConf.of(variablesFacet.of(variables)),\n autocompletion(),\n keymap.of([ indentWithTab ]),\n editorPlaceholder ? placeholder(editorPlaceholder) : [],\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 contentAttributesExtension = EditorView.contentAttributes.of(contentAttributes);\n\n const view = new EditorView({\n state: createState('', [ updateListener, editable, contentAttributesExtension ])\n });\n\n view.setValue = function(value) {\n this.setState(createState(value, [ updateListener, editable, contentAttributesExtension ]));\n };\n\n view.setVariables = function(variables) {\n this.setState(createState(\n view.state.doc.toString(),\n [ updateListener, editable, contentAttributesExtension ],\n variables\n ));\n };\n\n return view;\n }\n\n const view = this._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 /**\n * @param {Variables} variables\n */\n this.setVariables = function(variables) {\n view.setVariables(variables);\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 };\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\n// helpers //////////////////////\n\n\nfunction set(node, cls) {\n const classes = domClasses(node, document.body);\n classes.add(cls);\n}\n\nfunction unset(node, cls) {\n const classes = domClasses(node, document.body);\n classes.remove(cls);\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 getSchemaVariables\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 emit,\n exporter: exporterConfig = {},\n viewerProperties = {},\n editorProperties = {},\n viewerAdditionalModules = [],\n editorAdditionalModules = [],\n propertiesPanel: propertiesPanelConfig = {}\n } = props;\n\n const {\n display: displayActions = true\n } = actionsConfig;\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 || undefined);\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({});\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 getDataEditor: () => dataEditorRef.current,\n getEditor: () => formEditorRef.current,\n getForm: () => formRef.current,\n getResultView: () => resultViewRef.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: toString(data),\n contentAttributes: { 'aria-label': 'Form Input' },\n placeholder: createDataEditorPlaceholder()\n });\n\n const resultView = resultViewRef.current = new JSONEditor({\n readonly: true,\n value: toString(resultData),\n contentAttributes: { 'aria-label': 'Form Output' }\n });\n\n const form = formRef.current = new Form({\n additionalModules: viewerAdditionalModules,\n properties: {\n ...viewerProperties,\n 'ariaLabel': 'Form Preview'\n }\n });\n\n const formEditor = formEditorRef.current = new FormEditor({\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: editorAdditionalModules\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', () => {\n setResultData(form._getSubmitData());\n });\n\n dataEditor.on('changed', event => {\n try {\n setData(JSON.parse(event.value));\n } catch (error) {\n\n // notify interested about input data error\n emit('formPlayground.inputDataError', 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(toString(initialData));\n }, [ initialData ]);\n\n useEffect(() => {\n if (initialSchema) {\n formEditorRef.current.importSchema(initialSchema);\n dataEditorRef.current.setVariables(getSchemaVariables(initialSchema));\n }\n }, [ initialSchema ]);\n\n useEffect(() => {\n if (schema && dataContainerRef.current) {\n const variables = getSchemaVariables(schema);\n dataEditorRef.current.setVariables(variables);\n }\n }, [ schema ]);\n\n useEffect(() => {\n schema && formRef.current.importSchema(schema, data);\n }, [ schema, data ]);\n\n useEffect(() => {\n resultViewRef.current.setValue(toString(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 ) }>\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 Input\">\n <div ref={ dataContainerRef } class=\"fjs-pgl-text-container\"></div>\n </Section>\n <Section name=\"Form Output\">\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 toString(obj) {\n return JSON.stringify(obj, null, ' ');\n}\n\nfunction createDataEditorPlaceholder() {\n const element = document.createElement('p');\n\n element.innerHTML = '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}","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 * 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 */\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(() => ref.getSchema());\n\n this.setSchema = withRef((schema) => ref.setSchema(schema));\n\n this.saveSchema = withRef(() => ref.saveSchema());\n\n this.get = withRef((name, strict) => ref.get(name, strict));\n\n this.getDataEditor = withRef(() => ref.getDataEditor());\n\n this.getEditor = withRef(() => ref.getEditor());\n\n this.getForm = withRef((name, strict) => ref.getForm(name, strict));\n\n this.getResultView = withRef(() => ref.getResultView());\n\n this.destroy = function() {\n this.emit('destroy');\n };\n\n this.attachEditorContainer = withRef((node) => ref.attachEditorContainer(node));\n\n this.attachPreviewContainer = withRef((node) => ref.attachFormContainer(node));\n\n this.attachDataContainer = withRef((node) => ref.attachDataContainer(node));\n\n this.attachResultContainer = withRef((node) => ref.attachResultContainer(node));\n\n this.attachPaletteContainer = withRef((node) => ref.attachPaletteContainer(node));\n\n this.attachPropertiesPanelContainer = withRef((node) => ref.attachPropertiesPanelContainer(node));\n}"],"names":["Modal","props","useEffect","handleKey","event","key","stopPropagation","onClose","document","addEventListener","removeEventListener","_jsxs","class","children","_jsx","onClick","name","EmbedModal","schema","serializeValue","data","fieldRef","useRef","snippet","trim","current","select","href","spellCheck","ref","obj","JSON","stringify","replace","variablesFacet","Facet","define","autocompletion","override","completions","context","variables","state","facet","options","map","v","label","type","nodeBefore","syntaxTree","resolve","pos","explicit","word","matchBefore","from","to","NO_LINT_CLS","JSONEditor","contentAttributes","placeholder","editorPlaceholder","readonly","emitter","mitt","language","Compartment","of","json","tabSize","EditorState","container","autocompletionConf","linterExtension","linter","jsonParseLinter","placeholderLinterExtension","view","placeholders","dom","querySelectorAll","length","set","unset","createState","doc","extensions","create","basicSetup","lintGutter","keymap","indentWithTab","createView","updateListener","EditorView","update","docChanged","emit","value","toString","editable","contentAttributesExtension","setValue","setState","setVariables","_view","getValue","on","off","attachTo","_container","appendChild","destroy","parentNode","removeChild","node","cls","classes","domClasses","body","add","remove","Section","elements","Array","isArray","headerItems","reduce","_","child","bucket","HeaderItem","push","PlaygroundRoot","actions","actionsConfig","exporter","exporterConfig","viewerProperties","editorProperties","viewerAdditionalModules","editorAdditionalModules","propertiesPanel","propertiesPanelConfig","display","displayActions","paletteContainerRef","editorContainerRef","formContainerRef","dataContainerRef","resultContainerRef","propertiesPanelContainerRef","paletteRef","formEditorRef","formRef","dataEditorRef","resultViewRef","propertiesPanelRef","showEmbed","setShowEmbed","useState","initialData","undefined","initialSchema","setInitialSchema","setData","setSchema","resultData","setResultData","onInit","attachDataContainer","attachEditorContainer","attachFormContainer","attachPaletteContainer","attachPropertiesPanelContainer","attachResultContainer","get","strict","getDataEditor","getEditor","getForm","getResultView","getSchema","saveSchema","dataEditor","createDataEditorPlaceholder","resultView","form","Form","additionalModules","properties","formEditor","FormEditor","renderer","compact","palette","parent","_getSubmitData","parse","error","formContainer","editorContainer","dataContainer","resultContainer","importSchema","getSchemaVariables","onStateChanged","handleDownload","useCallback","download","hideEmbedModal","showEmbedModal","classNames","title","element","createElement","innerHTML","Playground","rest","classList","handleDrop","fileDrop","files","file","contents","err","withRef","fn","args","Error","_ref","render","_state","getState","attachPreviewContainer"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -8,13 +8,14 @@ import { Form, getSchemaVariables } from '@bpmn-io/form-js-viewer';
8
8
  import { FormEditor } from '@bpmn-io/form-js-editor';
9
9
  import { jsxs, jsx } from 'preact/jsx-runtime';
10
10
  import { basicSetup } from 'codemirror';
11
- import { EditorView, keymap } from '@codemirror/view';
11
+ import { EditorView, keymap, placeholder } from '@codemirror/view';
12
12
  import { Facet, Compartment, EditorState } from '@codemirror/state';
13
13
  import { linter, lintGutter } from '@codemirror/lint';
14
14
  import { json, jsonParseLinter } from '@codemirror/lang-json';
15
15
  import { indentWithTab } from '@codemirror/commands';
16
16
  import { autocompletion as autocompletion$1 } from '@codemirror/autocomplete';
17
17
  import { syntaxTree } from '@codemirror/language';
18
+ import { classes } from 'min-dom';
18
19
 
19
20
  function Modal(props) {
20
21
  useEffect(() => {
@@ -110,8 +111,8 @@ function serializeValue(obj) {
110
111
  return JSON.stringify(JSON.stringify(obj)).replace(/</g, '&lt;').replace(/>/g, '&gt;');
111
112
  }
112
113
 
113
- /**
114
- * @type {Facet<import('..').Variables>} Variables
114
+ /**
115
+ * @type {Facet<import('..').Variables>} Variables
115
116
  */
116
117
  const variablesFacet = Facet.define();
117
118
 
@@ -142,25 +143,46 @@ function completions(context) {
142
143
  };
143
144
  }
144
145
 
146
+ const NO_LINT_CLS = 'fjs-no-json-lint';
147
+
148
+ /**
149
+ * @param {object} options
150
+ * @param {boolean} [options.readonly]
151
+ * @param {object} [options.contentAttributes]
152
+ * @param {string | HTMLElement} [options.placeholder]
153
+ */
145
154
  function JSONEditor(options = {}) {
146
155
  const {
147
- readonly = false,
148
- contentAttributes = {}
156
+ contentAttributes = {},
157
+ placeholder: editorPlaceholder,
158
+ readonly = false
149
159
  } = options;
150
160
  const emitter = mitt();
151
161
  let language = new Compartment().of(json());
152
162
  let tabSize = new Compartment().of(EditorState.tabSize.of(2));
163
+ let container = null;
153
164
 
154
- /**
155
- * @typedef {Array<string>} Variables
165
+ /**
166
+ * @typedef {Array<string>} Variables
156
167
  */
157
168
 
158
169
  const autocompletionConf = new Compartment();
159
170
  const linterExtension = linter(jsonParseLinter());
171
+
172
+ // this sets no-linting mode if placeholders are present
173
+ const placeholderLinterExtension = linter(view => {
174
+ const placeholders = view.dom.querySelectorAll('.cm-placeholder');
175
+ if (placeholders.length > 0) {
176
+ set(container, NO_LINT_CLS);
177
+ } else {
178
+ unset(container, NO_LINT_CLS);
179
+ }
180
+ return [];
181
+ });
160
182
  function createState(doc, extensions = [], variables = []) {
161
183
  return EditorState.create({
162
184
  doc,
163
- extensions: [basicSetup, language, tabSize, linterExtension, lintGutter(), autocompletionConf.of(variablesFacet.of(variables)), autocompletion(), keymap.of([indentWithTab]), ...extensions]
185
+ extensions: [basicSetup, language, tabSize, linterExtension, placeholderLinterExtension, lintGutter(), autocompletionConf.of(variablesFacet.of(variables)), autocompletion(), keymap.of([indentWithTab]), editorPlaceholder ? placeholder(editorPlaceholder) : [], ...extensions]
164
186
  });
165
187
  }
166
188
  function createView(readonly) {
@@ -192,8 +214,8 @@ function JSONEditor(options = {}) {
192
214
  return view.state.doc.toString();
193
215
  };
194
216
 
195
- /**
196
- * @param {Variables} variables
217
+ /**
218
+ * @param {Variables} variables
197
219
  */
198
220
  this.setVariables = function (variables) {
199
221
  view.setVariables(variables);
@@ -201,7 +223,8 @@ function JSONEditor(options = {}) {
201
223
  this.on = emitter.on;
202
224
  this.off = emitter.off;
203
225
  this.emit = emitter.emit;
204
- this.attachTo = function (container) {
226
+ this.attachTo = function (_container) {
227
+ container = _container;
205
228
  container.appendChild(view.dom);
206
229
  };
207
230
  this.destroy = function () {
@@ -212,6 +235,17 @@ function JSONEditor(options = {}) {
212
235
  };
213
236
  }
214
237
 
238
+ // helpers //////////////////////
239
+
240
+ function set(node, cls) {
241
+ const classes$1 = classes(node, document.body);
242
+ classes$1.add(cls);
243
+ }
244
+ function unset(node, cls) {
245
+ const classes$1 = classes(node, document.body);
246
+ classes$1.remove(cls);
247
+ }
248
+
215
249
  function Section(props) {
216
250
  const elements = Array.isArray(props.children) ? props.children : [props.children];
217
251
  const {
@@ -251,7 +285,8 @@ function PlaygroundRoot(props) {
251
285
  viewerProperties = {},
252
286
  editorProperties = {},
253
287
  viewerAdditionalModules = [],
254
- editorAdditionalModules = []
288
+ editorAdditionalModules = [],
289
+ propertiesPanel: propertiesPanelConfig = {}
255
290
  } = props;
256
291
  const {
257
292
  display: displayActions = true
@@ -269,7 +304,7 @@ function PlaygroundRoot(props) {
269
304
  const resultViewRef = useRef();
270
305
  const propertiesPanelRef = useRef();
271
306
  const [showEmbed, setShowEmbed] = useState(false);
272
- const [initialData] = useState(props.data || {});
307
+ const [initialData] = useState(props.data || undefined);
273
308
  const [initialSchema, setInitialSchema] = useState(props.schema);
274
309
  const [data, setData] = useState(props.data || {});
275
310
  const [schema, setSchema] = useState(props.schema);
@@ -302,7 +337,8 @@ function PlaygroundRoot(props) {
302
337
  value: toString(data),
303
338
  contentAttributes: {
304
339
  'aria-label': 'Form Input'
305
- }
340
+ },
341
+ placeholder: createDataEditorPlaceholder()
306
342
  });
307
343
  const resultView = resultViewRef.current = new JSONEditor({
308
344
  readonly: true,
@@ -326,7 +362,8 @@ function PlaygroundRoot(props) {
326
362
  parent: paletteContainerRef.current
327
363
  },
328
364
  propertiesPanel: {
329
- parent: propertiesPanelContainerRef.current
365
+ parent: propertiesPanelContainerRef.current,
366
+ ...propertiesPanelConfig
330
367
  },
331
368
  exporter: exporterConfig,
332
369
  properties: {
@@ -470,6 +507,11 @@ function PlaygroundRoot(props) {
470
507
  function toString(obj) {
471
508
  return JSON.stringify(obj, null, ' ');
472
509
  }
510
+ function createDataEditorPlaceholder() {
511
+ const element = document.createElement('p');
512
+ element.innerHTML = 'Use this panel to simulate the form input, such as process variables.\nThis helps to test the form by populating the preview.\n\n' + 'Follow the JSON format like this:\n\n' + '{\n "variable": "value"\n}';
513
+ return element;
514
+ }
473
515
 
474
516
  function Playground(options) {
475
517
  const {