@alpaca-editor/core 1.0.4057 → 1.0.4059

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 (96) hide show
  1. package/dist/components/ui/badge.js.map +1 -1
  2. package/dist/components/ui/button.js.map +1 -1
  3. package/dist/config/config.js +7 -3
  4. package/dist/config/config.js.map +1 -1
  5. package/dist/config/types.d.ts +1 -0
  6. package/dist/editor/FieldListField.js +2 -2
  7. package/dist/editor/FieldListField.js.map +1 -1
  8. package/dist/editor/ai/AgentTerminal.js +0 -3
  9. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  10. package/dist/editor/client/EditorClient.js +20 -6
  11. package/dist/editor/client/EditorClient.js.map +1 -1
  12. package/dist/editor/client/fieldModificationStore.d.ts +1 -0
  13. package/dist/editor/client/fieldModificationStore.js +19 -18
  14. package/dist/editor/client/fieldModificationStore.js.map +1 -1
  15. package/dist/editor/client/operations.js +1 -2
  16. package/dist/editor/client/operations.js.map +1 -1
  17. package/dist/editor/control-center/IndexOverview.js +235 -19
  18. package/dist/editor/control-center/IndexOverview.js.map +1 -1
  19. package/dist/editor/control-center/Status.js +1 -1
  20. package/dist/editor/control-center/Status.js.map +1 -1
  21. package/dist/editor/media-selector/AiImageSearch.js +2 -1
  22. package/dist/editor/media-selector/AiImageSearch.js.map +1 -1
  23. package/dist/editor/media-selector/TreeSelector.js +1 -1
  24. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  25. package/dist/editor/menubar/PageSelector.js +1 -1
  26. package/dist/editor/menubar/PageSelector.js.map +1 -1
  27. package/dist/editor/reviews/Comment.d.ts +5 -1
  28. package/dist/editor/reviews/Comment.js +19 -2
  29. package/dist/editor/reviews/Comment.js.map +1 -1
  30. package/dist/editor/reviews/CommentDisplayPopover.js +1 -1
  31. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  32. package/dist/editor/reviews/CommentPopover.js +40 -2
  33. package/dist/editor/reviews/CommentPopover.js.map +1 -1
  34. package/dist/editor/reviews/Comments.js +28 -1
  35. package/dist/editor/reviews/Comments.js.map +1 -1
  36. package/dist/editor/reviews/SuggestionDisplayPopover.js +1 -1
  37. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  38. package/dist/editor/services/aiService.d.ts +0 -8
  39. package/dist/editor/services/aiService.js +1 -24
  40. package/dist/editor/services/aiService.js.map +1 -1
  41. package/dist/editor/services/indexService.d.ts +10 -6
  42. package/dist/editor/services/indexService.js +26 -11
  43. package/dist/editor/services/indexService.js.map +1 -1
  44. package/dist/editor/services/reviewsService.d.ts +5 -1
  45. package/dist/editor/services/reviewsService.js +15 -0
  46. package/dist/editor/services/reviewsService.js.map +1 -1
  47. package/dist/editor/services/searchService.d.ts +17 -0
  48. package/dist/editor/services/searchService.js +25 -0
  49. package/dist/editor/services/searchService.js.map +1 -0
  50. package/dist/editor/ui/ItemSearch.js +1 -1
  51. package/dist/editor/ui/ItemSearch.js.map +1 -1
  52. package/dist/editor/ui/Spinner.d.ts +2 -1
  53. package/dist/editor/ui/Spinner.js +3 -2
  54. package/dist/editor/ui/Spinner.js.map +1 -1
  55. package/dist/editor/utils/keyboardNavigation.js +3 -1
  56. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  57. package/dist/page-wizard/steps/ImagesStep.js +2 -1
  58. package/dist/page-wizard/steps/ImagesStep.js.map +1 -1
  59. package/dist/revision.d.ts +2 -2
  60. package/dist/revision.js +2 -2
  61. package/dist/styles.css +57 -7
  62. package/dist/types.d.ts +54 -19
  63. package/package.json +1 -1
  64. package/src/components/ui/badge.tsx +1 -1
  65. package/src/components/ui/button.tsx +1 -1
  66. package/src/config/config.tsx +9 -3
  67. package/src/config/types.ts +1 -0
  68. package/src/editor/FieldListField.tsx +12 -10
  69. package/src/editor/ai/AgentTerminal.tsx +0 -6
  70. package/src/editor/client/EditorClient.tsx +47 -15
  71. package/src/editor/client/fieldModificationStore.ts +19 -19
  72. package/src/editor/client/operations.ts +1 -3
  73. package/src/editor/control-center/IndexOverview.tsx +501 -36
  74. package/src/editor/control-center/Status.tsx +1 -1
  75. package/src/editor/media-selector/AiImageSearch.tsx +2 -1
  76. package/src/editor/media-selector/TreeSelector.tsx +1 -1
  77. package/src/editor/menubar/PageSelector.tsx +1 -1
  78. package/src/editor/reviews/Comment.tsx +40 -1
  79. package/src/editor/reviews/CommentDisplayPopover.tsx +1 -1
  80. package/src/editor/reviews/CommentPopover.tsx +64 -1
  81. package/src/editor/reviews/Comments.tsx +33 -1
  82. package/src/editor/reviews/SuggestionDisplayPopover.tsx +1 -1
  83. package/src/editor/services/aiService.ts +1 -39
  84. package/src/editor/services/indexService.ts +46 -12
  85. package/src/editor/services/reviewsService.ts +34 -1
  86. package/src/editor/services/searchService.ts +45 -0
  87. package/src/editor/ui/ItemSearch.tsx +1 -1
  88. package/src/editor/ui/Spinner.tsx +8 -1
  89. package/src/editor/utils/keyboardNavigation.ts +3 -1
  90. package/src/page-wizard/steps/ImagesStep.tsx +2 -1
  91. package/src/revision.ts +2 -2
  92. package/src/types.ts +66 -20
  93. package/dist/editor/control-center/IndexSettings.d.ts +0 -5
  94. package/dist/editor/control-center/IndexSettings.js +0 -104
  95. package/dist/editor/control-center/IndexSettings.js.map +0 -1
  96. package/src/editor/control-center/IndexSettings.tsx +0 -266
@@ -1,104 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState, useCallback } from "react";
3
- import { getIndexStatus, rebuildIndex, setupIndex, setupRebuildJob, } from "../services/indexService";
4
- import { Button } from "primereact/button";
5
- import { Spinner } from "../ui/Spinner";
6
- import { useEditContext } from "../client/editContext";
7
- import { ProgressSpinner } from "primereact/progressspinner";
8
- export function IndexSettings({ index }) {
9
- const editContext = useEditContext();
10
- const [indexStatus, setIndexStatus] = useState(undefined);
11
- const [settingsItem, setSettingsItem] = useState(undefined);
12
- const [rebuildJobItem, setRebuildJobItem] = useState(undefined);
13
- const fetchStatus = useCallback(() => {
14
- getIndexStatus(index.name).then(async (result) => {
15
- setIndexStatus(result);
16
- if (result?.settingsItemId) {
17
- const settingsItem = await editContext?.itemsRepository.getItem({
18
- id: result.settingsItemId,
19
- language: "en",
20
- version: 0,
21
- });
22
- setSettingsItem(settingsItem);
23
- if (result.rebuildJobItemId) {
24
- const rebuildJobItem = await editContext?.itemsRepository.getItem({
25
- id: result.rebuildJobItemId,
26
- language: "en",
27
- version: 0,
28
- });
29
- setRebuildJobItem(rebuildJobItem);
30
- }
31
- else {
32
- setRebuildJobItem(undefined);
33
- }
34
- }
35
- else {
36
- setSettingsItem(undefined);
37
- setRebuildJobItem(undefined);
38
- }
39
- });
40
- }, [index]);
41
- useEffect(() => {
42
- let interval;
43
- if (indexStatus?.isRunning) {
44
- interval = setInterval(() => {
45
- fetchStatus();
46
- }, 1000);
47
- }
48
- return () => {
49
- if (interval) {
50
- clearInterval(interval);
51
- }
52
- };
53
- }, [indexStatus?.isRunning, fetchStatus]);
54
- useEffect(() => {
55
- fetchStatus();
56
- }, [fetchStatus]);
57
- useEffect(() => {
58
- setIndexStatus(undefined);
59
- }, [index]);
60
- if (!indexStatus) {
61
- return (_jsxs("div", { className: "flex flex-col h-full justify-center items-center gap-2 text-gray-500", children: [_jsx(Spinner, {}), "Loading..."] }));
62
- }
63
- async function setupIndexAndRefresh(index) {
64
- await setupIndex(index);
65
- setIndexStatus(undefined);
66
- fetchStatus();
67
- }
68
- async function setupRebuildJobAndRefresh(index) {
69
- await setupRebuildJob(index);
70
- setIndexStatus(undefined);
71
- fetchStatus();
72
- }
73
- async function rebuildIndexAndRefresh(index) {
74
- await rebuildIndex(index);
75
- setTimeout(() => {
76
- fetchStatus();
77
- }, 1000);
78
- }
79
- return (_jsxs("div", { className: "flex flex-col px-2 py-1 h-full", children: [_jsx("div", { className: "flex flex-row items-center border-b p-1 mb-3", children: _jsx("div", { className: "", children: index.name }) }), _jsxs("div", { className: "ml-2", children: [settingsItem && (_jsxs(_Fragment, { children: [_jsx(IndexProp, { headline: "Settings", children: _jsx("a", { className: "cursor-pointer underline", onClick: () => {
80
- if (indexStatus.settingsItemId) {
81
- editContext?.loadItem(indexStatus.settingsItemId);
82
- editContext?.switchView("content-editor");
83
- }
84
- }, children: settingsItem.path }) }), _jsx(IndexProp, { headline: "Service", children: indexStatus.serviceUrl }), _jsx(IndexProp, { headline: "Name", children: indexStatus.name }), _jsxs(IndexProp, { headline: "Rebuild Job", children: [rebuildJobItem && (_jsxs(_Fragment, { children: [_jsx("a", { className: "cursor-pointer underline", onClick: () => {
85
- if (indexStatus.rebuildJobItemId) {
86
- editContext?.loadItem(indexStatus.rebuildJobItemId);
87
- editContext?.switchView("content-editor");
88
- }
89
- }, children: rebuildJobItem.path }), indexStatus.canRebuild && !indexStatus.isRunning && (_jsx("div", { className: "my-2", children: _jsx(Button, { label: "Rebuild Index", onClick: () => {
90
- rebuildIndexAndRefresh(index.name);
91
- } }) })), indexStatus.isRunning && (_jsxs("div", { className: "my-2 flex flex-row items-center justify-start", children: [_jsxs("div", { className: "mr-2", style: { width: "20px" }, children: [_jsx(ProgressSpinner, { style: { width: "20px", height: "20px" } }), " "] }), "Rebuilding... ", indexStatus.rebuildCount.toLocaleString(), " ", "items, ", indexStatus.rebuildTokensCount.toLocaleString(), " ", "tokens"] }))] })), !rebuildJobItem && (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-sm text-gray-500 mb-2", children: "No rebuild job found for this index" }), _jsx(Button, { label: "Setup Rebuild Job", onClick: () => {
92
- setupRebuildJobAndRefresh(index.name);
93
- } })] }))] }), _jsx(IndexProp, { headline: "Last Rebuild", children: indexStatus.lastRebuildStartDateTime
94
- ? new Date(indexStatus.lastRebuildStartDateTime).toLocaleString()
95
- : "Never" }), indexStatus.exists && (_jsx(_Fragment, { children: _jsx(IndexProp, { headline: "Index Status", children: Object.entries(indexStatus.languages).map(([language, { numberOfItems, lastUpdated, status }]) => (_jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsxs("div", { className: "font-bold", children: [language, ":"] }), _jsx("span", { className: `text-gray-500 ml-2 ${status === "Available"
96
- ? "text-green-500"
97
- : "text-yellow-500"}`, children: status }), _jsxs("span", { className: "text-gray-500", children: ["Items: ", numberOfItems.toLocaleString(), " "] }), _jsxs("span", { className: "text-gray-500", children: ["Last updated: ", new Date(lastUpdated).toLocaleString()] })] }, language))) }) })), indexStatus.errors?.length > 0 && (_jsxs("div", { children: [_jsx("div", { children: "Errors:" }), indexStatus.errors.map((error, index) => (_jsxs("div", { className: "mt-2 p-2 bg-red-100 rounded-md text-red-800 border border-red-300 ", children: [_jsx("div", { className: "font-bold", children: error.message }), _jsx("div", { className: "text-sm", children: error.details })] }, index)))] }))] })), !indexStatus?.exists && (_jsxs("div", { children: [_jsx("div", { className: "text-sm text-gray-500 mb-2", children: "Index does not exist" }), _jsx(Button, { label: "Setup index", onClick: () => {
98
- setupIndexAndRefresh(index.name);
99
- } })] })), " "] })] }));
100
- }
101
- function IndexProp({ headline, children, }) {
102
- return (_jsxs("div", { className: "mb-2", children: [_jsx("div", { className: "font-bold text-sm", children: headline }), _jsx("div", { className: "text-sm", children: children })] }));
103
- }
104
- //# sourceMappingURL=IndexSettings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IndexSettings.js","sourceRoot":"","sources":["../../../src/editor/control-center/IndexSettings.tsx"],"names":[],"mappings":"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"}
@@ -1,266 +0,0 @@
1
- import { useEffect, useState, useCallback, ReactNode } from "react";
2
- import {
3
- getIndexStatus,
4
- rebuildIndex,
5
- setupIndex,
6
- setupRebuildJob,
7
- } from "../services/indexService";
8
- import { IndexStatus } from "../../types";
9
- import { Button } from "primereact/button";
10
- import { Spinner } from "../ui/Spinner";
11
- import { useEditContext } from "../client/editContext";
12
- import { FullItem } from "../pageModel";
13
- import { ProgressSpinner } from "primereact/progressspinner";
14
-
15
- export function IndexSettings({ index }: { index: { name: string } }) {
16
- const editContext = useEditContext();
17
- const [indexStatus, setIndexStatus] = useState<IndexStatus | undefined>(
18
- undefined
19
- );
20
- const [settingsItem, setSettingsItem] = useState<FullItem | undefined>(
21
- undefined
22
- );
23
- const [rebuildJobItem, setRebuildJobItem] = useState<FullItem | undefined>(
24
- undefined
25
- );
26
-
27
- const fetchStatus = useCallback(() => {
28
- getIndexStatus(index.name).then(async (result) => {
29
- setIndexStatus(result);
30
-
31
- if (result?.settingsItemId) {
32
- const settingsItem = await editContext?.itemsRepository.getItem({
33
- id: result.settingsItemId,
34
- language: "en",
35
- version: 0,
36
- });
37
- setSettingsItem(settingsItem);
38
-
39
- if (result.rebuildJobItemId) {
40
- const rebuildJobItem = await editContext?.itemsRepository.getItem({
41
- id: result.rebuildJobItemId,
42
- language: "en",
43
- version: 0,
44
- });
45
- setRebuildJobItem(rebuildJobItem);
46
- } else {
47
- setRebuildJobItem(undefined);
48
- }
49
- } else {
50
- setSettingsItem(undefined);
51
- setRebuildJobItem(undefined);
52
- }
53
- });
54
- }, [index]);
55
-
56
- useEffect(() => {
57
- let interval: NodeJS.Timeout;
58
- if (indexStatus?.isRunning) {
59
- interval = setInterval(() => {
60
- fetchStatus();
61
- }, 1000);
62
- }
63
- return () => {
64
- if (interval) {
65
- clearInterval(interval);
66
- }
67
- };
68
- }, [indexStatus?.isRunning, fetchStatus]);
69
-
70
- useEffect(() => {
71
- fetchStatus();
72
- }, [fetchStatus]);
73
-
74
- useEffect(() => {
75
- setIndexStatus(undefined);
76
- }, [index]);
77
-
78
- if (!indexStatus) {
79
- return (
80
- <div className="flex flex-col h-full justify-center items-center gap-2 text-gray-500">
81
- <Spinner />
82
- Loading...
83
- </div>
84
- );
85
- }
86
-
87
- async function setupIndexAndRefresh(index: string) {
88
- await setupIndex(index);
89
- setIndexStatus(undefined);
90
- fetchStatus();
91
- }
92
-
93
- async function setupRebuildJobAndRefresh(index: string) {
94
- await setupRebuildJob(index);
95
- setIndexStatus(undefined);
96
- fetchStatus();
97
- }
98
-
99
- async function rebuildIndexAndRefresh(index: string) {
100
- await rebuildIndex(index);
101
- setTimeout(() => {
102
- fetchStatus();
103
- }, 1000);
104
- }
105
-
106
- return (
107
- <div className="flex flex-col px-2 py-1 h-full">
108
- <div className="flex flex-row items-center border-b p-1 mb-3">
109
- <div className="">{index.name}</div>
110
- </div>
111
- <div className="ml-2">
112
- {settingsItem && (
113
- <>
114
- <IndexProp headline="Settings">
115
- <a
116
- className="cursor-pointer underline"
117
- onClick={() => {
118
- if (indexStatus.settingsItemId) {
119
- editContext?.loadItem(indexStatus.settingsItemId);
120
- editContext?.switchView("content-editor");
121
- }
122
- }}
123
- >
124
- {settingsItem.path}
125
- </a>
126
- </IndexProp>
127
- <IndexProp headline="Service">{indexStatus.serviceUrl}</IndexProp>
128
- <IndexProp headline="Name">{indexStatus.name}</IndexProp>
129
- <IndexProp headline="Rebuild Job">
130
- {rebuildJobItem && (
131
- <>
132
- <a
133
- className="cursor-pointer underline"
134
- onClick={() => {
135
- if (indexStatus.rebuildJobItemId) {
136
- editContext?.loadItem(indexStatus.rebuildJobItemId);
137
- editContext?.switchView("content-editor");
138
- }
139
- }}
140
- >
141
- {rebuildJobItem.path}
142
- </a>
143
- {indexStatus.canRebuild && !indexStatus.isRunning && (
144
- <div className="my-2">
145
- <Button
146
- label="Rebuild Index"
147
- onClick={() => {
148
- rebuildIndexAndRefresh(index.name);
149
- }}
150
- />
151
- </div>
152
- )}
153
- {indexStatus.isRunning && (
154
- <div className="my-2 flex flex-row items-center justify-start">
155
- <div className="mr-2" style={{ width: "20px" }}>
156
- <ProgressSpinner
157
- style={{ width: "20px", height: "20px" }}
158
- />{" "}
159
- </div>
160
- Rebuilding... {indexStatus.rebuildCount.toLocaleString()}{" "}
161
- items, {indexStatus.rebuildTokensCount.toLocaleString()}{" "}
162
- tokens
163
- </div>
164
- )}
165
- </>
166
- )}
167
- {!rebuildJobItem && (
168
- <>
169
- <div className="text-sm text-gray-500 mb-2">
170
- No rebuild job found for this index
171
- </div>
172
- <Button
173
- label="Setup Rebuild Job"
174
- onClick={() => {
175
- setupRebuildJobAndRefresh(index.name);
176
- }}
177
- />
178
- </>
179
- )}
180
- </IndexProp>
181
- <IndexProp headline="Last Rebuild">
182
- {indexStatus.lastRebuildStartDateTime
183
- ? new Date(
184
- indexStatus.lastRebuildStartDateTime
185
- ).toLocaleString()
186
- : "Never"}
187
- </IndexProp>
188
- {indexStatus.exists && (
189
- <>
190
- <IndexProp headline="Index Status">
191
- {Object.entries(indexStatus.languages).map(
192
- ([language, { numberOfItems, lastUpdated, status }]) => (
193
- <div
194
- key={language}
195
- className="flex items-center gap-2 text-xs"
196
- >
197
- <div className="font-bold">{language}:</div>
198
- <span
199
- className={`text-gray-500 ml-2 ${
200
- status === "Available"
201
- ? "text-green-500"
202
- : "text-yellow-500"
203
- }`}
204
- >
205
- {status}
206
- </span>
207
- <span className="text-gray-500">
208
- Items: {numberOfItems.toLocaleString()}{" "}
209
- </span>
210
- <span className="text-gray-500">
211
- Last updated: {new Date(lastUpdated).toLocaleString()}
212
- </span>
213
- </div>
214
- )
215
- )}
216
- </IndexProp>
217
- </>
218
- )}
219
- {indexStatus.errors?.length > 0 && (
220
- <div>
221
- <div>Errors:</div>
222
- {indexStatus.errors.map((error, index) => (
223
- <div
224
- key={index}
225
- className="mt-2 p-2 bg-red-100 rounded-md text-red-800 border border-red-300 "
226
- >
227
- <div className="font-bold">{error.message}</div>
228
- <div className="text-sm">{error.details}</div>
229
- </div>
230
- ))}
231
- </div>
232
- )}
233
- </>
234
- )}
235
- {!indexStatus?.exists && (
236
- <div>
237
- <div className="text-sm text-gray-500 mb-2">
238
- Index does not exist
239
- </div>
240
- <Button
241
- label="Setup index"
242
- onClick={() => {
243
- setupIndexAndRefresh(index.name);
244
- }}
245
- />
246
- </div>
247
- )}{" "}
248
- </div>
249
- </div>
250
- );
251
- }
252
-
253
- function IndexProp({
254
- headline,
255
- children,
256
- }: {
257
- headline: ReactNode;
258
- children: ReactNode;
259
- }) {
260
- return (
261
- <div className="mb-2">
262
- <div className="font-bold text-sm">{headline}</div>
263
- <div className="text-sm">{children}</div>
264
- </div>
265
- );
266
- }