@alpaca-headless/alpaca-headless-nextjs 1.0.26 → 1.0.128

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 (238) hide show
  1. package/dist/cjs/client-components/ClientLink.js +36 -0
  2. package/dist/cjs/client-components/MultiComponentEditor.js +26 -0
  3. package/dist/cjs/client-components/index.js +19 -0
  4. package/dist/cjs/components/Link.js +1 -1
  5. package/dist/cjs/components/LinkEditor.js +47 -1
  6. package/dist/cjs/components/Picture.js +14 -12
  7. package/dist/cjs/components/PictureEditor.js +22 -18
  8. package/dist/cjs/components/Placeholder.js +51 -9
  9. package/dist/cjs/components/RichText.js +1 -1
  10. package/dist/cjs/components/RichTextEditor.js +17 -2
  11. package/dist/cjs/components/TextEditor.js +15 -3
  12. package/dist/cjs/components/Translate.js +1 -1
  13. package/dist/cjs/{editor → components}/TranslateEditor.js +5 -2
  14. package/dist/cjs/editor/AiPopup.js +33 -0
  15. package/dist/cjs/editor/AiTerminal.js +42 -18
  16. package/dist/cjs/editor/ComponentInfo.js +4 -3
  17. package/dist/cjs/editor/ComponentPalette.js +12 -68
  18. package/dist/cjs/editor/ComponentTree.js +76 -59
  19. package/dist/cjs/editor/ConfirmationDialog.js +31 -0
  20. package/dist/cjs/editor/ContentTree.js +144 -49
  21. package/dist/cjs/editor/Debug.js +12 -2
  22. package/dist/cjs/editor/DialogButtons.js +7 -0
  23. package/dist/cjs/editor/DictionaryEditor.js +14 -8
  24. package/dist/cjs/editor/EditFrame.js +88 -20
  25. package/dist/cjs/editor/EditHistory.js +17 -4
  26. package/dist/cjs/editor/Editor.js +1 -1
  27. package/dist/cjs/editor/EditorClient.js +506 -237
  28. package/dist/cjs/editor/EditorClientHost.js +2 -2
  29. package/dist/cjs/editor/FieldList.js +30 -43
  30. package/dist/cjs/editor/FieldListField.js +75 -0
  31. package/dist/cjs/editor/FloatingToolbar.js +92 -0
  32. package/dist/cjs/editor/GraphQL.js +4 -6
  33. package/dist/cjs/editor/ItemEditor.js +9 -0
  34. package/dist/cjs/editor/ItemInfo.js +17 -0
  35. package/dist/cjs/editor/ItemNameDialog.js +37 -0
  36. package/dist/cjs/editor/LanguageSelector.js +1 -1
  37. package/dist/cjs/editor/LinkEditorDialog.js +67 -0
  38. package/dist/cjs/editor/MainLayout.js +24 -0
  39. package/dist/cjs/editor/MediaSelector.js +44 -13
  40. package/dist/cjs/editor/PictureEditorDialog.js +93 -0
  41. package/dist/cjs/editor/PlaceholderDropZone.js +48 -9
  42. package/dist/cjs/editor/SidebarTabs.js +47 -0
  43. package/dist/cjs/editor/Terminal.js +21 -11
  44. package/dist/cjs/editor/Utils.js +43 -0
  45. package/dist/cjs/editor/VersionSelector.js +1 -1
  46. package/dist/cjs/editor/Workbox.js +41 -0
  47. package/dist/cjs/editor/componentCommands.js +141 -0
  48. package/dist/cjs/editor/contentService.js +45 -3
  49. package/dist/cjs/editor/editContext.js +9 -4
  50. package/dist/cjs/editor/editService.js +187 -3
  51. package/dist/cjs/editor/fieldTypes/CheckboxEditor.js +21 -0
  52. package/dist/cjs/editor/fieldTypes/InternalLinkFieldEditor.js +46 -0
  53. package/dist/cjs/editor/fieldTypes/LinkFieldEditor.js +55 -0
  54. package/dist/cjs/editor/fieldTypes/MultiLineText.js +25 -0
  55. package/dist/cjs/editor/fieldTypes/PictureFieldEditor.js +19 -0
  56. package/dist/cjs/editor/fieldTypes/RichTextEditor.js +9 -4
  57. package/dist/cjs/editor/fieldTypes/SingleLineText.js +12 -4
  58. package/dist/cjs/editor/fieldTypes/TreeListEditor.js +59 -0
  59. package/dist/cjs/editor/ui/Section.js +8 -0
  60. package/dist/cjs/loadRouteData.js +24 -14
  61. package/dist/cjs/middleware/authorization.js +52 -0
  62. package/dist/cjs/middleware/index.js +17 -0
  63. package/dist/editor.css +552 -74
  64. package/dist/primereact/resources/themes/arya-blue/theme.css +103 -91
  65. package/dist/primereact/resources/themes/arya-green/theme.css +103 -91
  66. package/dist/primereact/resources/themes/arya-orange/theme.css +103 -91
  67. package/dist/primereact/resources/themes/arya-purple/theme.css +103 -91
  68. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +103 -91
  69. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +103 -91
  70. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +102 -90
  71. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +102 -90
  72. package/dist/primereact/resources/themes/fluent-light/theme.css +103 -91
  73. package/dist/primereact/resources/themes/lara-dark-amber/fonts/Inter-italic.var.woff2 +0 -0
  74. package/dist/primereact/resources/themes/lara-dark-amber/fonts/Inter-roman.var.woff2 +0 -0
  75. package/dist/primereact/resources/themes/lara-dark-amber/theme.css +6049 -0
  76. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +1006 -955
  77. package/dist/primereact/resources/themes/lara-dark-cyan/fonts/Inter-italic.var.woff2 +0 -0
  78. package/dist/primereact/resources/themes/lara-dark-cyan/fonts/Inter-roman.var.woff2 +0 -0
  79. package/dist/primereact/resources/themes/lara-dark-cyan/theme.css +6049 -0
  80. package/dist/primereact/resources/themes/lara-dark-green/fonts/Inter-italic.var.woff2 +0 -0
  81. package/dist/primereact/resources/themes/lara-dark-green/fonts/Inter-roman.var.woff2 +0 -0
  82. package/dist/primereact/resources/themes/lara-dark-green/theme.css +6049 -0
  83. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +1006 -955
  84. package/dist/primereact/resources/themes/lara-dark-pink/fonts/Inter-italic.var.woff2 +0 -0
  85. package/dist/primereact/resources/themes/lara-dark-pink/fonts/Inter-roman.var.woff2 +0 -0
  86. package/dist/primereact/resources/themes/lara-dark-pink/theme.css +6049 -0
  87. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +1006 -955
  88. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +1006 -955
  89. package/dist/primereact/resources/themes/lara-light-amber/fonts/Inter-italic.var.woff2 +0 -0
  90. package/dist/primereact/resources/themes/lara-light-amber/fonts/Inter-roman.var.woff2 +0 -0
  91. package/dist/primereact/resources/themes/lara-light-amber/theme.css +6041 -0
  92. package/dist/primereact/resources/themes/lara-light-blue/theme.css +842 -799
  93. package/dist/primereact/resources/themes/lara-light-cyan/fonts/Inter-italic.var.woff2 +0 -0
  94. package/dist/primereact/resources/themes/lara-light-cyan/fonts/Inter-roman.var.woff2 +0 -0
  95. package/dist/primereact/resources/themes/lara-light-cyan/theme.css +6041 -0
  96. package/dist/primereact/resources/themes/lara-light-green/fonts/Inter-italic.var.woff2 +0 -0
  97. package/dist/primereact/resources/themes/lara-light-green/fonts/Inter-roman.var.woff2 +0 -0
  98. package/dist/primereact/resources/themes/lara-light-green/theme.css +6041 -0
  99. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +842 -799
  100. package/dist/primereact/resources/themes/lara-light-pink/fonts/Inter-italic.var.woff2 +0 -0
  101. package/dist/primereact/resources/themes/lara-light-pink/fonts/Inter-roman.var.woff2 +0 -0
  102. package/dist/primereact/resources/themes/lara-light-pink/theme.css +6041 -0
  103. package/dist/primereact/resources/themes/lara-light-purple/theme.css +842 -799
  104. package/dist/primereact/resources/themes/lara-light-teal/theme.css +1115 -1072
  105. package/dist/primereact/resources/themes/luna-amber/theme.css +103 -91
  106. package/dist/primereact/resources/themes/luna-blue/theme.css +103 -91
  107. package/dist/primereact/resources/themes/luna-green/theme.css +103 -91
  108. package/dist/primereact/resources/themes/luna-pink/theme.css +103 -91
  109. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +147 -135
  110. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +147 -135
  111. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +147 -135
  112. package/dist/primereact/resources/themes/md-light-indigo/theme.css +147 -135
  113. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +147 -135
  114. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +147 -135
  115. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +147 -135
  116. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +147 -135
  117. package/dist/primereact/resources/themes/mira/theme.css +108 -91
  118. package/dist/primereact/resources/themes/nano/theme.css +107 -91
  119. package/dist/primereact/resources/themes/nova/theme.css +103 -91
  120. package/dist/primereact/resources/themes/nova-accent/theme.css +103 -91
  121. package/dist/primereact/resources/themes/nova-alt/theme.css +103 -91
  122. package/dist/primereact/resources/themes/rhea/theme.css +103 -91
  123. package/dist/primereact/resources/themes/saga-blue/theme.css +103 -91
  124. package/dist/primereact/resources/themes/saga-green/theme.css +103 -91
  125. package/dist/primereact/resources/themes/saga-orange/theme.css +103 -91
  126. package/dist/primereact/resources/themes/saga-purple/theme.css +103 -91
  127. package/dist/primereact/resources/themes/soho-dark/theme.css +108 -91
  128. package/dist/primereact/resources/themes/soho-light/theme.css +108 -91
  129. package/dist/primereact/resources/themes/vela-blue/theme.css +103 -91
  130. package/dist/primereact/resources/themes/vela-green/theme.css +103 -91
  131. package/dist/primereact/resources/themes/vela-orange/theme.css +103 -91
  132. package/dist/primereact/resources/themes/vela-purple/theme.css +103 -91
  133. package/dist/primereact/resources/themes/viva-dark/theme.css +103 -91
  134. package/dist/primereact/resources/themes/viva-light/theme.css +103 -91
  135. package/package.json +29 -16
  136. package/tailwind.config.js +9 -2
  137. package/types/client-components/ClientLink.d.ts +6 -0
  138. package/types/client-components/MultiComponentEditor.d.ts +10 -0
  139. package/types/client-components/index.d.ts +2 -0
  140. package/types/components/Picture.d.ts +1 -0
  141. package/types/components/Placeholder.d.ts +16 -2
  142. package/types/components/RichTextEditor.d.ts +55 -55
  143. package/types/components/TextEditor.d.ts +54 -54
  144. package/types/editor/AiPopup.d.ts +10 -0
  145. package/types/editor/AiTerminal.d.ts +4 -3
  146. package/types/editor/ComponentPalette.d.ts +3 -4
  147. package/types/editor/ComponentTree.d.ts +1 -1
  148. package/types/editor/ConfirmationDialog.d.ts +19 -0
  149. package/types/editor/ContentTree.d.ts +7 -3
  150. package/types/editor/Debug.d.ts +1 -1
  151. package/types/editor/DialogButtons.d.ts +4 -0
  152. package/types/editor/DictionaryEditor.d.ts +3 -2
  153. package/types/editor/EditFrame.d.ts +4 -3
  154. package/types/editor/EditorClient.d.ts +4 -4
  155. package/types/editor/EditorClientHost.d.ts +4 -3
  156. package/types/editor/FieldListField.d.ts +4 -0
  157. package/types/editor/FloatingToolbar.d.ts +7 -0
  158. package/types/editor/ItemEditor.d.ts +4 -0
  159. package/types/editor/ItemInfo.d.ts +4 -0
  160. package/types/editor/ItemNameDialog.d.ts +10 -0
  161. package/types/editor/LinkEditorDialog.d.ts +15 -0
  162. package/types/editor/MainLayout.d.ts +6 -0
  163. package/types/editor/MediaSelector.d.ts +2 -1
  164. package/types/editor/PictureEditorDialog.d.ts +6 -0
  165. package/types/editor/SidebarTabs.d.ts +8 -0
  166. package/types/editor/Terminal.d.ts +3 -1
  167. package/types/editor/Utils.d.ts +3 -0
  168. package/types/editor/Workbox.d.ts +6 -0
  169. package/types/editor/componentCommands.d.ts +4 -0
  170. package/types/editor/contentService.d.ts +7 -1
  171. package/types/editor/editContext.d.ts +90 -19
  172. package/types/editor/editService.d.ts +9 -1
  173. package/types/editor/fieldTypes/CheckboxEditor.d.ts +4 -0
  174. package/types/editor/fieldTypes/InternalLinkFieldEditor.d.ts +4 -0
  175. package/types/editor/fieldTypes/LinkFieldEditor.d.ts +4 -0
  176. package/types/editor/fieldTypes/MultiLineText.d.ts +4 -0
  177. package/types/editor/fieldTypes/PictureFieldEditor.d.ts +4 -0
  178. package/types/editor/fieldTypes/TreeListEditor.d.ts +4 -0
  179. package/types/editor/ui/Section.d.ts +5 -0
  180. package/types/fieldTypes.d.ts +32 -17
  181. package/types/layoutData.d.ts +34 -9
  182. package/types/loadRouteData.d.ts +34 -5
  183. package/types/mediaProtection.d.ts +1 -0
  184. package/types/middleware/authorization.d.ts +2 -0
  185. package/types/middleware/index.d.ts +1 -0
  186. package/dist/cjs/editor/PageInfo.js +0 -12
  187. package/dist/esm/alpacaContext.js +0 -8
  188. package/dist/esm/components/Error.js +0 -10
  189. package/dist/esm/components/Image.js +0 -32
  190. package/dist/esm/components/Link.js +0 -29
  191. package/dist/esm/components/LinkEditor.js +0 -19
  192. package/dist/esm/components/Picture.js +0 -118
  193. package/dist/esm/components/PictureEditor.js +0 -41
  194. package/dist/esm/components/Placeholder.js +0 -69
  195. package/dist/esm/components/RichText.js +0 -40
  196. package/dist/esm/components/RichTextEditor.js +0 -52
  197. package/dist/esm/components/Slot.js +0 -5
  198. package/dist/esm/components/Text.js +0 -39
  199. package/dist/esm/components/TextEditor.js +0 -38
  200. package/dist/esm/components/Translate.js +0 -10
  201. package/dist/esm/components/index.js +0 -7
  202. package/dist/esm/editor/AiTerminal.js +0 -157
  203. package/dist/esm/editor/ComponentInfo.js +0 -10
  204. package/dist/esm/editor/ComponentPalette.js +0 -72
  205. package/dist/esm/editor/ComponentTree.js +0 -196
  206. package/dist/esm/editor/ContentTree.js +0 -117
  207. package/dist/esm/editor/Debug.js +0 -9
  208. package/dist/esm/editor/DictionaryEditor.js +0 -31
  209. package/dist/esm/editor/EditFrame.js +0 -57
  210. package/dist/esm/editor/EditHistory.js +0 -26
  211. package/dist/esm/editor/Editor.js +0 -23
  212. package/dist/esm/editor/EditorClient.js +0 -477
  213. package/dist/esm/editor/EditorClientHost.js +0 -7
  214. package/dist/esm/editor/FieldList.js +0 -60
  215. package/dist/esm/editor/GraphQL.js +0 -82
  216. package/dist/esm/editor/LanguageSelector.js +0 -17
  217. package/dist/esm/editor/MediaSelector.js +0 -54
  218. package/dist/esm/editor/PageInfo.js +0 -8
  219. package/dist/esm/editor/PlaceholderDropZone.js +0 -50
  220. package/dist/esm/editor/PlaceholderDropZoneHost.js +0 -7
  221. package/dist/esm/editor/Terminal.js +0 -47
  222. package/dist/esm/editor/TranslateEditor.js +0 -21
  223. package/dist/esm/editor/VersionSelector.js +0 -17
  224. package/dist/esm/editor/componentTreeHelper.js +0 -14
  225. package/dist/esm/editor/contentService.js +0 -31
  226. package/dist/esm/editor/editContext.js +0 -5
  227. package/dist/esm/editor/editService.js +0 -139
  228. package/dist/esm/editor/fieldTypes/RichTextEditor.js +0 -15
  229. package/dist/esm/editor/fieldTypes/SingleLineText.js +0 -13
  230. package/dist/esm/editor/index.js +0 -2
  231. package/dist/esm/fieldTypes.js +0 -1
  232. package/dist/esm/graphQLTypes.js +0 -1
  233. package/dist/esm/index.js +0 -7
  234. package/dist/esm/layoutData.js +0 -1
  235. package/dist/esm/loadRouteData.js +0 -123
  236. package/dist/esm/mediaProtection.js +0 -49
  237. package/types/editor/PageInfo.d.ts +0 -4
  238. /package/types/{editor → components}/TranslateEditor.d.ts +0 -0
@@ -1,477 +0,0 @@
1
- "use client";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
- import { useState, useEffect, useRef } from "react";
13
- import uuid from "react-uuid";
14
- import { PrimeReactProvider } from "primereact/api";
15
- import { Menubar } from "primereact/menubar";
16
- import { ProgressSpinner } from "primereact/progressspinner";
17
- import { TabView, TabPanel } from "primereact/tabview";
18
- import { Toast } from "primereact/toast";
19
- import { Splitter, SplitterPanel } from "primereact/splitter";
20
- import { BlockUI } from "primereact/blockui";
21
- import { ConfirmDialog, confirmDialog } from "primereact/confirmdialog";
22
- import { Sidebar } from "primereact/sidebar";
23
- import { EditContextProvider, } from "..";
24
- import { useRouter, useSearchParams, usePathname } from "next/navigation";
25
- import { FieldList } from "./FieldList";
26
- import { GraphQL } from "./GraphQL";
27
- import { ComponentTree } from "./ComponentTree";
28
- import { ComponentInfo } from "./ComponentInfo";
29
- import { LanguageSelector } from "./LanguageSelector";
30
- import { findComponent } from "./componentTreeHelper";
31
- import { ComponentPalette } from "./ComponentPalette";
32
- import { DictionaryEditor } from "./DictionaryEditor";
33
- import { AiTerminal } from "./AiTerminal";
34
- import { EditHistory } from "./EditHistory";
35
- import { Debug } from "./Debug";
36
- import { PageInfo } from "./PageInfo";
37
- import { VersionSelector } from "./VersionSelector";
38
- import { commitChanges, currentOperation, executeRedo, executeUndo, executeEditOperation, setCurrentOperation, } from "./editService";
39
- import "../../editor.css";
40
- import "../../primereact/resources/primereact.min.css";
41
- import "../../primeicons/primeicons.css";
42
- import "../../primereact/resources/themes/lara-light-indigo/theme.css";
43
- // Hook
44
- function useEventListener(eventName, handler, element) {
45
- // Create a ref that stores handler
46
- const savedHandler = useRef();
47
- // Update ref.current value if handler changes.
48
- // This allows our effect below to always get latest handler ...
49
- // ... without us needing to pass it in effect deps array ...
50
- // ... and potentially cause effect to re-run every render.
51
- useEffect(() => {
52
- savedHandler.current = handler;
53
- }, [handler]);
54
- useEffect(() => {
55
- // Make sure element supports addEventListener
56
- // On
57
- const isSupported = element && element.addEventListener;
58
- if (!isSupported)
59
- return;
60
- // Create event listener that calls handler function stored in ref
61
- const eventListener = (event) => savedHandler.current(event);
62
- // Add event listener
63
- element.addEventListener(eventName, eventListener);
64
- // Remove event listener on cleanup
65
- return () => {
66
- element.removeEventListener(eventName, eventListener);
67
- };
68
- }, [eventName, element] // Re-run if eventName or element changes
69
- );
70
- }
71
- export function EditorClient({ content, dictionaryObject, edit, children, }) {
72
- const router = useRouter();
73
- const pathname = usePathname();
74
- const searchParams = useSearchParams();
75
- const [selection, setSelection] = useState([]);
76
- const [selectedForInsertion, setSelectedForInsertion] = useState("");
77
- const [liveUpdatingFields, setLiveUpdatingFields] = useState([]);
78
- const [currentEditOperation, setCurrentEditOperation] = useState();
79
- const [dictionary, setDictionary] = useState(dictionaryObject);
80
- const [unresolvedDictionaryKeys, setUnresolvedDictionaryKeys] = useState([]);
81
- const [editData, setEditData] = useState(edit);
82
- const [refreshCompletedFlag, setRefreshCompletedFlag] = useState(false);
83
- const [updateContentEditingFields, setUpdateContentEditingFields] = useState(false);
84
- const [page, setPageData] = useState(null);
85
- const [uiBlocked, setUiBlocked] = useState(false);
86
- const [componentsPaletteVisible, setComponentsPaletteVisible] = useState(false);
87
- const [dragObject, setDragObject] = useState();
88
- const [hidePalette, setHidePalette] = useState(false);
89
- const [refreshTimer, setRefreshTimer] = useState();
90
- const sessionId = searchParams.get("session");
91
- if (!sessionId)
92
- return;
93
- function switchLanguage(language) {
94
- const current = new URLSearchParams(Array.from(searchParams.entries()));
95
- current.set("language", language);
96
- const newUrl = `${pathname}?${current.toString()}`;
97
- router.replace(newUrl, { scroll: false });
98
- }
99
- function switchVersion(version) {
100
- const current = new URLSearchParams(Array.from(searchParams.entries()));
101
- current.set("version", version.toString());
102
- const newUrl = `${pathname}?${current.toString()}`;
103
- router.replace(newUrl, { scroll: false });
104
- }
105
- function handleErrorResult(result) {
106
- if (result.type === "error") {
107
- showErrorToast(result);
108
- return true;
109
- }
110
- if (result.type === "unauthenticated") {
111
- confirmDialog({
112
- header: "Not logged in",
113
- message: "You are not logged in anymore. Proceed to login page?",
114
- accept: () => {
115
- window.location.href = edit.loginUrl;
116
- },
117
- });
118
- showErrorToast(result);
119
- return true;
120
- }
121
- }
122
- useEffect(() => {
123
- if (selection.length)
124
- setSelectedForInsertion("");
125
- }, [selection]);
126
- useEffect(() => {
127
- const sync = () => __awaiter(this, void 0, void 0, function* () {
128
- if (currentEditOperation) {
129
- const result = yield executeEditOperation(currentEditOperation, sessionId);
130
- if (handleErrorResult(result))
131
- return;
132
- if ((result.id && edit.operations.length == 0) ||
133
- edit.operations[edit.operations.length - 1].id !=
134
- result.id) {
135
- edit.operations = edit.operations.filter((x) => !x.undone);
136
- edit.operations.push(result);
137
- setEditData(Object.assign({}, edit));
138
- }
139
- if (result.type === "add-component" ||
140
- result.type === "link-component") {
141
- console.log("CURRENT: " + JSON.stringify(result));
142
- setSelection([result.componentId]);
143
- }
144
- if (!currentEditOperation.noRefresh)
145
- requestRefresh(currentEditOperation.refreshAfterQuietPeriod
146
- ? "waitForQuietPeriod"
147
- : "delayed");
148
- }
149
- });
150
- sync();
151
- }, [currentEditOperation]);
152
- const requestRefresh = (mode) => {
153
- if (mode === "immediate") {
154
- console.log("Immediate refresh requested");
155
- clearTimeout(refreshTimer);
156
- router.refresh();
157
- setRefreshCompletedFlag(!refreshCompletedFlag);
158
- setRefreshTimer(undefined);
159
- return;
160
- }
161
- console.log("request refresh with mode: " + mode);
162
- if (mode === "waitForQuietPeriod" && refreshTimer) {
163
- clearTimeout(refreshTimer);
164
- }
165
- if (!refreshTimer || mode === "waitForQuietPeriod") {
166
- setRefreshTimer(setTimeout(() => {
167
- console.log("refreshing");
168
- router.refresh();
169
- setRefreshCompletedFlag(!refreshCompletedFlag);
170
- setRefreshTimer(undefined);
171
- }, mode === "waitForQuietPeriod" ? 2000 : 1000));
172
- }
173
- };
174
- const saveAndRefresh = (callback) => __awaiter(this, void 0, void 0, function* () {
175
- if (!edit.operations.length) {
176
- if (callback)
177
- callback();
178
- return;
179
- }
180
- setUiBlocked(true);
181
- if (!(yield commitChanges(sessionId))) {
182
- setUiBlocked(false);
183
- return;
184
- }
185
- router.refresh();
186
- //setEditOperations([]);
187
- setUiBlocked(false);
188
- toast.current.show({
189
- severity: "success",
190
- summary: "Saved",
191
- detail: "Your changes were saved successfully.",
192
- life: 3000,
193
- });
194
- if (callback)
195
- callback();
196
- });
197
- // function ensureSaved(callback: () => void) {
198
- // if (!edit.operations.length) {
199
- // callback();
200
- // return;
201
- // }
202
- // confirmDialog({
203
- // message: "Save changes?",
204
- // header: "Save changes?",
205
- // icon: "pi pi-exclamation-triangle",
206
- // accept: () => saveAndRefresh(callback),
207
- // reject: callback,
208
- // });
209
- // }
210
- function handleKeyDown(event) {
211
- return __awaiter(this, void 0, void 0, function* () {
212
- if (event.ctrlKey && event.key === "s") {
213
- event.preventDefault();
214
- yield saveAndRefresh();
215
- }
216
- if (event.ctrlKey && event.key === "z") {
217
- event.preventDefault();
218
- yield undo();
219
- }
220
- if (event.ctrlKey && event.key === "y") {
221
- event.preventDefault();
222
- yield redo();
223
- }
224
- });
225
- }
226
- if (typeof window !== "undefined")
227
- useEventListener("keydown", handleKeyDown, window);
228
- const toast = useRef();
229
- useEffect(() => {
230
- setPageData(content);
231
- }, [content]);
232
- useEffect(() => {
233
- setEditData(edit);
234
- }, [edit]);
235
- function getComponentById(id) {
236
- if (!page)
237
- return null;
238
- return findComponent(id, page.placeholders);
239
- }
240
- function redo() {
241
- return __awaiter(this, void 0, void 0, function* () {
242
- setUpdateContentEditingFields(!updateContentEditingFields);
243
- let result = yield executeRedo(sessionId);
244
- if (result.type === "success") {
245
- router.refresh();
246
- return true;
247
- }
248
- else {
249
- showErrorToast(result);
250
- return false;
251
- }
252
- });
253
- }
254
- function showErrorToast(result) {
255
- toast.current.show({
256
- severity: "error",
257
- summary: result.summary,
258
- detail: result.details,
259
- life: 3000,
260
- });
261
- }
262
- function undo() {
263
- return __awaiter(this, void 0, void 0, function* () {
264
- setUpdateContentEditingFields(!updateContentEditingFields);
265
- let result = yield executeUndo(sessionId);
266
- if (result.type === "success") {
267
- router.refresh();
268
- return true;
269
- }
270
- else {
271
- showErrorToast(result);
272
- return false;
273
- }
274
- });
275
- }
276
- const getLiveField = (field) => {
277
- const existingField = liveUpdatingFields.find((f) => f.id === field.id &&
278
- f.language === field.language &&
279
- f.version === field.version &&
280
- f.itemId === field.itemId);
281
- if (existingField)
282
- return existingField;
283
- setLiveUpdatingFields([...liveUpdatingFields, field]);
284
- return field;
285
- };
286
- const selectedComponent = selection.length === 1 && page ? getComponentById(selection[0]) : null;
287
- const editField = (field, value, noRefresh = true) => {
288
- var _a;
289
- if (!page)
290
- return;
291
- const component = findComponent(field.itemId, page.placeholders);
292
- let op = currentOperation;
293
- if (!op ||
294
- op.type !== "edit-field" ||
295
- op.itemId !== field.itemId ||
296
- op.fieldId !== field.id ||
297
- op.language !== field.language ||
298
- op.version !== field.version) {
299
- op = {
300
- type: "edit-field",
301
- itemId: field.itemId,
302
- fieldId: field.id,
303
- version: field.version,
304
- language: field.language,
305
- fieldName: field.name,
306
- itemName: field.itemId == page.id ? "Page" : (_a = component === null || component === void 0 ? void 0 : component.name) !== null && _a !== void 0 ? _a : "<unknown>",
307
- pageItemId: page.id,
308
- pageItemLanguage: page.language,
309
- pageItemVersion: page.version,
310
- date: new Date(),
311
- id: uuid(),
312
- };
313
- }
314
- op.date = new Date();
315
- op.noRefresh = noRefresh;
316
- op.refreshAfterQuietPeriod = !noRefresh;
317
- op.value = value;
318
- getLiveField(field).value = value;
319
- function getField(fields, id) {
320
- return Object.values(fields).find((f) => f.id === id);
321
- }
322
- if (component) {
323
- const f = getField(component.fields, field.id);
324
- if (f && f.value != value) {
325
- f.value = value;
326
- }
327
- }
328
- else {
329
- const f = getField(page.fields, field.id);
330
- if (f && f.value != value)
331
- f.value = value;
332
- }
333
- setCurrentOperation(op);
334
- setCurrentEditOperation(Object.assign({}, op));
335
- };
336
- const menuItems = [
337
- {
338
- label: "Save",
339
- icon: "pi pi-fw pi-save text-red",
340
- command: () => saveAndRefresh(),
341
- },
342
- {
343
- label: "Insert",
344
- icon: "pi pi-fw pi-sitemap",
345
- command: () => setComponentsPaletteVisible(true),
346
- },
347
- ];
348
- const spinner = _jsx(ProgressSpinner, {});
349
- const endContent = (_jsxs(_Fragment, { children: [_jsx(LanguageSelector, { page: page, onLanguageSelected: (language) => {
350
- if (!language)
351
- return;
352
- //ensureSaved(() => switchLanguage(language));
353
- switchLanguage(language);
354
- } }), _jsx(VersionSelector, { page: page, onVersionSelected: (version) => {
355
- switchVersion(version);
356
- } })] }));
357
- return (_jsxs(EditContextProvider, { value: {
358
- sessionId: sessionId,
359
- selection,
360
- setSelection,
361
- selectedForInsertion,
362
- setSelectedForInsertion,
363
- editField,
364
- getComponentById,
365
- dragObject,
366
- dictionary,
367
- setDictionary,
368
- requestRefresh,
369
- refreshCompletedFlag,
370
- unresolvedDictionaryKeys,
371
- setUnresolvedDictionaryKeys,
372
- updateContentEditingFields,
373
- getLiveField,
374
- showToast: () => { },
375
- removeComponent: (componentId, callback) => {
376
- confirmDialog({
377
- message: "Are you sure you want to remove this component?",
378
- header: "Remove component",
379
- icon: "pi pi-exclamation-triangle",
380
- accept: () => {
381
- var _a;
382
- const op = {
383
- type: "remove-component",
384
- date: new Date(),
385
- id: uuid(),
386
- pageItemId: page.id,
387
- pageItemLanguage: page.language,
388
- pageItemVersion: page.version,
389
- componentId,
390
- componentName: (_a = getComponentById(componentId)) === null || _a === void 0 ? void 0 : _a.name,
391
- };
392
- setCurrentEditOperation(op);
393
- callback(true);
394
- },
395
- });
396
- },
397
- openComponentPalette: () => setComponentsPaletteVisible(true),
398
- dragStart: (dragObject) => {
399
- console.log("dragging " + JSON.stringify(dragObject));
400
- setDragObject(dragObject);
401
- },
402
- droppedInPlaceholder: (placeholderKey, index) => __awaiter(this, void 0, void 0, function* () {
403
- if (!dragObject)
404
- return;
405
- console.log(dragObject.templateId +
406
- " dropped in " +
407
- placeholderKey +
408
- " " +
409
- index);
410
- // console.log(JSON.stringify(page));
411
- const placeholderKeyComponents = placeholderKey.split("_");
412
- const parentId = placeholderKeyComponents.length === 1
413
- ? null
414
- : placeholderKeyComponents[0];
415
- const placeholderName = placeholderKeyComponents.length === 1
416
- ? placeholderKeyComponents[0]
417
- : placeholderKeyComponents[1];
418
- let op;
419
- if (dragObject.type == "template") {
420
- op = {
421
- type: "add-component",
422
- pageItemId: page.id,
423
- pageItemLanguage: page.language,
424
- pageItemVersion: page.version,
425
- parentItemId: parentId,
426
- placeholderName: placeholderName,
427
- placeholderIndex: index,
428
- templateId: dragObject === null || dragObject === void 0 ? void 0 : dragObject.templateId,
429
- date: new Date(),
430
- id: uuid(),
431
- };
432
- }
433
- if (dragObject.type == "component" ||
434
- (dragObject.type == "link-component" && dragObject.componentId)) {
435
- op = {
436
- type: dragObject.type == "link-component"
437
- ? "link-component"
438
- : "move-component",
439
- pageItemId: page.id,
440
- pageItemLanguage: page.language,
441
- pageItemVersion: page.version,
442
- parentItemId: parentId,
443
- placeholderName: placeholderName,
444
- placeholderIndex: index,
445
- componentId: dragObject.componentId,
446
- date: new Date(),
447
- id: uuid(),
448
- };
449
- }
450
- //const newOps = [...editOperations, op];
451
- //setEditOperations();
452
- // await sendEditOperationsToServer(newOps as EditOperation[]);
453
- // router.refresh();
454
- //setEditOperations(newOps);
455
- if (op)
456
- setCurrentEditOperation(op);
457
- setDragObject(undefined);
458
- }),
459
- }, children: [_jsx(Toast, { ref: toast }), _jsxs(PrimeReactProvider, { children: [_jsx(ConfirmDialog, {}), _jsx(Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), header: "Insert component", pt: {
460
- mask: {
461
- onDragOver: () => setHidePalette(true),
462
- style: {
463
- left: hidePalette || !componentsPaletteVisible ? "100vw" : 0,
464
- },
465
- },
466
- }, children: page && (_jsx(ComponentPalette, { page: page, selection: selection, dragStart: (dragObject) => {
467
- //console.log("dragging " + JSON.stringify(dragObject));
468
- setDragObject(dragObject);
469
- }, dragEnd: () => {
470
- setDragObject(undefined);
471
- if (hidePalette) {
472
- setComponentsPaletteVisible(false);
473
- setHidePalette(false);
474
- }
475
- setSelectedForInsertion("");
476
- } })) }), _jsxs(BlockUI, { blocked: uiBlocked, template: spinner, children: [_jsx(Menubar, { model: menuItems, end: endContent }), _jsxs(Splitter, { children: [_jsx(SplitterPanel, { size: 30, className: "alpaca-overflow-scroll", children: _jsxs(Splitter, { layout: "vertical", children: [_jsx(SplitterPanel, { size: 30, className: "a-overflow-hidden a-relative", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: _jsx(ComponentTree, { page: page, selection: selection }) }) }), _jsx(SplitterPanel, { className: "alpaca-editor-tabs", children: _jsxs(TabView, { className: "a-inset-0 a-absolute", scrollable: true, children: [selectedComponent && (_jsxs(TabPanel, { header: "Fields", children: [_jsx(ComponentInfo, { component: selectedComponent }), _jsx(FieldList, { fields: selectedComponent.fields })] })), selectedComponent && (_jsx(TabPanel, { header: "GraphQL", style: { height: "100%" }, children: _jsx(GraphQL, { component: selectedComponent }) })), _jsxs(TabPanel, { header: "Page", children: [page && _jsx(PageInfo, { page: page }), page && _jsx(FieldList, { fields: page.fields })] }), _jsx(TabPanel, { header: "Dictionary", children: _jsx(DictionaryEditor, { dictionary: dictionary }) }), _jsx(TabPanel, { header: "Debug", children: _jsx(Debug, { component: selectedComponent, page: page }) })] }) })] }) }), _jsx(SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: _jsx("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), _jsx(SplitterPanel, { size: 15, children: _jsxs(Splitter, { layout: "vertical", className: "alpaca-editor", children: [_jsx(SplitterPanel, { className: "overflow-hidden a-relative", children: _jsx(EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), _jsx(SplitterPanel, { className: "overflow-hidden a-relative", children: _jsx(AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
477
- }
@@ -1,7 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import dynamic from "next/dynamic";
4
- const EditorClient = dynamic(() => import("./EditorClient").then((dnd) => dnd.EditorClient), { ssr: false });
5
- export function EditorClientHost({ content, dictionaryObject, children, edit, }) {
6
- return (_jsx(EditorClient, { content: content, dictionaryObject: dictionaryObject, edit: edit, children: children }));
7
- }
@@ -1,60 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useEditContext, } from "..";
4
- import { InputText } from "primereact/inputtext";
5
- import { Checkbox } from "primereact/checkbox";
6
- import { SingleLineText } from "./fieldTypes/SingleLineText";
7
- import { RichTextEditor } from "./fieldTypes/RichTextEditor";
8
- export function FieldList({ fields }) {
9
- const editContext = useEditContext();
10
- if (!editContext)
11
- if (!fields)
12
- return;
13
- if (!Array.isArray(fields))
14
- fields = Object.values(fields);
15
- const sections = fields.reduce((acc, value) => {
16
- // Group initialization
17
- if (!acc[value.section || "Default"]) {
18
- acc[value.section || "Default"] = [];
19
- }
20
- // Grouping
21
- acc[value.section || "Default"].push(value);
22
- return acc;
23
- }, {});
24
- const sectionList = Object.values(sections);
25
- sectionList.sort((a, b) => b[0].sortOrder - a[0].sortOrder);
26
- return (_jsx("div", { className: "a-p-1", children: Object.keys(sections).map((section) => (_jsxs("div", { children: [_jsx("div", { className: "alpaca-fields-section-headline", children: section }), getSectionFields(sections[section], editContext)] }, section))) }));
27
- }
28
- function getSectionFields(fields, editContext) {
29
- return fields
30
- .map((field) => editContext.getLiveField(field))
31
- .map((field) => (_jsxs("div", { children: [_jsx("label", { className: "alpaca-field-label", children: field.name }), !field.containsFallbackValue ? (_jsx("button", { className: "a-text-xs a-p-0 a-m-1", children: "Reset " })) : (_jsx("button", { children: "Fallback" })), _jsx("div", { children: getFieldEditor(field) })] }, field.id)));
32
- }
33
- function getFieldEditor(field) {
34
- switch (field.type) {
35
- case "checkbox":
36
- return checkbox(field);
37
- case "picture":
38
- return picture(field);
39
- case "image":
40
- return image(field);
41
- case "rich text":
42
- return _jsx(RichTextEditor, { field: field });
43
- default:
44
- return _jsx(SingleLineText, { field: field });
45
- }
46
- }
47
- function checkbox(field) {
48
- return _jsx(Checkbox, { checked: field.value === "1" });
49
- }
50
- // function singleLineText(field: Field) {
51
- // return <InputText value={field.value as string} />;
52
- // }
53
- function picture(field) {
54
- var _a, _b;
55
- return (_jsxs(_Fragment, { children: [_jsx("label", { className: "alpaca-minor-label", children: "Alt" }), _jsx(InputText, { value: (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.alt) !== null && _b !== void 0 ? _b : "" })] }));
56
- }
57
- function image(field) {
58
- var _a, _b;
59
- return (_jsxs(_Fragment, { children: [_jsx("label", { className: "alpaca-minor-label", children: "Alt" }), _jsx(InputText, { value: (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.altText) !== null && _b !== void 0 ? _b : "" })] }));
60
- }
@@ -1,82 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEditContext } from "..";
3
- import JSONPretty from "react-json-pretty";
4
- import "react-json-pretty/themes/monikai.css";
5
- import { TabView, TabPanel } from "primereact/tabview";
6
- import { FieldList } from "./FieldList";
7
- import { Splitter, SplitterPanel } from "primereact/splitter";
8
- import { InputTextarea } from "primereact/inputtextarea";
9
- import { Button } from "primereact/button";
10
- import { useEffect, useState } from "react";
11
- import { format } from "graphql-formatter";
12
- export function GraphQL({ component }) {
13
- const editContext = useEditContext();
14
- const [query, setQuery] = useState("");
15
- const [showSpinner, setShowSpinner] = useState(false);
16
- if (!component)
17
- return;
18
- useEffect(() => {
19
- setQuery(component.graphql_query);
20
- }, [component.graphql_query]);
21
- useEffect(() => {
22
- setShowSpinner(false);
23
- }, [editContext === null || editContext === void 0 ? void 0 : editContext.refreshCompletedFlag]);
24
- function findFields(json) {
25
- let result = {};
26
- for (let key in json) {
27
- if (typeof json[key] === "object" && json[key] !== null) {
28
- let subResult = findFields(json[key]);
29
- for (let subKey in subResult) {
30
- if (result[subKey]) {
31
- result[subKey] = result[subKey].concat(subResult[subKey]);
32
- }
33
- else {
34
- result[subKey] = subResult[subKey];
35
- }
36
- }
37
- }
38
- if (key === "jsonValue") {
39
- let groupKey = `${json[key].itemId}_${json[key].language}_${json[key].version}`;
40
- if (result[groupKey]) {
41
- result[groupKey].push(json[key]);
42
- }
43
- else {
44
- result[groupKey] = [json[key]];
45
- }
46
- }
47
- }
48
- return result;
49
- }
50
- const fieldsjsonValues = findFields(component.graphql);
51
- function renderItem(fields) {
52
- const first = fields[0];
53
- return (_jsxs("div", { children: ["Item: ", first.path, " ", first.id, " ", first.language, " ", first.version, _jsx(FieldList, { fields: fields })] }, first.path + first.id + first.language + first.version));
54
- }
55
- function refresh() {
56
- var _a, _b;
57
- if (!component)
58
- return;
59
- let language = ((_a = component.hostingPageItem) === null || _a === void 0 ? void 0 : _a.language) || "en";
60
- let version = ((_b = component.hostingPageItem) === null || _b === void 0 ? void 0 : _b.version) || 0;
61
- if (component.linkedComponentItem) {
62
- language = component.linkedComponentItem.language;
63
- version = component.linkedComponentItem.version;
64
- }
65
- const field = {
66
- name: "_GraphQL",
67
- itemId: component === null || component === void 0 ? void 0 : component.id,
68
- language: language,
69
- version: version,
70
- path: "graphql",
71
- id: "3622F861-ECA9-45D7-8DA7-2CDA35235002",
72
- value: query,
73
- type: "jsonValue",
74
- };
75
- const prettyQuery = format(query);
76
- setQuery(prettyQuery);
77
- editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, prettyQuery, false);
78
- setShowSpinner(true);
79
- editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
80
- }
81
- return (_jsxs(Splitter, { layout: "vertical", style: { height: "100%" }, children: [_jsx(SplitterPanel, { size: 50, className: "a-relative", children: _jsxs("div", { className: "a-absolute a-inset-0 a-flex", children: [_jsx(InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1", style: { height: "100%" } }), _jsx(Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), _jsx(SplitterPanel, { className: "alpaca-editor-tabs", children: _jsxs(TabView, { className: "a-inset-0 a-absolute", children: [_jsx(TabPanel, { header: "Data", style: { height: "100%" }, className: "a-relative", children: _jsx("div", { className: "a-m-1", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) }), _jsx(TabPanel, { header: "JSON", className: "a-relative", style: { height: "100%" }, children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: _jsx(JSONPretty, { data: component.graphql }) }) })] }) })] }));
82
- }
@@ -1,17 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Dropdown } from "primereact/dropdown";
4
- export function LanguageSelector({ page, onLanguageSelected, }) {
5
- if (page == null)
6
- return;
7
- const selectedCountryTemplate = (option, props) => {
8
- if (option) {
9
- return _jsx("div", { children: option.name });
10
- }
11
- return _jsx("span", { children: props.placeholder });
12
- };
13
- const countryOptionTemplate = (option) => {
14
- return (_jsxs("div", { children: [option.name, " (", option.versions, ")"] }));
15
- };
16
- return (_jsx(_Fragment, { children: _jsx(Dropdown, { value: page.language, onChange: (e) => onLanguageSelected(e.value), options: page.languages, optionValue: "languageCode", optionLabel: "name", placeholder: "Select a language", filter: true, valueTemplate: selectedCountryTemplate, itemTemplate: countryOptionTemplate }) }));
17
- }