Skip to content

Commit 700fedc

Browse files
author
Foscat
committed
docs: publish v3 contract and migration guidance
1 parent 9173ca9 commit 700fedc

22 files changed

Lines changed: 791 additions & 652 deletions

.github/workflows/npm-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
workflow_dispatch:
77
inputs:
88
release_tag:
9-
description: "Release tag to publish, for example v2.1.1"
9+
description: "Release tag to publish, for example v3.0.0"
1010
required: true
1111
type: string
1212

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,34 @@
22

33
All notable changes to `layout-style-css` are documented here. This project follows semantic versioning.
44

5+
## [3.0.0] - 2026-07-29
6+
7+
### Breaking
8+
9+
- Rebuilt the package as a clean-break intrinsic responsive system with attribute-only recipes and one shared container-query engine.
10+
- Removed `legacy.css`, the deprecated UI Style Kit structural bridge, v1/v2 aliases, recipe class aliases, extensionless export aliases, responsive/order utility families, and the scrollbar-unsafe `.ly-bleed` helper.
11+
- Reduced the npm tarball to the public generated CSS modules and personality profiles; package metadata, README, and license remain npm-standard package files.
12+
13+
### Added
14+
15+
- Added `foundation.css` for shared reset, tokens, named `ly-scope` containment, dynamic viewport sizing, and the `44rem`/`30rem` height tiers.
16+
- Made `.ly-root`, every wrapper, and every recipe root a named responsive scope so recipes work without wrappers and respond to the nearest wrapper when nested.
17+
- Added `data-ly-responsive="manual"` for application-owned topology with a safe stacked fallback.
18+
- Added device, independent width/height, automatic/manual, dimension, and active-topology controls to the demo.
19+
20+
### Changed
21+
22+
- Replaced breakpoint-heavy primitives with intrinsic Grid and Flexbox behavior and standardized shrink safety.
23+
- Moved Split Hero, List Detail, Docs, App Shell, and Dashboard topology to the shared `42rem`, `44rem`, `48rem`, `52rem`, and `72rem` query tiers.
24+
- Converted all sixteen personalities into breakpoint-free token/topology profiles with at least two distinguishing spatial characteristics.
25+
- Restricted deliberate horizontal scrolling to Reel and deliberate bounded vertical scrolling to Scroll.
26+
27+
### Tests
28+
29+
- Added package/export/tarball, canonical-selector, removed-surface, generated-parity, ownership, and personality-engine contracts.
30+
- Added threshold-edge, six-device, short-height, root-direct, nearest-wrapper, manual-query, DOM/focus-order, overflow, wrapper, recipe, and all-personality rendered matrices.
31+
- Made Chromium, Firefox, and WebKit the complete release gate and retained the connected-browser interaction spot check.
32+
533
## [2.1.1] - 2026-07-27
634

735
### Fixed

CONTRIBUTING.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ npm run release:verify
2424
- Regenerate `dist/` with `npm run build`; do not hand-edit generated dist files.
2525
- Keep public layout classes prefixed with `ly-`.
2626
- Leave colors, typography, borders, shadows, native controls, focus states, themes, and modes to `ui-style-kit-css`.
27-
- Add structural aliases in `styles/integrations/ui-style-kit.css` only when they map to layout primitives or layout recipes.
28-
- Preserve semantic mobile DOM, reading, and focus order; built-in recipes must use named areas instead of `order`.
29-
- Test container behavior below and above `48rem` and `64rem`.
27+
- Keep v3 on canonical hooks; do not add legacy, recipe-class, or companion structural aliases.
28+
- Preserve semantic mobile DOM, reading, and focus order; built-in recipes must use named areas instead of visual order.
29+
- Test container behavior below and above `42rem`, `44rem`, `48rem`, `52rem`, and `72rem`.
30+
- Test height behavior below and above `30rem` and `44rem`.
31+
- Keep personality files limited to tokens and topology templates; they must not declare breakpoints.
3032
- Update README, `docs/wiki`, and `CHANGELOG.md` when a public class, export, recipe, release workflow, or package behavior changes.
3133

3234
## Testing Expectations

README.md

Lines changed: 124 additions & 145 deletions
Large diffs are not rendered by default.

demo/site.webmanifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "layout-style-css",
33
"short_name": "Layout CSS",
4-
"description": "Container-first layout-style-css 2.1 lab for wrappers, recipes, personalities, and optional ecosystem integrations.",
4+
"description": "Layout Style CSS v3 intrinsic responsive lab for width, height, wrappers, recipes, and personalities.",
55
"start_url": "./index.html",
66
"display": "standalone",
77
"background_color": "#111827",

demo/sitemap.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
33
<url>
44
<loc>https://foscat.github.io/layout-style-css/</loc>
5-
<lastmod>2026-07-27</lastmod>
5+
<lastmod>2026-07-29</lastmod>
66
<changefreq>weekly</changefreq>
77
<priority>0.8</priority>
88
</url>

docs/wiki/Contributing.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ Use `npm run test:demo:all` for rendered layout changes and `npm run release:ver
2727
- Prefix public classes with `ly-`.
2828
- Keep the mobile DOM, reading, and focus order authoritative.
2929
- Use named areas in built-in recipes; never use `order` there.
30-
- Test nested containers below and above `48rem` and `64rem`.
30+
- Test nested containers one rem below and above each recipe threshold: `42rem`, `44rem`, `48rem`, `52rem`, and `72rem`.
31+
- Test viewport heights one rem below and above `30rem` and `44rem`.
32+
- Keep personality files free of `@container`, viewport, and orientation queries.
3133
- Use `minmax(0, 1fr)` or guarded floors for tracks that receive application content.
3234
- Do not add colors, typography, borders, shadows, component paint, focus styles, or native control styles.
3335

docs/wiki/Demo-And-GitHub-Pages.md

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,44 @@
11
# Demo And GitHub Pages
22

3-
The interactive layout lab lives in `demo/index.html`, `demo/demo.css`, and `demo/demo.js`. GitHub Pages serves a generated artifact from `output/github-pages/`.
3+
The v3 demo is an intrinsic responsive workbench, not a fixed-device screenshot gallery.
44

5-
## Local Gates
5+
## Controls
66

7-
The quick gate uses Chromium and a representative rendered matrix:
7+
- Independent preview width and height
8+
- Automatic and manual recipe responsiveness
9+
- Wrapper, recipe, and all sixteen personality profiles
10+
- Layout-only, Layout plus UI, and all-three ecosystem modes
11+
- Live rendered dimensions and active topology
12+
- Copy-ready canonical attribute markup
813

9-
```bash
10-
npm run test:demo:quick
11-
```
14+
Device presets cover the release allocations:
1215

13-
Run one complete engine matrix:
16+
- Phone portrait: `360 × 800`
17+
- Phone landscape: `800 × 360`
18+
- Tablet portrait: `768 × 1024`
19+
- Tablet landscape: `1024 × 768`
20+
- Desktop landscape: `1440 × 900`
21+
- Desktop portrait: `900 × 1440`
1422

15-
```bash
16-
npm run test:demo:chromium
17-
npm run test:demo:firefox
18-
npm run test:demo:webkit
19-
```
23+
Threshold controls also cover one rem below and above `42rem`, `44rem`, `48rem`, `52rem`, and `72rem`, plus the `30rem` and `44rem` height tiers.
2024

21-
Run all supported engines:
25+
## Local Verification
2226

2327
```bash
28+
npm run build
29+
npm run test:demo:quick
2430
npm run test:demo:all
2531
```
2632

27-
The full matrix exercises current evergreen Chromium, Firefox, and WebKit at 375px, 768px, 1280px, and 1440px, plus nested containers around the `48rem` and `64rem` core thresholds and the personality-specific signatures.
28-
29-
## Rendered Contracts
30-
31-
The smoke suite verifies:
32-
33-
- all wrappers, recipes, and personalities
34-
- stable DOM and keyboard focus order
35-
- named-area transitions at both container thresholds
36-
- no meaningful horizontal overflow
37-
- bounded scrolling
38-
- accessible mobile controls
39-
- layout-only, Layout plus UI, and all-three ecosystem modes
40-
- pinned `ui-style-kit-css@2.1.0` visual, token bridge, and manifest behavior plus released `interactive-surface-css@1.5.0`
41-
42-
The demo query parser uses explicit allowlists and writes generated imports and markup with `textContent`.
33+
The full matrix runs in Chromium, Firefox, and WebKit. It checks meaningful DOM, unchanged source/focus order, automatic and manual topologies, nearest-container behavior, short-height escape hatches, zero-width tracks, overlap, and unintended overflow.
4334

44-
## Pages Artifact
35+
## GitHub Pages
4536

4637
```bash
4738
npm run pages:build
48-
node test/pages-artifact.test.mjs
39+
npm run test:pages
4940
```
5041

51-
The generated root contains the demo, metadata assets, `.nojekyll`, and `dist/`. The build rewrites only known parent-relative Layout Style paths, preserving external companion URLs and canonical metadata.
42+
The Pages artifact is written to `output/github-pages`, carries a root `index.html`, includes the generated v3 distribution, and rewrites the demo's parent-relative Layout import to the artifact-local `./dist` path.
5243

53-
The Pages workflow installs Chromium, runs the quick package gate, builds and tests the artifact, then uploads it. Repository Pages must be enabled with GitHub Actions as the source before deployment.
44+
`pages.yml` verifies repository Pages configuration before package work, runs the package check, installs Chromium for the rendered gate, validates the artifact, and deploys the saved artifact. Deployment is separate from local implementation.

docs/wiki/Getting-Started.md

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,63 @@
11
# Getting Started
22

3-
Layout Style CSS 2.0 provides structural layout without prescribing theme or component paint.
4-
5-
## Install
6-
7-
Node.js 20 or newer is required for development scripts.
3+
Install `layout-style-css@3.0.0` and import the root bundle:
84

95
```bash
10-
npm install layout-style-css@2.1.1
6+
npm install layout-style-css@3.0.0
117
```
128

13-
## Import
14-
159
```js
1610
import "layout-style-css";
1711
```
1812

19-
The package is dependency-free. Optional UI and interaction layers are installed and imported explicitly; see [Installation And CDN](Installation-And-CDN.md).
20-
21-
## First Recipe
13+
## First Automatic Layout
2214

23-
Place the recipe inside a `.ly-wrapper`. The wrapper supplies inline-size containment, fluid logical gutters, and safe-area compensation.
15+
The zero-configuration path needs only `.ly-root`, a recipe attribute, and semantic areas:
2416

2517
```html
2618
<body class="ly-root" data-ly-layout="minimal-saas">
27-
<div class="ly-wrapper ly-wrapper--wide">
28-
<section class="ly-dashboard" data-ly-recipe="dashboard">
29-
<header data-ly-area="header">Dashboard</header>
30-
<nav data-ly-area="nav" aria-label="Dashboard">Navigation</nav>
31-
<main data-ly-area="main">Workspace</main>
32-
<aside data-ly-area="aside">Details</aside>
33-
<footer data-ly-area="footer">Status</footer>
34-
</section>
19+
<div data-ly-recipe="split-hero">
20+
<main data-ly-area="content">Primary message</main>
21+
<figure data-ly-area="media">Media</figure>
22+
<div data-ly-area="actions">Actions</div>
3523
</div>
3624
</body>
3725
```
3826

39-
The single-column DOM order is authoritative for mobile reading and keyboard focus. Core named grid areas rearrange at `48rem` and `64rem` container widths without changing source order; a selected personality may apply its own personality-specific enhancement threshold.
27+
The recipe stays stacked below `42rem` and enhances automatically when its nearest `ly-scope` container has enough room.
4028

41-
## Switch Personality
29+
## Optional Wrapper
4230

43-
```js
44-
document.querySelector(".ly-root").dataset.lyLayout = "synthwave";
31+
Use wrappers when a composition needs a named measure or local responsive scope:
32+
33+
```html
34+
<section class="ly-wrapper ly-wrapper--wide">
35+
<div data-ly-recipe="card-grid">
36+
<article>One</article>
37+
<article>Two</article>
38+
</div>
39+
</section>
40+
```
41+
42+
Available measures are `.ly-wrapper--compact`, `.ly-wrapper--prose`, `.ly-wrapper--content`, `.ly-wrapper--wide`, `.ly-wrapper--full`, and `.ly-wrapper--breakout`.
43+
44+
## Manual Topology
45+
46+
Use `data-ly-responsive="manual"` only when application CSS must choose the topology:
47+
48+
```css
49+
@container ly-scope (min-width: 56rem) {
50+
[data-ly-recipe="docs"][data-ly-responsive="manual"] {
51+
/* Application-owned topology. */
52+
}
53+
}
4554
```
4655

47-
`data-ly-layout` accepts one of the sixteen values listed in [Layout Styles](Layout-Styles.md). UI attributes such as `data-ui`, `data-theme`, and `data-mode` remain independent.
56+
Keep mobile DOM order authoritative. The package never changes reading or focus order.
4857

49-
## Migrate Existing Markup
58+
## Next
5059

51-
Do not copy v1 root hooks or size-based wrappers into new code. Follow [Migrating To 2.0](Migrating-To-2.0.md), or use `layout-style-css/legacy.css` temporarily while converting an application.
60+
- [Layout Primitives](Layout-Primitives.md)
61+
- [Layout Recipes](Layout-Recipes.md)
62+
- [Layout Styles](Layout-Styles.md)
63+
- [Migrating To 3.0](Migrating-To-3.0.md)

docs/wiki/Home.md

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,27 @@
1-
# Layout Style CSS Wiki
1+
# Layout Style CSS v3
22

3-
Version 2.1.1 is a container-first, dependency-free layout library. It ships semantic wrappers, composition primitives, seven recipes, sixteen layout personalities, focused exports, a v2-only compatibility bundle, and refreshed ecosystem fixtures for UI Style Kit CSS 2.1 and Interactive Surface CSS 1.5.
3+
`layout-style-css@3.0.0` is a dependency-free, CSS-only structural system for layouts that adapt to available width and height.
44

5-
## Start Here
5+
## Contract
66

7-
| Page | Purpose |
8-
| --- | --- |
9-
| [Getting Started](Getting-Started.md) | First wrapper, recipe, and personality. |
10-
| [Installation And CDN](Installation-And-CDN.md) | Exact package exports and ecosystem import order. |
11-
| [Layout Primitives](Layout-Primitives.md) | Wrappers and composition primitives. |
12-
| [Layout Recipes](Layout-Recipes.md) | Named recipes, areas, and mobile ordering. |
13-
| [Layout Styles](Layout-Styles.md) | Sixteen spatial personalities. |
14-
| [UI Style Kit Compatibility](UI-Style-Kit-Compatibility.md) | Structural bridge and ownership boundaries. |
15-
| [Migrating To 2.0](Migrating-To-2.0.md) | Complete 1.x selector and export mapping. |
16-
| [Demo And GitHub Pages](Demo-And-GitHub-Pages.md) | Interactive lab, browser matrix, and Pages artifact. |
17-
| [Release And Publishing](Release-And-Publishing.md) | Release verification and separately approved publish steps. |
18-
| [Security And Support](Security-And-Support.md) | Supported versions and reporting. |
19-
| [Contributing](Contributing.md) | Source, generated output, testing, and review rules. |
7+
- `.ly-root` is a usable layout and named `ly-scope` container.
8+
- Wrappers are optional measure and nesting controls.
9+
- Seven `data-ly-recipe` values enhance a semantic stacked fallback.
10+
- `data-ly-responsive="manual"` transfers topology ownership to application CSS.
11+
- Sixteen `data-ly-layout` profiles tune one shared responsive engine.
12+
- `100dvh` behavior and the `44rem`/`30rem` height tiers avoid short-screen traps.
13+
- The mobile DOM order remains the reading, keyboard, and focus order.
2014

21-
## Ownership
15+
Layout owns structure. UI Style Kit owns paint. Interactive Surface owns interaction styling.
2216

23-
Layout Style CSS owns spatial behavior: containment, wrappers, flow, grids, areas, spans, sizing, and responsive arrangement. UI Style Kit owns visual paint. Interactive Surface owns interaction-state styling.
17+
## Documentation
2418

25-
The package has no runtime or peer dependencies. `ui-style-kit-css@2.1.0` and `interactive-surface-css@1.5.0` are released registry fixtures used to prove optional integration.
26-
27-
## Supported Baseline
28-
29-
- Node.js 20 or newer for package development
30-
- Current evergreen Chromium, Firefox, and WebKit
31-
- Mobile-first DOM order with core thresholds at `48rem` and `64rem`, nearest-container personality overrides, and `64rem` feasibility gates for three- and four-track application shells
32-
33-
The deprecated UI structural bridge remains available for existing UI-prefixed layout aliases, but canonical 2.1 examples use UI Style Kit visual CSS, the UI token bridge, Interactive Surface `state-core.css`, and Layout core.
19+
- [Getting Started](Getting-Started.md)
20+
- [Installation And CDN](Installation-And-CDN.md)
21+
- [Layout Primitives](Layout-Primitives.md)
22+
- [Layout Recipes](Layout-Recipes.md)
23+
- [Layout Styles](Layout-Styles.md)
24+
- [Migrating To 3.0](Migrating-To-3.0.md)
25+
- [Demo And GitHub Pages](Demo-And-GitHub-Pages.md)
26+
- [Release And Publishing](Release-And-Publishing.md)
27+
- [Security And Support](Security-And-Support.md)

0 commit comments

Comments
 (0)