@bpmn-io/feel-editor 2.5.1 → 2.6.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.js CHANGED
@@ -1,13 +1,13 @@
1
- import { snippetCompletion, completeFromList, autocompletion, closeBrackets } from '@codemirror/autocomplete';
1
+ import { snippetCompletion, autocompletion, closeBrackets } from '@codemirror/autocomplete';
2
2
  import { defaultKeymap } from '@codemirror/commands';
3
- import { syntaxHighlighting, HighlightStyle, syntaxTree, bracketMatching, indentOnInput } from '@codemirror/language';
3
+ import { syntaxTree, bracketMatching, indentOnInput } from '@codemirror/language';
4
4
  import { linter as linter$1, setDiagnosticsEffect } from '@codemirror/lint';
5
5
  import { Facet, Compartment, EditorState } from '@codemirror/state';
6
6
  import { EditorView, tooltips, keymap, placeholder } from '@codemirror/view';
7
7
  import mitt from 'mitt';
8
8
  import { cmFeelLinter } from '@bpmn-io/feel-lint';
9
- import { tags } from '@lezer/highlight';
10
- import { keywordCompletions, snippets, feel } from '@bpmn-io/lang-feel';
9
+ import { feelLight } from '@bpmn-io/cm-theme';
10
+ import { snippetCompletion as snippetCompletion$1, snippets, keywordCompletions, feel } from '@bpmn-io/lang-feel';
11
11
  import { domify } from 'min-dom';
12
12
  import { camundaBuiltins } from '@camunda/feel-builtins';
13
13
 
@@ -52,43 +52,7 @@ const baseTheme = EditorView.theme({
52
52
  }
53
53
  });
54
54
 
55
- const highlightTheme = EditorView.baseTheme({
56
- '& .variableName': {
57
- color: '#10f'
58
- },
59
- '& .number': {
60
- color: '#164'
61
- },
62
- '& .string': {
63
- color: '#a11'
64
- },
65
- '& .bool': {
66
- color: '#219'
67
- },
68
- '& .function': {
69
- color: '#aa3731',
70
- fontWeight: 'bold'
71
- },
72
- '& .control': {
73
- color: '#708'
74
- }
75
- });
76
-
77
- const syntaxClasses = syntaxHighlighting(
78
- HighlightStyle.define([
79
- { tag: tags.variableName, class: 'variableName' },
80
- { tag: tags.name, class: 'variableName' },
81
- { tag: tags.number, class: 'number' },
82
- { tag: tags.string, class: 'string' },
83
- { tag: tags.bool, class: 'bool' },
84
- { tag: tags.function(tags.variableName), class: 'function' },
85
- { tag: tags.function(tags.special(tags.variableName)), class: 'function' },
86
- { tag: tags.controlKeyword, class: 'control' },
87
- { tag: tags.operatorKeyword, class: 'control' }
88
- ])
89
- );
90
-
91
- var theme = [ baseTheme, highlightTheme, syntaxClasses ];
55
+ var theme = [ baseTheme, feelLight ];
92
56
 
93
57
  // helpers ///////////////////////////////
94
58
 
@@ -155,7 +119,7 @@ function pathExpressionCompletion({ variables }) {
155
119
  const expression = findPathExpression(nodeBefore);
156
120
 
157
121
  // if the cursor is directly after the `.`, variable starts at the cursor position
158
- const from = nodeBefore === expression ? context.pos : nodeBefore.from;
122
+ const from = (nodeBefore === expression || nodeBefore.name === '.') ? context.pos : nodeBefore.from;
159
123
 
160
124
  const path = getPath(expression, context);
161
125
 
@@ -213,12 +177,15 @@ function getPath(node, context) {
213
177
  let path = [];
214
178
 
215
179
  for (let child = node.firstChild; child; child = child.nextSibling) {
180
+ if (child.name === '.') {
181
+ continue;
182
+ }
183
+
216
184
  if (child.name === 'PathExpression') {
217
185
  path.push(...getPath(child, context));
218
186
  } else if (child.name === 'FilterExpression') {
219
187
  path.push(...getFilter(child, context));
220
- }
221
- else {
188
+ } else {
222
189
  path.push({
223
190
  name: getNodeContent(child, context),
224
191
  isList: false
@@ -266,6 +233,9 @@ function variableCompletion({ variables = [], builtins = [] }) {
266
233
 
267
234
  const options = getVariableSuggestions(variables, builtins);
268
235
 
236
+ // Allow spaces for autocomplete suggestions should be the same as feel variable/functions names (eg a-z, A-Z, _, 0-9, <space>)
237
+ const validFor = /^[\w ]*$/;
238
+
269
239
  if (!options.length) {
270
240
  return (context) => null;
271
241
  }
@@ -281,9 +251,14 @@ function variableCompletion({ variables = [], builtins = [] }) {
281
251
  const nodeBefore = syntaxTree(state).resolve(pos, -1);
282
252
 
283
253
  if (isEmpty(nodeBefore, pos)) {
254
+ if (isPathExpression(nodeBefore)) {
255
+ return null;
256
+ }
257
+
284
258
  return context.explicit ? {
285
259
  from: pos,
286
- options
260
+ options,
261
+ validFor
287
262
  } : null;
288
263
  }
289
264
 
@@ -292,9 +267,15 @@ function variableCompletion({ variables = [], builtins = [] }) {
292
267
  return null;
293
268
  }
294
269
 
270
+ // find the full typed input, to continue auto-completion after separated names
271
+ const typedInput = typeof context.matchBefore === 'function'
272
+ ? context.matchBefore(/\w[\w ]*$/)
273
+ : null;
274
+
295
275
  return {
296
- from: nodeBefore.from,
297
- options
276
+ from: typedInput ? typedInput.from : nodeBefore.from,
277
+ options,
278
+ validFor
298
279
  };
299
280
  };
300
281
  }
@@ -367,6 +348,18 @@ function createFunctionVariable(variable, boost) {
367
348
  });
368
349
  }
369
350
 
351
+ /**
352
+ * A completion source for snippets, including:
353
+ *
354
+ * * Structural snippets (for, if, function, …)
355
+ * * Literal keywords (true, false, null)
356
+ *
357
+ * @return {import('@codemirror/autocomplete').CompletionSource}
358
+ */
359
+ function snippetCompletions() {
360
+ return snippetCompletion$1(snippets);
361
+ }
362
+
370
363
  /**
371
364
  * @typedef { import('../core').Variable } Variable
372
365
  * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource
@@ -385,7 +378,7 @@ function completions({ variables = [], builtins = [] }) {
385
378
  return [
386
379
  pathExpressionCompletion({ variables }),
387
380
  variableCompletion({ variables, builtins }),
388
- completeFromList(snippets),
381
+ snippetCompletions(),
389
382
  ...keywordCompletions
390
383
  ];
391
384
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/lint/index.js","../src/theme/theme.js","../src/theme/index.js","../src/autocompletion/util.js","../src/autocompletion/pathExpression.js","../src/autocompletion/variable.js","../src/autocompletion/index.js","../src/language/index.js","../src/core/facets.js","../src/core/index.js","../src/builtins/index.js","../src/index.js"],"sourcesContent":["import { cmFeelLinter } from '@bpmn-io/feel-lint';\nimport { linter } from '@codemirror/lint';\n\nexport default [ linter(cmFeelLinter()) ];","import { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\n\nexport const baseTheme = EditorView.theme({\n '& .cm-content': {\n padding: '0px',\n },\n '& .cm-line': {\n padding: '0px',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n '& .cm-completionInfo': {\n whiteSpace: 'pre-wrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n '&.cm-editor': {\n height: '100%',\n },\n\n // Don't wrap whitespace for custom HTML\n '& .cm-completionInfo > *': {\n whiteSpace: 'normal'\n },\n '& .cm-completionInfo ul': {\n margin: 0,\n paddingLeft: '15px'\n },\n '& .cm-completionInfo pre': {\n marginBottom: 0,\n whiteSpace: 'pre-wrap'\n },\n '& .cm-completionInfo p': {\n marginTop: 0,\n },\n '& .cm-completionInfo p:not(:last-of-type)': {\n marginBottom: 0,\n }\n});\n\nexport const highlightTheme = EditorView.baseTheme({\n '& .variableName': {\n color: '#10f'\n },\n '& .number': {\n color: '#164'\n },\n '& .string': {\n color: '#a11'\n },\n '& .bool': {\n color: '#219'\n },\n '& .function': {\n color: '#aa3731',\n fontWeight: 'bold'\n },\n '& .control': {\n color: '#708'\n }\n});\n\nexport const syntaxClasses = syntaxHighlighting(\n HighlightStyle.define([\n { tag: t.variableName, class: 'variableName' },\n { tag: t.name, class: 'variableName' },\n { tag: t.number, class: 'number' },\n { tag: t.string, class: 'string' },\n { tag: t.bool, class: 'bool' },\n { tag: t.function(t.variableName), class: 'function' },\n { tag: t.function(t.special(t.variableName)), class: 'function' },\n { tag: t.controlKeyword, class: 'control' },\n { tag: t.operatorKeyword, class: 'control' }\n ])\n);","import { baseTheme, highlightTheme, syntaxClasses } from './theme.js';\n\nexport default [ baseTheme, highlightTheme, syntaxClasses ];","// helpers ///////////////////////////////\n\nfunction _isEmpty(node) {\n return node && node.from === node.to;\n}\n\n/**\n * @param {any} node\n * @param {number} pos\n *\n * @return {boolean}\n */\nexport function isEmpty(node, pos) {\n\n // For the special case of empty nodes, we need to check the current node\n // as well. The previous node could be part of another token, e.g.\n // when typing functions \"abs(\".\n const nextNode = node.nextSibling;\n\n return _isEmpty(node) || (\n nextNode && nextNode.from === pos && _isEmpty(nextNode)\n );\n}\n\nexport function isVariableName(node) {\n return node && node.parent && node.parent.name === 'VariableName';\n}\n\nexport function isPathExpression(node) {\n if (!node) {\n return false;\n }\n\n if (node.name === 'PathExpression') {\n return true;\n }\n\n return isPathExpression(node.parent);\n}\n","import { syntaxTree } from '@codemirror/language';\nimport { isPathExpression } from './util.js';\n\n/**\n * @typedef { import('../core').Variable } Variable\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n */\n\n/**\n * @param { {\n * variables?: Variable[],\n * } } options\n *\n * @return { CompletionSource }\n */\nexport function pathExpressionCompletion({ variables }) {\n\n return (context) => {\n\n const nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n if (!isPathExpression(nodeBefore)) {\n return null;\n }\n\n const expression = findPathExpression(nodeBefore);\n\n // if the cursor is directly after the `.`, variable starts at the cursor position\n const from = nodeBefore === expression ? context.pos : nodeBefore.from;\n\n const path = getPath(expression, context);\n\n let options = variables;\n for (var i = 0; i < path.length - 1; i++) {\n var childVar = options.find(val => val.name === path[i].name);\n\n if (!childVar) {\n return null;\n }\n\n // only suggest if variable type matches\n if (\n childVar.isList !== 'optional' &&\n !!childVar.isList !== path[i].isList\n ) {\n return null;\n }\n\n options = childVar.entries;\n }\n\n if (!options) return null;\n\n const completionOptions = options.map(option => (\n {\n label: option.name,\n type: 'variable',\n info: option.info,\n detail: option.detail\n }));\n\n const result = {\n from: from,\n options: completionOptions\n };\n\n return result;\n };\n}\n\n\nfunction findPathExpression(node) {\n while (node) {\n if (node.name === 'PathExpression') {\n return node;\n }\n node = node.parent;\n }\n}\n\n// parses the path expression into a list of variable names with type information\n// e.g. foo[0].bar => [ { name: 'foo', isList: true }, { name: 'bar', isList: false } ]\nfunction getPath(node, context) {\n let path = [];\n\n for (let child = node.firstChild; child; child = child.nextSibling) {\n if (child.name === 'PathExpression') {\n path.push(...getPath(child, context));\n } else if (child.name === 'FilterExpression') {\n path.push(...getFilter(child, context));\n }\n else {\n path.push({\n name: getNodeContent(child, context),\n isList: false\n });\n }\n }\n return path;\n}\n\nfunction getFilter(node, context) {\n const list = node.firstChild;\n\n if (list.name === 'PathExpression') {\n const path = getPath(list, context);\n const last = path[path.length - 1];\n last.isList = true;\n\n return path;\n }\n\n return [ {\n name: getNodeContent(list, context),\n isList: true\n } ];\n}\n\nfunction getNodeContent(node, context) {\n return context.state.sliceDoc(node.from, node.to);\n}","import { syntaxTree } from '@codemirror/language';\nimport { snippetCompletion } from '@codemirror/autocomplete';\nimport { isEmpty, isPathExpression, isVariableName } from './util.js';\n\n/**\n * @typedef { import('../core').Variable } Variable\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n */\n\n/**\n * @param { {\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } options\n *\n * @return { CompletionSource }\n */\nexport function variableCompletion({ variables = [], builtins = [] }) {\n\n const options = getVariableSuggestions(variables, builtins);\n\n if (!options.length) {\n return (context) => null;\n }\n\n return (context) => {\n\n const {\n pos,\n state\n } = context;\n\n // in most cases, use what is typed before the cursor\n const nodeBefore = syntaxTree(state).resolve(pos, -1);\n\n if (isEmpty(nodeBefore, pos)) {\n return context.explicit ? {\n from: pos,\n options\n } : null;\n }\n\n // only auto-complete variables\n if (!isVariableName(nodeBefore) || isPathExpression(nodeBefore)) {\n return null;\n }\n\n return {\n from: nodeBefore.from,\n options\n };\n };\n}\n\n/**\n * @param { Variable[] } variables\n * @param { Variable[] } builtins\n *\n * @returns {import('@codemirror/autocomplete').Completion[]}\n */\nfunction getVariableSuggestions(variables, builtins) {\n return [].concat(\n variables.map(v => createVariableSuggestion(v)),\n builtins.map(b => createVariableSuggestion(b))\n );\n}\n\n/**\n * @param {import('..').Variable} variable\n * @param {number} [boost]\n *\n * @returns {import('@codemirror/autocomplete').Completion}\n */\nfunction createVariableSuggestion(variable, boost) {\n if (variable.type === 'function') {\n return createFunctionVariable(variable, boost);\n }\n\n return {\n label: variable.name,\n type: 'variable',\n info: variable.info,\n detail: variable.detail,\n boost\n };\n}\n\n/**\n * @param {import('..').Variable} variable\n * @param {number} boost\n *\n * @returns {import('@codemirror/autocomplete').Completion}\n */\nfunction createFunctionVariable(variable, boost) {\n const {\n name,\n info,\n detail,\n params = []\n } = variable;\n\n const paramsWithNames = params.map(({ name, type }, index) => ({\n name: name || `param ${index + 1}`,\n type\n }));\n\n const template = `${name}(${paramsWithNames.map(p => '${' + p.name + '}').join(', ')})`;\n\n const paramsSignature = paramsWithNames.map(({ name, type }) => (\n type ? `${name}: ${type}` : name\n )).join(', ');\n const label = `${name}(${paramsSignature})`;\n\n return snippetCompletion(template, {\n label,\n type: 'function',\n info,\n detail,\n boost\n });\n}\n","import { snippets, keywordCompletions } from '@bpmn-io/lang-feel';\nimport { completeFromList } from '@codemirror/autocomplete';\n\nimport { pathExpressionCompletion } from './pathExpression.js';\nimport { variableCompletion } from './variable.js';\n\n/**\n * @typedef { import('../core').Variable } Variable\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n */\n\n/**\n * @param { {\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } options\n *\n * @return { CompletionSource[] }\n */\nexport function completions({ variables = [], builtins = [] }) {\n\n return [\n pathExpressionCompletion({ variables }),\n variableCompletion({ variables, builtins }),\n completeFromList(snippets),\n ...keywordCompletions\n ];\n}","import { feel } from '@bpmn-io/lang-feel';\n\n/**\n * @typedef { 'expression' | 'unaryTests' } Dialect\n */\n\n/**\n * @typedef { 'camunda' | undefined } ParserDialect\n */\n\n/**\n * @param { {\n * dialect?: Dialect,\n * parserDialect?: ParserDialect,\n * context?: Record<string, any>,\n * completions?: import('@codemirror/autocomplete').CompletionSource[]\n * } } options\n *\n * @return { import('@codemirror/language').LanguageSupport }\n */\nexport function language(options) {\n return feel(options);\n}\n\n/**\n * @param { import('../core').Variable[] } variables\n *\n * @return {Record<string, any>}\n */\nexport function createContext(variables) {\n return variables.slice().reverse().reduce((context, builtin) => {\n context[builtin.name] = () => {};\n\n return context;\n }, {});\n}","import { Facet } from '@codemirror/state';\n\n/**\n * @typedef { import('../language').Dialect } Dialect\n * @typedef { import('../language').ParserDialect } ParserDialect\n * @typedef { import('..').Variable } Variable\n */\n\n/**\n * @type {Facet<Variable[]>}\n */\nexport const builtinsFacet = Facet.define();\n\n/**\n * @type {Facet<Variable[]>}\n */\nexport const variablesFacet = Facet.define();\n\n/**\n * @type {Facet<Dialect>}\n */\nexport const dialectFacet = Facet.define();\n\n/**\n * @type {Facet<ParserDialect>}\n */\nexport const parserDialectFacet = Facet.define();\n\n","import { completions as feelCompletions } from '../autocompletion/index.js';\n\nimport { createContext, language } from '../language/index.js';\n\nimport {\n variablesFacet,\n builtinsFacet,\n parserDialectFacet,\n dialectFacet\n} from './facets.js';\n\n\n/**\n * @typedef {object} Variable\n * @property {string} name name or key of the variable\n * @property {string | (() => HTMLElement)} [info] short information about the variable, e.g. type\n * @property {string} [detail] longer description of the variable content\n * @property {boolean|'optional'} [isList] whether the variable is a list\n * @property {Array<Variable>} [entries] array of child variables if the variable is a context or list\n * @property {'function'|'variable'} [type] type of the variable\n * @property {Array<{name: string, type?: string}>} [params] function parameters\n */\n\n/**\n * @typedef { {\n * dialect?: import('../language').Dialect,\n * parserDialect?: import('../language').ParserDialect,\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } CoreConfig\n *\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n * @typedef { import('@codemirror/state').Extension } Extension\n */\n\n/**\n * @param { CoreConfig & { completions?: CompletionSource[] } } config\n *\n * @return { Extension }\n */\nexport function configure({\n dialect = 'expression',\n parserDialect,\n variables = [],\n builtins = [],\n completions = feelCompletions({ builtins, variables })\n}) {\n\n const context = createContext([ ...variables, ...builtins ]);\n\n return [\n dialectFacet.of(dialect),\n builtinsFacet.of(builtins),\n variablesFacet.of(variables),\n parserDialectFacet.of(parserDialect),\n language({\n dialect,\n parserDialect,\n context,\n completions\n })\n ];\n}\n\n/**\n * @param {import('@codemirror/state').EditorState } state\n *\n * @return { CoreConfig }\n */\nexport function get(state) {\n\n const builtins = state.facet(builtinsFacet)[0];\n const variables = state.facet(variablesFacet)[0];\n const dialect = state.facet(dialectFacet)[0];\n const parserDialect = state.facet(parserDialectFacet)[0];\n\n return {\n builtins,\n variables,\n dialect,\n parserDialect\n };\n}","import { domify } from 'min-dom';\nimport { camundaBuiltins } from '@camunda/feel-builtins';\n\nexport const domifiedBuiltins = camundaBuiltins.map(builtin => ({\n ...builtin,\n info: () => domify(builtin.info),\n}));","import { autocompletion, closeBrackets } from '@codemirror/autocomplete';\nimport { defaultKeymap } from '@codemirror/commands';\nimport { bracketMatching, indentOnInput } from '@codemirror/language';\nimport { setDiagnosticsEffect } from '@codemirror/lint';\nimport { Compartment, EditorState } from '@codemirror/state';\nimport { EditorView, keymap, placeholder as placeholderExt, tooltips } from '@codemirror/view';\n\nimport mitt from 'mitt';\n\nimport linter from './lint/index.js';\nimport theme from './theme/index.js';\n\nimport * as Core from './core/index.js';\n\nimport { domifiedBuiltins } from './builtins/index.js';\n\n/**\n * @typedef { import('./core').Variable } Variable\n */\n\n/**\n * @typedef { import('./language').Dialect } Dialect\n * @typedef { import('./language').ParserDialect } ParserDialect\n */\n\nconst coreConf = new Compartment();\nconst placeholderConf = new Compartment();\n\n\n/**\n * Creates a FEEL editor in the supplied container\n *\n * @param {Object} config\n * @param {DOMNode} config.container\n * @param {Extension[]} [config.extensions]\n * @param {Dialect} [config.dialect='expression']\n * @param {ParserDialect} [config.parserDialect]\n * @param {DOMNode|String} [config.tooltipContainer]\n * @param {Function} [config.onChange]\n * @param {(event: KeyboardEvent, view: import('@codemirror/view').EditorView) => boolean | void} [config.onKeyDown]\n * @param {Function} [config.onLint]\n * @param {Boolean} [config.readOnly]\n * @param {String} [config.value]\n * @param {Variable[]} [config.variables]\n * @param {Variable[]} [config.builtins]\n * @param {Object} [config.contentAttributes]\n * @param {String} [config.placeholder]\n */\nexport default function FeelEditor({\n extensions: editorExtensions = [],\n dialect = 'expression',\n parserDialect,\n container,\n contentAttributes = {},\n tooltipContainer,\n onChange = () => {},\n onKeyDown = () => {},\n onLint = () => {},\n placeholder = '',\n readOnly = false,\n value = '',\n builtins = domifiedBuiltins,\n variables = []\n}) {\n\n this._events = mitt();\n\n const changeHandler = EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChange(update.state.doc.toString());\n }\n });\n\n const lintHandler = EditorView.updateListener.of((update) => {\n const diagnosticEffects = update.transactions\n .flatMap(t => t.effects)\n .filter(effect => effect.is(setDiagnosticsEffect));\n\n if (!diagnosticEffects.length) {\n return;\n }\n\n const diagnostics = diagnosticEffects.flatMap(effect => effect.value);\n\n this._events.emit('lint', { diagnostics });\n });\n\n const keyHandler = EditorView.domEventObservers(\n {\n keydown: onKeyDown\n }\n );\n\n if (typeof tooltipContainer === 'string') {\n tooltipContainer = /** @type {HTMLElement} */ (document.querySelector(tooltipContainer));\n }\n\n const tooltipLayout = tooltipContainer ? tooltips({\n tooltipSpace: function() {\n return /** @type {HTMLElement} */ (tooltipContainer).getBoundingClientRect();\n }\n }) : [];\n\n const extensions = [\n autocompletion(),\n coreConf.of(Core.configure({\n dialect,\n builtins,\n variables,\n parserDialect\n })),\n bracketMatching(),\n indentOnInput(),\n closeBrackets(),\n EditorView.contentAttributes.of(contentAttributes),\n changeHandler,\n keyHandler,\n keymap.of([\n ...defaultKeymap,\n ]),\n linter,\n lintHandler,\n tooltipLayout,\n placeholderConf.of(placeholderExt(placeholder)),\n theme,\n ...editorExtensions\n ];\n\n if (readOnly) {\n extensions.push(EditorView.editable.of(false));\n }\n\n this.on('lint', ({ diagnostics }) => onLint(diagnostics));\n\n this._cmEditor = new EditorView({\n state: EditorState.create({\n doc: value,\n extensions\n }),\n parent: container\n });\n\n return this;\n}\n\n/**\n * Replaces the content of the Editor\n *\n * @param {String} value\n */\nFeelEditor.prototype.setValue = function(value) {\n this._cmEditor.dispatch({\n changes: {\n from: 0,\n to: this._cmEditor.state.doc.length,\n insert: value,\n }\n });\n};\n\n/**\n * Sets the focus in the editor.\n */\nFeelEditor.prototype.focus = function(position) {\n const cmEditor = this._cmEditor;\n\n // the Codemirror `focus` method always calls `focus` with `preventScroll`,\n // so we have to focus + scroll manually\n cmEditor.contentDOM.focus();\n cmEditor.focus();\n\n if (typeof position === 'number') {\n const end = cmEditor.state.doc.length;\n cmEditor.dispatch({ selection: { anchor: position <= end ? position : end } });\n }\n};\n\n/**\n * @param {string} eventName\n * @param {(event) => any} callback\n */\nFeelEditor.prototype.on = function(eventName, callback) {\n this._events.on(eventName, callback);\n};\n\n/**\n * @param {string} eventName\n * @param {(event) => any} [callback]\n */\nFeelEditor.prototype.off = function(eventName, callback) {\n this._events.off(eventName, callback);\n};\n\n/**\n * Returns the current selection ranges. If no text is selected, a single\n * range with the start and end index at the cursor position will be returned.\n *\n * @returns {import('@codemirror/state').EditorSelection} selection - Selection object with ranges array\n */\nFeelEditor.prototype.getSelection = function() {\n return this._cmEditor.state.selection;\n};\n\n/**\n * Set variables to be used for autocompletion.\n *\n * @param {Variable[]} variables\n */\nFeelEditor.prototype.setVariables = function(variables) {\n\n const config = Core.get(this._cmEditor.state);\n\n this._cmEditor.dispatch({\n effects: [\n coreConf.reconfigure(Core.configure({\n ...config,\n variables\n }))\n ]\n });\n};\n\n/**\n * Update placeholder text.\n *\n * @param {string} placeholder\n */\nFeelEditor.prototype.setPlaceholder = function(placeholder) {\n this._cmEditor.dispatch({\n effects: placeholderConf.reconfigure(placeholderExt(placeholder))\n });\n};"],"names":["linter","t","completions","feelCompletions","placeholder","Core.configure","placeholderExt","Core.get"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/lint/index.js","../src/theme/theme.js","../src/theme/index.js","../src/autocompletion/util.js","../src/autocompletion/pathExpression.js","../src/autocompletion/variable.js","../src/autocompletion/snippets.js","../src/autocompletion/index.js","../src/language/index.js","../src/core/facets.js","../src/core/index.js","../src/builtins/index.js","../src/index.js"],"sourcesContent":["import { cmFeelLinter } from '@bpmn-io/feel-lint';\nimport { linter } from '@codemirror/lint';\n\nexport default [ linter(cmFeelLinter()) ];","import { EditorView } from '@codemirror/view';\n\nexport const baseTheme = EditorView.theme({\n '& .cm-content': {\n padding: '0px',\n },\n '& .cm-line': {\n padding: '0px',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n '& .cm-completionInfo': {\n whiteSpace: 'pre-wrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n '&.cm-editor': {\n height: '100%',\n },\n\n // Don't wrap whitespace for custom HTML\n '& .cm-completionInfo > *': {\n whiteSpace: 'normal'\n },\n '& .cm-completionInfo ul': {\n margin: 0,\n paddingLeft: '15px'\n },\n '& .cm-completionInfo pre': {\n marginBottom: 0,\n whiteSpace: 'pre-wrap'\n },\n '& .cm-completionInfo p': {\n marginTop: 0,\n },\n '& .cm-completionInfo p:not(:last-of-type)': {\n marginBottom: 0,\n }\n});","import { feelLight } from '@bpmn-io/cm-theme';\n\nimport { baseTheme } from './theme.js';\n\nexport default [ baseTheme, feelLight ];","// helpers ///////////////////////////////\n\nfunction _isEmpty(node) {\n return node && node.from === node.to;\n}\n\n/**\n * @param {any} node\n * @param {number} pos\n *\n * @return {boolean}\n */\nexport function isEmpty(node, pos) {\n\n // For the special case of empty nodes, we need to check the current node\n // as well. The previous node could be part of another token, e.g.\n // when typing functions \"abs(\".\n const nextNode = node.nextSibling;\n\n return _isEmpty(node) || (\n nextNode && nextNode.from === pos && _isEmpty(nextNode)\n );\n}\n\nexport function isVariableName(node) {\n return node && node.parent && node.parent.name === 'VariableName';\n}\n\nexport function isPathExpression(node) {\n if (!node) {\n return false;\n }\n\n if (node.name === 'PathExpression') {\n return true;\n }\n\n return isPathExpression(node.parent);\n}\n","import { syntaxTree } from '@codemirror/language';\nimport { isPathExpression } from './util.js';\n\n/**\n * @typedef { import('../core').Variable } Variable\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n */\n\n/**\n * @param { {\n * variables?: Variable[],\n * } } options\n *\n * @return { CompletionSource }\n */\nexport function pathExpressionCompletion({ variables }) {\n\n return (context) => {\n\n const nodeBefore = syntaxTree(context.state).resolve(context.pos, -1);\n\n if (!isPathExpression(nodeBefore)) {\n return null;\n }\n\n const expression = findPathExpression(nodeBefore);\n\n // if the cursor is directly after the `.`, variable starts at the cursor position\n const from = (nodeBefore === expression || nodeBefore.name === '.') ? context.pos : nodeBefore.from;\n\n const path = getPath(expression, context);\n\n let options = variables;\n for (var i = 0; i < path.length - 1; i++) {\n var childVar = options.find(val => val.name === path[i].name);\n\n if (!childVar) {\n return null;\n }\n\n // only suggest if variable type matches\n if (\n childVar.isList !== 'optional' &&\n !!childVar.isList !== path[i].isList\n ) {\n return null;\n }\n\n options = childVar.entries;\n }\n\n if (!options) return null;\n\n const completionOptions = options.map(option => (\n {\n label: option.name,\n type: 'variable',\n info: option.info,\n detail: option.detail\n }));\n\n const result = {\n from: from,\n options: completionOptions\n };\n\n return result;\n };\n}\n\n\nfunction findPathExpression(node) {\n while (node) {\n if (node.name === 'PathExpression') {\n return node;\n }\n node = node.parent;\n }\n}\n\n// parses the path expression into a list of variable names with type information\n// e.g. foo[0].bar => [ { name: 'foo', isList: true }, { name: 'bar', isList: false } ]\nfunction getPath(node, context) {\n let path = [];\n\n for (let child = node.firstChild; child; child = child.nextSibling) {\n if (child.name === '.') {\n continue;\n }\n\n if (child.name === 'PathExpression') {\n path.push(...getPath(child, context));\n } else if (child.name === 'FilterExpression') {\n path.push(...getFilter(child, context));\n } else {\n path.push({\n name: getNodeContent(child, context),\n isList: false\n });\n }\n }\n return path;\n}\n\nfunction getFilter(node, context) {\n const list = node.firstChild;\n\n if (list.name === 'PathExpression') {\n const path = getPath(list, context);\n const last = path[path.length - 1];\n last.isList = true;\n\n return path;\n }\n\n return [ {\n name: getNodeContent(list, context),\n isList: true\n } ];\n}\n\nfunction getNodeContent(node, context) {\n return context.state.sliceDoc(node.from, node.to);\n}","import { syntaxTree } from '@codemirror/language';\nimport { snippetCompletion } from '@codemirror/autocomplete';\nimport { isEmpty, isPathExpression, isVariableName } from './util.js';\n\n/**\n * @typedef { import('../core').Variable } Variable\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n */\n\n/**\n * @param { {\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } options\n *\n * @return { CompletionSource }\n */\nexport function variableCompletion({ variables = [], builtins = [] }) {\n\n const options = getVariableSuggestions(variables, builtins);\n\n // Allow spaces for autocomplete suggestions should be the same as feel variable/functions names (eg a-z, A-Z, _, 0-9, <space>)\n const validFor = /^[\\w ]*$/;\n\n if (!options.length) {\n return (context) => null;\n }\n\n return (context) => {\n\n const {\n pos,\n state\n } = context;\n\n // in most cases, use what is typed before the cursor\n const nodeBefore = syntaxTree(state).resolve(pos, -1);\n\n if (isEmpty(nodeBefore, pos)) {\n if (isPathExpression(nodeBefore)) {\n return null;\n }\n\n return context.explicit ? {\n from: pos,\n options,\n validFor\n } : null;\n }\n\n // only auto-complete variables\n if (!isVariableName(nodeBefore) || isPathExpression(nodeBefore)) {\n return null;\n }\n\n // find the full typed input, to continue auto-completion after separated names\n const typedInput = typeof context.matchBefore === 'function'\n ? context.matchBefore(/\\w[\\w ]*$/)\n : null;\n\n return {\n from: typedInput ? typedInput.from : nodeBefore.from,\n options,\n validFor\n };\n };\n}\n\n/**\n * @param { Variable[] } variables\n * @param { Variable[] } builtins\n *\n * @returns {import('@codemirror/autocomplete').Completion[]}\n */\nfunction getVariableSuggestions(variables, builtins) {\n return [].concat(\n variables.map(v => createVariableSuggestion(v)),\n builtins.map(b => createVariableSuggestion(b))\n );\n}\n\n/**\n * @param {import('..').Variable} variable\n * @param {number} [boost]\n *\n * @returns {import('@codemirror/autocomplete').Completion}\n */\nfunction createVariableSuggestion(variable, boost) {\n if (variable.type === 'function') {\n return createFunctionVariable(variable, boost);\n }\n\n return {\n label: variable.name,\n type: 'variable',\n info: variable.info,\n detail: variable.detail,\n boost\n };\n}\n\n/**\n * @param {import('..').Variable} variable\n * @param {number} boost\n *\n * @returns {import('@codemirror/autocomplete').Completion}\n */\nfunction createFunctionVariable(variable, boost) {\n const {\n name,\n info,\n detail,\n params = []\n } = variable;\n\n const paramsWithNames = params.map(({ name, type }, index) => ({\n name: name || `param ${index + 1}`,\n type\n }));\n\n const template = `${name}(${paramsWithNames.map(p => '${' + p.name + '}').join(', ')})`;\n\n const paramsSignature = paramsWithNames.map(({ name, type }) => (\n type ? `${name}: ${type}` : name\n )).join(', ');\n const label = `${name}(${paramsSignature})`;\n\n return snippetCompletion(template, {\n label,\n type: 'function',\n info,\n detail,\n boost\n });\n}\n","import { snippets, snippetCompletion } from '@bpmn-io/lang-feel';\n\n/**\n * A completion source for snippets, including:\n *\n * * Structural snippets (for, if, function, …)\n * * Literal keywords (true, false, null)\n *\n * @return {import('@codemirror/autocomplete').CompletionSource}\n */\nexport function snippetCompletions() {\n return snippetCompletion(snippets);\n}","import { keywordCompletions } from '@bpmn-io/lang-feel';\nimport { pathExpressionCompletion } from './pathExpression.js';\nimport { variableCompletion } from './variable.js';\nimport { snippetCompletions } from './snippets.js';\n\n/**\n * @typedef { import('../core').Variable } Variable\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n */\n\n/**\n * @param { {\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } options\n *\n * @return { CompletionSource[] }\n */\nexport function completions({ variables = [], builtins = [] }) {\n\n return [\n pathExpressionCompletion({ variables }),\n variableCompletion({ variables, builtins }),\n snippetCompletions(),\n ...keywordCompletions\n ];\n}","import { feel } from '@bpmn-io/lang-feel';\n\n/**\n * @typedef { 'expression' | 'unaryTests' } Dialect\n */\n\n/**\n * @typedef { 'camunda' | undefined } ParserDialect\n */\n\n/**\n * @param { {\n * dialect?: Dialect,\n * parserDialect?: ParserDialect,\n * context?: Record<string, any>,\n * completions?: import('@codemirror/autocomplete').CompletionSource[]\n * } } options\n *\n * @return { import('@codemirror/language').LanguageSupport }\n */\nexport function language(options) {\n return feel(options);\n}\n\n/**\n * @param { import('../core').Variable[] } variables\n *\n * @return {Record<string, any>}\n */\nexport function createContext(variables) {\n return variables.slice().reverse().reduce((context, builtin) => {\n context[builtin.name] = () => {};\n\n return context;\n }, {});\n}","import { Facet } from '@codemirror/state';\n\n/**\n * @typedef { import('../language').Dialect } Dialect\n * @typedef { import('../language').ParserDialect } ParserDialect\n * @typedef { import('..').Variable } Variable\n */\n\n/**\n * @type {Facet<Variable[]>}\n */\nexport const builtinsFacet = Facet.define();\n\n/**\n * @type {Facet<Variable[]>}\n */\nexport const variablesFacet = Facet.define();\n\n/**\n * @type {Facet<Dialect>}\n */\nexport const dialectFacet = Facet.define();\n\n/**\n * @type {Facet<ParserDialect>}\n */\nexport const parserDialectFacet = Facet.define();\n\n","import { completions as feelCompletions } from '../autocompletion/index.js';\n\nimport { createContext, language } from '../language/index.js';\n\nimport {\n variablesFacet,\n builtinsFacet,\n parserDialectFacet,\n dialectFacet\n} from './facets.js';\n\n\n/**\n * @typedef {object} Variable\n * @property {string} name name or key of the variable\n * @property {string | (() => HTMLElement)} [info] short information about the variable, e.g. type\n * @property {string} [detail] longer description of the variable content\n * @property {boolean|'optional'} [isList] whether the variable is a list\n * @property {Array<Variable>} [entries] array of child variables if the variable is a context or list\n * @property {'function'|'variable'} [type] type of the variable\n * @property {Array<{name: string, type?: string}>} [params] function parameters\n */\n\n/**\n * @typedef { {\n * dialect?: import('../language').Dialect,\n * parserDialect?: import('../language').ParserDialect,\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } CoreConfig\n *\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n * @typedef { import('@codemirror/state').Extension } Extension\n */\n\n/**\n * @param { CoreConfig & { completions?: CompletionSource[] } } config\n *\n * @return { Extension }\n */\nexport function configure({\n dialect = 'expression',\n parserDialect,\n variables = [],\n builtins = [],\n completions = feelCompletions({ builtins, variables })\n}) {\n\n const context = createContext([ ...variables, ...builtins ]);\n\n return [\n dialectFacet.of(dialect),\n builtinsFacet.of(builtins),\n variablesFacet.of(variables),\n parserDialectFacet.of(parserDialect),\n language({\n dialect,\n parserDialect,\n context,\n completions\n })\n ];\n}\n\n/**\n * @param {import('@codemirror/state').EditorState } state\n *\n * @return { CoreConfig }\n */\nexport function get(state) {\n\n const builtins = state.facet(builtinsFacet)[0];\n const variables = state.facet(variablesFacet)[0];\n const dialect = state.facet(dialectFacet)[0];\n const parserDialect = state.facet(parserDialectFacet)[0];\n\n return {\n builtins,\n variables,\n dialect,\n parserDialect\n };\n}","import { domify } from 'min-dom';\nimport { camundaBuiltins } from '@camunda/feel-builtins';\n\nexport const domifiedBuiltins = camundaBuiltins.map(builtin => ({\n ...builtin,\n info: () => domify(builtin.info),\n}));","import { autocompletion, closeBrackets } from '@codemirror/autocomplete';\nimport { defaultKeymap } from '@codemirror/commands';\nimport { bracketMatching, indentOnInput } from '@codemirror/language';\nimport { setDiagnosticsEffect } from '@codemirror/lint';\nimport { Compartment, EditorState } from '@codemirror/state';\nimport { EditorView, keymap, placeholder as placeholderExt, tooltips } from '@codemirror/view';\n\nimport mitt from 'mitt';\n\nimport linter from './lint/index.js';\nimport theme from './theme/index.js';\n\nimport * as Core from './core/index.js';\n\nimport { domifiedBuiltins } from './builtins/index.js';\n\n/**\n * @typedef { import('./core').Variable } Variable\n */\n\n/**\n * @typedef { import('./language').Dialect } Dialect\n * @typedef { import('./language').ParserDialect } ParserDialect\n */\n\nconst coreConf = new Compartment();\nconst placeholderConf = new Compartment();\n\n\n/**\n * Creates a FEEL editor in the supplied container\n *\n * @param {Object} config\n * @param {DOMNode} config.container\n * @param {Extension[]} [config.extensions]\n * @param {Dialect} [config.dialect='expression']\n * @param {ParserDialect} [config.parserDialect]\n * @param {DOMNode|String} [config.tooltipContainer]\n * @param {Function} [config.onChange]\n * @param {(event: KeyboardEvent, view: import('@codemirror/view').EditorView) => boolean | void} [config.onKeyDown]\n * @param {Function} [config.onLint]\n * @param {Boolean} [config.readOnly]\n * @param {String} [config.value]\n * @param {Variable[]} [config.variables]\n * @param {Variable[]} [config.builtins]\n * @param {Object} [config.contentAttributes]\n * @param {String} [config.placeholder]\n */\nexport default function FeelEditor({\n extensions: editorExtensions = [],\n dialect = 'expression',\n parserDialect,\n container,\n contentAttributes = {},\n tooltipContainer,\n onChange = () => {},\n onKeyDown = () => {},\n onLint = () => {},\n placeholder = '',\n readOnly = false,\n value = '',\n builtins = domifiedBuiltins,\n variables = []\n}) {\n\n this._events = mitt();\n\n const changeHandler = EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChange(update.state.doc.toString());\n }\n });\n\n const lintHandler = EditorView.updateListener.of((update) => {\n const diagnosticEffects = update.transactions\n .flatMap(t => t.effects)\n .filter(effect => effect.is(setDiagnosticsEffect));\n\n if (!diagnosticEffects.length) {\n return;\n }\n\n const diagnostics = diagnosticEffects.flatMap(effect => effect.value);\n\n this._events.emit('lint', { diagnostics });\n });\n\n const keyHandler = EditorView.domEventObservers(\n {\n keydown: onKeyDown\n }\n );\n\n if (typeof tooltipContainer === 'string') {\n tooltipContainer = /** @type {HTMLElement} */ (document.querySelector(tooltipContainer));\n }\n\n const tooltipLayout = tooltipContainer ? tooltips({\n tooltipSpace: function() {\n return /** @type {HTMLElement} */ (tooltipContainer).getBoundingClientRect();\n }\n }) : [];\n\n const extensions = [\n autocompletion(),\n coreConf.of(Core.configure({\n dialect,\n builtins,\n variables,\n parserDialect\n })),\n bracketMatching(),\n indentOnInput(),\n closeBrackets(),\n EditorView.contentAttributes.of(contentAttributes),\n changeHandler,\n keyHandler,\n keymap.of([\n ...defaultKeymap,\n ]),\n linter,\n lintHandler,\n tooltipLayout,\n placeholderConf.of(placeholderExt(placeholder)),\n theme,\n ...editorExtensions\n ];\n\n if (readOnly) {\n extensions.push(EditorView.editable.of(false));\n }\n\n this.on('lint', ({ diagnostics }) => onLint(diagnostics));\n\n this._cmEditor = new EditorView({\n state: EditorState.create({\n doc: value,\n extensions\n }),\n parent: container\n });\n\n return this;\n}\n\n/**\n * Replaces the content of the Editor\n *\n * @param {String} value\n */\nFeelEditor.prototype.setValue = function(value) {\n this._cmEditor.dispatch({\n changes: {\n from: 0,\n to: this._cmEditor.state.doc.length,\n insert: value,\n }\n });\n};\n\n/**\n * Sets the focus in the editor.\n */\nFeelEditor.prototype.focus = function(position) {\n const cmEditor = this._cmEditor;\n\n // the Codemirror `focus` method always calls `focus` with `preventScroll`,\n // so we have to focus + scroll manually\n cmEditor.contentDOM.focus();\n cmEditor.focus();\n\n if (typeof position === 'number') {\n const end = cmEditor.state.doc.length;\n cmEditor.dispatch({ selection: { anchor: position <= end ? position : end } });\n }\n};\n\n/**\n * @param {string} eventName\n * @param {(event) => any} callback\n */\nFeelEditor.prototype.on = function(eventName, callback) {\n this._events.on(eventName, callback);\n};\n\n/**\n * @param {string} eventName\n * @param {(event) => any} [callback]\n */\nFeelEditor.prototype.off = function(eventName, callback) {\n this._events.off(eventName, callback);\n};\n\n/**\n * Returns the current selection ranges. If no text is selected, a single\n * range with the start and end index at the cursor position will be returned.\n *\n * @returns {import('@codemirror/state').EditorSelection} selection - Selection object with ranges array\n */\nFeelEditor.prototype.getSelection = function() {\n return this._cmEditor.state.selection;\n};\n\n/**\n * Set variables to be used for autocompletion.\n *\n * @param {Variable[]} variables\n */\nFeelEditor.prototype.setVariables = function(variables) {\n\n const config = Core.get(this._cmEditor.state);\n\n this._cmEditor.dispatch({\n effects: [\n coreConf.reconfigure(Core.configure({\n ...config,\n variables\n }))\n ]\n });\n};\n\n/**\n * Update placeholder text.\n *\n * @param {string} placeholder\n */\nFeelEditor.prototype.setPlaceholder = function(placeholder) {\n this._cmEditor.dispatch({\n effects: placeholderConf.reconfigure(placeholderExt(placeholder))\n });\n};"],"names":["linter","snippetCompletion","completions","feelCompletions","placeholder","Core.configure","placeholderExt","Core.get"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bpmn-io/feel-editor",
3
- "version": "2.5.1",
3
+ "version": "2.6.0",
4
4
  "description": "Editor for FEEL expressions.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -54,21 +54,22 @@
54
54
  "license": "MIT",
55
55
  "dependencies": {
56
56
  "@bpmn-io/feel-lint": "^3.1.0",
57
- "@bpmn-io/lang-feel": "^3.0.0",
58
- "@camunda/feel-builtins": "^1.0.0",
57
+ "@bpmn-io/lang-feel": "^4.0.2",
58
+ "@camunda/feel-builtins": "^1.2.0",
59
59
  "@codemirror/autocomplete": "^6.20.0",
60
- "@codemirror/commands": "^6.10.2",
60
+ "@codemirror/commands": "^6.10.3",
61
61
  "@codemirror/language": "^6.11.3",
62
- "@codemirror/lint": "^6.9.3",
63
- "@codemirror/state": "^6.5.4",
64
- "@codemirror/view": "^6.39.13",
62
+ "@codemirror/lint": "^6.9.7",
63
+ "@codemirror/state": "^6.6.0",
64
+ "@codemirror/view": "^6.43.1",
65
65
  "@lezer/highlight": "^1.2.3",
66
- "min-dom": "^5.2.0",
66
+ "min-dom": "^5.3.0",
67
67
  "mitt": "^3.0.1"
68
68
  },
69
69
  "devDependencies": {
70
- "@babel/core": "^7.26.0",
71
- "@rollup/plugin-commonjs": "^28.0.2",
70
+ "@babel/core": "^7.29.7",
71
+ "@bpmn-io/cm-theme": "^0.2.0",
72
+ "@rollup/plugin-commonjs": "^29.0.3",
72
73
  "@rollup/plugin-json": "^6.1.0",
73
74
  "@testing-library/dom": "^10.4.0",
74
75
  "@testing-library/user-event": "^14.6.1",
@@ -76,12 +77,12 @@
76
77
  "@types/mocha": "^10.0.10",
77
78
  "@types/sinon": "^21.0.0",
78
79
  "@types/sinon-chai": "^4.0.0",
79
- "babel-loader": "^9.2.1",
80
- "babel-plugin-istanbul": "^7.0.0",
81
- "chai": "^6.2.1",
82
- "cross-env": "^7.0.3",
83
- "eslint": "^9.39.1",
84
- "eslint-plugin-bpmn-io": "^2.2.0",
80
+ "babel-loader": "^10.0.0",
81
+ "babel-plugin-istanbul": "^8.0.0",
82
+ "chai": "^6.2.2",
83
+ "cross-env": "^10.0.0",
84
+ "eslint": "^9.39.4",
85
+ "eslint-plugin-bpmn-io": "^2.3.1",
85
86
  "karma": "^6.4.4",
86
87
  "karma-chrome-launcher-2": "^3.3.0",
87
88
  "karma-coverage": "^2.2.1",
@@ -90,14 +91,16 @@
90
91
  "karma-firefox-launcher": "^2.1.3",
91
92
  "karma-mocha": "^2.0.1",
92
93
  "karma-webpack": "^5.0.1",
93
- "mocha": "^11.7.5",
94
+ "mocha": "^11.7.6",
94
95
  "mocha-test-container-support": "^0.2.0",
95
- "npm-run-all": "^4.1.5",
96
- "puppeteer": "^24.32.1",
97
- "rollup": "^4.31.0",
98
- "sinon": "^21.0.0",
96
+ "npm-run-all2": "^9.0.2",
97
+ "rollup": "^4.62.0",
98
+ "sinon": "^22.0.0",
99
99
  "sinon-chai": "^4.0.1",
100
100
  "typescript": "^5.9.3",
101
- "webpack": "^5.97.1"
101
+ "webpack": "^5.107.2"
102
+ },
103
+ "peerDependencies": {
104
+ "@bpmn-io/cm-theme": "^0.2.0"
102
105
  }
103
106
  }