Skip to content

Primitives Tier 3: decide whether grid is in scope, then build or close #55

Description

@fsecada01

Split out of #52 so Tier 1 could ship independently (acceptance criterion 7). Tier 1 landed in #53.

This one is a decide-then-maybe-build, not a build. #52 raised it as open question 2 and did not answer it. The answer should be written down here before any file is created, because the honest answer may be "no."

The problem

Bootstrap, Bulma, Foundation and Fomantic each ship a 12-column grid with its own class vocabulary — col-md-6, is-6, medium-6, eight wide column. Those four are a genuine adapter: same concept, four spellings, exactly what cf-ui exists to absorb.

daisyUI ships no grid. It defers entirely to Tailwind utilities. So the daisy variant of <c-cf.grid> would emit grid grid-cols-12 gap-4 and a column would emit col-span-6 — raw Tailwind utilities, not framework component classes. That is a different kind of thing from the other four, not a thinner version of it.

Measured use in the reference repo: 25 columns + 28 column + 53 width tokens.

Why this is not obviously worth doing

  • The abstraction leaks at exactly the point people use it. Responsive breakpoints are where grids actually earn their keep, and the four frameworks disagree about breakpoint names and count. col-md-6 and is-6-tablet are not the same breakpoint. A <c-cf.column span="6" at="tablet"> has to pick a canonical breakpoint set and map it, and any mapping will be wrong for someone.
  • The Tailwind literal-class constraint bites hardest here. Every span × every breakpoint has to be spelled out longhand in the daisy template, because Tailwind's scanner reads source text — col-span-{{ span }} is tree-shaken away silently. 12 spans × 5 breakpoints is 60 literal branches per template, and primitives.py would carry the same 60 twice for the parity test. That is a real maintenance surface for a component whose value is questionable.
  • Consumers migrating to Tailwind do not want it. The reference-repo migration that motivated Add a primitives layer: button, icon, badge, heading, label across all five themes #52 is Bulma → Tailwind + daisyUI. On the far side of that migration the consumer writes grid-cols-3 directly and a cf-ui grid component is pure indirection.

The case for doing it anyway

A repo that wants to stay theme-switchable cannot write layout in any framework's vocabulary — a CF_UI_THEME flip would break every page's layout while leaving every component intact. If layout is the one thing that does not switch, "switching CSS frameworks means changing CF_UI_THEME in one place" is not quite true.

Acceptance criteria

  • A written decision: build it, build a reduced version, or close as won't-do — with the reasoning, so it is not re-litigated.
  • If reduced: state what was cut and why (e.g. a fixed set of column counts with no responsive axis is a much smaller surface and covers most measured uses).
  • If built: canonical breakpoint set chosen and its per-theme mapping documented, including which frameworks it maps to imperfectly.
  • If built: the daisy asymmetry stated plainly in docs/primitives.md — that the daisy variant emits Tailwind utilities rather than framework classes, and what that means for a consumer without Tailwind.
  • If closed: docs/primitives.md says layout is out of scope and what to do instead, so the question does not come back as a bug report.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationwontfixThis will not be worked on

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions