@yamlresume/playground 0.15.1 → 0.15.2
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/README.md +49 -0
- package/dist/index.d.ts +39 -5
- package/dist/index.js +2 -277
- package/dist/index.js.map +1 -1
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -9,6 +9,11 @@ The official playground is at https://yamlresume.dev/playground.
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
11
|
- 📝 **Live YAML Editor**: Monaco-based editor with syntax highlighting for AML.
|
|
12
|
+
- ✨ **YAML Language Support**: Schema-driven completion, validation, and hover
|
|
13
|
+
documentation powered by
|
|
14
|
+
[`monaco-yaml`](https://github.com/remcohaszing/monaco-yaml) running the YAML
|
|
15
|
+
language server in a Web Worker against the
|
|
16
|
+
[YAMLResume JSON schema](https://yamlresume.dev/docs/compiler/schema/json).
|
|
12
17
|
- 👁️ **Real-time Preview**: Instant preview of your resume in HTML, Markdown, or
|
|
13
18
|
LaTeX.
|
|
14
19
|
- 📱 **Responsive Design**: Split-pane layout on desktop, tabbed interface on
|
|
@@ -168,6 +173,50 @@ Gets the basename from a filepath.
|
|
|
168
173
|
|
|
169
174
|
Gets the file extension for a given rendering engine.
|
|
170
175
|
|
|
176
|
+
## Local Development
|
|
177
|
+
|
|
178
|
+
A Vite-based web harness lives in [`web/`](./web). It mounts the
|
|
179
|
+
`<Playground />` component directly from the TypeScript sources (no build step
|
|
180
|
+
required) with Tailwind CSS configured.
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
pnpm playground web:dev
|
|
184
|
+
# or
|
|
185
|
+
pnpm -C packages/playground/web dev
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Then open http://localhost:5173.
|
|
189
|
+
|
|
190
|
+
### YAML language support
|
|
191
|
+
|
|
192
|
+
The resume editor provides completion, validation, and hover documentation via
|
|
193
|
+
`monaco-yaml`, which runs the YAML language server in a Web Worker bundled from
|
|
194
|
+
`src/workers/`. The worker wiring uses the standard
|
|
195
|
+
`new Worker(new URL(...), import.meta.url)` pattern, which Vite and webpack
|
|
196
|
+
understand natively when building from source.
|
|
197
|
+
|
|
198
|
+
If you consume the pre-built `dist` bundle in an app whose bundler cannot emit
|
|
199
|
+
workers from it, install your own `globalThis.MonacoEnvironment.getWorker`
|
|
200
|
+
**before** importing this package (a host-provided `getWorker` takes
|
|
201
|
+
precedence), pointing the `yaml` label at `monaco-yaml/yaml.worker` and
|
|
202
|
+
`editorWorkerService` at Monaco's editor worker:
|
|
203
|
+
|
|
204
|
+
```js
|
|
205
|
+
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'
|
|
206
|
+
import YamlWorker from 'monaco-yaml/yaml.worker?worker'
|
|
207
|
+
|
|
208
|
+
globalThis.MonacoEnvironment = {
|
|
209
|
+
getWorker(moduleId, label) {
|
|
210
|
+
if (label === 'yaml') return new YamlWorker()
|
|
211
|
+
return new EditorWorker()
|
|
212
|
+
},
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Note that `monaco-yaml` currently requires `monaco-editor` <= 0.54.x (support
|
|
217
|
+
for the 0.55 worker API is pending upstream, see
|
|
218
|
+
[remcohaszing/monaco-yaml#282](https://github.com/remcohaszing/monaco-yaml/pull/282)).
|
|
219
|
+
|
|
171
220
|
## License
|
|
172
221
|
|
|
173
222
|
MIT © [PPResume](https://ppresume.com)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode, PropsWithChildren } from 'react';
|
|
3
|
-
import { OnMount } from '@monaco-editor/react';
|
|
3
|
+
import { OnMount, Monaco } from '@monaco-editor/react';
|
|
4
4
|
import { Resume, LayoutEngine } from '@yamlresume/core';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -158,7 +158,7 @@ interface PlaygroundProps {
|
|
|
158
158
|
* @param props - The component props.
|
|
159
159
|
* @returns The rendered Playground component.
|
|
160
160
|
*/
|
|
161
|
-
declare function Playground({ yaml
|
|
161
|
+
declare function Playground({ yaml, onChange, filename, messages, }: PlaygroundProps): react.JSX.Element;
|
|
162
162
|
|
|
163
163
|
/**
|
|
164
164
|
* Props for the PlaygroundDesktop component.
|
|
@@ -586,7 +586,6 @@ interface UseResumeRendererProps {
|
|
|
586
586
|
/**
|
|
587
587
|
* A React hook for rendering a resume using a specified layout.
|
|
588
588
|
*
|
|
589
|
-
* @description
|
|
590
589
|
* This hook encapsulates the logic for:
|
|
591
590
|
* - Selecting the appropriate layout from the resume's layouts array
|
|
592
591
|
* - Determining the rendering engine (html, markdown, or latex)
|
|
@@ -639,7 +638,6 @@ interface UseResumeStateProps {
|
|
|
639
638
|
/**
|
|
640
639
|
* A React hook for managing resume state derived from YAML content.
|
|
641
640
|
*
|
|
642
|
-
* @description
|
|
643
641
|
* This hook encapsulates the logic for:
|
|
644
642
|
* - Parsing YAML into a `Resume` object with memoization
|
|
645
643
|
* - Tracking the active layout index with bounds checking
|
|
@@ -673,6 +671,42 @@ declare function useResumeState({ yaml, onChange, }: UseResumeStateProps): {
|
|
|
673
671
|
resume: Resume;
|
|
674
672
|
};
|
|
675
673
|
|
|
674
|
+
/**
|
|
675
|
+
* MIT License
|
|
676
|
+
*
|
|
677
|
+
* Copyright (c) 2023–Present PPResume (https://ppresume.com)
|
|
678
|
+
*
|
|
679
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
680
|
+
* of this software and associated documentation files (the "Software"), to
|
|
681
|
+
* deal in the Software without restriction, including without limitation the
|
|
682
|
+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
683
|
+
* sell copies of the Software, and to permit persons to whom the Software is
|
|
684
|
+
* furnished to do so, subject to the following conditions:
|
|
685
|
+
*
|
|
686
|
+
* The above copyright notice and this permission notice shall be included in
|
|
687
|
+
* all copies or substantial portions of the Software.
|
|
688
|
+
*
|
|
689
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
690
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
691
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
692
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
693
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
694
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
695
|
+
* IN THE SOFTWARE.
|
|
696
|
+
*/
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Configures YAML language support (completion, validation and hover
|
|
700
|
+
* documentation) for the resume YAML editor, powered by `monaco-yaml` running
|
|
701
|
+
* the YAML language server in a Web Worker against the YAMLResume JSON schema.
|
|
702
|
+
*
|
|
703
|
+
* This function is idempotent: calling it multiple times configures the
|
|
704
|
+
* language support only once.
|
|
705
|
+
*
|
|
706
|
+
* @param monaco - The Monaco instance used by the editor.
|
|
707
|
+
*/
|
|
708
|
+
declare function configureYamlSupport(monaco: Monaco): void;
|
|
709
|
+
|
|
676
710
|
/**
|
|
677
711
|
* MIT License
|
|
678
712
|
*
|
|
@@ -741,4 +775,4 @@ declare const printResume: (resume: Resume | null, layoutIndex: number) => void;
|
|
|
741
775
|
*/
|
|
742
776
|
declare const openResumeInNewTab: (resume: Resume | null, layoutIndex: number) => void;
|
|
743
777
|
|
|
744
|
-
export { CodeViewer, type CodeViewerProps, DEFAULT_PLAYGROUND_MESSAGES, DocxViewer, type DocxViewerProps, EDITOR_BG_COLOR, EDITOR_FONT_SIZE, Editor, EditorPanel, type EditorPanelProps, type EditorProps, HtmlViewer, type HtmlViewerProps, ICON_SIZES, ICON_STROKES, Panel, PanelContent, PanelSeparator, PanelToolbar, Playground, PlaygroundDesktop, type PlaygroundDesktopProps, type PlaygroundMessageOverrides, type PlaygroundMessages, PlaygroundMobile, type PlaygroundMobileProps, type PlaygroundProps, type PlaygroundTooltipMessages, PreviewPanel, type PreviewPanelProps, ResumeEditor, type ResumeEditorProps, ResumeViewer, type ResumeViewerProps, ToolbarButton, ToolbarCopyButton, ToolbarSeparator, type UseResumeRendererProps, type UseResumeStateProps, copyResumeToClipboard, downloadResume, getBasename, getExtension, openResumeInNewTab, printResume, useResumeRenderer, useResumeState };
|
|
778
|
+
export { CodeViewer, type CodeViewerProps, DEFAULT_PLAYGROUND_MESSAGES, DocxViewer, type DocxViewerProps, EDITOR_BG_COLOR, EDITOR_FONT_SIZE, Editor, EditorPanel, type EditorPanelProps, type EditorProps, HtmlViewer, type HtmlViewerProps, ICON_SIZES, ICON_STROKES, Panel, PanelContent, PanelSeparator, PanelToolbar, Playground, PlaygroundDesktop, type PlaygroundDesktopProps, type PlaygroundMessageOverrides, type PlaygroundMessages, PlaygroundMobile, type PlaygroundMobileProps, type PlaygroundProps, type PlaygroundTooltipMessages, PreviewPanel, type PreviewPanelProps, ResumeEditor, type ResumeEditorProps, ResumeViewer, type ResumeViewerProps, ToolbarButton, type ToolbarButtonProps, ToolbarCopyButton, type ToolbarCopyButtonProps, ToolbarSeparator, type UseResumeRendererProps, type UseResumeStateProps, configureYamlSupport, copyResumeToClipboard, downloadResume, getBasename, getExtension, openResumeInNewTab, printResume, useResumeRenderer, useResumeState };
|
package/dist/index.js
CHANGED
|
@@ -1,278 +1,3 @@
|
|
|
1
|
-
import Te from'@monaco-editor/react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {IconArrowBackUp,IconArrowForwardUp,IconEraser,IconPrinter,IconExternalLink,IconDownload,IconCheck,IconCopy,IconFileCode,IconEdit,IconEye,IconFileText,IconTex,IconMarkdown,IconHtml}from'@tabler/icons-react';import {useRef,useCallback,useState,useEffect,useMemo}from'react';import fe from'clsx';import {getResumeRenderer}from'@yamlresume/core';import {parse}from'yaml';import {Group,Panel,Separator}from'react-resizable-panels';import {renderAsync}from'docx-preview';var p={xs:12,sm:16,md:20,lg:24,xl:28},c={xs:1,sm:1.25,md:1.5,lg:1.75,xl:2},w="#1e1e1e",se=14;function Ce(e){let t={displayName:"LaTeX",name:"latex",mimeTypes:["text/latex","text/tex"],fileExtensions:["tex","sty","cls"],tokenPostfix:".latex",defaultToken:"",keywords:["addcontentsline","addtocontents","addtocounter","address","addtolength","addvspace","alph","appendix","arabic","author","backslash","baselineskip","baselinestretch","bf","bibitem","bigskipamount","bigskip","boldmath","boldsymbol","cal","caption","cdots","centering","chapter","circle","cite","cleardoublepage","clearpage","cline","closing","color","copyright","dashbox","date","ddots","documentclass","dotfill","em","emph","ensuremath","epigraph","euro","fbox","flushbottom","fnsymbol","footnote","footnotemark","footnotesize","footnotetext","frac","frame","framebox","frenchspacing","hfill","hline","href","hrulefill","hspace","huge","Huge","hyphenation","include","includegraphics","includeonly","indent","input","it","item","kill","label","large","Large","LARGE","LaTeX","LaTeXe","ldots","left","lefteqn","line","linebreak","linethickness","linewidth","listoffigures","listoftables","location","makebox","maketitle","markboth","mathcal","mathop","mbox","medskip","multicolumn","multiput","newcommand","newcolumntype","newcounter","newenvironment","newfont","newlength","newline","newpage","newsavebox","newtheorem","nocite","noindent","nolinebreak","nonfrenchspacing","normalsize","nopagebreak","not","onecolumn","opening","oval","overbrace","overline","pagebreak","pagenumbering","pageref","pagestyle","par","paragraph","parbox","parindent","parskip","part","protect","providecommand","put","raggedbottom","raggedleft","raggedright","raisebox","ref","renewcommand","right","rm","roman","rule","savebox","sbox","sc","scriptsize","section","setcounter","setlength","settowidth","sf","shortstack","signature","sl","slash","small","smallskip","sout","space","sqrt","stackrel","stepcounter","subparagraph","subsection","subsubsection","tableofcontents","telephone","TeX","textbf","textcolor","textit","textmd","textnormal","textrm","textsc","textsf","textsl","texttt","textup","textwidth","textheight","thanks","thispagestyle","tiny","title","today","tt","twocolumn","typeout","typein","uline","underbrace","underline","unitlength","usebox","usecounter","uwave","value","vbox","vcenter","vdots","vector","verb","vfill","vline","vphantom","vspace","RequirePackage","NeedsTeXFormat","usepackage","input","include","documentclass","documentstyle","def","edef","defcommand","if","ifdim","ifnum","ifx","fi","else","begingroup","endgroup","definecolor","textcolor","color","eifstrequal","eeifstrequal"],tokenizer:{root:[[/(\\begin)(\s*)(\{)([\w\-*@]+)(\})/,["keyword.predefined","white","@brackets",{token:"tag.env-$4",bracket:"@open"},"@brackets"]],[/(\\end)(\s*)(\{)([\w\-*@]+)(\})/,["keyword.predefined","white","@brackets",{token:"tag.env-$4",bracket:"@close"},"@brackets"]],[/\\\[a-zA-Z@]/,"keyword"],[/\\\\[^a-zA-Z@]/,"keyword"],[/\\@[a-zA-Z@]+/,"keyword.at"],[/\\([a-zA-Z@]+)/,{cases:{"$1@keywords":"keyword.predefined","@default":"keyword"}}],{include:"@whitespace"},[/[{}()[\]]/,"@brackets"],[/#+\d/,"number.arg"],[/\\-?(?:\d+(?:\.\d+)?|\.\d+)\s*(?:em|ex|pt|pc|sp|cm|mm|in)/,"number.len"]],whitespace:[[/[ \t\r\n]+/,"white"],["%.*$","comment"]]}},o={comments:{lineComment:"%"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"$",close:"$"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"$",close:"$"}]};e.languages.getLanguages().some(r=>r.id==="latex")||(e.languages.register({id:"latex"}),e.languages.setMonarchTokensProvider("latex",t),e.languages.setLanguageConfiguration("latex",o));}function C({value:e,onChange:t,language:o,readOnly:r=false,lineNumbers:n=true,minimap:a=true,onMount:i}){return jsx(Te,{height:"100%",language:o,value:e,onChange:t,theme:"vs-dark",onMount:i,beforeMount:Ce,options:{readOnly:r,domReadOnly:r,lineNumbers:n?"on":"off",minimap:{enabled:a},fontSize:se,lineNumbersMinChars:4,padding:{top:8},automaticLayout:true,roundedSelection:false,smoothScrolling:true,scrollBeyondLastLine:false}})}var R=(e="resume.yaml",t=false)=>{let o=e.split(/[/\\]/).pop()||e;return t?o.replace(/\.(ya?ml|json)$/,""):o},E=e=>{switch(e){case "html":return ".html";case "latex":return ".tex";case "markdown":return ".md";case "docx":return ".docx";default:return ""}},W=async(e,t)=>{try{let o=e?.layouts;if(!e||!o[t]){console.warn("No resume or layout found for download");return}let n=getResumeRenderer(e,t).render(),a=o[t],i=E(a.engine),s=`resume.${t}${i}`,g=n instanceof Promise?await n:n,m=g instanceof Uint8Array?new Blob([g.buffer],{type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}):new Blob([g],{type:"text/plain"}),l=URL.createObjectURL(m),u=document.createElement("a");u.href=l,u.download=s,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(l);}catch(o){console.error("Failed to download resume:",o);}},z=(e,t)=>{try{let o=e?.layouts;if(!e||!o[t])return console.warn("No resume or layout found for copy"),Promise.resolve();let n=getResumeRenderer(e,t).render();return typeof n!="string"?(console.warn("Copy to clipboard is not supported for binary layouts"),Promise.resolve()):navigator.clipboard.writeText(n)}catch(o){return console.error("Failed to copy resume:",o),Promise.resolve()}},V=(e,t)=>{try{let o=e?.layouts;if(!e||!o[t]){console.warn("No resume or layout found for print");return}if(o[t].engine!=="html"){console.warn("Printing is only supported for HTML layouts");return}let a=getResumeRenderer(e,t).render();if(typeof a!="string"){console.warn("Printing is only supported for string-based layouts");return}let i=document.createElement("iframe");i.style.position="absolute",i.style.width="0px",i.style.height="0px",i.style.border="none",document.body.appendChild(i);let s=i.contentWindow?.document;s&&(s.open(),s.write(a),s.close(),i.contentWindow?.focus(),i.contentWindow?.print()),setTimeout(()=>{document.body.removeChild(i);},1e3);}catch(o){console.error("Failed to print resume:",o);}},U=(e,t)=>{try{let o=e?.layouts;if(!e||!o[t]){console.warn("No resume or layout found for new tab");return}if(o[t].engine!=="html"){console.warn("Open in new tab is only supported for HTML layouts");return}let a=getResumeRenderer(e,t).render();if(typeof a!="string"){console.warn("Open in new tab is only supported for string-based layouts");return}let i=new Blob([a],{type:"text/html"}),s=URL.createObjectURL(i);window.open(s,"_blank");}catch(o){console.error("Failed to open resume in new tab:",o);}};function pe({filename:e="resume.yaml"}){let t=R(e);return jsxs("div",{className:fe("flex items-center gap-2","h-full px-4","border-r border-neutral-600"),style:{backgroundColor:w},children:[jsx(IconFileCode,{size:p.sm,stroke:c.sm}),jsx("span",{children:t})]})}function X({value:e,onChange:t,onMount:o}){return jsx(C,{language:"yaml",value:e,onChange:t,onMount:o})}function Z({value:e,onChange:t,filename:o,tooltips:r}){let n=useRef(null),a=l=>{n.current=l;},i=useCallback(()=>{n.current?.trigger("source","undo",null);},[]),s=useCallback(()=>{n.current?.trigger("source","redo",null);},[]),g=useCallback(()=>{let l=n.current?.getValue();return l?navigator.clipboard.writeText(l):Promise.resolve()},[]),m=useCallback(()=>{n.current&&window.confirm("Are you sure you want to clear the editor?")&&n.current.setValue("");},[]);return jsxs(x,{children:[jsxs(v,{children:[jsx("div",{className:"flex h-full",children:jsx(pe,{filename:o})}),jsx("div",{className:"flex-1"}),jsxs("div",{className:"flex items-center gap-0.5 pr-2",children:[jsx(N,{onClick:g,title:r.copy}),jsx(P,{}),jsx(h,{onClick:i,title:r.undo,children:jsx(IconArrowBackUp,{size:p.sm,stroke:c.sm})}),jsx(h,{onClick:s,title:r.redo,children:jsx(IconArrowForwardUp,{size:p.sm,stroke:c.sm})}),jsx(P,{}),jsx(h,{onClick:m,title:r.clear,children:jsx(IconEraser,{size:p.sm,stroke:c.sm})})]})]}),jsx(k,{children:jsx(X,{value:e,onChange:t,onMount:a})})]})}function J({resume:e,layoutIndex:t}){let[o,r]=useState(""),[n,a]=useState(null),[i,s]=useState("html"),[g,m]=useState(null);return useEffect(()=>{if(e)try{let l=e.layouts?.[t];if(!l){m(`Layout at index ${t} not found.`);return}if(typeof l.engine!="string"){m("Layout is incomplete - missing engine property.");return}let u=l.engine;s(u);let T=getResumeRenderer(e,t).render();typeof T=="string"?(r(T),a(null),m(null)):T instanceof Uint8Array?(r(""),a(T),m(null)):T.then(b=>{typeof b=="string"?(r(b),a(null)):b instanceof Uint8Array&&(r(""),a(b)),m(null);}).catch(b=>{m(`Render Error: ${b instanceof Error?b.message:String(b)}`);});}catch(l){m(`Render Error: ${l instanceof Error?l.message:String(l)}`);}},[e,t]),{renderedContent:o,binaryContent:n,engine:i,error:g}}var L=`# MIT License
|
|
2
|
-
|
|
3
|
-
# Copyright (c) 2023\u2013Present PPResume (https://ppresume.com)
|
|
4
|
-
#
|
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
# of this software and associated documentation files (the "Software"), to
|
|
7
|
-
# deal in the Software without restriction, including without limitation the
|
|
8
|
-
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
9
|
-
# sell copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
# furnished to do so, subject to the following conditions:
|
|
11
|
-
#
|
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
|
13
|
-
# all copies or substantial portions of the Software.
|
|
14
|
-
#
|
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
20
|
-
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
21
|
-
# IN THE SOFTWARE.
|
|
22
|
-
|
|
23
|
-
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
|
|
24
|
-
#
|
|
25
|
-
# YAMLResume provides a builtin schema to validate resumes and help avoid lots
|
|
26
|
-
# of low level mistakes.
|
|
27
|
-
#
|
|
28
|
-
# You need to install https://github.com/redhat-developer/yaml-language-server
|
|
29
|
-
# in order to get the best editing experience in your choice of editor/IDE.
|
|
30
|
-
#
|
|
31
|
-
# ref:
|
|
32
|
-
# - https://yamlresume.dev/docs/compiler/schema
|
|
33
|
-
# - https://yamlresume.dev/docs/compiler/schema/json
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
content:
|
|
37
|
-
basics:
|
|
38
|
-
name: Andy Dufresne
|
|
39
|
-
headline: Headed for the Pacific
|
|
40
|
-
phone: "(213) 555-9876"
|
|
41
|
-
email: hi@ppresume.com
|
|
42
|
-
url: https://ppresume.com/gallery
|
|
43
|
-
# All summary fields supports a limited rich text capabilities in markdown
|
|
44
|
-
# syntax:
|
|
45
|
-
#
|
|
46
|
-
# - bold, (e.g, **bold**)
|
|
47
|
-
# - italic, (e.g, *italic*)
|
|
48
|
-
# - ordered list, unordored list and nested sub list
|
|
49
|
-
# - links (e.g. [link](https://ppresume.com))
|
|
50
|
-
summary: |
|
|
51
|
-
- Computer Science major with strong foundation in data structures, algorithms, and software development
|
|
52
|
-
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
|
|
53
|
-
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
|
|
54
|
-
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
|
|
55
|
-
location:
|
|
56
|
-
address: 123 Main Street
|
|
57
|
-
city: Sacramento
|
|
58
|
-
region: California
|
|
59
|
-
country: United States
|
|
60
|
-
postalCode: "95814"
|
|
61
|
-
profiles:
|
|
62
|
-
- network: Line
|
|
63
|
-
url: https://line.com/PPResumeX
|
|
64
|
-
username: PPResumeX
|
|
65
|
-
- network: Twitter
|
|
66
|
-
url: https://twitter.com/PPResumeX
|
|
67
|
-
username: PPResumeX
|
|
68
|
-
education:
|
|
69
|
-
- institution: University of Southern California
|
|
70
|
-
url: https://www.cs.usc.edu/
|
|
71
|
-
# Valid degree options:
|
|
72
|
-
#
|
|
73
|
-
# - 'Middle School'
|
|
74
|
-
# - 'High School'
|
|
75
|
-
# - 'Diploma'
|
|
76
|
-
# - 'Associate'
|
|
77
|
-
# - 'Bachelor'
|
|
78
|
-
# - 'Master'
|
|
79
|
-
# - 'Doctor'
|
|
80
|
-
degree: Bachelor
|
|
81
|
-
area: Computer Engineering and Computer Science
|
|
82
|
-
score: "3.8"
|
|
83
|
-
# Should be a valid date string that can be parsed by \\\`new Date(dateStr)\\\`
|
|
84
|
-
# in JavaScript, eg. '2020-01', '2020-02-03', 'Jul 1, 2023' etc.
|
|
85
|
-
#
|
|
86
|
-
# The date part would be removed in the final output as most of the time
|
|
87
|
-
# people won't really care about the exact date for your working
|
|
88
|
-
# experience or education background, etc.
|
|
89
|
-
# ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
|
|
90
|
-
startDate: Sep 1, 2016
|
|
91
|
-
# Leave endDate blank to indicate "Present"
|
|
92
|
-
endDate: Jul 1, 2020
|
|
93
|
-
courses:
|
|
94
|
-
- Discrete Methods in Computer Science
|
|
95
|
-
- Programming Language Concepts
|
|
96
|
-
- Data Structures and Object-Oriented Design
|
|
97
|
-
- Operating Systems
|
|
98
|
-
- Computer Architecture
|
|
99
|
-
- Database Systems
|
|
100
|
-
- Computer Networking
|
|
101
|
-
- Introduction to the Theory of Computing
|
|
102
|
-
summary: |
|
|
103
|
-
- Developed proficiency in programming languages such as Java, C++, and Python
|
|
104
|
-
- Gained hands-on experience in software development through various projects and assignments
|
|
105
|
-
- Strong communication and teamwork skills acquired through group projects and presentations
|
|
106
|
-
work:
|
|
107
|
-
- name: PPResume
|
|
108
|
-
url: https://ppresume.com
|
|
109
|
-
startDate: Dec 1, 2022
|
|
110
|
-
endDate:
|
|
111
|
-
position: Senior Software Engineer
|
|
112
|
-
summary: |
|
|
113
|
-
- Developed and implemented efficient and scalable code, ensuring high-quality and maintainable web applications
|
|
114
|
-
- Collaborated with cross-functional teams to gather project requirements and translate them into technical solutions
|
|
115
|
-
- Conducted thorough testing and debugging to identify and resolve any issues or bugs in the software
|
|
116
|
-
- Actively participated in code reviews, providing valuable feedback to improve code quality and adherence to best practices
|
|
117
|
-
- Mentored and guided junior developers, fostering a collaborative and growth-oriented team environment
|
|
118
|
-
keywords:
|
|
119
|
-
- Scalability
|
|
120
|
-
- Growth
|
|
121
|
-
- Quality
|
|
122
|
-
- Mentorship
|
|
123
|
-
- name: PPResume
|
|
124
|
-
url: https://ppresume.com
|
|
125
|
-
startDate: Sep 1, 2020
|
|
126
|
-
endDate: Dec 1, 2022
|
|
127
|
-
position: Software Engineer
|
|
128
|
-
summary: |
|
|
129
|
-
- Created reusable React components to ensure code efficiency and maintainability
|
|
130
|
-
- Integrated with RESTful APIs to fetch and display dynamic data on the frontend
|
|
131
|
-
- Implemented client-side routing using React Router for smooth navigation between pages
|
|
132
|
-
- Actively participated in Agile development methodologies, attending daily stand-up meetings and sprint planning sessions
|
|
133
|
-
keywords:
|
|
134
|
-
- RESTful
|
|
135
|
-
- React
|
|
136
|
-
- Agile
|
|
137
|
-
languages:
|
|
138
|
-
# Valid language fluency options:
|
|
139
|
-
#
|
|
140
|
-
# - 'Elementary Proficiency'
|
|
141
|
-
# - 'Limited Working Proficiency'
|
|
142
|
-
# - 'Minimum Professional Proficiency'
|
|
143
|
-
# - 'Full Professional Proficiency'
|
|
144
|
-
# - 'Native or Bilingual Proficiency'
|
|
145
|
-
- language: English
|
|
146
|
-
fluency: Native or Bilingual Proficiency
|
|
147
|
-
keywords:
|
|
148
|
-
- TOEFL 110
|
|
149
|
-
- IELTS 7.5
|
|
150
|
-
- language: Chinese
|
|
151
|
-
fluency: Elementary Proficiency
|
|
152
|
-
keywords: []
|
|
153
|
-
skills:
|
|
154
|
-
# Valid level options:
|
|
155
|
-
#
|
|
156
|
-
# - 'Novice'
|
|
157
|
-
# - 'Beginner'
|
|
158
|
-
# - 'Intermediate'
|
|
159
|
-
# - 'Advanced'
|
|
160
|
-
# - 'Expert'
|
|
161
|
-
# - 'Master'
|
|
162
|
-
- name: Web Development
|
|
163
|
-
level: Expert
|
|
164
|
-
keywords:
|
|
165
|
-
- Python
|
|
166
|
-
- Ruby
|
|
167
|
-
- CSS
|
|
168
|
-
- React
|
|
169
|
-
- JavaScript
|
|
170
|
-
- name: DevOps
|
|
171
|
-
level: Intermediate
|
|
172
|
-
keywords:
|
|
173
|
-
- Python
|
|
174
|
-
- Kubernetes
|
|
175
|
-
- Docker
|
|
176
|
-
- Shell
|
|
177
|
-
- Ansible
|
|
178
|
-
- name: Design
|
|
179
|
-
level: Intermediate
|
|
180
|
-
keywords:
|
|
181
|
-
- Sketch
|
|
182
|
-
- Figma
|
|
183
|
-
- Photoshop
|
|
184
|
-
awards:
|
|
185
|
-
- title: Dean's List
|
|
186
|
-
awarder: University of Southern California
|
|
187
|
-
date: Oct 2016
|
|
188
|
-
summary: |
|
|
189
|
-
Awarded to students who achieve a high academic standing by maintaining a specified grade point average (GPA) during a semester.
|
|
190
|
-
certificates:
|
|
191
|
-
- name: AWS Certified Developer - Associate
|
|
192
|
-
url: https://aws.amazon.com/certification/
|
|
193
|
-
issuer: AWS
|
|
194
|
-
date: Mar 2021
|
|
195
|
-
publications:
|
|
196
|
-
- publisher: ACM Transactions on Interactive Intelligent Systems
|
|
197
|
-
url: https://dl.acm.org/journal/tiis
|
|
198
|
-
name: Enhancing Human-Computer Interaction through Augmented Reality
|
|
199
|
-
releaseDate: Dec 2017
|
|
200
|
-
summary: |
|
|
201
|
-
- Explores the potential of augmented reality (AR) in improving interaction between humans and computers
|
|
202
|
-
- Highlights benefits of AR in various areas such as gaming, education, healthcare, and design
|
|
203
|
-
- Discusses challenges and future directions of AR technology in enhancing user experience
|
|
204
|
-
references:
|
|
205
|
-
- name: Dr. Amanda Reynolds
|
|
206
|
-
phone: "(555) 123-4567"
|
|
207
|
-
relationship: Computer Science Professor
|
|
208
|
-
email: amanda.reynolds@usc.edu
|
|
209
|
-
summary: |
|
|
210
|
-
Andy Dufresne shows exceptional problem-solving skills and a solid understanding of programming concepts, he would bring immense value to any team or organization he becomes a part of.
|
|
211
|
-
projects:
|
|
212
|
-
- name: EduWeb
|
|
213
|
-
url: https://www.eduweb.xyz/
|
|
214
|
-
description: A web-based educational platform for interactive learning
|
|
215
|
-
startDate: Sep 2016
|
|
216
|
-
endDate: Dec 2016
|
|
217
|
-
summary: |
|
|
218
|
-
- Designed to enhance online learning experiences
|
|
219
|
-
- Facilitates students' engagement and collaboration through interactive features and user-friendly interface
|
|
220
|
-
- Offers a wide range of courses across various subjects
|
|
221
|
-
- Aims to improve the way students learn through the power of the web
|
|
222
|
-
keywords:
|
|
223
|
-
- Education
|
|
224
|
-
- Online Learning
|
|
225
|
-
- HCI
|
|
226
|
-
interests:
|
|
227
|
-
- name: Sports
|
|
228
|
-
keywords:
|
|
229
|
-
- Soccer
|
|
230
|
-
- Swimming
|
|
231
|
-
- Bicycling
|
|
232
|
-
- Hiking
|
|
233
|
-
- name: Music
|
|
234
|
-
keywords:
|
|
235
|
-
- Piano
|
|
236
|
-
- Guitar
|
|
237
|
-
volunteer:
|
|
238
|
-
- organization: USC Computer Science and Engineering Society
|
|
239
|
-
url: https://www.usccsesociety.org/
|
|
240
|
-
position: Tech Mentor
|
|
241
|
-
startDate: Sep 2015
|
|
242
|
-
endDate: Jul 2023
|
|
243
|
-
summary: |
|
|
244
|
-
- Volunteered as a Tech Mentor at USC Computer Science and Engineering Society
|
|
245
|
-
- Provided guidance and assistance to fellow students in their technical projects and coursework
|
|
246
|
-
- Assisted in organizing workshops, coding competitions, and networking events for the society members
|
|
247
|
-
- Contributed to fostering a collaborative and supportive environment within the student community
|
|
248
|
-
|
|
249
|
-
# Top-level locale setting
|
|
250
|
-
locale:
|
|
251
|
-
# Use \\\`yamlresume languages list\\\` to get the list of supported languages
|
|
252
|
-
language: en
|
|
253
|
-
|
|
254
|
-
# Multiple output layouts configuration
|
|
255
|
-
layouts:
|
|
256
|
-
- engine: html
|
|
257
|
-
# Use \\\`yamlresume templates list\\\` to get the list of available templates
|
|
258
|
-
template: calm
|
|
259
|
-
typography:
|
|
260
|
-
# HTML engine only supports font size in px unit, from 10px to 24px
|
|
261
|
-
fontSize: 16px
|
|
262
|
-
- engine: markdown
|
|
263
|
-
- engine: latex
|
|
264
|
-
page:
|
|
265
|
-
margins:
|
|
266
|
-
top: 2.5cm
|
|
267
|
-
left: 1.5cm
|
|
268
|
-
right: 1.5cm
|
|
269
|
-
bottom: 2.5cm
|
|
270
|
-
showPageNumbers: true
|
|
271
|
-
# Use \\\`yamlresume templates list\\\` to get the list of available templates
|
|
272
|
-
template: moderncv-banking
|
|
273
|
-
typography:
|
|
274
|
-
# LaTeX engine only supports 10pt, 11pt, and 12pt
|
|
275
|
-
fontSize: 11pt
|
|
276
|
-
`;function K({yaml:e=L,onChange:t}){let[o,r]=useState(0),n=i=>{t?.(i);},a=useMemo(()=>{try{return parse(e)}catch{return null}},[e]);return useEffect(()=>{let i=a?.layouts||[];o>=i.length&&i.length>0&&r(i.length-1);},[a?.layouts,o]),{yaml:e,handleYamlChange:n,activeLayoutIndex:o,setActiveLayoutIndex:r,resume:a}}var ce={tooltips:{copy:"Copy",undo:"Undo",redo:"Redo",clear:"Clear",print:"Print",openInNewTab:"Open in New Tab",download:"Download"}};function Ve({yaml:e=L,onChange:t,filename:o,messages:r}){let{yaml:n,handleYamlChange:a,activeLayoutIndex:i,setActiveLayoutIndex:s,resume:g}=K({yaml:e,onChange:t}),m={...ce.tooltips,...r?.tooltips},l=jsx(Z,{value:n,onChange:y=>a(y||""),filename:o,tooltips:m}),u=jsx(Y,{activeLayoutIndex:i,setActiveLayoutIndex:s,resume:g,filename:o,tooltips:m});return jsxs("div",{className:fe("flex flex-col h-full w-full gap-4","text-neutral-200"),style:{backgroundColor:w},children:[jsx(j,{editorPanel:l,previewPanel:u}),jsx(G,{editorPanel:l,previewPanel:u})]})}function G({editorPanel:e,previewPanel:t}){return jsx("div",{className:"hidden md:flex flex-1 overflow-hidden",children:jsxs(Group,{orientation:"horizontal",children:[jsx(Panel,{minSize:360,className:"flex flex-col",children:e}),jsx(Q,{}),jsx(Panel,{minSize:360,className:"flex flex-col",children:t})]})})}function q({label:e,active:t,onClick:o,icon:r}){return jsxs("button",{type:"button",onClick:o,className:fe("flex-1 flex items-center justify-center gap-2 h-10","text-sm","transition-colors",t&&"border-b-2 border-neutral-200 font-medium"),children:[jsx(r,{size:p.sm,stroke:c.sm}),e]})}function de({activeTab:e,onTabChange:t}){return jsxs("div",{className:"flex md:hidden border-b border-neutral-400",children:[jsx(q,{label:"Editor",icon:IconEdit,active:e==="editor",onClick:()=>t("editor")}),jsx(q,{label:"Preview",icon:IconEye,active:e==="preview",onClick:()=>t("preview")})]})}function j({editorPanel:e,previewPanel:t}){let[o,r]=useState("editor");return jsxs("div",{className:"flex-1 flex flex-col gap-2 overflow-hidden md:hidden",children:[jsx(de,{activeTab:o,onTabChange:r}),jsx("div",{className:fe("flex-1 flex-col min-h-0",o==="editor"?"flex":"hidden"),children:e}),jsx("div",{className:fe("flex-1 flex-col min-h-0",o==="preview"?"flex":"hidden"),children:t})]})}function oe({content:e,language:t}){return jsx(C,{language:t,value:e,readOnly:true,minimap:false,lineNumbers:false})}function te({content:e}){let t=useRef(null),[o,r]=useState(null),[n,a]=useState(false);return useEffect(()=>{if(!e||!t.current)return r(null),a(false),()=>{};a(true),r(null);let i=t.current;return renderAsync(e,i,void 0,{className:"docx",inWrapper:true}).then(()=>{a(false);}).catch(s=>{a(false),r(`DOCX Render Error: ${s instanceof Error?s.message:String(s)}`);}),()=>{i.innerHTML="";}},[e]),e?o?jsx("div",{role:"alert","aria-live":"polite",className:"h-full w-full p-4 font-mono text-red-500 bg-red-50 border border-red-200",children:o}):jsxs("div",{className:"h-full w-full overflow-auto bg-white relative",children:[n&&jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-white/80 z-10",children:jsx("div",{className:"text-gray-500",children:"Loading DOCX preview\u2026"})}),jsx("div",{ref:t,className:"docx-preview-container"})]}):jsx("div",{className:"h-full w-full flex items-center justify-center text-gray-500 bg-gray-50",children:"No DOCX content to preview."})}function re({content:e}){return jsx("iframe",{title:"Resume HTML Preview",className:"w-full h-full border-none",srcDoc:e})}var he="data:image/png;base64,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";function ye(){return jsxs("div",{className:fe("h-full w-full","flex flex-col items-center justify-center gap-4","text-neutral-200"),children:[jsx("img",{src:he,alt:"YAML Resume Logo",className:"w-32 h-32 opacity-70 grayscale",draggable:false}),jsx("div",{className:"text-lg font-medium",children:"No Layouts Defined"}),jsx("p",{className:"max-w-xs text-center text-sm text-neutral-400",children:"Your resume appears to be empty or contains no layout definitions."})]})}function go(e){switch(e){case "html":return jsx(IconHtml,{size:p.sm,stroke:c.sm});case "markdown":return jsx(IconMarkdown,{size:p.sm,stroke:c.sm});case "latex":return jsx(IconTex,{size:p.sm,stroke:c.sm});default:return jsx(IconFileText,{size:p.sm,stroke:c.sm})}}function Pe({active:e,onClick:t,engine:o,index:r,filename:n}){return jsxs("button",{type:"button",onClick:t,className:fe("flex items-center gap-2 max-w-[200px]","h-full px-4","transition-colors border-r border-neutral-600 last:border-neutral-400"),title:`${n}.${r}${E(o)}`,role:"tab","aria-selected":e,style:{backgroundColor:e&&w},children:[go(o),jsxs("span",{className:"truncate",children:[n,".",r,E(o)]})]})}function we({children:e}){return jsx("div",{role:"tablist",className:fe("flex h-full overflow-x-auto"),children:e})}function ae({resume:e,layoutIndex:t}){let{renderedContent:o,binaryContent:r,engine:n,error:a}=J({resume:e,layoutIndex:t});return a?jsx("div",{role:"alert","aria-live":"polite",className:fe("h-full w-full p-4","font-mono text-red-500 bg-red-50","border border-red-200"),children:a}):n==="docx"?jsx(te,{content:r}):jsx("div",{className:"h-full w-full flex flex-col bg-white",children:n==="html"?jsx(re,{content:o}):jsx(oe,{content:o,language:n})})}function Y({activeLayoutIndex:e,filename:t,resume:o,setActiveLayoutIndex:r,tooltips:n}){let a=useMemo(()=>(o?.layouts||[]).map((u,y)=>({layout:u,originalIndex:y})).filter(u=>u.layout!==null&&u.layout!==void 0&&typeof u.layout.engine=="string"),[o?.layouts]),i=R(t,true)||"resume",s=useCallback(()=>{z(o,e);},[o,e]),g=useCallback(()=>{V(o,e);},[o,e]),m=useCallback(()=>{U(o,e);},[o,e]),l=useCallback(()=>{W(o,e);},[o,e]);return a.length===0?jsxs(x,{children:[jsx(v,{}),jsx(ye,{})]}):jsxs(x,{children:[jsxs(v,{children:[jsx(we,{children:a.map(({layout:u,originalIndex:y})=>jsx(Pe,{active:e===y,onClick:()=>r(y),engine:u.engine,index:y,filename:i},`${u.engine}-${y}`))}),jsx("div",{className:"flex-1"}),jsxs("div",{className:"flex items-center gap-0.5 pr-2",children:[jsx(N,{onClick:s,title:n.copy}),jsx(P,{}),o?.layouts?.[e]?.engine==="html"&&jsxs(Fragment,{children:[jsx(h,{onClick:g,title:n.print,children:jsx(IconPrinter,{size:p.sm,stroke:c.sm})}),jsx(h,{onClick:m,title:n.openInNewTab,children:jsx(IconExternalLink,{size:p.sm,stroke:c.sm})}),jsx(P,{})]}),jsx(h,{onClick:l,title:n.download,children:jsx(IconDownload,{size:p.sm,stroke:c.sm})})]})]}),jsx(k,{children:jsx(ae,{resume:o,layoutIndex:e})})]})}function x({children:e}){return jsx("div",{className:fe("flex-1 flex flex-col","border border-neutral-400 overflow-hidden"),children:e})}function k({children:e}){return jsx("div",{className:"flex-1 relative min-h-0",children:e})}function Q(){return jsx(Separator,{className:fe("w-2","flex flex-col justify-center items-center group","transition-colors cursor-col-resize"),"data-testid":"separator",children:jsx("div",{className:fe("w-1 h-8","bg-neutral-400","group-hover:bg-neutral-300")})})}function v({children:e}){return jsx("div",{className:fe("flex items-center border-b border-neutral-400 h-10 text-sm shrink-0","bg-neutral-800"),children:e})}function h({onClick:e,children:t,title:o}){return jsx("button",{type:"button",onClick:e,className:fe("flex items-center justify-center h-8 w-8","text-neutral-200 hover:text-neutral-700 hover:bg-neutral-200","transition-colors","focus:outline-none focus:ring-1 focus:ring-neutral-400"),title:o,children:t})}function N({onClick:e,title:t="Copy"}){let[o,r]=useState(false);return jsx(h,{onClick:async()=>{try{await e(),r(!0),setTimeout(()=>r(!1),2e3);}catch(a){console.error("Failed to copy",a);}},title:t,children:o?jsx(IconCheck,{size:p.sm,stroke:c.sm}):jsx(IconCopy,{size:p.sm,stroke:c.sm})})}function P(){return jsx("div",{className:"w-px h-4 bg-neutral-400 mx-1"})}
|
|
277
|
-
export{oe as CodeViewer,ce as DEFAULT_PLAYGROUND_MESSAGES,te as DocxViewer,w as EDITOR_BG_COLOR,se as EDITOR_FONT_SIZE,C as Editor,Z as EditorPanel,re as HtmlViewer,p as ICON_SIZES,c as ICON_STROKES,x as Panel,k as PanelContent,Q as PanelSeparator,v as PanelToolbar,Ve as Playground,G as PlaygroundDesktop,j as PlaygroundMobile,Y as PreviewPanel,X as ResumeEditor,ae as ResumeViewer,h as ToolbarButton,N as ToolbarCopyButton,P as ToolbarSeparator,z as copyResumeToClipboard,W as downloadResume,R as getBasename,E as getExtension,U as openResumeInNewTab,V as printResume,J as useResumeRenderer,K as useResumeState};//# sourceMappingURL=index.js.map
|
|
1
|
+
import Se,{loader}from'@monaco-editor/react';import {ResumeSchema,getResumeRenderer}from'@yamlresume/core';import*as Te from'monaco-editor';import {configureMonacoYaml}from'monaco-yaml';import {z as z$1}from'zod';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {IconArrowBackUp,IconArrowForwardUp,IconEraser,IconPrinter,IconExternalLink,IconDownload,IconCheck,IconCopy,IconFileCode,IconEdit,IconEye,IconFileText,IconTex,IconMarkdown,IconHtml}from'@tabler/icons-react';import {useRef,useCallback,useState,useEffect,useMemo}from'react';import ge from'clsx';import {getSampleResume}from'@yamlresume/samples';import {parse}from'yaml';import {Group,Panel,Separator}from'react-resizable-panels';import {renderAsync}from'docx-preview';var p={xs:12,sm:16,md:20,lg:24,xl:28},m={xs:1,sm:1.25,md:1.5,lg:1.75,xl:2},h="#1e1e1e",se=14;loader.config({monaco:Te});var Ee="https://yamlresume.dev/schema.json",Ie=z$1.toJSONSchema(ResumeSchema),le=false;function Me(){let e=self;e.MonacoEnvironment?.getWorker||(e.MonacoEnvironment={getWorker(r,o){switch(o){case "editorWorkerService":return new Worker(new URL("../workers/editor.worker.ts",import.meta.url),{type:"module"});case "yaml":return new Worker(new URL("../workers/yaml.worker.ts",import.meta.url),{type:"module"});default:throw new Error(`Unsupported monaco worker label: ${o}`)}}});}function A(e){Me(),!le&&(configureMonacoYaml(e,{completion:true,hover:true,validate:true,enableSchemaRequest:false,format:{enable:false},schemas:[{uri:Ee,fileMatch:["*"],schema:Ie}]}),le=true);}function Le(e){let r={displayName:"LaTeX",name:"latex",mimeTypes:["text/latex","text/tex"],fileExtensions:["tex","sty","cls"],tokenPostfix:".latex",defaultToken:"",keywords:["addcontentsline","addtocontents","addtocounter","address","addtolength","addvspace","alph","appendix","arabic","author","backslash","baselineskip","baselinestretch","bf","bibitem","bigskipamount","bigskip","boldmath","boldsymbol","cal","caption","cdots","centering","chapter","circle","cite","cleardoublepage","clearpage","cline","closing","color","copyright","dashbox","date","ddots","documentclass","dotfill","em","emph","ensuremath","epigraph","euro","fbox","flushbottom","fnsymbol","footnote","footnotemark","footnotesize","footnotetext","frac","frame","framebox","frenchspacing","hfill","hline","href","hrulefill","hspace","huge","Huge","hyphenation","include","includegraphics","includeonly","indent","input","it","item","kill","label","large","Large","LARGE","LaTeX","LaTeXe","ldots","left","lefteqn","line","linebreak","linethickness","linewidth","listoffigures","listoftables","location","makebox","maketitle","markboth","mathcal","mathop","mbox","medskip","multicolumn","multiput","newcommand","newcolumntype","newcounter","newenvironment","newfont","newlength","newline","newpage","newsavebox","newtheorem","nocite","noindent","nolinebreak","nonfrenchspacing","normalsize","nopagebreak","not","onecolumn","opening","oval","overbrace","overline","pagebreak","pagenumbering","pageref","pagestyle","par","paragraph","parbox","parindent","parskip","part","protect","providecommand","put","raggedbottom","raggedleft","raggedright","raisebox","ref","renewcommand","right","rm","roman","rule","savebox","sbox","sc","scriptsize","section","setcounter","setlength","settowidth","sf","shortstack","signature","sl","slash","small","smallskip","sout","space","sqrt","stackrel","stepcounter","subparagraph","subsection","subsubsection","tableofcontents","telephone","TeX","textbf","textcolor","textit","textmd","textnormal","textrm","textsc","textsf","textsl","texttt","textup","textwidth","textheight","thanks","thispagestyle","tiny","title","today","tt","twocolumn","typeout","typein","uline","underbrace","underline","unitlength","usebox","usecounter","uwave","value","vbox","vcenter","vdots","vector","verb","vfill","vline","vphantom","vspace","RequirePackage","NeedsTeXFormat","usepackage","input","include","documentclass","documentstyle","def","edef","defcommand","if","ifdim","ifnum","ifx","fi","else","begingroup","endgroup","definecolor","textcolor","color","eifstrequal","eeifstrequal"],tokenizer:{root:[[/(\\begin)(\s*)(\{)([\w\-*@]+)(\})/,["keyword.predefined","white","@brackets",{token:"tag.env-$4",bracket:"@open"},"@brackets"]],[/(\\end)(\s*)(\{)([\w\-*@]+)(\})/,["keyword.predefined","white","@brackets",{token:"tag.env-$4",bracket:"@close"},"@brackets"]],[/\\\[a-zA-Z@]/,"keyword"],[/\\\\[^a-zA-Z@]/,"keyword"],[/\\@[a-zA-Z@]+/,"keyword.at"],[/\\([a-zA-Z@]+)/,{cases:{"$1@keywords":"keyword.predefined","@default":"keyword"}}],{include:"@whitespace"},[/[{}()[\]]/,"@brackets"],[/#+\d/,"number.arg"],[/\\-?(?:\d+(?:\.\d+)?|\.\d+)\s*(?:em|ex|pt|pc|sp|cm|mm|in)/,"number.len"]],whitespace:[[/[ \t\r\n]+/,"white"],["%.*$","comment"]]}},o={comments:{lineComment:"%"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"$",close:"$"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"$",close:"$"}]};e.languages.getLanguages().some(t=>t.id==="latex")||(e.languages.register({id:"latex"}),e.languages.setMonarchTokensProvider("latex",r),e.languages.setLanguageConfiguration("latex",o));}function k({value:e,onChange:r,language:o,readOnly:t=false,lineNumbers:n=true,minimap:a=true,onMount:i}){return jsx(Se,{height:"100%",language:o,value:e,onChange:r,theme:"vs-dark",onMount:i,beforeMount:s=>{Le(s),o==="yaml"&&A(s);},options:{readOnly:t,domReadOnly:t,lineNumbers:n?"on":"off",minimap:{enabled:a},fontSize:se,lineNumbersMinChars:4,padding:{top:8},automaticLayout:true,roundedSelection:false,smoothScrolling:true,scrollBeyondLastLine:false}})}var $=(e="resume.yaml",r=false)=>{let o=e.split(/[/\\]/).pop()||e;return r?o.replace(/\.(ya?ml|json)$/,""):o},T=e=>{switch(e){case "html":return ".html";case "latex":return ".tex";case "markdown":return ".md";case "docx":return ".docx";default:return ""}},V=async(e,r)=>{try{let o=e?.layouts;if(!e||!o[r]){console.warn("No resume or layout found for download");return}let n=getResumeRenderer(e,r).render(),a=o[r],i=T(a.engine),s=`resume.${r}${i}`,g=n instanceof Promise?await n:n,c=g instanceof Uint8Array?new Blob([g.buffer],{type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}):new Blob([g],{type:"text/plain"}),l=URL.createObjectURL(c),u=document.createElement("a");u.href=l,u.download=s,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(l);}catch(o){console.error("Failed to download resume:",o);}},z=(e,r)=>{try{let o=e?.layouts;if(!e||!o[r])return console.warn("No resume or layout found for copy"),Promise.resolve();let n=getResumeRenderer(e,r).render();return typeof n!="string"?(console.warn("Copy to clipboard is not supported for binary layouts"),Promise.resolve()):navigator.clipboard.writeText(n)}catch(o){return console.error("Failed to copy resume:",o),Promise.resolve()}},U=(e,r)=>{try{let o=e?.layouts;if(!e||!o[r]){console.warn("No resume or layout found for print");return}if(o[r].engine!=="html"){console.warn("Printing is only supported for HTML layouts");return}let a=getResumeRenderer(e,r).render();if(typeof a!="string"){console.warn("Printing is only supported for string-based layouts");return}let i=document.createElement("iframe");i.style.position="absolute",i.style.width="0px",i.style.height="0px",i.style.border="none",document.body.appendChild(i);let s=i.contentWindow?.document;s&&(s.open(),s.write(a),s.close(),i.contentWindow?.focus(),i.contentWindow?.print()),setTimeout(()=>{document.body.removeChild(i);},1e3);}catch(o){console.error("Failed to print resume:",o);}},X=(e,r)=>{try{let o=e?.layouts;if(!e||!o[r]){console.warn("No resume or layout found for new tab");return}if(o[r].engine!=="html"){console.warn("Open in new tab is only supported for HTML layouts");return}let a=getResumeRenderer(e,r).render();if(typeof a!="string"){console.warn("Open in new tab is only supported for string-based layouts");return}let i=new Blob([a],{type:"text/html"}),s=URL.createObjectURL(i);window.open(s,"_blank");}catch(o){console.error("Failed to open resume in new tab:",o);}};function me({filename:e="resume.yaml"}){let r=$(e);return jsxs("div",{className:ge("flex items-center gap-2","h-full px-4","border-r border-neutral-600"),style:{backgroundColor:h},children:[jsx(IconFileCode,{size:p.sm,stroke:m.sm}),jsx("span",{children:r})]})}function Z({value:e,onChange:r,onMount:o}){return jsx(k,{language:"yaml",value:e,onChange:r,onMount:o})}function K({value:e,onChange:r,filename:o,tooltips:t}){let n=useRef(null),a=l=>{n.current=l;},i=useCallback(()=>{n.current?.trigger("source","undo",null);},[]),s=useCallback(()=>{n.current?.trigger("source","redo",null);},[]),g=useCallback(()=>{let l=n.current?.getValue();return l?navigator.clipboard.writeText(l):Promise.resolve()},[]),c=useCallback(()=>{n.current&&window.confirm("Are you sure you want to clear the editor?")&&n.current.setValue("");},[]);return jsxs(w,{children:[jsxs(v,{children:[jsx("div",{className:"flex h-full",children:jsx(me,{filename:o})}),jsx("div",{className:"flex-1"}),jsxs("div",{className:"flex items-center gap-0.5 pr-2",children:[jsx(N,{onClick:g,title:t.copy}),jsx(x,{}),jsx(b,{onClick:i,title:t.undo,children:jsx(IconArrowBackUp,{size:p.sm,stroke:m.sm})}),jsx(b,{onClick:s,title:t.redo,children:jsx(IconArrowForwardUp,{size:p.sm,stroke:m.sm})}),jsx(x,{}),jsx(b,{onClick:c,title:t.clear,children:jsx(IconEraser,{size:p.sm,stroke:m.sm})})]})]}),jsx(R,{children:jsx(Z,{value:e,onChange:r,onMount:a})})]})}function J({resume:e,layoutIndex:r}){let[o,t]=useState(""),[n,a]=useState(null),[i,s]=useState("html"),[g,c]=useState(null);return useEffect(()=>{if(e)try{let l=e.layouts?.[r];if(!l){c(`Layout at index ${r} not found.`);return}if(typeof l.engine!="string"){c("Layout is incomplete - missing engine property.");return}let u=l.engine;s(u);let C=getResumeRenderer(e,r).render();typeof C=="string"?(t(C),a(null),c(null)):C instanceof Uint8Array?(t(""),a(C),c(null)):C.then(y=>{typeof y=="string"?(t(y),a(null)):y instanceof Uint8Array&&(t(""),a(y)),c(null);}).catch(y=>{c(`Render Error: ${y instanceof Error?y.message:String(y)}`);});}catch(l){c(`Render Error: ${l instanceof Error?l.message:String(l)}`);}},[e,r]),{renderedContent:o,binaryContent:n,engine:i,error:g}}var Ye=getSampleResume("software-engineer","en",{withLayouts:true,withComments:true});function F({yaml:e=Ye,onChange:r}){let[o,t]=useState(0),n=i=>{r?.(i);},a=useMemo(()=>{try{return parse(e)}catch{return null}},[e]);return useEffect(()=>{let i=a?.layouts||[];o>=i.length&&i.length>0&&t(i.length-1);},[a?.layouts,o]),{yaml:e,handleYamlChange:n,activeLayoutIndex:o,setActiveLayoutIndex:t,resume:a}}var ue={tooltips:{copy:"Copy",undo:"Undo",redo:"Redo",clear:"Clear",print:"Print",openInNewTab:"Open in New Tab",download:"Download"}};function Qe({yaml:e,onChange:r,filename:o,messages:t}){let{yaml:n,handleYamlChange:a,activeLayoutIndex:i,setActiveLayoutIndex:s,resume:g}=F({yaml:e,onChange:r}),c={...ue.tooltips,...t?.tooltips},l=jsx(K,{value:n,onChange:P=>a(P||""),filename:o,tooltips:c}),u=jsx(j,{activeLayoutIndex:i,setActiveLayoutIndex:s,resume:g,filename:o,tooltips:c});return jsxs("div",{className:ge("flex flex-col h-full w-full gap-4","text-neutral-200"),style:{backgroundColor:h},children:[jsx(Y,{editorPanel:l,previewPanel:u}),jsx(G,{editorPanel:l,previewPanel:u})]})}function G({editorPanel:e,previewPanel:r}){return jsx("div",{className:"hidden md:flex flex-1 overflow-hidden",children:jsxs(Group,{orientation:"horizontal",children:[jsx(Panel,{minSize:360,className:"flex flex-col",children:e}),jsx(Q,{}),jsx(Panel,{minSize:360,className:"flex flex-col",children:r})]})})}function q({label:e,active:r,onClick:o,icon:t}){return jsxs("button",{type:"button",onClick:o,className:ge("flex-1 flex items-center justify-center gap-2 h-10","text-sm","transition-colors",r&&"border-b-2 border-neutral-200 font-medium"),children:[jsx(t,{size:p.sm,stroke:m.sm}),e]})}function fe({activeTab:e,onTabChange:r}){return jsxs("div",{className:"flex md:hidden border-b border-neutral-400",children:[jsx(q,{label:"Editor",icon:IconEdit,active:e==="editor",onClick:()=>r("editor")}),jsx(q,{label:"Preview",icon:IconEye,active:e==="preview",onClick:()=>r("preview")})]})}function Y({editorPanel:e,previewPanel:r}){let[o,t]=useState("editor");return jsxs("div",{className:"flex-1 flex flex-col gap-2 overflow-hidden md:hidden",children:[jsx(fe,{activeTab:o,onTabChange:t}),jsx("div",{className:ge("flex-1 flex-col min-h-0",o==="editor"?"flex":"hidden"),children:e}),jsx("div",{className:ge("flex-1 flex-col min-h-0",o==="preview"?"flex":"hidden"),children:r})]})}function oe({content:e,language:r}){return jsx(k,{language:r,value:e,readOnly:true,minimap:false,lineNumbers:false})}function re({content:e}){let r=useRef(null),[o,t]=useState(null),[n,a]=useState(false);return useEffect(()=>{if(!e||!r.current)return t(null),a(false),()=>{};a(true),t(null);let i=r.current;return renderAsync(e,i,void 0,{className:"docx",inWrapper:true}).then(()=>{a(false);}).catch(s=>{a(false),t(`DOCX Render Error: ${s instanceof Error?s.message:String(s)}`);}),()=>{i.innerHTML="";}},[e]),e?o?jsx("div",{role:"alert","aria-live":"polite",className:"h-full w-full p-4 font-mono text-red-500 bg-red-50 border border-red-200",children:o}):jsxs("div",{className:"h-full w-full overflow-auto bg-white relative",children:[n&&jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-white/80 z-10",children:jsx("div",{className:"text-gray-500",children:"Loading DOCX preview\u2026"})}),jsx("div",{ref:r,className:"docx-preview-container"})]}):jsx("div",{className:"h-full w-full flex items-center justify-center text-gray-500 bg-gray-50",children:"No DOCX content to preview."})}function te({content:e}){return jsx("iframe",{title:"Resume HTML Preview",className:"w-full h-full border-none",srcDoc:e})}var Pe="data:image/png;base64,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";function ye(){return jsxs("div",{className:ge("h-full w-full","flex flex-col items-center justify-center gap-4","text-neutral-200"),children:[jsx("img",{src:Pe,alt:"YAML Resume Logo",className:"w-32 h-32 opacity-70 grayscale",draggable:false}),jsx("div",{className:"text-lg font-medium",children:"No Layouts Defined"}),jsx("p",{className:"max-w-xs text-center text-sm text-neutral-400",children:"Your resume appears to be empty or contains no layout definitions."})]})}function $o(e){switch(e){case "html":return jsx(IconHtml,{size:p.sm,stroke:m.sm});case "markdown":return jsx(IconMarkdown,{size:p.sm,stroke:m.sm});case "latex":return jsx(IconTex,{size:p.sm,stroke:m.sm});default:return jsx(IconFileText,{size:p.sm,stroke:m.sm})}}function he({active:e,onClick:r,engine:o,index:t,filename:n}){return jsxs("button",{type:"button",onClick:r,className:ge("flex items-center gap-2 max-w-[200px]","h-full px-4","transition-colors border-r border-neutral-600 last:border-neutral-400"),title:`${n}.${t}${T(o)}`,role:"tab","aria-selected":e,style:{backgroundColor:e&&h},children:[$o(o),jsxs("span",{className:"truncate",children:[n,".",t,T(o)]})]})}function we({children:e}){return jsx("div",{role:"tablist",className:ge("flex h-full overflow-x-auto"),children:e})}function ae({resume:e,layoutIndex:r}){let{renderedContent:o,binaryContent:t,engine:n,error:a}=J({resume:e,layoutIndex:r});return a?jsx("div",{role:"alert","aria-live":"polite",className:ge("h-full w-full p-4","font-mono text-red-500 bg-red-50","border border-red-200"),children:a}):n==="docx"?jsx(re,{content:t}):jsx("div",{className:"h-full w-full flex flex-col bg-white",children:n==="html"?jsx(te,{content:o}):jsx(oe,{content:o,language:n})})}function j({activeLayoutIndex:e,filename:r,resume:o,setActiveLayoutIndex:t,tooltips:n}){let a=useMemo(()=>(o?.layouts||[]).map((u,P)=>({layout:u,originalIndex:P})).filter(u=>u.layout!==null&&u.layout!==void 0&&typeof u.layout.engine=="string"),[o?.layouts]),i=$(r,true)||"resume",s=useCallback(()=>{z(o,e);},[o,e]),g=useCallback(()=>{U(o,e);},[o,e]),c=useCallback(()=>{X(o,e);},[o,e]),l=useCallback(()=>{V(o,e);},[o,e]);return a.length===0?jsxs(w,{children:[jsx(v,{}),jsx(ye,{})]}):jsxs(w,{children:[jsxs(v,{children:[jsx(we,{children:a.map(({layout:u,originalIndex:P})=>jsx(he,{active:e===P,onClick:()=>t(P),engine:u.engine,index:P,filename:i},`${u.engine}-${P}`))}),jsx("div",{className:"flex-1"}),jsxs("div",{className:"flex items-center gap-0.5 pr-2",children:[jsx(N,{onClick:s,title:n.copy}),jsx(x,{}),o?.layouts?.[e]?.engine==="html"&&jsxs(Fragment,{children:[jsx(b,{onClick:g,title:n.print,children:jsx(IconPrinter,{size:p.sm,stroke:m.sm})}),jsx(b,{onClick:c,title:n.openInNewTab,children:jsx(IconExternalLink,{size:p.sm,stroke:m.sm})}),jsx(x,{})]}),jsx(b,{onClick:l,title:n.download,children:jsx(IconDownload,{size:p.sm,stroke:m.sm})})]})]}),jsx(R,{children:jsx(ae,{resume:o,layoutIndex:e})})]})}function w({children:e}){return jsx("div",{className:ge("flex-1 flex flex-col","border border-neutral-400 overflow-hidden"),children:e})}function R({children:e}){return jsx("div",{className:"flex-1 relative min-h-0",children:e})}function Q(){return jsx(Separator,{className:ge("w-2","flex flex-col justify-center items-center group","transition-colors cursor-col-resize"),"data-testid":"separator",children:jsx("div",{className:ge("w-1 h-8","bg-neutral-400","group-hover:bg-neutral-300")})})}function v({children:e}){return jsx("div",{className:ge("flex items-center border-b border-neutral-400 h-10 text-sm shrink-0","bg-neutral-800"),children:e})}function b({onClick:e,children:r,title:o}){return jsx("button",{type:"button",onClick:e,className:ge("flex items-center justify-center h-8 w-8","text-neutral-200 hover:text-neutral-700 hover:bg-neutral-200","transition-colors","focus:outline-none focus:ring-1 focus:ring-neutral-400"),title:o,children:r})}function N({onClick:e,title:r="Copy"}){let[o,t]=useState(false);return jsx(b,{onClick:async()=>{try{await e(),t(!0),setTimeout(()=>t(!1),2e3);}catch(a){console.error("Failed to copy",a);}},title:r,children:o?jsx(IconCheck,{size:p.sm,stroke:m.sm}):jsx(IconCopy,{size:p.sm,stroke:m.sm})})}function x(){return jsx("div",{className:"w-px h-4 bg-neutral-400 mx-1"})}
|
|
2
|
+
export{oe as CodeViewer,ue as DEFAULT_PLAYGROUND_MESSAGES,re as DocxViewer,h as EDITOR_BG_COLOR,se as EDITOR_FONT_SIZE,k as Editor,K as EditorPanel,te as HtmlViewer,p as ICON_SIZES,m as ICON_STROKES,w as Panel,R as PanelContent,Q as PanelSeparator,v as PanelToolbar,Qe as Playground,G as PlaygroundDesktop,Y as PlaygroundMobile,j as PreviewPanel,Z as ResumeEditor,ae as ResumeViewer,b as ToolbarButton,N as ToolbarCopyButton,x as ToolbarSeparator,A as configureYamlSupport,z as copyResumeToClipboard,V as downloadResume,$ as getBasename,T as getExtension,X as openResumeInNewTab,U as printResume,J as useResumeRenderer,F as useResumeState};//# sourceMappingURL=index.js.map
|
|
278
3
|
//# sourceMappingURL=index.js.map
|