{"_id":"@10up/block-renderer-theme-json","_rev":"5-e53a843800aa5a76e39d8bfed41edb66","name":"@10up/block-renderer-theme-json","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.4":{"name":"@10up/block-renderer-theme-json","version":"0.1.4","keywords":["wordpress","theme","theme.json","design-tokens","gutenberg"],"license":"MIT","_id":"@10up/block-renderer-theme-json@0.1.4","maintainers":[{"name":"fabiankaegy","email":"mail@fabian-kaegy.de"},{"name":"eugene-manuilov","email":"eugene.manuilov@gmail.com"},{"name":"christianc1","email":"christian.m.chung@gmail.com"},{"name":"nicholasio","email":"nicholasio.oliveira@gmail.com"},{"name":"joesnellpdx","email":"joesnellpdx@gmail.com"},{"name":"devinle","email":"devin.leggett@gmail.com"},{"name":"darylldoyle","email":"daryll.doyle@10up.com"}],"homepage":"https://github.com/10up/json-block-renderer#readme","bugs":{"url":"https://github.com/10up/json-block-renderer/issues"},"dist":{"shasum":"606dbd46192c10488103b9ac18dacc2e070d29c4","tarball":"https://registry.npmjs.org/@10up/block-renderer-theme-json/-/block-renderer-theme-json-0.1.4.tgz","fileCount":34,"integrity":"sha512-v0tcR1+D2ftBzzie2WBp59qTfeqI3KSuYtzfCehDw6OxF0LzMRE9Wo8hZ+3uOfGDIuWrLjS3eHYInoF91Yoc1w==","signatures":[{"sig":"MEYCIQC6AzbEs9gGGLBtJO17HaACje+hXREDmUaLezGwOR1H3gIhAPrQrpybmEHUcZAFfnLdlMRf2hSRP3Ur6xCOKd25laCK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117504},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-theme-json-0.1.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","bench":"vitest bench --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"fabiankaegy","email":"mail@fabian-kaegy.de"},"_resolved":"/private/var/folders/j3/yjw_92c17dxg7b0pcdntvnqh0000gn/T/fb4c69526f674c4d92455d2664e4de21/10up-block-renderer-theme-json-0.1.4.tgz","_integrity":"sha512-v0tcR1+D2ftBzzie2WBp59qTfeqI3KSuYtzfCehDw6OxF0LzMRE9Wo8hZ+3uOfGDIuWrLjS3eHYInoF91Yoc1w==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/theme-json"},"_npmVersion":"11.7.0","description":"Theme.json parser and design token extractor for WordPress themes","directories":{},"_nodeVersion":"25.3.0","dependencies":{"zod":"^3.24.0","@10up/block-renderer-core":"0.1.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-theme-json_0.1.4_1768823478624_0.5450135719656137","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@10up/block-renderer-theme-json","version":"0.1.5","keywords":["wordpress","theme","theme.json","design-tokens","gutenberg"],"license":"MIT","_id":"@10up/block-renderer-theme-json@0.1.5","maintainers":[{"name":"fabiankaegy","email":"mail@fabian-kaegy.de"},{"name":"eugene-manuilov","email":"eugene.manuilov@gmail.com"},{"name":"christianc1","email":"christian.m.chung@gmail.com"},{"name":"nicholasio","email":"nicholasio.oliveira@gmail.com"},{"name":"joesnellpdx","email":"joesnellpdx@gmail.com"},{"name":"devinle","email":"devin.leggett@gmail.com"},{"name":"darylldoyle","email":"daryll.doyle@10up.com"}],"homepage":"https://github.com/10up/json-block-renderer#readme","bugs":{"url":"https://github.com/10up/json-block-renderer/issues"},"dist":{"shasum":"b2a05a3e256f3ee94243a0828e74dcfcb6485ec3","tarball":"https://registry.npmjs.org/@10up/block-renderer-theme-json/-/block-renderer-theme-json-0.1.5.tgz","fileCount":34,"integrity":"sha512-FKxaAQL9AdYgXy6T1lqe+VKfmh71J24kXpuxvNhz2BSTprhqs6SlsxU1EqDdCEZmTAIMT1VUg8q9OnXa3Zrk0A==","signatures":[{"sig":"MEYCIQCb5O96YXUeQZffdg5oJIRKhzM38kRIEKXla5wzoKxyVgIhAK3g9OVwTr76L0BTJtWKbCKZFkekBFBE4wa4cNY3neAg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117504},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-theme-json-0.1.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","bench":"vitest bench --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1bd83233-1e75-46a8-bd34-87aa861b3943"}},"_resolved":"/tmp/e7ede6ace496fa52bec08bb1d88a3aac/10up-block-renderer-theme-json-0.1.5.tgz","_integrity":"sha512-FKxaAQL9AdYgXy6T1lqe+VKfmh71J24kXpuxvNhz2BSTprhqs6SlsxU1EqDdCEZmTAIMT1VUg8q9OnXa3Zrk0A==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/theme-json"},"_npmVersion":"11.7.0","description":"Theme.json parser and design token extractor for WordPress themes","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.0","@10up/block-renderer-core":"0.1.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-theme-json_0.1.5_1768824030540_0.6267705589379811","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@10up/block-renderer-theme-json","version":"0.1.6","keywords":["wordpress","theme","theme.json","design-tokens","gutenberg"],"license":"MIT","_id":"@10up/block-renderer-theme-json@0.1.6","maintainers":[{"name":"fabiankaegy","email":"mail@fabian-kaegy.de"},{"name":"eugene-manuilov","email":"eugene.manuilov@gmail.com"},{"name":"christianc1","email":"christian.m.chung@gmail.com"},{"name":"nicholasio","email":"nicholasio.oliveira@gmail.com"},{"name":"joesnellpdx","email":"joesnellpdx@gmail.com"},{"name":"devinle","email":"devin.leggett@gmail.com"},{"name":"darylldoyle","email":"daryll.doyle@10up.com"}],"homepage":"https://github.com/10up/json-block-renderer#readme","bugs":{"url":"https://github.com/10up/json-block-renderer/issues"},"dist":{"shasum":"63f6cd6b7f4395183088d9eb479b1c866f6188a4","tarball":"https://registry.npmjs.org/@10up/block-renderer-theme-json/-/block-renderer-theme-json-0.1.6.tgz","fileCount":34,"integrity":"sha512-veMC4ugSF1KIfpMzhm61FxBhX22E0xGsfTxvmEjQl+edOMTeVejDXhLEGjQ71dMugntinegPkflK3iQLXul+Ig==","signatures":[{"sig":"MEYCIQCx0ZkZdzoyo8g1W/Nixzxhh0BuVT2W5qA2jia4Uxrl/gIhAL/STQmCJAk8dJO5GqSmIs0xeRHofGkeyul6OU2XFQFb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117504},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-theme-json-0.1.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","bench":"vitest bench --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1bd83233-1e75-46a8-bd34-87aa861b3943"}},"_resolved":"/tmp/437c6bac2ace8b689e0d08ea6a53c291/10up-block-renderer-theme-json-0.1.6.tgz","_integrity":"sha512-veMC4ugSF1KIfpMzhm61FxBhX22E0xGsfTxvmEjQl+edOMTeVejDXhLEGjQ71dMugntinegPkflK3iQLXul+Ig==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/theme-json"},"_npmVersion":"11.7.0","description":"Theme.json parser and design token extractor for WordPress themes","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.0","@10up/block-renderer-core":"0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-theme-json_0.1.6_1768824510448_0.360743519131274","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@10up/block-renderer-theme-json","version":"0.1.7","keywords":["wordpress","theme","theme.json","design-tokens","gutenberg"],"license":"MIT","_id":"@10up/block-renderer-theme-json@0.1.7","maintainers":[{"name":"fabiankaegy","email":"mail@fabian-kaegy.de"},{"name":"eugene-manuilov","email":"eugene.manuilov@gmail.com"},{"name":"christianc1","email":"christian.m.chung@gmail.com"},{"name":"nicholasio","email":"nicholasio.oliveira@gmail.com"},{"name":"joesnellpdx","email":"joesnellpdx@gmail.com"},{"name":"devinle","email":"devin.leggett@gmail.com"},{"name":"darylldoyle","email":"daryll.doyle@10up.com"}],"homepage":"https://github.com/10up/json-block-renderer#readme","bugs":{"url":"https://github.com/10up/json-block-renderer/issues"},"dist":{"shasum":"8a8adfca07730d51bdbf9583ea72f48b1e058889","tarball":"https://registry.npmjs.org/@10up/block-renderer-theme-json/-/block-renderer-theme-json-0.1.7.tgz","fileCount":38,"integrity":"sha512-i+jeeM0p936FcAsV4xFa/vQ+5X7lxLpNpoH6/hRDmxO0GI+SQR64uDXfKGgiyHruGuianrRkef++ryjNpD+aLA==","signatures":[{"sig":"MEYCIQCyw9u/vGCDF+OzwY6FVRiKnRnVWtatmztdF7JOm3b7/AIhAIJU1KehhiZ0/v+28l7VUbJb2baVAOciOc/ecdp6wh7o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137824},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-theme-json-0.1.7.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","bench":"vitest bench --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1bd83233-1e75-46a8-bd34-87aa861b3943"}},"_resolved":"/tmp/6fa2d2099c113cde4d529326e14a1411/10up-block-renderer-theme-json-0.1.7.tgz","_integrity":"sha512-i+jeeM0p936FcAsV4xFa/vQ+5X7lxLpNpoH6/hRDmxO0GI+SQR64uDXfKGgiyHruGuianrRkef++ryjNpD+aLA==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/theme-json"},"_npmVersion":"11.8.0","description":"Theme.json parser and design token extractor for WordPress themes","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.0","@10up/block-renderer-core":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-theme-json_0.1.7_1769077368535_0.3967011794420596","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-19T11:51:18.541Z","modified":"2026-08-21T19:38:49.941Z","0.1.4":"2026-01-19T11:51:18.768Z","0.1.5":"2026-01-19T12:00:30.668Z","0.1.6":"2026-01-19T12:08:30.605Z","0.1.7":"2026-01-22T10:22:48.689Z"},"bugs":{"url":"https://github.com/10up/json-block-renderer/issues"},"license":"MIT","homepage":"https://github.com/10up/json-block-renderer#readme","keywords":["wordpress","theme","theme.json","design-tokens","gutenberg"],"repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/theme-json"},"description":"Theme.json parser and design token extractor for WordPress themes","maintainers":[{"email":"mail@fabian-kaegy.de","name":"fabiankaegy"},{"email":"eugene.manuilov@gmail.com","name":"eugene-manuilov"},{"email":"christian.m.chung@gmail.com","name":"christianc1"},{"email":"nicholasio.oliveira@gmail.com","name":"nicholasio"},{"email":"joesnellpdx@gmail.com","name":"joesnellpdx"},{"email":"devin.leggett@gmail.com","name":"devinle"},{"email":"daryll.doyle@10up.com","name":"darylldoyle"},{"email":"jeffpaul@hotmail.com","name":"jeffpaul"}],"readme":"# @10up/block-renderer-theme-json\n\nParse WordPress `theme.json` files and extract design tokens for colors, typography, spacing, and more.\n\n## Installation\n\n```bash\nnpm install @10up/block-renderer-theme-json\n# or\npnpm add @10up/block-renderer-theme-json\n```\n\n## Overview\n\nWordPress themes define their design system in `theme.json`. This package:\n\n1. **Parses theme.json** - Supports v2 and v3 schema versions\n2. **Extracts design tokens** - Colors, gradients, fonts, spacing, shadows\n3. **Loads style variations** - From the `/styles` directory\n4. **CSS variable utilities** - Convert between WordPress formats and actual CSS\n\n## Usage\n\n### Parse a Complete Theme\n\nThe main entry point - parses theme.json and loads style variations:\n\n```typescript\nimport { parseTheme } from '@10up/block-renderer-theme-json';\n\nconst theme = parseTheme('/path/to/theme');\n\n// Access extracted tokens\nconsole.log(theme.tokens.colors.palette);\n// [{ slug: 'primary', color: '#0073aa', name: 'Primary' }, ...]\n\nconsole.log(theme.tokens.typography.fontSizes);\n// [{ slug: 'small', size: '13px', name: 'Small' }, ...]\n\nconsole.log(theme.tokens.spacing.spacingSizes);\n// [{ slug: '50', size: '1.5rem', name: 'Medium' }, ...]\n\n// Access theme styles\nconsole.log(theme.styles.global);\n// { color: { background: 'var:preset|color|base' }, ... }\n\n// Access style variations\nconsole.log(theme.variations);\n// { 'dark': { global: { color: { ... } } }, ... }\n\n// Access raw theme.json\nconsole.log(theme.raw);\n```\n\n### Parse theme.json Directly\n\nIf you already have the theme.json content:\n\n```typescript\nimport { parseThemeJson } from '@10up/block-renderer-theme-json';\n\nconst themeJson = {\n  version: 3,\n  settings: {\n    color: {\n      palette: [\n        { slug: 'primary', color: '#0073aa', name: 'Primary' }\n      ]\n    }\n  }\n};\n\nconst result = parseThemeJson(themeJson);\nconsole.log(result.tokens);\n```\n\n### Extract Tokens Only\n\n```typescript\nimport { extractTokens } from '@10up/block-renderer-theme-json';\n\nconst tokens = extractTokens(themeJson.settings);\nconsole.log(tokens.colors.palette);\nconsole.log(tokens.typography.fontFamilies);\n```\n\n### Extract Styles Only\n\n```typescript\nimport { extractStyles } from '@10up/block-renderer-theme-json';\n\nconst styles = extractStyles(themeJson.styles);\nconsole.log(styles.global);     // Global styles\nconsole.log(styles.elements);   // Element styles (h1, p, link, etc.)\nconsole.log(styles.blocks);     // Per-block styles\n```\n\n### Load Style Variations\n\n```typescript\nimport { loadStyleVariations } from '@10up/block-renderer-theme-json';\n\nconst variations = loadStyleVariations('/path/to/theme');\n// Reads all .json files from /path/to/theme/styles/\n// { 'dark': { ... }, 'contrast': { ... } }\n```\n\n### Load Section Styles\n\nFor themes that define section-specific styles (like hero sections, testimonials, etc.):\n\n```typescript\nimport { loadSectionStyles } from '@10up/block-renderer-theme-json';\n\nconst sectionStyles = loadSectionStyles('/path/to/theme');\n// Returns map of section name to styles\n```\n\n### Parse Theme Options\n\n```typescript\nimport { parseTheme } from '@10up/block-renderer-theme-json';\nimport type { ParseThemeOptions } from '@10up/block-renderer-theme-json';\n\nconst options: ParseThemeOptions = {\n  loadVariations: true,  // Load style variations (default: true)\n  loadSectionStyles: true  // Load section styles (default: true)\n};\n\nconst theme = parseTheme('/path/to/theme', options);\n```\n\n## CSS Variable Utilities\n\nWordPress uses two formats for design token references:\n\n1. **WordPress format**: `var:preset|color|primary` (used in block attributes)\n2. **CSS format**: `var(--wp--preset--color--primary)` (actual CSS output)\n\n### Generate WordPress Reference\n\n```typescript\nimport { generateCssVarReference } from '@10up/block-renderer-theme-json';\n\ngenerateCssVarReference('color', 'primary');\n// 'var:preset|color|primary'\n\ngenerateCssVarReference('spacing', '50');\n// 'var:preset|spacing|50'\n\ngenerateCssVarReference('font-family', 'heading');\n// 'var:preset|font-family|heading'\n```\n\n### Generate CSS Custom Property\n\n```typescript\nimport { generateCssPropertyName, generateCssVarFunction } from '@10up/block-renderer-theme-json';\n\ngenerateCssPropertyName('color', 'primary');\n// '--wp--preset--color--primary'\n\ngenerateCssVarFunction('color', 'primary');\n// 'var(--wp--preset--color--primary)'\n```\n\n### Parse References\n\n```typescript\nimport { parseCssVarReference, isCssVarReference } from '@10up/block-renderer-theme-json';\n\nisCssVarReference('var:preset|color|primary');  // true\nisCssVarReference('#ff0000');                   // false\n\nparseCssVarReference('var:preset|color|primary');\n// { type: 'color', slug: 'primary' }\n\nparseCssVarReference('var:preset|spacing|50');\n// { type: 'spacing', slug: '50' }\n```\n\n### Convert to CSS\n\n```typescript\nimport { convertToActualCss } from '@10up/block-renderer-theme-json';\n\nconvertToActualCss('var:preset|color|primary');\n// 'var(--wp--preset--color--primary)'\n\nconvertToActualCss('#ff0000');  // Returns unchanged if not a reference\n// '#ff0000'\n```\n\n## Token Utilities\n\n### Get Available Slugs\n\n```typescript\nimport {\n  getColorSlugs,\n  getGradientSlugs,\n  getFontFamilySlugs,\n  getFontSizeSlugs,\n  getSpacingSlugs,\n  getShadowSlugs,\n} from '@10up/block-renderer-theme-json';\n\nconst theme = parseTheme('/path/to/theme');\n\ngetColorSlugs(theme.tokens);       // ['primary', 'secondary', 'base', ...]\ngetGradientSlugs(theme.tokens);    // ['vivid-cyan-blue', ...]\ngetFontFamilySlugs(theme.tokens);  // ['system', 'heading', 'body', ...]\ngetFontSizeSlugs(theme.tokens);    // ['small', 'medium', 'large', ...]\ngetSpacingSlugs(theme.tokens);     // ['20', '30', '40', '50', ...]\ngetShadowSlugs(theme.tokens);      // ['natural', 'deep', 'sharp', ...]\n```\n\n### Validate Slugs\n\n```typescript\nimport { validateSlug } from '@10up/block-renderer-theme-json';\n\nvalidateSlug(theme.tokens, 'color', 'primary');     // true\nvalidateSlug(theme.tokens, 'color', 'nonexistent'); // false\nvalidateSlug(theme.tokens, 'font-size', 'large');   // true\n```\n\n### Get Token Values\n\n```typescript\nimport { getTokenValue } from '@10up/block-renderer-theme-json';\n\ngetTokenValue(theme.tokens, 'color', 'primary');     // '#0073aa'\ngetTokenValue(theme.tokens, 'font-size', 'large');   // '1.5rem'\ngetTokenValue(theme.tokens, 'spacing', '50');        // '1.5rem'\ngetTokenValue(theme.tokens, 'color', 'nonexistent'); // null\n```\n\n## Ignite WP Support\n\nSpecial support for [Ignite WP](https://developer.wordpress.org/) themes with fluid typography:\n\n### Extract Ignite Tokens\n\n```typescript\nimport {\n  extractIgniteTokens,\n  extractTypographyPresets,\n  extractFluidValues,\n  isFluidValue,\n  getTypographyPresetClassName,\n} from '@10up/block-renderer-theme-json';\n\n// Check if a value uses fluid typography\nisFluidValue({ min: '1rem', max: '2rem' });  // true\nisFluidValue('1.5rem');                       // false\n\n// Extract fluid values from theme settings\nconst fluidValues = extractFluidValues(themeJson.settings);\n\n// Extract typography presets (display, heading, body, etc.)\nconst typographyPresets = extractTypographyPresets(themeJson.settings);\n// { display: { fontFamily: '...', fontSize: '...' }, ... }\n\n// Get the CSS class name for a typography preset\ngetTypographyPresetClassName('display');  // 'has-display-typography'\n\n// Extract all Ignite-specific tokens\nconst igniteTokens = extractIgniteTokens(themeJson.settings);\n// { typographyPresets: {...}, fluidValues: {...} }\n```\n\n### Ignite Types\n\n```typescript\ninterface FluidValue {\n  min: string;\n  max: string;\n}\n\ninterface TypographyPreset {\n  fontFamily?: string;\n  fontSize?: string | FluidValue;\n  fontWeight?: string;\n  lineHeight?: string;\n  letterSpacing?: string;\n  textTransform?: string;\n}\n\ninterface IgniteTokens {\n  typographyPresets: Record<string, TypographyPreset>;\n  fluidValues: Record<string, FluidValue>;\n}\n```\n\n## CSS Generator\n\nGenerate CSS from theme.json section styles:\n\n```typescript\nimport {\n  generateSectionStyleCss,\n  generateAllSectionStylesCss,\n  blockTypeToSelector,\n  flattenCustomToProperties,\n} from '@10up/block-renderer-theme-json';\n\n// Convert a block type to CSS selector\nblockTypeToSelector('core/paragraph');  // '.wp-block-paragraph'\nblockTypeToSelector('core/group');      // '.wp-block-group'\n\n// Flatten custom properties for CSS\nconst properties = flattenCustomToProperties({\n  spacing: { gap: '1rem' }\n});\n// { '--wp--custom--spacing--gap': '1rem' }\n\n// Generate CSS for a single section style\nconst css = generateSectionStyleCss('hero', sectionStyle);\n\n// Generate CSS for all section styles\nconst allCss = generateAllSectionStylesCss(sectionStyles);\n```\n\n## Types\n\n### ThemeTokens\n\n```typescript\ninterface ThemeTokens {\n  colors: {\n    palette: ColorPreset[];\n    gradients: GradientPreset[];\n    duotone: DuotonePreset[];\n  };\n  typography: {\n    fontFamilies: FontFamilyPreset[];\n    fontSizes: FontSizePreset[];\n  };\n  spacing: {\n    spacingSizes: SpacingPreset[];\n    units: string[];\n  };\n  shadow: {\n    presets: ShadowPreset[];\n  };\n  layout: {\n    contentSize?: string;\n    wideSize?: string;\n  };\n  custom: Record<string, unknown>;\n}\n```\n\n### Preset Types\n\n```typescript\ninterface ColorPreset {\n  name: string;\n  slug: string;\n  color: string;\n}\n\ninterface GradientPreset {\n  name: string;\n  slug: string;\n  gradient: string;\n}\n\ninterface FontSizePreset {\n  name: string;\n  slug: string;\n  size: string;\n  fluid?: { min?: string; max?: string } | boolean;\n}\n\ninterface FontFamilyPreset {\n  name: string;\n  slug: string;\n  fontFamily: string;\n  fontFace?: FontFace[];\n}\n\ninterface SpacingPreset {\n  name: string;\n  slug: string;\n  size: string;\n}\n\ninterface ShadowPreset {\n  name: string;\n  slug: string;\n  shadow: string;\n}\n```\n\n### ParsedTheme\n\n```typescript\ninterface ParsedTheme {\n  version: number;\n  tokens: ThemeTokens;\n  styles: ThemeStyles;\n  variations: Record<string, Partial<ThemeStyles>>;\n  raw: ThemeJson;\n}\n```\n\n### TokenType\n\n```typescript\ntype TokenType =\n  | 'color'\n  | 'gradient'\n  | 'font-family'\n  | 'font-size'\n  | 'spacing'\n  | 'shadow'\n  | 'duotone';\n```\n\n## Complete Exports\n\n### Parser Functions\n\n| Function | Description |\n|----------|-------------|\n| `parseTheme(themePath, options?)` | Parse theme directory, return tokens, styles, variations |\n| `parseThemeJson(themeJson)` | Parse theme.json object directly |\n| `extractTokens(settings)` | Extract tokens from settings object |\n| `extractStyles(styles)` | Extract styles from styles object |\n| `loadThemeJson(filePath)` | Load and parse a theme.json file |\n| `loadStyleVariations(themePath)` | Load style variations from /styles |\n| `loadSectionStyles(themePath)` | Load section styles from theme |\n\n### CSS Variable Functions\n\n| Function | Description |\n|----------|-------------|\n| `generateCssVarReference(type, slug)` | Generate WordPress var:preset format |\n| `generateCssPropertyName(type, slug)` | Generate CSS custom property name |\n| `generateCssVarFunction(type, slug)` | Generate var() CSS function |\n| `parseCssVarReference(reference)` | Parse var:preset string to components |\n| `isCssVarReference(value)` | Check if value is a var:preset reference |\n| `convertToActualCss(reference)` | Convert var:preset to actual CSS |\n\n### Token Utility Functions\n\n| Function | Description |\n|----------|-------------|\n| `getColorSlugs(tokens)` | Get all color slugs |\n| `getGradientSlugs(tokens)` | Get all gradient slugs |\n| `getFontFamilySlugs(tokens)` | Get all font family slugs |\n| `getFontSizeSlugs(tokens)` | Get all font size slugs |\n| `getSpacingSlugs(tokens)` | Get all spacing slugs |\n| `getShadowSlugs(tokens)` | Get all shadow slugs |\n| `validateSlug(tokens, type, slug)` | Check if slug exists in tokens |\n| `getTokenValue(tokens, type, slug)` | Get actual value for a token |\n\n### Ignite WP Functions\n\n| Function | Description |\n|----------|-------------|\n| `isFluidValue(value)` | Check if value is a fluid typography value |\n| `extractFluidValues(settings)` | Extract fluid values from theme settings |\n| `extractTypographyPresets(settings)` | Extract typography presets |\n| `extractIgniteTokens(settings)` | Extract all Ignite-specific tokens |\n| `getTypographyPresetClassName(preset)` | Get CSS class for typography preset |\n\n### CSS Generator Functions\n\n| Function | Description |\n|----------|-------------|\n| `blockTypeToSelector(blockType)` | Convert block type to CSS selector |\n| `flattenCustomToProperties(custom)` | Flatten custom properties for CSS |\n| `generateSectionStyleCss(name, style)` | Generate CSS for a section style |\n| `generateAllSectionStylesCss(styles)` | Generate CSS for all section styles |\n\n### Types\n\n| Type | Description |\n|------|-------------|\n| `ThemeTokens` | Complete tokens structure |\n| `ThemeStyles` | Theme styles structure |\n| `SectionStyle` | Section-specific styles |\n| `ParsedTheme` | Complete parsed theme data |\n| `ParseThemeOptions` | Options for parseTheme function |\n| `ThemeJson` | Raw theme.json structure |\n| `ThemeJsonSettings` | Settings section type |\n| `ColorPreset` | Color token definition |\n| `GradientPreset` | Gradient token definition |\n| `DuotonePreset` | Duotone filter definition |\n| `FontFamilyPreset` | Font family definition |\n| `FontFace` | Font face definition |\n| `FontSizePreset` | Font size definition |\n| `SpacingPreset` | Spacing token definition |\n| `ShadowPreset` | Shadow token definition |\n| `StyleObject` | Style object for elements/blocks |\n| `SidesObject` | Margin/padding sides object |\n| `TokenType` | Union of token type strings |\n| `FluidValue` | Fluid typography min/max value |\n| `TypographyPreset` | Typography preset definition |\n| `IgniteTokens` | Ignite WP-specific tokens |\n\n### Zod Schemas\n\n| Schema | Description |\n|--------|-------------|\n| `colorPresetSchema` | Validate color preset objects |\n| `gradientPresetSchema` | Validate gradient preset objects |\n| `duotonePresetSchema` | Validate duotone preset objects |\n| `fontSizePresetSchema` | Validate font size preset objects |\n| `spacingPresetSchema` | Validate spacing preset objects |\n| `shadowPresetSchema` | Validate shadow preset objects |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}