read_cv_data() now requires the openxlsx2 package instead of readxl.
Remove readxl and add openxlsx2 to any explicit dependencies in your
own projects that call read_cv_data() directly.
create_cv() no longer falls back to a bundled placeholder image when
photo = NULL in render mode. Omitting photo now produces a
single-column header layout with no image. Supply a path explicitly to
restore the two-column layout with a profile photo.
Resume variant. create_cv() and read_cv_data() gain a variant
argument ("cv" or "resume"). When variant = "resume", only rows where
include_in_resume is checked in the workbook are included in the rendered
output. Every section sheet now carries an include_in_resume column for
row-level control.
Font Awesome icons. create_cv() gains a use_icons argument
("fontawesome" or "none"). When "fontawesome" (the default), contact
fields in the CV header are rendered with Font Awesome icons via the Typst
@preview/fontawesome package. Fields with no icon equivalent fall back to
plain text with a warning. The new exported function cv_contact_line()
assembles the contact line and can be called directly in custom templates.
Workbook-controlled theming. A new theme sheet in the workbook
controls fonts, colors, and page layout. Keys map directly to the Typst
style block and the Quarto format: typst: YAML block, both of which are
now injected by create_cv() via sentinel substitution. If the theme
sheet is absent, built-in defaults are used and individual missing keys are
filled from defaults, so partial theme sheets are supported.
add_section(). New exported function that adds a new sheet to an
existing curriculr workbook and registers it in the sections control
sheet. The new sheet is pre-populated with the standard column spine
including include_in_resume. The sections row is appended or updated in
place without touching the sheet's formatting.
No-photo header layout. When photo = NULL, CV.qmd now emits a
single full-width centered header block instead of a two-column grid with
an empty left column.
read_cv_data() reads the theme sheet as a named character vector keyed
by the key column, parallel to the profile sheet. Returns NULL if the
sheet is absent.read_cv_data() coerces all section columns to character after import,
including numeric year columns and logical boolean columns, giving the
rendering pipeline a uniform contract.read_cv_data() gains a .coerce_col() internal helper that normalizes
NA strings produced by as.character(NA) back to NA_character_.create_cv() injects variant and use_icons into CV.qmd as Quarto
params so the Quarto subprocess applies the same filtering and icon
settings as the calling R session.cv-data-template.xlsx template workbook gains a theme sheet with
all twelve default theming keys and a description column for in-workbook
documentation. The readme sheet is updated to document the theme sheet
and to reflect that include_in_resume is now present on all section
sheets..cv_theme_defaults(), .resolve_theme(),
.build_format_block(), .build_typst_theme_block(), and .fa_icon_map()
are added to support theming and icon assembly.openxlsx2 added to Imports.readxl removed from Imports.create_cv() has been redesigned. The old scaffolding behavior is replaced
by two distinct modes triggered by whether data is supplied or not.create_cv() scaffold mode (no arguments) copies the template workbook
and placeholder image to the current working directory and prints
step-by-step instructions. Does not render.create_cv() render mode (with data and photo) reads the workbook,
writes CV.qmd, and renders CV.pdf into the same directory as the
workbook.sections sheet support. The workbook now controls which sections are
rendered and in what order. Row order is render order. Deleting a row
excludes a section. Adding a row for any sheet that follows the standard
column schema renders it automatically.resolve_date_fun() which maps date_fun token strings ("date",
"year", "month_year", "year_only", "none") to R date formatting
functions.typst_escape(), cv_section(), and resolve_date_fun() are now exported.inst/templates/CV.qmd simplified -- section rendering is now driven by
iterating over cv$sections. The template uses sentinel strings that
create_cv() replaces with resolved paths at render time.read_cv_data() skips the readme sheet entirely.read_cv_data() validates the sections sheet column names on read.read_cv_data() returns the sections sheet in row order without sorting.read_cv_data() reads a curriculr-formatted Excel workbook into a named
list of data frames.cv_render_section() renders a CV section from a data frame into raw
Typst output inside a Quarto document.create_cv() scaffolded a new CV project with a template workbook,
placeholder image, and ready-to-render Quarto document.