@stigmer/react 3.12.2 → 3.12.3

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 (151) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +3 -19
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  5. package/agent-instance/CreateAgentInstanceDialog.js +7 -20
  6. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  7. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  8. package/attachment/AttachmentImageLightbox.js +8 -23
  9. package/attachment/AttachmentImageLightbox.js.map +1 -1
  10. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  11. package/channel/ChannelConversationsDialog.js +3 -19
  12. package/channel/ChannelConversationsDialog.js.map +1 -1
  13. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  14. package/channel/ChannelCredentialsDialog.js +3 -19
  15. package/channel/ChannelCredentialsDialog.js.map +1 -1
  16. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  17. package/channel/ChannelTemplatesDialog.js +4 -20
  18. package/channel/ChannelTemplatesDialog.js.map +1 -1
  19. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  20. package/channel/ConnectSlackDialog.js +3 -21
  21. package/channel/ConnectSlackDialog.js.map +1 -1
  22. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  23. package/channel/ConnectWhatsAppDialog.js +3 -21
  24. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  25. package/conversation/ConversationAttentionBanner.d.ts +23 -6
  26. package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
  27. package/conversation/ConversationAttentionBanner.js +25 -10
  28. package/conversation/ConversationAttentionBanner.js.map +1 -1
  29. package/conversation/ConversationListPane.d.ts.map +1 -1
  30. package/conversation/ConversationListPane.js +25 -6
  31. package/conversation/ConversationListPane.js.map +1 -1
  32. package/conversation/ConversationsWorkbench.d.ts.map +1 -1
  33. package/conversation/ConversationsWorkbench.js +1 -1
  34. package/conversation/ConversationsWorkbench.js.map +1 -1
  35. package/execution/ApprovalCard.d.ts.map +1 -1
  36. package/execution/ApprovalCard.js +13 -3
  37. package/execution/ApprovalCard.js.map +1 -1
  38. package/execution/ArtifactPreviewModal.d.ts.map +1 -1
  39. package/execution/ArtifactPreviewModal.js +11 -17
  40. package/execution/ArtifactPreviewModal.js.map +1 -1
  41. package/execution/ToolCallItem.d.ts +3 -1
  42. package/execution/ToolCallItem.d.ts.map +1 -1
  43. package/execution/ToolCallItem.js +19 -7
  44. package/execution/ToolCallItem.js.map +1 -1
  45. package/execution/index.d.ts +1 -1
  46. package/execution/index.d.ts.map +1 -1
  47. package/execution/index.js +1 -1
  48. package/execution/index.js.map +1 -1
  49. package/execution/tool-categories.d.ts +51 -0
  50. package/execution/tool-categories.d.ts.map +1 -1
  51. package/execution/tool-categories.js +103 -1
  52. package/execution/tool-categories.js.map +1 -1
  53. package/execution/tool-presenter.d.ts +15 -0
  54. package/execution/tool-presenter.d.ts.map +1 -1
  55. package/execution/tool-presenter.js +7 -2
  56. package/execution/tool-presenter.js.map +1 -1
  57. package/index.d.ts +1 -1
  58. package/index.d.ts.map +1 -1
  59. package/index.js +1 -1
  60. package/index.js.map +1 -1
  61. package/internal/DialogShell.d.ts +77 -0
  62. package/internal/DialogShell.d.ts.map +1 -0
  63. package/internal/DialogShell.js +77 -0
  64. package/internal/DialogShell.js.map +1 -0
  65. package/manifest/ApplyManifestDialog.d.ts.map +1 -1
  66. package/manifest/ApplyManifestDialog.js +7 -17
  67. package/manifest/ApplyManifestDialog.js.map +1 -1
  68. package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
  69. package/manifest/EditResourceYamlDialog.js +3 -19
  70. package/manifest/EditResourceYamlDialog.js.map +1 -1
  71. package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
  72. package/mcp-server/McpServerConnectDialog.js +8 -20
  73. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  74. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  75. package/mcp-server/McpServerDetailView.js +4 -15
  76. package/mcp-server/McpServerDetailView.js.map +1 -1
  77. package/package.json +4 -4
  78. package/resource-detail/ConfirmDialog.d.ts +2 -3
  79. package/resource-detail/ConfirmDialog.d.ts.map +1 -1
  80. package/resource-detail/ConfirmDialog.js +8 -20
  81. package/resource-detail/ConfirmDialog.js.map +1 -1
  82. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  83. package/sharing/ShareAgentDialog.js +2 -20
  84. package/sharing/ShareAgentDialog.js.map +1 -1
  85. package/skill/SkillDiffDialog.d.ts.map +1 -1
  86. package/skill/SkillDiffDialog.js +5 -21
  87. package/skill/SkillDiffDialog.js.map +1 -1
  88. package/src/access/ManageAccessDialog.tsx +7 -27
  89. package/src/agent-instance/CreateAgentInstanceDialog.tsx +14 -27
  90. package/src/attachment/AttachmentImageLightbox.tsx +13 -36
  91. package/src/channel/ChannelConversationsDialog.tsx +8 -27
  92. package/src/channel/ChannelCredentialsDialog.tsx +8 -28
  93. package/src/channel/ChannelTemplatesDialog.tsx +10 -29
  94. package/src/channel/ConnectSlackDialog.tsx +8 -30
  95. package/src/channel/ConnectWhatsAppDialog.tsx +8 -30
  96. package/src/conversation/ConversationAttentionBanner.tsx +64 -19
  97. package/src/conversation/ConversationListPane.tsx +42 -17
  98. package/src/conversation/ConversationsWorkbench.tsx +1 -0
  99. package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
  100. package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
  101. package/src/execution/ApprovalCard.tsx +23 -2
  102. package/src/execution/ArtifactPreviewModal.tsx +15 -27
  103. package/src/execution/ToolCallItem.tsx +19 -8
  104. package/src/execution/__tests__/intent-title.test.tsx +221 -0
  105. package/src/execution/index.ts +3 -0
  106. package/src/execution/tool-categories.ts +123 -1
  107. package/src/execution/tool-presenter.ts +22 -1
  108. package/src/index.ts +3 -0
  109. package/src/internal/DialogShell.tsx +169 -0
  110. package/src/internal/__tests__/DialogShell.test.tsx +223 -0
  111. package/src/manifest/ApplyManifestDialog.tsx +8 -26
  112. package/src/manifest/EditResourceYamlDialog.tsx +4 -31
  113. package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
  114. package/src/mcp-server/McpServerDetailView.tsx +12 -24
  115. package/src/resource-detail/ConfirmDialog.tsx +9 -30
  116. package/src/sharing/ShareAgentDialog.tsx +7 -29
  117. package/src/skill/SkillDiffDialog.tsx +13 -36
  118. package/src/workflow/ViewYamlDialog.tsx +18 -37
  119. package/src/workflow/WorkflowArchitectDialog.tsx +11 -43
  120. package/src/workflow/WorkflowExplainDialog.tsx +11 -37
  121. package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
  122. package/src/workflow/WorkflowRunDialog.tsx +21 -48
  123. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +14 -31
  124. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
  125. package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
  126. package/styles.css +1 -1
  127. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  128. package/workflow/ViewYamlDialog.js +10 -29
  129. package/workflow/ViewYamlDialog.js.map +1 -1
  130. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  131. package/workflow/WorkflowArchitectDialog.js +5 -24
  132. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  133. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  134. package/workflow/WorkflowExplainDialog.js +5 -21
  135. package/workflow/WorkflowExplainDialog.js.map +1 -1
  136. package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
  137. package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
  138. package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
  139. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  140. package/workflow/WorkflowRunDialog.js +13 -29
  141. package/workflow/WorkflowRunDialog.js.map +1 -1
  142. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  143. package/workflow/execution-comparison/ExecutionComparisonPicker.js +8 -26
  144. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  145. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  146. package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
  147. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  148. package/workflow/templates/WorkflowTemplatePreview.d.ts +1 -1
  149. package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
  150. package/workflow/templates/WorkflowTemplatePreview.js +10 -22
  151. package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { memo, useCallback, useEffect, useMemo, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../../internal/DialogShell.js";
5
6
  import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
6
7
  import { useWorkflowExecutionList } from "../useWorkflowExecutionList.js";
7
8
  import { WorkflowExecutionPhaseBadge } from "../WorkflowExecutionPhaseBadge.js";
@@ -48,7 +49,6 @@ export const ExecutionComparisonPicker = memo(function ExecutionComparisonPicker
48
49
  onConfirm,
49
50
  onClose,
50
51
  }: ExecutionComparisonPickerProps) {
51
- const dialogRef = useRef<HTMLDialogElement>(null);
52
52
  const [selectedId, setSelectedId] = useState<string | null>(null);
53
53
 
54
54
  const { executions, isLoading } = useWorkflowExecutionList({
@@ -82,24 +82,6 @@ export const ExecutionComparisonPicker = memo(function ExecutionComparisonPicker
82
82
  setSelectedId((preferred ?? fallback)?.metadata?.id ?? null);
83
83
  }, [open, candidates, selectedId, basePhase]);
84
84
 
85
- useEffect(() => {
86
- const dialog = dialogRef.current;
87
- if (!dialog) return;
88
- if (open) {
89
- if (!dialog.open) dialog.showModal();
90
- } else {
91
- if (dialog.open) dialog.close();
92
- }
93
- }, [open]);
94
-
95
- useEffect(() => {
96
- const dialog = dialogRef.current;
97
- if (!dialog) return;
98
- const handleClose = () => onClose();
99
- dialog.addEventListener("close", handleClose);
100
- return () => dialog.removeEventListener("close", handleClose);
101
- }, [onClose]);
102
-
103
85
  useEffect(() => {
104
86
  if (!open) setSelectedId(null);
105
87
  }, [open]);
@@ -108,21 +90,22 @@ export const ExecutionComparisonPicker = memo(function ExecutionComparisonPicker
108
90
  if (selectedId) onConfirm(selectedId);
109
91
  }, [selectedId, onConfirm]);
110
92
 
111
- const handleBackdropClick = useCallback(
112
- (e: React.MouseEvent<HTMLDialogElement>) => {
113
- if (e.target === dialogRef.current) onClose();
93
+ const handleOpenChange = useCallback(
94
+ (nextOpen: boolean) => {
95
+ if (!nextOpen) onClose();
114
96
  },
115
97
  [onClose],
116
98
  );
117
99
 
118
100
  return (
119
- <dialog
120
- ref={dialogRef}
121
- className={cn(
122
- "stgm stg:m-auto stg:max-h-[70vh] stg:w-full stg:max-w-md stg:rounded-lg stg:border stg:border-[var(--stgm-border,#e5e5e5)] stg:bg-[var(--stgm-background,#fff)] stg:p-0 stg:shadow-xl",
123
- "stg:backdrop:bg-backdrop",
124
- )}
125
- onClick={handleBackdropClick}
101
+ <DialogShell
102
+ open={open}
103
+ onOpenChange={handleOpenChange}
104
+ width="md"
105
+ dismissOnBackdrop
106
+ // `stgm` re-establishes the theme scope (rendered from the workflow
107
+ // canvas); the var-fallback styling predates the token utilities.
108
+ className="stgm stg:max-h-[70vh] stg:bg-[var(--stgm-background,#fff)] stg:border-[var(--stgm-border,#e5e5e5)]"
126
109
  aria-label="Select execution to compare"
127
110
  >
128
111
  <div className="stg:flex stg:flex-col">
@@ -217,7 +200,7 @@ export const ExecutionComparisonPicker = memo(function ExecutionComparisonPicker
217
200
  </button>
218
201
  </div>
219
202
  </div>
220
- </dialog>
203
+ </DialogShell>
221
204
  );
222
205
  });
223
206
 
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useId, useRef, useState } from "react";
3
+ import { useCallback, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../../internal/DialogShell.js";
5
6
  import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
6
7
  import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
7
8
  import type { ResourceRef } from "@stigmer/sdk";
@@ -39,7 +40,6 @@ export function CreateWorkflowInstanceDialog({
39
40
  workflowId,
40
41
  onCreated,
41
42
  }: CreateWorkflowInstanceDialogProps) {
42
- const dialogRef = useRef<HTMLDialogElement>(null);
43
43
  const { create, isCreating, error, clearError } = useCreateWorkflowInstance();
44
44
 
45
45
  // Instance-scoped element ids (oss#571): a reusable component must not
@@ -65,11 +65,17 @@ export function CreateWorkflowInstanceDialog({
65
65
  }, [clearError]);
66
66
 
67
67
  const handleClose = useCallback(() => {
68
- dialogRef.current?.close();
69
68
  onOpenChange(false);
70
69
  resetForm();
71
70
  }, [onOpenChange, resetForm]);
72
71
 
72
+ const handleShellOpenChange = useCallback(
73
+ (nextOpen: boolean) => {
74
+ if (!nextOpen) handleClose();
75
+ },
76
+ [handleClose],
77
+ );
78
+
73
79
  const handleSubmit = useCallback(
74
80
  async (e: React.FormEvent) => {
75
81
  e.preventDefault();
@@ -93,30 +99,11 @@ export function CreateWorkflowInstanceDialog({
93
99
  [name, org, workflowId, description, environmentRefs, visibility, create, onCreated, handleClose],
94
100
  );
95
101
 
96
- // Sync native dialog open state
97
- const prevOpenRef = useRef(false);
98
- if (open !== prevOpenRef.current) {
99
- prevOpenRef.current = open;
100
- if (open) {
101
- // Must defer showModal to after render
102
- requestAnimationFrame(() => {
103
- if (dialogRef.current && !dialogRef.current.open) {
104
- dialogRef.current.showModal();
105
- }
106
- });
107
- } else if (dialogRef.current?.open) {
108
- dialogRef.current.close();
109
- }
110
- }
111
-
112
102
  return (
113
- <dialog
114
- ref={dialogRef}
115
- onClose={handleClose}
116
- className={cn(
117
- "stg:fixed stg:inset-0 stg:m-auto stg:w-full stg:max-w-lg stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
118
- "stg:backdrop:bg-backdrop",
119
- )}
103
+ <DialogShell
104
+ open={open}
105
+ onOpenChange={handleShellOpenChange}
106
+ width="lg"
120
107
  aria-labelledby={titleId}
121
108
  >
122
109
  <form onSubmit={handleSubmit} className="stg:flex stg:flex-col">
@@ -255,7 +242,7 @@ export function CreateWorkflowInstanceDialog({
255
242
  </button>
256
243
  </div>
257
244
  </form>
258
- </dialog>
245
+ </DialogShell>
259
246
  );
260
247
  }
261
248
 
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useMemo, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../../internal/DialogShell.js";
5
6
  import { parse as parseYaml } from "yaml";
6
7
  import {
7
8
  ReactFlowProvider,
@@ -42,25 +43,12 @@ export function WorkflowTemplatePreview({
42
43
  onClose,
43
44
  onSelect,
44
45
  }: WorkflowTemplatePreviewProps) {
45
- const dialogRef = useRef<HTMLDialogElement>(null);
46
-
47
- useEffect(() => {
48
- const dialog = dialogRef.current;
49
- if (!dialog) return;
50
- if (open && !dialog.open) {
51
- dialog.showModal();
52
- } else if (!open && dialog.open) {
53
- dialog.close();
54
- }
55
- }, [open]);
56
-
57
- useEffect(() => {
58
- const dialog = dialogRef.current;
59
- if (!dialog) return;
60
- const handleClose = () => onClose();
61
- dialog.addEventListener("close", handleClose);
62
- return () => dialog.removeEventListener("close", handleClose);
63
- }, [onClose]);
46
+ const handleOpenChange = useCallback(
47
+ (nextOpen: boolean) => {
48
+ if (!nextOpen) onClose();
49
+ },
50
+ [onClose],
51
+ );
64
52
 
65
53
  const handleSelect = useCallback(() => {
66
54
  if (template) onSelect(template);
@@ -72,19 +60,21 @@ export function WorkflowTemplatePreview({
72
60
  );
73
61
 
74
62
  if (!template || !meta) {
75
- return <dialog ref={dialogRef} className="stg:hidden" />;
63
+ return null;
76
64
  }
77
65
 
78
66
  const categoryLabel =
79
67
  TEMPLATE_CATEGORY_LABELS[template.category] ?? template.category;
80
68
 
81
69
  return (
82
- <dialog
83
- ref={dialogRef}
84
- className={cn(
85
- "stgm stg:m-auto stg:max-h-[85vh] stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-background stg:p-0 stg:shadow-lg",
86
- "stg:backdrop:bg-backdrop",
87
- )}
70
+ <DialogShell
71
+ open={open}
72
+ onOpenChange={handleOpenChange}
73
+ width="3xl"
74
+ // `stgm` re-establishes the theme scope (rendered from the template
75
+ // browser canvas); background surface is deliberate for the graph.
76
+ className="stgm stg:max-h-[85vh] stg:bg-background"
77
+ aria-label={`Preview ${template.name}`}
88
78
  >
89
79
  <div className="stg:flex stg:flex-col">
90
80
  {/* Header */}
@@ -193,7 +183,7 @@ export function WorkflowTemplatePreview({
193
183
  </button>
194
184
  </div>
195
185
  </div>
196
- </dialog>
186
+ </DialogShell>
197
187
  );
198
188
  }
199
189