@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,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ItemEditor = ItemEditor;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const button_1 = require("primereact/button");
6
+ const EditorWarnings_1 = require("../EditorWarnings");
7
+ const FieldList_1 = require("../FieldList");
8
+ const ItemInfo_1 = require("../ItemInfo");
9
+ const editContext_1 = require("../client/editContext");
10
+ function ItemEditor({ item, compareToItem, }) {
11
+ const editContext = (0, editContext_1.useEditContext)();
12
+ if (!editContext)
13
+ return;
14
+ if (!item)
15
+ item = editContext.contentEditorItem;
16
+ if (!item)
17
+ return;
18
+ const pageValidators = editContext.validationResult?.find((x) => x.item.id === item?.id &&
19
+ x.item.language === item?.language &&
20
+ x.item.version === item?.version)?.results || [];
21
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 overflow-y-auto", children: [(0, jsx_runtime_1.jsx)(EditorWarnings_1.EditorWarnings, { item: item }), (0, jsx_runtime_1.jsx)(ItemInfo_1.ItemInfo, { item: item }), editContext.itemVersions.length > 0 && ((0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: [{ fields: Object.values(item.fields) }], validators: pageValidators.filter((x) => x.itemId === item.id), showStandardFieldsEnabled: true, compareToFields: compareToItem?.fields })), editContext.itemVersions.length === 0 && ((0, jsx_runtime_1.jsx)("div", { className: "flex justify-center p-4", children: (0, jsx_runtime_1.jsxs)(button_1.Button, { onClick: async () => {
22
+ await editContext.operations.createVersion(item.descriptor);
23
+ }, children: ["Create First Version (", item.language, ")"] }) }))] }));
24
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SingleEditView = SingleEditView;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_2 = require("react");
7
+ const editContext_1 = require("../client/editContext");
8
+ const PageViewer_1 = require("../page-viewer/PageViewer");
9
+ const ItemEditor_1 = require("./ItemEditor");
10
+ function SingleEditView({ pageViewContext, itemDescriptor, mode, name, }) {
11
+ const editContext = (0, editContext_1.useEditContext)();
12
+ const [item, setItem] = (0, react_1.useState)(undefined);
13
+ (0, react_2.useEffect)(() => {
14
+ async function loadItem() {
15
+ if (!itemDescriptor)
16
+ return;
17
+ const item = await editContext?.itemsRepository.getItem(itemDescriptor);
18
+ setItem(item);
19
+ }
20
+ loadItem();
21
+ }, [itemDescriptor]);
22
+ if ((item && !item.hasLayout) || pageViewContext.device === "")
23
+ return (0, jsx_runtime_1.jsx)(ItemEditor_1.ItemEditor, { item: item });
24
+ return ((0, jsx_runtime_1.jsx)(PageViewer_1.PageViewer, { mode: mode, pageViewContext: pageViewContext, showFormEditor: true, name: name, followEditsDefault: true }));
25
+ }
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.configureForUser = exports.Editor = void 0;
18
+ __exportStar(require("./config/types"), exports);
19
+ var Editor_1 = require("./editor/Editor");
20
+ Object.defineProperty(exports, "Editor", { enumerable: true, get: function () { return Editor_1.Editor; } });
21
+ var config_1 = require("./config/config");
22
+ Object.defineProperty(exports, "configureForUser", { enumerable: true, get: function () { return config_1.configureForUser; } });
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageWizard = PageWizard;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const editContext_1 = require("../editor/client/editContext");
6
+ const SelectWizard_1 = require("./SelectWizard");
7
+ const react_1 = require("react");
8
+ const WizardSteps_1 = require("./WizardSteps");
9
+ const service_1 = require("./service"); // Adjust import as needed
10
+ const navigation_1 = require("next/navigation");
11
+ function PageWizard() {
12
+ const editContext = (0, editContext_1.useEditContext)();
13
+ const [wizard, setWizard] = (0, react_1.useState)(null);
14
+ const [parentItem, setParentItem] = (0, react_1.useState)();
15
+ const searchParams = (0, navigation_1.useSearchParams)();
16
+ // Load all wizards and check URL param on mount
17
+ (0, react_1.useEffect)(() => {
18
+ if (!editContext?.currentItemDescriptor)
19
+ return;
20
+ (0, service_1.getWizards)(editContext?.currentItemDescriptor).then((availableWizards) => {
21
+ // Check for wizard ID in URL
22
+ const params = new URLSearchParams(window.location.search);
23
+ const wizardName = params.get("wizard");
24
+ if (wizardName) {
25
+ // Find wizard by ID from the loaded wizards
26
+ const foundWizard = availableWizards.find((w) => w.name === wizardName);
27
+ if (foundWizard) {
28
+ setWizard(foundWizard);
29
+ setParentItem(editContext.currentItemDescriptor);
30
+ }
31
+ }
32
+ });
33
+ }, [searchParams]);
34
+ const handleSelect = (selectedWizard) => {
35
+ setWizard(selectedWizard);
36
+ // Update URL with wizard ID
37
+ const url = new URL(window.location.href);
38
+ url.searchParams.set("wizard", selectedWizard.name);
39
+ window.history.pushState({}, "", url);
40
+ };
41
+ const handleCancel = () => {
42
+ setWizard(null);
43
+ // Remove wizard from URL
44
+ const url = new URL(window.location.href);
45
+ url.searchParams.delete("wizard");
46
+ window.history.pushState({}, "", url);
47
+ editContext?.switchView("content-editor");
48
+ };
49
+ if (!editContext?.currentItemDescriptor)
50
+ return null;
51
+ if (!wizard) {
52
+ return ((0, jsx_runtime_1.jsx)("div", { className: "fixed inset-0 z-1000 bg-white", children: (0, jsx_runtime_1.jsx)(SelectWizard_1.SelectWizard, { parentItem: parentItem, setParentItem: setParentItem, onSelect: handleSelect }) }));
53
+ }
54
+ if (!parentItem)
55
+ return null;
56
+ return ((0, jsx_runtime_1.jsx)("div", { className: "fixed inset-0 z-1000 bg-white text-gray-950", children: (0, jsx_runtime_1.jsx)(WizardSteps_1.WizardSteps, { wizard: wizard, onCancel: handleCancel, parentItem: parentItem, onLanguageSelected: (language) => {
57
+ setParentItem({
58
+ ...parentItem,
59
+ language: language.languageCode,
60
+ });
61
+ } }) }));
62
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectWizard = SelectWizard;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const service_1 = require("./service");
7
+ const ScrollingContentTree_1 = require("../editor/ScrollingContentTree");
8
+ const Splitter_1 = require("../editor/ui/Splitter");
9
+ const Icons_1 = require("../editor/ui/Icons");
10
+ const SimpleIconButton_1 = require("../editor/ui/SimpleIconButton");
11
+ const editContext_1 = require("../editor/client/editContext");
12
+ function SelectWizard({ parentItem, setParentItem, onSelect, }) {
13
+ const editContext = (0, editContext_1.useEditContext)();
14
+ const [wizards, setWizards] = (0, react_1.useState)([]);
15
+ (0, react_1.useEffect)(() => {
16
+ const fetchWizards = async () => {
17
+ if (!parentItem)
18
+ return;
19
+ const wizards = await (0, service_1.getWizards)(parentItem);
20
+ setWizards(wizards);
21
+ };
22
+ fetchWizards();
23
+ }, [parentItem]);
24
+ const treePanel = {
25
+ name: "tree",
26
+ defaultSize: 450,
27
+ content: ((0, jsx_runtime_1.jsx)("div", { className: "flex h-full gap-2", children: (0, jsx_runtime_1.jsx)(ScrollingContentTree_1.ScrollingContentTree, { selectedItemId: parentItem?.id, onSelectionChange: (x) => {
28
+ setParentItem({
29
+ ...parentItem,
30
+ id: x.id,
31
+ language: x.language,
32
+ version: x.version,
33
+ });
34
+ } }) })),
35
+ };
36
+ const wizardPanel = {
37
+ name: "wizard",
38
+ defaultSize: "auto",
39
+ collapsible: false,
40
+ content: ((0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-2 overflow-auto", children: [!parentItem && ((0, jsx_runtime_1.jsx)("div", { className: "flex h-full items-center justify-center text-center text-gray-500", children: "Select a parent item on the left!" })), parentItem && wizards?.length === 0 && ((0, jsx_runtime_1.jsx)("div", { className: "text-center text-gray-500", children: "No wizards found" })), parentItem && wizards.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "mx-2 flex flex-wrap gap-3", children: wizards.map((wizard) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex cursor-pointer items-center gap-2 rounded-md border border-gray-300 p-4 hover:bg-gray-100", onClick: () => onSelect(wizard), children: [(0, jsx_runtime_1.jsx)("img", { src: wizard.icon, alt: wizard.name, className: "h-10 w-10" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-lg", children: wizard.name }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm", children: wizard.description })] })] }, wizard.id))) }))] })),
41
+ };
42
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex h-full flex-col", children: [(0, jsx_runtime_1.jsxs)("h1", { className: "bg-shape-black flex w-full items-center gap-2 p-4 text-xl font-bold text-white", children: [(0, jsx_runtime_1.jsx)(Icons_1.PageWizardLogo, {}), "Select Wizard", (0, jsx_runtime_1.jsx)(SimpleIconButton_1.SimpleIconButton, { icon: "pi pi-times", className: "ml-auto", onClick: () => editContext?.switchView("editor"), label: "Cancel" })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex gap-2 bg-gray-100 px-4 py-3 text-sm text-gray-600", children: "First select a parent item, then select a wizard to create a new page." }), (0, jsx_runtime_1.jsx)(Splitter_1.Splitter, { panels: [treePanel, wizardPanel] })] }));
43
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WizardSteps = WizardSteps;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const button_1 = require("primereact/button");
7
+ const Icons_1 = require("../editor/ui/Icons");
8
+ const SimpleIconButton_1 = require("../editor/ui/SimpleIconButton");
9
+ const react_dom_1 = require("react-dom");
10
+ const editContext_1 = require("../editor/client/editContext");
11
+ const utils_1 = require("primereact/utils");
12
+ // import { LanguageSelector } from "../editor/menubar/LanguageSelector";
13
+ function WizardSteps({ wizard, onCancel, parentItem, }) {
14
+ const [currentStepIndex, setCurrentStepIndex] = (0, react_1.useState)(0);
15
+ const [data, setData] = (0, react_1.useState)({});
16
+ const [pageModel, setPageModel] = (0, react_1.useState)({
17
+ components: [],
18
+ name: "",
19
+ metaDescription: "",
20
+ metaKeywords: "",
21
+ });
22
+ const editContext = (0, editContext_1.useEditContext)();
23
+ const [internalState, setInternalState] = (0, react_1.useState)({});
24
+ const [stepCompleted, setStepCompleted] = (0, react_1.useState)(-1);
25
+ const getCurrentStep = () => {
26
+ const step = wizard.steps[currentStepIndex];
27
+ if (!step)
28
+ return null;
29
+ const type = step.type;
30
+ const stepId = step.id;
31
+ if (!type)
32
+ throw new Error("Step type is required");
33
+ // Extract component name by removing "Page Wizard" prefix and spaces
34
+ const componentName = type.replace("Page Wizard ", "").replace(/\s+/g, "");
35
+ const config = editContext?.configuration;
36
+ if (!config)
37
+ return null;
38
+ // Get the appropriate component based on the extracted name
39
+ const StepComponent = config.pageWizard.stepComponents[componentName];
40
+ if (StepComponent) {
41
+ return ((0, jsx_runtime_1.jsx)(StepComponent, { step: wizard.steps[currentStepIndex], data: data, setData: setData, setPageModel: setPageModel, pageModel: pageModel, wizard: wizard, setStepCompleted: (completed) => {
42
+ if (completed) {
43
+ setStepCompleted((prev) => Math.max(prev, currentStepIndex));
44
+ }
45
+ else {
46
+ setStepCompleted(currentStepIndex - 1);
47
+ }
48
+ }, internalState: internalState, setInternalState: setInternalState, parentItem: parentItem }, stepId));
49
+ }
50
+ return null;
51
+ };
52
+ const switchStep = (index) => {
53
+ document.startViewTransition(() => {
54
+ (0, react_dom_1.flushSync)(() => {
55
+ setCurrentStepIndex(index);
56
+ });
57
+ });
58
+ };
59
+ const currentStep = wizard.steps[currentStepIndex];
60
+ if (!currentStep)
61
+ return null;
62
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col flex-1 h-full justify-stretch ", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col border-b border-gray-200 bg-gray-100 flex-1", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2 items-center bg-shape-black text-white p-4 py-4", children: [(0, jsx_runtime_1.jsx)(Icons_1.PageWizardLogo, {}), " ", (0, jsx_runtime_1.jsx)("h1", { className: "text-xl font-bold text-white", children: wizard.name }), wizard.description && ((0, jsx_runtime_1.jsxs)("div", { className: "text-gray-200", children: ["- ", wizard.description] })), (0, jsx_runtime_1.jsx)(SimpleIconButton_1.SimpleIconButton, { icon: "pi pi-times", className: "ml-auto", onClick: onCancel, label: "Cancel" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2 flex-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex flex-col animate-fadeLeft transition-all duration-900 bg-white", children: (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col text-sm text-gray-500 px-5 py-4", children: wizard.steps.map((step, index) => ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.classNames)("flex gap-4 items-center mb-5", currentStepIndex > index && "cursor-pointer"), onClick: () => index < currentStepIndex ? switchStep(index) : undefined, children: [(0, jsx_runtime_1.jsx)("span", { className: (0, utils_1.classNames)("border-2 rounded-full w-7 h-7 p-2 flex items-center justify-center text-xs font-medium text-activeStepColor", currentStepIndex >= index
63
+ ? "border-canvas-red text-canvas-red"
64
+ : "border-gray-400"), children: index + 1 }), (0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.classNames)("w-auto opacity-100", currentStepIndex === index
65
+ ? "text-canvas-red font-semibold text-base"
66
+ : currentStepIndex >= index
67
+ ? "text-gray-600 text-sm"
68
+ : "text-gray-400 text-sm"), children: step.name })] }, step.id))) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 flex flex-col px-8 pt-9 bg-secondary lg:pr-20 xl:pr-32 container animate-fadeIn transition-all duration-500", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-4xl font-semibold", children: currentStep?.name }), currentStep?.description && ((0, jsx_runtime_1.jsx)("div", { className: "text-base mt-2 font-light", children: currentStep.description })), (0, jsx_runtime_1.jsx)("div", { className: "flex-1 pt-8", children: getCurrentStep() })] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between border-t border-gray-200 p-3", children: [(0, jsx_runtime_1.jsx)("div", { children: currentStepIndex > 0 && ((0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-arrow-left mr-2", onClick: () => switchStep(currentStepIndex - 1), disabled: currentStepIndex === 0, children: wizard.steps[currentStepIndex - 1]?.name })) }), (0, jsx_runtime_1.jsxs)("div", { children: [currentStepIndex < wizard.steps.length - 1 && ((0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-arrow-right mr-2", disabled: stepCompleted < currentStepIndex, onClick: () => switchStep(currentStepIndex + 1), children: wizard.steps[currentStepIndex + 1]?.name })), currentStepIndex === wizard.steps.length - 1 && ((0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-check", disabled: stepCompleted < currentStepIndex, onClick: () => {
69
+ editContext?.switchView("editor");
70
+ }, label: "Finish", className: "ml-2" }))] })] })] }));
71
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWizards = getWizards;
4
+ exports.createWizardAiContext = createWizardAiContext;
5
+ exports.wipeComponents = wipeComponents;
6
+ const serviceHelper_1 = require("../editor/services/serviceHelper");
7
+ async function getWizards(parentItem) {
8
+ const result = await (0, serviceHelper_1.post)("/alpaca/editor/page-wizard/wizards", parentItem);
9
+ return result.data;
10
+ }
11
+ function createWizardAiContext({ editContext, }) {
12
+ const aiPromptUrl = "/alpaca/editor/page-wizard/prompt";
13
+ return {
14
+ // configuration.services.editorService.baseUrl +
15
+ endpoint: aiPromptUrl,
16
+ promptData: {
17
+ itemid: editContext.currentItemDescriptor?.id,
18
+ language: editContext.currentItemDescriptor?.language,
19
+ version: editContext.currentItemDescriptor?.version,
20
+ },
21
+ };
22
+ }
23
+ async function wipeComponents(pageItem) {
24
+ const result = await (0, serviceHelper_1.post)("/alpaca/editor/page-wizard/wipePage", pageItem);
25
+ return result.data;
26
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startPageWizardCommand = void 0;
4
+ exports.startPageWizardCommand = {
5
+ id: "startWizard",
6
+ label: "Start Wizard",
7
+ icon: "pi pi-magic",
8
+ execute: async (context) => {
9
+ if (!context.data?.item)
10
+ return;
11
+ await context.editContext.loadItem(context.data.item);
12
+ // Add wizard name to URL
13
+ if (context.data?.wizard) {
14
+ await context.editContext.updateUrl({
15
+ wizard: context.data.wizard.name,
16
+ view: "page-wizard",
17
+ });
18
+ }
19
+ },
20
+ disabled: () => {
21
+ return false;
22
+ },
23
+ };
@@ -0,0 +1,138 @@
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.BuildPageStep = BuildPageStep;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const Splitter_1 = require("../../editor/ui/Splitter");
9
+ const editContext_1 = require("../../editor/client/editContext");
10
+ const react_1 = require("react");
11
+ const PageViewer_1 = require("../../editor/page-viewer/PageViewer");
12
+ const use_debounce_1 = require("use-debounce");
13
+ const contentService_1 = require("../../editor/services/contentService");
14
+ const ActionButton_1 = require("../../components/ActionButton");
15
+ const Generate_1 = __importDefault(require("./Generate"));
16
+ const usePageCreator_1 = require("./usePageCreator");
17
+ function BuildPageStep({ data, setData, parentItem, wizard, setStepCompleted, }) {
18
+ const editContext = (0, editContext_1.useEditContext)();
19
+ const [createdPageDescriptor, setCreatedPageDescriptor] = (0, react_1.useState)();
20
+ const [pageLoaded, setPageLoaded] = (0, react_1.useState)(false);
21
+ const [fullParentItem, setFullParentItem] = (0, react_1.useState)();
22
+ const [isBuilding, setIsBuilding] = (0, react_1.useState)(false);
23
+ const [validationMessage, setValidationMessage] = (0, react_1.useState)();
24
+ (0, react_1.useEffect)(() => {
25
+ if (createdPageDescriptor &&
26
+ createdPageDescriptor.id === editContext?.page?.item?.descriptor.id)
27
+ setPageLoaded(true);
28
+ }, [editContext?.page]);
29
+ (0, react_1.useEffect)(() => {
30
+ const loadParentItem = async () => {
31
+ if (!parentItem)
32
+ return;
33
+ const item = await editContext?.itemsRepository.getItem(parentItem);
34
+ setFullParentItem(item);
35
+ };
36
+ loadParentItem();
37
+ }, [parentItem]);
38
+ (0, react_1.useEffect)(() => {
39
+ const buildComponents = async () => {
40
+ try {
41
+ console.log("Building components", createdPageDescriptor, editContext?.page);
42
+ // Recursively create components from page model
43
+ if (pageModel.components && pageModel.components.length > 0) {
44
+ await pageCreator.createComponentsRecursively(pageModel.components, "root");
45
+ }
46
+ editContext?.requestRefresh();
47
+ console.log("Components built", createdPageDescriptor, editContext?.page);
48
+ }
49
+ finally {
50
+ setIsBuilding(false);
51
+ }
52
+ };
53
+ if (pageLoaded) {
54
+ buildComponents();
55
+ }
56
+ }, [pageLoaded]);
57
+ // Initialize pageModel if it doesn't exist
58
+ const pageModel = data.pageModel || {
59
+ components: [],
60
+ name: "",
61
+ metaDescription: "",
62
+ };
63
+ // Handle input changes
64
+ const handleInputChange = (field, value) => {
65
+ const updatedPageModel = {
66
+ ...pageModel,
67
+ [field]: value,
68
+ };
69
+ setData({
70
+ ...data,
71
+ pageModel: updatedPageModel,
72
+ });
73
+ };
74
+ const checkName = async () => {
75
+ if (!parentItem)
76
+ return;
77
+ let valid = !!wizard.templateId && pageModel.name.trim().length >= 3;
78
+ if (valid) {
79
+ const children = await (0, contentService_1.getChildren)(parentItem.id, editContext?.sessionId ?? "", [], false, editContext?.contentEditorItem?.language || "en");
80
+ if (children.find((x) => x.name.toLocaleLowerCase() ===
81
+ pageModel.name.trim().toLocaleLowerCase())) {
82
+ valid = false;
83
+ setValidationMessage("A page with this name already exists.");
84
+ }
85
+ }
86
+ else {
87
+ if (pageModel.name.trim().length > 0 && pageModel.name.trim().length < 3)
88
+ setValidationMessage("Name is too short.");
89
+ else
90
+ setValidationMessage(undefined);
91
+ }
92
+ if (valid)
93
+ setValidationMessage(undefined);
94
+ return valid;
95
+ };
96
+ const checkNameValidDebounced = (0, use_debounce_1.useDebouncedCallback)(async () => checkName(), 500);
97
+ (0, react_1.useEffect)(() => {
98
+ checkNameValidDebounced();
99
+ }, [pageModel.name]);
100
+ const createPage = () => {
101
+ setTimeout(async () => {
102
+ if (!editContext || !parentItem)
103
+ return;
104
+ try {
105
+ if (!(await checkName()))
106
+ return;
107
+ setIsBuilding(true);
108
+ const result = await editContext.operations.createItem(parentItem, wizard.templateId, pageModel.name);
109
+ if (!result)
110
+ return;
111
+ editContext?.loadItem(result, { addToBrowseHistory: true });
112
+ setCreatedPageDescriptor(result);
113
+ console.log("Page created", result, "Page model", pageModel);
114
+ setStepCompleted(true);
115
+ }
116
+ catch (error) {
117
+ console.error("Error creating page", error);
118
+ setIsBuilding(false);
119
+ }
120
+ }, 1);
121
+ };
122
+ const pageCreator = (0, usePageCreator_1.usePageCreator)(createdPageDescriptor, wizard, (pageModel) => setData({ ...data, pageModel }));
123
+ const settingsPanel = {
124
+ name: "settings",
125
+ defaultSize: 450,
126
+ collapsible: false,
127
+ content: ((0, jsx_runtime_1.jsxs)("div", { className: "pr-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-medium mb-1", children: "Target Parent Item" }), (0, jsx_runtime_1.jsx)("div", { className: "mb-4 text-xs break-after-all", children: fullParentItem?.path })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "pageName", className: "block text-sm font-medium mb-1", children: "Page Name" }), (0, jsx_runtime_1.jsx)("input", { id: "pageName", type: "text", className: "w-full p-2 border rounded text-sm", value: pageModel.name, onChange: (e) => handleInputChange("name", e.target.value), placeholder: "Enter page name" }), validationMessage && ((0, jsx_runtime_1.jsx)("div", { className: "mt-2 text-sm text-red-500", children: validationMessage }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "metaDescription", className: "block text-sm font-medium mb-1", children: "Meta Description" }), (0, jsx_runtime_1.jsx)("textarea", { id: "metaDescription", className: "w-full p-2 border rounded min-h-[100px] text-sm", value: pageModel.metaDescription, onChange: (e) => handleInputChange("metaDescription", e.target.value), placeholder: "Enter meta description" })] }), (0, jsx_runtime_1.jsx)(ActionButton_1.ActionButton, { disabled: isBuilding || !!validationMessage, className: "flex-1 w-full", onClick: () => {
128
+ createPage();
129
+ }, isLoading: isBuilding, loadingText: "Working", children: "Create Page" })] })),
130
+ };
131
+ const contentPanel = {
132
+ name: "content",
133
+ defaultSize: "auto",
134
+ collapsible: false,
135
+ content: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: pageLoaded ? "h-full" : "h-0", children: (0, jsx_runtime_1.jsx)(PageViewer_1.PageViewer, { name: "single", mode: editContext?.previewMode ? "view" : "edit", showFormEditor: false, followEditsDefault: true, pageViewContext: editContext.pageView }) }), isBuilding && !pageLoaded && ((0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-full", children: (0, jsx_runtime_1.jsx)(Generate_1.default, { title: "Building page..." }) }))] })),
136
+ };
137
+ return (0, jsx_runtime_1.jsx)(Splitter_1.Splitter, { panels: [settingsPanel, contentPanel] });
138
+ }
@@ -0,0 +1,124 @@
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.CollectStep = CollectStep;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const inputtext_1 = require("primereact/inputtext");
9
+ const react_1 = require("react");
10
+ const Splitter_1 = require("../../editor/ui/Splitter");
11
+ const react_md_editor_1 = __importDefault(require("@uiw/react-md-editor"));
12
+ const ActionButton_1 = require("../../components/ActionButton");
13
+ const Icons_1 = require("../../editor/ui/Icons");
14
+ const Spinner_1 = require("../../editor/ui/Spinner");
15
+ function CollectStep({ data, setData, setStepCompleted, }) {
16
+ const [isUploading, setIsUploading] = (0, react_1.useState)(false);
17
+ const [isScraping, setIsScraping] = (0, react_1.useState)(false);
18
+ const [error, setError] = (0, react_1.useState)(null);
19
+ const [scrapeError, setScrapeError] = (0, react_1.useState)(null);
20
+ const [scrapeUrl, setScrapeUrl] = (0, react_1.useState)(null);
21
+ const fileInputRef = (0, react_1.useRef)(null);
22
+ const handleDrop = (e) => {
23
+ e.preventDefault();
24
+ e.stopPropagation();
25
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
26
+ uploadFile(e.dataTransfer.files[0]);
27
+ setError(null);
28
+ }
29
+ };
30
+ (0, react_1.useEffect)(() => {
31
+ if (data.htmlContent) {
32
+ setStepCompleted(true);
33
+ }
34
+ }, [data.htmlContent]);
35
+ const uploadFile = async (file) => {
36
+ if (!file) {
37
+ setError("Please select a file first");
38
+ return;
39
+ }
40
+ try {
41
+ setIsUploading(true);
42
+ setError(null);
43
+ const formData = new FormData();
44
+ formData.append("uploadedFile", file);
45
+ const response = await fetch("/alpaca/editor/page-wizard/convertFile", {
46
+ method: "POST",
47
+ body: formData,
48
+ });
49
+ if (!response.ok) {
50
+ throw new Error(`Upload failed: ${response.status} ${response.statusText}`);
51
+ }
52
+ const htmlContent = await response.text();
53
+ setData((prev) => ({
54
+ ...prev,
55
+ htmlContent: htmlContent,
56
+ }));
57
+ }
58
+ catch (err) {
59
+ setError(err instanceof Error ? err.message : "Unknown error occurred");
60
+ }
61
+ finally {
62
+ setIsUploading(false);
63
+ }
64
+ };
65
+ const triggerFileInput = () => {
66
+ fileInputRef.current ? (fileInputRef.current.value = "") : "";
67
+ fileInputRef.current?.click();
68
+ };
69
+ const handleScrape = async (e) => {
70
+ e.preventDefault();
71
+ try {
72
+ setScrapeError(null);
73
+ if (!scrapeUrl) {
74
+ setScrapeError("Please enter a URL first");
75
+ return;
76
+ }
77
+ setIsScraping(true);
78
+ const response = await fetch("/alpaca/editor/page-wizard/scrape", {
79
+ method: "POST",
80
+ body: JSON.stringify({ url: scrapeUrl }),
81
+ headers: {
82
+ "Content-Type": "application/json",
83
+ },
84
+ });
85
+ if (!response.ok) {
86
+ throw new Error(`Scraping failed: ${response.status} ${response.statusText}`);
87
+ }
88
+ const htmlContent = await response.text();
89
+ setData((prev) => ({
90
+ ...prev,
91
+ htmlContent: htmlContent,
92
+ }));
93
+ }
94
+ catch (err) {
95
+ setScrapeError(err instanceof Error ? err.message : "Unknown error occurred");
96
+ }
97
+ finally {
98
+ setIsScraping(false);
99
+ }
100
+ };
101
+ const uploadPanel = {
102
+ name: "upload",
103
+ defaultSize: 300,
104
+ collapsible: false,
105
+ content: ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-6 items-stretch p-2 6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-semibold text-gray-700", children: "Upload a file" }), (0, jsx_runtime_1.jsx)("div", { className: `h-40 w-40 border border-dashed border-gray-300 flex flex-col justify-center items-center p-5 ${isUploading ? "bg-gray-200" : "bg-white"}`, onDrop: handleDrop, onDragOver: (e) => e.preventDefault(), children: (0, jsx_runtime_1.jsxs)("div", { className: "text-sm font-medium flex flex-col justify-center items-center text-center gap-1", children: [!isUploading && (0, jsx_runtime_1.jsx)(Icons_1.UploadCloudIcon, {}), isUploading && (0, jsx_runtime_1.jsx)(Spinner_1.Spinner, {}), (0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, type: "file", multiple: true, accept: ".pdf,.doc,.docx", style: { display: "none" }, onChange: (e) => {
106
+ const file = e.target.files?.[0];
107
+ if (file) {
108
+ uploadFile(file);
109
+ }
110
+ }, onDrop: handleDrop, disabled: isUploading }), "Drag & Drop to upload or", (0, jsx_runtime_1.jsx)("span", { className: `text-sm font-medium ${isUploading
111
+ ? "text-gray-500"
112
+ : "text-canvas-pink underline cursor-pointer"} `, onClick: triggerFileInput, children: "browse" })] }) })] }), error && ((0, jsx_runtime_1.jsx)("div", { className: "text-red-500 text-sm mt-2", children: error })), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-sm font-semibold text-gray-700", children: "Scrape page from URL" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { type: "text", className: "border border-gray-300 rounded-md px-3 py-2", onChange: (e) => setScrapeUrl(e.target.value) }), scrapeError && ((0, jsx_runtime_1.jsx)("div", { className: "text-red-500 text-sm mt-2", children: scrapeError })), (0, jsx_runtime_1.jsx)("div", { className: "flex gap-2", children: (0, jsx_runtime_1.jsx)(ActionButton_1.ActionButton, { type: "submit", isLoading: isScraping, onClick: handleScrape, loadingText: "Scraping...", children: "Scrape" }) })] })] })),
113
+ };
114
+ const resultPanel = {
115
+ name: "result",
116
+ defaultSize: "auto",
117
+ collapsible: false,
118
+ content: ((0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 w-full h-full px-4 pb-4", children: (0, jsx_runtime_1.jsx)(react_md_editor_1.default, { height: "100%", className: "max-h-full", value: data.htmlContent, preview: "edit", enableScroll: true, onChange: (val) => setData((prev) => ({
119
+ ...prev,
120
+ htmlContent: val || "",
121
+ })) }) })),
122
+ };
123
+ return ((0, jsx_runtime_1.jsx)(Splitter_1.Splitter, { localStorageKey: "editor.page-wizard.panels", panels: [uploadPanel, resultPanel] }));
124
+ }