@alpaca-headless/alpaca-headless-nextjs 1.0.27 → 1.0.129

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 +20 -39
  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 +35 -10
  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 +530 -72
  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 +30 -15
  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 -64
  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 -60
  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,157 +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, jsxs as _jsxs } from "react/jsx-runtime";
12
- import { useEffect, useRef, useState } from "react";
13
- import { TerminalService } from "primereact/terminalservice";
14
- import { useRouter, useSearchParams } from "next/navigation";
15
- import { Terminal } from "./Terminal";
16
- export function AiTerminal({ requestRefresh, selection, }) {
17
- const searchParams = useSearchParams();
18
- const [messages, setMessages] = useState([]);
19
- const [tokens, setTokens] = useState({ in: 0, out: 0 });
20
- const selectionRef = useRef(selection);
21
- useEffect(() => {
22
- selectionRef.current = selection;
23
- }, [selection]);
24
- const messagesRef = useRef(messages);
25
- useEffect(() => {
26
- messagesRef.current = messages;
27
- }, [messages]);
28
- const router = useRouter();
29
- function commandHandler(text, callback) {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- const newMessages = [
32
- ...messagesRef.current,
33
- { content: text, role: "user", name: "user" },
34
- ];
35
- let lastRefresh = new Date().getTime();
36
- const response = yield prompt(newMessages, selectionRef.current, searchParams.get("session"), searchParams.get("itemid"), searchParams.get("language"), searchParams.get("version"), (response) => {
37
- console.log(response);
38
- setTokens({
39
- in: response.numInputTokens,
40
- out: response.numOutputTokens,
41
- });
42
- handleResponse(response, callback, false);
43
- if (response.editOperations.length) {
44
- if (new Date().getTime() - lastRefresh > 500) {
45
- requestRefresh("delayed");
46
- router.refresh();
47
- lastRefresh = new Date().getTime();
48
- }
49
- }
50
- });
51
- if (response) {
52
- handleResponse(response, callback, true);
53
- setTokens({ in: response.numInputTokens, out: response.numOutputTokens });
54
- router.refresh();
55
- }
56
- // if (response) {
57
- // messages.push({content: text, 'role': 'assistant', 'name': 'assistant'});
58
- // if(response.editOperations) {
59
- // const newEditOperations = [...editOperationsRef.current, {
60
- // type:'composite',
61
- // name: 'ghostwriter',
62
- // date: new Date(),
63
- // operations: response.editOperations
64
- // }];
65
- // setEditOperations(newEditOperations);
66
- // }
67
- if (response === null || response === void 0 ? void 0 : response.responseText)
68
- newMessages.push({
69
- content: response.responseText,
70
- role: "assistant",
71
- name: "assistant",
72
- });
73
- // TerminalService.emit('response', response.responseText);
74
- // }
75
- // // else
76
- // // TerminalService.emit('clear');
77
- setMessages(newMessages);
78
- });
79
- }
80
- useEffect(() => {
81
- TerminalService.on("command", commandHandler);
82
- return () => {
83
- TerminalService.off("command", commandHandler);
84
- };
85
- }, []);
86
- return (_jsxs("div", { className: "a-h-full a-flex a-flex-col a-relative a-flex-1", children: [_jsx("div", { className: "a-flex-1 a-relative", children: _jsx("div", { className: "a-inset-0 a-absolute", children: _jsx(Terminal, { onReset: () => setMessages([]), commandHandler: (v, callback) => {
87
- commandHandler(v, callback);
88
- } }) }) }), _jsxs("div", { className: "a-text-xs", children: ["Tokens in: ", tokens.in, " out: ", tokens.out] })] }));
89
- }
90
- function prompt(messages, selection, session, itemid, language, version, callback) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- const response = yield fetch("/alpaca/headless/ai/prompt", {
93
- method: "POST",
94
- body: JSON.stringify({
95
- messages,
96
- itemid,
97
- language,
98
- version,
99
- selection,
100
- sessionId: session,
101
- }),
102
- credentials: "omit",
103
- headers: {
104
- "Content-Type": "application/json",
105
- //Cookie: 'test'// new Cookies().getAll(),
106
- },
107
- next: {
108
- revalidate: 0,
109
- },
110
- });
111
- if (!(response === null || response === void 0 ? void 0 : response.body))
112
- return null;
113
- const reader = response.body.getReader();
114
- const decoder = new TextDecoder();
115
- let buffer = "";
116
- let result = null;
117
- while (true) {
118
- const { done, value } = yield reader.read();
119
- if (done) {
120
- break;
121
- }
122
- buffer += decoder.decode(value, { stream: true }); // 'stream: true' ensures that any incomplete multi-byte characters aren't malformed.
123
- // Split the buffer by newline and keep the last partial line for the next iteration.
124
- const lines = buffer.split("\n");
125
- if (lines.length > 0) {
126
- buffer = lines.pop() || ""; // Incomplete line (if any) is kept for the next iteration.
127
- for (let line of lines) {
128
- if (line.trim() === "")
129
- continue; // Skip empty lines if any.
130
- try {
131
- const jsonData = JSON.parse(line);
132
- callback(jsonData);
133
- result = jsonData;
134
- }
135
- catch (e) {
136
- console.error("Error parsing line:" + line, e);
137
- }
138
- }
139
- }
140
- }
141
- // If there's any remaining content in the buffer after processing all chunks, try to process it.
142
- if (buffer.trim() !== "") {
143
- try {
144
- const jsonData = JSON.parse(buffer);
145
- result = jsonData;
146
- }
147
- catch (e) {
148
- console.error("Error parsing the final buffer content:", e);
149
- }
150
- }
151
- return result;
152
- });
153
- }
154
- function handleResponse(response, terminalCallback, isFinished) {
155
- console.log(response.responseText);
156
- terminalCallback(response.responseText, isFinished);
157
- }
@@ -1,10 +0,0 @@
1
- "use client";
2
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
- export function ComponentInfo({ component, }) {
4
- var _a;
5
- if (!(component === null || component === void 0 ? void 0 : component.fields))
6
- return;
7
- const hostingPageItem = component.hostingPageItem ? (_jsx("div", { children: _jsxs("div", { className: "a-text-xs", children: ["Source: ", component.hostingPageItem.path, "( ID:", " ", component.hostingPageItem.id, ")"] }) })) : null;
8
- const linkedComponent = component.linkedComponentItem ? (_jsx("div", { children: _jsxs("div", { className: "a-text-xs", children: ["Source: ", component.linkedComponentItem.path] }) })) : null;
9
- return (_jsxs("div", { className: "a-p-1", children: [_jsx("h2", { className: "a-text-xl a-font-bold a-my-2", children: component.name }), _jsxs("div", { className: "a-text-xs", children: ["ID: ", component.id] }), _jsxs("div", { className: "a-text-xs", children: ["Languages: ", (_a = component.translations) === null || _a === void 0 ? void 0 : _a.join(", ")] }), hostingPageItem, linkedComponent] }));
10
- }
@@ -1,72 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { TabPanel, TabView } from "primereact/tabview";
3
- import { useEditContext } from "..";
4
- import ContentTree from "./ContentTree";
5
- export function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
6
- const editContext = useEditContext();
7
- if (!editContext)
8
- return;
9
- const insertingPlaceholderKeys = selection
10
- .map((x) => editContext.getComponentById(x))
11
- .filter((x) => x)
12
- .reduce((a, x) => a.concat(x.placeholders.map((y) => y.key)), []);
13
- const selectedPlaceholderKeys = [
14
- ...selection.filter((x) => x.indexOf("_") > 0),
15
- ...insertingPlaceholderKeys,
16
- ];
17
- const insertOptions = collectInsertOptions(page, selectedPlaceholderKeys);
18
- // function directInsert() {
19
- // if (editContext!.selectedForInsertion.indexOf("_") > 0) {
20
- // var lastUnderscoreIndex =
21
- // editContext!.selectedForInsertion.lastIndexOf("_");
22
- // const index = editContext!.selectedForInsertion.substring(
23
- // lastUnderscoreIndex + 1
24
- // );
25
- // const key = editContext!.selectedForInsertion.substring(
26
- // 0,
27
- // lastUnderscoreIndex
28
- // );
29
- // editContext!.droppedInPlaceholder(key, parseInt(index));
30
- // }
31
- // }
32
- return (_jsxs(TabView, { children: [_jsx(TabPanel, { header: "New", children: _jsx("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
33
- function handleDragStart(event) {
34
- dragStart({ type: "template", templateId: option.id });
35
- event.stopPropagation();
36
- }
37
- function handleDragEnd() {
38
- dragEnd();
39
- }
40
- return (_jsxs("div", {
41
- // onClick={directInsert}
42
- draggable: true, onDragStart: handleDragStart, onDragEnd: handleDragEnd, className: "a-p-3 a-shadow-md a-flex a-items-center a-flex-col a-gap-1 a-cursor-grab", children: [_jsx("img", { src: option.icon, width: "32", height: "32" }), option.name] }, option.id));
43
- }) }) }), _jsx(TabPanel, { header: "Existing", children: _jsx(ContentTree, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
44
- dragStart({
45
- type: "link-component",
46
- templateId: itemNode.templateId,
47
- componentId: itemNode.id,
48
- });
49
- }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
50
- (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined }) })] }));
51
- }
52
- function collectInsertOptions(page, placeholderKeys) {
53
- const insertOptionsMap = new Map();
54
- function traverse(placeholders) {
55
- for (const placeholder of placeholders) {
56
- if (placeholder.insertOptions &&
57
- (placeholderKeys.length === 0 ||
58
- placeholderKeys.includes(placeholder.key))) {
59
- for (const option of placeholder.insertOptions) {
60
- insertOptionsMap.set(option.id, option);
61
- }
62
- }
63
- for (const component of placeholder.components) {
64
- traverse(component.placeholders);
65
- }
66
- }
67
- }
68
- traverse(page.placeholders);
69
- // Convert the map back into an array of objects
70
- const insertOptionsArray = Array.from(insertOptionsMap.values());
71
- return insertOptionsArray;
72
- }
@@ -1,196 +0,0 @@
1
- "use client";
2
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEditContext } from "..";
4
- import { Tree, } from "primereact/tree";
5
- import { useEffect, useRef, useState } from "react";
6
- import { Tag } from "primereact/tag";
7
- import { ContextMenu } from "primereact/contextmenu";
8
- import { confirmDialog } from "primereact/confirmdialog";
9
- function mapPlaceholderNode(p, parent) {
10
- const node = {
11
- key: p.key,
12
- componentId: p.key,
13
- label: p.name,
14
- data: p,
15
- icon: "pi pi-folder",
16
- parent: parent,
17
- droppable: true,
18
- };
19
- node.children = p.components.map((c) => mapComponentNode(c, node));
20
- return node;
21
- }
22
- function mapPlaceholders(c, parent) {
23
- if (c.placeholders.length > 1)
24
- return c.placeholders.map((x) => mapPlaceholderNode(x, parent));
25
- else if (c.placeholders.length > 0)
26
- return c.placeholders[0].components.map((c) => mapComponentNode(c, parent));
27
- return [];
28
- }
29
- function mapComponentNode(c, parent) {
30
- const node = {
31
- key: c.linkItemId + "_" + c.id || c.id,
32
- componentId: c.id,
33
- label: c.name,
34
- icon: "pi pi-stop",
35
- data: c,
36
- parent: parent,
37
- tags: [],
38
- droppable: true,
39
- };
40
- if (c.translations && c.translations.length > 1)
41
- node.tags.push({
42
- severity: "info",
43
- value: c.translations.length + " Languages",
44
- icon: "pi pi-flag",
45
- });
46
- if (c.hostingPageItem) {
47
- node.tags.push({
48
- severity: "warning",
49
- value: "Layout",
50
- icon: "",
51
- color: "rgb(192 132 252)",
52
- onClick: () => {
53
- var _a;
54
- confirmDialog({
55
- header: "Edit layout",
56
- message: "Edit layout " + ((_a = c.hostingPageItem) === null || _a === void 0 ? void 0 : _a.path) + "?",
57
- accept: () => window.open(c.hostingPageItem.editUrl, "_blank"),
58
- });
59
- },
60
- });
61
- }
62
- node.children = mapPlaceholders(c, node);
63
- return node;
64
- }
65
- // function selectTreeNode(event: TreeSelectionEvent): void {
66
- // editContext.setSelection(event.value.keys());
67
- // }
68
- export function ComponentTree({ page, selection, }) {
69
- const [expandedKeys, setExpandedKeys] = useState({
70
- "0": true,
71
- });
72
- const [selectedKeys, setSelectedKeys] = useState();
73
- const cm = useRef(null);
74
- let editContext = useEditContext();
75
- useEffect(() => {
76
- const newSelectedKeys = {};
77
- selection.forEach((id) => {
78
- const nodes = findNodesByComponentId(id, nodeDictionary);
79
- nodes.forEach((nodeId) => {
80
- newSelectedKeys[nodeId] = true;
81
- });
82
- });
83
- const newExpandedKeys = Object.assign({}, expandedKeys);
84
- Object.keys(newSelectedKeys).forEach((id) => {
85
- const node = nodeDictionary[id];
86
- if (node)
87
- expandParents(node.parent, newExpandedKeys);
88
- });
89
- if (!hasSameProps(newExpandedKeys, expandedKeys))
90
- setExpandedKeys(newExpandedKeys);
91
- setSelectedKeys(newSelectedKeys);
92
- }, [selection]);
93
- if (!page)
94
- return _jsx(_Fragment, {});
95
- const componentsNode = {
96
- key: "0",
97
- componentId: "0",
98
- label: "Components",
99
- data: "Components Folder",
100
- icon: "pi pi-fw pi-list",
101
- };
102
- componentsNode.children = mapPlaceholders(page, componentsNode);
103
- const treeNodes = [componentsNode];
104
- const nodeDictionary = {};
105
- createMap(treeNodes, nodeDictionary);
106
- const nodeTemplate = (node, options) => {
107
- var _a;
108
- let label = (_jsxs("span", { "data-key": node.key, className: "a-flex", children: [node.label, (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => (_jsx(Tag, { icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: { backgroundColor: x.color, marginLeft: "8px" } }, x.value)))] }));
109
- return _jsx("span", { className: options.className, children: label });
110
- };
111
- const menu = [
112
- {
113
- label: "View Key",
114
- icon: "pi pi-search",
115
- command: () => {
116
- // toast.current.show({ severity: 'success', summary: 'Node Key', detail: selectedNodeKey });
117
- },
118
- },
119
- {
120
- label: "Toggle",
121
- icon: "pi pi-sort",
122
- command: () => {
123
- // let _expandedKeys = { ...expandedKeys };
124
- // if (_expandedKeys[selectedNodeKey]) delete _expandedKeys[selectedNodeKey];
125
- // else _expandedKeys[selectedNodeKey] = true;
126
- // setExpandedKeys(_expandedKeys);
127
- },
128
- },
129
- ];
130
- function findNode(ev) {
131
- const treeNodeParent = ev.target.closest(".p-treenode");
132
- if (treeNodeParent) {
133
- const childWithDataKey = treeNodeParent.querySelector("[data-key]");
134
- if (childWithDataKey) {
135
- return childWithDataKey;
136
- }
137
- }
138
- return null;
139
- }
140
- return (_jsxs("div", { onDragOverCapture: (ev) => {
141
- var _a;
142
- if (!findNode(ev))
143
- ev.dataTransfer.dropEffect = "none";
144
- ev.dataTransfer.dropEffect =
145
- ((_a = editContext === null || editContext === void 0 ? void 0 : editContext.dragObject) === null || _a === void 0 ? void 0 : _a.type) == "template" ? "copy" : "move";
146
- ev.preventDefault();
147
- ev.stopPropagation();
148
- }, onDropCapture: (ev) => {
149
- var node = findNode(ev);
150
- if (node)
151
- alert(node.getAttribute("data-key"));
152
- ev.stopPropagation();
153
- }, children: [_jsx(ContextMenu, { model: menu, ref: cm }), _jsx(Tree, { value: treeNodes, selectionMode: "multiple", selectionKeys: selectedKeys, className: "a-w-full alpaca-no-border", onToggle: (e) => setExpandedKeys(e.value), expandedKeys: expandedKeys, nodeTemplate: nodeTemplate, dragdropScope: "ignore", onSelectionChange: (ev) => {
154
- if (ev.value) {
155
- const selectedKeys = Object.keys(ev.value);
156
- const selectedComponentIds = selectedKeys
157
- .filter((key) => nodeDictionary[key])
158
- .map((key) => nodeDictionary[key].componentId);
159
- editContext === null || editContext === void 0 ? void 0 : editContext.setSelection(selectedComponentIds);
160
- }
161
- else {
162
- editContext === null || editContext === void 0 ? void 0 : editContext.setSelection([]);
163
- }
164
- }, onContextMenu: (e) => { var _a; return (_a = cm.current) === null || _a === void 0 ? void 0 : _a.show(e.originalEvent); } })] }));
165
- }
166
- function createMap(treeNodes, nodeDictionary) {
167
- treeNodes.forEach((n) => {
168
- if (n.key)
169
- nodeDictionary[n.key] = n;
170
- if (n.children)
171
- createMap(n.children, nodeDictionary);
172
- });
173
- }
174
- function findNodesByComponentId(id, nodesDictionary) {
175
- const allNodes = Object.values(nodesDictionary);
176
- return allNodes
177
- .filter((x) => x.componentId === id)
178
- .map((x) => { var _a; return ((_a = x.key) === null || _a === void 0 ? void 0 : _a.toString()) || ""; });
179
- }
180
- function expandParents(node, newExpandedKeys) {
181
- if (!node)
182
- return;
183
- if (node.key)
184
- newExpandedKeys[node.key] = true;
185
- if (node.parent)
186
- expandParents(node.parent, newExpandedKeys);
187
- }
188
- function hasSameProps(obj1, obj2) {
189
- var obj1Props = Object.keys(obj1), obj2Props = Object.keys(obj2);
190
- if (obj1Props.length == obj2Props.length) {
191
- return obj1Props.every(function (prop) {
192
- return obj2Props.indexOf(prop) >= 0;
193
- });
194
- }
195
- return false;
196
- }
@@ -1,117 +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, jsxs as _jsxs } from "react/jsx-runtime";
12
- import { ProgressSpinner } from "primereact/progressspinner";
13
- import { useEditContext } from "..";
14
- import { Tree, } from "primereact/tree";
15
- import { useEffect, useState } from "react";
16
- import { getChildren } from "./contentService";
17
- export default function ContentTree({ isDraggable, dragStart, dragEnd, expandIdPath, selectionMode, selectedItemIds, rootItemId, onSelectionChange, filter, templateIds, }) {
18
- const [treeNodes, setTreeNodes] = useState([]);
19
- const [expandedKeys, setExpandedKeys] = useState();
20
- const editContext = useEditContext();
21
- const loadOnExpand = (event) => __awaiter(this, void 0, void 0, function* () {
22
- const node = event.node;
23
- node.loading = true;
24
- yield loadNodeChildren(node);
25
- let value = [...treeNodes];
26
- setTreeNodes(value);
27
- node.loading = false;
28
- });
29
- const loadNodeChildren = (node) => __awaiter(this, void 0, void 0, function* () {
30
- if (!node.children) {
31
- if (!node.key || !editContext)
32
- return node.children || [];
33
- let children = yield getChildren(node.key, editContext === null || editContext === void 0 ? void 0 : editContext.sessionId, templateIds);
34
- if (filter)
35
- children = filter(children);
36
- node.children = children.map((x) => ({
37
- key: x.id,
38
- label: x.name,
39
- iconUrl: x.icon,
40
- isDraggable: isDraggable && isDraggable(x),
41
- data: x,
42
- leaf: !x.hasChildren,
43
- }));
44
- }
45
- return node.children;
46
- });
47
- useEffect(() => {
48
- const treeNodes = [
49
- {
50
- key: rootItemId.toLowerCase(),
51
- label: "content",
52
- leaf: false,
53
- },
54
- ];
55
- const newExpandedKeys = getExpandedKeys();
56
- setExpandedKeys(newExpandedKeys);
57
- preLoadNodes(newExpandedKeys, treeNodes);
58
- setTreeNodes(treeNodes);
59
- }, []);
60
- function getExpandedKeys() {
61
- const newExpandedKeys = {};
62
- newExpandedKeys[rootItemId.toLocaleLowerCase()] = true;
63
- const idPathArray = expandIdPath.split("/");
64
- idPathArray.forEach((x) => {
65
- if (x !== "")
66
- newExpandedKeys[x.substring(1, x.length - 1).toLowerCase()] = true;
67
- });
68
- return newExpandedKeys;
69
- }
70
- function preLoadNodes(expandedKeys, treeNodes) {
71
- return __awaiter(this, void 0, void 0, function* () {
72
- yield doPreloadNodes(expandedKeys, treeNodes);
73
- setExpandedKeys(Object.assign({}, expandedKeys));
74
- setTreeNodes([...treeNodes]);
75
- });
76
- }
77
- function doPreloadNodes(expandedKeys, treeNodes) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- for (let i = 0; i < treeNodes.length; i++) {
80
- if (expandedKeys[treeNodes[i].key]) {
81
- const children = yield loadNodeChildren(treeNodes[i]);
82
- yield doPreloadNodes(expandedKeys, children);
83
- }
84
- }
85
- });
86
- }
87
- const nodeTemplate = (node, options) => {
88
- let label = _jsx("b", { children: node.label });
89
- if (node.url) {
90
- label = (_jsx("a", { onDragStart: (e) => e.preventDefault(), href: node.url, className: "a-text-primary hover:a-underline a-font-semibold", children: node.label }));
91
- }
92
- return (_jsxs("span", { onDragStart: (event) => {
93
- handleDragStart(event, node.data);
94
- }, onDragEnd: handleDragEnd, draggable: node.isDraggable, className: `a-flex a-gap-2 ${node.isDraggable ? "a-cursor-grab" : ""} ${options.className}`, children: [_jsx("img", { src: node.iconUrl, style: { height: "20px" }, width: "20", height: "20", onDragStart: (e) => e.preventDefault() }), label, node.loading && (_jsx(ProgressSpinner, { style: { width: "20px", height: "20px" } }))] }));
95
- };
96
- function handleDragStart(event, item) {
97
- if (dragStart)
98
- dragStart(item);
99
- event.stopPropagation();
100
- }
101
- function handleDragEnd() {
102
- if (dragEnd)
103
- dragEnd();
104
- }
105
- const newSelectedKeys = {};
106
- selectedItemIds === null || selectedItemIds === void 0 ? void 0 : selectedItemIds.forEach((x) => {
107
- newSelectedKeys[x] = true;
108
- });
109
- return (_jsx("div", { onDragEnterCapture: (ev) => ev.stopPropagation(), onDragOverCapture: (ev) => ev.stopPropagation(), onDragLeaveCapture: (ev) => ev.stopPropagation(), children: _jsx(Tree, { value: treeNodes, expandedKeys: expandedKeys, onToggle: (e) => setExpandedKeys(e.value), nodeTemplate: nodeTemplate,
110
- //dragdropScope={isDraggable ? "alpaca" : undefined}
111
- className: "a-w-full alpaca-no-border a-p-0", onExpand: loadOnExpand, selectionMode: selectionMode, onSelectionChange: (ev) => {
112
- if (onSelectionChange && selectionMode == "multiple")
113
- onSelectionChange(Object.keys(ev.value || {}));
114
- if (onSelectionChange && selectionMode == "single")
115
- onSelectionChange([ev.value]);
116
- }, selectionKeys: newSelectedKeys }) }));
117
- }
@@ -1,9 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import JSONPretty from "react-json-pretty";
3
- import "react-json-pretty/themes/monikai.css";
4
- import { TabView, TabPanel } from "primereact/tabview";
5
- export function Debug({ component, page }) {
6
- if (!component && !page)
7
- return;
8
- return (_jsxs(TabView, { children: [component && _jsx(TabPanel, { header: "Component", children: _jsx(JSONPretty, { data: component }) }), _jsx(TabPanel, { header: "Page", children: _jsx(JSONPretty, { data: page }) })] }));
9
- }
@@ -1,31 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { DataTable } from "primereact/datatable";
4
- import { Column } from "primereact/column";
5
- import { InputText } from "primereact/inputtext";
6
- import { useEditContext } from "..";
7
- export function DictionaryEditor({ dictionary }) {
8
- if (!dictionary)
9
- return;
10
- const context = useEditContext();
11
- if (!context) {
12
- console.log("Context is undefined!");
13
- return;
14
- }
15
- let entries = Object.keys(dictionary).map((k) => ({
16
- key: k,
17
- translation: dictionary[k],
18
- }));
19
- entries = [...entries, ...context === null || context === void 0 ? void 0 : context.unresolvedDictionaryKeys.map(x => ({
20
- key: x,
21
- translation: "[undefined]"
22
- }))];
23
- entries.sort((a, b) => (a.key > b.key ? -1 : 1));
24
- const textEditor = (options) => {
25
- if (options.value != "[undefined]")
26
- return _jsx(InputText, { type: "text", value: options.value, onChange: (e) => options.editorCallback(e.target.value) });
27
- else
28
- return null;
29
- };
30
- return (_jsx(_Fragment, { children: _jsxs(DataTable, { value: entries, children: [_jsx(Column, { field: "key", header: "Key" }), _jsx(Column, { field: "translation", header: "Translation", editor: (options) => textEditor(options) })] }) }));
31
- }
@@ -1,57 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from "react";
4
- import { useEditContext } from "..";
5
- export function EditFrame({ componentId, children, }) {
6
- var _a, _b;
7
- const editContext = useEditContext();
8
- if (!editContext)
9
- return children;
10
- const { getComponentById, selection, setSelection } = editContext;
11
- const [isRemoved, setIsRemoved] = useState(false);
12
- const clientComponent = getComponentById(componentId);
13
- if (!clientComponent) {
14
- return children;
15
- }
16
- function select(e) {
17
- e.stopPropagation();
18
- if (clientComponent)
19
- setSelection([clientComponent.id]);
20
- }
21
- let classNames = "ap-editframe";
22
- let color = clientComponent.linkItemId ? "orange-400" : "sky-400";
23
- if (clientComponent.hostingPageItem)
24
- color = "purple-400";
25
- const isSelected = selection && selection.indexOf(clientComponent.id) >= 0;
26
- if (isSelected)
27
- classNames = `ap-editframe a-relative a-ring-2 a-ring-${color}`;
28
- function handleDragStart(event) {
29
- if (!clientComponent)
30
- return;
31
- event.dataTransfer.setData("text/plain", clientComponent.id);
32
- event.dataTransfer.setData("alpaca", clientComponent.id);
33
- setTimeout(() => {
34
- editContext.dragStart({
35
- type: "component",
36
- templateId: clientComponent.templateId,
37
- componentId: clientComponent.id,
38
- });
39
- }, 50);
40
- event.stopPropagation();
41
- }
42
- const isDraggable = isSelected && !clientComponent.hostingPageItem;
43
- if ((_a = children.props) === null || _a === void 0 ? void 0 : _a.className)
44
- classNames += " " + ((_b = children === null || children === void 0 ? void 0 : children.props) === null || _b === void 0 ? void 0 : _b.className);
45
- if (isRemoved)
46
- classNames += " ap-removed";
47
- return (_jsxs("div", { className: classNames, onClick: select, draggable: isDraggable, onDragStart: handleDragStart, children: [isSelected && (_jsxs("div", { className: `a-absolute a-top-0 a-right-0 a-text-white a-px-3 a-bg-${color} ${isDraggable ? "a-cursor-move" : ""}`, children: [clientComponent.name, _jsx("button", { className: "a-ml-3", onClick: (ev) => {
48
- ev.preventDefault();
49
- ev.stopPropagation();
50
- editContext.removeComponent(clientComponent.linkItemId || clientComponent.id, () => setIsRemoved(true));
51
- }, children: _jsx("i", { className: "pi pi-trash" }) }), clientComponent.placeholders.length > 0 && (_jsx("button", { className: "a-ml-3", onClick: (ev) => {
52
- editContext.setSelectedForInsertion(clientComponent.id);
53
- editContext.openComponentPalette();
54
- ev.stopPropagation();
55
- ev.preventDefault();
56
- }, children: _jsx("i", { className: "pi pi-plus" }) }))] })), children] }));
57
- }