@morphql/playground 0.1.28 → 0.1.29

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.
@@ -474,4 +474,4 @@ substring("Hello World", -5) // "World"`}},{name:"split",doc:{signature:"spl
474
474
  round(4.5, "half-even") // 4 (banker's)
475
475
  round(3.5, "half-even") // 4 (banker's)`}},{name:"abs",doc:{signature:"abs(value)",description:"Returns the absolute value of a number.",parameters:[{name:"value",description:"The number"}],returns:"number",example:"abs(-42) // 42"}},{name:"fixed",doc:{signature:"fixed(value, [decimals], [mode])",description:`Formats a number to a fixed number of decimal places. Mode controls tie-breaking: "half-up" (default) rounds .5 away from zero; "half-even" uses banker's rounding. Returns a string. Default decimals: 2.`,parameters:[{name:"value",description:"The number to format"},{name:"decimals",description:"(Optional) Number of decimal places. Default: 2"},{name:"mode",description:'(Optional) Rounding mode: "half-up" (default) or "half-even"'}],returns:"string",example:`fixed(2.5, 2) // "2.50" (half-up)
476
476
  fixed(2.5, 2, "half-even") // "2.50" (banker's, no tie at 2 decimals)
477
- fixed(2.5, 0, "half-even") // "2" (banker's, rounds to even)`}},{name:"min",doc:{signature:"min(a, b, ...)",description:"Returns the smallest of two or more numbers.",parameters:[{name:"a, b, ...",description:"Numbers to compare"}],returns:"number",example:"min(3, 1, 4) // 1"}},{name:"max",doc:{signature:"max(a, b, ...)",description:"Returns the largest of two or more numbers.",parameters:[{name:"a, b, ...",description:"Numbers to compare"}],returns:"number",example:"max(3, 1, 4) // 4"}},{name:"trim",doc:{signature:"trim(str)",description:"Removes leading and trailing whitespace from a string.",parameters:[{name:"str",description:"The string to trim"}],returns:"string",example:'trim(" hello ") // "hello"'}},{name:"padstart",doc:{signature:"padstart(str, length, [char])",description:"Pads the start of a string with a character until it reaches the target length.",parameters:[{name:"str",description:"The string to pad"},{name:"length",description:"Target total length"},{name:"char",description:'(Optional) Pad character. Default: " "'}],returns:"string",example:'padstart(id, 8, "0") // "00000042"'}},{name:"padend",doc:{signature:"padend(str, length, [char])",description:"Pads the end of a string with a character until it reaches the target length.",parameters:[{name:"str",description:"The string to pad"},{name:"length",description:"Target total length"},{name:"char",description:'(Optional) Pad character. Default: " "'}],returns:"string",example:'padend(name, 20) // "Alice "'}},{name:"indexof",doc:{signature:"indexof(str, search)",description:"Returns the index of the first occurrence of a substring. Returns -1 if not found.",parameters:[{name:"str",description:"The string to search in"},{name:"search",description:"The substring to find"}],returns:"number",example:'indexof("hello world", "world") // 6'}},{name:"startswith",doc:{signature:"startswith(str, prefix)",description:"Returns true if the string starts with the given prefix.",parameters:[{name:"str",description:"The string to check"},{name:"prefix",description:"The prefix to look for"}],returns:"boolean",example:'startswith("hello", "he") // true'}},{name:"endswith",doc:{signature:"endswith(str, suffix)",description:"Returns true if the string ends with the given suffix.",parameters:[{name:"str",description:"The string to check"},{name:"suffix",description:"The suffix to look for"}],returns:"boolean",example:'endswith("hello", "lo") // true'}}],BL=()=>zL.map(i=>i.name),jL=[{symbol:"===",category:"comparison",precedence:7},{symbol:"!==",category:"comparison",precedence:7},{symbol:"==",category:"comparison",precedence:7},{symbol:"!=",category:"comparison",precedence:7},{symbol:"<=",category:"comparison",precedence:6},{symbol:">=",category:"comparison",precedence:6},{symbol:"<",category:"comparison",precedence:6},{symbol:">",category:"comparison",precedence:6},{symbol:"&&",category:"logical",precedence:5},{symbol:"||",category:"logical",precedence:4},{symbol:"!",category:"logical",precedence:9},{symbol:"+",category:"arithmetic",precedence:10},{symbol:"-",category:"arithmetic",precedence:10},{symbol:"*",category:"arithmetic",precedence:11},{symbol:"/",category:"arithmetic",precedence:11},{symbol:"%",category:"arithmetic",precedence:11},{symbol:"=",category:"assignment",precedence:1}],DL=()=>jL.map(i=>i.symbol);function PL(){return{keywords:IL(),builtinFunctions:BL(),operators:DL(),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\/\/.*$/,"comment"],[/\/\*/,"comment","@comment"],[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":"keyword","@builtinFunctions":"predefined","@default":"identifier"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/,"number"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]]}}}const $L=PL();function qL(i){i.languages.register({id:"morphql"}),i.languages.setMonarchTokensProvider("morphql",$L),i.languages.setLanguageConfiguration("morphql",{comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"(",close:")"},{open:"{",close:"}"},{open:"[",close:"]"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"(",close:")"},{open:"{",close:"}"},{open:"[",close:"]"},{open:'"',close:'"'},{open:"'",close:"'"}]})}function io({node:i,name:e}){const[a,r]=pt.useState(!0);if(!i)return null;const u=i.properties&&Object.keys(i.properties).length>0,o=i.items,h=u||o,p=d=>{switch(d){case"string":return"text-emerald-400";case"number":return"text-amber-400";case"boolean":return"text-indigo-400";case"array":return"text-pink-400";case"object":return"text-slate-400";default:return"text-slate-500"}};return et.jsxs("div",{className:"pl-4",children:[et.jsxs("div",{className:"flex items-center gap-2 py-0.5 group",children:[h?et.jsx("button",{onClick:()=>r(!a),className:"p-0.5 hover:bg-slate-800 rounded transition-colors text-slate-500",children:et.jsx(ku,{className:`w-3 h-3 transition-transform ${a?"rotate-90":""}`})}):et.jsx("div",{className:"w-4"}),e&&et.jsxs("span",{className:"text-xs font-mono text-slate-300",children:[e,":"]}),et.jsxs("span",{className:`text-[10px] uppercase font-bold ${p(i.type)} tracking-wider opacity-80`,children:[i.type,i.isOpen&&et.jsx("span",{className:"text-[10px] text-indigo-400 ml-1 italic",children:"(open)"})]})]}),a&&et.jsxs("div",{children:[u&&Object.entries(i.properties).map(([d,_])=>et.jsx(io,{name:d,node:_},d)),o&&et.jsx(io,{name:"items",node:i.items})]})]})}function GL({initialQuery:i=Os[0].query,initialSourceData:e=Os[0].source,className:a="",onQueryChange:r,onSourceDataChange:u}){const[o,h]=pt.useState(i),[p,d]=pt.useState(e),[_,v]=pt.useState(!1),[y,O]=pt.useState({result:"",generatedCode:"",error:null}),[z,G]=pt.useState("query"),[V,A]=pt.useState("output"),b=w=>{const E=w.trim();return E.startsWith("<")?"xml":E.startsWith("{")||E.startsWith("[")?"json":"plaintext"},N=b(p);pt.useEffect(()=>{h(i)},[i]),pt.useEffect(()=>{d(e)},[e]),pt.useEffect(()=>{async function w(){try{const E=await kL(o,{analyze:!0}),S=E(p);O({result:typeof S=="string"?S:JSON.stringify(S,null,2),generatedCode:E.code,error:null,analysis:E.analysis})}catch(E){O({result:"",generatedCode:"",error:E instanceof Error?E.message:String(E)})}}w()},[o,p]);const $=w=>{const E=Os.find(S=>S.name===w.target.value);E&&(h(E.query),d(E.source),r?.(E.query),u?.(E.source))},B=()=>{navigator.clipboard.writeText(y.result),v(!0),setTimeout(()=>v(!1),2e3)},Z=w=>{const E=w||"";h(E),r?.(E)},I=w=>{const E=w||"";d(E),u?.(E)};return et.jsxs("div",{className:`flex flex-col h-full bg-[#0f172a] text-slate-200 overflow-hidden ${a}`,children:[et.jsxs("header",{className:"flex items-center justify-between px-6 py-4 border-b border-slate-800 bg-[#1e293b]",children:[et.jsxs("div",{className:"flex items-center gap-3",children:[et.jsx("div",{className:"w-8 h-8 rounded-lg bg-indigo-500 flex items-center justify-center shadow-lg shadow-indigo-500/20",children:et.jsx(ku,{className:"w-5 h-5 text-white fill-current"})}),et.jsxs("div",{children:[et.jsx("h1",{className:"text-lg font-bold bg-clip-text text-transparent bg-gradient-to-r from-white to-slate-400",children:"MorphQL Playground"}),et.jsx("p",{className:"text-xs text-slate-400 font-medium",children:"High-Performance Query-to-Code Engine"})]})]}),et.jsxs("div",{className:"flex items-center gap-4",children:[et.jsxs("select",{className:"text-xs font-semibold px-3 py-1.5 rounded-full bg-slate-800 hover:bg-slate-700 transition-colors border border-slate-700 text-slate-200 outline-none cursor-pointer",onChange:$,defaultValue:"",children:[et.jsx("option",{value:"",disabled:!0,children:"Load Example..."}),Os.map(w=>et.jsx("option",{value:w.name,children:w.name},w.name))]}),et.jsx("a",{href:"https://hyperwindmill.github.io/morphql",className:"text-xs font-semibold px-3 py-1.5 rounded-full bg-slate-800 hover:bg-slate-700 transition-colors border border-slate-700",children:"Documentation"})]})]}),et.jsxs("main",{className:"flex-1 flex overflow-hidden",children:[et.jsxs("div",{className:"w-1/2 flex flex-col border-r border-slate-800",children:[et.jsxs("div",{className:"flex items-center gap-1 px-4 py-2 bg-slate-900 border-b border-slate-800",children:[et.jsxs("button",{onClick:()=>G("query"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${z==="query"?"bg-slate-800 text-indigo-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(ES,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Morph Query"})]}),et.jsxs("button",{onClick:()=>G("js"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${z==="js"?"bg-slate-800 text-amber-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(_S,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Generated JS"})]}),et.jsxs("button",{onClick:()=>G("source"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${z==="source"?"bg-slate-800 text-emerald-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(Nm,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Source Data"})]})]}),et.jsxs("div",{className:"flex-1 overflow-hidden",children:[et.jsx("div",{className:`h-full flex flex-col pt-2 bg-[#1e1e1e] ${z==="query"?"block":"hidden"}`,children:et.jsx(bu,{theme:"vs-dark",defaultLanguage:"morphql",value:o,onChange:Z,beforeMount:w=>{qL(w)},options:{minimap:{enabled:!1},fontSize:13,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})}),et.jsx("div",{className:`h-full flex flex-col pt-2 bg-[#1e1e1e] ${z==="js"?"block":"hidden"}`,children:et.jsx(bu,{theme:"vs-dark",defaultLanguage:"javascript",value:y.generatedCode,options:{readOnly:!0,minimap:{enabled:!1},fontSize:13,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})}),et.jsx("div",{className:`h-full flex flex-col pt-2 bg-[#1e1e1e] ${z==="source"?"block":"hidden"}`,children:et.jsx(bu,{theme:"vs-dark",language:N,value:p,onChange:I,options:{minimap:{enabled:!1},fontSize:14,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})})]})]}),et.jsxs("div",{className:"w-1/2 flex flex-col overflow-hidden",children:[et.jsxs("div",{className:"flex items-center justify-between px-4 py-2 bg-slate-900 border-b border-slate-800",children:[et.jsxs("div",{className:"flex items-center gap-1",children:[et.jsxs("button",{onClick:()=>A("output"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${V==="output"?"bg-slate-800 text-amber-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(ku,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Transformation Result"})]}),et.jsxs("button",{onClick:()=>A("structure"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${V==="structure"?"bg-slate-800 text-indigo-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(Rm,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Structure"})]})]}),V==="output"&&et.jsx("button",{onClick:B,className:"p-1 hover:bg-slate-800 rounded transition-colors text-slate-400 hover:text-white",title:"Copy Result",children:_?et.jsx(dS,{className:"w-4 h-4 text-emerald-400"}):et.jsx(mS,{className:"w-4 h-4"})})]}),et.jsxs("div",{className:"flex-1 overflow-hidden bg-[#1e1e1e]",children:[et.jsx("div",{className:`h-full flex flex-col pt-2 ${V==="output"?"block":"hidden"}`,children:y.error?et.jsxs("div",{className:"p-4 flex gap-3 text-red-400 bg-red-950/20 m-4 rounded-lg border border-red-900/50",children:[et.jsx(Rm,{className:"w-5 h-5 flex-shrink-0"}),et.jsxs("div",{children:[et.jsx("p",{className:"text-sm font-bold mb-1",children:"Compilation/Execution Error"}),et.jsx("p",{className:"text-xs font-mono",children:y.error})]})]}):et.jsx(bu,{theme:"vs-dark",language:b(y.result),value:y.result,options:{readOnly:!0,minimap:{enabled:!1},fontSize:14,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})}),V==="structure"&&et.jsxs("div",{className:"h-full flex flex-col divide-y divide-slate-800 overflow-hidden",children:[et.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[et.jsxs("div",{className:"px-4 py-1.5 bg-slate-900/50 flex items-center justify-between border-b border-slate-800",children:[et.jsx("span",{className:"text-[9px] font-black uppercase tracking-widest text-slate-500",children:"Input Structure"}),et.jsx(Nm,{className:"w-3 h-3 text-slate-600"})]}),et.jsx("div",{className:"flex-1 overflow-auto p-4 custom-scrollbar",children:y.analysis?.source?et.jsx(io,{node:y.analysis.source}):et.jsx("div",{className:"h-full flex items-center justify-center text-slate-600 italic text-xs",children:"No input structure detected"})})]}),et.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[et.jsxs("div",{className:"px-4 py-1.5 bg-slate-900/50 flex items-center justify-between border-b border-slate-800",children:[et.jsx("span",{className:"text-[9px] font-black uppercase tracking-widest text-slate-500",children:"Output Structure"}),et.jsx(ku,{className:"w-3 h-3 text-slate-600"})]}),et.jsx("div",{className:"flex-1 overflow-auto p-4 custom-scrollbar",children:y.analysis?.target?et.jsx(io,{node:y.analysis.target}):et.jsx("div",{className:"h-full flex items-center justify-center text-slate-600 italic text-xs",children:"No output structure detected"})})]})]})]})]})]}),et.jsxs("footer",{className:"px-6 py-2 border-t border-slate-800 bg-[#1e293b] flex justify-between items-center",children:[et.jsx("div",{className:"flex items-center gap-6",children:et.jsx("div",{className:"text-[10px] font-bold text-slate-500 uppercase tracking-tighter",children:"Version: 0.1.28"})}),et.jsx("div",{className:"text-[10px] text-slate-500 font-medium italic",children:"MorphQL Engine © 2026"})]})]})}function HL(){const[i,e]=pt.useState(()=>sessionStorage.getItem("morph_query")||Os[0].query),[a,r]=pt.useState(()=>sessionStorage.getItem("morph_source")||Os[0].source),u=h=>{e(h),sessionStorage.setItem("morph_query",h)},o=h=>{r(h),sessionStorage.setItem("morph_source",h)};return et.jsx("div",{className:"h-screen w-screen",children:et.jsx(GL,{initialQuery:i,initialSourceData:a,onQueryChange:u,onSourceDataChange:o})})}WT.createRoot(document.getElementById("root")).render(et.jsx(Ra.StrictMode,{children:et.jsx(HL,{})}))});export default FL();
477
+ fixed(2.5, 0, "half-even") // "2" (banker's, rounds to even)`}},{name:"min",doc:{signature:"min(a, b, ...)",description:"Returns the smallest of two or more numbers.",parameters:[{name:"a, b, ...",description:"Numbers to compare"}],returns:"number",example:"min(3, 1, 4) // 1"}},{name:"max",doc:{signature:"max(a, b, ...)",description:"Returns the largest of two or more numbers.",parameters:[{name:"a, b, ...",description:"Numbers to compare"}],returns:"number",example:"max(3, 1, 4) // 4"}},{name:"trim",doc:{signature:"trim(str)",description:"Removes leading and trailing whitespace from a string.",parameters:[{name:"str",description:"The string to trim"}],returns:"string",example:'trim(" hello ") // "hello"'}},{name:"padstart",doc:{signature:"padstart(str, length, [char])",description:"Pads the start of a string with a character until it reaches the target length.",parameters:[{name:"str",description:"The string to pad"},{name:"length",description:"Target total length"},{name:"char",description:'(Optional) Pad character. Default: " "'}],returns:"string",example:'padstart(id, 8, "0") // "00000042"'}},{name:"padend",doc:{signature:"padend(str, length, [char])",description:"Pads the end of a string with a character until it reaches the target length.",parameters:[{name:"str",description:"The string to pad"},{name:"length",description:"Target total length"},{name:"char",description:'(Optional) Pad character. Default: " "'}],returns:"string",example:'padend(name, 20) // "Alice "'}},{name:"indexof",doc:{signature:"indexof(str, search)",description:"Returns the index of the first occurrence of a substring. Returns -1 if not found.",parameters:[{name:"str",description:"The string to search in"},{name:"search",description:"The substring to find"}],returns:"number",example:'indexof("hello world", "world") // 6'}},{name:"startswith",doc:{signature:"startswith(str, prefix)",description:"Returns true if the string starts with the given prefix.",parameters:[{name:"str",description:"The string to check"},{name:"prefix",description:"The prefix to look for"}],returns:"boolean",example:'startswith("hello", "he") // true'}},{name:"endswith",doc:{signature:"endswith(str, suffix)",description:"Returns true if the string ends with the given suffix.",parameters:[{name:"str",description:"The string to check"},{name:"suffix",description:"The suffix to look for"}],returns:"boolean",example:'endswith("hello", "lo") // true'}}],BL=()=>zL.map(i=>i.name),jL=[{symbol:"===",category:"comparison",precedence:7},{symbol:"!==",category:"comparison",precedence:7},{symbol:"==",category:"comparison",precedence:7},{symbol:"!=",category:"comparison",precedence:7},{symbol:"<=",category:"comparison",precedence:6},{symbol:">=",category:"comparison",precedence:6},{symbol:"<",category:"comparison",precedence:6},{symbol:">",category:"comparison",precedence:6},{symbol:"&&",category:"logical",precedence:5},{symbol:"||",category:"logical",precedence:4},{symbol:"!",category:"logical",precedence:9},{symbol:"+",category:"arithmetic",precedence:10},{symbol:"-",category:"arithmetic",precedence:10},{symbol:"*",category:"arithmetic",precedence:11},{symbol:"/",category:"arithmetic",precedence:11},{symbol:"%",category:"arithmetic",precedence:11},{symbol:"=",category:"assignment",precedence:1}],DL=()=>jL.map(i=>i.symbol);function PL(){return{keywords:IL(),builtinFunctions:BL(),operators:DL(),symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\/\/.*$/,"comment"],[/\/\*/,"comment","@comment"],[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":"keyword","@builtinFunctions":"predefined","@default":"identifier"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/,"number"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]]}}}const $L=PL();function qL(i){i.languages.register({id:"morphql"}),i.languages.setMonarchTokensProvider("morphql",$L),i.languages.setLanguageConfiguration("morphql",{comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"(",close:")"},{open:"{",close:"}"},{open:"[",close:"]"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"(",close:")"},{open:"{",close:"}"},{open:"[",close:"]"},{open:'"',close:'"'},{open:"'",close:"'"}]})}function io({node:i,name:e}){const[a,r]=pt.useState(!0);if(!i)return null;const u=i.properties&&Object.keys(i.properties).length>0,o=i.items,h=u||o,p=d=>{switch(d){case"string":return"text-emerald-400";case"number":return"text-amber-400";case"boolean":return"text-indigo-400";case"array":return"text-pink-400";case"object":return"text-slate-400";default:return"text-slate-500"}};return et.jsxs("div",{className:"pl-4",children:[et.jsxs("div",{className:"flex items-center gap-2 py-0.5 group",children:[h?et.jsx("button",{onClick:()=>r(!a),className:"p-0.5 hover:bg-slate-800 rounded transition-colors text-slate-500",children:et.jsx(ku,{className:`w-3 h-3 transition-transform ${a?"rotate-90":""}`})}):et.jsx("div",{className:"w-4"}),e&&et.jsxs("span",{className:"text-xs font-mono text-slate-300",children:[e,":"]}),et.jsxs("span",{className:`text-[10px] uppercase font-bold ${p(i.type)} tracking-wider opacity-80`,children:[i.type,i.isOpen&&et.jsx("span",{className:"text-[10px] text-indigo-400 ml-1 italic",children:"(open)"})]})]}),a&&et.jsxs("div",{children:[u&&Object.entries(i.properties).map(([d,_])=>et.jsx(io,{name:d,node:_},d)),o&&et.jsx(io,{name:"items",node:i.items})]})]})}function GL({initialQuery:i=Os[0].query,initialSourceData:e=Os[0].source,className:a="",onQueryChange:r,onSourceDataChange:u}){const[o,h]=pt.useState(i),[p,d]=pt.useState(e),[_,v]=pt.useState(!1),[y,O]=pt.useState({result:"",generatedCode:"",error:null}),[z,G]=pt.useState("query"),[V,A]=pt.useState("output"),b=w=>{const E=w.trim();return E.startsWith("<")?"xml":E.startsWith("{")||E.startsWith("[")?"json":"plaintext"},N=b(p);pt.useEffect(()=>{h(i)},[i]),pt.useEffect(()=>{d(e)},[e]),pt.useEffect(()=>{async function w(){try{const E=await kL(o,{analyze:!0}),S=E(p);O({result:typeof S=="string"?S:JSON.stringify(S,null,2),generatedCode:E.code,error:null,analysis:E.analysis})}catch(E){O({result:"",generatedCode:"",error:E instanceof Error?E.message:String(E)})}}w()},[o,p]);const $=w=>{const E=Os.find(S=>S.name===w.target.value);E&&(h(E.query),d(E.source),r?.(E.query),u?.(E.source))},B=()=>{navigator.clipboard.writeText(y.result),v(!0),setTimeout(()=>v(!1),2e3)},Z=w=>{const E=w||"";h(E),r?.(E)},I=w=>{const E=w||"";d(E),u?.(E)};return et.jsxs("div",{className:`flex flex-col h-full bg-[#0f172a] text-slate-200 overflow-hidden ${a}`,children:[et.jsxs("header",{className:"flex items-center justify-between px-6 py-4 border-b border-slate-800 bg-[#1e293b]",children:[et.jsxs("div",{className:"flex items-center gap-3",children:[et.jsx("div",{className:"w-8 h-8 rounded-lg bg-indigo-500 flex items-center justify-center shadow-lg shadow-indigo-500/20",children:et.jsx(ku,{className:"w-5 h-5 text-white fill-current"})}),et.jsxs("div",{children:[et.jsx("h1",{className:"text-lg font-bold bg-clip-text text-transparent bg-gradient-to-r from-white to-slate-400",children:"MorphQL Playground"}),et.jsx("p",{className:"text-xs text-slate-400 font-medium",children:"High-Performance Query-to-Code Engine"})]})]}),et.jsxs("div",{className:"flex items-center gap-4",children:[et.jsxs("select",{className:"text-xs font-semibold px-3 py-1.5 rounded-full bg-slate-800 hover:bg-slate-700 transition-colors border border-slate-700 text-slate-200 outline-none cursor-pointer",onChange:$,defaultValue:"",children:[et.jsx("option",{value:"",disabled:!0,children:"Load Example..."}),Os.map(w=>et.jsx("option",{value:w.name,children:w.name},w.name))]}),et.jsx("a",{href:"https://hyperwindmill.github.io/morphql",className:"text-xs font-semibold px-3 py-1.5 rounded-full bg-slate-800 hover:bg-slate-700 transition-colors border border-slate-700",children:"Documentation"})]})]}),et.jsxs("main",{className:"flex-1 flex overflow-hidden",children:[et.jsxs("div",{className:"w-1/2 flex flex-col border-r border-slate-800",children:[et.jsxs("div",{className:"flex items-center gap-1 px-4 py-2 bg-slate-900 border-b border-slate-800",children:[et.jsxs("button",{onClick:()=>G("query"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${z==="query"?"bg-slate-800 text-indigo-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(ES,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Morph Query"})]}),et.jsxs("button",{onClick:()=>G("js"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${z==="js"?"bg-slate-800 text-amber-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(_S,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Generated JS"})]}),et.jsxs("button",{onClick:()=>G("source"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${z==="source"?"bg-slate-800 text-emerald-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(Nm,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Source Data"})]})]}),et.jsxs("div",{className:"flex-1 overflow-hidden",children:[et.jsx("div",{className:`h-full flex flex-col pt-2 bg-[#1e1e1e] ${z==="query"?"block":"hidden"}`,children:et.jsx(bu,{theme:"vs-dark",defaultLanguage:"morphql",value:o,onChange:Z,beforeMount:w=>{qL(w)},options:{minimap:{enabled:!1},fontSize:13,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})}),et.jsx("div",{className:`h-full flex flex-col pt-2 bg-[#1e1e1e] ${z==="js"?"block":"hidden"}`,children:et.jsx(bu,{theme:"vs-dark",defaultLanguage:"javascript",value:y.generatedCode,options:{readOnly:!0,minimap:{enabled:!1},fontSize:13,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})}),et.jsx("div",{className:`h-full flex flex-col pt-2 bg-[#1e1e1e] ${z==="source"?"block":"hidden"}`,children:et.jsx(bu,{theme:"vs-dark",language:N,value:p,onChange:I,options:{minimap:{enabled:!1},fontSize:14,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})})]})]}),et.jsxs("div",{className:"w-1/2 flex flex-col overflow-hidden",children:[et.jsxs("div",{className:"flex items-center justify-between px-4 py-2 bg-slate-900 border-b border-slate-800",children:[et.jsxs("div",{className:"flex items-center gap-1",children:[et.jsxs("button",{onClick:()=>A("output"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${V==="output"?"bg-slate-800 text-amber-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(ku,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Transformation Result"})]}),et.jsxs("button",{onClick:()=>A("structure"),className:`flex items-center gap-2 px-3 py-1.5 rounded-md transition-all ${V==="structure"?"bg-slate-800 text-indigo-400 shadow-sm":"text-slate-500 hover:text-slate-300 hover:bg-slate-800/50"}`,children:[et.jsx(Rm,{className:"w-4 h-4"}),et.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Structure"})]})]}),V==="output"&&et.jsx("button",{onClick:B,className:"p-1 hover:bg-slate-800 rounded transition-colors text-slate-400 hover:text-white",title:"Copy Result",children:_?et.jsx(dS,{className:"w-4 h-4 text-emerald-400"}):et.jsx(mS,{className:"w-4 h-4"})})]}),et.jsxs("div",{className:"flex-1 overflow-hidden bg-[#1e1e1e]",children:[et.jsx("div",{className:`h-full flex flex-col pt-2 ${V==="output"?"block":"hidden"}`,children:y.error?et.jsxs("div",{className:"p-4 flex gap-3 text-red-400 bg-red-950/20 m-4 rounded-lg border border-red-900/50",children:[et.jsx(Rm,{className:"w-5 h-5 flex-shrink-0"}),et.jsxs("div",{children:[et.jsx("p",{className:"text-sm font-bold mb-1",children:"Compilation/Execution Error"}),et.jsx("p",{className:"text-xs font-mono",children:y.error})]})]}):et.jsx(bu,{theme:"vs-dark",language:b(y.result),value:y.result,options:{readOnly:!0,minimap:{enabled:!1},fontSize:14,lineNumbers:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:10}}})}),V==="structure"&&et.jsxs("div",{className:"h-full flex flex-col divide-y divide-slate-800 overflow-hidden",children:[et.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[et.jsxs("div",{className:"px-4 py-1.5 bg-slate-900/50 flex items-center justify-between border-b border-slate-800",children:[et.jsx("span",{className:"text-[9px] font-black uppercase tracking-widest text-slate-500",children:"Input Structure"}),et.jsx(Nm,{className:"w-3 h-3 text-slate-600"})]}),et.jsx("div",{className:"flex-1 overflow-auto p-4 custom-scrollbar",children:y.analysis?.source?et.jsx(io,{node:y.analysis.source}):et.jsx("div",{className:"h-full flex items-center justify-center text-slate-600 italic text-xs",children:"No input structure detected"})})]}),et.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[et.jsxs("div",{className:"px-4 py-1.5 bg-slate-900/50 flex items-center justify-between border-b border-slate-800",children:[et.jsx("span",{className:"text-[9px] font-black uppercase tracking-widest text-slate-500",children:"Output Structure"}),et.jsx(ku,{className:"w-3 h-3 text-slate-600"})]}),et.jsx("div",{className:"flex-1 overflow-auto p-4 custom-scrollbar",children:y.analysis?.target?et.jsx(io,{node:y.analysis.target}):et.jsx("div",{className:"h-full flex items-center justify-center text-slate-600 italic text-xs",children:"No output structure detected"})})]})]})]})]})]}),et.jsxs("footer",{className:"px-6 py-2 border-t border-slate-800 bg-[#1e293b] flex justify-between items-center",children:[et.jsx("div",{className:"flex items-center gap-6",children:et.jsx("div",{className:"text-[10px] font-bold text-slate-500 uppercase tracking-tighter",children:"Version: 0.1.29"})}),et.jsx("div",{className:"text-[10px] text-slate-500 font-medium italic",children:"MorphQL Engine © 2026"})]})]})}function HL(){const[i,e]=pt.useState(()=>sessionStorage.getItem("morph_query")||Os[0].query),[a,r]=pt.useState(()=>sessionStorage.getItem("morph_source")||Os[0].source),u=h=>{e(h),sessionStorage.setItem("morph_query",h)},o=h=>{r(h),sessionStorage.setItem("morph_source",h)};return et.jsx("div",{className:"h-screen w-screen",children:et.jsx(GL,{initialQuery:i,initialSourceData:a,onQueryChange:u,onSourceDataChange:o})})}WT.createRoot(document.getElementById("root")).render(et.jsx(Ra.StrictMode,{children:et.jsx(HL,{})}))});export default FL();
package/dist/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>playground</title>
8
- <script type="module" crossorigin src="/assets/index-BAKTEvH5.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DmtFGis1.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-BZb28VQj.css">
10
10
  </head>
11
11
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphql/playground",
3
- "version": "0.1.28",
3
+ "version": "0.1.29",
4
4
  "description": "Interactive playground for morphql - Test MorphQL queries in real-time.",
5
5
  "type": "module",
6
6
  "publishConfig": {