{"_id":"@banulakwin/inertia-page-builder","_rev":"2-8c51e43fe4cd2368d09328001adbba94","name":"@banulakwin/inertia-page-builder","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@banulakwin/inertia-page-builder","version":"1.0.0","keywords":["laravel","inertia","page-builder","cms","react","typescript"],"author":{"name":"banulakwin"},"license":"MIT","_id":"@banulakwin/inertia-page-builder@1.0.0","maintainers":[{"name":"banulalakwindu","email":"banulalakwindu10@gmail.com"}],"homepage":"https://github.com/banulakwin/inertia-page-builder#readme","bugs":{"url":"https://github.com/banulakwin/inertia-page-builder/issues"},"dist":{"shasum":"d4e66f83a761c67944292b8e51dfd75a589406c3","tarball":"https://registry.npmjs.org/@banulakwin/inertia-page-builder/-/inertia-page-builder-1.0.0.tgz","fileCount":8,"integrity":"sha512-MBsvhD6DlpimyK3QV3P0ySKzza/N8p8/6Q4+SElKjNBwBdQ7/WzJOCSpxcuWze1QLQ6l3ZIuJ8yhII0DI/9l9Q==","signatures":[{"sig":"MEUCIQDFJA/SxCbVXE7TtgZHZlsNM9ISyVtuHAi+5EF3FzFOLQIgcAOTWjLqn8nWeV4UK+TV8rnRe+J7Px0vCq+jZbju/VE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18760},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format esm --clean --no-dts && tsc -p tsconfig.emit.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"banulalakwindu","email":"banulalakwindu10@gmail.com"},"repository":{"url":"git+https://github.com/banulakwin/inertia-page-builder.git","type":"git"},"_npmVersion":"11.5.1","description":"Types and helpers for Laravel page-builder + Inertia dynamic section fields.","directories":{},"sideEffects":false,"_nodeVersion":"24.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","typescript":"^5.7.2","@types/react":"^19.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@inertiajs/react":"^1.0.0 || ^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/inertia-page-builder_1.0.0_1779047484812_0.5139786655628984","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@banulakwin/inertia-page-builder","version":"2.0.0","description":"Types and helpers for Laravel page-builder + Inertia dynamic section fields.","type":"module","license":"MIT","sideEffects":false,"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format esm --clean --no-dts && tsc -p tsconfig.emit.json","prepublishOnly":"npm run build"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","@inertiajs/react":"^1.0.0 || ^2.0.0 || ^3.0.0"},"devDependencies":{"@types/react":"^19.2.0","tsup":"^8.5.0","typescript":"^5.7.2"},"repository":{"type":"git","url":"git+https://github.com/banulakwin/inertia-page-builder.git"},"keywords":["laravel","inertia","page-builder","react","typescript"],"author":{"name":"banulakwin"},"publishConfig":{"access":"public"},"_id":"@banulakwin/inertia-page-builder@2.0.0","gitHead":"a8a23a5d3c0d4d51b36fdf454923fd86287b7f14","bugs":{"url":"https://github.com/banulakwin/inertia-page-builder/issues"},"homepage":"https://github.com/banulakwin/inertia-page-builder#readme","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-w41vkuSktudtHuviXTQrbBq50Z9js+ZCol6UPij3RuJCj+0/Egp1YFoR0iwABiFvBKr41G1L62mmq1aX0rhemw==","shasum":"dc7edfedd0ea52882457de046c451f935d6a74b9","tarball":"https://registry.npmjs.org/@banulakwin/inertia-page-builder/-/inertia-page-builder-2.0.0.tgz","fileCount":8,"unpackedSize":20183,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDkqKVOblMK0M0WxuLnPdV6daV9ZugSJ/PREijjOJLQmgIgJ+rdX4IEo/UWV7zu0f88UKFI+tbXziXhLS/BKD/sNno="}]},"_npmUser":{"name":"banulalakwindu","email":"banulalakwindu10@gmail.com"},"directories":{},"maintainers":[{"name":"banulalakwindu","email":"banulalakwindu10@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/inertia-page-builder_2.0.0_1779095387129_0.9689015939327998"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-17T19:51:24.593Z","modified":"2026-05-18T09:09:47.373Z","1.0.0":"2026-05-17T19:51:24.974Z","2.0.0":"2026-05-18T09:09:47.268Z"},"bugs":{"url":"https://github.com/banulakwin/inertia-page-builder/issues"},"author":{"name":"banulakwin"},"license":"MIT","homepage":"https://github.com/banulakwin/inertia-page-builder#readme","keywords":["laravel","inertia","page-builder","react","typescript"],"repository":{"type":"git","url":"git+https://github.com/banulakwin/inertia-page-builder.git"},"description":"Types and helpers for Laravel page-builder + Inertia dynamic section fields.","maintainers":[{"name":"banulalakwindu","email":"banulalakwindu10@gmail.com"}],"readme":"# @banulakwin/inertia-page-builder\n\nTypes and helpers for **[banulakwin/laravel-page-builder](https://github.com/banulakwin/laravel-page-builder)** + Inertia.js dynamic section fields. Pairs with **[banulakwin/filament-page-builder](https://github.com/banulakwin/filament-page-builder)** for the admin UI.\n\n## Installation\n\n```bash\nnpm install @banulakwin/inertia-page-builder\n```\n\n```bash\npnpm add @banulakwin/inertia-page-builder\n```\n\n```bash\nyarn add @banulakwin/inertia-page-builder\n```\n\n## Peer Dependencies\n\n- `react` ^18.0.0 || ^19.0.0\n- `@inertiajs/react` ^1.0.0 || ^2.0.0 || ^3.0.0\n\n## Quick Start\n\n```ts\nimport {\n    parsePageSection,\n    type PageBuilderPageData,\n} from '@banulakwin/inertia-page-builder';\n\n// From Laravel: PageService::getPage() (your Inertia prop may be named `page` or `cms`)\nconst page: PageBuilderPageData = props.page;\n\nconst header = parsePageSection(page, 'about-header');\n\n// With field definitions (optional third argument)\nconst headerWithDefs = parsePageSection(\n    page,\n    'about-header',\n    pageDefinitions?.['about-header'],\n);\n```\n\nPass `pageDefinitions` from `PageRegistry::publicFieldMetadataBySection($pageKey)` on the Laravel side.\n\n## API Reference\n\n### Types\n\n#### `PageBuilderPageData`\n\nRaw page data from `PageService::getPage()`.\n\n```ts\ntype PageBuilderPageData = Record<string, Record<string, string | null | undefined>>;\n```\n\n#### `PageBuilderSectionPayload`\n\nParsed section shape for React components.\n\n```ts\ntype PageBuilderSectionPayload = {\n    slug: string;\n    fields: Record<string, string | null>;\n    definitions?: PageBuilderSectionFieldDefinitions;\n};\n```\n\n#### `PageBuilderFieldDefinition`\n\nRecursive field definition: `type`, `label`, `meta`, `disk`, `path`, `fields`.\n\n#### `PageBuilderSectionFieldDefinitions`\n\n`Record<string, PageBuilderFieldDefinition>` for one section.\n\n#### `PageBuilderImageMetaHints`\n\nImage layout hints: `aspectRatio`, `crop`, `width`, `height`, mobile variants, `sizes`, `objectPosition`, etc.\n\n#### `PageBuilderRepeaterLinkItem`\n\n```ts\ntype PageBuilderRepeaterLinkItem = {\n    label: string;\n    url: string;\n};\n```\n\n### Functions\n\n#### `parsePageSection(page, sectionSlug, definitions?)`\n\nMain entry point — parses a section into `PageBuilderSectionPayload`. Returns `undefined` if the section is missing.\n\n#### `parsePageRepeaterJson(raw)`\n\nParses JSON from `page_contents` into `unknown[]`.\n\n#### `pageRepeaterTextLines(raw)`\n\nExtracts `{ text: string }` rows from repeater JSON.\n\n#### `pageRepeaterRichHtmlBlocks(raw)`\n\nExtracts HTML blocks for `dangerouslySetInnerHTML` (content should be sanitized server-side).\n\n#### `pageRepeaterLinkItems(raw)`\n\nExtracts `{ label, url }` items from repeater JSON.\n\n#### `pageImageMetaFromDefinition(def)`\n\nImage meta hints from a field definition.\n\n#### `resolvePagePublicImageUrl(raw)`\n\nNormalizes image paths to public URLs (`/storage/...`, `/img/...`, or absolute URLs).\n\n#### `pageImageMeta(definitions, fieldKey)`\n\nImage meta for a top-level field key.\n\n#### `pageNestedSubfield(parent, fieldKey)`\n\nSub-field inside a `repeater` or `group` definition.\n\n## Migration from workspace `Cms*` API (v1)\n\nIf you copied an older local package that used `Cms` / `cms` prefixes:\n\n| Old | New |\n|-----|-----|\n| `CmsPageData` | `PageBuilderPageData` |\n| `CmsPublicFieldDefinition` | `PageBuilderFieldDefinition` |\n| `CmsSectionFieldDefinitions` | `PageBuilderSectionFieldDefinitions` |\n| `CmsSectionPayload` | `PageBuilderSectionPayload` |\n| `CmsImageMetaHints` | `PageBuilderImageMetaHints` |\n| `CmsRepeaterLinkItem` | `PageBuilderRepeaterLinkItem` |\n| `parseCmsSection` | `parsePageSection` |\n| `parseCmsRepeaterJson` | `parsePageRepeaterJson` |\n| `cmsRepeaterTextLines` | `pageRepeaterTextLines` |\n| `cmsRepeaterRichHtmlBlocks` | `pageRepeaterRichHtmlBlocks` |\n| `cmsRepeaterLinkItems` | `pageRepeaterLinkItems` |\n| `cmsImageMetaFromDefinition` | `pageImageMetaFromDefinition` |\n| `cmsImageMeta` | `pageImageMeta` |\n| `cmsNestedSubfield` | `pageNestedSubfield` |\n| `resolveCmsPublicImageUrl` | `resolvePagePublicImageUrl` |\n\n## Build\n\n```bash\nnpm run build\n```\n\n## License\n\nMIT\n\n## See Also\n\n- [AGENTS.md](./AGENTS.md) — page builder payload contract and AI agent guide\n- [CHANGELOG.md](./CHANGELOG.md) — release history\n- [banulakwin/laravel-page-builder](https://github.com/banulakwin/laravel-page-builder)\n- [banulakwin/filament-page-builder](https://github.com/banulakwin/filament-page-builder)\n","readmeFilename":"README.md"}