layout-style-css 2.0.0 → 2.1.0
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 +62 -50
- package/CONTRIBUTING.md +43 -43
- package/LICENSE +21 -21
- package/README.md +18 -13
- package/SECURITY.md +39 -39
- package/demo/assets/apple-touch-icon.svg +7 -7
- package/demo/assets/favicon.svg +7 -7
- package/demo/browserconfig.xml +9 -9
- package/demo/demo.js +128 -43
- package/demo/index.html +20 -18
- package/demo/robots.txt +4 -4
- package/demo/site.webmanifest +23 -23
- package/demo/sitemap.xml +8 -8
- package/dist/integrations/ui-style-kit.css +162 -162
- package/docs/wiki/Demo-And-GitHub-Pages.md +1 -1
- package/docs/wiki/Getting-Started.md +1 -1
- package/docs/wiki/Home.md +3 -3
- package/docs/wiki/Installation-And-CDN.md +8 -9
- package/docs/wiki/Migrating-To-2.0.md +7 -7
- package/docs/wiki/Release-And-Publishing.md +10 -8
- package/docs/wiki/UI-Style-Kit-Compatibility.md +8 -9
- package/package.json +78 -78
- package/styles/integrations/ui-style-kit.css +162 -162
|
@@ -1,70 +1,70 @@
|
|
|
1
1
|
@layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
|
-
Compatibility bridge for ui-style-kit-css.
|
|
5
|
-
This bridge intentionally does not map color, type, border, or shadow tokens.
|
|
4
|
+
Compatibility bridge for ui-style-kit-css.
|
|
5
|
+
This bridge intentionally does not map color, type, border, or shadow tokens.
|
|
6
6
|
ui-style-kit-css owns those visuals; layout-style-css owns structure.
|
|
7
|
-
*/
|
|
8
|
-
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
9
|
@layer ly.integrations.ui_style_kit {
|
|
10
|
-
:where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
|
|
11
|
-
--ly-ui-style-kit-bridge: 1;
|
|
12
|
-
|
|
13
|
-
/*
|
|
14
|
-
Normalize UI kit root background geometry without redefining its paint.
|
|
15
|
-
Patterned theme layers should fill the viewport once instead of tiling.
|
|
16
|
-
*/
|
|
17
|
-
min-block-size: 100svh;
|
|
18
|
-
background-attachment: fixed;
|
|
19
|
-
background-position: center;
|
|
20
|
-
background-repeat: no-repeat;
|
|
21
|
-
background-size: 100% 100%;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
:where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
|
|
25
|
-
--ly-ui-style-kit-bridge-style: minimal-saas;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
:where(.ly-root[data-ui="bento"], [data-ui="bento"] .ly-root) {
|
|
29
|
-
--ly-ui-style-kit-bridge-style: bento;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
:where(.ly-root[data-ui="maximalist"], [data-ui="maximalist"] .ly-root) {
|
|
33
|
-
--ly-ui-style-kit-bridge-style: maximalist;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
:where(.ly-root[data-ui="bauhaus"], [data-ui="bauhaus"] .ly-root) {
|
|
37
|
-
--ly-ui-style-kit-bridge-style: bauhaus;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
:where(.ly-root[data-ui="tactile"], [data-ui="tactile"] .ly-root) {
|
|
41
|
-
--ly-ui-style-kit-bridge-style: tactile;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
:where(.ly-root[data-ui="neumorphism"], [data-ui="neumorphism"] .ly-root) {
|
|
45
|
-
--ly-ui-style-kit-bridge-style: neumorphism;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
:where(.ly-root[data-ui="retrofuturism"], [data-ui="retrofuturism"] .ly-root) {
|
|
49
|
-
--ly-ui-style-kit-bridge-style: retrofuturism;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
:where(.ly-root[data-ui="brutalism"], [data-ui="brutalism"] .ly-root) {
|
|
53
|
-
--ly-ui-style-kit-bridge-style: brutalism;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:where(.ly-root[data-ui="cyberpunk"], [data-ui="cyberpunk"] .ly-root) {
|
|
57
|
-
--ly-ui-style-kit-bridge-style: cyberpunk;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
:where(.ly-root[data-ui="y2k"], [data-ui="y2k"] .ly-root) {
|
|
61
|
-
--ly-ui-style-kit-bridge-style: y2k;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
:where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
|
|
65
|
-
--ly-ui-style-kit-bridge-style: retro-glass;
|
|
66
|
-
}
|
|
67
|
-
|
|
10
|
+
:where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
|
|
11
|
+
--ly-ui-style-kit-bridge: 1;
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
Normalize UI kit root background geometry without redefining its paint.
|
|
15
|
+
Patterned theme layers should fill the viewport once instead of tiling.
|
|
16
|
+
*/
|
|
17
|
+
min-block-size: 100svh;
|
|
18
|
+
background-attachment: fixed;
|
|
19
|
+
background-position: center;
|
|
20
|
+
background-repeat: no-repeat;
|
|
21
|
+
background-size: 100% 100%;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
|
|
25
|
+
--ly-ui-style-kit-bridge-style: minimal-saas;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(.ly-root[data-ui="bento"], [data-ui="bento"] .ly-root) {
|
|
29
|
+
--ly-ui-style-kit-bridge-style: bento;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:where(.ly-root[data-ui="maximalist"], [data-ui="maximalist"] .ly-root) {
|
|
33
|
+
--ly-ui-style-kit-bridge-style: maximalist;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
:where(.ly-root[data-ui="bauhaus"], [data-ui="bauhaus"] .ly-root) {
|
|
37
|
+
--ly-ui-style-kit-bridge-style: bauhaus;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
:where(.ly-root[data-ui="tactile"], [data-ui="tactile"] .ly-root) {
|
|
41
|
+
--ly-ui-style-kit-bridge-style: tactile;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:where(.ly-root[data-ui="neumorphism"], [data-ui="neumorphism"] .ly-root) {
|
|
45
|
+
--ly-ui-style-kit-bridge-style: neumorphism;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:where(.ly-root[data-ui="retrofuturism"], [data-ui="retrofuturism"] .ly-root) {
|
|
49
|
+
--ly-ui-style-kit-bridge-style: retrofuturism;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:where(.ly-root[data-ui="brutalism"], [data-ui="brutalism"] .ly-root) {
|
|
53
|
+
--ly-ui-style-kit-bridge-style: brutalism;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
:where(.ly-root[data-ui="cyberpunk"], [data-ui="cyberpunk"] .ly-root) {
|
|
57
|
+
--ly-ui-style-kit-bridge-style: cyberpunk;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
:where(.ly-root[data-ui="y2k"], [data-ui="y2k"] .ly-root) {
|
|
61
|
+
--ly-ui-style-kit-bridge-style: y2k;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
:where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
|
|
65
|
+
--ly-ui-style-kit-bridge-style: retro-glass;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
68
|
:where(.saas-container, .bento-container, .max-container, .bau-container, .tactile-container, .neo-container, .retro-container, .brutal-container, .cyber-container, .y2k-container, .rg-container) {
|
|
69
69
|
/* UI Style Kit naming can opt into layout sizing without taking over visual paint. */
|
|
70
70
|
container-name: ly-wrapper;
|
|
@@ -72,104 +72,104 @@
|
|
|
72
72
|
inline-size: min(100%, calc(var(--ly-wrapper-max) + (var(--ly-wrapper-gutter) * 2)));
|
|
73
73
|
margin-inline: auto;
|
|
74
74
|
padding-inline: var(--ly-wrapper-gutter);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
:where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
|
|
78
|
-
padding-block: var(--ly-section-padding-block);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
:where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
|
|
82
|
-
display: flex;
|
|
83
|
-
flex-direction: column;
|
|
84
|
-
gap: var(--ly-stack-gap);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
:where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
|
|
88
|
-
display: flex;
|
|
89
|
-
flex-wrap: wrap;
|
|
90
|
-
align-items: center;
|
|
91
|
-
gap: var(--ly-cluster-gap);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
:where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
|
|
95
|
-
display: grid;
|
|
96
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
|
|
97
|
-
gap: var(--ly-grid-gap);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
:where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
|
|
101
|
-
display: grid;
|
|
102
|
-
grid-template-columns: 1fr;
|
|
103
|
-
gap: var(--ly-gap);
|
|
104
|
-
align-items: var(--ly-split-align, center);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
:where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
|
|
108
|
-
min-width: 0;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
:where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) {
|
|
112
|
-
display: flex;
|
|
113
|
-
flex-wrap: wrap;
|
|
114
|
-
align-items: center;
|
|
115
|
-
gap: var(--ly-cluster-gap);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
:where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) > * {
|
|
119
|
-
flex: 0 1 auto;
|
|
120
|
-
min-width: min(100%, var(--ly-button-min, 8rem));
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
:where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) {
|
|
124
|
-
display: grid;
|
|
125
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
|
|
126
|
-
gap: var(--ly-grid-gap);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
:where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) > * {
|
|
130
|
-
min-width: 0;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
:where(.saas-card-sm, .bento-card-sm, .max-card-sm, .bau-card-sm, .tactile-card-sm, .neo-card-sm, .retro-card-sm, .brutal-card-sm, .cyber-card-sm, .y2k-card-sm, .rg-card-sm) {
|
|
134
|
-
min-block-size: var(--ly-card-size-sm);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
:where(.saas-card-md, .bento-card-md, .max-card-md, .bau-card-md, .tactile-card-md, .neo-card-md, .retro-card-md, .brutal-card-md, .cyber-card-md, .y2k-card-md, .rg-card-md) {
|
|
138
|
-
min-block-size: var(--ly-card-size-md);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
:where(.saas-card-lg, .bento-card-lg, .max-card-lg, .bau-card-lg, .tactile-card-lg, .neo-card-lg, .retro-card-lg, .brutal-card-lg, .cyber-card-lg, .y2k-card-lg, .rg-card-lg) {
|
|
142
|
-
min-block-size: var(--ly-card-size-lg);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
:where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
|
|
146
|
-
display: grid;
|
|
147
|
-
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
|
|
148
|
-
gap: var(--ly-grid-gap);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
:where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
|
|
152
|
-
min-width: 0;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
:where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
|
|
156
|
-
display: grid;
|
|
157
|
-
grid-auto-flow: column;
|
|
158
|
-
grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
|
|
159
|
-
gap: var(--ly-grid-gap);
|
|
160
|
-
overflow-x: auto;
|
|
161
|
-
overscroll-behavior-inline: contain;
|
|
162
|
-
scroll-snap-type: x proximity;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
:where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
|
|
166
|
-
min-width: 0;
|
|
167
|
-
scroll-snap-align: start;
|
|
168
|
-
}
|
|
169
|
-
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
:where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
|
|
78
|
+
padding-block: var(--ly-section-padding-block);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
:where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
|
|
82
|
+
display: flex;
|
|
83
|
+
flex-direction: column;
|
|
84
|
+
gap: var(--ly-stack-gap);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
:where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
|
|
88
|
+
display: flex;
|
|
89
|
+
flex-wrap: wrap;
|
|
90
|
+
align-items: center;
|
|
91
|
+
gap: var(--ly-cluster-gap);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
:where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
|
|
95
|
+
display: grid;
|
|
96
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
|
|
97
|
+
gap: var(--ly-grid-gap);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
|
|
101
|
+
display: grid;
|
|
102
|
+
grid-template-columns: 1fr;
|
|
103
|
+
gap: var(--ly-gap);
|
|
104
|
+
align-items: var(--ly-split-align, center);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
:where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
|
|
108
|
+
min-width: 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
:where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) {
|
|
112
|
+
display: flex;
|
|
113
|
+
flex-wrap: wrap;
|
|
114
|
+
align-items: center;
|
|
115
|
+
gap: var(--ly-cluster-gap);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
:where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) > * {
|
|
119
|
+
flex: 0 1 auto;
|
|
120
|
+
min-width: min(100%, var(--ly-button-min, 8rem));
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
:where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) {
|
|
124
|
+
display: grid;
|
|
125
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
|
|
126
|
+
gap: var(--ly-grid-gap);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
:where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) > * {
|
|
130
|
+
min-width: 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
:where(.saas-card-sm, .bento-card-sm, .max-card-sm, .bau-card-sm, .tactile-card-sm, .neo-card-sm, .retro-card-sm, .brutal-card-sm, .cyber-card-sm, .y2k-card-sm, .rg-card-sm) {
|
|
134
|
+
min-block-size: var(--ly-card-size-sm);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
:where(.saas-card-md, .bento-card-md, .max-card-md, .bau-card-md, .tactile-card-md, .neo-card-md, .retro-card-md, .brutal-card-md, .cyber-card-md, .y2k-card-md, .rg-card-md) {
|
|
138
|
+
min-block-size: var(--ly-card-size-md);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
:where(.saas-card-lg, .bento-card-lg, .max-card-lg, .bau-card-lg, .tactile-card-lg, .neo-card-lg, .retro-card-lg, .brutal-card-lg, .cyber-card-lg, .y2k-card-lg, .rg-card-lg) {
|
|
142
|
+
min-block-size: var(--ly-card-size-lg);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
:where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
|
|
146
|
+
display: grid;
|
|
147
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
|
|
148
|
+
gap: var(--ly-grid-gap);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
:where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
|
|
152
|
+
min-width: 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
:where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
|
|
156
|
+
display: grid;
|
|
157
|
+
grid-auto-flow: column;
|
|
158
|
+
grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
|
|
159
|
+
gap: var(--ly-grid-gap);
|
|
160
|
+
overflow-x: auto;
|
|
161
|
+
overscroll-behavior-inline: contain;
|
|
162
|
+
scroll-snap-type: x proximity;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
:where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
|
|
166
|
+
min-width: 0;
|
|
167
|
+
scroll-snap-align: start;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
170
|
@container (min-width: 48rem) {
|
|
171
|
-
:where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
|
|
172
|
-
grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
171
|
+
:where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
|
|
172
|
+
grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -37,7 +37,7 @@ The smoke suite verifies:
|
|
|
37
37
|
- bounded scrolling
|
|
38
38
|
- accessible mobile controls
|
|
39
39
|
- layout-only, Layout plus UI, and all-three ecosystem modes
|
|
40
|
-
- pinned `ui-style-kit-css@2.0
|
|
40
|
+
- pinned `ui-style-kit-css@2.1.0` visual, token bridge, and manifest behavior plus released `interactive-surface-css@1.5.0`
|
|
41
41
|
|
|
42
42
|
The demo query parser uses explicit allowlists and writes generated imports and markup with `textContent`.
|
|
43
43
|
|
package/docs/wiki/Home.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Layout Style CSS Wiki
|
|
2
2
|
|
|
3
|
-
Version 2.
|
|
3
|
+
Version 2.1.0 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.
|
|
4
4
|
|
|
5
5
|
## Start Here
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ Version 2.0.0 is a container-first, dependency-free layout library. It ships sem
|
|
|
22
22
|
|
|
23
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.
|
|
24
24
|
|
|
25
|
-
The package has no runtime or peer dependencies. `ui-style-kit-css@2.0
|
|
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
26
|
|
|
27
27
|
## Supported Baseline
|
|
28
28
|
|
|
@@ -30,4 +30,4 @@ The package has no runtime or peer dependencies. `ui-style-kit-css@2.0.1` and `i
|
|
|
30
30
|
- Current evergreen Chromium, Firefox, and WebKit
|
|
31
31
|
- Mobile-first DOM order with core thresholds at `48rem` and `64rem`, plus tested personality-specific overrides
|
|
32
32
|
|
|
33
|
-
The UI
|
|
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.
|
|
@@ -5,7 +5,7 @@ Layout Style CSS 2.0 is dependency-free and has no peer dependency contract. Nod
|
|
|
5
5
|
## npm
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install layout-style-css@2.
|
|
8
|
+
npm install layout-style-css@2.1.0
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Focused Exports
|
|
@@ -37,32 +37,31 @@ import "layout-style-css";
|
|
|
37
37
|
Layout plus UI Style Kit:
|
|
38
38
|
|
|
39
39
|
```js
|
|
40
|
-
import "ui-style-kit-css/
|
|
41
|
-
import "layout-style-css/integrations/ui-style-kit.css";
|
|
40
|
+
import "ui-style-kit-css/visual.css";
|
|
42
41
|
import "layout-style-css";
|
|
43
42
|
```
|
|
44
43
|
|
|
45
44
|
All three libraries, in required order:
|
|
46
45
|
|
|
47
46
|
```js
|
|
48
|
-
import "ui-style-kit-css/
|
|
47
|
+
import "ui-style-kit-css/visual.css";
|
|
48
|
+
import "ui-style-kit-css/interactive-surface-theme.css";
|
|
49
49
|
import "interactive-surface-css/state-core.css";
|
|
50
|
-
import "layout-style-css/integrations/ui-style-kit.css";
|
|
51
50
|
import "layout-style-css";
|
|
52
51
|
```
|
|
53
52
|
|
|
54
|
-
`ui-style-kit-css@2.0
|
|
53
|
+
The first import block is deprecated compatibility for legacy UI-prefixed structural aliases. Canonical 2.1 imports use the released `ui-style-kit-css@2.1.0` visual CSS, `ui-style-kit-css/interactive-surface-theme.css`, released `interactive-surface-css@1.5.0` state core, and Layout core.
|
|
55
54
|
|
|
56
55
|
## CDN
|
|
57
56
|
|
|
58
57
|
Layout only:
|
|
59
58
|
|
|
60
59
|
```html
|
|
61
|
-
<link rel="stylesheet" href="https://unpkg.com/layout-style-css@2.
|
|
62
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layout-style-css@2.
|
|
60
|
+
<link rel="stylesheet" href="https://unpkg.com/layout-style-css@2.1.0/dist/layout-style-css.min.css">
|
|
61
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layout-style-css@2.1.0/dist/layout-style-css.min.css">
|
|
63
62
|
```
|
|
64
63
|
|
|
65
|
-
For optional companions, preserve the same order as the package imports: UI Style Kit
|
|
64
|
+
For optional companions, preserve the same order as the package imports: UI Style Kit visual CSS, UI Style Kit `interactive-surface-theme.css`, Interactive Surface 1.5.0 `state-core.css`, then Layout core. Load `layout-style-css/integrations/ui-style-kit.css` only for deprecated structural aliases.
|
|
66
65
|
|
|
67
66
|
## Browser Baseline
|
|
68
67
|
|
|
@@ -6,18 +6,18 @@ Version 2.0 rebuilds Layout Style CSS as a container-first, dependency-free stru
|
|
|
6
6
|
|
|
7
7
|
- Development and release scripts require Node.js 20 or newer.
|
|
8
8
|
- The package has no runtime dependencies and no peer dependencies.
|
|
9
|
-
- `ui-style-kit-css@2.0
|
|
9
|
+
- `ui-style-kit-css@2.1.0` and `interactive-surface-css@1.5.0` are released registry fixtures; neither is a consumer dependency.
|
|
10
10
|
- Current evergreen Chromium, Firefox, and WebKit are supported.
|
|
11
11
|
- Responsive recipes use core thresholds at `48rem` and `64rem`; personalities may add personality-specific thresholds.
|
|
12
12
|
|
|
13
13
|
Install companions explicitly only when the application uses them:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm install layout-style-css@2.
|
|
17
|
-
npm install ui-style-kit-css@2.0
|
|
16
|
+
npm install layout-style-css@2.1.0
|
|
17
|
+
npm install ui-style-kit-css@2.1.0 interactive-surface-css@1.5.0
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Layout Style CSS 2.1 keeps the v2 layout contract and updates the optional companion fixture path to UI Style Kit visual CSS, its Interactive Surface token bridge, and Interactive Surface 1.5 state core.
|
|
21
21
|
|
|
22
22
|
## Export Changes
|
|
23
23
|
|
|
@@ -60,7 +60,7 @@ import "layout-style-css";
|
|
|
60
60
|
Layout plus UI Style Kit:
|
|
61
61
|
|
|
62
62
|
```js
|
|
63
|
-
import "ui-style-kit-css/
|
|
63
|
+
import "ui-style-kit-css/visual.css";
|
|
64
64
|
import "layout-style-css/integrations/ui-style-kit.css";
|
|
65
65
|
import "layout-style-css";
|
|
66
66
|
```
|
|
@@ -68,9 +68,9 @@ import "layout-style-css";
|
|
|
68
68
|
All three libraries must be imported in this exact order:
|
|
69
69
|
|
|
70
70
|
```js
|
|
71
|
-
import "ui-style-kit-css/
|
|
71
|
+
import "ui-style-kit-css/visual.css";
|
|
72
|
+
import "ui-style-kit-css/interactive-surface-theme.css";
|
|
72
73
|
import "interactive-surface-css/state-core.css";
|
|
73
|
-
import "layout-style-css/integrations/ui-style-kit.css";
|
|
74
74
|
import "layout-style-css";
|
|
75
75
|
```
|
|
76
76
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Release And Publishing
|
|
2
2
|
|
|
3
|
-
This checklist prepares `layout-style-css@2.
|
|
3
|
+
This checklist prepares `layout-style-css@2.1.0`. Publishing, tagging, pushing, and creating a GitHub release require separate explicit approval.
|
|
4
4
|
|
|
5
5
|
## Version Contract
|
|
6
6
|
|
|
7
|
-
- `package.json` and `package-lock.json` identify `2.
|
|
7
|
+
- `package.json` and `package-lock.json` identify `2.1.0`.
|
|
8
8
|
- Node.js 20 and 22 pass standalone CI.
|
|
9
|
-
- `CHANGELOG.md` contains the dated
|
|
9
|
+
- `CHANGELOG.md` contains the dated 2.1.0 release entry.
|
|
10
10
|
- README, migration guide, wiki, demo, exports, and tarball describe the same v2 API.
|
|
11
11
|
- No peer or runtime dependencies are present.
|
|
12
12
|
|
|
@@ -35,24 +35,26 @@ git diff --check
|
|
|
35
35
|
|
|
36
36
|
`release:verify` runs build, lint, JavaScript syntax, static contracts, the Pages artifact, Chromium, Firefox, WebKit, the intentional tarball listing, `npm audit --audit-level=moderate`, and an npm publish dry run. It does not publish.
|
|
37
37
|
|
|
38
|
+
`prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the full release verification gate.
|
|
39
|
+
|
|
38
40
|
## Tag And Version Validation
|
|
39
41
|
|
|
40
|
-
The publish workflow checks out the selected tag and fails unless it equals `v${package.version}`. For this release the only valid tag is `v2.
|
|
42
|
+
The publish workflow checks out the selected tag and fails unless it equals `v${package.version}`. For this release the only valid tag is `v2.1.0`.
|
|
41
43
|
|
|
42
44
|
After separate approval, an operator may check registry availability:
|
|
43
45
|
|
|
44
46
|
```bash
|
|
45
|
-
npm view layout-style-css@2.
|
|
47
|
+
npm view layout-style-css@2.1.0 version --json
|
|
46
48
|
```
|
|
47
49
|
|
|
48
50
|
The eventual release sequence is:
|
|
49
51
|
|
|
50
52
|
```bash
|
|
51
|
-
git tag v2.
|
|
52
|
-
git push origin v2.
|
|
53
|
+
git tag v2.1.0
|
|
54
|
+
git push origin v2.1.0
|
|
53
55
|
```
|
|
54
56
|
|
|
55
|
-
Publishing the `v2.
|
|
57
|
+
Publishing the `v2.1.0` GitHub release triggers the npm workflow. A separately approved recovery run may use `release_tag` set to `v2.1.0`.
|
|
56
58
|
|
|
57
59
|
## Workflow Safety
|
|
58
60
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UI Style Kit Compatibility
|
|
2
2
|
|
|
3
|
-
Layout Style CSS is dependency-free. `ui-style-kit-css@2.0
|
|
3
|
+
Layout Style CSS is dependency-free. `ui-style-kit-css@2.1.0` is the released visual fixture for 2.1 ecosystem verification and is not a runtime or peer dependency.
|
|
4
4
|
|
|
5
5
|
## Ownership Boundary
|
|
6
6
|
|
|
@@ -15,21 +15,20 @@ Layout Style CSS is dependency-free. `ui-style-kit-css@2.0.1` is an exact develo
|
|
|
15
15
|
Layout plus UI:
|
|
16
16
|
|
|
17
17
|
```js
|
|
18
|
-
import "ui-style-kit-css/
|
|
19
|
-
import "layout-style-css/integrations/ui-style-kit.css";
|
|
18
|
+
import "ui-style-kit-css/visual.css";
|
|
20
19
|
import "layout-style-css";
|
|
21
20
|
```
|
|
22
21
|
|
|
23
22
|
All three libraries:
|
|
24
23
|
|
|
25
24
|
```js
|
|
26
|
-
import "ui-style-kit-css/
|
|
25
|
+
import "ui-style-kit-css/visual.css";
|
|
26
|
+
import "ui-style-kit-css/interactive-surface-theme.css";
|
|
27
27
|
import "interactive-surface-css/state-core.css";
|
|
28
|
-
import "layout-style-css/integrations/ui-style-kit.css";
|
|
29
28
|
import "layout-style-css";
|
|
30
29
|
```
|
|
31
30
|
|
|
32
|
-
The Layout integration bridge contains structural mappings but no package imports. The removed `all-with-ui-kit*` aggregates have no v2 replacement because dependency ownership stays with the application.
|
|
31
|
+
The Layout integration bridge contains structural mappings but no package imports. It remains available as deprecated compatibility for legacy UI-prefixed structural aliases. The removed `all-with-ui-kit*` aggregates have no v2 replacement because dependency ownership stays with the application.
|
|
33
32
|
|
|
34
33
|
## Structural Aliases
|
|
35
34
|
|
|
@@ -43,8 +42,8 @@ The removed v1 `.ly-surface--raised` selector is not restored by `legacy.css`; i
|
|
|
43
42
|
|
|
44
43
|
| Library | Verified fixture | Consumer requirement |
|
|
45
44
|
| --- | --- | --- |
|
|
46
|
-
| Layout Style CSS | `2.
|
|
47
|
-
| UI Style Kit CSS | `2.0
|
|
48
|
-
| Interactive Surface CSS | `1.
|
|
45
|
+
| Layout Style CSS | `2.1.0` | Required for this API |
|
|
46
|
+
| UI Style Kit CSS | `2.1.0` visual CSS and manifest | Optional released fixture |
|
|
47
|
+
| Interactive Surface CSS | `1.5.0` `state-core.css` | Optional released fixture |
|
|
49
48
|
|
|
50
49
|
Current evergreen Chromium, Firefox, and WebKit are covered by the release gate.
|