@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.esm.js CHANGED
@@ -217,19 +217,19 @@ const ErrorsContext = createContext({
217
217
  errors: {}
218
218
  });
219
219
 
220
- /**
221
- * @typedef {Function} <propertiesPanel.showEntry> callback
222
- *
223
- * @example
224
- *
225
- * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
226
- * // ...
227
- * });
228
- *
229
- * @param {Object} context
230
- * @param {boolean} [context.focus]
231
- *
232
- * @returns void
220
+ /**
221
+ * @typedef {Function} <propertiesPanel.showEntry> callback
222
+ *
223
+ * @example
224
+ *
225
+ * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
226
+ * // ...
227
+ * });
228
+ *
229
+ * @param {Object} context
230
+ * @param {boolean} [context.focus]
231
+ *
232
+ * @returns void
233
233
  */
234
234
 
235
235
  const EventContext = createContext({
@@ -248,20 +248,20 @@ const TooltipContext = createContext({
248
248
  getTooltipForId: () => {}
249
249
  });
250
250
 
251
- /**
252
- * Accesses the global TooltipContext and returns a tooltip for a given id and element.
253
- *
254
- * @example
255
- * ```jsx
256
- * function TextField(props) {
257
- * const tooltip = useTooltipContext('input1', element);
258
- * }
259
- * ```
260
- *
261
- * @param {string} id
262
- * @param {object} element
263
- *
264
- * @returns {string}
251
+ /**
252
+ * Accesses the global TooltipContext and returns a tooltip for a given id and element.
253
+ *
254
+ * @example
255
+ * ```jsx
256
+ * function TextField(props) {
257
+ * const tooltip = useTooltipContext('input1', element);
258
+ * }
259
+ * ```
260
+ *
261
+ * @param {string} id
262
+ * @param {object} element
263
+ *
264
+ * @returns {string}
265
265
  */
266
266
  function useTooltipContext(id, element) {
267
267
  const {
@@ -283,7 +283,7 @@ function TooltipWrapper(props) {
283
283
  return jsx(Tooltip, {
284
284
  ...props,
285
285
  value: value,
286
- forId: prefixId$9(forId)
286
+ forId: `bio-properties-panel-${forId}`
287
287
  });
288
288
  }
289
289
  function Tooltip(props) {
@@ -294,71 +294,52 @@ function Tooltip(props) {
294
294
  direction = 'right',
295
295
  position
296
296
  } = props;
297
- const [visible, setShow] = useState(false);
298
- const [focusedViaKeyboard, setFocusedViaKeyboard] = useState(false);
297
+ const [visible, setVisible] = useState(false);
298
+
299
+ // Tooltip will be shown after SHOW_DELAY ms from hovering over the source element.
300
+ const SHOW_DELAY = 200;
299
301
  let timeout = null;
300
302
  const wrapperRef = useRef(null);
301
303
  const tooltipRef = useRef(null);
302
- const showTooltip = async event => {
303
- const show = () => setShow(true);
304
- if (!visible && !timeout) {
305
- if (event instanceof MouseEvent) {
306
- timeout = setTimeout(show, 200);
307
- } else {
308
- show();
309
- setFocusedViaKeyboard(true);
310
- }
304
+ const show = (_, delay) => {
305
+ if (visible) return;
306
+ if (delay) {
307
+ timeout = setTimeout(() => {
308
+ setVisible(true);
309
+ }, SHOW_DELAY);
310
+ } else {
311
+ setVisible(true);
311
312
  }
312
313
  };
313
- const hideTooltip = () => {
314
- setShow(false);
315
- setFocusedViaKeyboard(false);
316
- };
317
- const hideTooltipViaEscape = e => {
318
- e.code === 'Escape' && hideTooltip();
314
+ const hide = () => {
315
+ clearTimeout(timeout);
316
+ setVisible(false);
319
317
  };
320
- const isTooltipHovered = ({
321
- x,
322
- y
318
+ const handleMouseLeave = ({
319
+ relatedTarget
323
320
  }) => {
324
- const tooltip = tooltipRef.current;
325
- const wrapper = wrapperRef.current;
326
- return tooltip && (inBounds(x, y, wrapper.getBoundingClientRect()) || inBounds(x, y, tooltip.getBoundingClientRect()));
321
+ // Don't hide the tooltip when moving mouse between the wrapper and the tooltip.
322
+ if (relatedTarget === wrapperRef.current || relatedTarget === tooltipRef.current || relatedTarget?.parentElement === tooltipRef.current) {
323
+ return;
324
+ }
325
+ hide();
327
326
  };
328
- useEffect(() => {
327
+ const handleFocusOut = e => {
329
328
  const {
330
- current
331
- } = wrapperRef;
332
- if (!current) {
329
+ target
330
+ } = e;
331
+
332
+ // Don't hide the tooltip if the wrapper or the tooltip itself is clicked.
333
+ const isHovered = target.matches(':hover') || tooltipRef.current?.matches(':hover');
334
+ if (target === wrapperRef.current && isHovered) {
335
+ e.stopPropagation();
333
336
  return;
334
337
  }
335
- const hideHoveredTooltip = e => {
336
- const isFocused = document.activeElement === wrapperRef.current || document.activeElement.closest('.bio-properties-panel-tooltip');
337
- if (visible && !isTooltipHovered({
338
- x: e.x,
339
- y: e.y
340
- }) && !(isFocused && focusedViaKeyboard)) {
341
- hideTooltip();
342
- }
343
- };
344
- const hideFocusedTooltip = e => {
345
- const {
346
- relatedTarget
347
- } = e;
348
- const isTooltipChild = el => !!el.closest('.bio-properties-panel-tooltip');
349
- if (visible && !isHovered(wrapperRef.current) && relatedTarget && !isTooltipChild(relatedTarget)) {
350
- hideTooltip();
351
- }
352
- };
353
- document.addEventListener('wheel', hideHoveredTooltip);
354
- document.addEventListener('focusout', hideFocusedTooltip);
355
- document.addEventListener('mousemove', hideHoveredTooltip);
356
- return () => {
357
- document.removeEventListener('wheel', hideHoveredTooltip);
358
- document.removeEventListener('mousemove', hideHoveredTooltip);
359
- document.removeEventListener('focusout', hideFocusedTooltip);
360
- };
361
- }, [wrapperRef.current, visible, focusedViaKeyboard]);
338
+ hide();
339
+ };
340
+ const hideTooltipViaEscape = e => {
341
+ e.code === 'Escape' && hide();
342
+ };
362
343
  const renderTooltip = () => {
363
344
  return jsxs("div", {
364
345
  class: `bio-properties-panel-tooltip ${direction}`,
@@ -368,6 +349,7 @@ function Tooltip(props) {
368
349
  style: position || getTooltipPosition(wrapperRef.current),
369
350
  ref: tooltipRef,
370
351
  onClick: e => e.stopPropagation(),
352
+ onMouseLeave: handleMouseLeave,
371
353
  children: [jsx("div", {
372
354
  class: "bio-properties-panel-tooltip-content",
373
355
  children: value
@@ -380,54 +362,38 @@ function Tooltip(props) {
380
362
  class: "bio-properties-panel-tooltip-wrapper",
381
363
  tabIndex: "0",
382
364
  ref: wrapperRef,
383
- onMouseEnter: showTooltip,
384
- onMouseLeave: () => {
385
- clearTimeout(timeout);
386
- timeout = null;
387
- },
388
- onFocus: showTooltip,
365
+ onMouseEnter: e => show(e, true),
366
+ onMouseLeave: handleMouseLeave,
367
+ onFocus: show,
368
+ onBlur: handleFocusOut,
389
369
  onKeyDown: hideTooltipViaEscape,
390
370
  children: [props.children, visible ? parent ? createPortal(renderTooltip(), parent.current) : renderTooltip() : null]
391
371
  });
392
372
  }
393
373
 
394
374
  // helper
395
- function inBounds(x, y, bounds) {
396
- const {
397
- top,
398
- right,
399
- bottom,
400
- left
401
- } = bounds;
402
- return x >= left && x <= right && y >= top && y <= bottom;
403
- }
375
+
404
376
  function getTooltipPosition(refElement) {
405
377
  const refPosition = refElement.getBoundingClientRect();
406
378
  const right = `calc(100% - ${refPosition.x}px)`;
407
379
  const top = `${refPosition.top - 10}px`;
408
380
  return `right: ${right}; top: ${top};`;
409
381
  }
410
- function isHovered(element) {
411
- return element.matches(':hover');
412
- }
413
- function prefixId$9(id) {
414
- return `bio-properties-panel-${id}`;
415
- }
416
382
 
417
- /**
418
- * Accesses the global DescriptionContext and returns a description for a given id and element.
419
- *
420
- * @example
421
- * ```jsx
422
- * function TextField(props) {
423
- * const description = useDescriptionContext('input1', element);
424
- * }
425
- * ```
426
- *
427
- * @param {string} id
428
- * @param {object} element
429
- *
430
- * @returns {string}
383
+ /**
384
+ * Accesses the global DescriptionContext and returns a description for a given id and element.
385
+ *
386
+ * @example
387
+ * ```jsx
388
+ * function TextField(props) {
389
+ * const description = useDescriptionContext('input1', element);
390
+ * }
391
+ * ```
392
+ *
393
+ * @param {string} id
394
+ * @param {object} element
395
+ *
396
+ * @returns {string}
431
397
  */
432
398
  function useDescriptionContext(id, element) {
433
399
  const {
@@ -449,11 +415,11 @@ function useErrors() {
449
415
  return errors;
450
416
  }
451
417
 
452
- /**
453
- * Subscribe to an event immediately. Update subscription after inputs changed.
454
- *
455
- * @param {string} event
456
- * @param {Function} callback
418
+ /**
419
+ * Subscribe to an event immediately. Update subscription after inputs changed.
420
+ *
421
+ * @param {string} event
422
+ * @param {Function} callback
457
423
  */
458
424
  function useEvent(event, callback, eventBus) {
459
425
  const eventContext = useContext(EventContext);
@@ -485,24 +451,24 @@ function useEvent(event, callback, eventBus) {
485
451
 
486
452
  const KEY_LENGTH = 6;
487
453
 
488
- /**
489
- * Create a persistent key factory for plain objects without id.
490
- *
491
- * @example
492
- * ```jsx
493
- * function List({ objects }) {
494
- * const getKey = useKeyFactory();
495
- * return (<ol>{
496
- * objects.map(obj => {
497
- * const key = getKey(obj);
498
- * return <li key={key}>obj.name</li>
499
- * })
500
- * }</ol>);
501
- * }
502
- * ```
503
- *
504
- * @param {any[]} dependencies
505
- * @returns {(element: object) => string}
454
+ /**
455
+ * Create a persistent key factory for plain objects without id.
456
+ *
457
+ * @example
458
+ * ```jsx
459
+ * function List({ objects }) {
460
+ * const getKey = useKeyFactory();
461
+ * return (<ol>{
462
+ * objects.map(obj => {
463
+ * const key = getKey(obj);
464
+ * return <li key={key}>obj.name</li>
465
+ * })
466
+ * }</ol>);
467
+ * }
468
+ * ```
469
+ *
470
+ * @param {any[]} dependencies
471
+ * @returns {(element: object) => string}
506
472
  */
507
473
  function useKeyFactory(dependencies = []) {
508
474
  const map = useMemo(() => new Map(), dependencies);
@@ -517,20 +483,20 @@ function useKeyFactory(dependencies = []) {
517
483
  return getKey;
518
484
  }
519
485
 
520
- /**
521
- * Creates a state that persists in the global LayoutContext.
522
- *
523
- * @example
524
- * ```jsx
525
- * function Group(props) {
526
- * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
527
- * }
528
- * ```
529
- *
530
- * @param {(string|number)[]} path
531
- * @param {any} [defaultValue]
532
- *
533
- * @returns {[ any, Function ]}
486
+ /**
487
+ * Creates a state that persists in the global LayoutContext.
488
+ *
489
+ * @example
490
+ * ```jsx
491
+ * function Group(props) {
492
+ * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
493
+ * }
494
+ * ```
495
+ *
496
+ * @param {(string|number)[]} path
497
+ * @param {any} [defaultValue]
498
+ *
499
+ * @returns {[ any, Function ]}
534
500
  */
535
501
  function useLayoutState(path, defaultValue) {
536
502
  const {
@@ -544,11 +510,11 @@ function useLayoutState(path, defaultValue) {
544
510
  return [layoutForKey, setState];
545
511
  }
546
512
 
547
- /**
548
- * @pinussilvestrus: we need to introduce our own hook to persist the previous
549
- * state on updates.
550
- *
551
- * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
513
+ /**
514
+ * @pinussilvestrus: we need to introduce our own hook to persist the previous
515
+ * state on updates.
516
+ *
517
+ * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
552
518
  */
553
519
 
554
520
  function usePrevious(value) {
@@ -559,12 +525,12 @@ function usePrevious(value) {
559
525
  return ref.current;
560
526
  }
561
527
 
562
- /**
563
- * Subscribe to `propertiesPanel.showEntry`.
564
- *
565
- * @param {string} id
566
- *
567
- * @returns {import('preact').Ref}
528
+ /**
529
+ * Subscribe to `propertiesPanel.showEntry`.
530
+ *
531
+ * @param {string} id
532
+ *
533
+ * @returns {import('preact').Ref}
568
534
  */
569
535
  function useShowEntryEvent(id) {
570
536
  const {
@@ -595,20 +561,20 @@ function useShowEntryEvent(id) {
595
561
  return ref;
596
562
  }
597
563
 
598
- /**
599
- * @callback setSticky
600
- * @param {boolean} value
564
+ /**
565
+ * @callback setSticky
566
+ * @param {boolean} value
601
567
  */
602
568
 
603
- /**
604
- * Use IntersectionObserver to identify when DOM element is in sticky mode.
605
- * If sticky is observered setSticky(true) will be called.
606
- * If sticky mode is left, setSticky(false) will be called.
607
- *
608
- *
609
- * @param {Object} ref
610
- * @param {string} scrollContainerSelector
611
- * @param {setSticky} setSticky
569
+ /**
570
+ * Use IntersectionObserver to identify when DOM element is in sticky mode.
571
+ * If sticky is observered setSticky(true) will be called.
572
+ * If sticky mode is left, setSticky(false) will be called.
573
+ *
574
+ *
575
+ * @param {Object} ref
576
+ * @param {string} scrollContainerSelector
577
+ * @param {setSticky} setSticky
612
578
  */
613
579
  function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {
614
580
  const [scrollContainer, setScrollContainer] = useState(query(scrollContainerSelector));
@@ -662,19 +628,19 @@ function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky)
662
628
  }, [ref.current, scrollContainer, setSticky]);
663
629
  }
664
630
 
665
- /**
666
- * Creates a static function reference with changing body.
667
- * This is necessary when external libraries require a callback function
668
- * that has references to state variables.
669
- *
670
- * Usage:
671
- * const callback = useStaticCallback((val) => {val === currentState});
672
- *
673
- * The `callback` reference is static and can be safely used in external
674
- * libraries or as a prop that does not cause rerendering of children.
675
- *
676
- * @param {Function} callback function with changing reference
677
- * @returns {Function} static function reference
631
+ /**
632
+ * Creates a static function reference with changing body.
633
+ * This is necessary when external libraries require a callback function
634
+ * that has references to state variables.
635
+ *
636
+ * Usage:
637
+ * const callback = useStaticCallback((val) => {val === currentState});
638
+ *
639
+ * The `callback` reference is static and can be safely used in external
640
+ * libraries or as a prop that does not cause rerendering of children.
641
+ *
642
+ * @param {Function} callback function with changing reference
643
+ * @returns {Function} static function reference
678
644
  */
679
645
  function useStaticCallback(callback) {
680
646
  const callbackRef = useRef(callback);
@@ -817,13 +783,13 @@ function DataMarker(props) {
817
783
  return null;
818
784
  }
819
785
 
820
- /**
821
- * @typedef { {
822
- * text: (element: object) => string,
823
- * icon?: (element: Object) => import('preact').Component
824
- * } } PlaceholderDefinition
825
- *
826
- * @param { PlaceholderDefinition } props
786
+ /**
787
+ * @typedef { {
788
+ * text: (element: object) => string,
789
+ * icon?: (element: Object) => import('preact').Component
790
+ * } } PlaceholderDefinition
791
+ *
792
+ * @param { PlaceholderDefinition } props
827
793
  */
828
794
  function Placeholder(props) {
829
795
  const {
@@ -862,9 +828,9 @@ function Description(props) {
862
828
 
863
829
  const noop$6 = () => {};
864
830
 
865
- /**
866
- * Buffer `.focus()` calls while the editor is not initialized.
867
- * Set Focus inside when the editor is ready.
831
+ /**
832
+ * Buffer `.focus()` calls while the editor is not initialized.
833
+ * Set Focus inside when the editor is ready.
868
834
  */
869
835
  const useBufferedFocus$1 = function (editor, ref) {
870
836
  const [buffer, setBuffer] = useState(undefined);
@@ -965,9 +931,9 @@ const CodeEditor$1 = forwardRef((props, ref) => {
965
931
 
966
932
  const noop$5 = () => {};
967
933
 
968
- /**
969
- * Buffer `.focus()` calls while the editor is not initialized.
970
- * Set Focus inside when the editor is ready.
934
+ /**
935
+ * Buffer `.focus()` calls while the editor is not initialized.
936
+ * Set Focus inside when the editor is ready.
971
937
  */
972
938
  const useBufferedFocus = function (editor, ref) {
973
939
  const [buffer, setBuffer] = useState(undefined);
@@ -1016,10 +982,10 @@ const CodeEditor = forwardRef((props, ref) => {
1016
982
  useEffect(() => {
1017
983
  let editor;
1018
984
 
1019
- /* Trigger FEEL toggle when
1020
- *
1021
- * - `backspace` is pressed
1022
- * - AND the cursor is at the beginning of the input
985
+ /* Trigger FEEL toggle when
986
+ *
987
+ * - `backspace` is pressed
988
+ * - AND the cursor is at the beginning of the input
1023
989
  */
1024
990
  const onKeyDown = e => {
1025
991
  if (e.key !== 'Backspace' || !editor) {
@@ -1110,10 +1076,10 @@ function FeelIndicator(props) {
1110
1076
 
1111
1077
  const noop$4 = () => {};
1112
1078
 
1113
- /**
1114
- * @param {Object} props
1115
- * @param {Object} props.label
1116
- * @param {String} props.feel
1079
+ /**
1080
+ * @param {Object} props
1081
+ * @param {Object} props.label
1082
+ * @param {String} props.feel
1117
1083
  */
1118
1084
  function FeelIcon(props) {
1119
1085
  const {
@@ -1148,22 +1114,22 @@ const FeelPopupContext = createContext({
1148
1114
  source: null
1149
1115
  });
1150
1116
 
1151
- /**
1152
- * Add a dragger that calls back the passed function with
1153
- * { event, delta } on drag.
1154
- *
1155
- * @example
1156
- *
1157
- * function dragMove(event, delta) {
1158
- * // we are dragging (!!)
1159
- * }
1160
- *
1161
- * domElement.addEventListener('dragstart', dragger(dragMove));
1162
- *
1163
- * @param {Function} fn
1164
- * @param {Element} [dragPreview]
1165
- *
1166
- * @return {Function} drag start callback function
1117
+ /**
1118
+ * Add a dragger that calls back the passed function with
1119
+ * { event, delta } on drag.
1120
+ *
1121
+ * @example
1122
+ *
1123
+ * function dragMove(event, delta) {
1124
+ * // we are dragging (!!)
1125
+ * }
1126
+ *
1127
+ * domElement.addEventListener('dragstart', dragger(dragMove));
1128
+ *
1129
+ * @param {Function} fn
1130
+ * @param {Element} [dragPreview]
1131
+ *
1132
+ * @return {Function} drag start callback function
1167
1133
  */
1168
1134
  function createDragger(fn, dragPreview) {
1169
1135
  let self;
@@ -1218,23 +1184,23 @@ function emptyCanvas() {
1218
1184
 
1219
1185
  const noop$3 = () => {};
1220
1186
 
1221
- /**
1222
- * A generic popup component.
1223
- *
1224
- * @param {Object} props
1225
- * @param {HTMLElement} [props.container]
1226
- * @param {string} [props.className]
1227
- * @param {boolean} [props.delayInitialFocus]
1228
- * @param {{x: number, y: number}} [props.position]
1229
- * @param {number} [props.width]
1230
- * @param {number} [props.height]
1231
- * @param {Function} props.onClose
1232
- * @param {Function} [props.onPostActivate]
1233
- * @param {Function} [props.onPostDeactivate]
1234
- * @param {boolean} [props.returnFocus]
1235
- * @param {boolean} [props.closeOnEscape]
1236
- * @param {string} props.title
1237
- * @param {Ref} [ref]
1187
+ /**
1188
+ * A generic popup component.
1189
+ *
1190
+ * @param {Object} props
1191
+ * @param {HTMLElement} [props.container]
1192
+ * @param {string} [props.className]
1193
+ * @param {boolean} [props.delayInitialFocus]
1194
+ * @param {{x: number, y: number}} [props.position]
1195
+ * @param {number} [props.width]
1196
+ * @param {number} [props.height]
1197
+ * @param {Function} props.onClose
1198
+ * @param {Function} [props.onPostActivate]
1199
+ * @param {Function} [props.onPostDeactivate]
1200
+ * @param {boolean} [props.returnFocus]
1201
+ * @param {boolean} [props.closeOnEscape]
1202
+ * @param {string} props.title
1203
+ * @param {Ref} [ref]
1238
1204
  */
1239
1205
  function PopupComponent(props, globalRef) {
1240
1206
  const {
@@ -1453,12 +1419,12 @@ function getContainerNode(node) {
1453
1419
  const FEEL_POPUP_WIDTH = 700;
1454
1420
  const FEEL_POPUP_HEIGHT = 250;
1455
1421
 
1456
- /**
1457
- * FEEL popup component, built as a singleton. Emits lifecycle events as follows:
1458
- * - `feelPopup.open` - fired before the popup is mounted
1459
- * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup
1460
- * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup
1461
- * - `feelPopup.closed` - fired after the popup is unmounted
1422
+ /**
1423
+ * FEEL popup component, built as a singleton. Emits lifecycle events as follows:
1424
+ * - `feelPopup.open` - fired before the popup is mounted
1425
+ * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup
1426
+ * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup
1427
+ * - `feelPopup.closed` - fired after the popup is unmounted
1462
1428
  */
1463
1429
  function FEELPopupRoot(props) {
1464
1430
  const {
@@ -1684,11 +1650,11 @@ function autoCompletionOpen(element) {
1684
1650
  return element.closest('.cm-editor').querySelector('.cm-tooltip-autocomplete');
1685
1651
  }
1686
1652
 
1687
- /**
1688
- * This hook behaves like useEffect, but does not trigger on the first render.
1689
- *
1690
- * @param {Function} effect
1691
- * @param {Array} deps
1653
+ /**
1654
+ * This hook behaves like useEffect, but does not trigger on the first render.
1655
+ *
1656
+ * @param {Function} effect
1657
+ * @param {Array} deps
1692
1658
  */
1693
1659
  function useUpdateEffect(effect, deps) {
1694
1660
  const isMounted = useRef(false);
@@ -1766,19 +1732,19 @@ function ToggleSwitch(props) {
1766
1732
  });
1767
1733
  }
1768
1734
 
1769
- /**
1770
- * @param {Object} props
1771
- * @param {Object} props.element
1772
- * @param {String} props.id
1773
- * @param {String} props.description
1774
- * @param {String} props.label
1775
- * @param {String} props.switcherLabel
1776
- * @param {Boolean} props.inline
1777
- * @param {Function} props.getValue
1778
- * @param {Function} props.setValue
1779
- * @param {Function} props.onFocus
1780
- * @param {Function} props.onBlur
1781
- * @param {string|import('preact').Component} props.tooltip
1735
+ /**
1736
+ * @param {Object} props
1737
+ * @param {Object} props.element
1738
+ * @param {String} props.id
1739
+ * @param {String} props.description
1740
+ * @param {String} props.label
1741
+ * @param {String} props.switcherLabel
1742
+ * @param {Boolean} props.inline
1743
+ * @param {Function} props.getValue
1744
+ * @param {Function} props.setValue
1745
+ * @param {Function} props.onFocus
1746
+ * @param {Function} props.onBlur
1747
+ * @param {string|import('preact').Component} props.tooltip
1782
1748
  */
1783
1749
  function ToggleSwitchEntry(props) {
1784
1750
  const {
@@ -1886,22 +1852,22 @@ function NumberField(props) {
1886
1852
  });
1887
1853
  }
1888
1854
 
1889
- /**
1890
- * @param {Object} props
1891
- * @param {Boolean} props.debounce
1892
- * @param {String} props.description
1893
- * @param {Boolean} props.disabled
1894
- * @param {Object} props.element
1895
- * @param {Function} props.getValue
1896
- * @param {String} props.id
1897
- * @param {String} props.label
1898
- * @param {String} props.max
1899
- * @param {String} props.min
1900
- * @param {Function} props.setValue
1901
- * @param {Function} props.onFocus
1902
- * @param {Function} props.onBlur
1903
- * @param {String} props.step
1904
- * @param {Function} props.validate
1855
+ /**
1856
+ * @param {Object} props
1857
+ * @param {Boolean} props.debounce
1858
+ * @param {String} props.description
1859
+ * @param {Boolean} props.disabled
1860
+ * @param {Object} props.element
1861
+ * @param {Function} props.getValue
1862
+ * @param {String} props.id
1863
+ * @param {String} props.label
1864
+ * @param {String} props.max
1865
+ * @param {String} props.min
1866
+ * @param {Function} props.setValue
1867
+ * @param {Function} props.onFocus
1868
+ * @param {Function} props.onBlur
1869
+ * @param {String} props.step
1870
+ * @param {Function} props.validate
1905
1871
  */
1906
1872
  function NumberFieldEntry(props) {
1907
1873
  const {
@@ -2387,26 +2353,26 @@ const OptionalFeelCheckbox = forwardRef((props, ref) => {
2387
2353
  });
2388
2354
  });
2389
2355
 
2390
- /**
2391
- * @param {Object} props
2392
- * @param {Object} props.element
2393
- * @param {String} props.id
2394
- * @param {String} props.description
2395
- * @param {Boolean} props.debounce
2396
- * @param {Boolean} props.disabled
2397
- * @param {Boolean} props.feel
2398
- * @param {String} props.label
2399
- * @param {Function} props.getValue
2400
- * @param {Function} props.setValue
2401
- * @param {Function} props.tooltipContainer
2402
- * @param {Function} props.validate
2403
- * @param {Function} props.show
2404
- * @param {Function} props.example
2405
- * @param {Function} props.variables
2406
- * @param {Function} props.onFocus
2407
- * @param {Function} props.onBlur
2408
- * @param {string} [props.placeholder]
2409
- * @param {string|import('preact').Component} props.tooltip
2356
+ /**
2357
+ * @param {Object} props
2358
+ * @param {Object} props.element
2359
+ * @param {String} props.id
2360
+ * @param {String} props.description
2361
+ * @param {Boolean} props.debounce
2362
+ * @param {Boolean} props.disabled
2363
+ * @param {Boolean} props.feel
2364
+ * @param {String} props.label
2365
+ * @param {Function} props.getValue
2366
+ * @param {Function} props.setValue
2367
+ * @param {Function} props.tooltipContainer
2368
+ * @param {Function} props.validate
2369
+ * @param {Function} props.show
2370
+ * @param {Function} props.example
2371
+ * @param {Function} props.variables
2372
+ * @param {Function} props.onFocus
2373
+ * @param {Function} props.onBlur
2374
+ * @param {string} [props.placeholder]
2375
+ * @param {string|import('preact').Component} props.tooltip
2410
2376
  */
2411
2377
  function FeelEntry(props) {
2412
2378
  const {
@@ -2493,27 +2459,27 @@ function FeelEntry(props) {
2493
2459
  });
2494
2460
  }
2495
2461
 
2496
- /**
2497
- * @param {Object} props
2498
- * @param {Object} props.element
2499
- * @param {String} props.id
2500
- * @param {String} props.description
2501
- * @param {Boolean} props.debounce
2502
- * @param {Boolean} props.disabled
2503
- * @param {String} props.max
2504
- * @param {String} props.min
2505
- * @param {String} props.step
2506
- * @param {Boolean} props.feel
2507
- * @param {String} props.label
2508
- * @param {Function} props.getValue
2509
- * @param {Function} props.setValue
2510
- * @param {Function} props.tooltipContainer
2511
- * @param {Function} props.validate
2512
- * @param {Function} props.show
2513
- * @param {Function} props.example
2514
- * @param {Function} props.variables
2515
- * @param {Function} props.onFocus
2516
- * @param {Function} props.onBlur
2462
+ /**
2463
+ * @param {Object} props
2464
+ * @param {Object} props.element
2465
+ * @param {String} props.id
2466
+ * @param {String} props.description
2467
+ * @param {Boolean} props.debounce
2468
+ * @param {Boolean} props.disabled
2469
+ * @param {String} props.max
2470
+ * @param {String} props.min
2471
+ * @param {String} props.step
2472
+ * @param {Boolean} props.feel
2473
+ * @param {String} props.label
2474
+ * @param {Function} props.getValue
2475
+ * @param {Function} props.setValue
2476
+ * @param {Function} props.tooltipContainer
2477
+ * @param {Function} props.validate
2478
+ * @param {Function} props.show
2479
+ * @param {Function} props.example
2480
+ * @param {Function} props.variables
2481
+ * @param {Function} props.onFocus
2482
+ * @param {Function} props.onBlur
2517
2483
  */
2518
2484
  function FeelNumberEntry(props) {
2519
2485
  return jsx(FeelEntry, {
@@ -2523,25 +2489,25 @@ function FeelNumberEntry(props) {
2523
2489
  });
2524
2490
  }
2525
2491
 
2526
- /**
2527
- * @param {Object} props
2528
- * @param {Object} props.element
2529
- * @param {String} props.id
2530
- * @param {String} props.description
2531
- * @param {Boolean} props.debounce
2532
- * @param {Boolean} props.disabled
2533
- * @param {Boolean} props.feel
2534
- * @param {String} props.label
2535
- * @param {Function} props.getValue
2536
- * @param {Function} props.setValue
2537
- * @param {Function} props.tooltipContainer
2538
- * @param {Function} props.validate
2539
- * @param {Function} props.show
2540
- * @param {Function} props.example
2541
- * @param {Function} props.variables
2542
- * @param {Function} props.onFocus
2543
- * @param {Function} props.onBlur
2544
- * @param {string} [props.placeholder]
2492
+ /**
2493
+ * @param {Object} props
2494
+ * @param {Object} props.element
2495
+ * @param {String} props.id
2496
+ * @param {String} props.description
2497
+ * @param {Boolean} props.debounce
2498
+ * @param {Boolean} props.disabled
2499
+ * @param {Boolean} props.feel
2500
+ * @param {String} props.label
2501
+ * @param {Function} props.getValue
2502
+ * @param {Function} props.setValue
2503
+ * @param {Function} props.tooltipContainer
2504
+ * @param {Function} props.validate
2505
+ * @param {Function} props.show
2506
+ * @param {Function} props.example
2507
+ * @param {Function} props.variables
2508
+ * @param {Function} props.onFocus
2509
+ * @param {Function} props.onBlur
2510
+ * @param {string} [props.placeholder]
2545
2511
  */
2546
2512
  function FeelTextAreaEntry(props) {
2547
2513
  return jsx(FeelEntry, {
@@ -2551,24 +2517,24 @@ function FeelTextAreaEntry(props) {
2551
2517
  });
2552
2518
  }
2553
2519
 
2554
- /**
2555
- * @param {Object} props
2556
- * @param {Object} props.element
2557
- * @param {String} props.id
2558
- * @param {String} props.description
2559
- * @param {Boolean} props.debounce
2560
- * @param {Boolean} props.disabled
2561
- * @param {Boolean} props.feel
2562
- * @param {String} props.label
2563
- * @param {Function} props.getValue
2564
- * @param {Function} props.setValue
2565
- * @param {Function} props.tooltipContainer
2566
- * @param {Function} props.validate
2567
- * @param {Function} props.show
2568
- * @param {Function} props.example
2569
- * @param {Function} props.variables
2570
- * @param {Function} props.onFocus
2571
- * @param {Function} props.onBlur
2520
+ /**
2521
+ * @param {Object} props
2522
+ * @param {Object} props.element
2523
+ * @param {String} props.id
2524
+ * @param {String} props.description
2525
+ * @param {Boolean} props.debounce
2526
+ * @param {Boolean} props.disabled
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
2572
2538
  */
2573
2539
  function FeelToggleSwitchEntry(props) {
2574
2540
  return jsx(FeelEntry, {
@@ -2578,24 +2544,24 @@ function FeelToggleSwitchEntry(props) {
2578
2544
  });
2579
2545
  }
2580
2546
 
2581
- /**
2582
- * @param {Object} props
2583
- * @param {Object} props.element
2584
- * @param {String} props.id
2585
- * @param {String} props.description
2586
- * @param {Boolean} props.debounce
2587
- * @param {Boolean} props.disabled
2588
- * @param {Boolean} props.feel
2589
- * @param {String} props.label
2590
- * @param {Function} props.getValue
2591
- * @param {Function} props.setValue
2592
- * @param {Function} props.tooltipContainer
2593
- * @param {Function} props.validate
2594
- * @param {Function} props.show
2595
- * @param {Function} props.example
2596
- * @param {Function} props.variables
2597
- * @param {Function} props.onFocus
2598
- * @param {Function} props.onBlur
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
2599
2565
  */
2600
2566
  function FeelCheckboxEntry(props) {
2601
2567
  return jsx(FeelEntry, {
@@ -2605,26 +2571,26 @@ function FeelCheckboxEntry(props) {
2605
2571
  });
2606
2572
  }
2607
2573
 
2608
- /**
2609
- * @param {Object} props
2610
- * @param {Object} props.element
2611
- * @param {String} props.id
2612
- * @param {String} props.description
2613
- * @param {String} props.hostLanguage
2614
- * @param {Boolean} props.singleLine
2615
- * @param {Boolean} props.debounce
2616
- * @param {Boolean} props.disabled
2617
- * @param {Boolean} props.feel
2618
- * @param {String} props.label
2619
- * @param {Function} props.getValue
2620
- * @param {Function} props.setValue
2621
- * @param {Function} props.tooltipContainer
2622
- * @param {Function} props.validate
2623
- * @param {Function} props.show
2624
- * @param {Function} props.example
2625
- * @param {Function} props.variables
2626
- * @param {Function} props.onFocus
2627
- * @param {Function} props.onBlur
2574
+ /**
2575
+ * @param {Object} props
2576
+ * @param {Object} props.element
2577
+ * @param {String} props.id
2578
+ * @param {String} props.description
2579
+ * @param {String} props.hostLanguage
2580
+ * @param {Boolean} props.singleLine
2581
+ * @param {Boolean} props.debounce
2582
+ * @param {Boolean} props.disabled
2583
+ * @param {Boolean} props.feel
2584
+ * @param {String} props.label
2585
+ * @param {Function} props.getValue
2586
+ * @param {Function} props.setValue
2587
+ * @param {Function} props.tooltipContainer
2588
+ * @param {Function} props.validate
2589
+ * @param {Function} props.show
2590
+ * @param {Function} props.example
2591
+ * @param {Function} props.variables
2592
+ * @param {Function} props.onFocus
2593
+ * @param {Function} props.onBlur
2628
2594
  */
2629
2595
  function FeelTemplatingEntry(props) {
2630
2596
  return jsx(FeelEntry, {
@@ -2693,85 +2659,85 @@ const DEFAULT_LAYOUT = {};
2693
2659
  const DEFAULT_DESCRIPTION = {};
2694
2660
  const DEFAULT_TOOLTIP = {};
2695
2661
 
2696
- /**
2697
- * @typedef { {
2698
- * component: import('preact').Component,
2699
- * id: String,
2700
- * isEdited?: Function
2701
- * } } EntryDefinition
2702
- *
2703
- * @typedef { {
2704
- * autoFocusEntry: String,
2705
- * autoOpen?: Boolean,
2706
- * entries: Array<EntryDefinition>,
2707
- * id: String,
2708
- * label: String,
2709
- * remove: (event: MouseEvent) => void
2710
- * } } ListItemDefinition
2711
- *
2712
- * @typedef { {
2713
- * add: (event: MouseEvent) => void,
2714
- * component: import('preact').Component,
2715
- * element: Object,
2716
- * id: String,
2717
- * items: Array<ListItemDefinition>,
2718
- * label: String,
2719
- * shouldOpen?: Boolean
2720
- * } } ListGroupDefinition
2721
- *
2722
- * @typedef { {
2723
- * component?: import('preact').Component,
2724
- * entries: Array<EntryDefinition>,
2725
- * id: String,
2726
- * label: String,
2727
- * shouldOpen?: Boolean
2728
- * } } GroupDefinition
2729
- *
2730
- * @typedef { {
2731
- * [id: String]: GetDescriptionFunction
2732
- * } } DescriptionConfig
2733
- *
2734
- * @typedef { {
2735
- * [id: String]: GetTooltipFunction
2736
- * } } TooltipConfig
2737
- *
2738
- * @callback { {
2739
- * @param {string} id
2740
- * @param {Object} element
2741
- * @returns {string}
2742
- * } } GetDescriptionFunction
2743
- *
2744
- * @callback { {
2745
- * @param {string} id
2746
- * @param {Object} element
2747
- * @returns {string}
2748
- * } } GetTooltipFunction
2749
- *
2750
- * @typedef { {
2751
- * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
2752
- * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
2753
- * } } PlaceholderProvider
2754
- *
2662
+ /**
2663
+ * @typedef { {
2664
+ * component: import('preact').Component,
2665
+ * id: String,
2666
+ * isEdited?: Function
2667
+ * } } EntryDefinition
2668
+ *
2669
+ * @typedef { {
2670
+ * autoFocusEntry: String,
2671
+ * autoOpen?: Boolean,
2672
+ * entries: Array<EntryDefinition>,
2673
+ * id: String,
2674
+ * label: String,
2675
+ * remove: (event: MouseEvent) => void
2676
+ * } } ListItemDefinition
2677
+ *
2678
+ * @typedef { {
2679
+ * add: (event: MouseEvent) => void,
2680
+ * component: import('preact').Component,
2681
+ * element: Object,
2682
+ * id: String,
2683
+ * items: Array<ListItemDefinition>,
2684
+ * label: String,
2685
+ * shouldOpen?: Boolean
2686
+ * } } ListGroupDefinition
2687
+ *
2688
+ * @typedef { {
2689
+ * component?: import('preact').Component,
2690
+ * entries: Array<EntryDefinition>,
2691
+ * id: String,
2692
+ * label: String,
2693
+ * shouldOpen?: Boolean
2694
+ * } } GroupDefinition
2695
+ *
2696
+ * @typedef { {
2697
+ * [id: String]: GetDescriptionFunction
2698
+ * } } DescriptionConfig
2699
+ *
2700
+ * @typedef { {
2701
+ * [id: String]: GetTooltipFunction
2702
+ * } } TooltipConfig
2703
+ *
2704
+ * @callback { {
2705
+ * @param {string} id
2706
+ * @param {Object} element
2707
+ * @returns {string}
2708
+ * } } GetDescriptionFunction
2709
+ *
2710
+ * @callback { {
2711
+ * @param {string} id
2712
+ * @param {Object} element
2713
+ * @returns {string}
2714
+ * } } GetTooltipFunction
2715
+ *
2716
+ * @typedef { {
2717
+ * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
2718
+ * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
2719
+ * } } PlaceholderProvider
2720
+ *
2755
2721
  */
2756
2722
 
2757
- /**
2758
- * A basic properties panel component. Describes *how* content will be rendered, accepts
2759
- * data from implementor to describe *what* will be rendered.
2760
- *
2761
- * @param {Object} props
2762
- * @param {Object|Array} props.element
2763
- * @param {import('./components/Header').HeaderProvider} props.headerProvider
2764
- * @param {PlaceholderProvider} [props.placeholderProvider]
2765
- * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
2766
- * @param {Object} [props.layoutConfig]
2767
- * @param {Function} [props.layoutChanged]
2768
- * @param {DescriptionConfig} [props.descriptionConfig]
2769
- * @param {Function} [props.descriptionLoaded]
2770
- * @param {TooltipConfig} [props.tooltipConfig]
2771
- * @param {Function} [props.tooltipLoaded]
2772
- * @param {HTMLElement} [props.feelPopupContainer]
2773
- * @param {Function} [props.getFeelPopupLinks]
2774
- * @param {Object} [props.eventBus]
2723
+ /**
2724
+ * A basic properties panel component. Describes *how* content will be rendered, accepts
2725
+ * data from implementor to describe *what* will be rendered.
2726
+ *
2727
+ * @param {Object} props
2728
+ * @param {Object|Array} props.element
2729
+ * @param {import('./components/Header').HeaderProvider} props.headerProvider
2730
+ * @param {PlaceholderProvider} [props.placeholderProvider]
2731
+ * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
2732
+ * @param {Object} [props.layoutConfig]
2733
+ * @param {Function} [props.layoutChanged]
2734
+ * @param {DescriptionConfig} [props.descriptionConfig]
2735
+ * @param {Function} [props.descriptionLoaded]
2736
+ * @param {TooltipConfig} [props.tooltipConfig]
2737
+ * @param {Function} [props.tooltipLoaded]
2738
+ * @param {HTMLElement} [props.feelPopupContainer]
2739
+ * @param {Function} [props.getFeelPopupLinks]
2740
+ * @param {Object} [props.eventBus]
2775
2741
  */
2776
2742
  function PropertiesPanel(props) {
2777
2743
  const {
@@ -2944,11 +2910,11 @@ function createTooltipContext(overrides = {}) {
2944
2910
 
2945
2911
  // hooks //////////////////
2946
2912
 
2947
- /**
2948
- * This hook behaves like useLayoutEffect, but does not trigger on the first render.
2949
- *
2950
- * @param {Function} effect
2951
- * @param {Array} deps
2913
+ /**
2914
+ * This hook behaves like useLayoutEffect, but does not trigger on the first render.
2915
+ *
2916
+ * @param {Function} effect
2917
+ * @param {Array} deps
2952
2918
  */
2953
2919
  function useUpdateLayoutEffect(effect, deps) {
2954
2920
  const isMounted = useRef(false);
@@ -3023,15 +2989,15 @@ function MenuItem({
3023
2989
  });
3024
2990
  }
3025
2991
 
3026
- /**
3027
- *
3028
- * @param {Array<null | Element>} ignoredElements
3029
- * @param {Function} callback
2992
+ /**
2993
+ *
2994
+ * @param {Array<null | Element>} ignoredElements
2995
+ * @param {Function} callback
3030
2996
  */
3031
2997
  function useGlobalClick(ignoredElements, callback) {
3032
2998
  useEffect(() => {
3033
- /**
3034
- * @param {MouseEvent} event
2999
+ /**
3000
+ * @param {MouseEvent} event
3035
3001
  */
3036
3002
  function listener(event) {
3037
3003
  if (ignoredElements.some(element => element && element.contains(event.target))) {
@@ -3064,20 +3030,20 @@ function HeaderButton(props) {
3064
3030
  });
3065
3031
  }
3066
3032
 
3067
- /**
3068
- * @typedef { {
3069
- * [key: string]: string;
3070
- * } } TranslateReplacements
3033
+ /**
3034
+ * @typedef { {
3035
+ * [key: string]: string;
3036
+ * } } TranslateReplacements
3071
3037
  */
3072
3038
 
3073
- /**
3074
- * A simple translation stub to be used for multi-language support.
3075
- * Can be easily replaced with a more sophisticated solution.
3076
- *
3077
- * @param {string} template to interpolate
3078
- * @param {TranslateReplacements} [replacements] a map with substitutes
3079
- *
3080
- * @return {string} the translated string
3039
+ /**
3040
+ * A simple translation stub to be used for multi-language support.
3041
+ * Can be easily replaced with a more sophisticated solution.
3042
+ *
3043
+ * @param {string} template to interpolate
3044
+ * @param {TranslateReplacements} [replacements] a map with substitutes
3045
+ *
3046
+ * @return {string} the translated string
3081
3047
  */
3082
3048
  function translateFallback(template, replacements) {
3083
3049
  replacements = replacements || {};
@@ -3189,8 +3155,8 @@ function ListItem(props) {
3189
3155
 
3190
3156
  const noop$1 = () => {};
3191
3157
 
3192
- /**
3193
- * @param {import('../PropertiesPanel').ListGroupDefinition} props
3158
+ /**
3159
+ * @param {import('../PropertiesPanel').ListGroupDefinition} props
3194
3160
  */
3195
3161
  function ListGroup(props) {
3196
3162
  const {
@@ -3382,18 +3348,18 @@ function Checkbox(props) {
3382
3348
  });
3383
3349
  }
3384
3350
 
3385
- /**
3386
- * @param {Object} props
3387
- * @param {Object} props.element
3388
- * @param {String} props.id
3389
- * @param {String} props.description
3390
- * @param {String} props.label
3391
- * @param {Function} props.getValue
3392
- * @param {Function} props.setValue
3393
- * @param {Function} props.onFocus
3394
- * @param {Function} props.onBlur
3395
- * @param {string|import('preact').Component} props.tooltip
3396
- * @param {boolean} [props.disabled]
3351
+ /**
3352
+ * @param {Object} props
3353
+ * @param {Object} props.element
3354
+ * @param {String} props.id
3355
+ * @param {String} props.description
3356
+ * @param {String} props.label
3357
+ * @param {Function} props.getValue
3358
+ * @param {Function} props.setValue
3359
+ * @param {Function} props.onFocus
3360
+ * @param {Function} props.onBlur
3361
+ * @param {string|import('preact').Component} props.tooltip
3362
+ * @param {boolean} [props.disabled]
3397
3363
  */
3398
3364
  function CheckboxEntry(props) {
3399
3365
  const {
@@ -3445,19 +3411,19 @@ function prefixId$4(id) {
3445
3411
 
3446
3412
  const noop = () => {};
3447
3413
 
3448
- /**
3449
- * @param {Object} props
3450
- * @param {Object} props.element
3451
- * @param {String} props.id
3452
- * @param {String} props.description
3453
- * @param {Boolean} props.debounce
3454
- * @param {Boolean} props.disabled
3455
- * @param {String} props.label
3456
- * @param {Function} props.getValue
3457
- * @param {Function} props.setValue
3458
- * @param {Function} props.tooltipContainer
3459
- * @param {Function} props.validate
3460
- * @param {Function} props.show
3414
+ /**
3415
+ * @param {Object} props
3416
+ * @param {Object} props.element
3417
+ * @param {String} props.id
3418
+ * @param {String} props.description
3419
+ * @param {Boolean} props.debounce
3420
+ * @param {Boolean} props.disabled
3421
+ * @param {String} props.label
3422
+ * @param {Function} props.getValue
3423
+ * @param {Function} props.setValue
3424
+ * @param {Function} props.tooltipContainer
3425
+ * @param {Function} props.validate
3426
+ * @param {Function} props.show
3461
3427
  */
3462
3428
  function TemplatingEntry(props) {
3463
3429
  const {
@@ -3632,8 +3598,8 @@ function List(props) {
3632
3598
  }
3633
3599
  }, [open, hasItems]);
3634
3600
 
3635
- /**
3636
- * @param {MouseEvent} event
3601
+ /**
3602
+ * @param {MouseEvent} event
3637
3603
  */
3638
3604
  function addItem(event) {
3639
3605
  event.stopPropagation();
@@ -3825,20 +3791,20 @@ function Select(props) {
3825
3791
  });
3826
3792
  }
3827
3793
 
3828
- /**
3829
- * @param {object} props
3830
- * @param {object} props.element
3831
- * @param {string} props.id
3832
- * @param {string} [props.description]
3833
- * @param {string} props.label
3834
- * @param {Function} props.getValue
3835
- * @param {Function} props.setValue
3836
- * @param {Function} props.onFocus
3837
- * @param {Function} props.onBlur
3838
- * @param {Function} props.getOptions
3839
- * @param {boolean} [props.disabled]
3840
- * @param {Function} [props.validate]
3841
- * @param {string|import('preact').Component} props.tooltip
3794
+ /**
3795
+ * @param {object} props
3796
+ * @param {object} props.element
3797
+ * @param {string} props.id
3798
+ * @param {string} [props.description]
3799
+ * @param {string} props.label
3800
+ * @param {Function} props.getValue
3801
+ * @param {Function} props.setValue
3802
+ * @param {Function} props.onFocus
3803
+ * @param {Function} props.onBlur
3804
+ * @param {Function} props.getOptions
3805
+ * @param {boolean} [props.disabled]
3806
+ * @param {Function} [props.validate]
3807
+ * @param {string|import('preact').Component} props.tooltip
3842
3808
  */
3843
3809
  function SelectEntry(props) {
3844
3810
  const {
@@ -4185,20 +4151,20 @@ function Textfield(props) {
4185
4151
  });
4186
4152
  }
4187
4153
 
4188
- /**
4189
- * @param {Object} props
4190
- * @param {Object} props.element
4191
- * @param {String} props.id
4192
- * @param {String} props.description
4193
- * @param {Boolean} props.debounce
4194
- * @param {Boolean} props.disabled
4195
- * @param {String} props.label
4196
- * @param {Function} props.getValue
4197
- * @param {Function} props.setValue
4198
- * @param {Function} props.onFocus
4199
- * @param {Function} props.onBlur
4200
- * @param {string|import('preact').Component} props.tooltip
4201
- * @param {Function} props.validate
4154
+ /**
4155
+ * @param {Object} props
4156
+ * @param {Object} props.element
4157
+ * @param {String} props.id
4158
+ * @param {String} props.description
4159
+ * @param {Boolean} props.debounce
4160
+ * @param {Boolean} props.disabled
4161
+ * @param {String} props.label
4162
+ * @param {Function} props.getValue
4163
+ * @param {Function} props.setValue
4164
+ * @param {Function} props.onFocus
4165
+ * @param {Function} props.onBlur
4166
+ * @param {string|import('preact').Component} props.tooltip
4167
+ * @param {Function} props.validate
4202
4168
  */
4203
4169
  function TextfieldEntry(props) {
4204
4170
  const {
@@ -4291,20 +4257,20 @@ class FeelPopupModule {
4291
4257
  this._eventBus = eventBus;
4292
4258
  }
4293
4259
 
4294
- /**
4295
- * Check if the FEEL popup is open.
4296
- * @return {Boolean}
4260
+ /**
4261
+ * Check if the FEEL popup is open.
4262
+ * @return {Boolean}
4297
4263
  */
4298
4264
  isOpen() {
4299
4265
  return this._eventBus.fire('feelPopup._isOpen');
4300
4266
  }
4301
4267
 
4302
- /**
4303
- * Open the FEEL popup.
4304
- *
4305
- * @param {String} entryId
4306
- * @param {Object} popupConfig
4307
- * @param {HTMLElement} sourceElement
4268
+ /**
4269
+ * Open the FEEL popup.
4270
+ *
4271
+ * @param {String} entryId
4272
+ * @param {Object} popupConfig
4273
+ * @param {HTMLElement} sourceElement
4308
4274
  */
4309
4275
  open(entryId, popupConfig, sourceElement) {
4310
4276
  return this._eventBus.fire('feelPopup._open', {
@@ -4314,8 +4280,8 @@ class FeelPopupModule {
4314
4280
  });
4315
4281
  }
4316
4282
 
4317
- /**
4318
- * Close the FEEL popup.
4283
+ /**
4284
+ * Close the FEEL popup.
4319
4285
  */
4320
4286
  close() {
4321
4287
  return this._eventBus.fire('feelPopup._close');