@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
@@ -16,10 +16,17 @@ const react_1 = require("react");
16
16
  const terminalservice_1 = require("primereact/terminalservice");
17
17
  const navigation_1 = require("next/navigation");
18
18
  const Terminal_1 = require("./Terminal");
19
- function AiTerminal({ requestRefresh, selection, }) {
19
+ const editContext_1 = require("./editContext");
20
+ const dropdown_1 = require("primereact/dropdown");
21
+ function AiTerminal({ selection, newEditOperations, }) {
22
+ var _a;
20
23
  const searchParams = (0, navigation_1.useSearchParams)();
24
+ const editContext = (0, editContext_1.useEditContext)();
25
+ if (!editContext)
26
+ return null;
21
27
  const [messages, setMessages] = (0, react_1.useState)([]);
22
- const [tokens, setTokens] = (0, react_1.useState)({ in: 0, out: 0 });
28
+ const [response, setResponse] = (0, react_1.useState)();
29
+ const [model, setModel] = (0, react_1.useState)("gpt-3.5-turbo-1106");
23
30
  const selectionRef = (0, react_1.useRef)(selection);
24
31
  (0, react_1.useEffect)(() => {
25
32
  selectionRef.current = selection;
@@ -35,25 +42,38 @@ function AiTerminal({ requestRefresh, selection, }) {
35
42
  ...messagesRef.current,
36
43
  { content: text, role: "user", name: "user" },
37
44
  ];
38
- let lastRefresh = new Date().getTime();
39
- const response = yield prompt(newMessages, selectionRef.current, searchParams.get("session"), searchParams.get("itemid"), searchParams.get("language"), searchParams.get("version"), (response) => {
40
- console.log(response);
41
- setTokens({
42
- in: response.numInputTokens,
43
- out: response.numOutputTokens,
44
- });
45
+ let lastOps = 0;
46
+ const response = yield prompt(newMessages, selectionRef.current, searchParams.get("session"), searchParams.get("itemid"), searchParams.get("language"), searchParams.get("version"), model, (response) => {
47
+ setResponse(response);
45
48
  handleResponse(response, callback, false);
46
49
  if (response.editOperations.length) {
47
- if (new Date().getTime() - lastRefresh > 500) {
48
- requestRefresh("delayed");
49
- router.refresh();
50
- lastRefresh = new Date().getTime();
50
+ if (newEditOperations)
51
+ newEditOperations(response.editOperations);
52
+ if (lastOps != response.editOperations.length) {
53
+ lastOps = response.editOperations.length;
54
+ editContext.requestRefresh("immediate");
55
+ }
56
+ else {
57
+ response.editOperations.forEach((op) => {
58
+ if (op.type === "edit-field") {
59
+ const editFieldOp = op;
60
+ const liveField = editContext.getLiveFieldIfExists({
61
+ id: editFieldOp.fieldId,
62
+ item: {
63
+ id: editFieldOp.itemId,
64
+ language: editFieldOp.language,
65
+ version: editFieldOp.version,
66
+ },
67
+ });
68
+ if (liveField != null)
69
+ liveField.value = editFieldOp.value;
70
+ }
71
+ });
51
72
  }
52
73
  }
53
74
  });
54
75
  if (response) {
55
76
  handleResponse(response, callback, true);
56
- setTokens({ in: response.numInputTokens, out: response.numOutputTokens });
57
77
  router.refresh();
58
78
  }
59
79
  // if (response) {
@@ -86,12 +106,15 @@ function AiTerminal({ requestRefresh, selection, }) {
86
106
  terminalservice_1.TerminalService.off("command", commandHandler);
87
107
  };
88
108
  }, []);
89
- return ((0, jsx_runtime_1.jsxs)("div", { className: "a-h-full a-flex a-flex-col a-relative a-flex-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-flex-1 a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute", children: (0, jsx_runtime_1.jsx)(Terminal_1.Terminal, { onReset: () => setMessages([]), commandHandler: (v, callback) => {
109
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "a-h-full a-flex a-flex-col a-relative a-flex-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-flex-1 a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute", children: (0, jsx_runtime_1.jsx)(Terminal_1.Terminal, { onReset: () => setMessages([]), toolbar: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: model, onChange: (e) => setModel(e.value), options: ["gpt-3.5-turbo-1106", "gpt-4-1106-preview"] }) }), commandHandler: (v, callback) => {
90
110
  commandHandler(v, callback);
91
- } }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Tokens in: ", tokens.in, " out: ", tokens.out] })] }));
111
+ } }) }) }), (response === null || response === void 0 ? void 0 : response.numInputTokens) && ((0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Tokens in: ", response === null || response === void 0 ? void 0 : response.numInputTokens, " out: ", response === null || response === void 0 ? void 0 : response.numOutputTokens, " ", (_a = response === null || response === void 0 ? void 0 : response.toolCalls) === null || _a === void 0 ? void 0 : _a.map((tool_call) => {
112
+ var _a;
113
+ return (_a = tool_call.function) === null || _a === void 0 ? void 0 : _a.name;
114
+ })] }))] }));
92
115
  }
93
116
  exports.AiTerminal = AiTerminal;
94
- function prompt(messages, selection, session, itemid, language, version, callback) {
117
+ function prompt(messages, selection, session, itemid, language, version, model, callback) {
95
118
  return __awaiter(this, void 0, void 0, function* () {
96
119
  const response = yield fetch("/alpaca/headless/ai/prompt", {
97
120
  method: "POST",
@@ -101,6 +124,7 @@ function prompt(messages, selection, session, itemid, language, version, callbac
101
124
  language,
102
125
  version,
103
126
  selection,
127
+ model,
104
128
  sessionId: session,
105
129
  }),
106
130
  credentials: "omit",
@@ -152,10 +176,10 @@ function prompt(messages, selection, session, itemid, language, version, callbac
152
176
  console.error("Error parsing the final buffer content:", e);
153
177
  }
154
178
  }
179
+ console.log(result);
155
180
  return result;
156
181
  });
157
182
  }
158
183
  function handleResponse(response, terminalCallback, isFinished) {
159
- console.log(response.responseText);
160
184
  terminalCallback(response.responseText, isFinished);
161
185
  }
@@ -3,12 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ComponentInfo = void 0;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const Section_1 = require("./ui/Section");
6
7
  function ComponentInfo({ component, }) {
7
8
  var _a;
8
9
  if (!(component === null || component === void 0 ? void 0 : component.fields))
9
10
  return;
10
- const hostingPageItem = component.hostingPageItem ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Source: ", component.hostingPageItem.path, "( ID:", " ", component.hostingPageItem.id, ")"] }) })) : null;
11
- const linkedComponent = component.linkedComponentItem ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Source: ", component.linkedComponentItem.path] }) })) : null;
12
- return ((0, jsx_runtime_1.jsxs)("div", { className: "a-p-1", children: [(0, jsx_runtime_1.jsx)("h2", { className: "a-text-xl a-font-bold a-my-2", children: component.name }), (0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["ID: ", component.id] }), (0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Languages: ", (_a = component.translations) === null || _a === void 0 ? void 0 : _a.join(", ")] }), hostingPageItem, linkedComponent] }));
11
+ const hostingPageItem = component.hostingPageItem ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Source:" }), (0, jsx_runtime_1.jsxs)("div", { children: [component.hostingPageItem.path, " (ID: ", component.hostingPageItem.id, ")"] })] })) : null;
12
+ const linkedComponent = component.linkedComponentItem ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Source:" }), (0, jsx_runtime_1.jsxs)("div", { children: [component.linkedComponentItem.path, " (", component.linkedComponentItem.id, ")"] })] })) : null;
13
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "a-py-5 a-px-3 a-text-xl a-font-bold a-my-2", children: component.name }), (0, jsx_runtime_1.jsx)(Section_1.Section, { title: "Info", children: (0, jsx_runtime_1.jsxs)("div", { className: "a-grid a-grid-cols-[min-content_1fr] a-gap-3 a-text-xs a-p-2 a-bg-gray-100", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "ID:" }), (0, jsx_runtime_1.jsxs)("div", { children: [" ", component.id] }), (0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Template" }), (0, jsx_runtime_1.jsxs)("div", { children: [component.componentType, " (", component.templateId, ")"] }), (0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Languages" }), (0, jsx_runtime_1.jsx)("div", { children: (_a = component.translations) === null || _a === void 0 ? void 0 : _a.join(", ") }), hostingPageItem, linkedComponent] }) })] }));
13
14
  }
14
15
  exports.ComponentInfo = ComponentInfo;
@@ -1,79 +1,23 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.ComponentPalette = void 0;
7
4
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const tabview_1 = require("primereact/tabview");
9
5
  const __1 = require("..");
10
- const ContentTree_1 = __importDefault(require("./ContentTree"));
11
- function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
6
+ function ComponentPalette({ insertOptions, dragStart, dragEnd, }) {
12
7
  const editContext = (0, __1.useEditContext)();
13
8
  if (!editContext)
14
9
  return;
15
- const insertingPlaceholderKeys = selection
16
- .map((x) => editContext.getComponentById(x))
17
- .filter((x) => x)
18
- .reduce((a, x) => a.concat(x.placeholders.map((y) => y.key)), []);
19
- const selectedPlaceholderKeys = [
20
- ...selection.filter((x) => x.indexOf("_") > 0),
21
- ...insertingPlaceholderKeys,
22
- ];
23
- const insertOptions = collectInsertOptions(page, selectedPlaceholderKeys);
24
- // function directInsert() {
25
- // if (editContext!.selectedForInsertion.indexOf("_") > 0) {
26
- // var lastUnderscoreIndex =
27
- // editContext!.selectedForInsertion.lastIndexOf("_");
28
- // const index = editContext!.selectedForInsertion.substring(
29
- // lastUnderscoreIndex + 1
30
- // );
31
- // const key = editContext!.selectedForInsertion.substring(
32
- // 0,
33
- // lastUnderscoreIndex
34
- // );
35
- // editContext!.droppedInPlaceholder(key, parseInt(index));
36
- // }
37
- // }
38
- return ((0, jsx_runtime_1.jsxs)(tabview_1.TabView, { children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "New", children: (0, jsx_runtime_1.jsx)("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
39
- function handleDragStart(event) {
40
- dragStart({ type: "template", templateId: option.id });
41
- event.stopPropagation();
42
- }
43
- function handleDragEnd() {
44
- dragEnd();
45
- }
46
- return ((0, jsx_runtime_1.jsxs)("div", {
47
- // onClick={directInsert}
48
- 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: [(0, jsx_runtime_1.jsx)("img", { src: option.icon, width: "32", height: "32" }), option.name] }, option.id));
49
- }) }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Existing", children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
50
- dragStart({
51
- type: "link-component",
52
- templateId: itemNode.templateId,
53
- componentId: itemNode.id,
54
- });
55
- }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
56
- (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined }) })] }));
57
- }
58
- exports.ComponentPalette = ComponentPalette;
59
- function collectInsertOptions(page, placeholderKeys) {
60
- const insertOptionsMap = new Map();
61
- function traverse(placeholders) {
62
- for (const placeholder of placeholders) {
63
- if (placeholder.insertOptions &&
64
- (placeholderKeys.length === 0 ||
65
- placeholderKeys.includes(placeholder.key))) {
66
- for (const option of placeholder.insertOptions) {
67
- insertOptionsMap.set(option.id, option);
68
- }
10
+ return ((0, jsx_runtime_1.jsx)("div", { className: "a-grid a-gap-1 a-grid-cols-[repeat(auto-fill,_minmax(70px,_1fr))] a-m-3", children: insertOptions
11
+ .filter((x) => !x.isHidden)
12
+ .map((option) => {
13
+ function handleDragStart(event) {
14
+ dragStart({ type: "template", templateId: option.id });
15
+ event.stopPropagation();
69
16
  }
70
- for (const component of placeholder.components) {
71
- traverse(component.placeholders);
17
+ function handleDragEnd() {
18
+ dragEnd();
72
19
  }
73
- }
74
- }
75
- traverse(page.placeholders);
76
- // Convert the map back into an array of objects
77
- const insertOptionsArray = Array.from(insertOptionsMap.values());
78
- return insertOptionsArray;
20
+ return ((0, jsx_runtime_1.jsxs)("div", { draggable: true, onDragStart: handleDragStart, onDragEnd: handleDragEnd, className: "a-p-2 a-shadow-md a-flex a-items-center a-flex-col a-gap-2 a-cursor-grab a-text-center a-text-xs", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-p-2 a-border", children: (0, jsx_runtime_1.jsx)("img", { src: option.icon, width: "16", height: "16" }) }), option.name] }, option.id));
21
+ }) }));
79
22
  }
23
+ exports.ComponentPalette = ComponentPalette;
@@ -9,6 +9,7 @@ const react_1 = require("react");
9
9
  const tag_1 = require("primereact/tag");
10
10
  const contextmenu_1 = require("primereact/contextmenu");
11
11
  const confirmdialog_1 = require("primereact/confirmdialog");
12
+ const componentCommands_1 = require("./componentCommands");
12
13
  function mapPlaceholderNode(p, parent) {
13
14
  const node = {
14
15
  key: p.key,
@@ -39,13 +40,21 @@ function mapComponentNode(c, parent) {
39
40
  parent: parent,
40
41
  tags: [],
41
42
  droppable: true,
43
+ className: c.isRemovedFromMasterLanguage ? "a-text-gray-400" : "",
42
44
  };
43
- if (c.translations && c.translations.length > 1)
45
+ // if (c.translations && c.translations.length > 1)
46
+ // node.tags!.push({
47
+ // severity: "info",
48
+ // value: c.translations!.length + " Languages",
49
+ // icon: "pi pi-flag",
50
+ // });
51
+ if (c.isInheritedFromMasterLanguage) {
44
52
  node.tags.push({
45
53
  severity: "info",
46
- value: c.translations.length + " Languages",
47
- icon: "pi pi-flag",
54
+ value: "Inherited " + (c.isRemovedFromMasterLanguage ? " / removed" : ""),
55
+ icon: "pi pi-caret-right",
48
56
  });
57
+ }
49
58
  if (c.hostingPageItem) {
50
59
  node.tags.push({
51
60
  severity: "warning",
@@ -62,19 +71,38 @@ function mapComponentNode(c, parent) {
62
71
  },
63
72
  });
64
73
  }
74
+ if (c.linkedComponentItem) {
75
+ node.tags.push({
76
+ severity: "warning",
77
+ value: "Shared",
78
+ icon: "",
79
+ color: "rgb(251, 146, 60)",
80
+ });
81
+ }
65
82
  node.children = mapPlaceholders(c, node);
66
83
  return node;
67
84
  }
68
- // function selectTreeNode(event: TreeSelectionEvent): void {
69
- // editContext.setSelection(event.value.keys());
70
- // }
71
85
  function ComponentTree({ page, selection, }) {
72
86
  const [expandedKeys, setExpandedKeys] = (0, react_1.useState)({
73
87
  "0": true,
74
88
  });
75
89
  const [selectedKeys, setSelectedKeys] = (0, react_1.useState)();
90
+ const [nodeDataForContextMenu, setNodeDataForContextMenu] = (0, react_1.useState)();
76
91
  const cm = (0, react_1.useRef)(null);
77
92
  let editContext = (0, __1.useEditContext)();
93
+ const treeRef = (0, react_1.useRef)(null);
94
+ (0, react_1.useEffect)(() => {
95
+ if (treeRef.current) {
96
+ const selectedNodeKey = Object.keys(selectedKeys || {})[0];
97
+ const selectedNodeElement = treeRef.current.querySelector(`[data-key="${selectedNodeKey}"]`);
98
+ if (selectedNodeElement) {
99
+ selectedNodeElement.scrollIntoView({
100
+ behavior: "smooth",
101
+ block: "nearest",
102
+ });
103
+ }
104
+ }
105
+ }, [selectedKeys]);
78
106
  (0, react_1.useEffect)(() => {
79
107
  const newSelectedKeys = {};
80
108
  selection.forEach((id) => {
@@ -93,78 +121,67 @@ function ComponentTree({ page, selection, }) {
93
121
  setExpandedKeys(newExpandedKeys);
94
122
  setSelectedKeys(newSelectedKeys);
95
123
  }, [selection]);
124
+ if (!editContext)
125
+ return;
96
126
  if (!page)
97
127
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
98
- const componentsNode = {
99
- key: "0",
100
- componentId: "0",
101
- label: "Components",
102
- data: "Components Folder",
103
- icon: "pi pi-fw pi-list",
104
- };
105
- componentsNode.children = mapPlaceholders(page, componentsNode);
106
- const treeNodes = [componentsNode];
128
+ const treeNodes = mapPlaceholders(page, {});
107
129
  const nodeDictionary = {};
108
130
  createMap(treeNodes, nodeDictionary);
109
131
  const nodeTemplate = (node, options) => {
110
132
  var _a;
111
- let label = ((0, jsx_runtime_1.jsxs)("span", { "data-key": node.key, className: "a-flex", children: [node.label, (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => ((0, jsx_runtime_1.jsx)(tag_1.Tag, { icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: { backgroundColor: x.color, marginLeft: "8px" } }, x.value)))] }));
133
+ let label = ((0, jsx_runtime_1.jsxs)("span", { "data-key": node.key, className: "a-flex a-items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: node.className, children: node.label }), (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => ((0, jsx_runtime_1.jsx)(tag_1.Tag, { icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: {
134
+ backgroundColor: x.color,
135
+ marginLeft: "8px",
136
+ fontSize: "10px",
137
+ padding: "1px 4px 2px 2px",
138
+ } }, x.value)))] }));
112
139
  return (0, jsx_runtime_1.jsx)("span", { className: options.className, children: label });
113
140
  };
114
- const menu = [
115
- {
116
- label: "View Key",
117
- icon: "pi pi-search",
118
- command: () => {
119
- // toast.current.show({ severity: 'success', summary: 'Node Key', detail: selectedNodeKey });
120
- },
121
- },
122
- {
123
- label: "Toggle",
124
- icon: "pi pi-sort",
125
- command: () => {
126
- // let _expandedKeys = { ...expandedKeys };
127
- // if (_expandedKeys[selectedNodeKey]) delete _expandedKeys[selectedNodeKey];
128
- // else _expandedKeys[selectedNodeKey] = true;
129
- // setExpandedKeys(_expandedKeys);
130
- },
131
- },
132
- ];
133
- function findNode(ev) {
134
- const treeNodeParent = ev.target.closest(".p-treenode");
135
- if (treeNodeParent) {
136
- const childWithDataKey = treeNodeParent.querySelector("[data-key]");
137
- if (childWithDataKey) {
138
- return childWithDataKey;
139
- }
140
- }
141
- return null;
141
+ let selectedEntities = selection
142
+ .filter((key) => nodeDictionary[key])
143
+ .map((key) => nodeDictionary[key].data)
144
+ .filter((x) => x);
145
+ if (selectedEntities.length === 0 && nodeDataForContextMenu) {
146
+ selectedEntities = [nodeDataForContextMenu];
142
147
  }
143
- return ((0, jsx_runtime_1.jsxs)("div", { onDragOverCapture: (ev) => {
144
- var _a;
145
- if (!findNode(ev))
146
- ev.dataTransfer.dropEffect = "none";
147
- ev.dataTransfer.dropEffect =
148
- ((_a = editContext === null || editContext === void 0 ? void 0 : editContext.dragObject) === null || _a === void 0 ? void 0 : _a.type) == "template" ? "copy" : "move";
149
- ev.preventDefault();
150
- ev.stopPropagation();
151
- }, onDropCapture: (ev) => {
152
- var node = findNode(ev);
153
- if (node)
154
- alert(node.getAttribute("data-key"));
155
- ev.stopPropagation();
156
- }, children: [(0, jsx_runtime_1.jsx)(contextmenu_1.ContextMenu, { model: menu, ref: cm }), (0, jsx_runtime_1.jsx)(tree_1.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) => {
148
+ let commands = (0, componentCommands_1.getComponentCommands)(selectedEntities, editContext);
149
+ const menu = commands.map((x) => ({
150
+ label: x.label,
151
+ icon: x.icon,
152
+ disabled: x.disabled,
153
+ command: () => {
154
+ x.execute();
155
+ },
156
+ }));
157
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "a-p-1", ref: treeRef, children: [(0, jsx_runtime_1.jsx)(contextmenu_1.ContextMenu, { model: menu, ref: cm }), (0, jsx_runtime_1.jsx)(tree_1.Tree, { value: treeNodes, selectionMode: "multiple", selectionKeys: selectedKeys, className: "a-w-full alpaca-no-border a-text-xs", onToggle: (e) => setExpandedKeys(e.value), expandedKeys: expandedKeys, nodeTemplate: nodeTemplate, dragdropScope: "ignore", onSelectionChange: (ev) => {
157
158
  if (ev.value) {
158
159
  const selectedKeys = Object.keys(ev.value);
159
160
  const selectedComponentIds = selectedKeys
160
161
  .filter((key) => nodeDictionary[key])
161
162
  .map((key) => nodeDictionary[key].componentId);
162
163
  editContext === null || editContext === void 0 ? void 0 : editContext.setSelection(selectedComponentIds);
164
+ if (selectedComponentIds.length === 1)
165
+ editContext.setScrollIntoView(selectedComponentIds[0]);
163
166
  }
164
167
  else {
165
168
  editContext === null || editContext === void 0 ? void 0 : editContext.setSelection([]);
166
169
  }
167
- }, onContextMenu: (e) => { var _a; return (_a = cm.current) === null || _a === void 0 ? void 0 : _a.show(e.originalEvent); } })] }));
170
+ }, onDragDrop: (e) => {
171
+ console.log(e.dropNode);
172
+ console.log(e.dragNode);
173
+ console.log(e.dropIndex);
174
+ }, onContextMenu: (e) => {
175
+ var _a;
176
+ const componentId = nodeDictionary[e.node.key].componentId;
177
+ if (componentId) {
178
+ if (selection.indexOf(componentId) < 0) {
179
+ editContext === null || editContext === void 0 ? void 0 : editContext.setSelection([componentId]);
180
+ }
181
+ }
182
+ setNodeDataForContextMenu(e.node.data);
183
+ (_a = cm.current) === null || _a === void 0 ? void 0 : _a.show(e.originalEvent);
184
+ } })] }));
168
185
  }
169
186
  exports.ComponentTree = ComponentTree;
170
187
  function createMap(treeNodes, nodeDictionary) {
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const react_1 = require("react");
5
+ const dialog_1 = require("primereact/dialog");
6
+ const button_1 = require("primereact/button");
7
+ const ConfirmationDialog = (0, react_1.forwardRef)((_props, ref) => {
8
+ const [visible, setVisible] = (0, react_1.useState)(false);
9
+ const [props, setProps] = (0, react_1.useState)();
10
+ (0, react_1.useImperativeHandle)(ref, () => ({
11
+ confirm: (props) => {
12
+ setVisible(true);
13
+ setProps(props);
14
+ },
15
+ }));
16
+ const handleAccept = () => {
17
+ props === null || props === void 0 ? void 0 : props.accept();
18
+ setVisible(false);
19
+ };
20
+ const handleReject = () => {
21
+ if (props === null || props === void 0 ? void 0 : props.reject)
22
+ props.reject();
23
+ setVisible(false);
24
+ };
25
+ const handleCancel = () => {
26
+ setVisible(false);
27
+ };
28
+ const dialogFooter = ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: (props === null || props === void 0 ? void 0 : props.acceptLabel) || "Yes", icon: (props === null || props === void 0 ? void 0 : props.acceptIcon) || "pi pi-check", onClick: handleAccept, className: "p-button-text" }), (props === null || props === void 0 ? void 0 : props.rejectLabel) && ((0, jsx_runtime_1.jsx)(button_1.Button, { label: props === null || props === void 0 ? void 0 : props.rejectLabel, icon: (props === null || props === void 0 ? void 0 : props.rejectIcon) || "pi pi-times", onClick: handleReject, className: "p-button-text" })), (props === null || props === void 0 ? void 0 : props.showCancel) && ((0, jsx_runtime_1.jsx)(button_1.Button, { label: "Cancel", icon: "pi pi-ban", onClick: handleCancel, className: "p-button-text" }))] }));
29
+ return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { header: (props === null || props === void 0 ? void 0 : props.header) || "Confirm", visible: visible, style: { width: "50vw" }, footer: dialogFooter, onHide: handleCancel, children: (0, jsx_runtime_1.jsxs)("div", { className: "a-pt-3 a-flex a-items-center a-gap-2", children: [(props === null || props === void 0 ? void 0 : props.icon) && (0, jsx_runtime_1.jsx)("i", { className: props.icon + " a-text-3xl" }), props === null || props === void 0 ? void 0 : props.message] }) }));
30
+ });
31
+ exports.default = ConfirmationDialog;