{"_id":"@10up/block-renderer-core","_rev":"5-8ce5eda5f3fa5a38bd8b572b0e8cd053","name":"@10up/block-renderer-core","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.4":{"name":"@10up/block-renderer-core","version":"0.1.4","keywords":["wordpress","blocks","gutenberg","json","renderer"],"license":"MIT","_id":"@10up/block-renderer-core@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":"a3023f01ae3c07cc1a349d32af81a7995717b013","tarball":"https://registry.npmjs.org/@10up/block-renderer-core/-/block-renderer-core-0.1.4.tgz","fileCount":26,"integrity":"sha512-MdFUJ0M0UkHrZjXyyk9FdGjyOeOHMd9s/Q06E08iBeRdix7GOXw7+wuprzz6quASyeURHW7mRdpO4aqzxx/Ciw==","signatures":[{"sig":"MEUCICtfbCLsD44C/dTTuB15fiB/vRDe8x/ENnMbz1mbfscOAiEAuHwY+CikNsN/4k+TQh4khWBDx8QYyB+2c6g1gb6C6mI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44091},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-core-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","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/63188ab1d3d6a077a5250c227062ae13/10up-block-renderer-core-0.1.4.tgz","_integrity":"sha512-MdFUJ0M0UkHrZjXyyk9FdGjyOeOHMd9s/Q06E08iBeRdix7GOXw7+wuprzz6quASyeURHW7mRdpO4aqzxx/Ciw==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/core"},"_npmVersion":"11.7.0","description":"Core types and interfaces for block-renderer","directories":{},"_nodeVersion":"25.3.0","dependencies":{"zod":"^3.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-core_0.1.4_1768823460795_0.5152564097653012","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@10up/block-renderer-core","version":"0.1.5","keywords":["wordpress","blocks","gutenberg","json","renderer"],"license":"MIT","_id":"@10up/block-renderer-core@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":"702cc8f774854b2bd77be05d88d4f182cdc358be","tarball":"https://registry.npmjs.org/@10up/block-renderer-core/-/block-renderer-core-0.1.5.tgz","fileCount":26,"integrity":"sha512-XS1zk9ehQVEfJjYuR6okxQhBYHAeZjxvOjIyXUFBTWAb8yBEZWC5GmdYmSkAXzO8+0eJI4Fs5NI69t5xoixqEA==","signatures":[{"sig":"MEQCIAi4kzz5dVhqheUCvsmtkwNekZsmz+FuVOlDHjpm0bs/AiAgIGDr+IIypHzrsVzWXHHso78LKJIk5gLEE9Qg9V5tpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44091},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-core-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","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:4166d4dd-2824-4ea0-ab22-6b45de1e9e0b"}},"_resolved":"/tmp/aac57406b274a258fb28447da042e18f/10up-block-renderer-core-0.1.5.tgz","_integrity":"sha512-XS1zk9ehQVEfJjYuR6okxQhBYHAeZjxvOjIyXUFBTWAb8yBEZWC5GmdYmSkAXzO8+0eJI4Fs5NI69t5xoixqEA==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/core"},"_npmVersion":"11.7.0","description":"Core types and interfaces for block-renderer","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-core_0.1.5_1768824017004_0.4190787746285718","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@10up/block-renderer-core","version":"0.1.6","keywords":["wordpress","blocks","gutenberg","json","renderer"],"license":"MIT","_id":"@10up/block-renderer-core@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":"bb2855a877f59c2aa0b5346f9b5870a00f9cda57","tarball":"https://registry.npmjs.org/@10up/block-renderer-core/-/block-renderer-core-0.1.6.tgz","fileCount":26,"integrity":"sha512-RwiNGQuzrNd9inVDKIC6Jg5eFrcyAP9G4hNTs94+UZpdHO4dPEZA2eXRly6Akq5vhOBlwfePmhxEENd38KtEHA==","signatures":[{"sig":"MEYCIQCFHaE7WxMXawAWIDXxU8tJdx2/H36eReqydNIIKI85AgIhAL6+R5DgKtJLun5g7ZaVPopgJ7bv4LXTEXafdTNh28o+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44091},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-core-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","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:4166d4dd-2824-4ea0-ab22-6b45de1e9e0b"}},"_resolved":"/tmp/b60e46336969b273954263c3144b3d2a/10up-block-renderer-core-0.1.6.tgz","_integrity":"sha512-RwiNGQuzrNd9inVDKIC6Jg5eFrcyAP9G4hNTs94+UZpdHO4dPEZA2eXRly6Akq5vhOBlwfePmhxEENd38KtEHA==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/core"},"_npmVersion":"11.7.0","description":"Core types and interfaces for block-renderer","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-core_0.1.6_1768824509778_0.0961622806279343","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@10up/block-renderer-core","version":"0.2.0","keywords":["wordpress","blocks","gutenberg","json","renderer"],"license":"MIT","_id":"@10up/block-renderer-core@0.2.0","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":"05c677df91ea655cf147faa1dca53d67794a8515","tarball":"https://registry.npmjs.org/@10up/block-renderer-core/-/block-renderer-core-0.2.0.tgz","fileCount":26,"integrity":"sha512-R1Ds+4pqHI8Nj3PbiBDpQtghEaEi/7gRbGYArnGM7wj6xgGA9zJLLcX6l/hqJ+XNUT4zoUHnK/7xULX30K0YqQ==","signatures":[{"sig":"MEUCIQC+QZkvuL0yaEDsikDo3kX0PzEkwKazj5dFXjmmKmoxsQIgDJ6hsc1gGKCCQv+lrW+3G4gRkTiW6/VRJ9knNcUgDRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45395},"main":"./dist/index.js","type":"module","_from":"file:10up-block-renderer-core-0.2.0.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","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:4166d4dd-2824-4ea0-ab22-6b45de1e9e0b"}},"_resolved":"/tmp/f86bed0830f719bfc756e8d99ba68801/10up-block-renderer-core-0.2.0.tgz","_integrity":"sha512-R1Ds+4pqHI8Nj3PbiBDpQtghEaEi/7gRbGYArnGM7wj6xgGA9zJLLcX6l/hqJ+XNUT4zoUHnK/7xULX30K0YqQ==","repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/core"},"_npmVersion":"11.8.0","description":"Core types and interfaces for block-renderer","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^3.24.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","typescript":"^5.7.0"},"_npmOperationalInternal":{"tmp":"tmp/block-renderer-core_0.2.0_1769077368509_0.2793436706070658","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-19T11:51:00.686Z","modified":"2026-08-21T19:38:47.127Z","0.1.4":"2026-01-19T11:51:00.928Z","0.1.5":"2026-01-19T12:00:17.146Z","0.1.6":"2026-01-19T12:08:29.921Z","0.2.0":"2026-01-22T10:22:48.663Z"},"bugs":{"url":"https://github.com/10up/json-block-renderer/issues"},"license":"MIT","homepage":"https://github.com/10up/json-block-renderer#readme","keywords":["wordpress","blocks","gutenberg","json","renderer"],"repository":{"url":"git+https://github.com/10up/json-block-renderer.git","type":"git","directory":"packages/core"},"description":"Core types and interfaces for block-renderer","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-core\n\nShared TypeScript types and Zod schemas for the JSON Block Renderer ecosystem. This package provides the foundational types used across all other packages in the monorepo.\n\n## Installation\n\n```bash\nnpm install @10up/block-renderer-core\n# or\npnpm add @10up/block-renderer-core\n```\n\n## Overview\n\nThis package exports three categories of types:\n\n1. **Block Tree Types** - The JSON format for representing WordPress blocks\n2. **Block Definition Types** - Metadata and schemas for block validation\n3. **Block JSON Types** - TypeScript definitions for WordPress `block.json` files\n\n## Block Tree Format\n\nThe block tree uses a **flat structure with key references** instead of deep nesting. This design (inspired by [Vercel's json-render](https://github.com/vercel-labs/json-render)) makes it easier for AI to generate valid structures.\n\n### BlockElement\n\nA single block element in the tree:\n\n```typescript\ninterface BlockElement {\n  /** Unique identifier for this element */\n  key: string;\n  /** Block name, e.g., \"core/paragraph\", \"core/group\" */\n  type: string;\n  /** Block attributes/props */\n  props: Record<string, unknown>;\n  /** Keys of child elements (for blocks with InnerBlocks) */\n  children?: string[];\n  /** Key of the parent element */\n  parentKey?: string;\n}\n```\n\n### BlockTree\n\nThe complete block tree structure:\n\n```typescript\ninterface BlockTree {\n  /** Key of the root element */\n  root: string;\n  /** Map of element keys to BlockElement objects */\n  elements: Record<string, BlockElement>;\n}\n```\n\n### Example\n\n```typescript\nimport type { BlockTree, BlockElement } from '@10up/block-renderer-core';\n\nconst tree: BlockTree = {\n  root: 'group-1',\n  elements: {\n    'group-1': {\n      key: 'group-1',\n      type: 'core/group',\n      props: { layout: { type: 'constrained' } },\n      children: ['heading-1', 'para-1']\n    },\n    'heading-1': {\n      key: 'heading-1',\n      type: 'core/heading',\n      props: { content: 'Welcome', level: 2 },\n      parentKey: 'group-1'\n    },\n    'para-1': {\n      key: 'para-1',\n      type: 'core/paragraph',\n      props: { content: 'Hello world' },\n      parentKey: 'group-1'\n    }\n  }\n};\n```\n\n## Block Template Format\n\nAn alternative PHP-style nested array format, useful for migration scripts and server-side rendering:\n\n### BlockTemplateEntry\n\nA single entry in a block template:\n\n```typescript\ntype BlockTemplateEntry =\n  | [string]                                           // Just block type\n  | [string, Record<string, unknown>]                  // Block type + attributes\n  | [string, Record<string, unknown>, BlockTemplateEntry[]]; // Full entry with children\n```\n\n### BlockTemplate\n\nAn array of block template entries:\n\n```typescript\ntype BlockTemplate = BlockTemplateEntry[];\n```\n\n### Example\n\n```typescript\nimport type { BlockTemplate, BlockTemplateEntry } from '@10up/block-renderer-core';\n\nconst template: BlockTemplate = [\n  ['core/group', { layout: { type: 'constrained' } }, [\n    ['core/heading', { content: 'Welcome', level: 2 }],\n    ['core/paragraph', { content: 'Hello world' }],\n  ]],\n];\n\n// This corresponds to the WordPress PHP format:\n// array(\n//   array( 'core/group', array( 'layout' => array( 'type' => 'constrained' ) ), array(\n//     array( 'core/heading', array( 'content' => 'Welcome', 'level' => 2 ) ),\n//     array( 'core/paragraph', array( 'content' => 'Hello world' ) ),\n//   )),\n// )\n```\n\n### When to Use Each Format\n\n| Format | Best For |\n|--------|----------|\n| **BlockTree** (flat) | AI generation, complex validation, IDE tooling |\n| **BlockTemplate** (nested) | Migration scripts, PHP-to-JS conversion, manual authoring |\n\n## Block Definition Types\n\nUsed for validation and prompt generation:\n\n### BlockDefinition\n\n```typescript\ninterface BlockDefinition {\n  /** Block name, e.g., \"core/paragraph\" */\n  name: string;\n  /** Human-readable title */\n  title?: string;\n  /** Block description */\n  description?: string;\n  /** Zod schema for validating block attributes */\n  schema: z.ZodObject<z.ZodRawShape>;\n  /** Valid parent blocks (direct parent) */\n  parent?: string[];\n  /** Valid ancestor blocks (anywhere in tree path) */\n  ancestor?: string[];\n  /** Valid child blocks, or true for any */\n  allowedBlocks?: string[] | true;\n  /** Whether block supports InnerBlocks (children) */\n  hasInnerBlocks: boolean;\n  /** Whether block is dynamic (server-rendered) */\n  isDynamic: boolean;\n  /** Block category */\n  category?: string;\n  /** Block keywords for search */\n  keywords?: string[];\n}\n```\n\n### BlockCatalog\n\nA map of block names to their definitions:\n\n```typescript\ntype BlockCatalog = Map<string, BlockDefinition>;\n```\n\n### Validation Result Types\n\n```typescript\ninterface ValidationResult {\n  valid: boolean;\n  errors: string[];\n  warnings?: string[];\n}\n\ninterface TreeValidationResult extends ValidationResult {\n  /** Per-element validation results keyed by element key */\n  elementResults?: Record<string, ValidationResult>;\n}\n```\n\n## Block JSON Types\n\nTypeScript definitions matching the WordPress [block.json schema](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/):\n\n### BlockJson\n\n```typescript\ninterface BlockJson {\n  name: string;                                    // Required: Block name\n  title: string;                                   // Required: Display title\n  category?: string;                               // Block category\n  description?: string;                            // Block description\n  keywords?: string[];                             // Search keywords\n  attributes?: Record<string, BlockAttributeDefinition>;\n  supports?: BlockSupports;                        // Feature support flags\n  parent?: string[];                               // Direct parent constraints\n  ancestor?: string[];                             // Ancestor constraints\n  allowedBlocks?: string[];                        // Allowed child blocks\n  providesContext?: Record<string, string>;        // Context provided to children\n  usesContext?: string[];                          // Context consumed from parents\n  styles?: Array<{ name: string; label: string; isDefault?: boolean }>;\n  variations?: Array<BlockVariation>;\n  render?: string;                                 // Server-side render callback\n  // ... and more\n}\n```\n\n### BlockAttributeDefinition\n\n```typescript\ninterface BlockAttributeDefinition {\n  type?: BlockAttributeType | BlockAttributeType[];\n  enum?: (string | number | boolean)[];\n  default?: unknown;\n  source?: 'attribute' | 'text' | 'html' | 'query' | 'meta' | 'raw';\n  selector?: string;\n  attribute?: string;\n  items?: BlockAttributeDefinition;              // For array types\n  properties?: Record<string, BlockAttributeDefinition>; // For object types\n}\n\ntype BlockAttributeType =\n  | 'string' | 'number' | 'integer' | 'boolean'\n  | 'object' | 'array' | 'null' | 'rich-text';\n```\n\n### BlockSupports\n\nComprehensive type for WordPress block supports:\n\n```typescript\ninterface BlockSupports {\n  anchor?: boolean;\n  align?: boolean | ('left' | 'center' | 'right' | 'wide' | 'full')[];\n  className?: boolean;\n  color?: boolean | {\n    background?: boolean;\n    gradients?: boolean;\n    link?: boolean;\n    text?: boolean;\n  };\n  typography?: boolean | {\n    fontSize?: boolean;\n    lineHeight?: boolean;\n    fontFamily?: boolean;\n    fontWeight?: boolean;\n    // ... and more\n  };\n  spacing?: boolean | {\n    margin?: boolean | ('top' | 'right' | 'bottom' | 'left')[];\n    padding?: boolean | ('top' | 'right' | 'bottom' | 'left')[];\n    blockGap?: boolean | ('horizontal' | 'vertical')[];\n  };\n  border?: boolean | { color?: boolean; radius?: boolean; style?: boolean; width?: boolean };\n  layout?: boolean | { default?: { type?: 'constrained' | 'flex' | 'flow' | 'grid' } };\n  // ... and more\n}\n```\n\n## Zod Schemas\n\nRuntime validation schemas for block trees:\n\n```typescript\nimport { blockTreeSchema, blockElementSchema } from '@10up/block-renderer-core';\n\n// Validate a complete tree\nconst result = blockTreeSchema.safeParse(input);\nif (result.success) {\n  const tree: BlockTree = result.data;\n} else {\n  console.error(result.error.issues);\n}\n\n// Validate a single element\nconst elementResult = blockElementSchema.safeParse(element);\n```\n\n### Schema Definitions\n\n```typescript\n// BlockElement schema\nconst blockElementSchema = z.object({\n  key: z.string().min(1),\n  type: z.string().min(1),\n  props: z.record(z.unknown()),\n  children: z.array(z.string()).optional(),\n  parentKey: z.string().optional(),\n});\n\n// BlockTree schema\nconst blockTreeSchema = z.object({\n  root: z.string().min(1),\n  elements: z.record(blockElementSchema),\n});\n```\n\n## PHP Pattern Options\n\nOptions for transforming rendered markup into production-ready PHP patterns with internationalization:\n\n```typescript\ninterface PhpPatternOptions {\n  /** Theme text domain for translation functions (required) */\n  textDomain: string;\n  /** Asset directory name for image path detection (default: 'assets') */\n  assetDirectory?: string;\n}\n```\n\n### Example\n\n```typescript\nimport type { PhpPatternOptions } from '@10up/block-renderer-core';\n\nconst options: PhpPatternOptions = {\n  textDomain: 'my-theme',\n  assetDirectory: 'assets'\n};\n\n// When used with renderBlockTree, text content will be wrapped:\n// \"Hello World\" → <?php echo esc_html__( 'Hello World', 'my-theme' ); ?>\n// Image paths will use get_template_directory_uri()\n```\n\n## Complete Exports\n\n### Types\n\n| Type | Description |\n|------|-------------|\n| `BlockElement` | Single block in the tree |\n| `BlockTree` | Complete block tree structure |\n| `BlockElementSchema` | Zod inferred type for BlockElement |\n| `BlockTreeSchema` | Zod inferred type for BlockTree |\n| `BlockTemplate` | PHP-style nested array format |\n| `BlockTemplateEntry` | Single entry in a BlockTemplate |\n| `BlockTemplateEntrySchema` | Zod inferred type for BlockTemplateEntry |\n| `BlockTemplateSchema` | Zod inferred type for BlockTemplate |\n| `BlockDefinition` | Block schema and metadata for validation |\n| `BlockCatalog` | Map of block names to definitions |\n| `ValidationResult` | Single element validation result |\n| `TreeValidationResult` | Full tree validation result |\n| `BlockJson` | WordPress block.json structure |\n| `BlockSupports` | Block supports configuration |\n| `BlockAttributeDefinition` | Block attribute definition |\n| `BlockAttributeType` | Attribute type union |\n| `PhpPatternOptions` | Options for PHP pattern transformation |\n| `PhpPatternOptionsSchema` | Zod inferred type for PhpPatternOptions |\n\n### Schemas\n\n| Schema | Description |\n|--------|-------------|\n| `blockElementSchema` | Zod schema for validating BlockElement |\n| `blockTreeSchema` | Zod schema for validating BlockTree |\n| `blockTemplateEntrySchema` | Zod schema for validating BlockTemplateEntry |\n| `blockTemplateSchema` | Zod schema for validating BlockTemplate |\n| `phpPatternOptionsSchema` | Zod schema for validating PhpPatternOptions |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}