@alpaca-editor/core 1.0.4027 → 1.0.4030

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 (220) hide show
  1. package/dist/components/ActionButton.js +2 -2
  2. package/dist/components/ActionButton.js.map +1 -1
  3. package/dist/components/SimpleLanguageSelector.js +3 -1
  4. package/dist/components/SimpleLanguageSelector.js.map +1 -1
  5. package/dist/components/ui/button.d.ts +1 -1
  6. package/dist/config/config.js +1 -1
  7. package/dist/config/config.js.map +1 -1
  8. package/dist/config/types.d.ts +1 -1
  9. package/dist/editor/ContextMenu.js +0 -1
  10. package/dist/editor/ContextMenu.js.map +1 -1
  11. package/dist/editor/Editor.js +9 -3
  12. package/dist/editor/Editor.js.map +1 -1
  13. package/dist/editor/FieldListField.js +16 -24
  14. package/dist/editor/FieldListField.js.map +1 -1
  15. package/dist/editor/ImageEditButton.js +1 -1
  16. package/dist/editor/ImageEditButton.js.map +1 -1
  17. package/dist/editor/ImageEditor.js +1 -1
  18. package/dist/editor/ImageEditor.js.map +1 -1
  19. package/dist/editor/MainLayout.js +2 -2
  20. package/dist/editor/MainLayout.js.map +1 -1
  21. package/dist/editor/Terminal.js +1 -1
  22. package/dist/editor/Terminal.js.map +1 -1
  23. package/dist/editor/Titlebar.js +0 -1
  24. package/dist/editor/Titlebar.js.map +1 -1
  25. package/dist/editor/ai/AgentCostDisplay.d.ts +26 -0
  26. package/dist/editor/ai/AgentCostDisplay.js +65 -0
  27. package/dist/editor/ai/AgentCostDisplay.js.map +1 -0
  28. package/dist/editor/ai/Agents.js +59 -15
  29. package/dist/editor/ai/Agents.js.map +1 -1
  30. package/dist/editor/ai/AiPromptPopover.d.ts +7 -0
  31. package/dist/editor/ai/AiPromptPopover.js +111 -0
  32. package/dist/editor/ai/AiPromptPopover.js.map +1 -0
  33. package/dist/editor/ai/AiResponseMessage.d.ts +1 -0
  34. package/dist/editor/ai/AiResponseMessage.js +101 -23
  35. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  36. package/dist/editor/ai/AiTerminal.d.ts +15 -1
  37. package/dist/editor/ai/AiTerminal.js +379 -48
  38. package/dist/editor/ai/AiTerminal.js.map +1 -1
  39. package/dist/editor/ai/editorAiContext.d.ts +0 -1
  40. package/dist/editor/ai/editorAiContext.js +0 -2
  41. package/dist/editor/ai/editorAiContext.js.map +1 -1
  42. package/dist/editor/client/EditorClient.d.ts +3 -2
  43. package/dist/editor/client/EditorClient.js +326 -68
  44. package/dist/editor/client/EditorClient.js.map +1 -1
  45. package/dist/editor/client/editContext.d.ts +6 -4
  46. package/dist/editor/client/editContext.js.map +1 -1
  47. package/dist/editor/client/fieldModificationStore.d.ts +19 -0
  48. package/dist/editor/client/fieldModificationStore.js +125 -0
  49. package/dist/editor/client/fieldModificationStore.js.map +1 -0
  50. package/dist/editor/client/itemsRepository.d.ts +1 -1
  51. package/dist/editor/client/itemsRepository.js +38 -28
  52. package/dist/editor/client/itemsRepository.js.map +1 -1
  53. package/dist/editor/client/operations.d.ts +1 -0
  54. package/dist/editor/client/operations.js +39 -31
  55. package/dist/editor/client/operations.js.map +1 -1
  56. package/dist/editor/commands/componentCommands.js +5 -3
  57. package/dist/editor/commands/componentCommands.js.map +1 -1
  58. package/dist/editor/commands/itemCommands.js.map +1 -1
  59. package/dist/editor/component-designer/aiContext.js +0 -2
  60. package/dist/editor/component-designer/aiContext.js.map +1 -1
  61. package/dist/editor/field-types/DropLinkEditor.js +1 -1
  62. package/dist/editor/field-types/DropLinkEditor.js.map +1 -1
  63. package/dist/editor/field-types/MultiLineText.js +5 -7
  64. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  65. package/dist/editor/field-types/RichTextEditorComponent.js +5 -7
  66. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  67. package/dist/editor/field-types/SingleLineText.js +5 -7
  68. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  69. package/dist/editor/hooks/useEditorSettings.d.ts +17 -0
  70. package/dist/editor/hooks/useEditorSettings.js +61 -0
  71. package/dist/editor/hooks/useEditorSettings.js.map +1 -0
  72. package/dist/editor/menubar/ItemActionsMenu.js +2 -2
  73. package/dist/editor/menubar/ItemActionsMenu.js.map +1 -1
  74. package/dist/editor/menubar/PageSelector.js +1 -1
  75. package/dist/editor/menubar/PageSelector.js.map +1 -1
  76. package/dist/editor/menubar/toolbar-sections/EditControls.js +1 -1
  77. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  78. package/dist/editor/menubar/toolbar-sections/InsertControls.js +1 -1
  79. package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
  80. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +1 -1
  81. package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
  82. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
  83. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  84. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +4 -3
  85. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js.map +1 -1
  86. package/dist/editor/page-editor-chrome/FrameMenu.js +9 -1
  87. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  88. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +0 -1
  89. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  90. package/dist/editor/page-viewer/EditorForm.js +1 -1
  91. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  92. package/dist/editor/page-viewer/PageViewer.js +9 -8
  93. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  94. package/dist/editor/page-viewer/PageViewerFrame.js +7 -1
  95. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  96. package/dist/editor/page-viewer/pageViewContext.js +40 -6
  97. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  98. package/dist/editor/reviews/Comment.js +7 -6
  99. package/dist/editor/reviews/Comment.js.map +1 -1
  100. package/dist/editor/services/agentService.d.ts +84 -12
  101. package/dist/editor/services/agentService.js +256 -15
  102. package/dist/editor/services/agentService.js.map +1 -1
  103. package/dist/editor/services/aiService.d.ts +17 -3
  104. package/dist/editor/services/aiService.js +5 -3
  105. package/dist/editor/services/aiService.js.map +1 -1
  106. package/dist/editor/services/contextService.js +0 -1
  107. package/dist/editor/services/contextService.js.map +1 -1
  108. package/dist/editor/services/systemService.d.ts +2 -1
  109. package/dist/editor/services/systemService.js +3 -0
  110. package/dist/editor/services/systemService.js.map +1 -1
  111. package/dist/editor/sidebar/ComponentPalette.js +1 -1
  112. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  113. package/dist/editor/sidebar/EditHistory.js +2 -2
  114. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  115. package/dist/editor/sidebar/GraphQL.d.ts +1 -0
  116. package/dist/editor/sidebar/GraphQL.js +8 -2
  117. package/dist/editor/sidebar/GraphQL.js.map +1 -1
  118. package/dist/editor/sidebar/MainContentTree.js +1 -1
  119. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  120. package/dist/editor/sidebar/SEOInfo.js +1 -1
  121. package/dist/editor/sidebar/SEOInfo.js.map +1 -1
  122. package/dist/editor/sidebar/ViewSelector.d.ts +4 -1
  123. package/dist/editor/sidebar/ViewSelector.js +64 -48
  124. package/dist/editor/sidebar/ViewSelector.js.map +1 -1
  125. package/dist/editor/ui/PerfectTree.js +2 -11
  126. package/dist/editor/ui/PerfectTree.js.map +1 -1
  127. package/dist/editor/ui/SimpleIconButton.d.ts +2 -0
  128. package/dist/editor/ui/SimpleIconButton.js +8 -4
  129. package/dist/editor/ui/SimpleIconButton.js.map +1 -1
  130. package/dist/index.d.ts +2 -0
  131. package/dist/index.js +2 -0
  132. package/dist/index.js.map +1 -1
  133. package/dist/page-wizard/steps/CollectStep.js +1 -1
  134. package/dist/page-wizard/steps/CollectStep.js.map +1 -1
  135. package/dist/page-wizard/steps/StructureStep.js +1 -1
  136. package/dist/page-wizard/steps/StructureStep.js.map +1 -1
  137. package/dist/page-wizard/steps/TranslateStep.js +233 -18
  138. package/dist/page-wizard/steps/TranslateStep.js.map +1 -1
  139. package/dist/revision.d.ts +2 -2
  140. package/dist/revision.js +2 -2
  141. package/dist/splash-screen/RecentPages.js +1 -13
  142. package/dist/splash-screen/RecentPages.js.map +1 -1
  143. package/dist/splash-screen/SplashScreen.js +1 -1
  144. package/dist/splash-screen/SplashScreen.js.map +1 -1
  145. package/dist/styles.css +88 -3
  146. package/dist/types.d.ts +6 -0
  147. package/package.json +2 -2
  148. package/src/components/ActionButton.tsx +3 -2
  149. package/src/components/SimpleLanguageSelector.tsx +6 -1
  150. package/src/config/config.tsx +1 -1
  151. package/src/config/types.ts +1 -1
  152. package/src/editor/ContextMenu.tsx +0 -3
  153. package/src/editor/Editor.tsx +11 -3
  154. package/src/editor/FieldListField.tsx +22 -31
  155. package/src/editor/ImageEditButton.tsx +1 -0
  156. package/src/editor/ImageEditor.tsx +1 -0
  157. package/src/editor/MainLayout.tsx +2 -2
  158. package/src/editor/Terminal.tsx +1 -1
  159. package/src/editor/Titlebar.tsx +0 -2
  160. package/src/editor/ai/AgentCostDisplay.tsx +237 -0
  161. package/src/editor/ai/Agents.tsx +69 -20
  162. package/src/editor/ai/AiPromptPopover.tsx +209 -0
  163. package/src/editor/ai/AiResponseMessage.tsx +201 -60
  164. package/src/editor/ai/AiTerminal.tsx +502 -71
  165. package/src/editor/ai/editorAiContext.ts +0 -3
  166. package/src/editor/client/EditorClient.tsx +409 -117
  167. package/src/editor/client/editContext.ts +7 -5
  168. package/src/editor/client/fieldModificationStore.ts +196 -0
  169. package/src/editor/client/itemsRepository.ts +41 -31
  170. package/src/editor/client/operations.ts +95 -76
  171. package/src/editor/commands/componentCommands.tsx +9 -3
  172. package/src/editor/commands/itemCommands.tsx +0 -1
  173. package/src/editor/component-designer/aiContext.ts +0 -2
  174. package/src/editor/field-types/DropLinkEditor.tsx +1 -1
  175. package/src/editor/field-types/MultiLineText.tsx +9 -9
  176. package/src/editor/field-types/RichTextEditorComponent.tsx +8 -8
  177. package/src/editor/field-types/SingleLineText.tsx +9 -9
  178. package/src/editor/hooks/useEditorSettings.ts +68 -0
  179. package/src/editor/menubar/ItemActionsMenu.tsx +3 -2
  180. package/src/editor/menubar/PageSelector.tsx +1 -1
  181. package/src/editor/menubar/toolbar-sections/EditControls.tsx +1 -0
  182. package/src/editor/menubar/toolbar-sections/InsertControls.tsx +1 -0
  183. package/src/editor/menubar/toolbar-sections/UtilityControls.tsx +2 -0
  184. package/src/editor/menubar/toolbar-sections/ViewportControls.tsx +2 -0
  185. package/src/editor/page-editor-chrome/FieldEditedIndicators.tsx +4 -3
  186. package/src/editor/page-editor-chrome/FrameMenu.tsx +10 -1
  187. package/src/editor/page-editor-chrome/useInlineAICompletion.tsx +0 -1
  188. package/src/editor/page-viewer/EditorForm.tsx +1 -0
  189. package/src/editor/page-viewer/PageViewer.tsx +9 -8
  190. package/src/editor/page-viewer/PageViewerFrame.tsx +7 -1
  191. package/src/editor/page-viewer/pageViewContext.ts +40 -5
  192. package/src/editor/reviews/Comment.tsx +7 -7
  193. package/src/editor/services/agentService.ts +405 -31
  194. package/src/editor/services/aiService.ts +22 -5
  195. package/src/editor/services/contextService.ts +0 -1
  196. package/src/editor/services/systemService.ts +7 -1
  197. package/src/editor/sidebar/ComponentPalette.tsx +4 -1
  198. package/src/editor/sidebar/EditHistory.tsx +2 -0
  199. package/src/editor/sidebar/GraphQL.tsx +19 -7
  200. package/src/editor/sidebar/MainContentTree.tsx +1 -1
  201. package/src/editor/sidebar/SEOInfo.tsx +1 -1
  202. package/src/editor/sidebar/ViewSelector.tsx +80 -64
  203. package/src/editor/ui/PerfectTree.tsx +2 -18
  204. package/src/editor/ui/SimpleIconButton.tsx +56 -38
  205. package/src/index.ts +2 -0
  206. package/src/page-wizard/steps/CollectStep.tsx +0 -2
  207. package/src/page-wizard/steps/StructureStep.tsx +3 -0
  208. package/src/page-wizard/steps/TranslateStep.tsx +473 -62
  209. package/src/revision.ts +2 -2
  210. package/src/splash-screen/RecentPages.tsx +0 -14
  211. package/src/splash-screen/SplashScreen.tsx +3 -2
  212. package/src/types.ts +7 -0
  213. package/dist/editor/ai/AiPopup.d.ts +0 -10
  214. package/dist/editor/ai/AiPopup.js +0 -23
  215. package/dist/editor/ai/AiPopup.js.map +0 -1
  216. package/dist/editor/ai/AiToolCall.d.ts +0 -5
  217. package/dist/editor/ai/AiToolCall.js +0 -28
  218. package/dist/editor/ai/AiToolCall.js.map +0 -1
  219. package/src/editor/ai/AiPopup.tsx +0 -59
  220. package/src/editor/ai/AiToolCall.tsx +0 -71
@@ -7,7 +7,6 @@ export function RecentPages() {
7
7
  const editContext = useEditContext();
8
8
  const [history, setHistory] = useState();
9
9
  const [isLoading, setIsLoading] = useState(false);
10
- const [selectedPage, setSelectedPage] = useState(null);
11
10
  const recentPages = editContext?.browseHistory || [];
12
11
  useEffect(() => {
13
12
  const fetchItems = async () => {
@@ -17,9 +16,7 @@ export function RecentPages() {
17
16
  }
18
17
  setIsLoading(true);
19
18
  try {
20
- console.log("recentPages", recentPages);
21
19
  const pages = await editContext?.itemsRepository.getItems(recentPages);
22
- console.log("pages", pages);
23
20
  setHistory(pages);
24
21
  }
25
22
  finally {
@@ -28,9 +25,6 @@ export function RecentPages() {
28
25
  };
29
26
  fetchItems();
30
27
  }, [editContext?.itemsRepository, recentPages]);
31
- const handlePageSelect = (page) => {
32
- setSelectedPage(page);
33
- };
34
28
  const handlePageLoad = (item) => {
35
29
  if (editContext) {
36
30
  editContext
@@ -47,12 +41,6 @@ export function RecentPages() {
47
41
  });
48
42
  }
49
43
  };
50
- const formatDate = (date) => {
51
- if (!date)
52
- return "—";
53
- const d = new Date(date);
54
- return d.toLocaleDateString();
55
- };
56
- return (_jsx(Card, { icon: _jsx("i", { className: "pi pi-history text-sm" }), title: "Recent Pages/Items", description: "Quick access to your recently viewed pages", className: "flex h-full flex-col", children: _jsx("div", { className: "relative flex min-h-0 flex-1 flex-col", children: _jsxs("div", { className: "absolute inset-0 overflow-auto", children: [_jsx("table", { className: "w-full text-xs", children: _jsx("tbody", { children: history?.map((page, index) => (_jsxs("tr", { onMouseOver: () => handlePageSelect(page), onClick: () => handlePageLoad(page), className: "cursor-pointer border-b border-gray-100 hover:bg-gray-50", children: [_jsx("td", { className: "py-3", children: _jsx("div", { className: "flex items-center gap-2", children: _jsxs("div", { className: "min-w-0 flex-1 pl-1", children: [_jsx("div", { className: "font-medium text-gray-900", children: page.name }), _jsx("div", { className: "text-xs break-all text-gray-500", children: page.path })] }) }) }), _jsx("td", { className: "hidden p-3 text-gray-700 md:table-cell", children: _jsx("div", { className: "truncate", children: page.templateName || "—" }) }), _jsx("td", { className: "p-3", children: _jsx("span", { className: "inline-flex items-center truncate rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800", children: page.workflowState || "Draft" }) }), _jsx("td", { className: "hidden p-3 text-gray-700 md:table-cell", children: page.versions || 0 })] }, page.id || index))) }) }), isLoading && (_jsxs("div", { className: "flex h-full flex-col items-center justify-center p-6 text-center", children: [_jsx("i", { className: "pi pi-spin pi-spinner text-lg text-gray-400" }), _jsx("div", { className: "mt-2 text-xs text-gray-500", children: "Loading recent pages..." })] })), !isLoading && (!history || history.length === 0) && (_jsx("div", { className: "p-6 text-center text-xs text-gray-500", children: "No recent pages found" }))] }) }) }));
44
+ return (_jsx(Card, { icon: _jsx("i", { className: "pi pi-history text-sm" }), title: "Recent Pages/Items", description: "Quick access to your recently viewed pages", className: "flex h-full flex-col", children: _jsx("div", { className: "relative flex min-h-0 flex-1 flex-col", children: _jsxs("div", { className: "absolute inset-0 overflow-auto", children: [_jsx("table", { className: "w-full text-xs", children: _jsx("tbody", { children: history?.map((page, index) => (_jsxs("tr", { onClick: () => handlePageLoad(page), className: "cursor-pointer border-b border-gray-100 hover:bg-gray-50", children: [_jsx("td", { className: "py-3", children: _jsx("div", { className: "flex items-center gap-2", children: _jsxs("div", { className: "min-w-0 flex-1 pl-1", children: [_jsx("div", { className: "font-medium text-gray-900", children: page.name }), _jsx("div", { className: "text-xs break-all text-gray-500", children: page.path })] }) }) }), _jsx("td", { className: "hidden p-3 text-gray-700 md:table-cell", children: _jsx("div", { className: "truncate", children: page.templateName || "—" }) }), _jsx("td", { className: "p-3", children: _jsx("span", { className: "inline-flex items-center truncate rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800", children: page.workflowState || "Draft" }) }), _jsx("td", { className: "hidden p-3 text-gray-700 md:table-cell", children: page.versions || 0 })] }, page.id || index))) }) }), isLoading && (_jsxs("div", { className: "flex h-full flex-col items-center justify-center p-6 text-center", children: [_jsx("i", { className: "pi pi-spin pi-spinner text-lg text-gray-400" }), _jsx("div", { className: "mt-2 text-xs text-gray-500", children: "Loading recent pages..." })] })), !isLoading && (!history || history.length === 0) && (_jsx("div", { className: "p-6 text-center text-xs text-gray-500", children: "No recent pages found" }))] }) }) }));
57
45
  }
58
46
  //# sourceMappingURL=RecentPages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecentPages.js","sourceRoot":"","sources":["../../src/splash-screen/RecentPages.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecentPages.js","sourceRoot":"","sources":["../../src/splash-screen/RecentPages.tsx"],"names":[],"mappings":"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"}
@@ -68,7 +68,7 @@ export function SplashScreen() {
68
68
  }, className: "w-1/3", children: "Try AI Editor" })] }) })] }), _jsx("div", { className: "flex-1", children: _jsx(RecentPages, {}) })] })] }), _jsx("div", { className: "bg-wizard absolute inset-0" })] }) }));
69
69
  }
70
70
  else {
71
- return (_jsxs("div", { className: "flex h-full w-full gap-2 bg-gray-100 md:items-center md:justify-center", children: [_jsxs("div", { className: "z-10 flex flex-1 flex-col items-stretch gap-4 p-4 md:min-h-[40vh] md:max-w-screen-xl md:flex-row", children: [_jsx(Card, { title: "Welcome to the Editor Without A Name", description: "The easiest way to create and manage your content", icon: _jsx(Logo, {}), className: "flex-1", children: _jsxs("div", { className: "flex flex-col gap-4 text-sm text-gray-500", children: ["Ai Workbench is an editor for your favorite content management system. It allows you to create and manage your content in a simple and intuitive way.", _jsxs("div", { className: "flex flex-col gap-4", children: [_jsx(ActionButton, { id: "create-new-page-button", onClick: () => editContext?.switchView("new-page"), children: "Create new page" }), _jsx(ActionButton, { onClick: () => editContext?.switchView("open-page"), children: "Open existing page" }), _jsxs(ActionButton, { onClick: () => editContext?.startTour(), children: ["Take tour ", _jsx(MagicEditIcon, {})] }), _jsx(ActionButton, { onClick: () => {
71
+ return (_jsxs("div", { className: "flex h-full w-full gap-2 bg-gray-100 md:items-center md:justify-center", children: [_jsxs("div", { className: "z-10 flex flex-1 flex-col items-stretch gap-4 p-4 md:min-h-[40vh] md:max-w-screen-xl md:flex-row", children: [_jsx(Card, { title: "Welcome to the Editor Without A Name", description: "The easiest way to create and manage your content", icon: _jsx(Logo, {}), className: "flex-1", children: _jsxs("div", { className: "flex flex-col gap-4 text-sm text-gray-500", children: ["Ai Workbench is an editor for your favorite content management system. It allows you to create and manage your content in a simple and intuitive way.", _jsxs("div", { className: "flex flex-col gap-4", children: [_jsx(ActionButton, { "data-testid": "create-new-page-button", onClick: () => editContext?.switchView("new-page"), children: "Create new page" }), _jsx(ActionButton, { onClick: () => editContext?.switchView("open-page"), children: "Open existing page" }), _jsxs(ActionButton, { onClick: () => editContext?.startTour(), children: ["Take tour ", _jsx(MagicEditIcon, {})] }), _jsx(ActionButton, { onClick: () => {
72
72
  window.open("/sitecore/shell/sitecore/client/Applications/Launchpad", "_blank");
73
73
  }, children: "Open Sitecore Launchpad" }), _jsx(ActionButton, { className: "mt-6 md:mt-18", onClick: () => {
74
74
  editContext?.switchView("page-editor");
@@ -1 +1 @@
1
- {"version":3,"file":"SplashScreen.js","sourceRoot":"","sources":["../../src/splash-screen/SplashScreen.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SplashScreen.js","sourceRoot":"","sources":["../../src/splash-screen/SplashScreen.tsx"],"names":[],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -13,10 +13,13 @@
13
13
  --color-red-600: oklch(57.7% 0.245 27.325);
14
14
  --color-red-700: oklch(50.5% 0.213 27.518);
15
15
  --color-red-800: oklch(44.4% 0.177 26.899);
16
+ --color-orange-50: oklch(98% 0.016 73.684);
16
17
  --color-orange-100: oklch(95.4% 0.038 75.164);
18
+ --color-orange-200: oklch(90.1% 0.076 70.697);
17
19
  --color-orange-400: oklch(75% 0.183 55.934);
18
20
  --color-orange-500: oklch(70.5% 0.213 47.604);
19
21
  --color-orange-600: oklch(64.6% 0.222 41.116);
22
+ --color-orange-700: oklch(55.3% 0.195 38.402);
20
23
  --color-orange-800: oklch(47% 0.157 37.304);
21
24
  --color-yellow-50: oklch(98.7% 0.026 102.212);
22
25
  --color-yellow-100: oklch(97.3% 0.071 103.193);
@@ -671,6 +674,9 @@
671
674
  .h-\[160px\] {
672
675
  height: 160px;
673
676
  }
677
+ .h-\[400px\] {
678
+ height: 400px;
679
+ }
674
680
  .h-\[600px\] {
675
681
  height: 600px;
676
682
  }
@@ -728,9 +734,6 @@
728
734
  .max-h-\[400px\] {
729
735
  max-height: 400px;
730
736
  }
731
- .max-h-\[500px\] {
732
- max-height: 500px;
733
- }
734
737
  .max-h-\[600px\] {
735
738
  max-height: 600px;
736
739
  }
@@ -1513,6 +1516,9 @@
1513
1516
  .border-neutral-200 {
1514
1517
  border-color: var(--color-neutral-200);
1515
1518
  }
1519
+ .border-orange-200 {
1520
+ border-color: var(--color-orange-200);
1521
+ }
1516
1522
  .border-orange-400 {
1517
1523
  border-color: var(--color-orange-400);
1518
1524
  }
@@ -1669,6 +1675,12 @@
1669
1675
  .bg-gray-400 {
1670
1676
  background-color: var(--color-gray-400);
1671
1677
  }
1678
+ .bg-gray-400\/40 {
1679
+ background-color: color-mix(in srgb, oklch(70.7% 0.022 261.325) 40%, transparent);
1680
+ @supports (color: color-mix(in lab, red, red)) {
1681
+ background-color: color-mix(in oklab, var(--color-gray-400) 40%, transparent);
1682
+ }
1683
+ }
1672
1684
  .bg-gray-500 {
1673
1685
  background-color: var(--color-gray-500);
1674
1686
  }
@@ -1699,12 +1711,21 @@
1699
1711
  .bg-neutral-100 {
1700
1712
  background-color: var(--color-neutral-100);
1701
1713
  }
1714
+ .bg-orange-50 {
1715
+ background-color: var(--color-orange-50);
1716
+ }
1702
1717
  .bg-orange-100 {
1703
1718
  background-color: var(--color-orange-100);
1704
1719
  }
1705
1720
  .bg-orange-400 {
1706
1721
  background-color: var(--color-orange-400);
1707
1722
  }
1723
+ .bg-orange-400\/40 {
1724
+ background-color: color-mix(in srgb, oklch(75% 0.183 55.934) 40%, transparent);
1725
+ @supports (color: color-mix(in lab, red, red)) {
1726
+ background-color: color-mix(in oklab, var(--color-orange-400) 40%, transparent);
1727
+ }
1728
+ }
1708
1729
  .bg-orange-500 {
1709
1730
  background-color: var(--color-orange-500);
1710
1731
  }
@@ -1723,6 +1744,12 @@
1723
1744
  .bg-purple-400 {
1724
1745
  background-color: var(--color-purple-400);
1725
1746
  }
1747
+ .bg-purple-400\/40 {
1748
+ background-color: color-mix(in srgb, oklch(71.4% 0.203 305.504) 40%, transparent);
1749
+ @supports (color: color-mix(in lab, red, red)) {
1750
+ background-color: color-mix(in oklab, var(--color-purple-400) 40%, transparent);
1751
+ }
1752
+ }
1726
1753
  .bg-purple-500 {
1727
1754
  background-color: var(--color-purple-500);
1728
1755
  }
@@ -1762,6 +1789,12 @@
1762
1789
  .bg-teal-400 {
1763
1790
  background-color: var(--color-teal-400);
1764
1791
  }
1792
+ .bg-teal-400\/40 {
1793
+ background-color: color-mix(in srgb, oklch(77.7% 0.152 181.912) 40%, transparent);
1794
+ @supports (color: color-mix(in lab, red, red)) {
1795
+ background-color: color-mix(in oklab, var(--color-teal-400) 40%, transparent);
1796
+ }
1797
+ }
1765
1798
  .bg-theme-secondary {
1766
1799
  background-color: var(--color-theme-secondary);
1767
1800
  }
@@ -2208,6 +2241,9 @@
2208
2241
  .text-orange-600 {
2209
2242
  color: var(--color-orange-600);
2210
2243
  }
2244
+ .text-orange-700 {
2245
+ color: var(--color-orange-700);
2246
+ }
2211
2247
  .text-orange-800 {
2212
2248
  color: var(--color-orange-800);
2213
2249
  }
@@ -2675,6 +2711,13 @@
2675
2711
  }
2676
2712
  }
2677
2713
  }
2714
+ .hover\:bg-blue-50 {
2715
+ &:hover {
2716
+ @media (hover: hover) {
2717
+ background-color: var(--color-blue-50);
2718
+ }
2719
+ }
2720
+ }
2678
2721
  .hover\:bg-blue-200 {
2679
2722
  &:hover {
2680
2723
  @media (hover: hover) {
@@ -2790,6 +2833,27 @@
2790
2833
  }
2791
2834
  }
2792
2835
  }
2836
+ .hover\:bg-orange-400 {
2837
+ &:hover {
2838
+ @media (hover: hover) {
2839
+ background-color: var(--color-orange-400);
2840
+ }
2841
+ }
2842
+ }
2843
+ .hover\:bg-purple-400 {
2844
+ &:hover {
2845
+ @media (hover: hover) {
2846
+ background-color: var(--color-purple-400);
2847
+ }
2848
+ }
2849
+ }
2850
+ .hover\:bg-red-400 {
2851
+ &:hover {
2852
+ @media (hover: hover) {
2853
+ background-color: var(--color-red-400);
2854
+ }
2855
+ }
2856
+ }
2793
2857
  .hover\:bg-red-600 {
2794
2858
  &:hover {
2795
2859
  @media (hover: hover) {
@@ -2807,6 +2871,13 @@
2807
2871
  }
2808
2872
  }
2809
2873
  }
2874
+ .hover\:bg-teal-400 {
2875
+ &:hover {
2876
+ @media (hover: hover) {
2877
+ background-color: var(--color-teal-400);
2878
+ }
2879
+ }
2880
+ }
2810
2881
  .hover\:bg-theme-secondary\/80 {
2811
2882
  &:hover {
2812
2883
  @media (hover: hover) {
@@ -2978,6 +3049,11 @@
2978
3049
  border-color: var(--color-blue-500);
2979
3050
  }
2980
3051
  }
3052
+ .focus\:border-transparent {
3053
+ &:focus {
3054
+ border-color: transparent;
3055
+ }
3056
+ }
2981
3057
  .focus\:bg-accent {
2982
3058
  &:focus {
2983
3059
  background-color: var(--accent);
@@ -3102,6 +3178,15 @@
3102
3178
  opacity: 50%;
3103
3179
  }
3104
3180
  }
3181
+ .disabled\:hover\:bg-transparent {
3182
+ &:disabled {
3183
+ &:hover {
3184
+ @media (hover: hover) {
3185
+ background-color: transparent;
3186
+ }
3187
+ }
3188
+ }
3189
+ }
3105
3190
  .has-focus\:border-ring {
3106
3191
  &:has(*:focus) {
3107
3192
  border-color: var(--ring);
package/dist/types.d.ts CHANGED
@@ -285,6 +285,12 @@ export type SystemStatusMessage = {
285
285
  export type SystemStatus = {
286
286
  messages: SystemStatusMessage[];
287
287
  };
288
+ export type EditorSettings = {
289
+ itemNameValidation?: string;
290
+ invalidItemNameChars?: string;
291
+ maxItemNameLength?: number;
292
+ currency?: string;
293
+ };
288
294
  export interface SuggestedEdit {
289
295
  id: string;
290
296
  mainItemId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alpaca-editor/core",
3
- "version": "1.0.4027",
3
+ "version": "1.0.4030",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -41,7 +41,7 @@
41
41
  "@types/diff": "^7.0.2",
42
42
  "@types/lodash": "^4.17.16",
43
43
  "@uiw/react-md-editor": "^4.0.5",
44
- "@uiw/react-textarea-code-editor": "^1.5.24",
44
+ "@uiw/react-textarea-code-editor": "^3.1.1",
45
45
  "allotment": "^1.20.3",
46
46
  "axios": "^1.6.7",
47
47
  "class-variance-authority": "^0.7.1",
@@ -27,9 +27,9 @@ export const ActionButton: React.FC<ActionButtonProps> = ({
27
27
  loadingText = "Loading...",
28
28
  children,
29
29
  type = "button",
30
-
31
30
  className = "",
32
31
  variant = "default",
32
+ ...props
33
33
  }) => {
34
34
  return (
35
35
  <Button
@@ -39,7 +39,8 @@ export const ActionButton: React.FC<ActionButtonProps> = ({
39
39
  disabled={disabled || isLoading}
40
40
  className={className}
41
41
  variant={variant}
42
- size="sm"
42
+ size="sm"
43
+ {...props}
43
44
  >
44
45
  {isLoading ? (
45
46
  <div className="flex items-center justify-center gap-2">
@@ -90,6 +90,11 @@ export function SimpleLanguageSelector({
90
90
  );
91
91
  }
92
92
 
93
+ // Sort languages alphabetically by name
94
+ const sortedLanguages = [...languages].sort((a, b) =>
95
+ a.name.localeCompare(b.name),
96
+ );
97
+
93
98
  return (
94
99
  <select
95
100
  value={selectedLanguage || ""}
@@ -98,7 +103,7 @@ export function SimpleLanguageSelector({
98
103
  className={`rounded-md border border-gray-300 p-2 focus:border-blue-500 focus:ring-2 focus:ring-blue-500 focus:outline-none ${disabled ? "cursor-not-allowed bg-gray-100" : "bg-white"} ${className}`}
99
104
  >
100
105
  <option value="">Select a language</option>
101
- {languages.map((language) => (
106
+ {sortedLanguages.map((language) => (
102
107
  <option key={language.languageCode} value={language.languageCode}>
103
108
  {language.name} ({language.versions})
104
109
  </option>
@@ -223,7 +223,7 @@ export const getConfiguration = (): EditorConfiguration => {
223
223
  events: {},
224
224
  services: {
225
225
  aiService: {
226
- promptUrl: "/alpaca/editor/ai/prompt",
226
+ endpoint: "/alpaca/editor/ai",
227
227
  },
228
228
  },
229
229
  fieldTypes: {
@@ -136,7 +136,7 @@ export type EditorConfiguration = {
136
136
  };
137
137
  services: {
138
138
  aiService: {
139
- promptUrl: string;
139
+ endpoint: string;
140
140
  };
141
141
  };
142
142
 
@@ -124,14 +124,11 @@ export async function showComponentContextMenu(
124
124
  });
125
125
  }
126
126
 
127
-
128
127
  // Call field type context menu factory when a single component is selected and field is available
129
128
  if (!editContext.readonly && field) {
130
129
  const fieldFromRepository =
131
130
  await editContext.itemsRepository.getField(field);
132
131
 
133
- console.log("fieldFromRepository", fieldFromRepository);
134
-
135
132
  if (fieldFromRepository) {
136
133
  const fieldTypeConfig =
137
134
  editContext.configuration.fieldTypes[fieldFromRepository.type];
@@ -5,10 +5,10 @@ import { EditorClient } from "./client/EditorClient";
5
5
  import { ItemDescriptor } from "./pageModel";
6
6
  import { EditorConfiguration } from "../config/types";
7
7
  import { useEffect, useState } from "react";
8
- import { SystemStatus, UserInfo, UserPreferences } from "../types";
8
+ import { SystemStatus, UserInfo, UserPreferences, EditorSettings } from "../types";
9
9
 
10
10
  import { getUserInfo } from "./services/editService";
11
- import { getSystemStatus, saveUserPreferences } from "./services/systemService";
11
+ import { getSystemStatus, getEditorSettings, saveUserPreferences } from "./services/systemService";
12
12
  import uuid from "react-uuid";
13
13
  import { getConfiguration } from "../config/config";
14
14
 
@@ -29,6 +29,7 @@ export function Editor({
29
29
  const [config, setConfig] = useState<EditorConfiguration>();
30
30
  const [userInfo, setUserInfo] = useState<UserInfo>();
31
31
  const [systemStatus, setSystemStatus] = useState<SystemStatus>();
32
+ const [editorSettings, setEditorSettings] = useState<EditorSettings>();
32
33
 
33
34
  const sessionId =
34
35
  typeof window !== "undefined"
@@ -36,7 +37,7 @@ export function Editor({
36
37
  : uuid();
37
38
 
38
39
  useEffect(() => {
39
- // Get user info and system status
40
+ // Get user info, system status, and editor settings
40
41
  getUserInfo().then((userInfo) => {
41
42
  if (!userInfo) {
42
43
  window.location.href = "/sitecore/login";
@@ -50,6 +51,12 @@ export function Editor({
50
51
  setSystemStatus(status.data);
51
52
  }
52
53
  });
54
+
55
+ getEditorSettings().then((settings) => {
56
+ if (settings.data) {
57
+ setEditorSettings(settings.data);
58
+ }
59
+ });
53
60
  }, []);
54
61
 
55
62
  useEffect(() => {
@@ -88,6 +95,7 @@ export function Editor({
88
95
  sessionId={sessionId}
89
96
  userInfo={userInfo}
90
97
  userPreferences={userInfo.preferences}
98
+ editorSettings={editorSettings}
91
99
  setUserPreferences={(preferences: Partial<UserPreferences>) => {
92
100
  const newPreferences = { ...userInfo.preferences, ...preferences };
93
101
  saveUserPreferences(newPreferences);
@@ -1,9 +1,10 @@
1
1
  import { Tooltip } from "primereact/tooltip";
2
2
 
3
3
  import { useEditContext, useModifiedFieldsContext } from "./client/editContext";
4
+ import { useFieldModification } from "./client/fieldModificationStore";
4
5
  import { EditorConfiguration } from "../config/types";
5
6
 
6
- import { useEffect, useRef, useState } from "react";
7
+ import { useEffect, useRef, useState, useMemo } from "react";
7
8
 
8
9
  import { FieldHistoryItem, SingleValidatorResult } from "../types";
9
10
 
@@ -21,8 +22,7 @@ import { FieldHistory } from "./FieldHistory";
21
22
  import {
22
23
  History,
23
24
  MessageCircle,
24
- WandSparkles,
25
- MoreVertical,
25
+ WandSparkles,
26
26
  ExternalLink,
27
27
  } from "lucide-react";
28
28
  import { Checkbox } from "../components/ui/checkbox";
@@ -55,18 +55,22 @@ export default function FieldListField({
55
55
  const editContext = useEditContext();
56
56
  if (!editContext) return;
57
57
 
58
- const modifiedFieldsContext = useModifiedFieldsContext();
59
-
60
58
  const fieldItem = field.descriptor.item;
61
59
 
60
+ // Field-specific subscription - only rerenders when THIS field changes
61
+ const { isModified, isSaved } = useFieldModification(
62
+ field.id,
63
+ fieldItem.id,
64
+ fieldItem.language,
65
+ fieldItem.version
66
+ );
67
+
62
68
  const [showRawValue, setShowRawValue] = useState(false);
63
69
  const [showFieldJson, setShowFieldJson] = useState(false);
64
70
  const [fieldMenuOpen, setFieldMenuOpen] = useState(false);
65
71
  const [fieldHistoryOpen, setFieldHistoryOpen] = useState(false);
66
72
  const generatorsOverlay = useRef<FieldActionsOverlayRef>(null);
67
73
  const [generatorButtons, setButtons] = useState<FieldButton[]>();
68
- const [isModified, setIsModified] = useState(false);
69
- const [isSaved, setIsSaved] = useState(false);
70
74
  const [historyEntry, setHistoryEntry] = useState<FieldHistoryItem>();
71
75
 
72
76
  async function handleActionClick(action: FieldButton): Promise<void> {
@@ -81,7 +85,6 @@ export default function FieldListField({
81
85
  }
82
86
 
83
87
  useEffect(() => {
84
- updateState();
85
88
  setShowRawValue(false);
86
89
  }, [
87
90
  field.descriptor.item.id,
@@ -90,26 +93,6 @@ export default function FieldListField({
90
93
  field.descriptor.fieldId,
91
94
  ]);
92
95
 
93
- useEffect(updateState, [modifiedFieldsContext?.modifiedFields]);
94
-
95
- function updateState() {
96
- const modifiedField = modifiedFieldsContext?.modifiedFields.find(
97
- (x) =>
98
- x.fieldId === field.id &&
99
- x.item.id === fieldItem.id &&
100
- x.item.language === fieldItem.language &&
101
- x.item.version === fieldItem.version,
102
- );
103
-
104
- if (modifiedField) {
105
- setIsModified(true);
106
- setIsSaved(!modifiedField.isDirty);
107
- } else {
108
- setIsModified(false);
109
- setIsSaved(false);
110
- }
111
- }
112
-
113
96
  const fieldLockedBySession = getSessionWithFieldLock(
114
97
  field.descriptor,
115
98
  editContext,
@@ -174,7 +157,7 @@ export default function FieldListField({
174
157
  }
175
158
  }, [isFocusedField]);
176
159
 
177
- const renderGeneratorButtons = () => {
160
+ const renderGeneratorButtons = useMemo(() => {
178
161
  if (generatorButtons?.length || 0 > 0)
179
162
  return (
180
163
  <>
@@ -205,7 +188,15 @@ export default function FieldListField({
205
188
  </>
206
189
  );
207
190
  return null;
208
- };
191
+ }, [
192
+ generatorButtons,
193
+ executingAction,
194
+ handleActionClick,
195
+ handleParameterizedActionExecute,
196
+ editContext.currentOverlay,
197
+ editContext.setCurrentOverlay,
198
+ field.id,
199
+ ]);
209
200
 
210
201
  const config = editContext.configuration.fieldTypes[field.type];
211
202
 
@@ -360,7 +351,7 @@ export default function FieldListField({
360
351
  }}
361
352
  label="Add Comment"
362
353
  />
363
- {!readonly && renderGeneratorButtons()}
354
+ {!readonly && renderGeneratorButtons}
364
355
  <Popover
365
356
  open={fieldHistoryOpen}
366
357
  onOpenChange={setFieldHistoryOpen}
@@ -63,6 +63,7 @@ export function ImageEditButton({
63
63
  {actions.map((action) => (
64
64
  <DropdownMenuItem
65
65
  key={action.id}
66
+ data-testid={`menu-item-${action.id}`}
66
67
  onClick={(e) => {
67
68
  action.onClick(e);
68
69
  setShowMenu(false);
@@ -97,6 +97,7 @@ export function ImageEditor({
97
97
  actions={menuActions}
98
98
  compact={false}
99
99
  buttonText="Edit"
100
+ testId="select-media-button"
100
101
  />
101
102
  </div>
102
103
  );
@@ -26,8 +26,8 @@ export default function MainLayout(props: MainLayoutProps) {
26
26
  return <MobileLayout {...props} />;
27
27
  }
28
28
 
29
- // Keep all left sidebars mounted to preserve their state when switching views
30
- const viewsWithLeftSidebar = editContext.configuration.editor.views.filter(
29
+ // Only render visible views that have left sidebars to improve performance
30
+ const viewsWithLeftSidebar = editContext.visibleViews.filter(
31
31
  (v) => v.leftSidebar,
32
32
  );
33
33
 
@@ -148,7 +148,7 @@ export const Terminal = forwardRef<
148
148
  }, [messages, response]);
149
149
 
150
150
  const responseBoxClasses =
151
- "text-xs self-stretch text-gray-700 p-2 rounded border border-theme-secondary bg-theme-secondary-light";
151
+ "text-xs self-stretch text-gray-700 p-2 rounded border border-theme-secondary bg-theme-secondary-light min-h-8 flex flex-col justify-end";
152
152
  const getClasses = (m: Message) => {
153
153
  if (m.type === "response") return responseBoxClasses;
154
154
  return "text-xs text-gray-700 bg-indigo-100 border border-indigo-300 p-2 rounded prompt";
@@ -15,8 +15,6 @@ export function Titlebar() {
15
15
 
16
16
  if (!editContext?.view) return null;
17
17
 
18
- const isMobile = editContext.isMobile;
19
-
20
18
  // Get custom title from view's headerTitle function, or fall back to "workbench"
21
19
  const title = editContext.view.headerTitle
22
20
  ? editContext.view.headerTitle(editContext)