@motiadev/plugin-states 0.17.6-beta.188-710084 → 0.17.6-beta.188-853774
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/index.js +546 -176
- package/dist/index.js.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { c } from "react/compiler-runtime";
|
|
1
2
|
import { Button, Checkbox, Input, Sidebar, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, cn, useThemeStore } from "@motiadev/ui";
|
|
2
3
|
import { AlertCircle, Check, Loader2, RefreshCw, Save, Search, Trash, X } from "lucide-react";
|
|
3
4
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -8,29 +9,70 @@ import Editor, { useMonaco } from "@monaco-editor/react";
|
|
|
8
9
|
|
|
9
10
|
//#region src/hooks/states-hooks.ts
|
|
10
11
|
const useGetStateItems = () => {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
12
|
+
const $ = c(8);
|
|
13
|
+
if ($[0] !== "c7199b15726ef92a8b1236966886099ddb103f2294b30414c1123a90f5c60f8c") {
|
|
14
|
+
for (let $i = 0; $i < 8; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
15
|
+
$[0] = "c7199b15726ef92a8b1236966886099ddb103f2294b30414c1123a90f5c60f8c";
|
|
16
|
+
}
|
|
17
|
+
let t0;
|
|
18
|
+
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
|
|
19
|
+
t0 = [];
|
|
20
|
+
$[1] = t0;
|
|
21
|
+
} else t0 = $[1];
|
|
22
|
+
const [items, setItems] = useState(t0);
|
|
23
|
+
let t1;
|
|
24
|
+
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
25
|
+
t1 = () => {
|
|
26
|
+
fetch("/__motia/state").then(_temp$2).then(setItems).catch(_temp2$1);
|
|
27
|
+
};
|
|
28
|
+
$[2] = t1;
|
|
29
|
+
} else t1 = $[2];
|
|
30
|
+
const refetch = t1;
|
|
31
|
+
let t2;
|
|
32
|
+
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
33
|
+
t2 = (ids) => {
|
|
34
|
+
fetch("/__motia/state/delete", {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: { "Content-Type": "application/json" },
|
|
37
|
+
body: JSON.stringify({ ids })
|
|
38
|
+
}).then(() => refetch());
|
|
39
|
+
};
|
|
40
|
+
$[3] = t2;
|
|
41
|
+
} else t2 = $[3];
|
|
42
|
+
const deleteItems = t2;
|
|
43
|
+
let t3;
|
|
44
|
+
let t4;
|
|
45
|
+
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
46
|
+
t3 = () => {
|
|
47
|
+
refetch();
|
|
48
|
+
};
|
|
49
|
+
t4 = [refetch];
|
|
50
|
+
$[4] = t3;
|
|
51
|
+
$[5] = t4;
|
|
52
|
+
} else {
|
|
53
|
+
t3 = $[4];
|
|
54
|
+
t4 = $[5];
|
|
55
|
+
}
|
|
56
|
+
useEffect(t3, t4);
|
|
57
|
+
let t5;
|
|
58
|
+
if ($[6] !== items) {
|
|
59
|
+
t5 = {
|
|
60
|
+
items,
|
|
61
|
+
deleteItems,
|
|
62
|
+
refetch
|
|
63
|
+
};
|
|
64
|
+
$[6] = items;
|
|
65
|
+
$[7] = t5;
|
|
66
|
+
} else t5 = $[7];
|
|
67
|
+
return t5;
|
|
33
68
|
};
|
|
69
|
+
async function _temp$2(res) {
|
|
70
|
+
if (res.ok) return res.json();
|
|
71
|
+
else throw await res.json();
|
|
72
|
+
}
|
|
73
|
+
function _temp2$1(err) {
|
|
74
|
+
return console.error(err);
|
|
75
|
+
}
|
|
34
76
|
|
|
35
77
|
//#endregion
|
|
36
78
|
//#region src/stores/use-states-store.ts
|
|
@@ -41,48 +83,124 @@ const useStatesStore = create()((set) => ({
|
|
|
41
83
|
|
|
42
84
|
//#endregion
|
|
43
85
|
//#region src/components/state-details.tsx
|
|
44
|
-
const StateDetails = (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
86
|
+
const StateDetails = (t0) => {
|
|
87
|
+
const $ = c(3);
|
|
88
|
+
if ($[0] !== "5995831aa1bc747830da5e0bb4a1d2bc36c1eaf62fb9c2f142532ffec8710bf4") {
|
|
89
|
+
for (let $i = 0; $i < 3; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
90
|
+
$[0] = "5995831aa1bc747830da5e0bb4a1d2bc36c1eaf62fb9c2f142532ffec8710bf4";
|
|
91
|
+
}
|
|
92
|
+
const { state } = t0;
|
|
93
|
+
let t1;
|
|
94
|
+
if ($[1] !== state.value) {
|
|
95
|
+
t1 = /* @__PURE__ */ jsx(JsonView, {
|
|
96
|
+
src: state.value,
|
|
97
|
+
theme: "default"
|
|
98
|
+
});
|
|
99
|
+
$[1] = state.value;
|
|
100
|
+
$[2] = t1;
|
|
101
|
+
} else t1 = $[2];
|
|
102
|
+
return t1;
|
|
103
|
+
};
|
|
48
104
|
|
|
49
105
|
//#endregion
|
|
50
106
|
//#region src/components/json-editor.tsx
|
|
51
|
-
const JsonEditor = (
|
|
107
|
+
const JsonEditor = (t0) => {
|
|
108
|
+
const $ = c(24);
|
|
109
|
+
if ($[0] !== "d1386dfeba00fe12241776daa47cf42300103748d5dcfe271adcb17c673326c6") {
|
|
110
|
+
for (let $i = 0; $i < 24; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
111
|
+
$[0] = "d1386dfeba00fe12241776daa47cf42300103748d5dcfe271adcb17c673326c6";
|
|
112
|
+
}
|
|
113
|
+
const { value, height: t1, schema, onChange, onValidate, language: t2, readOnly: t3 } = t0;
|
|
114
|
+
const height = t1 === void 0 ? 300 : t1;
|
|
115
|
+
const language = t2 === void 0 ? "json" : t2;
|
|
116
|
+
const readOnly = t3 === void 0 ? false : t3;
|
|
52
117
|
const monaco = useMonaco();
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
118
|
+
const editorTheme = useThemeStore(_temp$1) === "dark" ? "vs-dark" : "light";
|
|
119
|
+
let t4;
|
|
120
|
+
if ($[1] !== monaco || $[2] !== schema) {
|
|
121
|
+
t4 = () => {
|
|
122
|
+
if (!monaco) return;
|
|
123
|
+
monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true });
|
|
124
|
+
monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ schemas: schema ? [{
|
|
125
|
+
uri: window.location.href,
|
|
126
|
+
fileMatch: ["*"],
|
|
127
|
+
schema
|
|
128
|
+
}] : [] });
|
|
129
|
+
};
|
|
130
|
+
$[1] = monaco;
|
|
131
|
+
$[2] = schema;
|
|
132
|
+
$[3] = t4;
|
|
133
|
+
} else t4 = $[3];
|
|
134
|
+
let t5;
|
|
135
|
+
if ($[4] !== language || $[5] !== monaco || $[6] !== schema) {
|
|
136
|
+
t5 = [
|
|
137
|
+
monaco,
|
|
138
|
+
schema,
|
|
139
|
+
language
|
|
140
|
+
];
|
|
141
|
+
$[4] = language;
|
|
142
|
+
$[5] = monaco;
|
|
143
|
+
$[6] = schema;
|
|
144
|
+
$[7] = t5;
|
|
145
|
+
} else t5 = $[7];
|
|
146
|
+
useEffect(t4, t5);
|
|
147
|
+
let t6;
|
|
148
|
+
if ($[8] !== onChange || $[9] !== onValidate) {
|
|
149
|
+
t6 = (value_0) => {
|
|
150
|
+
if (!value_0) onValidate?.(false);
|
|
151
|
+
onChange?.(value_0 ?? "");
|
|
152
|
+
};
|
|
153
|
+
$[8] = onChange;
|
|
154
|
+
$[9] = onValidate;
|
|
155
|
+
$[10] = t6;
|
|
156
|
+
} else t6 = $[10];
|
|
157
|
+
let t7;
|
|
158
|
+
if ($[11] !== onValidate) {
|
|
159
|
+
t7 = (markers) => onValidate?.(markers.length === 0);
|
|
160
|
+
$[11] = onValidate;
|
|
161
|
+
$[12] = t7;
|
|
162
|
+
} else t7 = $[12];
|
|
163
|
+
let t8;
|
|
164
|
+
if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
|
|
165
|
+
t8 = { enabled: false };
|
|
166
|
+
$[13] = t8;
|
|
167
|
+
} else t8 = $[13];
|
|
168
|
+
let t9;
|
|
169
|
+
if ($[14] !== readOnly) {
|
|
170
|
+
t9 = {
|
|
80
171
|
readOnly,
|
|
81
172
|
scrollBeyondLastLine: false,
|
|
82
|
-
minimap:
|
|
83
|
-
}
|
|
84
|
-
|
|
173
|
+
minimap: t8
|
|
174
|
+
};
|
|
175
|
+
$[14] = readOnly;
|
|
176
|
+
$[15] = t9;
|
|
177
|
+
} else t9 = $[15];
|
|
178
|
+
let t10;
|
|
179
|
+
if ($[16] !== editorTheme || $[17] !== height || $[18] !== language || $[19] !== t6 || $[20] !== t7 || $[21] !== t9 || $[22] !== value) {
|
|
180
|
+
t10 = /* @__PURE__ */ jsx(Editor, {
|
|
181
|
+
"data-testid": "json-editor",
|
|
182
|
+
height,
|
|
183
|
+
language,
|
|
184
|
+
value,
|
|
185
|
+
theme: editorTheme,
|
|
186
|
+
onChange: t6,
|
|
187
|
+
onValidate: t7,
|
|
188
|
+
options: t9
|
|
189
|
+
});
|
|
190
|
+
$[16] = editorTheme;
|
|
191
|
+
$[17] = height;
|
|
192
|
+
$[18] = language;
|
|
193
|
+
$[19] = t6;
|
|
194
|
+
$[20] = t7;
|
|
195
|
+
$[21] = t9;
|
|
196
|
+
$[22] = value;
|
|
197
|
+
$[23] = t10;
|
|
198
|
+
} else t10 = $[23];
|
|
199
|
+
return t10;
|
|
85
200
|
};
|
|
201
|
+
function _temp$1(state) {
|
|
202
|
+
return state.theme;
|
|
203
|
+
}
|
|
86
204
|
|
|
87
205
|
//#endregion
|
|
88
206
|
//#region src/components/state-editor.tsx
|
|
@@ -206,150 +324,402 @@ const StateEditor = ({ state }) => {
|
|
|
206
324
|
|
|
207
325
|
//#endregion
|
|
208
326
|
//#region src/components/state-sidebar.tsx
|
|
209
|
-
const StateSidebar = (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
327
|
+
const StateSidebar = (t0) => {
|
|
328
|
+
const $ = c(15);
|
|
329
|
+
if ($[0] !== "99df8f944367e03b0c8d3e46933b073a4ba8e236d0058ad7eeca4ca6f223a516") {
|
|
330
|
+
for (let $i = 0; $i < 15; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
331
|
+
$[0] = "99df8f944367e03b0c8d3e46933b073a4ba8e236d0058ad7eeca4ca6f223a516";
|
|
332
|
+
}
|
|
333
|
+
const { state, onClose } = t0;
|
|
334
|
+
let t1;
|
|
335
|
+
if ($[1] !== state) {
|
|
336
|
+
t1 = {
|
|
215
337
|
label: "Overview",
|
|
216
338
|
content: /* @__PURE__ */ jsx(StateDetails, { state })
|
|
217
|
-
}
|
|
339
|
+
};
|
|
340
|
+
$[1] = state;
|
|
341
|
+
$[2] = t1;
|
|
342
|
+
} else t1 = $[2];
|
|
343
|
+
let t2;
|
|
344
|
+
if ($[3] !== state) {
|
|
345
|
+
t2 = {
|
|
218
346
|
label: "Editor",
|
|
219
347
|
content: /* @__PURE__ */ jsx(StateEditor, { state })
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
348
|
+
};
|
|
349
|
+
$[3] = state;
|
|
350
|
+
$[4] = t2;
|
|
351
|
+
} else t2 = $[4];
|
|
352
|
+
let t3;
|
|
353
|
+
if ($[5] !== t1 || $[6] !== t2) {
|
|
354
|
+
t3 = [t1, t2];
|
|
355
|
+
$[5] = t1;
|
|
356
|
+
$[6] = t2;
|
|
357
|
+
$[7] = t3;
|
|
358
|
+
} else t3 = $[7];
|
|
359
|
+
let t4;
|
|
360
|
+
if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
|
|
361
|
+
t4 = /* @__PURE__ */ jsx(X, {});
|
|
362
|
+
$[8] = t4;
|
|
363
|
+
} else t4 = $[8];
|
|
364
|
+
let t5;
|
|
365
|
+
if ($[9] !== onClose) {
|
|
366
|
+
t5 = [{
|
|
367
|
+
icon: t4,
|
|
223
368
|
onClick: onClose,
|
|
224
369
|
label: "Close"
|
|
225
|
-
}]
|
|
226
|
-
|
|
370
|
+
}];
|
|
371
|
+
$[9] = onClose;
|
|
372
|
+
$[10] = t5;
|
|
373
|
+
} else t5 = $[10];
|
|
374
|
+
let t6;
|
|
375
|
+
if ($[11] !== onClose || $[12] !== t3 || $[13] !== t5) {
|
|
376
|
+
t6 = /* @__PURE__ */ jsx(Sidebar, {
|
|
377
|
+
onClose,
|
|
378
|
+
title: "State Details",
|
|
379
|
+
initialWidth: 500,
|
|
380
|
+
tabs: t3,
|
|
381
|
+
actions: t5
|
|
382
|
+
});
|
|
383
|
+
$[11] = onClose;
|
|
384
|
+
$[12] = t3;
|
|
385
|
+
$[13] = t5;
|
|
386
|
+
$[14] = t6;
|
|
387
|
+
} else t6 = $[14];
|
|
388
|
+
return t6;
|
|
227
389
|
};
|
|
228
390
|
|
|
229
391
|
//#endregion
|
|
230
392
|
//#region src/components/states-page.tsx
|
|
231
393
|
const StatesPage = () => {
|
|
232
|
-
const
|
|
233
|
-
|
|
394
|
+
const $ = c(71);
|
|
395
|
+
if ($[0] !== "8ce039bfe0442ab4fc42929a358dacc664184bfe41f3767f703d231a71f688eb") {
|
|
396
|
+
for (let $i = 0; $i < 71; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
397
|
+
$[0] = "8ce039bfe0442ab4fc42929a358dacc664184bfe41f3767f703d231a71f688eb";
|
|
398
|
+
}
|
|
399
|
+
const selectedStateId = useStatesStore(_temp);
|
|
400
|
+
const selectStateId = useStatesStore(_temp2);
|
|
234
401
|
const { items, deleteItems, refetch } = useGetStateItems();
|
|
235
402
|
const [search, setSearch] = useState("");
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
};
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
403
|
+
let t0;
|
|
404
|
+
if ($[1] !== items || $[2] !== search) {
|
|
405
|
+
let t1$1;
|
|
406
|
+
if ($[4] !== search) {
|
|
407
|
+
t1$1 = (item) => item.groupId.toLowerCase().includes(search.toLowerCase()) || item.key.toLowerCase().includes(search.toLowerCase());
|
|
408
|
+
$[4] = search;
|
|
409
|
+
$[5] = t1$1;
|
|
410
|
+
} else t1$1 = $[5];
|
|
411
|
+
t0 = items.filter(t1$1);
|
|
412
|
+
$[1] = items;
|
|
413
|
+
$[2] = search;
|
|
414
|
+
$[3] = t0;
|
|
415
|
+
} else t0 = $[3];
|
|
416
|
+
const filteredItems = t0;
|
|
417
|
+
let t1;
|
|
418
|
+
if ($[6] !== filteredItems || $[7] !== selectedStateId) {
|
|
419
|
+
t1 = selectedStateId ? filteredItems.find((item_0) => `${item_0.groupId}:${item_0.key}` === selectedStateId) : null;
|
|
420
|
+
$[6] = filteredItems;
|
|
421
|
+
$[7] = selectedStateId;
|
|
422
|
+
$[8] = t1;
|
|
423
|
+
} else t1 = $[8];
|
|
424
|
+
const selectedItem = t1;
|
|
425
|
+
let t2;
|
|
426
|
+
if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
|
|
427
|
+
t2 = /* @__PURE__ */ new Set();
|
|
428
|
+
$[9] = t2;
|
|
429
|
+
} else t2 = $[9];
|
|
430
|
+
const [checkedItems, setCheckedItems] = useState(t2);
|
|
431
|
+
let t3;
|
|
432
|
+
if ($[10] !== selectStateId) {
|
|
433
|
+
t3 = (item_1) => selectStateId(`${item_1.groupId}:${item_1.key}`);
|
|
434
|
+
$[10] = selectStateId;
|
|
435
|
+
$[11] = t3;
|
|
436
|
+
} else t3 = $[11];
|
|
437
|
+
const handleRowClick = t3;
|
|
438
|
+
let t4;
|
|
439
|
+
if ($[12] !== selectStateId) {
|
|
440
|
+
t4 = () => selectStateId(void 0);
|
|
441
|
+
$[12] = selectStateId;
|
|
442
|
+
$[13] = t4;
|
|
443
|
+
} else t4 = $[13];
|
|
444
|
+
const onClose = t4;
|
|
445
|
+
let t5;
|
|
446
|
+
if ($[14] !== checkedItems || $[15] !== deleteItems) {
|
|
447
|
+
t5 = () => {
|
|
448
|
+
deleteItems(Array.from(checkedItems));
|
|
449
|
+
setCheckedItems(/* @__PURE__ */ new Set());
|
|
450
|
+
};
|
|
451
|
+
$[14] = checkedItems;
|
|
452
|
+
$[15] = deleteItems;
|
|
453
|
+
$[16] = t5;
|
|
454
|
+
} else t5 = $[16];
|
|
455
|
+
const deleteStates = t5;
|
|
456
|
+
let t6;
|
|
457
|
+
if ($[17] !== checkedItems) {
|
|
458
|
+
t6 = (item_2) => {
|
|
459
|
+
const isChecked = checkedItems.has(`${item_2.groupId}:${item_2.key}`);
|
|
460
|
+
setCheckedItems((prev) => {
|
|
461
|
+
const newSet = new Set(prev);
|
|
462
|
+
if (isChecked) newSet.delete(`${item_2.groupId}:${item_2.key}`);
|
|
463
|
+
else newSet.add(`${item_2.groupId}:${item_2.key}`);
|
|
464
|
+
return newSet;
|
|
263
465
|
});
|
|
264
|
-
|
|
265
|
-
|
|
466
|
+
};
|
|
467
|
+
$[17] = checkedItems;
|
|
468
|
+
$[18] = t6;
|
|
469
|
+
} else t6 = $[18];
|
|
470
|
+
const handleCheckboxChange = t6;
|
|
471
|
+
let t7;
|
|
472
|
+
if ($[19] !== filteredItems) {
|
|
473
|
+
t7 = (checked) => {
|
|
474
|
+
setCheckedItems((prev_0) => {
|
|
475
|
+
const newSet_0 = new Set(prev_0);
|
|
476
|
+
if (checked) filteredItems.forEach((item_3) => {
|
|
477
|
+
newSet_0.add(`${item_3.groupId}:${item_3.key}`);
|
|
478
|
+
});
|
|
479
|
+
else filteredItems.forEach((item_4) => {
|
|
480
|
+
newSet_0.delete(`${item_4.groupId}:${item_4.key}`);
|
|
481
|
+
});
|
|
482
|
+
return newSet_0;
|
|
266
483
|
});
|
|
267
|
-
|
|
484
|
+
};
|
|
485
|
+
$[19] = filteredItems;
|
|
486
|
+
$[20] = t7;
|
|
487
|
+
} else t7 = $[20];
|
|
488
|
+
const toggleSelectAll = t7;
|
|
489
|
+
let t8;
|
|
490
|
+
if ($[21] !== onClose || $[22] !== selectedItem) {
|
|
491
|
+
t8 = selectedItem && /* @__PURE__ */ jsx(StateSidebar, {
|
|
492
|
+
state: selectedItem,
|
|
493
|
+
onClose
|
|
268
494
|
});
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
495
|
+
$[21] = onClose;
|
|
496
|
+
$[22] = selectedItem;
|
|
497
|
+
$[23] = t8;
|
|
498
|
+
} else t8 = $[23];
|
|
499
|
+
let t9;
|
|
500
|
+
if ($[24] === Symbol.for("react.memo_cache_sentinel")) {
|
|
501
|
+
t9 = (e) => setSearch(e.target.value);
|
|
502
|
+
$[24] = t9;
|
|
503
|
+
} else t9 = $[24];
|
|
504
|
+
let t10;
|
|
505
|
+
if ($[25] !== search) {
|
|
506
|
+
t10 = /* @__PURE__ */ jsx(Input, {
|
|
507
|
+
variant: "shade",
|
|
508
|
+
value: search,
|
|
509
|
+
onChange: t9,
|
|
510
|
+
className: "px-9! font-medium",
|
|
511
|
+
placeholder: "Search by Group ID or Key"
|
|
512
|
+
});
|
|
513
|
+
$[25] = search;
|
|
514
|
+
$[26] = t10;
|
|
515
|
+
} else t10 = $[26];
|
|
516
|
+
let t11;
|
|
517
|
+
if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
|
|
518
|
+
t11 = /* @__PURE__ */ jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50" });
|
|
519
|
+
$[27] = t11;
|
|
520
|
+
} else t11 = $[27];
|
|
521
|
+
let t12;
|
|
522
|
+
if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
|
|
523
|
+
t12 = /* @__PURE__ */ jsx(X, {
|
|
524
|
+
className: "cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground",
|
|
525
|
+
onClick: () => setSearch("")
|
|
526
|
+
});
|
|
527
|
+
$[28] = t12;
|
|
528
|
+
} else t12 = $[28];
|
|
529
|
+
let t13;
|
|
530
|
+
if ($[29] !== t10) {
|
|
531
|
+
t13 = /* @__PURE__ */ jsxs("div", {
|
|
532
|
+
className: "flex-1 relative",
|
|
533
|
+
children: [
|
|
534
|
+
t10,
|
|
535
|
+
t11,
|
|
536
|
+
t12
|
|
537
|
+
]
|
|
538
|
+
});
|
|
539
|
+
$[29] = t10;
|
|
540
|
+
$[30] = t13;
|
|
541
|
+
} else t13 = $[30];
|
|
542
|
+
const t14 = checkedItems.size === 0;
|
|
543
|
+
let t15;
|
|
544
|
+
if ($[31] === Symbol.for("react.memo_cache_sentinel")) {
|
|
545
|
+
t15 = /* @__PURE__ */ jsx(Trash, {});
|
|
546
|
+
$[31] = t15;
|
|
547
|
+
} else t15 = $[31];
|
|
548
|
+
let t16;
|
|
549
|
+
if ($[32] !== deleteStates || $[33] !== t14) {
|
|
550
|
+
t16 = /* @__PURE__ */ jsxs(Button, {
|
|
551
|
+
variant: "default",
|
|
552
|
+
className: "h-[34px]",
|
|
553
|
+
disabled: t14,
|
|
554
|
+
onClick: deleteStates,
|
|
555
|
+
children: [t15, " Delete"]
|
|
556
|
+
});
|
|
557
|
+
$[32] = deleteStates;
|
|
558
|
+
$[33] = t14;
|
|
559
|
+
$[34] = t16;
|
|
560
|
+
} else t16 = $[34];
|
|
561
|
+
let t17;
|
|
562
|
+
if ($[35] === Symbol.for("react.memo_cache_sentinel")) {
|
|
563
|
+
t17 = /* @__PURE__ */ jsx(RefreshCw, { className: "w-4 h-4 text-muted-foreground" });
|
|
564
|
+
$[35] = t17;
|
|
565
|
+
} else t17 = $[35];
|
|
566
|
+
let t18;
|
|
567
|
+
if ($[36] !== refetch) {
|
|
568
|
+
t18 = /* @__PURE__ */ jsx(Button, {
|
|
569
|
+
variant: "default",
|
|
570
|
+
className: "h-[34px]",
|
|
571
|
+
onClick: refetch,
|
|
572
|
+
children: t17
|
|
573
|
+
});
|
|
574
|
+
$[36] = refetch;
|
|
575
|
+
$[37] = t18;
|
|
576
|
+
} else t18 = $[37];
|
|
577
|
+
let t19;
|
|
578
|
+
if ($[38] !== t13 || $[39] !== t16 || $[40] !== t18) {
|
|
579
|
+
t19 = /* @__PURE__ */ jsxs("div", {
|
|
277
580
|
className: "flex p-2 border-b gap-2",
|
|
278
581
|
"data-testid": "logs-search-container",
|
|
279
582
|
children: [
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
/* @__PURE__ */ jsx(Input, {
|
|
284
|
-
variant: "shade",
|
|
285
|
-
value: search,
|
|
286
|
-
onChange: (e) => setSearch(e.target.value),
|
|
287
|
-
className: "px-9! font-medium",
|
|
288
|
-
placeholder: "Search by Group ID or Key"
|
|
289
|
-
}),
|
|
290
|
-
/* @__PURE__ */ jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50" }),
|
|
291
|
-
/* @__PURE__ */ jsx(X, {
|
|
292
|
-
className: "cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground",
|
|
293
|
-
onClick: () => setSearch("")
|
|
294
|
-
})
|
|
295
|
-
]
|
|
296
|
-
}),
|
|
297
|
-
/* @__PURE__ */ jsxs(Button, {
|
|
298
|
-
variant: "default",
|
|
299
|
-
className: "h-[34px]",
|
|
300
|
-
disabled: checkedItems.size === 0,
|
|
301
|
-
onClick: deleteStates,
|
|
302
|
-
children: [/* @__PURE__ */ jsx(Trash, {}), " Delete"]
|
|
303
|
-
}),
|
|
304
|
-
/* @__PURE__ */ jsx(Button, {
|
|
305
|
-
variant: "default",
|
|
306
|
-
className: "h-[34px]",
|
|
307
|
-
onClick: refetch,
|
|
308
|
-
children: /* @__PURE__ */ jsx(RefreshCw, { className: "w-4 h-4 text-muted-foreground" })
|
|
309
|
-
})
|
|
583
|
+
t13,
|
|
584
|
+
t16,
|
|
585
|
+
t18
|
|
310
586
|
]
|
|
311
|
-
})
|
|
587
|
+
});
|
|
588
|
+
$[38] = t13;
|
|
589
|
+
$[39] = t16;
|
|
590
|
+
$[40] = t18;
|
|
591
|
+
$[41] = t19;
|
|
592
|
+
} else t19 = $[41];
|
|
593
|
+
let t20;
|
|
594
|
+
if ($[42] !== toggleSelectAll) {
|
|
595
|
+
t20 = /* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsx(Checkbox, {
|
|
596
|
+
onClick: _temp3,
|
|
597
|
+
onCheckedChange: toggleSelectAll
|
|
598
|
+
}) });
|
|
599
|
+
$[42] = toggleSelectAll;
|
|
600
|
+
$[43] = t20;
|
|
601
|
+
} else t20 = $[43];
|
|
602
|
+
let t21;
|
|
603
|
+
let t22;
|
|
604
|
+
let t23;
|
|
605
|
+
if ($[44] === Symbol.for("react.memo_cache_sentinel")) {
|
|
606
|
+
t21 = /* @__PURE__ */ jsx(TableHead, {
|
|
607
|
+
className: "rounded-0",
|
|
608
|
+
children: "Group ID"
|
|
609
|
+
});
|
|
610
|
+
t22 = /* @__PURE__ */ jsx(TableHead, { children: "Key" });
|
|
611
|
+
t23 = /* @__PURE__ */ jsx(TableHead, { children: "Type" });
|
|
612
|
+
$[44] = t21;
|
|
613
|
+
$[45] = t22;
|
|
614
|
+
$[46] = t23;
|
|
615
|
+
} else {
|
|
616
|
+
t21 = $[44];
|
|
617
|
+
t22 = $[45];
|
|
618
|
+
t23 = $[46];
|
|
619
|
+
}
|
|
620
|
+
let t24;
|
|
621
|
+
if ($[47] !== t20) {
|
|
622
|
+
t24 = /* @__PURE__ */ jsx(TableHeader, {
|
|
312
623
|
className: "sticky top-0 bg-background/20 backdrop-blur-sm",
|
|
313
624
|
children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
/* @__PURE__ */ jsx(TableHead, {
|
|
319
|
-
className: "rounded-0",
|
|
320
|
-
children: "Group ID"
|
|
321
|
-
}),
|
|
322
|
-
/* @__PURE__ */ jsx(TableHead, { children: "Key" }),
|
|
323
|
-
/* @__PURE__ */ jsx(TableHead, { children: "Type" })
|
|
625
|
+
t20,
|
|
626
|
+
t21,
|
|
627
|
+
t22,
|
|
628
|
+
t23
|
|
324
629
|
] })
|
|
325
|
-
})
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
630
|
+
});
|
|
631
|
+
$[47] = t20;
|
|
632
|
+
$[48] = t24;
|
|
633
|
+
} else t24 = $[48];
|
|
634
|
+
let t25;
|
|
635
|
+
if ($[49] !== checkedItems || $[50] !== filteredItems || $[51] !== handleCheckboxChange || $[52] !== handleRowClick || $[53] !== selectedItem) {
|
|
636
|
+
let t26$1;
|
|
637
|
+
if ($[55] !== checkedItems || $[56] !== handleCheckboxChange || $[57] !== handleRowClick || $[58] !== selectedItem) {
|
|
638
|
+
t26$1 = (item_5) => /* @__PURE__ */ jsxs(TableRow, {
|
|
639
|
+
"data-testid": `item-${item_5}`,
|
|
640
|
+
onClick: () => handleRowClick(item_5),
|
|
641
|
+
className: cn("font-mono font-semibold cursor-pointer border-0", selectedItem === item_5 ? "bg-muted-foreground/10 hover:bg-muted-foreground/20" : "hover:bg-muted-foreground/10"),
|
|
642
|
+
children: [
|
|
643
|
+
/* @__PURE__ */ jsx(TableCell, {
|
|
644
|
+
onClick: _temp4,
|
|
645
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
646
|
+
checked: checkedItems.has(`${item_5.groupId}:${item_5.key}`),
|
|
647
|
+
onClick: () => handleCheckboxChange(item_5)
|
|
648
|
+
})
|
|
649
|
+
}),
|
|
650
|
+
/* @__PURE__ */ jsx(TableCell, {
|
|
651
|
+
className: "hover:bg-transparent",
|
|
652
|
+
children: item_5.groupId
|
|
653
|
+
}),
|
|
654
|
+
/* @__PURE__ */ jsx(TableCell, {
|
|
655
|
+
className: "hover:bg-transparent",
|
|
656
|
+
children: item_5.key
|
|
657
|
+
}),
|
|
658
|
+
/* @__PURE__ */ jsx(TableCell, {
|
|
659
|
+
className: "hover:bg-transparent",
|
|
660
|
+
children: item_5.type
|
|
335
661
|
})
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}
|
|
662
|
+
]
|
|
663
|
+
}, `${item_5.groupId}:${item_5.key}`);
|
|
664
|
+
$[55] = checkedItems;
|
|
665
|
+
$[56] = handleCheckboxChange;
|
|
666
|
+
$[57] = handleRowClick;
|
|
667
|
+
$[58] = selectedItem;
|
|
668
|
+
$[59] = t26$1;
|
|
669
|
+
} else t26$1 = $[59];
|
|
670
|
+
t25 = filteredItems.map(t26$1);
|
|
671
|
+
$[49] = checkedItems;
|
|
672
|
+
$[50] = filteredItems;
|
|
673
|
+
$[51] = handleCheckboxChange;
|
|
674
|
+
$[52] = handleRowClick;
|
|
675
|
+
$[53] = selectedItem;
|
|
676
|
+
$[54] = t25;
|
|
677
|
+
} else t25 = $[54];
|
|
678
|
+
let t26;
|
|
679
|
+
if ($[60] !== t25) {
|
|
680
|
+
t26 = /* @__PURE__ */ jsx(TableBody, { children: t25 });
|
|
681
|
+
$[60] = t25;
|
|
682
|
+
$[61] = t26;
|
|
683
|
+
} else t26 = $[61];
|
|
684
|
+
let t27;
|
|
685
|
+
if ($[62] !== t24 || $[63] !== t26) {
|
|
686
|
+
t27 = /* @__PURE__ */ jsxs(Table, { children: [t24, t26] });
|
|
687
|
+
$[62] = t24;
|
|
688
|
+
$[63] = t26;
|
|
689
|
+
$[64] = t27;
|
|
690
|
+
} else t27 = $[64];
|
|
691
|
+
let t28;
|
|
692
|
+
if ($[65] !== t19 || $[66] !== t27) {
|
|
693
|
+
t28 = /* @__PURE__ */ jsxs("div", {
|
|
694
|
+
className: "grid grid-rows-[auto_1fr] h-full",
|
|
695
|
+
"data-testid": "states-container",
|
|
696
|
+
children: [t19, t27]
|
|
697
|
+
});
|
|
698
|
+
$[65] = t19;
|
|
699
|
+
$[66] = t27;
|
|
700
|
+
$[67] = t28;
|
|
701
|
+
} else t28 = $[67];
|
|
702
|
+
let t29;
|
|
703
|
+
if ($[68] !== t28 || $[69] !== t8) {
|
|
704
|
+
t29 = /* @__PURE__ */ jsxs(Fragment, { children: [t8, t28] });
|
|
705
|
+
$[68] = t28;
|
|
706
|
+
$[69] = t8;
|
|
707
|
+
$[70] = t29;
|
|
708
|
+
} else t29 = $[70];
|
|
709
|
+
return t29;
|
|
352
710
|
};
|
|
711
|
+
function _temp(state) {
|
|
712
|
+
return state.selectedStateId;
|
|
713
|
+
}
|
|
714
|
+
function _temp2(state_0) {
|
|
715
|
+
return state_0.selectStateId;
|
|
716
|
+
}
|
|
717
|
+
function _temp3(evt) {
|
|
718
|
+
return evt.stopPropagation();
|
|
719
|
+
}
|
|
720
|
+
function _temp4(evt_0) {
|
|
721
|
+
return evt_0.stopPropagation();
|
|
722
|
+
}
|
|
353
723
|
|
|
354
724
|
//#endregion
|
|
355
725
|
export { StatesPage };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["StateDetails: React.FC<Props>","JsonEditor: FC<JsonEditorProps>","value","StateEditor: React.FC<Props>","StateSidebar: React.FC<Props>"],"sources":["../src/hooks/states-hooks.ts","../src/stores/use-states-store.ts","../src/components/state-details.tsx","../src/components/json-editor.tsx","../src/components/state-editor.tsx","../src/components/state-sidebar.tsx","../src/components/states-page.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport type { StateItem } from '../types/state'\n\ntype Output = {\n items: StateItem[]\n deleteItems: (ids: string[]) => void\n refetch: () => void\n}\n\nexport const useGetStateItems = (): Output => {\n const [items, setItems] = useState<StateItem[]>([])\n\n const refetch = useCallback(() => {\n fetch('/__motia/state')\n .then(async (res) => {\n if (res.ok) {\n return res.json()\n } else {\n throw await res.json()\n }\n })\n .then(setItems)\n .catch((err) => console.error(err))\n }, [])\n\n const deleteItems = (ids: string[]) => {\n fetch('/__motia/state/delete', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ ids }),\n }).then(() => refetch())\n }\n\n useEffect(() => {\n refetch()\n }, [refetch])\n\n return { items, deleteItems, refetch }\n}\n","import { create } from 'zustand'\n\nexport type StatesState = {\n selectedStateId?: string\n selectStateId: (stateId?: string) => void\n}\n\nexport const useStatesStore = create<StatesState>()((set) => ({\n selectedStateId: undefined,\n selectStateId: (stateId) => set({ selectedStateId: stateId }),\n}))\n","import type React from 'react'\nimport JsonView from 'react18-json-view'\nimport type { StateItem } from '../types/state'\n\ntype Props = {\n state: StateItem\n}\n\nexport const StateDetails: React.FC<Props> = ({ state }) => <JsonView src={state.value} theme=\"default\" />\n","import Editor, { useMonaco } from '@monaco-editor/react'\nimport { useThemeStore } from '@motiadev/ui'\nimport { type FC, useEffect, useMemo } from 'react'\n\ntype JsonEditorProps = {\n value: string\n height?: number | string\n schema?: Record<string, unknown>\n onChange?: (value: string) => void\n onValidate?: (isValid: boolean) => void\n language?: string\n readOnly?: boolean\n}\n\nexport const JsonEditor: FC<JsonEditorProps> = ({\n value,\n height = 300,\n schema,\n onChange,\n onValidate,\n language = 'json',\n readOnly = false,\n}) => {\n const monaco = useMonaco()\n const theme = useThemeStore((state) => state.theme)\n const editorTheme = useMemo(() => (theme === 'dark' ? 'vs-dark' : 'light'), [theme])\n\n useEffect(() => {\n if (!monaco) return\n\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true })\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: schema\n ? [\n {\n uri: window.location.href,\n fileMatch: ['*'],\n schema,\n },\n ]\n : [],\n })\n }, [monaco, schema, language])\n\n return (\n <Editor\n data-testid=\"json-editor\"\n height={height}\n language={language}\n value={value}\n theme={editorTheme}\n onChange={(value) => {\n if (!value) {\n onValidate?.(false)\n }\n onChange?.(value ?? '')\n }}\n onValidate={(markers) => onValidate?.(markers.length === 0)}\n options={{\n readOnly,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n }}\n />\n )\n}\n","import { Button } from '@motiadev/ui'\nimport { AlertCircle, Check, Loader2, Save } from 'lucide-react'\nimport type React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { StateItem } from '../types/state'\nimport { JsonEditor } from './json-editor'\n\ntype Props = {\n state: StateItem\n}\n\nexport const StateEditor: React.FC<Props> = ({ state }) => {\n const [isRequestLoading, setIsRequestLoading] = useState(false)\n const [isValid, setIsValid] = useState(true)\n const [jsonValue, setJsonValue] = useState(JSON.stringify(state.value, null, 2))\n const [hasChanges, setHasChanges] = useState(false)\n const [saveStatus, setSaveStatus] = useState<'idle' | 'success' | 'error'>('idle')\n const lastSavedValue = useRef(JSON.stringify(state.value, null, 2))\n useEffect(() => {\n setJsonValue(JSON.stringify(state.value, null, 2))\n }, [state.value])\n\n const handleJsonChange = useCallback((value: string) => {\n setHasChanges(value !== lastSavedValue.current)\n setJsonValue(value)\n setSaveStatus('idle')\n }, [])\n\n const handleSave = async () => {\n if (!isValid || !hasChanges) return\n\n try {\n setIsRequestLoading(true)\n setSaveStatus('idle')\n\n const response = await fetch('/__motia/state', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: state.key,\n groupId: state.groupId,\n value: JSON.parse(jsonValue),\n }),\n })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n lastSavedValue.current = jsonValue\n setSaveStatus('success')\n setHasChanges(false)\n\n setTimeout(() => {\n setSaveStatus('idle')\n }, 3000)\n } catch (error) {\n console.error('Failed to save state:', error)\n setSaveStatus('error')\n } finally {\n setIsRequestLoading(false)\n }\n }\n\n const resetChanges = useCallback(() => {\n setJsonValue(JSON.stringify(state.value, null, 2))\n setHasChanges(false)\n setSaveStatus('idle')\n }, [state.value])\n\n const statusView = useMemo(() => {\n if (saveStatus === 'success') {\n return (\n <div className=\"bg-green-50 dark:bg-green-950/20 border border-green-200 dark:border-green-800 rounded-lg p-2\">\n <div className=\"flex items-center gap-2 text-green-700 dark:text-green-400 text-sm\">\n <Check className=\"w-4 h-4\" />\n State saved successfully!\n </div>\n </div>\n )\n }\n\n if (saveStatus === 'error') {\n return (\n <div className=\"bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-800 rounded-lg p-2\">\n <div className=\"flex items-center gap-2 text-red-700 dark:text-red-400 text-sm\">\n <AlertCircle className=\"w-4 h-4\" />\n Failed to save state. Please try again.\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"text-xs text-muted-foreground\">\n {hasChanges ? (\n <span className=\"flex items-center gap-1\">\n <div className=\"w-2 h-2 bg-orange-500 rounded-full\"></div>\n Unsaved changes\n </span>\n ) : (\n <span className=\"flex items-center gap-1\">\n <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\n Up to date\n </span>\n )}\n </div>\n )\n }, [saveStatus, hasChanges])\n\n return (\n <div className=\"flex flex-col gap-2 h-full\">\n <p className=\"text-xs text-muted-foreground\">Modify the state value using the JSON editor below.</p>\n <div className=\"space-y-3 pt-2 flex flex-col\">\n <div className=\"relative flex-1\">\n <JsonEditor\n value={jsonValue}\n onChange={handleJsonChange}\n onValidate={setIsValid}\n height={'calc(100vh - 300px)'}\n />\n\n {!isValid && (\n <div className=\"absolute top-2 right-2 bg-destructive/90 text-destructive-foreground px-2 py-1 rounded text-xs flex items-center gap-1\">\n <AlertCircle className=\"w-3 h-3\" />\n Invalid JSON\n </div>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center justify-between pt-2\">\n {statusView}\n\n <div className=\"flex items-center gap-2\">\n {hasChanges && (\n <Button variant=\"secondary\" onClick={resetChanges} disabled={isRequestLoading}>\n Reset\n </Button>\n )}\n\n <Button\n onClick={handleSave}\n variant=\"accent\"\n disabled={isRequestLoading || !isValid || !hasChanges}\n data-testid=\"state-save-button\"\n >\n {isRequestLoading ? (\n <>\n <Loader2 className=\"w-3 h-3 animate-spin mr-1\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"w-3 h-3 mr-1\" />\n Save Changes\n </>\n )}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type React from 'react'\nimport type { StateItem } from '../types/state'\nimport { StateDetails } from './state-details'\nimport { StateEditor } from './state-editor'\n\ntype Props = {\n state: StateItem\n onClose: () => void\n}\n\nexport const StateSidebar: React.FC<Props> = ({ state, onClose }) => {\n return (\n <Sidebar\n onClose={onClose}\n title=\"State Details\"\n initialWidth={500}\n tabs={[\n {\n label: 'Overview',\n content: <StateDetails state={state} />,\n },\n {\n label: 'Editor',\n content: <StateEditor state={state} />,\n },\n ]}\n actions={[{ icon: <X />, onClick: onClose, label: 'Close' }]}\n />\n )\n}\n","import {\n Button,\n Checkbox,\n cn,\n Input,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@motiadev/ui'\nimport { RefreshCw, Search, Trash, X } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { useGetStateItems } from '../hooks/states-hooks'\nimport { useStatesStore } from '../stores/use-states-store'\nimport type { StateItem } from '../types/state'\nimport { StateSidebar } from './state-sidebar'\n\nexport const StatesPage = () => {\n const selectedStateId = useStatesStore((state) => state.selectedStateId)\n const selectStateId = useStatesStore((state) => state.selectStateId)\n const { items, deleteItems, refetch } = useGetStateItems()\n const [search, setSearch] = useState('')\n const filteredItems = useMemo(() => {\n return items.filter((item) => {\n return (\n item.groupId.toLowerCase().includes(search.toLowerCase()) ||\n item.key.toLowerCase().includes(search.toLowerCase())\n )\n })\n }, [items, search])\n const selectedItem = useMemo(\n () => (selectedStateId ? filteredItems.find((item) => `${item.groupId}:${item.key}` === selectedStateId) : null),\n [filteredItems, selectedStateId],\n )\n\n const [checkedItems, setCheckedItems] = useState<Set<string>>(new Set())\n const handleRowClick = (item: StateItem) => selectStateId(`${item.groupId}:${item.key}`)\n const onClose = () => selectStateId(undefined)\n const deleteStates = () => {\n deleteItems(Array.from(checkedItems))\n setCheckedItems(new Set())\n }\n\n const handleCheckboxChange = (item: StateItem) => {\n const isChecked = checkedItems.has(`${item.groupId}:${item.key}`)\n\n setCheckedItems((prev) => {\n const newSet = new Set(prev)\n if (isChecked) {\n newSet.delete(`${item.groupId}:${item.key}`)\n } else {\n newSet.add(`${item.groupId}:${item.key}`)\n }\n return newSet\n })\n }\n\n const toggleSelectAll = (checked: boolean) => {\n setCheckedItems((prev) => {\n const newSet = new Set(prev)\n\n if (checked) {\n filteredItems.forEach((item) => {\n newSet.add(`${item.groupId}:${item.key}`)\n })\n } else {\n filteredItems.forEach((item) => {\n newSet.delete(`${item.groupId}:${item.key}`)\n })\n }\n return newSet\n })\n }\n\n return (\n <>\n {selectedItem && <StateSidebar state={selectedItem} onClose={onClose} />}\n <div className=\"grid grid-rows-[auto_1fr] h-full\" data-testid=\"states-container\">\n <div className=\"flex p-2 border-b gap-2\" data-testid=\"logs-search-container\">\n <div className=\"flex-1 relative\">\n <Input\n variant=\"shade\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Group ID or Key\"\n />\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <X\n className=\"cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground\"\n onClick={() => setSearch('')}\n />\n </div>\n <Button variant=\"default\" className=\"h-[34px]\" disabled={checkedItems.size === 0} onClick={deleteStates}>\n <Trash /> Delete\n </Button>\n <Button variant=\"default\" className=\"h-[34px]\" onClick={refetch}>\n <RefreshCw className=\"w-4 h-4 text-muted-foreground\" />\n </Button>\n </div>\n\n <Table>\n <TableHeader className=\"sticky top-0 bg-background/20 backdrop-blur-sm\">\n <TableRow>\n <TableHead>\n <Checkbox onClick={(evt) => evt.stopPropagation()} onCheckedChange={toggleSelectAll} />\n </TableHead>\n <TableHead className=\"rounded-0\">Group ID</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Type</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredItems.map((item) => (\n <TableRow\n data-testid={`item-${item}`}\n key={`${item.groupId}:${item.key}`}\n onClick={() => handleRowClick(item)}\n className={cn(\n 'font-mono font-semibold cursor-pointer border-0',\n selectedItem === item\n ? 'bg-muted-foreground/10 hover:bg-muted-foreground/20'\n : 'hover:bg-muted-foreground/10',\n )}\n >\n <TableCell onClick={(evt) => evt.stopPropagation()}>\n <Checkbox\n checked={checkedItems.has(`${item.groupId}:${item.key}`)}\n onClick={() => handleCheckboxChange(item)}\n />\n </TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.groupId}</TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.key}</TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.type}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useCallback","useEffect","useState","StateItem","Output","items","deleteItems","ids","refetch","useGetStateItems","$","_c","$i","Symbol","for","t0","setItems","t1","fetch","then","_temp","catch","_temp2","t2","method","headers","body","JSON","stringify","t3","t4","t5","res","ok","json","err","console","error","create","StatesState","selectedStateId","selectStateId","stateId","useStatesStore","set","undefined","React","JsonView","StateItem","Props","state","StateDetails","FC","t0","$","_c","$i","Symbol","for","t1","value","Editor","useMonaco","useThemeStore","FC","useEffect","useMemo","JsonEditorProps","value","height","schema","Record","onChange","onValidate","isValid","language","readOnly","JsonEditor","t0","$","_c","$i","Symbol","for","t1","t2","t3","undefined","monaco","theme","_temp","editorTheme","t4","languages","typescript","javascriptDefaults","setCompilerOptions","isolatedModules","json","jsonDefaults","setDiagnosticsOptions","schemas","uri","window","location","href","fileMatch","t5","t6","value_0","t7","markers","length","t8","enabled","t9","scrollBeyondLastLine","minimap","t10","state","Button","AlertCircle","Check","Loader2","Save","React","useCallback","useEffect","useMemo","useRef","useState","StateItem","JsonEditor","Props","state","StateEditor","FC","isRequestLoading","setIsRequestLoading","isValid","setIsValid","jsonValue","setJsonValue","JSON","stringify","value","hasChanges","setHasChanges","saveStatus","setSaveStatus","lastSavedValue","handleJsonChange","current","handleSave","response","fetch","method","headers","body","key","groupId","parse","ok","Error","status","setTimeout","error","console","resetChanges","statusView","Sidebar","X","React","StateItem","StateDetails","StateEditor","Props","state","onClose","StateSidebar","FC","t0","$","_c","$i","Symbol","for","t1","label","content","t2","t3","t4","t5","icon","onClick","t6","Button","Checkbox","cn","Input","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","RefreshCw","Search","Trash","X","useMemo","useState","useGetStateItems","useStatesStore","StateItem","StateSidebar","StatesPage","$","_c","$i","Symbol","for","selectedStateId","_temp","selectStateId","_temp2","items","deleteItems","refetch","search","setSearch","t0","t1","item","groupId","toLowerCase","includes","key","filter","filteredItems","find","item_0","selectedItem","t2","Set","checkedItems","setCheckedItems","t3","item_1","handleRowClick","t4","undefined","onClose","t5","Array","from","deleteStates","t6","item_2","isChecked","has","prev","newSet","delete","add","handleCheckboxChange","t7","checked","prev_0","newSet_0","forEach","item_3","item_4","toggleSelectAll","t8","t9","e","target","value","t10","t11","t12","t13","t14","size","t15","t16","t17","t18","t19","t20","_temp3","t21","t22","t23","t24","t25","t26","item_5","_temp4","type","map","t27","t28","t29","state","state_0","evt","stopPropagation","evt_0"],"sources":["../src/hooks/states-hooks.ts","../src/stores/use-states-store.ts","../src/components/state-details.tsx","../src/components/json-editor.tsx","../src/components/state-editor.tsx","../src/components/state-sidebar.tsx","../src/components/states-page.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport type { StateItem } from '../types/state'\n\ntype Output = {\n items: StateItem[]\n deleteItems: (ids: string[]) => void\n refetch: () => void\n}\n\nexport const useGetStateItems = (): Output => {\n const [items, setItems] = useState<StateItem[]>([])\n\n const refetch = useCallback(() => {\n fetch('/__motia/state')\n .then(async (res) => {\n if (res.ok) {\n return res.json()\n } else {\n throw await res.json()\n }\n })\n .then(setItems)\n .catch((err) => console.error(err))\n }, [])\n\n const deleteItems = (ids: string[]) => {\n fetch('/__motia/state/delete', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ ids }),\n }).then(() => refetch())\n }\n\n useEffect(() => {\n refetch()\n }, [refetch])\n\n return { items, deleteItems, refetch }\n}\n","import { create } from 'zustand'\n\nexport type StatesState = {\n selectedStateId?: string\n selectStateId: (stateId?: string) => void\n}\n\nexport const useStatesStore = create<StatesState>()((set) => ({\n selectedStateId: undefined,\n selectStateId: (stateId) => set({ selectedStateId: stateId }),\n}))\n","import type React from 'react'\nimport JsonView from 'react18-json-view'\nimport type { StateItem } from '../types/state'\n\ntype Props = {\n state: StateItem\n}\n\nexport const StateDetails: React.FC<Props> = ({ state }) => <JsonView src={state.value} theme=\"default\" />\n","import Editor, { useMonaco } from '@monaco-editor/react'\nimport { useThemeStore } from '@motiadev/ui'\nimport { type FC, useEffect, useMemo } from 'react'\n\ntype JsonEditorProps = {\n value: string\n height?: number | string\n schema?: Record<string, unknown>\n onChange?: (value: string) => void\n onValidate?: (isValid: boolean) => void\n language?: string\n readOnly?: boolean\n}\n\nexport const JsonEditor: FC<JsonEditorProps> = ({\n value,\n height = 300,\n schema,\n onChange,\n onValidate,\n language = 'json',\n readOnly = false,\n}) => {\n const monaco = useMonaco()\n const theme = useThemeStore((state) => state.theme)\n const editorTheme = useMemo(() => (theme === 'dark' ? 'vs-dark' : 'light'), [theme])\n\n useEffect(() => {\n if (!monaco) return\n\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true })\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: schema\n ? [\n {\n uri: window.location.href,\n fileMatch: ['*'],\n schema,\n },\n ]\n : [],\n })\n }, [monaco, schema, language])\n\n return (\n <Editor\n data-testid=\"json-editor\"\n height={height}\n language={language}\n value={value}\n theme={editorTheme}\n onChange={(value) => {\n if (!value) {\n onValidate?.(false)\n }\n onChange?.(value ?? '')\n }}\n onValidate={(markers) => onValidate?.(markers.length === 0)}\n options={{\n readOnly,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n }}\n />\n )\n}\n","import { Button } from '@motiadev/ui'\nimport { AlertCircle, Check, Loader2, Save } from 'lucide-react'\nimport type React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { StateItem } from '../types/state'\nimport { JsonEditor } from './json-editor'\n\ntype Props = {\n state: StateItem\n}\n\nexport const StateEditor: React.FC<Props> = ({ state }) => {\n const [isRequestLoading, setIsRequestLoading] = useState(false)\n const [isValid, setIsValid] = useState(true)\n const [jsonValue, setJsonValue] = useState(JSON.stringify(state.value, null, 2))\n const [hasChanges, setHasChanges] = useState(false)\n const [saveStatus, setSaveStatus] = useState<'idle' | 'success' | 'error'>('idle')\n const lastSavedValue = useRef(JSON.stringify(state.value, null, 2))\n useEffect(() => {\n setJsonValue(JSON.stringify(state.value, null, 2))\n }, [state.value])\n\n const handleJsonChange = useCallback((value: string) => {\n setHasChanges(value !== lastSavedValue.current)\n setJsonValue(value)\n setSaveStatus('idle')\n }, [])\n\n const handleSave = async () => {\n if (!isValid || !hasChanges) return\n\n try {\n setIsRequestLoading(true)\n setSaveStatus('idle')\n\n const response = await fetch('/__motia/state', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: state.key,\n groupId: state.groupId,\n value: JSON.parse(jsonValue),\n }),\n })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n lastSavedValue.current = jsonValue\n setSaveStatus('success')\n setHasChanges(false)\n\n setTimeout(() => {\n setSaveStatus('idle')\n }, 3000)\n } catch (error) {\n console.error('Failed to save state:', error)\n setSaveStatus('error')\n } finally {\n setIsRequestLoading(false)\n }\n }\n\n const resetChanges = useCallback(() => {\n setJsonValue(JSON.stringify(state.value, null, 2))\n setHasChanges(false)\n setSaveStatus('idle')\n }, [state.value])\n\n const statusView = useMemo(() => {\n if (saveStatus === 'success') {\n return (\n <div className=\"bg-green-50 dark:bg-green-950/20 border border-green-200 dark:border-green-800 rounded-lg p-2\">\n <div className=\"flex items-center gap-2 text-green-700 dark:text-green-400 text-sm\">\n <Check className=\"w-4 h-4\" />\n State saved successfully!\n </div>\n </div>\n )\n }\n\n if (saveStatus === 'error') {\n return (\n <div className=\"bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-800 rounded-lg p-2\">\n <div className=\"flex items-center gap-2 text-red-700 dark:text-red-400 text-sm\">\n <AlertCircle className=\"w-4 h-4\" />\n Failed to save state. Please try again.\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"text-xs text-muted-foreground\">\n {hasChanges ? (\n <span className=\"flex items-center gap-1\">\n <div className=\"w-2 h-2 bg-orange-500 rounded-full\"></div>\n Unsaved changes\n </span>\n ) : (\n <span className=\"flex items-center gap-1\">\n <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\n Up to date\n </span>\n )}\n </div>\n )\n }, [saveStatus, hasChanges])\n\n return (\n <div className=\"flex flex-col gap-2 h-full\">\n <p className=\"text-xs text-muted-foreground\">Modify the state value using the JSON editor below.</p>\n <div className=\"space-y-3 pt-2 flex flex-col\">\n <div className=\"relative flex-1\">\n <JsonEditor\n value={jsonValue}\n onChange={handleJsonChange}\n onValidate={setIsValid}\n height={'calc(100vh - 300px)'}\n />\n\n {!isValid && (\n <div className=\"absolute top-2 right-2 bg-destructive/90 text-destructive-foreground px-2 py-1 rounded text-xs flex items-center gap-1\">\n <AlertCircle className=\"w-3 h-3\" />\n Invalid JSON\n </div>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center justify-between pt-2\">\n {statusView}\n\n <div className=\"flex items-center gap-2\">\n {hasChanges && (\n <Button variant=\"secondary\" onClick={resetChanges} disabled={isRequestLoading}>\n Reset\n </Button>\n )}\n\n <Button\n onClick={handleSave}\n variant=\"accent\"\n disabled={isRequestLoading || !isValid || !hasChanges}\n data-testid=\"state-save-button\"\n >\n {isRequestLoading ? (\n <>\n <Loader2 className=\"w-3 h-3 animate-spin mr-1\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"w-3 h-3 mr-1\" />\n Save Changes\n </>\n )}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type React from 'react'\nimport type { StateItem } from '../types/state'\nimport { StateDetails } from './state-details'\nimport { StateEditor } from './state-editor'\n\ntype Props = {\n state: StateItem\n onClose: () => void\n}\n\nexport const StateSidebar: React.FC<Props> = ({ state, onClose }) => {\n return (\n <Sidebar\n onClose={onClose}\n title=\"State Details\"\n initialWidth={500}\n tabs={[\n {\n label: 'Overview',\n content: <StateDetails state={state} />,\n },\n {\n label: 'Editor',\n content: <StateEditor state={state} />,\n },\n ]}\n actions={[{ icon: <X />, onClick: onClose, label: 'Close' }]}\n />\n )\n}\n","import {\n Button,\n Checkbox,\n cn,\n Input,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@motiadev/ui'\nimport { RefreshCw, Search, Trash, X } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { useGetStateItems } from '../hooks/states-hooks'\nimport { useStatesStore } from '../stores/use-states-store'\nimport type { StateItem } from '../types/state'\nimport { StateSidebar } from './state-sidebar'\n\nexport const StatesPage = () => {\n const selectedStateId = useStatesStore((state) => state.selectedStateId)\n const selectStateId = useStatesStore((state) => state.selectStateId)\n const { items, deleteItems, refetch } = useGetStateItems()\n const [search, setSearch] = useState('')\n const filteredItems = useMemo(() => {\n return items.filter((item) => {\n return (\n item.groupId.toLowerCase().includes(search.toLowerCase()) ||\n item.key.toLowerCase().includes(search.toLowerCase())\n )\n })\n }, [items, search])\n const selectedItem = useMemo(\n () => (selectedStateId ? filteredItems.find((item) => `${item.groupId}:${item.key}` === selectedStateId) : null),\n [filteredItems, selectedStateId],\n )\n\n const [checkedItems, setCheckedItems] = useState<Set<string>>(new Set())\n const handleRowClick = (item: StateItem) => selectStateId(`${item.groupId}:${item.key}`)\n const onClose = () => selectStateId(undefined)\n const deleteStates = () => {\n deleteItems(Array.from(checkedItems))\n setCheckedItems(new Set())\n }\n\n const handleCheckboxChange = (item: StateItem) => {\n const isChecked = checkedItems.has(`${item.groupId}:${item.key}`)\n\n setCheckedItems((prev) => {\n const newSet = new Set(prev)\n if (isChecked) {\n newSet.delete(`${item.groupId}:${item.key}`)\n } else {\n newSet.add(`${item.groupId}:${item.key}`)\n }\n return newSet\n })\n }\n\n const toggleSelectAll = (checked: boolean) => {\n setCheckedItems((prev) => {\n const newSet = new Set(prev)\n\n if (checked) {\n filteredItems.forEach((item) => {\n newSet.add(`${item.groupId}:${item.key}`)\n })\n } else {\n filteredItems.forEach((item) => {\n newSet.delete(`${item.groupId}:${item.key}`)\n })\n }\n return newSet\n })\n }\n\n return (\n <>\n {selectedItem && <StateSidebar state={selectedItem} onClose={onClose} />}\n <div className=\"grid grid-rows-[auto_1fr] h-full\" data-testid=\"states-container\">\n <div className=\"flex p-2 border-b gap-2\" data-testid=\"logs-search-container\">\n <div className=\"flex-1 relative\">\n <Input\n variant=\"shade\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Group ID or Key\"\n />\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <X\n className=\"cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground\"\n onClick={() => setSearch('')}\n />\n </div>\n <Button variant=\"default\" className=\"h-[34px]\" disabled={checkedItems.size === 0} onClick={deleteStates}>\n <Trash /> Delete\n </Button>\n <Button variant=\"default\" className=\"h-[34px]\" onClick={refetch}>\n <RefreshCw className=\"w-4 h-4 text-muted-foreground\" />\n </Button>\n </div>\n\n <Table>\n <TableHeader className=\"sticky top-0 bg-background/20 backdrop-blur-sm\">\n <TableRow>\n <TableHead>\n <Checkbox onClick={(evt) => evt.stopPropagation()} onCheckedChange={toggleSelectAll} />\n </TableHead>\n <TableHead className=\"rounded-0\">Group ID</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Type</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredItems.map((item) => (\n <TableRow\n data-testid={`item-${item}`}\n key={`${item.groupId}:${item.key}`}\n onClick={() => handleRowClick(item)}\n className={cn(\n 'font-mono font-semibold cursor-pointer border-0',\n selectedItem === item\n ? 'bg-muted-foreground/10 hover:bg-muted-foreground/20'\n : 'hover:bg-muted-foreground/10',\n )}\n >\n <TableCell onClick={(evt) => evt.stopPropagation()}>\n <Checkbox\n checked={checkedItems.has(`${item.groupId}:${item.key}`)}\n onClick={() => handleCheckboxChange(item)}\n />\n </TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.groupId}</TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.key}</TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.type}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </>\n )\n}\n"],"mappings":"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"}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","names":["error
|
|
1
|
+
{"version":3,"file":"plugin.js","names":["ApiRequest","ApiResponse","FlowContext","MotiaPluginContext","api","motia","registerApi","method","path","req","Promise","groupId","queryParams","filter","JSON","parse","undefined","items","state","status","body","Record","error","Error","message","ctx","key","value","set","id","ids","keyParts","split","join","delete","MotiaPlugin","MotiaPluginContext","api","plugin","motia","workbench","packageName","cssImports","label","position","componentName","labelIcon"],"sources":["../src/api.ts","../src/plugin.ts"],"sourcesContent":["import type { ApiRequest, ApiResponse, FlowContext, MotiaPluginContext } from '@motiadev/core'\n\nexport const api = (motia: MotiaPluginContext): void => {\n motia.registerApi(\n {\n method: 'GET',\n path: '/__motia/state',\n },\n async (req: ApiRequest): Promise<ApiResponse> => {\n try {\n const groupId = req.queryParams.groupId as string | undefined\n const filter = req.queryParams.filter ? JSON.parse(req.queryParams.filter as string) : undefined\n const items = await motia.state.items({ groupId, filter })\n\n return {\n status: 200,\n body: items as unknown as Record<string, unknown>,\n }\n } catch (error: unknown) {\n return {\n status: 500,\n body: { error: error instanceof Error ? error.message : 'Unknown error' },\n }\n }\n },\n )\n\n motia.registerApi(\n {\n method: 'POST',\n path: '/__motia/state',\n },\n async (req: ApiRequest, ctx: FlowContext): Promise<ApiResponse> => {\n try {\n const { key, groupId, value } = req.body as { key: string; groupId: string; value: any }\n await ctx.state.set(groupId, key, value)\n return {\n status: 200,\n body: { key, groupId, value },\n }\n } catch (error: unknown) {\n return {\n status: 500,\n body: { error: error instanceof Error ? error.message : 'Unknown error' },\n }\n }\n },\n )\n\n motia.registerApi(\n {\n method: 'POST',\n path: '/__motia/state/delete',\n },\n async (req: ApiRequest, ctx: FlowContext): Promise<ApiResponse> => {\n try {\n for (const id of (req.body as { ids: string[] }).ids) {\n const [groupId, ...keyParts] = id.split(':')\n const key = keyParts.join(':')\n await ctx.state.delete(groupId, key)\n }\n\n return {\n status: 204,\n body: '',\n }\n } catch (error: unknown) {\n return {\n status: 500,\n body: { error: error instanceof Error ? error.message : 'Unknown error' },\n }\n }\n },\n )\n}\n","import type { MotiaPlugin, MotiaPluginContext } from '@motiadev/core'\nimport { api } from './api'\n\nexport default function plugin(motia: MotiaPluginContext): MotiaPlugin {\n api(motia)\n\n return {\n workbench: [\n {\n packageName: '@motiadev/plugin-states',\n cssImports: ['@motiadev/plugin-states/dist/styles.css'],\n label: 'States',\n position: 'bottom',\n componentName: 'StatesPage',\n labelIcon: 'file',\n },\n ],\n }\n}\n"],"mappings":";AAEA,MAAaI,OAAOC,UAAoC;AACtDA,OAAMC,YACJ;EACEC,QAAQ;EACRC,MAAM;EACP,EACD,OAAOC,QAA0C;AAC/C,MAAI;GACF,MAAME,UAAUF,IAAIG,YAAYD;GAChC,MAAME,SAASJ,IAAIG,YAAYC,SAASC,KAAKC,MAAMN,IAAIG,YAAYC,OAAiB,GAAGG;AAGvF,UAAO;IACLG,QAAQ;IACRC,MAJY,MAAMf,MAAMa,MAAMD,MAAM;KAAEN;KAASE;KAAQ,CAAC;IAKzD;WACMS,OAAgB;AACvB,UAAO;IACLH,QAAQ;IACRC,MAAM,EAAEE,OAAOA,iBAAiBC,QAAQD,MAAME,UAAU,iBAAgB;IACzE;;GAGN;AAEDnB,OAAMC,YACJ;EACEC,QAAQ;EACRC,MAAM;EACP,EACD,OAAOC,KAAiBgB,QAA2C;AACjE,MAAI;GACF,MAAM,EAAEC,KAAKf,SAASgB,UAAUlB,IAAIW;AACpC,SAAMK,IAAIP,MAAMU,IAAIjB,SAASe,KAAKC,MAAM;AACxC,UAAO;IACLR,QAAQ;IACRC,MAAM;KAAEM;KAAKf;KAASgB;KAAM;IAC7B;WACML,OAAgB;AACvB,UAAO;IACLH,QAAQ;IACRC,MAAM,EAAEE,OAAOA,iBAAiBC,QAAQD,MAAME,UAAU,iBAAgB;IACzE;;GAGN;AAEDnB,OAAMC,YACJ;EACEC,QAAQ;EACRC,MAAM;EACP,EACD,OAAOC,KAAiBgB,QAA2C;AACjE,MAAI;AACF,QAAK,MAAMI,MAAOpB,IAAIW,KAA2BU,KAAK;IACpD,MAAM,CAACnB,SAAS,GAAGoB,YAAYF,GAAGG,MAAM,IAAI;IAC5C,MAAMN,MAAMK,SAASE,KAAK,IAAI;AAC9B,UAAMR,IAAIP,MAAMgB,OAAOvB,SAASe,IAAI;;AAGtC,UAAO;IACLP,QAAQ;IACRC,MAAM;IACP;WACME,OAAgB;AACvB,UAAO;IACLH,QAAQ;IACRC,MAAM,EAAEE,OAAOA,iBAAiBC,QAAQD,MAAME,UAAU,iBAAgB;IACzE;;GAGN;;;;;ACtEH,SAAwBc,OAAOC,OAAwC;AACrEF,KAAIE,MAAM;AAEV,QAAO,EACLC,WAAW,CACT;EACEC,aAAa;EACbC,YAAY,CAAC,0CAA0C;EACvDC,OAAO;EACPC,UAAU;EACVC,eAAe;EACfC,WAAW;EACZ,CAAA,EAEJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motiadev/plugin-states",
|
|
3
|
-
"version": "0.17.6-beta.188-
|
|
3
|
+
"version": "0.17.6-beta.188-853774",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"react": "^19.2.3",
|
|
25
|
-
"@motiadev/
|
|
26
|
-
"
|
|
27
|
-
"
|
|
25
|
+
"@motiadev/core": "0.17.6-beta.188-853774",
|
|
26
|
+
"@motiadev/ui": "0.17.6-beta.188-853774",
|
|
27
|
+
"motia": "0.17.6-beta.188-853774"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@bosh-code/tsdown-plugin-inject-css": "^2.0.0",
|