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.