@ginia/ui 0.1.5 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/components/domain/resume/resume-preview/resume-preview.cjs +30 -22
  2. package/dist/components/domain/resume/resume-preview/resume-preview.cjs.map +1 -1
  3. package/dist/components/domain/resume/resume-preview/resume-preview.d.cts +2 -0
  4. package/dist/components/domain/resume/resume-preview/resume-preview.d.ts +2 -0
  5. package/dist/components/domain/resume/resume-preview/resume-preview.js +30 -22
  6. package/dist/components/domain/resume/resume-preview/resume-preview.js.map +1 -1
  7. package/dist/components/domain/resume/resume-preview/sections/contact-skills.cjs +6 -6
  8. package/dist/components/domain/resume/resume-preview/sections/contact-skills.cjs.map +1 -1
  9. package/dist/components/domain/resume/resume-preview/sections/contact-skills.js +6 -6
  10. package/dist/components/domain/resume/resume-preview/sections/contact-skills.js.map +1 -1
  11. package/dist/components/domain/resume/resume-preview/sections/experience-education.cjs +41 -22
  12. package/dist/components/domain/resume/resume-preview/sections/experience-education.cjs.map +1 -1
  13. package/dist/components/domain/resume/resume-preview/sections/experience-education.js +42 -23
  14. package/dist/components/domain/resume/resume-preview/sections/experience-education.js.map +1 -1
  15. package/dist/components/domain/resume/resume-preview/sections/footer-preview.cjs +15 -3
  16. package/dist/components/domain/resume/resume-preview/sections/footer-preview.cjs.map +1 -1
  17. package/dist/components/domain/resume/resume-preview/sections/footer-preview.js +15 -3
  18. package/dist/components/domain/resume/resume-preview/sections/footer-preview.js.map +1 -1
  19. package/dist/components/domain/resume/resume-preview/sections/header-preview.cjs +4 -4
  20. package/dist/components/domain/resume/resume-preview/sections/header-preview.cjs.map +1 -1
  21. package/dist/components/domain/resume/resume-preview/sections/header-preview.js +4 -4
  22. package/dist/components/domain/resume/resume-preview/sections/header-preview.js.map +1 -1
  23. package/dist/components/domain/resume/resume.cjs +41 -5
  24. package/dist/components/domain/resume/resume.cjs.map +1 -1
  25. package/dist/components/domain/resume/resume.d.cts +1 -1
  26. package/dist/components/domain/resume/resume.d.ts +1 -1
  27. package/dist/components/domain/resume/resume.js +41 -5
  28. package/dist/components/domain/resume/resume.js.map +1 -1
  29. package/dist/components/domain/resume/types.cjs.map +1 -1
  30. package/dist/components/domain/resume/types.d.cts +9 -0
  31. package/dist/components/domain/resume/types.d.ts +9 -0
  32. package/dist/components/ui/background/background.cjs +80 -0
  33. package/dist/components/ui/background/background.cjs.map +1 -0
  34. package/dist/components/ui/background/background.d.cts +23 -0
  35. package/dist/components/ui/background/background.d.ts +23 -0
  36. package/dist/components/ui/background/background.js +44 -0
  37. package/dist/components/ui/background/background.js.map +1 -0
  38. package/dist/components/ui/background/index.cjs +33 -0
  39. package/dist/components/ui/background/index.cjs.map +1 -0
  40. package/dist/components/ui/background/index.d.cts +2 -0
  41. package/dist/components/ui/background/index.d.ts +2 -0
  42. package/dist/components/ui/background/index.js +7 -0
  43. package/dist/components/ui/background/index.js.map +1 -0
  44. package/dist/components/ui/index.cjs +2 -0
  45. package/dist/components/ui/index.cjs.map +1 -1
  46. package/dist/components/ui/index.d.cts +1 -0
  47. package/dist/components/ui/index.d.ts +1 -0
  48. package/dist/components/ui/index.js +1 -0
  49. package/dist/components/ui/index.js.map +1 -1
  50. package/dist/index.d.cts +1 -0
  51. package/dist/index.d.ts +1 -0
  52. package/package.json +1 -1
@@ -33,50 +33,58 @@ __export(resume_preview_exports, {
33
33
  module.exports = __toCommonJS(resume_preview_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var React = __toESM(require("react"), 1);
36
+ var import_ui = require("../../../ui");
37
+ var import_utils = require("../../../../lib/utils");
36
38
  var import_header_preview = require("./sections/header-preview");
37
39
  var import_contact_skills = require("./sections/contact-skills");
38
40
  var import_experience_education = require("./sections/experience-education");
39
41
  var import_footer_preview = require("./sections/footer-preview");
40
42
  const ResumePreview = React.forwardRef(
41
- function ResumePreview2({ data, headerSlot, theme, hideFields = [], hideSections = [] }, ref) {
43
+ function ResumePreview2({ data, headerSlot, theme, hideFields = [], hideSections = [], showTopBar = true, className }, ref) {
42
44
  const themeStyle = theme ? { backgroundColor: theme } : void 0;
43
45
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
44
46
  "div",
45
47
  {
46
48
  ref,
47
49
  id: "resume-capture-area",
48
- className: "relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-16",
50
+ className: (0, import_utils.cn)(
51
+ "relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-14",
52
+ className
53
+ ),
49
54
  children: [
50
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
55
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ui.Background, {}),
56
+ showTopBar && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
51
57
  "div",
52
58
  {
53
59
  className: `absolute left-0 top-0 h-2 w-full ${theme ? "" : "bg-gradient-to-r from-primary to-primary/50"}`,
54
60
  style: themeStyle
55
61
  }
56
62
  ),
57
- !hideSections.includes("Informaci\xF3n personal") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
58
- import_header_preview.HeaderPreview,
59
- {
60
- data,
61
- headerSlot,
62
- theme,
63
- hideFields
64
- }
65
- ),
66
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12", children: [
67
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-8 lg:col-span-4 lg:pr-6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_contact_skills.ContactSkills, { data, hideFields, hideSections }) }),
68
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block" }),
69
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-8 lg:col-span-8", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
70
- import_experience_education.ExperienceEducation,
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "relative z-10", children: [
64
+ !hideSections.includes("Informaci\xF3n personal") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
+ import_header_preview.HeaderPreview,
71
66
  {
72
67
  data,
68
+ headerSlot,
73
69
  theme,
74
- hideFields,
75
- hideSections
70
+ hideFields
76
71
  }
77
- ) })
78
- ] }),
79
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_footer_preview.FooterPreview, {})
72
+ ),
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12", children: [
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-8 lg:col-span-4 lg:pr-6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_contact_skills.ContactSkills, { data, hideFields, hideSections }) }),
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block" }),
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-8 lg:col-span-8", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
77
+ import_experience_education.ExperienceEducation,
78
+ {
79
+ data,
80
+ theme,
81
+ hideFields,
82
+ hideSections
83
+ }
84
+ ) })
85
+ ] }),
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_footer_preview.FooterPreview, {})
87
+ ] })
80
88
  ]
81
89
  }
82
90
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/domain/resume/resume-preview/resume-preview.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CandidateProfile } from \"../types\";\nimport { HeaderPreview } from \"./sections/header-preview\";\nimport { ContactSkills } from \"./sections/contact-skills\";\nimport { ExperienceEducation } from \"./sections/experience-education\";\nimport { FooterPreview } from \"./sections/footer-preview\";\n\nexport interface ResumePreviewProps {\n data: CandidateProfile;\n headerSlot?: React.ReactNode;\n theme?: string;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport const ResumePreview = React.forwardRef<HTMLDivElement, ResumePreviewProps>(\n function ResumePreview({ data, headerSlot, theme, hideFields = [], hideSections = [] }, ref) {\n const themeStyle = theme ? { backgroundColor: theme } : undefined;\n\n return (\n <div\n ref={ref}\n id=\"resume-capture-area\"\n className=\"relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-16\"\n >\n {/* Subtle decorative top bar */}\n <div\n className={`absolute left-0 top-0 h-2 w-full ${theme ? \"\" : \"bg-gradient-to-r from-primary to-primary/50\"}`}\n style={themeStyle}\n />\n\n {/* Header Profile */}\n {!hideSections.includes(\"Información personal\") && (\n <HeaderPreview\n data={data}\n headerSlot={headerSlot}\n theme={theme}\n hideFields={hideFields}\n />\n )}\n\n {/* Main Content Layout */}\n <div className=\"mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12\">\n {/* Left Column (4/12) */}\n <div className=\"space-y-8 lg:col-span-4 lg:pr-6\">\n <ContactSkills data={data} hideFields={hideFields} hideSections={hideSections} />\n </div>\n\n {/* Vertical Divider for desktop */}\n <div className=\"absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block\" />\n\n {/* Right Column (8/12) */}\n <div className=\"space-y-8 lg:col-span-8\">\n <ExperienceEducation\n data={data}\n theme={theme}\n hideFields={hideFields}\n hideSections={hideSections}\n />\n </div>\n </div>\n\n <FooterPreview />\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BQ;AA1BR,YAAuB;AAEvB,4BAA8B;AAC9B,4BAA8B;AAC9B,kCAAoC;AACpC,4BAA8B;AAUvB,MAAM,gBAAgB,MAAM;AAAA,EACjC,SAASA,eAAc,EAAE,MAAM,YAAY,OAAO,aAAa,CAAC,GAAG,eAAe,CAAC,EAAE,GAAG,KAAK;AAC3F,UAAM,aAAa,QAAQ,EAAE,iBAAiB,MAAM,IAAI;AAExD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,IAAG;AAAA,QACH,WAAU;AAAA,QAGV;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,oCAAoC,QAAQ,KAAK,6CAA6C;AAAA,cACzG,OAAO;AAAA;AAAA,UACT;AAAA,UAGC,CAAC,aAAa,SAAS,yBAAsB,KAC5C;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA,UAIF,6CAAC,SAAI,WAAU,gDAEb;AAAA,wDAAC,SAAI,WAAU,mCACb,sDAAC,uCAAc,MAAY,YAAwB,cAA4B,GACjF;AAAA,YAGA,4CAAC,SAAI,WAAU,6EAA4E;AAAA,YAG3F,4CAAC,SAAI,WAAU,2BACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF,GACF;AAAA,aACF;AAAA,UAEA,4CAAC,uCAAc;AAAA;AAAA;AAAA,IACjB;AAAA,EAEJ;AACF;","names":["ResumePreview"]}
1
+ {"version":3,"sources":["../../../../../src/components/domain/resume/resume-preview/resume-preview.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CandidateProfile } from \"../types\";\nimport { Background } from \"../../../ui\";\nimport { cn } from \"../../../../lib/utils\";\nimport { HeaderPreview } from \"./sections/header-preview\";\nimport { ContactSkills } from \"./sections/contact-skills\";\nimport { ExperienceEducation } from \"./sections/experience-education\";\nimport { FooterPreview } from \"./sections/footer-preview\";\n\nexport interface ResumePreviewProps {\n data: CandidateProfile;\n headerSlot?: React.ReactNode;\n theme?: string;\n hideFields?: string[];\n hideSections?: string[];\n showTopBar?: boolean;\n className?: string;\n}\n\nexport const ResumePreview = React.forwardRef<HTMLDivElement, ResumePreviewProps>(\n function ResumePreview(\n { data, headerSlot, theme, hideFields = [], hideSections = [], showTopBar = true, className },\n ref,\n ) {\n const themeStyle = theme ? { backgroundColor: theme } : undefined;\n\n return (\n <div\n ref={ref}\n id=\"resume-capture-area\"\n className={cn(\n \"relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-14\",\n className,\n )}\n >\n <Background />\n {showTopBar && (\n <div\n className={`absolute left-0 top-0 h-2 w-full ${theme ? \"\" : \"bg-gradient-to-r from-primary to-primary/50\"}`}\n style={themeStyle}\n />\n )}\n {/* Content layer — above background */}\n <div className=\"relative z-10\">\n {/* Subtle decorative top bar */}\n\n\n {/* Header Profile */}\n {!hideSections.includes(\"Información personal\") && (\n <HeaderPreview\n data={data}\n headerSlot={headerSlot}\n theme={theme}\n hideFields={hideFields}\n />\n )}\n\n {/* Main Content Layout */}\n <div className=\"mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12\">\n {/* Left Column (4/12) */}\n <div className=\"space-y-8 lg:col-span-4 lg:pr-6\">\n <ContactSkills data={data} hideFields={hideFields} hideSections={hideSections} />\n </div>\n\n {/* Vertical Divider for desktop */}\n <div className=\"absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block\" />\n\n {/* Right Column (8/12) */}\n <div className=\"space-y-8 lg:col-span-8\">\n <ExperienceEducation\n data={data}\n theme={theme}\n hideFields={hideFields}\n hideSections={hideSections}\n />\n </div>\n </div>\n\n <FooterPreview />\n </div>\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCQ;AAnCR,YAAuB;AAEvB,gBAA2B;AAC3B,mBAAmB;AACnB,4BAA8B;AAC9B,4BAA8B;AAC9B,kCAAoC;AACpC,4BAA8B;AAYvB,MAAM,gBAAgB,MAAM;AAAA,EACjC,SAASA,eACP,EAAE,MAAM,YAAY,OAAO,aAAa,CAAC,GAAG,eAAe,CAAC,GAAG,aAAa,MAAM,UAAU,GAC5F,KACA;AACA,UAAM,aAAa,QAAQ,EAAE,iBAAiB,MAAM,IAAI;AAExD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,IAAG;AAAA,QACH,eAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA;AAAA,sDAAC,wBAAW;AAAA,UACX,cACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,oCAAoC,QAAQ,KAAK,6CAA6C;AAAA,cACzG,OAAO;AAAA;AAAA,UACT;AAAA,UAGF,6CAAC,SAAI,WAAU,iBAKZ;AAAA,aAAC,aAAa,SAAS,yBAAsB,KAC5C;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,YAIF,6CAAC,SAAI,WAAU,gDAEb;AAAA,0DAAC,SAAI,WAAU,mCACb,sDAAC,uCAAc,MAAY,YAAwB,cAA4B,GACjF;AAAA,cAGA,4CAAC,SAAI,WAAU,6EAA4E;AAAA,cAG3F,4CAAC,SAAI,WAAU,2BACb;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,cACF,GACF;AAAA,eACF;AAAA,YAEA,4CAAC,uCAAc;AAAA,aACjB;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;","names":["ResumePreview"]}
@@ -7,6 +7,8 @@ interface ResumePreviewProps {
7
7
  theme?: string;
8
8
  hideFields?: string[];
9
9
  hideSections?: string[];
10
+ showTopBar?: boolean;
11
+ className?: string;
10
12
  }
11
13
  declare const ResumePreview: React.ForwardRefExoticComponent<ResumePreviewProps & React.RefAttributes<HTMLDivElement>>;
12
14
 
@@ -7,6 +7,8 @@ interface ResumePreviewProps {
7
7
  theme?: string;
8
8
  hideFields?: string[];
9
9
  hideSections?: string[];
10
+ showTopBar?: boolean;
11
+ className?: string;
10
12
  }
11
13
  declare const ResumePreview: React.ForwardRefExoticComponent<ResumePreviewProps & React.RefAttributes<HTMLDivElement>>;
12
14
 
@@ -1,49 +1,57 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
+ import { Background } from "../../../ui";
4
+ import { cn } from "../../../../lib/utils";
3
5
  import { HeaderPreview } from "./sections/header-preview";
4
6
  import { ContactSkills } from "./sections/contact-skills";
5
7
  import { ExperienceEducation } from "./sections/experience-education";
6
8
  import { FooterPreview } from "./sections/footer-preview";
7
9
  const ResumePreview = React.forwardRef(
8
- function ResumePreview2({ data, headerSlot, theme, hideFields = [], hideSections = [] }, ref) {
10
+ function ResumePreview2({ data, headerSlot, theme, hideFields = [], hideSections = [], showTopBar = true, className }, ref) {
9
11
  const themeStyle = theme ? { backgroundColor: theme } : void 0;
10
12
  return /* @__PURE__ */ jsxs(
11
13
  "div",
12
14
  {
13
15
  ref,
14
16
  id: "resume-capture-area",
15
- className: "relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-16",
17
+ className: cn(
18
+ "relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-14",
19
+ className
20
+ ),
16
21
  children: [
17
- /* @__PURE__ */ jsx(
22
+ /* @__PURE__ */ jsx(Background, {}),
23
+ showTopBar && /* @__PURE__ */ jsx(
18
24
  "div",
19
25
  {
20
26
  className: `absolute left-0 top-0 h-2 w-full ${theme ? "" : "bg-gradient-to-r from-primary to-primary/50"}`,
21
27
  style: themeStyle
22
28
  }
23
29
  ),
24
- !hideSections.includes("Informaci\xF3n personal") && /* @__PURE__ */ jsx(
25
- HeaderPreview,
26
- {
27
- data,
28
- headerSlot,
29
- theme,
30
- hideFields
31
- }
32
- ),
33
- /* @__PURE__ */ jsxs("div", { className: "mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12", children: [
34
- /* @__PURE__ */ jsx("div", { className: "space-y-8 lg:col-span-4 lg:pr-6", children: /* @__PURE__ */ jsx(ContactSkills, { data, hideFields, hideSections }) }),
35
- /* @__PURE__ */ jsx("div", { className: "absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block" }),
36
- /* @__PURE__ */ jsx("div", { className: "space-y-8 lg:col-span-8", children: /* @__PURE__ */ jsx(
37
- ExperienceEducation,
30
+ /* @__PURE__ */ jsxs("div", { className: "relative z-10", children: [
31
+ !hideSections.includes("Informaci\xF3n personal") && /* @__PURE__ */ jsx(
32
+ HeaderPreview,
38
33
  {
39
34
  data,
35
+ headerSlot,
40
36
  theme,
41
- hideFields,
42
- hideSections
37
+ hideFields
43
38
  }
44
- ) })
45
- ] }),
46
- /* @__PURE__ */ jsx(FooterPreview, {})
39
+ ),
40
+ /* @__PURE__ */ jsxs("div", { className: "mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12", children: [
41
+ /* @__PURE__ */ jsx("div", { className: "space-y-8 lg:col-span-4 lg:pr-6", children: /* @__PURE__ */ jsx(ContactSkills, { data, hideFields, hideSections }) }),
42
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block" }),
43
+ /* @__PURE__ */ jsx("div", { className: "space-y-8 lg:col-span-8", children: /* @__PURE__ */ jsx(
44
+ ExperienceEducation,
45
+ {
46
+ data,
47
+ theme,
48
+ hideFields,
49
+ hideSections
50
+ }
51
+ ) })
52
+ ] }),
53
+ /* @__PURE__ */ jsx(FooterPreview, {})
54
+ ] })
47
55
  ]
48
56
  }
49
57
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/domain/resume/resume-preview/resume-preview.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CandidateProfile } from \"../types\";\nimport { HeaderPreview } from \"./sections/header-preview\";\nimport { ContactSkills } from \"./sections/contact-skills\";\nimport { ExperienceEducation } from \"./sections/experience-education\";\nimport { FooterPreview } from \"./sections/footer-preview\";\n\nexport interface ResumePreviewProps {\n data: CandidateProfile;\n headerSlot?: React.ReactNode;\n theme?: string;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport const ResumePreview = React.forwardRef<HTMLDivElement, ResumePreviewProps>(\n function ResumePreview({ data, headerSlot, theme, hideFields = [], hideSections = [] }, ref) {\n const themeStyle = theme ? { backgroundColor: theme } : undefined;\n\n return (\n <div\n ref={ref}\n id=\"resume-capture-area\"\n className=\"relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-16\"\n >\n {/* Subtle decorative top bar */}\n <div\n className={`absolute left-0 top-0 h-2 w-full ${theme ? \"\" : \"bg-gradient-to-r from-primary to-primary/50\"}`}\n style={themeStyle}\n />\n\n {/* Header Profile */}\n {!hideSections.includes(\"Información personal\") && (\n <HeaderPreview\n data={data}\n headerSlot={headerSlot}\n theme={theme}\n hideFields={hideFields}\n />\n )}\n\n {/* Main Content Layout */}\n <div className=\"mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12\">\n {/* Left Column (4/12) */}\n <div className=\"space-y-8 lg:col-span-4 lg:pr-6\">\n <ContactSkills data={data} hideFields={hideFields} hideSections={hideSections} />\n </div>\n\n {/* Vertical Divider for desktop */}\n <div className=\"absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block\" />\n\n {/* Right Column (8/12) */}\n <div className=\"space-y-8 lg:col-span-8\">\n <ExperienceEducation\n data={data}\n theme={theme}\n hideFields={hideFields}\n hideSections={hideSections}\n />\n </div>\n </div>\n\n <FooterPreview />\n </div>\n );\n },\n);\n"],"mappings":"AA0BQ,cAgBA,YAhBA;AA1BR,YAAY,WAAW;AAEvB,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAUvB,MAAM,gBAAgB,MAAM;AAAA,EACjC,SAASA,eAAc,EAAE,MAAM,YAAY,OAAO,aAAa,CAAC,GAAG,eAAe,CAAC,EAAE,GAAG,KAAK;AAC3F,UAAM,aAAa,QAAQ,EAAE,iBAAiB,MAAM,IAAI;AAExD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,IAAG;AAAA,QACH,WAAU;AAAA,QAGV;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,oCAAoC,QAAQ,KAAK,6CAA6C;AAAA,cACzG,OAAO;AAAA;AAAA,UACT;AAAA,UAGC,CAAC,aAAa,SAAS,yBAAsB,KAC5C;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF;AAAA,UAIF,qBAAC,SAAI,WAAU,gDAEb;AAAA,gCAAC,SAAI,WAAU,mCACb,8BAAC,iBAAc,MAAY,YAAwB,cAA4B,GACjF;AAAA,YAGA,oBAAC,SAAI,WAAU,6EAA4E;AAAA,YAG3F,oBAAC,SAAI,WAAU,2BACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF,GACF;AAAA,aACF;AAAA,UAEA,oBAAC,iBAAc;AAAA;AAAA;AAAA,IACjB;AAAA,EAEJ;AACF;","names":["ResumePreview"]}
1
+ {"version":3,"sources":["../../../../../src/components/domain/resume/resume-preview/resume-preview.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { CandidateProfile } from \"../types\";\nimport { Background } from \"../../../ui\";\nimport { cn } from \"../../../../lib/utils\";\nimport { HeaderPreview } from \"./sections/header-preview\";\nimport { ContactSkills } from \"./sections/contact-skills\";\nimport { ExperienceEducation } from \"./sections/experience-education\";\nimport { FooterPreview } from \"./sections/footer-preview\";\n\nexport interface ResumePreviewProps {\n data: CandidateProfile;\n headerSlot?: React.ReactNode;\n theme?: string;\n hideFields?: string[];\n hideSections?: string[];\n showTopBar?: boolean;\n className?: string;\n}\n\nexport const ResumePreview = React.forwardRef<HTMLDivElement, ResumePreviewProps>(\n function ResumePreview(\n { data, headerSlot, theme, hideFields = [], hideSections = [], showTopBar = true, className },\n ref,\n ) {\n const themeStyle = theme ? { backgroundColor: theme } : undefined;\n\n return (\n <div\n ref={ref}\n id=\"resume-capture-area\"\n className={cn(\n \"relative mx-auto flex min-h-[1056px] w-full flex-col rounded-sm border border-border bg-card p-8 text-card-foreground shadow-2xl sm:p-12 md:p-14\",\n className,\n )}\n >\n <Background />\n {showTopBar && (\n <div\n className={`absolute left-0 top-0 h-2 w-full ${theme ? \"\" : \"bg-gradient-to-r from-primary to-primary/50\"}`}\n style={themeStyle}\n />\n )}\n {/* Content layer — above background */}\n <div className=\"relative z-10\">\n {/* Subtle decorative top bar */}\n\n\n {/* Header Profile */}\n {!hideSections.includes(\"Información personal\") && (\n <HeaderPreview\n data={data}\n headerSlot={headerSlot}\n theme={theme}\n hideFields={hideFields}\n />\n )}\n\n {/* Main Content Layout */}\n <div className=\"mt-8 grid grid-cols-1 gap-10 lg:grid-cols-12\">\n {/* Left Column (4/12) */}\n <div className=\"space-y-8 lg:col-span-4 lg:pr-6\">\n <ContactSkills data={data} hideFields={hideFields} hideSections={hideSections} />\n </div>\n\n {/* Vertical Divider for desktop */}\n <div className=\"absolute bottom-16 left-[33.33%] top-48 hidden w-px bg-border/40 lg:block\" />\n\n {/* Right Column (8/12) */}\n <div className=\"space-y-8 lg:col-span-8\">\n <ExperienceEducation\n data={data}\n theme={theme}\n hideFields={hideFields}\n hideSections={hideSections}\n />\n </div>\n </div>\n\n <FooterPreview />\n </div>\n </div>\n );\n },\n);\n"],"mappings":"AAmCQ,cAuBE,YAvBF;AAnCR,YAAY,WAAW;AAEvB,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AACnB,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAYvB,MAAM,gBAAgB,MAAM;AAAA,EACjC,SAASA,eACP,EAAE,MAAM,YAAY,OAAO,aAAa,CAAC,GAAG,eAAe,CAAC,GAAG,aAAa,MAAM,UAAU,GAC5F,KACA;AACA,UAAM,aAAa,QAAQ,EAAE,iBAAiB,MAAM,IAAI;AAExD,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,IAAG;AAAA,QACH,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA;AAAA,8BAAC,cAAW;AAAA,UACX,cACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,oCAAoC,QAAQ,KAAK,6CAA6C;AAAA,cACzG,OAAO;AAAA;AAAA,UACT;AAAA,UAGF,qBAAC,SAAI,WAAU,iBAKZ;AAAA,aAAC,aAAa,SAAS,yBAAsB,KAC5C;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,YAIF,qBAAC,SAAI,WAAU,gDAEb;AAAA,kCAAC,SAAI,WAAU,mCACb,8BAAC,iBAAc,MAAY,YAAwB,cAA4B,GACjF;AAAA,cAGA,oBAAC,SAAI,WAAU,6EAA4E;AAAA,cAG3F,oBAAC,SAAI,WAAU,2BACb;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,cACF,GACF;AAAA,eACF;AAAA,YAEA,oBAAC,iBAAc;AAAA,aACjB;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;","names":["ResumePreview"]}
@@ -27,7 +27,7 @@ var import_lucide_react = require("lucide-react");
27
27
  function ContactSkills({ data, hideFields = [], hideSections = [] }) {
28
28
  const hardSkills = data.skills?.hard || [];
29
29
  const softSkills = data.skills?.soft || [];
30
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-10", children: [
30
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 space-y-10", children: [
31
31
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-4", children: [
32
32
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h3", { className: "flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary", children: [
33
33
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.User, { className: "h-5 w-5 text-primary" }),
@@ -57,14 +57,14 @@ function ContactSkills({ data, hideFields = [], hideSections = [] }) {
57
57
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Code, { className: "h-5 w-5 text-primary" }),
58
58
  "Habilidades T\xE9cnicas"
59
59
  ] }),
60
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-4 flex flex-wrap gap-2", children: hardSkills.map((skill) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden", children: hardSkills.map((skill) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
61
61
  import_ui.Badge,
62
62
  {
63
63
  variant: "outline",
64
- className: "pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground",
64
+ className: "pdf-badge inline-flex max-w-full flex-wrap items-center gap-1 whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground",
65
65
  children: [
66
66
  skill.name,
67
- skill.verified && !hideFields.includes("skills.hard.verified") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCircle2, { className: "ml-1.5 h-3.5 w-3.5 text-primary-foreground/90" })
67
+ skill.verified && !hideFields.includes("skills.hard.verified") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCircle2, { className: "h-3.5 w-3.5 shrink-0 text-primary-foreground/90" })
68
68
  ]
69
69
  },
70
70
  skill.id
@@ -75,11 +75,11 @@ function ContactSkills({ data, hideFields = [], hideSections = [] }) {
75
75
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Users, { className: "h-5 w-5 text-primary" }),
76
76
  "Aptitudes"
77
77
  ] }),
78
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-4 flex flex-wrap gap-2", children: softSkills.map((skill) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
78
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden", children: softSkills.map((skill) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
79
79
  import_ui.Badge,
80
80
  {
81
81
  variant: "outline",
82
- className: "pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground",
82
+ className: "pdf-badge inline-block max-w-full whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground",
83
83
  children: skill.name
84
84
  },
85
85
  skill.id
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/domain/resume/resume-preview/sections/contact-skills.tsx"],"sourcesContent":["import { CandidateProfile } from \"../../types\";\nimport { Badge } from \"../../../../ui\";\nimport { User, Mail, Phone, MapPin, Code, CheckCircle2, Users } from \"lucide-react\";\n\ninterface ContactSkillsProps {\n data: CandidateProfile;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport function ContactSkills({ data, hideFields = [], hideSections = [] }: ContactSkillsProps) {\n const hardSkills = data.skills?.hard || [];\n const softSkills = data.skills?.soft || [];\n\n return (\n <div className=\"space-y-10\">\n {/* Contacto */}\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <User className=\"h-5 w-5 text-primary\" />\n Contacto\n </h3>\n <div className=\"mt-4 space-y-3\">\n {data.email && !hideFields.includes(\"email\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Mail className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"break-all font-medium\">{data.email}</span>\n </div>\n )}\n {data.phone_number && !hideFields.includes(\"phone_number\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Phone className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium\">{data.phone_number}</span>\n </div>\n )}\n {(data.city || data.address) &&\n (!hideFields.includes(\"city\") || !hideFields.includes(\"address\")) && (\n <div className=\"flex items-start gap-3 text-sm text-foreground\">\n <MapPin className=\"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium leading-tight\">\n {[\n !hideFields.includes(\"address\") ? data.address : null,\n !hideFields.includes(\"city\") ? data.city : null,\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Skills */}\n {!hideSections.includes(\"Habilidades\") && (\n <div className=\"space-y-6\">\n {hardSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Code className=\"h-5 w-5 text-primary\" />\n Habilidades Técnicas\n </h3>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {hardSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground\"\n >\n {skill.name}\n {skill.verified && !hideFields.includes(\"skills.hard.verified\") && (\n <CheckCircle2 className=\"ml-1.5 h-3.5 w-3.5 text-primary-foreground/90\" />\n )}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {softSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Users className=\"h-5 w-5 text-primary\" />\n Aptitudes\n </h3>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {softSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground\"\n >\n {skill.name}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBQ;AAjBR,gBAAsB;AACtB,0BAAqE;AAQ9D,SAAS,cAAc,EAAE,MAAM,aAAa,CAAC,GAAG,eAAe,CAAC,EAAE,GAAuB;AAC9F,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AACzC,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AAEzC,SACE,6CAAC,SAAI,WAAU,cAEb;AAAA,iDAAC,SAAI,WAAU,aACb;AAAA,mDAAC,QAAG,WAAU,sFACZ;AAAA,oDAAC,4BAAK,WAAU,wBAAuB;AAAA,QAAE;AAAA,SAE3C;AAAA,MACA,6CAAC,SAAI,WAAU,kBACZ;AAAA,aAAK,SAAS,CAAC,WAAW,SAAS,OAAO,KACzC,6CAAC,SAAI,WAAU,mDACb;AAAA,sDAAC,4BAAK,WAAU,+CAA8C;AAAA,UAC9D,4CAAC,UAAK,WAAU,yBAAyB,eAAK,OAAM;AAAA,WACtD;AAAA,QAED,KAAK,gBAAgB,CAAC,WAAW,SAAS,cAAc,KACvD,6CAAC,SAAI,WAAU,mDACb;AAAA,sDAAC,6BAAM,WAAU,+CAA8C;AAAA,UAC/D,4CAAC,UAAK,WAAU,eAAe,eAAK,cAAa;AAAA,WACnD;AAAA,SAEA,KAAK,QAAQ,KAAK,aACjB,CAAC,WAAW,SAAS,MAAM,KAAK,CAAC,WAAW,SAAS,SAAS,MAC7D,6CAAC,SAAI,WAAU,kDACb;AAAA,sDAAC,8BAAO,WAAU,sDAAqD;AAAA,UACvE,4CAAC,UAAK,WAAU,6BACb;AAAA,YACC,CAAC,WAAW,SAAS,SAAS,IAAI,KAAK,UAAU;AAAA,YACjD,CAAC,WAAW,SAAS,MAAM,IAAI,KAAK,OAAO;AAAA,UAC7C,EACG,OAAO,OAAO,EACd,KAAK,IAAI,GACd;AAAA,WACF;AAAA,SAEN;AAAA,OACF;AAAA,IAGC,CAAC,aAAa,SAAS,aAAa,KACnC,6CAAC,SAAI,WAAU,aACZ;AAAA,iBAAW,SAAS,KACnB,6CAAC,SAAI,WAAU,aACb;AAAA,qDAAC,QAAG,WAAU,sFACZ;AAAA,sDAAC,4BAAK,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE3C;AAAA,QACA,4CAAC,SAAI,WAAU,6BACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET;AAAA,oBAAM;AAAA,cACN,MAAM,YAAY,CAAC,WAAW,SAAS,sBAAsB,KAC5D,4CAAC,oCAAa,WAAU,iDAAgD;AAAA;AAAA;AAAA,UANrE,MAAM;AAAA,QAQb,CACD,GACH;AAAA,SACF;AAAA,MAGD,WAAW,SAAS,KACnB,6CAAC,SAAI,WAAU,aACb;AAAA,qDAAC,QAAG,WAAU,sFACZ;AAAA,sDAAC,6BAAM,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE5C;AAAA,QACA,4CAAC,SAAI,WAAU,6BACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET,gBAAM;AAAA;AAAA,UAJF,MAAM;AAAA,QAKb,CACD,GACH;AAAA,SACF;AAAA,OAEJ;AAAA,KAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/components/domain/resume/resume-preview/sections/contact-skills.tsx"],"sourcesContent":["import { CandidateProfile } from \"../../types\";\nimport { Badge } from \"../../../../ui\";\nimport { User, Mail, Phone, MapPin, Code, CheckCircle2, Users } from \"lucide-react\";\n\ninterface ContactSkillsProps {\n data: CandidateProfile;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport function ContactSkills({ data, hideFields = [], hideSections = [] }: ContactSkillsProps) {\n const hardSkills = data.skills?.hard || [];\n const softSkills = data.skills?.soft || [];\n\n return (\n <div className=\"min-w-0 space-y-10\">\n {/* Contacto */}\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <User className=\"h-5 w-5 text-primary\" />\n Contacto\n </h3>\n <div className=\"mt-4 space-y-3\">\n {data.email && !hideFields.includes(\"email\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Mail className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"break-all font-medium\">{data.email}</span>\n </div>\n )}\n {data.phone_number && !hideFields.includes(\"phone_number\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Phone className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium\">{data.phone_number}</span>\n </div>\n )}\n {(data.city || data.address) &&\n (!hideFields.includes(\"city\") || !hideFields.includes(\"address\")) && (\n <div className=\"flex items-start gap-3 text-sm text-foreground\">\n <MapPin className=\"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium leading-tight\">\n {[\n !hideFields.includes(\"address\") ? data.address : null,\n !hideFields.includes(\"city\") ? data.city : null,\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Skills */}\n {!hideSections.includes(\"Habilidades\") && (\n <div className=\"space-y-6\">\n {hardSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Code className=\"h-5 w-5 text-primary\" />\n Habilidades Técnicas\n </h3>\n <div className=\"mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden\">\n {hardSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge inline-flex max-w-full flex-wrap items-center gap-1 whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground\"\n >\n {skill.name}\n {skill.verified && !hideFields.includes(\"skills.hard.verified\") && (\n <CheckCircle2 className=\"h-3.5 w-3.5 shrink-0 text-primary-foreground/90\" />\n )}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {softSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Users className=\"h-5 w-5 text-primary\" />\n Aptitudes\n </h3>\n <div className=\"mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden\">\n {softSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge inline-block max-w-full whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground\"\n >\n {skill.name}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBQ;AAjBR,gBAAsB;AACtB,0BAAqE;AAQ9D,SAAS,cAAc,EAAE,MAAM,aAAa,CAAC,GAAG,eAAe,CAAC,EAAE,GAAuB;AAC9F,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AACzC,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AAEzC,SACE,6CAAC,SAAI,WAAU,sBAEb;AAAA,iDAAC,SAAI,WAAU,aACb;AAAA,mDAAC,QAAG,WAAU,sFACZ;AAAA,oDAAC,4BAAK,WAAU,wBAAuB;AAAA,QAAE;AAAA,SAE3C;AAAA,MACA,6CAAC,SAAI,WAAU,kBACZ;AAAA,aAAK,SAAS,CAAC,WAAW,SAAS,OAAO,KACzC,6CAAC,SAAI,WAAU,mDACb;AAAA,sDAAC,4BAAK,WAAU,+CAA8C;AAAA,UAC9D,4CAAC,UAAK,WAAU,yBAAyB,eAAK,OAAM;AAAA,WACtD;AAAA,QAED,KAAK,gBAAgB,CAAC,WAAW,SAAS,cAAc,KACvD,6CAAC,SAAI,WAAU,mDACb;AAAA,sDAAC,6BAAM,WAAU,+CAA8C;AAAA,UAC/D,4CAAC,UAAK,WAAU,eAAe,eAAK,cAAa;AAAA,WACnD;AAAA,SAEA,KAAK,QAAQ,KAAK,aACjB,CAAC,WAAW,SAAS,MAAM,KAAK,CAAC,WAAW,SAAS,SAAS,MAC7D,6CAAC,SAAI,WAAU,kDACb;AAAA,sDAAC,8BAAO,WAAU,sDAAqD;AAAA,UACvE,4CAAC,UAAK,WAAU,6BACb;AAAA,YACC,CAAC,WAAW,SAAS,SAAS,IAAI,KAAK,UAAU;AAAA,YACjD,CAAC,WAAW,SAAS,MAAM,IAAI,KAAK,OAAO;AAAA,UAC7C,EACG,OAAO,OAAO,EACd,KAAK,IAAI,GACd;AAAA,WACF;AAAA,SAEN;AAAA,OACF;AAAA,IAGC,CAAC,aAAa,SAAS,aAAa,KACnC,6CAAC,SAAI,WAAU,aACZ;AAAA,iBAAW,SAAS,KACnB,6CAAC,SAAI,WAAU,aACb;AAAA,qDAAC,QAAG,WAAU,sFACZ;AAAA,sDAAC,4BAAK,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE3C;AAAA,QACA,4CAAC,SAAI,WAAU,qDACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET;AAAA,oBAAM;AAAA,cACN,MAAM,YAAY,CAAC,WAAW,SAAS,sBAAsB,KAC5D,4CAAC,oCAAa,WAAU,mDAAkD;AAAA;AAAA;AAAA,UANvE,MAAM;AAAA,QAQb,CACD,GACH;AAAA,SACF;AAAA,MAGD,WAAW,SAAS,KACnB,6CAAC,SAAI,WAAU,aACb;AAAA,qDAAC,QAAG,WAAU,sFACZ;AAAA,sDAAC,6BAAM,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE5C;AAAA,QACA,4CAAC,SAAI,WAAU,qDACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET,gBAAM;AAAA;AAAA,UAJF,MAAM;AAAA,QAKb,CACD,GACH;AAAA,SACF;AAAA,OAEJ;AAAA,KAEJ;AAEJ;","names":[]}
@@ -4,7 +4,7 @@ import { User, Mail, Phone, MapPin, Code, CheckCircle2, Users } from "lucide-rea
4
4
  function ContactSkills({ data, hideFields = [], hideSections = [] }) {
5
5
  const hardSkills = data.skills?.hard || [];
6
6
  const softSkills = data.skills?.soft || [];
7
- return /* @__PURE__ */ jsxs("div", { className: "space-y-10", children: [
7
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-10", children: [
8
8
  /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
9
9
  /* @__PURE__ */ jsxs("h3", { className: "flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary", children: [
10
10
  /* @__PURE__ */ jsx(User, { className: "h-5 w-5 text-primary" }),
@@ -34,14 +34,14 @@ function ContactSkills({ data, hideFields = [], hideSections = [] }) {
34
34
  /* @__PURE__ */ jsx(Code, { className: "h-5 w-5 text-primary" }),
35
35
  "Habilidades T\xE9cnicas"
36
36
  ] }),
37
- /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-wrap gap-2", children: hardSkills.map((skill) => /* @__PURE__ */ jsxs(
37
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden", children: hardSkills.map((skill) => /* @__PURE__ */ jsxs(
38
38
  Badge,
39
39
  {
40
40
  variant: "outline",
41
- className: "pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground",
41
+ className: "pdf-badge inline-flex max-w-full flex-wrap items-center gap-1 whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground",
42
42
  children: [
43
43
  skill.name,
44
- skill.verified && !hideFields.includes("skills.hard.verified") && /* @__PURE__ */ jsx(CheckCircle2, { className: "ml-1.5 h-3.5 w-3.5 text-primary-foreground/90" })
44
+ skill.verified && !hideFields.includes("skills.hard.verified") && /* @__PURE__ */ jsx(CheckCircle2, { className: "h-3.5 w-3.5 shrink-0 text-primary-foreground/90" })
45
45
  ]
46
46
  },
47
47
  skill.id
@@ -52,11 +52,11 @@ function ContactSkills({ data, hideFields = [], hideSections = [] }) {
52
52
  /* @__PURE__ */ jsx(Users, { className: "h-5 w-5 text-primary" }),
53
53
  "Aptitudes"
54
54
  ] }),
55
- /* @__PURE__ */ jsx("div", { className: "mt-4 flex flex-wrap gap-2", children: softSkills.map((skill) => /* @__PURE__ */ jsx(
55
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden", children: softSkills.map((skill) => /* @__PURE__ */ jsx(
56
56
  Badge,
57
57
  {
58
58
  variant: "outline",
59
- className: "pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground",
59
+ className: "pdf-badge inline-block max-w-full whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground",
60
60
  children: skill.name
61
61
  },
62
62
  skill.id
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/domain/resume/resume-preview/sections/contact-skills.tsx"],"sourcesContent":["import { CandidateProfile } from \"../../types\";\nimport { Badge } from \"../../../../ui\";\nimport { User, Mail, Phone, MapPin, Code, CheckCircle2, Users } from \"lucide-react\";\n\ninterface ContactSkillsProps {\n data: CandidateProfile;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport function ContactSkills({ data, hideFields = [], hideSections = [] }: ContactSkillsProps) {\n const hardSkills = data.skills?.hard || [];\n const softSkills = data.skills?.soft || [];\n\n return (\n <div className=\"space-y-10\">\n {/* Contacto */}\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <User className=\"h-5 w-5 text-primary\" />\n Contacto\n </h3>\n <div className=\"mt-4 space-y-3\">\n {data.email && !hideFields.includes(\"email\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Mail className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"break-all font-medium\">{data.email}</span>\n </div>\n )}\n {data.phone_number && !hideFields.includes(\"phone_number\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Phone className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium\">{data.phone_number}</span>\n </div>\n )}\n {(data.city || data.address) &&\n (!hideFields.includes(\"city\") || !hideFields.includes(\"address\")) && (\n <div className=\"flex items-start gap-3 text-sm text-foreground\">\n <MapPin className=\"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium leading-tight\">\n {[\n !hideFields.includes(\"address\") ? data.address : null,\n !hideFields.includes(\"city\") ? data.city : null,\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Skills */}\n {!hideSections.includes(\"Habilidades\") && (\n <div className=\"space-y-6\">\n {hardSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Code className=\"h-5 w-5 text-primary\" />\n Habilidades Técnicas\n </h3>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {hardSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground\"\n >\n {skill.name}\n {skill.verified && !hideFields.includes(\"skills.hard.verified\") && (\n <CheckCircle2 className=\"ml-1.5 h-3.5 w-3.5 text-primary-foreground/90\" />\n )}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {softSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Users className=\"h-5 w-5 text-primary\" />\n Aptitudes\n </h3>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {softSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge border-border/80 bg-muted/20 px-3 py-1 text-sm text-muted-foreground\"\n >\n {skill.name}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"AAkBQ,SACE,KADF;AAjBR,SAAS,aAAa;AACtB,SAAS,MAAM,MAAM,OAAO,QAAQ,MAAM,cAAc,aAAa;AAQ9D,SAAS,cAAc,EAAE,MAAM,aAAa,CAAC,GAAG,eAAe,CAAC,EAAE,GAAuB;AAC9F,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AACzC,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AAEzC,SACE,qBAAC,SAAI,WAAU,cAEb;AAAA,yBAAC,SAAI,WAAU,aACb;AAAA,2BAAC,QAAG,WAAU,sFACZ;AAAA,4BAAC,QAAK,WAAU,wBAAuB;AAAA,QAAE;AAAA,SAE3C;AAAA,MACA,qBAAC,SAAI,WAAU,kBACZ;AAAA,aAAK,SAAS,CAAC,WAAW,SAAS,OAAO,KACzC,qBAAC,SAAI,WAAU,mDACb;AAAA,8BAAC,QAAK,WAAU,+CAA8C;AAAA,UAC9D,oBAAC,UAAK,WAAU,yBAAyB,eAAK,OAAM;AAAA,WACtD;AAAA,QAED,KAAK,gBAAgB,CAAC,WAAW,SAAS,cAAc,KACvD,qBAAC,SAAI,WAAU,mDACb;AAAA,8BAAC,SAAM,WAAU,+CAA8C;AAAA,UAC/D,oBAAC,UAAK,WAAU,eAAe,eAAK,cAAa;AAAA,WACnD;AAAA,SAEA,KAAK,QAAQ,KAAK,aACjB,CAAC,WAAW,SAAS,MAAM,KAAK,CAAC,WAAW,SAAS,SAAS,MAC7D,qBAAC,SAAI,WAAU,kDACb;AAAA,8BAAC,UAAO,WAAU,sDAAqD;AAAA,UACvE,oBAAC,UAAK,WAAU,6BACb;AAAA,YACC,CAAC,WAAW,SAAS,SAAS,IAAI,KAAK,UAAU;AAAA,YACjD,CAAC,WAAW,SAAS,MAAM,IAAI,KAAK,OAAO;AAAA,UAC7C,EACG,OAAO,OAAO,EACd,KAAK,IAAI,GACd;AAAA,WACF;AAAA,SAEN;AAAA,OACF;AAAA,IAGC,CAAC,aAAa,SAAS,aAAa,KACnC,qBAAC,SAAI,WAAU,aACZ;AAAA,iBAAW,SAAS,KACnB,qBAAC,SAAI,WAAU,aACb;AAAA,6BAAC,QAAG,WAAU,sFACZ;AAAA,8BAAC,QAAK,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE3C;AAAA,QACA,oBAAC,SAAI,WAAU,6BACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET;AAAA,oBAAM;AAAA,cACN,MAAM,YAAY,CAAC,WAAW,SAAS,sBAAsB,KAC5D,oBAAC,gBAAa,WAAU,iDAAgD;AAAA;AAAA;AAAA,UANrE,MAAM;AAAA,QAQb,CACD,GACH;AAAA,SACF;AAAA,MAGD,WAAW,SAAS,KACnB,qBAAC,SAAI,WAAU,aACb;AAAA,6BAAC,QAAG,WAAU,sFACZ;AAAA,8BAAC,SAAM,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE5C;AAAA,QACA,oBAAC,SAAI,WAAU,6BACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET,gBAAM;AAAA;AAAA,UAJF,MAAM;AAAA,QAKb,CACD,GACH;AAAA,SACF;AAAA,OAEJ;AAAA,KAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/components/domain/resume/resume-preview/sections/contact-skills.tsx"],"sourcesContent":["import { CandidateProfile } from \"../../types\";\nimport { Badge } from \"../../../../ui\";\nimport { User, Mail, Phone, MapPin, Code, CheckCircle2, Users } from \"lucide-react\";\n\ninterface ContactSkillsProps {\n data: CandidateProfile;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport function ContactSkills({ data, hideFields = [], hideSections = [] }: ContactSkillsProps) {\n const hardSkills = data.skills?.hard || [];\n const softSkills = data.skills?.soft || [];\n\n return (\n <div className=\"min-w-0 space-y-10\">\n {/* Contacto */}\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <User className=\"h-5 w-5 text-primary\" />\n Contacto\n </h3>\n <div className=\"mt-4 space-y-3\">\n {data.email && !hideFields.includes(\"email\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Mail className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"break-all font-medium\">{data.email}</span>\n </div>\n )}\n {data.phone_number && !hideFields.includes(\"phone_number\") && (\n <div className=\"flex items-center gap-3 text-sm text-foreground\">\n <Phone className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium\">{data.phone_number}</span>\n </div>\n )}\n {(data.city || data.address) &&\n (!hideFields.includes(\"city\") || !hideFields.includes(\"address\")) && (\n <div className=\"flex items-start gap-3 text-sm text-foreground\">\n <MapPin className=\"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <span className=\"font-medium leading-tight\">\n {[\n !hideFields.includes(\"address\") ? data.address : null,\n !hideFields.includes(\"city\") ? data.city : null,\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Skills */}\n {!hideSections.includes(\"Habilidades\") && (\n <div className=\"space-y-6\">\n {hardSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Code className=\"h-5 w-5 text-primary\" />\n Habilidades Técnicas\n </h3>\n <div className=\"mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden\">\n {hardSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge inline-flex max-w-full flex-wrap items-center gap-1 whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground\"\n >\n {skill.name}\n {skill.verified && !hideFields.includes(\"skills.hard.verified\") && (\n <CheckCircle2 className=\"h-3.5 w-3.5 shrink-0 text-primary-foreground/90\" />\n )}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {softSkills.length > 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 border-b border-border pb-2 text-xl font-bold text-primary\">\n <Users className=\"h-5 w-5 text-primary\" />\n Aptitudes\n </h3>\n <div className=\"mt-4 flex min-w-0 flex-wrap gap-2 overflow-hidden\">\n {softSkills.map((skill) => (\n <Badge\n key={skill.id}\n variant=\"outline\"\n className=\"pdf-badge inline-block max-w-full whitespace-normal break-words border-border/80 bg-muted/20 px-3 py-1 text-left text-sm text-muted-foreground\"\n >\n {skill.name}\n </Badge>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"AAkBQ,SACE,KADF;AAjBR,SAAS,aAAa;AACtB,SAAS,MAAM,MAAM,OAAO,QAAQ,MAAM,cAAc,aAAa;AAQ9D,SAAS,cAAc,EAAE,MAAM,aAAa,CAAC,GAAG,eAAe,CAAC,EAAE,GAAuB;AAC9F,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AACzC,QAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC;AAEzC,SACE,qBAAC,SAAI,WAAU,sBAEb;AAAA,yBAAC,SAAI,WAAU,aACb;AAAA,2BAAC,QAAG,WAAU,sFACZ;AAAA,4BAAC,QAAK,WAAU,wBAAuB;AAAA,QAAE;AAAA,SAE3C;AAAA,MACA,qBAAC,SAAI,WAAU,kBACZ;AAAA,aAAK,SAAS,CAAC,WAAW,SAAS,OAAO,KACzC,qBAAC,SAAI,WAAU,mDACb;AAAA,8BAAC,QAAK,WAAU,+CAA8C;AAAA,UAC9D,oBAAC,UAAK,WAAU,yBAAyB,eAAK,OAAM;AAAA,WACtD;AAAA,QAED,KAAK,gBAAgB,CAAC,WAAW,SAAS,cAAc,KACvD,qBAAC,SAAI,WAAU,mDACb;AAAA,8BAAC,SAAM,WAAU,+CAA8C;AAAA,UAC/D,oBAAC,UAAK,WAAU,eAAe,eAAK,cAAa;AAAA,WACnD;AAAA,SAEA,KAAK,QAAQ,KAAK,aACjB,CAAC,WAAW,SAAS,MAAM,KAAK,CAAC,WAAW,SAAS,SAAS,MAC7D,qBAAC,SAAI,WAAU,kDACb;AAAA,8BAAC,UAAO,WAAU,sDAAqD;AAAA,UACvE,oBAAC,UAAK,WAAU,6BACb;AAAA,YACC,CAAC,WAAW,SAAS,SAAS,IAAI,KAAK,UAAU;AAAA,YACjD,CAAC,WAAW,SAAS,MAAM,IAAI,KAAK,OAAO;AAAA,UAC7C,EACG,OAAO,OAAO,EACd,KAAK,IAAI,GACd;AAAA,WACF;AAAA,SAEN;AAAA,OACF;AAAA,IAGC,CAAC,aAAa,SAAS,aAAa,KACnC,qBAAC,SAAI,WAAU,aACZ;AAAA,iBAAW,SAAS,KACnB,qBAAC,SAAI,WAAU,aACb;AAAA,6BAAC,QAAG,WAAU,sFACZ;AAAA,8BAAC,QAAK,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE3C;AAAA,QACA,oBAAC,SAAI,WAAU,qDACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET;AAAA,oBAAM;AAAA,cACN,MAAM,YAAY,CAAC,WAAW,SAAS,sBAAsB,KAC5D,oBAAC,gBAAa,WAAU,mDAAkD;AAAA;AAAA;AAAA,UANvE,MAAM;AAAA,QAQb,CACD,GACH;AAAA,SACF;AAAA,MAGD,WAAW,SAAS,KACnB,qBAAC,SAAI,WAAU,aACb;AAAA,6BAAC,QAAG,WAAU,sFACZ;AAAA,8BAAC,SAAM,WAAU,wBAAuB;AAAA,UAAE;AAAA,WAE5C;AAAA,QACA,oBAAC,SAAI,WAAU,qDACZ,qBAAW,IAAI,CAAC,UACf;AAAA,UAAC;AAAA;AAAA,YAEC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET,gBAAM;AAAA;AAAA,UAJF,MAAM;AAAA,QAKb,CACD,GACH;AAAA,SACF;AAAA,OAEJ;AAAA,KAEJ;AAEJ;","names":[]}
@@ -23,16 +23,44 @@ __export(experience_education_exports, {
23
23
  module.exports = __toCommonJS(experience_education_exports);
24
24
  var import_jsx_runtime = require("react/jsx-runtime");
25
25
  var import_lucide_react = require("lucide-react");
26
+ function parseDateToSortValue(dateStr) {
27
+ if (!dateStr || dateStr.toLowerCase() === "presente") return 0;
28
+ const mmYyyy = dateStr.match(/^(\d{1,2})\/(\d{4})$/);
29
+ if (mmYyyy) return parseInt(mmYyyy[2], 10) * 12 + parseInt(mmYyyy[1], 10);
30
+ const yyyyMm = dateStr.match(/^(\d{4})-(\d{1,2})/);
31
+ if (yyyyMm) return parseInt(yyyyMm[1], 10) * 12 + parseInt(yyyyMm[2], 10);
32
+ const year = dateStr.match(/\d{4}/);
33
+ if (year) return parseInt(year[0], 10) * 12;
34
+ return 0;
35
+ }
36
+ function sortByDateDesc(items) {
37
+ return [...items].sort((a, b) => {
38
+ const aEnd = a.end_date?.toLowerCase();
39
+ const bEnd = b.end_date?.toLowerCase();
40
+ const aOngoing = !a.end_date || aEnd === "presente";
41
+ const bOngoing = !b.end_date || bEnd === "presente";
42
+ const aVal = aOngoing ? parseDateToSortValue(a.start_date) + 9999 * 12 : parseDateToSortValue(a.end_date);
43
+ const bVal = bOngoing ? parseDateToSortValue(b.start_date) + 9999 * 12 : parseDateToSortValue(b.end_date);
44
+ return bVal - aVal;
45
+ });
46
+ }
47
+ function sortCertificationsByDateDesc(items) {
48
+ return [...items].sort((a, b) => {
49
+ const aVal = parseDateToSortValue(a.date_awarded);
50
+ const bVal = parseDateToSortValue(b.date_awarded);
51
+ return bVal - aVal;
52
+ });
53
+ }
26
54
  function ExperienceEducation({
27
55
  data,
28
56
  theme,
29
57
  hideFields = [],
30
58
  hideSections = []
31
59
  }) {
32
- const experiences = data.work_experience || [];
33
- const education = data.education || [];
34
- const activities = data.activities || [];
35
- const certifications = data.certifications || [];
60
+ const experiences = sortByDateDesc(data.work_experience || []);
61
+ const education = sortByDateDesc(data.education || []);
62
+ const activities = sortByDateDesc(data.activities || []);
63
+ const certifications = sortCertificationsByDateDesc(data.certifications || []);
36
64
  const themeStyle = theme ? { backgroundColor: theme } : void 0;
37
65
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-12", children: [
38
66
  experiences.length > 0 && !hideSections.includes("Experiencia laboral") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-6", children: [
@@ -55,13 +83,10 @@ function ExperienceEducation({
55
83
  !hideFields.includes("experience.title") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: "text-lg font-bold text-foreground", children: exp.title }),
56
84
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between", children: [
57
85
  !hideFields.includes("experience.institution_name") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-base font-semibold text-primary", children: exp.institution_name }),
58
- (!hideFields.includes("experience.start_date") || !hideFields.includes("experience.end_date")) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0", children: [
86
+ (!hideFields.includes("experience.start_date") || !hideFields.includes("experience.end_date")) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0", children: [
59
87
  !hideFields.includes("experience.start_date") && exp.start_date,
60
- !hideFields.includes("experience.end_date") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
61
- " ",
62
- exp.end_date ? `- ${exp.end_date}` : "- Presente"
63
- ] })
64
- ] })
88
+ !hideFields.includes("experience.end_date") && exp.end_date && exp.end_date.toLowerCase() !== "presente" ? `- ${exp.end_date}` : null
89
+ ].filter(Boolean).join(" ") })
65
90
  ] }),
66
91
  exp.description && !hideFields.includes("experience.description") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80", children: exp.description })
67
92
  ]
@@ -89,13 +114,10 @@ function ExperienceEducation({
89
114
  !hideFields.includes("education.title") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: "text-lg font-bold text-foreground", children: edu.title }),
90
115
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between", children: [
91
116
  !hideFields.includes("education.institution_name") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-base font-semibold text-primary", children: edu.institution_name }),
92
- (!hideFields.includes("education.start_date") || !hideFields.includes("education.end_date")) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0", children: [
117
+ (!hideFields.includes("education.start_date") || !hideFields.includes("education.end_date")) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0", children: [
93
118
  !hideFields.includes("education.start_date") && edu.start_date,
94
- !hideFields.includes("education.end_date") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
95
- " ",
96
- edu.end_date ? `- ${edu.end_date}` : "- Presente"
97
- ] })
98
- ] })
119
+ !hideFields.includes("education.end_date") && edu.end_date && edu.end_date.toLowerCase() !== "presente" ? `- ${edu.end_date}` : null
120
+ ].filter(Boolean).join(" ") })
99
121
  ] }),
100
122
  edu.description && !hideFields.includes("education.description") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80", children: edu.description })
101
123
  ]
@@ -123,13 +145,10 @@ function ExperienceEducation({
123
145
  !hideFields.includes("activities.title") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: "text-lg font-bold text-foreground", children: act.title }),
124
146
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between", children: [
125
147
  !hideFields.includes("activities.institution_name") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-base font-semibold text-primary", children: act.institution_name }),
126
- (!hideFields.includes("activities.start_date") || !hideFields.includes("activities.end_date")) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0", children: [
148
+ (!hideFields.includes("activities.start_date") || !hideFields.includes("activities.end_date")) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0", children: [
127
149
  !hideFields.includes("activities.start_date") && act.start_date,
128
- !hideFields.includes("activities.end_date") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
129
- " ",
130
- act.end_date ? `- ${act.end_date}` : "- Presente"
131
- ] })
132
- ] })
150
+ !hideFields.includes("activities.end_date") && act.end_date && act.end_date.toLowerCase() !== "presente" ? `- ${act.end_date}` : null
151
+ ].filter(Boolean).join(" ") })
133
152
  ] }),
134
153
  act.description && !hideFields.includes("activities.description") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80", children: act.description })
135
154
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/domain/resume/resume-preview/sections/experience-education.tsx"],"sourcesContent":["import { CandidateProfile } from \"../../types\";\nimport { GraduationCap, Briefcase, Trophy, Award } from \"lucide-react\";\n\ninterface ExperienceEducationProps {\n data: CandidateProfile;\n theme?: string;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport function ExperienceEducation({\n data,\n theme,\n hideFields = [],\n hideSections = [],\n}: ExperienceEducationProps) {\n const experiences = data.work_experience || [];\n const education = data.education || [];\n const activities = data.activities || [];\n const certifications = data.certifications || [];\n\n const themeStyle = theme ? { backgroundColor: theme } : undefined;\n\n return (\n <div className=\"space-y-12\">\n {/* Experience */}\n {experiences.length > 0 && !hideSections.includes(\"Experiencia laboral\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <Briefcase className=\"h-6 w-6 text-primary\" />\n Experiencia Laboral\n </h3>\n <div className=\"space-y-8\">\n {experiences.map((exp) => (\n <div\n key={exp.id}\n className=\"relative pl-6 after:absolute after:bottom-[-24px] after:left-[3px] after:top-4 after:w-[2px] after:bg-border last:after:hidden\"\n >\n <div\n className=\"pdf-line-v absolute left-0 top-2 h-2 w-2 rounded-full bg-primary\"\n style={themeStyle}\n />\n {!hideFields.includes(\"experience.title\") && (\n <h4 className=\"text-lg font-bold text-foreground\">{exp.title}</h4>\n )}\n <div className=\"mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between\">\n {!hideFields.includes(\"experience.institution_name\") && (\n <span className=\"text-base font-semibold text-primary\">\n {exp.institution_name}\n </span>\n )}\n {(!hideFields.includes(\"experience.start_date\") ||\n !hideFields.includes(\"experience.end_date\")) && (\n <span className=\"mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0\">\n {!hideFields.includes(\"experience.start_date\") && exp.start_date}\n {!hideFields.includes(\"experience.end_date\") && (\n <> {exp.end_date ? `- ${exp.end_date}` : \"- Presente\"}</>\n )}\n </span>\n )}\n </div>\n {exp.description && !hideFields.includes(\"experience.description\") && (\n <p className=\"mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80\">\n {exp.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Education */}\n {education.length > 0 && !hideSections.includes(\"Educación\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <GraduationCap className=\"h-6 w-6 text-primary\" />\n Educación\n </h3>\n <div className=\"space-y-8\">\n {education.map((edu) => (\n <div\n key={edu.id}\n className=\"relative pl-6 after:absolute after:bottom-[-24px] after:left-[3px] after:top-4 after:w-[2px] after:bg-border last:after:hidden\"\n >\n <div\n className=\"pdf-line-v absolute left-0 top-2 h-2 w-2 rounded-full bg-primary\"\n style={themeStyle}\n />\n {!hideFields.includes(\"education.title\") && (\n <h4 className=\"text-lg font-bold text-foreground\">{edu.title}</h4>\n )}\n <div className=\"mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between\">\n {!hideFields.includes(\"education.institution_name\") && (\n <span className=\"text-base font-semibold text-primary\">\n {edu.institution_name}\n </span>\n )}\n {(!hideFields.includes(\"education.start_date\") ||\n !hideFields.includes(\"education.end_date\")) && (\n <span className=\"mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0\">\n {!hideFields.includes(\"education.start_date\") && edu.start_date}\n {!hideFields.includes(\"education.end_date\") && (\n <> {edu.end_date ? `- ${edu.end_date}` : \"- Presente\"}</>\n )}\n </span>\n )}\n </div>\n {edu.description && !hideFields.includes(\"education.description\") && (\n <p className=\"mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80\">\n {edu.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Activities */}\n {activities.length > 0 && !hideSections.includes(\"Actividades y Logros\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <Trophy className=\"h-6 w-6 text-primary\" />\n Actividades y Logros\n </h3>\n <div className=\"space-y-8\">\n {activities.map((act) => (\n <div\n key={act.id}\n className=\"relative pl-6 after:absolute after:bottom-[-24px] after:left-[3px] after:top-4 after:w-[2px] after:bg-border last:after:hidden\"\n >\n <div\n className=\"pdf-line-v absolute left-0 top-2 h-2 w-2 rounded-full bg-primary\"\n style={themeStyle}\n />\n {!hideFields.includes(\"activities.title\") && (\n <h4 className=\"text-lg font-bold text-foreground\">{act.title}</h4>\n )}\n <div className=\"mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between\">\n {!hideFields.includes(\"activities.institution_name\") && (\n <span className=\"text-base font-semibold text-primary\">\n {act.institution_name}\n </span>\n )}\n {(!hideFields.includes(\"activities.start_date\") ||\n !hideFields.includes(\"activities.end_date\")) && (\n <span className=\"mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0\">\n {!hideFields.includes(\"activities.start_date\") && act.start_date}\n {!hideFields.includes(\"activities.end_date\") && (\n <> {act.end_date ? `- ${act.end_date}` : \"- Presente\"}</>\n )}\n </span>\n )}\n </div>\n {act.description && !hideFields.includes(\"activities.description\") && (\n <p className=\"mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80\">\n {act.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Certifications */}\n {certifications.length > 0 && !hideSections.includes(\"Certificaciones\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <Award className=\"h-6 w-6 text-primary\" />\n Certificaciones\n </h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {certifications.map((cert) => (\n <div\n key={cert.id}\n className=\"rounded-lg border border-border/60 bg-card p-4 shadow-sm transition-colors hover:border-primary/30 hover:shadow-md\"\n >\n {!hideFields.includes(\"certifications.title\") && (\n <h4\n className=\"line-clamp-1 text-base font-bold text-foreground\"\n title={cert.title}\n >\n {cert.title}\n </h4>\n )}\n {!hideFields.includes(\"certifications.institution_name\") && (\n <p className=\"mt-1 line-clamp-1 text-sm text-muted-foreground\">\n {cert.institution_name}\n </p>\n )}\n <div className=\"mt-4 flex items-center justify-between\">\n {!hideFields.includes(\"certifications.date_awarded\") && (\n <span className=\"rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {cert.date_awarded}\n </span>\n )}\n {cert.verified && !hideFields.includes(\"certifications.verified\") && (\n <span\n className=\"pdf-badge rounded-full border px-2.5 py-1 text-xs font-bold transition-colors\"\n style={{\n backgroundColor: theme?.startsWith(\"#\") ? `${theme}15` : undefined,\n color: theme,\n borderColor: theme?.startsWith(\"#\") ? `${theme}30` : theme,\n }}\n >\n Verificado\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/components/domain/resume/resume-preview/sections/experience-education.tsx"],"sourcesContent":["import { CandidateProfile } from \"../../types\";\nimport type { CVExperienceBaseItem, CVCertificationItem } from \"../../types\";\nimport { GraduationCap, Briefcase, Trophy, Award } from \"lucide-react\";\n\n/** Parsea una fecha (MM/YYYY, YYYY-MM o YYYY) a un valor numérico para ordenar (mayor = más reciente) */\nfunction parseDateToSortValue(dateStr: string | undefined): number {\n if (!dateStr || dateStr.toLowerCase() === \"presente\") return 0;\n // MM/YYYY\n const mmYyyy = dateStr.match(/^(\\d{1,2})\\/(\\d{4})$/);\n if (mmYyyy) return parseInt(mmYyyy[2], 10) * 12 + parseInt(mmYyyy[1], 10);\n // YYYY-MM o YYYY-MM-DD\n const yyyyMm = dateStr.match(/^(\\d{4})-(\\d{1,2})/);\n if (yyyyMm) return parseInt(yyyyMm[1], 10) * 12 + parseInt(yyyyMm[2], 10);\n // Solo año\n const year = dateStr.match(/\\d{4}/);\n if (year) return parseInt(year[0], 10) * 12;\n return 0;\n}\n\n/** Ordena descendente por fecha de fin; si no hay end_date (Presente), usa start_date y prioriza como más reciente */\nfunction sortByDateDesc<T extends CVExperienceBaseItem>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const aEnd = a.end_date?.toLowerCase();\n const bEnd = b.end_date?.toLowerCase();\n const aOngoing = !a.end_date || aEnd === \"presente\";\n const bOngoing = !b.end_date || bEnd === \"presente\";\n const aVal = aOngoing ? parseDateToSortValue(a.start_date) + 9999 * 12 : parseDateToSortValue(a.end_date);\n const bVal = bOngoing ? parseDateToSortValue(b.start_date) + 9999 * 12 : parseDateToSortValue(b.end_date);\n return bVal - aVal;\n });\n}\n\n/** Ordena certificaciones descendente por date_awarded */\nfunction sortCertificationsByDateDesc(items: CVCertificationItem[]): CVCertificationItem[] {\n return [...items].sort((a, b) => {\n const aVal = parseDateToSortValue(a.date_awarded);\n const bVal = parseDateToSortValue(b.date_awarded);\n return bVal - aVal;\n });\n}\n\ninterface ExperienceEducationProps {\n data: CandidateProfile;\n theme?: string;\n hideFields?: string[];\n hideSections?: string[];\n}\n\nexport function ExperienceEducation({\n data,\n theme,\n hideFields = [],\n hideSections = [],\n}: ExperienceEducationProps) {\n const experiences = sortByDateDesc(data.work_experience || []);\n const education = sortByDateDesc(data.education || []);\n const activities = sortByDateDesc(data.activities || []);\n const certifications = sortCertificationsByDateDesc(data.certifications || []);\n\n const themeStyle = theme ? { backgroundColor: theme } : undefined;\n\n return (\n <div className=\"space-y-12\">\n {/* Experience */}\n {experiences.length > 0 && !hideSections.includes(\"Experiencia laboral\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <Briefcase className=\"h-6 w-6 text-primary\" />\n Experiencia Laboral\n </h3>\n <div className=\"space-y-8\">\n {experiences.map((exp) => (\n <div\n key={exp.id}\n className=\"relative pl-6 after:absolute after:bottom-[-24px] after:left-[3px] after:top-4 after:w-[2px] after:bg-border last:after:hidden\"\n >\n <div\n className=\"pdf-line-v absolute left-0 top-2 h-2 w-2 rounded-full bg-primary\"\n style={themeStyle}\n />\n {!hideFields.includes(\"experience.title\") && (\n <h4 className=\"text-lg font-bold text-foreground\">{exp.title}</h4>\n )}\n <div className=\"mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between\">\n {!hideFields.includes(\"experience.institution_name\") && (\n <span className=\"text-base font-semibold text-primary\">\n {exp.institution_name}\n </span>\n )}\n {(!hideFields.includes(\"experience.start_date\") ||\n !hideFields.includes(\"experience.end_date\")) && (\n <span className=\"mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0\">\n {[\n !hideFields.includes(\"experience.start_date\") && exp.start_date,\n !hideFields.includes(\"experience.end_date\") &&\n exp.end_date &&\n exp.end_date.toLowerCase() !== \"presente\"\n ? `- ${exp.end_date}`\n : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n </span>\n )}\n </div>\n {exp.description && !hideFields.includes(\"experience.description\") && (\n <p className=\"mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80\">\n {exp.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Education */}\n {education.length > 0 && !hideSections.includes(\"Educación\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <GraduationCap className=\"h-6 w-6 text-primary\" />\n Educación\n </h3>\n <div className=\"space-y-8\">\n {education.map((edu) => (\n <div\n key={edu.id}\n className=\"relative pl-6 after:absolute after:bottom-[-24px] after:left-[3px] after:top-4 after:w-[2px] after:bg-border last:after:hidden\"\n >\n <div\n className=\"pdf-line-v absolute left-0 top-2 h-2 w-2 rounded-full bg-primary\"\n style={themeStyle}\n />\n {!hideFields.includes(\"education.title\") && (\n <h4 className=\"text-lg font-bold text-foreground\">{edu.title}</h4>\n )}\n <div className=\"mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between\">\n {!hideFields.includes(\"education.institution_name\") && (\n <span className=\"text-base font-semibold text-primary\">\n {edu.institution_name}\n </span>\n )}\n {(!hideFields.includes(\"education.start_date\") ||\n !hideFields.includes(\"education.end_date\")) && (\n <span className=\"mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0\">\n {[\n !hideFields.includes(\"education.start_date\") && edu.start_date,\n !hideFields.includes(\"education.end_date\") &&\n edu.end_date &&\n edu.end_date.toLowerCase() !== \"presente\"\n ? `- ${edu.end_date}`\n : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n </span>\n )}\n </div>\n {edu.description && !hideFields.includes(\"education.description\") && (\n <p className=\"mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80\">\n {edu.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Activities */}\n {activities.length > 0 && !hideSections.includes(\"Actividades y Logros\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <Trophy className=\"h-6 w-6 text-primary\" />\n Actividades y Logros\n </h3>\n <div className=\"space-y-8\">\n {activities.map((act) => (\n <div\n key={act.id}\n className=\"relative pl-6 after:absolute after:bottom-[-24px] after:left-[3px] after:top-4 after:w-[2px] after:bg-border last:after:hidden\"\n >\n <div\n className=\"pdf-line-v absolute left-0 top-2 h-2 w-2 rounded-full bg-primary\"\n style={themeStyle}\n />\n {!hideFields.includes(\"activities.title\") && (\n <h4 className=\"text-lg font-bold text-foreground\">{act.title}</h4>\n )}\n <div className=\"mb-2 flex flex-col sm:flex-row sm:items-center sm:justify-between\">\n {!hideFields.includes(\"activities.institution_name\") && (\n <span className=\"text-base font-semibold text-primary\">\n {act.institution_name}\n </span>\n )}\n {(!hideFields.includes(\"activities.start_date\") ||\n !hideFields.includes(\"activities.end_date\")) && (\n <span className=\"mt-1 w-fit rounded-md bg-muted/30 px-2 py-0.5 text-sm font-medium text-muted-foreground sm:mt-0\">\n {[\n !hideFields.includes(\"activities.start_date\") && act.start_date,\n !hideFields.includes(\"activities.end_date\") &&\n act.end_date &&\n act.end_date.toLowerCase() !== \"presente\"\n ? `- ${act.end_date}`\n : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n </span>\n )}\n </div>\n {act.description && !hideFields.includes(\"activities.description\") && (\n <p className=\"mt-3 whitespace-pre-wrap text-base leading-relaxed text-foreground/80\">\n {act.description}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Certifications */}\n {certifications.length > 0 && !hideSections.includes(\"Certificaciones\") && (\n <div className=\"space-y-6\">\n <h3 className=\"flex items-center gap-2 border-b-2 border-primary/20 pb-2 text-2xl font-bold text-primary\">\n <Award className=\"h-6 w-6 text-primary\" />\n Certificaciones\n </h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {certifications.map((cert) => (\n <div\n key={cert.id}\n className=\"rounded-lg border border-border/60 bg-card p-4 shadow-sm transition-colors hover:border-primary/30 hover:shadow-md\"\n >\n {!hideFields.includes(\"certifications.title\") && (\n <h4\n className=\"line-clamp-1 text-base font-bold text-foreground\"\n title={cert.title}\n >\n {cert.title}\n </h4>\n )}\n {!hideFields.includes(\"certifications.institution_name\") && (\n <p className=\"mt-1 line-clamp-1 text-sm text-muted-foreground\">\n {cert.institution_name}\n </p>\n )}\n <div className=\"mt-4 flex items-center justify-between\">\n {!hideFields.includes(\"certifications.date_awarded\") && (\n <span className=\"rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {cert.date_awarded}\n </span>\n )}\n {cert.verified && !hideFields.includes(\"certifications.verified\") && (\n <span\n className=\"pdf-badge rounded-full border px-2.5 py-1 text-xs font-bold transition-colors\"\n style={{\n backgroundColor: theme?.startsWith(\"#\") ? `${theme}15` : undefined,\n color: theme,\n borderColor: theme?.startsWith(\"#\") ? `${theme}30` : theme,\n }}\n >\n Verificado\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}