@cplieger/web-terminal-ui 6.1.0 → 6.1.2
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/css/30-tabs.css +17 -3
- package/css/page.css +25 -6
- package/package.json +1 -1
package/css/30-tabs.css
CHANGED
|
@@ -690,15 +690,29 @@
|
|
|
690
690
|
in css/31-switcher.css. On the narrow-coarse phone the strip is hidden and
|
|
691
691
|
the mobile switcher's inset is applied through viewport.ts
|
|
692
692
|
(--wt-reserve-bottom) instead. Two rules because the class half cannot mix
|
|
693
|
-
into a media condition; they set the same declaration.
|
|
693
|
+
into a media condition; they set the same declaration.
|
|
694
|
+
|
|
695
|
+
The clearance is the strip's height PLUS --safe-bottom, because that is where
|
|
696
|
+
the strip is: .wt-tab-bar sits at `bottom: var(--safe-bottom)`, so the band it
|
|
697
|
+
occupies runs from --safe-bottom to --safe-bottom + --wt-tabbar-h. Clearing
|
|
698
|
+
the height alone left the surface reaching exactly env(safe-area-inset-bottom)
|
|
699
|
+
past the strip's top edge — 0 on a desktop, 20px in iPad Safari (viewport-fit
|
|
700
|
+
is cover, so the insets are live), where the terminal grew one extra row that
|
|
701
|
+
rendered behind the strip. --wt-tabbar-h is the bar's OWN height and must stay
|
|
702
|
+
that: the wide-touchscreen key grid (31-switcher.css) already adds the inset to
|
|
703
|
+
it itself, and folding the inset into the variable would double-count there.
|
|
704
|
+
The mobile switcher reaches the same total from the other direction, measuring
|
|
705
|
+
`innerHeight - rect.top` so the inset rides along inside --wt-reserve-bottom.
|
|
706
|
+
--kb-inset is deliberately absent: viewport.ts owns the keyboard case by
|
|
707
|
+
writing an inline bottom on the surface, which outranks this rule entirely. */
|
|
694
708
|
@media (pointer: fine) {
|
|
695
709
|
:where(.wt-root) .term.wt-with-tabbar {
|
|
696
|
-
bottom: var(--wt-tabbar-h, 44px);
|
|
710
|
+
bottom: calc(var(--wt-tabbar-h, 44px) + var(--safe-bottom, 0px));
|
|
697
711
|
}
|
|
698
712
|
}
|
|
699
713
|
|
|
700
714
|
:where(.wt-root:not(.wt-narrow)) .term.wt-with-tabbar {
|
|
701
|
-
bottom: var(--wt-tabbar-h, 44px);
|
|
715
|
+
bottom: calc(var(--wt-tabbar-h, 44px) + var(--safe-bottom, 0px));
|
|
702
716
|
}
|
|
703
717
|
|
|
704
718
|
/* ===== Activity dots (activityMonitor via tabs) =====
|
package/css/page.css
CHANGED
|
@@ -73,10 +73,15 @@ body {
|
|
|
73
73
|
--wt-loading-bg: #000;
|
|
74
74
|
--wt-loading-bar-inline-size: min(220px, 62vw);
|
|
75
75
|
--wt-loading-bar-block-size: 5px;
|
|
76
|
-
/* Symmetric
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
/* Symmetric, deliberately NOT one of the component easing tokens: those are all
|
|
77
|
+
asymmetric (they settle at one end), which reads as a stutter on a looping
|
|
78
|
+
indeterminate sweep. It is also deliberately NOT an ease-in-out-cubic
|
|
79
|
+
(`cubic-bezier(0.65, 0, 0.35, 1)`, what this was): a curve with zero velocity
|
|
80
|
+
at both ends spends its two slow phases exactly where the sweep is clipped
|
|
81
|
+
off-screen, which measured as 315 ms of blank track at each end of every
|
|
82
|
+
1.5 s lap. Non-zero end velocity keeps the symmetry and cuts that to 90 ms,
|
|
83
|
+
below the point where the loop reads as a stall. */
|
|
84
|
+
--wt-loading-sweep-easing: cubic-bezier(0.3, 0.25, 0.7, 0.75);
|
|
80
85
|
--wt-loading-sweep-duration: 1.5s;
|
|
81
86
|
|
|
82
87
|
position: fixed;
|
|
@@ -129,6 +134,15 @@ body {
|
|
|
129
134
|
content: "";
|
|
130
135
|
position: absolute;
|
|
131
136
|
inset-block: 0;
|
|
137
|
+
/* Load-bearing, and the whole reason the sweep used to enter mid-track: with
|
|
138
|
+
both inline offsets `auto` an absolutely positioned box falls back to its
|
|
139
|
+
STATIC position, and .wt-loading sets `text-align: center`, which centres
|
|
140
|
+
that static position inside the 220px track. The keyframes below are written
|
|
141
|
+
against the track's left edge, so every offset was silently shifted right by
|
|
142
|
+
(220 - 92.4) / 2 = 64px: the sweep was already visible at t=0 near the left
|
|
143
|
+
of centre, and it left the track at ~73% of the cycle. Pinning the origin is
|
|
144
|
+
what makes translateX(-100%) mean "one full sweep-width off the left edge". */
|
|
145
|
+
inset-inline-start: 0;
|
|
132
146
|
inline-size: 42%;
|
|
133
147
|
border-radius: inherit;
|
|
134
148
|
background: linear-gradient(
|
|
@@ -167,12 +181,17 @@ body {
|
|
|
167
181
|
opacity: 0;
|
|
168
182
|
}
|
|
169
183
|
|
|
184
|
+
/* Offsets are percentages of the SWEEP (42% of the track), not of the track, so
|
|
185
|
+
-100% is exactly one sweep-width left of the origin (fully clipped, flush with
|
|
186
|
+
the left edge) and 100% / 0.42 = 238% puts its left edge flush with the right
|
|
187
|
+
edge. Flush at both ends rather than over-travelled: every pixel of travel
|
|
188
|
+
outside the track is dead time on a screen whose only job is to look alive. */
|
|
170
189
|
@keyframes wt-loading-slide {
|
|
171
190
|
0% {
|
|
172
|
-
transform: translateX(-
|
|
191
|
+
transform: translateX(-100%);
|
|
173
192
|
}
|
|
174
193
|
100% {
|
|
175
|
-
transform: translateX(
|
|
194
|
+
transform: translateX(238%);
|
|
176
195
|
}
|
|
177
196
|
}
|
|
178
197
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cplieger/web-terminal-ui",
|
|
3
|
-
"version": "6.1.
|
|
3
|
+
"version": "6.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Reference touch-first browser UI for @cplieger/web-terminal-engine: a composable kernel + feature modules (tabs, activity monitor, mobile toolbar, context menu, IME, predictive echo, viewport handling) and CSS. One createTerminal() call.",
|
|
6
6
|
"license": "MPL-2.0",
|