@ginia/ui 0.1.21 → 0.1.23

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 (38) hide show
  1. package/AGENTS.md +4 -2
  2. package/dist/components/domain/resume/resume-preview/sections/experience-education.cjs +2 -2
  3. package/dist/components/domain/resume/resume-preview/sections/experience-education.cjs.map +1 -1
  4. package/dist/components/domain/resume/resume-preview/sections/experience-education.js +2 -2
  5. package/dist/components/domain/resume/resume-preview/sections/experience-education.js.map +1 -1
  6. package/dist/components/ui/ginia-wordmark/ginia-wordmark.cjs +85 -0
  7. package/dist/components/ui/ginia-wordmark/ginia-wordmark.cjs.map +1 -0
  8. package/dist/components/ui/ginia-wordmark/ginia-wordmark.d.cts +22 -0
  9. package/dist/components/ui/ginia-wordmark/ginia-wordmark.d.ts +22 -0
  10. package/dist/components/ui/ginia-wordmark/ginia-wordmark.js +60 -0
  11. package/dist/components/ui/ginia-wordmark/ginia-wordmark.js.map +1 -0
  12. package/dist/components/ui/ginia-wordmark/index.cjs +31 -0
  13. package/dist/components/ui/ginia-wordmark/index.cjs.map +1 -0
  14. package/dist/components/ui/ginia-wordmark/index.d.cts +5 -0
  15. package/dist/components/ui/ginia-wordmark/index.d.ts +5 -0
  16. package/dist/components/ui/ginia-wordmark/index.js +6 -0
  17. package/dist/components/ui/ginia-wordmark/index.js.map +1 -0
  18. package/dist/components/ui/index.cjs +5 -1
  19. package/dist/components/ui/index.cjs.map +1 -1
  20. package/dist/components/ui/index.d.cts +2 -0
  21. package/dist/components/ui/index.d.ts +2 -0
  22. package/dist/components/ui/index.js +2 -0
  23. package/dist/components/ui/index.js.map +1 -1
  24. package/dist/components/ui/typography/index.cjs +31 -0
  25. package/dist/components/ui/typography/index.cjs.map +1 -0
  26. package/dist/components/ui/typography/index.d.cts +5 -0
  27. package/dist/components/ui/typography/index.d.ts +5 -0
  28. package/dist/components/ui/typography/index.js +6 -0
  29. package/dist/components/ui/typography/index.js.map +1 -0
  30. package/dist/components/ui/typography/typography.cjs +80 -0
  31. package/dist/components/ui/typography/typography.cjs.map +1 -0
  32. package/dist/components/ui/typography/typography.d.cts +15 -0
  33. package/dist/components/ui/typography/typography.d.ts +15 -0
  34. package/dist/components/ui/typography/typography.js +55 -0
  35. package/dist/components/ui/typography/typography.js.map +1 -0
  36. package/dist/index.d.cts +2 -0
  37. package/dist/index.d.ts +2 -0
  38. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -32,7 +32,7 @@ export default {
32
32
 
33
33
  ```tsx
34
34
  // Import components
35
- import { Button, Card, Input, Dialog } from "@ginia/ui";
35
+ import { Button, Card, Input, Dialog, Typography, GiniaWordmark } from "@ginia/ui";
36
36
 
37
37
  // Import design tokens
38
38
  import { colors, fontFamily } from "@ginia/ui/tokens";
@@ -63,4 +63,6 @@ import { cn } from "@ginia/ui";
63
63
  5. **Components are `"use client"`** — wrap accordingly in Next.js App Router.
64
64
  6. **Composed APIs**: `Select`, `Dialog`, `Sheet`, `Accordion`, etc. use multi-part patterns (e.g., `<Select>` + `<SelectTrigger>` + `<SelectContent>` + `<SelectItem>`). Check the Storybook for the exact composition pattern of each component.
65
65
  7. **Icons**: Icons are re-exported from `lucide-react` and should be imported from `@ginia/ui/icons`. For consistent sizing and accessibility, prefer using the `<Icon />` component from `@ginia/ui`.
66
- 8. **No business logic** in components they are purely presentational.
66
+ 8. **Typography**: Use `<Typography variant="…" />` for headings, body, lead, caption, and display styles. Each variant has a default HTML tag; override with `as` or `asChild` when you need a different element (e.g. a link styled as a heading).
67
+ 9. **Brand lockup**: `<GiniaWordmark />` combines the official `<Logo />` SVG with the word “Ginia” for headers and splash surfaces. Use `size` (`sm` | `md` | `lg`) and optional `label` for accessibility.
68
+ 10. **No business logic** in components — they are purely presentational.
@@ -57,7 +57,7 @@ function formatDisplayDate(dateStr) {
57
57
  }
58
58
  function formatDateRange(opts) {
59
59
  const startText = opts.hideStart ? "" : formatDisplayDate(opts.start);
60
- const endText = opts.hideEnd ? "" : formatDisplayDate(opts.end);
60
+ const endText = opts.hideEnd ? "" : formatDisplayDate(opts.end) || (opts.start ? "presente" : "");
61
61
  if (startText && endText) return `${startText} - ${endText}`;
62
62
  return startText || endText || "";
63
63
  }
@@ -202,7 +202,7 @@ function ExperienceEducation({
202
202
  !hideFields.includes("certifications.title") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: "break-words text-base font-bold text-foreground", children: cert.title }),
203
203
  !hideFields.includes("certifications.institution_name") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-1 line-clamp-1 text-sm text-muted-foreground", children: cert.institution_name }),
204
204
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-4 flex items-center justify-between", children: [
205
- !hideFields.includes("certifications.date_awarded") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground pdf-badge", children: cert.date_awarded }),
205
+ !hideFields.includes("certifications.date_awarded") && cert.date_awarded && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold tracking-wider text-muted-foreground pdf-badge", children: formatDisplayDate(cert.date_awarded) }),
206
206
  cert.verified && !hideFields.includes("certifications.verified") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
207
207
  "span",
208
208
  {
@@ -1 +1 @@
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\";\nimport { format } from \"date-fns\";\nimport { es } from \"date-fns/locale\";\n\n/** Parsea una fecha a timestamp. Soporta ISO (YYYY-MM-DD), MM/YYYY, YYYY-MM, YYYY. */\nfunction parseDateToTimestamp(dateStr: string | undefined): number {\n if (!dateStr) return 0;\n const isoMatch = dateStr.match(/^(\\d{4})-(\\d{1,2})(?:-(\\d{1,2}))?/);\n if (isoMatch) {\n const [, y, m, d] = isoMatch;\n // Importante: interpretar como fecha \"local\" para evitar corrimientos por zona horaria\n // (p.ej. 2024-08-01 en UTC puede formatearse como julio en zonas negativas).\n const year = Number(y);\n const monthIndex = Number(m) - 1; // JS Date usa meses 0-based\n const day = Number(d || \"1\");\n return new Date(year, monthIndex, day).getTime();\n }\n const mmYyyy = dateStr.match(/^(\\d{1,2})\\/(\\d{4})$/);\n if (mmYyyy) {\n const [, m, y] = mmYyyy;\n const year = Number(y);\n const monthIndex = Number(m) - 1;\n return new Date(year, monthIndex, 1).getTime();\n }\n const year = dateStr.match(/\\d{4}/);\n if (year) {\n return new Date(Number(year[0]), 0, 1).getTime();\n }\n return 0;\n}\n\n/** Formatea una fecha ISO/string a \"mes año\" en español, ej: \"agosto 2020\". */\nfunction formatDisplayDate(dateStr: string | undefined): string {\n if (!dateStr) return \"\";\n // Si es un valor semántico como \"Presente\", lo retorna tal cual\n if (!/\\d{4}/.test(dateStr)) return dateStr;\n const ts = parseDateToTimestamp(dateStr);\n if (!ts) return dateStr;\n return format(new Date(ts), \"MMM yyyy\", { locale: es });\n}\n\nfunction formatDateRange(opts: {\n start?: string;\n end?: string;\n hideStart?: boolean;\n hideEnd?: boolean;\n}): string {\n const startText = opts.hideStart ? \"\" : formatDisplayDate(opts.start);\n const endText = opts.hideEnd ? \"\" : formatDisplayDate(opts.end);\n\n if (startText && endText) return `${startText} - ${endText}`;\n return startText || endText || \"\";\n}\n\n/** Ordena descendente por fecha (más reciente primero). Usa end_date o start_date si no hay end. */\nfunction sortByDateDesc<T extends CVExperienceBaseItem>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const dateA = a.end_date || a.start_date;\n const dateB = b.end_date || b.start_date;\n if (!dateA && !dateB) return 0;\n if (!dateA) return 1;\n if (!dateB) return -1;\n return parseDateToTimestamp(dateB) - parseDateToTimestamp(dateA);\n });\n}\n\n/** Ordena certificaciones descendente por date_awarded */\nfunction sortCertificationsByDateDesc(items: CVCertificationItem[]): CVCertificationItem[] {\n return [...items].sort((a, b) => {\n const tsA = parseDateToTimestamp(a.date_awarded);\n const tsB = parseDateToTimestamp(b.date_awarded);\n return tsB - tsA;\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 pdf-badge\">\n {formatDateRange({\n start: exp.start_date,\n end: exp.end_date,\n hideStart: hideFields.includes(\"experience.start_date\"),\n hideEnd: hideFields.includes(\"experience.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: edu.start_date,\n end: edu.end_date,\n hideStart: hideFields.includes(\"education.start_date\"),\n hideEnd: hideFields.includes(\"education.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: act.start_date,\n end: act.end_date,\n hideStart: hideFields.includes(\"activities.start_date\"),\n hideEnd: hideFields.includes(\"activities.end_date\"),\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\">\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 className=\"break-words text-base font-bold text-foreground\">\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 pdf-badge\">\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":["year"]}
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\";\nimport { format } from \"date-fns\";\nimport { es } from \"date-fns/locale\";\n\n/** Parsea una fecha a timestamp. Soporta ISO (YYYY-MM-DD), MM/YYYY, YYYY-MM, YYYY. */\nfunction parseDateToTimestamp(dateStr: string | undefined): number {\n if (!dateStr) return 0;\n const isoMatch = dateStr.match(/^(\\d{4})-(\\d{1,2})(?:-(\\d{1,2}))?/);\n if (isoMatch) {\n const [, y, m, d] = isoMatch;\n // Importante: interpretar como fecha \"local\" para evitar corrimientos por zona horaria\n // (p.ej. 2024-08-01 en UTC puede formatearse como julio en zonas negativas).\n const year = Number(y);\n const monthIndex = Number(m) - 1; // JS Date usa meses 0-based\n const day = Number(d || \"1\");\n return new Date(year, monthIndex, day).getTime();\n }\n const mmYyyy = dateStr.match(/^(\\d{1,2})\\/(\\d{4})$/);\n if (mmYyyy) {\n const [, m, y] = mmYyyy;\n const year = Number(y);\n const monthIndex = Number(m) - 1;\n return new Date(year, monthIndex, 1).getTime();\n }\n const year = dateStr.match(/\\d{4}/);\n if (year) {\n return new Date(Number(year[0]), 0, 1).getTime();\n }\n return 0;\n}\n\n/** Formatea una fecha ISO/string a \"mes año\" en español, ej: \"agosto 2020\". */\nfunction formatDisplayDate(dateStr: string | undefined): string {\n if (!dateStr) return \"\";\n // Si es un valor semántico como \"Presente\", lo retorna tal cual\n if (!/\\d{4}/.test(dateStr)) return dateStr;\n const ts = parseDateToTimestamp(dateStr);\n if (!ts) return dateStr;\n return format(new Date(ts), \"MMM yyyy\", { locale: es });\n}\n\nfunction formatDateRange(opts: {\n start?: string;\n end?: string;\n hideStart?: boolean;\n hideEnd?: boolean;\n}): string {\n const startText = opts.hideStart ? \"\" : formatDisplayDate(opts.start);\n const endText = opts.hideEnd ? \"\" : (formatDisplayDate(opts.end) || (opts.start ? \"presente\" : \"\"));\n\n if (startText && endText) return `${startText} - ${endText}`;\n return startText || endText || \"\";\n}\n\n/** Ordena descendente por fecha (más reciente primero). Usa end_date o start_date si no hay end. */\nfunction sortByDateDesc<T extends CVExperienceBaseItem>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const dateA = a.end_date || a.start_date;\n const dateB = b.end_date || b.start_date;\n if (!dateA && !dateB) return 0;\n if (!dateA) return 1;\n if (!dateB) return -1;\n return parseDateToTimestamp(dateB) - parseDateToTimestamp(dateA);\n });\n}\n\n/** Ordena certificaciones descendente por date_awarded */\nfunction sortCertificationsByDateDesc(items: CVCertificationItem[]): CVCertificationItem[] {\n return [...items].sort((a, b) => {\n const tsA = parseDateToTimestamp(a.date_awarded);\n const tsB = parseDateToTimestamp(b.date_awarded);\n return tsB - tsA;\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 pdf-badge\">\n {formatDateRange({\n start: exp.start_date,\n end: exp.end_date,\n hideStart: hideFields.includes(\"experience.start_date\"),\n hideEnd: hideFields.includes(\"experience.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: edu.start_date,\n end: edu.end_date,\n hideStart: hideFields.includes(\"education.start_date\"),\n hideEnd: hideFields.includes(\"education.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: act.start_date,\n end: act.end_date,\n hideStart: hideFields.includes(\"activities.start_date\"),\n hideEnd: hideFields.includes(\"activities.end_date\"),\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\">\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 className=\"break-words text-base font-bold text-foreground\">\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\") && cert.date_awarded && (\n <span className=\"rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold tracking-wider text-muted-foreground pdf-badge\">\n {formatDisplayDate(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":["year"]}
@@ -34,7 +34,7 @@ function formatDisplayDate(dateStr) {
34
34
  }
35
35
  function formatDateRange(opts) {
36
36
  const startText = opts.hideStart ? "" : formatDisplayDate(opts.start);
37
- const endText = opts.hideEnd ? "" : formatDisplayDate(opts.end);
37
+ const endText = opts.hideEnd ? "" : formatDisplayDate(opts.end) || (opts.start ? "presente" : "");
38
38
  if (startText && endText) return `${startText} - ${endText}`;
39
39
  return startText || endText || "";
40
40
  }
@@ -179,7 +179,7 @@ function ExperienceEducation({
179
179
  !hideFields.includes("certifications.title") && /* @__PURE__ */ jsx("h4", { className: "break-words text-base font-bold text-foreground", children: cert.title }),
180
180
  !hideFields.includes("certifications.institution_name") && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-1 text-sm text-muted-foreground", children: cert.institution_name }),
181
181
  /* @__PURE__ */ jsxs("div", { className: "mt-4 flex items-center justify-between", children: [
182
- !hideFields.includes("certifications.date_awarded") && /* @__PURE__ */ jsx("span", { className: "rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground pdf-badge", children: cert.date_awarded }),
182
+ !hideFields.includes("certifications.date_awarded") && cert.date_awarded && /* @__PURE__ */ jsx("span", { className: "rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold tracking-wider text-muted-foreground pdf-badge", children: formatDisplayDate(cert.date_awarded) }),
183
183
  cert.verified && !hideFields.includes("certifications.verified") && /* @__PURE__ */ jsx(
184
184
  "span",
185
185
  {
@@ -1 +1 @@
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\";\nimport { format } from \"date-fns\";\nimport { es } from \"date-fns/locale\";\n\n/** Parsea una fecha a timestamp. Soporta ISO (YYYY-MM-DD), MM/YYYY, YYYY-MM, YYYY. */\nfunction parseDateToTimestamp(dateStr: string | undefined): number {\n if (!dateStr) return 0;\n const isoMatch = dateStr.match(/^(\\d{4})-(\\d{1,2})(?:-(\\d{1,2}))?/);\n if (isoMatch) {\n const [, y, m, d] = isoMatch;\n // Importante: interpretar como fecha \"local\" para evitar corrimientos por zona horaria\n // (p.ej. 2024-08-01 en UTC puede formatearse como julio en zonas negativas).\n const year = Number(y);\n const monthIndex = Number(m) - 1; // JS Date usa meses 0-based\n const day = Number(d || \"1\");\n return new Date(year, monthIndex, day).getTime();\n }\n const mmYyyy = dateStr.match(/^(\\d{1,2})\\/(\\d{4})$/);\n if (mmYyyy) {\n const [, m, y] = mmYyyy;\n const year = Number(y);\n const monthIndex = Number(m) - 1;\n return new Date(year, monthIndex, 1).getTime();\n }\n const year = dateStr.match(/\\d{4}/);\n if (year) {\n return new Date(Number(year[0]), 0, 1).getTime();\n }\n return 0;\n}\n\n/** Formatea una fecha ISO/string a \"mes año\" en español, ej: \"agosto 2020\". */\nfunction formatDisplayDate(dateStr: string | undefined): string {\n if (!dateStr) return \"\";\n // Si es un valor semántico como \"Presente\", lo retorna tal cual\n if (!/\\d{4}/.test(dateStr)) return dateStr;\n const ts = parseDateToTimestamp(dateStr);\n if (!ts) return dateStr;\n return format(new Date(ts), \"MMM yyyy\", { locale: es });\n}\n\nfunction formatDateRange(opts: {\n start?: string;\n end?: string;\n hideStart?: boolean;\n hideEnd?: boolean;\n}): string {\n const startText = opts.hideStart ? \"\" : formatDisplayDate(opts.start);\n const endText = opts.hideEnd ? \"\" : formatDisplayDate(opts.end);\n\n if (startText && endText) return `${startText} - ${endText}`;\n return startText || endText || \"\";\n}\n\n/** Ordena descendente por fecha (más reciente primero). Usa end_date o start_date si no hay end. */\nfunction sortByDateDesc<T extends CVExperienceBaseItem>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const dateA = a.end_date || a.start_date;\n const dateB = b.end_date || b.start_date;\n if (!dateA && !dateB) return 0;\n if (!dateA) return 1;\n if (!dateB) return -1;\n return parseDateToTimestamp(dateB) - parseDateToTimestamp(dateA);\n });\n}\n\n/** Ordena certificaciones descendente por date_awarded */\nfunction sortCertificationsByDateDesc(items: CVCertificationItem[]): CVCertificationItem[] {\n return [...items].sort((a, b) => {\n const tsA = parseDateToTimestamp(a.date_awarded);\n const tsB = parseDateToTimestamp(b.date_awarded);\n return tsB - tsA;\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 pdf-badge\">\n {formatDateRange({\n start: exp.start_date,\n end: exp.end_date,\n hideStart: hideFields.includes(\"experience.start_date\"),\n hideEnd: hideFields.includes(\"experience.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: edu.start_date,\n end: edu.end_date,\n hideStart: hideFields.includes(\"education.start_date\"),\n hideEnd: hideFields.includes(\"education.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: act.start_date,\n end: act.end_date,\n hideStart: hideFields.includes(\"activities.start_date\"),\n hideEnd: hideFields.includes(\"activities.end_date\"),\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\">\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 className=\"break-words text-base font-bold text-foreground\">\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 pdf-badge\">\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":["year"]}
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\";\nimport { format } from \"date-fns\";\nimport { es } from \"date-fns/locale\";\n\n/** Parsea una fecha a timestamp. Soporta ISO (YYYY-MM-DD), MM/YYYY, YYYY-MM, YYYY. */\nfunction parseDateToTimestamp(dateStr: string | undefined): number {\n if (!dateStr) return 0;\n const isoMatch = dateStr.match(/^(\\d{4})-(\\d{1,2})(?:-(\\d{1,2}))?/);\n if (isoMatch) {\n const [, y, m, d] = isoMatch;\n // Importante: interpretar como fecha \"local\" para evitar corrimientos por zona horaria\n // (p.ej. 2024-08-01 en UTC puede formatearse como julio en zonas negativas).\n const year = Number(y);\n const monthIndex = Number(m) - 1; // JS Date usa meses 0-based\n const day = Number(d || \"1\");\n return new Date(year, monthIndex, day).getTime();\n }\n const mmYyyy = dateStr.match(/^(\\d{1,2})\\/(\\d{4})$/);\n if (mmYyyy) {\n const [, m, y] = mmYyyy;\n const year = Number(y);\n const monthIndex = Number(m) - 1;\n return new Date(year, monthIndex, 1).getTime();\n }\n const year = dateStr.match(/\\d{4}/);\n if (year) {\n return new Date(Number(year[0]), 0, 1).getTime();\n }\n return 0;\n}\n\n/** Formatea una fecha ISO/string a \"mes año\" en español, ej: \"agosto 2020\". */\nfunction formatDisplayDate(dateStr: string | undefined): string {\n if (!dateStr) return \"\";\n // Si es un valor semántico como \"Presente\", lo retorna tal cual\n if (!/\\d{4}/.test(dateStr)) return dateStr;\n const ts = parseDateToTimestamp(dateStr);\n if (!ts) return dateStr;\n return format(new Date(ts), \"MMM yyyy\", { locale: es });\n}\n\nfunction formatDateRange(opts: {\n start?: string;\n end?: string;\n hideStart?: boolean;\n hideEnd?: boolean;\n}): string {\n const startText = opts.hideStart ? \"\" : formatDisplayDate(opts.start);\n const endText = opts.hideEnd ? \"\" : (formatDisplayDate(opts.end) || (opts.start ? \"presente\" : \"\"));\n\n if (startText && endText) return `${startText} - ${endText}`;\n return startText || endText || \"\";\n}\n\n/** Ordena descendente por fecha (más reciente primero). Usa end_date o start_date si no hay end. */\nfunction sortByDateDesc<T extends CVExperienceBaseItem>(items: T[]): T[] {\n return [...items].sort((a, b) => {\n const dateA = a.end_date || a.start_date;\n const dateB = b.end_date || b.start_date;\n if (!dateA && !dateB) return 0;\n if (!dateA) return 1;\n if (!dateB) return -1;\n return parseDateToTimestamp(dateB) - parseDateToTimestamp(dateA);\n });\n}\n\n/** Ordena certificaciones descendente por date_awarded */\nfunction sortCertificationsByDateDesc(items: CVCertificationItem[]): CVCertificationItem[] {\n return [...items].sort((a, b) => {\n const tsA = parseDateToTimestamp(a.date_awarded);\n const tsB = parseDateToTimestamp(b.date_awarded);\n return tsB - tsA;\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 pdf-badge\">\n {formatDateRange({\n start: exp.start_date,\n end: exp.end_date,\n hideStart: hideFields.includes(\"experience.start_date\"),\n hideEnd: hideFields.includes(\"experience.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: edu.start_date,\n end: edu.end_date,\n hideStart: hideFields.includes(\"education.start_date\"),\n hideEnd: hideFields.includes(\"education.end_date\"),\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 pdf-badge\">\n {formatDateRange({\n start: act.start_date,\n end: act.end_date,\n hideStart: hideFields.includes(\"activities.start_date\"),\n hideEnd: hideFields.includes(\"activities.end_date\"),\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\">\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 className=\"break-words text-base font-bold text-foreground\">\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\") && cert.date_awarded && (\n <span className=\"rounded-md bg-muted/50 px-2 py-1 text-xs font-semibold tracking-wider text-muted-foreground pdf-badge\">\n {formatDisplayDate(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":["year"]}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var ginia_wordmark_exports = {};
21
+ __export(ginia_wordmark_exports, {
22
+ GiniaWordmark: () => GiniaWordmark,
23
+ wordmarkVariants: () => wordmarkVariants
24
+ });
25
+ module.exports = __toCommonJS(ginia_wordmark_exports);
26
+ var import_jsx_runtime = require("react/jsx-runtime");
27
+ var import_class_variance_authority = require("class-variance-authority");
28
+ var import_utils = require("../../../lib/utils");
29
+ var import_logo = require("../logo/logo");
30
+ const wordmarkVariants = (0, import_class_variance_authority.cva)("inline-flex items-center", {
31
+ variants: {
32
+ size: {
33
+ sm: "gap-1.5",
34
+ md: "gap-2",
35
+ lg: "gap-2.5"
36
+ }
37
+ },
38
+ defaultVariants: {
39
+ size: "md"
40
+ }
41
+ });
42
+ const logoSizeClass = {
43
+ sm: "size-6",
44
+ md: "size-8",
45
+ lg: "size-10"
46
+ };
47
+ const labelVariants = (0, import_class_variance_authority.cva)("font-semibold tracking-tight text-foreground", {
48
+ variants: {
49
+ size: {
50
+ sm: "text-lg",
51
+ md: "text-xl",
52
+ lg: "text-2xl"
53
+ }
54
+ },
55
+ defaultVariants: {
56
+ size: "md"
57
+ }
58
+ });
59
+ function GiniaWordmark({
60
+ className,
61
+ size = "md",
62
+ label = "Ginia",
63
+ ...props
64
+ }) {
65
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
66
+ "div",
67
+ {
68
+ className: (0, import_utils.cn)(wordmarkVariants({ size }), className),
69
+ role: "img",
70
+ "aria-label": label,
71
+ "data-slot": "ginia-wordmark",
72
+ ...props,
73
+ children: [
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_logo.Logo, { "data-slot": "ginia-logo", "aria-hidden": true, className: (0, import_utils.cn)(logoSizeClass[size ?? "md"], "shrink-0") }),
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_utils.cn)(labelVariants({ size })), "aria-hidden": true, children: "Ginia" })
76
+ ]
77
+ }
78
+ );
79
+ }
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ GiniaWordmark,
83
+ wordmarkVariants
84
+ });
85
+ //# sourceMappingURL=ginia-wordmark.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/ginia-wordmark/ginia-wordmark.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Logo } from \"../logo/logo\";\n\nconst wordmarkVariants = cva(\"inline-flex items-center\", {\n variants: {\n size: {\n sm: \"gap-1.5\",\n md: \"gap-2\",\n lg: \"gap-2.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst logoSizeClass = {\n sm: \"size-6\",\n md: \"size-8\",\n lg: \"size-10\",\n} as const;\n\nconst labelVariants = cva(\"font-semibold tracking-tight text-foreground\", {\n variants: {\n size: {\n sm: \"text-lg\",\n md: \"text-xl\",\n lg: \"text-2xl\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface GiniaWordmarkProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual scale of the mark and label. */\n size?: VariantProps<typeof wordmarkVariants>[\"size\"];\n /** Accessible label for the combined mark (e.g. for screen readers). */\n label?: string;\n}\n\n/**\n * Brand lockup: Ginia logo (mark) plus the word “Ginia”.\n *\n * Use in headers, splash screens, and anywhere the product name should appear with the icon.\n */\nfunction GiniaWordmark({\n className,\n size = \"md\",\n label = \"Ginia\",\n ...props\n}: GiniaWordmarkProps) {\n return (\n <div\n className={cn(wordmarkVariants({ size }), className)}\n role=\"img\"\n aria-label={label}\n data-slot=\"ginia-wordmark\"\n {...props}\n >\n <Logo data-slot=\"ginia-logo\" aria-hidden className={cn(logoSizeClass[size ?? \"md\"], \"shrink-0\")} />\n <span className={cn(labelVariants({ size }))} aria-hidden>\n Ginia\n </span>\n </div>\n );\n}\n\nexport { GiniaWordmark, wordmarkVariants };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DI;AAxDJ,sCAAuC;AAEvC,mBAAmB;AACnB,kBAAqB;AAErB,MAAM,uBAAmB,qCAAI,4BAA4B;AAAA,EACvD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAED,MAAM,gBAAgB;AAAA,EACpB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,MAAM,oBAAgB,qCAAI,gDAAgD;AAAA,EACxE,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAcD,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,GAAG;AACL,GAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW,iBAAG,iBAAiB,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,MACnD,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,aAAU;AAAA,MACT,GAAG;AAAA,MAEJ;AAAA,oDAAC,oBAAK,aAAU,cAAa,eAAW,MAAC,eAAW,iBAAG,cAAc,QAAQ,IAAI,GAAG,UAAU,GAAG;AAAA,QACjG,4CAAC,UAAK,eAAW,iBAAG,cAAc,EAAE,KAAK,CAAC,CAAC,GAAG,eAAW,MAAC,mBAE1D;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const wordmarkVariants: (props?: ({
7
+ size?: "sm" | "lg" | "md" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface GiniaWordmarkProps extends React.HTMLAttributes<HTMLDivElement> {
10
+ /** Visual scale of the mark and label. */
11
+ size?: VariantProps<typeof wordmarkVariants>["size"];
12
+ /** Accessible label for the combined mark (e.g. for screen readers). */
13
+ label?: string;
14
+ }
15
+ /**
16
+ * Brand lockup: Ginia logo (mark) plus the word “Ginia”.
17
+ *
18
+ * Use in headers, splash screens, and anywhere the product name should appear with the icon.
19
+ */
20
+ declare function GiniaWordmark({ className, size, label, ...props }: GiniaWordmarkProps): react_jsx_runtime.JSX.Element;
21
+
22
+ export { GiniaWordmark, type GiniaWordmarkProps, wordmarkVariants };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const wordmarkVariants: (props?: ({
7
+ size?: "sm" | "lg" | "md" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface GiniaWordmarkProps extends React.HTMLAttributes<HTMLDivElement> {
10
+ /** Visual scale of the mark and label. */
11
+ size?: VariantProps<typeof wordmarkVariants>["size"];
12
+ /** Accessible label for the combined mark (e.g. for screen readers). */
13
+ label?: string;
14
+ }
15
+ /**
16
+ * Brand lockup: Ginia logo (mark) plus the word “Ginia”.
17
+ *
18
+ * Use in headers, splash screens, and anywhere the product name should appear with the icon.
19
+ */
20
+ declare function GiniaWordmark({ className, size, label, ...props }: GiniaWordmarkProps): react_jsx_runtime.JSX.Element;
21
+
22
+ export { GiniaWordmark, type GiniaWordmarkProps, wordmarkVariants };
@@ -0,0 +1,60 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../../../lib/utils";
5
+ import { Logo } from "../logo/logo";
6
+ const wordmarkVariants = cva("inline-flex items-center", {
7
+ variants: {
8
+ size: {
9
+ sm: "gap-1.5",
10
+ md: "gap-2",
11
+ lg: "gap-2.5"
12
+ }
13
+ },
14
+ defaultVariants: {
15
+ size: "md"
16
+ }
17
+ });
18
+ const logoSizeClass = {
19
+ sm: "size-6",
20
+ md: "size-8",
21
+ lg: "size-10"
22
+ };
23
+ const labelVariants = cva("font-semibold tracking-tight text-foreground", {
24
+ variants: {
25
+ size: {
26
+ sm: "text-lg",
27
+ md: "text-xl",
28
+ lg: "text-2xl"
29
+ }
30
+ },
31
+ defaultVariants: {
32
+ size: "md"
33
+ }
34
+ });
35
+ function GiniaWordmark({
36
+ className,
37
+ size = "md",
38
+ label = "Ginia",
39
+ ...props
40
+ }) {
41
+ return /* @__PURE__ */ jsxs(
42
+ "div",
43
+ {
44
+ className: cn(wordmarkVariants({ size }), className),
45
+ role: "img",
46
+ "aria-label": label,
47
+ "data-slot": "ginia-wordmark",
48
+ ...props,
49
+ children: [
50
+ /* @__PURE__ */ jsx(Logo, { "data-slot": "ginia-logo", "aria-hidden": true, className: cn(logoSizeClass[size ?? "md"], "shrink-0") }),
51
+ /* @__PURE__ */ jsx("span", { className: cn(labelVariants({ size })), "aria-hidden": true, children: "Ginia" })
52
+ ]
53
+ }
54
+ );
55
+ }
56
+ export {
57
+ GiniaWordmark,
58
+ wordmarkVariants
59
+ };
60
+ //# sourceMappingURL=ginia-wordmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/ginia-wordmark/ginia-wordmark.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Logo } from \"../logo/logo\";\n\nconst wordmarkVariants = cva(\"inline-flex items-center\", {\n variants: {\n size: {\n sm: \"gap-1.5\",\n md: \"gap-2\",\n lg: \"gap-2.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst logoSizeClass = {\n sm: \"size-6\",\n md: \"size-8\",\n lg: \"size-10\",\n} as const;\n\nconst labelVariants = cva(\"font-semibold tracking-tight text-foreground\", {\n variants: {\n size: {\n sm: \"text-lg\",\n md: \"text-xl\",\n lg: \"text-2xl\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface GiniaWordmarkProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual scale of the mark and label. */\n size?: VariantProps<typeof wordmarkVariants>[\"size\"];\n /** Accessible label for the combined mark (e.g. for screen readers). */\n label?: string;\n}\n\n/**\n * Brand lockup: Ginia logo (mark) plus the word “Ginia”.\n *\n * Use in headers, splash screens, and anywhere the product name should appear with the icon.\n */\nfunction GiniaWordmark({\n className,\n size = \"md\",\n label = \"Ginia\",\n ...props\n}: GiniaWordmarkProps) {\n return (\n <div\n className={cn(wordmarkVariants({ size }), className)}\n role=\"img\"\n aria-label={label}\n data-slot=\"ginia-wordmark\"\n {...props}\n >\n <Logo data-slot=\"ginia-logo\" aria-hidden className={cn(logoSizeClass[size ?? \"md\"], \"shrink-0\")} />\n <span className={cn(labelVariants({ size }))} aria-hidden>\n Ginia\n </span>\n </div>\n );\n}\n\nexport { GiniaWordmark, wordmarkVariants };\n"],"mappings":";AA2DI,SAOE,KAPF;AAxDJ,SAAS,WAA8B;AAEvC,SAAS,UAAU;AACnB,SAAS,YAAY;AAErB,MAAM,mBAAmB,IAAI,4BAA4B;AAAA,EACvD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAED,MAAM,gBAAgB;AAAA,EACpB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,MAAM,gBAAgB,IAAI,gDAAgD;AAAA,EACxE,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAcD,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,GAAG;AACL,GAAuB;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,iBAAiB,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,MACnD,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,aAAU;AAAA,MACT,GAAG;AAAA,MAEJ;AAAA,4BAAC,QAAK,aAAU,cAAa,eAAW,MAAC,WAAW,GAAG,cAAc,QAAQ,IAAI,GAAG,UAAU,GAAG;AAAA,QACjG,oBAAC,UAAK,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC,GAAG,eAAW,MAAC,mBAE1D;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ginia_wordmark_exports = {};
20
+ __export(ginia_wordmark_exports, {
21
+ GiniaWordmark: () => import_ginia_wordmark.GiniaWordmark,
22
+ wordmarkVariants: () => import_ginia_wordmark.wordmarkVariants
23
+ });
24
+ module.exports = __toCommonJS(ginia_wordmark_exports);
25
+ var import_ginia_wordmark = require("./ginia-wordmark");
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ GiniaWordmark,
29
+ wordmarkVariants
30
+ });
31
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/ginia-wordmark/index.ts"],"sourcesContent":["export { GiniaWordmark, wordmarkVariants } from \"./ginia-wordmark\";\nexport type { GiniaWordmarkProps } from \"./ginia-wordmark\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAgD;","names":[]}
@@ -0,0 +1,5 @@
1
+ export { GiniaWordmark, GiniaWordmarkProps, wordmarkVariants } from './ginia-wordmark.cjs';
2
+ import 'react/jsx-runtime';
3
+ import 'class-variance-authority/types';
4
+ import 'react';
5
+ import 'class-variance-authority';
@@ -0,0 +1,5 @@
1
+ export { GiniaWordmark, GiniaWordmarkProps, wordmarkVariants } from './ginia-wordmark.js';
2
+ import 'react/jsx-runtime';
3
+ import 'class-variance-authority/types';
4
+ import 'react';
5
+ import 'class-variance-authority';
@@ -0,0 +1,6 @@
1
+ import { GiniaWordmark, wordmarkVariants } from "./ginia-wordmark";
2
+ export {
3
+ GiniaWordmark,
4
+ wordmarkVariants
5
+ };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/ginia-wordmark/index.ts"],"sourcesContent":["export { GiniaWordmark, wordmarkVariants } from \"./ginia-wordmark\";\nexport type { GiniaWordmarkProps } from \"./ginia-wordmark\";\n"],"mappings":"AAAA,SAAS,eAAe,wBAAwB;","names":[]}
@@ -38,6 +38,7 @@ __reExport(ui_exports, require("./dialog"), module.exports);
38
38
  __reExport(ui_exports, require("./drawer"), module.exports);
39
39
  __reExport(ui_exports, require("./dropdown-menu"), module.exports);
40
40
  __reExport(ui_exports, require("./form"), module.exports);
41
+ __reExport(ui_exports, require("./ginia-wordmark"), module.exports);
41
42
  __reExport(ui_exports, require("./hover-card"), module.exports);
42
43
  __reExport(ui_exports, require("./icon"), module.exports);
43
44
  __reExport(ui_exports, require("./input"), module.exports);
@@ -74,6 +75,7 @@ __reExport(ui_exports, require("./toast"), module.exports);
74
75
  __reExport(ui_exports, require("./toggle"), module.exports);
75
76
  __reExport(ui_exports, require("./toggle-group"), module.exports);
76
77
  __reExport(ui_exports, require("./tooltip"), module.exports);
78
+ __reExport(ui_exports, require("./typography"), module.exports);
77
79
  // Annotate the CommonJS export names for ESM import in node:
78
80
  0 && (module.exports = {
79
81
  ...require("./accordion"),
@@ -99,6 +101,7 @@ __reExport(ui_exports, require("./tooltip"), module.exports);
99
101
  ...require("./drawer"),
100
102
  ...require("./dropdown-menu"),
101
103
  ...require("./form"),
104
+ ...require("./ginia-wordmark"),
102
105
  ...require("./hover-card"),
103
106
  ...require("./icon"),
104
107
  ...require("./input"),
@@ -134,6 +137,7 @@ __reExport(ui_exports, require("./tooltip"), module.exports);
134
137
  ...require("./toast"),
135
138
  ...require("./toggle"),
136
139
  ...require("./toggle-group"),
137
- ...require("./tooltip")
140
+ ...require("./tooltip"),
141
+ ...require("./typography")
138
142
  });
139
143
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ui/index.ts"],"sourcesContent":["export * from \"./accordion\";\nexport * from \"./alert\";\nexport * from \"./alert-dialog\";\nexport * from \"./aspect-ratio\";\nexport * from \"./autocomplete\";\nexport * from \"./avatar\";\nexport * from \"./background\";\nexport * from \"./badge\";\nexport * from \"./breadcrumb\";\nexport * from \"./button\";\nexport * from \"./calendar\";\nexport * from \"./card\";\nexport * from \"./carousel\";\nexport * from \"./checkbox\";\nexport * from \"./collapsible\";\nexport * from \"./combobox\";\nexport * from \"./command\";\nexport * from \"./context-menu\";\nexport * from \"./date-picker\";\nexport * from \"./dialog\";\nexport * from \"./drawer\";\nexport * from \"./dropdown-menu\";\nexport * from \"./form\";\nexport * from \"./hover-card\";\nexport * from \"./icon\";\nexport * from \"./input\";\nexport * from \"./input-field\";\nexport * from \"./input-otp\";\nexport * from \"./label\";\nexport * from \"./logo\";\nexport * from \"./loading-state\";\nexport * from \"./menubar\";\nexport * from \"./month-year-picker\";\nexport * from \"./multi-select\";\nexport * from \"./navigation-menu\";\nexport * from \"./pagination\";\nexport * from \"./popover\";\nexport * from \"./progress\";\nexport * from \"./radio-group\";\nexport * from \"./resizable\";\nexport * from \"./rich-text-editor\";\nexport * from \"./scroll-area\";\nexport * from \"./section-loader\";\nexport * from \"./select\";\nexport * from \"./separator\";\nexport * from \"./sheet\";\nexport * from \"./skeleton\";\nexport * from \"./slider\";\nexport * from \"./sonner\";\nexport * from \"./spinner\";\nexport * from \"./switch\";\nexport * from \"./table\";\nexport * from \"./tabs\";\nexport * from \"./tag-input\";\nexport * from \"./textarea\";\nexport * from \"./toast\";\nexport * from \"./toggle\";\nexport * from \"./toggle-group\";\nexport * from \"./tooltip\";\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,uBAAc,wBAAd;AACA,uBAAc,oBADd;AAEA,uBAAc,2BAFd;AAGA,uBAAc,2BAHd;AAIA,uBAAc,2BAJd;AAKA,uBAAc,qBALd;AAMA,uBAAc,yBANd;AAOA,uBAAc,oBAPd;AAQA,uBAAc,yBARd;AASA,uBAAc,qBATd;AAUA,uBAAc,uBAVd;AAWA,uBAAc,mBAXd;AAYA,uBAAc,uBAZd;AAaA,uBAAc,uBAbd;AAcA,uBAAc,0BAdd;AAeA,uBAAc,uBAfd;AAgBA,uBAAc,sBAhBd;AAiBA,uBAAc,2BAjBd;AAkBA,uBAAc,0BAlBd;AAmBA,uBAAc,qBAnBd;AAoBA,uBAAc,qBApBd;AAqBA,uBAAc,4BArBd;AAsBA,uBAAc,mBAtBd;AAuBA,uBAAc,yBAvBd;AAwBA,uBAAc,mBAxBd;AAyBA,uBAAc,oBAzBd;AA0BA,uBAAc,0BA1Bd;AA2BA,uBAAc,wBA3Bd;AA4BA,uBAAc,oBA5Bd;AA6BA,uBAAc,mBA7Bd;AA8BA,uBAAc,4BA9Bd;AA+BA,uBAAc,sBA/Bd;AAgCA,uBAAc,gCAhCd;AAiCA,uBAAc,2BAjCd;AAkCA,uBAAc,8BAlCd;AAmCA,uBAAc,yBAnCd;AAoCA,uBAAc,sBApCd;AAqCA,uBAAc,uBArCd;AAsCA,uBAAc,0BAtCd;AAuCA,uBAAc,wBAvCd;AAwCA,uBAAc,+BAxCd;AAyCA,uBAAc,0BAzCd;AA0CA,uBAAc,6BA1Cd;AA2CA,uBAAc,qBA3Cd;AA4CA,uBAAc,wBA5Cd;AA6CA,uBAAc,oBA7Cd;AA8CA,uBAAc,uBA9Cd;AA+CA,uBAAc,qBA/Cd;AAgDA,uBAAc,qBAhDd;AAiDA,uBAAc,sBAjDd;AAkDA,uBAAc,qBAlDd;AAmDA,uBAAc,oBAnDd;AAoDA,uBAAc,mBApDd;AAqDA,uBAAc,wBArDd;AAsDA,uBAAc,uBAtDd;AAuDA,uBAAc,oBAvDd;AAwDA,uBAAc,qBAxDd;AAyDA,uBAAc,2BAzDd;AA0DA,uBAAc,sBA1Dd;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/ui/index.ts"],"sourcesContent":["export * from \"./accordion\";\nexport * from \"./alert\";\nexport * from \"./alert-dialog\";\nexport * from \"./aspect-ratio\";\nexport * from \"./autocomplete\";\nexport * from \"./avatar\";\nexport * from \"./background\";\nexport * from \"./badge\";\nexport * from \"./breadcrumb\";\nexport * from \"./button\";\nexport * from \"./calendar\";\nexport * from \"./card\";\nexport * from \"./carousel\";\nexport * from \"./checkbox\";\nexport * from \"./collapsible\";\nexport * from \"./combobox\";\nexport * from \"./command\";\nexport * from \"./context-menu\";\nexport * from \"./date-picker\";\nexport * from \"./dialog\";\nexport * from \"./drawer\";\nexport * from \"./dropdown-menu\";\nexport * from \"./form\";\nexport * from \"./ginia-wordmark\";\nexport * from \"./hover-card\";\nexport * from \"./icon\";\nexport * from \"./input\";\nexport * from \"./input-field\";\nexport * from \"./input-otp\";\nexport * from \"./label\";\nexport * from \"./logo\";\nexport * from \"./loading-state\";\nexport * from \"./menubar\";\nexport * from \"./month-year-picker\";\nexport * from \"./multi-select\";\nexport * from \"./navigation-menu\";\nexport * from \"./pagination\";\nexport * from \"./popover\";\nexport * from \"./progress\";\nexport * from \"./radio-group\";\nexport * from \"./resizable\";\nexport * from \"./rich-text-editor\";\nexport * from \"./scroll-area\";\nexport * from \"./section-loader\";\nexport * from \"./select\";\nexport * from \"./separator\";\nexport * from \"./sheet\";\nexport * from \"./skeleton\";\nexport * from \"./slider\";\nexport * from \"./sonner\";\nexport * from \"./spinner\";\nexport * from \"./switch\";\nexport * from \"./table\";\nexport * from \"./tabs\";\nexport * from \"./tag-input\";\nexport * from \"./textarea\";\nexport * from \"./toast\";\nexport * from \"./toggle\";\nexport * from \"./toggle-group\";\nexport * from \"./tooltip\";\nexport * from \"./typography\";\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,uBAAc,wBAAd;AACA,uBAAc,oBADd;AAEA,uBAAc,2BAFd;AAGA,uBAAc,2BAHd;AAIA,uBAAc,2BAJd;AAKA,uBAAc,qBALd;AAMA,uBAAc,yBANd;AAOA,uBAAc,oBAPd;AAQA,uBAAc,yBARd;AASA,uBAAc,qBATd;AAUA,uBAAc,uBAVd;AAWA,uBAAc,mBAXd;AAYA,uBAAc,uBAZd;AAaA,uBAAc,uBAbd;AAcA,uBAAc,0BAdd;AAeA,uBAAc,uBAfd;AAgBA,uBAAc,sBAhBd;AAiBA,uBAAc,2BAjBd;AAkBA,uBAAc,0BAlBd;AAmBA,uBAAc,qBAnBd;AAoBA,uBAAc,qBApBd;AAqBA,uBAAc,4BArBd;AAsBA,uBAAc,mBAtBd;AAuBA,uBAAc,6BAvBd;AAwBA,uBAAc,yBAxBd;AAyBA,uBAAc,mBAzBd;AA0BA,uBAAc,oBA1Bd;AA2BA,uBAAc,0BA3Bd;AA4BA,uBAAc,wBA5Bd;AA6BA,uBAAc,oBA7Bd;AA8BA,uBAAc,mBA9Bd;AA+BA,uBAAc,4BA/Bd;AAgCA,uBAAc,sBAhCd;AAiCA,uBAAc,gCAjCd;AAkCA,uBAAc,2BAlCd;AAmCA,uBAAc,8BAnCd;AAoCA,uBAAc,yBApCd;AAqCA,uBAAc,sBArCd;AAsCA,uBAAc,uBAtCd;AAuCA,uBAAc,0BAvCd;AAwCA,uBAAc,wBAxCd;AAyCA,uBAAc,+BAzCd;AA0CA,uBAAc,0BA1Cd;AA2CA,uBAAc,6BA3Cd;AA4CA,uBAAc,qBA5Cd;AA6CA,uBAAc,wBA7Cd;AA8CA,uBAAc,oBA9Cd;AA+CA,uBAAc,uBA/Cd;AAgDA,uBAAc,qBAhDd;AAiDA,uBAAc,qBAjDd;AAkDA,uBAAc,sBAlDd;AAmDA,uBAAc,qBAnDd;AAoDA,uBAAc,oBApDd;AAqDA,uBAAc,mBArDd;AAsDA,uBAAc,wBAtDd;AAuDA,uBAAc,uBAvDd;AAwDA,uBAAc,oBAxDd;AAyDA,uBAAc,qBAzDd;AA0DA,uBAAc,2BA1Dd;AA2DA,uBAAc,sBA3Dd;AA4DA,uBAAc,yBA5Dd;","names":[]}
@@ -21,6 +21,7 @@ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, Di
21
21
  export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './drawer/drawer.cjs';
22
22
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './dropdown-menu/dropdown-menu.cjs';
23
23
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField } from './form/form.cjs';
24
+ export { GiniaWordmark, GiniaWordmarkProps, wordmarkVariants } from './ginia-wordmark/ginia-wordmark.cjs';
24
25
  export { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card/hover-card.cjs';
25
26
  export { Icon, IconProps, IconSize, iconSizes } from './icon/icon.cjs';
26
27
  export { Input } from './input/input.cjs';
@@ -57,6 +58,7 @@ export { Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, T
57
58
  export { Toggle, toggleVariants } from './toggle/toggle.cjs';
58
59
  export { ToggleGroup, ToggleGroupItem } from './toggle-group/toggle-group.cjs';
59
60
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip/tooltip.cjs';
61
+ export { Typography, TypographyProps, typographyVariants } from './typography/typography.cjs';
60
62
  export { toast } from 'sonner';
61
63
  import 'react';
62
64
  import '@radix-ui/react-accordion';
@@ -21,6 +21,7 @@ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, Di
21
21
  export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './drawer/drawer.js';
22
22
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './dropdown-menu/dropdown-menu.js';
23
23
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField } from './form/form.js';
24
+ export { GiniaWordmark, GiniaWordmarkProps, wordmarkVariants } from './ginia-wordmark/ginia-wordmark.js';
24
25
  export { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card/hover-card.js';
25
26
  export { Icon, IconProps, IconSize, iconSizes } from './icon/icon.js';
26
27
  export { Input } from './input/input.js';
@@ -57,6 +58,7 @@ export { Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, T
57
58
  export { Toggle, toggleVariants } from './toggle/toggle.js';
58
59
  export { ToggleGroup, ToggleGroupItem } from './toggle-group/toggle-group.js';
59
60
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip/tooltip.js';
61
+ export { Typography, TypographyProps, typographyVariants } from './typography/typography.js';
60
62
  export { toast } from 'sonner';
61
63
  import 'react';
62
64
  import '@radix-ui/react-accordion';
@@ -21,6 +21,7 @@ export * from "./dialog";
21
21
  export * from "./drawer";
22
22
  export * from "./dropdown-menu";
23
23
  export * from "./form";
24
+ export * from "./ginia-wordmark";
24
25
  export * from "./hover-card";
25
26
  export * from "./icon";
26
27
  export * from "./input";
@@ -57,4 +58,5 @@ export * from "./toast";
57
58
  export * from "./toggle";
58
59
  export * from "./toggle-group";
59
60
  export * from "./tooltip";
61
+ export * from "./typography";
60
62
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ui/index.ts"],"sourcesContent":["export * from \"./accordion\";\nexport * from \"./alert\";\nexport * from \"./alert-dialog\";\nexport * from \"./aspect-ratio\";\nexport * from \"./autocomplete\";\nexport * from \"./avatar\";\nexport * from \"./background\";\nexport * from \"./badge\";\nexport * from \"./breadcrumb\";\nexport * from \"./button\";\nexport * from \"./calendar\";\nexport * from \"./card\";\nexport * from \"./carousel\";\nexport * from \"./checkbox\";\nexport * from \"./collapsible\";\nexport * from \"./combobox\";\nexport * from \"./command\";\nexport * from \"./context-menu\";\nexport * from \"./date-picker\";\nexport * from \"./dialog\";\nexport * from \"./drawer\";\nexport * from \"./dropdown-menu\";\nexport * from \"./form\";\nexport * from \"./hover-card\";\nexport * from \"./icon\";\nexport * from \"./input\";\nexport * from \"./input-field\";\nexport * from \"./input-otp\";\nexport * from \"./label\";\nexport * from \"./logo\";\nexport * from \"./loading-state\";\nexport * from \"./menubar\";\nexport * from \"./month-year-picker\";\nexport * from \"./multi-select\";\nexport * from \"./navigation-menu\";\nexport * from \"./pagination\";\nexport * from \"./popover\";\nexport * from \"./progress\";\nexport * from \"./radio-group\";\nexport * from \"./resizable\";\nexport * from \"./rich-text-editor\";\nexport * from \"./scroll-area\";\nexport * from \"./section-loader\";\nexport * from \"./select\";\nexport * from \"./separator\";\nexport * from \"./sheet\";\nexport * from \"./skeleton\";\nexport * from \"./slider\";\nexport * from \"./sonner\";\nexport * from \"./spinner\";\nexport * from \"./switch\";\nexport * from \"./table\";\nexport * from \"./tabs\";\nexport * from \"./tag-input\";\nexport * from \"./textarea\";\nexport * from \"./toast\";\nexport * from \"./toggle\";\nexport * from \"./toggle-group\";\nexport * from \"./tooltip\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/ui/index.ts"],"sourcesContent":["export * from \"./accordion\";\nexport * from \"./alert\";\nexport * from \"./alert-dialog\";\nexport * from \"./aspect-ratio\";\nexport * from \"./autocomplete\";\nexport * from \"./avatar\";\nexport * from \"./background\";\nexport * from \"./badge\";\nexport * from \"./breadcrumb\";\nexport * from \"./button\";\nexport * from \"./calendar\";\nexport * from \"./card\";\nexport * from \"./carousel\";\nexport * from \"./checkbox\";\nexport * from \"./collapsible\";\nexport * from \"./combobox\";\nexport * from \"./command\";\nexport * from \"./context-menu\";\nexport * from \"./date-picker\";\nexport * from \"./dialog\";\nexport * from \"./drawer\";\nexport * from \"./dropdown-menu\";\nexport * from \"./form\";\nexport * from \"./ginia-wordmark\";\nexport * from \"./hover-card\";\nexport * from \"./icon\";\nexport * from \"./input\";\nexport * from \"./input-field\";\nexport * from \"./input-otp\";\nexport * from \"./label\";\nexport * from \"./logo\";\nexport * from \"./loading-state\";\nexport * from \"./menubar\";\nexport * from \"./month-year-picker\";\nexport * from \"./multi-select\";\nexport * from \"./navigation-menu\";\nexport * from \"./pagination\";\nexport * from \"./popover\";\nexport * from \"./progress\";\nexport * from \"./radio-group\";\nexport * from \"./resizable\";\nexport * from \"./rich-text-editor\";\nexport * from \"./scroll-area\";\nexport * from \"./section-loader\";\nexport * from \"./select\";\nexport * from \"./separator\";\nexport * from \"./sheet\";\nexport * from \"./skeleton\";\nexport * from \"./slider\";\nexport * from \"./sonner\";\nexport * from \"./spinner\";\nexport * from \"./switch\";\nexport * from \"./table\";\nexport * from \"./tabs\";\nexport * from \"./tag-input\";\nexport * from \"./textarea\";\nexport * from \"./toast\";\nexport * from \"./toggle\";\nexport * from \"./toggle-group\";\nexport * from \"./tooltip\";\nexport * from \"./typography\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var typography_exports = {};
20
+ __export(typography_exports, {
21
+ Typography: () => import_typography.Typography,
22
+ typographyVariants: () => import_typography.typographyVariants
23
+ });
24
+ module.exports = __toCommonJS(typography_exports);
25
+ var import_typography = require("./typography");
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ Typography,
29
+ typographyVariants
30
+ });
31
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/typography/index.ts"],"sourcesContent":["export { Typography, typographyVariants } from \"./typography\";\nexport type { TypographyProps } from \"./typography\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA+C;","names":[]}
@@ -0,0 +1,5 @@
1
+ export { Typography, TypographyProps, typographyVariants } from './typography.cjs';
2
+ import 'react/jsx-runtime';
3
+ import 'class-variance-authority/types';
4
+ import 'react';
5
+ import 'class-variance-authority';
@@ -0,0 +1,5 @@
1
+ export { Typography, TypographyProps, typographyVariants } from './typography.js';
2
+ import 'react/jsx-runtime';
3
+ import 'class-variance-authority/types';
4
+ import 'react';
5
+ import 'class-variance-authority';
@@ -0,0 +1,6 @@
1
+ import { Typography, typographyVariants } from "./typography";
2
+ export {
3
+ Typography,
4
+ typographyVariants
5
+ };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/typography/index.ts"],"sourcesContent":["export { Typography, typographyVariants } from \"./typography\";\nexport type { TypographyProps } from \"./typography\";\n"],"mappings":"AAAA,SAAS,YAAY,0BAA0B;","names":[]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var typography_exports = {};
21
+ __export(typography_exports, {
22
+ Typography: () => Typography,
23
+ typographyVariants: () => typographyVariants
24
+ });
25
+ module.exports = __toCommonJS(typography_exports);
26
+ var import_jsx_runtime = require("react/jsx-runtime");
27
+ var import_react_slot = require("@radix-ui/react-slot");
28
+ var import_class_variance_authority = require("class-variance-authority");
29
+ var import_utils = require("../../../lib/utils");
30
+ const typographyVariants = (0, import_class_variance_authority.cva)("font-sans", {
31
+ variants: {
32
+ variant: {
33
+ display: "text-4xl font-bold tracking-tight md:text-5xl",
34
+ h1: "text-3xl font-semibold tracking-tight md:text-4xl",
35
+ h2: "text-2xl font-semibold tracking-tight md:text-3xl",
36
+ h3: "text-xl font-semibold tracking-tight md:text-2xl",
37
+ h4: "text-lg font-semibold md:text-xl",
38
+ h5: "text-base font-semibold md:text-lg",
39
+ h6: "text-sm font-semibold md:text-base",
40
+ lead: "text-lg text-muted-foreground md:text-xl",
41
+ body: "text-base leading-relaxed",
42
+ "body-sm": "text-sm leading-relaxed",
43
+ caption: "text-xs text-muted-foreground",
44
+ overline: "text-xs font-medium uppercase tracking-wider text-muted-foreground"
45
+ }
46
+ },
47
+ defaultVariants: {
48
+ variant: "body"
49
+ }
50
+ });
51
+ const variantToDefaultTag = {
52
+ display: "div",
53
+ h1: "h1",
54
+ h2: "h2",
55
+ h3: "h3",
56
+ h4: "h4",
57
+ h5: "h5",
58
+ h6: "h6",
59
+ lead: "p",
60
+ body: "p",
61
+ "body-sm": "p",
62
+ caption: "p",
63
+ overline: "p"
64
+ };
65
+ function Typography({
66
+ className,
67
+ variant = "body",
68
+ as,
69
+ asChild = false,
70
+ ...props
71
+ }) {
72
+ const Comp = asChild ? import_react_slot.Slot : as ?? variantToDefaultTag[variant ?? "body"];
73
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comp, { className: (0, import_utils.cn)(typographyVariants({ variant }), className), "data-slot": "typography", ...props });
74
+ }
75
+ // Annotate the CommonJS export names for ESM import in node:
76
+ 0 && (module.exports = {
77
+ Typography,
78
+ typographyVariants
79
+ });
80
+ //# sourceMappingURL=typography.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/typography/typography.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../../lib/utils\";\n\nconst typographyVariants = cva(\"font-sans\", {\n variants: {\n variant: {\n display: \"text-4xl font-bold tracking-tight md:text-5xl\",\n h1: \"text-3xl font-semibold tracking-tight md:text-4xl\",\n h2: \"text-2xl font-semibold tracking-tight md:text-3xl\",\n h3: \"text-xl font-semibold tracking-tight md:text-2xl\",\n h4: \"text-lg font-semibold md:text-xl\",\n h5: \"text-base font-semibold md:text-lg\",\n h6: \"text-sm font-semibold md:text-base\",\n lead: \"text-lg text-muted-foreground md:text-xl\",\n body: \"text-base leading-relaxed\",\n \"body-sm\": \"text-sm leading-relaxed\",\n caption: \"text-xs text-muted-foreground\",\n overline: \"text-xs font-medium uppercase tracking-wider text-muted-foreground\",\n },\n },\n defaultVariants: {\n variant: \"body\",\n },\n});\n\nconst variantToDefaultTag: Record<\n NonNullable<VariantProps<typeof typographyVariants>[\"variant\"]>,\n React.ElementType\n> = {\n display: \"div\",\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n lead: \"p\",\n body: \"p\",\n \"body-sm\": \"p\",\n caption: \"p\",\n overline: \"p\",\n};\n\nexport interface TypographyProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof typographyVariants> {\n asChild?: boolean;\n as?: React.ElementType;\n}\n\nfunction Typography({\n className,\n variant = \"body\",\n as,\n asChild = false,\n ...props\n}: TypographyProps) {\n const Comp = asChild ? Slot : (as ?? variantToDefaultTag[variant ?? \"body\"]);\n\n return (\n <Comp className={cn(typographyVariants({ variant }), className)} data-slot=\"typography\" {...props} />\n );\n}\n\nexport { Typography, typographyVariants };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEI;AA9DJ,wBAAqB;AACrB,sCAAuC;AAEvC,mBAAmB;AAEnB,MAAM,yBAAqB,qCAAI,aAAa;AAAA,EAC1C,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AACF,CAAC;AAED,MAAM,sBAGF;AAAA,EACF,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AACZ;AASA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAAoB;AAClB,QAAM,OAAO,UAAU,yBAAQ,MAAM,oBAAoB,WAAW,MAAM;AAE1E,SACE,4CAAC,QAAK,eAAW,iBAAG,mBAAmB,EAAE,QAAQ,CAAC,GAAG,SAAS,GAAG,aAAU,cAAc,GAAG,OAAO;AAEvG;","names":[]}
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const typographyVariants: (props?: ({
7
+ variant?: "body" | "caption" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "display" | "lead" | "body-sm" | "overline" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface TypographyProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof typographyVariants> {
10
+ asChild?: boolean;
11
+ as?: React.ElementType;
12
+ }
13
+ declare function Typography({ className, variant, as, asChild, ...props }: TypographyProps): react_jsx_runtime.JSX.Element;
14
+
15
+ export { Typography, type TypographyProps, typographyVariants };
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const typographyVariants: (props?: ({
7
+ variant?: "body" | "caption" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "display" | "lead" | "body-sm" | "overline" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ interface TypographyProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof typographyVariants> {
10
+ asChild?: boolean;
11
+ as?: React.ElementType;
12
+ }
13
+ declare function Typography({ className, variant, as, asChild, ...props }: TypographyProps): react_jsx_runtime.JSX.Element;
14
+
15
+ export { Typography, type TypographyProps, typographyVariants };
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../../../lib/utils";
6
+ const typographyVariants = cva("font-sans", {
7
+ variants: {
8
+ variant: {
9
+ display: "text-4xl font-bold tracking-tight md:text-5xl",
10
+ h1: "text-3xl font-semibold tracking-tight md:text-4xl",
11
+ h2: "text-2xl font-semibold tracking-tight md:text-3xl",
12
+ h3: "text-xl font-semibold tracking-tight md:text-2xl",
13
+ h4: "text-lg font-semibold md:text-xl",
14
+ h5: "text-base font-semibold md:text-lg",
15
+ h6: "text-sm font-semibold md:text-base",
16
+ lead: "text-lg text-muted-foreground md:text-xl",
17
+ body: "text-base leading-relaxed",
18
+ "body-sm": "text-sm leading-relaxed",
19
+ caption: "text-xs text-muted-foreground",
20
+ overline: "text-xs font-medium uppercase tracking-wider text-muted-foreground"
21
+ }
22
+ },
23
+ defaultVariants: {
24
+ variant: "body"
25
+ }
26
+ });
27
+ const variantToDefaultTag = {
28
+ display: "div",
29
+ h1: "h1",
30
+ h2: "h2",
31
+ h3: "h3",
32
+ h4: "h4",
33
+ h5: "h5",
34
+ h6: "h6",
35
+ lead: "p",
36
+ body: "p",
37
+ "body-sm": "p",
38
+ caption: "p",
39
+ overline: "p"
40
+ };
41
+ function Typography({
42
+ className,
43
+ variant = "body",
44
+ as,
45
+ asChild = false,
46
+ ...props
47
+ }) {
48
+ const Comp = asChild ? Slot : as ?? variantToDefaultTag[variant ?? "body"];
49
+ return /* @__PURE__ */ jsx(Comp, { className: cn(typographyVariants({ variant }), className), "data-slot": "typography", ...props });
50
+ }
51
+ export {
52
+ Typography,
53
+ typographyVariants
54
+ };
55
+ //# sourceMappingURL=typography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ui/typography/typography.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../../lib/utils\";\n\nconst typographyVariants = cva(\"font-sans\", {\n variants: {\n variant: {\n display: \"text-4xl font-bold tracking-tight md:text-5xl\",\n h1: \"text-3xl font-semibold tracking-tight md:text-4xl\",\n h2: \"text-2xl font-semibold tracking-tight md:text-3xl\",\n h3: \"text-xl font-semibold tracking-tight md:text-2xl\",\n h4: \"text-lg font-semibold md:text-xl\",\n h5: \"text-base font-semibold md:text-lg\",\n h6: \"text-sm font-semibold md:text-base\",\n lead: \"text-lg text-muted-foreground md:text-xl\",\n body: \"text-base leading-relaxed\",\n \"body-sm\": \"text-sm leading-relaxed\",\n caption: \"text-xs text-muted-foreground\",\n overline: \"text-xs font-medium uppercase tracking-wider text-muted-foreground\",\n },\n },\n defaultVariants: {\n variant: \"body\",\n },\n});\n\nconst variantToDefaultTag: Record<\n NonNullable<VariantProps<typeof typographyVariants>[\"variant\"]>,\n React.ElementType\n> = {\n display: \"div\",\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n lead: \"p\",\n body: \"p\",\n \"body-sm\": \"p\",\n caption: \"p\",\n overline: \"p\",\n};\n\nexport interface TypographyProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof typographyVariants> {\n asChild?: boolean;\n as?: React.ElementType;\n}\n\nfunction Typography({\n className,\n variant = \"body\",\n as,\n asChild = false,\n ...props\n}: TypographyProps) {\n const Comp = asChild ? Slot : (as ?? variantToDefaultTag[variant ?? \"body\"]);\n\n return (\n <Comp className={cn(typographyVariants({ variant }), className)} data-slot=\"typography\" {...props} />\n );\n}\n\nexport { Typography, typographyVariants };\n"],"mappings":";AAiEI;AA9DJ,SAAS,YAAY;AACrB,SAAS,WAA8B;AAEvC,SAAS,UAAU;AAEnB,MAAM,qBAAqB,IAAI,aAAa;AAAA,EAC1C,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AACF,CAAC;AAED,MAAM,sBAGF;AAAA,EACF,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AACZ;AASA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAAoB;AAClB,QAAM,OAAO,UAAU,OAAQ,MAAM,oBAAoB,WAAW,MAAM;AAE1E,SACE,oBAAC,QAAK,WAAW,GAAG,mBAAmB,EAAE,QAAQ,CAAC,GAAG,SAAS,GAAG,aAAU,cAAc,GAAG,OAAO;AAEvG;","names":[]}
package/dist/index.d.cts CHANGED
@@ -27,6 +27,7 @@ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, Di
27
27
  export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './components/ui/drawer/drawer.cjs';
28
28
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/ui/dropdown-menu/dropdown-menu.cjs';
29
29
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField } from './components/ui/form/form.cjs';
30
+ export { GiniaWordmark, GiniaWordmarkProps, wordmarkVariants } from './components/ui/ginia-wordmark/ginia-wordmark.cjs';
30
31
  export { HoverCard, HoverCardContent, HoverCardTrigger } from './components/ui/hover-card/hover-card.cjs';
31
32
  export { Icon, IconProps, IconSize, iconSizes } from './components/ui/icon/icon.cjs';
32
33
  export { Input } from './components/ui/input/input.cjs';
@@ -63,6 +64,7 @@ export { Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, T
63
64
  export { Toggle, toggleVariants } from './components/ui/toggle/toggle.cjs';
64
65
  export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group/toggle-group.cjs';
65
66
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './components/ui/tooltip/tooltip.cjs';
67
+ export { Typography, TypographyProps, typographyVariants } from './components/ui/typography/typography.cjs';
66
68
  export { Action, CVActivityItem, CVCertificationItem, CVDocumentItem, CVEducationItem, CVExperienceBaseItem, CVExperienceItem, CVSkillItem, CandidateProfile, CertificationWithAction, DocumentWithAction, ExperienceWithAction, ResumeAward, ResumeEducation, ResumeExperience, ResumeMenuSlot, ResumeProps, ResumeSavePayload, ResumeSkill, SkillWithAction } from './components/domain/resume/types.cjs';
67
69
  export { Resume } from './components/domain/resume/resume.cjs';
68
70
  export { ResumeEditor, ResumeEditorProps } from './components/domain/resume/resume-editor/resume-editor.cjs';
package/dist/index.d.ts CHANGED
@@ -27,6 +27,7 @@ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, Di
27
27
  export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './components/ui/drawer/drawer.js';
28
28
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/ui/dropdown-menu/dropdown-menu.js';
29
29
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField } from './components/ui/form/form.js';
30
+ export { GiniaWordmark, GiniaWordmarkProps, wordmarkVariants } from './components/ui/ginia-wordmark/ginia-wordmark.js';
30
31
  export { HoverCard, HoverCardContent, HoverCardTrigger } from './components/ui/hover-card/hover-card.js';
31
32
  export { Icon, IconProps, IconSize, iconSizes } from './components/ui/icon/icon.js';
32
33
  export { Input } from './components/ui/input/input.js';
@@ -63,6 +64,7 @@ export { Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, T
63
64
  export { Toggle, toggleVariants } from './components/ui/toggle/toggle.js';
64
65
  export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group/toggle-group.js';
65
66
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './components/ui/tooltip/tooltip.js';
67
+ export { Typography, TypographyProps, typographyVariants } from './components/ui/typography/typography.js';
66
68
  export { Action, CVActivityItem, CVCertificationItem, CVDocumentItem, CVEducationItem, CVExperienceBaseItem, CVExperienceItem, CVSkillItem, CandidateProfile, CertificationWithAction, DocumentWithAction, ExperienceWithAction, ResumeAward, ResumeEducation, ResumeExperience, ResumeMenuSlot, ResumeProps, ResumeSavePayload, ResumeSkill, SkillWithAction } from './components/domain/resume/types.js';
67
69
  export { Resume } from './components/domain/resume/resume.js';
68
70
  export { ResumeEditor, ResumeEditorProps } from './components/domain/resume/resume-editor/resume-editor.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ginia/ui",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "Ginia Design System — Unified UI component library for all Ginia hubs",
5
5
  "license": "MIT",
6
6
  "private": false,