@stacksjs/defaults 0.75.33 → 0.75.34

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.
@@ -2,7 +2,7 @@
2
2
  "publisher": "Stacks",
3
3
  "name": "vscode-stacks",
4
4
  "displayName": "Stacks",
5
- "version": "0.75.33",
5
+ "version": "0.75.34",
6
6
  "description": "A modern Stacks development environment.",
7
7
  "license": "MIT",
8
8
  "funding": "https://github.com/sponsors/chrisbbreuer",
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/defaults",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.75.33",
5
+ "version": "0.75.34",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/stacksjs/stacks.git",
@@ -55,7 +55,7 @@
55
55
  "dependencies": {
56
56
  "@iconify-json/f7": "^1.2.2",
57
57
  "@iconify-json/hugeicons": "^1.2.27",
58
- "@stacksjs/mobile": "^0.75.33",
58
+ "@stacksjs/mobile": "^0.75.34",
59
59
  "@stacksjs/sanitizer": "^0.2.113",
60
60
  "ts-qr-codes": "^0.1.8"
61
61
  }
@@ -79,18 +79,30 @@ function tapBack(event: MouseEvent): void {
79
79
  align-items: center;
80
80
  min-height: 2.75rem;
81
81
  padding: 0 0.75rem;
82
- border-bottom: 1px solid transparent;
83
- transition: background-color 180ms ease, border-color 180ms ease;
84
82
  }
85
83
 
86
- .native-nav-bar.is-scrolled {
87
- border-color: var(--native-bar-border, rgb(148 163 184 / 0.25));
84
+ /* The frosted material is always there and only fades. Adding or removing
85
+ backdrop-filter rebuilds the page's layers, which took 50-140ms of the
86
+ main thread at the moment the page crossed the threshold, mid-scroll. An
87
+ opacity change is the compositor's alone, as long as it never reaches 0:
88
+ WebKit drops a transparent layer and builds it again on the way back. */
89
+ .native-nav-bar::before {
90
+ content: '';
91
+ position: absolute;
92
+ inset: 0;
93
+ z-index: -1;
94
+ border-bottom: 1px solid var(--native-bar-border, rgb(148 163 184 / 0.25));
88
95
  background: var(--native-bar-background, rgb(248 250 252 / 0.86));
89
96
  backdrop-filter: blur(20px) saturate(180%);
90
97
  -webkit-backdrop-filter: blur(20px) saturate(180%);
98
+ opacity: 0.001;
99
+ pointer-events: none;
100
+ transition: opacity 180ms ease;
91
101
  }
92
102
 
93
- .dark .native-nav-bar.is-scrolled {
103
+ .native-nav-bar.is-scrolled::before { opacity: 1; }
104
+
105
+ .dark .native-nav-bar::before {
94
106
  border-color: var(--native-bar-border-dark, rgb(51 65 85 / 0.6));
95
107
  background: var(--native-bar-background-dark, rgb(2 6 23 / 0.86));
96
108
  }
@@ -141,11 +153,11 @@ function tapBack(event: MouseEvent): void {
141
153
  }
142
154
 
143
155
  @media (prefers-reduced-motion: reduce) {
144
- .native-nav-bar, .native-nav-title { transition: none; }
156
+ .native-nav-bar::before, .native-nav-title { transition: none; }
145
157
  }
146
158
 
147
159
  @media (prefers-reduced-transparency: reduce) {
148
- .native-nav-bar.is-scrolled { backdrop-filter: none; -webkit-backdrop-filter: none; background: var(--native-bar-solid, rgb(248 250 252)); }
149
- .dark .native-nav-bar.is-scrolled { background: var(--native-bar-solid-dark, rgb(2 6 23)); }
160
+ .native-nav-bar::before { backdrop-filter: none; -webkit-backdrop-filter: none; background: var(--native-bar-solid, rgb(248 250 252)); }
161
+ .dark .native-nav-bar::before { background: var(--native-bar-solid-dark, rgb(2 6 23)); }
150
162
  }
151
163
  </style>
@@ -77,6 +77,8 @@ const indicatorStyle = derived(() => {
77
77
  opacity: 0;
78
78
  pointer-events: none;
79
79
  transform: translateX(-50%) scale(0.6);
80
+ /* Restyled every frame of a pull: its own layer keeps that off the page's paint. */
81
+ will-change: transform, opacity;
80
82
  }
81
83
 
82
84
  .dark .native-ptr-indicator { color: var(--native-accent-dark, rgb(96 165 250)); background: var(--native-ptr-background-dark, rgb(30 41 59)); }
@@ -19,7 +19,9 @@ const hasBadge = badge !== '' && badge !== 0 && badge !== '0'
19
19
 
20
20
  <!-- `draggable="false"`: a slow tap on a busy page reaches the WebView as a
21
21
  long press, and a draggable link starts a native drag instead of
22
- navigating. -->
22
+ navigating. `data-stx-prefetch="eager"`: every tab's page is fetched once
23
+ the current one is idle, so switching tabs is served from the router's
24
+ cache, as instant as a native tab bar. -->
23
25
  <StxLink
24
26
  to="{{ href }}"
25
27
  aria-label="{{ label }}"
@@ -27,6 +29,7 @@ const hasBadge = badge !== '' && badge !== 0 && badge !== '0'
27
29
  activeMatch="{{ match }}"
28
30
  class="native-tab-item"
29
31
  draggable="false"
32
+ data-stx-prefetch="eager"
30
33
  >
31
34
  <span class="native-tab-glyph">
32
35
  <i aria-hidden="true" class="{{ icon }} native-tab-icon"></i>