@uipath/apollo-react 4.63.0 → 4.65.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.
Files changed (46) hide show
  1. package/dist/canvas/components/BaseCanvas/BaseCanvas.cjs +2 -1
  2. package/dist/canvas/components/BaseCanvas/BaseCanvas.d.ts.map +1 -1
  3. package/dist/canvas/components/BaseCanvas/BaseCanvas.js +2 -1
  4. package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts +2 -0
  5. package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts.map +1 -1
  6. package/dist/canvas/components/BaseCanvas/CanvasProviders.cjs +8 -4
  7. package/dist/canvas/components/BaseCanvas/CanvasProviders.d.ts +3 -1
  8. package/dist/canvas/components/BaseCanvas/CanvasProviders.d.ts.map +1 -1
  9. package/dist/canvas/components/BaseCanvas/CanvasProviders.js +8 -4
  10. package/dist/canvas/components/ProbeCard/ProbeCard.cjs +5 -5
  11. package/dist/canvas/components/ProbeCard/ProbeCard.d.ts.map +1 -1
  12. package/dist/canvas/components/ProbeCard/ProbeCard.js +2 -2
  13. package/dist/canvas/components/ProbeCard/useDragSession.cjs +2 -2
  14. package/dist/canvas/components/ProbeCard/useDragSession.js +1 -1
  15. package/dist/canvas/components/StickyNoteNode/StickyNoteCanvasOptionsContext.cjs +61 -0
  16. package/dist/canvas/components/StickyNoteNode/StickyNoteCanvasOptionsContext.d.ts +11 -0
  17. package/dist/canvas/components/StickyNoteNode/StickyNoteCanvasOptionsContext.d.ts.map +1 -0
  18. package/dist/canvas/components/StickyNoteNode/StickyNoteCanvasOptionsContext.js +24 -0
  19. package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.cjs +449 -0
  20. package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.d.ts +45 -0
  21. package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.d.ts.map +1 -0
  22. package/dist/canvas/components/StickyNoteNode/StickyNoteMedia.js +394 -0
  23. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.cjs +379 -0
  24. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.d.ts +8 -0
  25. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.d.ts.map +1 -0
  26. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaDialog.js +345 -0
  27. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.cjs +279 -0
  28. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.d.ts +18 -0
  29. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.d.ts.map +1 -0
  30. package/dist/canvas/components/StickyNoteNode/StickyNoteMediaMarkdown.js +242 -0
  31. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +193 -41
  32. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts +2 -1
  33. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
  34. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +193 -41
  35. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.types.d.ts +4 -0
  36. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.types.d.ts.map +1 -1
  37. package/dist/canvas/hooks/useLatestRef.d.ts.map +1 -0
  38. package/dist/canvas/locales/en.cjs +1 -1
  39. package/dist/canvas/locales/en.d.ts.map +1 -1
  40. package/dist/canvas/locales/en.js +1 -1
  41. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  42. package/package.json +1 -1
  43. package/dist/canvas/components/ProbeCard/useLatestRef.d.ts.map +0 -1
  44. /package/dist/canvas/{components/ProbeCard → hooks}/useLatestRef.cjs +0 -0
  45. /package/dist/canvas/{components/ProbeCard → hooks}/useLatestRef.d.ts +0 -0
  46. /package/dist/canvas/{components/ProbeCard → hooks}/useLatestRef.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"StickyNoteNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAM1E,OAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA8BhE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,0BAA0B,EAE3B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC1D,kBAAkB,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;CAC5C;AA0iBD,eAAO,MAAM,cAAc,mQAthBxB,mBAAmB,6CAshBwE,CAAC"}
1
+ {"version":3,"file":"StickyNoteNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAM1E,OAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA+ChE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEd,0BAA0B,EAE3B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC1D,kBAAkB,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;CAC5C;AA4tBD,eAAO,MAAM,cAAc,iUA/rBxB,mBAAmB,6CA+rBwE,CAAC"}
@@ -10,12 +10,17 @@ import remark_breaks from "remark-breaks";
10
10
  import remark_gfm from "remark-gfm";
11
11
  import { useSafeLingui } from "../../../i18n/index.js";
12
12
  import { GRID_SPACING } from "../../constants.js";
13
+ import { useLatestRef } from "../../hooks/useLatestRef.js";
13
14
  import { areNodePropsEqualIgnoringPosition } from "../../utils/nodePropsEqual.js";
14
15
  import { useSelectionState } from "../BaseCanvas/SelectionStateContext.js";
15
16
  import { NodeViewportOverlay } from "../NodeViewportOverlay.js";
16
17
  import { NodeToolbar } from "../Toolbar/index.js";
17
18
  import { FormattingToolbar } from "./FormattingToolbar.js";
18
19
  import { activeFormatsEqual, continueListOnEnter, detectActiveFormats } from "./markdown-formatting/index.js";
20
+ import { useStickyNoteCanvasOptions } from "./StickyNoteCanvasOptionsContext.js";
21
+ import { findStickyNoteMediaAtSelection, insertStickyNoteMedia, parseStickyNoteMediaTokens, replaceStickyNoteMedia, serializeStickyNoteMedia } from "./StickyNoteMedia.js";
22
+ import { StickyNoteMediaDialog } from "./StickyNoteMediaDialog.js";
23
+ import { StickyNoteMediaMarkdownProvider, createStickyNoteMediaMarkdownComponents } from "./StickyNoteMediaMarkdown.js";
19
24
  import { BottomCornerIndicators, ColorOption, ColorPickerPanel, RESIZE_CONTROL_Z_INDEX, ResizeHandle, StickyNoteContainer, StickyNoteMarkdown, StickyNoteTextArea, StickyNoteWrapper, TopCornerIndicators, stickyNoteGlobalStyles } from "./StickyNoteNode.styles.js";
20
25
  import { STICKY_NOTE_COLORS, withAlpha } from "./StickyNoteNode.types.js";
21
26
  import { preserveNewlines, readTextSelection } from "./StickyNoteNode.utils.js";
@@ -23,18 +28,36 @@ import { useMarkdownShortcuts } from "./useMarkdownShortcuts.js";
23
28
  import { useScrollCapture } from "./useScrollCapture.js";
24
29
  const minWidth = 8 * GRID_SPACING;
25
30
  const minHeight = 8 * GRID_SPACING;
26
- const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = 'Add text', renderPlaceholderOnSelect = false, readOnly = false, onContentChange, onColorChange, onResize, onResizeStart, onResizeEnd, formattingActions, markdownComponents: customMarkdownComponents })=>{
31
+ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = 'Add text', renderPlaceholderOnSelect = false, readOnly: readOnlyProp, onContentChange, onColorChange, onResize, onResizeStart, onResizeEnd, enableMediaEmbedding: enableMediaEmbeddingProp, formattingActions, markdownComponents: customMarkdownComponents })=>{
27
32
  const { _ } = useSafeLingui();
33
+ const canvasOptions = useStickyNoteCanvasOptions();
34
+ const readOnly = readOnlyProp ?? canvasOptions.readOnly;
35
+ const enableMediaEmbedding = enableMediaEmbeddingProp ?? canvasOptions.enableMediaEmbedding;
28
36
  const { updateNodeData, deleteElements } = useReactFlow();
29
37
  const { multipleNodesSelected } = useSelectionState();
30
38
  const [isEditing, setIsEditing] = useState(!readOnly && (data.autoFocus ?? false));
31
39
  const [isResizing, setIsResizing] = useState(false);
32
40
  const [isColorPickerOpen, setIsColorPickerOpen] = useState(false);
41
+ const [mediaDialog, setMediaDialog] = useState(null);
33
42
  const [localContent, setLocalContent] = useState(data.content || '');
34
43
  const latestContentRef = useRef(localContent);
35
44
  const textAreaRef = useRef(null);
36
45
  const formattingToolbarRef = useRef(null);
37
46
  const skipBlurRef = useRef(null);
47
+ const resizeActiveRef = useRef(false);
48
+ const resizeLifecycle = {
49
+ content: data.content,
50
+ id,
51
+ isEditing,
52
+ localContent,
53
+ onContentChange,
54
+ onResize,
55
+ onResizeEnd,
56
+ onResizeStart,
57
+ readOnly,
58
+ updateNodeData
59
+ };
60
+ const resizeLifecycleRef = useLatestRef(resizeLifecycle);
38
61
  const { ref: markdownRef, scrollCaptureProps } = useScrollCapture();
39
62
  const colorButtonRef = useRef(null);
40
63
  const [activeFormats, setActiveFormats] = useState({
@@ -47,6 +70,15 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
47
70
  const colorKey = data.color || 'yellow';
48
71
  const color = STICKY_NOTE_COLORS[colorKey] ?? STICKY_NOTE_COLORS.yellow;
49
72
  const colorWithAlpha = withAlpha(color);
73
+ const endResizeLifecycle = useCallback(()=>{
74
+ if (!resizeActiveRef.current) return;
75
+ resizeActiveRef.current = false;
76
+ setIsResizing(false);
77
+ const latestOnResizeEnd = resizeLifecycleRef.current.onResizeEnd;
78
+ if (latestOnResizeEnd) queueMicrotask(latestOnResizeEnd);
79
+ }, [
80
+ resizeLifecycleRef
81
+ ]);
50
82
  const updateLocalContent = useCallback((content)=>{
51
83
  latestContentRef.current = content;
52
84
  setLocalContent(content);
@@ -204,6 +236,92 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
204
236
  updateLocalContent,
205
237
  updateNodeData
206
238
  ]);
239
+ const openMediaDialog = useCallback((context)=>{
240
+ const { selection } = context;
241
+ setMediaDialog({
242
+ source: 'editor',
243
+ context,
244
+ token: findStickyNoteMediaAtSelection(selection.value, selection.selectionStart, selection.selectionEnd)
245
+ });
246
+ }, []);
247
+ const mediaFormattingAction = useMemo(()=>({
248
+ id: 'sticky-note-embed-media',
249
+ icon: /*#__PURE__*/ jsx(CanvasIcon, {
250
+ icon: "image-plus",
251
+ size: 14
252
+ }),
253
+ label: _({
254
+ id: 'sticky-note.media.embed-action',
255
+ message: 'Embed image or video'
256
+ }),
257
+ onAction: openMediaDialog
258
+ }), [
259
+ _,
260
+ openMediaDialog
261
+ ]);
262
+ const effectiveFormattingActions = useMemo(()=>enableMediaEmbedding ? [
263
+ mediaFormattingAction,
264
+ ...formattingActions ?? []
265
+ ] : formattingActions ?? [], [
266
+ enableMediaEmbedding,
267
+ formattingActions,
268
+ mediaFormattingAction
269
+ ]);
270
+ const handleEditRenderedMedia = useCallback((media, range)=>{
271
+ const sourceContent = latestContentRef.current;
272
+ const renderedTokens = parseStickyNoteMediaTokens(preserveNewlines(sourceContent));
273
+ const renderedIndex = renderedTokens.findIndex((token)=>token.start === range.start && token.end === range.end);
274
+ const sourceToken = renderedIndex >= 0 ? parseStickyNoteMediaTokens(sourceContent)[renderedIndex] : void 0;
275
+ setMediaDialog({
276
+ source: 'rendered',
277
+ token: sourceToken ?? {
278
+ media,
279
+ ...range
280
+ }
281
+ });
282
+ }, []);
283
+ const cancelMediaDialog = useCallback(()=>{
284
+ const current = mediaDialog;
285
+ setMediaDialog(null);
286
+ if (current?.source === 'editor') current.context.resume();
287
+ }, [
288
+ mediaDialog
289
+ ]);
290
+ useEffect(()=>{
291
+ if (!mediaDialog || enableMediaEmbedding && !readOnly) return;
292
+ setMediaDialog(null);
293
+ skipBlurRef.current = null;
294
+ if (!readOnly && 'editor' === mediaDialog.source) mediaDialog.context.resume();
295
+ }, [
296
+ enableMediaEmbedding,
297
+ mediaDialog,
298
+ readOnly
299
+ ]);
300
+ const submitMediaDialog = useCallback((media)=>{
301
+ if (!mediaDialog) return;
302
+ const block = serializeStickyNoteMedia(media);
303
+ if ('editor' === mediaDialog.source) {
304
+ const currentValue = mediaDialog.context.currentValue();
305
+ const next = mediaDialog.token ? replaceStickyNoteMedia(currentValue, mediaDialog.token, block) ?? insertStickyNoteMedia(currentValue, block, null) : insertStickyNoteMedia(currentValue, block, mediaDialog.context.selection);
306
+ setMediaDialog(null);
307
+ mediaDialog.context.commit(next);
308
+ return;
309
+ }
310
+ const currentValue = latestContentRef.current;
311
+ const next = replaceStickyNoteMedia(currentValue, mediaDialog.token, block) ?? insertStickyNoteMedia(currentValue, block, null);
312
+ setMediaDialog(null);
313
+ updateLocalContent(next.value);
314
+ onContentChange?.(next.value);
315
+ updateNodeData(id, {
316
+ content: next.value
317
+ });
318
+ }, [
319
+ id,
320
+ mediaDialog,
321
+ onContentChange,
322
+ updateLocalContent,
323
+ updateNodeData
324
+ ]);
207
325
  const updateActiveFormats = useCallback(()=>{
208
326
  if (!textAreaRef.current) return;
209
327
  const next = detectActiveFormats({
@@ -246,13 +364,16 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
246
364
  updateLocalContent
247
365
  ]);
248
366
  const handleResizeStart = useCallback(()=>{
249
- if (isEditing) {
250
- const content = textAreaRef.current?.value ?? localContent;
251
- if (!readOnly && content !== data.content) {
367
+ if (resizeActiveRef.current) return;
368
+ resizeActiveRef.current = true;
369
+ const lifecycle = resizeLifecycleRef.current;
370
+ if (lifecycle.isEditing) {
371
+ const content = textAreaRef.current?.value ?? lifecycle.localContent;
372
+ if (!lifecycle.readOnly && content !== lifecycle.content) {
252
373
  skipBlurRef.current = content;
253
374
  flushSync(()=>{
254
- onContentChange?.(content);
255
- updateNodeData(id, {
375
+ lifecycle.onContentChange?.(content);
376
+ lifecycle.updateNodeData(lifecycle.id, {
256
377
  content
257
378
  });
258
379
  });
@@ -260,24 +381,20 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
260
381
  textAreaRef.current?.blur();
261
382
  }
262
383
  setIsResizing(true);
263
- onResizeStart?.();
384
+ lifecycle.onResizeStart?.();
264
385
  }, [
265
- data.content,
266
- id,
267
- isEditing,
268
- localContent,
269
- onContentChange,
270
- onResizeStart,
271
- readOnly,
272
- updateNodeData
386
+ resizeLifecycleRef
273
387
  ]);
274
388
  const handleResizeEnd = useCallback((_event, params)=>{
275
- setIsResizing(false);
276
- onResize?.(params.width, params.height);
277
- if (onResizeEnd) queueMicrotask(onResizeEnd);
389
+ if (!resizeActiveRef.current) return;
390
+ try {
391
+ resizeLifecycleRef.current.onResize?.(params.width, params.height);
392
+ } finally{
393
+ endResizeLifecycle();
394
+ }
278
395
  }, [
279
- onResize,
280
- onResizeEnd
396
+ endResizeLifecycle,
397
+ resizeLifecycleRef
281
398
  ]);
282
399
  const handleColorChange = useCallback((newColor)=>{
283
400
  onColorChange?.(newColor);
@@ -320,9 +437,16 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
320
437
  const builtInMarkdownComponents = useMemo(()=>({
321
438
  a: ({ node: _node, href, children, ...props })=>/*#__PURE__*/ jsx("a", {
322
439
  ...props,
440
+ className: [
441
+ 'nodrag',
442
+ 'nopan',
443
+ props.className
444
+ ].filter(Boolean).join(' '),
323
445
  href: href,
324
446
  target: "_blank",
325
447
  rel: "noopener noreferrer",
448
+ onPointerDown: (event)=>event.stopPropagation(),
449
+ onMouseDown: (event)=>event.stopPropagation(),
326
450
  onClick: (e)=>{
327
451
  e.stopPropagation();
328
452
  },
@@ -332,12 +456,27 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
332
456
  children: children
333
457
  })
334
458
  }), []);
459
+ const mediaMarkdownComponents = useMemo(()=>createStickyNoteMediaMarkdownComponents(customMarkdownComponents?.img), [
460
+ customMarkdownComponents?.img
461
+ ]);
335
462
  const markdownComponents = useMemo(()=>({
336
463
  ...customMarkdownComponents,
464
+ ...enableMediaEmbedding ? mediaMarkdownComponents : {},
337
465
  ...builtInMarkdownComponents
338
466
  }), [
339
467
  builtInMarkdownComponents,
340
- customMarkdownComponents
468
+ customMarkdownComponents,
469
+ enableMediaEmbedding,
470
+ mediaMarkdownComponents
471
+ ]);
472
+ const mediaMarkdownOptions = useMemo(()=>({
473
+ editable: enableMediaEmbedding && selected && !readOnly,
474
+ onEditMedia: handleEditRenderedMedia
475
+ }), [
476
+ enableMediaEmbedding,
477
+ handleEditRenderedMedia,
478
+ readOnly,
479
+ selected
341
480
  ]);
342
481
  const toolbarConfig = useMemo(()=>{
343
482
  const actions = [
@@ -402,6 +541,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
402
541
  handleDelete
403
542
  ]);
404
543
  const shouldRenderToolbarOverlay = !readOnly && selected && !dragging && !isResizing && !multipleNodesSelected;
544
+ const shouldRenderResizeControls = !readOnly || isResizing;
405
545
  return /*#__PURE__*/ jsxs(Fragment, {
406
546
  children: [
407
547
  /*#__PURE__*/ jsx(Global, {
@@ -410,12 +550,13 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
410
550
  /*#__PURE__*/ jsxs(StickyNoteWrapper, {
411
551
  "data-sticky-note": true,
412
552
  children: [
413
- !readOnly && /*#__PURE__*/ jsxs(Fragment, {
553
+ shouldRenderResizeControls && /*#__PURE__*/ jsxs(Fragment, {
414
554
  children: [
415
555
  /*#__PURE__*/ jsx(NodeResizeControl, {
416
556
  style: {
417
557
  background: 'transparent',
418
558
  border: 'none',
559
+ pointerEvents: readOnly ? 'none' : void 0,
419
560
  zIndex: RESIZE_CONTROL_Z_INDEX
420
561
  },
421
562
  position: "top-left",
@@ -424,7 +565,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
424
565
  onResizeStart: handleResizeStart,
425
566
  onResizeEnd: handleResizeEnd,
426
567
  children: /*#__PURE__*/ jsx(ResizeHandle, {
427
- selected: selected,
568
+ selected: selected && !readOnly,
428
569
  cursor: "nwse-resize"
429
570
  })
430
571
  }),
@@ -432,6 +573,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
432
573
  style: {
433
574
  background: 'transparent',
434
575
  border: 'none',
576
+ pointerEvents: readOnly ? 'none' : void 0,
435
577
  zIndex: RESIZE_CONTROL_Z_INDEX
436
578
  },
437
579
  position: "top-right",
@@ -440,7 +582,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
440
582
  onResizeStart: handleResizeStart,
441
583
  onResizeEnd: handleResizeEnd,
442
584
  children: /*#__PURE__*/ jsx(ResizeHandle, {
443
- selected: selected,
585
+ selected: selected && !readOnly,
444
586
  cursor: "nesw-resize"
445
587
  })
446
588
  }),
@@ -448,6 +590,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
448
590
  style: {
449
591
  background: 'transparent',
450
592
  border: 'none',
593
+ pointerEvents: readOnly ? 'none' : void 0,
451
594
  zIndex: RESIZE_CONTROL_Z_INDEX
452
595
  },
453
596
  position: "bottom-left",
@@ -456,7 +599,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
456
599
  onResizeStart: handleResizeStart,
457
600
  onResizeEnd: handleResizeEnd,
458
601
  children: /*#__PURE__*/ jsx(ResizeHandle, {
459
- selected: selected,
602
+ selected: selected && !readOnly,
460
603
  cursor: "nesw-resize"
461
604
  })
462
605
  }),
@@ -464,6 +607,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
464
607
  style: {
465
608
  background: 'transparent',
466
609
  border: 'none',
610
+ pointerEvents: readOnly ? 'none' : void 0,
467
611
  zIndex: RESIZE_CONTROL_Z_INDEX
468
612
  },
469
613
  position: "bottom-right",
@@ -472,7 +616,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
472
616
  onResizeStart: handleResizeStart,
473
617
  onResizeEnd: handleResizeEnd,
474
618
  children: /*#__PURE__*/ jsx(ResizeHandle, {
475
- selected: selected,
619
+ selected: selected && !readOnly,
476
620
  cursor: "nwse-resize"
477
621
  })
478
622
  })
@@ -513,27 +657,30 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
513
657
  activeFormats: activeFormats,
514
658
  onFormat: handleFormat,
515
659
  onBlur: handleBlur,
516
- actions: formattingActions,
660
+ actions: effectiveFormattingActions,
517
661
  onAction: handleFormattingAction
518
662
  })
519
663
  ]
520
664
  }) : /*#__PURE__*/ jsx(StickyNoteMarkdown, {
521
665
  ref: markdownRef,
522
666
  ...scrollCaptureProps,
523
- children: localContent ? /*#__PURE__*/ jsx(react_markdown, {
524
- remarkPlugins: [
525
- remark_gfm,
526
- remark_breaks
527
- ],
528
- components: markdownComponents,
529
- children: preserveNewlines(localContent)
530
- }) : renderPlaceholderOnSelect && selected && /*#__PURE__*/ jsx(react_markdown, {
531
- remarkPlugins: [
532
- remark_gfm,
533
- remark_breaks
534
- ],
535
- components: markdownComponents,
536
- children: placeholder
667
+ children: /*#__PURE__*/ jsx(StickyNoteMediaMarkdownProvider, {
668
+ value: mediaMarkdownOptions,
669
+ children: localContent ? /*#__PURE__*/ jsx(react_markdown, {
670
+ remarkPlugins: [
671
+ remark_gfm,
672
+ remark_breaks
673
+ ],
674
+ components: markdownComponents,
675
+ children: preserveNewlines(localContent)
676
+ }) : renderPlaceholderOnSelect && selected && /*#__PURE__*/ jsx(react_markdown, {
677
+ remarkPlugins: [
678
+ remark_gfm,
679
+ remark_breaks
680
+ ],
681
+ components: markdownComponents,
682
+ children: placeholder
683
+ })
537
684
  })
538
685
  })
539
686
  ]
@@ -595,6 +742,11 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
595
742
  })
596
743
  })
597
744
  ]
745
+ }),
746
+ enableMediaEmbedding && mediaDialog && /*#__PURE__*/ jsx(StickyNoteMediaDialog, {
747
+ initialMedia: mediaDialog.token?.media,
748
+ onCancel: cancelMediaDialog,
749
+ onSubmit: submitMediaDialog
598
750
  })
599
751
  ]
600
752
  });
@@ -12,6 +12,10 @@ export interface StickyNoteData extends Record<string, unknown> {
12
12
  content?: string;
13
13
  autoFocus?: boolean;
14
14
  }
15
+ export interface StickyNoteCanvasOptions {
16
+ readonly readOnly?: boolean;
17
+ readonly enableMediaEmbedding?: boolean;
18
+ }
15
19
  export declare function withAlpha(hex: string, alpha?: number): string;
16
20
  export type TextSelection = {
17
21
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"StickyNoteNode.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE9D,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAA6B,GAAG,MAAM,CAyBnF;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAGF,MAAM,WAAW,6BAA6B;IAE5C,SAAS,EAAE,aAAa,CAAC;IAEzB,UAAU,EAAE,eAAe,CAAC;IAE5B,YAAY,IAAI,MAAM,CAAC;IAEvB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAElC,MAAM,IAAI,IAAI,CAAC;CAChB;AAGD,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CACxD;AAGD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"StickyNoteNode.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE9D,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,MAAM,WAAW,uBAAuB;IAEtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAE5B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAA6B,GAAG,MAAM,CAyBnF;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAGF,MAAM,WAAW,6BAA6B;IAE5C,SAAS,EAAE,aAAa,CAAC;IAEzB,UAAU,EAAE,eAAe,CAAC;IAE5B,YAAY,IAAI,MAAM,CAAC;IAEvB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAElC,MAAM,IAAI,IAAI,CAAC;CAChB;AAGD,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CACxD;AAGD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLatestRef.d.ts","sourceRoot":"","sources":["../../../src/canvas/hooks/useLatestRef.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,gCAMvC"}
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  messages: ()=>messages
28
28
  });
29
- const messages = JSON.parse("{\"add-node-panel.search-nodes\":[\"Search nodes\"],\"canvas.property_trigger.always_persist\":[\"Always persist\"],\"canvas.property_trigger.apply_preset_with_label\":[\"Apply \",[\"label\"]],\"canvas.property_trigger.auto_hide\":[\"Auto hide\"],\"canvas.property_trigger.default_layouts\":[\"Default layouts\"],\"canvas.property_trigger.delete_preset_with_label\":[\"Delete \",[\"label\"]],\"canvas.property_trigger.layout_bottom\":[\"Default — Bottom\"],\"canvas.property_trigger.layout_right\":[\"Default — Right\"],\"canvas.property_trigger.layout_split\":[\"Default — Split\"],\"canvas.property_trigger.no_saved_presets\":[\"No saved presets yet.\"],\"canvas.property_trigger.panel_behavior\":[\"Panel behavior\"],\"canvas.property_trigger.panel_options\":[\"Panel options\"],\"canvas.property_trigger.properties\":[\"Properties\"],\"canvas.property_trigger.rename_preset_with_label\":[\"Rename \",[\"label\"]],\"canvas.property_trigger.save_as_preset\":[\"Save as preset\"],\"canvas.property_trigger.saved_presets\":[\"Saved presets\"],\"loop-node.add-node\":[\"Add node to loop\"],\"loop-node.execution-count.click-to-jump\":[\"Click to jump to a specific iteration\"],\"loop-node.execution-count.click-to-return\":[\"Click to return to individual iteration view\"],\"loop-node.execution-count.jump-to-failed\":[\"Jump to first failed iteration\"],\"loop-node.execution-count.jump-to-iteration\":[\"Jump to iteration \",[\"iterationNumber\"],\" (failed)\"],\"loop-node.execution-count.next-iteration\":[\"Next iteration\"],\"loop-node.execution-count.previous-iteration\":[\"Previous iteration\"],\"loop-node.execution-count.return-to-individual\":[\"Return to individual iteration view\"],\"loop-node.execution-count.show-aggregate\":[\"Show aggregate across all iterations\"],\"loop-node.mode.parallel\":[\"Parallel\"],\"loop-node.mode.sequential\":[\"Sequential\"],\"loop-node.title\":[\"Loop\"],\"stage-node.add-first-task\":[\"Add first task\"],\"stage-node.add-task\":[\"Add task\"],\"stage-node.add-task-to-parallel-group-above\":[\"Add task to parallel group above\"],\"stage-node.add-task-to-parallel-group-below\":[\"Add task to parallel group below\"],\"stage-node.adhoc-tasks\":[\"Manually triggered tasks\"],\"stage-node.create-parallel-group-with-task-above\":[\"Create parallel group with task above\"],\"stage-node.create-parallel-group-with-task-below\":[\"Create parallel group with task below\"],\"stage-node.delete-task\":[\"Delete task\"],\"stage-node.event-driven-tasks\":[\"Event-triggered tasks\"],\"stage-node.move-down\":[\"Move down\"],\"stage-node.move-up\":[\"Move up\"],\"stage-node.no-tasks\":[\"No tasks\"],\"stage-node.parallel\":[\"Parallel\"],\"stage-node.remove-from-parallel-group\":[\"Remove from parallel group\"],\"stage-node.remove-group-from-stage\":[\"Remove group from stage\"],\"stage-node.replace-task\":[\"Replace task\"],\"stage-node.status.cancelled\":[\"Cancelled\"],\"stage-node.status.completed\":[\"Completed\"],\"stage-node.status.failed\":[\"Failed\"],\"stage-node.status.in-progress\":[\"In progress\"],\"stage-node.status.not-executed\":[\"Not started\"],\"stage-node.status.paused\":[\"Paused\"],\"stage-node.status.terminated\":[\"Terminated\"],\"stage-node.status.warning\":[\"Warning\"],\"stage-node.task-badge.ran-n-times\":[[\"count\",\"plural\",{\"one\":[\"Ran \",\"#\",\" time\"],\"other\":[\"Ran \",\"#\",\" times\"]}]],\"stage-node.task-badge.running-again\":[\"Running again\"],\"stage-node.ungroup-parallel-tasks\":[\"Ungroup parallel tasks\"],\"stage-node.untitled-stage\":[\"Untitled stage\"],\"sticky-note.formatting.bold\":[\"Bold (\",[\"boldShortcut\"],\")\"],\"sticky-note.formatting.bullet-list\":[\"Bullet list\"],\"sticky-note.formatting.italic\":[\"Italic (\",[\"italicShortcut\"],\")\"],\"sticky-note.formatting.numbered-list\":[\"Numbered list\"],\"sticky-note.formatting.strikethrough\":[\"Strikethrough (\",[\"strikethroughShortcut\"],\")\"],\"sticky-note.formatting.toolbar\":[\"Text formatting\"],\"sticky-note.toolbar.color\":[\"Color\"],\"sticky-note.toolbar.delete\":[\"Delete\"],\"sticky-note.toolbar.edit\":[\"Edit\"],\"toolbox.search\":[\"Search\"]}");
29
+ const messages = JSON.parse('{"add-node-panel.search-nodes":["Search nodes"],"canvas.property_trigger.always_persist":["Always persist"],"canvas.property_trigger.apply_preset_with_label":["Apply ",["label"]],"canvas.property_trigger.auto_hide":["Auto hide"],"canvas.property_trigger.default_layouts":["Default layouts"],"canvas.property_trigger.delete_preset_with_label":["Delete ",["label"]],"canvas.property_trigger.layout_bottom":["Default — Bottom"],"canvas.property_trigger.layout_right":["Default — Right"],"canvas.property_trigger.layout_split":["Default — Split"],"canvas.property_trigger.no_saved_presets":["No saved presets yet."],"canvas.property_trigger.panel_behavior":["Panel behavior"],"canvas.property_trigger.panel_options":["Panel options"],"canvas.property_trigger.properties":["Properties"],"canvas.property_trigger.rename_preset_with_label":["Rename ",["label"]],"canvas.property_trigger.save_as_preset":["Save as preset"],"canvas.property_trigger.saved_presets":["Saved presets"],"loop-node.add-node":["Add node to loop"],"loop-node.execution-count.click-to-jump":["Click to jump to a specific iteration"],"loop-node.execution-count.click-to-return":["Click to return to individual iteration view"],"loop-node.execution-count.jump-to-failed":["Jump to first failed iteration"],"loop-node.execution-count.jump-to-iteration":["Jump to iteration ",["iterationNumber"]," (failed)"],"loop-node.execution-count.next-iteration":["Next iteration"],"loop-node.execution-count.previous-iteration":["Previous iteration"],"loop-node.execution-count.return-to-individual":["Return to individual iteration view"],"loop-node.execution-count.show-aggregate":["Show aggregate across all iterations"],"loop-node.mode.parallel":["Parallel"],"loop-node.mode.sequential":["Sequential"],"loop-node.title":["Loop"],"stage-node.add-first-task":["Add first task"],"stage-node.add-task":["Add task"],"stage-node.add-task-to-parallel-group-above":["Add task to parallel group above"],"stage-node.add-task-to-parallel-group-below":["Add task to parallel group below"],"stage-node.adhoc-tasks":["Manually triggered tasks"],"stage-node.create-parallel-group-with-task-above":["Create parallel group with task above"],"stage-node.create-parallel-group-with-task-below":["Create parallel group with task below"],"stage-node.delete-task":["Delete task"],"stage-node.event-driven-tasks":["Event-triggered tasks"],"stage-node.move-down":["Move down"],"stage-node.move-up":["Move up"],"stage-node.no-tasks":["No tasks"],"stage-node.parallel":["Parallel"],"stage-node.remove-from-parallel-group":["Remove from parallel group"],"stage-node.remove-group-from-stage":["Remove group from stage"],"stage-node.replace-task":["Replace task"],"stage-node.status.cancelled":["Cancelled"],"stage-node.status.completed":["Completed"],"stage-node.status.failed":["Failed"],"stage-node.status.in-progress":["In progress"],"stage-node.status.not-executed":["Not started"],"stage-node.status.paused":["Paused"],"stage-node.status.terminated":["Terminated"],"stage-node.status.warning":["Warning"],"stage-node.task-badge.ran-n-times":[["count","plural",{"one":["Ran ","#"," time"],"other":["Ran ","#"," times"]}]],"stage-node.task-badge.running-again":["Running again"],"stage-node.ungroup-parallel-tasks":["Ungroup parallel tasks"],"stage-node.untitled-stage":["Untitled stage"],"sticky-note.formatting.bold":["Bold (",["boldShortcut"],")"],"sticky-note.formatting.bullet-list":["Bullet list"],"sticky-note.formatting.italic":["Italic (",["italicShortcut"],")"],"sticky-note.formatting.numbered-list":["Numbered list"],"sticky-note.formatting.strikethrough":["Strikethrough (",["strikethroughShortcut"],")"],"sticky-note.formatting.toolbar":["Text formatting"],"sticky-note.media.dialog.add-title":["Embed image or video"],"sticky-note.media.dialog.alt-help":["Describe the image for people who use screen readers."],"sticky-note.media.dialog.alt-label":["Alternative text"],"sticky-note.media.dialog.cancel":["Cancel"],"sticky-note.media.dialog.description":["Add a public link. Video supports YouTube and direct video files."],"sticky-note.media.dialog.edit-title":["Edit media"],"sticky-note.media.dialog.embed":["Embed media"],"sticky-note.media.dialog.full-width-help":["The image or video spans the available width of the sticky note."],"sticky-note.media.dialog.full-width-label":["Make full width"],"sticky-note.media.dialog.image-option":["Image"],"sticky-note.media.dialog.image-preview":["Image preview"],"sticky-note.media.dialog.image-url-help":["Use a public HTTPS image link."],"sticky-note.media.dialog.image-url-label":["Image URL"],"sticky-note.media.dialog.image-url-placeholder":["https://example.com/image.png"],"sticky-note.media.dialog.invalid-url":["Enter a valid public HTTPS URL"],"sticky-note.media.dialog.invalid-youtube":["Add a valid YouTube video URL"],"sticky-note.media.dialog.preview-unavailable":["We could not load a preview for this URL."],"sticky-note.media.dialog.save":["Save changes"],"sticky-note.media.dialog.type-label":["Media type"],"sticky-note.media.dialog.unsupported-video":["Add a YouTube URL or a direct public video file URL such as MP4"],"sticky-note.media.dialog.video-option":["Video"],"sticky-note.media.dialog.video-preview":["Video preview"],"sticky-note.media.dialog.video-url-help":["Use a YouTube link or a direct public HTTPS video file link."],"sticky-note.media.dialog.video-url-label":["Video URL"],"sticky-note.media.dialog.video-url-placeholder":["https://youtube.com/watch?v=… or https://example.com/video.mp4"],"sticky-note.media.edit":["Edit media"],"sticky-note.media.embed-action":["Embed image or video"],"sticky-note.media.image-unavailable":["Image unavailable"],"sticky-note.media.image-unavailable-label":["Image unavailable"],"sticky-note.media.play-video":["Play video"],"sticky-note.media.unavailable":["Media unavailable"],"sticky-note.media.video-label":["Embedded video"],"sticky-note.media.video-unavailable":["Video playback is unavailable."],"sticky-note.media.youtube-title":["YouTube video"],"sticky-note.toolbar.color":["Color"],"sticky-note.toolbar.delete":["Delete"],"sticky-note.toolbar.edit":["Edit"],"toolbox.search":["Search"]}');
30
30
  exports.messages = __webpack_exports__.messages;
31
31
  for(var __rspack_i in __webpack_exports__)if (-1 === [
32
32
  "messages"
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/canvas/locales/en.ts"],"names":[],"mappings":"AAAkB,OAAO,KAAI,EAAC,QAAQ,EAAC,MAAI,cAAc,CAAC;AAAA,eAAO,MAAM,QAAQ,EAAskI,QAAQ,CAAC"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/canvas/locales/en.ts"],"names":[],"mappings":"AAAkB,OAAO,KAAI,EAAC,QAAQ,EAAC,MAAI,cAAc,CAAC;AAAA,eAAO,MAAM,QAAQ,EAA89M,QAAQ,CAAC"}
@@ -1,2 +1,2 @@
1
- const messages = JSON.parse("{\"add-node-panel.search-nodes\":[\"Search nodes\"],\"canvas.property_trigger.always_persist\":[\"Always persist\"],\"canvas.property_trigger.apply_preset_with_label\":[\"Apply \",[\"label\"]],\"canvas.property_trigger.auto_hide\":[\"Auto hide\"],\"canvas.property_trigger.default_layouts\":[\"Default layouts\"],\"canvas.property_trigger.delete_preset_with_label\":[\"Delete \",[\"label\"]],\"canvas.property_trigger.layout_bottom\":[\"Default — Bottom\"],\"canvas.property_trigger.layout_right\":[\"Default — Right\"],\"canvas.property_trigger.layout_split\":[\"Default — Split\"],\"canvas.property_trigger.no_saved_presets\":[\"No saved presets yet.\"],\"canvas.property_trigger.panel_behavior\":[\"Panel behavior\"],\"canvas.property_trigger.panel_options\":[\"Panel options\"],\"canvas.property_trigger.properties\":[\"Properties\"],\"canvas.property_trigger.rename_preset_with_label\":[\"Rename \",[\"label\"]],\"canvas.property_trigger.save_as_preset\":[\"Save as preset\"],\"canvas.property_trigger.saved_presets\":[\"Saved presets\"],\"loop-node.add-node\":[\"Add node to loop\"],\"loop-node.execution-count.click-to-jump\":[\"Click to jump to a specific iteration\"],\"loop-node.execution-count.click-to-return\":[\"Click to return to individual iteration view\"],\"loop-node.execution-count.jump-to-failed\":[\"Jump to first failed iteration\"],\"loop-node.execution-count.jump-to-iteration\":[\"Jump to iteration \",[\"iterationNumber\"],\" (failed)\"],\"loop-node.execution-count.next-iteration\":[\"Next iteration\"],\"loop-node.execution-count.previous-iteration\":[\"Previous iteration\"],\"loop-node.execution-count.return-to-individual\":[\"Return to individual iteration view\"],\"loop-node.execution-count.show-aggregate\":[\"Show aggregate across all iterations\"],\"loop-node.mode.parallel\":[\"Parallel\"],\"loop-node.mode.sequential\":[\"Sequential\"],\"loop-node.title\":[\"Loop\"],\"stage-node.add-first-task\":[\"Add first task\"],\"stage-node.add-task\":[\"Add task\"],\"stage-node.add-task-to-parallel-group-above\":[\"Add task to parallel group above\"],\"stage-node.add-task-to-parallel-group-below\":[\"Add task to parallel group below\"],\"stage-node.adhoc-tasks\":[\"Manually triggered tasks\"],\"stage-node.create-parallel-group-with-task-above\":[\"Create parallel group with task above\"],\"stage-node.create-parallel-group-with-task-below\":[\"Create parallel group with task below\"],\"stage-node.delete-task\":[\"Delete task\"],\"stage-node.event-driven-tasks\":[\"Event-triggered tasks\"],\"stage-node.move-down\":[\"Move down\"],\"stage-node.move-up\":[\"Move up\"],\"stage-node.no-tasks\":[\"No tasks\"],\"stage-node.parallel\":[\"Parallel\"],\"stage-node.remove-from-parallel-group\":[\"Remove from parallel group\"],\"stage-node.remove-group-from-stage\":[\"Remove group from stage\"],\"stage-node.replace-task\":[\"Replace task\"],\"stage-node.status.cancelled\":[\"Cancelled\"],\"stage-node.status.completed\":[\"Completed\"],\"stage-node.status.failed\":[\"Failed\"],\"stage-node.status.in-progress\":[\"In progress\"],\"stage-node.status.not-executed\":[\"Not started\"],\"stage-node.status.paused\":[\"Paused\"],\"stage-node.status.terminated\":[\"Terminated\"],\"stage-node.status.warning\":[\"Warning\"],\"stage-node.task-badge.ran-n-times\":[[\"count\",\"plural\",{\"one\":[\"Ran \",\"#\",\" time\"],\"other\":[\"Ran \",\"#\",\" times\"]}]],\"stage-node.task-badge.running-again\":[\"Running again\"],\"stage-node.ungroup-parallel-tasks\":[\"Ungroup parallel tasks\"],\"stage-node.untitled-stage\":[\"Untitled stage\"],\"sticky-note.formatting.bold\":[\"Bold (\",[\"boldShortcut\"],\")\"],\"sticky-note.formatting.bullet-list\":[\"Bullet list\"],\"sticky-note.formatting.italic\":[\"Italic (\",[\"italicShortcut\"],\")\"],\"sticky-note.formatting.numbered-list\":[\"Numbered list\"],\"sticky-note.formatting.strikethrough\":[\"Strikethrough (\",[\"strikethroughShortcut\"],\")\"],\"sticky-note.formatting.toolbar\":[\"Text formatting\"],\"sticky-note.toolbar.color\":[\"Color\"],\"sticky-note.toolbar.delete\":[\"Delete\"],\"sticky-note.toolbar.edit\":[\"Edit\"],\"toolbox.search\":[\"Search\"]}");
1
+ const messages = JSON.parse('{"add-node-panel.search-nodes":["Search nodes"],"canvas.property_trigger.always_persist":["Always persist"],"canvas.property_trigger.apply_preset_with_label":["Apply ",["label"]],"canvas.property_trigger.auto_hide":["Auto hide"],"canvas.property_trigger.default_layouts":["Default layouts"],"canvas.property_trigger.delete_preset_with_label":["Delete ",["label"]],"canvas.property_trigger.layout_bottom":["Default — Bottom"],"canvas.property_trigger.layout_right":["Default — Right"],"canvas.property_trigger.layout_split":["Default — Split"],"canvas.property_trigger.no_saved_presets":["No saved presets yet."],"canvas.property_trigger.panel_behavior":["Panel behavior"],"canvas.property_trigger.panel_options":["Panel options"],"canvas.property_trigger.properties":["Properties"],"canvas.property_trigger.rename_preset_with_label":["Rename ",["label"]],"canvas.property_trigger.save_as_preset":["Save as preset"],"canvas.property_trigger.saved_presets":["Saved presets"],"loop-node.add-node":["Add node to loop"],"loop-node.execution-count.click-to-jump":["Click to jump to a specific iteration"],"loop-node.execution-count.click-to-return":["Click to return to individual iteration view"],"loop-node.execution-count.jump-to-failed":["Jump to first failed iteration"],"loop-node.execution-count.jump-to-iteration":["Jump to iteration ",["iterationNumber"]," (failed)"],"loop-node.execution-count.next-iteration":["Next iteration"],"loop-node.execution-count.previous-iteration":["Previous iteration"],"loop-node.execution-count.return-to-individual":["Return to individual iteration view"],"loop-node.execution-count.show-aggregate":["Show aggregate across all iterations"],"loop-node.mode.parallel":["Parallel"],"loop-node.mode.sequential":["Sequential"],"loop-node.title":["Loop"],"stage-node.add-first-task":["Add first task"],"stage-node.add-task":["Add task"],"stage-node.add-task-to-parallel-group-above":["Add task to parallel group above"],"stage-node.add-task-to-parallel-group-below":["Add task to parallel group below"],"stage-node.adhoc-tasks":["Manually triggered tasks"],"stage-node.create-parallel-group-with-task-above":["Create parallel group with task above"],"stage-node.create-parallel-group-with-task-below":["Create parallel group with task below"],"stage-node.delete-task":["Delete task"],"stage-node.event-driven-tasks":["Event-triggered tasks"],"stage-node.move-down":["Move down"],"stage-node.move-up":["Move up"],"stage-node.no-tasks":["No tasks"],"stage-node.parallel":["Parallel"],"stage-node.remove-from-parallel-group":["Remove from parallel group"],"stage-node.remove-group-from-stage":["Remove group from stage"],"stage-node.replace-task":["Replace task"],"stage-node.status.cancelled":["Cancelled"],"stage-node.status.completed":["Completed"],"stage-node.status.failed":["Failed"],"stage-node.status.in-progress":["In progress"],"stage-node.status.not-executed":["Not started"],"stage-node.status.paused":["Paused"],"stage-node.status.terminated":["Terminated"],"stage-node.status.warning":["Warning"],"stage-node.task-badge.ran-n-times":[["count","plural",{"one":["Ran ","#"," time"],"other":["Ran ","#"," times"]}]],"stage-node.task-badge.running-again":["Running again"],"stage-node.ungroup-parallel-tasks":["Ungroup parallel tasks"],"stage-node.untitled-stage":["Untitled stage"],"sticky-note.formatting.bold":["Bold (",["boldShortcut"],")"],"sticky-note.formatting.bullet-list":["Bullet list"],"sticky-note.formatting.italic":["Italic (",["italicShortcut"],")"],"sticky-note.formatting.numbered-list":["Numbered list"],"sticky-note.formatting.strikethrough":["Strikethrough (",["strikethroughShortcut"],")"],"sticky-note.formatting.toolbar":["Text formatting"],"sticky-note.media.dialog.add-title":["Embed image or video"],"sticky-note.media.dialog.alt-help":["Describe the image for people who use screen readers."],"sticky-note.media.dialog.alt-label":["Alternative text"],"sticky-note.media.dialog.cancel":["Cancel"],"sticky-note.media.dialog.description":["Add a public link. Video supports YouTube and direct video files."],"sticky-note.media.dialog.edit-title":["Edit media"],"sticky-note.media.dialog.embed":["Embed media"],"sticky-note.media.dialog.full-width-help":["The image or video spans the available width of the sticky note."],"sticky-note.media.dialog.full-width-label":["Make full width"],"sticky-note.media.dialog.image-option":["Image"],"sticky-note.media.dialog.image-preview":["Image preview"],"sticky-note.media.dialog.image-url-help":["Use a public HTTPS image link."],"sticky-note.media.dialog.image-url-label":["Image URL"],"sticky-note.media.dialog.image-url-placeholder":["https://example.com/image.png"],"sticky-note.media.dialog.invalid-url":["Enter a valid public HTTPS URL"],"sticky-note.media.dialog.invalid-youtube":["Add a valid YouTube video URL"],"sticky-note.media.dialog.preview-unavailable":["We could not load a preview for this URL."],"sticky-note.media.dialog.save":["Save changes"],"sticky-note.media.dialog.type-label":["Media type"],"sticky-note.media.dialog.unsupported-video":["Add a YouTube URL or a direct public video file URL such as MP4"],"sticky-note.media.dialog.video-option":["Video"],"sticky-note.media.dialog.video-preview":["Video preview"],"sticky-note.media.dialog.video-url-help":["Use a YouTube link or a direct public HTTPS video file link."],"sticky-note.media.dialog.video-url-label":["Video URL"],"sticky-note.media.dialog.video-url-placeholder":["https://youtube.com/watch?v=… or https://example.com/video.mp4"],"sticky-note.media.edit":["Edit media"],"sticky-note.media.embed-action":["Embed image or video"],"sticky-note.media.image-unavailable":["Image unavailable"],"sticky-note.media.image-unavailable-label":["Image unavailable"],"sticky-note.media.play-video":["Play video"],"sticky-note.media.unavailable":["Media unavailable"],"sticky-note.media.video-label":["Embedded video"],"sticky-note.media.video-unavailable":["Video playback is unavailable."],"sticky-note.media.youtube-title":["YouTube video"],"sticky-note.toolbar.color":["Color"],"sticky-note.toolbar.delete":["Delete"],"sticky-note.toolbar.edit":["Edit"],"toolbox.search":["Search"]}');
2
2
  export { messages };