@motiadev/plugin-states 0.13.2-beta.164-681857 → 0.14.0-beta.165-707935
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.css +968 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +692 -1982
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +6 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +83 -78
- package/dist/plugin.js.map +1 -0
- package/package.json +20 -25
- package/dist/api.d.ts +0 -3
- package/dist/api.d.ts.map +0 -1
- package/dist/components/json-editor.d.ts +0 -13
- package/dist/components/json-editor.d.ts.map +0 -1
- package/dist/components/state-details.d.ts +0 -8
- package/dist/components/state-details.d.ts.map +0 -1
- package/dist/components/state-editor.d.ts +0 -8
- package/dist/components/state-editor.d.ts.map +0 -1
- package/dist/components/state-sidebar.d.ts +0 -9
- package/dist/components/state-sidebar.d.ts.map +0 -1
- package/dist/components/state-tab-label.d.ts +0 -2
- package/dist/components/state-tab-label.d.ts.map +0 -1
- package/dist/components/states-page.d.ts +0 -2
- package/dist/components/states-page.d.ts.map +0 -1
- package/dist/hooks/states-hooks.d.ts +0 -9
- package/dist/hooks/states-hooks.d.ts.map +0 -1
- package/dist/index.cjs +0 -92
- package/dist/plugin-states.css +0 -1
- package/dist/plugin.cjs +0 -1
- package/dist/stores/use-states-store.d.ts +0 -6
- package/dist/stores/use-states-store.d.ts.map +0 -1
- package/dist/types/state.d.ts +0 -7
- package/dist/types/state.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["useCallback","useEffect","useState","StateItem","Output","items","deleteItems","ids","refetch","useGetStateItems","$","_c","t0","Symbol","for","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","t1","value","Editor","useMonaco","useThemeStore","FC","useEffect","useMemo","JsonEditorProps","value","height","schema","Record","onChange","onValidate","isValid","language","readOnly","JsonEditor","t0","$","_c","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","Symbol","for","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","t1","label","content","t2","t3","t4","Symbol","for","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","selectedStateId","_temp","selectStateId","_temp2","items","deleteItems","refetch","search","setSearch","t0","t1","item","groupId","toLowerCase","includes","key","filter","filteredItems","find","item_0","selectedItem","t2","Symbol","for","Set","checkedItems","setCheckedItems","t3","item_1","handleRowClick","t4","undefined","onClose","t5","Array","from","deleteStates","t6","item_2","isChecked","has","prev","newSet","delete","add","handleCheckboxChange","t7","checked","prev_0","newSet_0","forEach","item_3","item_4","toggleSelectAll","t8","t9","e","target","value","t10","t11","t12","t13","t14","size","t15","t16","t17","t18","t19","t20","_temp3","t21","t22","t23","t24","t25","t26","item_5","_temp4","type","map","t27","t28","t29","state","state_0","evt","stopPropagation","evt_0"],"sources":["../src/hooks/states-hooks.ts","../src/stores/use-states-store.ts","../src/components/state-details.tsx","../src/components/json-editor.tsx","../src/components/state-editor.tsx","../src/components/state-sidebar.tsx","../src/components/states-page.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport type { StateItem } from '../types/state'\n\ntype Output = {\n items: StateItem[]\n deleteItems: (ids: string[]) => void\n refetch: () => void\n}\n\nexport const useGetStateItems = (): Output => {\n const [items, setItems] = useState<StateItem[]>([])\n\n const refetch = useCallback(() => {\n fetch('/__motia/state')\n .then(async (res) => {\n if (res.ok) {\n return res.json()\n } else {\n throw await res.json()\n }\n })\n .then(setItems)\n .catch((err) => console.error(err))\n }, [])\n\n const deleteItems = (ids: string[]) => {\n fetch('/__motia/state/delete', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ ids }),\n }).then(() => refetch())\n }\n\n useEffect(() => {\n refetch()\n }, [refetch])\n\n return { items, deleteItems, refetch }\n}\n","import { create } from 'zustand'\n\nexport type StatesState = {\n selectedStateId?: string\n selectStateId: (stateId?: string) => void\n}\n\nexport const useStatesStore = create<StatesState>()((set) => ({\n selectedStateId: undefined,\n selectStateId: (stateId) => set({ selectedStateId: stateId }),\n}))\n","import type React from 'react'\nimport JsonView from 'react18-json-view'\nimport type { StateItem } from '../types/state'\n\ntype Props = {\n state: StateItem\n}\n\nexport const StateDetails: React.FC<Props> = ({ state }) => <JsonView src={state.value} theme=\"default\" />\n","import Editor, { useMonaco } from '@monaco-editor/react'\nimport { useThemeStore } from '@motiadev/ui'\nimport { type FC, useEffect, useMemo } from 'react'\n\ntype JsonEditorProps = {\n value: string\n height?: number | string\n schema?: Record<string, unknown>\n onChange?: (value: string) => void\n onValidate?: (isValid: boolean) => void\n language?: string\n readOnly?: boolean\n}\n\nexport const JsonEditor: FC<JsonEditorProps> = ({\n value,\n height = 300,\n schema,\n onChange,\n onValidate,\n language = 'json',\n readOnly = false,\n}) => {\n const monaco = useMonaco()\n const theme = useThemeStore((state) => state.theme)\n const editorTheme = useMemo(() => (theme === 'dark' ? 'vs-dark' : 'light'), [theme])\n\n useEffect(() => {\n if (!monaco) return\n\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ isolatedModules: true })\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n schemas: schema\n ? [\n {\n uri: window.location.href,\n fileMatch: ['*'],\n schema,\n },\n ]\n : [],\n })\n }, [monaco, schema, language])\n\n return (\n <Editor\n data-testid=\"json-editor\"\n height={height}\n language={language}\n value={value}\n theme={editorTheme}\n onChange={(value) => {\n if (!value) {\n onValidate?.(false)\n }\n onChange?.(value ?? '')\n }}\n onValidate={(markers) => onValidate?.(markers.length === 0)}\n options={{\n readOnly,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n }}\n />\n )\n}\n","import { Button } from '@motiadev/ui'\nimport { AlertCircle, Check, Loader2, Save } from 'lucide-react'\nimport type React from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { StateItem } from '../types/state'\nimport { JsonEditor } from './json-editor'\n\ntype Props = {\n state: StateItem\n}\n\nexport const StateEditor: React.FC<Props> = ({ state }) => {\n const [isRequestLoading, setIsRequestLoading] = useState(false)\n const [isValid, setIsValid] = useState(true)\n const [jsonValue, setJsonValue] = useState(JSON.stringify(state.value, null, 2))\n const [hasChanges, setHasChanges] = useState(false)\n const [saveStatus, setSaveStatus] = useState<'idle' | 'success' | 'error'>('idle')\n const lastSavedValue = useRef(JSON.stringify(state.value, null, 2))\n useEffect(() => {\n setJsonValue(JSON.stringify(state.value, null, 2))\n }, [state.value])\n\n const handleJsonChange = useCallback((value: string) => {\n setHasChanges(value !== lastSavedValue.current)\n setJsonValue(value)\n setSaveStatus('idle')\n }, [])\n\n const handleSave = async () => {\n if (!isValid || !hasChanges) return\n\n try {\n setIsRequestLoading(true)\n setSaveStatus('idle')\n\n const response = await fetch('/__motia/state', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: state.key,\n groupId: state.groupId,\n value: JSON.parse(jsonValue),\n }),\n })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n lastSavedValue.current = jsonValue\n setSaveStatus('success')\n setHasChanges(false)\n\n setTimeout(() => {\n setSaveStatus('idle')\n }, 3000)\n } catch (error) {\n console.error('Failed to save state:', error)\n setSaveStatus('error')\n } finally {\n setIsRequestLoading(false)\n }\n }\n\n const resetChanges = useCallback(() => {\n setJsonValue(JSON.stringify(state.value, null, 2))\n setHasChanges(false)\n setSaveStatus('idle')\n }, [state.value])\n\n const statusView = useMemo(() => {\n if (saveStatus === 'success') {\n return (\n <div className=\"bg-green-50 dark:bg-green-950/20 border border-green-200 dark:border-green-800 rounded-lg p-2\">\n <div className=\"flex items-center gap-2 text-green-700 dark:text-green-400 text-sm\">\n <Check className=\"w-4 h-4\" />\n State saved successfully!\n </div>\n </div>\n )\n }\n\n if (saveStatus === 'error') {\n return (\n <div className=\"bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-800 rounded-lg p-2\">\n <div className=\"flex items-center gap-2 text-red-700 dark:text-red-400 text-sm\">\n <AlertCircle className=\"w-4 h-4\" />\n Failed to save state. Please try again.\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"text-xs text-muted-foreground\">\n {hasChanges ? (\n <span className=\"flex items-center gap-1\">\n <div className=\"w-2 h-2 bg-orange-500 rounded-full\"></div>\n Unsaved changes\n </span>\n ) : (\n <span className=\"flex items-center gap-1\">\n <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\n Up to date\n </span>\n )}\n </div>\n )\n }, [saveStatus, hasChanges])\n\n return (\n <div className=\"flex flex-col gap-2 h-full\">\n <p className=\"text-xs text-muted-foreground\">Modify the state value using the JSON editor below.</p>\n <div className=\"space-y-3 pt-2 flex flex-col\">\n <div className=\"relative flex-1\">\n <JsonEditor\n value={jsonValue}\n onChange={handleJsonChange}\n onValidate={setIsValid}\n height={'calc(100vh - 300px)'}\n />\n\n {!isValid && (\n <div className=\"absolute top-2 right-2 bg-destructive/90 text-destructive-foreground px-2 py-1 rounded text-xs flex items-center gap-1\">\n <AlertCircle className=\"w-3 h-3\" />\n Invalid JSON\n </div>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center justify-between pt-2\">\n {statusView}\n\n <div className=\"flex items-center gap-2\">\n {hasChanges && (\n <Button variant=\"secondary\" onClick={resetChanges} disabled={isRequestLoading}>\n Reset\n </Button>\n )}\n\n <Button\n onClick={handleSave}\n variant=\"accent\"\n disabled={isRequestLoading || !isValid || !hasChanges}\n data-testid=\"state-save-button\"\n >\n {isRequestLoading ? (\n <>\n <Loader2 className=\"w-3 h-3 animate-spin mr-1\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"w-3 h-3 mr-1\" />\n Save Changes\n </>\n )}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { Sidebar } from '@motiadev/ui'\nimport { X } from 'lucide-react'\nimport type React from 'react'\nimport type { StateItem } from '../types/state'\nimport { StateDetails } from './state-details'\nimport { StateEditor } from './state-editor'\n\ntype Props = {\n state: StateItem\n onClose: () => void\n}\n\nexport const StateSidebar: React.FC<Props> = ({ state, onClose }) => {\n return (\n <Sidebar\n onClose={onClose}\n title=\"State Details\"\n initialWidth={500}\n tabs={[\n {\n label: 'Overview',\n content: <StateDetails state={state} />,\n },\n {\n label: 'Editor',\n content: <StateEditor state={state} />,\n },\n ]}\n actions={[{ icon: <X />, onClick: onClose, label: 'Close' }]}\n />\n )\n}\n","import {\n Button,\n Checkbox,\n cn,\n Input,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@motiadev/ui'\nimport { RefreshCw, Search, Trash, X } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { useGetStateItems } from '../hooks/states-hooks'\nimport { useStatesStore } from '../stores/use-states-store'\nimport type { StateItem } from '../types/state'\nimport { StateSidebar } from './state-sidebar'\n\nexport const StatesPage = () => {\n const selectedStateId = useStatesStore((state) => state.selectedStateId)\n const selectStateId = useStatesStore((state) => state.selectStateId)\n const { items, deleteItems, refetch } = useGetStateItems()\n const [search, setSearch] = useState('')\n const filteredItems = useMemo(() => {\n return items.filter((item) => {\n return (\n item.groupId.toLowerCase().includes(search.toLowerCase()) ||\n item.key.toLowerCase().includes(search.toLowerCase())\n )\n })\n }, [items, search])\n const selectedItem = useMemo(\n () => (selectedStateId ? filteredItems.find((item) => `${item.groupId}:${item.key}` === selectedStateId) : null),\n [filteredItems, selectedStateId],\n )\n\n const [checkedItems, setCheckedItems] = useState<Set<string>>(new Set())\n const handleRowClick = (item: StateItem) => selectStateId(`${item.groupId}:${item.key}`)\n const onClose = () => selectStateId(undefined)\n const deleteStates = () => {\n deleteItems(Array.from(checkedItems))\n setCheckedItems(new Set())\n }\n\n const handleCheckboxChange = (item: StateItem) => {\n const isChecked = checkedItems.has(`${item.groupId}:${item.key}`)\n\n setCheckedItems((prev) => {\n const newSet = new Set(prev)\n if (isChecked) {\n newSet.delete(`${item.groupId}:${item.key}`)\n } else {\n newSet.add(`${item.groupId}:${item.key}`)\n }\n return newSet\n })\n }\n\n const toggleSelectAll = (checked: boolean) => {\n setCheckedItems((prev) => {\n const newSet = new Set(prev)\n\n if (checked) {\n filteredItems.forEach((item) => {\n newSet.add(`${item.groupId}:${item.key}`)\n })\n } else {\n filteredItems.forEach((item) => {\n newSet.delete(`${item.groupId}:${item.key}`)\n })\n }\n return newSet\n })\n }\n\n return (\n <>\n {selectedItem && <StateSidebar state={selectedItem} onClose={onClose} />}\n <div className=\"grid grid-rows-[auto_1fr] h-full\" data-testid=\"states-container\">\n <div className=\"flex p-2 border-b gap-2\" data-testid=\"logs-search-container\">\n <div className=\"flex-1 relative\">\n <Input\n variant=\"shade\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"px-9! font-medium\"\n placeholder=\"Search by Group ID or Key\"\n />\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50\" />\n <X\n className=\"cursor-pointer absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground/50 hover:text-muted-foreground\"\n onClick={() => setSearch('')}\n />\n </div>\n <Button variant=\"default\" className=\"h-[34px]\" disabled={checkedItems.size === 0} onClick={deleteStates}>\n <Trash /> Delete\n </Button>\n <Button variant=\"default\" className=\"h-[34px]\" onClick={refetch}>\n <RefreshCw className=\"w-4 h-4 text-muted-foreground\" />\n </Button>\n </div>\n\n <Table>\n <TableHeader className=\"sticky top-0 bg-background/20 backdrop-blur-sm\">\n <TableRow>\n <TableHead>\n <Checkbox onClick={(evt) => evt.stopPropagation()} onCheckedChange={toggleSelectAll} />\n </TableHead>\n <TableHead className=\"rounded-0\">Group ID</TableHead>\n <TableHead>Key</TableHead>\n <TableHead>Type</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredItems.map((item) => (\n <TableRow\n data-testid={`item-${item}`}\n key={`${item.groupId}:${item.key}`}\n onClick={() => handleRowClick(item)}\n className={cn(\n 'font-mono font-semibold cursor-pointer border-0',\n selectedItem === item\n ? 'bg-muted-foreground/10 hover:bg-muted-foreground/20'\n : 'hover:bg-muted-foreground/10',\n )}\n >\n <TableCell onClick={(evt) => evt.stopPropagation()}>\n <Checkbox\n checked={checkedItems.has(`${item.groupId}:${item.key}`)}\n onClick={() => handleCheckboxChange(item)}\n />\n </TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.groupId}</TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.key}</TableCell>\n <TableCell className=\"hover:bg-transparent\">{item.type}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </>\n )\n}\n"],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import { MotiaPlugin, MotiaPluginContext } from
|
|
2
|
-
|
|
1
|
+
import { MotiaPlugin, MotiaPluginContext } from "@motiadev/core";
|
|
2
|
+
|
|
3
|
+
//#region src/plugin.d.ts
|
|
4
|
+
declare function plugin(motia: MotiaPluginContext): MotiaPlugin;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { plugin as default };
|
|
3
7
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","names":[],"sources":["../src/plugin.ts"],"sourcesContent":[],"mappings":";;;iBAGwB,MAAA,QAAc,qBAAqB"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,80 +1,85 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
1
|
+
//#region src/api.ts
|
|
2
|
+
const api = (motia) => {
|
|
3
|
+
motia.registerApi({
|
|
4
|
+
method: "GET",
|
|
5
|
+
path: "/__motia/state"
|
|
6
|
+
}, async (req) => {
|
|
7
|
+
try {
|
|
8
|
+
const groupId = req.queryParams.groupId;
|
|
9
|
+
const filter = req.queryParams.filter ? JSON.parse(req.queryParams.filter) : void 0;
|
|
10
|
+
return {
|
|
11
|
+
status: 200,
|
|
12
|
+
body: await motia.state.items({
|
|
13
|
+
groupId,
|
|
14
|
+
filter
|
|
15
|
+
})
|
|
16
|
+
};
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return {
|
|
19
|
+
status: 500,
|
|
20
|
+
body: { error: error instanceof Error ? error.message : "Unknown error" }
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
motia.registerApi({
|
|
25
|
+
method: "POST",
|
|
26
|
+
path: "/__motia/state"
|
|
27
|
+
}, async (req, ctx) => {
|
|
28
|
+
try {
|
|
29
|
+
const { key, groupId, value } = req.body;
|
|
30
|
+
await ctx.state.set(groupId, key, value);
|
|
31
|
+
return {
|
|
32
|
+
status: 200,
|
|
33
|
+
body: {
|
|
34
|
+
key,
|
|
35
|
+
groupId,
|
|
36
|
+
value
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return {
|
|
41
|
+
status: 500,
|
|
42
|
+
body: { error: error instanceof Error ? error.message : "Unknown error" }
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
motia.registerApi({
|
|
47
|
+
method: "POST",
|
|
48
|
+
path: "/__motia/state/delete"
|
|
49
|
+
}, async (req, ctx) => {
|
|
50
|
+
try {
|
|
51
|
+
for (const id of req.body.ids) {
|
|
52
|
+
const [groupId, ...keyParts] = id.split(":");
|
|
53
|
+
const key = keyParts.join(":");
|
|
54
|
+
await ctx.state.delete(groupId, key);
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
status: 204,
|
|
58
|
+
body: ""
|
|
59
|
+
};
|
|
60
|
+
} catch (error) {
|
|
61
|
+
return {
|
|
62
|
+
status: 500,
|
|
63
|
+
body: { error: error instanceof Error ? error.message : "Unknown error" }
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
});
|
|
63
67
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/plugin.ts
|
|
71
|
+
function plugin(motia) {
|
|
72
|
+
api(motia);
|
|
73
|
+
return { workbench: [{
|
|
74
|
+
packageName: "@motiadev/plugin-states",
|
|
75
|
+
cssImports: ["@motiadev/plugin-states/dist/index.css"],
|
|
76
|
+
label: "States",
|
|
77
|
+
position: "bottom",
|
|
78
|
+
componentName: "StatesPage",
|
|
79
|
+
labelIcon: "file"
|
|
80
|
+
}] };
|
|
77
81
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
};
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
export { plugin as default };
|
|
85
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +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/index.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,yCAAyC;EACtDC,OAAO;EACPC,UAAU;EACVC,eAAe;EACfC,WAAW;EACZ,CAAA,EAEJ"}
|
package/package.json
CHANGED
|
@@ -1,51 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motiadev/plugin-states",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0-beta.165-707935",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
|
-
".":
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"require": "./dist/index.cjs"
|
|
13
|
-
},
|
|
14
|
-
"./plugin": {
|
|
15
|
-
"types": "./dist/plugin.d.ts",
|
|
16
|
-
"import": "./dist/plugin.js",
|
|
17
|
-
"require": "./dist/plugin.cjs"
|
|
18
|
-
},
|
|
19
|
-
"./styles.css": "./dist/plugin-states.css"
|
|
9
|
+
".": "./dist/index.js",
|
|
10
|
+
"./plugin": "./dist/plugin.js",
|
|
11
|
+
"./package.json": "./package.json"
|
|
20
12
|
},
|
|
21
13
|
"files": [
|
|
22
14
|
"dist"
|
|
23
15
|
],
|
|
24
16
|
"dependencies": {
|
|
25
17
|
"@monaco-editor/react": "^4.7.0",
|
|
26
|
-
"lucide-react": "^0.
|
|
18
|
+
"lucide-react": "^0.555.0",
|
|
27
19
|
"react18-json-view": "^0.2.9",
|
|
28
20
|
"zustand": "^5.0.8"
|
|
29
21
|
},
|
|
30
22
|
"peerDependencies": {
|
|
31
|
-
"@motiadev/
|
|
32
|
-
"@motiadev/
|
|
33
|
-
"@motiadev/ui": "0.13.2-beta.164-681857"
|
|
23
|
+
"@motiadev/core": "0.14.0-beta.165-707935",
|
|
24
|
+
"@motiadev/ui": "0.14.0-beta.165-707935"
|
|
34
25
|
},
|
|
35
26
|
"devDependencies": {
|
|
36
|
-
"@
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
27
|
+
"@bosh-code/tsdown-plugin-inject-css": "^2.0.0",
|
|
28
|
+
"@bosh-code/tsdown-plugin-tailwindcss": "^1.0.1",
|
|
29
|
+
"@rollup/plugin-babel": "^6.1.0",
|
|
30
|
+
"@tailwindcss/postcss": "^4.1.17",
|
|
31
|
+
"@types/node": "^24.10.1",
|
|
32
|
+
"@types/react": "^19.2.7",
|
|
33
|
+
"babel-plugin-react-compiler": "^1.0.0",
|
|
34
|
+
"publint": "^0.3.15",
|
|
40
35
|
"react": "^19.2.0",
|
|
41
|
-
"tailwindcss": "^4.1.
|
|
36
|
+
"tailwindcss": "^4.1.17",
|
|
37
|
+
"tsdown": "^0.16.8",
|
|
42
38
|
"typescript": "^5.9.3",
|
|
43
|
-
"
|
|
44
|
-
"vite-plugin-dts": "^4.5.4"
|
|
39
|
+
"unplugin-unused": "^0.5.6"
|
|
45
40
|
},
|
|
46
41
|
"scripts": {
|
|
47
|
-
"build": "
|
|
48
|
-
"dev": "
|
|
42
|
+
"build": "tsdown",
|
|
43
|
+
"dev": "tsdown --watch",
|
|
49
44
|
"clean": "rm -rf dist"
|
|
50
45
|
}
|
|
51
46
|
}
|
package/dist/api.d.ts
DELETED
package/dist/api.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwC,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAE9F,eAAO,MAAM,GAAG,GAAI,OAAO,kBAAkB,KAAG,IAwE/C,CAAA"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
type JsonEditorProps = {
|
|
3
|
-
value: string;
|
|
4
|
-
height?: number | string;
|
|
5
|
-
schema?: Record<string, unknown>;
|
|
6
|
-
onChange?: (value: string) => void;
|
|
7
|
-
onValidate?: (isValid: boolean) => void;
|
|
8
|
-
language?: string;
|
|
9
|
-
readOnly?: boolean;
|
|
10
|
-
};
|
|
11
|
-
export declare const JsonEditor: FC<JsonEditorProps>;
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=json-editor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-editor.d.ts","sourceRoot":"","sources":["../../src/components/json-editor.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,EAAsB,MAAM,OAAO,CAAA;AAEnD,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAmD1C,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-details.d.ts","sourceRoot":"","sources":["../../src/components/state-details.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAiE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-editor.d.ts","sourceRoot":"","sources":["../../src/components/state-editor.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0JvC,CAAA"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
import { StateItem } from '../types/state';
|
|
3
|
-
type Props = {
|
|
4
|
-
state: StateItem;
|
|
5
|
-
onClose: () => void;
|
|
6
|
-
};
|
|
7
|
-
export declare const StateSidebar: React.FC<Props>;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=state-sidebar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-sidebar.d.ts","sourceRoot":"","sources":["../../src/components/state-sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI/C,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAmBxC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-tab-label.d.ts","sourceRoot":"","sources":["../../src/components/state-tab-label.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,oFAKzB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"states-page.d.ts","sourceRoot":"","sources":["../../src/components/states-page.tsx"],"names":[],"mappings":"AAsBA,eAAO,MAAM,UAAU,+CAwHtB,CAAA"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { StateItem } from '../types/state';
|
|
2
|
-
type Output = {
|
|
3
|
-
items: StateItem[];
|
|
4
|
-
deleteItems: (ids: string[]) => void;
|
|
5
|
-
refetch: () => void;
|
|
6
|
-
};
|
|
7
|
-
export declare const useGetStateItems: () => Output;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=states-hooks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"states-hooks.d.ts","sourceRoot":"","sources":["../../src/hooks/states-hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACpC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,MA6BnC,CAAA"}
|