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

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 (108) hide show
  1. package/dist/cjs/components/Error.js +15 -0
  2. package/dist/cjs/components/Link.js +5 -0
  3. package/dist/cjs/components/Picture.js +3 -0
  4. package/dist/cjs/components/PictureEditor.js +6 -3
  5. package/dist/cjs/components/Placeholder.js +9 -2
  6. package/dist/cjs/components/RichText.js +4 -1
  7. package/dist/cjs/components/RichTextEditor.js +1 -4
  8. package/dist/cjs/components/Text.js +3 -2
  9. package/dist/cjs/components/TextEditor.js +1 -4
  10. package/dist/cjs/editor/AiTerminal.js +1 -1
  11. package/dist/cjs/editor/ComponentPalette.js +20 -19
  12. package/dist/cjs/editor/ComponentTree.js +1 -1
  13. package/dist/cjs/editor/EditorClient.js +32 -8
  14. package/dist/cjs/editor/FieldList.js +10 -5
  15. package/dist/cjs/editor/GraphQL.js +2 -3
  16. package/dist/cjs/editor/MediaSelector.js +6 -6
  17. package/dist/editor.css +48 -9
  18. package/dist/esm/components/Error.js +10 -0
  19. package/dist/esm/components/Link.js +5 -0
  20. package/dist/esm/components/Picture.js +3 -0
  21. package/dist/esm/components/PictureEditor.js +6 -3
  22. package/dist/esm/components/Placeholder.js +9 -2
  23. package/dist/esm/components/RichText.js +4 -1
  24. package/dist/esm/components/RichTextEditor.js +1 -4
  25. package/dist/esm/components/Text.js +3 -2
  26. package/dist/esm/components/TextEditor.js +1 -4
  27. package/dist/esm/editor/AiTerminal.js +1 -1
  28. package/dist/esm/editor/ComponentPalette.js +21 -20
  29. package/dist/esm/editor/ComponentTree.js +1 -1
  30. package/dist/esm/editor/EditorClient.js +32 -8
  31. package/dist/esm/editor/FieldList.js +10 -5
  32. package/dist/esm/editor/GraphQL.js +2 -3
  33. package/dist/esm/editor/MediaSelector.js +6 -6
  34. package/dist/primereact/resources/primereact.css +3 -6301
  35. package/dist/primereact/resources/primereact.min.css +3 -1
  36. package/dist/primereact/resources/themes/arya-blue/theme.css +5554 -5814
  37. package/dist/primereact/resources/themes/arya-green/theme.css +5554 -5814
  38. package/dist/primereact/resources/themes/arya-orange/theme.css +5554 -5814
  39. package/dist/primereact/resources/themes/arya-purple/theme.css +5554 -5814
  40. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +5555 -5816
  41. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +5555 -5816
  42. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +5539 -5800
  43. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +5539 -5800
  44. package/dist/primereact/resources/themes/fluent-light/theme.css +5662 -5922
  45. package/dist/primereact/resources/themes/lara-dark-blue/fonts/Inter-italic.var.woff2 +0 -0
  46. package/dist/primereact/resources/themes/lara-dark-blue/fonts/Inter-roman.var.woff2 +0 -0
  47. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +5568 -5809
  48. package/dist/primereact/resources/themes/lara-dark-indigo/fonts/Inter-italic.var.woff2 +0 -0
  49. package/dist/primereact/resources/themes/lara-dark-indigo/fonts/Inter-roman.var.woff2 +0 -0
  50. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +5572 -5813
  51. package/dist/primereact/resources/themes/lara-dark-purple/fonts/Inter-italic.var.woff2 +0 -0
  52. package/dist/primereact/resources/themes/lara-dark-purple/fonts/Inter-roman.var.woff2 +0 -0
  53. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +5572 -5813
  54. package/dist/primereact/resources/themes/lara-dark-teal/fonts/Inter-italic.var.woff2 +0 -0
  55. package/dist/primereact/resources/themes/lara-dark-teal/fonts/Inter-roman.var.woff2 +0 -0
  56. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +5572 -5813
  57. package/dist/primereact/resources/themes/lara-light-blue/fonts/Inter-italic.var.woff2 +0 -0
  58. package/dist/primereact/resources/themes/lara-light-blue/fonts/Inter-roman.var.woff2 +0 -0
  59. package/dist/primereact/resources/themes/lara-light-blue/theme.css +5567 -5808
  60. package/dist/primereact/resources/themes/lara-light-indigo/fonts/Inter-italic.var.woff2 +0 -0
  61. package/dist/primereact/resources/themes/lara-light-indigo/fonts/Inter-roman.var.woff2 +0 -0
  62. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +5562 -5803
  63. package/dist/primereact/resources/themes/lara-light-purple/fonts/Inter-italic.var.woff2 +0 -0
  64. package/dist/primereact/resources/themes/lara-light-purple/fonts/Inter-roman.var.woff2 +0 -0
  65. package/dist/primereact/resources/themes/lara-light-purple/theme.css +5562 -5803
  66. package/dist/primereact/resources/themes/lara-light-teal/fonts/Inter-italic.var.woff2 +0 -0
  67. package/dist/primereact/resources/themes/lara-light-teal/fonts/Inter-roman.var.woff2 +0 -0
  68. package/dist/primereact/resources/themes/lara-light-teal/theme.css +5562 -5803
  69. package/dist/primereact/resources/themes/luna-amber/theme.css +5508 -5770
  70. package/dist/primereact/resources/themes/luna-blue/theme.css +5508 -5770
  71. package/dist/primereact/resources/themes/luna-green/theme.css +5508 -5770
  72. package/dist/primereact/resources/themes/luna-pink/theme.css +5508 -5770
  73. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +6906 -7209
  74. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +6905 -7208
  75. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +6905 -7208
  76. package/dist/primereact/resources/themes/md-light-indigo/theme.css +6905 -7208
  77. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +6907 -7210
  78. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +6904 -7207
  79. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +6905 -7208
  80. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +6905 -7208
  81. package/dist/primereact/resources/themes/mira/theme.css +5723 -5979
  82. package/dist/primereact/resources/themes/nano/theme.css +5544 -5805
  83. package/dist/primereact/resources/themes/nova/theme.css +5497 -5758
  84. package/dist/primereact/resources/themes/nova-accent/theme.css +5529 -5790
  85. package/dist/primereact/resources/themes/nova-alt/theme.css +5514 -5775
  86. package/dist/primereact/resources/themes/rhea/theme.css +5526 -5787
  87. package/dist/primereact/resources/themes/saga-blue/theme.css +5554 -5814
  88. package/dist/primereact/resources/themes/saga-green/theme.css +5554 -5814
  89. package/dist/primereact/resources/themes/saga-orange/theme.css +5554 -5814
  90. package/dist/primereact/resources/themes/saga-purple/theme.css +5559 -5819
  91. package/dist/primereact/resources/themes/soho-dark/theme.css +5513 -5770
  92. package/dist/primereact/resources/themes/soho-light/theme.css +5565 -5822
  93. package/dist/primereact/resources/themes/tailwind-light/theme.css +5613 -5868
  94. package/dist/primereact/resources/themes/vela-blue/theme.css +5556 -5816
  95. package/dist/primereact/resources/themes/vela-green/theme.css +5556 -5816
  96. package/dist/primereact/resources/themes/vela-orange/theme.css +5556 -5816
  97. package/dist/primereact/resources/themes/vela-purple/theme.css +5556 -5816
  98. package/dist/primereact/resources/themes/viva-dark/theme.css +5669 -5925
  99. package/dist/primereact/resources/themes/viva-light/theme.css +5668 -5924
  100. package/package.json +3 -2
  101. package/types/components/Error.d.ts +2 -0
  102. package/types/components/RichTextEditor.d.ts +1 -1
  103. package/types/components/TextEditor.d.ts +1 -1
  104. package/types/editor/AiTerminal.d.ts +1 -1
  105. package/types/editor/editContext.d.ts +2 -0
  106. package/types/layoutData.d.ts +1 -0
  107. package/dist/primereact/resources/images/color.png +0 -0
  108. package/dist/primereact/resources/images/hue.png +0 -0
@@ -12,6 +12,8 @@ import { EditFrame } from "../editor/EditFrame";
12
12
  import { useAlpacaContext, } from "..";
13
13
  import { PlaceholderDropZoneHost } from "../editor/PlaceholderDropZoneHost";
14
14
  import Slot from "./Slot";
15
+ import { ErrorBoundary } from "react-error-boundary";
16
+ import { ErrorFallbackWithDetails, ErrorFallback } from "./Error";
15
17
  export function Placeholder({ name, content, }) {
16
18
  return __awaiter(this, void 0, void 0, function* () {
17
19
  const data = yield content;
@@ -44,11 +46,16 @@ export function Placeholder({ name, content, }) {
44
46
  const components = yield Promise.all(promises);
45
47
  if (context.pageContext.pageEditing) {
46
48
  return (_jsxs(_Fragment, { children: [components.map(({ Component, data, parent }, index) => {
47
- return (_jsxs(_Fragment, { children: [_jsx(PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), _jsx(EditFrame, { componentId: data.id, children: _jsx(Component, { component: data }) }, data.id)] }));
49
+ try {
50
+ return (_jsxs(_Fragment, { children: [_jsx(PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), _jsx(EditFrame, { componentId: data.id, children: _jsx(ErrorBoundary, { FallbackComponent: ErrorFallbackWithDetails, children: _jsx(Component, { component: data }) }) }, data.id)] }));
51
+ }
52
+ catch (e) {
53
+ return (_jsxs("div", { children: ["Error rendering component ", data.name, ": ", e.message] }));
54
+ }
48
55
  }), _jsx(PlaceholderDropZoneHost, { parentName: data === null || data === void 0 ? void 0 : data.name, placeholder: placeholderData, index: components.length + 1 })] }));
49
56
  }
50
57
  else
51
- return (_jsx(_Fragment, { children: components.map(({ Component, data }) => (_jsx(_Fragment, { children: _jsx(Component, { component: data }) }))) }));
58
+ return (_jsx(_Fragment, { children: components.map(({ Component, data }) => (_jsx(_Fragment, { children: _jsx(ErrorBoundary, { FallbackComponent: ErrorFallback, children: _jsx(Component, { component: data }) }) }))) }));
52
59
  });
53
60
  }
54
61
  function ComponentNotFound({ component }) {
@@ -27,9 +27,12 @@ export function RichText(_a) {
27
27
  return __awaiter(this, void 0, void 0, function* () {
28
28
  if (!field)
29
29
  return;
30
+ if (field.jsonValue) {
31
+ field = field.jsonValue;
32
+ }
30
33
  const internalProps = Object.assign(Object.assign({}, props), { dangerouslySetInnerHTML: {
31
34
  __html: field.value,
32
- }, editable: editable, contentEditable: true, "data-test": "test", placeholder: '[' + field.name + ']' });
35
+ }, editable: editable, contentEditable: true, "data-test": "test", placeholder: "[" + field.name + "]" });
33
36
  if (useAlpacaContext().pageContext.pageEditing)
34
37
  return _jsx(RichTextEditor, Object.assign({ field: field, tag: tag }, props));
35
38
  return React.createElement(tag || "div", Object.assign(props, internalProps));
@@ -20,10 +20,7 @@ export function RichTextEditor(_a) {
20
20
  if (!editContext)
21
21
  return;
22
22
  const { updateContentEditingFields } = editContext;
23
- const component = editContext.getComponentById(field.itemId);
24
- if (!component)
25
- return;
26
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
23
+ const liveField = editContext.getLiveField(field);
27
24
  useEffect(() => {
28
25
  if (editedValue != liveField.value &&
29
26
  "<p>" + editedValue + "</p>" != liveField.value) {
@@ -30,8 +30,9 @@ export function Text(_a) {
30
30
  if (field.jsonValue) {
31
31
  field = field.jsonValue;
32
32
  }
33
- if (useAlpacaContext().pageContext.pageEditing)
34
- return _jsx(TextEditor, Object.assign({ field: field, tag: tag }, props));
33
+ if (useAlpacaContext().pageContext.pageEditing) {
34
+ return (_jsx("div", { children: _jsx(TextEditor, Object.assign({ field: field, tag: tag }, props)) }));
35
+ }
35
36
  else
36
37
  return React.createElement(tag || "div", props, field.value);
37
38
  });
@@ -20,10 +20,7 @@ export function TextEditor(_a) {
20
20
  if (!editContext)
21
21
  return;
22
22
  const { updateContentEditingFields } = editContext;
23
- const component = editContext.getComponentById(field.itemId);
24
- if (!component)
25
- return;
26
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
23
+ const liveField = editContext.getLiveField(field);
27
24
  useEffect(() => {
28
25
  if (editedValue != liveField.value)
29
26
  setValue(liveField.value);
@@ -42,7 +42,7 @@ export function AiTerminal({ requestRefresh, selection, }) {
42
42
  handleResponse(response, callback, false);
43
43
  if (response.editOperations.length) {
44
44
  if (new Date().getTime() - lastRefresh > 500) {
45
- requestRefresh(false);
45
+ requestRefresh("delayed");
46
46
  router.refresh();
47
47
  lastRefresh = new Date().getTime();
48
48
  }
@@ -1,4 +1,5 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TabPanel, TabView } from "primereact/tabview";
2
3
  import { useEditContext } from "..";
3
4
  import ContentTree from "./ContentTree";
4
5
  export function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
@@ -28,25 +29,25 @@ export function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
28
29
  // editContext!.droppedInPlaceholder(key, parseInt(index));
29
30
  // }
30
31
  // }
31
- return (_jsxs(_Fragment, { children: [_jsx("h2", { className: "a-text-xl a-font-bold a-mb-8", children: "New" }), _jsx("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
32
- function handleDragStart(event) {
33
- dragStart({ type: "template", templateId: option.id });
34
- event.stopPropagation();
35
- }
36
- function handleDragEnd() {
37
- dragEnd();
38
- }
39
- return (_jsxs("div", {
40
- // onClick={directInsert}
41
- draggable: true, onDragStart: handleDragStart, onDragEnd: handleDragEnd, className: "p-3 shadow-md flex items-center flex-col gap-1 cursor-grab", children: [_jsx("img", { src: option.icon, width: "32", height: "32" }), option.name] }, option.id));
42
- }) }), _jsx("h2", { className: "a-text-xl a-font-bold a-my-8", children: "Existing" }), _jsx(ContentTree, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
43
- dragStart({
44
- type: "link-component",
45
- templateId: itemNode.templateId,
46
- componentId: itemNode.id,
47
- });
48
- }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
49
- (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined })] }));
32
+ return (_jsxs(TabView, { children: [_jsx(TabPanel, { header: "New", children: _jsx("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
33
+ function handleDragStart(event) {
34
+ dragStart({ type: "template", templateId: option.id });
35
+ event.stopPropagation();
36
+ }
37
+ function handleDragEnd() {
38
+ dragEnd();
39
+ }
40
+ return (_jsxs("div", {
41
+ // onClick={directInsert}
42
+ draggable: true, onDragStart: handleDragStart, onDragEnd: handleDragEnd, className: "a-p-3 a-shadow-md a-flex a-items-center a-flex-col a-gap-1 a-cursor-grab", children: [_jsx("img", { src: option.icon, width: "32", height: "32" }), option.name] }, option.id));
43
+ }) }) }), _jsx(TabPanel, { header: "Existing", children: _jsx(ContentTree, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
44
+ dragStart({
45
+ type: "link-component",
46
+ templateId: itemNode.templateId,
47
+ componentId: itemNode.id,
48
+ });
49
+ }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
50
+ (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined }) })] }));
50
51
  }
51
52
  function collectInsertOptions(page, placeholderKeys) {
52
53
  const insertOptionsMap = new Map();
@@ -105,7 +105,7 @@ export function ComponentTree({ page, selection, }) {
105
105
  createMap(treeNodes, nodeDictionary);
106
106
  const nodeTemplate = (node, options) => {
107
107
  var _a;
108
- let label = (_jsxs("span", { "data-key": node.key, className: "flex", children: [node.label, (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => (_jsx(Tag, { icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: { backgroundColor: x.color, marginLeft: "8px" } }, x.value)))] }));
108
+ let label = (_jsxs("span", { "data-key": node.key, className: "a-flex", children: [node.label, (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => (_jsx(Tag, { icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: { backgroundColor: x.color, marginLeft: "8px" } }, x.value)))] }));
109
109
  return _jsx("span", { className: options.className, children: label });
110
110
  };
111
111
  const menu = [
@@ -74,6 +74,7 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
74
74
  const searchParams = useSearchParams();
75
75
  const [selection, setSelection] = useState([]);
76
76
  const [selectedForInsertion, setSelectedForInsertion] = useState("");
77
+ const [liveUpdatingFields, setLiveUpdatingFields] = useState([]);
77
78
  const [currentEditOperation, setCurrentEditOperation] = useState();
78
79
  const [dictionary, setDictionary] = useState(dictionaryObject);
79
80
  const [unresolvedDictionaryKeys, setUnresolvedDictionaryKeys] = useState([]);
@@ -141,23 +142,33 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
141
142
  setSelection([result.componentId]);
142
143
  }
143
144
  if (!currentEditOperation.noRefresh)
144
- requestRefresh(currentEditOperation.refreshAfterQuietPeriod);
145
+ requestRefresh(currentEditOperation.refreshAfterQuietPeriod
146
+ ? "waitForQuietPeriod"
147
+ : "delayed");
145
148
  }
146
149
  });
147
150
  sync();
148
151
  }, [currentEditOperation]);
149
- const requestRefresh = (waitForQuietPeriod) => {
150
- console.log("request refresh with " + waitForQuietPeriod);
151
- if (waitForQuietPeriod && refreshTimer) {
152
+ const requestRefresh = (mode) => {
153
+ if (mode === "immediate") {
154
+ console.log("Immediate refresh requested");
155
+ clearTimeout(refreshTimer);
156
+ router.refresh();
157
+ setRefreshCompletedFlag(!refreshCompletedFlag);
158
+ setRefreshTimer(undefined);
159
+ return;
160
+ }
161
+ console.log("request refresh with mode: " + mode);
162
+ if (mode === "waitForQuietPeriod" && refreshTimer) {
152
163
  clearTimeout(refreshTimer);
153
164
  }
154
- if (!refreshTimer || waitForQuietPeriod) {
165
+ if (!refreshTimer || mode === "waitForQuietPeriod") {
155
166
  setRefreshTimer(setTimeout(() => {
156
167
  console.log("refreshing");
157
168
  router.refresh();
158
169
  setRefreshCompletedFlag(!refreshCompletedFlag);
159
170
  setRefreshTimer(undefined);
160
- }, waitForQuietPeriod ? 2000 : 1000));
171
+ }, mode === "waitForQuietPeriod" ? 2000 : 1000));
161
172
  }
162
173
  };
163
174
  const saveAndRefresh = (callback) => __awaiter(this, void 0, void 0, function* () {
@@ -262,6 +273,16 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
262
273
  }
263
274
  });
264
275
  }
276
+ const getLiveField = (field) => {
277
+ const existingField = liveUpdatingFields.find((f) => f.id === field.id &&
278
+ f.language === field.language &&
279
+ f.version === field.version &&
280
+ f.itemId === field.itemId);
281
+ if (existingField)
282
+ return existingField;
283
+ setLiveUpdatingFields([...liveUpdatingFields, field]);
284
+ return field;
285
+ };
265
286
  const selectedComponent = selection.length === 1 && page ? getComponentById(selection[0]) : null;
266
287
  const editField = (field, value, noRefresh = true) => {
267
288
  var _a;
@@ -294,6 +315,7 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
294
315
  op.noRefresh = noRefresh;
295
316
  op.refreshAfterQuietPeriod = !noRefresh;
296
317
  op.value = value;
318
+ getLiveField(field).value = value;
297
319
  function getField(fields, id) {
298
320
  return Object.values(fields).find((f) => f.id === id);
299
321
  }
@@ -343,10 +365,12 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
343
365
  dragObject,
344
366
  dictionary,
345
367
  setDictionary,
368
+ requestRefresh,
346
369
  refreshCompletedFlag,
347
370
  unresolvedDictionaryKeys,
348
371
  setUnresolvedDictionaryKeys,
349
372
  updateContentEditingFields,
373
+ getLiveField,
350
374
  showToast: () => { },
351
375
  removeComponent: (componentId, callback) => {
352
376
  confirmDialog({
@@ -432,7 +456,7 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
432
456
  setCurrentEditOperation(op);
433
457
  setDragObject(undefined);
434
458
  }),
435
- }, children: [_jsx(Toast, { ref: toast }), _jsxs(PrimeReactProvider, { children: [_jsx(ConfirmDialog, {}), _jsx(Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), pt: {
459
+ }, children: [_jsx(Toast, { ref: toast }), _jsxs(PrimeReactProvider, { children: [_jsx(ConfirmDialog, {}), _jsx(Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), header: "Insert component", pt: {
436
460
  mask: {
437
461
  onDragOver: () => setHidePalette(true),
438
462
  style: {
@@ -449,5 +473,5 @@ export function EditorClient({ content, dictionaryObject, edit, children, }) {
449
473
  setHidePalette(false);
450
474
  }
451
475
  setSelectedForInsertion("");
452
- } })) }), _jsxs(BlockUI, { blocked: uiBlocked, template: spinner, children: [_jsx(Menubar, { model: menuItems, end: endContent }), _jsxs(Splitter, { children: [_jsx(SplitterPanel, { size: 25, className: "alpaca-overflow-scroll", children: _jsxs(Splitter, { layout: "vertical", children: [_jsx(SplitterPanel, { className: "a-overflow-hidden a-relative", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: _jsx(ComponentTree, { page: page, selection: selection }) }) }), _jsx(SplitterPanel, { className: "alpaca-editor-tabs", children: _jsxs(TabView, { className: "a-inset-0 a-absolute", scrollable: true, children: [selectedComponent && (_jsxs(TabPanel, { header: "Fields", children: [_jsx(ComponentInfo, { component: selectedComponent }), _jsx(FieldList, { fields: selectedComponent.fields })] })), selectedComponent && (_jsx(TabPanel, { header: "GraphQL", style: { height: "100%" }, children: _jsx(GraphQL, { component: selectedComponent }) })), _jsxs(TabPanel, { header: "Page", children: [page && _jsx(PageInfo, { page: page }), page && _jsx(FieldList, { fields: page.fields })] }), _jsx(TabPanel, { header: "Dictionary", children: _jsx(DictionaryEditor, { dictionary: dictionary }) }), _jsx(TabPanel, { header: "Debug", children: _jsx(Debug, { component: selectedComponent, page: page }) })] }) })] }) }), _jsx(SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: _jsx("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), _jsx(SplitterPanel, { size: 20, children: _jsxs(Splitter, { layout: "vertical", className: "alpaca-editor", children: [_jsx(SplitterPanel, { className: "overflow-hidden a-relative", children: _jsx(EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), _jsx(SplitterPanel, { className: "overflow-hidden a-relative", children: _jsx(AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
476
+ } })) }), _jsxs(BlockUI, { blocked: uiBlocked, template: spinner, children: [_jsx(Menubar, { model: menuItems, end: endContent }), _jsxs(Splitter, { children: [_jsx(SplitterPanel, { size: 30, className: "alpaca-overflow-scroll", children: _jsxs(Splitter, { layout: "vertical", children: [_jsx(SplitterPanel, { size: 30, className: "a-overflow-hidden a-relative", children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: _jsx(ComponentTree, { page: page, selection: selection }) }) }), _jsx(SplitterPanel, { className: "alpaca-editor-tabs", children: _jsxs(TabView, { className: "a-inset-0 a-absolute", scrollable: true, children: [selectedComponent && (_jsxs(TabPanel, { header: "Fields", children: [_jsx(ComponentInfo, { component: selectedComponent }), _jsx(FieldList, { fields: selectedComponent.fields })] })), selectedComponent && (_jsx(TabPanel, { header: "GraphQL", style: { height: "100%" }, children: _jsx(GraphQL, { component: selectedComponent }) })), _jsxs(TabPanel, { header: "Page", children: [page && _jsx(PageInfo, { page: page }), page && _jsx(FieldList, { fields: page.fields })] }), _jsx(TabPanel, { header: "Dictionary", children: _jsx(DictionaryEditor, { dictionary: dictionary }) }), _jsx(TabPanel, { header: "Debug", children: _jsx(Debug, { component: selectedComponent, page: page }) })] }) })] }) }), _jsx(SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: _jsx("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), _jsx(SplitterPanel, { size: 15, children: _jsxs(Splitter, { layout: "vertical", className: "alpaca-editor", children: [_jsx(SplitterPanel, { className: "overflow-hidden a-relative", children: _jsx(EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), _jsx(SplitterPanel, { className: "overflow-hidden a-relative", children: _jsx(AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
453
477
  }
@@ -1,12 +1,15 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEditContext, } from "..";
3
4
  import { InputText } from "primereact/inputtext";
4
5
  import { Checkbox } from "primereact/checkbox";
5
6
  import { SingleLineText } from "./fieldTypes/SingleLineText";
6
7
  import { RichTextEditor } from "./fieldTypes/RichTextEditor";
7
8
  export function FieldList({ fields }) {
8
- if (!fields)
9
- return;
9
+ const editContext = useEditContext();
10
+ if (!editContext)
11
+ if (!fields)
12
+ return;
10
13
  if (!Array.isArray(fields))
11
14
  fields = Object.values(fields);
12
15
  const sections = fields.reduce((acc, value) => {
@@ -20,10 +23,12 @@ export function FieldList({ fields }) {
20
23
  }, {});
21
24
  const sectionList = Object.values(sections);
22
25
  sectionList.sort((a, b) => b[0].sortOrder - a[0].sortOrder);
23
- return (_jsx("div", { className: "a-p-1", children: Object.keys(sections).map((section) => (_jsxs("div", { children: [_jsx("div", { className: "alpaca-fields-section-headline", children: section }), getSectionFields(sections[section])] }, section))) }));
26
+ return (_jsx("div", { className: "a-p-1", children: Object.keys(sections).map((section) => (_jsxs("div", { children: [_jsx("div", { className: "alpaca-fields-section-headline", children: section }), getSectionFields(sections[section], editContext)] }, section))) }));
24
27
  }
25
- function getSectionFields(fields) {
26
- return fields.map((field) => (_jsxs("div", { children: [_jsx("label", { className: "alpaca-field-label", children: field.name }), !field.containsFallbackValue ? (_jsx("button", { className: "a-text-xs a-p-0 a-m-1", children: "Reset " })) : (_jsx("button", { children: "Fallback" })), _jsx("div", { children: getFieldEditor(field) })] }, field.id)));
28
+ function getSectionFields(fields, editContext) {
29
+ return fields
30
+ .map((field) => editContext.getLiveField(field))
31
+ .map((field) => (_jsxs("div", { children: [_jsx("label", { className: "alpaca-field-label", children: field.name }), !field.containsFallbackValue ? (_jsx("button", { className: "a-text-xs a-p-0 a-m-1", children: "Reset " })) : (_jsx("button", { children: "Fallback" })), _jsx("div", { children: getFieldEditor(field) })] }, field.id)));
27
32
  }
28
33
  function getFieldEditor(field) {
29
34
  switch (field.type) {
@@ -73,11 +73,10 @@ export function GraphQL({ component }) {
73
73
  type: "jsonValue",
74
74
  };
75
75
  const prettyQuery = format(query);
76
- console.log(query);
77
- console.log(prettyQuery);
78
76
  setQuery(prettyQuery);
79
77
  editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, prettyQuery, false);
80
78
  setShowSpinner(true);
79
+ editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
81
80
  }
82
- return (_jsxs(Splitter, { layout: "vertical", style: { height: "100%" }, children: [_jsx(SplitterPanel, { size: 50, className: "a-relative", children: _jsxs("div", { className: "a-absolute a-inset-0 a-flex", children: [_jsx(InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1", style: { height: "100%" } }), _jsx(Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), _jsx(SplitterPanel, { className: "alpaca-editor-tabs", children: _jsxs(TabView, { className: "a-inset-0 absolute", children: [_jsx(TabPanel, { header: "Data", style: { height: "100%" }, className: "a-relative", children: _jsx("div", { className: "a-m-1", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) }), _jsx(TabPanel, { header: "JSON", className: "a-relative", style: { height: "100%" }, children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: _jsx(JSONPretty, { data: component.graphql }) }) })] }) })] }));
81
+ return (_jsxs(Splitter, { layout: "vertical", style: { height: "100%" }, children: [_jsx(SplitterPanel, { size: 50, className: "a-relative", children: _jsxs("div", { className: "a-absolute a-inset-0 a-flex", children: [_jsx(InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1", style: { height: "100%" } }), _jsx(Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), _jsx(SplitterPanel, { className: "alpaca-editor-tabs", children: _jsxs(TabView, { className: "a-inset-0 a-absolute", children: [_jsx(TabPanel, { header: "Data", style: { height: "100%" }, className: "a-relative", children: _jsx("div", { className: "a-m-1", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) }), _jsx(TabPanel, { header: "JSON", className: "a-relative", style: { height: "100%" }, children: _jsx("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: _jsx(JSONPretty, { data: component.graphql }) }) })] }) })] }));
83
82
  }
@@ -8,13 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
- import { Sidebar } from "primereact/sidebar";
12
11
  import ContentTree from "./ContentTree";
13
12
  import { Splitter, SplitterPanel } from "primereact/splitter";
14
13
  import { useEffect, useState } from "react";
15
14
  import { getChildren } from "./contentService";
16
15
  import { useEditContext } from "./editContext";
17
16
  import { Button } from "primereact/button";
17
+ import { Dialog } from "primereact/dialog";
18
18
  export const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
19
19
  const [selectedFolderId, setSelectedFolderId] = useState();
20
20
  const [images, setImages] = useState();
@@ -37,17 +37,17 @@ export const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
37
37
  }
38
38
  });
39
39
  }
40
- return (_jsx(Sidebar, { style: { width: "60%" }, position: "right", visible: visible, onHide: onHide, children: _jsxs("div", { className: "flex flex-col h-full", children: [_jsxs(Splitter, { className: "flex-1 border-0", children: [_jsx(SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: _jsxs(Splitter, { layout: "vertical", children: [_jsx(SplitterPanel, { size: 70, children: _jsx(ContentTree, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
40
+ return (_jsx(Dialog, { style: { width: "80%", height: "80%" }, visible: visible, onHide: onHide, children: _jsxs("div", { className: "a-flex a-flex-col a-h-full", children: [_jsxs(Splitter, { className: "a-flex-1 a-border-0", children: [_jsx(SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: _jsxs(Splitter, { layout: "vertical", children: [_jsx(SplitterPanel, { size: 70, children: _jsx(ContentTree, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
41
41
  if (selection.length)
42
42
  setSelectedFolderId(selection[0]);
43
43
  else
44
44
  setSelectedFolderId(undefined);
45
- } }) }), _jsx(SplitterPanel, { children: selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.name })] }) }), _jsx(SplitterPanel, { className: "alpaca-overflow-scroll relative", children: _jsx("div", { className: "grid grid-cols-3 gap-2 absolute inset-0", children: images === null || images === void 0 ? void 0 : images.map((t) => {
46
- return (_jsxs("div", { className: "flex flex-col justify-between hover:shadow-md cursor-pointer p-1", onDoubleClick: () => {
45
+ } }) }), _jsx(SplitterPanel, { children: selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.name })] }) }), _jsx(SplitterPanel, { className: "alpaca-overflow-scroll a-relative", children: _jsx("div", { className: "a-grid a-grid-cols-3 a-gap-2 a-absolute a-inset-0", children: images === null || images === void 0 ? void 0 : images.map((t) => {
46
+ return (_jsxs("div", { className: "a-flex a-flex-col a-justify-between hover:a-shadow-md a-cursor-pointer a-p-1", onDoubleClick: () => {
47
47
  onMediaSelected(t.id);
48
48
  onHide();
49
- }, onClick: () => setSelectedImage(t), children: [_jsx("img", { src: t.imageUrl }), _jsx("div", { className: "text-xs break-all", children: t.name })] }));
50
- }) }) })] }), _jsxs("div", { className: "flex justify-end gap-3", children: [_jsx(Button, { onClick: () => onHide(), children: "Cancel" }), _jsx(Button, { disabled: !selectedImage, onClick: () => {
49
+ }, onClick: () => setSelectedImage(t), children: [_jsx("img", { src: t.imageUrl }), _jsx("div", { className: "a-text-xs a-break-all", children: t.name })] }));
50
+ }) }) })] }), _jsxs("div", { className: "a-flex a-justify-end a-gap-3 a-mt-3", children: [_jsx(Button, { onClick: () => onHide(), children: "Cancel" }), _jsx(Button, { disabled: !selectedImage, onClick: () => {
51
51
  onMediaSelected(selectedImage.id);
52
52
  onHide();
53
53
  }, children: "Select" })] })] }) }));