/*
[RFC-0101] Canonical SectionShellProps — the typed contract for the universal
wrapper used by every shared section in packages/ui. Section
content and authoring shape live in RFC-0102 (header) and RFC-0103 (body); this
module owns visual + structural wrapper props only.
- Do not declare header, body, cta, or motion props (their own RFCs).
- Do not import Astro types; this is a framework-agnostic schema module.
- RFC-0133: backfilled MODULE_MAP and CHANGE_SUMMARY markers for compass.validate compliance.
- Added "flush" density for sections that need zero padding (e.g. fullscreen video flush to header).
- RFC-1323: write-time comment-terminator safety — shared comment-safety seam, authored CS-08 reject, injected neutralization, header-region scan
*/
import { z } from "zod";
import { sectionBackgroundSchema } from "./section-background.ts";
import { effectsSchema } from "./effects.ts";
import { sectionMotionConfigSchema } from "./section-motion.ts";
export const sectionDensitySchema = z.enum(["compact", "normal", "spacious", "flush"]);
export type SectionDensity = z.infer;
export const sectionToneSchema = z.enum(["default", "warning", "success", "muted"]);
export type SectionTone = z.infer;
export const sectionContainerVariantSchema = z.enum(["default", "narrow", "full"]);
export type SectionContainerVariant = z.infer;
export const sectionShellAnimatedSchema = z.enum(["none", "reveal"]);
export type SectionShellAnimated = z.infer;
export const sectionShellPropsSchema = z
.object({
/** BEM prefix for the section, e.g. "transparency". Used for data attributes. */
slug: z.string().min(1),
/** Anchor id (resolved by resolveSectionAnchor upstream). */
sectionId: z.string().optional(),
/** Zero-padded section index — used to generate unique ARIA IDs per section instance. */
sectionNumber: z.string().optional(),
ariaLabel: z.string().optional(),
ariaLabelledBy: z.string().optional(),
background: sectionBackgroundSchema.optional(),
effects: effectsSchema.optional(),
density: sectionDensitySchema.optional(),
tone: sectionToneSchema.optional(),
containerVariant: sectionContainerVariantSchema.optional(),
/**
* RFC-0106 motion bridge. `reveal` opts the section into the platform
* reveal animation when the biome motion stance permits it. Full motion
* config (parallax, stagger) lives on a sibling `motion` prop introduced
* by RFC-0106; this enum is the minimal hook landed with RFC-0101.
*/
animated: sectionShellAnimatedSchema.optional(),
/** RFC-0106: full motion config (reveal / parallax / stagger / off). */
motion: sectionMotionConfigSchema.optional(),
})
.strict();
export type SectionShellProps = z.infer;