@keenmate/pure-css 1.0.0-rc06 → 1.0.0-rc08
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 +491 -341
- package/README.md +184 -148
- package/dist/css/base.css +142 -66
- package/dist/css/component-reset.css +27 -0
- package/dist/css/pure-css.css +172 -84
- package/dist/css/reboot.css +1 -1
- package/dist/css/scrollbars.css +4 -4
- package/package.json +83 -81
- package/src/js/fit.js +5 -2
- package/src/scss/_base-css-variables.scss +429 -630
- package/src/scss/_layout-container.scss +168 -168
- package/src/scss/_navbar-elements.scss +10 -1
- package/src/scss/_sidebar-states.scss +2 -2
- package/src/scss/_sidebar.scss +443 -420
- package/src/scss/component-reset.scss +65 -0
- package/src/scss/reboot.scss +134 -134
- package/src/scss/scrollbars.scss +48 -48
- package/src/scss/variables/_base.scss +368 -232
- package/src/scss/variables/_colors.scss +208 -231
- package/src/scss/variables/_index.scss +27 -23
- package/src/scss/variables/_system.scss +19 -23
- package/src/scss/variables/_components.scss +0 -840
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
@use 'variables/index' as *;
|
|
2
|
-
/* ========================================
|
|
3
|
-
Layout Container
|
|
4
|
-
Main layout wrapper, content areas, sticky/scroll modes
|
|
5
|
-
======================================== */
|
|
6
|
-
|
|
7
|
-
// Layout wrapper - applied to body for mode-specific classes
|
|
8
|
-
body.pc-layout--sticky {
|
|
9
|
-
height: 100vh;
|
|
10
|
-
overflow: hidden;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// Layout Container - centered, starts below navbar
|
|
14
|
-
.pc-layout {
|
|
15
|
-
max-width: 100%;
|
|
16
|
-
margin: $navbar-height auto 0;
|
|
17
|
-
background-color: var(--pc-
|
|
18
|
-
overflow: visible; // Allow tooltips to escape
|
|
19
|
-
display: flex;
|
|
20
|
-
flex-direction: column;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Constrained widths - controlled by body class
|
|
24
|
-
body.pc-container-sm .pc-layout {
|
|
25
|
-
max-width: $layout-container-sm;
|
|
26
|
-
box-shadow: $shadow-2xl;
|
|
27
|
-
border-left: $border-width-base solid var(--pc-border-color);
|
|
28
|
-
border-right: $border-width-base solid var(--pc-border-color);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
body.pc-container-md .pc-layout {
|
|
32
|
-
max-width: $layout-container-md;
|
|
33
|
-
box-shadow: $shadow-2xl;
|
|
34
|
-
border-left: $border-width-base solid var(--pc-border-color);
|
|
35
|
-
border-right: $border-width-base solid var(--pc-border-color);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
body.pc-container-lg .pc-layout {
|
|
39
|
-
max-width: $layout-container-lg;
|
|
40
|
-
box-shadow: $shadow-2xl;
|
|
41
|
-
border-left: $border-width-base solid var(--pc-border-color);
|
|
42
|
-
border-right: $border-width-base solid var(--pc-border-color);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
body.pc-container-xl .pc-layout {
|
|
46
|
-
max-width: $layout-container-xl;
|
|
47
|
-
box-shadow: $shadow-xl;
|
|
48
|
-
border-left: $border-width-base solid var(--pc-border-color);
|
|
49
|
-
border-right: $border-width-base solid var(--pc-border-color);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
body.pc-container-2xl .pc-layout {
|
|
53
|
-
max-width: $layout-container-2xl;
|
|
54
|
-
box-shadow: $shadow-xl;
|
|
55
|
-
border-left: $border-width-base solid var(--pc-border-color);
|
|
56
|
-
border-right: $border-width-base solid var(--pc-border-color);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Sticky mode - fixed height
|
|
60
|
-
body.pc-layout--sticky .pc-layout {
|
|
61
|
-
height: calc(100vh - #{$navbar-height}); // Full viewport minus top margin
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Scroll mode - minimum height
|
|
65
|
-
body:not(.pc-layout--sticky) .pc-layout {
|
|
66
|
-
min-height: calc(100vh - #{$navbar-height}); // Ensure footer reaches bottom
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Layout inner container - flex wrapper for sidebar + content
|
|
70
|
-
.pc-layout__inner {
|
|
71
|
-
display: flex;
|
|
72
|
-
width: 100%;
|
|
73
|
-
flex: 1; // Take available space, pushing footer to bottom
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Sticky mode - inner container takes full height minus footer
|
|
77
|
-
body.pc-layout--sticky .pc-layout__inner {
|
|
78
|
-
flex: 1;
|
|
79
|
-
overflow: hidden; // Prevent overflow, let content wrapper scroll
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Content wrapper - wraps main content only
|
|
83
|
-
.pc-layout__content {
|
|
84
|
-
flex: 1;
|
|
85
|
-
display: flex;
|
|
86
|
-
flex-direction: column;
|
|
87
|
-
overflow-y: auto; // Always scrollable
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Main content area
|
|
91
|
-
.pc-layout__main {
|
|
92
|
-
flex: 1;
|
|
93
|
-
padding: $spacing-base;
|
|
94
|
-
container-type: inline-size;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Footer - outside inner, sibling to inner
|
|
98
|
-
.pc-layout__footer {
|
|
99
|
-
min-height: $footer-height;
|
|
100
|
-
background-color: var(--pc-footer-bg, var(--base-main-bg));
|
|
101
|
-
border-top: $border-width-base solid var(--pc-footer-border-color, var(--base-border-color));
|
|
102
|
-
display: flex;
|
|
103
|
-
align-items: center;
|
|
104
|
-
padding: $spacing-xs $spacing-base;
|
|
105
|
-
flex-shrink: 0; // Don't shrink footer
|
|
106
|
-
gap: $spacing-base;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Footer sections - Start/Center/End layout (mirrors navbar structure)
|
|
110
|
-
.pc-footer__start {
|
|
111
|
-
display: flex;
|
|
112
|
-
align-items: center;
|
|
113
|
-
gap: $spacing-base;
|
|
114
|
-
flex-shrink: 0;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.pc-footer__center {
|
|
118
|
-
flex: 1;
|
|
119
|
-
min-width: 0; // Allow shrinking for ellipsis
|
|
120
|
-
display: flex;
|
|
121
|
-
align-items: center;
|
|
122
|
-
justify-content: center;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.pc-footer__end {
|
|
126
|
-
display: flex;
|
|
127
|
-
align-items: center;
|
|
128
|
-
gap: $spacing-base;
|
|
129
|
-
flex-shrink: 0;
|
|
130
|
-
|
|
131
|
-
&--vertical {
|
|
132
|
-
flex-direction: column;
|
|
133
|
-
align-items: flex-end;
|
|
134
|
-
gap: $spacing-xs;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Responsive footer - stack sections on mobile
|
|
139
|
-
@media (max-width: $mobile-breakpoint) {
|
|
140
|
-
.pc-layout__footer {
|
|
141
|
-
flex-wrap: wrap;
|
|
142
|
-
min-height: auto;
|
|
143
|
-
padding: $spacing-sm $spacing-base;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
.pc-footer__start,
|
|
147
|
-
.pc-footer__center,
|
|
148
|
-
.pc-footer__end {
|
|
149
|
-
flex-shrink: 1;
|
|
150
|
-
min-width: 0;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
.pc-footer__start {
|
|
154
|
-
flex: 1 1 auto;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.pc-footer__center {
|
|
158
|
-
display: none; // Hide empty center on mobile
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.pc-footer__end {
|
|
162
|
-
flex: 0 1 auto;
|
|
163
|
-
|
|
164
|
-
&--vertical {
|
|
165
|
-
align-items: flex-end;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
1
|
+
@use 'variables/index' as *;
|
|
2
|
+
/* ========================================
|
|
3
|
+
Layout Container
|
|
4
|
+
Main layout wrapper, content areas, sticky/scroll modes
|
|
5
|
+
======================================== */
|
|
6
|
+
|
|
7
|
+
// Layout wrapper - applied to body for mode-specific classes
|
|
8
|
+
body.pc-layout--sticky {
|
|
9
|
+
height: 100vh;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Layout Container - centered, starts below navbar
|
|
14
|
+
.pc-layout {
|
|
15
|
+
max-width: 100%;
|
|
16
|
+
margin: $navbar-height auto 0;
|
|
17
|
+
background-color: var(--pc-page-bg);
|
|
18
|
+
overflow: visible; // Allow tooltips to escape
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Constrained widths - controlled by body class
|
|
24
|
+
body.pc-container-sm .pc-layout {
|
|
25
|
+
max-width: $layout-container-sm;
|
|
26
|
+
box-shadow: $shadow-2xl;
|
|
27
|
+
border-left: $border-width-base solid var(--pc-border-color);
|
|
28
|
+
border-right: $border-width-base solid var(--pc-border-color);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
body.pc-container-md .pc-layout {
|
|
32
|
+
max-width: $layout-container-md;
|
|
33
|
+
box-shadow: $shadow-2xl;
|
|
34
|
+
border-left: $border-width-base solid var(--pc-border-color);
|
|
35
|
+
border-right: $border-width-base solid var(--pc-border-color);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
body.pc-container-lg .pc-layout {
|
|
39
|
+
max-width: $layout-container-lg;
|
|
40
|
+
box-shadow: $shadow-2xl;
|
|
41
|
+
border-left: $border-width-base solid var(--pc-border-color);
|
|
42
|
+
border-right: $border-width-base solid var(--pc-border-color);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
body.pc-container-xl .pc-layout {
|
|
46
|
+
max-width: $layout-container-xl;
|
|
47
|
+
box-shadow: $shadow-xl;
|
|
48
|
+
border-left: $border-width-base solid var(--pc-border-color);
|
|
49
|
+
border-right: $border-width-base solid var(--pc-border-color);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
body.pc-container-2xl .pc-layout {
|
|
53
|
+
max-width: $layout-container-2xl;
|
|
54
|
+
box-shadow: $shadow-xl;
|
|
55
|
+
border-left: $border-width-base solid var(--pc-border-color);
|
|
56
|
+
border-right: $border-width-base solid var(--pc-border-color);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Sticky mode - fixed height
|
|
60
|
+
body.pc-layout--sticky .pc-layout {
|
|
61
|
+
height: calc(100vh - #{$navbar-height}); // Full viewport minus top margin
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Scroll mode - minimum height
|
|
65
|
+
body:not(.pc-layout--sticky) .pc-layout {
|
|
66
|
+
min-height: calc(100vh - #{$navbar-height}); // Ensure footer reaches bottom
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Layout inner container - flex wrapper for sidebar + content
|
|
70
|
+
.pc-layout__inner {
|
|
71
|
+
display: flex;
|
|
72
|
+
width: 100%;
|
|
73
|
+
flex: 1; // Take available space, pushing footer to bottom
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Sticky mode - inner container takes full height minus footer
|
|
77
|
+
body.pc-layout--sticky .pc-layout__inner {
|
|
78
|
+
flex: 1;
|
|
79
|
+
overflow: hidden; // Prevent overflow, let content wrapper scroll
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Content wrapper - wraps main content only
|
|
83
|
+
.pc-layout__content {
|
|
84
|
+
flex: 1;
|
|
85
|
+
display: flex;
|
|
86
|
+
flex-direction: column;
|
|
87
|
+
overflow-y: auto; // Always scrollable
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Main content area
|
|
91
|
+
.pc-layout__main {
|
|
92
|
+
flex: 1;
|
|
93
|
+
padding: $spacing-base;
|
|
94
|
+
container-type: inline-size;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Footer - outside inner, sibling to inner
|
|
98
|
+
.pc-layout__footer {
|
|
99
|
+
min-height: $footer-height;
|
|
100
|
+
background-color: var(--pc-footer-bg, var(--base-main-bg));
|
|
101
|
+
border-top: $border-width-base solid var(--pc-footer-border-color, var(--base-border-color));
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
padding: $spacing-xs $spacing-base;
|
|
105
|
+
flex-shrink: 0; // Don't shrink footer
|
|
106
|
+
gap: $spacing-base;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Footer sections - Start/Center/End layout (mirrors navbar structure)
|
|
110
|
+
.pc-footer__start {
|
|
111
|
+
display: flex;
|
|
112
|
+
align-items: center;
|
|
113
|
+
gap: $spacing-base;
|
|
114
|
+
flex-shrink: 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.pc-footer__center {
|
|
118
|
+
flex: 1;
|
|
119
|
+
min-width: 0; // Allow shrinking for ellipsis
|
|
120
|
+
display: flex;
|
|
121
|
+
align-items: center;
|
|
122
|
+
justify-content: center;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.pc-footer__end {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: $spacing-base;
|
|
129
|
+
flex-shrink: 0;
|
|
130
|
+
|
|
131
|
+
&--vertical {
|
|
132
|
+
flex-direction: column;
|
|
133
|
+
align-items: flex-end;
|
|
134
|
+
gap: $spacing-xs;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Responsive footer - stack sections on mobile
|
|
139
|
+
@media (max-width: $mobile-breakpoint) {
|
|
140
|
+
.pc-layout__footer {
|
|
141
|
+
flex-wrap: wrap;
|
|
142
|
+
min-height: auto;
|
|
143
|
+
padding: $spacing-sm $spacing-base;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.pc-footer__start,
|
|
147
|
+
.pc-footer__center,
|
|
148
|
+
.pc-footer__end {
|
|
149
|
+
flex-shrink: 1;
|
|
150
|
+
min-width: 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.pc-footer__start {
|
|
154
|
+
flex: 1 1 auto;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.pc-footer__center {
|
|
158
|
+
display: none; // Hide empty center on mobile
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.pc-footer__end {
|
|
162
|
+
flex: 0 1 auto;
|
|
163
|
+
|
|
164
|
+
&--vertical {
|
|
165
|
+
align-items: flex-end;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -256,10 +256,19 @@
|
|
|
256
256
|
position: relative;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
+
// SVG mask chevron (was a "›" text glyph). Shares --base-icon-chevron with the
|
|
260
|
+
// sidebar + components; --pc-icon-chevron overrides, #{$base-icon-chevron} is
|
|
261
|
+
// the standalone fallback. `font-size: 0` hides any legacy "›" in old markup.
|
|
259
262
|
&__more-chevron {
|
|
260
263
|
display: inline-block;
|
|
261
264
|
margin-inline-start: $spacing-xs;
|
|
262
|
-
|
|
265
|
+
inline-size: 1.4rem;
|
|
266
|
+
block-size: 1.4rem;
|
|
267
|
+
flex-shrink: 0;
|
|
268
|
+
font-size: 0;
|
|
269
|
+
background-color: currentColor;
|
|
270
|
+
-webkit-mask: var(--pc-icon-chevron, var(--base-icon-chevron, #{$base-icon-chevron})) center / 1.1rem no-repeat;
|
|
271
|
+
mask: var(--pc-icon-chevron, var(--base-icon-chevron, #{$base-icon-chevron})) center / 1.1rem no-repeat;
|
|
263
272
|
transition: transform $transition-fast $easing-snappy;
|
|
264
273
|
}
|
|
265
274
|
|
|
@@ -120,11 +120,11 @@
|
|
|
120
120
|
width: 100%;
|
|
121
121
|
|
|
122
122
|
&:hover {
|
|
123
|
-
background-color: var(--pc-sidebar-submenu-hover-bg, var(--base-
|
|
123
|
+
background-color: var(--pc-sidebar-submenu-hover-bg, var(--base-hover-bg));
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
&--active {
|
|
127
|
-
background-color: var(--pc-sidebar-submenu-active-bg, var(--base-
|
|
127
|
+
background-color: var(--pc-sidebar-submenu-active-bg, var(--base-active-bg));
|
|
128
128
|
color: var(--pc-sidebar-submenu-active-text, var(--base-text-color-1));
|
|
129
129
|
}
|
|
130
130
|
}
|