stack-site-builder 1.17.2 → 1.17.3

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 CHANGED
@@ -11,6 +11,17 @@ content schema, while a consuming site supplies only content, taxonomy data and
11
11
  config. Sites track the theme with `pnpm up stack-site-builder`, so each release
12
12
  here is a plain version bump they pull in.
13
13
 
14
+ ## [1.17.3] - 2026-07-22
15
+
16
+ ### Fixed
17
+
18
+ - **Slide transitions degraded after passing embed slides** — interactive
19
+ demo iframes kept their animation loops running offscreen, janking every
20
+ later transition until a refresh. The deck now keeps only the on/near-
21
+ screen slides' iframes live (an IntersectionObserver with one viewport of
22
+ side margin stashes/restores `src`), so a revisited demo reloads fresh and
23
+ transitions stay smooth.
24
+
14
25
  ## [1.17.2] - 2026-07-22
15
26
 
16
27
  ### Fixed
@@ -254,6 +265,7 @@ catalog sites from a thin content-only repository.
254
265
  - **Standalone development setup** — a devcontainer and a minimal `playground/`
255
266
  consuming site for developing and previewing the theme on its own.
256
267
 
268
+ [1.17.3]: https://github.com/CodeCompose7/stack-site-builder/compare/v1.17.2...v1.17.3
257
269
  [1.17.2]: https://github.com/CodeCompose7/stack-site-builder/compare/v1.17.1...v1.17.2
258
270
  [1.17.1]: https://github.com/CodeCompose7/stack-site-builder/compare/v1.17.0...v1.17.1
259
271
  [1.17.0]: https://github.com/CodeCompose7/stack-site-builder/compare/v1.16.0...v1.17.0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stack-site-builder",
3
3
  "type": "module",
4
- "version": "1.17.2",
4
+ "version": "1.17.3",
5
5
  "license": "MIT",
6
6
  "description": "The engine behind the awesome-*-stack catalog sites: an Astro theme with the catalog/concepts/articles/slides/samples routes, components, styles and markdown pipeline. Sites provide content, taxonomy data and config.",
7
7
  "repository": {
@@ -173,6 +173,33 @@ const priv = entry.data.private;
173
173
  const btnNext = document.querySelector<HTMLButtonElement>('[data-next]');
174
174
  if (elTot) elTot.textContent = String(total);
175
175
 
176
+ // Heavy embeds (interactive demo iframes) keep animating offscreen and
177
+ // make every later slide transition jank. Keep only the on/near-screen
178
+ // slides' iframes live: leaving a slide blanks its frames (src stashed
179
+ // on the element), returning restores them — the demo reloads fresh,
180
+ // exactly like a page refresh. One viewport of margin each side means
181
+ // the neighbor slide is already loading while you transition into it.
182
+ const framedSlides = slides.filter((s) => s.querySelector('iframe'));
183
+ if (framedSlides.length) {
184
+ const io = new IntersectionObserver(
185
+ (entries) => {
186
+ for (const e of entries) {
187
+ for (const f of Array.from(e.target.querySelectorAll<HTMLIFrameElement>('iframe'))) {
188
+ const src = f.getAttribute('src');
189
+ if (e.isIntersecting) {
190
+ if (!src && f.dataset.aasSrc) f.setAttribute('src', f.dataset.aasSrc);
191
+ } else if (src) {
192
+ f.dataset.aasSrc = src;
193
+ f.removeAttribute('src');
194
+ }
195
+ }
196
+ }
197
+ },
198
+ { root: deck, rootMargin: '0px 100% 0px 100%' },
199
+ );
200
+ framedSlides.forEach((s) => io.observe(s));
201
+ }
202
+
176
203
  let current = 0;
177
204
  // Step reveal (fragments): each slide's `.aas-step` elements are revealed
178
205
  // one at a time. `shown[i]` = how many are currently visible.