@alpaca-editor/core 1.0.4095 → 1.0.4097

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 (142) hide show
  1. package/dist/components/ui/button.d.ts +1 -1
  2. package/dist/components/ui/button.js +1 -0
  3. package/dist/components/ui/button.js.map +1 -1
  4. package/dist/components/ui/context-menu.d.ts +2 -2
  5. package/dist/components/ui/context-menu.js +16 -16
  6. package/dist/components/ui/context-menu.js.map +1 -1
  7. package/dist/editor/Editor.js +1 -1
  8. package/dist/editor/Editor.js.map +1 -1
  9. package/dist/editor/FieldActionsOverlay.js +40 -26
  10. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  11. package/dist/editor/FieldListField.js +1 -1
  12. package/dist/editor/FieldListField.js.map +1 -1
  13. package/dist/editor/LinkEditorDialog.js +1 -1
  14. package/dist/editor/ai/AgentTerminal.js +203 -59
  15. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  16. package/dist/editor/ai/Agents.js +23 -9
  17. package/dist/editor/ai/Agents.js.map +1 -1
  18. package/dist/editor/ai/ContextInfoBar.d.ts +11 -0
  19. package/dist/editor/ai/ContextInfoBar.js +357 -0
  20. package/dist/editor/ai/ContextInfoBar.js.map +1 -0
  21. package/dist/editor/ai/DancingDots.js +1 -1
  22. package/dist/editor/ai/DancingDots.js.map +1 -1
  23. package/dist/editor/ai/ToolCallDisplay.js +2 -0
  24. package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
  25. package/dist/editor/client/AboutDialog.js +7 -5
  26. package/dist/editor/client/AboutDialog.js.map +1 -1
  27. package/dist/editor/client/EditorShell.js +7 -2
  28. package/dist/editor/client/EditorShell.js.map +1 -1
  29. package/dist/editor/client/editContext.d.ts +2 -2
  30. package/dist/editor/client/hooks/useSocketMessageHandler.js +3 -0
  31. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  32. package/dist/editor/client/itemsRepository.js +6 -2
  33. package/dist/editor/client/itemsRepository.js.map +1 -1
  34. package/dist/editor/control-center/Setup.js +1 -1
  35. package/dist/editor/control-center/Setup.js.map +1 -1
  36. package/dist/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
  37. package/dist/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
  38. package/dist/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
  39. package/dist/editor/control-center/setup-steps/AiSetupStep/index.js +22 -0
  40. package/dist/editor/control-center/setup-steps/AiSetupStep/index.js.map +1 -0
  41. package/dist/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
  42. package/dist/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
  43. package/dist/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
  44. package/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
  45. package/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
  46. package/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
  47. package/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
  48. package/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
  49. package/dist/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
  50. package/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.d.ts +1 -0
  51. package/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +328 -0
  52. package/dist/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -0
  53. package/dist/editor/control-center/setup-steps/AiSetupStep/types.d.ts +1 -0
  54. package/dist/editor/control-center/setup-steps/AiSetupStep/types.js +2 -0
  55. package/dist/editor/control-center/setup-steps/AiSetupStep/types.js.map +1 -0
  56. package/dist/editor/control-center/setup-steps/AiSetupStep/utils.d.ts +4 -0
  57. package/dist/editor/control-center/setup-steps/AiSetupStep/utils.js +25 -0
  58. package/dist/editor/control-center/setup-steps/AiSetupStep/utils.js.map +1 -0
  59. package/dist/editor/control-center/setup-steps/IndexSetupStep.js +2 -1
  60. package/dist/editor/control-center/setup-steps/IndexSetupStep.js.map +1 -1
  61. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  62. package/dist/editor/field-types/TreeListEditor.js +102 -16
  63. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  64. package/dist/editor/field-types/richtext/components/ReactSlate.js +1 -1
  65. package/dist/editor/field-types/richtext/components/SimpleRichTextEditor.js +1 -1
  66. package/dist/editor/menubar/toolbar-sections/EditControls.js +2 -2
  67. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  68. package/dist/editor/menubar/toolbar-sections/InsertControls.js +1 -1
  69. package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
  70. package/dist/editor/page-editor-chrome/FrameMenu.js +25 -12
  71. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  72. package/dist/editor/page-editor-chrome/InlineEditor.js +102 -7
  73. package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
  74. package/dist/editor/page-editor-chrome/SuggestionHighlighting.js +2 -2
  75. package/dist/editor/page-editor-chrome/SuggestionHighlighting.js.map +1 -1
  76. package/dist/editor/reviews/Comments.js +4 -4
  77. package/dist/editor/reviews/Comments.js.map +1 -1
  78. package/dist/editor/services/agentService.d.ts +2 -0
  79. package/dist/editor/services/agentService.js.map +1 -1
  80. package/dist/editor/services/aiService.d.ts +1 -0
  81. package/dist/editor/services/aiService.js.map +1 -1
  82. package/dist/editor/sidebar/ComponentTree.js +18 -6
  83. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  84. package/dist/editor/sidebar/Insert.js +1 -1
  85. package/dist/editor/ui/Splitter.js +2 -1
  86. package/dist/editor/ui/Splitter.js.map +1 -1
  87. package/dist/editor/utils.js +0 -1
  88. package/dist/editor/utils.js.map +1 -1
  89. package/dist/page-wizard/steps/ContentStep.js +5 -2
  90. package/dist/page-wizard/steps/ContentStep.js.map +1 -1
  91. package/dist/revision.d.ts +2 -2
  92. package/dist/revision.js +2 -2
  93. package/dist/styles.css +15 -18
  94. package/package.json +1 -1
  95. package/src/components/ui/button.tsx +1 -0
  96. package/src/components/ui/context-menu.tsx +44 -20
  97. package/src/editor/Editor.tsx +1 -1
  98. package/src/editor/FieldActionsOverlay.tsx +113 -91
  99. package/src/editor/FieldListField.tsx +4 -1
  100. package/src/editor/LinkEditorDialog.tsx +1 -1
  101. package/src/editor/ai/AgentTerminal.tsx +261 -157
  102. package/src/editor/ai/Agents.tsx +18 -5
  103. package/src/editor/ai/ContextInfoBar.tsx +567 -0
  104. package/src/editor/ai/DancingDots.tsx +1 -1
  105. package/src/editor/ai/ToolCallDisplay.tsx +2 -0
  106. package/src/editor/client/AboutDialog.tsx +22 -17
  107. package/src/editor/client/EditorShell.tsx +8 -2
  108. package/src/editor/client/editContext.ts +2 -2
  109. package/src/editor/client/hooks/useSocketMessageHandler.ts +3 -0
  110. package/src/editor/client/itemsRepository.ts +6 -5
  111. package/src/editor/control-center/Setup.tsx +1 -1
  112. package/src/editor/control-center/setup-steps/AiSetupStep/EmbeddingsModelSection.tsx +296 -0
  113. package/src/editor/control-center/setup-steps/AiSetupStep/index.tsx +38 -0
  114. package/src/editor/control-center/setup-steps/AiSetupStep/provider/ProviderSection.tsx +413 -0
  115. package/src/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersList.tsx +92 -0
  116. package/src/editor/control-center/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.tsx +139 -0
  117. package/src/editor/control-center/setup-steps/AiSetupStep/tools/GenerateToolsSection.tsx +409 -0
  118. package/src/editor/control-center/setup-steps/AiSetupStep/types.ts +1 -0
  119. package/src/editor/control-center/setup-steps/AiSetupStep/utils.ts +43 -0
  120. package/src/editor/control-center/setup-steps/IndexSetupStep.tsx +2 -0
  121. package/src/editor/field-types/SingleLineText.tsx +0 -9
  122. package/src/editor/field-types/TreeListEditor.tsx +115 -16
  123. package/src/editor/field-types/richtext/components/ReactSlate.tsx +1 -1
  124. package/src/editor/field-types/richtext/components/SimpleRichTextEditor.tsx +1 -1
  125. package/src/editor/menubar/toolbar-sections/EditControls.tsx +3 -2
  126. package/src/editor/menubar/toolbar-sections/InsertControls.tsx +1 -1
  127. package/src/editor/page-editor-chrome/FrameMenu.tsx +81 -68
  128. package/src/editor/page-editor-chrome/InlineEditor.tsx +129 -7
  129. package/src/editor/page-editor-chrome/SuggestionHighlighting.tsx +5 -5
  130. package/src/editor/reviews/Comments.tsx +13 -8
  131. package/src/editor/services/agentService.ts +3 -0
  132. package/src/editor/services/aiService.ts +2 -0
  133. package/src/editor/sidebar/ComponentTree.tsx +20 -6
  134. package/src/editor/sidebar/Insert.tsx +1 -1
  135. package/src/editor/ui/Splitter.tsx +2 -2
  136. package/src/editor/utils.ts +0 -1
  137. package/src/page-wizard/steps/ContentStep.tsx +46 -0
  138. package/src/revision.ts +2 -2
  139. package/dist/editor/control-center/setup-steps/AiSetupStep.js +0 -531
  140. package/dist/editor/control-center/setup-steps/AiSetupStep.js.map +0 -1
  141. package/src/editor/control-center/setup-steps/AiSetupStep.tsx +0 -784
  142. /package/dist/editor/control-center/setup-steps/{AiSetupStep.d.ts → AiSetupStep/index.d.ts} +0 -0
@@ -1,5 +1,7 @@
1
1
  import React, { useState, useRef, useEffect } from "react";
2
- import { OverlayPanel } from "primereact/overlaypanel";
2
+ import { Popover, PopoverContent, PopoverAnchor } from "../components/ui/popover";
3
+ import { Button } from "../components/ui/button";
4
+ import { ArrowLeft } from "lucide-react";
3
5
  import { FieldButton, FieldButtonParameter } from "./pageModel";
4
6
 
5
7
  interface FieldActionsOverlayProps {
@@ -33,7 +35,8 @@ const FieldActionsOverlay = React.forwardRef<
33
35
  },
34
36
  ref,
35
37
  ) => {
36
- const overlayRef = useRef<OverlayPanel>(null);
38
+ const [isOpen, setIsOpen] = useState(false);
39
+ const [anchorPosition, setAnchorPosition] = useState<{ x: number; y: number }>({ x: 0, y: 0 });
37
40
  const [selectedParameterizedAction, setSelectedParameterizedAction] =
38
41
  useState<FieldButton | null>(null);
39
42
  const [parameterValues, setParameterValues] = useState<
@@ -44,7 +47,7 @@ const FieldActionsOverlay = React.forwardRef<
44
47
 
45
48
  useEffect(() => {
46
49
  if (currentOverlay !== overlayId) {
47
- overlayRef.current?.hide();
50
+ setIsOpen(false);
48
51
  resetParameterizedAction();
49
52
  }
50
53
  }, [currentOverlay, overlayId]);
@@ -68,7 +71,7 @@ const FieldActionsOverlay = React.forwardRef<
68
71
  setParameterValues(initialValues);
69
72
  } else {
70
73
  onActionClick(action);
71
- overlayRef.current?.hide();
74
+ setIsOpen(false);
72
75
  }
73
76
  }
74
77
 
@@ -79,7 +82,7 @@ const FieldActionsOverlay = React.forwardRef<
79
82
  parameterValues,
80
83
  );
81
84
  resetParameterizedAction();
82
- overlayRef.current?.hide();
85
+ setIsOpen(false);
83
86
  }
84
87
  }
85
88
 
@@ -89,7 +92,7 @@ const FieldActionsOverlay = React.forwardRef<
89
92
 
90
93
  function cancelParameterizedAction(): void {
91
94
  resetParameterizedAction();
92
- overlayRef.current?.hide();
95
+ setIsOpen(false);
93
96
  }
94
97
 
95
98
  function updateParameterValue(paramId: string, value: string): void {
@@ -164,23 +167,28 @@ const FieldActionsOverlay = React.forwardRef<
164
167
  }
165
168
  }
166
169
 
170
+ function getAnchorPositionFromEvent(event: any): { x: number; y: number } {
171
+ try {
172
+ const target = event?.target as HTMLElement | null;
173
+ if (target && typeof target.getBoundingClientRect === "function") {
174
+ const rect = target.getBoundingClientRect();
175
+ return { x: rect.left + rect.width / 2, y: rect.top + rect.height };
176
+ }
177
+ if (typeof event?.clientX === "number" && typeof event?.clientY === "number") {
178
+ return { x: event.clientX, y: event.clientY };
179
+ }
180
+ } catch {}
181
+ return { x: window.innerWidth / 2, y: window.innerHeight / 2 };
182
+ }
183
+
167
184
  function show(event: any, actionToSelect?: FieldButton): void {
168
- // Set overlay state first, then show
185
+ // Track which overlay is active
169
186
  setCurrentOverlay(overlayId);
170
187
 
171
- // Check if this is a synthetic event (from context menu) or real event (from button click)
172
- if (
173
- event &&
174
- event.isTrusted === false &&
175
- event.target &&
176
- event.target.style
177
- ) {
178
- // This is likely our synthetic event with a positioned target element
179
- overlayRef.current?.toggle(event, event.target);
180
- } else {
181
- // This is a normal event, use standard positioning
182
- overlayRef.current?.toggle(event);
183
- }
188
+ // Compute anchor position from the event (real or synthetic)
189
+ const pos = getAnchorPositionFromEvent(event);
190
+ setAnchorPosition(pos);
191
+ setIsOpen(true);
184
192
 
185
193
  // Use the passed actionToSelect or fall back to preSelectedAction prop
186
194
  const actionToAutoSelect = actionToSelect || preSelectedAction;
@@ -191,20 +199,15 @@ const FieldActionsOverlay = React.forwardRef<
191
199
  actionToAutoSelect.parameters &&
192
200
  actionToAutoSelect.parameters.length > 0
193
201
  ) {
194
- // Use longer timeout to ensure overlay is stable
202
+ // Small delay to ensure the popover is visible before rendering inputs
195
203
  setTimeout(() => {
196
204
  handleActionClick(actionToAutoSelect);
197
205
  }, 50);
198
- } else {
199
- console.log(
200
- "Not auto-selecting - actionToAutoSelect:",
201
- actionToAutoSelect,
202
- );
203
206
  }
204
207
  }
205
208
 
206
209
  function hide(): void {
207
- overlayRef.current?.hide();
210
+ setIsOpen(false);
208
211
  }
209
212
 
210
213
  React.useImperativeHandle(ref, () => ({
@@ -213,74 +216,93 @@ const FieldActionsOverlay = React.forwardRef<
213
216
  }));
214
217
 
215
218
  return (
216
- <OverlayPanel ref={overlayRef} className="p-1">
217
- {selectedParameterizedAction ? (
218
- <div className="min-w-64 p-2">
219
- <div className="mb-2">
220
- <div className="mb-2 flex items-center">
221
- {!hideBackButton && (
222
- <button
223
- className="mr-2 text-xs hover:text-gray-400"
224
- onClick={goBackToActionList}
225
- >
226
- <i className="pi pi-arrow-left" />
227
- </button>
228
- )}
229
- <span className="text-xs font-semibold">
230
- {selectedParameterizedAction.label}
231
- </span>
232
- </div>
233
- <div className="mb-3 text-xs text-gray-600">
234
- {selectedParameterizedAction.description}
235
- </div>
236
-
237
- {selectedParameterizedAction.parameters?.map((param, index) => (
238
- <div key={param.id} className="mb-3">
239
- <label className="mb-1 block text-xs font-medium">
240
- {param.label}
241
- {param.required && (
242
- <span className="ml-1 text-red-500">*</span>
243
- )}
244
- </label>
245
- {renderParameterInput(param, index === 0)}
219
+ <Popover open={isOpen} onOpenChange={setIsOpen}>
220
+ <PopoverAnchor asChild>
221
+ <div
222
+ style={{
223
+ position: "fixed",
224
+ left: anchorPosition.x,
225
+ top: anchorPosition.y,
226
+ width: 1,
227
+ height: 1,
228
+ pointerEvents: "none",
229
+ zIndex: -1,
230
+ }}
231
+ />
232
+ </PopoverAnchor>
233
+ <PopoverContent
234
+ className="w-auto p-1"
235
+ align="start"
236
+ side="bottom"
237
+ onMouseDown={(e) => e.stopPropagation()}
238
+ onClick={(e) => e.stopPropagation()}
239
+ >
240
+ {selectedParameterizedAction ? (
241
+ <div className="min-w-64 p-2">
242
+ <div className="mb-2">
243
+ <div className="mb-2 flex items-center">
244
+ {!hideBackButton && (
245
+ <Button
246
+ size="xs"
247
+ variant="ghost"
248
+ className="mr-2"
249
+ onClick={goBackToActionList}
250
+ aria-label="Back"
251
+ >
252
+ <ArrowLeft size={14} strokeWidth={1} />
253
+ </Button>
254
+ )}
255
+ <span className="text-xs font-semibold">
256
+ {selectedParameterizedAction.label}
257
+ </span>
246
258
  </div>
247
- ))}
259
+ <div className="mb-3 text-xs text-gray-600">
260
+ {selectedParameterizedAction.description}
261
+ </div>
262
+
263
+ {selectedParameterizedAction.parameters?.map((param, index) => (
264
+ <div key={param.id} className="mb-3">
265
+ <label className="mb-1 block text-xs font-medium">
266
+ {param.label}
267
+ {param.required && (
268
+ <span className="ml-1 text-red-500">*</span>
269
+ )}
270
+ </label>
271
+ {renderParameterInput(param, index === 0)}
272
+ </div>
273
+ ))}
248
274
 
249
- <div className="mt-1 text-xs text-gray-500">
250
- Ctrl+Enter to execute, Esc to cancel
275
+ <div className="mt-1 text-xs text-gray-500">
276
+ Ctrl+Enter to execute, Esc to cancel
277
+ </div>
278
+ </div>
279
+ <div className="flex gap-2">
280
+ <Button size="xs" onClick={executeParameterizedAction} disabled={!areRequiredParametersFilled()}>
281
+ Execute
282
+ </Button>
283
+ <Button size="xs" variant="outline" onClick={cancelParameterizedAction}>
284
+ Cancel
285
+ </Button>
251
286
  </div>
252
287
  </div>
253
- <div className="flex gap-2">
254
- <button
255
- className="rounded bg-blue-500 px-3 py-1 text-xs text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50"
256
- onClick={executeParameterizedAction}
257
- disabled={!areRequiredParametersFilled()}
258
- >
259
- Execute
260
- </button>
261
- <button
262
- className="rounded bg-gray-300 px-3 py-1 text-xs text-gray-700 hover:bg-gray-400"
263
- onClick={cancelParameterizedAction}
264
- >
265
- Cancel
266
- </button>
267
- </div>
268
- </div>
269
- ) : (
270
- <>
271
- {generatorButtons?.map((x) => (
272
- <button
273
- key={x.id}
274
- className="block cursor-pointer p-1 text-xs hover:text-gray-400"
275
- onClick={() => handleActionClick(x)}
276
- >
277
- {x.icon && <i className={x.icon + " mr-2 text-xs"} />}
278
- {x.label}
279
- </button>
280
- ))}
281
- </>
282
- )}
283
- </OverlayPanel>
288
+ ) : (
289
+ <>
290
+ {generatorButtons?.map((x) => (
291
+ <Button
292
+ key={x.id}
293
+ size="xs"
294
+ variant="ghost"
295
+ className="block w-full justify-start"
296
+ onClick={() => handleActionClick(x)}
297
+ >
298
+ {x.icon && <i className={x.icon + " mr-2 text-xs"} />}
299
+ {x.label}
300
+ </Button>
301
+ ))}
302
+ </>
303
+ )}
304
+ </PopoverContent>
305
+ </Popover>
284
306
  );
285
307
  },
286
308
  );
@@ -293,7 +293,10 @@ export default function FieldListField({
293
293
 
294
294
  {fieldLockedBySession &&
295
295
  fieldLockedBySession.sessionId !== editContext.sessionId && (
296
- <div className="bg-pink-400 p-1 text-xs text-white">
296
+ <div
297
+ className="rounded-sm px-1.5 py-0.5 text-xs text-white"
298
+ style={{ backgroundColor: fieldLockedBySession.color }}
299
+ >
297
300
  locked by {fieldLockedBySession.user.name}
298
301
  </div>
299
302
  )}
@@ -154,7 +154,7 @@ export function LinkEditorDialog({
154
154
  tabs={tabs}
155
155
  activeTab={activeTabIndex}
156
156
  setActiveTab={setActiveTabIndex}
157
- className="flex items-center justify-center border-b border-gray-200 pt-2 text-xs"
157
+ className="flex items-center justify-center border-b border-gray-200 pt-4 text-xs"
158
158
  tabClassName="text-xs"
159
159
  />
160
160
  )}