@bpmn-io/properties-panel 3.24.1 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -45,6 +45,21 @@ ArrowIcon.defaultProps = {
45
45
  width: "16",
46
46
  height: "16"
47
47
  };
48
+ var CloseIcon = function CloseIcon(props) {
49
+ return jsxRuntime.jsx("svg", {
50
+ ...props,
51
+ children: jsxRuntime.jsx("path", {
52
+ fillRule: "evenodd",
53
+ d: "m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8 12 4.7Z",
54
+ fill: "currentColor"
55
+ })
56
+ });
57
+ };
58
+ CloseIcon.defaultProps = {
59
+ xmlns: "http://www.w3.org/2000/svg",
60
+ width: "16",
61
+ height: "16"
62
+ };
48
63
  var CreateIcon = function CreateIcon(props) {
49
64
  return jsxRuntime.jsx("svg", {
50
65
  ...props,
@@ -132,26 +147,17 @@ FeelIcon$1.defaultProps = {
132
147
  fill: "none",
133
148
  xmlns: "http://www.w3.org/2000/svg"
134
149
  };
135
- var HelpIcon = function HelpIcon(props) {
150
+ var LaunchIcon = function LaunchIcon(props) {
136
151
  return jsxRuntime.jsxs("svg", {
137
152
  ...props,
138
153
  children: [jsxRuntime.jsx("path", {
139
- d: "M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2Zm0 26a12 12 0 1 1 12-12 12 12 0 0 1-12 12Z"
140
- }), jsxRuntime.jsx("circle", {
141
- cx: "16",
142
- cy: "23.5",
143
- r: "1.5"
154
+ d: "M26 28H6a2.003 2.003 0 0 1-2-2V6a2.003 2.003 0 0 1 2-2h10v2H6v20h20V16h2v10a2.003 2.003 0 0 1-2 2Z"
144
155
  }), jsxRuntime.jsx("path", {
145
- d: "M17 8h-1.5a4.49 4.49 0 0 0-4.5 4.5v.5h2v-.5a2.5 2.5 0 0 1 2.5-2.5H17a2.5 2.5 0 0 1 0 5h-2v4.5h2V17a4.5 4.5 0 0 0 0-9Z"
146
- }), jsxRuntime.jsx("path", {
147
- style: {
148
- fill: "none"
149
- },
150
- d: "M0 0h32v32H0z"
156
+ d: "M20 2v2h6.586L18 12.586 19.414 14 28 5.414V12h2V2H20z"
151
157
  })]
152
158
  });
153
159
  };
154
- HelpIcon.defaultProps = {
160
+ LaunchIcon.defaultProps = {
155
161
  xmlns: "http://www.w3.org/2000/svg",
156
162
  viewBox: "0 0 32 32"
157
163
  };
@@ -173,21 +179,6 @@ PopupIcon.defaultProps = {
173
179
  height: "16",
174
180
  viewBox: "0 0 32 32"
175
181
  };
176
- var CloseIcon = function CloseIcon(props) {
177
- return jsxRuntime.jsx("svg", {
178
- ...props,
179
- children: jsxRuntime.jsx("path", {
180
- fillRule: "evenodd",
181
- d: "m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8 12 4.7Z",
182
- fill: "currentColor"
183
- })
184
- });
185
- };
186
- CloseIcon.defaultProps = {
187
- xmlns: "http://www.w3.org/2000/svg",
188
- width: "16",
189
- height: "16"
190
- };
191
182
 
192
183
  function Header(props) {
193
184
  const {
@@ -227,7 +218,7 @@ function Header(props) {
227
218
  }), jsxRuntime.jsx("div", {
228
219
  class: "bio-properties-panel-header-actions",
229
220
  children: documentationRef ? jsxRuntime.jsx("a", {
230
- rel: "noopener",
221
+ rel: "noreferrer",
231
222
  class: "bio-properties-panel-header-link",
232
223
  href: documentationRef,
233
224
  title: "Open documentation",
@@ -247,19 +238,19 @@ const ErrorsContext = preact.createContext({
247
238
  errors: {}
248
239
  });
249
240
 
250
- /**
251
- * @typedef {Function} <propertiesPanel.showEntry> callback
252
- *
253
- * @example
254
- *
255
- * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
256
- * // ...
257
- * });
258
- *
259
- * @param {Object} context
260
- * @param {boolean} [context.focus]
261
- *
262
- * @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
263
254
  */
264
255
 
265
256
  const EventContext = preact.createContext({
@@ -278,20 +269,20 @@ const TooltipContext = preact.createContext({
278
269
  getTooltipForId: () => {}
279
270
  });
280
271
 
281
- /**
282
- * Accesses the global TooltipContext and returns a tooltip for a given id and element.
283
- *
284
- * @example
285
- * ```jsx
286
- * function TextField(props) {
287
- * const tooltip = useTooltipContext('input1', element);
288
- * }
289
- * ```
290
- *
291
- * @param {string} id
292
- * @param {object} element
293
- *
294
- * @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}
295
286
  */
296
287
  function useTooltipContext(id, element) {
297
288
  const {
@@ -444,20 +435,20 @@ function prefixId$9(id) {
444
435
  return `bio-properties-panel-${id}`;
445
436
  }
446
437
 
447
- /**
448
- * Accesses the global DescriptionContext and returns a description for a given id and element.
449
- *
450
- * @example
451
- * ```jsx
452
- * function TextField(props) {
453
- * const description = useDescriptionContext('input1', element);
454
- * }
455
- * ```
456
- *
457
- * @param {string} id
458
- * @param {object} element
459
- *
460
- * @returns {string}
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}
461
452
  */
462
453
  function useDescriptionContext(id, element) {
463
454
  const {
@@ -479,11 +470,11 @@ function useErrors() {
479
470
  return errors;
480
471
  }
481
472
 
482
- /**
483
- * Subscribe to an event immediately. Update subscription after inputs changed.
484
- *
485
- * @param {string} event
486
- * @param {Function} callback
473
+ /**
474
+ * Subscribe to an event immediately. Update subscription after inputs changed.
475
+ *
476
+ * @param {string} event
477
+ * @param {Function} callback
487
478
  */
488
479
  function useEvent(event, callback, eventBus) {
489
480
  const eventContext = hooks.useContext(EventContext);
@@ -515,24 +506,24 @@ function useEvent(event, callback, eventBus) {
515
506
 
516
507
  const KEY_LENGTH = 6;
517
508
 
518
- /**
519
- * Create a persistent key factory for plain objects without id.
520
- *
521
- * @example
522
- * ```jsx
523
- * function List({ objects }) {
524
- * const getKey = useKeyFactory();
525
- * return (<ol>{
526
- * objects.map(obj => {
527
- * const key = getKey(obj);
528
- * return <li key={key}>obj.name</li>
529
- * })
530
- * }</ol>);
531
- * }
532
- * ```
533
- *
534
- * @param {any[]} dependencies
535
- * @returns {(element: object) => string}
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}
536
527
  */
537
528
  function useKeyFactory(dependencies = []) {
538
529
  const map = hooks.useMemo(() => new Map(), dependencies);
@@ -547,20 +538,20 @@ function useKeyFactory(dependencies = []) {
547
538
  return getKey;
548
539
  }
549
540
 
550
- /**
551
- * Creates a state that persists in the global LayoutContext.
552
- *
553
- * @example
554
- * ```jsx
555
- * function Group(props) {
556
- * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
557
- * }
558
- * ```
559
- *
560
- * @param {(string|number)[]} path
561
- * @param {any} [defaultValue]
562
- *
563
- * @returns {[ any, Function ]}
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 ]}
564
555
  */
565
556
  function useLayoutState(path, defaultValue) {
566
557
  const {
@@ -574,11 +565,11 @@ function useLayoutState(path, defaultValue) {
574
565
  return [layoutForKey, setState];
575
566
  }
576
567
 
577
- /**
578
- * @pinussilvestrus: we need to introduce our own hook to persist the previous
579
- * state on updates.
580
- *
581
- * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
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
582
573
  */
583
574
 
584
575
  function usePrevious(value) {
@@ -589,12 +580,12 @@ function usePrevious(value) {
589
580
  return ref.current;
590
581
  }
591
582
 
592
- /**
593
- * Subscribe to `propertiesPanel.showEntry`.
594
- *
595
- * @param {string} id
596
- *
597
- * @returns {import('preact').Ref}
583
+ /**
584
+ * Subscribe to `propertiesPanel.showEntry`.
585
+ *
586
+ * @param {string} id
587
+ *
588
+ * @returns {import('preact').Ref}
598
589
  */
599
590
  function useShowEntryEvent(id) {
600
591
  const {
@@ -625,20 +616,20 @@ function useShowEntryEvent(id) {
625
616
  return ref;
626
617
  }
627
618
 
628
- /**
629
- * @callback setSticky
630
- * @param {boolean} value
619
+ /**
620
+ * @callback setSticky
621
+ * @param {boolean} value
631
622
  */
632
623
 
633
- /**
634
- * Use IntersectionObserver to identify when DOM element is in sticky mode.
635
- * If sticky is observered setSticky(true) will be called.
636
- * If sticky mode is left, setSticky(false) will be called.
637
- *
638
- *
639
- * @param {Object} ref
640
- * @param {string} scrollContainerSelector
641
- * @param {setSticky} setSticky
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
642
633
  */
643
634
  function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {
644
635
  const [scrollContainer, setScrollContainer] = hooks.useState(minDom.query(scrollContainerSelector));
@@ -692,19 +683,19 @@ function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky)
692
683
  }, [ref.current, scrollContainer, setSticky]);
693
684
  }
694
685
 
695
- /**
696
- * Creates a static function reference with changing body.
697
- * This is necessary when external libraries require a callback function
698
- * that has references to state variables.
699
- *
700
- * Usage:
701
- * const callback = useStaticCallback((val) => {val === currentState});
702
- *
703
- * The `callback` reference is static and can be safely used in external
704
- * libraries or as a prop that does not cause rerendering of children.
705
- *
706
- * @param {Function} callback function with changing reference
707
- * @returns {Function} static function reference
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
708
699
  */
709
700
  function useStaticCallback(callback) {
710
701
  const callbackRef = hooks.useRef(callback);
@@ -847,13 +838,13 @@ function DataMarker(props) {
847
838
  return null;
848
839
  }
849
840
 
850
- /**
851
- * @typedef { {
852
- * text: (element: object) => string,
853
- * icon?: (element: Object) => import('preact').Component
854
- * } } PlaceholderDefinition
855
- *
856
- * @param { PlaceholderDefinition } props
841
+ /**
842
+ * @typedef { {
843
+ * text: (element: object) => string,
844
+ * icon?: (element: Object) => import('preact').Component
845
+ * } } PlaceholderDefinition
846
+ *
847
+ * @param { PlaceholderDefinition } props
857
848
  */
858
849
  function Placeholder(props) {
859
850
  const {
@@ -892,9 +883,9 @@ function Description(props) {
892
883
 
893
884
  const noop$6 = () => {};
894
885
 
895
- /**
896
- * Buffer `.focus()` calls while the editor is not initialized.
897
- * Set Focus inside when the editor is ready.
886
+ /**
887
+ * Buffer `.focus()` calls while the editor is not initialized.
888
+ * Set Focus inside when the editor is ready.
898
889
  */
899
890
  const useBufferedFocus$1 = function (editor, ref) {
900
891
  const [buffer, setBuffer] = hooks.useState(undefined);
@@ -995,9 +986,9 @@ const CodeEditor$1 = compat.forwardRef((props, ref) => {
995
986
 
996
987
  const noop$5 = () => {};
997
988
 
998
- /**
999
- * Buffer `.focus()` calls while the editor is not initialized.
1000
- * Set Focus inside when the editor is ready.
989
+ /**
990
+ * Buffer `.focus()` calls while the editor is not initialized.
991
+ * Set Focus inside when the editor is ready.
1001
992
  */
1002
993
  const useBufferedFocus = function (editor, ref) {
1003
994
  const [buffer, setBuffer] = hooks.useState(undefined);
@@ -1046,10 +1037,10 @@ const CodeEditor = compat.forwardRef((props, ref) => {
1046
1037
  hooks.useEffect(() => {
1047
1038
  let editor;
1048
1039
 
1049
- /* Trigger FEEL toggle when
1050
- *
1051
- * - `backspace` is pressed
1052
- * - AND the cursor is at the beginning of the input
1040
+ /* Trigger FEEL toggle when
1041
+ *
1042
+ * - `backspace` is pressed
1043
+ * - AND the cursor is at the beginning of the input
1053
1044
  */
1054
1045
  const onKeyDown = e => {
1055
1046
  if (e.key !== 'Backspace' || !editor) {
@@ -1140,10 +1131,10 @@ function FeelIndicator(props) {
1140
1131
 
1141
1132
  const noop$4 = () => {};
1142
1133
 
1143
- /**
1144
- * @param {Object} props
1145
- * @param {Object} props.label
1146
- * @param {String} props.feel
1134
+ /**
1135
+ * @param {Object} props
1136
+ * @param {Object} props.label
1137
+ * @param {String} props.feel
1147
1138
  */
1148
1139
  function FeelIcon(props) {
1149
1140
  const {
@@ -1178,22 +1169,22 @@ const FeelPopupContext = preact.createContext({
1178
1169
  source: null
1179
1170
  });
1180
1171
 
1181
- /**
1182
- * Add a dragger that calls back the passed function with
1183
- * { event, delta } on drag.
1184
- *
1185
- * @example
1186
- *
1187
- * function dragMove(event, delta) {
1188
- * // we are dragging (!!)
1189
- * }
1190
- *
1191
- * domElement.addEventListener('dragstart', dragger(dragMove));
1192
- *
1193
- * @param {Function} fn
1194
- * @param {Element} [dragPreview]
1195
- *
1196
- * @return {Function} drag start callback function
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
1197
1188
  */
1198
1189
  function createDragger(fn, dragPreview) {
1199
1190
  let self;
@@ -1248,23 +1239,23 @@ function emptyCanvas() {
1248
1239
 
1249
1240
  const noop$3 = () => {};
1250
1241
 
1251
- /**
1252
- * A generic popup component.
1253
- *
1254
- * @param {Object} props
1255
- * @param {HTMLElement} [props.container]
1256
- * @param {string} [props.className]
1257
- * @param {boolean} [props.delayInitialFocus]
1258
- * @param {{x: number, y: number}} [props.position]
1259
- * @param {number} [props.width]
1260
- * @param {number} [props.height]
1261
- * @param {Function} props.onClose
1262
- * @param {Function} [props.onPostActivate]
1263
- * @param {Function} [props.onPostDeactivate]
1264
- * @param {boolean} [props.returnFocus]
1265
- * @param {boolean} [props.closeOnEscape]
1266
- * @param {string} props.title
1267
- * @param {Ref} [ref]
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]
1268
1259
  */
1269
1260
  function PopupComponent(props, globalRef) {
1270
1261
  const {
@@ -1483,12 +1474,12 @@ function getContainerNode(node) {
1483
1474
  const FEEL_POPUP_WIDTH = 700;
1484
1475
  const FEEL_POPUP_HEIGHT = 250;
1485
1476
 
1486
- /**
1487
- * FEEL popup component, built as a singleton. Emits lifecycle events as follows:
1488
- * - `feelPopup.open` - fired before the popup is mounted
1489
- * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup
1490
- * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup
1491
- * - `feelPopup.closed` - fired after the popup is unmounted
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
1492
1483
  */
1493
1484
  function FEELPopupRoot(props) {
1494
1485
  const {
@@ -1498,7 +1489,8 @@ function FEELPopupRoot(props) {
1498
1489
  on() {},
1499
1490
  off() {}
1500
1491
  },
1501
- popupContainer
1492
+ popupContainer,
1493
+ getPopupLinks = () => []
1502
1494
  } = props;
1503
1495
  const prevElement = usePrevious(element);
1504
1496
  const [popupConfig, setPopupConfig] = hooks.useState({});
@@ -1573,6 +1565,7 @@ function FEELPopupRoot(props) {
1573
1565
  children: [open && jsxRuntime.jsx(FeelPopupComponent, {
1574
1566
  onClose: handleClose,
1575
1567
  container: popupContainer,
1568
+ getLinks: getPopupLinks,
1576
1569
  sourceElement: sourceElement,
1577
1570
  emit: emit,
1578
1571
  ...popupConfig
@@ -1582,6 +1575,7 @@ function FEELPopupRoot(props) {
1582
1575
  function FeelPopupComponent(props) {
1583
1576
  const {
1584
1577
  container,
1578
+ getLinks,
1585
1579
  id,
1586
1580
  hostLanguage,
1587
1581
  onInput,
@@ -1651,24 +1645,24 @@ function FeelPopupComponent(props) {
1651
1645
  height: FEEL_POPUP_HEIGHT,
1652
1646
  width: FEEL_POPUP_WIDTH,
1653
1647
  ref: popupRef,
1654
- children: [jsxRuntime.jsxs(Popup.Title, {
1648
+ children: [jsxRuntime.jsx(Popup.Title, {
1655
1649
  title: title,
1656
1650
  emit: emit,
1657
1651
  showCloseButton: true,
1658
1652
  closeButtonTooltip: "Save and close",
1659
1653
  onClose: onClose,
1660
1654
  draggable: true,
1661
- children: [type === 'feel' && jsxRuntime.jsxs("a", {
1662
- href: "https://docs.camunda.io/docs/components/modeler/feel/what-is-feel/",
1663
- target: "_blank",
1664
- class: "bio-properties-panel-feel-popup__title-link",
1665
- children: ["Learn FEEL expressions", jsxRuntime.jsx(HelpIcon, {})]
1666
- }), type === 'feelers' && jsxRuntime.jsxs("a", {
1667
- href: "https://docs.camunda.io/docs/components/modeler/forms/configuration/forms-config-templating-syntax/",
1668
- target: "_blank",
1669
- class: "bio-properties-panel-feel-popup__title-link",
1670
- children: ["Learn templating", jsxRuntime.jsx(HelpIcon, {})]
1671
- })]
1655
+ children: jsxRuntime.jsx(jsxRuntime.Fragment, {
1656
+ children: getLinks(type).map((link, index) => {
1657
+ return jsxRuntime.jsxs("a", {
1658
+ rel: "noreferrer",
1659
+ href: link.href,
1660
+ target: "_blank",
1661
+ class: "bio-properties-panel-feel-popup__title-link",
1662
+ children: [link.title, jsxRuntime.jsx(LaunchIcon, {})]
1663
+ }, index);
1664
+ })
1665
+ })
1672
1666
  }), jsxRuntime.jsx(Popup.Body, {
1673
1667
  children: jsxRuntime.jsxs("div", {
1674
1668
  onKeyDownCapture: onKeyDownCapture,
@@ -1711,11 +1705,11 @@ function autoCompletionOpen(element) {
1711
1705
  return element.closest('.cm-editor').querySelector('.cm-tooltip-autocomplete');
1712
1706
  }
1713
1707
 
1714
- /**
1715
- * This hook behaves like useEffect, but does not trigger on the first render.
1716
- *
1717
- * @param {Function} effect
1718
- * @param {Array} deps
1708
+ /**
1709
+ * This hook behaves like useEffect, but does not trigger on the first render.
1710
+ *
1711
+ * @param {Function} effect
1712
+ * @param {Array} deps
1719
1713
  */
1720
1714
  function useUpdateEffect(effect, deps) {
1721
1715
  const isMounted = hooks.useRef(false);
@@ -1793,19 +1787,19 @@ function ToggleSwitch(props) {
1793
1787
  });
1794
1788
  }
1795
1789
 
1796
- /**
1797
- * @param {Object} props
1798
- * @param {Object} props.element
1799
- * @param {String} props.id
1800
- * @param {String} props.description
1801
- * @param {String} props.label
1802
- * @param {String} props.switcherLabel
1803
- * @param {Boolean} props.inline
1804
- * @param {Function} props.getValue
1805
- * @param {Function} props.setValue
1806
- * @param {Function} props.onFocus
1807
- * @param {Function} props.onBlur
1808
- * @param {string|import('preact').Component} props.tooltip
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
1809
1803
  */
1810
1804
  function ToggleSwitchEntry(props) {
1811
1805
  const {
@@ -1913,22 +1907,22 @@ function NumberField(props) {
1913
1907
  });
1914
1908
  }
1915
1909
 
1916
- /**
1917
- * @param {Object} props
1918
- * @param {Boolean} props.debounce
1919
- * @param {String} props.description
1920
- * @param {Boolean} props.disabled
1921
- * @param {Object} props.element
1922
- * @param {Function} props.getValue
1923
- * @param {String} props.id
1924
- * @param {String} props.label
1925
- * @param {String} props.max
1926
- * @param {String} props.min
1927
- * @param {Function} props.setValue
1928
- * @param {Function} props.onFocus
1929
- * @param {Function} props.onBlur
1930
- * @param {String} props.step
1931
- * @param {Function} props.validate
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
1932
1926
  */
1933
1927
  function NumberFieldEntry(props) {
1934
1928
  const {
@@ -2414,26 +2408,26 @@ const OptionalFeelCheckbox = compat.forwardRef((props, ref) => {
2414
2408
  });
2415
2409
  });
2416
2410
 
2417
- /**
2418
- * @param {Object} props
2419
- * @param {Object} props.element
2420
- * @param {String} props.id
2421
- * @param {String} props.description
2422
- * @param {Boolean} props.debounce
2423
- * @param {Boolean} props.disabled
2424
- * @param {Boolean} props.feel
2425
- * @param {String} props.label
2426
- * @param {Function} props.getValue
2427
- * @param {Function} props.setValue
2428
- * @param {Function} props.tooltipContainer
2429
- * @param {Function} props.validate
2430
- * @param {Function} props.show
2431
- * @param {Function} props.example
2432
- * @param {Function} props.variables
2433
- * @param {Function} props.onFocus
2434
- * @param {Function} props.onBlur
2435
- * @param {string} [props.placeholder]
2436
- * @param {string|import('preact').Component} props.tooltip
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
2437
2431
  */
2438
2432
  function FeelEntry(props) {
2439
2433
  const {
@@ -2520,27 +2514,27 @@ function FeelEntry(props) {
2520
2514
  });
2521
2515
  }
2522
2516
 
2523
- /**
2524
- * @param {Object} props
2525
- * @param {Object} props.element
2526
- * @param {String} props.id
2527
- * @param {String} props.description
2528
- * @param {Boolean} props.debounce
2529
- * @param {Boolean} props.disabled
2530
- * @param {String} props.max
2531
- * @param {String} props.min
2532
- * @param {String} props.step
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
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
2544
2538
  */
2545
2539
  function FeelNumberEntry(props) {
2546
2540
  return jsxRuntime.jsx(FeelEntry, {
@@ -2550,25 +2544,25 @@ function FeelNumberEntry(props) {
2550
2544
  });
2551
2545
  }
2552
2546
 
2553
- /**
2554
- * @param {Object} props
2555
- * @param {Object} props.element
2556
- * @param {String} props.id
2557
- * @param {String} props.description
2558
- * @param {Boolean} props.debounce
2559
- * @param {Boolean} props.disabled
2560
- * @param {Boolean} props.feel
2561
- * @param {String} props.label
2562
- * @param {Function} props.getValue
2563
- * @param {Function} props.setValue
2564
- * @param {Function} props.tooltipContainer
2565
- * @param {Function} props.validate
2566
- * @param {Function} props.show
2567
- * @param {Function} props.example
2568
- * @param {Function} props.variables
2569
- * @param {Function} props.onFocus
2570
- * @param {Function} props.onBlur
2571
- * @param {string} [props.placeholder]
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]
2572
2566
  */
2573
2567
  function FeelTextAreaEntry(props) {
2574
2568
  return jsxRuntime.jsx(FeelEntry, {
@@ -2578,24 +2572,24 @@ function FeelTextAreaEntry(props) {
2578
2572
  });
2579
2573
  }
2580
2574
 
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
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
2599
2593
  */
2600
2594
  function FeelToggleSwitchEntry(props) {
2601
2595
  return jsxRuntime.jsx(FeelEntry, {
@@ -2605,24 +2599,24 @@ function FeelToggleSwitchEntry(props) {
2605
2599
  });
2606
2600
  }
2607
2601
 
2608
- /**
2609
- * @param {Object} props
2610
- * @param {Object} props.element
2611
- * @param {String} props.id
2612
- * @param {String} props.description
2613
- * @param {Boolean} props.debounce
2614
- * @param {Boolean} props.disabled
2615
- * @param {Boolean} props.feel
2616
- * @param {String} props.label
2617
- * @param {Function} props.getValue
2618
- * @param {Function} props.setValue
2619
- * @param {Function} props.tooltipContainer
2620
- * @param {Function} props.validate
2621
- * @param {Function} props.show
2622
- * @param {Function} props.example
2623
- * @param {Function} props.variables
2624
- * @param {Function} props.onFocus
2625
- * @param {Function} props.onBlur
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
2626
2620
  */
2627
2621
  function FeelCheckboxEntry(props) {
2628
2622
  return jsxRuntime.jsx(FeelEntry, {
@@ -2632,26 +2626,26 @@ function FeelCheckboxEntry(props) {
2632
2626
  });
2633
2627
  }
2634
2628
 
2635
- /**
2636
- * @param {Object} props
2637
- * @param {Object} props.element
2638
- * @param {String} props.id
2639
- * @param {String} props.description
2640
- * @param {String} props.hostLanguage
2641
- * @param {Boolean} props.singleLine
2642
- * @param {Boolean} props.debounce
2643
- * @param {Boolean} props.disabled
2644
- * @param {Boolean} props.feel
2645
- * @param {String} props.label
2646
- * @param {Function} props.getValue
2647
- * @param {Function} props.setValue
2648
- * @param {Function} props.tooltipContainer
2649
- * @param {Function} props.validate
2650
- * @param {Function} props.show
2651
- * @param {Function} props.example
2652
- * @param {Function} props.variables
2653
- * @param {Function} props.onFocus
2654
- * @param {Function} props.onBlur
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
2655
2649
  */
2656
2650
  function FeelTemplatingEntry(props) {
2657
2651
  return jsxRuntime.jsx(FeelEntry, {
@@ -2720,84 +2714,85 @@ const DEFAULT_LAYOUT = {};
2720
2714
  const DEFAULT_DESCRIPTION = {};
2721
2715
  const DEFAULT_TOOLTIP = {};
2722
2716
 
2723
- /**
2724
- * @typedef { {
2725
- * component: import('preact').Component,
2726
- * id: String,
2727
- * isEdited?: Function
2728
- * } } EntryDefinition
2729
- *
2730
- * @typedef { {
2731
- * autoFocusEntry: String,
2732
- * autoOpen?: Boolean,
2733
- * entries: Array<EntryDefinition>,
2734
- * id: String,
2735
- * label: String,
2736
- * remove: (event: MouseEvent) => void
2737
- * } } ListItemDefinition
2738
- *
2739
- * @typedef { {
2740
- * add: (event: MouseEvent) => void,
2741
- * component: import('preact').Component,
2742
- * element: Object,
2743
- * id: String,
2744
- * items: Array<ListItemDefinition>,
2745
- * label: String,
2746
- * shouldOpen?: Boolean
2747
- * } } ListGroupDefinition
2748
- *
2749
- * @typedef { {
2750
- * component?: import('preact').Component,
2751
- * entries: Array<EntryDefinition>,
2752
- * id: String,
2753
- * label: String,
2754
- * shouldOpen?: Boolean
2755
- * } } GroupDefinition
2756
- *
2757
- * @typedef { {
2758
- * [id: String]: GetDescriptionFunction
2759
- * } } DescriptionConfig
2760
- *
2761
- * @typedef { {
2762
- * [id: String]: GetTooltipFunction
2763
- * } } TooltipConfig
2764
- *
2765
- * @callback { {
2766
- * @param {string} id
2767
- * @param {Object} element
2768
- * @returns {string}
2769
- * } } GetDescriptionFunction
2770
- *
2771
- * @callback { {
2772
- * @param {string} id
2773
- * @param {Object} element
2774
- * @returns {string}
2775
- * } } GetTooltipFunction
2776
- *
2777
- * @typedef { {
2778
- * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
2779
- * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
2780
- * } } PlaceholderProvider
2781
- *
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
+ *
2782
2776
  */
2783
2777
 
2784
- /**
2785
- * A basic properties panel component. Describes *how* content will be rendered, accepts
2786
- * data from implementor to describe *what* will be rendered.
2787
- *
2788
- * @param {Object} props
2789
- * @param {Object|Array} props.element
2790
- * @param {import('./components/Header').HeaderProvider} props.headerProvider
2791
- * @param {PlaceholderProvider} [props.placeholderProvider]
2792
- * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
2793
- * @param {Object} [props.layoutConfig]
2794
- * @param {Function} [props.layoutChanged]
2795
- * @param {DescriptionConfig} [props.descriptionConfig]
2796
- * @param {Function} [props.descriptionLoaded]
2797
- * @param {TooltipConfig} [props.tooltipConfig]
2798
- * @param {Function} [props.tooltipLoaded]
2799
- * @param {HTMLElement} [props.feelPopupContainer]
2800
- * @param {Object} [props.eventBus]
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]
2801
2796
  */
2802
2797
  function PropertiesPanel(props) {
2803
2798
  const {
@@ -2812,6 +2807,7 @@ function PropertiesPanel(props) {
2812
2807
  tooltipConfig,
2813
2808
  tooltipLoaded,
2814
2809
  feelPopupContainer,
2810
+ getFeelPopupLinks,
2815
2811
  eventBus
2816
2812
  } = props;
2817
2813
 
@@ -2916,6 +2912,7 @@ function PropertiesPanel(props) {
2916
2912
  element: element,
2917
2913
  eventBus: eventBus,
2918
2914
  popupContainer: feelPopupContainer,
2915
+ getPopupLinks: getFeelPopupLinks,
2919
2916
  children: jsxRuntime.jsxs("div", {
2920
2917
  class: "bio-properties-panel",
2921
2918
  children: [jsxRuntime.jsx(Header, {
@@ -2968,11 +2965,11 @@ function createTooltipContext(overrides = {}) {
2968
2965
 
2969
2966
  // hooks //////////////////
2970
2967
 
2971
- /**
2972
- * This hook behaves like useLayoutEffect, but does not trigger on the first render.
2973
- *
2974
- * @param {Function} effect
2975
- * @param {Array} deps
2968
+ /**
2969
+ * This hook behaves like useLayoutEffect, but does not trigger on the first render.
2970
+ *
2971
+ * @param {Function} effect
2972
+ * @param {Array} deps
2976
2973
  */
2977
2974
  function useUpdateLayoutEffect(effect, deps) {
2978
2975
  const isMounted = hooks.useRef(false);
@@ -3047,15 +3044,15 @@ function MenuItem({
3047
3044
  });
3048
3045
  }
3049
3046
 
3050
- /**
3051
- *
3052
- * @param {Array<null | Element>} ignoredElements
3053
- * @param {Function} callback
3047
+ /**
3048
+ *
3049
+ * @param {Array<null | Element>} ignoredElements
3050
+ * @param {Function} callback
3054
3051
  */
3055
3052
  function useGlobalClick(ignoredElements, callback) {
3056
3053
  hooks.useEffect(() => {
3057
- /**
3058
- * @param {MouseEvent} event
3054
+ /**
3055
+ * @param {MouseEvent} event
3059
3056
  */
3060
3057
  function listener(event) {
3061
3058
  if (ignoredElements.some(element => element && element.contains(event.target))) {
@@ -3088,20 +3085,20 @@ function HeaderButton(props) {
3088
3085
  });
3089
3086
  }
3090
3087
 
3091
- /**
3092
- * @typedef { {
3093
- * [key: string]: string;
3094
- * } } TranslateReplacements
3088
+ /**
3089
+ * @typedef { {
3090
+ * [key: string]: string;
3091
+ * } } TranslateReplacements
3095
3092
  */
3096
3093
 
3097
- /**
3098
- * A simple translation stub to be used for multi-language support.
3099
- * Can be easily replaced with a more sophisticated solution.
3100
- *
3101
- * @param {string} template to interpolate
3102
- * @param {TranslateReplacements} [replacements] a map with substitutes
3103
- *
3104
- * @return {string} the translated string
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
3105
3102
  */
3106
3103
  function translateFallback(template, replacements) {
3107
3104
  replacements = replacements || {};
@@ -3213,8 +3210,8 @@ function ListItem(props) {
3213
3210
 
3214
3211
  const noop$1 = () => {};
3215
3212
 
3216
- /**
3217
- * @param {import('../PropertiesPanel').ListGroupDefinition} props
3213
+ /**
3214
+ * @param {import('../PropertiesPanel').ListGroupDefinition} props
3218
3215
  */
3219
3216
  function ListGroup(props) {
3220
3217
  const {
@@ -3406,18 +3403,18 @@ function Checkbox(props) {
3406
3403
  });
3407
3404
  }
3408
3405
 
3409
- /**
3410
- * @param {Object} props
3411
- * @param {Object} props.element
3412
- * @param {String} props.id
3413
- * @param {String} props.description
3414
- * @param {String} props.label
3415
- * @param {Function} props.getValue
3416
- * @param {Function} props.setValue
3417
- * @param {Function} props.onFocus
3418
- * @param {Function} props.onBlur
3419
- * @param {string|import('preact').Component} props.tooltip
3420
- * @param {boolean} [props.disabled]
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]
3421
3418
  */
3422
3419
  function CheckboxEntry(props) {
3423
3420
  const {
@@ -3469,19 +3466,19 @@ function prefixId$4(id) {
3469
3466
 
3470
3467
  const noop = () => {};
3471
3468
 
3472
- /**
3473
- * @param {Object} props
3474
- * @param {Object} props.element
3475
- * @param {String} props.id
3476
- * @param {String} props.description
3477
- * @param {Boolean} props.debounce
3478
- * @param {Boolean} props.disabled
3479
- * @param {String} props.label
3480
- * @param {Function} props.getValue
3481
- * @param {Function} props.setValue
3482
- * @param {Function} props.tooltipContainer
3483
- * @param {Function} props.validate
3484
- * @param {Function} props.show
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
3485
3482
  */
3486
3483
  function TemplatingEntry(props) {
3487
3484
  const {
@@ -3656,8 +3653,8 @@ function List(props) {
3656
3653
  }
3657
3654
  }, [open, hasItems]);
3658
3655
 
3659
- /**
3660
- * @param {MouseEvent} event
3656
+ /**
3657
+ * @param {MouseEvent} event
3661
3658
  */
3662
3659
  function addItem(event) {
3663
3660
  event.stopPropagation();
@@ -3849,20 +3846,20 @@ function Select(props) {
3849
3846
  });
3850
3847
  }
3851
3848
 
3852
- /**
3853
- * @param {object} props
3854
- * @param {object} props.element
3855
- * @param {string} props.id
3856
- * @param {string} [props.description]
3857
- * @param {string} props.label
3858
- * @param {Function} props.getValue
3859
- * @param {Function} props.setValue
3860
- * @param {Function} props.onFocus
3861
- * @param {Function} props.onBlur
3862
- * @param {Function} props.getOptions
3863
- * @param {boolean} [props.disabled]
3864
- * @param {Function} [props.validate]
3865
- * @param {string|import('preact').Component} props.tooltip
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
3866
3863
  */
3867
3864
  function SelectEntry(props) {
3868
3865
  const {
@@ -4209,20 +4206,20 @@ function Textfield(props) {
4209
4206
  });
4210
4207
  }
4211
4208
 
4212
- /**
4213
- * @param {Object} props
4214
- * @param {Object} props.element
4215
- * @param {String} props.id
4216
- * @param {String} props.description
4217
- * @param {Boolean} props.debounce
4218
- * @param {Boolean} props.disabled
4219
- * @param {String} props.label
4220
- * @param {Function} props.getValue
4221
- * @param {Function} props.setValue
4222
- * @param {Function} props.onFocus
4223
- * @param {Function} props.onBlur
4224
- * @param {string|import('preact').Component} props.tooltip
4225
- * @param {Function} props.validate
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
4226
4223
  */
4227
4224
  function TextfieldEntry(props) {
4228
4225
  const {
@@ -4315,20 +4312,20 @@ class FeelPopupModule {
4315
4312
  this._eventBus = eventBus;
4316
4313
  }
4317
4314
 
4318
- /**
4319
- * Check if the FEEL popup is open.
4320
- * @return {Boolean}
4315
+ /**
4316
+ * Check if the FEEL popup is open.
4317
+ * @return {Boolean}
4321
4318
  */
4322
4319
  isOpen() {
4323
4320
  return this._eventBus.fire('feelPopup._isOpen');
4324
4321
  }
4325
4322
 
4326
- /**
4327
- * Open the FEEL popup.
4328
- *
4329
- * @param {String} entryId
4330
- * @param {Object} popupConfig
4331
- * @param {HTMLElement} sourceElement
4323
+ /**
4324
+ * Open the FEEL popup.
4325
+ *
4326
+ * @param {String} entryId
4327
+ * @param {Object} popupConfig
4328
+ * @param {HTMLElement} sourceElement
4332
4329
  */
4333
4330
  open(entryId, popupConfig, sourceElement) {
4334
4331
  return this._eventBus.fire('feelPopup._open', {
@@ -4338,8 +4335,8 @@ class FeelPopupModule {
4338
4335
  });
4339
4336
  }
4340
4337
 
4341
- /**
4342
- * Close the FEEL popup.
4338
+ /**
4339
+ * Close the FEEL popup.
4343
4340
  */
4344
4341
  close() {
4345
4342
  return this._eventBus.fire('feelPopup._close');
@@ -4376,7 +4373,7 @@ exports.FeelToggleSwitchEntry = FeelToggleSwitchEntry;
4376
4373
  exports.Group = Group;
4377
4374
  exports.Header = Header;
4378
4375
  exports.HeaderButton = HeaderButton;
4379
- exports.HelpIcon = HelpIcon;
4376
+ exports.LaunchIcon = LaunchIcon;
4380
4377
  exports.LayoutContext = LayoutContext;
4381
4378
  exports.ListEntry = List;
4382
4379
  exports.ListGroup = ListGroup;