@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,54 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
- import ContentTree from "./ContentTree";
12
- import { Splitter, SplitterPanel } from "primereact/splitter";
13
- import { useEffect, useState } from "react";
14
- import { getChildren } from "./contentService";
15
- import { useEditContext } from "./editContext";
16
- import { Button } from "primereact/button";
17
- import { Dialog } from "primereact/dialog";
18
- export const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
19
- const [selectedFolderId, setSelectedFolderId] = useState();
20
- const [images, setImages] = useState();
21
- const [selectedImage, setSelectedImage] = useState();
22
- const selection = selectedFolderId ? [selectedFolderId] : [];
23
- const editContext = useEditContext();
24
- useEffect(() => {
25
- loadThumbnails(selectedFolderId);
26
- }, [selectedFolderId]);
27
- function loadThumbnails(selectedFolderId) {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- if (!selectedFolderId)
30
- setImages([]);
31
- else {
32
- const children = yield getChildren(selectedFolderId, editContext.sessionId, [
33
- "C97BA923-8009-4858-BDD5-D8BE5FCCECF7",
34
- "F1828A2C-7E5D-4BBD-98CA-320474871548",
35
- ]);
36
- setImages(children);
37
- }
38
- });
39
- }
40
- return (_jsx(Dialog, { style: { width: "80%", height: "80%" }, visible: visible, onHide: onHide, children: _jsxs("div", { className: "a-flex a-flex-col a-h-full", children: [_jsxs(Splitter, { className: "a-flex-1 a-border-0", children: [_jsx(SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: _jsxs(Splitter, { layout: "vertical", children: [_jsx(SplitterPanel, { size: 70, children: _jsx(ContentTree, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
41
- if (selection.length)
42
- setSelectedFolderId(selection[0]);
43
- else
44
- setSelectedFolderId(undefined);
45
- } }) }), _jsx(SplitterPanel, { children: selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.name })] }) }), _jsx(SplitterPanel, { className: "alpaca-overflow-scroll a-relative", children: _jsx("div", { className: "a-grid a-grid-cols-3 a-gap-2 a-absolute a-inset-0", children: images === null || images === void 0 ? void 0 : images.map((t) => {
46
- return (_jsxs("div", { className: "a-flex a-flex-col a-justify-between hover:a-shadow-md a-cursor-pointer a-p-1", onDoubleClick: () => {
47
- onMediaSelected(t.id);
48
- onHide();
49
- }, onClick: () => setSelectedImage(t), children: [_jsx("img", { src: t.imageUrl }), _jsx("div", { className: "a-text-xs a-break-all", children: t.name })] }));
50
- }) }) })] }), _jsxs("div", { className: "a-flex a-justify-end a-gap-3 a-mt-3", children: [_jsx(Button, { onClick: () => onHide(), children: "Cancel" }), _jsx(Button, { disabled: !selectedImage, onClick: () => {
51
- onMediaSelected(selectedImage.id);
52
- onHide();
53
- }, children: "Select" })] })] }) }));
54
- };
@@ -1,8 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- export function PageInfo({ page }) {
4
- var _a;
5
- if (!(page === null || page === void 0 ? void 0 : page.fields))
6
- return;
7
- return (_jsxs("div", { className: "a-p-1", children: [_jsx("h2", { className: "a-text-xl a-font-bold a-my-2", children: page.path }), _jsxs("div", { className: "a-text-xs", children: ["ID: ", page.id] }), _jsxs("div", { className: "a-text-xs", children: ["Language: ", page.language] }), _jsxs("div", { className: "a-text-xs", children: ["Version: ", page.version] }), page.translations && (_jsxs("div", { className: "a-text-xs", children: ["Languages: ", (_a = page.translations) === null || _a === void 0 ? void 0 : _a.join(", ")] }))] }));
8
- }
@@ -1,50 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEffect, useState } from "react";
4
- import { ProgressBar } from "primereact/progressbar";
5
- import { useEditContext } from "..";
6
- export function PlaceholderDropZone({ placeholder, index, parentName, }) {
7
- const [isInserting, setIsInserting] = useState(false);
8
- const [isSelected, setIsSelected] = useState(false);
9
- const editContext = useEditContext();
10
- if (!editContext)
11
- return;
12
- const { selection, refreshCompletedFlag, dragObject, selectedForInsertion } = editContext;
13
- function isAnyPlaceholderSelected() {
14
- return selection.find((x) => x.indexOf("_") > 0) != undefined;
15
- }
16
- useEffect(() => {
17
- setIsInserting(false);
18
- }, [refreshCompletedFlag]);
19
- useEffect(() => {
20
- var _a;
21
- const isSelectedForInsertion = editContext.selectedForInsertion.length > 0 &&
22
- placeholder.key.indexOf(editContext.selectedForInsertion) >= 0;
23
- const dragObjectAllowed = (editContext.dragObject ? true : false) &&
24
- ((_a = placeholder.insertOptions) === null || _a === void 0 ? void 0 : _a.find((x) => { var _a; return x.id == ((_a = editContext.dragObject) === null || _a === void 0 ? void 0 : _a.templateId); })) != undefined;
25
- const selected = (isSelectedForInsertion ||
26
- (!isAnyPlaceholderSelected() && editContext.dragObject != undefined)) &&
27
- (!editContext.dragObject ? true : false || dragObjectAllowed);
28
- setIsSelected(selected);
29
- }, [selection, dragObject, selectedForInsertion, editContext]);
30
- function dragOver(ev) {
31
- var _a;
32
- ev.dataTransfer.dropEffect =
33
- ((_a = editContext === null || editContext === void 0 ? void 0 : editContext.dragObject) === null || _a === void 0 ? void 0 : _a.type) == "template" ? "copy" : "move";
34
- ev.preventDefault();
35
- }
36
- function drop(ev) {
37
- ev.preventDefault();
38
- setIsInserting(true);
39
- editContext.droppedInPlaceholder(placeholder.key, index);
40
- }
41
- if (isInserting)
42
- return (_jsx("div", { className: " a-bg-gray-200 a-p-10", children: _jsx(ProgressBar, { mode: "indeterminate", style: { height: "6px" } }) }));
43
- return (_jsx("div", { onClick: (ev) => {
44
- // editContext.setSelectedForInsertion(placeholder.key + "_" + index);
45
- editContext.openComponentPalette();
46
- ev.stopPropagation();
47
- }, onDragOver: dragOver, onDrop: drop,
48
- // ref={setNodeRef}
49
- className: `ape-placeholder ${isSelected ? "" : "ape-hidden"}`, children: _jsx("div", { className: "a-p-6 a-max-w-sm a-mx-auto a-bg-white a-rounded-xl a-shadow-md a-flex a-items-center a-space-x-4", children: _jsxs("div", { children: [_jsxs("div", { className: "a-text-xl a-font-medium a-text-black", children: ["Placeholder ", parentName, " / ", placeholder.name, " ", index] }), _jsx("p", { className: "a-text-gray-500", children: "You can add your components here." })] }) }) }));
50
- }
@@ -1,7 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import dynamic from "next/dynamic";
4
- const PlaceholderDropZone = dynamic(() => import("./PlaceholderDropZone").then((dnd) => dnd.PlaceholderDropZone), { ssr: false });
5
- export function PlaceholderDropZoneHost({ placeholder, index, parentName, }) {
6
- return (_jsx(PlaceholderDropZone, { placeholder: placeholder, index: index, parentName: parentName }));
7
- }
@@ -1,47 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { InputTextarea } from "primereact/inputtextarea";
4
- import { useEffect, useRef, useState } from "react";
5
- export function Terminal({ commandHandler, onReset, }) {
6
- const [value, setValue] = useState("");
7
- const [response, setResponse] = useState();
8
- const [messages, setMessages] = useState([]);
9
- const bottomRef = useRef(null);
10
- const messageRef = useRef(messages);
11
- useEffect(() => {
12
- messageRef.current = messages;
13
- }, [messages]);
14
- const callback = (text, finished) => {
15
- if (!finished)
16
- setResponse(text);
17
- else {
18
- setResponse(undefined);
19
- setMessages([...messageRef.current, { type: "response", text }]);
20
- }
21
- };
22
- const handleKeyPress = (e) => {
23
- if (e.key === "Enter" && !e.shiftKey) {
24
- e.preventDefault(); // Prevent newline insertion
25
- setMessages([...messages, { type: "command", text: value }]);
26
- setValue("");
27
- setResponse("...");
28
- commandHandler(value, callback);
29
- }
30
- };
31
- useEffect(() => {
32
- var _a;
33
- // 👇️ scroll to bottom every time messages change
34
- (_a = bottomRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
35
- }, [messages, response]);
36
- const getClasses = (m) => {
37
- if (m.type === "response")
38
- return "text-blue-500";
39
- return "";
40
- };
41
- return (_jsxs("div", { className: "a-flex a-flex-col a-h-full", children: [_jsx("div", { className: "a-p-4 a-border-b a-border-gray-200", children: _jsx("button", { onClick: () => {
42
- setMessages([]);
43
- onReset();
44
- }, children: _jsx("i", { className: "pi pi-trash" }) }) }), _jsxs("div", { className: "a-overflow-y-auto a-h-full a-overflow-x-hidden a-p-2", children: [messages.map((m, i) => (_jsx("div", { className: getClasses(m), children: m.text }, i))), response != null && (_jsxs("div", { className: "a-flex", children: [_jsxs("div", { className: "a-text-xs", children: [" ", _jsx("i", { className: "pi pi-spin pi-spinner" })] }), _jsx("div", { dangerouslySetInnerHTML: {
45
- __html: response.replaceAll("\\n", "<br>"),
46
- } })] })), _jsx("div", { ref: bottomRef })] }), _jsx(InputTextarea, { value: value, className: "a-border-0 a-border-t-2 a-rounded-none", onKeyDown: handleKeyPress, onChange: (e) => setValue(e.target.value), rows: 5, cols: 30 })] }));
47
- }
@@ -1,21 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useEffect } from "react";
4
- import { useEditContext } from "..";
5
- export function TranslateEditor({ text }) {
6
- const context = useEditContext();
7
- if (!context || !context.dictionary)
8
- return text;
9
- const dictionary = context.dictionary;
10
- useEffect(() => {
11
- if (Object.keys(dictionary).indexOf(text) < 0 &&
12
- context.unresolvedDictionaryKeys.indexOf(text) < 0) {
13
- console.log("Pushing...");
14
- context.setUnresolvedDictionaryKeys([
15
- ...context.unresolvedDictionaryKeys,
16
- text,
17
- ]);
18
- }
19
- }, []);
20
- return (dictionary[text] || (_jsx("span", { className: "a-p-1 a-ring-2 a-ring-red-500", children: text })));
21
- }
@@ -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 VersionSelector({ page, onVersionSelected, }) {
5
- if (page == null)
6
- return;
7
- const selectedVersionTemplate = (option, props) => {
8
- if (option) {
9
- return _jsx("div", { children: option.version });
10
- }
11
- return _jsx("span", { children: props.placeholder });
12
- };
13
- const versionOptionTemplate = (option) => {
14
- return (_jsxs("div", { children: [option.version, " ", _jsxs("div", { className: "a-text-xs", children: ["(", option.updated.toString(), " by ", option.updatedBy, ")"] })] }));
15
- };
16
- return (_jsx(_Fragment, { children: _jsx(Dropdown, { value: page.version, onChange: (e) => onVersionSelected(e.value), options: page.versions, optionValue: "version", optionLabel: "version", placeholder: "Select a version", valueTemplate: selectedVersionTemplate, itemTemplate: versionOptionTemplate }) }));
17
- }
@@ -1,14 +0,0 @@
1
- export function findComponent(id, placeholders) {
2
- for (const p of placeholders) {
3
- for (const c of p.components) {
4
- if (c.id == id) {
5
- return c;
6
- }
7
- const match = findComponent(id, c.placeholders);
8
- if (match) {
9
- return match;
10
- }
11
- }
12
- }
13
- return null;
14
- }
@@ -1,31 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import Cookies from "universal-cookie";
11
- export function getChildren(itemId, sessionId, templateIds = []) {
12
- return __awaiter(this, void 0, void 0, function* () {
13
- let url = "/alpaca/headless/editor/children?itemId=" +
14
- itemId +
15
- "&sessionId=" +
16
- sessionId;
17
- url = templateIds.reduce((u, t) => u + "&templateIds=" + t, url);
18
- const response = yield fetch(url, {
19
- method: "GET",
20
- credentials: "include",
21
- headers: {
22
- "Content-Type": "application/json",
23
- Cookie: new Cookies().getAll(),
24
- },
25
- next: {
26
- revalidate: 0,
27
- },
28
- });
29
- return yield response.json();
30
- });
31
- }
@@ -1,5 +0,0 @@
1
- "use client";
2
- import React, { useContext } from "react";
3
- const EditContext = React.createContext(undefined);
4
- export const EditContextProvider = EditContext.Provider;
5
- export const useEditContext = () => useContext(EditContext);
@@ -1,139 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import Cookies from "universal-cookie";
11
- export let currentOperation = undefined;
12
- export function setCurrentOperation(operation) {
13
- currentOperation = operation;
14
- }
15
- export function executeEditOperation(editOperation, sessionId) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- const response = yield fetch("/alpaca/headless/editor/edit?sessionId=" + sessionId, {
18
- method: "POST",
19
- body: JSON.stringify(editOperation),
20
- credentials: "include",
21
- headers: {
22
- "Content-Type": "application/json",
23
- Cookie: new Cookies().getAll(),
24
- },
25
- next: {
26
- revalidate: 0,
27
- },
28
- });
29
- if (response.status === 500 || response.redirected) {
30
- return {
31
- type: "error",
32
- summary: "Error",
33
- details: "An error occured while saving changes.",
34
- };
35
- }
36
- if (response.status === 401) {
37
- return {
38
- type: "unauthenticated",
39
- summary: "Unauthorized",
40
- details: "Not logged in anymore?",
41
- };
42
- }
43
- return yield response.json();
44
- });
45
- }
46
- export function executeUndo(sessionId) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const response = yield fetch("/alpaca/headless/editor/undo?sessionId=" + sessionId, {
49
- method: "POST",
50
- body: "",
51
- credentials: "include",
52
- headers: {
53
- "Content-Type": "application/json",
54
- Cookie: new Cookies().getAll(),
55
- },
56
- next: {
57
- revalidate: 0,
58
- },
59
- });
60
- if (response.status === 500 || response.redirected) {
61
- return {
62
- type: "error",
63
- summary: "Error",
64
- details: "An error occured while saving changes.",
65
- };
66
- }
67
- if (response.status === 401) {
68
- return {
69
- type: "error",
70
- summary: "Unauthorized",
71
- details: "Not logged in anymore?",
72
- };
73
- }
74
- return { type: "success" };
75
- });
76
- }
77
- export function executeRedo(sessionId) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- const response = yield fetch("/alpaca/headless/editor/redo?sessionId=" + sessionId, {
80
- method: "POST",
81
- body: "",
82
- credentials: "include",
83
- headers: {
84
- "Content-Type": "application/json",
85
- Cookie: new Cookies().getAll(),
86
- },
87
- next: {
88
- revalidate: 0,
89
- },
90
- });
91
- if (response.status === 500 || response.redirected) {
92
- return {
93
- type: "error",
94
- summary: "Error",
95
- details: "An error occured while saving changes.",
96
- };
97
- }
98
- if (response.status === 401) {
99
- return {
100
- type: "error",
101
- summary: "Unauthorized",
102
- details: "Not logged in anymore?",
103
- };
104
- }
105
- return { type: "success" };
106
- });
107
- }
108
- export function commitChanges(sessionId) {
109
- return __awaiter(this, void 0, void 0, function* () {
110
- const response = yield fetch("/alpaca/headless/editor/commit?sessionId=" + sessionId, {
111
- method: "POST",
112
- body: "",
113
- credentials: "include",
114
- headers: {
115
- "Content-Type": "application/json",
116
- Cookie: new Cookies().getAll(),
117
- },
118
- next: {
119
- revalidate: 0,
120
- },
121
- });
122
- if (response.ok)
123
- return { type: "success" };
124
- else {
125
- if (response.status === 401) {
126
- return {
127
- type: "error",
128
- summary: "Unauthorized",
129
- details: "Not logged in anymore?",
130
- };
131
- }
132
- return {
133
- type: "error",
134
- summary: "Error",
135
- details: "An error occured while saving changes.",
136
- };
137
- }
138
- });
139
- }
@@ -1,15 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useEditContext } from "../..";
4
- import { Editor } from "primereact/editor";
5
- export function RichTextEditor({ field }) {
6
- const editContext = useEditContext();
7
- if (!editContext)
8
- return;
9
- return (_jsx(Editor, { value: field.value, style: { width: "100%" }, onTextChange: (e) => {
10
- var _a;
11
- // console.log("Text change: " + field.itemId);
12
- editContext.editField(field, (_a = e.htmlValue) !== null && _a !== void 0 ? _a : "", true);
13
- field.value = e.htmlValue;
14
- } }, field.itemId + field.id + field.language + field.version));
15
- }
@@ -1,13 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useEditContext } from "../..";
4
- import { InputText } from "primereact/inputtext";
5
- export function SingleLineText({ field }) {
6
- const editContext = useEditContext();
7
- if (!editContext)
8
- return;
9
- return (_jsx(InputText, { value: field.value, style: { width: "100%" }, onChange: (e) => {
10
- editContext.editField(field, e.target.value, false);
11
- field.value = e.target.value;
12
- } }, field.itemId + field.id + field.language + field.version));
13
- }
@@ -1,2 +0,0 @@
1
- export * from "./Editor";
2
- export * from "./editContext";
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
package/dist/esm/index.js DELETED
@@ -1,7 +0,0 @@
1
- export * from "./layoutData";
2
- export * from "./loadRouteData";
3
- export * from "./components";
4
- export * from "./alpacaContext";
5
- export * from "./fieldTypes";
6
- export * from "./editor";
7
- export * as GraphQLTypes from "./graphQLTypes";
@@ -1 +0,0 @@
1
- export {};
@@ -1,123 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { useAlpacaContext } from "./alpacaContext";
11
- import { cookies } from "next/headers";
12
- import { cache } from "react";
13
- const fetchRouteData = cache((path, host, mode, itemId, language, session, version) => __awaiter(void 0, void 0, void 0, function* () {
14
- const request = {
15
- Path: path,
16
- Host: host,
17
- Mode: mode,
18
- ItemId: itemId,
19
- Language: language,
20
- SessionId: session,
21
- Version: version,
22
- };
23
- const url = process.env.LAYOUT_SERVICE_URL +
24
- "/alpaca/headless/layout?session=" +
25
- session;
26
- console.log(`Fetching page layout from ${url}. Host:${request.Host} Path: ${request.Path}`);
27
- const response = yield fetch(url, {
28
- method: "POST",
29
- body: JSON.stringify(request),
30
- credentials: "include",
31
- headers: {
32
- "Content-Type": "application/json",
33
- Cookie: cookies().toString(),
34
- "x-api-key": getApiKey(),
35
- },
36
- next: {
37
- tags: ["pages"],
38
- revalidate: mode === "preview" || mode == "edit" ? 0 : 30,
39
- },
40
- });
41
- console.log("STATUS: " + response.status + " mode: " + mode);
42
- if (response.status === 404) {
43
- return {
44
- type: "notfound",
45
- };
46
- }
47
- if (response.status === 301) {
48
- return {
49
- type: "redirect",
50
- location: response.url,
51
- };
52
- }
53
- if (!response.ok) {
54
- const message = yield response.text();
55
- return {
56
- type: "error",
57
- errorCode: response.status,
58
- message: message,
59
- };
60
- }
61
- const data = yield response.json();
62
- //console.log(JSON.stringify(data, null, 2));
63
- const context = useAlpacaContext();
64
- context.pageContext = {
65
- itemId: data.page.id,
66
- language: data.page.language,
67
- site: data.site,
68
- pageEditing: data.page.editing,
69
- pageState: "",
70
- database: data.page.database,
71
- };
72
- context.fields = data.page.fields;
73
- context.edit = data.edit;
74
- const dictionary = yield loadDictionary(context.pageContext.site.name, context.pageContext.language, mode);
75
- context.dictionary = dictionary;
76
- context.translate = (text) => {
77
- return context.dictionary[text] || text;
78
- };
79
- return Object.assign(Object.assign({}, data.page), { type: "page" });
80
- }));
81
- export function loadRouteData(params, searchParams, host) {
82
- var _a, _b;
83
- return __awaiter(this, void 0, void 0, function* () {
84
- const result = yield fetchRouteData((_b = (_a = params.path) === null || _a === void 0 ? void 0 : _a.join("/")) !== null && _b !== void 0 ? _b : "/", host, searchParams["mode"] || "normal", searchParams["itemid"], searchParams["language"], searchParams["session"], searchParams["version"]);
85
- return result;
86
- });
87
- }
88
- function loadDictionary(siteName, language, mode) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- const url = process.env.LAYOUT_SERVICE_URL +
91
- "/alpaca/headless/dictionary?siteName=" +
92
- siteName +
93
- "&language=" +
94
- language;
95
- console.log(`Fetching dictionary from ${url}.`);
96
- const response = yield fetch(url, {
97
- method: "GET",
98
- credentials: "include",
99
- headers: {
100
- "Content-Type": "application/json",
101
- Cookie: cookies().toString(),
102
- "x-api-key": getApiKey(),
103
- },
104
- next: {
105
- tags: ["dictionary"],
106
- revalidate: mode === "preview" || mode == "edit" ? 15 : 600,
107
- },
108
- });
109
- if (!response.ok) {
110
- console.log("Could not load dictionary: Response code: " + response.status);
111
- return {};
112
- }
113
- const data = yield response.json();
114
- console.log(data);
115
- return data;
116
- });
117
- }
118
- function getApiKey() {
119
- const apiKey = process.env.ALPACA_HEADLESS_API_KEY || process.env.API_KEY;
120
- if (!apiKey)
121
- console.log("ERROR: Could not find API key environment variable: ALPACA_HEADLESS_API_KEY");
122
- return apiKey;
123
- }
@@ -1,49 +0,0 @@
1
- import crypto from "crypto";
2
- import "url";
3
- const protectedParams = [
4
- "w",
5
- "h",
6
- "mw",
7
- "mh",
8
- "sc",
9
- "as",
10
- "bc",
11
- "db",
12
- "iar",
13
- "la",
14
- "thn",
15
- "vs",
16
- "sc_content",
17
- "sc_lang",
18
- "sc_site",
19
- "gray",
20
- "rev",
21
- "devicepixelratio",
22
- "encodequality",
23
- "rx",
24
- "ry",
25
- "rw",
26
- "rh",
27
- "crop",
28
- ];
29
- export function hashImageUrl(url) {
30
- if (!process.env.MEDIA_REQUESTPROTECTION_SHAREDSECRET)
31
- return url;
32
- if (!url)
33
- return url;
34
- const baseURL = 'http://temp-base-url.com'; // This will serve as a placeholder.
35
- const uri = new URL(url.toLowerCase(), baseURL);
36
- uri.searchParams.delete("hash");
37
- const searchParams = protectedParams
38
- .map((x) => ({ name: x, val: uri.searchParams.get(x) }))
39
- .filter((x) => x.val)
40
- .map((x) => x.name + "=" + x.val)
41
- .join("&");
42
- const stringToProtect = uri.pathname.substring(1) + "?" + searchParams;
43
- const hash = crypto
44
- .createHash("md5")
45
- .update(stringToProtect + process.env.MEDIA_REQUESTPROTECTION_SHAREDSECRET, "utf16le")
46
- .digest("hex");
47
- uri.searchParams.set("hash", hash);
48
- return url.startsWith('http') ? uri.toString() : uri.pathname + uri.search;
49
- }
@@ -1,4 +0,0 @@
1
- import { Page } from "..";
2
- export declare function PageInfo({ page }: {
3
- page: Page | null;
4
- }): import("react/jsx-runtime").JSX.Element | undefined;