Skip to content

feat(composition): publish page-composition primitives — LP-Factory N1 / G2 producer #372

@jorge-sader

Description

@jorge-sader

LP-Factory POC — Session 3 build (N1 / G2 producer). Source: studio roadmaps/lp-factory-poc/session-2-seam-set.md §2+§6 (v2) · studio PR #24.

Why

Rueda's LP (projects/rueda/views/pages/home.templ) is built on ~24 invented utility classes (dvfy-py-2xl, dvfy-grid-cols-3, dvfy-heading-1, …) that resolve to nothing — the G2 failure the LP factory exists to fix. The page needs a sanctioned, manifest-declared composition vocabulary, not stringly-typed classes.

Scope — 4 light-DOM primitive families, bound to EXISTING tokens

  • dvfy-page-section — page rhythm wrapper (padding/tone/align/width). NOTE: dvfy-section is the collapsible disclosure widget — do NOT reuse that name.
  • dvfy-grid — responsive grid (cols/min/gap).
  • dvfy-stack — flex wrapper (direction/gap/justify/align).
  • dvfy-heading / dvfy-text — typography bound to --dvfy-type-* / --dvfy-text-*.

Acceptance criteria

  • 4 families implemented + exported, bound to existing space + --dvfy-type-* tokens (no new scales unless a real gap).
  • Declared in custom-elements.json (npm run analyze).
  • A demo page composed ONLY from these primitives renders with zero unresolved/dead classes.
  • Contrast/a11y gate passes.

Pairs with #367 (these 4 families are the composition Contract's first declarations). Blocks N5 (rueda rebuild). Related: #363 (button href).

Metadata

Metadata

Assignees

No one assigned

    Labels

    ctx:componentsContext bundle: individual component work (default)decision/approvedDecision: approved, ready to workenhancementNew feature or requestpriority:highHigh priority — work first within bundle

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions