@alpaca-editor/core 1.0.3941 → 1.0.3943

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 (308) hide show
  1. package/.prettierrc +3 -0
  2. package/build.css +3 -0
  3. package/components.json +21 -0
  4. package/dist/editor/ContentTree.d.ts +2 -1
  5. package/dist/editor/ContentTree.js +23 -21
  6. package/dist/editor/ContentTree.js.map +1 -1
  7. package/dist/editor/FieldActionsOverlay.js +0 -2
  8. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  9. package/dist/editor/ScrollingContentTree.js +1 -1
  10. package/dist/editor/ScrollingContentTree.js.map +1 -1
  11. package/dist/editor/Titlebar.js +1 -1
  12. package/dist/editor/Titlebar.js.map +1 -1
  13. package/dist/editor/ai/GhostWriter.js +24 -3
  14. package/dist/editor/ai/GhostWriter.js.map +1 -1
  15. package/dist/editor/client/EditorClient.js +7 -7
  16. package/dist/editor/client/EditorClient.js.map +1 -1
  17. package/dist/editor/field-types/InternalLinkFieldEditor.js +60 -10
  18. package/dist/editor/field-types/InternalLinkFieldEditor.js.map +1 -1
  19. package/dist/editor/media-selector/MediaFolderBrowser.js +48 -1
  20. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  21. package/dist/editor/menubar/PageSelector.js +116 -65
  22. package/dist/editor/menubar/PageSelector.js.map +1 -1
  23. package/dist/editor/page-viewer/EditorForm.js +5 -2
  24. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  25. package/dist/editor/ui/ItemSearch.js +14 -8
  26. package/dist/editor/ui/ItemSearch.js.map +1 -1
  27. package/dist/editor/ui/PerfectTree.d.ts +4 -2
  28. package/dist/editor/ui/PerfectTree.js +78 -4
  29. package/dist/editor/ui/PerfectTree.js.map +1 -1
  30. package/dist/editor/ui/Splitter.js +1 -1
  31. package/dist/revision.d.ts +2 -2
  32. package/dist/revision.js +2 -2
  33. package/dist/styles.css +8 -2
  34. package/eslint.config.mjs +4 -0
  35. package/images/bg-shape-black.webp +0 -0
  36. package/images/wizard-bg.png +0 -0
  37. package/images/wizard-tour.png +0 -0
  38. package/images/wizard.png +0 -0
  39. package/package.json +2 -8
  40. package/src/client-components/api.ts +6 -0
  41. package/src/client-components/index.ts +19 -0
  42. package/src/components/ActionButton.tsx +50 -0
  43. package/src/components/Error.tsx +57 -0
  44. package/src/components/ui/CardConnector.tsx +56 -0
  45. package/src/components/ui/button.tsx +62 -0
  46. package/src/components/ui/card.tsx +372 -0
  47. package/src/components/ui/context-menu.tsx +250 -0
  48. package/src/config/config.tsx +917 -0
  49. package/src/config/types.ts +286 -0
  50. package/src/editor/ComponentInfo.tsx +90 -0
  51. package/src/editor/ConfirmationDialog.tsx +103 -0
  52. package/src/editor/ContentTree.tsx +733 -0
  53. package/src/editor/ContextMenu.tsx +230 -0
  54. package/src/editor/Editor.tsx +90 -0
  55. package/src/editor/EditorWarning.tsx +34 -0
  56. package/src/editor/EditorWarnings.tsx +33 -0
  57. package/src/editor/FieldActionsOverlay.tsx +296 -0
  58. package/src/editor/FieldEditorPopup.tsx +65 -0
  59. package/src/editor/FieldHistory.tsx +75 -0
  60. package/src/editor/FieldList.tsx +190 -0
  61. package/src/editor/FieldListField.tsx +391 -0
  62. package/src/editor/FieldListFieldWithFallbacks.tsx +217 -0
  63. package/src/editor/FloatingToolbar.tsx +163 -0
  64. package/src/editor/ImageEditor.tsx +128 -0
  65. package/src/editor/ItemInfo.tsx +90 -0
  66. package/src/editor/LinkEditorDialog.tsx +196 -0
  67. package/src/editor/MainLayout.tsx +95 -0
  68. package/src/editor/MobileLayout.tsx +68 -0
  69. package/src/editor/NewEditorClient.tsx +11 -0
  70. package/src/editor/PictureCropper.tsx +568 -0
  71. package/src/editor/PictureEditor.tsx +301 -0
  72. package/src/editor/PictureEditorDialog.tsx +381 -0
  73. package/src/editor/PublishDialog.ignore +74 -0
  74. package/src/editor/ScrollingContentTree.tsx +68 -0
  75. package/src/editor/Terminal.tsx +227 -0
  76. package/src/editor/Titlebar.tsx +104 -0
  77. package/src/editor/ai/AiPopup.tsx +59 -0
  78. package/src/editor/ai/AiResponseMessage.tsx +106 -0
  79. package/src/editor/ai/AiTerminal.tsx +503 -0
  80. package/src/editor/ai/AiToolCall.tsx +61 -0
  81. package/src/editor/ai/EditorAiTerminal.tsx +20 -0
  82. package/src/editor/ai/GhostWriter.tsx +480 -0
  83. package/src/editor/ai/aiPageModel.ts +108 -0
  84. package/src/editor/ai/editorAiContext.ts +18 -0
  85. package/src/editor/client/AboutDialog.tsx +44 -0
  86. package/src/editor/client/EditorClient.tsx +2241 -0
  87. package/src/editor/client/GenericDialog.tsx +50 -0
  88. package/src/editor/client/editContext.ts +416 -0
  89. package/src/editor/client/helpers.ts +44 -0
  90. package/src/editor/client/itemsRepository.ts +574 -0
  91. package/src/editor/client/operations.ts +768 -0
  92. package/src/editor/client/pageModelBuilder.ts +219 -0
  93. package/src/editor/commands/commands.ts +22 -0
  94. package/src/editor/commands/componentCommands.tsx +431 -0
  95. package/src/editor/commands/createVersionCommand.ts +33 -0
  96. package/src/editor/commands/deleteVersionCommand.ts +71 -0
  97. package/src/editor/commands/itemCommands.tsx +351 -0
  98. package/src/editor/commands/localizeItem/LocalizeItemDialog.tsx +201 -0
  99. package/src/editor/commands/localizeItem/LocalizeItemUtils.ts +27 -0
  100. package/src/editor/commands/undo.ts +39 -0
  101. package/src/editor/component-designer/ComponentDesigner.tsx +70 -0
  102. package/src/editor/component-designer/ComponentDesignerAiTerminal.tsx +11 -0
  103. package/src/editor/component-designer/ComponentDesignerMenu.tsx +91 -0
  104. package/src/editor/component-designer/ComponentEditor.tsx +97 -0
  105. package/src/editor/component-designer/ComponentRenderingCodeEditor.tsx +31 -0
  106. package/src/editor/component-designer/ComponentRenderingEditor.tsx +104 -0
  107. package/src/editor/component-designer/ComponentsDropdown.tsx +39 -0
  108. package/src/editor/component-designer/PlaceholdersEditor.tsx +179 -0
  109. package/src/editor/component-designer/RenderingsDropdown.tsx +36 -0
  110. package/src/editor/component-designer/TemplateEditor.tsx +236 -0
  111. package/src/editor/component-designer/aiContext.ts +23 -0
  112. package/src/editor/componentTreeHelper.tsx +116 -0
  113. package/src/editor/context-menu/CopyMoveMenu.tsx +103 -0
  114. package/src/editor/context-menu/InsertMenu.tsx +347 -0
  115. package/src/editor/control-center/About.tsx +342 -0
  116. package/src/editor/control-center/ControlCenterMenu.tsx +76 -0
  117. package/src/editor/control-center/IndexOverview.tsx +50 -0
  118. package/src/editor/control-center/IndexSettings.tsx +266 -0
  119. package/src/editor/control-center/Info.tsx +104 -0
  120. package/src/editor/control-center/QuotaInfo.tsx +301 -0
  121. package/src/editor/control-center/Status.tsx +113 -0
  122. package/src/editor/control-center/WebSocketMessages.tsx +155 -0
  123. package/src/editor/editor-warnings/ItemLocked.tsx +63 -0
  124. package/src/editor/editor-warnings/NoLanguageWriteAccess.tsx +22 -0
  125. package/src/editor/editor-warnings/NoWorkflowWriteAccess.tsx +23 -0
  126. package/src/editor/editor-warnings/NoWriteAccess.tsx +16 -0
  127. package/src/editor/editor-warnings/ValidationErrors.tsx +54 -0
  128. package/src/editor/field-types/AttachmentEditor.tsx +9 -0
  129. package/src/editor/field-types/CheckboxEditor.tsx +47 -0
  130. package/src/editor/field-types/DropLinkEditor.tsx +80 -0
  131. package/src/editor/field-types/DropListEditor.tsx +84 -0
  132. package/src/editor/field-types/ImageFieldEditor.tsx +65 -0
  133. package/src/editor/field-types/InternalLinkFieldEditor.tsx +188 -0
  134. package/src/editor/field-types/LinkFieldEditor.tsx +85 -0
  135. package/src/editor/field-types/MultiLineText.tsx +82 -0
  136. package/src/editor/field-types/PictureFieldEditor.tsx +121 -0
  137. package/src/editor/field-types/RawEditor.tsx +53 -0
  138. package/src/editor/field-types/ReactQuill.tsx +580 -0
  139. package/src/editor/field-types/RichTextEditor.tsx +22 -0
  140. package/src/editor/field-types/RichTextEditorComponent.tsx +127 -0
  141. package/src/editor/field-types/SingleLineText.tsx +174 -0
  142. package/src/editor/field-types/TreeListEditor.tsx +261 -0
  143. package/src/editor/fieldTypes.ts +140 -0
  144. package/src/editor/media-selector/AiImageSearch.tsx +185 -0
  145. package/src/editor/media-selector/AiImageSearchPrompt.tsx +94 -0
  146. package/src/editor/media-selector/MediaFolderBrowser.tsx +321 -0
  147. package/src/editor/media-selector/MediaSelector.tsx +42 -0
  148. package/src/editor/media-selector/Preview.tsx +14 -0
  149. package/src/editor/media-selector/Thumbnails.tsx +48 -0
  150. package/src/editor/media-selector/TreeSelector.tsx +292 -0
  151. package/src/editor/media-selector/UploadZone.tsx +137 -0
  152. package/src/editor/media-selector/index.ts +8 -0
  153. package/src/editor/menubar/ActionsMenu.tsx +94 -0
  154. package/src/editor/menubar/ActiveUsers.tsx +17 -0
  155. package/src/editor/menubar/ApproveAndPublish.tsx +18 -0
  156. package/src/editor/menubar/BrowseHistory.tsx +28 -0
  157. package/src/editor/menubar/ItemLanguageVersion.tsx +76 -0
  158. package/src/editor/menubar/LanguageSelector.tsx +226 -0
  159. package/src/editor/menubar/Menu.tsx +83 -0
  160. package/src/editor/menubar/NavButtons.tsx +74 -0
  161. package/src/editor/menubar/PageSelector.tsx +278 -0
  162. package/src/editor/menubar/PageViewerControls.tsx +120 -0
  163. package/src/editor/menubar/PreviewSecondaryControls.tsx +18 -0
  164. package/src/editor/menubar/SecondaryControls.tsx +45 -0
  165. package/src/editor/menubar/Separator.tsx +12 -0
  166. package/src/editor/menubar/SiteInfo.tsx +53 -0
  167. package/src/editor/menubar/User.tsx +27 -0
  168. package/src/editor/menubar/VersionSelector.tsx +142 -0
  169. package/src/editor/page-editor-chrome/CommentHighlighting.tsx +307 -0
  170. package/src/editor/page-editor-chrome/CommentHighlightings.tsx +35 -0
  171. package/src/editor/page-editor-chrome/FieldActionIndicator.tsx +59 -0
  172. package/src/editor/page-editor-chrome/FieldActionIndicators.tsx +23 -0
  173. package/src/editor/page-editor-chrome/FieldEditedIndicator.tsx +64 -0
  174. package/src/editor/page-editor-chrome/FieldEditedIndicators.tsx +35 -0
  175. package/src/editor/page-editor-chrome/FrameMenu.tsx +338 -0
  176. package/src/editor/page-editor-chrome/FrameMenus.tsx +48 -0
  177. package/src/editor/page-editor-chrome/InlineEditor.tsx +765 -0
  178. package/src/editor/page-editor-chrome/LockedFieldIndicator.tsx +61 -0
  179. package/src/editor/page-editor-chrome/NoLayout.tsx +36 -0
  180. package/src/editor/page-editor-chrome/PageEditorChrome.tsx +122 -0
  181. package/src/editor/page-editor-chrome/PictureEditorOverlay.tsx +161 -0
  182. package/src/editor/page-editor-chrome/PlaceholderDropZone.tsx +169 -0
  183. package/src/editor/page-editor-chrome/PlaceholderDropZones.tsx +315 -0
  184. package/src/editor/page-editor-chrome/SuggestionHighlighting.tsx +300 -0
  185. package/src/editor/page-editor-chrome/SuggestionHighlightings.tsx +40 -0
  186. package/src/editor/page-editor-chrome/useInlineAICompletion.tsx +828 -0
  187. package/src/editor/page-viewer/DeviceToolbar.tsx +70 -0
  188. package/src/editor/page-viewer/EditorForm.tsx +262 -0
  189. package/src/editor/page-viewer/MiniMap.tsx +362 -0
  190. package/src/editor/page-viewer/PageViewer.tsx +169 -0
  191. package/src/editor/page-viewer/PageViewerFrame.tsx +1022 -0
  192. package/src/editor/page-viewer/pageModelSkeletonBuilder.ts +412 -0
  193. package/src/editor/page-viewer/pageViewContext.ts +186 -0
  194. package/src/editor/pageModel.ts +220 -0
  195. package/src/editor/picture-shared.tsx +53 -0
  196. package/src/editor/reviews/Comment.tsx +308 -0
  197. package/src/editor/reviews/Comments.tsx +125 -0
  198. package/src/editor/reviews/DiffView.tsx +109 -0
  199. package/src/editor/reviews/PreviewInfo.tsx +35 -0
  200. package/src/editor/reviews/Reviews.tsx +280 -0
  201. package/src/editor/reviews/SuggestedEdit.tsx +316 -0
  202. package/src/editor/reviews/reviewCommands.tsx +47 -0
  203. package/src/editor/reviews/useReviews.tsx +70 -0
  204. package/src/editor/services/aiService.ts +173 -0
  205. package/src/editor/services/componentDesignerService.ts +151 -0
  206. package/src/editor/services/contentService.ts +180 -0
  207. package/src/editor/services/editService.ts +488 -0
  208. package/src/editor/services/indexService.ts +24 -0
  209. package/src/editor/services/reviewsService.ts +53 -0
  210. package/src/editor/services/serviceHelper.ts +95 -0
  211. package/src/editor/services/suggestedEditsService.ts +39 -0
  212. package/src/editor/services/systemService.ts +5 -0
  213. package/src/editor/services/translationService.ts +21 -0
  214. package/src/editor/services-server/api.ts +150 -0
  215. package/src/editor/services-server/graphQL.ts +106 -0
  216. package/src/editor/sidebar/ComponentPalette.tsx +161 -0
  217. package/src/editor/sidebar/ComponentTree.tsx +549 -0
  218. package/src/editor/sidebar/Debug.tsx +111 -0
  219. package/src/editor/sidebar/DictionaryEditor.tsx +261 -0
  220. package/src/editor/sidebar/EditHistory.tsx +134 -0
  221. package/src/editor/sidebar/GraphQL.tsx +164 -0
  222. package/src/editor/sidebar/Insert.tsx +35 -0
  223. package/src/editor/sidebar/MainContentTree.tsx +102 -0
  224. package/src/editor/sidebar/Performance.tsx +53 -0
  225. package/src/editor/sidebar/Sessions.tsx +35 -0
  226. package/src/editor/sidebar/Sidebar.tsx +20 -0
  227. package/src/editor/sidebar/SidebarView.tsx +152 -0
  228. package/src/editor/sidebar/Translations.tsx +295 -0
  229. package/src/editor/sidebar/Validation.tsx +102 -0
  230. package/src/editor/sidebar/ViewSelector.tsx +60 -0
  231. package/src/editor/sidebar/Workbox.tsx +209 -0
  232. package/src/editor/ui/CenteredMessage.tsx +7 -0
  233. package/src/editor/ui/CopyMoveTargetSelectorDialog.tsx +81 -0
  234. package/src/editor/ui/CopyToClipboardButton.tsx +24 -0
  235. package/src/editor/ui/DialogButtons.tsx +11 -0
  236. package/src/editor/ui/Icons.tsx +709 -0
  237. package/src/editor/ui/ItemList.tsx +76 -0
  238. package/src/editor/ui/ItemNameDialogNew.tsx +118 -0
  239. package/src/editor/ui/ItemSearch.tsx +159 -0
  240. package/src/editor/ui/PerfectTree.tsx +676 -0
  241. package/src/editor/ui/Section.tsx +35 -0
  242. package/src/editor/ui/SimpleIconButton.tsx +54 -0
  243. package/src/editor/ui/SimpleMenu.tsx +40 -0
  244. package/src/editor/ui/SimpleTable.tsx +60 -0
  245. package/src/editor/ui/SimpleTabs.tsx +60 -0
  246. package/src/editor/ui/SimpleToolbar.tsx +7 -0
  247. package/src/editor/ui/Spinner.tsx +9 -0
  248. package/src/editor/ui/Splitter.tsx +420 -0
  249. package/src/editor/ui/StackedPanels.tsx +134 -0
  250. package/src/editor/ui/Toolbar.tsx +7 -0
  251. package/src/editor/utils/id-helper.ts +3 -0
  252. package/src/editor/utils/insertOptions.ts +69 -0
  253. package/src/editor/utils/itemutils.ts +29 -0
  254. package/src/editor/utils/useMemoDebug.ts +28 -0
  255. package/src/editor/utils.ts +486 -0
  256. package/src/editor/views/CompareView.tsx +245 -0
  257. package/src/editor/views/EditView.tsx +27 -0
  258. package/src/editor/views/ItemEditor.tsx +58 -0
  259. package/src/editor/views/MediaFolderEditView.tsx +66 -0
  260. package/src/editor/views/SingleEditView.tsx +57 -0
  261. package/src/fonts/Geist-Black.woff2 +0 -0
  262. package/src/fonts/Geist-Bold.woff2 +0 -0
  263. package/src/fonts/Geist-ExtraBold.woff2 +0 -0
  264. package/src/fonts/Geist-ExtraLight.woff2 +0 -0
  265. package/src/fonts/Geist-Light.woff2 +0 -0
  266. package/src/fonts/Geist-Medium.woff2 +0 -0
  267. package/src/fonts/Geist-Regular.woff2 +0 -0
  268. package/src/fonts/Geist-SemiBold.woff2 +0 -0
  269. package/src/fonts/Geist-Thin.woff2 +0 -0
  270. package/src/fonts/Geist[wght].woff2 +0 -0
  271. package/src/fonts/index.ts +10 -0
  272. package/src/index.ts +23 -0
  273. package/src/lib/safelist.tsx +16 -0
  274. package/src/lib/utils.ts +6 -0
  275. package/src/page-wizard/PageWizard.tsx +139 -0
  276. package/src/page-wizard/WizardBox.tsx +4 -0
  277. package/src/page-wizard/WizardBoxConnector.tsx +56 -0
  278. package/src/page-wizard/WizardSteps.tsx +458 -0
  279. package/src/page-wizard/service.ts +35 -0
  280. package/src/page-wizard/startPageWizardCommand.ts +26 -0
  281. package/src/page-wizard/steps/BuildPageStep.tsx +259 -0
  282. package/src/page-wizard/steps/CollectStep.tsx +296 -0
  283. package/src/page-wizard/steps/ComponentTypesSelector.tsx +454 -0
  284. package/src/page-wizard/steps/Components.tsx +193 -0
  285. package/src/page-wizard/steps/ContentStep.tsx +890 -0
  286. package/src/page-wizard/steps/EditButton.tsx +34 -0
  287. package/src/page-wizard/steps/FieldEditor.tsx +102 -0
  288. package/src/page-wizard/steps/Generate.tsx +60 -0
  289. package/src/page-wizard/steps/ImagesStep.tsx +382 -0
  290. package/src/page-wizard/steps/LayoutStep.tsx +227 -0
  291. package/src/page-wizard/steps/MetaDataStep.tsx +173 -0
  292. package/src/page-wizard/steps/SelectStep.tsx +281 -0
  293. package/src/page-wizard/steps/schema.ts +180 -0
  294. package/src/page-wizard/steps/usePageCreator.ts +325 -0
  295. package/src/page-wizard/usePageWizard.ts +79 -0
  296. package/src/revision.ts +2 -0
  297. package/src/splash-screen/NewPage.tsx +294 -0
  298. package/src/splash-screen/OpenPage.tsx +113 -0
  299. package/src/splash-screen/RecentPages.tsx +123 -0
  300. package/src/splash-screen/SectionHeadline.tsx +21 -0
  301. package/src/splash-screen/SplashScreen.tsx +195 -0
  302. package/src/tour/Tour.tsx +566 -0
  303. package/src/tour/default-tour.tsx +301 -0
  304. package/src/tour/preview-tour.tsx +128 -0
  305. package/src/types.ts +335 -0
  306. package/styles.css +765 -0
  307. package/tsconfig.build.json +31 -0
  308. package/tsconfig.json +14 -0
@@ -0,0 +1,286 @@
1
+ import { ComponentType, ReactNode, Dispatch, SetStateAction } from "react";
2
+ import { EditContextType } from "../editor/client/editContext";
3
+ import { Command, CommandData } from "../editor/commands/commands";
4
+ import { EditorWarningProps } from "../editor/EditorWarnings";
5
+ import {
6
+ Field,
7
+ FieldButton,
8
+ FullItem,
9
+ ItemDescriptor,
10
+ } from "../editor/pageModel";
11
+ import {
12
+ InsertItemCommand,
13
+ ItemCommand,
14
+ ItemCommandData,
15
+ MoveCopyItemsCommand,
16
+ LocalizeItemCommand,
17
+ } from "../editor/commands/itemCommands";
18
+ import { User } from "../types";
19
+ import {
20
+ WizardData,
21
+ WizardPageModel,
22
+ WizardStep,
23
+ } from "../page-wizard/PageWizard";
24
+ import { Wizard } from "../page-wizard/PageWizard";
25
+
26
+ export type RichTextEditorProfile = {
27
+ toolbar: {
28
+ groups: RichTextEditorToolbarGroup[];
29
+ };
30
+ };
31
+
32
+ export type ClientFieldButton = FieldButton & {
33
+ clientAction?: FieldAction;
34
+ };
35
+
36
+ export type FieldAction = ({
37
+ editContext,
38
+ //dialogContext,
39
+ }: FieldActionProps) => Promise<any> | void;
40
+
41
+ export type FieldActionProps = {
42
+ editContext: EditContextType;
43
+ //dialogContext: DialogContextValue;
44
+ field: Field;
45
+ };
46
+
47
+ export type RichTextEditorToolbarGroup = {
48
+ items: RichTextEditorToolbarItem[];
49
+ };
50
+
51
+ export type RichTextEditorToolbarItem = string | {};
52
+
53
+ export type EditorClientBuilderProps = {
54
+ configuration: EditorConfiguration;
55
+ buildClient: (configuration: EditorConfiguration) => ReactNode;
56
+ user: User;
57
+ };
58
+
59
+ export type Panel = {
60
+ name: string;
61
+ title: string;
62
+ icon?: string | React.JSX.Element;
63
+ header?: ComponentType;
64
+ content: ReactNode;
65
+ initialSize: number;
66
+ noOverflow?: boolean;
67
+ };
68
+
69
+ export type PanelFactory = (editContext: EditContextType) => Panel;
70
+
71
+ export type Sidebar = { panels: (Panel | PanelFactory)[]; title?: string };
72
+ export type EditorView = {
73
+ name: string;
74
+ extends?: string;
75
+ title?: string;
76
+ icon?: string | React.JSX.Element;
77
+ defaultCenterPanelView?: ReactNode;
78
+ menuBar?: ReactNode;
79
+ leftSidebar?: Sidebar;
80
+ rightSidebar?: Sidebar;
81
+ hidden?: boolean;
82
+ primaryControls?: ReactNode;
83
+ secondaryControls?: ReactNode;
84
+ hideViewSelector?: boolean;
85
+ visible?: (editContext: EditContextType) => boolean;
86
+ beforeClose?: (editContext: EditContextType) => Promise<boolean>;
87
+ headerTitle?: (editContext: EditContextType) => string;
88
+ };
89
+
90
+ export type ViewPanel = {
91
+ name: string;
92
+ content: ReactNode;
93
+ };
94
+
95
+ export type MenuItem = {
96
+ id: string;
97
+ label?: string;
98
+ icon?: ReactNode;
99
+ items?: MenuItem[];
100
+ command?: (event: any) => Promise<void>;
101
+ disabled?: boolean;
102
+ separator?: boolean;
103
+ };
104
+
105
+ export type MenuItemGroup = {
106
+ id: string;
107
+ label?: string;
108
+ items: MenuItem[];
109
+ };
110
+
111
+ export type EditorConfiguration = {
112
+ extensions: { [key: string]: unknown };
113
+ commands: {
114
+ localizeItem: LocalizeItemCommand;
115
+ renameItem: ItemCommand;
116
+ deleteItem: ItemCommand;
117
+ insertItem: InsertItemCommand;
118
+ publishItem: ItemCommand;
119
+ allItemCommands: Command<ItemCommandData>[];
120
+ reviewcommands: Command<CommandData>[];
121
+ moveItems: MoveCopyItemsCommand;
122
+ copyItems: MoveCopyItemsCommand;
123
+ };
124
+ events: {
125
+ onUnauthorized?: () => void;
126
+ };
127
+ services: {
128
+ renderService: {
129
+ path?: string;
130
+ };
131
+ editorService: {
132
+ //baseUrl: string;
133
+ };
134
+ aiService: {
135
+ promptUrl: string;
136
+ };
137
+ };
138
+
139
+ editorWarnings: ComponentType<EditorWarningProps>[];
140
+ fieldTypes: {
141
+ [key: string]: FieldTypeConfiguration;
142
+ };
143
+ outline: {
144
+ width: number;
145
+ };
146
+ debounceFieldEditsInterval: number;
147
+ devices: Device[];
148
+ pageWizard: {
149
+ getWizards: (parentItem: ItemDescriptor) => Promise<Wizard[]>;
150
+ startWizardCommand: Command<{ wizard: Wizard; item: ItemDescriptor }>;
151
+ stepComponents: {
152
+ [key: string]: ComponentType<StepComponentProps>;
153
+ };
154
+ };
155
+
156
+ editor: {
157
+ defaultPanelSizes: [number, number];
158
+ dialogs: {
159
+ newPage: {
160
+ expandTreeNode?: string;
161
+ };
162
+ };
163
+ views: EditorView[];
164
+ actionsMenu?: {
165
+ itemsFactory: (editContext: EditContextType) => MenuItemGroup[];
166
+ };
167
+ mainNavigation?: (MenuItem | Command<any>)[];
168
+ embedded?: boolean;
169
+ titlebar: ReactNode;
170
+ contentTree: {
171
+ contextMenu: {
172
+ factory: (props: {
173
+ items: FullItem[];
174
+ editContext: EditContextType;
175
+ commandCallback?: (command: ItemCommand, result: any) => void;
176
+ }) => Promise<MenuItem[] | undefined>;
177
+ };
178
+ };
179
+ };
180
+ controlCenter: {
181
+ groups: {
182
+ title: string;
183
+ icon: ReactNode;
184
+ panels: ControlCenterPanel[];
185
+ }[];
186
+ };
187
+
188
+ tours: {
189
+ default: Tour;
190
+ preview: Tour;
191
+ };
192
+ activeTour: string;
193
+ };
194
+
195
+ export type Tour = {
196
+ getSteps: (params: GetEditorTourStepsParams) => Record<string, TourStep>;
197
+ };
198
+
199
+ export type ControlCenterPanel = {
200
+ id: string;
201
+ title: string;
202
+ icon?: ReactNode;
203
+ content: ReactNode;
204
+ };
205
+
206
+ export type Device = {
207
+ name: string;
208
+ width: number | undefined;
209
+ height: number | undefined;
210
+ };
211
+
212
+ export type FieldTypeConfiguration = {
213
+ editor: React.ComponentType<any>;
214
+ buttons?: FieldButton[];
215
+ custom?: any;
216
+ };
217
+
218
+ export type TourButton = {
219
+ label: ReactNode;
220
+ onClick: () => void;
221
+ className?: string;
222
+ };
223
+
224
+ export type TourStep = {
225
+ title?: ReactNode;
226
+ description?: ReactNode;
227
+ focusElement?: string;
228
+ extendFocus?: number;
229
+ prepareAction?: () => Promise<void>;
230
+ action?: () => Promise<void>;
231
+ bubblePosition?: "left" | "right" | "bottom" | "top-right";
232
+ flipArrow?: boolean;
233
+ waitForUserInput?: () => Promise<string | void>;
234
+ buttons?: TourButton[];
235
+ nextStep?: string;
236
+ waitForElement?: string;
237
+ getPointTo?: () => DOMRect | undefined;
238
+ pointToElement?: string;
239
+ };
240
+
241
+ export type GetEditorTourStepsParams = {
242
+ editContext: EditContextType;
243
+ nextStep: (stepId: string) => void;
244
+ stopTour: () => void;
245
+ waitForElement: (
246
+ selector: string,
247
+ timeout?: number,
248
+ ) => Promise<DOMRect | undefined>;
249
+ waitForElementToDisappear: (selector: string) => Promise<void>;
250
+ setFocusRect: (rect: DOMRect) => void;
251
+ delay: (ms: number) => Promise<void>;
252
+ waitForInput: (
253
+ selector: string,
254
+ minNumberOfCharacters: number,
255
+ ) => Promise<void>;
256
+ simulateTyping: (
257
+ element: HTMLInputElement | HTMLTextAreaElement,
258
+ text: string,
259
+ interval?: number,
260
+ ) => Promise<void>;
261
+ };
262
+
263
+ export type TranslationStatus = {
264
+ itemId: string;
265
+ targetLanguage: string;
266
+ sourceLanguage: string;
267
+ status: string;
268
+ timestamp: string;
269
+ message?: string;
270
+ };
271
+
272
+ export interface StepComponentProps {
273
+ step: WizardStep;
274
+
275
+ data: WizardData;
276
+ setData: React.Dispatch<React.SetStateAction<WizardData>>;
277
+ wizard: Wizard;
278
+ parentItem?: ItemDescriptor;
279
+ setStepCompleted: (completed: boolean) => void;
280
+ setBeforeNextCallback?: (callback: (() => Promise<boolean>) | null) => void;
281
+
282
+ internalState: any;
283
+ setInternalState: Dispatch<SetStateAction<any>>;
284
+ pageModel: WizardPageModel;
285
+ setPageModel: Dispatch<SetStateAction<WizardPageModel>>;
286
+ }
@@ -0,0 +1,90 @@
1
+ "use client";
2
+
3
+ import { useEffect, useState } from "react";
4
+ import { Component, FullItem } from "./pageModel";
5
+ import { CopyToClipboardButton } from "./ui/CopyToClipboardButton";
6
+ import { Section } from "./ui/Section";
7
+ import { useEditContext } from "./client/editContext";
8
+
9
+ export function ComponentInfo({ component }: { component: Component | null }) {
10
+ if (!component) return null;
11
+
12
+ const editContext = useEditContext();
13
+
14
+ const [layoutItem, setLayoutItem] = useState<FullItem>();
15
+ const [dataSourceItem, setDataSourceItem] = useState<FullItem>();
16
+
17
+ useEffect(() => {
18
+ if (!component.layoutId) {
19
+ setLayoutItem(undefined);
20
+ return;
21
+ }
22
+ editContext!.itemsRepository
23
+ .getItem({
24
+ id: component.layoutId,
25
+ language: editContext!.currentItemDescriptor!.language,
26
+ version: 0,
27
+ })
28
+ .then(setLayoutItem);
29
+ }, [component.layoutId]);
30
+
31
+ useEffect(() => {
32
+ async function loadDataSourceItem() {
33
+ if (!component?.datasourceItem) {
34
+ setDataSourceItem(undefined);
35
+ return;
36
+ }
37
+ const item = await editContext!.itemsRepository.getItem(
38
+ component.datasourceItem,
39
+ );
40
+ setDataSourceItem(item);
41
+ }
42
+ loadDataSourceItem();
43
+ }, [component.datasourceItem]);
44
+
45
+ const hostingPageItem = layoutItem ? (
46
+ <>
47
+ <div className="font-bold">Source:</div>
48
+ <div>
49
+ {layoutItem.path} ID: {layoutItem.id}
50
+ </div>
51
+ </>
52
+ ) : null;
53
+
54
+ const linkedComponent = component.datasourceItem ? (
55
+ <>
56
+ <div className="font-bold">Source:</div>
57
+ <div>
58
+ {dataSourceItem?.path} ({dataSourceItem?.id})
59
+ </div>
60
+ </>
61
+ ) : null;
62
+
63
+ return (
64
+ <div>
65
+ <h2 className="text-l my-2 px-3 py-3 font-bold">{component.name}</h2>
66
+ <Section title="Info">
67
+ <div className="grid grid-cols-[min-content_1fr] gap-3 bg-gray-100 text-xs">
68
+ <div className="font-bold">ID:</div>
69
+ <div className="flex items-center gap-1">
70
+ {component.id} <CopyToClipboardButton text={component.id} />
71
+ </div>
72
+ <div className="font-bold">Template</div>
73
+ <div>
74
+ ({component.datasourceItem?.templateId}
75
+ {component.datasourceItem && (
76
+ <CopyToClipboardButton
77
+ text={component.datasourceItem.templateId}
78
+ />
79
+ )}
80
+ )
81
+ </div>
82
+ <div className="font-bold">Languages</div>
83
+ <div>{dataSourceItem?.translations?.join(", ")}</div>
84
+ {hostingPageItem}
85
+ {linkedComponent}
86
+ </div>
87
+ </Section>
88
+ </div>
89
+ );
90
+ }
@@ -0,0 +1,103 @@
1
+ import { useState, forwardRef, useImperativeHandle } from "react";
2
+ import { Dialog } from "primereact/dialog";
3
+ import { Button } from "primereact/button";
4
+
5
+ export type ConfirmationDialogProps = {};
6
+
7
+ export type ConfirmationProps = {
8
+ message: React.ReactNode;
9
+ acceptIcon?: string;
10
+ rejectIcon?: string;
11
+ header?: React.ReactNode;
12
+ acceptLabel?: string;
13
+ rejectLabel?: string;
14
+ icon?: React.ReactNode;
15
+ accept: () => void;
16
+ reject?: () => void;
17
+ showCancel?: boolean;
18
+ showAccept?: boolean;
19
+ };
20
+
21
+ export interface ConfirmationDialogHandle {
22
+ confirm: (props: ConfirmationProps) => void;
23
+ }
24
+
25
+ const ConfirmationDialog = forwardRef<
26
+ ConfirmationDialogHandle,
27
+ ConfirmationDialogProps
28
+ >((_props, ref) => {
29
+ const [visible, setVisible] = useState(false);
30
+
31
+ const [props, setProps] = useState<ConfirmationProps>();
32
+
33
+ const showAccept = props?.accept === undefined ? true : props.accept;
34
+
35
+ useImperativeHandle(ref, () => ({
36
+ confirm: (props: ConfirmationProps) => {
37
+ setVisible(true);
38
+ setProps(props);
39
+ },
40
+ }));
41
+
42
+ const handleAccept = () => {
43
+ props?.accept();
44
+ setVisible(false);
45
+ };
46
+
47
+ const handleReject = () => {
48
+ if (props?.reject) props.reject();
49
+ setVisible(false);
50
+ };
51
+
52
+ const handleCancel = () => {
53
+ setVisible(false);
54
+ };
55
+
56
+ const dialogFooter = (
57
+ <div>
58
+ {showAccept && (
59
+ <Button
60
+ label={props?.acceptLabel || "Yes"}
61
+ icon={props?.acceptIcon || "pi pi-check"}
62
+ onClick={handleAccept}
63
+ className="p-button-text"
64
+ />
65
+ )}
66
+ {props?.rejectLabel && (
67
+ <Button
68
+ label={props?.rejectLabel}
69
+ icon={props?.rejectIcon || "pi pi-times"}
70
+ onClick={handleReject}
71
+ className="p-button-text"
72
+ />
73
+ )}
74
+ {props?.showCancel && (
75
+ <Button
76
+ label="Cancel"
77
+ icon="pi pi-ban"
78
+ onClick={handleCancel}
79
+ className="p-button-text"
80
+ />
81
+ )}
82
+ </div>
83
+ );
84
+
85
+ return (
86
+ visible && (
87
+ <Dialog
88
+ header={props?.header || "Confirm"}
89
+ visible={visible}
90
+ footer={dialogFooter}
91
+ onHide={handleCancel}
92
+ className="md:max-w-50vw"
93
+ >
94
+ <div className="flex items-center gap-2 p-3">
95
+ {props?.icon && <i className={props.icon + " text-3xl"}></i>}
96
+ {props?.message}
97
+ </div>
98
+ </Dialog>
99
+ )
100
+ );
101
+ });
102
+
103
+ export default ConfirmationDialog;