@alpaca-headless/alpaca-headless-nextjs 0.0.3 → 1.0.13
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.
- package/dist/cjs/alpacaContext.js +7 -6
- package/dist/cjs/components/Image.js +36 -0
- package/dist/cjs/components/Link.js +22 -0
- package/dist/cjs/components/Picture.js +119 -0
- package/dist/cjs/components/PictureEditor.js +43 -0
- package/dist/cjs/components/Placeholder.js +43 -5
- package/dist/cjs/components/RichText.js +44 -0
- package/dist/cjs/components/RichTextEditor.js +82 -0
- package/dist/cjs/components/Slot.js +8 -0
- package/dist/cjs/components/Text.js +24 -4
- package/dist/cjs/components/TextEditor.js +68 -0
- package/dist/cjs/components/Translate.js +14 -0
- package/dist/cjs/components/index.js +5 -0
- package/dist/cjs/editor/AiTerminal.js +150 -0
- package/dist/cjs/editor/ComponentInfo.js +14 -0
- package/dist/cjs/editor/ComponentPalette.js +78 -0
- package/dist/cjs/editor/ComponentTree.js +200 -0
- package/dist/cjs/editor/ContentTree.js +120 -0
- package/dist/cjs/editor/Debug.js +16 -0
- package/dist/cjs/editor/DictionaryEditor.js +35 -0
- package/dist/cjs/editor/EditFrame.js +61 -0
- package/dist/cjs/editor/EditHistory.js +30 -0
- package/dist/cjs/editor/Editor.js +27 -0
- package/dist/cjs/editor/EditorClient.js +457 -0
- package/dist/cjs/editor/EditorClientHost.js +37 -0
- package/dist/cjs/editor/FieldList.js +59 -0
- package/dist/cjs/editor/GraphQL.js +90 -0
- package/dist/cjs/editor/LanguageSelector.js +21 -0
- package/dist/cjs/editor/MediaSelector.js +61 -0
- package/dist/cjs/editor/PageInfo.js +12 -0
- package/dist/cjs/editor/PlaceholderDropZone.js +54 -0
- package/dist/cjs/editor/PlaceholderDropZoneHost.js +37 -0
- package/dist/cjs/editor/Terminal.js +51 -0
- package/dist/cjs/editor/TranslateEditor.js +25 -0
- package/dist/cjs/editor/VersionSelector.js +21 -0
- package/dist/cjs/editor/componentTreeHelper.js +18 -0
- package/dist/cjs/editor/contentService.js +38 -0
- package/dist/cjs/editor/editContext.js +35 -0
- package/dist/cjs/editor/editService.js +150 -0
- package/dist/cjs/editor/fieldTypes/RichTextEditor.js +19 -0
- package/dist/cjs/editor/fieldTypes/SingleLineText.js +17 -0
- package/dist/cjs/editor/index.js +18 -0
- package/dist/cjs/graphQLTypes.js +2 -0
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/loadRouteData.js +102 -38
- package/dist/cjs/mediaProtection.js +56 -0
- package/dist/editor.css +120 -0
- package/dist/esm/alpacaContext.js +6 -4
- package/dist/esm/components/Image.js +32 -0
- package/dist/esm/components/Link.js +18 -0
- package/dist/esm/components/Picture.js +115 -0
- package/dist/esm/components/PictureEditor.js +39 -0
- package/dist/esm/components/Placeholder.js +41 -6
- package/dist/esm/components/RichText.js +37 -0
- package/dist/esm/components/RichTextEditor.js +55 -0
- package/dist/esm/components/Slot.js +5 -0
- package/dist/esm/components/Text.js +24 -4
- package/dist/esm/components/TextEditor.js +41 -0
- package/dist/esm/components/Translate.js +10 -0
- package/dist/esm/components/index.js +5 -0
- package/dist/esm/editor/AiTerminal.js +146 -0
- package/dist/esm/editor/ComponentInfo.js +10 -0
- package/dist/esm/editor/ComponentPalette.js +71 -0
- package/dist/esm/editor/ComponentTree.js +196 -0
- package/dist/esm/editor/ContentTree.js +117 -0
- package/dist/esm/editor/Debug.js +9 -0
- package/dist/esm/editor/DictionaryEditor.js +31 -0
- package/dist/esm/editor/EditFrame.js +57 -0
- package/dist/esm/editor/EditHistory.js +26 -0
- package/dist/esm/editor/Editor.js +23 -0
- package/dist/esm/editor/EditorClient.js +450 -0
- package/dist/esm/editor/EditorClientHost.js +7 -0
- package/dist/esm/editor/FieldList.js +55 -0
- package/dist/esm/editor/GraphQL.js +83 -0
- package/dist/esm/editor/LanguageSelector.js +17 -0
- package/dist/esm/editor/MediaSelector.js +54 -0
- package/dist/esm/editor/PageInfo.js +8 -0
- package/dist/esm/editor/PlaceholderDropZone.js +50 -0
- package/dist/esm/editor/PlaceholderDropZoneHost.js +7 -0
- package/dist/esm/editor/Terminal.js +47 -0
- package/dist/esm/editor/TranslateEditor.js +21 -0
- package/dist/esm/editor/VersionSelector.js +17 -0
- package/dist/esm/editor/componentTreeHelper.js +14 -0
- package/dist/esm/editor/contentService.js +31 -0
- package/dist/esm/editor/editContext.js +5 -0
- package/dist/esm/editor/editService.js +139 -0
- package/dist/esm/editor/fieldTypes/RichTextEditor.js +15 -0
- package/dist/esm/editor/fieldTypes/SingleLineText.js +13 -0
- package/dist/esm/editor/index.js +2 -0
- package/dist/esm/graphQLTypes.js +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/loadRouteData.js +102 -38
- package/dist/esm/mediaProtection.js +49 -0
- package/next-env.d.ts +5 -5
- package/package.json +51 -39
- package/types/alpacaContext.d.ts +20 -7
- package/types/components/Image.d.ts +10 -0
- package/types/components/Link.d.ts +6 -0
- package/types/components/Picture.d.ts +20 -0
- package/types/components/PictureEditor.d.ts +3 -0
- package/types/components/RichText.d.ts +7 -0
- package/types/components/RichTextEditor.d.ts +296 -0
- package/types/components/Slot.d.ts +4 -0
- package/types/components/Text.d.ts +3 -2
- package/types/components/TextEditor.d.ts +296 -0
- package/types/components/Translate.d.ts +3 -0
- package/types/components/index.d.ts +5 -0
- package/types/editor/AiTerminal.d.ts +4 -0
- package/types/editor/ComponentInfo.d.ts +4 -0
- package/types/editor/ComponentPalette.d.ts +7 -0
- package/types/editor/ComponentTree.d.ts +5 -0
- package/types/editor/ContentTree.d.ts +13 -0
- package/types/editor/Debug.d.ts +6 -0
- package/types/editor/DictionaryEditor.d.ts +3 -0
- package/types/editor/EditFrame.d.ts +6 -0
- package/types/editor/EditHistory.d.ts +4 -0
- package/types/editor/Editor.d.ts +6 -0
- package/types/editor/EditorClient.d.ts +9 -0
- package/types/editor/EditorClientHost.d.ts +8 -0
- package/types/editor/FieldList.d.ts +4 -0
- package/types/editor/GraphQL.d.ts +5 -0
- package/types/editor/LanguageSelector.d.ts +5 -0
- package/types/editor/MediaSelector.d.ts +5 -0
- package/types/editor/PageInfo.d.ts +4 -0
- package/types/editor/PlaceholderDropZone.d.ts +6 -0
- package/types/editor/PlaceholderDropZoneHost.d.ts +6 -0
- package/types/editor/Terminal.d.ts +4 -0
- package/types/editor/TranslateEditor.d.ts +3 -0
- package/types/editor/VersionSelector.d.ts +5 -0
- package/types/editor/componentTreeHelper.d.ts +2 -0
- package/types/editor/contentService.d.ts +14 -0
- package/types/editor/editContext.d.ts +81 -0
- package/types/editor/editService.d.ts +12 -0
- package/types/editor/fieldTypes/RichTextEditor.d.ts +4 -0
- package/types/editor/fieldTypes/SingleLineText.d.ts +4 -0
- package/types/editor/index.d.ts +2 -0
- package/types/fieldTypes.d.ts +63 -1
- package/types/graphQLTypes.d.ts +24 -0
- package/types/index.d.ts +4 -0
- package/types/layoutData.d.ts +56 -1
- package/types/loadRouteData.d.ts +34 -2
- package/types/mediaProtection.d.ts +2 -0
- package/types/AlpacaHeadless.d.ts +0 -37
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.AiTerminal = void 0;
|
|
14
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
15
|
+
const react_1 = require("react");
|
|
16
|
+
const terminalservice_1 = require("primereact/terminalservice");
|
|
17
|
+
const navigation_1 = require("next/navigation");
|
|
18
|
+
const Terminal_1 = require("./Terminal");
|
|
19
|
+
function AiTerminal({ requestRefresh, selection }) {
|
|
20
|
+
const searchParams = (0, navigation_1.useSearchParams)();
|
|
21
|
+
const [messages, setMessages] = (0, react_1.useState)([]);
|
|
22
|
+
const [tokens, setTokens] = (0, react_1.useState)({ in: 0, out: 0 });
|
|
23
|
+
const selectionRef = (0, react_1.useRef)(selection);
|
|
24
|
+
(0, react_1.useEffect)(() => {
|
|
25
|
+
selectionRef.current = selection;
|
|
26
|
+
}, [selection]);
|
|
27
|
+
const messagesRef = (0, react_1.useRef)(messages);
|
|
28
|
+
(0, react_1.useEffect)(() => {
|
|
29
|
+
messagesRef.current = messages;
|
|
30
|
+
}, [messages]);
|
|
31
|
+
const router = (0, navigation_1.useRouter)();
|
|
32
|
+
function commandHandler(text, callback) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const newMessages = [...messagesRef.current, { content: text, 'role': 'user', 'name': 'user' }];
|
|
35
|
+
let lastRefresh = new Date().getTime();
|
|
36
|
+
const response = yield prompt(newMessages, selectionRef.current, searchParams.get("session"), searchParams.get("itemid"), searchParams.get("language"), searchParams.get("version"), (response) => {
|
|
37
|
+
console.log(response);
|
|
38
|
+
setTokens({ in: response.numInputTokens, out: response.numOutputTokens });
|
|
39
|
+
handleResponse(response, callback, false);
|
|
40
|
+
if (response.editOperations.length) {
|
|
41
|
+
if (new Date().getTime() - lastRefresh > 500) {
|
|
42
|
+
requestRefresh(false);
|
|
43
|
+
router.refresh();
|
|
44
|
+
lastRefresh = new Date().getTime();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
if (response) {
|
|
49
|
+
handleResponse(response, callback, true);
|
|
50
|
+
setTokens({ in: response.numInputTokens, out: response.numOutputTokens });
|
|
51
|
+
router.refresh();
|
|
52
|
+
}
|
|
53
|
+
// if (response) {
|
|
54
|
+
// messages.push({content: text, 'role': 'assistant', 'name': 'assistant'});
|
|
55
|
+
// if(response.editOperations) {
|
|
56
|
+
// const newEditOperations = [...editOperationsRef.current, {
|
|
57
|
+
// type:'composite',
|
|
58
|
+
// name: 'ghostwriter',
|
|
59
|
+
// date: new Date(),
|
|
60
|
+
// operations: response.editOperations
|
|
61
|
+
// }];
|
|
62
|
+
// setEditOperations(newEditOperations);
|
|
63
|
+
// }
|
|
64
|
+
if (response === null || response === void 0 ? void 0 : response.responseText)
|
|
65
|
+
newMessages.push({ content: response.responseText, 'role': 'assistant', 'name': 'assistant' });
|
|
66
|
+
// TerminalService.emit('response', response.responseText);
|
|
67
|
+
// }
|
|
68
|
+
// // else
|
|
69
|
+
// // TerminalService.emit('clear');
|
|
70
|
+
setMessages(newMessages);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
;
|
|
74
|
+
(0, react_1.useEffect)(() => {
|
|
75
|
+
terminalservice_1.TerminalService.on('command', commandHandler);
|
|
76
|
+
return () => {
|
|
77
|
+
terminalservice_1.TerminalService.off('command', commandHandler);
|
|
78
|
+
};
|
|
79
|
+
}, []);
|
|
80
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: 'h-full flex flex-col relative', children: [(0, jsx_runtime_1.jsx)("div", { className: 'flex-1 relative', children: (0, jsx_runtime_1.jsx)("div", { className: 'inset-0 absolute', children: (0, jsx_runtime_1.jsx)(Terminal_1.Terminal, { onReset: () => setMessages([]), commandHandler: (v, callback) => {
|
|
81
|
+
commandHandler(v, callback);
|
|
82
|
+
} }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: 'text-xs', children: ["Tokens in: ", tokens.in, " out: ", tokens.out] })] }));
|
|
83
|
+
}
|
|
84
|
+
exports.AiTerminal = AiTerminal;
|
|
85
|
+
function prompt(messages, selection, session, itemid, language, version, callback) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
const response = yield fetch("/alpaca/headless/ai/prompt", {
|
|
88
|
+
method: "POST",
|
|
89
|
+
body: JSON.stringify({ messages,
|
|
90
|
+
itemid,
|
|
91
|
+
language,
|
|
92
|
+
version,
|
|
93
|
+
selection,
|
|
94
|
+
sessionId: session }),
|
|
95
|
+
credentials: 'omit',
|
|
96
|
+
headers: {
|
|
97
|
+
"Content-Type": "application/json",
|
|
98
|
+
//Cookie: 'test'// new Cookies().getAll(),
|
|
99
|
+
},
|
|
100
|
+
next: {
|
|
101
|
+
revalidate: 0,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
if (!(response === null || response === void 0 ? void 0 : response.body))
|
|
105
|
+
return null;
|
|
106
|
+
const reader = response.body.getReader();
|
|
107
|
+
const decoder = new TextDecoder();
|
|
108
|
+
let buffer = '';
|
|
109
|
+
let result = null;
|
|
110
|
+
while (true) {
|
|
111
|
+
const { done, value } = yield reader.read();
|
|
112
|
+
if (done) {
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
buffer += decoder.decode(value, { stream: true }); // 'stream: true' ensures that any incomplete multi-byte characters aren't malformed.
|
|
116
|
+
// Split the buffer by newline and keep the last partial line for the next iteration.
|
|
117
|
+
const lines = buffer.split('\n');
|
|
118
|
+
if (lines.length > 0) {
|
|
119
|
+
buffer = lines.pop() || ""; // Incomplete line (if any) is kept for the next iteration.
|
|
120
|
+
for (let line of lines) {
|
|
121
|
+
if (line.trim() === '')
|
|
122
|
+
continue; // Skip empty lines if any.
|
|
123
|
+
try {
|
|
124
|
+
const jsonData = JSON.parse(line);
|
|
125
|
+
callback(jsonData);
|
|
126
|
+
result = jsonData;
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
console.error('Error parsing line:' + line, e);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// If there's any remaining content in the buffer after processing all chunks, try to process it.
|
|
135
|
+
if (buffer.trim() !== '') {
|
|
136
|
+
try {
|
|
137
|
+
const jsonData = JSON.parse(buffer);
|
|
138
|
+
result = jsonData;
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
console.error('Error parsing the final buffer content:', e);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function handleResponse(response, terminalCallback, isFinished) {
|
|
148
|
+
console.log(response.responseText);
|
|
149
|
+
terminalCallback(response.responseText, isFinished);
|
|
150
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ComponentInfo = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
function ComponentInfo({ component, }) {
|
|
7
|
+
var _a;
|
|
8
|
+
if (!(component === null || component === void 0 ? void 0 : component.fields))
|
|
9
|
+
return;
|
|
10
|
+
const hostingPageItem = component.hostingPageItem ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { className: "text-xs", children: ["Source: ", component.hostingPageItem.path, "( ID:", " ", component.hostingPageItem.id, ")"] }) })) : null;
|
|
11
|
+
const linkedComponent = component.linkedComponentItem ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { className: "text-xs", children: ["Source: ", component.linkedComponentItem.path] }) })) : null;
|
|
12
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "p-1", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-xl font-bold my-2", children: component.name }), (0, jsx_runtime_1.jsxs)("div", { className: "text-xs", children: ["ID: ", component.id] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-xs", children: ["Languages: ", (_a = component.translations) === null || _a === void 0 ? void 0 : _a.join(", ")] }), hostingPageItem, linkedComponent] }));
|
|
13
|
+
}
|
|
14
|
+
exports.ComponentInfo = ComponentInfo;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ComponentPalette = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const __1 = require("..");
|
|
9
|
+
const ContentTree_1 = __importDefault(require("./ContentTree"));
|
|
10
|
+
function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
|
|
11
|
+
const editContext = (0, __1.useEditContext)();
|
|
12
|
+
if (!editContext)
|
|
13
|
+
return;
|
|
14
|
+
const insertingPlaceholderKeys = selection
|
|
15
|
+
.map((x) => editContext.getComponentById(x))
|
|
16
|
+
.filter((x) => x)
|
|
17
|
+
.reduce((a, x) => a.concat(x.placeholders.map((y) => y.key)), []);
|
|
18
|
+
const selectedPlaceholderKeys = [
|
|
19
|
+
...selection.filter((x) => x.indexOf("_") > 0),
|
|
20
|
+
...insertingPlaceholderKeys,
|
|
21
|
+
];
|
|
22
|
+
const insertOptions = collectInsertOptions(page, selectedPlaceholderKeys);
|
|
23
|
+
// function directInsert() {
|
|
24
|
+
// if (editContext!.selectedForInsertion.indexOf("_") > 0) {
|
|
25
|
+
// var lastUnderscoreIndex =
|
|
26
|
+
// editContext!.selectedForInsertion.lastIndexOf("_");
|
|
27
|
+
// const index = editContext!.selectedForInsertion.substring(
|
|
28
|
+
// lastUnderscoreIndex + 1
|
|
29
|
+
// );
|
|
30
|
+
// const key = editContext!.selectedForInsertion.substring(
|
|
31
|
+
// 0,
|
|
32
|
+
// lastUnderscoreIndex
|
|
33
|
+
// );
|
|
34
|
+
// editContext!.droppedInPlaceholder(key, parseInt(index));
|
|
35
|
+
// }
|
|
36
|
+
// }
|
|
37
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-xl font-bold mb-8", children: "New" }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-4 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: "p-3 shadow-md flex items-center flex-col gap-1 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: "text-xl font-bold 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 })] }));
|
|
56
|
+
}
|
|
57
|
+
exports.ComponentPalette = ComponentPalette;
|
|
58
|
+
function collectInsertOptions(page, placeholderKeys) {
|
|
59
|
+
const insertOptionsMap = new Map();
|
|
60
|
+
function traverse(placeholders) {
|
|
61
|
+
for (const placeholder of placeholders) {
|
|
62
|
+
if (placeholder.insertOptions &&
|
|
63
|
+
(placeholderKeys.length === 0 ||
|
|
64
|
+
placeholderKeys.includes(placeholder.key))) {
|
|
65
|
+
for (const option of placeholder.insertOptions) {
|
|
66
|
+
insertOptionsMap.set(option.id, option);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const component of placeholder.components) {
|
|
70
|
+
traverse(component.placeholders);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
traverse(page.placeholders);
|
|
75
|
+
// Convert the map back into an array of objects
|
|
76
|
+
const insertOptionsArray = Array.from(insertOptionsMap.values());
|
|
77
|
+
return insertOptionsArray;
|
|
78
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ComponentTree = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const __1 = require("..");
|
|
7
|
+
const tree_1 = require("primereact/tree");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const tag_1 = require("primereact/tag");
|
|
10
|
+
const contextmenu_1 = require("primereact/contextmenu");
|
|
11
|
+
const confirmdialog_1 = require("primereact/confirmdialog");
|
|
12
|
+
function mapPlaceholderNode(p, parent) {
|
|
13
|
+
const node = {
|
|
14
|
+
key: p.key,
|
|
15
|
+
componentId: p.key,
|
|
16
|
+
label: p.name,
|
|
17
|
+
data: p,
|
|
18
|
+
icon: "pi pi-folder",
|
|
19
|
+
parent: parent,
|
|
20
|
+
droppable: true,
|
|
21
|
+
};
|
|
22
|
+
node.children = p.components.map((c) => mapComponentNode(c, node));
|
|
23
|
+
return node;
|
|
24
|
+
}
|
|
25
|
+
function mapPlaceholders(c, parent) {
|
|
26
|
+
if (c.placeholders.length > 1)
|
|
27
|
+
return c.placeholders.map((x) => mapPlaceholderNode(x, parent));
|
|
28
|
+
else if (c.placeholders.length > 0)
|
|
29
|
+
return c.placeholders[0].components.map((c) => mapComponentNode(c, parent));
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
function mapComponentNode(c, parent) {
|
|
33
|
+
const node = {
|
|
34
|
+
key: c.linkItemId + "_" + c.id || c.id,
|
|
35
|
+
componentId: c.id,
|
|
36
|
+
label: c.name,
|
|
37
|
+
icon: "pi pi-stop",
|
|
38
|
+
data: c,
|
|
39
|
+
parent: parent,
|
|
40
|
+
tags: [],
|
|
41
|
+
droppable: true,
|
|
42
|
+
};
|
|
43
|
+
if (c.translations && c.translations.length > 1)
|
|
44
|
+
node.tags.push({
|
|
45
|
+
severity: "info",
|
|
46
|
+
value: c.translations.length + " Languages",
|
|
47
|
+
icon: "pi pi-flag",
|
|
48
|
+
});
|
|
49
|
+
if (c.hostingPageItem) {
|
|
50
|
+
node.tags.push({
|
|
51
|
+
severity: "warning",
|
|
52
|
+
value: "Layout",
|
|
53
|
+
icon: "",
|
|
54
|
+
color: "rgb(192 132 252)",
|
|
55
|
+
onClick: () => {
|
|
56
|
+
var _a;
|
|
57
|
+
(0, confirmdialog_1.confirmDialog)({
|
|
58
|
+
header: "Edit layout",
|
|
59
|
+
message: "Edit layout " + ((_a = c.hostingPageItem) === null || _a === void 0 ? void 0 : _a.path) + "?",
|
|
60
|
+
accept: () => window.open(c.hostingPageItem.editUrl, "_blank"),
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
node.children = mapPlaceholders(c, node);
|
|
66
|
+
return node;
|
|
67
|
+
}
|
|
68
|
+
// function selectTreeNode(event: TreeSelectionEvent): void {
|
|
69
|
+
// editContext.setSelection(event.value.keys());
|
|
70
|
+
// }
|
|
71
|
+
function ComponentTree({ page, selection, }) {
|
|
72
|
+
const [expandedKeys, setExpandedKeys] = (0, react_1.useState)({
|
|
73
|
+
"0": true,
|
|
74
|
+
});
|
|
75
|
+
const [selectedKeys, setSelectedKeys] = (0, react_1.useState)();
|
|
76
|
+
const cm = (0, react_1.useRef)(null);
|
|
77
|
+
let editContext = (0, __1.useEditContext)();
|
|
78
|
+
(0, react_1.useEffect)(() => {
|
|
79
|
+
const newSelectedKeys = {};
|
|
80
|
+
selection.forEach((id) => {
|
|
81
|
+
const nodes = findNodesByComponentId(id, nodeDictionary);
|
|
82
|
+
nodes.forEach((nodeId) => {
|
|
83
|
+
newSelectedKeys[nodeId] = true;
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
const newExpandedKeys = Object.assign({}, expandedKeys);
|
|
87
|
+
Object.keys(newSelectedKeys).forEach((id) => {
|
|
88
|
+
const node = nodeDictionary[id];
|
|
89
|
+
if (node)
|
|
90
|
+
expandParents(node.parent, newExpandedKeys);
|
|
91
|
+
});
|
|
92
|
+
if (!hasSameProps(newExpandedKeys, expandedKeys))
|
|
93
|
+
setExpandedKeys(newExpandedKeys);
|
|
94
|
+
setSelectedKeys(newSelectedKeys);
|
|
95
|
+
}, [selection]);
|
|
96
|
+
if (!page)
|
|
97
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
98
|
+
const componentsNode = {
|
|
99
|
+
key: "0",
|
|
100
|
+
componentId: "0",
|
|
101
|
+
label: "Components",
|
|
102
|
+
data: "Components Folder",
|
|
103
|
+
icon: "pi pi-fw pi-list",
|
|
104
|
+
};
|
|
105
|
+
componentsNode.children = mapPlaceholders(page, componentsNode);
|
|
106
|
+
const treeNodes = [componentsNode];
|
|
107
|
+
const nodeDictionary = {};
|
|
108
|
+
createMap(treeNodes, nodeDictionary);
|
|
109
|
+
const nodeTemplate = (node, options) => {
|
|
110
|
+
var _a;
|
|
111
|
+
let label = ((0, jsx_runtime_1.jsxs)("span", { "data-key": node.key, className: "flex", children: [node.label, (_a = node.tags) === null || _a === void 0 ? void 0 : _a.map((x) => ((0, jsx_runtime_1.jsx)(tag_1.Tag, { icon: x.icon, value: x.value, severity: x.severity, onClick: x.onClick, style: { backgroundColor: x.color, marginLeft: "8px" } }, x.value)))] }));
|
|
112
|
+
return (0, jsx_runtime_1.jsx)("span", { className: options.className, children: label });
|
|
113
|
+
};
|
|
114
|
+
const menu = [
|
|
115
|
+
{
|
|
116
|
+
label: "View Key",
|
|
117
|
+
icon: "pi pi-search",
|
|
118
|
+
command: () => {
|
|
119
|
+
// toast.current.show({ severity: 'success', summary: 'Node Key', detail: selectedNodeKey });
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
label: "Toggle",
|
|
124
|
+
icon: "pi pi-sort",
|
|
125
|
+
command: () => {
|
|
126
|
+
// let _expandedKeys = { ...expandedKeys };
|
|
127
|
+
// if (_expandedKeys[selectedNodeKey]) delete _expandedKeys[selectedNodeKey];
|
|
128
|
+
// else _expandedKeys[selectedNodeKey] = true;
|
|
129
|
+
// setExpandedKeys(_expandedKeys);
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
];
|
|
133
|
+
function findNode(ev) {
|
|
134
|
+
const treeNodeParent = ev.target.closest(".p-treenode");
|
|
135
|
+
if (treeNodeParent) {
|
|
136
|
+
const childWithDataKey = treeNodeParent.querySelector("[data-key]");
|
|
137
|
+
if (childWithDataKey) {
|
|
138
|
+
return childWithDataKey;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
return ((0, jsx_runtime_1.jsxs)("div", { onDragOverCapture: (ev) => {
|
|
144
|
+
var _a;
|
|
145
|
+
if (!findNode(ev))
|
|
146
|
+
ev.dataTransfer.dropEffect = "none";
|
|
147
|
+
ev.dataTransfer.dropEffect =
|
|
148
|
+
((_a = editContext === null || editContext === void 0 ? void 0 : editContext.dragObject) === null || _a === void 0 ? void 0 : _a.type) == "template" ? "copy" : "move";
|
|
149
|
+
ev.preventDefault();
|
|
150
|
+
ev.stopPropagation();
|
|
151
|
+
}, onDropCapture: (ev) => {
|
|
152
|
+
var node = findNode(ev);
|
|
153
|
+
if (node)
|
|
154
|
+
alert(node.getAttribute("data-key"));
|
|
155
|
+
ev.stopPropagation();
|
|
156
|
+
}, children: [(0, jsx_runtime_1.jsx)(contextmenu_1.ContextMenu, { model: menu, ref: cm }), (0, jsx_runtime_1.jsx)(tree_1.Tree, { value: treeNodes, selectionMode: "multiple", selectionKeys: selectedKeys, className: "w-full alpaca-no-border", onToggle: (e) => setExpandedKeys(e.value), expandedKeys: expandedKeys, nodeTemplate: nodeTemplate, dragdropScope: "ignore", onSelectionChange: (ev) => {
|
|
157
|
+
if (ev.value) {
|
|
158
|
+
const selectedKeys = Object.keys(ev.value);
|
|
159
|
+
const selectedComponentIds = selectedKeys
|
|
160
|
+
.filter((key) => nodeDictionary[key])
|
|
161
|
+
.map((key) => nodeDictionary[key].componentId);
|
|
162
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.setSelection(selectedComponentIds);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
editContext === null || editContext === void 0 ? void 0 : editContext.setSelection([]);
|
|
166
|
+
}
|
|
167
|
+
}, onContextMenu: (e) => { var _a; return (_a = cm.current) === null || _a === void 0 ? void 0 : _a.show(e.originalEvent); } })] }));
|
|
168
|
+
}
|
|
169
|
+
exports.ComponentTree = ComponentTree;
|
|
170
|
+
function createMap(treeNodes, nodeDictionary) {
|
|
171
|
+
treeNodes.forEach((n) => {
|
|
172
|
+
if (n.key)
|
|
173
|
+
nodeDictionary[n.key] = n;
|
|
174
|
+
if (n.children)
|
|
175
|
+
createMap(n.children, nodeDictionary);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function findNodesByComponentId(id, nodesDictionary) {
|
|
179
|
+
const allNodes = Object.values(nodesDictionary);
|
|
180
|
+
return allNodes
|
|
181
|
+
.filter((x) => x.componentId === id)
|
|
182
|
+
.map((x) => { var _a; return ((_a = x.key) === null || _a === void 0 ? void 0 : _a.toString()) || ""; });
|
|
183
|
+
}
|
|
184
|
+
function expandParents(node, newExpandedKeys) {
|
|
185
|
+
if (!node)
|
|
186
|
+
return;
|
|
187
|
+
if (node.key)
|
|
188
|
+
newExpandedKeys[node.key] = true;
|
|
189
|
+
if (node.parent)
|
|
190
|
+
expandParents(node.parent, newExpandedKeys);
|
|
191
|
+
}
|
|
192
|
+
function hasSameProps(obj1, obj2) {
|
|
193
|
+
var obj1Props = Object.keys(obj1), obj2Props = Object.keys(obj2);
|
|
194
|
+
if (obj1Props.length == obj2Props.length) {
|
|
195
|
+
return obj1Props.every(function (prop) {
|
|
196
|
+
return obj2Props.indexOf(prop) >= 0;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
14
|
+
const progressspinner_1 = require("primereact/progressspinner");
|
|
15
|
+
const __1 = require("..");
|
|
16
|
+
const tree_1 = require("primereact/tree");
|
|
17
|
+
const react_1 = require("react");
|
|
18
|
+
const contentService_1 = require("./contentService");
|
|
19
|
+
function ContentTree({ isDraggable, dragStart, dragEnd, expandIdPath, selectionMode, selectedItemIds, rootItemId, onSelectionChange, filter, templateIds, }) {
|
|
20
|
+
const [treeNodes, setTreeNodes] = (0, react_1.useState)([]);
|
|
21
|
+
const [expandedKeys, setExpandedKeys] = (0, react_1.useState)();
|
|
22
|
+
const editContext = (0, __1.useEditContext)();
|
|
23
|
+
const loadOnExpand = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
const node = event.node;
|
|
25
|
+
node.loading = true;
|
|
26
|
+
yield loadNodeChildren(node);
|
|
27
|
+
let value = [...treeNodes];
|
|
28
|
+
setTreeNodes(value);
|
|
29
|
+
node.loading = false;
|
|
30
|
+
});
|
|
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;
|
|
48
|
+
});
|
|
49
|
+
(0, react_1.useEffect)(() => {
|
|
50
|
+
const treeNodes = [
|
|
51
|
+
{
|
|
52
|
+
key: rootItemId.toLowerCase(),
|
|
53
|
+
label: "content",
|
|
54
|
+
leaf: false,
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
const newExpandedKeys = getExpandedKeys();
|
|
58
|
+
setExpandedKeys(newExpandedKeys);
|
|
59
|
+
preLoadNodes(newExpandedKeys, treeNodes);
|
|
60
|
+
setTreeNodes(treeNodes);
|
|
61
|
+
}, []);
|
|
62
|
+
function getExpandedKeys() {
|
|
63
|
+
const newExpandedKeys = {};
|
|
64
|
+
newExpandedKeys[rootItemId.toLocaleLowerCase()] = true;
|
|
65
|
+
const idPathArray = expandIdPath.split("/");
|
|
66
|
+
idPathArray.forEach((x) => {
|
|
67
|
+
if (x !== "")
|
|
68
|
+
newExpandedKeys[x.substring(1, x.length - 1).toLowerCase()] = true;
|
|
69
|
+
});
|
|
70
|
+
return newExpandedKeys;
|
|
71
|
+
}
|
|
72
|
+
function preLoadNodes(expandedKeys, treeNodes) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
yield doPreloadNodes(expandedKeys, treeNodes);
|
|
75
|
+
setExpandedKeys(Object.assign({}, expandedKeys));
|
|
76
|
+
setTreeNodes([...treeNodes]);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function doPreloadNodes(expandedKeys, treeNodes) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
for (let i = 0; i < treeNodes.length; i++) {
|
|
82
|
+
if (expandedKeys[treeNodes[i].key]) {
|
|
83
|
+
const children = yield loadNodeChildren(treeNodes[i]);
|
|
84
|
+
yield doPreloadNodes(expandedKeys, children);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const nodeTemplate = (node, options) => {
|
|
90
|
+
let label = (0, jsx_runtime_1.jsx)("b", { children: node.label });
|
|
91
|
+
if (node.url) {
|
|
92
|
+
label = ((0, jsx_runtime_1.jsx)("a", { onDragStart: (e) => e.preventDefault(), href: node.url, className: "text-primary hover:underline font-semibold", children: node.label }));
|
|
93
|
+
}
|
|
94
|
+
return ((0, jsx_runtime_1.jsxs)("span", { onDragStart: (event) => {
|
|
95
|
+
handleDragStart(event, node.data);
|
|
96
|
+
}, onDragEnd: handleDragEnd, draggable: node.isDraggable, className: `flex gap-2 ${node.isDraggable ? "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" } }))] }));
|
|
97
|
+
};
|
|
98
|
+
function handleDragStart(event, item) {
|
|
99
|
+
if (dragStart)
|
|
100
|
+
dragStart(item);
|
|
101
|
+
event.stopPropagation();
|
|
102
|
+
}
|
|
103
|
+
function handleDragEnd() {
|
|
104
|
+
if (dragEnd)
|
|
105
|
+
dragEnd();
|
|
106
|
+
}
|
|
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: "w-full alpaca-no-border 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 }) }));
|
|
119
|
+
}
|
|
120
|
+
exports.default = ContentTree;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Debug = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_json_pretty_1 = __importDefault(require("react-json-pretty"));
|
|
9
|
+
require("react-json-pretty/themes/monikai.css");
|
|
10
|
+
const tabview_1 = require("primereact/tabview");
|
|
11
|
+
function Debug({ component, page }) {
|
|
12
|
+
if (!component && !page)
|
|
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 }) })] }));
|
|
15
|
+
}
|
|
16
|
+
exports.Debug = Debug;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DictionaryEditor = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const datatable_1 = require("primereact/datatable");
|
|
7
|
+
const column_1 = require("primereact/column");
|
|
8
|
+
const inputtext_1 = require("primereact/inputtext");
|
|
9
|
+
const __1 = require("..");
|
|
10
|
+
function DictionaryEditor({ dictionary }) {
|
|
11
|
+
if (!dictionary)
|
|
12
|
+
return;
|
|
13
|
+
const context = (0, __1.useEditContext)();
|
|
14
|
+
if (!context) {
|
|
15
|
+
console.log("Context is undefined!");
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let entries = Object.keys(dictionary).map((k) => ({
|
|
19
|
+
key: k,
|
|
20
|
+
translation: dictionary[k],
|
|
21
|
+
}));
|
|
22
|
+
entries = [...entries, ...context === null || context === void 0 ? void 0 : context.unresolvedDictionaryKeys.map(x => ({
|
|
23
|
+
key: x,
|
|
24
|
+
translation: "[undefined]"
|
|
25
|
+
}))];
|
|
26
|
+
entries.sort((a, b) => (a.key > b.key ? -1 : 1));
|
|
27
|
+
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) });
|
|
30
|
+
else
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)(datatable_1.DataTable, { value: entries, children: [(0, jsx_runtime_1.jsx)(column_1.Column, { field: "key", header: "Key" }), (0, jsx_runtime_1.jsx)(column_1.Column, { field: "translation", header: "Translation", editor: (options) => textEditor(options) })] }) }));
|
|
34
|
+
}
|
|
35
|
+
exports.DictionaryEditor = DictionaryEditor;
|