@alpaca-headless/alpaca-headless-nextjs 1.0.27 → 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 +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
@@ -31,7 +31,7 @@ exports.EditorClientHost = void 0;
31
31
  const jsx_runtime_1 = require("react/jsx-runtime");
32
32
  const dynamic_1 = __importDefault(require("next/dynamic"));
33
33
  const EditorClient = (0, dynamic_1.default)(() => Promise.resolve().then(() => __importStar(require("./EditorClient"))).then((dnd) => dnd.EditorClient), { ssr: false });
34
- function EditorClientHost({ content, dictionaryObject, children, edit, }) {
35
- return ((0, jsx_runtime_1.jsx)(EditorClient, { content: content, dictionaryObject: dictionaryObject, edit: edit, children: children }));
34
+ function EditorClientHost({ content, dictionaryObject, children, site, edit, }) {
35
+ return ((0, jsx_runtime_1.jsx)(EditorClient, { page: content, site: site, dictionaryObject: dictionaryObject, edit: edit, children: children }));
36
36
  }
37
37
  exports.EditorClientHost = EditorClientHost;
@@ -1,21 +1,35 @@
1
1
  "use strict";
2
2
  "use client";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
3
6
  Object.defineProperty(exports, "__esModule", { value: true });
4
7
  exports.FieldList = void 0;
5
8
  const jsx_runtime_1 = require("react/jsx-runtime");
6
9
  const __1 = require("..");
7
- const inputtext_1 = require("primereact/inputtext");
8
- const checkbox_1 = require("primereact/checkbox");
9
- const SingleLineText_1 = require("./fieldTypes/SingleLineText");
10
- const RichTextEditor_1 = require("./fieldTypes/RichTextEditor");
10
+ const react_1 = require("react");
11
+ const FieldListField_1 = __importDefault(require("./FieldListField"));
12
+ const Section_1 = require("./ui/Section");
11
13
  function FieldList({ fields }) {
12
14
  const editContext = (0, __1.useEditContext)();
15
+ const [liveFields, setLiveFields] = (0, react_1.useState)();
13
16
  if (!editContext)
14
- if (!fields)
17
+ return;
18
+ if (!fields)
19
+ return;
20
+ const fieldsArray = Array.isArray(fields)
21
+ ? fields
22
+ : Object.values(fields);
23
+ (0, react_1.useEffect)(() => {
24
+ if (!editContext)
15
25
  return;
16
- if (!Array.isArray(fields))
17
- fields = Object.values(fields);
18
- const sections = fields.reduce((acc, value) => {
26
+ setLiveFields(fieldsArray.map((x) => x.type === "rich text" || x.type === "text"
27
+ ? editContext.getLiveField(x)
28
+ : x));
29
+ }, [fields]);
30
+ if (!liveFields)
31
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
32
+ const sections = liveFields.reduce((acc, value) => {
19
33
  // Group initialization
20
34
  if (!acc[value.section || "Default"]) {
21
35
  acc[value.section || "Default"] = [];
@@ -25,40 +39,13 @@ function FieldList({ fields }) {
25
39
  return acc;
26
40
  }, {});
27
41
  const sectionList = Object.values(sections);
28
- sectionList.sort((a, b) => b[0].sortOrder - a[0].sortOrder);
29
- return ((0, jsx_runtime_1.jsx)("div", { className: "a-p-1", children: Object.keys(sections).map((section) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "alpaca-fields-section-headline", children: section }), getSectionFields(sections[section], editContext)] }, section))) }));
30
- }
31
- exports.FieldList = FieldList;
32
- function getSectionFields(fields, editContext) {
33
- return fields
34
- .map((field) => editContext.getLiveField(field))
35
- .map((field) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "alpaca-field-label", children: field.name }), !field.containsFallbackValue ? ((0, jsx_runtime_1.jsx)("button", { className: "a-text-xs a-p-0 a-m-1", children: "Reset " })) : ((0, jsx_runtime_1.jsx)("button", { children: "Fallback" })), (0, jsx_runtime_1.jsx)("div", { children: getFieldEditor(field) })] }, field.id)));
36
- }
37
- function getFieldEditor(field) {
38
- switch (field.type) {
39
- case "checkbox":
40
- return checkbox(field);
41
- case "picture":
42
- return picture(field);
43
- case "image":
44
- return image(field);
45
- case "rich text":
46
- return (0, jsx_runtime_1.jsx)(RichTextEditor_1.RichTextEditor, { field: field });
47
- default:
48
- return (0, jsx_runtime_1.jsx)(SingleLineText_1.SingleLineText, { field: field });
42
+ sectionList.sort((a, b) => a[0].sectionSortOrder - b[0].sectionSortOrder);
43
+ function getSectionFields(fields) {
44
+ fields.sort((a, b) => a.sortOrder - b.sortOrder);
45
+ return fields.map((field) => ((0, jsx_runtime_1.jsx)(FieldListField_1.default, { field: field }, field.id)));
49
46
  }
47
+ return ((0, jsx_runtime_1.jsx)("div", { className: "a-bg-gray-100 a-h-fill-available", children: sectionList
48
+ .map((x) => x[0].section)
49
+ .map((section) => ((0, jsx_runtime_1.jsx)(Section_1.Section, { title: section, children: getSectionFields(sections[section]) }, section))) }));
50
50
  }
51
- function checkbox(field) {
52
- return (0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { checked: field.value === "1" });
53
- }
54
- // function singleLineText(field: Field) {
55
- // return <InputText value={field.value as string} />;
56
- // }
57
- function picture(field) {
58
- var _a, _b;
59
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("label", { className: "alpaca-minor-label", children: "Alt" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.alt) !== null && _b !== void 0 ? _b : "" })] }));
60
- }
61
- function image(field) {
62
- var _a, _b;
63
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("label", { className: "alpaca-minor-label", children: "Alt" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.altText) !== null && _b !== void 0 ? _b : "" })] }));
64
- }
51
+ exports.FieldList = FieldList;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const inputtext_1 = require("primereact/inputtext");
8
+ const __1 = require("..");
9
+ const CheckboxEditor_1 = require("./fieldTypes/CheckboxEditor");
10
+ const react_1 = require("react");
11
+ const RichTextEditor_1 = require("./fieldTypes/RichTextEditor");
12
+ const LinkFieldEditor_1 = require("./fieldTypes/LinkFieldEditor");
13
+ const PictureFieldEditor_1 = require("./fieldTypes/PictureFieldEditor");
14
+ const InternalLinkFieldEditor_1 = require("./fieldTypes/InternalLinkFieldEditor");
15
+ const TreeListEditor_1 = __importDefault(require("./fieldTypes/TreeListEditor"));
16
+ const SingleLineText_1 = require("./fieldTypes/SingleLineText");
17
+ const MultiLineText_1 = require("./fieldTypes/MultiLineText");
18
+ function FieldListField({ field }) {
19
+ var _a;
20
+ const editContext = (0, __1.useEditContext)();
21
+ if (!editContext)
22
+ return;
23
+ const ref = (0, react_1.useRef)(null);
24
+ const isFocusedField = ((_a = editContext === null || editContext === void 0 ? void 0 : editContext.focusedField) === null || _a === void 0 ? void 0 : _a.id) === field.id &&
25
+ editContext.focusedField.item.id === field.item.id &&
26
+ editContext.focusedField.item.language === field.item.language;
27
+ (0, react_1.useEffect)(() => {
28
+ if (ref.current && isFocusedField) {
29
+ ref.current.scrollIntoView({
30
+ behavior: "smooth",
31
+ block: "center",
32
+ inline: "center",
33
+ });
34
+ }
35
+ }, [editContext.focusedField]);
36
+ const liveField = editContext.getLiveField(field);
37
+ return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, className: isFocusedField ? "a-focused-field" : "", children: [(0, jsx_runtime_1.jsx)("label", { className: "a-font-bold a-block a-mt-5 a-mb-1 a-text-sm", children: field.name }), (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-gap-2", children: [!field.isFallback && liveField.rawValue !== null ? ((0, jsx_runtime_1.jsxs)("button", { className: "a-text-xs a-p-0 ", onClick: () => {
38
+ editContext === null || editContext === void 0 ? void 0 : editContext.editField({ field: field, rawValue: null });
39
+ }, children: ["Reset", " "] })) : ((0, jsx_runtime_1.jsx)("button", { className: "a-text-xs a-p-0", children: "Fallback" })), (0, jsx_runtime_1.jsx)("button", { className: "a-text-xs a-p-0", onClick: () => {
40
+ console.log(liveField);
41
+ }, children: "Debug" })] }), (0, jsx_runtime_1.jsx)("div", { className: "a-text-xs a-p-0 a-mt-1", children: getFieldEditor(liveField) })] }, field.id +
42
+ "_" +
43
+ field.item.id +
44
+ "_" +
45
+ field.item.language +
46
+ "_" +
47
+ field.item.version));
48
+ }
49
+ exports.default = FieldListField;
50
+ function getFieldEditor(field) {
51
+ switch (field.type) {
52
+ case "multi-line text":
53
+ return (0, jsx_runtime_1.jsx)(MultiLineText_1.MultiLineText, { field: field });
54
+ case "checkbox":
55
+ return (0, jsx_runtime_1.jsx)(CheckboxEditor_1.CheckboxEditor, { field: field });
56
+ case "image":
57
+ return image(field);
58
+ case "rich text":
59
+ return (0, jsx_runtime_1.jsx)(RichTextEditor_1.RichTextEditor, { field: field });
60
+ case "general link":
61
+ return (0, jsx_runtime_1.jsx)(LinkFieldEditor_1.LinkFieldEditor, { field: field });
62
+ case "picture":
63
+ return (0, jsx_runtime_1.jsx)(PictureFieldEditor_1.PictureFieldEditor, { field: field });
64
+ case "enhanced internal link":
65
+ return (0, jsx_runtime_1.jsx)(InternalLinkFieldEditor_1.InternalLinkFieldEditor, { field: field });
66
+ case "enhanced treelist":
67
+ return (0, jsx_runtime_1.jsx)(TreeListEditor_1.default, { field: field });
68
+ default:
69
+ return (0, jsx_runtime_1.jsx)(SingleLineText_1.SingleLineText, { field: field });
70
+ }
71
+ }
72
+ function image(field) {
73
+ var _a, _b;
74
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("label", { className: "alpaca-minor-label", children: "Alt" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: (_b = (_a = field.value) === null || _a === void 0 ? void 0 : _a.altText) !== null && _b !== void 0 ? _b : "" })] }));
75
+ }
@@ -0,0 +1,92 @@
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
+ function FloatingToolbar({ children, onPin, height, width, }) {
6
+ const [position, setPosition] = (0, react_1.useState)({ x: 0, y: 95 });
7
+ const [size, setSize] = (0, react_1.useState)({ width: 400, height: 70 });
8
+ const [dragging, setDragging] = (0, react_1.useState)(false);
9
+ const [resizing, setResizing] = (0, react_1.useState)(false);
10
+ const [offset, setOffset] = (0, react_1.useState)({ x: 0, y: 0 });
11
+ const [hidden, setHidden] = (0, react_1.useState)(false);
12
+ (0, react_1.useEffect)(() => {
13
+ console.log("WIDTH: ", width, "Height: ", height);
14
+ setSize({ width: width || 400, height: height || 70 });
15
+ }, []);
16
+ const handleMouseDown = (0, react_1.useCallback)((e) => {
17
+ // Start dragging and calculate the offset from the mouse to the sidebar top-left corner
18
+ setDragging(true);
19
+ setOffset({
20
+ x: e.clientX - position.x,
21
+ y: e.clientY - position.y,
22
+ });
23
+ }, [position]);
24
+ const handleMouseMove = (0, react_1.useCallback)((e) => {
25
+ if (dragging) {
26
+ // Update the position state based on mouse movement, adjusted by the initial offset
27
+ setPosition({
28
+ x: e.clientX - offset.x,
29
+ y: e.clientY - offset.y,
30
+ });
31
+ }
32
+ }, [dragging, offset]);
33
+ const handleMouseUp = (0, react_1.useCallback)(() => {
34
+ // Stop dragging
35
+ setDragging(false);
36
+ }, []);
37
+ const handleResizeMouseDown = (0, react_1.useCallback)((e) => {
38
+ e.preventDefault();
39
+ setResizing(true);
40
+ setOffset({
41
+ x: e.clientX,
42
+ y: e.clientY,
43
+ });
44
+ }, []);
45
+ const handleResizeMouseMove = (0, react_1.useCallback)((e) => {
46
+ if (resizing) {
47
+ const newWidth = size.width + (e.clientX - offset.x);
48
+ const newHeight = size.height + (e.clientY - offset.y);
49
+ setSize({
50
+ width: newWidth > 200 ? newWidth : 200, // Minimum width
51
+ height: newHeight > 100 ? newHeight : 100, // Minimum height
52
+ });
53
+ setOffset({
54
+ x: e.clientX,
55
+ y: e.clientY,
56
+ });
57
+ }
58
+ }, [resizing, offset, size]);
59
+ const handleResizeMouseUp = (0, react_1.useCallback)(() => {
60
+ setResizing(false);
61
+ }, []);
62
+ (0, react_1.useEffect)(() => {
63
+ if (resizing) {
64
+ document.addEventListener("mousemove", handleResizeMouseMove);
65
+ document.addEventListener("mouseup", handleResizeMouseUp);
66
+ }
67
+ return () => {
68
+ document.removeEventListener("mousemove", handleResizeMouseMove);
69
+ document.removeEventListener("mouseup", handleResizeMouseUp);
70
+ };
71
+ }, [resizing, handleResizeMouseMove, handleResizeMouseUp]);
72
+ // Add event listeners to the document when the sidebar is being dragged
73
+ (0, react_1.useEffect)(() => {
74
+ if (dragging) {
75
+ document.addEventListener("mousemove", handleMouseMove);
76
+ document.addEventListener("mouseup", handleMouseUp);
77
+ }
78
+ // Cleanup the document event listeners when the component unmounts or dragging stops
79
+ return () => {
80
+ document.removeEventListener("mousemove", handleMouseMove);
81
+ document.removeEventListener("mouseup", handleMouseUp);
82
+ };
83
+ }, [dragging, handleMouseMove, handleMouseUp]);
84
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "a-border a-border-gray-200 a-drop-shadow a-z-10 a-flex a-flex-col", onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, style: {
85
+ left: `${position.x}px`,
86
+ top: `${position.y}px`,
87
+ position: "absolute", // Use 'fixed' or 'absolute' depending on your layout needs
88
+ height: `${hidden ? 30 : size.height}px`,
89
+ width: `${size.width}px`,
90
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { className: "a-bg-gray-100 a-w-full a-flex a-justify-between a-items-between a-p-2 a-text-sm", style: { cursor: "move", userSelect: "none" }, onMouseDown: handleMouseDown, children: ["Toolbar", (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-gap-2", children: [hidden && ((0, jsx_runtime_1.jsx)("div", { className: "a-border-2 a-border-gray-800 a-w-4 a-h-4 a-cusor-pointer", onClick: () => setHidden(false) })), !hidden && ((0, jsx_runtime_1.jsx)("div", { className: "a-border-b-2 a-border-gray-800 a-w-4 a-h-4 a-cusor-pointer", onClick: () => setHidden(true) })), onPin && ((0, jsx_runtime_1.jsx)("i", { className: "pi pi-arrow-down-left a-cursor-pointer", onClick: onPin }))] })] }), (0, jsx_runtime_1.jsx)("div", { className: "a-flex-1", children: !hidden && children }), (0, jsx_runtime_1.jsx)("div", { className: "a-h-4 a-bg-gray-100" }), (0, jsx_runtime_1.jsx)("div", { className: "a-cursor-nwse-resize a-w-4 a-h-4 a-absolute -a-bottom-1 -a-right-2 a-text-gray-500", onMouseDown: handleResizeMouseDown, children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-sort-down -a-rotate-45 a-w-4 a-h-4" }) })] }));
91
+ }
92
+ exports.default = FloatingToolbar;
@@ -56,7 +56,7 @@ function GraphQL({ component }) {
56
56
  const fieldsjsonValues = findFields(component.graphql);
57
57
  function renderItem(fields) {
58
58
  const first = fields[0];
59
- return ((0, jsx_runtime_1.jsxs)("div", { children: ["Item: ", first.path, " ", first.id, " ", first.language, " ", first.version, (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: fields })] }, first.path + first.id + first.language + first.version));
59
+ return ((0, jsx_runtime_1.jsxs)("div", { children: ["Item: ", first.path, " ", first.id, " ", first.item.language, " ", first.item.version, (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: fields })] }, first.path + first.id + first.item.language + first.item.version));
60
60
  }
61
61
  function refresh() {
62
62
  var _a, _b;
@@ -70,9 +70,7 @@ function GraphQL({ component }) {
70
70
  }
71
71
  const field = {
72
72
  name: "_GraphQL",
73
- itemId: component === null || component === void 0 ? void 0 : component.id,
74
- language: language,
75
- version: version,
73
+ item: { id: component === null || component === void 0 ? void 0 : component.id, language: language, version: version },
76
74
  path: "graphql",
77
75
  id: "3622F861-ECA9-45D7-8DA7-2CDA35235002",
78
76
  value: query,
@@ -80,10 +78,10 @@ function GraphQL({ component }) {
80
78
  };
81
79
  const prettyQuery = (0, graphql_formatter_1.format)(query);
82
80
  setQuery(prettyQuery);
83
- editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, prettyQuery, false);
81
+ editContext === null || editContext === void 0 ? void 0 : editContext.editField({ field, value: prettyQuery });
84
82
  setShowSpinner(true);
85
83
  editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
86
84
  }
87
- return ((0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", style: { height: "100%" }, children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 50, className: "a-relative", children: (0, jsx_runtime_1.jsxs)("div", { className: "a-absolute a-inset-0 a-flex", children: [(0, jsx_runtime_1.jsx)(inputtextarea_1.InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1", style: { height: "100%" } }), (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "alpaca-editor-tabs", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "a-inset-0 a-absolute", children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Data", style: { height: "100%" }, className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-m-1", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "JSON", className: "a-relative", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: component.graphql }) }) })] }) })] }));
85
+ return ((0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", style: { height: "100%" }, children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 50, className: "a-relative", children: (0, jsx_runtime_1.jsxs)("div", { className: "a-absolute a-inset-0 a-flex", children: [(0, jsx_runtime_1.jsx)(inputtextarea_1.InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1", style: { height: "100%" } }), (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-relative", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "a-inset-0 a-absolute", children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Data", style: { height: "100%" }, className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-m-1", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "JSON", className: "a-relative", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: component.graphql }) }) })] }) })] }));
88
86
  }
89
87
  exports.GraphQL = GraphQL;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const FieldList_1 = require("./FieldList");
5
+ const ItemInfo_1 = require("./ItemInfo");
6
+ function ItemEditor({ item }) {
7
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ItemInfo_1.ItemInfo, { item: item }), (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: item.fields })] }));
8
+ }
9
+ exports.default = ItemEditor;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ItemInfo = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const Section_1 = require("./ui/Section");
7
+ function ItemInfo({ item }) {
8
+ var _a;
9
+ if (!(item === null || item === void 0 ? void 0 : item.fields))
10
+ return;
11
+ function formatRow(label, value) {
12
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: label }), (0, jsx_runtime_1.jsx)("div", { children: value })] }));
13
+ }
14
+ 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: item.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.jsx)("div", { children: item.id }), (0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Path:" }), (0, jsx_runtime_1.jsx)("div", { children: item.path }), (0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Language:" }), (0, jsx_runtime_1.jsx)("div", { children: item.language }), (0, jsx_runtime_1.jsx)("div", { className: "a-font-bold", children: "Version:" }), (0, jsx_runtime_1.jsx)("div", { children: item.version }), formatRow("Template", item.templateName + " (" + item.templateId + ")"), item.masterLanguages &&
15
+ formatRow("Master languages", item.masterLanguages.join(", ")), item.translations && ((0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Languages: ", (_a = item.translations) === null || _a === void 0 ? void 0 : _a.join(", ")] }))] }) })] }));
16
+ }
17
+ exports.ItemInfo = ItemInfo;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const dialog_1 = require("primereact/dialog");
8
+ const inputtext_1 = require("primereact/inputtext");
9
+ const react_1 = require("react");
10
+ const DialogButtons_1 = __importDefault(require("./DialogButtons"));
11
+ const button_1 = require("primereact/button");
12
+ const ItemNameDialog = (0, react_1.forwardRef)((_props, ref) => {
13
+ const [visible, setVisible] = (0, react_1.useState)(false);
14
+ const [props, setProps] = (0, react_1.useState)();
15
+ const [name, setName] = (0, react_1.useState)("");
16
+ (0, react_1.useEffect)(() => {
17
+ setName((props === null || props === void 0 ? void 0 : props.name) || "");
18
+ }, [props]);
19
+ (0, react_1.useImperativeHandle)(ref, () => ({
20
+ show: (props) => {
21
+ setVisible(true);
22
+ setProps(props);
23
+ },
24
+ }));
25
+ const isValidName = name.trim().length > 0;
26
+ const handleOk = () => {
27
+ setVisible(false);
28
+ props === null || props === void 0 ? void 0 : props.accept(name);
29
+ };
30
+ return ((0, jsx_runtime_1.jsxs)(dialog_1.Dialog, { visible: visible, onHide: () => {
31
+ setVisible(false);
32
+ }, header: "Choose item name", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-pt-3", children: (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { autoFocus: true, value: name, onChange: (e) => setName(e.target.value), onKeyDown: (ev) => {
33
+ if (ev.key === "Enter" && isValidName)
34
+ handleOk();
35
+ } }) }), (0, jsx_runtime_1.jsxs)(DialogButtons_1.default, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { onClick: handleOk, label: "Ok", disabled: !isValidName }), (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => setVisible(false), label: "Cancel" })] })] }));
36
+ });
37
+ exports.default = ItemNameDialog;
@@ -16,6 +16,6 @@ function LanguageSelector({ page, onLanguageSelected, }) {
16
16
  const countryOptionTemplate = (option) => {
17
17
  return ((0, jsx_runtime_1.jsxs)("div", { children: [option.name, " (", option.versions, ")"] }));
18
18
  };
19
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: page.language, onChange: (e) => onLanguageSelected(e.value), options: page.languages, optionValue: "languageCode", optionLabel: "name", placeholder: "Select a language", filter: true, valueTemplate: selectedCountryTemplate, itemTemplate: countryOptionTemplate }) }));
19
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { className: "a-text-sm", value: page.language, onChange: (e) => onLanguageSelected(e.value), options: page.languages, optionValue: "languageCode", optionLabel: "name", placeholder: "Select a language", filter: true, valueTemplate: selectedCountryTemplate, itemTemplate: countryOptionTemplate }) }));
20
20
  }
21
21
  exports.LanguageSelector = LanguageSelector;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LinkEditorDialog = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const dialog_1 = require("primereact/dialog");
9
+ const tabview_1 = require("primereact/tabview");
10
+ const ContentTree_1 = __importDefault(require("./ContentTree"));
11
+ const inputtext_1 = require("primereact/inputtext");
12
+ const react_1 = require("react");
13
+ const dropdown_1 = require("primereact/dropdown");
14
+ const divider_1 = require("primereact/divider");
15
+ const button_1 = require("primereact/button");
16
+ function LinkEditorDialog({ linkValue, onCancel, onOk, }) {
17
+ const [url, setUrl] = (0, react_1.useState)();
18
+ const [targetWindow, setTargetWindow] = (0, react_1.useState)();
19
+ const [customTarget, setCustomTarget] = (0, react_1.useState)();
20
+ const [queryString, setQueryString] = (0, react_1.useState)();
21
+ const [activeTabIndex, setActiveTabIndex] = (0, react_1.useState)();
22
+ const [selectedItemId, setSelectedItemId] = (0, react_1.useState)("");
23
+ (0, react_1.useEffect)(() => {
24
+ setUrl(linkValue.url);
25
+ setTargetWindow(linkValue.target);
26
+ if (linkValue.type == "external")
27
+ setActiveTabIndex(1);
28
+ else
29
+ setActiveTabIndex(0);
30
+ if (linkValue.target && linkValue.target != "_blank") {
31
+ setTargetWindow("custom");
32
+ setCustomTarget(linkValue.target);
33
+ }
34
+ if (linkValue.itemId)
35
+ setSelectedItemId(linkValue.itemId);
36
+ if (linkValue.queryString)
37
+ setQueryString(linkValue.queryString);
38
+ }, [linkValue]);
39
+ const targetWindows = [
40
+ { name: "Active browser", code: "" },
41
+ { name: "New browser", code: "_blank" },
42
+ { name: "Custom", code: "custom" },
43
+ ];
44
+ function getTargetWindow() {
45
+ if (targetWindow == "custom")
46
+ return customTarget;
47
+ return targetWindow;
48
+ }
49
+ return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { style: { width: "50%", height: "50%" }, onHide: onCancel, header: "Select link target", visible: true, children: (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-flex-col a-h-full", children: [(0, jsx_runtime_1.jsxs)(tabview_1.TabView, { activeIndex: activeTabIndex, className: "a-flex-1 a-mb-3", pt: { panelContainer: { className: "a-h-full" } }, children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Internal", className: "a-relative a-h-[calc(100%-25px)] a-p-0 ", children: (0, jsx_runtime_1.jsx)("div", { className: "a-overflow-auto a-absolute a-inset-0", children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { className: "a-h-full", expandIdPath: linkValue.targetItemLongId ||
50
+ "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", selectedItemIds: [selectedItemId], selectionMode: "single", rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", onSelectionChange: (selection) => {
51
+ setSelectedItemId(selection.id);
52
+ } }) }) }), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "External", children: [(0, jsx_runtime_1.jsx)("label", { className: "a-block", children: "Url:" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: url || "", onChange: (e) => {
53
+ setUrl(e.target.value);
54
+ }, className: "a-w-full" })] })] }), (0, jsx_runtime_1.jsx)(divider_1.Divider, {}), (0, jsx_runtime_1.jsx)("label", { children: "QueryString" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: queryString, onChange: (e) => setQueryString(e.target.value) }), (0, jsx_runtime_1.jsx)("label", { children: "Window" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { options: targetWindows, optionLabel: "name", optionValue: "code", value: targetWindow, onChange: (e) => setTargetWindow(e.value) }), targetWindow === "custom" && ((0, jsx_runtime_1.jsxs)("div", { className: "a-m-2", children: [(0, jsx_runtime_1.jsx)("label", { className: "a-block", children: "Custom:" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: customTarget || "", onChange: (e) => {
55
+ setCustomTarget(e.target.value);
56
+ } })] })), (0, jsx_runtime_1.jsx)(divider_1.Divider, {}), (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-justify-end a-gap-3 a-mt-3", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => {
57
+ onOk({
58
+ url,
59
+ target: getTargetWindow(),
60
+ customTarget: customTarget,
61
+ itemId: selectedItemId,
62
+ queryString: queryString,
63
+ type: activeTabIndex === 1 ? "external" : "internal",
64
+ });
65
+ }, children: "Select" }), (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: onCancel, children: "Cancel" })] })] }) }));
66
+ }
67
+ exports.LinkEditorDialog = LinkEditorDialog;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const splitter_1 = require("primereact/splitter");
8
+ const react_1 = require("react");
9
+ const FloatingToolbar_1 = __importDefault(require("./FloatingToolbar"));
10
+ const react_2 = __importDefault(require("react"));
11
+ function MainLayout({ leftSidebar, content, rightSidebar, }) {
12
+ var _a, _b;
13
+ const panels = [];
14
+ const [floatingLeftSidebar, setFloatingLeftSidebar] = (0, react_1.useState)(false);
15
+ const leftSidebarRef = react_2.default.useRef(null);
16
+ if (leftSidebar && !floatingLeftSidebar)
17
+ panels.push((0, jsx_runtime_1.jsxs)(splitter_1.SplitterPanel, { size: 15, className: "a-overflow-hidden a-relative", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-absolute a-top-3 a-right-3 a-cursor-pointer", children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-arrow-up-right", onClick: () => setFloatingLeftSidebar(true) }) }), (0, jsx_runtime_1.jsx)("div", { className: "a-w-full a-h-full", ref: leftSidebarRef, children: leftSidebar })] }, "left"));
18
+ panels.push((0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 60, className: "alpaca-editor-content a-relative ", children: content }, "center"));
19
+ if (rightSidebar)
20
+ panels.push((0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 15, children: rightSidebar }, "right"));
21
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(splitter_1.Splitter, { className: "a-border-none", children: panels }, (leftSidebar ? "left" : "no-left") +
22
+ (rightSidebar ? "right" : "no-right")), leftSidebar && floatingLeftSidebar && ((0, jsx_runtime_1.jsx)(FloatingToolbar_1.default, { onPin: () => setFloatingLeftSidebar(false), height: (((_a = leftSidebarRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight) || 300) - 70, width: ((_b = leftSidebarRef.current) === null || _b === void 0 ? void 0 : _b.clientWidth) || 300, children: leftSidebar }))] }));
23
+ }
24
+ exports.default = MainLayout;
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ "use client";
2
3
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
4
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
5
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -22,15 +23,36 @@ const editContext_1 = require("./editContext");
22
23
  const button_1 = require("primereact/button");
23
24
  const dialog_1 = require("primereact/dialog");
24
25
  const fileupload_1 = require("primereact/fileupload");
25
- const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
26
+ const utils_1 = require("primereact/utils");
27
+ const DialogButtons_1 = __importDefault(require("./DialogButtons"));
28
+ const MediaSelector = ({ visible, onHide, onMediaSelected, selectedIdPath, }) => {
26
29
  const [selectedFolderId, setSelectedFolderId] = (0, react_1.useState)();
27
30
  const [images, setImages] = (0, react_1.useState)();
28
31
  const [selectedImage, setSelectedImage] = (0, react_1.useState)();
32
+ const [selectedImageId, setSelectedImageId] = (0, react_1.useState)();
29
33
  const selection = selectedFolderId ? [selectedFolderId] : [];
30
34
  const editContext = (0, editContext_1.useEditContext)();
31
35
  (0, react_1.useEffect)(() => {
32
- loadThumbnails(selectedFolderId);
36
+ if (selectedIdPath) {
37
+ const path = selectedIdPath.split("/");
38
+ if (path.length > 1) {
39
+ setSelectedFolderId(path[path.length - 2]);
40
+ setSelectedImageId(path[path.length - 1].toLowerCase().substring(1, 37));
41
+ }
42
+ }
43
+ }, [selectedIdPath, visible]);
44
+ (0, react_1.useEffect)(() => {
45
+ loadThumbnailsAndSelectImage();
33
46
  }, [selectedFolderId]);
47
+ function loadThumbnailsAndSelectImage() {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ setSelectedImage(undefined);
50
+ setImages([]);
51
+ const images = yield loadThumbnails(selectedFolderId);
52
+ if (selectedImageId)
53
+ setSelectedImage(images === null || images === void 0 ? void 0 : images.find((x) => x.id === selectedImageId));
54
+ });
55
+ }
34
56
  function loadThumbnails(selectedFolderId) {
35
57
  return __awaiter(this, void 0, void 0, function* () {
36
58
  if (!selectedFolderId)
@@ -39,23 +61,26 @@ const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
39
61
  const children = yield (0, contentService_1.getChildren)(selectedFolderId, editContext.sessionId, [
40
62
  "C97BA923-8009-4858-BDD5-D8BE5FCCECF7",
41
63
  "F1828A2C-7E5D-4BBD-98CA-320474871548",
42
- ]);
64
+ ], false);
43
65
  setImages(children);
44
66
  return children;
45
67
  }
46
68
  });
47
69
  }
48
- return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { style: { width: "80%", height: "80%" }, visible: visible, onHide: onHide, children: (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-flex-col a-h-full", children: [(0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { className: "a-flex-1 a-border-0", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 70, className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-absolute a-inset-0 a-overflow-auto", children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
49
- if (selection.length)
50
- setSelectedFolderId(selection[0]);
70
+ return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { style: { width: "80%", height: "80%" }, visible: visible, onHide: onHide, header: "Select image", children: (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-flex-col a-h-full", children: [(0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { className: "a-flex-1 a-border-0", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 70, className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-absolute a-inset-0 a-overflow-auto a-p-2", children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: selectedIdPath !== null && selectedIdPath !== void 0 ? selectedIdPath : "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
71
+ const selectedNode = selection;
72
+ if (selectedNode)
73
+ setSelectedFolderId(selectedNode.id);
51
74
  else
52
75
  setSelectedFolderId(undefined);
53
- } }) }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-flex a-justify-center a-align-center", children: (0, jsx_runtime_1.jsx)("img", { src: selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.previewUrl }) })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-flex a-flex-wrap a-content-start a-items-start a-gap-2 a-absolute a-inset-0 a-overflow-auto", children: images === null || images === void 0 ? void 0 : images.map((t) => {
54
- return ((0, jsx_runtime_1.jsxs)("div", { className: "a-w-24 a-flex a-flex-col a-justify-between hover:a-shadow-md a-cursor-pointer a-p-1", onDoubleClick: () => {
76
+ } }) }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-flex a-justify-center a-align-center", children: (0, jsx_runtime_1.jsx)("div", { className: "a-p-3 a-m-2 a-border a-w-full a-flex a-justify-center a-align-center", children: (0, jsx_runtime_1.jsx)("img", { src: selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.previewUrl, className: "a-object-contain" }) }) })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-flex a-flex-wrap a-content-start a-items-start a-gap-2 a-absolute a-inset-0 a-overflow-auto a-p-2", children: images === null || images === void 0 ? void 0 : images.map((t) => {
77
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.classNames)((selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.id) == t.id ? "a-shadow-md" : "", "a-w-24 a-flex a-flex-col a-justify-between hover:a-shadow-md a-cursor-pointer a-p-1"), onDoubleClick: () => {
55
78
  onMediaSelected(t.id);
56
79
  onHide();
57
- }, onClick: () => setSelectedImage(t), children: [(0, jsx_runtime_1.jsx)("img", { src: t.imageUrl, className: "a-w-24 a-h-24" }), (0, jsx_runtime_1.jsx)("div", { className: "a-text-xs a-break-all", children: t.name })] }, t.id));
58
- }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-justify-end a-gap-3 a-mt-3", children: [(0, jsx_runtime_1.jsx)(fileupload_1.FileUpload, { mode: "basic", disabled: !selectedFolderId, auto: true, chooseLabel: "Upload", accept: "image/*", url: "/alpaca/headless/editor/upload?folder=" + selection[0], onUpload: ({ xhr }) => __awaiter(void 0, void 0, void 0, function* () {
80
+ }, onClick: () => setSelectedImage(t), children: [(0, jsx_runtime_1.jsx)("div", { className: "a-h-24 a-w-24 a-flex a-justify-center a-items-center", children: (0, jsx_runtime_1.jsx)("img", { src: t.imageUrl }) }), (0, jsx_runtime_1.jsx)("div", { className: "a-text-xs a-break-all", children: t.name })] }, t.id));
81
+ }) }) })] }), (0, jsx_runtime_1.jsxs)(DialogButtons_1.default, { children: [(0, jsx_runtime_1.jsx)(fileupload_1.FileUpload, { mode: "basic",
82
+ // disabled={electedFolderId}
83
+ auto: true, chooseLabel: "Upload", accept: "image/*", url: "/alpaca/headless/editor/upload?folder=" + selection[0], onUpload: ({ xhr }) => __awaiter(void 0, void 0, void 0, function* () {
59
84
  const response = JSON.parse(xhr.responseText);
60
85
  const thumbs = yield loadThumbnails(selectedFolderId);
61
86
  setSelectedImage(thumbs === null || thumbs === void 0 ? void 0 : thumbs.find((x) => x.id === response.id));