@epic-web/workshop-app 6.88.1 → 6.89.0
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/build/client/assets/{_exerciseNumber-BkoIHU4s.js → _exerciseNumber-BZvzAp9f.js} +2 -2
- package/build/client/assets/{_exerciseNumber-BkoIHU4s.js.map → _exerciseNumber-BZvzAp9f.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_.finished-BRspQYAo.js → _exerciseNumber_.finished-D5eMZ_ok.js} +2 -2
- package/build/client/assets/{_exerciseNumber_.finished-BRspQYAo.js.map → _exerciseNumber_.finished-D5eMZ_ok.js.map} +1 -1
- package/build/client/assets/{_extra-qH2jDBa4.js → _extra-Bd0-gThk.js} +2 -2
- package/build/client/assets/{_extra-qH2jDBa4.js.map → _extra-Bd0-gThk.js.map} +1 -1
- package/build/client/assets/{_layout-Bg1RFS9D.js → _layout-CbP-ZGKA.js} +2 -2
- package/build/client/assets/{_layout-Bg1RFS9D.js.map → _layout-CbP-ZGKA.js.map} +1 -1
- package/build/client/assets/{app-BH96aYJx.js → app-BTlBQWy_.js} +2 -2
- package/build/client/assets/{app-BH96aYJx.js.map → app-BTlBQWy_.js.map} +1 -1
- package/build/client/assets/{cache-5tXauWqp.js → cache-Cjjb4Th1.js} +2 -2
- package/build/client/assets/{cache-5tXauWqp.js.map → cache-Cjjb4Th1.js.map} +1 -1
- package/build/client/assets/{db-CPB2ZdAy.js → db-n83JPsm9.js} +2 -2
- package/build/client/assets/{db-CPB2ZdAy.js.map → db-n83JPsm9.js.map} +1 -1
- package/build/client/assets/{diff-BncP0Faq.js → diff-C4LoXlDb.js} +3 -3
- package/build/client/assets/diff-C4LoXlDb.js.map +1 -0
- package/build/client/assets/{diff-IVQnB3Pk.js → diff-Fut2J8f5.js} +2 -2
- package/build/client/assets/{diff-IVQnB3Pk.js.map → diff-Fut2J8f5.js.map} +1 -1
- package/build/client/assets/{finished-CYdLPdvJ.js → finished-CsRM8483.js} +2 -2
- package/build/client/assets/{finished-CYdLPdvJ.js.map → finished-CsRM8483.js.map} +1 -1
- package/build/client/assets/{index-n4CWCwSA.js → index-BnHkUMN_.js} +2 -2
- package/build/client/assets/{index-n4CWCwSA.js.map → index-BnHkUMN_.js.map} +1 -1
- package/build/client/assets/{index-CKhNevM7.js → index-Bo0DKzj5.js} +2 -2
- package/build/client/assets/{index-CKhNevM7.js.map → index-Bo0DKzj5.js.map} +1 -1
- package/build/client/assets/{index-Cb8U85TK.js → index-m9K7ACZe.js} +2 -2
- package/build/client/assets/{index-Cb8U85TK.js.map → index-m9K7ACZe.js.map} +1 -1
- package/build/client/assets/launch-editor-C-8ah8qM.js +2 -0
- package/build/client/assets/launch-editor-C-8ah8qM.js.map +1 -0
- package/build/client/assets/{manifest-d6d8ad00.js → manifest-72875289.js} +1 -1
- package/build/client/assets/{mdx-Bvb9XNyL.js → mdx-C3Jl4O5D.js} +2 -2
- package/build/client/assets/{mdx-Bvb9XNyL.js.map → mdx-C3Jl4O5D.js.map} +1 -1
- package/build/client/assets/{playground-CEUo0DCy.js → playground-BV2y1ifv.js} +2 -2
- package/build/client/assets/{playground-CEUo0DCy.js.map → playground-BV2y1ifv.js.map} +1 -1
- package/build/client/assets/{preview-BS9wGiJ3.js → preview-Dav9KrHN.js} +2 -2
- package/build/client/assets/{preview-BS9wGiJ3.js.map → preview-Dav9KrHN.js.map} +1 -1
- package/build/server/index.js +36 -4
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/diff-BncP0Faq.js.map +0 -1
- package/build/client/assets/launch-editor-C8OwTN5L.js +0 -2
- package/build/client/assets/launch-editor-C8OwTN5L.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as y}from"./index-Bi6L2ga8.js";import{L as P,f as N}from"./chunk-JZWAC4HX-BuixXc9D.js";import{s as O}from"./progress-bar-BCbq1CuC.js";import{c as x}from"./misc-D9k_mI0z.js";import{u as v}from"./pe-D585gnmh.js";import{a as _,b as I}from"./root-loader-DAxaiFMN.js";function E(r){const t=N();return y.useEffect(()=>{t.state==="idle"&&t.data!=null&&r?.("fetcher-done")},[t,r]),t}function L({className:r,file:t,appFile:a,appName:u,syncTo:n,line:o,column:c,children:l,onUpdate:s}){const i=E(s),h=v();if(!t&&!a)return console.error('LaunchEditor: requires either "file" or "appFile" prop.'),null;const d=typeof a=="string"?[a]:a,m=t?"file":"appFile",f=n?.file?"file":n?.appFile?"appFile":"";return e.jsxs(i.Form,{action:"/launch-editor",method:"POST",className:"flex items-center",children:[h,O,e.jsx("input",{type:"hidden",name:"line",value:typeof o=="number"?o:void 0}),e.jsx("input",{type:"hidden",name:"column",value:c}),e.jsx("input",{type:"hidden",name:"type",value:m}),e.jsx("input",{type:"hidden",name:"file",value:t}),e.jsx("input",{type:"hidden",name:"appName",value:u}),d?.map(p=>e.jsx("input",{type:"hidden",name:"appFile",value:p},p)),n?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"hidden",name:"syncTo.type",value:f}),e.jsx("input",{type:"hidden",name:"syncTo.file",value:n.file}),e.jsx("input",{type:"hidden",name:"syncTo.appName",value:n.appName}),e.jsx("input",{type:"hidden",name:"syncTo.appFile",value:n.appFile})]}):null,e.jsx("button",{type:"submit",className:x("launch_button",i.state==="idle"?null:"cursor-progress",i.data?.status==="error"?"cursor-not-allowed":null,r),children:l})]})}function g({className:r,file:t,appFile:a,appName:u,line:n,children:o}){const c=_(),l=I();if(Array.isArray(a))return e.jsx("div",{children:"Cannot open more than one file"});if(t){const p=j=>j.replace(/\\/g,"/"),b=ENV.EPICSHOP_GITHUB_ROOT.replace("/tree/","/blob/");return e.jsx("a",{className:"launch_button no-underline!",href:p(t).replace(p(ENV.EPICSHOP_CONTEXT_CWD),b)+(n?`#L${n}`:""),rel:"noreferrer",target:"_blank",children:o})}const s=c.find(p=>p.name===u),i=ENV.EPICSHOP_GITHUB_ROOT.replace("/tree/","/blob/"),[h,d]=a?a.split(","):["",""],m=n||(d?Number(d):void 0),f=[...s?.relativePath.split(l.separator)??[],h].join("/");return e.jsx("a",{className:x("launch_button no-underline!",r),href:`${i}/${f}${m?`#L${m}`:""}`,rel:"noreferrer",target:"_blank",children:o})}function S({appFile:r="README.mdx",appName:t,file:a,relativePath:u}){const n=E(),o=l=>{if(!l.altKey||ENV.EPICSHOP_DEPLOYED)return;l.preventDefault();const s=new FormData,i=a?"file":"appFile";s.append(i,a??r),s.append("type",i),t&&s.append("appName",t),n.submit(s,{method:"POST",action:"/launch-editor"})},c=ENV.EPICSHOP_GITHUB_ROOT.replace(/\/tree\/|\/blob\//,"/edit/");return e.jsxs(P,{className:"self-center font-mono text-sm",onClick:o,target:"_blank",to:`${c}/${u}`.replace(/\\/g,"/"),children:[e.jsx("span",{className:"@min-[720px]:hidden",children:"Edit"}),e.jsx("span",{className:"hidden @min-[720px]:block @min-[900px]:hidden",children:"Edit on GitHub"}),e.jsx("span",{className:"hidden @min-[900px]:block",children:"Edit this page on GitHub"})]})}const G=ENV.EPICSHOP_DEPLOYED?g:L;export{S as E,G as L};
|
|
2
|
-
//# sourceMappingURL=launch-editor-C8OwTN5L.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"launch-editor-C8OwTN5L.js","sources":["../../../app/routes/launch-editor.tsx"],"sourcesContent":["import { type Route } from './+types/launch-editor'\nimport path from 'path'\nimport { getAppByName } from '@epic-web/workshop-utils/apps.server'\nimport { launchEditor } from '@epic-web/workshop-utils/launch-editor.server'\nimport fsExtra from 'fs-extra'\nimport { useEffect } from 'react'\nimport { Link, useFetcher } from 'react-router'\nimport { z, type ZodTypeAny } from 'zod'\nimport { showProgressBarField } from '#app/components/progress-bar.tsx'\nimport { cn, ensureUndeployed } from '#app/utils/misc.tsx'\nimport { dataWithPE, usePERedirectInput } from '#app/utils/pe.tsx'\nimport { useApps, useRequestInfo } from '#app/utils/root-loader.ts'\nimport { createToastHeaders } from '#app/utils/toast.server.ts'\n\nfunction getFileDescriptorSchema<AppFile extends ZodTypeAny>(appFile: AppFile) {\n\treturn z.union([\n\t\tz.object({\n\t\t\ttype: z.literal('file'),\n\t\t\tfile: z.string(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal('appFile'),\n\t\t\tappFile,\n\t\t\tappName: z.string(),\n\t\t}),\n\t])\n}\n\nconst LaunchSchema = z.intersection(\n\tz.object({\n\t\tline: z.coerce.number().optional(),\n\t\tcolumn: z.coerce.number().optional(),\n\t\tsyncTo: getFileDescriptorSchema(z.string()).optional(),\n\t}),\n\tgetFileDescriptorSchema(z.array(z.string())),\n)\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst appFileValues = formData\n\t\t.getAll('appFile')\n\t\t.filter((value): value is string => typeof value === 'string')\n\tconst syncToAppFileValues = formData\n\t\t.getAll('syncTo.appFile')\n\t\t.filter((value): value is string => typeof value === 'string')\n\tif (syncToAppFileValues.length > 1) {\n\t\tthrow new Response('Expected a single syncTo.appFile value', {\n\t\t\tstatus: 400,\n\t\t})\n\t}\n\tconst syncTo = {\n\t\ttype: formData.get('syncTo.type') ?? undefined,\n\t\tfile: formData.get('syncTo.file') ?? undefined,\n\t\tworkshopFile: formData.get('syncTo.workshopFile') ?? undefined,\n\t\tappFile: syncToAppFileValues[0] ?? undefined,\n\t\tappName: formData.get('syncTo.appName') ?? undefined,\n\t}\n\tconst syncToIsProvided = Object.values(syncTo).some((v) =>\n\t\tArray.isArray(v) ? v.length : v,\n\t)\n\tconst rawData = {\n\t\ttype: formData.get('type'),\n\t\tfile: formData.get('file'),\n\t\tworkshopFile: formData.get('workshopFile'),\n\t\tappFile: appFileValues,\n\t\tappName: formData.get('appName'),\n\t\tline: formData.get('line') ?? undefined,\n\t\tcolumn: formData.get('column') ?? undefined,\n\t\tsyncTo: syncToIsProvided\n\t\t\t? {\n\t\t\t\t\ttype: formData.get('syncTo.type'),\n\t\t\t\t\tfile: formData.get('syncTo.file'),\n\t\t\t\t\tworkshopFile: formData.get('syncTo.workshopFile'),\n\t\t\t\t\tappFile: syncToAppFileValues[0] ?? undefined,\n\t\t\t\t\tappName: formData.get('syncTo.appName'),\n\t\t\t\t}\n\t\t\t: undefined,\n\t}\n\tconst parsedForm = LaunchSchema.safeParse(rawData)\n\tif (!parsedForm.success) {\n\t\tthrow parsedForm.error\n\t}\n\tconst form = parsedForm.data\n\n\tasync function getFiles(\n\t\tfileDescriptor:\n\t\t\t| ({ line?: number; colum?: number } & {\n\t\t\t\t\ttype: 'file'\n\t\t\t\t\tfile: string\n\t\t\t\t\tappName?: never\n\t\t\t\t\tappFile?: never\n\t\t\t })\n\t\t\t| {\n\t\t\t\t\ttype: 'appFile'\n\t\t\t\t\tfile?: never\n\t\t\t\t\tappName: string\n\t\t\t\t\tappFile: string | Array<string>\n\t\t\t },\n\t): Promise<Array<{ filepath: string; line?: number; column?: number }>> {\n\t\tif (fileDescriptor.type === 'file') {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tfilepath: fileDescriptor.file,\n\t\t\t\t\tline: fileDescriptor.line,\n\t\t\t\t\tcolumn: fileDescriptor.colum,\n\t\t\t\t},\n\t\t\t]\n\t\t} else {\n\t\t\tconst fileDescriptorApp = await getAppByName(fileDescriptor.appName)\n\t\t\tif (!fileDescriptorApp) {\n\t\t\t\tthrow new Response(`App \"${fileDescriptor.appName}\" Not found`, {\n\t\t\t\t\tstatus: 404,\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst appFile = Array.isArray(fileDescriptor.appFile)\n\t\t\t\t? fileDescriptor.appFile\n\t\t\t\t: [fileDescriptor.appFile]\n\t\t\treturn appFile.map((file) => {\n\t\t\t\tconst [filePath, line = '1', column = '1'] = file.split(',')\n\t\t\t\tif (!filePath) {\n\t\t\t\t\tthrow new Response(\n\t\t\t\t\t\t`appFile missing file path: ${fileDescriptor.appFile}`,\n\t\t\t\t\t\t{ status: 400 },\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tfilepath: path.join(fileDescriptorApp.fullPath, filePath),\n\t\t\t\t\tline: Number(line),\n\t\t\t\t\tcolumn: Number(column),\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tconst filesToOpen = await getFiles(form)\n\tif ('syncTo' in form && form.syncTo) {\n\t\tconst originFiles = await getFiles(form.syncTo)\n\t\tfor (let index = 0; index < originFiles.length; index++) {\n\t\t\tconst originFile = originFiles[index]\n\t\t\tif (!originFile) continue\n\t\t\tconst destFile = filesToOpen[index]\n\t\t\tif (!destFile) {\n\t\t\t\tthrow new Response(\n\t\t\t\t\t`Trying to sync to a file that does not appear at index ${index}`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tawait fsExtra.ensureDir(path.dirname(destFile.filepath))\n\t\t\tawait fsExtra.promises.copyFile(originFile.filepath, destFile.filepath)\n\t\t}\n\t}\n\tconst results: Array<\n\t\t{ status: 'success' } | { status: 'error'; message: string }\n\t> = []\n\tfor (const file of filesToOpen) {\n\t\tresults.push(await launchEditor(file.filepath, file.line, file.column))\n\t}\n\n\tif (results.every((r) => r.status === 'success')) {\n\t\treturn dataWithPE(request, formData, { status: 'success' } as const)\n\t} else {\n\t\tconst messages = results\n\t\t\t.map((r, index, array) =>\n\t\t\t\tr.status === 'error'\n\t\t\t\t\t? array.length > 1\n\t\t\t\t\t\t? `${index}. ${r.message}`\n\t\t\t\t\t\t: r.message\n\t\t\t\t\t: null,\n\t\t\t)\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n')\n\t\tconsole.error('Launch editor error:', messages)\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', message: messages } as const,\n\t\t\t{\n\t\t\t\theaders: await createToastHeaders({\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\ttitle: 'Launch Editor Error',\n\t\t\t\t\tdescription: messages,\n\t\t\t\t}),\n\t\t\t},\n\t\t)\n\t}\n}\n\ntype FileDescriptorProps<AppFile> =\n\t| {\n\t\t\tfile: string\n\t\t\tappFile?: never\n\t\t\tappName?: never\n\t }\n\t| {\n\t\t\tfile?: never\n\t\t\tappFile: AppFile\n\t\t\tappName: string\n\t }\n\ntype LaunchEditorProps = {\n\tclassName?: string\n\tline?: number\n\tcolumn?: number\n\tsyncTo?: FileDescriptorProps<string>\n\tchildren: React.ReactNode\n\tonUpdate?: (state: string) => void\n} & FileDescriptorProps<string | string[]>\n\nfunction useLaunchFetcher(onUpdate?: ((state: string) => void) | undefined) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tuseEffect(() => {\n\t\tif (fetcher.state === 'idle' && fetcher.data != null) {\n\t\t\tonUpdate?.('fetcher-done')\n\t\t}\n\t}, [fetcher, onUpdate])\n\n\treturn fetcher\n}\n\nfunction LaunchEditorImpl({\n\tclassName,\n\tfile,\n\tappFile,\n\tappName,\n\tsyncTo,\n\tline,\n\tcolumn,\n\tchildren,\n\tonUpdate,\n}: LaunchEditorProps) {\n\tconst fetcher = useLaunchFetcher(onUpdate)\n\tconst peRedirectInput = usePERedirectInput()\n\n\tif (!file && !appFile) {\n\t\tconsole.error('LaunchEditor: requires either \"file\" or \"appFile\" prop.')\n\t\treturn null\n\t}\n\tconst fileList = typeof appFile === 'string' ? [appFile] : appFile\n\tconst type = file ? 'file' : 'appFile'\n\tconst syncToType = syncTo?.file ? 'file' : syncTo?.appFile ? 'appFile' : ''\n\n\treturn (\n\t\t<fetcher.Form\n\t\t\taction=\"/launch-editor\"\n\t\t\tmethod=\"POST\"\n\t\t\tclassName=\"flex items-center\"\n\t\t>\n\t\t\t{peRedirectInput}\n\t\t\t{showProgressBarField}\n\t\t\t<input\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"line\"\n\t\t\t\tvalue={typeof line === 'number' ? line : undefined}\n\t\t\t/>\n\t\t\t<input type=\"hidden\" name=\"column\" value={column} />\n\t\t\t<input type=\"hidden\" name=\"type\" value={type} />\n\t\t\t<input type=\"hidden\" name=\"file\" value={file} />\n\t\t\t<input type=\"hidden\" name=\"appName\" value={appName} />\n\t\t\t{fileList?.map((file) => (\n\t\t\t\t<input type=\"hidden\" name=\"appFile\" key={file} value={file} />\n\t\t\t))}\n\t\t\t{syncTo ? (\n\t\t\t\t<>\n\t\t\t\t\t<input type=\"hidden\" name=\"syncTo.type\" value={syncToType} />\n\t\t\t\t\t<input type=\"hidden\" name=\"syncTo.file\" value={syncTo.file} />\n\t\t\t\t\t<input type=\"hidden\" name=\"syncTo.appName\" value={syncTo.appName} />\n\t\t\t\t\t<input type=\"hidden\" name=\"syncTo.appFile\" value={syncTo.appFile} />\n\t\t\t\t</>\n\t\t\t) : null}\n\t\t\t<button\n\t\t\t\ttype=\"submit\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'launch_button',\n\t\t\t\t\tfetcher.state === 'idle' ? null : 'cursor-progress',\n\t\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</button>\n\t\t</fetcher.Form>\n\t)\n}\n\nfunction LaunchGitHub({\n\tclassName,\n\tfile,\n\tappFile,\n\tappName,\n\tline,\n\tchildren,\n}: LaunchEditorProps) {\n\tconst apps = useApps()\n\tconst requestInfo = useRequestInfo()\n\tif (Array.isArray(appFile)) {\n\t\treturn <div>Cannot open more than one file</div>\n\t}\n\tif (file) {\n\t\tconst safePath = (s: string) => s.replace(/\\\\/g, '/')\n\t\t// Convert tree to blob for individual files\n\t\tconst githubFileRoot = ENV.EPICSHOP_GITHUB_ROOT.replace('/tree/', '/blob/')\n\t\treturn (\n\t\t\t<a\n\t\t\t\tclassName=\"launch_button no-underline!\"\n\t\t\t\thref={\n\t\t\t\t\tsafePath(file).replace(\n\t\t\t\t\t\tsafePath(ENV.EPICSHOP_CONTEXT_CWD),\n\t\t\t\t\t\tgithubFileRoot,\n\t\t\t\t\t) + (line ? `#L${line}` : '')\n\t\t\t\t}\n\t\t\t\trel=\"noreferrer\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</a>\n\t\t)\n\t}\n\tconst app = apps.find((a) => a.name === appName)\n\t// Convert tree to blob for individual files\n\tconst githubFileRoot = ENV.EPICSHOP_GITHUB_ROOT.replace('/tree/', '/blob/')\n\n\t// Parse appFile to extract filename and line number (format: \"filename,line,column\")\n\tconst [filename, appFileLine] = appFile ? appFile.split(',') : ['', '']\n\tconst lineNumber = line || (appFileLine ? Number(appFileLine) : undefined)\n\n\tconst path = [\n\t\t...(app?.relativePath.split(requestInfo.separator) ?? []),\n\t\tfilename,\n\t].join('/')\n\treturn (\n\t\t<a\n\t\t\tclassName={cn('launch_button no-underline!', className)}\n\t\t\thref={`${githubFileRoot}/${path}${lineNumber ? `#L${lineNumber}` : ''}`}\n\t\t\trel=\"noreferrer\"\n\t\t\ttarget=\"_blank\"\n\t\t>\n\t\t\t{children}\n\t\t</a>\n\t)\n}\n\nexport function EditFileOnGitHub({\n\tappFile = 'README.mdx',\n\tappName,\n\tfile,\n\trelativePath,\n}: {\n\tappFile?: string\n\trelativePath: string\n} & (\n\t| {\n\t\t\tfile: string\n\t\t\tappName?: never\n\t }\n\t| {\n\t\t\tfile?: never\n\t\t\tappName: string\n\t }\n)) {\n\tconst fetcher = useLaunchFetcher()\n\n\tconst handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n\t\tif (!e.altKey || ENV.EPICSHOP_DEPLOYED) return\n\t\te.preventDefault()\n\t\tconst formData = new FormData()\n\t\tconst type = file ? 'file' : 'appFile'\n\t\tformData.append(type, file ?? appFile)\n\t\tformData.append('type', type)\n\t\tif (appName) {\n\t\t\tformData.append('appName', appName)\n\t\t}\n\t\tvoid fetcher.submit(formData, { method: 'POST', action: '/launch-editor' })\n\t}\n\n\tconst githubPath = ENV.EPICSHOP_GITHUB_ROOT.replace(\n\t\t/\\/tree\\/|\\/blob\\//,\n\t\t'/edit/',\n\t)\n\n\treturn (\n\t\t<Link\n\t\t\tclassName=\"self-center font-mono text-sm\"\n\t\t\tonClick={handleClick}\n\t\t\ttarget=\"_blank\"\n\t\t\tto={`${githubPath}/${relativePath}`.replace(/\\\\/g, '/')}\n\t\t>\n\t\t\t<span className=\"@min-[720px]:hidden\">Edit</span>\n\t\t\t<span className=\"hidden @min-[720px]:block @min-[900px]:hidden\">\n\t\t\t\tEdit on GitHub\n\t\t\t</span>\n\t\t\t<span className=\"hidden @min-[900px]:block\">\n\t\t\t\tEdit this page on GitHub\n\t\t\t</span>\n\t\t</Link>\n\t)\n}\n\nexport const LaunchEditor = ENV.EPICSHOP_DEPLOYED\n\t? LaunchGitHub\n\t: LaunchEditorImpl\n"],"names":["useLaunchFetcher","onUpdate","fetcher","useFetcher","useEffect","state","data","LaunchEditorImpl","className","file","appFile","appName","syncTo","line","column","children","peRedirectInput","usePERedirectInput","console","error","fileList","type","syncToType","jsxs","Form","action","method","showProgressBarField","jsx","name","value","map","Fragment","cn","status","LaunchGitHub","apps","useApps","requestInfo","useRequestInfo","Array","isArray","safePath","s","replace","githubFileRoot","ENV","EPICSHOP_GITHUB_ROOT","href","EPICSHOP_CONTEXT_CWD","rel","target","app","find","a","filename","appFileLine","split","lineNumber","Number","path","relativePath","separator","join","EditFileOnGitHub","handleClick","e","altKey","EPICSHOP_DEPLOYED","preventDefault","formData","FormData","append","submit","githubPath","Link","onClick","to","LaunchEditor"],"mappings":"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"}
|