# Content Types Configuration Contracts # # Type contracts for content-kinds configuration with comprehensive validation # and documentation for each field. { # Content features configuration ContentFeatures = { style_mode | String | doc "Display mode for content (e.g., 'row', 'grid', 'masonry')", style_css | String | doc "CSS class prefix for styling (e.g., 'blog-content', 'recipe-content')", use_feature | Bool | doc "Enable featured content highlighting", use_categories | Bool | doc "Enable category organization and filtering", use_tags | Bool | doc "Enable tag-based classification and search", use_emojis | Bool | doc "Enable emoji support in content display", cta_view | String | doc "Call-to-action component name (e.g., 'BlogCTAView', 'RecipesCTAView')", # Pagination features default_page_size | Number | doc "Default number of items per page" | optional, page_size_options | Array Number | doc "Available page size options for users (e.g., [5, 10, 20])" | optional, show_page_info | Bool | doc "Display pagination information (e.g., 'Showing 1-10 of 50')" | optional, pagination_style | String | doc "Pagination UI style (e.g., 'numbered', 'simple', 'infinite')" | optional, # Specialized features (for tutorial content, etc.) show_difficulty | Bool | doc "Display difficulty level indicator" | optional, show_duration | Bool | doc "Display estimated time/duration" | optional, show_prerequisites | Bool | doc "Display required prerequisites" | optional, }, # Content kind/type configuration ContentKind = { name | String | doc "Unique identifier for this content type (e.g., 'blog', 'recipes')", directory | String | doc "Directory name where content is stored (relative to content root)", enabled | Bool | doc "Whether this content type is active and should be processed" | default = true, is_default | Bool | doc "Whether this is the default/fallback content type" | optional, specialized | Bool | doc "Whether this content type has specialized handling (may have schema differences)" | optional, features | ContentFeatures | doc "Feature configuration for this content type", }, # Root configuration structure ContentKindsFile = { content_kinds | Array ContentKind | doc "Array of content type configurations", }, # Taxonomy entry used for categories and tags TaxonomyEntry = { id | String, slug | String, emoji | String | default = "", icon | String | default = "", }, # Standalone content metadata file (blog.ncl, recipes.ncl, etc.) ContentMetadata = { content_type = { id | String, slug | String, name | String, description | String, }, categories | Array TaxonomyEntry | default = [], tags | Array TaxonomyEntry | default = [], }, }