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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/dist/cjs/client-components/ClientLink.js +36 -0
  2. package/dist/cjs/client-components/MultiComponentEditor.js +26 -0
  3. package/dist/cjs/client-components/index.js +19 -0
  4. package/dist/cjs/components/Link.js +1 -1
  5. package/dist/cjs/components/LinkEditor.js +47 -1
  6. package/dist/cjs/components/Picture.js +14 -12
  7. package/dist/cjs/components/PictureEditor.js +20 -39
  8. package/dist/cjs/components/Placeholder.js +51 -9
  9. package/dist/cjs/components/RichText.js +1 -1
  10. package/dist/cjs/components/RichTextEditor.js +17 -2
  11. package/dist/cjs/components/TextEditor.js +15 -3
  12. package/dist/cjs/components/Translate.js +1 -1
  13. package/dist/cjs/{editor → components}/TranslateEditor.js +5 -2
  14. package/dist/cjs/editor/AiPopup.js +33 -0
  15. package/dist/cjs/editor/AiTerminal.js +42 -18
  16. package/dist/cjs/editor/ComponentInfo.js +4 -3
  17. package/dist/cjs/editor/ComponentPalette.js +12 -68
  18. package/dist/cjs/editor/ComponentTree.js +76 -59
  19. package/dist/cjs/editor/ConfirmationDialog.js +31 -0
  20. package/dist/cjs/editor/ContentTree.js +144 -49
  21. package/dist/cjs/editor/Debug.js +12 -2
  22. package/dist/cjs/editor/DialogButtons.js +7 -0
  23. package/dist/cjs/editor/DictionaryEditor.js +14 -8
  24. package/dist/cjs/editor/EditFrame.js +88 -20
  25. package/dist/cjs/editor/EditHistory.js +17 -4
  26. package/dist/cjs/editor/Editor.js +1 -1
  27. package/dist/cjs/editor/EditorClient.js +506 -237
  28. package/dist/cjs/editor/EditorClientHost.js +2 -2
  29. package/dist/cjs/editor/FieldList.js +30 -43
  30. package/dist/cjs/editor/FieldListField.js +75 -0
  31. package/dist/cjs/editor/FloatingToolbar.js +92 -0
  32. package/dist/cjs/editor/GraphQL.js +4 -6
  33. package/dist/cjs/editor/ItemEditor.js +9 -0
  34. package/dist/cjs/editor/ItemInfo.js +17 -0
  35. package/dist/cjs/editor/ItemNameDialog.js +37 -0
  36. package/dist/cjs/editor/LanguageSelector.js +1 -1
  37. package/dist/cjs/editor/LinkEditorDialog.js +67 -0
  38. package/dist/cjs/editor/MainLayout.js +24 -0
  39. package/dist/cjs/editor/MediaSelector.js +35 -10
  40. package/dist/cjs/editor/PictureEditorDialog.js +93 -0
  41. package/dist/cjs/editor/PlaceholderDropZone.js +48 -9
  42. package/dist/cjs/editor/SidebarTabs.js +47 -0
  43. package/dist/cjs/editor/Terminal.js +21 -11
  44. package/dist/cjs/editor/Utils.js +43 -0
  45. package/dist/cjs/editor/VersionSelector.js +1 -1
  46. package/dist/cjs/editor/Workbox.js +41 -0
  47. package/dist/cjs/editor/componentCommands.js +141 -0
  48. package/dist/cjs/editor/contentService.js +45 -3
  49. package/dist/cjs/editor/editContext.js +9 -4
  50. package/dist/cjs/editor/editService.js +187 -3
  51. package/dist/cjs/editor/fieldTypes/CheckboxEditor.js +21 -0
  52. package/dist/cjs/editor/fieldTypes/InternalLinkFieldEditor.js +46 -0
  53. package/dist/cjs/editor/fieldTypes/LinkFieldEditor.js +55 -0
  54. package/dist/cjs/editor/fieldTypes/MultiLineText.js +25 -0
  55. package/dist/cjs/editor/fieldTypes/PictureFieldEditor.js +19 -0
  56. package/dist/cjs/editor/fieldTypes/RichTextEditor.js +9 -4
  57. package/dist/cjs/editor/fieldTypes/SingleLineText.js +12 -4
  58. package/dist/cjs/editor/fieldTypes/TreeListEditor.js +59 -0
  59. package/dist/cjs/editor/ui/Section.js +8 -0
  60. package/dist/cjs/loadRouteData.js +24 -14
  61. package/dist/cjs/middleware/authorization.js +52 -0
  62. package/dist/cjs/middleware/index.js +17 -0
  63. package/dist/editor.css +530 -72
  64. package/dist/primereact/resources/themes/arya-blue/theme.css +103 -91
  65. package/dist/primereact/resources/themes/arya-green/theme.css +103 -91
  66. package/dist/primereact/resources/themes/arya-orange/theme.css +103 -91
  67. package/dist/primereact/resources/themes/arya-purple/theme.css +103 -91
  68. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +103 -91
  69. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +103 -91
  70. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +102 -90
  71. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +102 -90
  72. package/dist/primereact/resources/themes/fluent-light/theme.css +103 -91
  73. package/dist/primereact/resources/themes/lara-dark-amber/fonts/Inter-italic.var.woff2 +0 -0
  74. package/dist/primereact/resources/themes/lara-dark-amber/fonts/Inter-roman.var.woff2 +0 -0
  75. package/dist/primereact/resources/themes/lara-dark-amber/theme.css +6049 -0
  76. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +1006 -955
  77. package/dist/primereact/resources/themes/lara-dark-cyan/fonts/Inter-italic.var.woff2 +0 -0
  78. package/dist/primereact/resources/themes/lara-dark-cyan/fonts/Inter-roman.var.woff2 +0 -0
  79. package/dist/primereact/resources/themes/lara-dark-cyan/theme.css +6049 -0
  80. package/dist/primereact/resources/themes/lara-dark-green/fonts/Inter-italic.var.woff2 +0 -0
  81. package/dist/primereact/resources/themes/lara-dark-green/fonts/Inter-roman.var.woff2 +0 -0
  82. package/dist/primereact/resources/themes/lara-dark-green/theme.css +6049 -0
  83. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +1006 -955
  84. package/dist/primereact/resources/themes/lara-dark-pink/fonts/Inter-italic.var.woff2 +0 -0
  85. package/dist/primereact/resources/themes/lara-dark-pink/fonts/Inter-roman.var.woff2 +0 -0
  86. package/dist/primereact/resources/themes/lara-dark-pink/theme.css +6049 -0
  87. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +1006 -955
  88. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +1006 -955
  89. package/dist/primereact/resources/themes/lara-light-amber/fonts/Inter-italic.var.woff2 +0 -0
  90. package/dist/primereact/resources/themes/lara-light-amber/fonts/Inter-roman.var.woff2 +0 -0
  91. package/dist/primereact/resources/themes/lara-light-amber/theme.css +6041 -0
  92. package/dist/primereact/resources/themes/lara-light-blue/theme.css +842 -799
  93. package/dist/primereact/resources/themes/lara-light-cyan/fonts/Inter-italic.var.woff2 +0 -0
  94. package/dist/primereact/resources/themes/lara-light-cyan/fonts/Inter-roman.var.woff2 +0 -0
  95. package/dist/primereact/resources/themes/lara-light-cyan/theme.css +6041 -0
  96. package/dist/primereact/resources/themes/lara-light-green/fonts/Inter-italic.var.woff2 +0 -0
  97. package/dist/primereact/resources/themes/lara-light-green/fonts/Inter-roman.var.woff2 +0 -0
  98. package/dist/primereact/resources/themes/lara-light-green/theme.css +6041 -0
  99. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +842 -799
  100. package/dist/primereact/resources/themes/lara-light-pink/fonts/Inter-italic.var.woff2 +0 -0
  101. package/dist/primereact/resources/themes/lara-light-pink/fonts/Inter-roman.var.woff2 +0 -0
  102. package/dist/primereact/resources/themes/lara-light-pink/theme.css +6041 -0
  103. package/dist/primereact/resources/themes/lara-light-purple/theme.css +842 -799
  104. package/dist/primereact/resources/themes/lara-light-teal/theme.css +1115 -1072
  105. package/dist/primereact/resources/themes/luna-amber/theme.css +103 -91
  106. package/dist/primereact/resources/themes/luna-blue/theme.css +103 -91
  107. package/dist/primereact/resources/themes/luna-green/theme.css +103 -91
  108. package/dist/primereact/resources/themes/luna-pink/theme.css +103 -91
  109. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +147 -135
  110. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +147 -135
  111. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +147 -135
  112. package/dist/primereact/resources/themes/md-light-indigo/theme.css +147 -135
  113. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +147 -135
  114. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +147 -135
  115. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +147 -135
  116. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +147 -135
  117. package/dist/primereact/resources/themes/mira/theme.css +108 -91
  118. package/dist/primereact/resources/themes/nano/theme.css +107 -91
  119. package/dist/primereact/resources/themes/nova/theme.css +103 -91
  120. package/dist/primereact/resources/themes/nova-accent/theme.css +103 -91
  121. package/dist/primereact/resources/themes/nova-alt/theme.css +103 -91
  122. package/dist/primereact/resources/themes/rhea/theme.css +103 -91
  123. package/dist/primereact/resources/themes/saga-blue/theme.css +103 -91
  124. package/dist/primereact/resources/themes/saga-green/theme.css +103 -91
  125. package/dist/primereact/resources/themes/saga-orange/theme.css +103 -91
  126. package/dist/primereact/resources/themes/saga-purple/theme.css +103 -91
  127. package/dist/primereact/resources/themes/soho-dark/theme.css +108 -91
  128. package/dist/primereact/resources/themes/soho-light/theme.css +108 -91
  129. package/dist/primereact/resources/themes/vela-blue/theme.css +103 -91
  130. package/dist/primereact/resources/themes/vela-green/theme.css +103 -91
  131. package/dist/primereact/resources/themes/vela-orange/theme.css +103 -91
  132. package/dist/primereact/resources/themes/vela-purple/theme.css +103 -91
  133. package/dist/primereact/resources/themes/viva-dark/theme.css +103 -91
  134. package/dist/primereact/resources/themes/viva-light/theme.css +103 -91
  135. package/package.json +29 -16
  136. package/tailwind.config.js +9 -2
  137. package/types/client-components/ClientLink.d.ts +6 -0
  138. package/types/client-components/MultiComponentEditor.d.ts +10 -0
  139. package/types/client-components/index.d.ts +2 -0
  140. package/types/components/Picture.d.ts +1 -0
  141. package/types/components/Placeholder.d.ts +16 -2
  142. package/types/components/RichTextEditor.d.ts +55 -55
  143. package/types/components/TextEditor.d.ts +54 -54
  144. package/types/editor/AiPopup.d.ts +10 -0
  145. package/types/editor/AiTerminal.d.ts +4 -3
  146. package/types/editor/ComponentPalette.d.ts +3 -4
  147. package/types/editor/ComponentTree.d.ts +1 -1
  148. package/types/editor/ConfirmationDialog.d.ts +19 -0
  149. package/types/editor/ContentTree.d.ts +7 -3
  150. package/types/editor/Debug.d.ts +1 -1
  151. package/types/editor/DialogButtons.d.ts +4 -0
  152. package/types/editor/DictionaryEditor.d.ts +3 -2
  153. package/types/editor/EditFrame.d.ts +4 -3
  154. package/types/editor/EditorClient.d.ts +4 -4
  155. package/types/editor/EditorClientHost.d.ts +4 -3
  156. package/types/editor/FieldListField.d.ts +4 -0
  157. package/types/editor/FloatingToolbar.d.ts +7 -0
  158. package/types/editor/ItemEditor.d.ts +4 -0
  159. package/types/editor/ItemInfo.d.ts +4 -0
  160. package/types/editor/ItemNameDialog.d.ts +10 -0
  161. package/types/editor/LinkEditorDialog.d.ts +15 -0
  162. package/types/editor/MainLayout.d.ts +6 -0
  163. package/types/editor/MediaSelector.d.ts +2 -1
  164. package/types/editor/PictureEditorDialog.d.ts +6 -0
  165. package/types/editor/SidebarTabs.d.ts +8 -0
  166. package/types/editor/Terminal.d.ts +3 -1
  167. package/types/editor/Utils.d.ts +3 -0
  168. package/types/editor/Workbox.d.ts +6 -0
  169. package/types/editor/componentCommands.d.ts +4 -0
  170. package/types/editor/contentService.d.ts +7 -1
  171. package/types/editor/editContext.d.ts +90 -19
  172. package/types/editor/editService.d.ts +9 -1
  173. package/types/editor/fieldTypes/CheckboxEditor.d.ts +4 -0
  174. package/types/editor/fieldTypes/InternalLinkFieldEditor.d.ts +4 -0
  175. package/types/editor/fieldTypes/LinkFieldEditor.d.ts +4 -0
  176. package/types/editor/fieldTypes/MultiLineText.d.ts +4 -0
  177. package/types/editor/fieldTypes/PictureFieldEditor.d.ts +4 -0
  178. package/types/editor/fieldTypes/TreeListEditor.d.ts +4 -0
  179. package/types/editor/ui/Section.d.ts +5 -0
  180. package/types/fieldTypes.d.ts +30 -15
  181. package/types/layoutData.d.ts +34 -9
  182. package/types/loadRouteData.d.ts +34 -5
  183. package/types/mediaProtection.d.ts +1 -0
  184. package/types/middleware/authorization.d.ts +2 -0
  185. package/types/middleware/index.d.ts +1 -0
  186. package/dist/cjs/editor/PageInfo.js +0 -12
  187. package/dist/esm/alpacaContext.js +0 -8
  188. package/dist/esm/components/Error.js +0 -10
  189. package/dist/esm/components/Image.js +0 -32
  190. package/dist/esm/components/Link.js +0 -29
  191. package/dist/esm/components/LinkEditor.js +0 -19
  192. package/dist/esm/components/Picture.js +0 -118
  193. package/dist/esm/components/PictureEditor.js +0 -64
  194. package/dist/esm/components/Placeholder.js +0 -69
  195. package/dist/esm/components/RichText.js +0 -40
  196. package/dist/esm/components/RichTextEditor.js +0 -52
  197. package/dist/esm/components/Slot.js +0 -5
  198. package/dist/esm/components/Text.js +0 -39
  199. package/dist/esm/components/TextEditor.js +0 -38
  200. package/dist/esm/components/Translate.js +0 -10
  201. package/dist/esm/components/index.js +0 -7
  202. package/dist/esm/editor/AiTerminal.js +0 -157
  203. package/dist/esm/editor/ComponentInfo.js +0 -10
  204. package/dist/esm/editor/ComponentPalette.js +0 -72
  205. package/dist/esm/editor/ComponentTree.js +0 -196
  206. package/dist/esm/editor/ContentTree.js +0 -117
  207. package/dist/esm/editor/Debug.js +0 -9
  208. package/dist/esm/editor/DictionaryEditor.js +0 -31
  209. package/dist/esm/editor/EditFrame.js +0 -57
  210. package/dist/esm/editor/EditHistory.js +0 -26
  211. package/dist/esm/editor/Editor.js +0 -23
  212. package/dist/esm/editor/EditorClient.js +0 -477
  213. package/dist/esm/editor/EditorClientHost.js +0 -7
  214. package/dist/esm/editor/FieldList.js +0 -60
  215. package/dist/esm/editor/GraphQL.js +0 -82
  216. package/dist/esm/editor/LanguageSelector.js +0 -17
  217. package/dist/esm/editor/MediaSelector.js +0 -60
  218. package/dist/esm/editor/PageInfo.js +0 -8
  219. package/dist/esm/editor/PlaceholderDropZone.js +0 -50
  220. package/dist/esm/editor/PlaceholderDropZoneHost.js +0 -7
  221. package/dist/esm/editor/Terminal.js +0 -47
  222. package/dist/esm/editor/TranslateEditor.js +0 -21
  223. package/dist/esm/editor/VersionSelector.js +0 -17
  224. package/dist/esm/editor/componentTreeHelper.js +0 -14
  225. package/dist/esm/editor/contentService.js +0 -31
  226. package/dist/esm/editor/editContext.js +0 -5
  227. package/dist/esm/editor/editService.js +0 -139
  228. package/dist/esm/editor/fieldTypes/RichTextEditor.js +0 -15
  229. package/dist/esm/editor/fieldTypes/SingleLineText.js +0 -13
  230. package/dist/esm/editor/index.js +0 -2
  231. package/dist/esm/fieldTypes.js +0 -1
  232. package/dist/esm/graphQLTypes.js +0 -1
  233. package/dist/esm/index.js +0 -7
  234. package/dist/esm/layoutData.js +0 -1
  235. package/dist/esm/loadRouteData.js +0 -123
  236. package/dist/esm/mediaProtection.js +0 -49
  237. package/types/editor/PageInfo.d.ts +0 -4
  238. /package/types/{editor → components}/TranslateEditor.d.ts +0 -0
@@ -9,6 +9,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  step((generator = generator.apply(thisArg, _arguments || [])).next());
10
10
  });
11
11
  };
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
12
15
  Object.defineProperty(exports, "__esModule", { value: true });
13
16
  const jsx_runtime_1 = require("react/jsx-runtime");
14
17
  const progressspinner_1 = require("primereact/progressspinner");
@@ -16,52 +19,65 @@ const __1 = require("..");
16
19
  const tree_1 = require("primereact/tree");
17
20
  const react_1 = require("react");
18
21
  const contentService_1 = require("./contentService");
19
- function ContentTree({ isDraggable, dragStart, dragEnd, expandIdPath, selectionMode, selectedItemIds, rootItemId, onSelectionChange, filter, templateIds, }) {
22
+ const contextmenu_1 = require("primereact/contextmenu");
23
+ const editService_1 = require("./editService");
24
+ const ItemNameDialog_1 = __importDefault(require("./ItemNameDialog"));
25
+ function ContentTree({ isDraggable, dragStart, dragEnd, expandIdPath, selectionMode, selectedItemIds, rootItemId, onSelectionChange, filter, templateIds, className, includeEmbeddedItems, onDoubleClick, secondarySelectedItemId, }) {
20
26
  const [treeNodes, setTreeNodes] = (0, react_1.useState)([]);
27
+ const [selectedKeys, setSelectedKeys] = (0, react_1.useState)();
21
28
  const [expandedKeys, setExpandedKeys] = (0, react_1.useState)();
29
+ const treeContainerRef = (0, react_1.useRef)(null);
22
30
  const editContext = (0, __1.useEditContext)();
31
+ const [selectedNodeScrolledIntoView, setSelectedNodeScrolledIntoView] = (0, react_1.useState)(false);
32
+ const cm = (0, react_1.useRef)(null);
33
+ const [menu, setMenu] = (0, react_1.useState)([]);
34
+ const itemNameDialogRef = (0, react_1.useRef)(null);
23
35
  const loadOnExpand = (event) => __awaiter(this, void 0, void 0, function* () {
24
36
  const node = event.node;
25
- node.loading = true;
26
- yield loadNodeChildren(node);
27
- let value = [...treeNodes];
28
- setTreeNodes(value);
29
- node.loading = false;
37
+ yield loadChildren(node);
30
38
  });
31
- const loadNodeChildren = (node) => __awaiter(this, void 0, void 0, function* () {
32
- if (!node.children) {
33
- if (!node.key || !editContext)
34
- return node.children || [];
35
- let children = yield (0, contentService_1.getChildren)(node.key, editContext === null || editContext === void 0 ? void 0 : editContext.sessionId, templateIds);
36
- if (filter)
37
- children = filter(children);
38
- node.children = children.map((x) => ({
39
- key: x.id,
40
- label: x.name,
41
- iconUrl: x.icon,
42
- isDraggable: isDraggable && isDraggable(x),
43
- data: x,
44
- leaf: !x.hasChildren,
45
- }));
46
- }
47
- return node.children;
39
+ function loadChildren(node) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ if (!node.children) {
42
+ node.loading = true;
43
+ const nodes = yield loadNodeChildren(node.key);
44
+ node.children = nodes;
45
+ let value = [...treeNodes];
46
+ setTreeNodes(value);
47
+ node.loading = false;
48
+ }
49
+ });
50
+ }
51
+ function refreshNode(node) {
52
+ node.children = undefined;
53
+ loadChildren(node);
54
+ }
55
+ const loadNodeChildren = (id) => __awaiter(this, void 0, void 0, function* () {
56
+ if (!editContext)
57
+ return [];
58
+ let children = yield (0, contentService_1.getChildren)(id, editContext.sessionId, templateIds, includeEmbeddedItems !== null && includeEmbeddedItems !== void 0 ? includeEmbeddedItems : false);
59
+ if (filter)
60
+ children = filter(children);
61
+ return children.map((x) => ({
62
+ key: x.id,
63
+ label: x.name,
64
+ iconUrl: x.icon,
65
+ isDraggable: isDraggable && isDraggable(x),
66
+ data: x,
67
+ leaf: !x.hasChildren,
68
+ }));
48
69
  });
49
70
  (0, react_1.useEffect)(() => {
50
- const treeNodes = [
51
- {
52
- key: rootItemId.toLowerCase(),
53
- label: "content",
54
- leaf: false,
55
- },
56
- ];
57
71
  const newExpandedKeys = getExpandedKeys();
58
72
  setExpandedKeys(newExpandedKeys);
59
- preLoadNodes(newExpandedKeys, treeNodes);
73
+ preLoadNodes(newExpandedKeys);
60
74
  setTreeNodes(treeNodes);
61
75
  }, []);
62
76
  function getExpandedKeys() {
63
77
  const newExpandedKeys = {};
64
78
  newExpandedKeys[rootItemId.toLocaleLowerCase()] = true;
79
+ if (!expandIdPath)
80
+ return newExpandedKeys;
65
81
  const idPathArray = expandIdPath.split("/");
66
82
  idPathArray.forEach((x) => {
67
83
  if (x !== "")
@@ -69,31 +85,43 @@ function ContentTree({ isDraggable, dragStart, dragEnd, expandIdPath, selectionM
69
85
  });
70
86
  return newExpandedKeys;
71
87
  }
72
- function preLoadNodes(expandedKeys, treeNodes) {
88
+ function preLoadNodes(expandedKeys) {
73
89
  return __awaiter(this, void 0, void 0, function* () {
74
- yield doPreloadNodes(expandedKeys, treeNodes);
90
+ const rootNodes = yield loadNodeChildren(rootItemId);
91
+ yield doPreloadNodes(expandedKeys, rootNodes);
75
92
  setExpandedKeys(Object.assign({}, expandedKeys));
76
- setTreeNodes([...treeNodes]);
93
+ setTreeNodes([...rootNodes]);
77
94
  });
78
95
  }
79
96
  function doPreloadNodes(expandedKeys, treeNodes) {
80
97
  return __awaiter(this, void 0, void 0, function* () {
81
98
  for (let i = 0; i < treeNodes.length; i++) {
82
99
  if (expandedKeys[treeNodes[i].key]) {
83
- const children = yield loadNodeChildren(treeNodes[i]);
100
+ const children = yield loadNodeChildren(treeNodes[i].key);
101
+ treeNodes[i].children = children;
84
102
  yield doPreloadNodes(expandedKeys, children);
85
103
  }
86
104
  }
87
105
  });
88
106
  }
107
+ const nodeDictionary = {};
108
+ createMap(treeNodes, nodeDictionary);
109
+ function createMap(treeNodes, nodeDictionary) {
110
+ treeNodes.forEach((n) => {
111
+ if (n.key)
112
+ nodeDictionary[n.key] = n;
113
+ if (n.children)
114
+ createMap(n.children, nodeDictionary);
115
+ });
116
+ }
89
117
  const nodeTemplate = (node, options) => {
90
- let label = (0, jsx_runtime_1.jsx)("b", { children: node.label });
118
+ let label = (0, jsx_runtime_1.jsx)("span", { children: node.label });
91
119
  if (node.url) {
92
120
  label = ((0, jsx_runtime_1.jsx)("a", { onDragStart: (e) => e.preventDefault(), href: node.url, className: "a-text-primary hover:a-underline a-font-semibold", children: node.label }));
93
121
  }
94
122
  return ((0, jsx_runtime_1.jsxs)("span", { onDragStart: (event) => {
95
123
  handleDragStart(event, node.data);
96
- }, onDragEnd: handleDragEnd, draggable: node.isDraggable, className: `a-flex a-gap-2 ${node.isDraggable ? "a-cursor-grab" : ""} ${options.className}`, children: [(0, jsx_runtime_1.jsx)("img", { src: node.iconUrl, style: { height: "20px" }, width: "20", height: "20", onDragStart: (e) => e.preventDefault() }), label, node.loading && ((0, jsx_runtime_1.jsx)(progressspinner_1.ProgressSpinner, { style: { width: "20px", height: "20px" } }))] }));
124
+ }, onDragEnd: handleDragEnd, draggable: node.isDraggable, className: `a-flex a-items-center a-gap-2 ${node.isDraggable ? "a-cursor-grab" : ""} ${options.className} ${node.data.id == secondarySelectedItemId ? "a-selected-secondary" : ""}`, children: [(0, jsx_runtime_1.jsx)("img", { src: node.iconUrl, style: { height: "20px" }, width: "20", height: "20", onDragStart: (e) => e.preventDefault() }), label, node.loading && ((0, jsx_runtime_1.jsx)(progressspinner_1.ProgressSpinner, { style: { width: "20px", height: "20px" } }))] }));
97
125
  };
98
126
  function handleDragStart(event, item) {
99
127
  if (dragStart)
@@ -104,17 +132,84 @@ function ContentTree({ isDraggable, dragStart, dragEnd, expandIdPath, selectionM
104
132
  if (dragEnd)
105
133
  dragEnd();
106
134
  }
107
- const newSelectedKeys = {};
108
- selectedItemIds === null || selectedItemIds === void 0 ? void 0 : selectedItemIds.forEach((x) => {
109
- newSelectedKeys[x] = true;
110
- });
111
- return ((0, jsx_runtime_1.jsx)("div", { onDragEnterCapture: (ev) => ev.stopPropagation(), onDragOverCapture: (ev) => ev.stopPropagation(), onDragLeaveCapture: (ev) => ev.stopPropagation(), children: (0, jsx_runtime_1.jsx)(tree_1.Tree, { value: treeNodes, expandedKeys: expandedKeys, onToggle: (e) => setExpandedKeys(e.value), nodeTemplate: nodeTemplate,
112
- //dragdropScope={isDraggable ? "alpaca" : undefined}
113
- className: "a-w-full alpaca-no-border a-p-0", onExpand: loadOnExpand, selectionMode: selectionMode, onSelectionChange: (ev) => {
114
- if (onSelectionChange && selectionMode == "multiple")
115
- onSelectionChange(Object.keys(ev.value || {}));
116
- if (onSelectionChange && selectionMode == "single")
117
- onSelectionChange([ev.value]);
118
- }, selectionKeys: newSelectedKeys }) }));
135
+ (0, react_1.useEffect)(() => {
136
+ const newSelectedKeys = {};
137
+ selectedItemIds === null || selectedItemIds === void 0 ? void 0 : selectedItemIds.forEach((x) => {
138
+ if (x.startsWith("{") && x.endsWith("}") && x.length > 2)
139
+ x = x.substring(1, x.length - 1);
140
+ newSelectedKeys[x.toLowerCase()] = true;
141
+ });
142
+ if (selectionMode == "single" &&
143
+ selectedItemIds &&
144
+ selectedItemIds.length > 0)
145
+ setSelectedKeys(Object.keys(newSelectedKeys)[0]);
146
+ else
147
+ setSelectedKeys(newSelectedKeys);
148
+ }, [selectedItemIds]);
149
+ (0, react_1.useEffect)(() => {
150
+ const scrollNodeIntoView = () => {
151
+ if (!treeContainerRef.current)
152
+ return;
153
+ const selectedNodeElement = treeContainerRef.current.querySelector(`li[aria-selected="true"]`);
154
+ if (selectedNodeElement) {
155
+ setSelectedNodeScrolledIntoView(true);
156
+ selectedNodeElement.scrollIntoView({
157
+ behavior: "smooth",
158
+ block: "center",
159
+ inline: "center",
160
+ });
161
+ }
162
+ };
163
+ if (!selectedNodeScrolledIntoView)
164
+ scrollNodeIntoView();
165
+ }, [treeNodes]);
166
+ function insertItem(node, parent, templateId) {
167
+ var _a;
168
+ (_a = itemNameDialogRef.current) === null || _a === void 0 ? void 0 : _a.show({
169
+ accept: (name) => __awaiter(this, void 0, void 0, function* () {
170
+ yield (0, editService_1.createItem)(parent, templateId, name);
171
+ editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
172
+ node.expanded = true;
173
+ refreshNode(node);
174
+ }),
175
+ });
176
+ }
177
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ItemNameDialog_1.default, { ref: itemNameDialogRef }), (0, jsx_runtime_1.jsx)(contextmenu_1.ContextMenu, { model: menu, ref: cm, className: "a-text-sm" }), (0, jsx_runtime_1.jsx)("div", { className: className, onDragEnterCapture: (ev) => ev.stopPropagation(), onDragOverCapture: (ev) => ev.stopPropagation(), onDragLeaveCapture: (ev) => ev.stopPropagation(), ref: treeContainerRef, children: (0, jsx_runtime_1.jsx)(tree_1.Tree, { value: treeNodes, expandedKeys: expandedKeys, onToggle: (e) => setExpandedKeys(e.value), nodeTemplate: nodeTemplate,
178
+ //dragdropScope={isDraggable ? "alpaca" : undefined}
179
+ className: "a-w-full a-h-full alpaca-no-border a-p-0 a-text-xs", onExpand: loadOnExpand, selectionMode: selectionMode, pt: { container: { className: "a-h-full" } }, onNodeDoubleClick: (e) => {
180
+ onDoubleClick === null || onDoubleClick === void 0 ? void 0 : onDoubleClick(e.node.data);
181
+ }, onSelectionChange: (ev) => {
182
+ if (onSelectionChange && selectionMode == "multiple") {
183
+ const selectedKeys = Object.keys(ev.value);
184
+ const selectedNodes = selectedKeys
185
+ .filter((key) => nodeDictionary[key])
186
+ .map((key) => nodeDictionary[key]);
187
+ onSelectionChange(selectedNodes.map((x) => x.data));
188
+ }
189
+ if (onSelectionChange && selectionMode == "single") {
190
+ onSelectionChange(nodeDictionary[ev.value].data);
191
+ }
192
+ }, selectionKeys: selectedKeys, onContextMenu: (e) => __awaiter(this, void 0, void 0, function* () {
193
+ var _a;
194
+ e.originalEvent.preventDefault();
195
+ const item = e.node.data;
196
+ var insertOptions = yield (0, editService_1.loadInsertOptions)(item);
197
+ setMenu([
198
+ {
199
+ label: "Insert",
200
+ disabled: insertOptions.length == 0,
201
+ items: insertOptions.length === 0
202
+ ? undefined
203
+ : insertOptions.map((x) => ({
204
+ label: x.name,
205
+ icon: ((0, jsx_runtime_1.jsx)("img", { className: "p-menuitem-icon", src: x.icon, style: { height: "16px" }, width: "16", height: "16", onDragStart: (e) => e.preventDefault() })),
206
+ command: () => {
207
+ insertItem(e.node, item, x.id);
208
+ },
209
+ })),
210
+ },
211
+ ]);
212
+ (_a = cm.current) === null || _a === void 0 ? void 0 : _a.show(e.originalEvent);
213
+ }) }) })] }));
119
214
  }
120
215
  exports.default = ContentTree;
@@ -8,9 +8,19 @@ const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_json_pretty_1 = __importDefault(require("react-json-pretty"));
9
9
  require("react-json-pretty/themes/monikai.css");
10
10
  const tabview_1 = require("primereact/tabview");
11
- function Debug({ component, page }) {
11
+ function Debug({ component, page, }) {
12
12
  if (!component && !page)
13
13
  return;
14
- return ((0, jsx_runtime_1.jsxs)(tabview_1.TabView, { children: [component && (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Component", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: component }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Page", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: page }) })] }));
14
+ return ((0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "a-h-full", children: [component && ((0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Component", className: "a-relative a-h-full", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-auto", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: component, replacer: function (key, value) {
15
+ if (key === "parentComponent") {
16
+ return undefined;
17
+ }
18
+ return value;
19
+ } }) }) })), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Page", className: "a-relative a-h-full", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-auto", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: page, replacer: function (key, value) {
20
+ if (key === "parentComponent") {
21
+ return undefined;
22
+ }
23
+ return value;
24
+ } }) }) })] }));
15
25
  }
16
26
  exports.Debug = Debug;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ function DialogButtons({ children, }) {
5
+ return ((0, jsx_runtime_1.jsx)("div", { className: "a-flex a-justify-end a-gap-3 a-pt-6 a-border-t", children: children }));
6
+ }
7
+ exports.default = DialogButtons;
@@ -5,9 +5,9 @@ exports.DictionaryEditor = void 0;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const datatable_1 = require("primereact/datatable");
7
7
  const column_1 = require("primereact/column");
8
- const inputtext_1 = require("primereact/inputtext");
9
8
  const __1 = require("..");
10
- function DictionaryEditor({ dictionary }) {
9
+ const SingleLineText_1 = require("./fieldTypes/SingleLineText");
10
+ function DictionaryEditor({ dictionary, }) {
11
11
  if (!dictionary)
12
12
  return;
13
13
  const context = (0, __1.useEditContext)();
@@ -17,16 +17,22 @@ function DictionaryEditor({ dictionary }) {
17
17
  }
18
18
  let entries = Object.keys(dictionary).map((k) => ({
19
19
  key: k,
20
- translation: dictionary[k],
20
+ field: dictionary[k],
21
+ translation: dictionary[k].value,
21
22
  }));
22
- entries = [...entries, ...context === null || context === void 0 ? void 0 : context.unresolvedDictionaryKeys.map(x => ({
23
+ entries = [
24
+ ...entries,
25
+ ...context === null || context === void 0 ? void 0 : context.unresolvedDictionaryKeys.map((x) => ({
23
26
  key: x,
24
- translation: "[undefined]"
25
- }))];
27
+ field: null,
28
+ translation: "[undefined]",
29
+ })),
30
+ ];
26
31
  entries.sort((a, b) => (a.key > b.key ? -1 : 1));
27
32
  const textEditor = (options) => {
28
- if (options.value != "[undefined]")
29
- return (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { type: "text", value: options.value, onChange: (e) => options.editorCallback(e.target.value) });
33
+ var _a;
34
+ if ((_a = options.rowData) === null || _a === void 0 ? void 0 : _a.field)
35
+ return (0, jsx_runtime_1.jsx)(SingleLineText_1.SingleLineText, { field: options.rowData.field });
30
36
  else
31
37
  return null;
32
38
  };
@@ -1,33 +1,59 @@
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.EditFrame = void 0;
5
8
  const jsx_runtime_1 = require("react/jsx-runtime");
6
9
  const react_1 = require("react");
7
10
  const __1 = require("..");
8
- function EditFrame({ componentId, children, }) {
11
+ const react_2 = __importDefault(require("react"));
12
+ const AiPopup_1 = require("./AiPopup");
13
+ function EditFrame({ componentId, children, index, }) {
9
14
  var _a, _b;
10
15
  const editContext = (0, __1.useEditContext)();
16
+ const [customButtons, setCustomButtons] = (0, react_1.useState)([]);
17
+ const ref = react_2.default.useRef(null);
11
18
  if (!editContext)
12
19
  return children;
13
20
  const { getComponentById, selection, setSelection } = editContext;
14
- const [isRemoved, setIsRemoved] = (0, react_1.useState)(false);
21
+ const isSelected = selection && selection.indexOf(componentId) >= 0;
22
+ const aiPopup = react_2.default.useRef(null);
23
+ (0, react_1.useEffect)(() => {
24
+ if (ref.current && editContext.scrollIntoView == componentId) {
25
+ ref.current.scrollIntoView({
26
+ behavior: "smooth",
27
+ block: "center",
28
+ inline: "center",
29
+ });
30
+ }
31
+ }, [editContext.scrollIntoView]);
15
32
  const clientComponent = getComponentById(componentId);
16
33
  if (!clientComponent) {
17
34
  return children;
18
35
  }
19
36
  function select(e) {
20
37
  e.stopPropagation();
21
- if (clientComponent)
22
- setSelection([clientComponent.id]);
38
+ e.preventDefault();
39
+ if (clientComponent) {
40
+ const s = e.ctrlKey ? [...selection] : [];
41
+ if (s.indexOf(clientComponent.id) < 0)
42
+ s.push(clientComponent.id);
43
+ setSelection(s);
44
+ }
23
45
  }
24
- let classNames = "ap-editframe";
46
+ let classNames = "a-editframe";
25
47
  let color = clientComponent.linkItemId ? "orange-400" : "sky-400";
26
48
  if (clientComponent.hostingPageItem)
27
49
  color = "purple-400";
28
- const isSelected = selection && selection.indexOf(clientComponent.id) >= 0;
29
50
  if (isSelected)
30
- classNames = `ap-editframe a-relative a-ring-2 a-ring-${color}`;
51
+ classNames = `a-editframe a-selected a-relative`;
52
+ (0, react_1.useEffect)(() => {
53
+ var _a;
54
+ if (!isSelected)
55
+ (_a = aiPopup.current) === null || _a === void 0 ? void 0 : _a.close();
56
+ }, [isSelected]);
31
57
  function handleDragStart(event) {
32
58
  if (!clientComponent)
33
59
  return;
@@ -37,7 +63,12 @@ function EditFrame({ componentId, children, }) {
37
63
  editContext.dragStart({
38
64
  type: "component",
39
65
  templateId: clientComponent.templateId,
40
- componentId: clientComponent.id,
66
+ component: {
67
+ id: clientComponent.id,
68
+ language: editContext.page.language,
69
+ version: editContext.page.version,
70
+ name: clientComponent.name,
71
+ },
41
72
  });
42
73
  }, 50);
43
74
  event.stopPropagation();
@@ -45,17 +76,54 @@ function EditFrame({ componentId, children, }) {
45
76
  const isDraggable = isSelected && !clientComponent.hostingPageItem;
46
77
  if ((_a = children.props) === null || _a === void 0 ? void 0 : _a.className)
47
78
  classNames += " " + ((_b = children === null || children === void 0 ? void 0 : children.props) === null || _b === void 0 ? void 0 : _b.className);
48
- if (isRemoved)
49
- classNames += " ap-removed";
50
- return ((0, jsx_runtime_1.jsxs)("div", { className: classNames, onClick: select, draggable: isDraggable, onDragStart: handleDragStart, children: [isSelected && ((0, jsx_runtime_1.jsxs)("div", { className: `a-absolute a-top-0 a-right-0 a-text-white a-px-3 a-bg-${color} ${isDraggable ? "a-cursor-move" : ""}`, children: [clientComponent.name, (0, jsx_runtime_1.jsx)("button", { className: "a-ml-3", onClick: (ev) => {
51
- ev.preventDefault();
52
- ev.stopPropagation();
53
- editContext.removeComponent(clientComponent.linkItemId || clientComponent.id, () => setIsRemoved(true));
54
- }, children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-trash" }) }), clientComponent.placeholders.length > 0 && ((0, jsx_runtime_1.jsx)("button", { className: "a-ml-3", onClick: (ev) => {
55
- editContext.setSelectedForInsertion(clientComponent.id);
56
- editContext.openComponentPalette();
57
- ev.stopPropagation();
58
- ev.preventDefault();
59
- }, children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-plus" }) }))] })), children] }));
79
+ if (clientComponent.isRemoved)
80
+ classNames += " a-removed";
81
+ const commands = editContext.getComponentCommands([clientComponent]);
82
+ const commandButtons = commands
83
+ .filter((x) => !x.disabled && x.visibilityScopes.indexOf("editFrame") >= 0)
84
+ .map((x) => ({
85
+ icon: x.icon,
86
+ tooltip: x.label,
87
+ onClick: (ev) => {
88
+ ev.preventDefault();
89
+ ev.stopPropagation();
90
+ x.execute();
91
+ },
92
+ }));
93
+ const aiButton = {
94
+ icon: "pi pi-comments",
95
+ tooltip: "AI",
96
+ onClick: (ev) => {
97
+ aiPopup.current.show(ev);
98
+ ev.preventDefault();
99
+ ev.stopPropagation();
100
+ },
101
+ };
102
+ const buttons = [...customButtons, aiButton, ...commandButtons];
103
+ if (clientComponent.placeholders.length > 0) {
104
+ buttons.push({
105
+ icon: "pi pi-plus",
106
+ tooltip: "Insert component",
107
+ onClick: (ev) => {
108
+ editContext.setSelectedForInsertion(clientComponent.id);
109
+ ev.stopPropagation();
110
+ ev.preventDefault();
111
+ },
112
+ });
113
+ }
114
+ var filterContext = (0, __1.useEditFilterChildrenContext)();
115
+ if (filterContext &&
116
+ filterContext.filterChildCallback &&
117
+ filterContext.filterChildCallback({
118
+ component: clientComponent,
119
+ index: index,
120
+ }))
121
+ return null;
122
+ return ((0, jsx_runtime_1.jsxs)(__1.EditFrameContextProvider, { value: {
123
+ customButtons,
124
+ setCustomButtons,
125
+ componentId: clientComponent.id,
126
+ isSelected: isSelected,
127
+ }, children: [(0, jsx_runtime_1.jsx)(AiPopup_1.AiPopup, { componentId: clientComponent.id, ref: aiPopup }), (0, jsx_runtime_1.jsxs)("div", { ref: ref, className: classNames, onClick: select, draggable: isDraggable, onDragStart: handleDragStart, children: [children, isSelected && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: `a-pointer-events-none a-absolute a-inset-0 a-border-2 a-border-${color} ` }), (0, jsx_runtime_1.jsxs)("div", { className: `a-editframe-menu a-absolute a-top-px a-right-px a-z-1000 a-text-sm a-text-white a-opacity-50 hover:a-opacity-100 a-whitespace-nowrap a-px-3 a-pt-3px a-bg-${color} ${isDraggable ? "a-cursor-move" : "a-cursor-default"} `, style: { zoom: 1 / editContext.zoom }, children: [clientComponent.name, buttons.map((b, i) => ((0, jsx_runtime_1.jsx)("button", { className: "a-ml-3", onClick: b.onClick, title: b.tooltip, children: (0, jsx_runtime_1.jsx)("i", { className: b.icon }) }, i)))] })] }))] })] }));
60
128
  }
61
129
  exports.EditFrame = EditFrame;
@@ -7,24 +7,37 @@ function EditHistory({ operations }) {
7
7
  if (!operations)
8
8
  return;
9
9
  const description = (op) => {
10
+ var _a, _b, _c;
11
+ if (op.type === "move-component") {
12
+ const move = op;
13
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Move ", (_a = move.component) === null || _a === void 0 ? void 0 : _a.name, " to ", (_b = move.parent) === null || _b === void 0 ? void 0 : _b.name, "/", move.placeholderName, " (", move.placeholderIndex, ")", " "] }));
14
+ }
10
15
  if (op.type === "add-component")
11
- return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Add ", op.itemName] });
16
+ return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Add ", (_c = op.component) === null || _c === void 0 ? void 0 : _c.name] });
12
17
  if (op.type === "link-component")
13
18
  return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Insert ", op.itemName] });
19
+ if (op.type === "synchronize-components") {
20
+ const syncOp = op;
21
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Synchronize components", " ", syncOp.itemsCreated && ((0, jsx_runtime_1.jsxs)("span", { className: "a-text-gray-400 a-ml-1", children: ["(", syncOp.itemsCreated.length, " item", syncOp.itemsCreated.length !== 1 ? "s" : "", " created)"] }))] }));
22
+ }
14
23
  if (op.type === "remove-component")
15
- return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Remove ", op.id] });
24
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Remove", " ", op.components
25
+ .map((x) => x.name)
26
+ .join(", ")] }));
16
27
  if (op.type === "edit-field") {
17
28
  const editFieldOp = op;
18
29
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Edit ", editFieldOp.fieldName, (0, jsx_runtime_1.jsxs)("span", { className: "a-text-gray-400 a-ml-1", children: ["(", editFieldOp.itemName, ", ", editFieldOp.language, ",", " ", editFieldOp.version, ")"] })] }));
19
30
  }
20
31
  return (0, jsx_runtime_1.jsx)("div", { children: op.type });
21
32
  };
22
- return ((0, jsx_runtime_1.jsxs)("div", { className: "a-inset-0 a-absolute", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-p-2 a-bg-gray-100 a-m-1", children: "History" }), (0, jsx_runtime_1.jsx)("div", { className: "a-flex a-flex-col a-overflow-y-auto a-overflow-x-hidden", style: { height: "calc(100% - 45px)" }, children: operations.map((o, i) => singleOperation(i, o)) })] }));
33
+ const reversedOps = [...operations].reverse();
34
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "a-inset-0 a-absolute", children: [(0, jsx_runtime_1.jsx)("div", { className: "a-p-3 a-bg-gray-50 a-border-b-2 a-text-gray-600 a-text-sm", children: "History" }), (0, jsx_runtime_1.jsx)("div", { className: "a-flex a-flex-col a-overflow-y-auto a-overflow-x-hidden", style: { height: "calc(100% - 45px)" }, children: reversedOps.map((o, i) => singleOperation(i, o)) })] }));
23
35
  function singleOperation(i, o) {
36
+ var _a;
24
37
  let className = "a-border-b a-p-2 a-flex a-justify-between";
25
38
  if (o.undone)
26
39
  className = className + " a-text-gray-300";
27
- return ((0, jsx_runtime_1.jsxs)("div", { className: className, children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("small", { className: "a-text-color-secondary", children: description(o) }) }), (0, jsx_runtime_1.jsx)("div", { className: "a-text-xs", children: o.user })] }, i));
40
+ return ((0, jsx_runtime_1.jsxs)("div", { className: className, children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("small", { className: "a-text-color-secondary", children: description(o) }), " ", o.isCommitted && ((0, jsx_runtime_1.jsx)("i", { className: "pi pi-check a-text-green-500 a-ml-1" }))] }), (0, jsx_runtime_1.jsx)("div", { className: "a-text-xs", children: (_a = o.user) === null || _a === void 0 ? void 0 : _a.name })] }, i));
28
41
  }
29
42
  }
30
43
  exports.EditHistory = EditHistory;
@@ -21,7 +21,7 @@ function Editor({ children, content, }) {
21
21
  if (!data.editing)
22
22
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
23
23
  var alpacaContext = (0, __1.useAlpacaContext)();
24
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(EditorClientHost_1.EditorClientHost, { content: data, dictionaryObject: alpacaContext.dictionary, edit: alpacaContext.edit, children: children }) }));
24
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(EditorClientHost_1.EditorClientHost, { content: data, dictionaryObject: alpacaContext.dictionary, edit: alpacaContext.edit, site: alpacaContext.pageContext.site.name, children: children }) }));
25
25
  });
26
26
  }
27
27
  exports.Editor = Editor;