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

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 (107) 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 +32 -6
  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 +2 -2
  11. package/dist/cjs/editor/ComponentPalette.js +20 -19
  12. package/dist/cjs/editor/EditorClient.js +32 -8
  13. package/dist/cjs/editor/FieldList.js +10 -5
  14. package/dist/cjs/editor/GraphQL.js +1 -2
  15. package/dist/cjs/editor/MediaSelector.js +16 -10
  16. package/dist/editor.css +42 -13
  17. package/dist/esm/components/Error.js +10 -0
  18. package/dist/esm/components/Link.js +5 -0
  19. package/dist/esm/components/Picture.js +3 -0
  20. package/dist/esm/components/PictureEditor.js +33 -7
  21. package/dist/esm/components/Placeholder.js +9 -2
  22. package/dist/esm/components/RichText.js +4 -1
  23. package/dist/esm/components/RichTextEditor.js +1 -4
  24. package/dist/esm/components/Text.js +3 -2
  25. package/dist/esm/components/TextEditor.js +1 -4
  26. package/dist/esm/editor/AiTerminal.js +2 -2
  27. package/dist/esm/editor/ComponentPalette.js +21 -20
  28. package/dist/esm/editor/EditorClient.js +32 -8
  29. package/dist/esm/editor/FieldList.js +10 -5
  30. package/dist/esm/editor/GraphQL.js +1 -2
  31. package/dist/esm/editor/MediaSelector.js +16 -10
  32. package/dist/primereact/resources/primereact.css +3 -6301
  33. package/dist/primereact/resources/primereact.min.css +3 -1
  34. package/dist/primereact/resources/themes/arya-blue/theme.css +5554 -5814
  35. package/dist/primereact/resources/themes/arya-green/theme.css +5554 -5814
  36. package/dist/primereact/resources/themes/arya-orange/theme.css +5554 -5814
  37. package/dist/primereact/resources/themes/arya-purple/theme.css +5554 -5814
  38. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +5555 -5816
  39. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +5555 -5816
  40. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +5539 -5800
  41. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +5539 -5800
  42. package/dist/primereact/resources/themes/fluent-light/theme.css +5662 -5922
  43. package/dist/primereact/resources/themes/lara-dark-blue/fonts/Inter-italic.var.woff2 +0 -0
  44. package/dist/primereact/resources/themes/lara-dark-blue/fonts/Inter-roman.var.woff2 +0 -0
  45. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +5568 -5809
  46. package/dist/primereact/resources/themes/lara-dark-indigo/fonts/Inter-italic.var.woff2 +0 -0
  47. package/dist/primereact/resources/themes/lara-dark-indigo/fonts/Inter-roman.var.woff2 +0 -0
  48. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +5572 -5813
  49. package/dist/primereact/resources/themes/lara-dark-purple/fonts/Inter-italic.var.woff2 +0 -0
  50. package/dist/primereact/resources/themes/lara-dark-purple/fonts/Inter-roman.var.woff2 +0 -0
  51. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +5572 -5813
  52. package/dist/primereact/resources/themes/lara-dark-teal/fonts/Inter-italic.var.woff2 +0 -0
  53. package/dist/primereact/resources/themes/lara-dark-teal/fonts/Inter-roman.var.woff2 +0 -0
  54. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +5572 -5813
  55. package/dist/primereact/resources/themes/lara-light-blue/fonts/Inter-italic.var.woff2 +0 -0
  56. package/dist/primereact/resources/themes/lara-light-blue/fonts/Inter-roman.var.woff2 +0 -0
  57. package/dist/primereact/resources/themes/lara-light-blue/theme.css +5567 -5808
  58. package/dist/primereact/resources/themes/lara-light-indigo/fonts/Inter-italic.var.woff2 +0 -0
  59. package/dist/primereact/resources/themes/lara-light-indigo/fonts/Inter-roman.var.woff2 +0 -0
  60. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +5562 -5803
  61. package/dist/primereact/resources/themes/lara-light-purple/fonts/Inter-italic.var.woff2 +0 -0
  62. package/dist/primereact/resources/themes/lara-light-purple/fonts/Inter-roman.var.woff2 +0 -0
  63. package/dist/primereact/resources/themes/lara-light-purple/theme.css +5562 -5803
  64. package/dist/primereact/resources/themes/lara-light-teal/fonts/Inter-italic.var.woff2 +0 -0
  65. package/dist/primereact/resources/themes/lara-light-teal/fonts/Inter-roman.var.woff2 +0 -0
  66. package/dist/primereact/resources/themes/lara-light-teal/theme.css +5562 -5803
  67. package/dist/primereact/resources/themes/luna-amber/theme.css +5508 -5770
  68. package/dist/primereact/resources/themes/luna-blue/theme.css +5508 -5770
  69. package/dist/primereact/resources/themes/luna-green/theme.css +5508 -5770
  70. package/dist/primereact/resources/themes/luna-pink/theme.css +5508 -5770
  71. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +6906 -7209
  72. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +6905 -7208
  73. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +6905 -7208
  74. package/dist/primereact/resources/themes/md-light-indigo/theme.css +6905 -7208
  75. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +6907 -7210
  76. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +6904 -7207
  77. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +6905 -7208
  78. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +6905 -7208
  79. package/dist/primereact/resources/themes/mira/theme.css +5723 -5979
  80. package/dist/primereact/resources/themes/nano/theme.css +5544 -5805
  81. package/dist/primereact/resources/themes/nova/theme.css +5497 -5758
  82. package/dist/primereact/resources/themes/nova-accent/theme.css +5529 -5790
  83. package/dist/primereact/resources/themes/nova-alt/theme.css +5514 -5775
  84. package/dist/primereact/resources/themes/rhea/theme.css +5526 -5787
  85. package/dist/primereact/resources/themes/saga-blue/theme.css +5554 -5814
  86. package/dist/primereact/resources/themes/saga-green/theme.css +5554 -5814
  87. package/dist/primereact/resources/themes/saga-orange/theme.css +5554 -5814
  88. package/dist/primereact/resources/themes/saga-purple/theme.css +5559 -5819
  89. package/dist/primereact/resources/themes/soho-dark/theme.css +5513 -5770
  90. package/dist/primereact/resources/themes/soho-light/theme.css +5565 -5822
  91. package/dist/primereact/resources/themes/tailwind-light/theme.css +5613 -5868
  92. package/dist/primereact/resources/themes/vela-blue/theme.css +5556 -5816
  93. package/dist/primereact/resources/themes/vela-green/theme.css +5556 -5816
  94. package/dist/primereact/resources/themes/vela-orange/theme.css +5556 -5816
  95. package/dist/primereact/resources/themes/vela-purple/theme.css +5556 -5816
  96. package/dist/primereact/resources/themes/viva-dark/theme.css +5669 -5925
  97. package/dist/primereact/resources/themes/viva-light/theme.css +5668 -5924
  98. package/package.json +3 -2
  99. package/types/components/Error.d.ts +2 -0
  100. package/types/components/RichTextEditor.d.ts +1 -1
  101. package/types/components/TextEditor.d.ts +1 -1
  102. package/types/editor/AiTerminal.d.ts +1 -1
  103. package/types/editor/editContext.d.ts +2 -0
  104. package/types/fieldTypes.d.ts +2 -2
  105. package/types/layoutData.d.ts +1 -0
  106. package/dist/primereact/resources/images/color.png +0 -0
  107. package/dist/primereact/resources/images/hue.png +0 -0
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ErrorFallbackWithDetails = exports.ErrorFallback = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ function ErrorFallback() {
7
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
8
+ return ((0, jsx_runtime_1.jsx)("div", { role: "alert", children: (0, jsx_runtime_1.jsx)("p", { children: "Something went wrong." }) }));
9
+ }
10
+ exports.ErrorFallback = ErrorFallback;
11
+ function ErrorFallbackWithDetails({ error }) {
12
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
13
+ return ((0, jsx_runtime_1.jsxs)("div", { role: "alert", children: [(0, jsx_runtime_1.jsx)("p", { children: "Something went wrong:" }), (0, jsx_runtime_1.jsxs)("pre", { style: { color: "red" }, children: [error.message, " ", error.stack] })] }));
14
+ }
15
+ exports.ErrorFallbackWithDetails = ErrorFallbackWithDetails;
@@ -23,6 +23,11 @@ function Link(_a) {
23
23
  var { field, children } = _a, props = __rest(_a, ["field", "children"]);
24
24
  if (!field)
25
25
  return;
26
+ if (field.jsonValue) {
27
+ field = field.jsonValue;
28
+ }
29
+ if (!field.value)
30
+ return;
26
31
  const editing = (_b = (0, __1.useAlpacaContext)().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing;
27
32
  if (editing)
28
33
  return ((0, jsx_runtime_1.jsx)(LinkEditor_1.default, Object.assign({ field: field, children: children }, props)));
@@ -34,6 +34,9 @@ const Picture = (_a) => {
34
34
  var { field, imageParams, sources, defaultVariant, renderJsonLinkedData } = _a, otherProps = __rest(_a, ["field", "imageParams", "sources", "defaultVariant", "renderJsonLinkedData"]);
35
35
  if (!field)
36
36
  return null;
37
+ if (field.jsonValue) {
38
+ field = field.jsonValue;
39
+ }
37
40
  if ((_b = (0, __1.useAlpacaContext)().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing)
38
41
  return (0, jsx_runtime_1.jsx)(PictureEditor_1.PictureEditor, Object.assign({ field: field }, otherProps));
39
42
  const variants = (_c = field.value) === null || _c === void 0 ? void 0 : _c.variants;
@@ -19,6 +19,7 @@ const Picture_1 = require("./Picture");
19
19
  const __1 = require("..");
20
20
  const MediaSelector_1 = require("../editor/MediaSelector");
21
21
  const dialog_1 = require("primereact/dialog");
22
+ const button_1 = require("primereact/button");
22
23
  const PictureEditor = (_a) => {
23
24
  var _b, _c;
24
25
  var { field, imageParams, sources, defaultVariant, renderJsonLinkedData } = _a, otherProps = __rest(_a, ["field", "imageParams", "sources", "defaultVariant", "renderJsonLinkedData"]);
@@ -29,14 +30,39 @@ const PictureEditor = (_a) => {
29
30
  if (!editContext)
30
31
  return;
31
32
  function imageSelected(imageId) {
32
- const value = (field === null || field === void 0 ? void 0 : field.value) || {};
33
- //value.variants[0].mediaId = imageId;
33
+ if (!selectedVariant)
34
+ return;
35
+ const value = (field === null || field === void 0 ? void 0 : field.rawValue)
36
+ ? JSON.parse(field === null || field === void 0 ? void 0 : field.rawValue)
37
+ : { variants: [] };
38
+ const selected = value.variants.find((x) => x.name == selectedVariant.name);
39
+ if (!selected) {
40
+ value.variants.push({
41
+ name: selectedVariant.name,
42
+ mediaId: imageId,
43
+ });
44
+ }
45
+ else {
46
+ selected.mediaId = imageId;
47
+ }
34
48
  console.log(imageId);
35
- if (field)
49
+ console.log(JSON.stringify(value));
50
+ if (field) {
36
51
  editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, JSON.stringify(value), false);
52
+ editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
53
+ }
37
54
  }
38
- console.log(JSON.stringify(field));
39
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MediaSelector_1.MediaSelector, { visible: mediaSelectorVisible, onHide: () => setMediaSelectorVisible(false), onMediaSelected: imageSelected }), (0, jsx_runtime_1.jsx)(dialog_1.Dialog, { header: "Edit picture", visible: editorVisible, style: { width: "50vw" }, onHide: () => setEditorVisible(false), children: (0, jsx_runtime_1.jsx)("div", { className: "a-flex a-gap-1", children: (_c = (_b = field === null || field === void 0 ? void 0 : field.value) === null || _b === void 0 ? void 0 : _b.variants) === null || _c === void 0 ? void 0 : _c.map((variant) => ((0, jsx_runtime_1.jsxs)("div", { onClick: () => setSelectedVariant(variant), children: [(0, jsx_runtime_1.jsxs)("div", { className: "a-h-24 a-w-24 a-border a-relative" +
40
- (selectedVariant == variant ? " a-shadow-xl " : ""), children: [variant.src && (0, jsx_runtime_1.jsx)("img", { src: variant.src }), (0, jsx_runtime_1.jsx)("div", { className: "a-absolute a-top-0 a-right-0 ", children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-pencil a-m-1 a-cursor-pointer", onClick: () => setMediaSelectorVisible(true) }) })] }, variant.name), (0, jsx_runtime_1.jsx)("div", { children: variant.name }), (0, jsx_runtime_1.jsx)("div", { children: variant.aspectRatioText })] }))) }) }), (0, jsx_runtime_1.jsxs)("span", Object.assign({}, otherProps, { onClick: () => setEditorVisible(true), children: ["PICTURE", (0, jsx_runtime_1.jsx)(Picture_1.Picture, { field: field, imageParams: imageParams, sources: sources })] }))] }));
55
+ (0, react_1.useEffect)(() => {
56
+ var _a;
57
+ setSelectedVariant((_a = field === null || field === void 0 ? void 0 : field.value) === null || _a === void 0 ? void 0 : _a.variants[0]);
58
+ }, []);
59
+ console.log("Picture Field: " + JSON.stringify(field));
60
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MediaSelector_1.MediaSelector, { visible: mediaSelectorVisible, onHide: () => setMediaSelectorVisible(false), onMediaSelected: imageSelected }), (0, jsx_runtime_1.jsx)(dialog_1.Dialog, { header: "Edit picture", visible: editorVisible, style: { width: "50vw", height: "50vh" }, onHide: () => setEditorVisible(false), children: (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-gap-1 a-flex-col a-justify a-h-full", children: [(0, jsx_runtime_1.jsxs)("div", { className: "a-flex-1 a-flex a-gap-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-flex a-flex-col a-gap-1 a-h-full a-border-r", children: (_c = (_b = field === null || field === void 0 ? void 0 : field.value) === null || _b === void 0 ? void 0 : _b.variants) === null || _c === void 0 ? void 0 : _c.map((variant) => ((0, jsx_runtime_1.jsxs)("div", { onClick: () => setSelectedVariant(variant), children: [(0, jsx_runtime_1.jsxs)("div", { className: "a-h-24 a-w-24 a-border a-relative" +
61
+ (selectedVariant == variant ? " a-shadow-xl " : ""), children: [variant.src && (0, jsx_runtime_1.jsx)("img", { src: variant.thumbSrc }), (0, jsx_runtime_1.jsx)("div", { className: "a-absolute a-top-0 a-right-0 ", children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-pencil a-m-1 a-cursor-pointer", onClick: () => setMediaSelectorVisible(true) }) })] }, variant.name), (0, jsx_runtime_1.jsx)("div", { children: variant.name }), (0, jsx_runtime_1.jsx)("div", { children: variant.aspectRatioText })] }))) }), (0, jsx_runtime_1.jsx)("div", { className: "a-flex-1 a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-absolute a-inset-0 a-overflow-auto", children: selectedVariant && (0, jsx_runtime_1.jsx)("img", { src: selectedVariant.src }) }) })] }), (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: () => {
62
+ setEditorVisible(false);
63
+ }, children: "Ok" }), (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => {
64
+ setEditorVisible(false);
65
+ editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
66
+ }, children: "Cancel" })] })] }) }), (0, jsx_runtime_1.jsx)("span", Object.assign({}, otherProps, { onClick: () => setEditorVisible(true), className: "a-cursor-pointer", children: (0, jsx_runtime_1.jsx)(Picture_1.Picture, { field: field, imageParams: imageParams, sources: sources }) }))] }));
41
67
  };
42
68
  exports.PictureEditor = PictureEditor;
@@ -18,6 +18,8 @@ const EditFrame_1 = require("../editor/EditFrame");
18
18
  const __1 = require("..");
19
19
  const PlaceholderDropZoneHost_1 = require("../editor/PlaceholderDropZoneHost");
20
20
  const Slot_1 = __importDefault(require("./Slot"));
21
+ const react_error_boundary_1 = require("react-error-boundary");
22
+ const Error_1 = require("./Error");
21
23
  function Placeholder({ name, content, }) {
22
24
  return __awaiter(this, void 0, void 0, function* () {
23
25
  const data = yield content;
@@ -50,11 +52,16 @@ function Placeholder({ name, content, }) {
50
52
  const components = yield Promise.all(promises);
51
53
  if (context.pageContext.pageEditing) {
52
54
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [components.map(({ Component, data, parent }, index) => {
53
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(PlaceholderDropZoneHost_1.PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), (0, jsx_runtime_1.jsx)(EditFrame_1.EditFrame, { componentId: data.id, children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }, data.id)] }));
55
+ try {
56
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(PlaceholderDropZoneHost_1.PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), (0, jsx_runtime_1.jsx)(EditFrame_1.EditFrame, { componentId: data.id, children: (0, jsx_runtime_1.jsx)(react_error_boundary_1.ErrorBoundary, { FallbackComponent: Error_1.ErrorFallbackWithDetails, children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }) }, data.id)] }));
57
+ }
58
+ catch (e) {
59
+ return ((0, jsx_runtime_1.jsxs)("div", { children: ["Error rendering component ", data.name, ": ", e.message] }));
60
+ }
54
61
  }), (0, jsx_runtime_1.jsx)(PlaceholderDropZoneHost_1.PlaceholderDropZoneHost, { parentName: data === null || data === void 0 ? void 0 : data.name, placeholder: placeholderData, index: components.length + 1 })] }));
55
62
  }
56
63
  else
57
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: components.map(({ Component, data }) => ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }))) }));
64
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: components.map(({ Component, data }) => ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(react_error_boundary_1.ErrorBoundary, { FallbackComponent: Error_1.ErrorFallback, children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }) }))) }));
58
65
  });
59
66
  }
60
67
  exports.Placeholder = Placeholder;
@@ -33,9 +33,12 @@ function RichText(_a) {
33
33
  return __awaiter(this, void 0, void 0, function* () {
34
34
  if (!field)
35
35
  return;
36
+ if (field.jsonValue) {
37
+ field = field.jsonValue;
38
+ }
36
39
  const internalProps = Object.assign(Object.assign({}, props), { dangerouslySetInnerHTML: {
37
40
  __html: field.value,
38
- }, editable: editable, contentEditable: true, "data-test": "test", placeholder: '[' + field.name + ']' });
41
+ }, editable: editable, contentEditable: true, "data-test": "test", placeholder: "[" + field.name + "]" });
39
42
  if ((0, __1.useAlpacaContext)().pageContext.pageEditing)
40
43
  return (0, jsx_runtime_1.jsx)(RichTextEditor_1.RichTextEditor, Object.assign({ field: field, tag: tag }, props));
41
44
  return react_1.default.createElement(tag || "div", Object.assign(props, internalProps));
@@ -46,10 +46,7 @@ function RichTextEditor(_a) {
46
46
  if (!editContext)
47
47
  return;
48
48
  const { updateContentEditingFields } = editContext;
49
- const component = editContext.getComponentById(field.itemId);
50
- if (!component)
51
- return;
52
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
49
+ const liveField = editContext.getLiveField(field);
53
50
  (0, react_1.useEffect)(() => {
54
51
  if (editedValue != liveField.value &&
55
52
  "<p>" + editedValue + "</p>" != liveField.value) {
@@ -36,8 +36,9 @@ function Text(_a) {
36
36
  if (field.jsonValue) {
37
37
  field = field.jsonValue;
38
38
  }
39
- if ((0, __1.useAlpacaContext)().pageContext.pageEditing)
40
- return (0, jsx_runtime_1.jsx)(TextEditor_1.TextEditor, Object.assign({ field: field, tag: tag }, props));
39
+ if ((0, __1.useAlpacaContext)().pageContext.pageEditing) {
40
+ return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(TextEditor_1.TextEditor, Object.assign({ field: field, tag: tag }, props)) }));
41
+ }
41
42
  else
42
43
  return react_1.default.createElement(tag || "div", props, field.value);
43
44
  });
@@ -46,10 +46,7 @@ function TextEditor(_a) {
46
46
  if (!editContext)
47
47
  return;
48
48
  const { updateContentEditingFields } = editContext;
49
- const component = editContext.getComponentById(field.itemId);
50
- if (!component)
51
- return;
52
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
49
+ const liveField = editContext.getLiveField(field);
53
50
  (0, react_1.useEffect)(() => {
54
51
  if (editedValue != liveField.value)
55
52
  setValue(liveField.value);
@@ -45,7 +45,7 @@ function AiTerminal({ requestRefresh, selection, }) {
45
45
  handleResponse(response, callback, false);
46
46
  if (response.editOperations.length) {
47
47
  if (new Date().getTime() - lastRefresh > 500) {
48
- requestRefresh(false);
48
+ requestRefresh("delayed");
49
49
  router.refresh();
50
50
  lastRefresh = new Date().getTime();
51
51
  }
@@ -86,7 +86,7 @@ function AiTerminal({ requestRefresh, selection, }) {
86
86
  terminalservice_1.TerminalService.off("command", commandHandler);
87
87
  };
88
88
  }, []);
89
- return ((0, jsx_runtime_1.jsxs)("div", { className: "a-h-full a-flex a-flex-col a-relative", 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) => {
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) => {
90
90
  commandHandler(v, callback);
91
91
  } }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "a-text-xs", children: ["Tokens in: ", tokens.in, " out: ", tokens.out] })] }));
92
92
  }
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ComponentPalette = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const tabview_1 = require("primereact/tabview");
8
9
  const __1 = require("..");
9
10
  const ContentTree_1 = __importDefault(require("./ContentTree"));
10
11
  function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
@@ -34,25 +35,25 @@ function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
34
35
  // editContext!.droppedInPlaceholder(key, parseInt(index));
35
36
  // }
36
37
  // }
37
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h2", { className: "a-text-xl a-font-bold a-mb-8", children: "New" }), (0, jsx_runtime_1.jsx)("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
38
- function handleDragStart(event) {
39
- dragStart({ type: "template", templateId: option.id });
40
- event.stopPropagation();
41
- }
42
- function handleDragEnd() {
43
- dragEnd();
44
- }
45
- return ((0, jsx_runtime_1.jsxs)("div", {
46
- // onClick={directInsert}
47
- 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));
48
- }) }), (0, jsx_runtime_1.jsx)("h2", { className: "a-text-xl a-font-bold a-my-8", children: "Existing" }), (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
49
- dragStart({
50
- type: "link-component",
51
- templateId: itemNode.templateId,
52
- componentId: itemNode.id,
53
- });
54
- }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
55
- (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined })] }));
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 }) })] }));
56
57
  }
57
58
  exports.ComponentPalette = ComponentPalette;
58
59
  function collectInsertOptions(page, placeholderKeys) {
@@ -80,6 +80,7 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
80
80
  const searchParams = (0, navigation_1.useSearchParams)();
81
81
  const [selection, setSelection] = (0, react_1.useState)([]);
82
82
  const [selectedForInsertion, setSelectedForInsertion] = (0, react_1.useState)("");
83
+ const [liveUpdatingFields, setLiveUpdatingFields] = (0, react_1.useState)([]);
83
84
  const [currentEditOperation, setCurrentEditOperation] = (0, react_1.useState)();
84
85
  const [dictionary, setDictionary] = (0, react_1.useState)(dictionaryObject);
85
86
  const [unresolvedDictionaryKeys, setUnresolvedDictionaryKeys] = (0, react_1.useState)([]);
@@ -147,23 +148,33 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
147
148
  setSelection([result.componentId]);
148
149
  }
149
150
  if (!currentEditOperation.noRefresh)
150
- requestRefresh(currentEditOperation.refreshAfterQuietPeriod);
151
+ requestRefresh(currentEditOperation.refreshAfterQuietPeriod
152
+ ? "waitForQuietPeriod"
153
+ : "delayed");
151
154
  }
152
155
  });
153
156
  sync();
154
157
  }, [currentEditOperation]);
155
- const requestRefresh = (waitForQuietPeriod) => {
156
- console.log("request refresh with " + waitForQuietPeriod);
157
- if (waitForQuietPeriod && refreshTimer) {
158
+ const requestRefresh = (mode) => {
159
+ if (mode === "immediate") {
160
+ console.log("Immediate refresh requested");
161
+ clearTimeout(refreshTimer);
162
+ router.refresh();
163
+ setRefreshCompletedFlag(!refreshCompletedFlag);
164
+ setRefreshTimer(undefined);
165
+ return;
166
+ }
167
+ console.log("request refresh with mode: " + mode);
168
+ if (mode === "waitForQuietPeriod" && refreshTimer) {
158
169
  clearTimeout(refreshTimer);
159
170
  }
160
- if (!refreshTimer || waitForQuietPeriod) {
171
+ if (!refreshTimer || mode === "waitForQuietPeriod") {
161
172
  setRefreshTimer(setTimeout(() => {
162
173
  console.log("refreshing");
163
174
  router.refresh();
164
175
  setRefreshCompletedFlag(!refreshCompletedFlag);
165
176
  setRefreshTimer(undefined);
166
- }, waitForQuietPeriod ? 2000 : 1000));
177
+ }, mode === "waitForQuietPeriod" ? 2000 : 1000));
167
178
  }
168
179
  };
169
180
  const saveAndRefresh = (callback) => __awaiter(this, void 0, void 0, function* () {
@@ -268,6 +279,16 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
268
279
  }
269
280
  });
270
281
  }
282
+ const getLiveField = (field) => {
283
+ const existingField = liveUpdatingFields.find((f) => f.id === field.id &&
284
+ f.language === field.language &&
285
+ f.version === field.version &&
286
+ f.itemId === field.itemId);
287
+ if (existingField)
288
+ return existingField;
289
+ setLiveUpdatingFields([...liveUpdatingFields, field]);
290
+ return field;
291
+ };
271
292
  const selectedComponent = selection.length === 1 && page ? getComponentById(selection[0]) : null;
272
293
  const editField = (field, value, noRefresh = true) => {
273
294
  var _a;
@@ -300,6 +321,7 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
300
321
  op.noRefresh = noRefresh;
301
322
  op.refreshAfterQuietPeriod = !noRefresh;
302
323
  op.value = value;
324
+ getLiveField(field).value = value;
303
325
  function getField(fields, id) {
304
326
  return Object.values(fields).find((f) => f.id === id);
305
327
  }
@@ -349,10 +371,12 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
349
371
  dragObject,
350
372
  dictionary,
351
373
  setDictionary,
374
+ requestRefresh,
352
375
  refreshCompletedFlag,
353
376
  unresolvedDictionaryKeys,
354
377
  setUnresolvedDictionaryKeys,
355
378
  updateContentEditingFields,
379
+ getLiveField,
356
380
  showToast: () => { },
357
381
  removeComponent: (componentId, callback) => {
358
382
  (0, confirmdialog_1.confirmDialog)({
@@ -438,7 +462,7 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
438
462
  setCurrentEditOperation(op);
439
463
  setDragObject(undefined);
440
464
  }),
441
- }, children: [(0, jsx_runtime_1.jsx)(toast_1.Toast, { ref: toast }), (0, jsx_runtime_1.jsxs)(api_1.PrimeReactProvider, { children: [(0, jsx_runtime_1.jsx)(confirmdialog_1.ConfirmDialog, {}), (0, jsx_runtime_1.jsx)(sidebar_1.Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), pt: {
465
+ }, children: [(0, jsx_runtime_1.jsx)(toast_1.Toast, { ref: toast }), (0, jsx_runtime_1.jsxs)(api_1.PrimeReactProvider, { children: [(0, jsx_runtime_1.jsx)(confirmdialog_1.ConfirmDialog, {}), (0, jsx_runtime_1.jsx)(sidebar_1.Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), header: "Insert component", pt: {
442
466
  mask: {
443
467
  onDragOver: () => setHidePalette(true),
444
468
  style: {
@@ -455,6 +479,6 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
455
479
  setHidePalette(false);
456
480
  }
457
481
  setSelectedForInsertion("");
458
- } })) }), (0, jsx_runtime_1.jsxs)(blockui_1.BlockUI, { blocked: uiBlocked, template: spinner, children: [(0, jsx_runtime_1.jsx)(menubar_1.Menubar, { model: menuItems, end: endContent }), (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 25, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(ComponentTree_1.ComponentTree, { page: page, selection: selection }) }) }), (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", scrollable: true, children: [selectedComponent && ((0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Fields", children: [(0, jsx_runtime_1.jsx)(ComponentInfo_1.ComponentInfo, { component: selectedComponent }), (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: selectedComponent.fields })] })), selectedComponent && ((0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "GraphQL", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)(GraphQL_1.GraphQL, { component: selectedComponent }) })), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Page", children: [page && (0, jsx_runtime_1.jsx)(PageInfo_1.PageInfo, { page: page }), page && (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: page.fields })] }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Dictionary", children: (0, jsx_runtime_1.jsx)(DictionaryEditor_1.DictionaryEditor, { dictionary: dictionary }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Debug", children: (0, jsx_runtime_1.jsx)(Debug_1.Debug, { component: selectedComponent, page: page }) })] }) })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: (0, jsx_runtime_1.jsx)("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 20, children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", className: "alpaca-editor", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(EditHistory_1.EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(AiTerminal_1.AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
482
+ } })) }), (0, jsx_runtime_1.jsxs)(blockui_1.BlockUI, { blocked: uiBlocked, template: spinner, children: [(0, jsx_runtime_1.jsx)(menubar_1.Menubar, { model: menuItems, end: endContent }), (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 30, 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: 30, className: "a-overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(ComponentTree_1.ComponentTree, { page: page, selection: selection }) }) }), (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", scrollable: true, children: [selectedComponent && ((0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Fields", children: [(0, jsx_runtime_1.jsx)(ComponentInfo_1.ComponentInfo, { component: selectedComponent }), (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: selectedComponent.fields })] })), selectedComponent && ((0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "GraphQL", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)(GraphQL_1.GraphQL, { component: selectedComponent }) })), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Page", children: [page && (0, jsx_runtime_1.jsx)(PageInfo_1.PageInfo, { page: page }), page && (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: page.fields })] }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Dictionary", children: (0, jsx_runtime_1.jsx)(DictionaryEditor_1.DictionaryEditor, { dictionary: dictionary }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Debug", children: (0, jsx_runtime_1.jsx)(Debug_1.Debug, { component: selectedComponent, page: page }) })] }) })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: (0, jsx_runtime_1.jsx)("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 15, children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", className: "alpaca-editor", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(EditHistory_1.EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(AiTerminal_1.AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
459
483
  }
460
484
  exports.EditorClient = EditorClient;
@@ -3,13 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.FieldList = void 0;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const __1 = require("..");
6
7
  const inputtext_1 = require("primereact/inputtext");
7
8
  const checkbox_1 = require("primereact/checkbox");
8
9
  const SingleLineText_1 = require("./fieldTypes/SingleLineText");
9
10
  const RichTextEditor_1 = require("./fieldTypes/RichTextEditor");
10
11
  function FieldList({ fields }) {
11
- if (!fields)
12
- return;
12
+ const editContext = (0, __1.useEditContext)();
13
+ if (!editContext)
14
+ if (!fields)
15
+ return;
13
16
  if (!Array.isArray(fields))
14
17
  fields = Object.values(fields);
15
18
  const sections = fields.reduce((acc, value) => {
@@ -23,11 +26,13 @@ function FieldList({ fields }) {
23
26
  }, {});
24
27
  const sectionList = Object.values(sections);
25
28
  sectionList.sort((a, b) => b[0].sortOrder - a[0].sortOrder);
26
- 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])] }, section))) }));
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))) }));
27
30
  }
28
31
  exports.FieldList = FieldList;
29
- function getSectionFields(fields) {
30
- return fields.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)));
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)));
31
36
  }
32
37
  function getFieldEditor(field) {
33
38
  switch (field.type) {
@@ -79,11 +79,10 @@ function GraphQL({ component }) {
79
79
  type: "jsonValue",
80
80
  };
81
81
  const prettyQuery = (0, graphql_formatter_1.format)(query);
82
- console.log(query);
83
- console.log(prettyQuery);
84
82
  setQuery(prettyQuery);
85
83
  editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, prettyQuery, false);
86
84
  setShowSpinner(true);
85
+ editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
87
86
  }
88
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 }) }) })] }) })] }));
89
88
  }
@@ -21,6 +21,7 @@ const contentService_1 = require("./contentService");
21
21
  const editContext_1 = require("./editContext");
22
22
  const button_1 = require("primereact/button");
23
23
  const dialog_1 = require("primereact/dialog");
24
+ const fileupload_1 = require("primereact/fileupload");
24
25
  const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
25
26
  const [selectedFolderId, setSelectedFolderId] = (0, react_1.useState)();
26
27
  const [images, setImages] = (0, react_1.useState)();
@@ -40,22 +41,27 @@ const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
40
41
  "F1828A2C-7E5D-4BBD-98CA-320474871548",
41
42
  ]);
42
43
  setImages(children);
44
+ return children;
43
45
  }
44
46
  });
45
47
  }
46
- return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { style: { width: "60%" }, 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, 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) => {
47
- if (selection.length)
48
- setSelectedFolderId(selection[0]);
49
- else
50
- setSelectedFolderId(undefined);
51
- } }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { children: selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.name })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "alpaca-overflow-scroll a-relative", children: (0, jsx_runtime_1.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) => {
52
- return ((0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-flex-col a-justify-between hover:a-shadow-md a-cursor-pointer a-p-1", onDoubleClick: () => {
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]);
51
+ else
52
+ 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: () => {
53
55
  onMediaSelected(t.id);
54
56
  onHide();
55
- }, onClick: () => setSelectedImage(t), 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 })] }));
56
- }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-justify-end a-gap-3", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => onHide(), children: "Cancel" }), (0, jsx_runtime_1.jsx)(button_1.Button, { disabled: !selectedImage, onClick: () => {
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* () {
59
+ const response = JSON.parse(xhr.responseText);
60
+ const thumbs = yield loadThumbnails(selectedFolderId);
61
+ setSelectedImage(thumbs === null || thumbs === void 0 ? void 0 : thumbs.find((x) => x.id === response.id));
62
+ }) }), (0, jsx_runtime_1.jsx)(button_1.Button, { disabled: !selectedImage, onClick: () => {
57
63
  onMediaSelected(selectedImage.id);
58
64
  onHide();
59
- }, children: "Select" })] })] }) }));
65
+ }, children: "Select" }), (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => onHide(), children: "Cancel" })] })] }) }));
60
66
  };
61
67
  exports.MediaSelector = MediaSelector;
package/dist/editor.css CHANGED
@@ -32,15 +32,6 @@
32
32
  margin-bottom: 0.5rem;
33
33
  }
34
34
 
35
- .a-my-8 {
36
- margin-top: 2rem;
37
- margin-bottom: 2rem;
38
- }
39
-
40
- .a-mb-8 {
41
- margin-bottom: 2rem;
42
- }
43
-
44
35
  .a-ml-1 {
45
36
  margin-left: 0.25rem;
46
37
  }
@@ -49,6 +40,10 @@
49
40
  margin-left: 0.75rem;
50
41
  }
51
42
 
43
+ .a-mt-3 {
44
+ margin-top: 0.75rem;
45
+ }
46
+
52
47
  .a-flex {
53
48
  display: flex;
54
49
  }
@@ -93,10 +88,6 @@
93
88
  cursor: pointer;
94
89
  }
95
90
 
96
- .a-grid-cols-3 {
97
- grid-template-columns: repeat(3, minmax(0, 1fr));
98
- }
99
-
100
91
  .a-grid-cols-4 {
101
92
  grid-template-columns: repeat(4, minmax(0, 1fr));
102
93
  }
@@ -105,6 +96,18 @@
105
96
  flex-direction: column;
106
97
  }
107
98
 
99
+ .a-flex-wrap {
100
+ flex-wrap: wrap;
101
+ }
102
+
103
+ .a-content-start {
104
+ align-content: flex-start;
105
+ }
106
+
107
+ .a-items-start {
108
+ align-items: flex-start;
109
+ }
110
+
108
111
  .a-items-center {
109
112
  align-items: center;
110
113
  }
@@ -113,6 +116,10 @@
113
116
  justify-content: flex-end;
114
117
  }
115
118
 
119
+ .a-justify-center {
120
+ justify-content: center;
121
+ }
122
+
116
123
  .a-justify-between {
117
124
  justify-content: space-between;
118
125
  }
@@ -135,6 +142,10 @@
135
142
  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
136
143
  }
137
144
 
145
+ .a-overflow-auto {
146
+ overflow: auto;
147
+ }
148
+
138
149
  .a-overflow-hidden {
139
150
  overflow: hidden;
140
151
  }
@@ -171,6 +182,10 @@
171
182
  border-bottom-width: 1px;
172
183
  }
173
184
 
185
+ .a-border-r {
186
+ border-right-width: 1px;
187
+ }
188
+
174
189
  .a-border-t-2 {
175
190
  border-top-width: 2px;
176
191
  }
@@ -445,6 +460,20 @@ div.p-tree .p-treenode-droppoint {
445
460
  opacity: 0;
446
461
  }
447
462
 
463
+ .p-dropdown-label.p-inputtext {
464
+ padding: 8px;
465
+ }
466
+
467
+ div.p-tabview .p-tabview-nav li .p-tabview-nav-link {
468
+ padding: 1rem;
469
+ }
470
+
471
+ .p-sidebar-header.p-sidebar-custom-header {
472
+ justify-content: space-between;
473
+ font-weight: bold;
474
+ font-size: 18px;
475
+ }
476
+
448
477
  .hover\:a-underline:hover {
449
478
  text-decoration-line: underline;
450
479
  }
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ export function ErrorFallback() {
4
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
5
+ return (_jsx("div", { role: "alert", children: _jsx("p", { children: "Something went wrong." }) }));
6
+ }
7
+ export function ErrorFallbackWithDetails({ error }) {
8
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
9
+ return (_jsxs("div", { role: "alert", children: [_jsx("p", { children: "Something went wrong:" }), _jsxs("pre", { style: { color: "red" }, children: [error.message, " ", error.stack] })] }));
10
+ }
@@ -17,6 +17,11 @@ export function Link(_a) {
17
17
  var { field, children } = _a, props = __rest(_a, ["field", "children"]);
18
18
  if (!field)
19
19
  return;
20
+ if (field.jsonValue) {
21
+ field = field.jsonValue;
22
+ }
23
+ if (!field.value)
24
+ return;
20
25
  const editing = (_b = useAlpacaContext().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing;
21
26
  if (editing)
22
27
  return (_jsx(LinkEditor, Object.assign({ field: field, children: children }, props)));
@@ -31,6 +31,9 @@ export const Picture = (_a) => {
31
31
  var { field, imageParams, sources, defaultVariant, renderJsonLinkedData } = _a, otherProps = __rest(_a, ["field", "imageParams", "sources", "defaultVariant", "renderJsonLinkedData"]);
32
32
  if (!field)
33
33
  return null;
34
+ if (field.jsonValue) {
35
+ field = field.jsonValue;
36
+ }
34
37
  if ((_b = useAlpacaContext().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing)
35
38
  return _jsx(PictureEditor, Object.assign({ field: field }, otherProps));
36
39
  const variants = (_c = field.value) === null || _c === void 0 ? void 0 : _c.variants;