{"_id":"@dscodotco/storefront-sections","_rev":"2-1efcad51a8533c7101d2e846eb4ec0a2","name":"@dscodotco/storefront-sections","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@dscodotco/storefront-sections","version":"0.1.0","license":"MIT","_id":"@dscodotco/storefront-sections@0.1.0","maintainers":[{"name":"williamk","email":"wkasel@gmail.com"}],"homepage":"https://github.com/ruopro/flightdeck#readme","bugs":{"url":"https://github.com/ruopro/flightdeck/issues"},"dist":{"shasum":"967a01ac13d9ff62c203254a243b882e36e28f24","tarball":"https://registry.npmjs.org/@dscodotco/storefront-sections/-/storefront-sections-0.1.0.tgz","fileCount":201,"integrity":"sha512-Fx+PRLcXcUCSmSQqajaAfKcBSBBeWqLemkQ8e/FGTzJ6GSKrF0gDq6dnQfiZOFlLi28zkHzrKvHH5WtVFCkFuA==","signatures":[{"sig":"MEUCIHSrb3gqM+tg/PsQNOCglDIGtdYL9Pmqiu2CNhYmwGaRAiEA74yVWrVDd82jX9JK00H+PsuNxVIHpLohKmddKZNnrAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":914996},"main":"./dist/index.cjs","type":"module","_from":"file:dscodotco-storefront-sections-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","development":"./src/index.ts"},"./lib/media":{"types":"./dist/lib/media.d.ts","import":"./dist/lib/media.js","require":"./dist/lib/media.cjs","development":"./src/lib/media.ts"},"./lib/track":{"types":"./dist/lib/track.d.ts","import":"./dist/lib/track.js","require":"./dist/lib/track.cjs","development":"./src/lib/track.ts"},"./lib/format":{"types":"./dist/lib/format.d.ts","import":"./dist/lib/format.js","require":"./dist/lib/format.cjs","development":"./src/lib/format.ts"},"./lib/logger":{"types":"./dist/lib/logger.d.ts","import":"./dist/lib/logger.js","require":"./dist/lib/logger.cjs","development":"./src/lib/logger.ts"},"./lib/pixels":{"types":"./dist/lib/pixels.d.ts","import":"./dist/lib/pixels.js","require":"./dist/lib/pixels.cjs","development":"./src/lib/pixels.ts"},"./lib/consent":{"types":"./dist/lib/consent.d.ts","import":"./dist/lib/consent.js","require":"./dist/lib/consent.cjs","development":"./src/lib/consent.ts"},"./lib/json-ld":{"types":"./dist/lib/json-ld.d.ts","import":"./dist/lib/json-ld.js","require":"./dist/lib/json-ld.cjs","development":"./src/lib/json-ld.tsx"},"./model/theme":{"types":"./dist/model/theme.d.ts","import":"./dist/model/theme.js","require":"./dist/model/theme.cjs","development":"./src/model/theme.ts"},"./lib/nav-href":{"types":"./dist/lib/nav-href.d.ts","import":"./dist/lib/nav-href.js","require":"./dist/lib/nav-href.cjs","development":"./src/lib/nav-href.ts"},"./model/catalog":{"types":"./dist/model/catalog.d.ts","import":"./dist/model/catalog.js","require":"./dist/model/catalog.cjs","development":"./src/model/catalog.ts"},"./model/manifest":{"types":"./dist/model/manifest.d.ts","import":"./dist/model/manifest.js","require":"./dist/model/manifest.cjs","development":"./src/model/manifest.ts"},"./lib/copy-tokens":{"types":"./dist/lib/copy-tokens.d.ts","import":"./dist/lib/copy-tokens.js","require":"./dist/lib/copy-tokens.cjs","development":"./src/lib/copy-tokens.ts"},"./lib/coa-doc-link":{"types":"./dist/lib/coa-doc-link.d.ts","import":"./dist/lib/coa-doc-link.js","require":"./dist/lib/coa-doc-link.cjs","development":"./src/lib/coa-doc-link.ts"},"./lib/product-shared":{"types":"./dist/lib/product-shared.d.ts","import":"./dist/lib/product-shared.js","require":"./dist/lib/product-shared.cjs","development":"./src/lib/product-shared.ts"},"./components/media/asset-image":{"types":"./dist/components/media/asset-image.d.ts","import":"./dist/components/media/asset-image.js","require":"./dist/components/media/asset-image.cjs","development":"./src/components/media/asset-image.tsx"},"./components/product/vial-visual":{"types":"./dist/components/product/vial-visual.d.ts","import":"./dist/components/product/vial-visual.js","require":"./dist/components/product/vial-visual.cjs","development":"./src/components/product/vial-visual.tsx"},"./components/product/prop65-warning":{"types":"./dist/components/product/prop65-warning.d.ts","import":"./dist/components/product/prop65-warning.js","require":"./dist/components/product/prop65-warning.cjs","development":"./src/components/product/prop65-warning.tsx"}},"scripts":{"test":"vitest run --passWithNoTests","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"williamk","email":"wkasel@gmail.com"},"_resolved":"/private/var/folders/gd/tyl93m8j5j30dvbb98j87smc0000gn/T/d129675b6007f9d4c48705e77003957c/dscodotco-storefront-sections-0.1.0.tgz","_integrity":"sha512-Fx+PRLcXcUCSmSQqajaAfKcBSBBeWqLemkQ8e/FGTzJ6GSKrF0gDq6dnQfiZOFlLi28zkHzrKvHH5WtVFCkFuA==","repository":{"url":"git+https://github.com/ruopro/flightdeck.git","type":"git","directory":"packages/storefront-sections"},"_npmVersion":"10.9.4","description":"Client-importable storefront section presentation layer: defineSection/renderSection/renderSections, SectionContext + SectionDef, every base-v1 section component and its pure presentational dependencies. Consumed by the storefront renderer and the console","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.23.0","next":"^15.5.0","tsup":"^8.5.0","jsdom":"^26.0.0","react":"^19.1.0","vitest":"^2.1.0","axe-core":"^4.10.0","react-dom":"^19.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"zod":"^3.23.0","next":"^15.5.0","react":"^19.1.0","react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/storefront-sections_0.1.0_1789151782490_0.3706951090946511","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dscodotco/storefront-sections","version":"0.1.1","description":"Client-importable storefront section presentation layer: defineSection/renderSection/renderSections, SectionContext + SectionDef, every base-v1 section component and its pure presentational dependencies. Consumed by the storefront renderer and the console","license":"MIT","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./components/media/asset-image":{"types":"./dist/components/media/asset-image.d.ts","import":"./dist/components/media/asset-image.js","require":"./dist/components/media/asset-image.cjs"},"./components/product/vial-visual":{"types":"./dist/components/product/vial-visual.d.ts","import":"./dist/components/product/vial-visual.js","require":"./dist/components/product/vial-visual.cjs"},"./components/product/prop65-warning":{"types":"./dist/components/product/prop65-warning.d.ts","import":"./dist/components/product/prop65-warning.js","require":"./dist/components/product/prop65-warning.cjs"},"./model/catalog":{"types":"./dist/model/catalog.d.ts","import":"./dist/model/catalog.js","require":"./dist/model/catalog.cjs"},"./model/manifest":{"types":"./dist/model/manifest.d.ts","import":"./dist/model/manifest.js","require":"./dist/model/manifest.cjs"},"./model/theme":{"types":"./dist/model/theme.d.ts","import":"./dist/model/theme.js","require":"./dist/model/theme.cjs"},"./lib/logger":{"types":"./dist/lib/logger.d.ts","import":"./dist/lib/logger.js","require":"./dist/lib/logger.cjs"},"./lib/format":{"types":"./dist/lib/format.d.ts","import":"./dist/lib/format.js","require":"./dist/lib/format.cjs"},"./lib/media":{"types":"./dist/lib/media.d.ts","import":"./dist/lib/media.js","require":"./dist/lib/media.cjs"},"./lib/copy-tokens":{"types":"./dist/lib/copy-tokens.d.ts","import":"./dist/lib/copy-tokens.js","require":"./dist/lib/copy-tokens.cjs"},"./lib/nav-href":{"types":"./dist/lib/nav-href.d.ts","import":"./dist/lib/nav-href.js","require":"./dist/lib/nav-href.cjs"},"./lib/coa-doc-link":{"types":"./dist/lib/coa-doc-link.d.ts","import":"./dist/lib/coa-doc-link.js","require":"./dist/lib/coa-doc-link.cjs"},"./lib/product-shared":{"types":"./dist/lib/product-shared.d.ts","import":"./dist/lib/product-shared.js","require":"./dist/lib/product-shared.cjs"},"./lib/track":{"types":"./dist/lib/track.d.ts","import":"./dist/lib/track.js","require":"./dist/lib/track.cjs"},"./lib/consent":{"types":"./dist/lib/consent.d.ts","import":"./dist/lib/consent.js","require":"./dist/lib/consent.cjs"},"./lib/pixels":{"types":"./dist/lib/pixels.d.ts","import":"./dist/lib/pixels.js","require":"./dist/lib/pixels.cjs"},"./lib/json-ld":{"types":"./dist/lib/json-ld.d.ts","import":"./dist/lib/json-ld.js","require":"./dist/lib/json-ld.cjs"}},"sideEffects":false,"peerDependencies":{"next":"^15.5.0","react":"^19.1.0","react-dom":"^19.1.0","zod":"^3.23.0"},"devDependencies":{"@testing-library/jest-dom":"^6.6.3","@testing-library/react":"^16.3.2","@types/node":"^22.10.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0","axe-core":"^4.10.0","jsdom":"^26.0.0","next":"^15.5.0","react":"^19.1.0","react-dom":"^19.1.0","tsup":"^8.5.0","typescript":"^5.7.0","vitest":"^2.1.0","zod":"^3.23.0"},"repository":{"type":"git","url":"git+https://github.com/ruopro/flightdeck.git","directory":"packages/storefront-sections"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"vitest run --passWithNoTests"},"_id":"@dscodotco/storefront-sections@0.1.1","bugs":{"url":"https://github.com/ruopro/flightdeck/issues"},"homepage":"https://github.com/ruopro/flightdeck#readme","_integrity":"sha512-6bX56aC+R6dVYdWZbWpgFAYB1bVimWExShe3803mF6hISN8xmQGwD0Q1+WRgO30dJsOnqvxSoVwKr7KOJ9j2og==","_resolved":"/private/var/folders/gd/tyl93m8j5j30dvbb98j87smc0000gn/T/543cafad582d247d1a7658538a6a7ece/dscodotco-storefront-sections-0.1.1.tgz","_from":"file:dscodotco-storefront-sections-0.1.1.tgz","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-6bX56aC+R6dVYdWZbWpgFAYB1bVimWExShe3803mF6hISN8xmQGwD0Q1+WRgO30dJsOnqvxSoVwKr7KOJ9j2og==","shasum":"f9ce15f95795e1e98744af9671cd98aefccb838f","tarball":"https://registry.npmjs.org/@dscodotco/storefront-sections/-/storefront-sections-0.1.1.tgz","fileCount":201,"unpackedSize":914115,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBBzpx26kK9ZD9Qm1tXoynS4Y2yT3vZfgDXRezOglpAuAiAY/5pO0qRVh499HSqh21lIlZ8XPb2nZZxNJVGtFASQAQ=="}]},"_npmUser":{"name":"williamk","email":"wkasel@gmail.com"},"directories":{},"maintainers":[{"name":"williamk","email":"wkasel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/storefront-sections_0.1.1_1789172167104_0.9205244350787167"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-11T18:36:22.251Z","modified":"2026-09-12T00:16:07.441Z","0.1.0":"2026-09-11T18:36:22.664Z","0.1.1":"2026-09-12T00:16:07.263Z"},"bugs":{"url":"https://github.com/ruopro/flightdeck/issues"},"license":"MIT","homepage":"https://github.com/ruopro/flightdeck#readme","repository":{"type":"git","url":"git+https://github.com/ruopro/flightdeck.git","directory":"packages/storefront-sections"},"description":"Client-importable storefront section presentation layer: defineSection/renderSection/renderSections, SectionContext + SectionDef, every base-v1 section component and its pure presentational dependencies. Consumed by the storefront renderer and the console","maintainers":[{"name":"williamk","email":"wkasel@gmail.com"}],"readme":"# @dscodotco/storefront-sections\n\nThe storefront section presentation layer for the RUO Pro / Flightdeck commerce platform — the same React components the platform's hosted fleet renderer uses, published so a headless (bring-your-own-frontend) store can render a merchant's authored site instead of reimplementing it.\n\n```bash\nnpm install @dscodotco/storefront-sections\n```\n\nA store's layout is data: the store manifest carries `template.sections`, an ordered list of `{ type, props }`. Fetch it (`store.site.get()` in `@dscodotco/sdk`, or `GET /v1/tenants/{tenant}/site`), build a `SectionContext`, and render:\n\n```tsx\nimport { renderSections, type SectionContext } from \"@dscodotco/storefront-sections\";\n\nconst ctx: SectionContext = {\n  storeKey,\n  brandName,\n  products,        // from store.products.list()\n  behavior,        // resolved manifest behavior block\n  theme,           // resolved theme tokens\n};\n\nexport function Home({ sections }: { sections: Array<{ type: string; props: unknown }> }) {\n  return <>{renderSections(sections, ctx)}</>;\n}\n```\n\nAn unknown `type` warns and is skipped — never a crash — so a newer manifest renders on an older package version.\n\n## What's inside\n\n- `SECTION_REGISTRY` — the section catalog (announcement-bar, header-nav, hero, epic-hero, statement, product-grid, category-grid, trust-badges, by-the-numbers, faq, cta-banner, email-capture, coa-block, science-block, rich-text, provenance-seal, policy-page, legal-footer), each a `SectionDef` with a zod props schema and a renderer.\n- `renderSection` / `renderSections` / `isKnownSectionType` / `defineSection` — the framework.\n- `model/*` — manifest, catalog, and theme schemas + types shared with the platform's own renderer.\n- `lib/*` — pure presentational helpers (formatting, JSON-LD, media refs, nav hrefs, consent, pixels, tracking).\n- Subpath exports (e.g. `@dscodotco/storefront-sections/components/media/asset-image`) for the individual client components.\n\nEverything renders client-side or in RSC without I/O: no `server-only`, no `next/headers`, no fetches. Peer dependencies: `react`, `next` (for `next/image`), `zod`.\n\n## Versioning\n\nSection props schemas are additive within a version; a breaking change to a section is shipped as a new section type version, so older deployments keep rendering. Alpha (0.x) — expect the export surface to consolidate.\n","readmeFilename":"README.md"}