@alpaca-editor/core 1.0.0 → 1.0.3764-editor-mono

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 (223) hide show
  1. package/dist/client-components/api.js +6 -0
  2. package/dist/client-components/index.js +36 -0
  3. package/dist/components/ActionButton.js +9 -0
  4. package/dist/components/Error.js +28 -0
  5. package/dist/config/config.js +654 -0
  6. package/dist/config/types.js +2 -0
  7. package/dist/editor/ComponentInfo.js +31 -0
  8. package/dist/editor/ConfirmationDialog.js +32 -0
  9. package/dist/editor/ContentTree.js +406 -0
  10. package/dist/editor/ContextMenu.js +117 -0
  11. package/dist/editor/Editor.js +55 -0
  12. package/dist/editor/EditorWarning.js +13 -0
  13. package/dist/editor/EditorWarnings.js +24 -0
  14. package/dist/editor/FieldEditorPopup.js +24 -0
  15. package/dist/editor/FieldHistory.js +40 -0
  16. package/dist/editor/FieldList.js +63 -0
  17. package/dist/editor/FieldListField.js +164 -0
  18. package/dist/editor/FieldListFieldWithFallbacks.js +114 -0
  19. package/dist/editor/FloatingToolbar.js +92 -0
  20. package/dist/editor/ImageEditor.js +55 -0
  21. package/dist/editor/InsertMenu.js +164 -0
  22. package/dist/editor/ItemInfo.js +30 -0
  23. package/dist/editor/LinkEditorDialog.js +89 -0
  24. package/dist/editor/MainLayout.js +46 -0
  25. package/dist/editor/NewEditorClient.js +9 -0
  26. package/dist/editor/PictureCropper.js +332 -0
  27. package/dist/editor/PictureEditor.js +104 -0
  28. package/dist/editor/PictureEditorDialog.js +194 -0
  29. package/dist/editor/ScrollingContentTree.js +30 -0
  30. package/dist/editor/Terminal.js +109 -0
  31. package/dist/editor/Titlebar.js +11 -0
  32. package/dist/editor/ai/AiPopup.js +25 -0
  33. package/dist/editor/ai/AiResponseMessage.js +24 -0
  34. package/dist/editor/ai/AiTerminal.js +241 -0
  35. package/dist/editor/ai/AiToolCall.js +18 -0
  36. package/dist/editor/ai/EditorAiTerminal.js +9 -0
  37. package/dist/editor/ai/editorAiContext.js +14 -0
  38. package/dist/editor/client/DialogContext.js +29 -0
  39. package/dist/editor/client/EditorClient.js +1336 -0
  40. package/dist/editor/client/GenericDialog.js +27 -0
  41. package/dist/editor/client/editContext.js +59 -0
  42. package/dist/editor/client/helpers.js +31 -0
  43. package/dist/editor/client/itemsRepository.js +255 -0
  44. package/dist/editor/client/operations.js +398 -0
  45. package/dist/editor/client/pageModelBuilder.js +129 -0
  46. package/dist/editor/commands/commands.js +2 -0
  47. package/dist/editor/commands/componentCommands.js +277 -0
  48. package/dist/editor/commands/createVersionCommand.js +26 -0
  49. package/dist/editor/commands/deleteVersionCommand.js +55 -0
  50. package/dist/editor/commands/itemCommands.js +134 -0
  51. package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +94 -0
  52. package/dist/editor/commands/undo.js +32 -0
  53. package/dist/editor/component-designer/ComponentDesigner.js +58 -0
  54. package/dist/editor/component-designer/ComponentDesignerAiTerminal.js +9 -0
  55. package/dist/editor/component-designer/ComponentDesignerMenu.js +67 -0
  56. package/dist/editor/component-designer/ComponentEditor.js +59 -0
  57. package/dist/editor/component-designer/ComponentRenderingCodeEditor.js +16 -0
  58. package/dist/editor/component-designer/ComponentRenderingEditor.js +71 -0
  59. package/dist/editor/component-designer/ComponentsDropdown.js +22 -0
  60. package/dist/editor/component-designer/PlaceholdersEditor.js +70 -0
  61. package/dist/editor/component-designer/RenderingsDropdown.js +25 -0
  62. package/dist/editor/component-designer/TemplateEditor.js +144 -0
  63. package/dist/editor/component-designer/aiContext.js +18 -0
  64. package/dist/editor/componentTreeHelper.js +97 -0
  65. package/dist/editor/control-center/ControlCenterMenu.js +59 -0
  66. package/dist/editor/control-center/IndexOverview.js +27 -0
  67. package/dist/editor/control-center/IndexSettings.js +106 -0
  68. package/dist/editor/control-center/Status.js +7 -0
  69. package/dist/editor/editor-warnings/ItemLocked.js +40 -0
  70. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +16 -0
  71. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +16 -0
  72. package/dist/editor/editor-warnings/NoWriteAccess.js +14 -0
  73. package/dist/editor/editor-warnings/ValidationErrors.js +27 -0
  74. package/dist/editor/field-types/AttachmentEditor.js +7 -0
  75. package/dist/editor/field-types/CheckboxEditor.js +32 -0
  76. package/dist/editor/field-types/DropLinkEditor.js +51 -0
  77. package/dist/editor/field-types/DropListEditor.js +58 -0
  78. package/dist/editor/field-types/ImageFieldEditor.js +36 -0
  79. package/dist/editor/field-types/InternalLinkFieldEditor.js +64 -0
  80. package/dist/editor/field-types/LinkFieldEditor.js +58 -0
  81. package/dist/editor/field-types/MultiLineText.js +35 -0
  82. package/dist/editor/field-types/PictureFieldEditor.js +59 -0
  83. package/dist/editor/field-types/RawEditor.js +33 -0
  84. package/dist/editor/field-types/ReactQuill.js +366 -0
  85. package/dist/editor/field-types/RichTextEditor.js +46 -0
  86. package/dist/editor/field-types/RichTextEditorComponent.js +72 -0
  87. package/dist/editor/field-types/SingleLineText.js +92 -0
  88. package/dist/editor/field-types/TreeListEditor.js +137 -0
  89. package/dist/editor/fieldTypes.js +2 -0
  90. package/dist/editor/media-selector/AiImageSearch.js +110 -0
  91. package/dist/editor/media-selector/AiImageSearchPrompt.js +58 -0
  92. package/dist/editor/media-selector/MediaSelector.js +11 -0
  93. package/dist/editor/media-selector/Preview.js +9 -0
  94. package/dist/editor/media-selector/Thumbnails.js +11 -0
  95. package/dist/editor/media-selector/TreeSelector.js +171 -0
  96. package/dist/editor/media-selector/UploadZone.js +80 -0
  97. package/dist/editor/menubar/ActionsMenu.js +33 -0
  98. package/dist/editor/menubar/ActiveUsers.js +13 -0
  99. package/dist/editor/menubar/ApproveAndPublish.js +13 -0
  100. package/dist/editor/menubar/BrowseHistory.js +14 -0
  101. package/dist/editor/menubar/ItemLanguageVersion.js +36 -0
  102. package/dist/editor/menubar/LanguageSelector.js +33 -0
  103. package/dist/editor/menubar/Menu.js +65 -0
  104. package/dist/editor/menubar/NavButtons.js +43 -0
  105. package/dist/editor/menubar/PageSelector.js +50 -0
  106. package/dist/editor/menubar/PageViewerControls.js +37 -0
  107. package/dist/editor/menubar/Separator.js +8 -0
  108. package/dist/editor/menubar/SiteInfo.js +26 -0
  109. package/dist/editor/menubar/User.js +18 -0
  110. package/dist/editor/menubar/VersionSelector.js +49 -0
  111. package/dist/editor/page-editor-chrome/CommentHighlighting.js +214 -0
  112. package/dist/editor/page-editor-chrome/CommentHighlightings.js +17 -0
  113. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +27 -0
  114. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +15 -0
  115. package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +27 -0
  116. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +15 -0
  117. package/dist/editor/page-editor-chrome/FrameMenu.js +178 -0
  118. package/dist/editor/page-editor-chrome/FrameMenus.js +24 -0
  119. package/dist/editor/page-editor-chrome/InlineEditor.js +101 -0
  120. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +35 -0
  121. package/dist/editor/page-editor-chrome/NoLayout.js +21 -0
  122. package/dist/editor/page-editor-chrome/PageEditorChrome.js +65 -0
  123. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +109 -0
  124. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +82 -0
  125. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +147 -0
  126. package/dist/editor/page-viewer/DeviceToolbar.js +21 -0
  127. package/dist/editor/page-viewer/EditorForm.js +130 -0
  128. package/dist/editor/page-viewer/MiniMap.js +257 -0
  129. package/dist/editor/page-viewer/PageViewer.js +64 -0
  130. package/dist/editor/page-viewer/PageViewerFrame.js +696 -0
  131. package/dist/editor/page-viewer/pageViewContext.js +117 -0
  132. package/dist/editor/pageModel.js +2 -0
  133. package/dist/editor/picture-shared.js +28 -0
  134. package/dist/editor/reviews/Comment.js +112 -0
  135. package/dist/editor/reviews/Comments.js +24 -0
  136. package/dist/editor/reviews/PreviewInfo.js +13 -0
  137. package/dist/editor/reviews/Reviews.js +165 -0
  138. package/dist/editor/reviews/reviewCommands.js +44 -0
  139. package/dist/editor/reviews/useReviews.js +48 -0
  140. package/dist/editor/services/aiService.js +99 -0
  141. package/dist/editor/services/componentDesignerService.js +79 -0
  142. package/dist/editor/services/contentService.js +104 -0
  143. package/dist/editor/services/editService.js +322 -0
  144. package/dist/editor/services/indexService.js +25 -0
  145. package/dist/editor/services/reviewsService.js +43 -0
  146. package/dist/editor/services/serviceHelper.js +67 -0
  147. package/dist/editor/services/systemService.js +7 -0
  148. package/dist/editor/services/translationService.js +15 -0
  149. package/dist/editor/services-server/api.js +119 -0
  150. package/dist/editor/services-server/graphQL.js +56 -0
  151. package/dist/editor/sidebar/ComponentPalette.js +55 -0
  152. package/dist/editor/sidebar/ComponentTree.js +362 -0
  153. package/dist/editor/sidebar/Debug.js +60 -0
  154. package/dist/editor/sidebar/DictionaryEditor.js +160 -0
  155. package/dist/editor/sidebar/EditHistory.js +74 -0
  156. package/dist/editor/sidebar/GraphQL.js +115 -0
  157. package/dist/editor/sidebar/Insert.js +24 -0
  158. package/dist/editor/sidebar/MainContentTree.js +52 -0
  159. package/dist/editor/sidebar/Performance.js +34 -0
  160. package/dist/editor/sidebar/Sessions.js +31 -0
  161. package/dist/editor/sidebar/Sidebar.js +15 -0
  162. package/dist/editor/sidebar/SidebarView.js +76 -0
  163. package/dist/editor/sidebar/Translations.js +160 -0
  164. package/dist/editor/sidebar/Validation.js +52 -0
  165. package/dist/editor/sidebar/ViewSelector.js +15 -0
  166. package/dist/editor/sidebar/Workbox.js +80 -0
  167. package/dist/editor/ui/CenteredMessage.js +7 -0
  168. package/dist/editor/ui/CopyToClipboardButton.js +17 -0
  169. package/dist/editor/ui/DialogButtons.js +7 -0
  170. package/dist/editor/ui/Icons.js +75 -0
  171. package/dist/editor/ui/ItemNameDialog.js +45 -0
  172. package/dist/editor/ui/ItemNameDialogNew.js +61 -0
  173. package/dist/editor/ui/ItemSearch.js +93 -0
  174. package/dist/editor/ui/PerfectTree.js +223 -0
  175. package/dist/editor/ui/Section.js +12 -0
  176. package/dist/editor/ui/SimpleIconButton.js +11 -0
  177. package/dist/editor/ui/SimpleMenu.js +9 -0
  178. package/dist/editor/ui/SimpleTable.js +11 -0
  179. package/dist/editor/ui/SimpleTabs.js +21 -0
  180. package/dist/editor/ui/SimpleToolbar.js +7 -0
  181. package/dist/editor/ui/Spinner.js +7 -0
  182. package/dist/editor/ui/Splitter.js +187 -0
  183. package/dist/editor/ui/StackedPanels.js +69 -0
  184. package/dist/editor/ui/Toolbar.js +7 -0
  185. package/dist/editor/utils/id-helper.js +7 -0
  186. package/dist/editor/utils/insertOptions.js +45 -0
  187. package/dist/editor/utils/itemutils.js +25 -0
  188. package/dist/editor/utils/useMemoDebug.js +20 -0
  189. package/dist/editor/utils.js +328 -0
  190. package/dist/editor/views/CompareView.js +147 -0
  191. package/dist/editor/views/EditView.js +17 -0
  192. package/dist/editor/views/ItemEditor.js +24 -0
  193. package/dist/editor/views/SingleEditView.js +25 -0
  194. package/dist/index.js +22 -0
  195. package/dist/page-wizard/PageWizard.js +62 -0
  196. package/dist/page-wizard/SelectWizard.js +43 -0
  197. package/dist/page-wizard/WizardSteps.js +71 -0
  198. package/dist/page-wizard/service.js +26 -0
  199. package/dist/page-wizard/startPageWizardCommand.js +23 -0
  200. package/dist/page-wizard/steps/BuildPageStep.js +138 -0
  201. package/dist/page-wizard/steps/CollectStep.js +124 -0
  202. package/dist/page-wizard/steps/ComponentTypesSelector.js +211 -0
  203. package/dist/page-wizard/steps/Components.js +94 -0
  204. package/dist/page-wizard/steps/CreatePage.js +142 -0
  205. package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +230 -0
  206. package/dist/page-wizard/steps/EditButton.js +7 -0
  207. package/dist/page-wizard/steps/FieldEditor.js +30 -0
  208. package/dist/page-wizard/steps/Generate.js +11 -0
  209. package/dist/page-wizard/steps/ImagesStep.js +159 -0
  210. package/dist/page-wizard/steps/LayoutStep.js +120 -0
  211. package/dist/page-wizard/steps/SelectStep.js +150 -0
  212. package/dist/page-wizard/steps/schema.js +140 -0
  213. package/dist/page-wizard/steps/usePageCreator.js +194 -0
  214. package/dist/splash-screen/NewPage.js +131 -0
  215. package/dist/splash-screen/SectionHeadline.js +9 -0
  216. package/dist/splash-screen/SplashScreen.js +81 -0
  217. package/dist/tour/Tour.js +321 -0
  218. package/dist/tour/default-tour.js +231 -0
  219. package/dist/tour/preview-tour.js +93 -0
  220. package/dist/tsconfig.build.tsbuildinfo +1 -0
  221. package/dist/types.js +2 -0
  222. package/package.json +1 -1
  223. package/src/editor/sidebar/ComponentTree.tsx +512 -512
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentDesignerAiTerminal = ComponentDesignerAiTerminal;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const AiTerminal_1 = require("../ai/AiTerminal");
6
+ const aiContext_1 = require("./aiContext");
7
+ function ComponentDesignerAiTerminal() {
8
+ return ((0, jsx_runtime_1.jsx)(AiTerminal_1.AiTerminal, { createAiContext: aiContext_1.createDesignerAiContext, defaultProfile: "Component Designer" }));
9
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentDesignerMenu = ComponentDesignerMenu;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const menubar_1 = require("primereact/menubar");
6
+ const componentDesignerService_1 = require("../services/componentDesignerService");
7
+ const ItemNameDialog_1 = require("../ui/ItemNameDialog");
8
+ const react_1 = require("react");
9
+ const editContext_1 = require("../client/editContext");
10
+ const ItemLanguageVersion_1 = require("../menubar/ItemLanguageVersion");
11
+ function ComponentDesignerMenu() {
12
+ const context = (0, editContext_1.useEditContext)();
13
+ if (!context)
14
+ return;
15
+ const menuItems = [
16
+ {
17
+ id: "newComponent",
18
+ label: "New Component",
19
+ icon: "pi pi-fw pi-plus",
20
+ command: () => createNew(),
21
+ // disabled: !context.componentRenderingFolder,
22
+ },
23
+ {
24
+ id: "newRendering",
25
+ label: "New Rendering",
26
+ icon: "pi pi-fw pi-palette",
27
+ command: () => createNewRendering(),
28
+ disabled: !context.componentDesignerComponent,
29
+ },
30
+ {
31
+ id: "delete",
32
+ label: "Delete rendering",
33
+ icon: "pi pi-fw pi-trash",
34
+ disabled: !context.componentDesignerRendering,
35
+ },
36
+ ];
37
+ const itemNameDialogRef = (0, react_1.useRef)(null);
38
+ const createNew = async () => {
39
+ itemNameDialogRef.current?.show({
40
+ title: "Choose Component Name",
41
+ accept: async (name) => {
42
+ await (0, componentDesignerService_1.createNewComponent)(name, context.page.item);
43
+ },
44
+ });
45
+ };
46
+ const createNewRendering = async () => {
47
+ itemNameDialogRef.current?.show({
48
+ title: "Choose Rendering Name",
49
+ accept: async (name) => {
50
+ if (!context.componentDesignerComponent)
51
+ return;
52
+ const details = await (0, componentDesignerService_1.createRendering)(name, context.page.item, context.componentDesignerComponent.templateId);
53
+ if (!("id" in details))
54
+ return;
55
+ const component = await (0, componentDesignerService_1.loadComponentDetails)(context.componentDesignerComponent.templateId, context.page.item.id);
56
+ // const rendering = await getItem({
57
+ // id: details.id,
58
+ // language: "en",
59
+ // version: 0,
60
+ // });
61
+ context.setComponentDesignerComponent(component);
62
+ // context.setComponentDesignerRendering(rendering);
63
+ },
64
+ });
65
+ };
66
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(menubar_1.Menubar, { model: menuItems, end: (0, jsx_runtime_1.jsx)("div", { className: "flex items-center space-x-2", children: (0, jsx_runtime_1.jsx)(ItemLanguageVersion_1.ItemLanguageVersion, {}) }), className: "p-1 text-sm rounded-none border-0 border-b bg-gray-50" }), (0, jsx_runtime_1.jsx)(ItemNameDialog_1.ItemNameDialog, { ref: itemNameDialogRef })] }));
67
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentEditor = ComponentEditor;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const Toolbar_1 = require("../ui/Toolbar");
7
+ const ComponentsDropdown_1 = require("./ComponentsDropdown");
8
+ const TemplateEditor_1 = require("./TemplateEditor");
9
+ const componentTreeHelper_1 = require("../componentTreeHelper");
10
+ const editContext_1 = require("../client/editContext");
11
+ const componentDesignerService_1 = require("../services/componentDesignerService");
12
+ const button_1 = require("primereact/button");
13
+ function ComponentEditor({ allComponents, }) {
14
+ const context = (0, editContext_1.useEditContext)();
15
+ (0, react_1.useEffect)(() => {
16
+ const loadSelectedComponent = async () => {
17
+ const selectedComponents = (0, componentTreeHelper_1.getSelectedComponents)(context);
18
+ if (selectedComponents.length !== 1) {
19
+ return;
20
+ }
21
+ const component = selectedComponents[0];
22
+ if (!component) {
23
+ context.setComponentDesignerComponent(undefined);
24
+ context.setComponentDesignerRendering(undefined);
25
+ }
26
+ else {
27
+ context.setComponentDesignerComponent(await (0, componentDesignerService_1.loadComponentDetails)(component.datasourceItem.templateId, context.page.item.id));
28
+ // if (component.rendering) {
29
+ // context.setComponentDesignerRendering(
30
+ // await getItem({
31
+ // id: component.rendering.id,
32
+ // language: "en",
33
+ // version: 0,
34
+ // })
35
+ // );
36
+ // } else context.setComponentDesignerRendering(undefined);
37
+ }
38
+ };
39
+ loadSelectedComponent();
40
+ }, [context.selection]);
41
+ (0, react_1.useEffect)(() => {
42
+ const refresh = async () => {
43
+ if (context.componentDesignerComponent) {
44
+ context.setComponentDesignerComponent(await (0, componentDesignerService_1.loadComponentDetails)(context.componentDesignerComponent.templateId, context.page.item.id));
45
+ }
46
+ };
47
+ refresh();
48
+ }, [context.refreshCompletedFlag]);
49
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full", children: [(0, jsx_runtime_1.jsxs)(Toolbar_1.Toolbar, { children: [(0, jsx_runtime_1.jsx)(ComponentsDropdown_1.ComponentsDropdown, { allComponents: allComponents }), " ", (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-fw pi-save", text: true, size: "small", disabled: !context.componentDesignerComponent, onClick: () => {
50
+ const save = async () => {
51
+ await (0, componentDesignerService_1.saveComponentDetails)(context.componentDesignerComponent, context.page.item);
52
+ context.showToast({
53
+ content: "Component saved",
54
+ severity: "success",
55
+ });
56
+ };
57
+ save();
58
+ } })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex-1 overflow-auto", children: (0, jsx_runtime_1.jsx)(TemplateEditor_1.TemplateEditor, {}) })] }));
59
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ComponentRenderingCodeEditor = ComponentRenderingCodeEditor;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ require("@uiw/react-textarea-code-editor/dist.css");
9
+ const react_textarea_code_editor_1 = __importDefault(require("@uiw/react-textarea-code-editor"));
10
+ function ComponentRenderingCodeEditor({ code, setCode, }) {
11
+ return ((0, jsx_runtime_1.jsx)("div", { className: "size-full relative", children: (0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 overflow-auto", children: (0, jsx_runtime_1.jsx)(react_textarea_code_editor_1.default, { value: code, language: "js", placeholder: "Please enter TSX code.", onChange: (evn) => setCode(evn.target.value), padding: 15, style: {
12
+ fontSize: 12,
13
+ backgroundColor: "#f5f5f5",
14
+ fontFamily: "ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",
15
+ } }) }) }));
16
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentRenderingEditor = ComponentRenderingEditor;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const Toolbar_1 = require("../ui/Toolbar");
7
+ const ComponentRenderingCodeEditor_1 = require("./ComponentRenderingCodeEditor");
8
+ const RenderingsDropdown_1 = require("./RenderingsDropdown");
9
+ const editContext_1 = require("../client/editContext");
10
+ const componentTreeHelper_1 = require("../componentTreeHelper");
11
+ const button_1 = require("primereact/button");
12
+ function ComponentRenderingEditor() {
13
+ const context = (0, editContext_1.useEditContext)();
14
+ const [code, setCode] = (0, react_1.useState)("");
15
+ (0, react_1.useEffect)(() => {
16
+ async function loadRendering() {
17
+ const selectedComponents = (0, componentTreeHelper_1.getSelectedComponents)(context);
18
+ if (selectedComponents.length !== 1) {
19
+ context;
20
+ return;
21
+ }
22
+ const component = selectedComponents[0];
23
+ const renderingId = component?.rendering?.id;
24
+ if (renderingId) {
25
+ const renderingItem = await context.itemsRepository.getItem({
26
+ id: renderingId,
27
+ language: "en",
28
+ version: 0,
29
+ });
30
+ context?.setComponentDesignerRendering(renderingItem);
31
+ }
32
+ else {
33
+ context?.setComponentDesignerRendering(undefined);
34
+ }
35
+ }
36
+ loadRendering();
37
+ }, [context.selection]);
38
+ const codeField = context.componentDesignerRendering?.fields.find((x) => x.name === "code");
39
+ (0, react_1.useEffect)(() => {
40
+ if (codeField) {
41
+ setCode(codeField.value);
42
+ }
43
+ else {
44
+ setCode("");
45
+ }
46
+ }, [context.componentDesignerRendering]);
47
+ (0, react_1.useEffect)(() => {
48
+ const refresh = async () => {
49
+ if (context.componentDesignerRendering) {
50
+ const renderingItem = await context.itemsRepository.getItem({
51
+ id: context.componentDesignerRendering.id,
52
+ language: "en",
53
+ version: 0,
54
+ });
55
+ context?.setComponentDesignerRendering(renderingItem);
56
+ }
57
+ };
58
+ refresh();
59
+ }, [context.refreshCompletedFlag]);
60
+ if (!context.componentDesignerComponent)
61
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full text-xs", children: "Select a component" }));
62
+ else
63
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full", children: [(0, jsx_runtime_1.jsxs)(Toolbar_1.Toolbar, { children: [(0, jsx_runtime_1.jsx)(RenderingsDropdown_1.RenderingsDropdown, {}), (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-fw pi-save", text: true, size: "small", disabled: !codeField, onClick: () => {
64
+ if (!codeField)
65
+ return;
66
+ context.operations.editField({
67
+ field: codeField.descriptor,
68
+ value: code,
69
+ });
70
+ } })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1", children: [!codeField && ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full text-xs", children: "Select a rendering" })), codeField && ((0, jsx_runtime_1.jsx)(ComponentRenderingCodeEditor_1.ComponentRenderingCodeEditor, { code: code, setCode: setCode }))] })] }));
71
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentsDropdown = ComponentsDropdown;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const editContext_1 = require("../client/editContext");
6
+ const componentDesignerService_1 = require("../services/componentDesignerService");
7
+ const dropdown_1 = require("primereact/dropdown");
8
+ function ComponentsDropdown({ allComponents, }) {
9
+ const context = (0, editContext_1.useEditContext)();
10
+ if (!context?.page)
11
+ return null;
12
+ async function loadComponent(id) {
13
+ const component = await (0, componentDesignerService_1.loadComponentDetails)(id, context.page.item.id);
14
+ context.setComponentDesignerComponent(component);
15
+ }
16
+ const value = allComponents.find((x) => x.templateId === context.componentDesignerComponent?.templateId);
17
+ return ((0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: value, filter: true, options: allComponents, optionLabel: "name", placeholder: "Select a Component", onChange: (e) => {
18
+ loadComponent(e.value.templateId);
19
+ context.setComponentDesignerRendering(undefined);
20
+ context.select([]);
21
+ } }));
22
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaceholdersEditor = PlaceholdersEditor;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const editContext_1 = require("../client/editContext");
6
+ const componentDesignerService_1 = require("../services/componentDesignerService");
7
+ const Icons_1 = require("../ui/Icons");
8
+ const Toolbar_1 = require("../ui/Toolbar");
9
+ const button_1 = require("primereact/button");
10
+ const ItemNameDialog_1 = require("../ui/ItemNameDialog");
11
+ const react_1 = require("react");
12
+ function PlaceholdersEditor({ allComponents, }) {
13
+ const context = (0, editContext_1.useEditContext)();
14
+ const component = context.componentDesignerComponent;
15
+ const itemNameDialogRef = (0, react_1.useRef)(null);
16
+ const handleDragStart = (event, component) => {
17
+ event.dataTransfer.setData("text/plain", JSON.stringify(component));
18
+ };
19
+ const handleDragOver = (event) => {
20
+ event.preventDefault();
21
+ };
22
+ const handleDrop = (event, placeholderName) => {
23
+ event.preventDefault();
24
+ const componentData = JSON.parse(event.dataTransfer.getData("text/plain"));
25
+ const placeholder = component?.placeholders.find((x) => x.name == placeholderName);
26
+ if (!placeholder)
27
+ return;
28
+ console.log(placeholder, componentData);
29
+ if (placeholder.components.find((x) => x.typeId === componentData.typeId))
30
+ return;
31
+ placeholder.components.push(componentData);
32
+ context.setComponentDesignerComponent({
33
+ ...context.componentDesignerComponent,
34
+ });
35
+ };
36
+ const removeInsertOption = (placeholder, insertOption) => {
37
+ placeholder.components = placeholder.components.filter((x) => x.typeId !== insertOption.typeId);
38
+ context.setComponentDesignerComponent({
39
+ ...context.componentDesignerComponent,
40
+ });
41
+ };
42
+ const addNewPlaceholder = async () => {
43
+ itemNameDialogRef.current?.show({
44
+ title: "Choose Placeholder Name",
45
+ accept: async (name) => {
46
+ if (!context.componentDesignerComponent)
47
+ return;
48
+ const placeholder = {
49
+ name: name,
50
+ components: [],
51
+ };
52
+ context.componentDesignerComponent.placeholders.push(placeholder);
53
+ context.setComponentDesignerComponent({
54
+ ...context.componentDesignerComponent,
55
+ });
56
+ },
57
+ });
58
+ };
59
+ if (!component)
60
+ return ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full text-xs", children: "Select a component" }));
61
+ else
62
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full", children: [(0, jsx_runtime_1.jsxs)(Toolbar_1.Toolbar, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-fw pi-plus", label: "New Placeholder", text: true, size: "small", className: "text-xs text-gray-800 font-normal", disabled: !component, onClick: () => {
63
+ addNewPlaceholder();
64
+ } }), (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-fw pi-save", label: "Save", text: true, size: "small", className: "text-xs text-gray-800 font-normal", disabled: !component, onClick: () => {
65
+ (0, componentDesignerService_1.saveComponentDetails)(component, context.page.item);
66
+ } })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "relative flex-1 h-full", children: (0, jsx_runtime_1.jsx)("div", { className: "absolute inset-1 overflow-y-auto", children: component.placeholders.map((x) => ((0, jsx_runtime_1.jsxs)("div", { className: "mb-2", onDragOver: handleDragOver, onDrop: (event) => handleDrop(event, x.name), children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-xs flex gap-1 items-center", children: [(0, jsx_runtime_1.jsx)(Icons_1.ArrowDownIcon, {}), " ", x.name] }), (0, jsx_runtime_1.jsx)("div", { className: "flex gap-4 flex-wrap text-xs mt-1.5 p-1", children: x.components.map((y) => ((0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("div", { className: "absolute top-[-12px] right-[-12px] border rounded-full p-1 bg-white cursor-pointer", onClick: () => removeInsertOption(x, y), children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-times text-xs" }) }), renderComponent(y)] }, y.typeId))) })] }, x.name))) }) }), (0, jsx_runtime_1.jsx)("div", { className: "relative w-24", children: (0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 overflow-y-auto text-xs border-l ", children: allComponents.map((x) => ((0, jsx_runtime_1.jsx)("div", { className: "mb-2 cursor-grab", draggable: true, onDragStart: (event) => handleDragStart(event, x), children: renderComponent(x) }, x.templateId))) }) })] }), (0, jsx_runtime_1.jsx)(ItemNameDialog_1.ItemNameDialog, { ref: itemNameDialogRef })] }));
67
+ }
68
+ function renderComponent(y) {
69
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center p-2 border border-gray-200", children: [y.svg && ((0, jsx_runtime_1.jsx)("div", { className: "w-8 h-8", dangerouslySetInnerHTML: { __html: y.svg } })), !y.svg && (0, jsx_runtime_1.jsx)("img", { src: y.icon, width: "32", height: "32" }), y.name] }));
70
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderingsDropdown = RenderingsDropdown;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const editContext_1 = require("../client/editContext");
6
+ const dropdown_1 = require("primereact/dropdown");
7
+ function RenderingsDropdown() {
8
+ const context = (0, editContext_1.useEditContext)();
9
+ if (!context.componentDesignerComponent)
10
+ return null;
11
+ const compatibleRenderings = [
12
+ ...context.componentDesignerComponent.compatibleRenderings,
13
+ ];
14
+ if (!compatibleRenderings)
15
+ return null;
16
+ const loadRendering = async (value) => {
17
+ const item = await context.itemsRepository.getItem({
18
+ id: value.id,
19
+ language: "en",
20
+ version: 0,
21
+ });
22
+ context.setComponentDesignerRendering(item);
23
+ };
24
+ return ((0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { options: compatibleRenderings, optionLabel: "name", value: compatibleRenderings.find((x) => x.id === (context.componentDesignerRendering?.id || "")), onChange: (e) => loadRendering(e.value) }));
25
+ }
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TemplateEditor = TemplateEditor;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const editContext_1 = require("../client/editContext");
6
+ const inputtext_1 = require("primereact/inputtext");
7
+ const componentDesignerService_1 = require("../services/componentDesignerService");
8
+ const react_1 = require("react");
9
+ const dropdown_1 = require("primereact/dropdown");
10
+ function TemplateEditor() {
11
+ const context = (0, editContext_1.useEditContext)();
12
+ if (!context)
13
+ return null;
14
+ const [sections, setSections] = (0, react_1.useState)([]);
15
+ const [fieldTypes, setFieldTypes] = (0, react_1.useState)([]);
16
+ (0, react_1.useEffect)(() => {
17
+ const newSections = [
18
+ ...(context.componentDesignerComponent?.template?.sections.map((s) => ({
19
+ ...s,
20
+ })) || []),
21
+ ];
22
+ if (newSections.length === 0 ||
23
+ newSections[newSections.length - 1].fields.length > 0)
24
+ newSections.push({
25
+ name: "",
26
+ fields: [],
27
+ key: Math.random().toString(),
28
+ });
29
+ newSections.forEach((section) => {
30
+ const fields = [...section.fields];
31
+ if (section.id ||
32
+ (section.name != "" &&
33
+ (!fields.length ||
34
+ fields[fields.length - 1].id ||
35
+ fields[fields.length - 1].name != ""))) {
36
+ fields.push({
37
+ name: "",
38
+ type: "",
39
+ source: "",
40
+ key: Math.random().toString(),
41
+ });
42
+ }
43
+ section.fields = fields;
44
+ });
45
+ setSections(newSections);
46
+ }, [context.componentDesignerComponent]);
47
+ (0, react_1.useEffect)(() => {
48
+ const load = async () => {
49
+ const types = await (0, componentDesignerService_1.getFieldTypes)();
50
+ setFieldTypes(types);
51
+ };
52
+ load();
53
+ }, []);
54
+ const template = context.componentDesignerComponent?.template;
55
+ if (!template)
56
+ return null;
57
+ const updateComponent = (sections) => {
58
+ const newSections = sections.filter((x) => x.id || x.name);
59
+ newSections.forEach((section) => {
60
+ section.fields = section.fields.filter((x) => x.id || x.name);
61
+ });
62
+ const newTemplate = {
63
+ ...template,
64
+ sections: newSections,
65
+ };
66
+ const newComponent = {
67
+ ...context.componentDesignerComponent,
68
+ template: newTemplate,
69
+ };
70
+ console.log("Updating component", newComponent);
71
+ context.setComponentDesignerComponent(newComponent);
72
+ };
73
+ const update = () => {
74
+ updateComponent(sections);
75
+ };
76
+ const removeField = (section, field) => {
77
+ section.fields = section.fields.filter((x) => x.id !== field.id);
78
+ update();
79
+ };
80
+ const handleDragStart = (event, index, sectionIndex) => {
81
+ event.dataTransfer.setData("text/plain", index.toString());
82
+ event.dataTransfer.effectAllowed = "move";
83
+ //event.currentTarget.style.opacity = "0.5";
84
+ if (sectionIndex === undefined) {
85
+ event.dataTransfer.setData("isSection", "true");
86
+ }
87
+ else {
88
+ event.dataTransfer.setData("sectionIndex", sectionIndex.toString());
89
+ event.dataTransfer.setData("isSection", "false");
90
+ }
91
+ };
92
+ const handleDragOver = (event) => {
93
+ event.preventDefault();
94
+ event.dataTransfer.dropEffect = "move";
95
+ };
96
+ const handleDrop = (event, dropIndex, sectionIndex) => {
97
+ event.preventDefault();
98
+ const dragIndex = parseInt(event.dataTransfer.getData("text/plain"));
99
+ const isSectionDrag = event.dataTransfer.getData("isSection") === "true";
100
+ if (isSectionDrag && sectionIndex === undefined) {
101
+ const newSections = sections;
102
+ const [removed] = newSections.splice(dragIndex, 1);
103
+ newSections.splice(dropIndex, 0, removed);
104
+ updateComponent(newSections);
105
+ }
106
+ else if (!isSectionDrag) {
107
+ const sourceSectionIndex = parseInt(event.dataTransfer.getData("sectionIndex"));
108
+ const sourceSection = sections[sourceSectionIndex];
109
+ const targetSection = sections[sectionIndex ?? dropIndex];
110
+ const sourceFields = sourceSection.fields;
111
+ const targetFields = targetSection.fields;
112
+ const [removed] = sourceFields.splice(dragIndex, 1);
113
+ if (sectionIndex === undefined) {
114
+ targetFields.push(removed);
115
+ }
116
+ else {
117
+ targetFields.splice(dropIndex, 0, removed);
118
+ }
119
+ updateComponent(sections);
120
+ }
121
+ };
122
+ return ((0, jsx_runtime_1.jsx)("div", { className: "p-1", children: sections.map((section, sectionIndex) => {
123
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: " flex gap-1", children: [dragHandle(sectionIndex), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { className: "text-xs", value: section.name, onChange: (e) => {
124
+ section.name = e.target.value;
125
+ update();
126
+ } })] }), section.fields.map((field, fieldIndex) => {
127
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "ml-4 flex gap-2 mt-1 items-center", children: [dragHandle(fieldIndex, sectionIndex), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { className: "text-xs flex-1", value: field.name, onChange: (e) => {
128
+ field.name = e.target.value;
129
+ update();
130
+ } }, "name"), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { filter: true, options: fieldTypes, optionGroupLabel: "name", optionGroupChildren: "fieldTypes", className: "text-xs flex-1", value: field.type, onChange: (e) => {
131
+ field.type = e.target.value;
132
+ update();
133
+ } }, "type"), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { className: "text-xs flex-1", value: field.source, onChange: (e) => {
134
+ field.source = e.target.value;
135
+ update();
136
+ } }, "source"), (0, jsx_runtime_1.jsx)("i", { className: "pi pi-fw pi-times cursor-pointer", onClick: () => removeField(section, field) })] }, field.id || field.key));
137
+ })] }, section.id || section.key));
138
+ }) }));
139
+ function dragHandle(index, sectionIndex) {
140
+ return ((0, jsx_runtime_1.jsx)("div", { draggable: true, onDragStart: (event) => handleDragStart(event, index, sectionIndex), onDragOver: handleDragOver, onDrop: (event) => handleDrop(event, index, sectionIndex),
141
+ // onDragEnd={handleDragEnd}
142
+ className: "cursor-grab text-xs bg-gray-50 text-center p-0.5 border flex justify-center items-center", children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-ellipsis-v" }) }));
143
+ }
144
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDesignerAiContext = createDesignerAiContext;
4
+ const utils_1 = require("../utils");
5
+ function createDesignerAiContext({ editContext, }) {
6
+ return {
7
+ //configuration.services.editorService.baseUrl +
8
+ endpoint: "/alpaca/ai/designerprompt",
9
+ callback: () => {
10
+ editContext.requestRefresh();
11
+ },
12
+ promptData: {
13
+ templateId: editContext.componentDesignerComponent?.templateId,
14
+ renderingId: editContext.componentDesignerRendering?.id,
15
+ contextItem: (0, utils_1.getItemDescriptor)(editContext.page?.item),
16
+ },
17
+ };
18
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidPlaceholder = void 0;
4
+ exports.findComponent = findComponent;
5
+ exports.getComponentById = getComponentById;
6
+ exports.getComponentByIdFromHeadlessLayout = getComponentByIdFromHeadlessLayout;
7
+ exports.getSelectedComponents = getSelectedComponents;
8
+ exports.getComponentByIdWithPlaceholder = getComponentByIdWithPlaceholder;
9
+ exports.findComponentWithPlaceholder = findComponentWithPlaceholder;
10
+ exports.getAllPlaceholders = getAllPlaceholders;
11
+ function findComponent(id, placeholders) {
12
+ if (!placeholders)
13
+ return;
14
+ for (const p of placeholders) {
15
+ for (const c of p.components) {
16
+ if (c.id === id || c.datasourceItem?.id === id) {
17
+ return c;
18
+ }
19
+ if (c.placeholders) {
20
+ const match = findComponent(id, c.placeholders);
21
+ if (match) {
22
+ return match;
23
+ }
24
+ }
25
+ }
26
+ }
27
+ return;
28
+ }
29
+ function getComponentById(id, page) {
30
+ if (!page)
31
+ return;
32
+ return findComponent(id, page.rootComponent.placeholders);
33
+ }
34
+ function getComponentByIdFromHeadlessLayout(id, page) {
35
+ if (!page)
36
+ return;
37
+ return findComponent(id, page.placeholders);
38
+ }
39
+ function getSelectedComponents(editContext) {
40
+ if (!editContext)
41
+ return [];
42
+ const page = editContext.page;
43
+ if (!page)
44
+ return [];
45
+ const selectedComponents = editContext.selection
46
+ .map((x) => getComponentById(x, page))
47
+ .filter((x) => x);
48
+ return selectedComponents.length === 0 ? [] : selectedComponents;
49
+ }
50
+ function getComponentByIdWithPlaceholder(id, page) {
51
+ if (!page)
52
+ return null;
53
+ return findComponentWithPlaceholder(id, page.rootComponent.placeholders);
54
+ }
55
+ function findComponentWithPlaceholder(id, placeholders) {
56
+ if (!placeholders)
57
+ return null;
58
+ for (const p of placeholders) {
59
+ for (const c of p.components) {
60
+ if (c.id === id || c.datasourceItem?.id === id) {
61
+ return { component: c, placeholder: p };
62
+ }
63
+ if (c.placeholders) {
64
+ const match = findComponentWithPlaceholder(id, c.placeholders);
65
+ if (match) {
66
+ return match;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ return null;
72
+ }
73
+ function getAllPlaceholders(page) {
74
+ const placeholders = [];
75
+ const addPlaceholders = (p) => {
76
+ p.forEach((x) => {
77
+ placeholders.push(x);
78
+ if (x.components) {
79
+ x.components.forEach((c) => {
80
+ addPlaceholders(c.placeholders);
81
+ });
82
+ }
83
+ });
84
+ };
85
+ addPlaceholders(page.rootComponent.placeholders);
86
+ return placeholders;
87
+ }
88
+ const isValidPlaceholder = (placeholder, dragObject) => {
89
+ return (placeholder.insertOptions?.find((y) => y.typeId === dragObject.typeId ||
90
+ y.typeId === dragObject?.templateId ||
91
+ y.compatibleTemplates?.find((z) => z == dragObject.typeId) !==
92
+ undefined ||
93
+ y.typeId === dragObject.templateId ||
94
+ y.compatibleTemplates?.find((z) => z == dragObject.templateId) !==
95
+ undefined) !== undefined);
96
+ };
97
+ exports.isValidPlaceholder = isValidPlaceholder;