@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 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 [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
- };
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 = ({ state }) => /* @__PURE__ */ jsx(JsonView, {
45
- src: state.value,
46
- theme: "default"
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 = ({ value, height = 300, schema, onChange, onValidate, language = "json", readOnly = false }) => {
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 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: {
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: { enabled: false }
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 = ({ state, onClose }) => {
210
- return /* @__PURE__ */ jsx(Sidebar, {
211
- onClose,
212
- title: "State Details",
213
- initialWidth: 500,
214
- tabs: [{
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
- actions: [{
222
- icon: /* @__PURE__ */ jsx(X, {}),
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 selectedStateId = useStatesStore((state) => state.selectedStateId);
233
- const selectStateId = useStatesStore((state) => state.selectStateId);
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
- const filteredItems = useMemo(() => {
237
- return items.filter((item) => {
238
- return item.groupId.toLowerCase().includes(search.toLowerCase()) || item.key.toLowerCase().includes(search.toLowerCase());
239
- });
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;
256
- });
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}`);
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
- else filteredItems.forEach((item) => {
265
- newSet.delete(`${item.groupId}:${item.key}`);
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
- return newSet;
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
- 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", {
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
- /* @__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
- })
583
+ t13,
584
+ t16,
585
+ t18
310
586
  ]
311
- }), /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, {
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
- /* @__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" })
625
+ t20,
626
+ t21,
627
+ t22,
628
+ t23
324
629
  ] })
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)
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
- /* @__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
- })] });
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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"}
@@ -1 +1 @@
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"}
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-710084",
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/ui": "0.17.6-beta.188-710084",
26
- "motia": "0.17.6-beta.188-710084",
27
- "@motiadev/core": "0.17.6-beta.188-710084"
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",