layout-style-css 2.1.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README.md +127 -143
- package/dist/core.css +2 -1
- package/dist/foundation.css +194 -0
- package/dist/layout-style-css.css +527 -984
- package/dist/layout-style-css.min.css +1 -1
- package/dist/personalities/bauhaus.css +13 -42
- package/dist/personalities/bento.css +16 -40
- package/dist/personalities/brutalism.css +13 -33
- package/dist/personalities/cyberpunk.css +12 -32
- package/dist/personalities/f-pattern.css +16 -45
- package/dist/personalities/maximalist.css +16 -48
- package/dist/personalities/minimal-saas.css +7 -33
- package/dist/personalities/mondrian.css +12 -40
- package/dist/personalities/neumorphism.css +15 -39
- package/dist/personalities/retro-glass.css +14 -42
- package/dist/personalities/retrofuturism.css +12 -32
- package/dist/personalities/split-screen.css +24 -36
- package/dist/personalities/synthwave.css +13 -41
- package/dist/personalities/tactile.css +15 -32
- package/dist/personalities/y2k.css +13 -33
- package/dist/personalities/z-pattern.css +16 -46
- package/dist/personalities.css +1 -1
- package/dist/primitives.css +27 -63
- package/dist/recipes.css +92 -175
- package/dist/utilities.css +39 -104
- package/dist/wrappers.css +28 -108
- package/docs/wiki/Contributing.md +3 -1
- package/docs/wiki/Demo-And-GitHub-Pages.md +24 -33
- package/docs/wiki/Getting-Started.md +39 -27
- package/docs/wiki/Home.md +21 -27
- package/docs/wiki/Installation-And-CDN.md +47 -42
- package/docs/wiki/Layout-Primitives.md +48 -34
- package/docs/wiki/Layout-Recipes.md +42 -33
- package/docs/wiki/Layout-Styles.md +60 -26
- package/docs/wiki/Migrating-To-3.0.md +205 -0
- package/docs/wiki/Release-And-Publishing.md +36 -51
- package/docs/wiki/Security-And-Support.md +18 -22
- package/docs/wiki/UI-Style-Kit-Compatibility.md +21 -30
- package/docs/wiki/_Sidebar.md +12 -15
- package/manifest.json +98 -0
- package/package.json +33 -28
- package/personalities.json +147 -0
- package/CONTRIBUTING.md +0 -55
- package/SECURITY.md +0 -50
- package/demo/assets/apple-touch-icon.svg +0 -7
- package/demo/assets/favicon.svg +0 -7
- package/demo/assets/social-card.png +0 -0
- package/demo/browserconfig.xml +0 -9
- package/demo/demo.css +0 -523
- package/demo/demo.js +0 -605
- package/demo/index.html +0 -325
- package/demo/robots.txt +0 -4
- package/demo/site.webmanifest +0 -23
- package/demo/sitemap.xml +0 -9
- package/dist/integrations/ui-style-kit.css +0 -175
- package/dist/legacy.css +0 -822
- package/styles/core.css +0 -6
- package/styles/integrations/ui-style-kit.css +0 -175
- package/styles/legacy.css +0 -173
- package/styles/personalities/bauhaus.css +0 -49
- package/styles/personalities/bento.css +0 -46
- package/styles/personalities/brutalism.css +0 -39
- package/styles/personalities/cyberpunk.css +0 -39
- package/styles/personalities/f-pattern.css +0 -51
- package/styles/personalities/maximalist.css +0 -54
- package/styles/personalities/minimal-saas.css +0 -39
- package/styles/personalities/mondrian.css +0 -47
- package/styles/personalities/neumorphism.css +0 -46
- package/styles/personalities/retro-glass.css +0 -47
- package/styles/personalities/retrofuturism.css +0 -39
- package/styles/personalities/split-screen.css +0 -41
- package/styles/personalities/synthwave.css +0 -48
- package/styles/personalities/tactile.css +0 -39
- package/styles/personalities/y2k.css +0 -39
- package/styles/personalities/z-pattern.css +0 -52
- package/styles/personalities.css +0 -18
- package/styles/primitives.css +0 -219
- package/styles/recipes.css +0 -278
- package/styles/utilities.css +0 -162
- package/styles/wrappers.css +0 -174
|
@@ -1,49 +1,58 @@
|
|
|
1
1
|
# Layout Recipes
|
|
2
2
|
|
|
3
|
-
Recipes are
|
|
3
|
+
Recipes are attribute-only semantic layouts. The mobile DOM order is authoritative, and automatic container enhancement is the zero-configuration default.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Automatic Thresholds
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
| Recipe | Nearest `ly-scope` threshold |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `data-ly-recipe="split-hero"` | `42rem` |
|
|
10
|
+
| `data-ly-recipe="list-detail"` | `44rem` |
|
|
11
|
+
| `data-ly-recipe="docs"` | `48rem` |
|
|
12
|
+
| `data-ly-recipe="app-shell"` | medium `52rem`, wide `72rem` |
|
|
13
|
+
| `data-ly-recipe="dashboard"` | medium `52rem`, wide `72rem` |
|
|
14
|
+
| `data-ly-recipe="gallery"` | intrinsic; no topology query |
|
|
15
|
+
| `data-ly-recipe="card-grid"` | intrinsic; no topology query |
|
|
8
16
|
|
|
9
|
-
|
|
10
|
-
- `dashboard`
|
|
11
|
-
- `docs`
|
|
12
|
-
- `list-detail`
|
|
13
|
-
- `split-hero`
|
|
14
|
-
- `gallery`
|
|
15
|
-
- `card-grid`
|
|
17
|
+
Recipe roots also establish `ly-scope`, so child compositions can respond without extra setup.
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
## Areas
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
Canonical `data-ly-area` values are:
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
- App shell: `header`, `sidebar`, `main`, `aside`, `footer`
|
|
24
|
+
- Dashboard and Docs: `header`, `nav`, `main`, `aside`, `footer`
|
|
25
|
+
- List detail: `primary`, `secondary`, `actions`
|
|
26
|
+
- Split hero: `content`, `media`, `actions`
|
|
22
27
|
|
|
23
28
|
```html
|
|
24
|
-
<
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
</section>
|
|
32
|
-
</div>
|
|
29
|
+
<section data-ly-recipe="docs">
|
|
30
|
+
<header data-ly-area="header">Docs</header>
|
|
31
|
+
<nav data-ly-area="nav" aria-label="Documentation">Navigation</nav>
|
|
32
|
+
<main data-ly-area="main">Article</main>
|
|
33
|
+
<aside data-ly-area="aside">On this page</aside>
|
|
34
|
+
<footer data-ly-area="footer">Next</footer>
|
|
35
|
+
</section>
|
|
33
36
|
```
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
## Content And Media Recipes
|
|
38
|
+
## Manual Responsiveness
|
|
38
39
|
|
|
39
|
-
`
|
|
40
|
+
`data-ly-responsive="manual"` disables automatic topology rules while retaining the stacked fallback.
|
|
40
41
|
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
```css
|
|
43
|
+
@container ly-scope (min-width: 56rem) {
|
|
44
|
+
[data-ly-recipe="docs"][data-ly-responsive="manual"] {
|
|
45
|
+
/* Application-owned topology. */
|
|
46
|
+
}
|
|
47
|
+
}
|
|
47
48
|
```
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
Use the nearest wrapper as the query boundary when a component needs a constrained local allocation. Use a recipe directly in `.ly-root` when no measure wrapper is needed.
|
|
51
|
+
|
|
52
|
+
## Accessibility
|
|
53
|
+
|
|
54
|
+
Write the source in mobile reading order and keep actions beside the content they control. Named grid areas can change visual placement, but they do not alter DOM, reading, keyboard, or focus order. Visual-order utilities are not part of v3.
|
|
55
|
+
|
|
56
|
+
## Vertical Responsiveness
|
|
57
|
+
|
|
58
|
+
Recipe gaps and scroll bounds tighten at `44rem` viewport height. At `30rem`, recipe-owned sticky positioning and forced shell height stop so navigation, main content, and actions remain reachable.
|
|
@@ -1,33 +1,67 @@
|
|
|
1
1
|
# Layout Styles
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The sixteen `data-ly-layout` values are focused token and topology profiles:
|
|
4
|
+
|
|
5
|
+
`minimal-saas`, `bauhaus`, `tactile`, `cyberpunk`, `f-pattern`, `brutalism`, `neumorphism`, `y2k`, `retro-glass`, `z-pattern`, `retrofuturism`, `mondrian`, `synthwave`, `bento`, `maximalist`, and `split-screen`.
|
|
4
6
|
|
|
5
7
|
```html
|
|
6
|
-
<body class="ly-root" data-ly-layout="
|
|
8
|
+
<body class="ly-root" data-ly-layout="bento">
|
|
9
|
+
<main data-ly-recipe="dashboard">...</main>
|
|
10
|
+
</body>
|
|
7
11
|
```
|
|
8
12
|
|
|
9
|
-
##
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
13
|
+
## Shared Engine
|
|
14
|
+
|
|
15
|
+
Every profile feeds the same wrapper, primitive, and recipe engine. Profiles tune values such as:
|
|
16
|
+
|
|
17
|
+
- wrapper measure
|
|
18
|
+
- base and grid gaps
|
|
19
|
+
- rail, pane, and media preferences
|
|
20
|
+
- gallery and card minimums
|
|
21
|
+
- frame ratio
|
|
22
|
+
- shared recipe area and track templates
|
|
23
|
+
|
|
24
|
+
A profile must remain visibly distinct through at least two spatial characteristics. Personality files may not declare their own `@container`, viewport, or orientation breakpoint systems.
|
|
25
|
+
|
|
26
|
+
## Ownership
|
|
27
|
+
|
|
28
|
+
Layout owns structure. UI Style Kit owns paint. Interactive Surface owns interaction styling.
|
|
29
|
+
|
|
30
|
+
The personality name does not promise colors, typography, borders, shadows, or interaction states. Pair the same name across libraries when desired, but import each library explicitly and let it own its layer.
|
|
31
|
+
|
|
32
|
+
## Visual Pairing Guidance
|
|
33
|
+
|
|
34
|
+
[`layout-style-css/personalities.json`](../../personalities.json) is the public, machine-readable pairing source used by the demo. Its entries are recommendations, never dependencies: `data-ly-layout`, `data-ui`, `data-theme`, and `data-mode` are independently selectable on the same document.
|
|
35
|
+
|
|
36
|
+
| Layout personality | Visual pairing guidance |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| Minimal SaaS | Native match: `minimal-saas` |
|
|
39
|
+
| Bento | Native match: `bento` |
|
|
40
|
+
| Maximalist | Native match: `maximalist` |
|
|
41
|
+
| Bauhaus | Native match: `bauhaus` |
|
|
42
|
+
| Tactile | Native match: `tactile` |
|
|
43
|
+
| Neumorphism | Native match: `neumorphism` |
|
|
44
|
+
| Retrofuturism | Native match: `retrofuturism` |
|
|
45
|
+
| Brutalism | Native match: `brutalism` |
|
|
46
|
+
| Cyberpunk | Native match: `cyberpunk` |
|
|
47
|
+
| Y2K | Native match: `y2k` |
|
|
48
|
+
| Retro Glass | Native match: `retro-glass` |
|
|
49
|
+
| F-pattern | Any visual preset; this is structure only |
|
|
50
|
+
| Z-pattern | Any visual preset; this is structure only |
|
|
51
|
+
| Split Screen | Any visual preset; this is structure only |
|
|
52
|
+
| Mondrian | Any visual preset; this is structure only |
|
|
53
|
+
| Synthwave | Recommended: `cyberpunk` or `retrofuturism`; the browser contract verifies each preset's distinct rendered article shadow while retaining `data-ly-layout="synthwave"` |
|
|
54
|
+
|
|
55
|
+
## Customization
|
|
56
|
+
|
|
57
|
+
Override public tokens at `.ly-root` or a narrower scope:
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
.product-shell {
|
|
61
|
+
--ly-profile-gap: 1.25rem;
|
|
62
|
+
--ly-recipe-rail: 17rem;
|
|
63
|
+
--ly-card-grid-min: 18rem;
|
|
64
|
+
}
|
|
65
|
+
```
|
|
33
66
|
|
|
67
|
+
Use `data-ly-responsive="manual"` plus an application-owned `@container ly-scope` query when token tuning is not enough.
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Migrating To 3.0
|
|
2
|
+
|
|
3
|
+
`layout-style-css@3.0.0` is an intentional clean break from v2. There is no compatibility bundle. Migrate markup and imports before upgrading the package.
|
|
4
|
+
|
|
5
|
+
## Package Imports
|
|
6
|
+
|
|
7
|
+
| Removed v2 surface | v3 replacement |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `layout-style-css/legacy.css` | Canonical v3 hooks; `legacy.css` is not shipped |
|
|
10
|
+
| `layout-style-css/integrations/ui-style-kit.css` | Import UI Style Kit paint explicitly; `integrations/ui-style-kit.css` is not shipped |
|
|
11
|
+
| `layout-style-css/bridge.css` | Removed; compose UI Style Kit paint explicitly because `bridge.css` is not shipped |
|
|
12
|
+
| `layout-style-css/css` (`./css`) | `layout-style-css` |
|
|
13
|
+
| `layout-style-css/css.css` (`./css.css`) | `layout-style-css` |
|
|
14
|
+
| `layout-style-css/min` (`./min`) | `layout-style-css/min.css` |
|
|
15
|
+
|
|
16
|
+
Focused exports remain available for `foundation.css`, `wrappers.css`, `primitives.css`, `recipes.css`, `utilities.css`, `personalities.css`, and `personalities/*.css`.
|
|
17
|
+
|
|
18
|
+
## Recipe Hooks
|
|
19
|
+
|
|
20
|
+
Recipe classes were aliases in v2 and are removed in v3. Replace them with the canonical attribute:
|
|
21
|
+
|
|
22
|
+
| Removed class | Canonical v3 hook |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| `.ly-app-shell` | `data-ly-recipe="app-shell"` |
|
|
25
|
+
| `.ly-dashboard` | `data-ly-recipe="dashboard"` |
|
|
26
|
+
| `.ly-docs` | `data-ly-recipe="docs"` |
|
|
27
|
+
| `.ly-list-detail` | `data-ly-recipe="list-detail"` |
|
|
28
|
+
| `.ly-split-hero` | `data-ly-recipe="split-hero"` |
|
|
29
|
+
| `.ly-gallery` | `data-ly-recipe="gallery"` |
|
|
30
|
+
| `.ly-card-grid` | `data-ly-recipe="card-grid"` |
|
|
31
|
+
|
|
32
|
+
Before:
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<section class="ly-dashboard" data-ly-recipe="dashboard">...</section>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
After:
|
|
39
|
+
|
|
40
|
+
```html
|
|
41
|
+
<section data-ly-recipe="dashboard">...</section>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Keep canonical `data-ly-area` values on regions. App shell uses `sidebar`; Dashboard and Docs use `nav`.
|
|
45
|
+
|
|
46
|
+
## Automatic And Manual Responsiveness
|
|
47
|
+
|
|
48
|
+
Missing `data-ly-responsive` means automatic enhancement. To own topology yourself, opt out:
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<section data-ly-recipe="docs" data-ly-responsive="manual">...</section>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```css
|
|
55
|
+
@container ly-scope (min-width: 56rem) {
|
|
56
|
+
[data-ly-recipe="docs"][data-ly-responsive="manual"] {
|
|
57
|
+
/* Application-owned topology. */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The manual form retains the safe single-column fallback until the application query applies.
|
|
63
|
+
|
|
64
|
+
## Containers And Wrappers
|
|
65
|
+
|
|
66
|
+
`.ly-root`, every `.ly-wrapper`, and every recipe root now establishes the named `ly-scope` inline-size container. Recipes can be direct children of `.ly-root`; nested recipes respond to the nearest wrapper.
|
|
67
|
+
|
|
68
|
+
The v3 wrapper names remain:
|
|
69
|
+
|
|
70
|
+
- `.ly-wrapper--compact`
|
|
71
|
+
- `.ly-wrapper--prose`
|
|
72
|
+
- `.ly-wrapper--content`
|
|
73
|
+
- `.ly-wrapper--wide`
|
|
74
|
+
- `.ly-wrapper--full`
|
|
75
|
+
- `.ly-wrapper--breakout`
|
|
76
|
+
|
|
77
|
+
Breakout lanes remain `data-ly-lane="content"`, `data-ly-lane="feature"`, and `data-ly-lane="full"`.
|
|
78
|
+
|
|
79
|
+
## Utilities And Source Order
|
|
80
|
+
|
|
81
|
+
Remove all v2 responsive utility families:
|
|
82
|
+
|
|
83
|
+
- `ly-md-*`
|
|
84
|
+
- `ly-lg-*`
|
|
85
|
+
|
|
86
|
+
Remove all visual-order utilities, including `.ly-order-first`, `.ly-order-normal`, `.ly-order-last`, and numbered order classes. There is no v3 replacement.
|
|
87
|
+
|
|
88
|
+
Fix the DOM instead. The mobile DOM order is the reading and keyboard order; named grid areas enhance presentation without moving focus. Built-in recipes never use Flexbox or Grid ordering.
|
|
89
|
+
|
|
90
|
+
The v3 utility module keeps only stable structural sizing, gap, padding, ratio, alignment, overflow, visibility, span, and column helpers.
|
|
91
|
+
|
|
92
|
+
Remove `.ly-bleed`. Its `100vw` technique could overflow documents with classic scrollbars. Use the clamped `data-ly-lane="feature"` or `data-ly-lane="full"` breakout lanes, or an application-owned technique that accounts for its actual containing block.
|
|
93
|
+
|
|
94
|
+
## Complete V2 Selector Index
|
|
95
|
+
|
|
96
|
+
This index compares the `2.1.1` default bundle with v3. Selectors not named below remain available with their canonical v3 meaning.
|
|
97
|
+
|
|
98
|
+
### Structural Aliases
|
|
99
|
+
|
|
100
|
+
Replace application-shell region classes with canonical areas:
|
|
101
|
+
|
|
102
|
+
| Removed classes | v3 replacement |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| `.ly-app-header`, `.ly-app-sidebar`, `.ly-app-main`, `.ly-app-aside`, `.ly-app-footer` | `data-ly-area="header"`, `data-ly-area="sidebar"`, `data-ly-area="main"`, `data-ly-area="aside"`, `data-ly-area="footer"` |
|
|
105
|
+
|
|
106
|
+
Replace every removed area class with its same-named attribute:
|
|
107
|
+
|
|
108
|
+
- `.ly-area--header` → `data-ly-area="header"`
|
|
109
|
+
- `.ly-area--nav` → `data-ly-area="nav"`
|
|
110
|
+
- `.ly-area--main` → `data-ly-area="main"`
|
|
111
|
+
- `.ly-area--aside` → `data-ly-area="aside"`
|
|
112
|
+
- `.ly-area--footer` → `data-ly-area="footer"`
|
|
113
|
+
- `.ly-area--content` → `data-ly-area="content"`
|
|
114
|
+
- `.ly-area--media` → `data-ly-area="media"`
|
|
115
|
+
- `.ly-area--actions` → `data-ly-area="actions"`
|
|
116
|
+
- `.ly-area--primary` → `data-ly-area="primary"`
|
|
117
|
+
- `.ly-area--secondary` → `data-ly-area="secondary"`
|
|
118
|
+
|
|
119
|
+
`.ly-grid--auto` becomes `.ly-grid`; intrinsic `auto-fit` tracks are now the default. Replace `.ly-panes--2` and `.ly-panes--3` with `.ly-panes`, then tune `--ly-pane-min`, `--ly-pane-size`, or application CSS if an exact fixed topology is required.
|
|
120
|
+
|
|
121
|
+
The removed `.ly-media__asset` and `.ly-media__content` aliases become correctly ordered children of `.ly-media`. Keep `.ly-media__actions` when its existing action sizing is useful; use application-owned hooks if asset and content children need additional semantics.
|
|
122
|
+
|
|
123
|
+
### Columns And Spans
|
|
124
|
+
|
|
125
|
+
The stable column utilities retained by v3 are `.ly-cols-1`, `.ly-cols-2`, `.ly-cols-3`, `.ly-cols-4`, `.ly-cols-6`, and `.ly-cols-12`. Replace the removed `.ly-cols-5`, `.ly-cols-7`, `.ly-cols-8`, `.ly-cols-9`, `.ly-cols-10`, `.ly-cols-11`, and `.ly-cols-16` with a local `--ly-grid-columns` override:
|
|
126
|
+
|
|
127
|
+
```css
|
|
128
|
+
.application-grid {
|
|
129
|
+
--ly-grid-columns: 8;
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
All responsive column aliases are removed:
|
|
134
|
+
|
|
135
|
+
- `.ly-md-cols-1`, `.ly-md-cols-2`, `.ly-md-cols-3`, `.ly-md-cols-4`, `.ly-md-cols-6`, `.ly-md-cols-8`, `.ly-md-cols-12`, `.ly-md-cols-16`
|
|
136
|
+
- `.ly-lg-cols-1`, `.ly-lg-cols-2`, `.ly-lg-cols-3`, `.ly-lg-cols-4`, `.ly-lg-cols-6`, `.ly-lg-cols-8`, `.ly-lg-cols-12`, `.ly-lg-cols-16`
|
|
137
|
+
|
|
138
|
+
Put a retained base utility or `--ly-grid-columns` override inside an application-owned `@container ly-scope` query when a fixed responsive column count is genuinely required.
|
|
139
|
+
|
|
140
|
+
V3 retains `.ly-span-1` through `.ly-span-4` and `.ly-span-full`. Replace `.ly-span-5`, `.ly-span-6`, `.ly-span-7`, `.ly-span-8`, `.ly-span-9`, `.ly-span-10`, `.ly-span-11`, `.ly-span-12`, `.ly-span-13`, `.ly-span-14`, `.ly-span-15`, and `.ly-span-16` with application CSS such as `grid-column: span 8`.
|
|
141
|
+
|
|
142
|
+
### Spacing And Ratio Utilities
|
|
143
|
+
|
|
144
|
+
V3 keeps the even spacing steps. Replace `.ly-gap-1`, `.ly-gap-3`, `.ly-gap-5`, `.ly-gap-7`, and `.ly-gap-9` with the closest retained utility or set `--ly-gap`, `--ly-grid-gap`, `--ly-stack-gap`, and `--ly-cluster-gap` together in application CSS.
|
|
145
|
+
|
|
146
|
+
Replace `.ly-pad-1`, `.ly-pad-3`, `.ly-pad-5`, `.ly-pad-7`, and `.ly-pad-9` with a retained even padding step or application padding. The directional `.ly-px-4`, `.ly-px-6`, `.ly-px-8`, `.ly-py-4`, `.ly-py-6`, and `.ly-py-8` aliases have no v3 utility; use logical `padding-inline` or `padding-block`.
|
|
147
|
+
|
|
148
|
+
Replace `.ly-frame-2x1` with an application token override:
|
|
149
|
+
|
|
150
|
+
```css
|
|
151
|
+
.application-frame {
|
|
152
|
+
--ly-frame-ratio: 2 / 1;
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Responsive Visibility And Visual Order
|
|
157
|
+
|
|
158
|
+
`.ly-show-md-up` and `.ly-show-lg-up` are removed. Prefer content that remains available at every allocation; if conditional rendering is a product requirement, own it in application CSS and preserve an accessible reading experience.
|
|
159
|
+
|
|
160
|
+
All visual-order selectors are removed with no v3 replacement:
|
|
161
|
+
|
|
162
|
+
- `.ly-order-first`, `.ly-order-normal`, `.ly-order-last`, `.ly-order-1`, `.ly-order-2`, `.ly-order-3`, `.ly-order-4`, `.ly-order-5`, `.ly-order-6`
|
|
163
|
+
- `.ly-md-order-first`, `.ly-md-order-normal`, `.ly-md-order-last`, `.ly-md-order-1`, `.ly-md-order-2`, `.ly-md-order-3`, `.ly-md-order-4`, `.ly-md-order-5`, `.ly-md-order-6`
|
|
164
|
+
- `.ly-lg-order-first`, `.ly-lg-order-normal`, `.ly-lg-order-last`, `.ly-lg-order-1`, `.ly-lg-order-2`, `.ly-lg-order-3`, `.ly-lg-order-4`, `.ly-lg-order-5`, `.ly-lg-order-6`
|
|
165
|
+
|
|
166
|
+
## Vertical Responsiveness
|
|
167
|
+
|
|
168
|
+
v3 adds height-aware defaults:
|
|
169
|
+
|
|
170
|
+
- At `44rem` high or less, spacing, header height, and scroll bounds tighten.
|
|
171
|
+
- At `30rem` high or less, recipe-owned sticky positioning and forced cover/shell heights are removed.
|
|
172
|
+
- `100vh` fallbacks are followed by `100dvh`.
|
|
173
|
+
|
|
174
|
+
Delete application orientation workarounds that existed only to make v2 shells usable in short landscape, then test actual available width and height.
|
|
175
|
+
|
|
176
|
+
## Personalities
|
|
177
|
+
|
|
178
|
+
All sixteen `data-ly-layout` values remain. Personality files are now token/topology profiles consumed by one shared responsive engine. They do not own independent `@container` or viewport breakpoint systems.
|
|
179
|
+
|
|
180
|
+
If application CSS targeted personality-specific topology thresholds, move that topology to a manual recipe query against `ly-scope`.
|
|
181
|
+
|
|
182
|
+
## Ecosystem Ownership
|
|
183
|
+
|
|
184
|
+
Layout owns structure. UI Style Kit owns paint. Interactive Surface owns interaction styling.
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
import "ui-style-kit-css/visual.css";
|
|
188
|
+
import "ui-style-kit-css/interactive-surface-theme.css";
|
|
189
|
+
import "interactive-surface-css/state-core.css";
|
|
190
|
+
import "layout-style-css";
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Do not recreate the removed structural bridge with UI-prefixed aliases. Put canonical Layout hooks in markup and let companion libraries style their own responsibilities.
|
|
194
|
+
|
|
195
|
+
## Migration Checklist
|
|
196
|
+
|
|
197
|
+
1. Replace removed package exports.
|
|
198
|
+
2. Remove recipe class aliases.
|
|
199
|
+
3. Remove responsive and order utilities.
|
|
200
|
+
4. Confirm the mobile DOM, reading, keyboard, and focus order.
|
|
201
|
+
5. Use automatic recipes by default.
|
|
202
|
+
6. Add `data-ly-responsive="manual"` only where application topology is genuinely required.
|
|
203
|
+
7. Test all recipes directly in `.ly-root` and inside their nearest wrapper.
|
|
204
|
+
8. Test narrow, wide, tall, and short-landscape allocations.
|
|
205
|
+
9. Run `npm run test:full` in Chromium, Firefox, and WebKit.
|
|
@@ -1,77 +1,62 @@
|
|
|
1
1
|
# Release And Publishing
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This guide describes the release gate for `layout-style-css@3.0.1`. Running verification does not publish, tag, push, create a GitHub Release, or change the npm registry.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
- `package.json` and `package-lock.json` identify `2.1.1`.
|
|
8
|
-
- Node.js 20 and 22 pass standalone CI.
|
|
9
|
-
- `CHANGELOG.md` contains the dated 2.1.1 release entry.
|
|
10
|
-
- README, migration guide, wiki, demo, exports, and tarball describe the same v2 API.
|
|
11
|
-
- No peer or runtime dependencies are present.
|
|
12
|
-
|
|
13
|
-
## Local Verification
|
|
14
|
-
|
|
15
|
-
Install all Playwright engines once:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npx playwright install chromium firefox webkit
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
Then run:
|
|
5
|
+
## Local Candidate Gate
|
|
22
6
|
|
|
23
7
|
```bash
|
|
8
|
+
npm ci
|
|
24
9
|
npm run build
|
|
25
10
|
npm run lint
|
|
26
|
-
npm run
|
|
27
|
-
npm run test:static
|
|
28
|
-
npm run test:demo:quick
|
|
29
|
-
npm run test:demo:all
|
|
30
|
-
npm run test:pages
|
|
31
|
-
npm run pack:dry-run
|
|
11
|
+
npm run test:full
|
|
32
12
|
npm run release:verify
|
|
33
13
|
git diff --check
|
|
34
14
|
```
|
|
35
15
|
|
|
36
|
-
`release:verify`
|
|
37
|
-
|
|
38
|
-
`prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the full release verification gate.
|
|
16
|
+
`npm run release:verify` includes `npm audit --audit-level=moderate`, the cross-engine browser matrix, Pages verification, tarball dry-run, publish dry-run, and `npm run release:preflight`. It does not publish.
|
|
39
17
|
|
|
40
|
-
|
|
18
|
+
The read-only ecosystem preflight uses the immutable UI fixture in `ecosystem-release-fixture.json`, overrides Layout Style with the candidate tarball, queries npm for every exact documented minimum/current version, resolves all packed exports (including personality modules), validates maintained documentation, and runs the reviewed clean-install matrices. Pull requests execute this same gate without enabling publish, tag, release, or deployment mutations.
|
|
41
19
|
|
|
42
|
-
The
|
|
20
|
+
The package's `prepublishOnly` script runs `npm run release:verify`, so a direct npm publish uses the same full gate.
|
|
43
21
|
|
|
44
|
-
|
|
22
|
+
## Coordinated Bootstrap Sequence
|
|
45
23
|
|
|
46
|
-
|
|
47
|
-
npm view layout-style-css@2.1.1 version --json
|
|
48
|
-
```
|
|
24
|
+
The immutable cross-repository pins require this exact remote sequence:
|
|
49
25
|
|
|
50
|
-
|
|
26
|
+
1. Push a stable UI bootstrap ref containing `bdbb6a7e432f30b92de206cac6a00fe85394190c`.
|
|
27
|
+
2. Push and merge Interactive Surface CSS and Layout Style CSS with merge commits so their reviewed commit SHAs remain reachable.
|
|
28
|
+
3. Update and verify the final UI companion pins against those merged companion commits.
|
|
29
|
+
4. Push the final UI branch, rerun its ecosystem preflight, and merge UI with a merge commit.
|
|
30
|
+
5. Do not squash, rebase, or delete the only remote refs until every pinned commit is reachable through merged ancestry.
|
|
51
31
|
|
|
52
|
-
|
|
53
|
-
git tag v2.1.1
|
|
54
|
-
git push origin v2.1.1
|
|
55
|
-
```
|
|
32
|
+
The bootstrap SHA is deliberately stable: companion workflows use it to load the reviewed preflight implementation before the final UI commit can reference the companion heads.
|
|
56
33
|
|
|
57
|
-
|
|
34
|
+
## Candidate Inspection
|
|
58
35
|
|
|
59
|
-
|
|
36
|
+
Confirm:
|
|
60
37
|
|
|
61
|
-
|
|
38
|
+
- package version is `3.0.1`
|
|
39
|
+
- intended tag would be `v3.0.1`
|
|
40
|
+
- runtime and peer dependencies are empty
|
|
41
|
+
- exact exports and tarball files match the v3 contract
|
|
42
|
+
- generated CSS matches authored sources
|
|
43
|
+
- Chromium, Firefox, and WebKit are green
|
|
44
|
+
- `desktop.ini` and other local-only files are absent from the tarball
|
|
62
45
|
|
|
63
|
-
|
|
46
|
+
## Separately Approved Publication
|
|
64
47
|
|
|
65
|
-
|
|
66
|
-
2. checks out the exact `refs/tags/<release_tag>` namespace without persisted credentials;
|
|
67
|
-
3. verifies `HEAD` equals the tag's peeled commit;
|
|
68
|
-
4. fetches `origin/main` and requires the tag commit to be reachable from protected main; and
|
|
69
|
-
5. requires the package version to equal the tag.
|
|
48
|
+
Only after explicit approval:
|
|
70
49
|
|
|
71
|
-
|
|
50
|
+
1. Commit the verified candidate.
|
|
51
|
+
2. Push the intended branch.
|
|
52
|
+
3. Merge through the repository's normal review policy.
|
|
53
|
+
4. Create the exact `v3.0.1` tag from the protected release commit.
|
|
54
|
+
5. Publish the GitHub Release.
|
|
55
|
+
6. Let the protected npm workflow verify the tag and publish with provenance.
|
|
56
|
+
7. Confirm the GitHub Release, tag, and npm registry state independently.
|
|
72
57
|
|
|
73
|
-
The
|
|
58
|
+
The npm job uses the protected `npm` environment, required reviewers, least-privilege permissions, strict tag validation, exact tag checkout, main-ancestry verification, and an immutable commit sha. Prefer npm trusted publishing when the registry setup supports it.
|
|
74
59
|
|
|
75
|
-
##
|
|
60
|
+
## Recovery
|
|
76
61
|
|
|
77
|
-
|
|
62
|
+
If verification fails, fix the candidate and rerun the complete gate. Do not move or overwrite an existing release tag. Use a new semantic version when a published artifact must be corrected.
|
|
@@ -1,36 +1,32 @@
|
|
|
1
1
|
# Security And Support
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Supported Versions
|
|
3
|
+
## Supported Lines
|
|
6
4
|
|
|
7
5
|
| Version | Supported |
|
|
8
6
|
| --- | --- |
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `1.
|
|
12
|
-
|
|
13
|
-
The v2 `legacy.css` compatibility bundle is scheduled for removal in v3.
|
|
14
|
-
|
|
15
|
-
## Browser Baseline
|
|
7
|
+
| `3.x` | Yes |
|
|
8
|
+
| `2.x` | Security fixes only during the v3 transition |
|
|
9
|
+
| `1.x` | No |
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
v3 is dependency-free at runtime. Development dependencies and release automation remain subject to the repository security policy.
|
|
18
12
|
|
|
19
|
-
##
|
|
13
|
+
## Reporting
|
|
20
14
|
|
|
21
|
-
Use
|
|
15
|
+
Use the private process in the repository [SECURITY.md](../../SECURITY.md). Do not publish exploit details in a public issue before maintainers can assess them.
|
|
22
16
|
|
|
23
|
-
|
|
17
|
+
## Release Trust
|
|
24
18
|
|
|
25
|
-
|
|
19
|
+
The npm workflow uses:
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
- a protected npm environment with required reviewers
|
|
22
|
+
- exact `refs/tags/v*` checkout
|
|
23
|
+
- main-branch ancestry verification
|
|
24
|
+
- least-privilege workflow permissions
|
|
25
|
+
- registry provenance
|
|
26
|
+
- an immutable commit sha
|
|
31
27
|
|
|
32
|
-
|
|
28
|
+
Use npm trusted publishing when configured. A local green `release:verify` is evidence for a candidate, not authority to publish.
|
|
33
29
|
|
|
34
|
-
|
|
30
|
+
## Structural Security Boundary
|
|
35
31
|
|
|
36
|
-
|
|
32
|
+
Layout CSS has no network calls, script execution, runtime dependencies, secrets, or user data processing. Security-sensitive application behavior remains outside this package.
|