@bpmn-io/properties-panel 3.26.0 → 3.26.2

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
@@ -238,19 +238,19 @@ const ErrorsContext = preact.createContext({
238
238
  errors: {}
239
239
  });
240
240
 
241
- /**
242
- * @typedef {Function} <propertiesPanel.showEntry> callback
243
- *
244
- * @example
245
- *
246
- * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
247
- * // ...
248
- * });
249
- *
250
- * @param {Object} context
251
- * @param {boolean} [context.focus]
252
- *
253
- * @returns void
241
+ /**
242
+ * @typedef {Function} <propertiesPanel.showEntry> callback
243
+ *
244
+ * @example
245
+ *
246
+ * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
247
+ * // ...
248
+ * });
249
+ *
250
+ * @param {Object} context
251
+ * @param {boolean} [context.focus]
252
+ *
253
+ * @returns void
254
254
  */
255
255
 
256
256
  const EventContext = preact.createContext({
@@ -269,20 +269,20 @@ const TooltipContext = preact.createContext({
269
269
  getTooltipForId: () => {}
270
270
  });
271
271
 
272
- /**
273
- * Accesses the global TooltipContext and returns a tooltip for a given id and element.
274
- *
275
- * @example
276
- * ```jsx
277
- * function TextField(props) {
278
- * const tooltip = useTooltipContext('input1', element);
279
- * }
280
- * ```
281
- *
282
- * @param {string} id
283
- * @param {object} element
284
- *
285
- * @returns {string}
272
+ /**
273
+ * Accesses the global TooltipContext and returns a tooltip for a given id and element.
274
+ *
275
+ * @example
276
+ * ```jsx
277
+ * function TextField(props) {
278
+ * const tooltip = useTooltipContext('input1', element);
279
+ * }
280
+ * ```
281
+ *
282
+ * @param {string} id
283
+ * @param {object} element
284
+ *
285
+ * @returns {string}
286
286
  */
287
287
  function useTooltipContext(id, element) {
288
288
  const {
@@ -304,7 +304,7 @@ function TooltipWrapper(props) {
304
304
  return jsxRuntime.jsx(Tooltip, {
305
305
  ...props,
306
306
  value: value,
307
- forId: prefixId$9(forId)
307
+ forId: `bio-properties-panel-${forId}`
308
308
  });
309
309
  }
310
310
  function Tooltip(props) {
@@ -315,71 +315,52 @@ function Tooltip(props) {
315
315
  direction = 'right',
316
316
  position
317
317
  } = props;
318
- const [visible, setShow] = hooks.useState(false);
319
- const [focusedViaKeyboard, setFocusedViaKeyboard] = hooks.useState(false);
318
+ const [visible, setVisible] = hooks.useState(false);
319
+
320
+ // Tooltip will be shown after SHOW_DELAY ms from hovering over the source element.
321
+ const SHOW_DELAY = 200;
320
322
  let timeout = null;
321
323
  const wrapperRef = hooks.useRef(null);
322
324
  const tooltipRef = hooks.useRef(null);
323
- const showTooltip = async event => {
324
- const show = () => setShow(true);
325
- if (!visible && !timeout) {
326
- if (event instanceof MouseEvent) {
327
- timeout = setTimeout(show, 200);
328
- } else {
329
- show();
330
- setFocusedViaKeyboard(true);
331
- }
325
+ const show = (_, delay) => {
326
+ if (visible) return;
327
+ if (delay) {
328
+ timeout = setTimeout(() => {
329
+ setVisible(true);
330
+ }, SHOW_DELAY);
331
+ } else {
332
+ setVisible(true);
332
333
  }
333
334
  };
334
- const hideTooltip = () => {
335
- setShow(false);
336
- setFocusedViaKeyboard(false);
337
- };
338
- const hideTooltipViaEscape = e => {
339
- e.code === 'Escape' && hideTooltip();
335
+ const hide = () => {
336
+ clearTimeout(timeout);
337
+ setVisible(false);
340
338
  };
341
- const isTooltipHovered = ({
342
- x,
343
- y
339
+ const handleMouseLeave = ({
340
+ relatedTarget
344
341
  }) => {
345
- const tooltip = tooltipRef.current;
346
- const wrapper = wrapperRef.current;
347
- return tooltip && (inBounds(x, y, wrapper.getBoundingClientRect()) || inBounds(x, y, tooltip.getBoundingClientRect()));
342
+ // Don't hide the tooltip when moving mouse between the wrapper and the tooltip.
343
+ if (relatedTarget === wrapperRef.current || relatedTarget === tooltipRef.current || relatedTarget?.parentElement === tooltipRef.current) {
344
+ return;
345
+ }
346
+ hide();
348
347
  };
349
- hooks.useEffect(() => {
348
+ const handleFocusOut = e => {
350
349
  const {
351
- current
352
- } = wrapperRef;
353
- if (!current) {
350
+ target
351
+ } = e;
352
+
353
+ // Don't hide the tooltip if the wrapper or the tooltip itself is clicked.
354
+ const isHovered = target.matches(':hover') || tooltipRef.current?.matches(':hover');
355
+ if (target === wrapperRef.current && isHovered) {
356
+ e.stopPropagation();
354
357
  return;
355
358
  }
356
- const hideHoveredTooltip = e => {
357
- const isFocused = document.activeElement === wrapperRef.current || document.activeElement.closest('.bio-properties-panel-tooltip');
358
- if (visible && !isTooltipHovered({
359
- x: e.x,
360
- y: e.y
361
- }) && !(isFocused && focusedViaKeyboard)) {
362
- hideTooltip();
363
- }
364
- };
365
- const hideFocusedTooltip = e => {
366
- const {
367
- relatedTarget
368
- } = e;
369
- const isTooltipChild = el => !!el.closest('.bio-properties-panel-tooltip');
370
- if (visible && !isHovered(wrapperRef.current) && relatedTarget && !isTooltipChild(relatedTarget)) {
371
- hideTooltip();
372
- }
373
- };
374
- document.addEventListener('wheel', hideHoveredTooltip);
375
- document.addEventListener('focusout', hideFocusedTooltip);
376
- document.addEventListener('mousemove', hideHoveredTooltip);
377
- return () => {
378
- document.removeEventListener('wheel', hideHoveredTooltip);
379
- document.removeEventListener('mousemove', hideHoveredTooltip);
380
- document.removeEventListener('focusout', hideFocusedTooltip);
381
- };
382
- }, [wrapperRef.current, visible, focusedViaKeyboard]);
359
+ hide();
360
+ };
361
+ const hideTooltipViaEscape = e => {
362
+ e.code === 'Escape' && hide();
363
+ };
383
364
  const renderTooltip = () => {
384
365
  return jsxRuntime.jsxs("div", {
385
366
  class: `bio-properties-panel-tooltip ${direction}`,
@@ -389,6 +370,7 @@ function Tooltip(props) {
389
370
  style: position || getTooltipPosition(wrapperRef.current),
390
371
  ref: tooltipRef,
391
372
  onClick: e => e.stopPropagation(),
373
+ onMouseLeave: handleMouseLeave,
392
374
  children: [jsxRuntime.jsx("div", {
393
375
  class: "bio-properties-panel-tooltip-content",
394
376
  children: value
@@ -401,54 +383,38 @@ function Tooltip(props) {
401
383
  class: "bio-properties-panel-tooltip-wrapper",
402
384
  tabIndex: "0",
403
385
  ref: wrapperRef,
404
- onMouseEnter: showTooltip,
405
- onMouseLeave: () => {
406
- clearTimeout(timeout);
407
- timeout = null;
408
- },
409
- onFocus: showTooltip,
386
+ onMouseEnter: e => show(e, true),
387
+ onMouseLeave: handleMouseLeave,
388
+ onFocus: show,
389
+ onBlur: handleFocusOut,
410
390
  onKeyDown: hideTooltipViaEscape,
411
391
  children: [props.children, visible ? parent ? compat.createPortal(renderTooltip(), parent.current) : renderTooltip() : null]
412
392
  });
413
393
  }
414
394
 
415
395
  // helper
416
- function inBounds(x, y, bounds) {
417
- const {
418
- top,
419
- right,
420
- bottom,
421
- left
422
- } = bounds;
423
- return x >= left && x <= right && y >= top && y <= bottom;
424
- }
396
+
425
397
  function getTooltipPosition(refElement) {
426
398
  const refPosition = refElement.getBoundingClientRect();
427
399
  const right = `calc(100% - ${refPosition.x}px)`;
428
400
  const top = `${refPosition.top - 10}px`;
429
401
  return `right: ${right}; top: ${top};`;
430
402
  }
431
- function isHovered(element) {
432
- return element.matches(':hover');
433
- }
434
- function prefixId$9(id) {
435
- return `bio-properties-panel-${id}`;
436
- }
437
403
 
438
- /**
439
- * Accesses the global DescriptionContext and returns a description for a given id and element.
440
- *
441
- * @example
442
- * ```jsx
443
- * function TextField(props) {
444
- * const description = useDescriptionContext('input1', element);
445
- * }
446
- * ```
447
- *
448
- * @param {string} id
449
- * @param {object} element
450
- *
451
- * @returns {string}
404
+ /**
405
+ * Accesses the global DescriptionContext and returns a description for a given id and element.
406
+ *
407
+ * @example
408
+ * ```jsx
409
+ * function TextField(props) {
410
+ * const description = useDescriptionContext('input1', element);
411
+ * }
412
+ * ```
413
+ *
414
+ * @param {string} id
415
+ * @param {object} element
416
+ *
417
+ * @returns {string}
452
418
  */
453
419
  function useDescriptionContext(id, element) {
454
420
  const {
@@ -470,11 +436,11 @@ function useErrors() {
470
436
  return errors;
471
437
  }
472
438
 
473
- /**
474
- * Subscribe to an event immediately. Update subscription after inputs changed.
475
- *
476
- * @param {string} event
477
- * @param {Function} callback
439
+ /**
440
+ * Subscribe to an event immediately. Update subscription after inputs changed.
441
+ *
442
+ * @param {string} event
443
+ * @param {Function} callback
478
444
  */
479
445
  function useEvent(event, callback, eventBus) {
480
446
  const eventContext = hooks.useContext(EventContext);
@@ -506,24 +472,24 @@ function useEvent(event, callback, eventBus) {
506
472
 
507
473
  const KEY_LENGTH = 6;
508
474
 
509
- /**
510
- * Create a persistent key factory for plain objects without id.
511
- *
512
- * @example
513
- * ```jsx
514
- * function List({ objects }) {
515
- * const getKey = useKeyFactory();
516
- * return (<ol>{
517
- * objects.map(obj => {
518
- * const key = getKey(obj);
519
- * return <li key={key}>obj.name</li>
520
- * })
521
- * }</ol>);
522
- * }
523
- * ```
524
- *
525
- * @param {any[]} dependencies
526
- * @returns {(element: object) => string}
475
+ /**
476
+ * Create a persistent key factory for plain objects without id.
477
+ *
478
+ * @example
479
+ * ```jsx
480
+ * function List({ objects }) {
481
+ * const getKey = useKeyFactory();
482
+ * return (<ol>{
483
+ * objects.map(obj => {
484
+ * const key = getKey(obj);
485
+ * return <li key={key}>obj.name</li>
486
+ * })
487
+ * }</ol>);
488
+ * }
489
+ * ```
490
+ *
491
+ * @param {any[]} dependencies
492
+ * @returns {(element: object) => string}
527
493
  */
528
494
  function useKeyFactory(dependencies = []) {
529
495
  const map = hooks.useMemo(() => new Map(), dependencies);
@@ -538,20 +504,20 @@ function useKeyFactory(dependencies = []) {
538
504
  return getKey;
539
505
  }
540
506
 
541
- /**
542
- * Creates a state that persists in the global LayoutContext.
543
- *
544
- * @example
545
- * ```jsx
546
- * function Group(props) {
547
- * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
548
- * }
549
- * ```
550
- *
551
- * @param {(string|number)[]} path
552
- * @param {any} [defaultValue]
553
- *
554
- * @returns {[ any, Function ]}
507
+ /**
508
+ * Creates a state that persists in the global LayoutContext.
509
+ *
510
+ * @example
511
+ * ```jsx
512
+ * function Group(props) {
513
+ * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
514
+ * }
515
+ * ```
516
+ *
517
+ * @param {(string|number)[]} path
518
+ * @param {any} [defaultValue]
519
+ *
520
+ * @returns {[ any, Function ]}
555
521
  */
556
522
  function useLayoutState(path, defaultValue) {
557
523
  const {
@@ -565,11 +531,11 @@ function useLayoutState(path, defaultValue) {
565
531
  return [layoutForKey, setState];
566
532
  }
567
533
 
568
- /**
569
- * @pinussilvestrus: we need to introduce our own hook to persist the previous
570
- * state on updates.
571
- *
572
- * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
534
+ /**
535
+ * @pinussilvestrus: we need to introduce our own hook to persist the previous
536
+ * state on updates.
537
+ *
538
+ * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
573
539
  */
574
540
 
575
541
  function usePrevious(value) {
@@ -580,12 +546,12 @@ function usePrevious(value) {
580
546
  return ref.current;
581
547
  }
582
548
 
583
- /**
584
- * Subscribe to `propertiesPanel.showEntry`.
585
- *
586
- * @param {string} id
587
- *
588
- * @returns {import('preact').Ref}
549
+ /**
550
+ * Subscribe to `propertiesPanel.showEntry`.
551
+ *
552
+ * @param {string} id
553
+ *
554
+ * @returns {import('preact').Ref}
589
555
  */
590
556
  function useShowEntryEvent(id) {
591
557
  const {
@@ -616,20 +582,20 @@ function useShowEntryEvent(id) {
616
582
  return ref;
617
583
  }
618
584
 
619
- /**
620
- * @callback setSticky
621
- * @param {boolean} value
585
+ /**
586
+ * @callback setSticky
587
+ * @param {boolean} value
622
588
  */
623
589
 
624
- /**
625
- * Use IntersectionObserver to identify when DOM element is in sticky mode.
626
- * If sticky is observered setSticky(true) will be called.
627
- * If sticky mode is left, setSticky(false) will be called.
628
- *
629
- *
630
- * @param {Object} ref
631
- * @param {string} scrollContainerSelector
632
- * @param {setSticky} setSticky
590
+ /**
591
+ * Use IntersectionObserver to identify when DOM element is in sticky mode.
592
+ * If sticky is observered setSticky(true) will be called.
593
+ * If sticky mode is left, setSticky(false) will be called.
594
+ *
595
+ *
596
+ * @param {Object} ref
597
+ * @param {string} scrollContainerSelector
598
+ * @param {setSticky} setSticky
633
599
  */
634
600
  function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {
635
601
  const [scrollContainer, setScrollContainer] = hooks.useState(minDom.query(scrollContainerSelector));
@@ -683,19 +649,19 @@ function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky)
683
649
  }, [ref.current, scrollContainer, setSticky]);
684
650
  }
685
651
 
686
- /**
687
- * Creates a static function reference with changing body.
688
- * This is necessary when external libraries require a callback function
689
- * that has references to state variables.
690
- *
691
- * Usage:
692
- * const callback = useStaticCallback((val) => {val === currentState});
693
- *
694
- * The `callback` reference is static and can be safely used in external
695
- * libraries or as a prop that does not cause rerendering of children.
696
- *
697
- * @param {Function} callback function with changing reference
698
- * @returns {Function} static function reference
652
+ /**
653
+ * Creates a static function reference with changing body.
654
+ * This is necessary when external libraries require a callback function
655
+ * that has references to state variables.
656
+ *
657
+ * Usage:
658
+ * const callback = useStaticCallback((val) => {val === currentState});
659
+ *
660
+ * The `callback` reference is static and can be safely used in external
661
+ * libraries or as a prop that does not cause rerendering of children.
662
+ *
663
+ * @param {Function} callback function with changing reference
664
+ * @returns {Function} static function reference
699
665
  */
700
666
  function useStaticCallback(callback) {
701
667
  const callbackRef = hooks.useRef(callback);
@@ -838,13 +804,13 @@ function DataMarker(props) {
838
804
  return null;
839
805
  }
840
806
 
841
- /**
842
- * @typedef { {
843
- * text: (element: object) => string,
844
- * icon?: (element: Object) => import('preact').Component
845
- * } } PlaceholderDefinition
846
- *
847
- * @param { PlaceholderDefinition } props
807
+ /**
808
+ * @typedef { {
809
+ * text: (element: object) => string,
810
+ * icon?: (element: Object) => import('preact').Component
811
+ * } } PlaceholderDefinition
812
+ *
813
+ * @param { PlaceholderDefinition } props
848
814
  */
849
815
  function Placeholder(props) {
850
816
  const {
@@ -883,9 +849,9 @@ function Description(props) {
883
849
 
884
850
  const noop$6 = () => {};
885
851
 
886
- /**
887
- * Buffer `.focus()` calls while the editor is not initialized.
888
- * Set Focus inside when the editor is ready.
852
+ /**
853
+ * Buffer `.focus()` calls while the editor is not initialized.
854
+ * Set Focus inside when the editor is ready.
889
855
  */
890
856
  const useBufferedFocus$1 = function (editor, ref) {
891
857
  const [buffer, setBuffer] = hooks.useState(undefined);
@@ -986,9 +952,9 @@ const CodeEditor$1 = compat.forwardRef((props, ref) => {
986
952
 
987
953
  const noop$5 = () => {};
988
954
 
989
- /**
990
- * Buffer `.focus()` calls while the editor is not initialized.
991
- * Set Focus inside when the editor is ready.
955
+ /**
956
+ * Buffer `.focus()` calls while the editor is not initialized.
957
+ * Set Focus inside when the editor is ready.
992
958
  */
993
959
  const useBufferedFocus = function (editor, ref) {
994
960
  const [buffer, setBuffer] = hooks.useState(undefined);
@@ -1037,10 +1003,10 @@ const CodeEditor = compat.forwardRef((props, ref) => {
1037
1003
  hooks.useEffect(() => {
1038
1004
  let editor;
1039
1005
 
1040
- /* Trigger FEEL toggle when
1041
- *
1042
- * - `backspace` is pressed
1043
- * - AND the cursor is at the beginning of the input
1006
+ /* Trigger FEEL toggle when
1007
+ *
1008
+ * - `backspace` is pressed
1009
+ * - AND the cursor is at the beginning of the input
1044
1010
  */
1045
1011
  const onKeyDown = e => {
1046
1012
  if (e.key !== 'Backspace' || !editor) {
@@ -1131,10 +1097,10 @@ function FeelIndicator(props) {
1131
1097
 
1132
1098
  const noop$4 = () => {};
1133
1099
 
1134
- /**
1135
- * @param {Object} props
1136
- * @param {Object} props.label
1137
- * @param {String} props.feel
1100
+ /**
1101
+ * @param {Object} props
1102
+ * @param {Object} props.label
1103
+ * @param {String} props.feel
1138
1104
  */
1139
1105
  function FeelIcon(props) {
1140
1106
  const {
@@ -1169,22 +1135,22 @@ const FeelPopupContext = preact.createContext({
1169
1135
  source: null
1170
1136
  });
1171
1137
 
1172
- /**
1173
- * Add a dragger that calls back the passed function with
1174
- * { event, delta } on drag.
1175
- *
1176
- * @example
1177
- *
1178
- * function dragMove(event, delta) {
1179
- * // we are dragging (!!)
1180
- * }
1181
- *
1182
- * domElement.addEventListener('dragstart', dragger(dragMove));
1183
- *
1184
- * @param {Function} fn
1185
- * @param {Element} [dragPreview]
1186
- *
1187
- * @return {Function} drag start callback function
1138
+ /**
1139
+ * Add a dragger that calls back the passed function with
1140
+ * { event, delta } on drag.
1141
+ *
1142
+ * @example
1143
+ *
1144
+ * function dragMove(event, delta) {
1145
+ * // we are dragging (!!)
1146
+ * }
1147
+ *
1148
+ * domElement.addEventListener('dragstart', dragger(dragMove));
1149
+ *
1150
+ * @param {Function} fn
1151
+ * @param {Element} [dragPreview]
1152
+ *
1153
+ * @return {Function} drag start callback function
1188
1154
  */
1189
1155
  function createDragger(fn, dragPreview) {
1190
1156
  let self;
@@ -1239,23 +1205,23 @@ function emptyCanvas() {
1239
1205
 
1240
1206
  const noop$3 = () => {};
1241
1207
 
1242
- /**
1243
- * A generic popup component.
1244
- *
1245
- * @param {Object} props
1246
- * @param {HTMLElement} [props.container]
1247
- * @param {string} [props.className]
1248
- * @param {boolean} [props.delayInitialFocus]
1249
- * @param {{x: number, y: number}} [props.position]
1250
- * @param {number} [props.width]
1251
- * @param {number} [props.height]
1252
- * @param {Function} props.onClose
1253
- * @param {Function} [props.onPostActivate]
1254
- * @param {Function} [props.onPostDeactivate]
1255
- * @param {boolean} [props.returnFocus]
1256
- * @param {boolean} [props.closeOnEscape]
1257
- * @param {string} props.title
1258
- * @param {Ref} [ref]
1208
+ /**
1209
+ * A generic popup component.
1210
+ *
1211
+ * @param {Object} props
1212
+ * @param {HTMLElement} [props.container]
1213
+ * @param {string} [props.className]
1214
+ * @param {boolean} [props.delayInitialFocus]
1215
+ * @param {{x: number, y: number}} [props.position]
1216
+ * @param {number} [props.width]
1217
+ * @param {number} [props.height]
1218
+ * @param {Function} props.onClose
1219
+ * @param {Function} [props.onPostActivate]
1220
+ * @param {Function} [props.onPostDeactivate]
1221
+ * @param {boolean} [props.returnFocus]
1222
+ * @param {boolean} [props.closeOnEscape]
1223
+ * @param {string} props.title
1224
+ * @param {Ref} [ref]
1259
1225
  */
1260
1226
  function PopupComponent(props, globalRef) {
1261
1227
  const {
@@ -1474,12 +1440,12 @@ function getContainerNode(node) {
1474
1440
  const FEEL_POPUP_WIDTH = 700;
1475
1441
  const FEEL_POPUP_HEIGHT = 250;
1476
1442
 
1477
- /**
1478
- * FEEL popup component, built as a singleton. Emits lifecycle events as follows:
1479
- * - `feelPopup.open` - fired before the popup is mounted
1480
- * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup
1481
- * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup
1482
- * - `feelPopup.closed` - fired after the popup is unmounted
1443
+ /**
1444
+ * FEEL popup component, built as a singleton. Emits lifecycle events as follows:
1445
+ * - `feelPopup.open` - fired before the popup is mounted
1446
+ * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup
1447
+ * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup
1448
+ * - `feelPopup.closed` - fired after the popup is unmounted
1483
1449
  */
1484
1450
  function FEELPopupRoot(props) {
1485
1451
  const {
@@ -1705,11 +1671,11 @@ function autoCompletionOpen(element) {
1705
1671
  return element.closest('.cm-editor').querySelector('.cm-tooltip-autocomplete');
1706
1672
  }
1707
1673
 
1708
- /**
1709
- * This hook behaves like useEffect, but does not trigger on the first render.
1710
- *
1711
- * @param {Function} effect
1712
- * @param {Array} deps
1674
+ /**
1675
+ * This hook behaves like useEffect, but does not trigger on the first render.
1676
+ *
1677
+ * @param {Function} effect
1678
+ * @param {Array} deps
1713
1679
  */
1714
1680
  function useUpdateEffect(effect, deps) {
1715
1681
  const isMounted = hooks.useRef(false);
@@ -1787,19 +1753,19 @@ function ToggleSwitch(props) {
1787
1753
  });
1788
1754
  }
1789
1755
 
1790
- /**
1791
- * @param {Object} props
1792
- * @param {Object} props.element
1793
- * @param {String} props.id
1794
- * @param {String} props.description
1795
- * @param {String} props.label
1796
- * @param {String} props.switcherLabel
1797
- * @param {Boolean} props.inline
1798
- * @param {Function} props.getValue
1799
- * @param {Function} props.setValue
1800
- * @param {Function} props.onFocus
1801
- * @param {Function} props.onBlur
1802
- * @param {string|import('preact').Component} props.tooltip
1756
+ /**
1757
+ * @param {Object} props
1758
+ * @param {Object} props.element
1759
+ * @param {String} props.id
1760
+ * @param {String} props.description
1761
+ * @param {String} props.label
1762
+ * @param {String} props.switcherLabel
1763
+ * @param {Boolean} props.inline
1764
+ * @param {Function} props.getValue
1765
+ * @param {Function} props.setValue
1766
+ * @param {Function} props.onFocus
1767
+ * @param {Function} props.onBlur
1768
+ * @param {string|import('preact').Component} props.tooltip
1803
1769
  */
1804
1770
  function ToggleSwitchEntry(props) {
1805
1771
  const {
@@ -1907,22 +1873,22 @@ function NumberField(props) {
1907
1873
  });
1908
1874
  }
1909
1875
 
1910
- /**
1911
- * @param {Object} props
1912
- * @param {Boolean} props.debounce
1913
- * @param {String} props.description
1914
- * @param {Boolean} props.disabled
1915
- * @param {Object} props.element
1916
- * @param {Function} props.getValue
1917
- * @param {String} props.id
1918
- * @param {String} props.label
1919
- * @param {String} props.max
1920
- * @param {String} props.min
1921
- * @param {Function} props.setValue
1922
- * @param {Function} props.onFocus
1923
- * @param {Function} props.onBlur
1924
- * @param {String} props.step
1925
- * @param {Function} props.validate
1876
+ /**
1877
+ * @param {Object} props
1878
+ * @param {Boolean} props.debounce
1879
+ * @param {String} props.description
1880
+ * @param {Boolean} props.disabled
1881
+ * @param {Object} props.element
1882
+ * @param {Function} props.getValue
1883
+ * @param {String} props.id
1884
+ * @param {String} props.label
1885
+ * @param {String} props.max
1886
+ * @param {String} props.min
1887
+ * @param {Function} props.setValue
1888
+ * @param {Function} props.onFocus
1889
+ * @param {Function} props.onBlur
1890
+ * @param {String} props.step
1891
+ * @param {Function} props.validate
1926
1892
  */
1927
1893
  function NumberFieldEntry(props) {
1928
1894
  const {
@@ -2408,26 +2374,26 @@ const OptionalFeelCheckbox = compat.forwardRef((props, ref) => {
2408
2374
  });
2409
2375
  });
2410
2376
 
2411
- /**
2412
- * @param {Object} props
2413
- * @param {Object} props.element
2414
- * @param {String} props.id
2415
- * @param {String} props.description
2416
- * @param {Boolean} props.debounce
2417
- * @param {Boolean} props.disabled
2418
- * @param {Boolean} props.feel
2419
- * @param {String} props.label
2420
- * @param {Function} props.getValue
2421
- * @param {Function} props.setValue
2422
- * @param {Function} props.tooltipContainer
2423
- * @param {Function} props.validate
2424
- * @param {Function} props.show
2425
- * @param {Function} props.example
2426
- * @param {Function} props.variables
2427
- * @param {Function} props.onFocus
2428
- * @param {Function} props.onBlur
2429
- * @param {string} [props.placeholder]
2430
- * @param {string|import('preact').Component} props.tooltip
2377
+ /**
2378
+ * @param {Object} props
2379
+ * @param {Object} props.element
2380
+ * @param {String} props.id
2381
+ * @param {String} props.description
2382
+ * @param {Boolean} props.debounce
2383
+ * @param {Boolean} props.disabled
2384
+ * @param {Boolean} props.feel
2385
+ * @param {String} props.label
2386
+ * @param {Function} props.getValue
2387
+ * @param {Function} props.setValue
2388
+ * @param {Function} props.tooltipContainer
2389
+ * @param {Function} props.validate
2390
+ * @param {Function} props.show
2391
+ * @param {Function} props.example
2392
+ * @param {Function} props.variables
2393
+ * @param {Function} props.onFocus
2394
+ * @param {Function} props.onBlur
2395
+ * @param {string} [props.placeholder]
2396
+ * @param {string|import('preact').Component} props.tooltip
2431
2397
  */
2432
2398
  function FeelEntry(props) {
2433
2399
  const {
@@ -2514,27 +2480,27 @@ function FeelEntry(props) {
2514
2480
  });
2515
2481
  }
2516
2482
 
2517
- /**
2518
- * @param {Object} props
2519
- * @param {Object} props.element
2520
- * @param {String} props.id
2521
- * @param {String} props.description
2522
- * @param {Boolean} props.debounce
2523
- * @param {Boolean} props.disabled
2524
- * @param {String} props.max
2525
- * @param {String} props.min
2526
- * @param {String} props.step
2527
- * @param {Boolean} props.feel
2528
- * @param {String} props.label
2529
- * @param {Function} props.getValue
2530
- * @param {Function} props.setValue
2531
- * @param {Function} props.tooltipContainer
2532
- * @param {Function} props.validate
2533
- * @param {Function} props.show
2534
- * @param {Function} props.example
2535
- * @param {Function} props.variables
2536
- * @param {Function} props.onFocus
2537
- * @param {Function} props.onBlur
2483
+ /**
2484
+ * @param {Object} props
2485
+ * @param {Object} props.element
2486
+ * @param {String} props.id
2487
+ * @param {String} props.description
2488
+ * @param {Boolean} props.debounce
2489
+ * @param {Boolean} props.disabled
2490
+ * @param {String} props.max
2491
+ * @param {String} props.min
2492
+ * @param {String} props.step
2493
+ * @param {Boolean} props.feel
2494
+ * @param {String} props.label
2495
+ * @param {Function} props.getValue
2496
+ * @param {Function} props.setValue
2497
+ * @param {Function} props.tooltipContainer
2498
+ * @param {Function} props.validate
2499
+ * @param {Function} props.show
2500
+ * @param {Function} props.example
2501
+ * @param {Function} props.variables
2502
+ * @param {Function} props.onFocus
2503
+ * @param {Function} props.onBlur
2538
2504
  */
2539
2505
  function FeelNumberEntry(props) {
2540
2506
  return jsxRuntime.jsx(FeelEntry, {
@@ -2544,25 +2510,25 @@ function FeelNumberEntry(props) {
2544
2510
  });
2545
2511
  }
2546
2512
 
2547
- /**
2548
- * @param {Object} props
2549
- * @param {Object} props.element
2550
- * @param {String} props.id
2551
- * @param {String} props.description
2552
- * @param {Boolean} props.debounce
2553
- * @param {Boolean} props.disabled
2554
- * @param {Boolean} props.feel
2555
- * @param {String} props.label
2556
- * @param {Function} props.getValue
2557
- * @param {Function} props.setValue
2558
- * @param {Function} props.tooltipContainer
2559
- * @param {Function} props.validate
2560
- * @param {Function} props.show
2561
- * @param {Function} props.example
2562
- * @param {Function} props.variables
2563
- * @param {Function} props.onFocus
2564
- * @param {Function} props.onBlur
2565
- * @param {string} [props.placeholder]
2513
+ /**
2514
+ * @param {Object} props
2515
+ * @param {Object} props.element
2516
+ * @param {String} props.id
2517
+ * @param {String} props.description
2518
+ * @param {Boolean} props.debounce
2519
+ * @param {Boolean} props.disabled
2520
+ * @param {Boolean} props.feel
2521
+ * @param {String} props.label
2522
+ * @param {Function} props.getValue
2523
+ * @param {Function} props.setValue
2524
+ * @param {Function} props.tooltipContainer
2525
+ * @param {Function} props.validate
2526
+ * @param {Function} props.show
2527
+ * @param {Function} props.example
2528
+ * @param {Function} props.variables
2529
+ * @param {Function} props.onFocus
2530
+ * @param {Function} props.onBlur
2531
+ * @param {string} [props.placeholder]
2566
2532
  */
2567
2533
  function FeelTextAreaEntry(props) {
2568
2534
  return jsxRuntime.jsx(FeelEntry, {
@@ -2572,24 +2538,24 @@ function FeelTextAreaEntry(props) {
2572
2538
  });
2573
2539
  }
2574
2540
 
2575
- /**
2576
- * @param {Object} props
2577
- * @param {Object} props.element
2578
- * @param {String} props.id
2579
- * @param {String} props.description
2580
- * @param {Boolean} props.debounce
2581
- * @param {Boolean} props.disabled
2582
- * @param {Boolean} props.feel
2583
- * @param {String} props.label
2584
- * @param {Function} props.getValue
2585
- * @param {Function} props.setValue
2586
- * @param {Function} props.tooltipContainer
2587
- * @param {Function} props.validate
2588
- * @param {Function} props.show
2589
- * @param {Function} props.example
2590
- * @param {Function} props.variables
2591
- * @param {Function} props.onFocus
2592
- * @param {Function} props.onBlur
2541
+ /**
2542
+ * @param {Object} props
2543
+ * @param {Object} props.element
2544
+ * @param {String} props.id
2545
+ * @param {String} props.description
2546
+ * @param {Boolean} props.debounce
2547
+ * @param {Boolean} props.disabled
2548
+ * @param {Boolean} props.feel
2549
+ * @param {String} props.label
2550
+ * @param {Function} props.getValue
2551
+ * @param {Function} props.setValue
2552
+ * @param {Function} props.tooltipContainer
2553
+ * @param {Function} props.validate
2554
+ * @param {Function} props.show
2555
+ * @param {Function} props.example
2556
+ * @param {Function} props.variables
2557
+ * @param {Function} props.onFocus
2558
+ * @param {Function} props.onBlur
2593
2559
  */
2594
2560
  function FeelToggleSwitchEntry(props) {
2595
2561
  return jsxRuntime.jsx(FeelEntry, {
@@ -2599,24 +2565,24 @@ function FeelToggleSwitchEntry(props) {
2599
2565
  });
2600
2566
  }
2601
2567
 
2602
- /**
2603
- * @param {Object} props
2604
- * @param {Object} props.element
2605
- * @param {String} props.id
2606
- * @param {String} props.description
2607
- * @param {Boolean} props.debounce
2608
- * @param {Boolean} props.disabled
2609
- * @param {Boolean} props.feel
2610
- * @param {String} props.label
2611
- * @param {Function} props.getValue
2612
- * @param {Function} props.setValue
2613
- * @param {Function} props.tooltipContainer
2614
- * @param {Function} props.validate
2615
- * @param {Function} props.show
2616
- * @param {Function} props.example
2617
- * @param {Function} props.variables
2618
- * @param {Function} props.onFocus
2619
- * @param {Function} props.onBlur
2568
+ /**
2569
+ * @param {Object} props
2570
+ * @param {Object} props.element
2571
+ * @param {String} props.id
2572
+ * @param {String} props.description
2573
+ * @param {Boolean} props.debounce
2574
+ * @param {Boolean} props.disabled
2575
+ * @param {Boolean} props.feel
2576
+ * @param {String} props.label
2577
+ * @param {Function} props.getValue
2578
+ * @param {Function} props.setValue
2579
+ * @param {Function} props.tooltipContainer
2580
+ * @param {Function} props.validate
2581
+ * @param {Function} props.show
2582
+ * @param {Function} props.example
2583
+ * @param {Function} props.variables
2584
+ * @param {Function} props.onFocus
2585
+ * @param {Function} props.onBlur
2620
2586
  */
2621
2587
  function FeelCheckboxEntry(props) {
2622
2588
  return jsxRuntime.jsx(FeelEntry, {
@@ -2626,26 +2592,26 @@ function FeelCheckboxEntry(props) {
2626
2592
  });
2627
2593
  }
2628
2594
 
2629
- /**
2630
- * @param {Object} props
2631
- * @param {Object} props.element
2632
- * @param {String} props.id
2633
- * @param {String} props.description
2634
- * @param {String} props.hostLanguage
2635
- * @param {Boolean} props.singleLine
2636
- * @param {Boolean} props.debounce
2637
- * @param {Boolean} props.disabled
2638
- * @param {Boolean} props.feel
2639
- * @param {String} props.label
2640
- * @param {Function} props.getValue
2641
- * @param {Function} props.setValue
2642
- * @param {Function} props.tooltipContainer
2643
- * @param {Function} props.validate
2644
- * @param {Function} props.show
2645
- * @param {Function} props.example
2646
- * @param {Function} props.variables
2647
- * @param {Function} props.onFocus
2648
- * @param {Function} props.onBlur
2595
+ /**
2596
+ * @param {Object} props
2597
+ * @param {Object} props.element
2598
+ * @param {String} props.id
2599
+ * @param {String} props.description
2600
+ * @param {String} props.hostLanguage
2601
+ * @param {Boolean} props.singleLine
2602
+ * @param {Boolean} props.debounce
2603
+ * @param {Boolean} props.disabled
2604
+ * @param {Boolean} props.feel
2605
+ * @param {String} props.label
2606
+ * @param {Function} props.getValue
2607
+ * @param {Function} props.setValue
2608
+ * @param {Function} props.tooltipContainer
2609
+ * @param {Function} props.validate
2610
+ * @param {Function} props.show
2611
+ * @param {Function} props.example
2612
+ * @param {Function} props.variables
2613
+ * @param {Function} props.onFocus
2614
+ * @param {Function} props.onBlur
2649
2615
  */
2650
2616
  function FeelTemplatingEntry(props) {
2651
2617
  return jsxRuntime.jsx(FeelEntry, {
@@ -2714,85 +2680,85 @@ const DEFAULT_LAYOUT = {};
2714
2680
  const DEFAULT_DESCRIPTION = {};
2715
2681
  const DEFAULT_TOOLTIP = {};
2716
2682
 
2717
- /**
2718
- * @typedef { {
2719
- * component: import('preact').Component,
2720
- * id: String,
2721
- * isEdited?: Function
2722
- * } } EntryDefinition
2723
- *
2724
- * @typedef { {
2725
- * autoFocusEntry: String,
2726
- * autoOpen?: Boolean,
2727
- * entries: Array<EntryDefinition>,
2728
- * id: String,
2729
- * label: String,
2730
- * remove: (event: MouseEvent) => void
2731
- * } } ListItemDefinition
2732
- *
2733
- * @typedef { {
2734
- * add: (event: MouseEvent) => void,
2735
- * component: import('preact').Component,
2736
- * element: Object,
2737
- * id: String,
2738
- * items: Array<ListItemDefinition>,
2739
- * label: String,
2740
- * shouldOpen?: Boolean
2741
- * } } ListGroupDefinition
2742
- *
2743
- * @typedef { {
2744
- * component?: import('preact').Component,
2745
- * entries: Array<EntryDefinition>,
2746
- * id: String,
2747
- * label: String,
2748
- * shouldOpen?: Boolean
2749
- * } } GroupDefinition
2750
- *
2751
- * @typedef { {
2752
- * [id: String]: GetDescriptionFunction
2753
- * } } DescriptionConfig
2754
- *
2755
- * @typedef { {
2756
- * [id: String]: GetTooltipFunction
2757
- * } } TooltipConfig
2758
- *
2759
- * @callback { {
2760
- * @param {string} id
2761
- * @param {Object} element
2762
- * @returns {string}
2763
- * } } GetDescriptionFunction
2764
- *
2765
- * @callback { {
2766
- * @param {string} id
2767
- * @param {Object} element
2768
- * @returns {string}
2769
- * } } GetTooltipFunction
2770
- *
2771
- * @typedef { {
2772
- * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
2773
- * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
2774
- * } } PlaceholderProvider
2775
- *
2683
+ /**
2684
+ * @typedef { {
2685
+ * component: import('preact').Component,
2686
+ * id: String,
2687
+ * isEdited?: Function
2688
+ * } } EntryDefinition
2689
+ *
2690
+ * @typedef { {
2691
+ * autoFocusEntry: String,
2692
+ * autoOpen?: Boolean,
2693
+ * entries: Array<EntryDefinition>,
2694
+ * id: String,
2695
+ * label: String,
2696
+ * remove: (event: MouseEvent) => void
2697
+ * } } ListItemDefinition
2698
+ *
2699
+ * @typedef { {
2700
+ * add: (event: MouseEvent) => void,
2701
+ * component: import('preact').Component,
2702
+ * element: Object,
2703
+ * id: String,
2704
+ * items: Array<ListItemDefinition>,
2705
+ * label: String,
2706
+ * shouldOpen?: Boolean
2707
+ * } } ListGroupDefinition
2708
+ *
2709
+ * @typedef { {
2710
+ * component?: import('preact').Component,
2711
+ * entries: Array<EntryDefinition>,
2712
+ * id: String,
2713
+ * label: String,
2714
+ * shouldOpen?: Boolean
2715
+ * } } GroupDefinition
2716
+ *
2717
+ * @typedef { {
2718
+ * [id: String]: GetDescriptionFunction
2719
+ * } } DescriptionConfig
2720
+ *
2721
+ * @typedef { {
2722
+ * [id: String]: GetTooltipFunction
2723
+ * } } TooltipConfig
2724
+ *
2725
+ * @callback { {
2726
+ * @param {string} id
2727
+ * @param {Object} element
2728
+ * @returns {string}
2729
+ * } } GetDescriptionFunction
2730
+ *
2731
+ * @callback { {
2732
+ * @param {string} id
2733
+ * @param {Object} element
2734
+ * @returns {string}
2735
+ * } } GetTooltipFunction
2736
+ *
2737
+ * @typedef { {
2738
+ * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
2739
+ * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
2740
+ * } } PlaceholderProvider
2741
+ *
2776
2742
  */
2777
2743
 
2778
- /**
2779
- * A basic properties panel component. Describes *how* content will be rendered, accepts
2780
- * data from implementor to describe *what* will be rendered.
2781
- *
2782
- * @param {Object} props
2783
- * @param {Object|Array} props.element
2784
- * @param {import('./components/Header').HeaderProvider} props.headerProvider
2785
- * @param {PlaceholderProvider} [props.placeholderProvider]
2786
- * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
2787
- * @param {Object} [props.layoutConfig]
2788
- * @param {Function} [props.layoutChanged]
2789
- * @param {DescriptionConfig} [props.descriptionConfig]
2790
- * @param {Function} [props.descriptionLoaded]
2791
- * @param {TooltipConfig} [props.tooltipConfig]
2792
- * @param {Function} [props.tooltipLoaded]
2793
- * @param {HTMLElement} [props.feelPopupContainer]
2794
- * @param {Function} [props.getFeelPopupLinks]
2795
- * @param {Object} [props.eventBus]
2744
+ /**
2745
+ * A basic properties panel component. Describes *how* content will be rendered, accepts
2746
+ * data from implementor to describe *what* will be rendered.
2747
+ *
2748
+ * @param {Object} props
2749
+ * @param {Object|Array} props.element
2750
+ * @param {import('./components/Header').HeaderProvider} props.headerProvider
2751
+ * @param {PlaceholderProvider} [props.placeholderProvider]
2752
+ * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
2753
+ * @param {Object} [props.layoutConfig]
2754
+ * @param {Function} [props.layoutChanged]
2755
+ * @param {DescriptionConfig} [props.descriptionConfig]
2756
+ * @param {Function} [props.descriptionLoaded]
2757
+ * @param {TooltipConfig} [props.tooltipConfig]
2758
+ * @param {Function} [props.tooltipLoaded]
2759
+ * @param {HTMLElement} [props.feelPopupContainer]
2760
+ * @param {Function} [props.getFeelPopupLinks]
2761
+ * @param {Object} [props.eventBus]
2796
2762
  */
2797
2763
  function PropertiesPanel(props) {
2798
2764
  const {
@@ -2965,11 +2931,11 @@ function createTooltipContext(overrides = {}) {
2965
2931
 
2966
2932
  // hooks //////////////////
2967
2933
 
2968
- /**
2969
- * This hook behaves like useLayoutEffect, but does not trigger on the first render.
2970
- *
2971
- * @param {Function} effect
2972
- * @param {Array} deps
2934
+ /**
2935
+ * This hook behaves like useLayoutEffect, but does not trigger on the first render.
2936
+ *
2937
+ * @param {Function} effect
2938
+ * @param {Array} deps
2973
2939
  */
2974
2940
  function useUpdateLayoutEffect(effect, deps) {
2975
2941
  const isMounted = hooks.useRef(false);
@@ -3044,15 +3010,15 @@ function MenuItem({
3044
3010
  });
3045
3011
  }
3046
3012
 
3047
- /**
3048
- *
3049
- * @param {Array<null | Element>} ignoredElements
3050
- * @param {Function} callback
3013
+ /**
3014
+ *
3015
+ * @param {Array<null | Element>} ignoredElements
3016
+ * @param {Function} callback
3051
3017
  */
3052
3018
  function useGlobalClick(ignoredElements, callback) {
3053
3019
  hooks.useEffect(() => {
3054
- /**
3055
- * @param {MouseEvent} event
3020
+ /**
3021
+ * @param {MouseEvent} event
3056
3022
  */
3057
3023
  function listener(event) {
3058
3024
  if (ignoredElements.some(element => element && element.contains(event.target))) {
@@ -3085,20 +3051,20 @@ function HeaderButton(props) {
3085
3051
  });
3086
3052
  }
3087
3053
 
3088
- /**
3089
- * @typedef { {
3090
- * [key: string]: string;
3091
- * } } TranslateReplacements
3054
+ /**
3055
+ * @typedef { {
3056
+ * [key: string]: string;
3057
+ * } } TranslateReplacements
3092
3058
  */
3093
3059
 
3094
- /**
3095
- * A simple translation stub to be used for multi-language support.
3096
- * Can be easily replaced with a more sophisticated solution.
3097
- *
3098
- * @param {string} template to interpolate
3099
- * @param {TranslateReplacements} [replacements] a map with substitutes
3100
- *
3101
- * @return {string} the translated string
3060
+ /**
3061
+ * A simple translation stub to be used for multi-language support.
3062
+ * Can be easily replaced with a more sophisticated solution.
3063
+ *
3064
+ * @param {string} template to interpolate
3065
+ * @param {TranslateReplacements} [replacements] a map with substitutes
3066
+ *
3067
+ * @return {string} the translated string
3102
3068
  */
3103
3069
  function translateFallback(template, replacements) {
3104
3070
  replacements = replacements || {};
@@ -3210,8 +3176,8 @@ function ListItem(props) {
3210
3176
 
3211
3177
  const noop$1 = () => {};
3212
3178
 
3213
- /**
3214
- * @param {import('../PropertiesPanel').ListGroupDefinition} props
3179
+ /**
3180
+ * @param {import('../PropertiesPanel').ListGroupDefinition} props
3215
3181
  */
3216
3182
  function ListGroup(props) {
3217
3183
  const {
@@ -3403,18 +3369,18 @@ function Checkbox(props) {
3403
3369
  });
3404
3370
  }
3405
3371
 
3406
- /**
3407
- * @param {Object} props
3408
- * @param {Object} props.element
3409
- * @param {String} props.id
3410
- * @param {String} props.description
3411
- * @param {String} props.label
3412
- * @param {Function} props.getValue
3413
- * @param {Function} props.setValue
3414
- * @param {Function} props.onFocus
3415
- * @param {Function} props.onBlur
3416
- * @param {string|import('preact').Component} props.tooltip
3417
- * @param {boolean} [props.disabled]
3372
+ /**
3373
+ * @param {Object} props
3374
+ * @param {Object} props.element
3375
+ * @param {String} props.id
3376
+ * @param {String} props.description
3377
+ * @param {String} props.label
3378
+ * @param {Function} props.getValue
3379
+ * @param {Function} props.setValue
3380
+ * @param {Function} props.onFocus
3381
+ * @param {Function} props.onBlur
3382
+ * @param {string|import('preact').Component} props.tooltip
3383
+ * @param {boolean} [props.disabled]
3418
3384
  */
3419
3385
  function CheckboxEntry(props) {
3420
3386
  const {
@@ -3466,19 +3432,19 @@ function prefixId$4(id) {
3466
3432
 
3467
3433
  const noop = () => {};
3468
3434
 
3469
- /**
3470
- * @param {Object} props
3471
- * @param {Object} props.element
3472
- * @param {String} props.id
3473
- * @param {String} props.description
3474
- * @param {Boolean} props.debounce
3475
- * @param {Boolean} props.disabled
3476
- * @param {String} props.label
3477
- * @param {Function} props.getValue
3478
- * @param {Function} props.setValue
3479
- * @param {Function} props.tooltipContainer
3480
- * @param {Function} props.validate
3481
- * @param {Function} props.show
3435
+ /**
3436
+ * @param {Object} props
3437
+ * @param {Object} props.element
3438
+ * @param {String} props.id
3439
+ * @param {String} props.description
3440
+ * @param {Boolean} props.debounce
3441
+ * @param {Boolean} props.disabled
3442
+ * @param {String} props.label
3443
+ * @param {Function} props.getValue
3444
+ * @param {Function} props.setValue
3445
+ * @param {Function} props.tooltipContainer
3446
+ * @param {Function} props.validate
3447
+ * @param {Function} props.show
3482
3448
  */
3483
3449
  function TemplatingEntry(props) {
3484
3450
  const {
@@ -3653,8 +3619,8 @@ function List(props) {
3653
3619
  }
3654
3620
  }, [open, hasItems]);
3655
3621
 
3656
- /**
3657
- * @param {MouseEvent} event
3622
+ /**
3623
+ * @param {MouseEvent} event
3658
3624
  */
3659
3625
  function addItem(event) {
3660
3626
  event.stopPropagation();
@@ -3846,20 +3812,20 @@ function Select(props) {
3846
3812
  });
3847
3813
  }
3848
3814
 
3849
- /**
3850
- * @param {object} props
3851
- * @param {object} props.element
3852
- * @param {string} props.id
3853
- * @param {string} [props.description]
3854
- * @param {string} props.label
3855
- * @param {Function} props.getValue
3856
- * @param {Function} props.setValue
3857
- * @param {Function} props.onFocus
3858
- * @param {Function} props.onBlur
3859
- * @param {Function} props.getOptions
3860
- * @param {boolean} [props.disabled]
3861
- * @param {Function} [props.validate]
3862
- * @param {string|import('preact').Component} props.tooltip
3815
+ /**
3816
+ * @param {object} props
3817
+ * @param {object} props.element
3818
+ * @param {string} props.id
3819
+ * @param {string} [props.description]
3820
+ * @param {string} props.label
3821
+ * @param {Function} props.getValue
3822
+ * @param {Function} props.setValue
3823
+ * @param {Function} props.onFocus
3824
+ * @param {Function} props.onBlur
3825
+ * @param {Function} props.getOptions
3826
+ * @param {boolean} [props.disabled]
3827
+ * @param {Function} [props.validate]
3828
+ * @param {string|import('preact').Component} props.tooltip
3863
3829
  */
3864
3830
  function SelectEntry(props) {
3865
3831
  const {
@@ -4206,20 +4172,20 @@ function Textfield(props) {
4206
4172
  });
4207
4173
  }
4208
4174
 
4209
- /**
4210
- * @param {Object} props
4211
- * @param {Object} props.element
4212
- * @param {String} props.id
4213
- * @param {String} props.description
4214
- * @param {Boolean} props.debounce
4215
- * @param {Boolean} props.disabled
4216
- * @param {String} props.label
4217
- * @param {Function} props.getValue
4218
- * @param {Function} props.setValue
4219
- * @param {Function} props.onFocus
4220
- * @param {Function} props.onBlur
4221
- * @param {string|import('preact').Component} props.tooltip
4222
- * @param {Function} props.validate
4175
+ /**
4176
+ * @param {Object} props
4177
+ * @param {Object} props.element
4178
+ * @param {String} props.id
4179
+ * @param {String} props.description
4180
+ * @param {Boolean} props.debounce
4181
+ * @param {Boolean} props.disabled
4182
+ * @param {String} props.label
4183
+ * @param {Function} props.getValue
4184
+ * @param {Function} props.setValue
4185
+ * @param {Function} props.onFocus
4186
+ * @param {Function} props.onBlur
4187
+ * @param {string|import('preact').Component} props.tooltip
4188
+ * @param {Function} props.validate
4223
4189
  */
4224
4190
  function TextfieldEntry(props) {
4225
4191
  const {
@@ -4312,20 +4278,20 @@ class FeelPopupModule {
4312
4278
  this._eventBus = eventBus;
4313
4279
  }
4314
4280
 
4315
- /**
4316
- * Check if the FEEL popup is open.
4317
- * @return {Boolean}
4281
+ /**
4282
+ * Check if the FEEL popup is open.
4283
+ * @return {Boolean}
4318
4284
  */
4319
4285
  isOpen() {
4320
4286
  return this._eventBus.fire('feelPopup._isOpen');
4321
4287
  }
4322
4288
 
4323
- /**
4324
- * Open the FEEL popup.
4325
- *
4326
- * @param {String} entryId
4327
- * @param {Object} popupConfig
4328
- * @param {HTMLElement} sourceElement
4289
+ /**
4290
+ * Open the FEEL popup.
4291
+ *
4292
+ * @param {String} entryId
4293
+ * @param {Object} popupConfig
4294
+ * @param {HTMLElement} sourceElement
4329
4295
  */
4330
4296
  open(entryId, popupConfig, sourceElement) {
4331
4297
  return this._eventBus.fire('feelPopup._open', {
@@ -4335,8 +4301,8 @@ class FeelPopupModule {
4335
4301
  });
4336
4302
  }
4337
4303
 
4338
- /**
4339
- * Close the FEEL popup.
4304
+ /**
4305
+ * Close the FEEL popup.
4340
4306
  */
4341
4307
  close() {
4342
4308
  return this._eventBus.fire('feelPopup._close');