@miadi/stateloom-web 0.1.7 → 0.1.8
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/package.json +1 -1
- package/server/.next/BUILD_ID +1 -1
- package/server/.next/build-manifest.json +2 -2
- package/server/.next/server/app/_global-error.html +2 -2
- package/server/.next/server/app/_global-error.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_not-found.html +1 -1
- package/server/.next/server/app/_not-found.rsc +2 -2
- package/server/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/server/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/server/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/index.html +1 -1
- package/server/.next/server/app/index.rsc +3 -3
- package/server/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/server/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/server/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/server/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/server/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__edbb995c._.js +1 -1
- package/server/.next/server/pages/404.html +1 -1
- package/server/.next/server/pages/500.html +2 -2
- package/server/.next/static/chunks/8f6bd51bbcce6314.css +2 -0
- package/server/.next/static/chunks/{b3f3eb72c25c4c6b.js → a9e7748193d11ed7.js} +4 -4
- package/server/package-lock.json +2 -2
- package/server/package.json +1 -1
- package/server/src/components/erd/ErdWorkspace.tsx +416 -172
- package/server/stateloom-web.json +2 -2
- package/server/tsconfig.tsbuildinfo +1 -1
- package/server/.next/static/chunks/486bc3bc16e91024.css +0 -2
- /package/server/.next/static/{DPL_H0tteH9tpIBvvsIfq → XCT3lnw_1F5LD0GG4F94-}/_buildManifest.js +0 -0
- /package/server/.next/static/{DPL_H0tteH9tpIBvvsIfq → XCT3lnw_1F5LD0GG4F94-}/_clientMiddlewareManifest.json +0 -0
- /package/server/.next/static/{DPL_H0tteH9tpIBvvsIfq → XCT3lnw_1F5LD0GG4F94-}/_ssgManifest.js +0 -0
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
2:I[88287,["/_next/static/chunks/7a768100bec00db1.js"],"default"]
|
|
3
3
|
3:I[74895,["/_next/static/chunks/7a768100bec00db1.js"],"default"]
|
|
4
4
|
4:I[83380,["/_next/static/chunks/7a768100bec00db1.js"],"ClientPageRoot"]
|
|
5
|
-
5:I[63052,["/_next/static/chunks/aea5b1716c68391c.js","/_next/static/chunks/
|
|
5
|
+
5:I[63052,["/_next/static/chunks/aea5b1716c68391c.js","/_next/static/chunks/a9e7748193d11ed7.js"],"default"]
|
|
6
6
|
8:I[51858,["/_next/static/chunks/7a768100bec00db1.js"],"OutletBoundary"]
|
|
7
7
|
9:"$Sreact.suspense"
|
|
8
8
|
b:I[51858,["/_next/static/chunks/7a768100bec00db1.js"],"ViewportBoundary"]
|
|
9
9
|
d:I[51858,["/_next/static/chunks/7a768100bec00db1.js"],"MetadataBoundary"]
|
|
10
10
|
f:I[52576,[],"default"]
|
|
11
|
-
:HL["/_next/static/chunks/
|
|
12
|
-
0:{"P":null,"b":"
|
|
11
|
+
:HL["/_next/static/chunks/8f6bd51bbcce6314.css","style"]
|
|
12
|
+
0:{"P":null,"b":"XCT3lnw_1F5LD0GG4F94-","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/8f6bd51bbcce6314.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"antialiased","children":[["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try{var s=parseFloat(localStorage.getItem(\"stateloom.uiScale.v1\"));if(s>=0.75&&s<=1.75)document.documentElement.style.fontSize=(16*s)+\"px\"}catch(e){}"}}],["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/aea5b1716c68391c.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/a9e7748193d11ed7.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[]],"S":true}
|
|
13
13
|
6:{}
|
|
14
14
|
7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
15
15
|
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, user-scalable=no, interactive-widget=resizes-content"}],["$","meta","2",{"name":"theme-color","content":"#030712"}],["$","meta","3",{"name":"color-scheme","content":"dark"}]]
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[51858,["/_next/static/chunks/7a768100bec00db1.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[49310,["/_next/static/chunks/7a768100bec00db1.js"],"IconMark"]
|
|
6
|
-
0:{"buildId":"
|
|
6
|
+
0:{"buildId":"XCT3lnw_1F5LD0GG4F94-","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, user-scalable=no, interactive-widget=resizes-content"}],["$","meta","2",{"name":"theme-color","content":"#030712"}],["$","meta","3",{"name":"color-scheme","content":"dark"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"SMCraft Designer"}],["$","meta","1",{"name":"description","content":"Visual State Machine Designer"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0b3bf435.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],null]}],"loading":null,"isPartial":false}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[88287,["/_next/static/chunks/7a768100bec00db1.js"],"default"]
|
|
3
3
|
3:I[74895,["/_next/static/chunks/7a768100bec00db1.js"],"default"]
|
|
4
|
-
:HL["/_next/static/chunks/
|
|
5
|
-
0:{"buildId":"
|
|
4
|
+
:HL["/_next/static/chunks/8f6bd51bbcce6314.css","style"]
|
|
5
|
+
0:{"buildId":"XCT3lnw_1F5LD0GG4F94-","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/8f6bd51bbcce6314.css","precedence":"next"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"antialiased","children":[["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try{var s=parseFloat(localStorage.getItem(\"stateloom.uiScale.v1\"));if(s>=0.75&&s<=1.75)document.documentElement.style.fontSize=(16*s)+\"px\"}catch(e){}"}}],["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]]}]}]]}],"loading":null,"isPartial":false}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
:HL["/_next/static/chunks/
|
|
2
|
-
0:{"buildId":"
|
|
1
|
+
:HL["/_next/static/chunks/8f6bd51bbcce6314.css","style"]
|
|
2
|
+
0:{"buildId":"XCT3lnw_1F5LD0GG4F94-","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
|
2
|
-
globalThis.__RSC_MANIFEST["/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js <module evaluation>":{"id":88287,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js":{"id":88287,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js <module evaluation>":{"id":74895,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74895,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js <module evaluation>":{"id":83380,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js":{"id":83380,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js <module evaluation>":{"id":8719,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js":{"id":8719,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":24163,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":24163,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js <module evaluation>":{"id":49310,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":49310,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js <module evaluation>":{"id":51858,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":51858,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js <module evaluation>":{"id":52576,"name":"*","chunks":[],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js":{"id":52576,"name":"*","chunks":[],"async":false},"[project]/web/src/app/page.tsx <module evaluation>":{"id":63052,"name":"*","chunks":["/_next/static/chunks/aea5b1716c68391c.js","/_next/static/chunks/
|
|
2
|
+
globalThis.__RSC_MANIFEST["/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js <module evaluation>":{"id":88287,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js":{"id":88287,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js <module evaluation>":{"id":74895,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74895,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js <module evaluation>":{"id":83380,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js":{"id":83380,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js <module evaluation>":{"id":8719,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js":{"id":8719,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":24163,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":24163,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js <module evaluation>":{"id":49310,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":49310,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js <module evaluation>":{"id":51858,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":51858,"name":"*","chunks":["/_next/static/chunks/7a768100bec00db1.js"],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js <module evaluation>":{"id":52576,"name":"*","chunks":[],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js":{"id":52576,"name":"*","chunks":[],"async":false},"[project]/web/src/app/page.tsx <module evaluation>":{"id":63052,"name":"*","chunks":["/_next/static/chunks/aea5b1716c68391c.js","/_next/static/chunks/a9e7748193d11ed7.js"],"async":false},"[project]/web/src/app/page.tsx":{"id":63052,"name":"*","chunks":["/_next/static/chunks/aea5b1716c68391c.js","/_next/static/chunks/a9e7748193d11ed7.js"],"async":false}},"ssrModuleMapping":{"88287":{"*":{"id":47492,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"74895":{"*":{"id":14433,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"83380":{"*":{"id":24449,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"8719":{"*":{"id":54833,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"24163":{"*":{"id":13588,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"49310":{"*":{"id":13578,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"51858":{"*":{"id":33121,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__385c85a7._.js","server/chunks/ssr/2374f_next_dist_0c464f98._.js"],"async":false}},"52576":{"*":{"id":61905,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__61a0b842._.js"],"async":false}},"63052":{"*":{"id":95421,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__46d45ef8._.js","server/chunks/ssr/[root-of-the-server]__edbb995c._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"88287":{"*":{"id":86309,"name":"*","chunks":[],"async":false}},"74895":{"*":{"id":6660,"name":"*","chunks":[],"async":false}},"83380":{"*":{"id":52093,"name":"*","chunks":[],"async":false}},"8719":{"*":{"id":56801,"name":"*","chunks":[],"async":false}},"24163":{"*":{"id":51240,"name":"*","chunks":[],"async":false}},"49310":{"*":{"id":67168,"name":"*","chunks":[],"async":false}},"51858":{"*":{"id":15798,"name":"*","chunks":[],"async":false}},"52576":{"*":{"id":63741,"name":"*","chunks":[],"async":false}},"63052":{"*":{"id":48277,"name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/web/src/app/favicon.ico":[],"[project]/web/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/web/src/app/layout":[{"path":"static/chunks/8f6bd51bbcce6314.css","inlined":false}],"[project]/web/src/app/page":[{"path":"static/chunks/8f6bd51bbcce6314.css","inlined":false}]},"entryJSFiles":{"[project]/web/src/app/favicon.ico":["static/chunks/7a768100bec00db1.js"],"[project]/web/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/web/src/app/layout":[],"[project]/web/src/app/page":["static/chunks/aea5b1716c68391c.js","static/chunks/a9e7748193d11ed7.js"]}}
|
|
@@ -8,6 +8,6 @@ ${b.error}`)}}catch(a){m(`# RISE rispec generation failed
|
|
|
8
8
|
${a}`)}l(!0)},W=async()=>{let a=f();try{let b=await fetch("/api/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({definition:a,language:T})});if(b.ok){let a=await b.json();m(a.code)}else{let c=await b.json().catch(()=>({error:"Unknown error"}));m(`// Code generation failed: ${c.error}
|
|
9
9
|
// Showing definition JSON as fallback:
|
|
10
10
|
${a}`)}}catch{m(`// Backend unavailable — showing definition JSON
|
|
11
|
-
${a}`)}l(!0)};return(0,h.jsxs)("div",{className:"flex flex-col gap-1.5 px-2 py-1.5 bg-gray-900 border-b border-gray-800 md:flex-row md:flex-wrap md:items-center md:px-3",children:[(0,h.jsxs)("div",{className:"toolbar-ident",children:[(0,h.jsx)("input",{ref:A,type:"file",accept:".json,.smdf.json",onChange:a=>{let b=a.target.files?.[0];if(!b)return;let c=new FileReader;c.onload=a=>{e(a.target?.result,b.name)},c.readAsText(b),a.target.value=""},className:"hidden"}),(0,h.jsxs)("span",{className:"text-xs text-gray-400 mr-1 truncate max-w-[50vw] md:max-w-none",children:[b??"untitled.smdf.json",d&&(0,h.jsx)("span",{className:"text-yellow-500 ml-0.5",children:"●"})]}),(0,h.jsx)(cj,{}),"synced"===u&&(0,h.jsx)("span",{className:"text-[10px] text-emerald-500",title:"In sync with disk",children:"⌁ synced"}),"remote-changed"===u&&(0,h.jsx)("span",{className:"text-[10px] text-amber-400",title:v??"",children:"↻ remote changed"}),"error"===u&&(0,h.jsx)("span",{className:"text-[10px] text-red-400",title:v??"",children:"⚠ disk error"}),"idle"===u&&(0,h.jsx)("span",{className:"text-[10px] text-gray-600",title:v??"No file bound",children:"○ no disk"}),(0,h.jsx)(ck,{}),(0,h.jsx)("div",{className:"flex-1"})]}),(0,h.jsxs)("div",{className:"toolbar-strip",children:[(0,h.jsx)("button",{onClick:q,disabled:0===s.length,className:"toolbar-btn disabled:opacity-30",title:"Undo (Ctrl+Z)",children:"↩"}),(0,h.jsx)("button",{onClick:r,disabled:0===t.length,className:"toolbar-btn disabled:opacity-30",title:"Redo (Ctrl+Y)",children:"↪"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:p,className:"toolbar-btn",title:"Arrange states into layers (auto-layout)",children:"⤢ Arrange"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>o("select"===n?"transition":"select"),className:`toolbar-btn ${"transition"===n?"!bg-amber-700 !text-white":""}`,title:"transition"===n?"Exit draw mode (Esc)":"Draw transition mode",children:"transition"===n?"✏️ Drawing":"↗ Draw"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>A.current?.click(),className:"toolbar-btn",title:"Open local .smdf.json (browser)",children:"📂"}),(0,h.jsx)("button",{onClick:P,disabled:F,className:"toolbar-btn disabled:opacity-40",title:"Save to disk (STATELOOM_PROJECT_FILE)",children:"💾 Disk"}),(0,h.jsx)("button",{onClick:R,className:"toolbar-btn",title:"Reload from disk",children:"🔄"}),(0,h.jsx)("button",{onClick:()=>{let a=new Blob([f()],{type:"application/json"}),c=URL.createObjectURL(a),d=document.createElement("a");d.href=c,d.download=b??"statemachine.smdf.json",d.click(),URL.revokeObjectURL(c)},className:"toolbar-btn",title:"Download as file",children:"📥"}),(0,h.jsx)("select",{value:H,onChange:a=>{I(a.target.value),O(null),M(null)},className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",title:"Export format",children:b4.map(a=>(0,h.jsx)("option",{value:a,children:b5[a]},a))}),(0,h.jsx)("button",{onClick:Q,disabled:J,className:`toolbar-btn disabled:opacity-40 ${L?"!text-red-400":""}`,title:L??`Export the board as ${b5[H]}`,children:J?"…":"🖼 Export"}),N&&!L&&(0,h.jsxs)("span",{className:"text-[10px] text-emerald-500 truncate max-w-[40vw] md:max-w-[16rem]",title:N,children:["⤓ ",N]}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),B?(0,h.jsxs)("div",{className:"flex items-center gap-1",children:[(0,h.jsx)("input",{autoFocus:!0,className:"bg-gray-800 border border-gray-700 rounded px-2 py-0.5 text-xs text-gray-200 w-32 md:w-24",placeholder:"State name...",value:D,onChange:a=>E(a.target.value),onKeyDown:a=>{"Enter"===a.key&&S(),"Escape"===a.key&&C(!1)}}),(0,h.jsx)("button",{onClick:S,className:"toolbar-btn-sm",children:"✓"}),(0,h.jsx)("button",{onClick:()=>C(!1),className:"toolbar-btn-sm",children:"✕"})]}):(0,h.jsx)("button",{onClick:()=>C(!0),className:"toolbar-btn",children:"+State"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>j(),className:"toolbar-btn",children:"✓ Validate"}),(0,h.jsxs)("select",{value:T,onChange:a=>U(a.target.value),className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",children:[(0,h.jsx)("option",{value:"python",children:"Python"}),(0,h.jsx)("option",{value:"typescript",children:"TypeScript"})]}),(0,h.jsx)("button",{onClick:W,className:"toolbar-btn",children:"⚡ Generate"}),(0,h.jsx)("button",{onClick:V,className:"toolbar-btn",title:"Generate RISE rispec markdown",children:"📜 RISE"}),(0,h.jsxs)("button",{onClick:()=>l(!k),className:`toolbar-btn ${k?"text-blue-400":""}`,children:["</>"," Code"]})]})]})}function cm(){let a=b$(a=>a.generatedCode),b=b$(a=>a.showCodePreview),c=b$(a=>a.setShowCodePreview);return b?(0,h.jsx)("div",{className:"absolute inset-0 z-50 flex items-center justify-center bg-black/60 p-2 md:p-0",children:(0,h.jsxs)("div",{className:"bg-gray-900 border border-gray-700 rounded-lg shadow-xl w-full max-h-[85dvh] md:w-[80%] md:max-w-3xl md:max-h-[80dvh] flex flex-col",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gray-800",children:[(0,h.jsx)("h3",{className:"text-sm font-semibold text-gray-300",children:"Generated Definition (JSON)"}),(0,h.jsx)("button",{onClick:()=>c(!1),className:"text-gray-500 hover:text-gray-300 text-lg min-h-11 min-w-11 md:min-h-0 md:min-w-0","aria-label":"Close preview",children:"✕"})]}),(0,h.jsx)("pre",{className:"flex-1 overflow-auto overscroll-contain p-4 text-[11px] leading-relaxed text-green-400 font-mono md:text-sm",children:a??"No code generated yet"}),(0,h.jsx)("div",{className:"flex justify-end px-4 py-2 border-t border-gray-800",children:(0,h.jsx)("button",{onClick:()=>{a&&navigator.clipboard.writeText(a)},className:"text-xs bg-gray-700 hover:bg-gray-600 text-gray-300 px-4 py-3 rounded md:px-3 md:py-1",children:"Copy to Clipboard"})})]})}):null}function cn(){let a=b$(a=>a.applyRemote),b=b$(a=>a.setRemoteStatus),c=b$(a=>a.setRemoteMtime),d=(0,ci.useRequestedDoc)();return(0,i.useEffect)(()=>{let e=!1,f=(0,ci.docQuery)(d);async function g(){try{let a=await fetch(`/api/file${f}`,{cache:"no-store"});if(!a.ok)return null;return await a.json()}catch{return null}}(async()=>{let c=await g();e||(c?.path&&b$.getState().setDocPath(c.path),c?.exists&&c.content?a(c.content,c.mtime,c.path.split("/").pop()):b("idle",c?`No file at ${c.path}`:null))})();let h=new EventSource(`/api/watch${f}`);return h.addEventListener("hello",a=>{try{let b=JSON.parse(a.data);"number"==typeof b?.mtime&&c(b.mtime)}catch{}}),h.addEventListener("change",async d=>{let e=0;try{e=JSON.parse(d.data)?.mtime??0}catch{}if(e<=(b$.getState().remoteMtime??0))return;let f=await g();f?.exists&&f.content&&(b$.getState().dirty?(b("remote-changed",`Disk changed at ${new Date(f.mtime).toLocaleTimeString()} — local has unsaved edits`),c(f.mtime)):a(f.content,f.mtime,f.path.split("/").pop()))}),h.addEventListener("error",()=>{b("error","Watch stream disconnected")}),()=>{e=!0,h.close()}},[a,b,c,d]),null}function co({url:a}){let b=(0,ci.useRequestedDoc)();return(0,i.useEffect)(()=>{if(!a)return;let c=!1,d=null,e=null,f=null,g=null;return(async()=>{let h="";try{let a=await fetch(`/api/file${(0,ci.docQuery)(b)}`,{cache:"no-store"});a.ok&&(h=(await a.json())?.path??"")}catch{}c||(h&&b$.getState().setDocPath(h),(d=bQ({url:a,role:"web",docId:h,name:"web-designer",onFull:a=>{b$.getState().applyRemote(JSON.stringify({stateMachine:a.def}),a.mtime??Date.now(),h&&h.split("/").pop()||void 0),g=a.def},onPatch:a=>{b$.getState().applyRemoteOps(a.ops,a.mtime??Date.now(),a.seq),g=b$.getState().definition},onPresence:a=>{b$.getState().setPresence(a)}})).connect(),e=b$.subscribe((a,b)=>{a.definition===b.definition||a._applyingRemote||(f&&clearTimeout(f),f=setTimeout(()=>{var a,b;let c,e;if(!d||"connected"!==d.getSnapshot().status)return;let f=b$.getState().definition;if(null===g){d.emitFull(f),g=f;return}let h=(a=g,b=f,c=a??{settings:{namespace:"",asynchronous:!1},events:[],state:{name:b.state.name,states:[]}},function(a,b,c){let d={},e=!1,f=new Set([...Object.keys(a.settings),...Object.keys(b.settings)]),g=a.settings,h=b.settings;for(let a of f)q(g[a],h[a])||void 0===h[a]||(d[a]=h[a],e=!0);e&&c.push({op:"settings.update",patch:d})}(c,b,e=[]),function(a,b,c){let d=a.events,e=b.events,f=Math.min(d.length,e.length);for(let a=0;a<f;a++)!function(a,b,c,d){let e={},f=!1;for(let a of["name","file","feeder","description","timers"])q(b[a],c[a])||void 0===c[a]||(e[a]=c[a],f=!0);f&&d.push({op:"eventSource.update",index:a,patch:e});let g=b.events??[],h=c.events??[],i=new Set(h.map(a=>a.id));for(let a of g)i.has(a.id)||d.push({op:"event.remove",id:a.id});let j=g.filter(a=>i.has(a.id)),k=0;for(;k<h.length;){let b=h[k];k<j.length&&j[k].id===b.id?(function(a,b,c){let d={},e=!1;for(let c of["name","description","preAction","postAction"])q(a[c],b[c])||void 0===b[c]||(d[c]=b[c],e=!0);e&&c.push({op:"event.update",id:b.id,patch:d})}(j[k],b,d),function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++)if(!q(b[f],c[f])){let e={};b[f].name!==c[f].name&&(e.name=c[f].name),b[f].type!==c[f].type&&(e.type=c[f].type),d.push({op:"parameter.update",eventId:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"parameter.add",eventId:a,parameter:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"parameter.remove",eventId:a,index:e})}(b.id,j[k].parameters??[],b.parameters??[],d)):(d.push({op:"event.add",sourceIndex:a,event:b,index:k}),j.splice(k,0,b)),k++}}(a,d[a],e[a],c);for(let a=d.length;a<e.length;a++)c.push({op:"eventSource.add",source:e[a]});for(let a=d.length-1;a>=e.length;a--)c.push({op:"eventSource.remove",index:a})}(c,b,e),function(a,b,c){let d=o(a.state),e=o(b.state),f=new Map(d.map(a=>[a.name,a])),g=new Map(e.map(a=>[a.name,a])),h=p(a.state),i=p(b.state),j=[];for(let a of e){if(f.has(a.name))continue;let b=i.get(a.name)??null,{states:d,transitions:e,...g}=a;c.push({op:"state.add",parent:b,state:{...g}}),e&&e.length>0&&j.push({state:a.name,transitions:e})}for(let a of e){if(!f.has(a.name))continue;let b=h.get(a.name)??null,d=i.get(a.name)??null;b!==d&&null!==d&&c.push({op:"state.nest",child:a.name,newParent:d})}for(let a of e){let b=f.get(a.name);if(!b)continue;let d={},e=!1;q(b.kind,a.kind)||void 0===a.kind||(d.kind=a.kind,e=!0),q(b.description,a.description)||void 0===a.description||(d.description=a.description,e=!0),e&&c.push({op:"state.update",name:a.name,patch:d}),r(a.name,"onEntry",b.onEntry?.actions??[],a.onEntry?.actions??[],c),r(a.name,"onExit",b.onExit?.actions??[],a.onExit?.actions??[],c)}for(let a of j)a.transitions.forEach((b,d)=>{c.push({op:"transition.add",state:a.state,transition:b,index:d})});for(let a of e){let b=f.get(a.name);b&&function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++){if(q(b[f],c[f]))continue;let e={};for(let a of["event","nextState","condition","description","actions"])q(b[f][a],c[f][a])||void 0===c[f][a]||(e[a]=c[f][a]);Object.keys(e).length>0&&d.push({op:"transition.update",state:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"transition.add",state:a,transition:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"transition.remove",state:a,index:e})}(a.name,b.transitions??[],a.transitions??[],c)}for(let a=d.length-1;a>=0;a--){let b=d[a];if(g.has(b.name))continue;let e=b.transitions??[];for(let a=e.length-1;a>=0;a--)c.push({op:"transition.remove",state:b.name,index:a});c.push({op:"state.remove",name:b.name})}}(c,b,e),e);0!==h.length&&(d.emitPatch(h),g=f)},60))}))})(),()=>{c=!0,f&&clearTimeout(f),e&&e(),d&&d.disconnect()}},[a,b]),null}function cp(){let a=process.env.NEXT_PUBLIC_STATELOOM_BRIDGE_URL??process.env.NEXT_PUBLIC_SMCRAFT_BRIDGE_URL;return"string"==typeof a&&a.length>0?a:void 0}let cq=null;function cr(){return cq||(cq=(async()=>{let a=cp()??null;try{let b=await fetch("/api/config",{cache:"no-store"});if(b.ok){let c=await b.json();return{bridgeUrl:c.bridgeUrl||a,projectFile:c.projectFile??null}}}catch{}return{bridgeUrl:a,projectFile:null}})())}function cs(){let a=cp(),[b,c]=(0,i.useState)(a);return((0,i.useEffect)(()=>{let a=!0;return cr().then(b=>{a&&b.bridgeUrl&&c(b.bridgeUrl)}),()=>{a=!1}},[]),"string"==typeof b&&b.length>0)?(0,h.jsx)(co,{url:b}):(0,h.jsx)(cn,{})}function ct(a){return Number.isFinite(a)?Math.min(1.75,Math.max(.75,a)):1}function cu(a){"u">typeof document&&(document.documentElement.style.fontSize=`${16*ct(a)}px`)}let cv=1,cw=!1,cx=new Set;function cy(){return cw||(cw=!0,cv=1),cv}function cz(){return 1}function cA(a){return cx.add(a),()=>{cx.delete(a)}}function cB(a,b){let c=ct(a);if(cu(c),b,cw=!0,c!==cv)for(let a of(cv=c,cx))a()}function cC(a,b){return Math.max(1,Math.hypot(b.clientX-a.clientX,b.clientY-a.clientY))}function cD(a,b){for(let c=0;c<a.length;c++)if(a[c].identifier===b)return a[c];return null}function cE(){let a=(0,i.useSyncExternalStore)(cA,cy,cz),b=(0,i.useRef)(null),c=(0,i.useRef)(null),d=(0,i.useRef)(null);(0,i.useEffect)(()=>{cu(a)},[a]);let e=(0,i.useCallback)(a=>{c.current=a,null===d.current&&(d.current=requestAnimationFrame(()=>{d.current=null,null!==c.current&&cB(c.current,!1)}))},[]),f=(0,i.useCallback)(()=>{c.current=null,cB(1,!0)},[]);return((0,i.useEffect)(()=>{let a=()=>{let a=b.current;if(b.current=null,!a?.engaged)return;null!==d.current&&(cancelAnimationFrame(d.current),d.current=null);let e=c.current??cy();c.current=null,cB(ct(e),!0)},f=c=>{if(2!==c.touches.length){b.current&&a();return}let[d,e]=[c.touches[0],c.touches[1]];b1(d.target)||b1(e.target)||(b.current={a:d.identifier,b:e.identifier,startScale:cy(),startDist:cC(d,e),engaged:!1})},g=a=>{let c=b.current;if(!c)return;let d=cD(a.touches,c.a),f=cD(a.touches,c.b);if(!d||!f)return;a.preventDefault();let g=cC(d,f);if(!c.engaged){if(12>Math.abs(g-c.startDist))return;c.engaged=!0,c.startDist=g;return}e(ct(c.startScale*(g/c.startDist)))},h=c=>{let d=b.current;d&&(cD(c.touches,d.a)&&cD(c.touches,d.b)||a())};return document.addEventListener("touchstart",f,{passive:!0,capture:!0}),document.addEventListener("touchmove",g,{passive:!1,capture:!0}),document.addEventListener("touchend",h,{passive:!0,capture:!0}),document.addEventListener("touchcancel",h,{passive:!0,capture:!0}),()=>{document.removeEventListener("touchstart",f,{capture:!0}),document.removeEventListener("touchmove",g,{capture:!0}),document.removeEventListener("touchend",h,{capture:!0}),document.removeEventListener("touchcancel",h,{capture:!0}),null!==d.current&&cancelAnimationFrame(d.current)}},[e]),1===a)?null:(0,h.jsxs)("div",{className:"ui-scale-pill",role:"status","aria-live":"polite",children:[(0,h.jsxs)("span",{children:["UI ",Math.round(100*a),"%"]}),(0,h.jsx)("button",{type:"button",onClick:f,"aria-label":"Reset interface size to 100 percent",children:"Reset"})]})}let cF=(a,b)=>"chen"===b?`stateloom:erd-layout:chen:${a}`:`stateloom:erd-layout:${a}`,cG="stateloom:erd-notation";function cH(a,b){try{return JSON.parse(localStorage.getItem(cF(a,b))??"{}")}catch{return{}}}async function cI(a){let b=a.slice(0,a.lastIndexOf("/")),c=((await (await fetch("/api/docs",{cache:"no-store"})).json()).docs??[]).map(a=>a.path).filter(a=>a.endsWith(".smdf.json")&&a.slice(0,a.lastIndexOf("/"))===b),d=[];for(let a of c)try{let b=await (await fetch(`/api/file${(0,ci.docQuery)(a)}`,{cache:"no-store"})).json(),c=JSON.parse(b.content??"null"),e=c?.stateMachine??c?.StateMachine??c;e?.state&&d.push({path:a,def:e})}catch{}return d}let cJ="w-full rounded border border-gray-700 bg-gray-950 px-2 py-1 text-xs text-gray-200 placeholder:text-gray-600",cK="rounded border border-gray-700 bg-gray-800 px-2 py-1 text-xs text-gray-200 hover:bg-gray-700",cL="mb-1 mt-3 text-[11px] font-semibold uppercase tracking-wide text-gray-500";function cM(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(""),[d,e]=(0,i.useState)(null),[f,g]=(0,i.useState)({}),[j,k]=(0,i.useState)("crowsfoot"),[l,m]=(0,i.useState)({...M}),[n,o]=(0,i.useState)(0),[p,q]=(0,i.useState)(null),[r,s]=(0,i.useState)("loading…"),[t,u]=(0,i.useState)(0),[v,w]=(0,i.useState)(null),x=(0,i.useRef)(null);(0,i.useEffect)(()=>{let b=!1,d=null;return(async()=>{let f=await (await fetch(`/api/file${(0,ci.docQuery)(a)}`,{cache:"no-store"})).json();if(b)return;if(f.error)return s(f.error);let h=f.path??"",i=null;try{let a=f.content?JSON.parse(f.content):null;X(a)&&(i={...a,relationships:a.relationships??[]})}catch{}if(f.exists&&!i)return s(`${h} is not a readable ERD definition`);let j=(h.split("/").pop()??"Untitled").replace(/\.erdf\.json$/i,""),l=function(){try{return"chen"===localStorage.getItem(cG)?"chen":"crowsfoot"}catch{return"crowsfoot"}}();c(h),e(i??{settings:{namespace:"Default",name:j},entities:[],relationships:[]}),k(l),g(cH(h,l)),q(null),w(null),o(a=>a+1),s(f.exists?"loaded":"new document — the first edit writes it");let{bridgeUrl:m}=await cr();!b&&m&&(x.current=d=bQ({url:m,role:"web",docId:h,name:"web-designer",onFull:a=>{let b=a.def;X(b)&&(e({...b,relationships:b.relationships??[]}),s("updated live"))},onPatch:()=>{},onPresence:a=>u(a.length)}),d.connect())})().catch(a=>!b&&s(String(a))),()=>{b=!0,x.current=null,d?.disconnect()}},[a]);let y=(0,i.useMemo)(()=>{if(!d)return{};let a=function(a,b={}){let c=b.notation??"crowsfoot",d=b.hSpacing??70,e=b.vSpacing??("chen"===c?130:90),f="chen"===c?ae:al,g=[],h=new Set;for(let b of a.entities??[])!b?.name||h.has(b.name)||(h.add(b.name),g.push(b));let i=new Map,j=(a,b,c=new Set)=>a===b||!c.has(a)&&(c.add(a),(i.get(a)??[]).some(a=>j(a,b,c)));for(let b of a.relationships??[]){if(!b||!h.has(b.from)||!h.has(b.to)||b.from===b.to)continue;let[a,c]="N:1"===b.cardinality?[b.to,b.from]:[b.from,b.to];if((i.get(a)??[]).includes(c)||j(c,a))continue;let d=i.get(a);d?d.push(c):i.set(a,[c])}let k=new Map,l=(a,b)=>{if(!((k.get(a)??-1)>=b))for(let c of(k.set(a,b),i.get(a)??[]))l(c,b+1)},m=new Set([...i.values()].flat());for(let a of g)m.has(a.name)||l(a.name,0);for(let a of g)k.has(a.name)||l(a.name,0);for(let a of[...g].sort((a,b)=>k.get(b.name)-k.get(a.name))){let b=i.get(a.name)??[];b.length&&k.set(a.name,Math.min(...b.map(a=>k.get(a)))-1)}let n=[],o=new Map,p=(a,b)=>((n[b]??=[]).push(a),o.set(a.id,a),a);for(let a of g)p({id:a.name,entity:a.name,...f(a),upper:[],lower:[],x:0},k.get(a.name)??0);let q=0;for(let[a,b]of i)for(let c of b){let b=a;for(let d=k.get(a)+1;d<k.get(c);d++){let a=p({id:`\u0000lane${q++}`,width:28,height:0,upper:[],lower:[],x:0},d);o.get(b).lower.push(a.id),a.upper.push(b),b=a.id}o.get(b).lower.push(c),o.get(c).upper.push(b)}for(let a=n.length-1;a>=0;a--)n[a]?.length||n.splice(a,1);let r=(a,b)=>a.length?a.reduce((a,c)=>a+b(o.get(c)),0)/a.length:null,s=(a,b)=>{let c=new Map;for(let a of n)a.forEach((a,b)=>c.set(a.id,b));let d=new Map(a.map((a,d)=>[a.id,r(a[b],a=>c.get(a.id))??d]));a.sort((a,b)=>d.get(a.id)-d.get(b.id))};for(let a=0;a<2;a++){for(let a=1;a<n.length;a++)s(n[a],"upper");for(let a=n.length-2;a>=0;a--)s(n[a],"lower")}let t=a=>a.x+a.width/2,u=(a,b)=>{let c=0;for(let e of a){let a=r(e[b],t);e.x=Math.max(c,null===a?c:a-e.width/2),c=e.x+e.width+d}};for(let a of n)u(a,"upper");for(let a=n.length-2;a>=0;a--)u(n[a],"lower");let v=Math.min(0,...[...o.values()].map(a=>a.x)),w={},x=40;for(let a of n){for(let b of a)b.entity&&(w[b.entity]={x:Math.round(b.x-v)+40,y:x,width:b.width,height:b.height});x+=Math.max(0,...a.map(a=>a.height))+e}return w}(d,{notation:j});for(let[b,c]of Object.entries(f))a[b]&&(a[b]={...a[b],...c});return a},[d,f,j]),z=(0,i.useMemo)(()=>d?function(a){let b=[],c=function(a){let b=new Map;for(let c of a.entities??[])c?.name&&!b.has(c.name)&&b.set(c.name,c);return b}(a),d=new Set;for(let[e,f]of(a.entities??[]).entries()){if(!f?.name){b.push({ruleId:"E001",message:`Entity at index ${e} has no name`,element:`entities[${e}]`});continue}d.has(f.name)&&b.push({ruleId:"E001",message:`Duplicate entity name "${f.name}"`,element:f.name}),d.add(f.name);let a=new Set;for(let[d,e]of(f.attributes??[]).entries()){if(!e?.name){b.push({ruleId:"E002",message:`Attribute at index ${d} of "${f.name}" has no name`,element:`${f.name}[${d}]`});continue}let g=`${f.name}.${e.name}`;if(a.has(e.name)&&b.push({ruleId:"E002",message:`Duplicate attribute "${g}"`,element:g}),a.add(e.name),e.references){let a=function(a){let b=a.indexOf(".");return b<0?{entity:a}:{entity:a.slice(0,b),attribute:a.slice(b+1)}}(e.references),d=c.get(a.entity);d?a.attribute&&!(d.attributes??[]).some(b=>b?.name===a.attribute)&&b.push({ruleId:"E005",message:`"${g}" references undefined attribute "${e.references}"`,element:g}):b.push({ruleId:"E005",message:`"${g}" references undefined entity "${a.entity}"`,element:g})}}}for(let[d,e]of(a.relationships??[]).entries()){let a=`relationships[${d}]`;for(let f of["from","to"]){let g=e?.[f];g&&c.has(g)||b.push({ruleId:"E003",message:`Relationship ${d} ${f} names undefined entity "${g??""}"`,element:a})}V.includes(e?.cardinality)||b.push({ruleId:"E004",message:`Relationship ${d} cardinality "${e?.cardinality??""}" is not one of ${V.join(", ")}`,element:a})}return b}(d):[],[d]),A=(0,i.useMemo)(()=>z.map(a=>(a.element??"").split(/[.[]/)[0]).filter(Boolean),[z]),B=(0,i.useCallback)(async a=>{let c;if(d&&b){try{c=a(d)}catch(a){return s(a instanceof Error?a.message:String(a))}e(c),w(null);try{let a=await fetch(`/api/file${(0,ci.docQuery)(b)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:JSON.stringify(c,null,2)+"\n"})});if(!a.ok)throw Error((await a.json())?.error??`HTTP ${a.status}`);x.current?.emitFull(c),s("saved")}catch(a){s(`not saved: ${a instanceof Error?a.message:String(a)}`)}}},[d,b]),C=(0,i.useCallback)((a,c)=>{g(d=>{let e={...d,[a]:{x:Math.round(c.x),y:Math.round(c.y)}};try{localStorage.setItem(cF(b,j),JSON.stringify(e))}catch{}return e})},[b,j]),D=async()=>{if(!d)return;s("checking links…");let a=await cI(b);if(0===a.length)return w([]),s("no .smdf.json beside this document to check against");let c=a.flatMap(a=>(function(a,b){let c=[],d=new Map;for(let a of b.entities??[])a?.name&&!d.has(a.name)&&d.set(a.name,a);let e=a.settings?.name??"",f=a.settings?.objects??[],g=a.state?function a(b){let c=[b];for(let d of b.states??[])c.push(...a(d));for(let d of b.parallel?.states??[])c.push(...a(d));return c}(a.state):[],h=g.flatMap(a=>(a.transitions??[]).map(a=>a.condition??"")),i=new Map;for(let a of f){let e=d.get(a.class);if(e){i.set(a.instance,e);continue}h.some(b=>Y(b,a.instance).length>0)&&c.push({ruleId:"L001",message:`Object "${a.instance}" has class "${a.class}", which is not an entity in "${b.settings?.name??""}", and a guard reads its fields`,element:a.instance})}for(let a of g)for(let b of a.transitions??[])if(b.condition)for(let[d,e]of i)for(let f of Y(b.condition,d))(e.attributes??[]).some(a=>a?.name===f)||c.push({ruleId:"L002",message:`Guard on ${a.name} [${b.event}] reads "${d}.${f}", which is not an attribute of "${e.name}"`,element:a.name});if(e){let a=new Set([...i.values()].map(a=>a.name));for(let d of b.entities??[])for(let b of d?.attributes??[])b&&U(b).includes(e)&&(a.has(d.name)||c.push({ruleId:"L003",message:`"${d.name}.${b.name}" stores the state of "${e}", but "${d.name}" is not the class of any of that machine's objects`,element:`${d.name}.${b.name}`}))}return c})(a.def,d).map(b=>({...b,message:`${a.def.settings?.name??a.path}: ${b.message}`})));c.push(...function(a,b){let c=[];for(let d of a.entities??[])for(let a of d?.attributes??[])if(a)for(let e of U(a))b.includes(e)||c.push({ruleId:"L004",message:`"${d.name}.${a.name}" stores the state of "${e}", which is not among the machines checked (${b.join(", ")||"none"})`,element:`${d.name}.${a.name}`});return c}(d,a.map(a=>a.def.settings?.name??""))),w(c),s(`checked ${a.length} machine(s): ${c.length} problem(s)`)},E=async a=>{let c=(await cI(b)).find(b=>b.def.settings?.name===a);c?(0,ci.navigateToDoc)(c.path):s(`no .smdf.json beside this document defines '${a}'`)},F=d?.entities.find(a=>a.name===p)??null,G=b.split("/").pop()||"…";return(0,h.jsxs)("div",{className:"app-shell flex flex-col overflow-hidden bg-gray-950 text-gray-200",children:[(0,h.jsxs)("header",{className:"flex flex-wrap items-center gap-2 border-b border-gray-800 bg-gray-900 px-3 py-2 text-xs",children:[(0,h.jsx)("span",{className:"font-semibold text-blue-300",children:"ERD"}),(0,h.jsx)(cj,{}),(0,h.jsxs)("span",{className:"text-gray-400",title:b,children:[d?.settings.name??""," · ",G]}),(0,h.jsxs)("span",{className:"ml-auto text-gray-500",children:[r,t>1?` \xb7 ${t} in the room`:""]}),(0,h.jsx)("span",{className:"inline-flex overflow-hidden rounded border border-gray-700",role:"group","aria-label":"Notation",children:[["crowsfoot","▤","Crow's foot — attributes listed inside the entity box"],["chen","◇","Chen — attributes as ovals, relationships as diamonds"]].map(([a,c,d])=>(0,h.jsx)("button",{title:d,"aria-label":d,"aria-pressed":j===a,onClick:()=>(a=>{if(a!==j){try{localStorage.setItem(cG,a)}catch{}k(a),g(cH(b,a)),o(a=>a+1)}})(a),className:`px-2 py-1 text-sm leading-none ${j===a?"bg-blue-900/60 text-blue-200":"bg-gray-800 text-gray-400 hover:bg-gray-700"}`,children:c},a))}),(0,h.jsx)("button",{className:cK,onClick:()=>{g({});try{localStorage.removeItem(cF(b,j))}catch{}o(a=>a+1)},title:"Forget the dragged positions and lay the board out again",children:"⤢ Arrange"}),(0,h.jsx)("button",{className:cK,onClick:()=>o(a=>a+1),children:"Fit"}),(0,h.jsx)("button",{className:cK,onClick:D,title:"Check the state machines beside this document against it",children:"Check links"}),(0,h.jsx)("button",{className:cK,onClick:()=>d&&navigator.clipboard?.writeText(function(a){let b=["erDiagram"],c=" ",d=new Set;for(let e of a.relationships??[]){if(!e?.from||!e?.to)continue;let a=af[e.cardinality]??af["1:N"];b.push(`${c}${ah(e.from)} ${a} ${ah(e.to)} : ${aj(e.label??"")}`),d.add(e.from),d.add(e.to)}let e=new Set;for(let f of a.entities??[]){if(!f?.name||e.has(f.name))continue;e.add(f.name);let a=(f.attributes??[]).filter(a=>a?.name);if(0===a.length){d.has(f.name)||b.push(`${c}${ah(f.name)}`);continue}for(let d of(b.push(`${c}${ah(f.name)} {`),a))b.push(`${c}${c}${function(a){let b=[];"pk"===a.key&&b.push("PK"),"uk"===a.key&&b.push("UK"),a.references&&b.push("FK");let c=[],d=U(a);d.length&&c.push(`stateOf ${d.join(", ")}`),a.description&&c.push(a.description);let e=[ai(a.type??"","unknown"),ai(a.name,"unnamed")];return b.length&&e.push(b.join(", ")),c.length&&e.push(aj(c.join(" — "))),e.join(" ")}(d)}`);b.push(`${c}}`)}return b.join("\n")}(d)).then(()=>s("mermaid copied")),children:"Copy mermaid"})]}),(0,h.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col md:flex-row",children:[(0,h.jsx)("div",{className:"min-h-[45dvh] flex-1 overflow-hidden",children:d&&(0,h.jsx)(aC,{definition:d,notation:j,positions:y,viewport:l,onViewportChange:m,selection:p,errorElements:A,fitKey:n,onSelect:q,onClearSelection:()=>q(null),onEntityMove:C,onOpenMachine:E,emptyHint:"No entities yet — add one in the panel, or let an agent call add_entity."})}),d&&(0,h.jsxs)("aside",{className:"touch-targets w-full overflow-y-auto border-t border-gray-800 bg-gray-900 p-3 md:w-80 md:border-l md:border-t-0",children:[(0,h.jsx)("div",{className:cL,style:{marginTop:0},children:"Entities"}),(0,h.jsx)("div",{className:"flex flex-wrap gap-1",children:d.entities.map(a=>(0,h.jsx)("button",{className:`${cK} ${p===a.name?"border-blue-500 text-blue-300":""}`,onClick:()=>q(a.name),children:a.name},a.name))}),(0,h.jsx)(cN,{fields:[{name:"name",placeholder:"new entity"}],submit:"+ Entity",onSubmit:a=>{B(b=>(function(a,b){if(!b.name?.trim())throw Error("An entity needs a name.");let c=Z(a);if(c.entities.some(a=>a.name===b.name))throw Error(`Entity '${b.name}' already exists.`);return c.entities.push(_({...b,attributes:b.attributes??[]})),c})(b,{name:a.name.trim()})),q(a.name.trim())}}),F&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("div",{className:cL,children:F.name}),(0,h.jsxs)("label",{className:"mb-1 flex items-center gap-2 text-[11px] text-gray-400",title:"Exists only through another entity (an order line, without its order). Chen draws it as a double rectangle.",children:[(0,h.jsx)("input",{type:"checkbox",checked:!!F.weak,onChange:a=>B(b=>{var c,d;let e,f;return c=F.name,d={weak:a.target.checked},f=$(e=Z(b),c),void 0!==d.description&&(d.description?f.description=d.description:delete f.description),void 0!==d.weak&&(d.weak?f.weak=!0:delete f.weak),e})}),"weak entity"]}),(F.attributes??[]).map(a=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 font-mono text-[11px]",children:[(0,h.jsxs)("span",{className:a.stateOf?"text-blue-300":"text-gray-300",children:[a.name," : ",a.type,(0,h.jsxs)("span",{className:"text-gray-500",children:[a.key?` ${a.key.toUpperCase()}`:"",a.references?` → ${a.references}`:"",a.stateOf?` ◉ ${[a.stateOf].flat().join(", ")}`:""]})]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":`Remove ${a.name}`,onClick:()=>B(b=>(function(a,b,c){let d=Z(a),e=$(d,b),f=e.attributes?.length??0;if(e.attributes=(e.attributes??[]).filter(a=>a.name!==c),e.attributes.length===f)throw Error(`Attribute '${b}.${c}' not found.`);return d})(b,F.name,a.name)),children:"✕"})]},a.name)),(0,h.jsx)(cN,{fields:[{name:"name",placeholder:"attribute"},{name:"type",placeholder:"type",initial:"string"},{name:"key",options:["","pk","uk"]},{name:"references",placeholder:"references Entity.attr"},{name:"stateOf",placeholder:"stateOf Machine"}],submit:"+ Attribute",onSubmit:a=>B(b=>(function(a,b,c){if(!c.name?.trim())throw Error("An attribute needs a name.");let d=Z(a),e=$(d,b);if(e.attributes??=[],e.attributes.some(a=>a.name===c.name))throw Error(`Attribute '${b}.${c.name}' already exists.`);return e.attributes.push(_({...c})),d})(b,F.name,{name:a.name.trim(),type:a.type.trim()||"string",key:"pk"===a.key||"uk"===a.key?a.key:void 0,references:a.references.trim()||void 0,stateOf:a.stateOf.trim()||void 0}))}),(0,h.jsxs)("button",{className:`${cK} mt-2 text-red-300`,onClick:()=>{B(a=>{var b;let c;return b=F.name,$(c=Z(a),b),c.entities=c.entities.filter(a=>a.name!==b),c.relationships=c.relationships.filter(a=>a.from!==b&&a.to!==b),c}),q(null)},children:["🗑 Delete ",F.name]})]}),(0,h.jsx)("div",{className:cL,children:"Relationships"}),d.relationships.map((a,b)=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 text-[11px] text-gray-300",children:[(0,h.jsxs)("span",{children:[a.from," ",(0,h.jsx)("span",{className:"text-gray-500",children:a.cardinality})," ",a.to,a.label?(0,h.jsxs)("span",{className:"text-gray-500",children:[" : ",a.label]}):null]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":"Remove relationship",onClick:()=>B(b=>(function(a,b,c,d){let e=Z(a),f=e.relationships.length;if(e.relationships=e.relationships.filter(a=>a.from!==b||a.to!==c||void 0!==d&&a.label!==d),e.relationships.length===f)throw Error(`No relationship from '${b}' to '${c}'${void 0===d?"":` labelled '${d}'`}.`);return e})(b,a.from,a.to,a.label)),children:"✕"})]},b)),d.entities.length>0&&(0,h.jsx)(cN,{fields:[{name:"from",options:d.entities.map(a=>a.name)},{name:"cardinality",options:[...V],initial:"1:N"},{name:"to",options:d.entities.map(a=>a.name)},{name:"label",placeholder:"label (a verb)"}],submit:"+ Relationship",onSubmit:a=>B(b=>(function(a,b){let c=Z(a);if($(c,b.from),$(c,b.to),!V.includes(b.cardinality))throw Error(`Cardinality '${b.cardinality}' is not one of ${V.join(", ")}.`);return c.relationships.push(_({...b})),c})(b,{from:a.from,to:a.to,cardinality:a.cardinality,label:a.label.trim()||void 0}))}),(z.length>0||v)&&(0,h.jsx)("div",{className:cL,children:"Problems"}),z.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-red-300",children:["[",a.ruleId,"] ",a.message]},`p${b}`)),v?.length===0&&0===z.length&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-green-400",children:"Every name the machines use resolves."}),v?.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-amber-300",children:["[",a.ruleId,"] ",a.message]},`l${b}`))]})]})]})}function cN({fields:a,submit:b,onSubmit:c}){let d=()=>Object.fromEntries(a.map(a=>[a.name,a.initial??a.options?.[0]??""])),[e,f]=(0,i.useState)(d),g=a[0];return(0,h.jsxs)("form",{className:"mt-1 grid grid-cols-2 gap-1",onSubmit:b=>{b.preventDefault();let h={...d(),...e};h[g.name]?.trim()&&(c(h),f(b=>Object.fromEntries(a.map(a=>[a.name,a.options?b[a.name]??"":a.initial??""]))))},children:[a.map(a=>a.options?(0,h.jsx)("select",{className:cJ,"aria-label":a.name,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value})),children:a.options.map(b=>(0,h.jsx)("option",{value:b,children:b||`(${a.name})`},b))},a.name):(0,h.jsx)("input",{className:cJ,"aria-label":a.name,placeholder:a.placeholder,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value}))},a.name)),(0,h.jsx)("button",{type:"submit",className:`${cK} col-span-2`,children:b})]})}function cO(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(null);(0,i.useEffect)(()=>{let a=!0;return cr().then(b=>{a&&c(b.projectFile&&W(b.projectFile)?"erd":"machine")}),()=>{a=!1}},[]);let d=a?W(a)?"erd":"machine":b;return null===d?(0,h.jsx)("div",{className:"app-shell bg-gray-950"}):"erd"===d?(0,h.jsx)(cM,{}):(0,h.jsx)(cP,{})}function cP(){let[a,b]=(0,i.useState)("properties"),[c,d]=(0,i.useState)(!1),e=b$(a=>a.errors),f=b$(a=>a.contextMenu),g=b$(a=>a.hideContextMenu),j=b$(a=>a.addState),k=b$(a=>a.removeState),l=b$(a=>a.setDrawMode),m=b$(a=>a.setDrawSource),n=[{id:"properties",label:"Properties",icon:"🎛"},{id:"events",label:"Events",icon:"⚡"},{id:"settings",label:"Settings",icon:"⚙"},{id:"validation",label:"Errors",icon:"⚠",badge:e.length||void 0}],o=n.find(b=>b.id===a)?.label??"";return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden",onClick:()=>f.visible&&g(),children:[(0,h.jsx)(cs,{}),(0,h.jsx)(cE,{}),(0,h.jsx)(cl,{}),(0,h.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden relative",children:[(0,h.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,h.jsx)(cb,{})}),c&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:()=>d(!1),"aria-hidden":"true"}),(0,h.jsxs)("aside",{className:`safe-x fixed inset-x-0 bottom-0 z-30 h-[70dvh] flex flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-transform duration-200 ease-out ${c?"translate-y-0":"translate-y-full pointer-events-none"} md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:pointer-events-auto md:rounded-none md:border-t-0 md:border-l md:shadow-none md:transition-none`,children:[(0,h.jsxs)("div",{className:"md:hidden",children:[(0,h.jsx)("div",{className:"flex justify-center pt-2 pb-1",children:(0,h.jsx)("span",{className:"h-1 w-10 rounded-full bg-gray-700"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:o}),(0,h.jsx)("button",{onClick:()=>d(!1),className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsx)("div",{className:"hidden border-b border-gray-800 md:flex",children:n.map(c=>(0,h.jsxs)("button",{onClick:()=>b(c.id),className:`flex-1 text-xs py-2 px-1 text-center transition-colors relative ${a===c.id?"text-blue-400 border-b-2 border-blue-400 bg-gray-800/50":"text-gray-500 hover:text-gray-300"}`,children:[c.label,void 0!==c.badge&&c.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1 bg-red-600 text-white text-[9px] rounded-full px-1 min-w-[14px]",children:c.badge})]},c.id))}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain",children:["properties"===a&&(0,h.jsx)(cd,{}),"events"===a&&(0,h.jsx)(cf,{}),"settings"===a&&(0,h.jsx)(cg,{}),"validation"===a&&(0,h.jsx)(ch,{})]})]}),(0,h.jsx)(cm,{})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:n.map(e=>{let f=c&&a===e.id;return(0,h.jsxs)("button",{onClick:()=>{var c;return c=e.id,void(d(b=>!(b&&a===c)),b(c))},"aria-pressed":f,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${f?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"text-base leading-none",children:e.icon}),(0,h.jsx)("span",{children:e.label}),void 0!==e.badge&&e.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1/2 translate-x-4 rounded-full bg-red-600 px-1 text-[10px] leading-4 text-white min-w-[16px]",children:e.badge}),f&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},e.id)})}),f.visible&&(0,h.jsx)("div",{className:"fixed z-50 bg-gray-900 border border-gray-700 rounded-lg shadow-xl py-1 min-w-[180px] md:min-w-[140px]",style:{left:f.x,top:f.y,maxWidth:"calc(100vw - 1rem)",maxHeight:"calc(100dvh - 1rem)",overflowY:"auto",transform:"translate(0, 0)"},onClick:a=>a.stopPropagation(),children:f.target?.kind==="state"?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{l("transition"),m(f.target.id),g()},children:"↗ Draw transition from here"}),(0,h.jsx)("button",{className:"block w-full text-left text-sm text-red-400 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{f.target?.id&&k(f.target.id),g()},children:"🗑 Delete state"})]}):(0,h.jsx)(h.Fragment,{children:(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{let a=prompt("State name:");a&&j(null,{name:a,kind:"normal"}),g()},children:"+ Add state here"})})})]})}a.s(["default",()=>cO],95421)}];
|
|
11
|
+
${a}`)}l(!0)};return(0,h.jsxs)("div",{className:"flex flex-col gap-1.5 px-2 py-1.5 bg-gray-900 border-b border-gray-800 md:flex-row md:flex-wrap md:items-center md:px-3",children:[(0,h.jsxs)("div",{className:"toolbar-ident",children:[(0,h.jsx)("input",{ref:A,type:"file",accept:".json,.smdf.json",onChange:a=>{let b=a.target.files?.[0];if(!b)return;let c=new FileReader;c.onload=a=>{e(a.target?.result,b.name)},c.readAsText(b),a.target.value=""},className:"hidden"}),(0,h.jsxs)("span",{className:"text-xs text-gray-400 mr-1 truncate max-w-[50vw] md:max-w-none",children:[b??"untitled.smdf.json",d&&(0,h.jsx)("span",{className:"text-yellow-500 ml-0.5",children:"●"})]}),(0,h.jsx)(cj,{}),"synced"===u&&(0,h.jsx)("span",{className:"text-[10px] text-emerald-500",title:"In sync with disk",children:"⌁ synced"}),"remote-changed"===u&&(0,h.jsx)("span",{className:"text-[10px] text-amber-400",title:v??"",children:"↻ remote changed"}),"error"===u&&(0,h.jsx)("span",{className:"text-[10px] text-red-400",title:v??"",children:"⚠ disk error"}),"idle"===u&&(0,h.jsx)("span",{className:"text-[10px] text-gray-600",title:v??"No file bound",children:"○ no disk"}),(0,h.jsx)(ck,{}),(0,h.jsx)("div",{className:"flex-1"})]}),(0,h.jsxs)("div",{className:"toolbar-strip",children:[(0,h.jsx)("button",{onClick:q,disabled:0===s.length,className:"toolbar-btn disabled:opacity-30",title:"Undo (Ctrl+Z)",children:"↩"}),(0,h.jsx)("button",{onClick:r,disabled:0===t.length,className:"toolbar-btn disabled:opacity-30",title:"Redo (Ctrl+Y)",children:"↪"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:p,className:"toolbar-btn",title:"Arrange states into layers (auto-layout)",children:"⤢ Arrange"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>o("select"===n?"transition":"select"),className:`toolbar-btn ${"transition"===n?"!bg-amber-700 !text-white":""}`,title:"transition"===n?"Exit draw mode (Esc)":"Draw transition mode",children:"transition"===n?"✏️ Drawing":"↗ Draw"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>A.current?.click(),className:"toolbar-btn",title:"Open local .smdf.json (browser)",children:"📂"}),(0,h.jsx)("button",{onClick:P,disabled:F,className:"toolbar-btn disabled:opacity-40",title:"Save to disk (STATELOOM_PROJECT_FILE)",children:"💾 Disk"}),(0,h.jsx)("button",{onClick:R,className:"toolbar-btn",title:"Reload from disk",children:"🔄"}),(0,h.jsx)("button",{onClick:()=>{let a=new Blob([f()],{type:"application/json"}),c=URL.createObjectURL(a),d=document.createElement("a");d.href=c,d.download=b??"statemachine.smdf.json",d.click(),URL.revokeObjectURL(c)},className:"toolbar-btn",title:"Download as file",children:"📥"}),(0,h.jsx)("select",{value:H,onChange:a=>{I(a.target.value),O(null),M(null)},className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",title:"Export format",children:b4.map(a=>(0,h.jsx)("option",{value:a,children:b5[a]},a))}),(0,h.jsx)("button",{onClick:Q,disabled:J,className:`toolbar-btn disabled:opacity-40 ${L?"!text-red-400":""}`,title:L??`Export the board as ${b5[H]}`,children:J?"…":"🖼 Export"}),N&&!L&&(0,h.jsxs)("span",{className:"text-[10px] text-emerald-500 truncate max-w-[40vw] md:max-w-[16rem]",title:N,children:["⤓ ",N]}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),B?(0,h.jsxs)("div",{className:"flex items-center gap-1",children:[(0,h.jsx)("input",{autoFocus:!0,className:"bg-gray-800 border border-gray-700 rounded px-2 py-0.5 text-xs text-gray-200 w-32 md:w-24",placeholder:"State name...",value:D,onChange:a=>E(a.target.value),onKeyDown:a=>{"Enter"===a.key&&S(),"Escape"===a.key&&C(!1)}}),(0,h.jsx)("button",{onClick:S,className:"toolbar-btn-sm",children:"✓"}),(0,h.jsx)("button",{onClick:()=>C(!1),className:"toolbar-btn-sm",children:"✕"})]}):(0,h.jsx)("button",{onClick:()=>C(!0),className:"toolbar-btn",children:"+State"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>j(),className:"toolbar-btn",children:"✓ Validate"}),(0,h.jsxs)("select",{value:T,onChange:a=>U(a.target.value),className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",children:[(0,h.jsx)("option",{value:"python",children:"Python"}),(0,h.jsx)("option",{value:"typescript",children:"TypeScript"})]}),(0,h.jsx)("button",{onClick:W,className:"toolbar-btn",children:"⚡ Generate"}),(0,h.jsx)("button",{onClick:V,className:"toolbar-btn",title:"Generate RISE rispec markdown",children:"📜 RISE"}),(0,h.jsxs)("button",{onClick:()=>l(!k),className:`toolbar-btn ${k?"text-blue-400":""}`,children:["</>"," Code"]})]})]})}function cm(){let a=b$(a=>a.generatedCode),b=b$(a=>a.showCodePreview),c=b$(a=>a.setShowCodePreview);return b?(0,h.jsx)("div",{className:"absolute inset-0 z-50 flex items-center justify-center bg-black/60 p-2 md:p-0",children:(0,h.jsxs)("div",{className:"bg-gray-900 border border-gray-700 rounded-lg shadow-xl w-full max-h-[85dvh] md:w-[80%] md:max-w-3xl md:max-h-[80dvh] flex flex-col",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gray-800",children:[(0,h.jsx)("h3",{className:"text-sm font-semibold text-gray-300",children:"Generated Definition (JSON)"}),(0,h.jsx)("button",{onClick:()=>c(!1),className:"text-gray-500 hover:text-gray-300 text-lg min-h-11 min-w-11 md:min-h-0 md:min-w-0","aria-label":"Close preview",children:"✕"})]}),(0,h.jsx)("pre",{className:"flex-1 overflow-auto overscroll-contain p-4 text-[11px] leading-relaxed text-green-400 font-mono md:text-sm",children:a??"No code generated yet"}),(0,h.jsx)("div",{className:"flex justify-end px-4 py-2 border-t border-gray-800",children:(0,h.jsx)("button",{onClick:()=>{a&&navigator.clipboard.writeText(a)},className:"text-xs bg-gray-700 hover:bg-gray-600 text-gray-300 px-4 py-3 rounded md:px-3 md:py-1",children:"Copy to Clipboard"})})]})}):null}function cn(){let a=b$(a=>a.applyRemote),b=b$(a=>a.setRemoteStatus),c=b$(a=>a.setRemoteMtime),d=(0,ci.useRequestedDoc)();return(0,i.useEffect)(()=>{let e=!1,f=(0,ci.docQuery)(d);async function g(){try{let a=await fetch(`/api/file${f}`,{cache:"no-store"});if(!a.ok)return null;return await a.json()}catch{return null}}(async()=>{let c=await g();e||(c?.path&&b$.getState().setDocPath(c.path),c?.exists&&c.content?a(c.content,c.mtime,c.path.split("/").pop()):b("idle",c?`No file at ${c.path}`:null))})();let h=new EventSource(`/api/watch${f}`);return h.addEventListener("hello",a=>{try{let b=JSON.parse(a.data);"number"==typeof b?.mtime&&c(b.mtime)}catch{}}),h.addEventListener("change",async d=>{let e=0;try{e=JSON.parse(d.data)?.mtime??0}catch{}if(e<=(b$.getState().remoteMtime??0))return;let f=await g();f?.exists&&f.content&&(b$.getState().dirty?(b("remote-changed",`Disk changed at ${new Date(f.mtime).toLocaleTimeString()} — local has unsaved edits`),c(f.mtime)):a(f.content,f.mtime,f.path.split("/").pop()))}),h.addEventListener("error",()=>{b("error","Watch stream disconnected")}),()=>{e=!0,h.close()}},[a,b,c,d]),null}function co({url:a}){let b=(0,ci.useRequestedDoc)();return(0,i.useEffect)(()=>{if(!a)return;let c=!1,d=null,e=null,f=null,g=null;return(async()=>{let h="";try{let a=await fetch(`/api/file${(0,ci.docQuery)(b)}`,{cache:"no-store"});a.ok&&(h=(await a.json())?.path??"")}catch{}c||(h&&b$.getState().setDocPath(h),(d=bQ({url:a,role:"web",docId:h,name:"web-designer",onFull:a=>{b$.getState().applyRemote(JSON.stringify({stateMachine:a.def}),a.mtime??Date.now(),h&&h.split("/").pop()||void 0),g=a.def},onPatch:a=>{b$.getState().applyRemoteOps(a.ops,a.mtime??Date.now(),a.seq),g=b$.getState().definition},onPresence:a=>{b$.getState().setPresence(a)}})).connect(),e=b$.subscribe((a,b)=>{a.definition===b.definition||a._applyingRemote||(f&&clearTimeout(f),f=setTimeout(()=>{var a,b;let c,e;if(!d||"connected"!==d.getSnapshot().status)return;let f=b$.getState().definition;if(null===g){d.emitFull(f),g=f;return}let h=(a=g,b=f,c=a??{settings:{namespace:"",asynchronous:!1},events:[],state:{name:b.state.name,states:[]}},function(a,b,c){let d={},e=!1,f=new Set([...Object.keys(a.settings),...Object.keys(b.settings)]),g=a.settings,h=b.settings;for(let a of f)q(g[a],h[a])||void 0===h[a]||(d[a]=h[a],e=!0);e&&c.push({op:"settings.update",patch:d})}(c,b,e=[]),function(a,b,c){let d=a.events,e=b.events,f=Math.min(d.length,e.length);for(let a=0;a<f;a++)!function(a,b,c,d){let e={},f=!1;for(let a of["name","file","feeder","description","timers"])q(b[a],c[a])||void 0===c[a]||(e[a]=c[a],f=!0);f&&d.push({op:"eventSource.update",index:a,patch:e});let g=b.events??[],h=c.events??[],i=new Set(h.map(a=>a.id));for(let a of g)i.has(a.id)||d.push({op:"event.remove",id:a.id});let j=g.filter(a=>i.has(a.id)),k=0;for(;k<h.length;){let b=h[k];k<j.length&&j[k].id===b.id?(function(a,b,c){let d={},e=!1;for(let c of["name","description","preAction","postAction"])q(a[c],b[c])||void 0===b[c]||(d[c]=b[c],e=!0);e&&c.push({op:"event.update",id:b.id,patch:d})}(j[k],b,d),function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++)if(!q(b[f],c[f])){let e={};b[f].name!==c[f].name&&(e.name=c[f].name),b[f].type!==c[f].type&&(e.type=c[f].type),d.push({op:"parameter.update",eventId:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"parameter.add",eventId:a,parameter:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"parameter.remove",eventId:a,index:e})}(b.id,j[k].parameters??[],b.parameters??[],d)):(d.push({op:"event.add",sourceIndex:a,event:b,index:k}),j.splice(k,0,b)),k++}}(a,d[a],e[a],c);for(let a=d.length;a<e.length;a++)c.push({op:"eventSource.add",source:e[a]});for(let a=d.length-1;a>=e.length;a--)c.push({op:"eventSource.remove",index:a})}(c,b,e),function(a,b,c){let d=o(a.state),e=o(b.state),f=new Map(d.map(a=>[a.name,a])),g=new Map(e.map(a=>[a.name,a])),h=p(a.state),i=p(b.state),j=[];for(let a of e){if(f.has(a.name))continue;let b=i.get(a.name)??null,{states:d,transitions:e,...g}=a;c.push({op:"state.add",parent:b,state:{...g}}),e&&e.length>0&&j.push({state:a.name,transitions:e})}for(let a of e){if(!f.has(a.name))continue;let b=h.get(a.name)??null,d=i.get(a.name)??null;b!==d&&null!==d&&c.push({op:"state.nest",child:a.name,newParent:d})}for(let a of e){let b=f.get(a.name);if(!b)continue;let d={},e=!1;q(b.kind,a.kind)||void 0===a.kind||(d.kind=a.kind,e=!0),q(b.description,a.description)||void 0===a.description||(d.description=a.description,e=!0),e&&c.push({op:"state.update",name:a.name,patch:d}),r(a.name,"onEntry",b.onEntry?.actions??[],a.onEntry?.actions??[],c),r(a.name,"onExit",b.onExit?.actions??[],a.onExit?.actions??[],c)}for(let a of j)a.transitions.forEach((b,d)=>{c.push({op:"transition.add",state:a.state,transition:b,index:d})});for(let a of e){let b=f.get(a.name);b&&function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++){if(q(b[f],c[f]))continue;let e={};for(let a of["event","nextState","condition","description","actions"])q(b[f][a],c[f][a])||void 0===c[f][a]||(e[a]=c[f][a]);Object.keys(e).length>0&&d.push({op:"transition.update",state:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"transition.add",state:a,transition:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"transition.remove",state:a,index:e})}(a.name,b.transitions??[],a.transitions??[],c)}for(let a=d.length-1;a>=0;a--){let b=d[a];if(g.has(b.name))continue;let e=b.transitions??[];for(let a=e.length-1;a>=0;a--)c.push({op:"transition.remove",state:b.name,index:a});c.push({op:"state.remove",name:b.name})}}(c,b,e),e);0!==h.length&&(d.emitPatch(h),g=f)},60))}))})(),()=>{c=!0,f&&clearTimeout(f),e&&e(),d&&d.disconnect()}},[a,b]),null}function cp(){let a=process.env.NEXT_PUBLIC_STATELOOM_BRIDGE_URL??process.env.NEXT_PUBLIC_SMCRAFT_BRIDGE_URL;return"string"==typeof a&&a.length>0?a:void 0}let cq=null;function cr(){return cq||(cq=(async()=>{let a=cp()??null;try{let b=await fetch("/api/config",{cache:"no-store"});if(b.ok){let c=await b.json();return{bridgeUrl:c.bridgeUrl||a,projectFile:c.projectFile??null}}}catch{}return{bridgeUrl:a,projectFile:null}})())}function cs(){let a=cp(),[b,c]=(0,i.useState)(a);return((0,i.useEffect)(()=>{let a=!0;return cr().then(b=>{a&&b.bridgeUrl&&c(b.bridgeUrl)}),()=>{a=!1}},[]),"string"==typeof b&&b.length>0)?(0,h.jsx)(co,{url:b}):(0,h.jsx)(cn,{})}function ct(a){return Number.isFinite(a)?Math.min(1.75,Math.max(.75,a)):1}function cu(a){"u">typeof document&&(document.documentElement.style.fontSize=`${16*ct(a)}px`)}let cv=1,cw=!1,cx=new Set;function cy(){return cw||(cw=!0,cv=1),cv}function cz(){return 1}function cA(a){return cx.add(a),()=>{cx.delete(a)}}function cB(a,b){let c=ct(a);if(cu(c),b,cw=!0,c!==cv)for(let a of(cv=c,cx))a()}function cC(a,b){return Math.max(1,Math.hypot(b.clientX-a.clientX,b.clientY-a.clientY))}function cD(a,b){for(let c=0;c<a.length;c++)if(a[c].identifier===b)return a[c];return null}function cE(){let a=(0,i.useSyncExternalStore)(cA,cy,cz),b=(0,i.useRef)(null),c=(0,i.useRef)(null),d=(0,i.useRef)(null);(0,i.useEffect)(()=>{cu(a)},[a]);let e=(0,i.useCallback)(a=>{c.current=a,null===d.current&&(d.current=requestAnimationFrame(()=>{d.current=null,null!==c.current&&cB(c.current,!1)}))},[]),f=(0,i.useCallback)(()=>{c.current=null,cB(1,!0)},[]);return((0,i.useEffect)(()=>{let a=()=>{let a=b.current;if(b.current=null,!a?.engaged)return;null!==d.current&&(cancelAnimationFrame(d.current),d.current=null);let e=c.current??cy();c.current=null,cB(ct(e),!0)},f=c=>{if(2!==c.touches.length){b.current&&a();return}let[d,e]=[c.touches[0],c.touches[1]];b1(d.target)||b1(e.target)||(b.current={a:d.identifier,b:e.identifier,startScale:cy(),startDist:cC(d,e),engaged:!1})},g=a=>{let c=b.current;if(!c)return;let d=cD(a.touches,c.a),f=cD(a.touches,c.b);if(!d||!f)return;a.preventDefault();let g=cC(d,f);if(!c.engaged){if(12>Math.abs(g-c.startDist))return;c.engaged=!0,c.startDist=g;return}e(ct(c.startScale*(g/c.startDist)))},h=c=>{let d=b.current;d&&(cD(c.touches,d.a)&&cD(c.touches,d.b)||a())};return document.addEventListener("touchstart",f,{passive:!0,capture:!0}),document.addEventListener("touchmove",g,{passive:!1,capture:!0}),document.addEventListener("touchend",h,{passive:!0,capture:!0}),document.addEventListener("touchcancel",h,{passive:!0,capture:!0}),()=>{document.removeEventListener("touchstart",f,{capture:!0}),document.removeEventListener("touchmove",g,{capture:!0}),document.removeEventListener("touchend",h,{capture:!0}),document.removeEventListener("touchcancel",h,{capture:!0}),null!==d.current&&cancelAnimationFrame(d.current)}},[e]),1===a)?null:(0,h.jsxs)("div",{className:"ui-scale-pill",role:"status","aria-live":"polite",children:[(0,h.jsxs)("span",{children:["UI ",Math.round(100*a),"%"]}),(0,h.jsx)("button",{type:"button",onClick:f,"aria-label":"Reset interface size to 100 percent",children:"Reset"})]})}let cF=(a,b)=>"chen"===b?`stateloom:erd-layout:chen:${a}`:`stateloom:erd-layout:${a}`,cG="stateloom:erd-notation";function cH(a,b){try{return JSON.parse(localStorage.getItem(cF(a,b))??"{}")}catch{return{}}}async function cI(a){let b=a.slice(0,a.lastIndexOf("/")),c=((await (await fetch("/api/docs",{cache:"no-store"})).json()).docs??[]).map(a=>a.path).filter(a=>a.endsWith(".smdf.json")&&a.slice(0,a.lastIndexOf("/"))===b),d=[];for(let a of c)try{let b=await (await fetch(`/api/file${(0,ci.docQuery)(a)}`,{cache:"no-store"})).json(),c=JSON.parse(b.content??"null"),e=c?.stateMachine??c?.StateMachine??c;e?.state&&d.push({path:a,def:e})}catch{}return d}let cJ="w-full rounded border border-gray-700 bg-gray-950 px-2 py-1 text-xs text-gray-200 placeholder:text-gray-600",cK="rounded border border-gray-700 bg-gray-800 px-2 py-1 text-xs text-gray-200 hover:bg-gray-700",cL="mb-1 mt-3 text-[11px] font-semibold uppercase tracking-wide text-gray-500";function cM(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(""),[d,e]=(0,i.useState)(null),[f,g]=(0,i.useState)({}),[j,k]=(0,i.useState)("crowsfoot"),[l,m]=(0,i.useState)({...M}),[n,o]=(0,i.useState)(0),[p,q]=(0,i.useState)(null),[r,s]=(0,i.useState)({text:"loading…",tone:"ok"}),t=(0,i.useCallback)((a,b="ok")=>s({text:a,tone:b}),[]),[u,v]=(0,i.useState)(!1);(0,i.useEffect)(()=>{let a=setTimeout(()=>v(!0),4e3);return()=>{clearTimeout(a),v(!1)}},[r]);let[w,x]=(0,i.useState)("entities"),[y,z]=(0,i.useState)(!1),[A,B]=(0,i.useState)(!1),[C,D]=(0,i.useState)(!1),E=(0,i.useRef)(null),[F,G]=(0,i.useState)(0),[H,I]=(0,i.useState)(null),J=(0,i.useRef)(null);(0,i.useEffect)(()=>{let b=!1,d=null;return(async()=>{let f=await (await fetch(`/api/file${(0,ci.docQuery)(a)}`,{cache:"no-store"})).json();if(b)return;if(f.error)return t(f.error,"warn");let h=f.path??"",i=null;try{let a=f.content?JSON.parse(f.content):null;X(a)&&(i={...a,relationships:a.relationships??[]})}catch{}if(f.exists&&!i)return t(`${h} is not a readable ERD definition`,"warn");let j=(h.split("/").pop()??"Untitled").replace(/\.erdf\.json$/i,""),l=function(){try{return"chen"===localStorage.getItem(cG)?"chen":"crowsfoot"}catch{return"crowsfoot"}}();c(h),e(i??{settings:{namespace:"Default",name:j},entities:[],relationships:[]}),k(l),g(cH(h,l)),q(null),I(null),o(a=>a+1),t(f.exists?"loaded":"new document — the first edit writes it");let{bridgeUrl:m}=await cr();!b&&m&&(J.current=d=bQ({url:m,role:"web",docId:h,name:"web-designer",onFull:a=>{let b=a.def;X(b)&&(e({...b,relationships:b.relationships??[]}),t("updated live"))},onPatch:()=>{},onPresence:a=>G(a.length)}),d.connect())})().catch(a=>!b&&t(String(a),"warn")),()=>{b=!0,J.current=null,d?.disconnect()}},[a,t]);let K=(0,i.useMemo)(()=>{if(!d)return{};let a=function(a,b={}){let c=b.notation??"crowsfoot",d=b.hSpacing??70,e=b.vSpacing??("chen"===c?130:90),f="chen"===c?ae:al,g=[],h=new Set;for(let b of a.entities??[])!b?.name||h.has(b.name)||(h.add(b.name),g.push(b));let i=new Map,j=(a,b,c=new Set)=>a===b||!c.has(a)&&(c.add(a),(i.get(a)??[]).some(a=>j(a,b,c)));for(let b of a.relationships??[]){if(!b||!h.has(b.from)||!h.has(b.to)||b.from===b.to)continue;let[a,c]="N:1"===b.cardinality?[b.to,b.from]:[b.from,b.to];if((i.get(a)??[]).includes(c)||j(c,a))continue;let d=i.get(a);d?d.push(c):i.set(a,[c])}let k=new Map,l=(a,b)=>{if(!((k.get(a)??-1)>=b))for(let c of(k.set(a,b),i.get(a)??[]))l(c,b+1)},m=new Set([...i.values()].flat());for(let a of g)m.has(a.name)||l(a.name,0);for(let a of g)k.has(a.name)||l(a.name,0);for(let a of[...g].sort((a,b)=>k.get(b.name)-k.get(a.name))){let b=i.get(a.name)??[];b.length&&k.set(a.name,Math.min(...b.map(a=>k.get(a)))-1)}let n=[],o=new Map,p=(a,b)=>((n[b]??=[]).push(a),o.set(a.id,a),a);for(let a of g)p({id:a.name,entity:a.name,...f(a),upper:[],lower:[],x:0},k.get(a.name)??0);let q=0;for(let[a,b]of i)for(let c of b){let b=a;for(let d=k.get(a)+1;d<k.get(c);d++){let a=p({id:`\u0000lane${q++}`,width:28,height:0,upper:[],lower:[],x:0},d);o.get(b).lower.push(a.id),a.upper.push(b),b=a.id}o.get(b).lower.push(c),o.get(c).upper.push(b)}for(let a=n.length-1;a>=0;a--)n[a]?.length||n.splice(a,1);let r=(a,b)=>a.length?a.reduce((a,c)=>a+b(o.get(c)),0)/a.length:null,s=(a,b)=>{let c=new Map;for(let a of n)a.forEach((a,b)=>c.set(a.id,b));let d=new Map(a.map((a,d)=>[a.id,r(a[b],a=>c.get(a.id))??d]));a.sort((a,b)=>d.get(a.id)-d.get(b.id))};for(let a=0;a<2;a++){for(let a=1;a<n.length;a++)s(n[a],"upper");for(let a=n.length-2;a>=0;a--)s(n[a],"lower")}let t=a=>a.x+a.width/2,u=(a,b)=>{let c=0;for(let e of a){let a=r(e[b],t);e.x=Math.max(c,null===a?c:a-e.width/2),c=e.x+e.width+d}};for(let a of n)u(a,"upper");for(let a=n.length-2;a>=0;a--)u(n[a],"lower");let v=Math.min(0,...[...o.values()].map(a=>a.x)),w={},x=40;for(let a of n){for(let b of a)b.entity&&(w[b.entity]={x:Math.round(b.x-v)+40,y:x,width:b.width,height:b.height});x+=Math.max(0,...a.map(a=>a.height))+e}return w}(d,{notation:j});for(let[b,c]of Object.entries(f))a[b]&&(a[b]={...a[b],...c});return a},[d,f,j]),L=(0,i.useMemo)(()=>d?function(a){let b=[],c=function(a){let b=new Map;for(let c of a.entities??[])c?.name&&!b.has(c.name)&&b.set(c.name,c);return b}(a),d=new Set;for(let[e,f]of(a.entities??[]).entries()){if(!f?.name){b.push({ruleId:"E001",message:`Entity at index ${e} has no name`,element:`entities[${e}]`});continue}d.has(f.name)&&b.push({ruleId:"E001",message:`Duplicate entity name "${f.name}"`,element:f.name}),d.add(f.name);let a=new Set;for(let[d,e]of(f.attributes??[]).entries()){if(!e?.name){b.push({ruleId:"E002",message:`Attribute at index ${d} of "${f.name}" has no name`,element:`${f.name}[${d}]`});continue}let g=`${f.name}.${e.name}`;if(a.has(e.name)&&b.push({ruleId:"E002",message:`Duplicate attribute "${g}"`,element:g}),a.add(e.name),e.references){let a=function(a){let b=a.indexOf(".");return b<0?{entity:a}:{entity:a.slice(0,b),attribute:a.slice(b+1)}}(e.references),d=c.get(a.entity);d?a.attribute&&!(d.attributes??[]).some(b=>b?.name===a.attribute)&&b.push({ruleId:"E005",message:`"${g}" references undefined attribute "${e.references}"`,element:g}):b.push({ruleId:"E005",message:`"${g}" references undefined entity "${a.entity}"`,element:g})}}}for(let[d,e]of(a.relationships??[]).entries()){let a=`relationships[${d}]`;for(let f of["from","to"]){let g=e?.[f];g&&c.has(g)||b.push({ruleId:"E003",message:`Relationship ${d} ${f} names undefined entity "${g??""}"`,element:a})}V.includes(e?.cardinality)||b.push({ruleId:"E004",message:`Relationship ${d} cardinality "${e?.cardinality??""}" is not one of ${V.join(", ")}`,element:a})}return b}(d):[],[d]),N=(0,i.useMemo)(()=>L.map(a=>(a.element??"").split(/[.[]/)[0]).filter(Boolean),[L]),O=(0,i.useCallback)(async a=>{let c;if(d&&b){try{c=a(d)}catch(a){return t(a instanceof Error?a.message:String(a),"warn")}e(c),I(null);try{let a=await fetch(`/api/file${(0,ci.docQuery)(b)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:JSON.stringify(c,null,2)+"\n"})});if(!a.ok)throw Error((await a.json())?.error??`HTTP ${a.status}`);J.current?.emitFull(c),t("saved")}catch(a){t(`not saved: ${a instanceof Error?a.message:String(a)}`,"warn")}}},[d,b,t]),Q=(0,i.useCallback)((a,c)=>{g(d=>{let e={...d,[a]:{x:Math.round(c.x),y:Math.round(c.y)}};try{localStorage.setItem(cF(b,j),JSON.stringify(e))}catch{}return e})},[b,j]),S=()=>{g({});try{localStorage.removeItem(cF(b,j))}catch{}o(a=>a+1)},T=async()=>{if(!d)return;t("checking links…");let a=await cI(b);if(0===a.length)return I("none"),x("problems"),z(!0),t("no .smdf.json beside this document to check against","warn");let c=a.flatMap(a=>(function(a,b){let c=[],d=new Map;for(let a of b.entities??[])a?.name&&!d.has(a.name)&&d.set(a.name,a);let e=a.settings?.name??"",f=a.settings?.objects??[],g=a.state?function a(b){let c=[b];for(let d of b.states??[])c.push(...a(d));for(let d of b.parallel?.states??[])c.push(...a(d));return c}(a.state):[],h=g.flatMap(a=>(a.transitions??[]).map(a=>a.condition??"")),i=new Map;for(let a of f){let e=d.get(a.class);if(e){i.set(a.instance,e);continue}h.some(b=>Y(b,a.instance).length>0)&&c.push({ruleId:"L001",message:`Object "${a.instance}" has class "${a.class}", which is not an entity in "${b.settings?.name??""}", and a guard reads its fields`,element:a.instance})}for(let a of g)for(let b of a.transitions??[])if(b.condition)for(let[d,e]of i)for(let f of Y(b.condition,d))(e.attributes??[]).some(a=>a?.name===f)||c.push({ruleId:"L002",message:`Guard on ${a.name} [${b.event}] reads "${d}.${f}", which is not an attribute of "${e.name}"`,element:a.name});if(e){let a=new Set([...i.values()].map(a=>a.name));for(let d of b.entities??[])for(let b of d?.attributes??[])b&&U(b).includes(e)&&(a.has(d.name)||c.push({ruleId:"L003",message:`"${d.name}.${b.name}" stores the state of "${e}", but "${d.name}" is not the class of any of that machine's objects`,element:`${d.name}.${b.name}`}))}return c})(a.def,d).map(b=>({...b,message:`${a.def.settings?.name??a.path}: ${b.message}`})));c.push(...function(a,b){let c=[];for(let d of a.entities??[])for(let a of d?.attributes??[])if(a)for(let e of U(a))b.includes(e)||c.push({ruleId:"L004",message:`"${d.name}.${a.name}" stores the state of "${e}", which is not among the machines checked (${b.join(", ")||"none"})`,element:`${d.name}.${a.name}`});return c}(d,a.map(a=>a.def.settings?.name??""))),I(c),x("problems"),z(!0),D(!1),t(`checked ${a.length} machine(s): ${c.length} problem(s)`,c.length?"warn":"ok")},W=async a=>{let c=(await cI(b)).find(b=>b.def.settings?.name===a);c?(0,ci.navigateToDoc)(c.path):t(`no .smdf.json beside this document defines '${a}'`,"warn")},aa=()=>{let a=E.current?.getBoundingClientRect();return{width:a?.width??0,height:a?.height??0}},ab=a=>{let{width:b,height:c}=aa();m(d=>P(d,a,{x:b/2,y:c/2}))},ac=d?.entities.find(a=>a.name===p)??null,ad=b.split("/").pop()||"…",ag=Array.isArray(H)?H:[],ak=L.length+ag.length,am=[{id:"entities",label:"Entities",icon:"▭"},{id:"relations",label:"Relations",icon:"⟷"},{id:"problems",label:"Problems",icon:"⚠",badge:ak||void 0}],an=a=>w===a?"":"hidden md:block",ao=()=>{d&&navigator.clipboard?.writeText(function(a){let b=["erDiagram"],c=" ",d=new Set;for(let e of a.relationships??[]){if(!e?.from||!e?.to)continue;let a=af[e.cardinality]??af["1:N"];b.push(`${c}${ah(e.from)} ${a} ${ah(e.to)} : ${aj(e.label??"")}`),d.add(e.from),d.add(e.to)}let e=new Set;for(let f of a.entities??[]){if(!f?.name||e.has(f.name))continue;e.add(f.name);let a=(f.attributes??[]).filter(a=>a?.name);if(0===a.length){d.has(f.name)||b.push(`${c}${ah(f.name)}`);continue}for(let d of(b.push(`${c}${ah(f.name)} {`),a))b.push(`${c}${c}${function(a){let b=[];"pk"===a.key&&b.push("PK"),"uk"===a.key&&b.push("UK"),a.references&&b.push("FK");let c=[],d=U(a);d.length&&c.push(`stateOf ${d.join(", ")}`),a.description&&c.push(a.description);let e=[ai(a.type??"","unknown"),ai(a.name,"unnamed")];return b.length&&e.push(b.join(", ")),c.length&&e.push(aj(c.join(" — "))),e.join(" ")}(d)}`);b.push(`${c}}`)}return b.join("\n")}(d)).then(()=>t("mermaid copied"))};return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden bg-gray-950 text-gray-200",onClick:()=>A&&B(!1),children:[(0,h.jsxs)("header",{className:"relative z-40 flex items-center gap-2 border-b border-gray-800 bg-gray-900 px-2 py-1.5 text-xs md:px-3 md:py-2",children:[(0,h.jsx)("span",{className:"font-semibold text-blue-300",children:"ERD"}),(0,h.jsx)(cj,{}),(0,h.jsxs)("span",{className:"min-w-0 flex-1 truncate text-gray-400",title:b,children:[d?.settings.name??ad,(0,h.jsxs)("span",{className:"hidden text-gray-600 lg:inline",children:[" · ",ad]})]}),(0,h.jsx)("span",{className:"inline-flex shrink-0 overflow-hidden rounded border border-gray-700",role:"group","aria-label":"Notation",children:[["crowsfoot","▤","Crow's foot — attributes listed inside the entity box"],["chen","◇","Chen — attributes as ovals, relationships as diamonds"]].map(([a,c,d])=>(0,h.jsx)("button",{title:d,"aria-label":d,"aria-pressed":j===a,onClick:()=>(a=>{if(a!==j){try{localStorage.setItem(cG,a)}catch{}k(a),g(cH(b,a)),o(a=>a+1)}})(a),className:`px-2.5 py-1.5 text-sm leading-none md:px-2 md:py-1 ${j===a?"bg-blue-900/60 text-blue-200":"bg-gray-800 text-gray-400 hover:bg-gray-700"}`,children:c},a))}),(0,h.jsxs)("div",{className:"hidden shrink-0 items-center gap-2 md:flex",children:[(0,h.jsx)("button",{className:cK,onClick:S,title:"Forget the dragged positions and lay the board out again",children:"⤢ Arrange"}),(0,h.jsx)("button",{className:cK,onClick:T,title:"Check the state machines beside this document against it",children:"Check links"}),(0,h.jsx)("button",{className:cK,onClick:ao,children:"Copy mermaid"}),(0,h.jsx)("button",{className:cK,onClick:()=>D(a=>!a),"aria-pressed":!C,title:C?"Show the panel":"Hide the panel — the board takes the full width",children:C?"⟨ Panel":"Panel ⟩"})]}),(0,h.jsxs)("div",{className:"relative shrink-0 md:hidden",children:[(0,h.jsx)("button",{className:"rounded border border-gray-700 bg-gray-800 px-3 py-1.5 text-sm leading-none text-gray-200","aria-label":"More actions","aria-expanded":A,onClick:a=>{a.stopPropagation(),B(a=>!a)},children:"⋯"}),A&&(0,h.jsx)("div",{className:"absolute right-0 top-full z-50 mt-1 w-56 overflow-hidden rounded-lg border border-gray-700 bg-gray-900 py-1 shadow-xl",children:[["⤢ Arrange the board",S],["Check links to the machines",T],["Copy as mermaid",ao]].map(([a,b])=>(0,h.jsx)("button",{className:"block w-full px-4 py-3 text-left text-sm text-gray-200 hover:bg-gray-800",onClick:()=>{B(!1),b()},children:a},a))})]})]}),(0,h.jsxs)("div",{className:"relative flex min-h-0 flex-1",children:[(0,h.jsxs)("div",{ref:E,className:"relative min-w-0 flex-1 overflow-hidden",children:[d&&(0,h.jsx)(aC,{definition:d,notation:j,positions:K,viewport:l,onViewportChange:m,selection:p,errorElements:N,fitKey:n,onSelect:q,onClearSelection:()=>q(null),onEntityMove:Q,onOpenMachine:W,emptyHint:"No entities yet — add one in the panel, or let an agent call add_entity."}),(0,h.jsxs)("div",{className:`pointer-events-none absolute left-2 top-2 flex max-w-[75%] items-center gap-1.5 rounded bg-gray-950/70 px-1.5 py-0.5 text-[11px] ${"warn"===r.tone?"text-amber-300":"text-gray-500"}`,role:"status",children:[(0,h.jsx)("span",{className:`h-1.5 w-1.5 shrink-0 rounded-full ${"warn"===r.tone?"bg-amber-400":"bg-emerald-500"}`}),(0,h.jsxs)("span",{className:`truncate transition-opacity duration-500 ${u&&"ok"===r.tone?"opacity-0":"opacity-100"}`,children:[r.text,F>1?` \xb7 ${F} in the room`:""]})]}),(0,h.jsx)("div",{className:"absolute bottom-3 right-3 flex flex-col overflow-hidden rounded-lg border border-gray-700 bg-gray-900/90 shadow-lg backdrop-blur",children:[["+","Zoom in",()=>ab(1.25)],["−","Zoom out",()=>ab(.8)],["⛶","Fit the whole diagram",()=>o(a=>a+1)]].map(([a,b,c])=>(0,h.jsx)("button",{title:b,"aria-label":b,onClick:c,className:"h-10 w-10 border-b border-gray-800 text-base leading-none text-gray-200 last:border-b-0 hover:bg-gray-800 md:h-8 md:w-8 md:text-sm",children:a},b))}),ac&&!y&&(0,h.jsxs)("button",{className:"absolute bottom-3 left-1/2 max-w-[60%] -translate-x-1/2 truncate rounded-full border border-blue-500/60 bg-gray-900/95 px-4 py-2 text-sm text-blue-200 shadow-lg md:hidden",onClick:()=>{x("entities"),z(!0)},children:["✎ ",ac.name]})]}),y&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:()=>z(!1),"aria-hidden":"true"}),d&&(0,h.jsxs)("aside",{className:`safe-x fixed inset-x-0 bottom-0 z-30 flex h-[62dvh] flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-transform duration-200 ease-out ${y?"translate-y-0":"pointer-events-none translate-y-full"} md:pointer-events-auto md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:rounded-none md:border-l md:border-t-0 md:shadow-none md:transition-none ${C?"md:hidden":""}`,children:[(0,h.jsxs)("div",{className:"md:hidden",children:[(0,h.jsx)("div",{className:"flex justify-center pb-1 pt-2",children:(0,h.jsx)("span",{className:"h-1 w-10 rounded-full bg-gray-700"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:am.find(a=>a.id===w)?.label}),(0,h.jsx)("button",{onClick:()=>z(!1),className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain p-3",children:[(0,h.jsxs)("section",{className:an("entities"),children:[(0,h.jsx)("div",{className:cL,style:{marginTop:0},children:"Entities"}),(0,h.jsx)("div",{className:"flex flex-wrap gap-1",children:d.entities.map(a=>(0,h.jsx)("button",{className:`${cK} ${p===a.name?"border-blue-500 text-blue-300":""}`,onClick:()=>q(a.name),children:a.name},a.name))}),(0,h.jsx)(cN,{fields:[{name:"name",placeholder:"new entity"}],submit:"+ Entity",onSubmit:a=>{O(b=>(function(a,b){if(!b.name?.trim())throw Error("An entity needs a name.");let c=Z(a);if(c.entities.some(a=>a.name===b.name))throw Error(`Entity '${b.name}' already exists.`);return c.entities.push(_({...b,attributes:b.attributes??[]})),c})(b,{name:a.name.trim()})),q(a.name.trim())}}),ac&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)("div",{className:`${cL} flex items-center justify-between gap-2`,children:[(0,h.jsx)("span",{className:"truncate text-sm normal-case tracking-normal text-gray-200",children:ac.name}),(0,h.jsx)("button",{className:`${cK} normal-case tracking-normal`,onClick:()=>(a=>{let b=K[a],{width:c,height:d}=aa();b&&c&&(m(R([b],c,d,{padding:28,maxScale:1.25})),q(a),z(!1))})(ac.name),title:"Bring this entity to the middle of the board at a readable size",children:"◎ Show on board"})]}),(0,h.jsxs)("label",{className:"mb-1 flex items-center gap-2 text-[11px] text-gray-400",title:"Exists only through another entity (an order line, without its order). Chen draws it as a double rectangle.",children:[(0,h.jsx)("input",{type:"checkbox",checked:!!ac.weak,onChange:a=>O(b=>{var c,d;let e,f;return c=ac.name,d={weak:a.target.checked},f=$(e=Z(b),c),void 0!==d.description&&(d.description?f.description=d.description:delete f.description),void 0!==d.weak&&(d.weak?f.weak=!0:delete f.weak),e})}),"weak entity"]}),(ac.attributes??[]).map(a=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 font-mono text-[11px]",children:[(0,h.jsxs)("span",{className:a.stateOf?"text-blue-300":"text-gray-300",children:[a.name," : ",a.type,(0,h.jsxs)("span",{className:"text-gray-500",children:[a.key?` ${a.key.toUpperCase()}`:"",a.references?` → ${a.references}`:"",a.stateOf?` ◉ ${[a.stateOf].flat().join(", ")}`:""]})]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":`Remove ${a.name}`,onClick:()=>O(b=>(function(a,b,c){let d=Z(a),e=$(d,b),f=e.attributes?.length??0;if(e.attributes=(e.attributes??[]).filter(a=>a.name!==c),e.attributes.length===f)throw Error(`Attribute '${b}.${c}' not found.`);return d})(b,ac.name,a.name)),children:"✕"})]},a.name)),(0,h.jsx)(cN,{fields:[{name:"name",placeholder:"attribute"},{name:"type",placeholder:"type",initial:"string"},{name:"key",options:["","pk","uk"]},{name:"references",placeholder:"references Entity.attr"},{name:"stateOf",placeholder:"stateOf Machine"}],submit:"+ Attribute",onSubmit:a=>O(b=>(function(a,b,c){if(!c.name?.trim())throw Error("An attribute needs a name.");let d=Z(a),e=$(d,b);if(e.attributes??=[],e.attributes.some(a=>a.name===c.name))throw Error(`Attribute '${b}.${c.name}' already exists.`);return e.attributes.push(_({...c})),d})(b,ac.name,{name:a.name.trim(),type:a.type.trim()||"string",key:"pk"===a.key||"uk"===a.key?a.key:void 0,references:a.references.trim()||void 0,stateOf:a.stateOf.trim()||void 0}))}),(0,h.jsxs)("button",{className:`${cK} mt-2 text-red-300`,onClick:()=>{O(a=>{var b;let c;return b=ac.name,$(c=Z(a),b),c.entities=c.entities.filter(a=>a.name!==b),c.relationships=c.relationships.filter(a=>a.from!==b&&a.to!==b),c}),q(null)},children:["🗑 Delete ",ac.name]})]})]}),(0,h.jsxs)("section",{className:an("relations"),children:[(0,h.jsx)("div",{className:`${cL} max-md:mt-0`,children:"Relationships"}),0===d.relationships.length&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-gray-600",children:"None yet."}),d.relationships.map((a,b)=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 text-[11px] text-gray-300",children:[(0,h.jsxs)("span",{children:[a.from," ",(0,h.jsx)("span",{className:"text-gray-500",children:a.cardinality})," ",a.to,a.label?(0,h.jsxs)("span",{className:"text-gray-500",children:[" : ",a.label]}):null]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":"Remove relationship",onClick:()=>O(b=>(function(a,b,c,d){let e=Z(a),f=e.relationships.length;if(e.relationships=e.relationships.filter(a=>a.from!==b||a.to!==c||void 0!==d&&a.label!==d),e.relationships.length===f)throw Error(`No relationship from '${b}' to '${c}'${void 0===d?"":` labelled '${d}'`}.`);return e})(b,a.from,a.to,a.label)),children:"✕"})]},b)),d.entities.length>0&&(0,h.jsx)(cN,{fields:[{name:"from",options:d.entities.map(a=>a.name)},{name:"cardinality",options:[...V],initial:"1:N"},{name:"to",options:d.entities.map(a=>a.name)},{name:"label",placeholder:"label (a verb)"}],submit:"+ Relationship",onSubmit:a=>O(b=>(function(a,b){let c=Z(a);if($(c,b.from),$(c,b.to),!V.includes(b.cardinality))throw Error(`Cardinality '${b.cardinality}' is not one of ${V.join(", ")}.`);return c.relationships.push(_({...b})),c})(b,{from:a.from,to:a.to,cardinality:a.cardinality,label:a.label.trim()||void 0}))})]}),(0,h.jsxs)("section",{className:an("problems"),children:[(0,h.jsx)("div",{className:`${cL} max-md:mt-0 ${0===ak&&!H?"md:hidden":""}`,children:"Problems"}),L.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-red-300",children:["[",a.ruleId,"] ",a.message]},`p${b}`)),ag.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-amber-300",children:["[",a.ruleId,"] ",a.message]},`l${b}`)),"none"===H&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-amber-300",children:"No state machine (.smdf.json) sits beside this document, so there was nothing to check it against."}),0===ak&&"none"!==H&&(0,h.jsx)("div",{className:`py-0.5 text-[11px] ${H?"text-green-400":"text-gray-600 md:hidden"}`,children:H?"Every name the machines use resolves.":"The document is valid. “Check links” (⋯) holds the state machines beside it against it."})]})]})]})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:am.map(a=>{let b=y&&w===a.id;return(0,h.jsxs)("button",{onClick:()=>{var b;return b=a.id,void(z(a=>!(a&&w===b)),x(b))},"aria-pressed":b,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${b?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"text-base leading-none",children:a.icon}),(0,h.jsx)("span",{children:a.label}),void 0!==a.badge&&(0,h.jsx)("span",{className:"absolute right-1/2 top-1 min-w-[16px] translate-x-5 rounded-full bg-red-600 px-1 text-[10px] leading-4 text-white",children:a.badge}),b&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},a.id)})})]})}function cN({fields:a,submit:b,onSubmit:c}){let d=()=>Object.fromEntries(a.map(a=>[a.name,a.initial??a.options?.[0]??""])),[e,f]=(0,i.useState)(d),g=a[0];return(0,h.jsxs)("form",{className:"mt-1 grid grid-cols-2 gap-1",onSubmit:b=>{b.preventDefault();let h={...d(),...e};h[g.name]?.trim()&&(c(h),f(b=>Object.fromEntries(a.map(a=>[a.name,a.options?b[a.name]??"":a.initial??""]))))},children:[a.map(a=>a.options?(0,h.jsx)("select",{className:cJ,"aria-label":a.name,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value})),children:a.options.map(b=>(0,h.jsx)("option",{value:b,children:b||`(${a.name})`},b))},a.name):(0,h.jsx)("input",{className:cJ,"aria-label":a.name,placeholder:a.placeholder,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value}))},a.name)),(0,h.jsx)("button",{type:"submit",className:`${cK} ${1===a.length?"":"col-span-2"}`,children:b})]})}function cO(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(null);(0,i.useEffect)(()=>{let a=!0;return cr().then(b=>{a&&c(b.projectFile&&W(b.projectFile)?"erd":"machine")}),()=>{a=!1}},[]);let d=a?W(a)?"erd":"machine":b;return null===d?(0,h.jsx)("div",{className:"app-shell bg-gray-950"}):"erd"===d?(0,h.jsx)(cM,{}):(0,h.jsx)(cP,{})}function cP(){let[a,b]=(0,i.useState)("properties"),[c,d]=(0,i.useState)(!1),e=b$(a=>a.errors),f=b$(a=>a.contextMenu),g=b$(a=>a.hideContextMenu),j=b$(a=>a.addState),k=b$(a=>a.removeState),l=b$(a=>a.setDrawMode),m=b$(a=>a.setDrawSource),n=[{id:"properties",label:"Properties",icon:"🎛"},{id:"events",label:"Events",icon:"⚡"},{id:"settings",label:"Settings",icon:"⚙"},{id:"validation",label:"Errors",icon:"⚠",badge:e.length||void 0}],o=n.find(b=>b.id===a)?.label??"";return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden",onClick:()=>f.visible&&g(),children:[(0,h.jsx)(cs,{}),(0,h.jsx)(cE,{}),(0,h.jsx)(cl,{}),(0,h.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden relative",children:[(0,h.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,h.jsx)(cb,{})}),c&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:()=>d(!1),"aria-hidden":"true"}),(0,h.jsxs)("aside",{className:`safe-x fixed inset-x-0 bottom-0 z-30 h-[70dvh] flex flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-transform duration-200 ease-out ${c?"translate-y-0":"translate-y-full pointer-events-none"} md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:pointer-events-auto md:rounded-none md:border-t-0 md:border-l md:shadow-none md:transition-none`,children:[(0,h.jsxs)("div",{className:"md:hidden",children:[(0,h.jsx)("div",{className:"flex justify-center pt-2 pb-1",children:(0,h.jsx)("span",{className:"h-1 w-10 rounded-full bg-gray-700"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:o}),(0,h.jsx)("button",{onClick:()=>d(!1),className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsx)("div",{className:"hidden border-b border-gray-800 md:flex",children:n.map(c=>(0,h.jsxs)("button",{onClick:()=>b(c.id),className:`flex-1 text-xs py-2 px-1 text-center transition-colors relative ${a===c.id?"text-blue-400 border-b-2 border-blue-400 bg-gray-800/50":"text-gray-500 hover:text-gray-300"}`,children:[c.label,void 0!==c.badge&&c.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1 bg-red-600 text-white text-[9px] rounded-full px-1 min-w-[14px]",children:c.badge})]},c.id))}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain",children:["properties"===a&&(0,h.jsx)(cd,{}),"events"===a&&(0,h.jsx)(cf,{}),"settings"===a&&(0,h.jsx)(cg,{}),"validation"===a&&(0,h.jsx)(ch,{})]})]}),(0,h.jsx)(cm,{})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:n.map(e=>{let f=c&&a===e.id;return(0,h.jsxs)("button",{onClick:()=>{var c;return c=e.id,void(d(b=>!(b&&a===c)),b(c))},"aria-pressed":f,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${f?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"text-base leading-none",children:e.icon}),(0,h.jsx)("span",{children:e.label}),void 0!==e.badge&&e.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1/2 translate-x-4 rounded-full bg-red-600 px-1 text-[10px] leading-4 text-white min-w-[16px]",children:e.badge}),f&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},e.id)})}),f.visible&&(0,h.jsx)("div",{className:"fixed z-50 bg-gray-900 border border-gray-700 rounded-lg shadow-xl py-1 min-w-[180px] md:min-w-[140px]",style:{left:f.x,top:f.y,maxWidth:"calc(100vw - 1rem)",maxHeight:"calc(100dvh - 1rem)",overflowY:"auto",transform:"translate(0, 0)"},onClick:a=>a.stopPropagation(),children:f.target?.kind==="state"?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{l("transition"),m(f.target.id),g()},children:"↗ Draw transition from here"}),(0,h.jsx)("button",{className:"block w-full text-left text-sm text-red-400 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{f.target?.id&&k(f.target.id),g()},children:"🗑 Delete state"})]}):(0,h.jsx)(h.Fragment,{children:(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{let a=prompt("State name:");a&&j(null,{name:a,kind:"normal"}),g()},children:"+ Add state here"})})})]})}a.s(["default",()=>cO],95421)}];
|
|
12
12
|
|
|
13
13
|
//# sourceMappingURL=%5Broot-of-the-server%5D__edbb995c._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--XCT3lnw_1F5LD0GG4F94_--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, user-scalable=no, interactive-widget=resizes-content"/><link rel="stylesheet" href="/_next/static/chunks/8f6bd51bbcce6314.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/662d1b0ce457c16b.js"/><script src="/_next/static/chunks/5e1795a806bd6c51.js" async=""></script><script src="/_next/static/chunks/96818f5620f039a1.js" async=""></script><script src="/_next/static/chunks/turbopack-34fc7de1568e2a7f.js" async=""></script><script src="/_next/static/chunks/7a768100bec00db1.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><meta name="theme-color" content="#030712"/><meta name="color-scheme" content="dark"/><title>SMCraft Designer</title><meta name="description" content="Visual State Machine Designer"/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="antialiased"><div hidden=""><!--$--><!--/$--></div><script>try{var s=parseFloat(localStorage.getItem("stateloom.uiScale.v1"));if(s>=0.75&&s<=1.75)document.documentElement.style.fontSize=(16*s)+"px"}catch(e){}</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/662d1b0ce457c16b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[88287,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n3:I[74895,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n4:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"ViewportBoundary\"]\n9:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"MetadataBoundary\"]\nb:I[52576,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n:HL[\"/_next/static/chunks/8f6bd51bbcce6314.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"XCT3lnw_1F5LD0GG4F94-\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/8f6bd51bbcce6314.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"antialiased\",\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"try{var s=parseFloat(localStorage.getItem(\\\"stateloom.uiScale.v1\\\"));if(s\u003e=0.75\u0026\u0026s\u003c=1.75)document.documentElement.style.fontSize=(16*s)+\\\"px\\\"}catch(e){}\"}}],[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, user-scalable=no, interactive-widget=resizes-content\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#030712\"}],[\"$\",\"meta\",\"3\",{\"name\":\"color-scheme\",\"content\":\"dark\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[49310,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"title\",\"0\",{\"children\":\"SMCraft Designer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visual State Machine Designer\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"3\",{}]]\n"])</script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/662d1b0ce457c16b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[88287,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n3:I[74895,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n4:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"ViewportBoundary\"]\n9:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"MetadataBoundary\"]\nb:I[52576,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--XCT3lnw_1F5LD0GG4F94_--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/662d1b0ce457c16b.js"/><script src="/_next/static/chunks/5e1795a806bd6c51.js" async=""></script><script src="/_next/static/chunks/96818f5620f039a1.js" async=""></script><script src="/_next/static/chunks/turbopack-34fc7de1568e2a7f.js" async=""></script><script src="/_next/static/chunks/7a768100bec00db1.js" async=""></script><title>500: Internal Server Error.</title><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/662d1b0ce457c16b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[88287,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n3:I[74895,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n4:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"ViewportBoundary\"]\n9:I[51858,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"MetadataBoundary\"]\nb:I[52576,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"XCT3lnw_1F5LD0GG4F94-\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[49310,[\"/_next/static/chunks/7a768100bec00db1.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-red-300:#ffa3a3;--color-red-400:#ff6568;--color-red-500:#fb2c36;--color-red-600:#e40014;--color-amber-300:#ffd236;--color-amber-400:#fcbb00;--color-amber-700:#b75000;--color-yellow-400:#fac800;--color-yellow-500:#edb200;--color-yellow-600:#cd8900;--color-green-400:#05df72;--color-green-500:#00c758;--color-emerald-500:#00bb7f;--color-blue-200:#bedbff;--color-blue-300:#90c5ff;--color-blue-400:#54a2ff;--color-blue-500:#3080ff;--color-blue-600:#155dfc;--color-blue-900:#1c398e;--color-gray-200:#e5e7eb;--color-gray-300:#d1d5dc;--color-gray-400:#99a1af;--color-gray-500:#6a7282;--color-gray-600:#4a5565;--color-gray-700:#364153;--color-gray-800:#1e2939;--color-gray-900:#101828;--color-gray-950:#030712;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-normal:0em;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0,0,.2,1);--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-geist-sans);--default-mono-font-family:var(--font-geist-mono)}@supports (color:lab(0% 0 0)){:root,:host{--color-red-300:lab(76.5514% 36.422 15.5335);--color-red-400:lab(63.7053% 60.745 31.3109);--color-red-500:lab(55.4814% 75.0732 48.8528);--color-red-600:lab(48.4493% 77.4328 61.5452);--color-amber-300:lab(86.4156% 6.13147 78.3961);--color-amber-400:lab(80.1641% 16.6016 99.2089);--color-amber-700:lab(47.2709% 42.9082 69.2966);--color-yellow-400:lab(83.2664% 8.65132 106.895);--color-yellow-500:lab(76.3898% 14.5258 98.4589);--color-yellow-600:lab(62.7799% 22.4197 86.1544);--color-green-400:lab(78.503% -64.9265 39.7492);--color-green-500:lab(70.5521% -66.5147 45.8073);--color-emerald-500:lab(66.9756% -58.27 19.5419);--color-blue-200:lab(86.15% -4.04379 -21.0797);--color-blue-300:lab(77.5052% -6.4629 -36.42);--color-blue-400:lab(65.0361% -1.42065 -56.9802);--color-blue-500:lab(54.1736% 13.3369 -74.6839);--color-blue-600:lab(44.0605% 29.0279 -86.0352);--color-blue-900:lab(26.1542% 15.7545 -51.5504);--color-gray-200:lab(91.6229% -.159115 -2.26791);--color-gray-300:lab(85.1236% -.612259 -3.7138);--color-gray-400:lab(65.9269% -.832707 -8.17473);--color-gray-500:lab(47.7841% -.393182 -10.0268);--color-gray-600:lab(35.6337% -1.58697 -10.8425);--color-gray-700:lab(27.1134% -.956401 -12.3224);--color-gray-800:lab(16.1051% -1.18239 -11.7533);--color-gray-900:lab(8.11897% .811279 -12.254);--color-gray-950:lab(1.90334% .278696 -5.48866)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-x-4{inset-inline:calc(var(--spacing)*4)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-2{top:calc(var(--spacing)*2)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/2{right:50%}.right-3{right:calc(var(--spacing)*3)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-3{bottom:calc(var(--spacing)*3)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-4{height:calc(var(--spacing)*4)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-\[62dvh\]{height:62dvh}.h-\[70dvh\]{height:70dvh}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\[85dvh\]{max-height:85dvh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-11{min-height:calc(var(--spacing)*11)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-56{width:calc(var(--spacing)*56)}.w-80{width:calc(var(--spacing)*80)}.w-full{width:100%}.w-px{width:1px}.max-w-\[40vw\]{max-width:40vw}.max-w-\[50vw\]{max-width:50vw}.max-w-\[60\%\]{max-width:60%}.max-w-\[75\%\]{max-width:75%}.max-w-\[80px\]{max-width:80px}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-11{min-width:calc(var(--spacing)*11)}.min-w-\[14px\]{min-width:14px}.min-w-\[16px\]{min-width:16px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-500\/60{border-color:#3080ff99}@supports (color:color-mix(in lab, red, red)){.border-blue-500\/60{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-800\/50{border-color:#1e293980}@supports (color:color-mix(in lab, red, red)){.border-gray-800\/50{border-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.\!bg-amber-700{background-color:var(--color-amber-700)!important}.bg-amber-400{background-color:var(--color-amber-400)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/30{background-color:color-mix(in oklab,var(--color-blue-900)30%,transparent)}}.bg-blue-900\/60{background-color:#1c398e99}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/60{background-color:color-mix(in oklab,var(--color-blue-900)60%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab, red, red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab, red, red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-900\/90{background-color:#101828e6}@supports (color:color-mix(in lab, red, red)){.bg-gray-900\/90{background-color:color-mix(in oklab,var(--color-gray-900)90%,transparent)}}.bg-gray-900\/95{background-color:#101828f2}@supports (color:color-mix(in lab, red, red)){.bg-gray-900\/95{background-color:color-mix(in oklab,var(--color-gray-900)95%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-gray-950\/70{background-color:#030712b3}@supports (color:color-mix(in lab, red, red)){.bg-gray-950\/70{background-color:color-mix(in oklab,var(--color-gray-950)70%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pb-0\.5{padding-bottom:calc(var(--spacing)*.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-geist-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.\!text-red-400{color:var(--color-red-400)!important}.\!text-white{color:var(--color-white)!important}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-emerald-500{color:var(--color-emerald-500)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-gray-900{--tw-ring-color:var(--color-gray-900)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\:text-gray-600::placeholder{color:var(--color-gray-600)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-gray-800\/30:hover{background-color:#1e29394d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-red-400:hover{color:var(--color-red-400)}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}@media not all and (min-width:48rem){.max-md\:mt-0{margin-top:calc(var(--spacing)*0)}}@media (min-width:48rem){.md\:pointer-events-auto{pointer-events:auto}.md\:static{position:static}.md\:z-auto{z-index:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-8{height:calc(var(--spacing)*8)}.md\:h-auto{height:auto}.md\:max-h-\[80dvh\]{max-height:80dvh}.md\:max-h-\[calc\(100vh-160px\)\]{max-height:calc(100vh - 160px)}.md\:min-h-0{min-height:calc(var(--spacing)*0)}.md\:w-8{width:calc(var(--spacing)*8)}.md\:w-24{width:calc(var(--spacing)*24)}.md\:w-80{width:calc(var(--spacing)*80)}.md\:w-\[80\%\]{width:80%}.md\:max-w-3xl{max-width:var(--container-3xl)}.md\:max-w-\[16rem\]{max-width:16rem}.md\:max-w-none{max-width:none}.md\:min-w-0{min-width:calc(var(--spacing)*0)}.md\:min-w-\[140px\]{min-width:140px}.md\:translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.md\:flex-row{flex-direction:row}.md\:flex-wrap{flex-wrap:wrap}.md\:items-center{align-items:center}.md\:overflow-y-auto{overflow-y:auto}.md\:rounded-none{border-radius:0}.md\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.md\:p-0{padding:calc(var(--spacing)*0)}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-3{padding-inline:calc(var(--spacing)*3)}.md\:py-1{padding-block:calc(var(--spacing)*1)}.md\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.md\:py-2{padding-block:calc(var(--spacing)*2)}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.md\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:transition-none{transition-property:none}}@media (min-width:64rem){.lg\:inline{display:inline}}}:root{--background:#030712;--foreground:#e2e8f0}body{background:var(--background);color:var(--foreground);font-family:Arial,Helvetica,sans-serif}.toolbar-btn{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-gray-700);background-color:var(--color-gray-800);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-gray-300);border-radius:.25rem}@media (hover:hover){.toolbar-btn:hover{background-color:var(--color-gray-700)}}.toolbar-btn-sm{background-color:var(--color-gray-700);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-gray-300);border-radius:.25rem}@media (hover:hover){.toolbar-btn-sm:hover{background-color:var(--color-gray-600)}}:root{--sm-dock-h:3.5rem}html,body{height:100%}html,body,.app-shell{touch-action:pan-x pan-y}body{overscroll-behavior:none;overflow:hidden}.app-shell{height:100dvh;padding-top:env(safe-area-inset-top);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.dock-offset{padding-bottom:calc(var(--sm-dock-h) + env(safe-area-inset-bottom))}.dock-safe{padding-bottom:env(safe-area-inset-bottom)}.safe-x{padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}@media (min-width:768px){.dock-offset{padding-bottom:0}}.ui-scale-pill{z-index:45;right:calc(env(safe-area-inset-right) + 12px);bottom:calc(var(--sm-dock-h) + env(safe-area-inset-bottom) + 8px);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#9ca3af;white-space:nowrap;background:#111827eb;border:1px solid #374151;border-radius:9999px;align-items:center;gap:8px;padding:6px 8px 6px 12px;font-size:12px;line-height:1;display:flex;position:fixed}.ui-scale-pill button{color:#93c5fd;background:#1f2937;border-radius:9999px;min-height:32px;padding:0 12px;font-size:12px;line-height:1}@media (min-width:768px){.ui-scale-pill{bottom:calc(env(safe-area-inset-bottom) + 12px)}}.toolbar-ident,.toolbar-strip{align-items:center;gap:.375rem;min-width:0;display:flex}.toolbar-strip{scrollbar-width:thin;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;overflow:auto hidden}.toolbar-strip>*{flex:none}@media (min-width:768px){.toolbar-ident,.toolbar-strip{display:contents}}@media (pointer:coarse){.toolbar-btn,.toolbar-btn-sm{justify-content:center;align-items:center;min-width:2.75rem;min-height:2.75rem;padding-inline:.75rem;font-size:.8125rem;display:inline-flex}.toolbar-strip select,.toolbar-strip input{min-height:2.75rem}input:not([type=checkbox]),select,textarea{font-size:16px}input[type=checkbox]{width:1.15rem;height:1.15rem}.touch-targets button{min-width:2.75rem;min-height:2.75rem}.touch-targets select,.touch-targets input:not([type=checkbox]){min-height:2.75rem}.touch-targets textarea{min-height:3.5rem}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
|
2
|
+
.slc-pane{--slc-surface:#030712;--slc-node-fill:#0f172a;--slc-node-stroke:#475569;--slc-composite-fill:#0c1020;--slc-final-fill:#1e293b;--slc-accent:#3b82f6;--slc-accent-fill:#1e3a5f;--slc-accent-ink:#93c5fd;--slc-danger:#ef4444;--slc-draw-source:#f59e0b;--slc-active:#22c55e;--slc-edge:#94a3b8;--slc-chip-fill:#1e293b;--slc-chip-stroke:#334155;--slc-label:#e2e8f0;--slc-muted:#94a3b8;--slc-faint:#64748b;--slc-entry:#22c55e;--slc-exit:#f97316;--slc-composite:#6366f1;--slc-panel-bg:#111827e6;--slc-panel-border:#374151;--slc-panel-hover:#1f2937;touch-action:none;width:100%;height:100%;position:relative}.slc-surface{background:var(--slc-surface);width:100%;height:100%;display:block}.slc-node{fill:var(--slc-node-fill);stroke:var(--slc-node-stroke);stroke-width:1.5px}.slc-node--final{fill:var(--slc-final-fill)}.slc-node--composite{fill:var(--slc-composite-fill)}.slc-node--source{fill:var(--slc-accent-fill);stroke:var(--slc-draw-source)}.slc-node--error{stroke:var(--slc-danger);stroke-width:2px}.slc-node--selected{stroke:var(--slc-accent);stroke-width:2.5px}.slc-node-name{fill:var(--slc-label);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:14px;font-weight:600}.slc-node-kind{fill:var(--slc-faint);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:10px}.slc-node-entry{fill:var(--slc-entry);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:9px}.slc-node-exit{fill:var(--slc-exit);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:9px}.slc-node-warn{fill:var(--slc-danger);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:12px}.slc-node-drill{fill:var(--slc-composite);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:9px}.slc-node--drawing{cursor:crosshair}.slc-node--drillable{cursor:pointer}.slc-node--draggable{cursor:grab}.slc-node--draggable:active{cursor:grabbing}.slc-node--static{cursor:default}.slc-edge{fill:none;stroke:var(--slc-edge);stroke-width:1.5px;cursor:pointer}.slc-edge:hover{stroke:var(--slc-accent-ink)}.slc-edge--selected{stroke:var(--slc-accent);stroke-width:2.5px}.slc-arrowhead{fill:var(--slc-edge)}.slc-arrowhead--selected{fill:var(--slc-accent)}.slc-chip{cursor:pointer}.slc-chip-plate{fill:var(--slc-chip-fill);stroke:var(--slc-chip-stroke);stroke-width:1px}.slc-chip-plate--selected{fill:var(--slc-accent-fill);stroke:var(--slc-accent)}.slc-chip-text{fill:var(--slc-muted);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:11px;font-weight:500}.slc-chip-text--selected{fill:var(--slc-accent-ink)}.slc-chip-guard{fill:var(--slc-faint);-webkit-user-select:none;user-select:none;font-size:9px}.slc-chip-leader{stroke:var(--slc-chip-stroke);stroke-width:1px;stroke-dasharray:2 3;pointer-events:none}.slc-chip-leader--selected{stroke:var(--slc-accent)}.slc-glyph{fill:none;stroke:#7c93b0;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.slc-glyph--selected{stroke:var(--slc-accent-ink)}.slc-glyph .slc-glyph-dot{fill:#7c93b0}.slc-glyph--selected .slc-glyph-dot{fill:var(--slc-accent-ink)}.slc-draw-hint{fill:var(--slc-draw-source);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:13px}.slc-empty{fill:var(--slc-faint);font-size:16px}.slc-crumbs{z-index:10;border:1px solid var(--slc-panel-border);background:var(--slc-panel-bg);border-radius:.5rem;align-items:center;gap:.25rem;padding:.375rem .75rem;font-size:.8125rem;line-height:1.25;display:flex;position:absolute;top:.5rem;left:.5rem}.slc-crumb-item{align-items:center;gap:.25rem;display:flex}.slc-crumb-sep{color:var(--slc-faint)}.slc-crumb{cursor:pointer;color:var(--slc-muted);font:inherit;background:0 0;border:0;padding:0}.slc-crumb:hover{color:var(--slc-accent-ink)}.slc-crumb--current{color:var(--slc-accent-ink);font-weight:600}.slc-hud{z-index:10;border:1px solid var(--slc-panel-border);background:var(--slc-panel-bg);color:var(--slc-muted);-webkit-user-select:none;user-select:none;border-radius:.5rem;align-items:center;gap:.125rem;padding:.25rem .375rem;font-size:.75rem;display:flex;position:absolute;bottom:.75rem;left:.75rem}.slc-hud-btn{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;border-radius:.25rem;padding:.125rem .375rem}.slc-hud-btn:hover:not(:disabled){background:var(--slc-panel-hover);color:var(--slc-label)}.slc-hud-btn:disabled{opacity:.4;cursor:default}.slc-hud-btn--scale{font-variant-numeric:tabular-nums;min-width:3.25rem}.slc-hud--coarse .slc-hud-btn{padding:.5rem .75rem}.slc-hud-sep{color:var(--slc-panel-border);padding:0 .125rem}.slc-hud-hint{color:var(--slc-faint);padding:0 .25rem;font-size:.625rem}.slc-picker{z-index:50;border:1px solid var(--slc-panel-border);background:var(--slc-panel-bg);border-radius:.5rem;min-width:160px;padding:.5rem;position:absolute;box-shadow:0 10px 25px #00000073}.slc-picker-title{color:var(--slc-muted);padding:0 .25rem .25rem;font-size:.75rem}.slc-picker-sub{color:var(--slc-faint);padding:0 .25rem .25rem;font-size:.75rem}.slc-picker-empty{color:var(--slc-faint);padding:.5rem .25rem;font-size:.75rem}.slc-picker-item{text-align:left;width:100%;color:var(--slc-label);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:.25rem;padding:.25rem .5rem;font-size:.875rem;display:block}.slc-picker-item:hover{background:var(--slc-panel-hover)}.slc-picker-cancel{text-align:left;border:0;border-top:1px solid var(--slc-panel-border);width:100%;color:var(--slc-faint);font:inherit;cursor:pointer;background:0 0;margin-top:.25rem;padding:.25rem .5rem;font-size:.75rem;display:block}.slc-picker-cancel:hover{color:var(--slc-label)}@keyframes slc-node-in{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes slc-node-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes slc-edge-draw{0%{stroke-dashoffset:1px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@keyframes slc-pulse{0%,to{filter:drop-shadow(0 0 1px #22c55e8c)}50%{filter:drop-shadow(0 0 6px #22c55ef2)}}.slc-node-enter{transform-box:fill-box;transform-origin:50%;animation:.22s ease-out both slc-node-in}.slc-node-exit-group{transform-box:fill-box;transform-origin:50%;pointer-events:none;animation:.2s ease-in forwards slc-node-out}.slc-edge-enter{stroke-dasharray:1;animation:.26s ease-out both slc-edge-draw}.slc-node--active{stroke:var(--slc-active);animation:1.2s ease-in-out infinite slc-pulse}@media (prefers-reduced-motion:reduce){.slc-node-enter,.slc-edge-enter{animation:none}.slc-node-exit-group{animation-duration:1ms}.slc-node--active{filter:drop-shadow(0 0 4px #22c55ed9);animation:none}}.slc-erd-line{fill:none;stroke:var(--slc-edge);stroke-width:1.5px}.slc-erd-mark{fill:none;stroke:var(--slc-edge);stroke-width:1.5px;stroke-linecap:round}.slc-erd-rel-label{fill:var(--slc-muted);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:11px;font-weight:500}.slc-erd-rule{stroke:var(--slc-node-stroke);stroke-width:1px;pointer-events:none}.slc-erd-row{fill:var(--slc-muted);-webkit-user-select:none;user-select:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.slc-erd-row--pk{fill:var(--slc-label);font-weight:600}.slc-erd-row--state{fill:var(--slc-accent-ink)}.slc-erd-row--empty{fill:var(--slc-faint);font-style:italic}.slc-erd-state{cursor:pointer}.slc-erd-state:hover .slc-erd-row--state{text-decoration:underline}.slc-erd-badge{fill:var(--slc-faint);letter-spacing:.04em;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:600}.slc-erd-oval{fill:var(--slc-node-fill);stroke:var(--slc-node-stroke);stroke-width:1.2px}.slc-erd-oval-text{fill:var(--slc-muted);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:11px}.slc-erd-oval-text--pk{fill:var(--slc-label);font-weight:600;text-decoration:underline}.slc-erd-attr-line{fill:none;stroke:var(--slc-chip-stroke);stroke-width:1px}.slc-erd-diamond{fill:var(--slc-chip-fill);stroke:var(--slc-edge);stroke-width:1.5px}.slc-erd-weak{fill:none;stroke:var(--slc-node-stroke);stroke-width:1.2px;pointer-events:none}.slc-erd-card{fill:var(--slc-label);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:12px;font-weight:700}.slc-erd-state:hover .slc-erd-oval{stroke:var(--slc-accent)}.slc-erd-empty{color:var(--slc-faint);pointer-events:none;justify-content:center;align-items:center;font-size:16px;display:flex;position:absolute;inset:0}
|