From 6956f39835a62320933d1a783dc55c8dd4e997e2 Mon Sep 17 00:00:00 2001 From: Sina Atalay <79940989+sinaatalay@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:26:10 +0300 Subject: [PATCH] Address code review feedback on Hypothesis and classic_theme changes - Update hypothesis to latest version (>=6.151.9) - Remove pythonpath pytest config (was only needed for tests.strategies) - Consolidate classic_theme.py into single file with all design models - Move Hypothesis strategies from strategies.py into their test files - Add noqa: ARG001 to unused yaml_field_override CLI parameter - Fix lint and type errors across the codebase --- docs/docs_templating.py | 5 +- pyproject.toml | 3 +- schema.json | 4618 ++++++++--------- .../cli/render_command/render_command.py | 2 +- .../templater/entry_templates_from_input.py | 8 +- .../renderer/templater/string_processor.py | 5 +- .../schema/models/design/classic_theme.py | 594 ++- src/rendercv/schema/models/design/header.py | 125 - .../schema/models/design/templates.py | 228 - .../schema/models/design/typography.py | 192 - .../schema/models/design/typst_dimension.py | 4 + src/rendercv/schema/yaml_reader.py | 2 +- .../cli/render_command/test_render_command.py | 2 +- tests/renderer/templater/test_connections.py | 7 +- tests/renderer/templater/test_date.py | 21 +- .../test_entry_templates_from_input.py | 2 +- .../templater/test_string_processor.py | 56 +- .../bases/test_entry_with_complex_fields.py | 27 +- tests/schema/models/cv/test_section.py | 2 +- tests/schema/models/cv/test_social_network.py | 2 +- .../models/design/test_classic_theme.py | 2 +- .../models/design/test_typst_dimension.py | 16 +- tests/schema/models/settings/test_settings.py | 3 +- tests/strategies.py | 92 - uv.lock | 2 +- 25 files changed, 3010 insertions(+), 3010 deletions(-) delete mode 100644 src/rendercv/schema/models/design/header.py delete mode 100644 src/rendercv/schema/models/design/templates.py delete mode 100644 src/rendercv/schema/models/design/typography.py delete mode 100644 tests/strategies.py diff --git a/docs/docs_templating.py b/docs/docs_templating.py index 1f3a193e..4e239420 100644 --- a/docs/docs_templating.py +++ b/docs/docs_templating.py @@ -25,12 +25,13 @@ from rendercv.schema.models.cv.section import ( from rendercv.schema.models.cv.social_network import available_social_networks from rendercv.schema.models.design.built_in_design import available_themes from rendercv.schema.models.design.classic_theme import ( + Alignment, + BodyAlignment, Bullet, PageSize, + PhoneNumberFormatType, SectionTitleType, ) -from rendercv.schema.models.design.header import PhoneNumberFormatType -from rendercv.schema.models.design.typography import Alignment, BodyAlignment from rendercv.schema.models.design.font_family import available_font_families from rendercv.schema.models.locale.locale import available_locales from rendercv.schema.yaml_reader import read_yaml diff --git a/pyproject.toml b/pyproject.toml index 81b0f47d..302f5304 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -87,7 +87,7 @@ rendercv = "rendercv.cli.entry_point:entry_point" [dependency-groups] dev = [ "black>=26.3.1", # Format the code - "hypothesis>=6.100.0", # Property-based testing + "hypothesis>=6.151.9", # Property-based testing "prek>=0.3.6", # Run checks before committing (pre-commit alternative) "pytest>=9.0.2", # Run tests "pytest-cov>=7.0.0", # Coverage plugin for pytest with xdist support @@ -223,7 +223,6 @@ addopts = [ "--numprocesses=auto", # Number of processes in parallel ] testpaths = ["tests"] -pythonpath = ["."] [tool.codespell] skip = "*.md" diff --git a/schema.json b/schema.json index 5860e860..7a026caf 100644 --- a/schema.json +++ b/schema.json @@ -210,13 +210,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__1" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__1" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__1" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__1" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__1" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__1" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__1" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__1" @@ -228,7 +228,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__1" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__1" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__1" } }, "title": "ClassicTheme", @@ -826,13 +826,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__2" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__2" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__2" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__2" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__2" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__2" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__2" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__2" @@ -844,7 +844,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__2" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__2" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__2" } }, "title": "EmberTheme", @@ -866,13 +866,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__1" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__3" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__3" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__3" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__3" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__3" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__3" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__3" @@ -884,7 +884,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__3" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__3" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__3" } }, "title": "EngineeringclassicTheme", @@ -906,13 +906,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__3" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__4" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__4" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__4" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__4" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__4" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__4" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__4" @@ -924,7 +924,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__4" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__4" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__4" } }, "title": "EngineeringresumesTheme", @@ -1403,13 +1403,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__4" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__5" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__5" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__1" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__1" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__5" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__5" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__5" @@ -1421,7 +1421,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__5" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__5" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__5" } }, "title": "HarvardTheme", @@ -1835,13 +1835,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__5" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__6" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__6" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__5" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__5" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__6" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__6" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__6" @@ -1853,7 +1853,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__6" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__6" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__6" } }, "title": "InkTheme", @@ -2422,13 +2422,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__1" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__7" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__7" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__6" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__6" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__7" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__7" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__7" @@ -2440,7 +2440,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__7" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__7" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__7" } }, "title": "ModerncvTheme", @@ -2855,13 +2855,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__6" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__8" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__8" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__7" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__7" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__8" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__8" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__8" @@ -2873,7 +2873,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__8" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__8" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__8" } }, "title": "OpalTheme", @@ -3461,13 +3461,13 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Colors__7" }, "typography": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Typography__9" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Typography__9" }, "links": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Links__8" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Links__8" }, "header": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Header__9" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Header__9" }, "section_titles": { "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SectionTitles__9" @@ -3479,7 +3479,7 @@ "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Entries__9" }, "templates": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__Templates__9" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Templates__9" } }, "title": "Sb2novTheme", @@ -3885,6 +3885,223 @@ "title": "VietnameseLocale", "type": "object" }, + "rendercv__schema__models__design__classic_theme__Bold__1": { + "additionalProperties": false, + "properties": { + "name": { + "default": true, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": true, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Bold__2": { + "additionalProperties": false, + "properties": { + "name": { + "default": true, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": false, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Bold__3": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": false, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Bold__4": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": true, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Bold__5": { + "additionalProperties": false, + "properties": { + "name": { + "default": true, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": true, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Bold__6": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": false, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Bold__7": { + "additionalProperties": false, + "properties": { + "name": { + "default": true, + "description": "Whether to make the name bold. The default value is `true`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to make the headline bold. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to make connections bold. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": false, + "description": "Whether to make section titles bold. The default value is `true`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "Bold", + "type": "object" + }, "rendercv__schema__models__design__classic_theme__Colors__1": { "additionalProperties": false, "properties": { @@ -4440,6 +4657,581 @@ "title": "Colors", "type": "object" }, + "rendercv__schema__models__design__classic_theme__Connections__1": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": true, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": false, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Connections__2": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": false, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": false, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "·", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Connections__3": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": false, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": true, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "|", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Connections__4": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": false, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": false, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "•", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Connections__5": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": false, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": true, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "|", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Connections__6": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": true, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": false, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "•", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Connections__7": { + "additionalProperties": false, + "properties": { + "phone_number_format": { + "$ref": "#/$defs/PhoneNumberFormatType", + "default": "national", + "description": "Phone number format. The default value is `national`." + }, + "hyperlink": { + "default": true, + "description": "Make contact information clickable in the PDF. The default value is `true`.", + "title": "Hyperlink", + "type": "boolean" + }, + "show_icons": { + "default": false, + "description": "Show icons next to contact information. The default value is `true`.", + "title": "Show Icons", + "type": "boolean" + }, + "display_urls_instead_of_usernames": { + "default": true, + "description": "Display full URLs instead of labels. The default value is `false`.", + "title": "Display Urls Instead Of Usernames", + "type": "boolean" + }, + "separator": { + "default": "•", + "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", + "title": "Separator", + "type": "string" + }, + "space_between_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + } + }, + "title": "Connections", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__1": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION**, AREA\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "**DEGREE**", + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**DEGREE**`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "LOCATION\nDATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__2": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION** -- LOCATION\n*DEGREE_WITH_AREA*\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__3": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__4": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__5": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "**DEGREE**", + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**DEGREE**`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__6": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION** -- LOCATION\n*DEGREE_WITH_AREA*\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__7": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__8": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION** -- LOCATION\nDEGREE_WITH_AREA\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__EducationEntryTemplate__9": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**INSTITUTION**\n*DEGREE* *in* *AREA*\nSUMMARY\nHIGHLIGHTS", + "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "degree_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", + "title": "Degree Column" + }, + "date_and_location_column": { + "default": "*LOCATION*\n*DATE*", + "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "EducationEntryTemplate", + "type": "object" + }, "rendercv__schema__models__design__classic_theme__Entries__1": { "additionalProperties": false, "properties": { @@ -4863,6 +5655,937 @@ "title": "Entries", "type": "object" }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__1": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**COMPANY**, POSITION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "LOCATION\nDATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__2": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**COMPANY** -- LOCATION\n*POSITION*\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__3": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**POSITION**, COMPANY -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__4": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**POSITION**, COMPANY -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__5": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**COMPANY**, POSITION -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__6": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**COMPANY** -- LOCATION\n*POSITION*\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__7": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**POSITION**, COMPANY -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__8": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**COMPANY**, *POSITION* -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__9": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**POSITION**\n*COMPANY*\nSUMMARY\nHIGHLIGHTS", + "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "*LOCATION*\n*DATE*", + "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "ExperienceEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontFamily": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", + "default": "Source Sans 3", + "description": "The font family for body text. The default value is `Source Sans 3`." + }, + "name": { + "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", + "default": "Source Sans 3", + "description": "The font family for the name. The default value is `Source Sans 3`." + }, + "headline": { + "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", + "default": "Source Sans 3", + "description": "The font family for the headline. The default value is `Source Sans 3`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", + "default": "Source Sans 3", + "description": "The font family for connections. The default value is `Source Sans 3`." + }, + "section_titles": { + "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", + "default": "Source Sans 3", + "description": "The font family for section titles. The default value is `Source Sans 3`." + } + }, + "title": "FontFamily", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__1": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "30pt", + "description": "The font size for the name. The default value is `30pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for the headline. The default value is `10pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for connections. The default value is `10pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.4em", + "description": "The font size for section titles. The default value is `1.4em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__2": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "30pt", + "description": "The font size for the name. The default value is `30pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "10.5pt", + "description": "The font size for the headline. The default value is `10.5pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "9pt", + "description": "The font size for connections. The default value is `9pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.25em", + "description": "The font size for section titles. The default value is `1.25em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__3": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "25pt", + "description": "The font size for the name. The default value is `25pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for the headline. The default value is `10pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for connections. The default value is `10pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.2em", + "description": "The font size for section titles. The default value is `1.2em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__4": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "25pt", + "description": "The font size for the name. The default value is `25pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for the headline. The default value is `10pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "9pt", + "description": "The font size for connections. The default value is `9pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.3em", + "description": "The font size for section titles. The default value is `1.3em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__5": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "32pt", + "description": "The font size for the name. The default value is `32pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "11pt", + "description": "The font size for the headline. The default value is `11pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for connections. The default value is `10pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.4em", + "description": "The font size for section titles. The default value is `1.4em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__6": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "25pt", + "description": "The font size for the name. The default value is `25pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for the headline. The default value is `10pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for connections. The default value is `10pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.4em", + "description": "The font size for section titles. The default value is `1.4em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__FontSize__7": { + "additionalProperties": false, + "properties": { + "body": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for body text. The default value is `10pt`." + }, + "name": { + "$ref": "#/$defs/TypstDimension", + "default": "26pt", + "description": "The font size for the name. The default value is `26pt`." + }, + "headline": { + "$ref": "#/$defs/TypstDimension", + "default": "10pt", + "description": "The font size for the headline. The default value is `10pt`." + }, + "connections": { + "$ref": "#/$defs/TypstDimension", + "default": "9pt", + "description": "The font size for connections. The default value is `9pt`." + }, + "section_titles": { + "$ref": "#/$defs/TypstDimension", + "default": "1.2em", + "description": "The font size for section titles. The default value is `1.2em`." + } + }, + "title": "FontSize", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__1": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "center", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__1", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__2": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "center", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.6cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.6cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__2", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__3": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "left", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `left`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__1", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__4": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "center", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__3", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__5": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "center", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__4", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__6": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "left", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `left`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.5cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__5", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__7": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "left", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `left`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "4.15cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `4.15cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.3cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.3cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__1", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__8": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "center", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.3cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.3cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.3cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.3cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.6cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.6cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__6", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Header__9": { + "additionalProperties": false, + "properties": { + "alignment": { + "$ref": "#/$defs/Alignment", + "default": "center", + "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." + }, + "photo_width": { + "$ref": "#/$defs/TypstDimension", + "default": "3.5cm", + "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." + }, + "photo_position": { + "default": "left", + "description": "Photo position (left or right). The default value is `left`.", + "enum": [ + "left", + "right" + ], + "title": "Photo Position", + "type": "string" + }, + "photo_space_left": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "photo_space_right": { + "$ref": "#/$defs/TypstDimension", + "default": "0.4cm", + "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." + }, + "space_below_name": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_headline": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "space_below_connections": { + "$ref": "#/$defs/TypstDimension", + "default": "0.7cm", + "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." + }, + "connections": { + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Connections__7", + "description": "Contact information settings." + } + }, + "title": "Header", + "type": "object" + }, "rendercv__schema__models__design__classic_theme__Highlights__1": { "additionalProperties": false, "properties": { @@ -5159,6 +6882,329 @@ "title": "Highlights", "type": "object" }, + "rendercv__schema__models__design__classic_theme__Links__1": { + "additionalProperties": false, + "properties": { + "underline": { + "default": false, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__2": { + "additionalProperties": false, + "properties": { + "underline": { + "default": true, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__3": { + "additionalProperties": false, + "properties": { + "underline": { + "default": false, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__4": { + "additionalProperties": false, + "properties": { + "underline": { + "default": true, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__5": { + "additionalProperties": false, + "properties": { + "underline": { + "default": true, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__6": { + "additionalProperties": false, + "properties": { + "underline": { + "default": true, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__7": { + "additionalProperties": false, + "properties": { + "underline": { + "default": false, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__Links__8": { + "additionalProperties": false, + "properties": { + "underline": { + "default": true, + "description": "Underline hyperlinks. The default value is `false`.", + "title": "Underline", + "type": "boolean" + }, + "show_external_link_icon": { + "default": false, + "description": "Show an external link icon next to URLs. The default value is `false`.", + "title": "Show External Link Icon", + "type": "boolean" + } + }, + "title": "Links", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__1": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "LOCATION\nDATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__2": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__3": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__4": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__5": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__6": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__7": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__8": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME** -- LOCATION\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "DATE", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__NormalEntryTemplate__9": { + "additionalProperties": false, + "properties": { + "main_column": { + "default": "**NAME**\nSUMMARY\nHIGHLIGHTS", + "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", + "title": "Main Column", + "type": "string" + }, + "date_and_location_column": { + "default": "*LOCATION*\n*DATE*", + "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", + "title": "Date And Location Column", + "type": "string" + } + }, + "title": "NormalEntryTemplate", + "type": "object" + }, "rendercv__schema__models__design__classic_theme__Page__1": { "additionalProperties": false, "properties": { @@ -5965,6 +8011,130 @@ "title": "Sections", "type": "object" }, + "rendercv__schema__models__design__classic_theme__SmallCaps__1": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to use small caps for the name. The default value is `false`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to use small caps for the headline. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to use small caps for connections. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": false, + "description": "Whether to use small caps for section titles. The default value is `false`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "SmallCaps", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__SmallCaps__2": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to use small caps for the name. The default value is `false`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": true, + "description": "Whether to use small caps for the headline. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to use small caps for connections. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": true, + "description": "Whether to use small caps for section titles. The default value is `false`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "SmallCaps", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__SmallCaps__3": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to use small caps for the name. The default value is `false`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": false, + "description": "Whether to use small caps for the headline. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to use small caps for connections. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": true, + "description": "Whether to use small caps for section titles. The default value is `false`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "SmallCaps", + "type": "object" + }, + "rendercv__schema__models__design__classic_theme__SmallCaps__4": { + "additionalProperties": false, + "properties": { + "name": { + "default": false, + "description": "Whether to use small caps for the name. The default value is `false`.", + "title": "Name", + "type": "boolean" + }, + "headline": { + "default": true, + "description": "Whether to use small caps for the headline. The default value is `false`.", + "title": "Headline", + "type": "boolean" + }, + "connections": { + "default": false, + "description": "Whether to use small caps for connections. The default value is `false`.", + "title": "Connections", + "type": "boolean" + }, + "section_titles": { + "default": true, + "description": "Whether to use small caps for section titles. The default value is `false`.", + "title": "Section Titles", + "type": "boolean" + } + }, + "title": "SmallCaps", + "type": "object" + }, "rendercv__schema__models__design__classic_theme__Summary__1": { "additionalProperties": false, "properties": { @@ -6084,1602 +8254,7 @@ "title": "Summary", "type": "object" }, - "rendercv__schema__models__design__font_family__FontFamily": { - "enum": [ - "DejaVu Sans Mono", - "EB Garamond", - "Fontin", - "Gentium Book Plus", - "Lato", - "Libertinus Serif", - "Mukta", - "New Computer Modern", - "Noto Sans", - "Open Sans", - "Open Sauce Sans", - "Poppins", - "Raleway", - "Roboto", - "Source Sans 3", - "Ubuntu", - "XCharter" - ], - "type": "string" - }, - "rendercv__schema__models__design__header__Connections__1": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": true, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": false, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Connections__2": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": false, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": false, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "·", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Connections__3": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": false, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": true, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "|", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Connections__4": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": false, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": false, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "•", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Connections__5": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": false, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": true, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "|", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Connections__6": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": true, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": false, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "•", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Connections__7": { - "additionalProperties": false, - "properties": { - "phone_number_format": { - "$ref": "#/$defs/PhoneNumberFormatType", - "default": "national", - "description": "Phone number format. The default value is `national`." - }, - "hyperlink": { - "default": true, - "description": "Make contact information clickable in the PDF. The default value is `true`.", - "title": "Hyperlink", - "type": "boolean" - }, - "show_icons": { - "default": false, - "description": "Show icons next to contact information. The default value is `true`.", - "title": "Show Icons", - "type": "boolean" - }, - "display_urls_instead_of_usernames": { - "default": true, - "description": "Display full URLs instead of labels. The default value is `false`.", - "title": "Display Urls Instead Of Usernames", - "type": "boolean" - }, - "separator": { - "default": "•", - "description": "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for no separator. The default value is `''`.", - "title": "Separator", - "type": "string" - }, - "space_between_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Horizontal space between contact items. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - } - }, - "title": "Connections", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__1": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "center", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__1", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__2": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "center", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.6cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.6cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__2", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__3": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "left", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `left`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__1", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__4": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "center", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__3", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__5": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "center", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__4", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__6": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "left", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `left`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.5cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.5cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__5", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__7": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "left", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `left`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "4.15cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `4.15cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.3cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.3cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__1", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__8": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "center", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.3cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.3cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.3cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.3cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.6cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.6cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__6", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Header__9": { - "additionalProperties": false, - "properties": { - "alignment": { - "$ref": "#/$defs/Alignment", - "default": "center", - "description": "Header alignment. Options: 'left', 'center', 'right'. The default value is `center`." - }, - "photo_width": { - "$ref": "#/$defs/TypstDimension", - "default": "3.5cm", - "description": "Photo width. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `3.5cm`." - }, - "photo_position": { - "default": "left", - "description": "Photo position (left or right). The default value is `left`.", - "enum": [ - "left", - "right" - ], - "title": "Photo Position", - "type": "string" - }, - "photo_space_left": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the left of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "photo_space_right": { - "$ref": "#/$defs/TypstDimension", - "default": "0.4cm", - "description": "Space to the right of the photo. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.4cm`." - }, - "space_below_name": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below your name. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_headline": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below the headline. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "space_below_connections": { - "$ref": "#/$defs/TypstDimension", - "default": "0.7cm", - "description": "Space below contact information. It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`. The default value is `0.7cm`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__header__Connections__7", - "description": "Contact information settings." - } - }, - "title": "Header", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__1": { - "additionalProperties": false, - "properties": { - "underline": { - "default": false, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__2": { - "additionalProperties": false, - "properties": { - "underline": { - "default": true, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__3": { - "additionalProperties": false, - "properties": { - "underline": { - "default": false, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__4": { - "additionalProperties": false, - "properties": { - "underline": { - "default": true, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__5": { - "additionalProperties": false, - "properties": { - "underline": { - "default": true, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__6": { - "additionalProperties": false, - "properties": { - "underline": { - "default": true, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__7": { - "additionalProperties": false, - "properties": { - "underline": { - "default": false, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__header__Links__8": { - "additionalProperties": false, - "properties": { - "underline": { - "default": true, - "description": "Underline hyperlinks. The default value is `false`.", - "title": "Underline", - "type": "boolean" - }, - "show_external_link_icon": { - "default": false, - "description": "Show an external link icon next to URLs. The default value is `false`.", - "title": "Show External Link Icon", - "type": "boolean" - } - }, - "title": "Links", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__1": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION**, AREA\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": "**DEGREE**", - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**DEGREE**`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "LOCATION\nDATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__2": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION** -- LOCATION\n*DEGREE_WITH_AREA*\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__3": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__4": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__5": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": "**DEGREE**", - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**DEGREE**`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__6": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION** -- LOCATION\n*DEGREE_WITH_AREA*\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__7": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__8": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION** -- LOCATION\nDEGREE_WITH_AREA\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__EducationEntryTemplate__9": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**INSTITUTION**\n*DEGREE* *in* *AREA*\nSUMMARY\nHIGHLIGHTS", - "description": "Template for education entry main column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware phrase combining degree and area (e.g., 'BS in Computer Science')\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "degree_column": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional degree column template. If provided, displays degree in separate column. If `null`, no degree column is shown. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `None`.", - "title": "Degree Column" - }, - "date_and_location_column": { - "default": "*LOCATION*\n*DATE*", - "description": "Template for education entry date/location column. Available placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "EducationEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__1": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**COMPANY**, POSITION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "LOCATION\nDATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__2": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**COMPANY** -- LOCATION\n*POSITION*\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__3": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**POSITION**, COMPANY -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__4": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**POSITION**, COMPANY -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__5": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**COMPANY**, POSITION -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__6": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**COMPANY** -- LOCATION\n*POSITION*\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__7": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**POSITION**, COMPANY -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__8": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**COMPANY**, *POSITION* -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__ExperienceEntryTemplate__9": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**POSITION**\n*COMPANY*\nSUMMARY\nHIGHLIGHTS", - "description": "Template for experience entry main column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "*LOCATION*\n*DATE*", - "description": "Template for experience entry date/location column. Available placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "ExperienceEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__1": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "LOCATION\nDATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__2": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__3": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__4": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__5": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__6": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__7": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- **LOCATION**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__8": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME** -- LOCATION\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "DATE", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__NormalEntryTemplate__9": { - "additionalProperties": false, - "properties": { - "main_column": { - "default": "**NAME**\nSUMMARY\nHIGHLIGHTS", - "description": "Template for normal entry main column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `**NAME**\\nSUMMARY\\nHIGHLIGHTS`.", - "title": "Main Column", - "type": "string" - }, - "date_and_location_column": { - "default": "*LOCATION*\n*DATE*", - "description": "Template for normal entry date/location column. Available placeholders:\n- `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date range\n\nYou can also add arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`.", - "title": "Date And Location Column", - "type": "string" - } - }, - "title": "NormalEntryTemplate", - "type": "object" - }, - "rendercv__schema__models__design__templates__Templates__1": { + "rendercv__schema__models__design__classic_theme__Templates__1": { "additionalProperties": false, "properties": { "footer": { @@ -7717,15 +8292,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__1", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__1", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__1", "description": "Template for experience entries." }, "publication_entry": { @@ -7736,7 +8311,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__2": { + "rendercv__schema__models__design__classic_theme__Templates__2": { "additionalProperties": false, "properties": { "footer": { @@ -7774,15 +8349,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__2", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__2", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__2", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__2", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__2", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__2", "description": "Template for experience entries." }, "publication_entry": { @@ -7793,7 +8368,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__3": { + "rendercv__schema__models__design__classic_theme__Templates__3": { "additionalProperties": false, "properties": { "footer": { @@ -7831,15 +8406,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__3", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__3", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__3", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__3", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__3", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__3", "description": "Template for experience entries." }, "publication_entry": { @@ -7850,7 +8425,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__4": { + "rendercv__schema__models__design__classic_theme__Templates__4": { "additionalProperties": false, "properties": { "footer": { @@ -7888,15 +8463,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__4", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__4", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__4", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__4", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__4", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__4", "description": "Template for experience entries." }, "publication_entry": { @@ -7907,7 +8482,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__5": { + "rendercv__schema__models__design__classic_theme__Templates__5": { "additionalProperties": false, "properties": { "footer": { @@ -7945,15 +8520,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__5", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__5", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__5", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__5", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__5", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__5", "description": "Template for experience entries." }, "publication_entry": { @@ -7964,7 +8539,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__6": { + "rendercv__schema__models__design__classic_theme__Templates__6": { "additionalProperties": false, "properties": { "footer": { @@ -8002,15 +8577,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__6", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__6", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__6", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__6", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__6", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__6", "description": "Template for experience entries." }, "publication_entry": { @@ -8021,7 +8596,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__7": { + "rendercv__schema__models__design__classic_theme__Templates__7": { "additionalProperties": false, "properties": { "footer": { @@ -8059,15 +8634,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__7", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__7", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__7", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__7", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__7", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__7", "description": "Template for experience entries." }, "publication_entry": { @@ -8078,7 +8653,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__8": { + "rendercv__schema__models__design__classic_theme__Templates__8": { "additionalProperties": false, "properties": { "footer": { @@ -8116,15 +8691,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__8", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__8", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__8", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__8", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__8", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__8", "description": "Template for experience entries." }, "publication_entry": { @@ -8135,7 +8710,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__templates__Templates__9": { + "rendercv__schema__models__design__classic_theme__Templates__9": { "additionalProperties": false, "properties": { "footer": { @@ -8173,15 +8748,15 @@ "description": "Template for one-line entries." }, "education_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__EducationEntryTemplate__9", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__EducationEntryTemplate__9", "description": "Template for education entries." }, "normal_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__NormalEntryTemplate__9", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__NormalEntryTemplate__9", "description": "Template for normal entries." }, "experience_entry": { - "$ref": "#/$defs/rendercv__schema__models__design__templates__ExperienceEntryTemplate__9", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__ExperienceEntryTemplate__9", "description": "Template for experience entries." }, "publication_entry": { @@ -8192,604 +8767,7 @@ "title": "Templates", "type": "object" }, - "rendercv__schema__models__design__typography__Bold__1": { - "additionalProperties": false, - "properties": { - "name": { - "default": true, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": true, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__Bold__2": { - "additionalProperties": false, - "properties": { - "name": { - "default": true, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": false, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__Bold__3": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": false, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__Bold__4": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": true, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__Bold__5": { - "additionalProperties": false, - "properties": { - "name": { - "default": true, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": true, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__Bold__6": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": false, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__Bold__7": { - "additionalProperties": false, - "properties": { - "name": { - "default": true, - "description": "Whether to make the name bold. The default value is `true`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to make the headline bold. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to make connections bold. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": false, - "description": "Whether to make section titles bold. The default value is `true`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "Bold", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontFamily": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", - "default": "Source Sans 3", - "description": "The font family for body text. The default value is `Source Sans 3`." - }, - "name": { - "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", - "default": "Source Sans 3", - "description": "The font family for the name. The default value is `Source Sans 3`." - }, - "headline": { - "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", - "default": "Source Sans 3", - "description": "The font family for the headline. The default value is `Source Sans 3`." - }, - "connections": { - "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", - "default": "Source Sans 3", - "description": "The font family for connections. The default value is `Source Sans 3`." - }, - "section_titles": { - "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily", - "default": "Source Sans 3", - "description": "The font family for section titles. The default value is `Source Sans 3`." - } - }, - "title": "FontFamily", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__1": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "30pt", - "description": "The font size for the name. The default value is `30pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for the headline. The default value is `10pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for connections. The default value is `10pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.4em", - "description": "The font size for section titles. The default value is `1.4em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__2": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "30pt", - "description": "The font size for the name. The default value is `30pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "10.5pt", - "description": "The font size for the headline. The default value is `10.5pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "9pt", - "description": "The font size for connections. The default value is `9pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.25em", - "description": "The font size for section titles. The default value is `1.25em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__3": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "25pt", - "description": "The font size for the name. The default value is `25pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for the headline. The default value is `10pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for connections. The default value is `10pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.2em", - "description": "The font size for section titles. The default value is `1.2em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__4": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "25pt", - "description": "The font size for the name. The default value is `25pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for the headline. The default value is `10pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "9pt", - "description": "The font size for connections. The default value is `9pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.3em", - "description": "The font size for section titles. The default value is `1.3em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__5": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "32pt", - "description": "The font size for the name. The default value is `32pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "11pt", - "description": "The font size for the headline. The default value is `11pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for connections. The default value is `10pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.4em", - "description": "The font size for section titles. The default value is `1.4em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__6": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "25pt", - "description": "The font size for the name. The default value is `25pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for the headline. The default value is `10pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for connections. The default value is `10pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.4em", - "description": "The font size for section titles. The default value is `1.4em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__FontSize__7": { - "additionalProperties": false, - "properties": { - "body": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for body text. The default value is `10pt`." - }, - "name": { - "$ref": "#/$defs/TypstDimension", - "default": "26pt", - "description": "The font size for the name. The default value is `26pt`." - }, - "headline": { - "$ref": "#/$defs/TypstDimension", - "default": "10pt", - "description": "The font size for the headline. The default value is `10pt`." - }, - "connections": { - "$ref": "#/$defs/TypstDimension", - "default": "9pt", - "description": "The font size for connections. The default value is `9pt`." - }, - "section_titles": { - "$ref": "#/$defs/TypstDimension", - "default": "1.2em", - "description": "The font size for section titles. The default value is `1.2em`." - } - }, - "title": "FontSize", - "type": "object" - }, - "rendercv__schema__models__design__typography__SmallCaps__1": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to use small caps for the name. The default value is `false`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to use small caps for the headline. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to use small caps for connections. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": false, - "description": "Whether to use small caps for section titles. The default value is `false`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "SmallCaps", - "type": "object" - }, - "rendercv__schema__models__design__typography__SmallCaps__2": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to use small caps for the name. The default value is `false`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": true, - "description": "Whether to use small caps for the headline. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to use small caps for connections. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": true, - "description": "Whether to use small caps for section titles. The default value is `false`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "SmallCaps", - "type": "object" - }, - "rendercv__schema__models__design__typography__SmallCaps__3": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to use small caps for the name. The default value is `false`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": false, - "description": "Whether to use small caps for the headline. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to use small caps for connections. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": true, - "description": "Whether to use small caps for section titles. The default value is `false`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "SmallCaps", - "type": "object" - }, - "rendercv__schema__models__design__typography__SmallCaps__4": { - "additionalProperties": false, - "properties": { - "name": { - "default": false, - "description": "Whether to use small caps for the name. The default value is `false`.", - "title": "Name", - "type": "boolean" - }, - "headline": { - "default": true, - "description": "Whether to use small caps for the headline. The default value is `false`.", - "title": "Headline", - "type": "boolean" - }, - "connections": { - "default": false, - "description": "Whether to use small caps for connections. The default value is `false`.", - "title": "Connections", - "type": "boolean" - }, - "section_titles": { - "default": true, - "description": "Whether to use small caps for section titles. The default value is `false`.", - "title": "Section Titles", - "type": "boolean" - } - }, - "title": "SmallCaps", - "type": "object" - }, - "rendercv__schema__models__design__typography__Typography__1": { + "rendercv__schema__models__design__classic_theme__Typography__1": { "additionalProperties": false, "properties": { "line_spacing": { @@ -8816,7 +8794,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -8826,22 +8804,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__1", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__1", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__1", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__2": { + "rendercv__schema__models__design__classic_theme__Typography__2": { "additionalProperties": false, "properties": { "line_spacing": { @@ -8868,7 +8846,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -8878,22 +8856,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__2", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__2", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__2", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__2", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__2", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__2", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__3": { + "rendercv__schema__models__design__classic_theme__Typography__3": { "additionalProperties": false, "properties": { "line_spacing": { @@ -8920,7 +8898,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -8930,22 +8908,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__1", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__1", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__3", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__3", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__4": { + "rendercv__schema__models__design__classic_theme__Typography__4": { "additionalProperties": false, "properties": { "line_spacing": { @@ -8972,7 +8950,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -8982,22 +8960,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__3", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__3", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__1", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__4", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__4", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__5": { + "rendercv__schema__models__design__classic_theme__Typography__5": { "additionalProperties": false, "properties": { "line_spacing": { @@ -9024,7 +9002,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -9034,22 +9012,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__4", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__4", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__1", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__1", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__6": { + "rendercv__schema__models__design__classic_theme__Typography__6": { "additionalProperties": false, "properties": { "line_spacing": { @@ -9076,7 +9054,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -9086,22 +9064,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__5", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__5", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__3", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__3", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__5", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__5", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__7": { + "rendercv__schema__models__design__classic_theme__Typography__7": { "additionalProperties": false, "properties": { "line_spacing": { @@ -9128,7 +9106,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -9138,22 +9116,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__6", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__6", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__1", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__6", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__6", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__8": { + "rendercv__schema__models__design__classic_theme__Typography__8": { "additionalProperties": false, "properties": { "line_spacing": { @@ -9180,7 +9158,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -9190,22 +9168,22 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__7", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__7", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__4", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__4", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__7", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__7", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, - "rendercv__schema__models__design__typography__Typography__9": { + "rendercv__schema__models__design__classic_theme__Typography__9": { "additionalProperties": false, "properties": { "line_spacing": { @@ -9232,7 +9210,7 @@ "font_family": { "anyOf": [ { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontFamily" + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontFamily" }, { "$ref": "#/$defs/rendercv__schema__models__design__font_family__FontFamily" @@ -9242,21 +9220,43 @@ "title": "Font Family" }, "font_size": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__FontSize__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__FontSize__1", "description": "Font sizes for different elements." }, "small_caps": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__SmallCaps__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__SmallCaps__1", "description": "Small caps styling for different elements." }, "bold": { - "$ref": "#/$defs/rendercv__schema__models__design__typography__Bold__1", + "$ref": "#/$defs/rendercv__schema__models__design__classic_theme__Bold__1", "description": "Bold styling for different elements." } }, "title": "Typography", "type": "object" }, + "rendercv__schema__models__design__font_family__FontFamily": { + "enum": [ + "DejaVu Sans Mono", + "EB Garamond", + "Fontin", + "Gentium Book Plus", + "Lato", + "Libertinus Serif", + "Mukta", + "New Computer Modern", + "Noto Sans", + "Open Sans", + "Open Sauce Sans", + "Poppins", + "Raleway", + "Roboto", + "Source Sans 3", + "Ubuntu", + "XCharter" + ], + "type": "string" + }, "rendercv__schema__models__locale__english_locale__Phrases__1": { "additionalProperties": false, "properties": { diff --git a/src/rendercv/cli/render_command/render_command.py b/src/rendercv/cli/render_command/render_command.py index e4c87d41..3298fb28 100644 --- a/src/rendercv/cli/render_command/render_command.py +++ b/src/rendercv/cli/render_command/render_command.py @@ -186,7 +186,7 @@ def cli_command_render( ), ] = False, # Dummy argument that only exists to show the override syntax in --help: - yaml_field_override: Annotated[ + yaml_field_override: Annotated[ # noqa: ARG001 str | None, typer.Option( "--YAMLLOCATION", diff --git a/src/rendercv/renderer/templater/entry_templates_from_input.py b/src/rendercv/renderer/templater/entry_templates_from_input.py index e449ef06..85d15442 100644 --- a/src/rendercv/renderer/templater/entry_templates_from_input.py +++ b/src/rendercv/renderer/templater/entry_templates_from_input.py @@ -5,7 +5,7 @@ from datetime import date as Date from rendercv.exception import RenderCVInternalError from rendercv.schema.models.cv.entries.publication import PublicationEntry from rendercv.schema.models.cv.section import Entry -from rendercv.schema.models.design.templates import Templates +from rendercv.schema.models.design.classic_theme import Templates from rendercv.schema.models.locale.locale import Locale from .date import compute_time_span_string, format_date_range, format_single_date @@ -450,10 +450,10 @@ def remove_not_provided_placeholders( """ # Remove the not provided placeholders from the templates, including characters # around them: - used_placeholders_in_templates = set( + used_placeholders_in_templates: set[str] = set( uppercase_word_pattern.findall(" ".join(entry_templates.values())) ) - not_provided_placeholders = used_placeholders_in_templates - set( + not_provided_placeholders: set[str] = used_placeholders_in_templates - set( entry_fields.keys() ) if not_provided_placeholders: @@ -474,7 +474,7 @@ def remove_not_provided_placeholders( # Sort longest-first so e.g. "AAA" matches before "AA": sorted_placeholders = sorted(not_provided_placeholders, key=len, reverse=True) not_provided_placeholders_pattern = re.compile( - r"\S*\b(?:" + "|".join(sorted_placeholders) + r")\b\S*" + r"\S*\b(?:" + "|".join(sorted_placeholders) + r")\b\S*" # ty: ignore[no-matching-overload] ) entry_templates = { key: clean_trailing_parts( diff --git a/src/rendercv/renderer/templater/string_processor.py b/src/rendercv/renderer/templater/string_processor.py index b8354293..70e08740 100644 --- a/src/rendercv/renderer/templater/string_processor.py +++ b/src/rendercv/renderer/templater/string_processor.py @@ -158,7 +158,4 @@ def clean_url(url: str | pydantic.HttpUrl) -> str: Returns: Clean URL string. """ - url = str(url).replace("https://", "").replace("http://", "") - url = url.rstrip("/") - - return url + return str(url).replace("https://", "").replace("http://", "").rstrip("/") diff --git a/src/rendercv/schema/models/design/classic_theme.py b/src/rendercv/schema/models/design/classic_theme.py index fa9bf8b5..9f2b2b57 100644 --- a/src/rendercv/schema/models/design/classic_theme.py +++ b/src/rendercv/schema/models/design/classic_theme.py @@ -4,35 +4,16 @@ import pydantic from rendercv.schema.models.base import BaseModelWithoutExtraKeys from rendercv.schema.models.design.color import Color -from rendercv.schema.models.design.header import ( - Header, - Links, +from rendercv.schema.models.design.font_family import FontFamily as FontFamilyType +from rendercv.schema.models.design.typst_dimension import ( + TypstDimension, + length_common_description, ) -from rendercv.schema.models.design.templates import ( - Templates, -) -from rendercv.schema.models.design.typography import ( - Typography, -) -from rendercv.schema.models.design.typst_dimension import TypstDimension -type Bullet = Literal["●", "•", "◦", "-", "◆", "★", "■", "—", "○"] -type SectionTitleType = Literal[ - "with_partial_line", - "with_full_line", - "without_line", - "moderncv", - "centered_without_line", - "centered_with_partial_line", - "centered_with_centered_partial_line", - "centered_with_full_line", -] +# Page + type PageSize = Literal["a4", "a5", "us-letter", "us-executive"] -length_common_description = ( - "It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`." -) - class Page(BaseModelWithoutExtraKeys): size: PageSize = pydantic.Field( @@ -73,6 +54,8 @@ class Page(BaseModelWithoutExtraKeys): ) +# Colors + color_common_description = ( "The color can be specified either with their name" " (https://www.w3.org/TR/SVG11/types.html#ColorKeywords), hexadecimal value, RGB" @@ -133,6 +116,328 @@ class Colors(BaseModelWithoutExtraKeys): ) +# Typography + +type BodyAlignment = Literal["left", "justified", "justified-with-no-hyphenation"] +type Alignment = Literal["left", "center", "right"] + + +class FontFamily(BaseModelWithoutExtraKeys): + body: FontFamilyType = pydantic.Field( + default="Source Sans 3", + description=( + "The font family for body text. The default value is `Source Sans 3`." + ), + ) + name: FontFamilyType = pydantic.Field( + default="Source Sans 3", + description=( + "The font family for the name. The default value is `Source Sans 3`." + ), + ) + headline: FontFamilyType = pydantic.Field( + default="Source Sans 3", + description=( + "The font family for the headline. The default value is `Source Sans 3`." + ), + ) + connections: FontFamilyType = pydantic.Field( + default="Source Sans 3", + description=( + "The font family for connections. The default value is `Source Sans 3`." + ), + ) + section_titles: FontFamilyType = pydantic.Field( + default="Source Sans 3", + description=( + "The font family for section titles. The default value is `Source Sans 3`." + ), + ) + + +class FontSize(BaseModelWithoutExtraKeys): + body: TypstDimension = pydantic.Field( + default="10pt", + description="The font size for body text. The default value is `10pt`.", + ) + name: TypstDimension = pydantic.Field( + default="30pt", + description="The font size for the name. The default value is `30pt`.", + ) + headline: TypstDimension = pydantic.Field( + default="10pt", + description="The font size for the headline. The default value is `10pt`.", + ) + connections: TypstDimension = pydantic.Field( + default="10pt", + description="The font size for connections. The default value is `10pt`.", + ) + section_titles: TypstDimension = pydantic.Field( + default="1.4em", + description="The font size for section titles. The default value is `1.4em`.", + ) + + +class SmallCaps(BaseModelWithoutExtraKeys): + name: bool = pydantic.Field( + default=False, + description=( + "Whether to use small caps for the name. The default value is `false`." + ), + ) + headline: bool = pydantic.Field( + default=False, + description=( + "Whether to use small caps for the headline. The default value is `false`." + ), + ) + connections: bool = pydantic.Field( + default=False, + description=( + "Whether to use small caps for connections. The default value is `false`." + ), + ) + section_titles: bool = pydantic.Field( + default=False, + description=( + "Whether to use small caps for section titles. The default value is" + " `false`." + ), + ) + + +class Bold(BaseModelWithoutExtraKeys): + name: bool = pydantic.Field( + default=True, + description="Whether to make the name bold. The default value is `true`.", + ) + headline: bool = pydantic.Field( + default=False, + description="Whether to make the headline bold. The default value is `false`.", + ) + connections: bool = pydantic.Field( + default=False, + description="Whether to make connections bold. The default value is `false`.", + ) + section_titles: bool = pydantic.Field( + default=True, + description="Whether to make section titles bold. The default value is `true`.", + ) + + +class Typography(BaseModelWithoutExtraKeys): + line_spacing: TypstDimension = pydantic.Field( + default="0.6em", + description=( + "Space between lines of text. Larger values create more vertical space. The" + " default value is `0.6em`." + ), + ) + alignment: Literal["left", "justified", "justified-with-no-hyphenation"] = ( + pydantic.Field( + default="justified", + description=( + "Text alignment. Options: 'left', 'justified' (spreads text across full" + " width), 'justified-with-no-hyphenation' (justified without word" + " breaks). The default value is `justified`." + ), + ) + ) + date_and_location_column_alignment: Alignment = pydantic.Field( + default="right", + description=( + "Alignment for dates and locations in entries. Options: 'left', 'center'," + " 'right'. The default value is `right`." + ), + ) + font_family: FontFamily | FontFamilyType = pydantic.Field( + default_factory=FontFamily, + description=( + "The font family. You can provide a single font name as a string (applies" + " to all elements), or a dictionary with keys 'body', 'name', 'headline'," + " 'connections', and 'section_titles' to customize each element. Any system" + " font can be used." + ), + ) + font_size: FontSize = pydantic.Field( + default_factory=FontSize, + description="Font sizes for different elements.", + ) + small_caps: SmallCaps = pydantic.Field( + default_factory=SmallCaps, + description="Small caps styling for different elements.", + ) + bold: Bold = pydantic.Field( + default_factory=Bold, + description="Bold styling for different elements.", + ) + + @pydantic.field_validator( + "font_family", mode="plain", json_schema_input_type=FontFamily | FontFamilyType + ) + @classmethod + def validate_font_family( + cls, font_family: FontFamily | FontFamilyType + ) -> FontFamily: + """Convert string font to FontFamily object with uniform styling. + + Why: + Users can provide simple string "Latin Modern Roman" for all text, + or specify per-element fonts via FontFamily dict. Validator accepts + both, expanding strings to full FontFamily objects. + + Args: + font_family: String font name or FontFamily object. + + Returns: + FontFamily object with all fields populated. + """ + if isinstance(font_family, str): + return FontFamily( + body=font_family, + name=font_family, + headline=font_family, + connections=font_family, + section_titles=font_family, + ) + + return FontFamily.model_validate(font_family) + + +# Links + + +class Links(BaseModelWithoutExtraKeys): + underline: bool = pydantic.Field( + default=False, + description="Underline hyperlinks. The default value is `false`.", + ) + show_external_link_icon: bool = pydantic.Field( + default=False, + description=( + "Show an external link icon next to URLs. The default value is `false`." + ), + ) + + +# Header + +type PhoneNumberFormatType = Literal["national", "international", "E164"] + + +class Connections(BaseModelWithoutExtraKeys): + phone_number_format: PhoneNumberFormatType = pydantic.Field( + default="national", + description="Phone number format. The default value is `national`.", + ) + hyperlink: bool = pydantic.Field( + default=True, + description=( + "Make contact information clickable in the PDF. The default value is" + " `true`." + ), + ) + show_icons: bool = pydantic.Field( + default=True, + description=( + "Show icons next to contact information. The default value is `true`." + ), + ) + display_urls_instead_of_usernames: bool = pydantic.Field( + default=False, + description=( + "Display full URLs instead of labels. The default value is `false`." + ), + ) + separator: str = pydantic.Field( + default="", + description=( + "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for" + " no separator. The default value is `''`." + ), + ) + space_between_connections: TypstDimension = pydantic.Field( + default="0.5cm", + description=( + "Horizontal space between contact items. " + + length_common_description + + " The default value is `0.5cm`." + ), + ) + + +class Header(BaseModelWithoutExtraKeys): + alignment: Alignment = pydantic.Field( + default="center", + description=( + "Header alignment. Options: 'left', 'center', 'right'. The default value is" + " `center`." + ), + ) + photo_width: TypstDimension = pydantic.Field( + default="3.5cm", + description="Photo width. " + + length_common_description + + " The default value is `3.5cm`.", + ) + photo_position: Literal["left", "right"] = pydantic.Field( + default="left", + description="Photo position (left or right). The default value is `left`.", + ) + photo_space_left: TypstDimension = pydantic.Field( + default="0.4cm", + description=( + "Space to the left of the photo. " + + length_common_description + + " The default value is `0.4cm`." + ), + ) + photo_space_right: TypstDimension = pydantic.Field( + default="0.4cm", + description=( + "Space to the right of the photo. " + + length_common_description + + " The default value is `0.4cm`." + ), + ) + space_below_name: TypstDimension = pydantic.Field( + default="0.7cm", + description="Space below your name. " + + length_common_description + + " The default value is `0.7cm`.", + ) + space_below_headline: TypstDimension = pydantic.Field( + default="0.7cm", + description="Space below the headline. " + + length_common_description + + " The default value is `0.7cm`.", + ) + space_below_connections: TypstDimension = pydantic.Field( + default="0.7cm", + description="Space below contact information. " + + length_common_description + + " The default value is `0.7cm`.", + ) + connections: Connections = pydantic.Field( + default_factory=Connections, + description="Contact information settings.", + ) + + +# Section Titles + +type SectionTitleType = Literal[ + "with_partial_line", + "with_full_line", + "without_line", + "moderncv", + "centered_without_line", + "centered_with_partial_line", + "centered_with_centered_partial_line", + "centered_with_full_line", +] + + class SectionTitles(BaseModelWithoutExtraKeys): type: SectionTitleType = pydantic.Field( default="with_partial_line", @@ -161,6 +466,9 @@ class SectionTitles(BaseModelWithoutExtraKeys): ) +# Sections + + class Sections(BaseModelWithoutExtraKeys): allow_page_break: bool = pydantic.Field( default=True, @@ -200,6 +508,11 @@ class Sections(BaseModelWithoutExtraKeys): return [section_title.lower().replace(" ", "_") for section_title in value] +# Entries + +type Bullet = Literal["●", "•", "◦", "-", "◆", "★", "■", "—", "○"] + + class Summary(BaseModelWithoutExtraKeys): space_above: TypstDimension = pydantic.Field( default="0cm", @@ -319,6 +632,237 @@ class Entries(BaseModelWithoutExtraKeys): ) +# Templates + + +class OneLineEntryTemplate(BaseModelWithoutExtraKeys): + main_column: str = pydantic.Field( + default="**LABEL:** DETAILS", + description=( + "Template for one-line entries. Available placeholders:\n- `LABEL`: The" + ' label text (e.g., "Languages", "Citizenship")\n- `DETAILS`: The details' + ' text (e.g., "English (native), Spanish (fluent)")\n\nYou can also add' + " arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe" + " default value is `**LABEL:** DETAILS`." + ), + ) + + +class EducationEntryTemplate(BaseModelWithoutExtraKeys): + main_column: str = pydantic.Field( + default="**INSTITUTION**, AREA\nSUMMARY\nHIGHLIGHTS", + description=( + "Template for education entry main column. Available placeholders:\n-" + " `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n-" + " `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware" + " phrase combining degree and area (e.g., 'BS in Computer Science')\n-" + " `SUMMARY`: Summary text\n-" + " `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`:" + " Formatted date or date range\n\nYou can also add arbitrary keys to" + " entries and use them as UPPERCASE placeholders.\n\nThe default value is" + " `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`." + ), + ) + degree_column: str | None = pydantic.Field( + default="**DEGREE**", + description=( + "Optional degree column template. If provided, displays degree in separate" + " column. If `null`, no degree column is shown. Available placeholders:\n-" + " `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n-" + " `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n-" + " `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`:" + " Formatted date or date range\n\nYou can also add arbitrary keys to" + " entries and use them as UPPERCASE placeholders.\n\nThe default value is" + " `**DEGREE**`." + ), + ) + date_and_location_column: str = pydantic.Field( + default="LOCATION\nDATE", + description=( + "Template for education entry date/location column. Available" + " placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of" + " study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`:" + " Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location" + " text\n- `DATE`: Formatted date or date range\n\nYou can also add" + " arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe" + " default value is `LOCATION\\nDATE`." + ), + ) + + +class NormalEntryTemplate(BaseModelWithoutExtraKeys): + main_column: str = pydantic.Field( + default="**NAME**\nSUMMARY\nHIGHLIGHTS", + description=( + "Template for normal entry main column. Available placeholders:\n- `NAME`:" + " Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet" + " points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or" + " date range\n\nYou can also add arbitrary keys to entries and use them as" + " UPPERCASE placeholders.\n\nThe default value is" + " `**NAME**\\nSUMMARY\\nHIGHLIGHTS`." + ), + ) + date_and_location_column: str = pydantic.Field( + default="LOCATION\nDATE", + description=( + "Template for normal entry date/location column. Available placeholders:\n-" + " `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`:" + " Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date" + " or date range\n\nYou can also add arbitrary keys to entries and use them" + " as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`." + ), + ) + + +class ExperienceEntryTemplate(BaseModelWithoutExtraKeys): + main_column: str = pydantic.Field( + default="**COMPANY**, POSITION\nSUMMARY\nHIGHLIGHTS", + description=( + "Template for experience entry main column. Available placeholders:\n-" + " `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`:" + " Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location" + " text\n- `DATE`: Formatted date or date range\n\nYou can also add" + " arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe" + " default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`." + ), + ) + date_and_location_column: str = pydantic.Field( + default="LOCATION\nDATE", + description=( + "Template for experience entry date/location column. Available" + " placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job" + " title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points" + " list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date" + " range\n\nYou can also add arbitrary keys to entries and use them as" + " UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`." + ), + ) + + +class PublicationEntryTemplate(BaseModelWithoutExtraKeys): + main_column: str = pydantic.Field( + default="**TITLE**\nSUMMARY\nAUTHORS\nURL (JOURNAL)", + description=( + "Template for publication entry main column. Available placeholders:\n-" + " `TITLE`: Publication title\n- `AUTHORS`: List of authors (formatted as" + " comma-separated string)\n- `SUMMARY`: Summary/abstract text\n- `DOI`:" + " Digital Object Identifier\n- `URL`: Publication URL (if DOI not" + " provided)\n- `JOURNAL`: Journal/conference/venue name\n- `DATE`:" + " Formatted date\n\nYou can also add arbitrary keys to entries and use them" + " as UPPERCASE placeholders.\n\nThe default value is" + " `**TITLE**\\nSUMMARY\\nAUTHORS\\nURL (JOURNAL)`." + ), + ) + date_and_location_column: str = pydantic.Field( + default="DATE", + description=( + "Template for publication entry date column. Available placeholders:\n-" + " `TITLE`: Publication title\n- `AUTHORS`: List of authors (formatted as" + " comma-separated string)\n- `SUMMARY`: Summary/abstract text\n- `DOI`:" + " Digital Object Identifier\n- `URL`: Publication URL (if DOI not" + " provided)\n- `JOURNAL`: Journal/conference/venue name\n- `DATE`:" + " Formatted date\n\nYou can also add arbitrary keys to entries and use them" + " as UPPERCASE placeholders.\n\nThe default value is `DATE`." + ), + ) + + +class Templates(BaseModelWithoutExtraKeys): + footer: str = pydantic.Field( + default="*NAME -- PAGE_NUMBER/TOTAL_PAGES*", + description=( + "Template for the footer. Available placeholders:\n" + "- `NAME`: The CV owner's name from `cv.name`\n" + "- `PAGE_NUMBER`: Current page number\n" + "- `TOTAL_PAGES`: Total number of pages\n" + "- `CURRENT_DATE`: Formatted date based on `design.templates.single_date`\n" + "- `MONTH_NAME`: Full month name (e.g., January)\n" + "- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n" + "- `MONTH`: Month number (e.g., 1)\n" + "- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n" + "- `DAY`: Day of the month (e.g., 5)\n" + "- `DAY_IN_TWO_DIGITS`: Zero-padded day (e.g., 05)\n" + "- `YEAR`: Full year (e.g., 2025)\n" + "- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\n" + "The default value is `*NAME -- PAGE_NUMBER/TOTAL_PAGES*`." + ), + ) + top_note: str = pydantic.Field( + default="*LAST_UPDATED CURRENT_DATE*", + description=( + "Template for the top note. Available placeholders:\n- `LAST_UPDATED`:" + ' Localized "last updated" text from `locale.last_updated`\n-' + " `CURRENT_DATE`: Formatted date based on `design.templates.single_date`\n-" + " `NAME`: The CV owner's name from `cv.name`\n- `MONTH_NAME`: Full month" + " name (e.g., January)\n- `MONTH_ABBREVIATION`: Abbreviated month name" + " (e.g., Jan)\n- `MONTH`: Month number (e.g., 1)\n- `MONTH_IN_TWO_DIGITS`:" + " Zero-padded month (e.g., 01)\n- `DAY`: Day of the month (e.g., 5)\n-" + " `DAY_IN_TWO_DIGITS`: Zero-padded day (e.g., 05)\n- `YEAR`: Full year" + " (e.g., 2025)\n- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\n" + "The default value is `*LAST_UPDATED CURRENT_DATE*`." + ), + ) + single_date: str = pydantic.Field( + default="MONTH_ABBREVIATION YEAR", + description=( + "Template for single dates. Available placeholders:\n" + "- `MONTH_NAME`: Full month name (e.g., January)\n" + "- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n" + "- `MONTH`: Month number (e.g., 1)\n" + "- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n" + "- `DAY`: Day of the month (e.g., 5)\n" + "- `DAY_IN_TWO_DIGITS`: Zero-padded day (e.g., 05)\n" + "- `YEAR`: Full year (e.g., 2025)\n" + "- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\n" + "The default value is `MONTH_ABBREVIATION YEAR`." + ), + ) + date_range: str = pydantic.Field( + default="START_DATE – END_DATE", + description=( + "Template for date ranges. Available placeholders:\n- `START_DATE`:" + " Formatted start date based on `design.templates.single_date`\n-" + " `END_DATE`: Formatted end date based on `design.templates.single_date`" + ' (or "present"/"ongoing" for current positions)\n\nThe default value is' + " `START_DATE – END_DATE`." + ), + ) + time_span: str = pydantic.Field( + default="HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS", + description=( + "Template for time spans (duration calculations). Available" + " placeholders:\n- `HOW_MANY_YEARS`: Number of years (e.g., 2)\n- `YEARS`:" + ' Localized word for "years" from `locale.years` (or singular "year")\n-' + " `HOW_MANY_MONTHS`: Number of months (e.g., 3)\n- `MONTHS`: Localized word" + ' for "months" from `locale.months` (or singular "month")\n\nThe default' + " value is `HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS`." + ), + ) + one_line_entry: OneLineEntryTemplate = pydantic.Field( + default_factory=OneLineEntryTemplate, + description="Template for one-line entries.", + ) + education_entry: EducationEntryTemplate = pydantic.Field( + default_factory=EducationEntryTemplate, + description="Template for education entries.", + ) + normal_entry: NormalEntryTemplate = pydantic.Field( + default_factory=NormalEntryTemplate, + description="Template for normal entries.", + ) + experience_entry: ExperienceEntryTemplate = pydantic.Field( + default_factory=ExperienceEntryTemplate, + description="Template for experience entries.", + ) + publication_entry: PublicationEntryTemplate = pydantic.Field( + default_factory=PublicationEntryTemplate, + description="Template for publication entries.", + ) + + +# ClassicTheme + + class ClassicTheme(BaseModelWithoutExtraKeys): theme: Literal["classic"] = "classic" page: Page = pydantic.Field(default_factory=Page) diff --git a/src/rendercv/schema/models/design/header.py b/src/rendercv/schema/models/design/header.py deleted file mode 100644 index e72652ae..00000000 --- a/src/rendercv/schema/models/design/header.py +++ /dev/null @@ -1,125 +0,0 @@ -from typing import Literal - -import pydantic - -from rendercv.schema.models.base import BaseModelWithoutExtraKeys -from rendercv.schema.models.design.typography import Alignment -from rendercv.schema.models.design.typst_dimension import TypstDimension - -type PhoneNumberFormatType = Literal["national", "international", "E164"] - -length_common_description = ( - "It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`." -) - - -class Links(BaseModelWithoutExtraKeys): - underline: bool = pydantic.Field( - default=False, - description="Underline hyperlinks. The default value is `false`.", - ) - show_external_link_icon: bool = pydantic.Field( - default=False, - description=( - "Show an external link icon next to URLs. The default value is `false`." - ), - ) - - -class Connections(BaseModelWithoutExtraKeys): - phone_number_format: PhoneNumberFormatType = pydantic.Field( - default="national", - description="Phone number format. The default value is `national`.", - ) - hyperlink: bool = pydantic.Field( - default=True, - description=( - "Make contact information clickable in the PDF. The default value is" - " `true`." - ), - ) - show_icons: bool = pydantic.Field( - default=True, - description=( - "Show icons next to contact information. The default value is `true`." - ), - ) - display_urls_instead_of_usernames: bool = pydantic.Field( - default=False, - description=( - "Display full URLs instead of labels. The default value is `false`." - ), - ) - separator: str = pydantic.Field( - default="", - description=( - "Character(s) to separate contact items (e.g., '|' or '•'). Leave empty for" - " no separator. The default value is `''`." - ), - ) - space_between_connections: TypstDimension = pydantic.Field( - default="0.5cm", - description=( - "Horizontal space between contact items. " - + length_common_description - + " The default value is `0.5cm`." - ), - ) - - -class Header(BaseModelWithoutExtraKeys): - alignment: Alignment = pydantic.Field( - default="center", - description=( - "Header alignment. Options: 'left', 'center', 'right'. The default value is" - " `center`." - ), - ) - photo_width: TypstDimension = pydantic.Field( - default="3.5cm", - description="Photo width. " - + length_common_description - + " The default value is `3.5cm`.", - ) - photo_position: Literal["left", "right"] = pydantic.Field( - default="left", - description="Photo position (left or right). The default value is `left`.", - ) - photo_space_left: TypstDimension = pydantic.Field( - default="0.4cm", - description=( - "Space to the left of the photo. " - + length_common_description - + " The default value is `0.4cm`." - ), - ) - photo_space_right: TypstDimension = pydantic.Field( - default="0.4cm", - description=( - "Space to the right of the photo. " - + length_common_description - + " The default value is `0.4cm`." - ), - ) - space_below_name: TypstDimension = pydantic.Field( - default="0.7cm", - description="Space below your name. " - + length_common_description - + " The default value is `0.7cm`.", - ) - space_below_headline: TypstDimension = pydantic.Field( - default="0.7cm", - description="Space below the headline. " - + length_common_description - + " The default value is `0.7cm`.", - ) - space_below_connections: TypstDimension = pydantic.Field( - default="0.7cm", - description="Space below contact information. " - + length_common_description - + " The default value is `0.7cm`.", - ) - connections: Connections = pydantic.Field( - default_factory=Connections, - description="Contact information settings.", - ) diff --git a/src/rendercv/schema/models/design/templates.py b/src/rendercv/schema/models/design/templates.py deleted file mode 100644 index 5437e456..00000000 --- a/src/rendercv/schema/models/design/templates.py +++ /dev/null @@ -1,228 +0,0 @@ -import pydantic - -from rendercv.schema.models.base import BaseModelWithoutExtraKeys - - -class OneLineEntryTemplate(BaseModelWithoutExtraKeys): - main_column: str = pydantic.Field( - default="**LABEL:** DETAILS", - description=( - "Template for one-line entries. Available placeholders:\n- `LABEL`: The" - ' label text (e.g., "Languages", "Citizenship")\n- `DETAILS`: The details' - ' text (e.g., "English (native), Spanish (fluent)")\n\nYou can also add' - " arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe" - " default value is `**LABEL:** DETAILS`." - ), - ) - - -class EducationEntryTemplate(BaseModelWithoutExtraKeys): - main_column: str = pydantic.Field( - default="**INSTITUTION**, AREA\nSUMMARY\nHIGHLIGHTS", - description=( - "Template for education entry main column. Available placeholders:\n-" - " `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n-" - " `DEGREE`: Degree type (e.g., BS, PhD)\n- `DEGREE_WITH_AREA`: Locale-aware" - " phrase combining degree and area (e.g., 'BS in Computer Science')\n-" - " `SUMMARY`: Summary text\n-" - " `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`:" - " Formatted date or date range\n\nYou can also add arbitrary keys to" - " entries and use them as UPPERCASE placeholders.\n\nThe default value is" - " `**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS`." - ), - ) - degree_column: str | None = pydantic.Field( - default="**DEGREE**", - description=( - "Optional degree column template. If provided, displays degree in separate" - " column. If `null`, no degree column is shown. Available placeholders:\n-" - " `INSTITUTION`: Institution name\n- `AREA`: Field of study/major\n-" - " `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`: Summary text\n-" - " `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location text\n- `DATE`:" - " Formatted date or date range\n\nYou can also add arbitrary keys to" - " entries and use them as UPPERCASE placeholders.\n\nThe default value is" - " `**DEGREE**`." - ), - ) - date_and_location_column: str = pydantic.Field( - default="LOCATION\nDATE", - description=( - "Template for education entry date/location column. Available" - " placeholders:\n- `INSTITUTION`: Institution name\n- `AREA`: Field of" - " study/major\n- `DEGREE`: Degree type (e.g., BS, PhD)\n- `SUMMARY`:" - " Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location" - " text\n- `DATE`: Formatted date or date range\n\nYou can also add" - " arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe" - " default value is `LOCATION\\nDATE`." - ), - ) - - -class NormalEntryTemplate(BaseModelWithoutExtraKeys): - main_column: str = pydantic.Field( - default="**NAME**\nSUMMARY\nHIGHLIGHTS", - description=( - "Template for normal entry main column. Available placeholders:\n- `NAME`:" - " Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet" - " points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or" - " date range\n\nYou can also add arbitrary keys to entries and use them as" - " UPPERCASE placeholders.\n\nThe default value is" - " `**NAME**\\nSUMMARY\\nHIGHLIGHTS`." - ), - ) - date_and_location_column: str = pydantic.Field( - default="LOCATION\nDATE", - description=( - "Template for normal entry date/location column. Available placeholders:\n-" - " `NAME`: Entry name/title\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`:" - " Bullet points list\n- `LOCATION`: Location text\n- `DATE`: Formatted date" - " or date range\n\nYou can also add arbitrary keys to entries and use them" - " as UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`." - ), - ) - - -class ExperienceEntryTemplate(BaseModelWithoutExtraKeys): - main_column: str = pydantic.Field( - default="**COMPANY**, POSITION\nSUMMARY\nHIGHLIGHTS", - description=( - "Template for experience entry main column. Available placeholders:\n-" - " `COMPANY`: Company name\n- `POSITION`: Job title/position\n- `SUMMARY`:" - " Summary text\n- `HIGHLIGHTS`: Bullet points list\n- `LOCATION`: Location" - " text\n- `DATE`: Formatted date or date range\n\nYou can also add" - " arbitrary keys to entries and use them as UPPERCASE placeholders.\n\nThe" - " default value is `**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS`." - ), - ) - date_and_location_column: str = pydantic.Field( - default="LOCATION\nDATE", - description=( - "Template for experience entry date/location column. Available" - " placeholders:\n- `COMPANY`: Company name\n- `POSITION`: Job" - " title/position\n- `SUMMARY`: Summary text\n- `HIGHLIGHTS`: Bullet points" - " list\n- `LOCATION`: Location text\n- `DATE`: Formatted date or date" - " range\n\nYou can also add arbitrary keys to entries and use them as" - " UPPERCASE placeholders.\n\nThe default value is `LOCATION\\nDATE`." - ), - ) - - -class PublicationEntryTemplate(BaseModelWithoutExtraKeys): - main_column: str = pydantic.Field( - default="**TITLE**\nSUMMARY\nAUTHORS\nURL (JOURNAL)", - description=( - "Template for publication entry main column. Available placeholders:\n-" - " `TITLE`: Publication title\n- `AUTHORS`: List of authors (formatted as" - " comma-separated string)\n- `SUMMARY`: Summary/abstract text\n- `DOI`:" - " Digital Object Identifier\n- `URL`: Publication URL (if DOI not" - " provided)\n- `JOURNAL`: Journal/conference/venue name\n- `DATE`:" - " Formatted date\n\nYou can also add arbitrary keys to entries and use them" - " as UPPERCASE placeholders.\n\nThe default value is" - " `**TITLE**\\nSUMMARY\\nAUTHORS\\nURL (JOURNAL)`." - ), - ) - date_and_location_column: str = pydantic.Field( - default="DATE", - description=( - "Template for publication entry date column. Available placeholders:\n-" - " `TITLE`: Publication title\n- `AUTHORS`: List of authors (formatted as" - " comma-separated string)\n- `SUMMARY`: Summary/abstract text\n- `DOI`:" - " Digital Object Identifier\n- `URL`: Publication URL (if DOI not" - " provided)\n- `JOURNAL`: Journal/conference/venue name\n- `DATE`:" - " Formatted date\n\nYou can also add arbitrary keys to entries and use them" - " as UPPERCASE placeholders.\n\nThe default value is `DATE`." - ), - ) - - -class Templates(BaseModelWithoutExtraKeys): - footer: str = pydantic.Field( - default="*NAME -- PAGE_NUMBER/TOTAL_PAGES*", - description=( - "Template for the footer. Available placeholders:\n" - "- `NAME`: The CV owner's name from `cv.name`\n" - "- `PAGE_NUMBER`: Current page number\n" - "- `TOTAL_PAGES`: Total number of pages\n" - "- `CURRENT_DATE`: Formatted date based on `design.templates.single_date`\n" - "- `MONTH_NAME`: Full month name (e.g., January)\n" - "- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n" - "- `MONTH`: Month number (e.g., 1)\n" - "- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n" - "- `DAY`: Day of the month (e.g., 5)\n" - "- `DAY_IN_TWO_DIGITS`: Zero-padded day (e.g., 05)\n" - "- `YEAR`: Full year (e.g., 2025)\n" - "- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\n" - "The default value is `*NAME -- PAGE_NUMBER/TOTAL_PAGES*`." - ), - ) - top_note: str = pydantic.Field( - default="*LAST_UPDATED CURRENT_DATE*", - description=( - "Template for the top note. Available placeholders:\n- `LAST_UPDATED`:" - ' Localized "last updated" text from `locale.last_updated`\n-' - " `CURRENT_DATE`: Formatted date based on `design.templates.single_date`\n-" - " `NAME`: The CV owner's name from `cv.name`\n- `MONTH_NAME`: Full month" - " name (e.g., January)\n- `MONTH_ABBREVIATION`: Abbreviated month name" - " (e.g., Jan)\n- `MONTH`: Month number (e.g., 1)\n- `MONTH_IN_TWO_DIGITS`:" - " Zero-padded month (e.g., 01)\n- `DAY`: Day of the month (e.g., 5)\n-" - " `DAY_IN_TWO_DIGITS`: Zero-padded day (e.g., 05)\n- `YEAR`: Full year" - " (e.g., 2025)\n- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\n" - "The default value is `*LAST_UPDATED CURRENT_DATE*`." - ), - ) - single_date: str = pydantic.Field( - default="MONTH_ABBREVIATION YEAR", - description=( - "Template for single dates. Available placeholders:\n" - "- `MONTH_NAME`: Full month name (e.g., January)\n" - "- `MONTH_ABBREVIATION`: Abbreviated month name (e.g., Jan)\n" - "- `MONTH`: Month number (e.g., 1)\n" - "- `MONTH_IN_TWO_DIGITS`: Zero-padded month (e.g., 01)\n" - "- `DAY`: Day of the month (e.g., 5)\n" - "- `DAY_IN_TWO_DIGITS`: Zero-padded day (e.g., 05)\n" - "- `YEAR`: Full year (e.g., 2025)\n" - "- `YEAR_IN_TWO_DIGITS`: Two-digit year (e.g., 25)\n\n" - "The default value is `MONTH_ABBREVIATION YEAR`." - ), - ) - date_range: str = pydantic.Field( - default="START_DATE – END_DATE", - description=( - "Template for date ranges. Available placeholders:\n- `START_DATE`:" - " Formatted start date based on `design.templates.single_date`\n-" - " `END_DATE`: Formatted end date based on `design.templates.single_date`" - ' (or "present"/"ongoing" for current positions)\n\nThe default value is' - " `START_DATE – END_DATE`." - ), - ) - time_span: str = pydantic.Field( - default="HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS", - description=( - "Template for time spans (duration calculations). Available" - " placeholders:\n- `HOW_MANY_YEARS`: Number of years (e.g., 2)\n- `YEARS`:" - ' Localized word for "years" from `locale.years` (or singular "year")\n-' - " `HOW_MANY_MONTHS`: Number of months (e.g., 3)\n- `MONTHS`: Localized word" - ' for "months" from `locale.months` (or singular "month")\n\nThe default' - " value is `HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS`." - ), - ) - one_line_entry: OneLineEntryTemplate = pydantic.Field( - default_factory=OneLineEntryTemplate, - description="Template for one-line entries.", - ) - education_entry: EducationEntryTemplate = pydantic.Field( - default_factory=EducationEntryTemplate, - description="Template for education entries.", - ) - normal_entry: NormalEntryTemplate = pydantic.Field( - default_factory=NormalEntryTemplate, - description="Template for normal entries.", - ) - experience_entry: ExperienceEntryTemplate = pydantic.Field( - default_factory=ExperienceEntryTemplate, - description="Template for experience entries.", - ) - publication_entry: PublicationEntryTemplate = pydantic.Field( - default_factory=PublicationEntryTemplate, - description="Template for publication entries.", - ) diff --git a/src/rendercv/schema/models/design/typography.py b/src/rendercv/schema/models/design/typography.py deleted file mode 100644 index e14c517c..00000000 --- a/src/rendercv/schema/models/design/typography.py +++ /dev/null @@ -1,192 +0,0 @@ -from typing import Literal - -import pydantic - -from rendercv.schema.models.base import BaseModelWithoutExtraKeys -from rendercv.schema.models.design.font_family import FontFamily as FontFamilyType -from rendercv.schema.models.design.typst_dimension import TypstDimension - -type BodyAlignment = Literal["left", "justified", "justified-with-no-hyphenation"] -type Alignment = Literal["left", "center", "right"] - - -class FontFamily(BaseModelWithoutExtraKeys): - body: FontFamilyType = pydantic.Field( - default="Source Sans 3", - description=( - "The font family for body text. The default value is `Source Sans 3`." - ), - ) - name: FontFamilyType = pydantic.Field( - default="Source Sans 3", - description=( - "The font family for the name. The default value is `Source Sans 3`." - ), - ) - headline: FontFamilyType = pydantic.Field( - default="Source Sans 3", - description=( - "The font family for the headline. The default value is `Source Sans 3`." - ), - ) - connections: FontFamilyType = pydantic.Field( - default="Source Sans 3", - description=( - "The font family for connections. The default value is `Source Sans 3`." - ), - ) - section_titles: FontFamilyType = pydantic.Field( - default="Source Sans 3", - description=( - "The font family for section titles. The default value is `Source Sans 3`." - ), - ) - - -class FontSize(BaseModelWithoutExtraKeys): - body: TypstDimension = pydantic.Field( - default="10pt", - description="The font size for body text. The default value is `10pt`.", - ) - name: TypstDimension = pydantic.Field( - default="30pt", - description="The font size for the name. The default value is `30pt`.", - ) - headline: TypstDimension = pydantic.Field( - default="10pt", - description="The font size for the headline. The default value is `10pt`.", - ) - connections: TypstDimension = pydantic.Field( - default="10pt", - description="The font size for connections. The default value is `10pt`.", - ) - section_titles: TypstDimension = pydantic.Field( - default="1.4em", - description="The font size for section titles. The default value is `1.4em`.", - ) - - -class SmallCaps(BaseModelWithoutExtraKeys): - name: bool = pydantic.Field( - default=False, - description=( - "Whether to use small caps for the name. The default value is `false`." - ), - ) - headline: bool = pydantic.Field( - default=False, - description=( - "Whether to use small caps for the headline. The default value is `false`." - ), - ) - connections: bool = pydantic.Field( - default=False, - description=( - "Whether to use small caps for connections. The default value is `false`." - ), - ) - section_titles: bool = pydantic.Field( - default=False, - description=( - "Whether to use small caps for section titles. The default value is" - " `false`." - ), - ) - - -class Bold(BaseModelWithoutExtraKeys): - name: bool = pydantic.Field( - default=True, - description="Whether to make the name bold. The default value is `true`.", - ) - headline: bool = pydantic.Field( - default=False, - description="Whether to make the headline bold. The default value is `false`.", - ) - connections: bool = pydantic.Field( - default=False, - description="Whether to make connections bold. The default value is `false`.", - ) - section_titles: bool = pydantic.Field( - default=True, - description="Whether to make section titles bold. The default value is `true`.", - ) - - -class Typography(BaseModelWithoutExtraKeys): - line_spacing: TypstDimension = pydantic.Field( - default="0.6em", - description=( - "Space between lines of text. Larger values create more vertical space. The" - " default value is `0.6em`." - ), - ) - alignment: Literal["left", "justified", "justified-with-no-hyphenation"] = ( - pydantic.Field( - default="justified", - description=( - "Text alignment. Options: 'left', 'justified' (spreads text across full" - " width), 'justified-with-no-hyphenation' (justified without word" - " breaks). The default value is `justified`." - ), - ) - ) - date_and_location_column_alignment: Alignment = pydantic.Field( - default="right", - description=( - "Alignment for dates and locations in entries. Options: 'left', 'center'," - " 'right'. The default value is `right`." - ), - ) - font_family: FontFamily | FontFamilyType = pydantic.Field( - default_factory=FontFamily, - description=( - "The font family. You can provide a single font name as a string (applies" - " to all elements), or a dictionary with keys 'body', 'name', 'headline'," - " 'connections', and 'section_titles' to customize each element. Any system" - " font can be used." - ), - ) - font_size: FontSize = pydantic.Field( - default_factory=FontSize, - description="Font sizes for different elements.", - ) - small_caps: SmallCaps = pydantic.Field( - default_factory=SmallCaps, - description="Small caps styling for different elements.", - ) - bold: Bold = pydantic.Field( - default_factory=Bold, - description="Bold styling for different elements.", - ) - - @pydantic.field_validator( - "font_family", mode="plain", json_schema_input_type=FontFamily | FontFamilyType - ) - @classmethod - def validate_font_family( - cls, font_family: FontFamily | FontFamilyType - ) -> FontFamily: - """Convert string font to FontFamily object with uniform styling. - - Why: - Users can provide simple string "Latin Modern Roman" for all text, - or specify per-element fonts via FontFamily dict. Validator accepts - both, expanding strings to full FontFamily objects. - - Args: - font_family: String font name or FontFamily object. - - Returns: - FontFamily object with all fields populated. - """ - if isinstance(font_family, str): - return FontFamily( - body=font_family, - name=font_family, - headline=font_family, - connections=font_family, - section_titles=font_family, - ) - - return FontFamily.model_validate(font_family) diff --git a/src/rendercv/schema/models/design/typst_dimension.py b/src/rendercv/schema/models/design/typst_dimension.py index b36377d2..4e56ee36 100644 --- a/src/rendercv/schema/models/design/typst_dimension.py +++ b/src/rendercv/schema/models/design/typst_dimension.py @@ -31,3 +31,7 @@ def validate_typst_dimension(dimension: str) -> str: type TypstDimension = Annotated[str, pydantic.AfterValidator(validate_typst_dimension)] + +length_common_description = ( + "It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`." +) diff --git a/src/rendercv/schema/yaml_reader.py b/src/rendercv/schema/yaml_reader.py index 64df881b..cc159537 100644 --- a/src/rendercv/schema/yaml_reader.py +++ b/src/rendercv/schema/yaml_reader.py @@ -81,7 +81,7 @@ class ScannerNoAlias(RoundTripScanner): yaml = ruamel.yaml.YAML() -yaml.Scanner = ScannerNoAlias # ty: ignore[invalid-assignment] +yaml.Scanner = ScannerNoAlias # Disable ISO date parsing, keep it as a string: yaml.constructor.yaml_constructors["tag:yaml.org,2002:timestamp"] = ( diff --git a/tests/cli/render_command/test_render_command.py b/tests/cli/render_command/test_render_command.py index 9d5061b2..b6fc063e 100644 --- a/tests/cli/render_command/test_render_command.py +++ b/tests/cli/render_command/test_render_command.py @@ -28,7 +28,7 @@ class TestCliCommandRender: "dont_generate_png": False, "watch": False, "quiet": False, - "_": None, + "yaml_field_override": None, "extra_data_model_override_arguments": context, } diff --git a/tests/renderer/templater/test_connections.py b/tests/renderer/templater/test_connections.py index cf3e95c1..a327f885 100644 --- a/tests/renderer/templater/test_connections.py +++ b/tests/renderer/templater/test_connections.py @@ -14,8 +14,11 @@ from rendercv.renderer.templater.connections import ( from rendercv.schema.models.cv.custom_connection import CustomConnection from rendercv.schema.models.cv.cv import Cv from rendercv.schema.models.cv.social_network import SocialNetwork, SocialNetworkName -from rendercv.schema.models.design.classic_theme import ClassicTheme -from rendercv.schema.models.design.header import Connections, Header +from rendercv.schema.models.design.classic_theme import ( + ClassicTheme, + Connections, + Header, +) from rendercv.schema.models.locale.locale import EnglishLocale from rendercv.schema.models.rendercv_model import RenderCVModel diff --git a/tests/renderer/templater/test_date.py b/tests/renderer/templater/test_date.py index 8b2e4c37..73b6a93a 100644 --- a/tests/renderer/templater/test_date.py +++ b/tests/renderer/templater/test_date.py @@ -1,3 +1,4 @@ +import calendar import re from datetime import date as Date @@ -16,7 +17,21 @@ from rendercv.schema.models.cv.entries.bases.entry_with_complex_fields import ( get_date_object, ) from rendercv.schema.models.locale.english_locale import EnglishLocale -from tests.strategies import valid_date_strings + + +@st.composite +def valid_date_strings(draw: st.DrawFn) -> str: + """Generate date strings in YYYY-MM-DD, YYYY-MM, or YYYY format.""" + year = draw(st.integers(min_value=1, max_value=9999)) + fmt = draw(st.sampled_from(["year", "year_month", "year_month_day"])) + if fmt == "year": + return f"{year:04d}" + month = draw(st.integers(min_value=1, max_value=12)) + if fmt == "year_month": + return f"{year:04d}-{month:02d}" + max_day = calendar.monthrange(year, month)[1] + day = draw(st.integers(min_value=1, max_value=max_day)) + return f"{year:04d}-{month:02d}-{day:02d}" class TestBuildDatePlaceholders: @@ -669,7 +684,7 @@ class TestComputeTimeSpanString: @settings(deadline=None) @given( - start=valid_date_strings(), + start=valid_date_strings(), # ty: ignore[missing-argument] delta_days=st.integers(min_value=0, max_value=36500), ) def test_non_negative_duration(self, start: str, delta_days: int) -> None: @@ -718,7 +733,7 @@ class TestComputeTimeSpanString: class TestGetDateObject: @settings(deadline=None) - @given(date_str=valid_date_strings()) + @given(date_str=valid_date_strings()) # ty: ignore[missing-argument] def test_valid_strings_produce_date_objects(self, date_str: str) -> None: result = get_date_object(date_str) assert isinstance(result, Date) diff --git a/tests/renderer/templater/test_entry_templates_from_input.py b/tests/renderer/templater/test_entry_templates_from_input.py index 911b4726..efe2c772 100644 --- a/tests/renderer/templater/test_entry_templates_from_input.py +++ b/tests/renderer/templater/test_entry_templates_from_input.py @@ -23,7 +23,7 @@ from rendercv.schema.models.cv.entries.education import EducationEntry from rendercv.schema.models.cv.entries.experience import ExperienceEntry from rendercv.schema.models.cv.entries.normal import NormalEntry from rendercv.schema.models.cv.entries.publication import PublicationEntry -from rendercv.schema.models.design.templates import ( +from rendercv.schema.models.design.classic_theme import ( EducationEntryTemplate, NormalEntryTemplate, PublicationEntryTemplate, diff --git a/tests/renderer/templater/test_string_processor.py b/tests/renderer/templater/test_string_processor.py index 3f2b8c6c..9f070fcb 100644 --- a/tests/renderer/templater/test_string_processor.py +++ b/tests/renderer/templater/test_string_processor.py @@ -9,7 +9,53 @@ from rendercv.renderer.templater.string_processor import ( make_keywords_bold, substitute_placeholders, ) -from tests.strategies import keyword_lists, placeholder_dicts, urls + +keyword_lists = st.lists( + st.text( + alphabet=st.characters(categories=("L", "N", "Zs")), + min_size=1, + max_size=30, + ).filter(lambda s: s.strip()), + min_size=0, + max_size=10, +) + + +@st.composite +def placeholder_dicts(draw: st.DrawFn) -> dict[str, str]: + """Generate placeholder dicts with UPPERCASE keys.""" + keys = draw( + st.lists( + st.from_regex(r"[A-Z]{1,15}", fullmatch=True), + min_size=0, + max_size=5, + unique=True, + ) + ) + values = draw( + st.lists( + st.text( + alphabet=st.characters(categories=("L", "N", "Zs")), + min_size=0, + max_size=20, + ), + min_size=len(keys), + max_size=len(keys), + ) + ) + return dict(zip(keys, values, strict=True)) + + +@st.composite +def urls(draw: st.DrawFn) -> str: + """Generate realistic URL strings with http/https protocol.""" + protocol = draw(st.sampled_from(["https://", "http://"])) + domain = draw(st.from_regex(r"[a-z]{2,10}\.[a-z]{2,4}", fullmatch=True)) + path = draw(st.from_regex(r"[a-z0-9_-]{0,20}", fullmatch=True)) + trailing_slash = draw(st.sampled_from(["", "/"])) + if path: + return f"{protocol}{domain}/{path}{trailing_slash}" + return f"{protocol}{domain}{trailing_slash}" class TestMakeKeywordsBold: @@ -98,7 +144,7 @@ class TestSubstitutePlaceholders: assert substitute_placeholders(text, {}) == text @settings(deadline=None) - @given(placeholders=placeholder_dicts()) + @given(placeholders=placeholder_dicts()) # ty: ignore[missing-argument] def test_all_keys_absent_from_output(self, placeholders: dict[str, str]) -> None: assume(placeholders) keys = set(placeholders.keys()) @@ -125,19 +171,19 @@ class TestCleanUrl: assert clean_url(url) == expected_clean_url @settings(deadline=None) - @given(url=urls()) + @given(url=urls()) # ty: ignore[missing-argument] def test_is_idempotent(self, url: str) -> None: assert clean_url(clean_url(url)) == clean_url(url) @settings(deadline=None) - @given(url=urls()) + @given(url=urls()) # ty: ignore[missing-argument] def test_removes_protocol(self, url: str) -> None: result = clean_url(url) assert "https://" not in result assert "http://" not in result @settings(deadline=None) - @given(url=urls()) + @given(url=urls()) # ty: ignore[missing-argument] def test_removes_trailing_slashes(self, url: str) -> None: result = clean_url(url) if result: diff --git a/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py b/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py index 2965819f..f361eb25 100644 --- a/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py +++ b/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py @@ -1,3 +1,4 @@ +import calendar from datetime import date as Date import pydantic @@ -13,7 +14,21 @@ from rendercv.schema.models.cv.entries.bases.entry_with_complex_fields import ( from rendercv.schema.models.cv.entries.bases.entry_with_date import ( validate_arbitrary_date, ) -from tests.strategies import valid_date_strings + + +@st.composite +def valid_date_strings(draw: st.DrawFn) -> str: + """Generate date strings in YYYY-MM-DD, YYYY-MM, or YYYY format.""" + year = draw(st.integers(min_value=1, max_value=9999)) + fmt = draw(st.sampled_from(["year", "year_month", "year_month_day"])) + if fmt == "year": + return f"{year:04d}" + month = draw(st.integers(min_value=1, max_value=12)) + if fmt == "year_month": + return f"{year:04d}-{month:02d}" + max_day = calendar.monthrange(year, month)[1] + day = draw(st.integers(min_value=1, max_value=max_day)) + return f"{year:04d}-{month:02d}-{day:02d}" class TestGetDateObject: @@ -69,7 +84,7 @@ class TestBaseEntryWithComplexFields: ) @settings(deadline=None) - @given(date=valid_date_strings()) + @given(date=valid_date_strings()) # ty: ignore[missing-argument] def test_date_only_clears_start_and_end(self, date: str) -> None: entry = BaseEntryWithComplexFields( date=date, start_date="2020-01", end_date="2021-01" @@ -88,7 +103,7 @@ class TestBaseEntryWithComplexFields: assert entry.end_date == "present" @settings(deadline=None) - @given(end_date=valid_date_strings()) + @given(end_date=valid_date_strings()) # ty: ignore[missing-argument] def test_end_only_becomes_date(self, end_date: str) -> None: entry = BaseEntryWithComplexFields(end_date=end_date) assert entry.date == end_date @@ -98,7 +113,7 @@ class TestBaseEntryWithComplexFields: class TestValidateArbitraryDate: @settings(deadline=None) - @given(date_str=valid_date_strings()) + @given(date_str=valid_date_strings()) # ty: ignore[missing-argument] def test_valid_date_strings_pass_through(self, date_str: str) -> None: result = validate_arbitrary_date(date_str) assert result == date_str @@ -120,9 +135,9 @@ class TestValidateArbitraryDate: assert result == text def test_invalid_month_raises(self) -> None: - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="month must be in"): validate_arbitrary_date("2020-13-01") def test_invalid_day_raises(self) -> None: - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="day is out of range"): validate_arbitrary_date("2020-02-30") diff --git a/tests/schema/models/cv/test_section.py b/tests/schema/models/cv/test_section.py index c6e7ded2..2899e771 100644 --- a/tests/schema/models/cv/test_section.py +++ b/tests/schema/models/cv/test_section.py @@ -1,6 +1,6 @@ import pydantic import pytest -from hypothesis import assume, given, settings +from hypothesis import given, settings from hypothesis import strategies as st # They are called dynamically in the test with `eval(f"{entry_type}(**entry)")`. diff --git a/tests/schema/models/cv/test_social_network.py b/tests/schema/models/cv/test_social_network.py index 0ae8f1d3..f29b72b4 100644 --- a/tests/schema/models/cv/test_social_network.py +++ b/tests/schema/models/cv/test_social_network.py @@ -147,7 +147,7 @@ class TestSocialNetwork: username=st.from_regex(r"[a-zA-Z0-9_-]{1,20}", fullmatch=True), ) def test_valid_network_url_is_valid_http_url( - self, network: str, username: str + self, network: SocialNetworkName, username: str ) -> None: sn = SocialNetwork(network=network, username=username) pydantic.TypeAdapter(pydantic.HttpUrl).validate_strings(sn.url) diff --git a/tests/schema/models/design/test_classic_theme.py b/tests/schema/models/design/test_classic_theme.py index 88cb6311..1bcc6b0a 100644 --- a/tests/schema/models/design/test_classic_theme.py +++ b/tests/schema/models/design/test_classic_theme.py @@ -1,4 +1,4 @@ -from rendercv.schema.models.design.typography import FontFamily, Typography +from rendercv.schema.models.design.classic_theme import FontFamily, Typography class TestTypography: diff --git a/tests/schema/models/design/test_typst_dimension.py b/tests/schema/models/design/test_typst_dimension.py index 3d8200b5..eb742fc8 100644 --- a/tests/schema/models/design/test_typst_dimension.py +++ b/tests/schema/models/design/test_typst_dimension.py @@ -8,7 +8,19 @@ from rendercv.schema.models.design.typst_dimension import ( TypstDimension, validate_typst_dimension, ) -from tests.strategies import typst_dimensions + + +@st.composite +def typst_dimensions(draw: st.DrawFn) -> str: + """Generate valid Typst dimension strings.""" + sign = draw(st.sampled_from(["", "-"])) + integer_part = draw(st.integers(min_value=0, max_value=999)) + has_decimal = draw(st.booleans()) + decimal_part = "" + if has_decimal: + decimal_part = "." + str(draw(st.integers(min_value=0, max_value=99))) + unit = draw(st.sampled_from(["cm", "in", "pt", "mm", "em"])) + return f"{sign}{integer_part}{decimal_part}{unit}" class TestTypstDimension: @@ -65,7 +77,7 @@ class TestTypstDimension: assert result == dimension @settings(deadline=None) - @given(dim=typst_dimensions()) + @given(dim=typst_dimensions()) # ty: ignore[missing-argument] def test_accepts_random_valid_dimensions(self, dim: str) -> None: assert validate_typst_dimension(dim) == dim diff --git a/tests/schema/models/settings/test_settings.py b/tests/schema/models/settings/test_settings.py index 1db0f6c8..bd2feea6 100644 --- a/tests/schema/models/settings/test_settings.py +++ b/tests/schema/models/settings/test_settings.py @@ -2,7 +2,8 @@ import datetime import pydantic import pytest -from hypothesis import given, settings as hypothesis_settings +from hypothesis import given +from hypothesis import settings as hypothesis_settings from hypothesis import strategies as st from rendercv.schema.models.settings.settings import Settings diff --git a/tests/strategies.py b/tests/strategies.py deleted file mode 100644 index 0b5c6e54..00000000 --- a/tests/strategies.py +++ /dev/null @@ -1,92 +0,0 @@ -"""Reusable Hypothesis strategies for RenderCV property-based tests.""" - -import calendar - -from hypothesis import strategies as st - - -@st.composite -def valid_date_strings(draw: st.DrawFn) -> str: - """Generate date strings in YYYY-MM-DD, YYYY-MM, or YYYY format.""" - year = draw(st.integers(min_value=1, max_value=9999)) - fmt = draw(st.sampled_from(["year", "year_month", "year_month_day"])) - if fmt == "year": - return f"{year:04d}" - month = draw(st.integers(min_value=1, max_value=12)) - if fmt == "year_month": - return f"{year:04d}-{month:02d}" - max_day = calendar.monthrange(year, month)[1] - day = draw(st.integers(min_value=1, max_value=max_day)) - return f"{year:04d}-{month:02d}-{day:02d}" - - -@st.composite -def date_inputs(draw: st.DrawFn) -> str | int: - """Generate inputs accepted by get_date_object (excluding 'present').""" - return draw( - st.one_of( - valid_date_strings(), - st.integers(min_value=1, max_value=9999), - ) - ) - - -keyword_lists = st.lists( - st.text( - alphabet=st.characters(categories=("L", "N", "Zs")), - min_size=1, - max_size=30, - ).filter(lambda s: s.strip()), - min_size=0, - max_size=10, -) - - -@st.composite -def placeholder_dicts(draw: st.DrawFn) -> dict[str, str]: - """Generate placeholder dicts with UPPERCASE keys.""" - keys = draw( - st.lists( - st.from_regex(r"[A-Z]{1,15}", fullmatch=True), - min_size=0, - max_size=5, - unique=True, - ) - ) - values = draw( - st.lists( - st.text( - alphabet=st.characters(categories=("L", "N", "Zs")), - min_size=0, - max_size=20, - ), - min_size=len(keys), - max_size=len(keys), - ) - ) - return dict(zip(keys, values, strict=True)) - - -@st.composite -def urls(draw: st.DrawFn) -> str: - """Generate realistic URL strings with http/https protocol.""" - protocol = draw(st.sampled_from(["https://", "http://"])) - domain = draw(st.from_regex(r"[a-z]{2,10}\.[a-z]{2,4}", fullmatch=True)) - path = draw(st.from_regex(r"[a-z0-9_-]{0,20}", fullmatch=True)) - trailing_slash = draw(st.sampled_from(["", "/"])) - if path: - return f"{protocol}{domain}/{path}{trailing_slash}" - return f"{protocol}{domain}{trailing_slash}" - - -@st.composite -def typst_dimensions(draw: st.DrawFn) -> str: - """Generate valid Typst dimension strings.""" - sign = draw(st.sampled_from(["", "-"])) - integer_part = draw(st.integers(min_value=0, max_value=999)) - has_decimal = draw(st.booleans()) - decimal_part = "" - if has_decimal: - decimal_part = "." + str(draw(st.integers(min_value=0, max_value=99))) - unit = draw(st.sampled_from(["cm", "in", "pt", "mm", "em"])) - return f"{sign}{integer_part}{decimal_part}{unit}" diff --git a/uv.lock b/uv.lock index 0d02368c..e956d637 100644 --- a/uv.lock +++ b/uv.lock @@ -1270,7 +1270,7 @@ provides-extras = ["full"] create-executable = [{ name = "pyinstaller", specifier = ">=6.17.0" }] dev = [ { name = "black", specifier = ">=26.3.1" }, - { name = "hypothesis", specifier = ">=6.100.0" }, + { name = "hypothesis", specifier = ">=6.151.9" }, { name = "prek", specifier = ">=0.3.6" }, { name = "pytest", specifier = ">=9.0.2" }, { name = "pytest-cov", specifier = ">=7.0.0" },