@motiadev/plugin-states 0.17.6-beta.188-583581 → 0.17.6-beta.188-710084

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 CHANGED
@@ -1,4 +1,3 @@
1
- import { c } from "react/compiler-runtime";
2
1
  import { Button, Checkbox, Input, Sidebar, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, cn, useThemeStore } from "@motiadev/ui";
3
2
  import { AlertCircle, Check, Loader2, RefreshCw, Save, Search, Trash, X } from "lucide-react";
4
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -9,70 +8,29 @@ import Editor, { useMonaco } from "@monaco-editor/react";
9
8
 
10
9
  //#region src/hooks/states-hooks.ts
11
10
  const useGetStateItems = () => {
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;
11
+ const [items, setItems] = useState([]);
12
+ const refetch = useCallback(() => {
13
+ fetch("/__motia/state").then(async (res) => {
14
+ if (res.ok) return res.json();
15
+ else throw await res.json();
16
+ }).then(setItems).catch((err) => console.error(err));
17
+ }, []);
18
+ const deleteItems = (ids) => {
19
+ fetch("/__motia/state/delete", {
20
+ method: "POST",
21
+ headers: { "Content-Type": "application/json" },
22
+ body: JSON.stringify({ ids })
23
+ }).then(() => refetch());
24
+ };
25
+ useEffect(() => {
26
+ refetch();
27
+ }, [refetch]);
28
+ return {
29
+ items,
30
+ deleteItems,
31
+ refetch
32
+ };
68
33
  };
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
- }
76
34
 
77
35
  //#endregion
78
36
  //#region src/stores/use-states-store.ts
@@ -83,124 +41,48 @@ const useStatesStore = create()((set) => ({
83
41
 
84
42
  //#endregion
85
43
  //#region src/components/state-details.tsx
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
- };
44
+ const StateDetails = ({ state }) => /* @__PURE__ */ jsx(JsonView, {
45
+ src: state.value,
46
+ theme: "default"
47
+ });
104
48
 
105
49
  //#endregion
106
50
  //#region src/components/json-editor.tsx
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;
51
+ const JsonEditor = ({ value, height = 300, schema, onChange, onValidate, language = "json", readOnly = false }) => {
117
52
  const monaco = useMonaco();
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 = {
53
+ const theme = useThemeStore((state) => state.theme);
54
+ const editorTheme = useMemo(() => theme === "dark" ? "vs-dark" : "light", [theme]);
55
+ useEffect(() => {
56
+ if (!monaco) return;
57
+ monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true });
58
+ monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ schemas: schema ? [{
59
+ uri: window.location.href,
60
+ fileMatch: ["*"],
61
+ schema
62
+ }] : [] });
63
+ }, [
64
+ monaco,
65
+ schema,
66
+ language
67
+ ]);
68
+ return /* @__PURE__ */ jsx(Editor, {
69
+ "data-testid": "json-editor",
70
+ height,
71
+ language,
72
+ value,
73
+ theme: editorTheme,
74
+ onChange: (value$1) => {
75
+ if (!value$1) onValidate?.(false);
76
+ onChange?.(value$1 ?? "");
77
+ },
78
+ onValidate: (markers) => onValidate?.(markers.length === 0),
79
+ options: {
171
80
  readOnly,
172
81
  scrollBeyondLastLine: false,
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;
82
+ minimap: { enabled: false }
83
+ }
84
+ });
200
85
  };
201
- function _temp$1(state) {
202
- return state.theme;
203
- }
204
86
 
205
87
  //#endregion
206
88
  //#region src/components/state-editor.tsx
@@ -324,402 +206,150 @@ const StateEditor = ({ state }) => {
324
206
 
325
207
  //#endregion
326
208
  //#region src/components/state-sidebar.tsx
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 = {
209
+ const StateSidebar = ({ state, onClose }) => {
210
+ return /* @__PURE__ */ jsx(Sidebar, {
211
+ onClose,
212
+ title: "State Details",
213
+ initialWidth: 500,
214
+ tabs: [{
337
215
  label: "Overview",
338
216
  content: /* @__PURE__ */ jsx(StateDetails, { state })
339
- };
340
- $[1] = state;
341
- $[2] = t1;
342
- } else t1 = $[2];
343
- let t2;
344
- if ($[3] !== state) {
345
- t2 = {
217
+ }, {
346
218
  label: "Editor",
347
219
  content: /* @__PURE__ */ jsx(StateEditor, { state })
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,
220
+ }],
221
+ actions: [{
222
+ icon: /* @__PURE__ */ jsx(X, {}),
368
223
  onClick: onClose,
369
224
  label: "Close"
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;
225
+ }]
226
+ });
389
227
  };
390
228
 
391
229
  //#endregion
392
230
  //#region src/components/states-page.tsx
393
231
  const StatesPage = () => {
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);
232
+ const selectedStateId = useStatesStore((state) => state.selectedStateId);
233
+ const selectStateId = useStatesStore((state) => state.selectStateId);
401
234
  const { items, deleteItems, refetch } = useGetStateItems();
402
235
  const [search, setSearch] = useState("");
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;
465
- });
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;
483
- });
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
494
- });
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("")
236
+ const filteredItems = useMemo(() => {
237
+ return items.filter((item) => {
238
+ return item.groupId.toLowerCase().includes(search.toLowerCase()) || item.key.toLowerCase().includes(search.toLowerCase());
526
239
  });
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"]
240
+ }, [items, search]);
241
+ const selectedItem = useMemo(() => selectedStateId ? filteredItems.find((item) => `${item.groupId}:${item.key}` === selectedStateId) : null, [filteredItems, selectedStateId]);
242
+ const [checkedItems, setCheckedItems] = useState(/* @__PURE__ */ new Set());
243
+ const handleRowClick = (item) => selectStateId(`${item.groupId}:${item.key}`);
244
+ const onClose = () => selectStateId(void 0);
245
+ const deleteStates = () => {
246
+ deleteItems(Array.from(checkedItems));
247
+ setCheckedItems(/* @__PURE__ */ new Set());
248
+ };
249
+ const handleCheckboxChange = (item) => {
250
+ const isChecked = checkedItems.has(`${item.groupId}:${item.key}`);
251
+ setCheckedItems((prev) => {
252
+ const newSet = new Set(prev);
253
+ if (isChecked) newSet.delete(`${item.groupId}:${item.key}`);
254
+ else newSet.add(`${item.groupId}:${item.key}`);
255
+ return newSet;
556
256
  });
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
257
+ };
258
+ const toggleSelectAll = (checked) => {
259
+ setCheckedItems((prev) => {
260
+ const newSet = new Set(prev);
261
+ if (checked) filteredItems.forEach((item) => {
262
+ newSet.add(`${item.groupId}:${item.key}`);
263
+ });
264
+ else filteredItems.forEach((item) => {
265
+ newSet.delete(`${item.groupId}:${item.key}`);
266
+ });
267
+ return newSet;
573
268
  });
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", {
269
+ };
270
+ return /* @__PURE__ */ jsxs(Fragment, { children: [selectedItem && /* @__PURE__ */ jsx(StateSidebar, {
271
+ state: selectedItem,
272
+ onClose
273
+ }), /* @__PURE__ */ jsxs("div", {
274
+ className: "grid grid-rows-[auto_1fr] h-full",
275
+ "data-testid": "states-container",
276
+ children: [/* @__PURE__ */ jsxs("div", {
580
277
  className: "flex p-2 border-b gap-2",
581
278
  "data-testid": "logs-search-container",
582
279
  children: [
583
- t13,
584
- t16,
585
- t18
280
+ /* @__PURE__ */ jsxs("div", {
281
+ className: "flex-1 relative",
282
+ children: [
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
+ })
586
310
  ]
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, {
311
+ }), /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, {
623
312
  className: "sticky top-0 bg-background/20 backdrop-blur-sm",
624
313
  children: /* @__PURE__ */ jsxs(TableRow, { children: [
625
- t20,
626
- t21,
627
- t22,
628
- t23
314
+ /* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsx(Checkbox, {
315
+ onClick: (evt) => evt.stopPropagation(),
316
+ onCheckedChange: toggleSelectAll
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" })
629
324
  ] })
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
325
+ }), /* @__PURE__ */ jsx(TableBody, { children: filteredItems.map((item) => /* @__PURE__ */ jsxs(TableRow, {
326
+ "data-testid": `item-${item}`,
327
+ onClick: () => handleRowClick(item),
328
+ className: cn("font-mono font-semibold cursor-pointer border-0", selectedItem === item ? "bg-muted-foreground/10 hover:bg-muted-foreground/20" : "hover:bg-muted-foreground/10"),
329
+ children: [
330
+ /* @__PURE__ */ jsx(TableCell, {
331
+ onClick: (evt) => evt.stopPropagation(),
332
+ children: /* @__PURE__ */ jsx(Checkbox, {
333
+ checked: checkedItems.has(`${item.groupId}:${item.key}`),
334
+ onClick: () => handleCheckboxChange(item)
661
335
  })
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;
336
+ }),
337
+ /* @__PURE__ */ jsx(TableCell, {
338
+ className: "hover:bg-transparent",
339
+ children: item.groupId
340
+ }),
341
+ /* @__PURE__ */ jsx(TableCell, {
342
+ className: "hover:bg-transparent",
343
+ children: item.key
344
+ }),
345
+ /* @__PURE__ */ jsx(TableCell, {
346
+ className: "hover:bg-transparent",
347
+ children: item.type
348
+ })
349
+ ]
350
+ }, `${item.groupId}:${item.key}`)) })] })]
351
+ })] });
710
352
  };
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
- }
723
353
 
724
354
  //#endregion
725
355
  export { StatesPage };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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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"}
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 +1 @@
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"}
1
+ {"version":3,"file":"plugin.js","names":["error: unknown"],"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,MAAa,OAAO,UAAoC;AACtD,OAAM,YACJ;EACE,QAAQ;EACR,MAAM;EACP,EACD,OAAO,QAA0C;AAC/C,MAAI;GACF,MAAM,UAAU,IAAI,YAAY;GAChC,MAAM,SAAS,IAAI,YAAY,SAAS,KAAK,MAAM,IAAI,YAAY,OAAiB,GAAG;AAGvF,UAAO;IACL,QAAQ;IACR,MAJY,MAAM,MAAM,MAAM,MAAM;KAAE;KAAS;KAAQ,CAAC;IAKzD;WACMA,OAAgB;AACvB,UAAO;IACL,QAAQ;IACR,MAAM,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,iBAAiB;IAC1E;;GAGN;AAED,OAAM,YACJ;EACE,QAAQ;EACR,MAAM;EACP,EACD,OAAO,KAAiB,QAA2C;AACjE,MAAI;GACF,MAAM,EAAE,KAAK,SAAS,UAAU,IAAI;AACpC,SAAM,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM;AACxC,UAAO;IACL,QAAQ;IACR,MAAM;KAAE;KAAK;KAAS;KAAO;IAC9B;WACMA,OAAgB;AACvB,UAAO;IACL,QAAQ;IACR,MAAM,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,iBAAiB;IAC1E;;GAGN;AAED,OAAM,YACJ;EACE,QAAQ;EACR,MAAM;EACP,EACD,OAAO,KAAiB,QAA2C;AACjE,MAAI;AACF,QAAK,MAAM,MAAO,IAAI,KAA2B,KAAK;IACpD,MAAM,CAAC,SAAS,GAAG,YAAY,GAAG,MAAM,IAAI;IAC5C,MAAM,MAAM,SAAS,KAAK,IAAI;AAC9B,UAAM,IAAI,MAAM,OAAO,SAAS,IAAI;;AAGtC,UAAO;IACL,QAAQ;IACR,MAAM;IACP;WACMA,OAAgB;AACvB,UAAO;IACL,QAAQ;IACR,MAAM,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,iBAAiB;IAC1E;;GAGN;;;;;ACtEH,SAAwB,OAAO,OAAwC;AACrE,KAAI,MAAM;AAEV,QAAO,EACL,WAAW,CACT;EACE,aAAa;EACb,YAAY,CAAC,0CAA0C;EACvD,OAAO;EACP,UAAU;EACV,eAAe;EACf,WAAW;EACZ,CACF,EACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@motiadev/plugin-states",
3
- "version": "0.17.6-beta.188-583581",
3
+ "version": "0.17.6-beta.188-710084",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -16,14 +16,15 @@
16
16
  "dependencies": {
17
17
  "@monaco-editor/react": "^4.7.0",
18
18
  "lucide-react": "^0.555.0",
19
+ "react": "^19.2.3",
19
20
  "react18-json-view": "^0.2.9",
20
21
  "zustand": "^5.0.8"
21
22
  },
22
23
  "peerDependencies": {
23
24
  "react": "^19.2.3",
24
- "@motiadev/core": "0.17.6-beta.188-583581",
25
- "@motiadev/ui": "0.17.6-beta.188-583581",
26
- "motia": "0.17.6-beta.188-583581"
25
+ "@motiadev/ui": "0.17.6-beta.188-710084",
26
+ "motia": "0.17.6-beta.188-710084",
27
+ "@motiadev/core": "0.17.6-beta.188-710084"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@bosh-code/tsdown-plugin-inject-css": "^2.0.0",