pandorga 1.3.9 → 1.3.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 339696d1fc67242234f24ddb42903e8f059f4fa3ebda4269f33d74c45f580c69
4
- data.tar.gz: 58f879b2570415d7795c8efc93ad7895e9ef6f79f03d62b15611ee3dc116b292
3
+ metadata.gz: 6e1b4a81b0f15cc63c471a6155e9461c404a7d4e2b895943d5e39c5377b1dd0d
4
+ data.tar.gz: a31bf308547ba1420c975fbb456613df770ce9a133e7a98156ef80be28ef0cee
5
5
  SHA512:
6
- metadata.gz: df45ad315870965b8ee36c76afb062c0086b877cc7d86df1e23bad9b166db8b94665af7c2879e0751c6e770d995a0baeaa405498c081ddedbaadb0ba385d32b0
7
- data.tar.gz: 9a54f54a59a0ed120b1a739ab03868d6ccb0d95c7bb2eb2103b3dbe5e42d6ac80f6a8ec1084a54c30246fc34c55c3500dbec14b58173e4172a1a720550e86887
6
+ metadata.gz: a198e7195cbe489baefc18341cfe8b6a255b07f1e02aa3b11b44079334eef29ab0a85807f9ff617aeb5d951ba2cb7f776776613e90ee359587089ce1c1193640
7
+ data.tar.gz: 2256c6c0c0fc51da5846b7f97c0937b3ac0b48dd2945fe6a42d6973717a750fa6b5f8a843a392fedd600a4360e8ce6257bb230caec0a1659339e3d7f69430036
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.3.10] — 2026-10-06
4
+
5
+ ### Fixed
6
+
7
+ - Home specimen height is measured from the tallest project and locked, so
8
+ swapping projects no longer resizes the bench or the inventory; taglines
9
+ and wrapping chips still fit without clipping
10
+
3
11
  ## [1.3.9] — 2026-10-06
4
12
 
5
13
  ### Changed
data/_layouts/home.html CHANGED
@@ -247,8 +247,9 @@ layout: shell
247
247
  return 0;
248
248
  }
249
249
 
250
- /* Specimen grows with its tagline and wrapping chips; the rack
251
- stretches to the same row via the bench grid. */
250
+ /* Lock height to the tallest project so swapping never moves the
251
+ inventory. Remeasure on resize when the specimen column width
252
+ changes (chip wrap / plate width). */
252
253
  function paintSpecimen(entry) {
253
254
  specimenSlot.innerHTML = '';
254
255
  specimenSlot.appendChild(runtime.renderProjectSpecimen(asItem(entry), {
@@ -259,6 +260,53 @@ layout: shell
259
260
  }));
260
261
  }
261
262
 
263
+ function measureTallestSpecimen() {
264
+ var bench = specimenSlot.closest('.home-projects-bench');
265
+ if (!bench) return 0;
266
+ var width = specimenSlot.getBoundingClientRect().width;
267
+ if (width < 1) return 0;
268
+
269
+ var probe = document.createElement('div');
270
+ probe.setAttribute('aria-hidden', 'true');
271
+ probe.style.cssText = [
272
+ 'position:absolute',
273
+ 'visibility:hidden',
274
+ 'pointer-events:none',
275
+ 'left:0',
276
+ 'top:0',
277
+ 'width:' + Math.round(width) + 'px',
278
+ 'height:auto',
279
+ 'overflow:visible'
280
+ ].join(';');
281
+ bench.appendChild(probe);
282
+
283
+ var max = 0;
284
+ portfolio.forEach(function (entry, i) {
285
+ probe.innerHTML = '';
286
+ var card = runtime.renderProjectSpecimen(asItem(entry), {
287
+ href: entry.url || runtime.projectUrl(entry.slug),
288
+ tagHref: systemTagHref,
289
+ folio: i + 1,
290
+ openLabel: 'Open project'
291
+ });
292
+ card.style.height = 'auto';
293
+ card.style.minHeight = '0';
294
+ probe.appendChild(card);
295
+ max = Math.max(max, Math.ceil(card.getBoundingClientRect().height));
296
+ });
297
+ probe.remove();
298
+ return max;
299
+ }
300
+
301
+ function lockSpecimenHeight() {
302
+ var bench = specimenSlot.closest('.home-projects-bench');
303
+ if (!bench) return;
304
+ var tallest = measureTallestSpecimen();
305
+ if (tallest > 0) {
306
+ bench.style.setProperty('--home-specimen-height', tallest + 'px');
307
+ }
308
+ }
309
+
262
310
  function select(slug) {
263
311
  if (selectedSlug === slug) return;
264
312
  selectedSlug = slug;
@@ -293,8 +341,22 @@ layout: shell
293
341
  });
294
342
  }
295
343
 
344
+ lockSpecimenHeight();
296
345
  paintSpecimen(entryBySlug(selectedSlug));
297
346
  paintInventory();
347
+
348
+ var resizeTimer = null;
349
+ var lastMeasureWidth = Math.round(specimenSlot.getBoundingClientRect().width);
350
+ window.addEventListener('resize', function () {
351
+ window.clearTimeout(resizeTimer);
352
+ resizeTimer = window.setTimeout(function () {
353
+ var nextWidth = Math.round(specimenSlot.getBoundingClientRect().width);
354
+ if (nextWidth === lastMeasureWidth) return;
355
+ lastMeasureWidth = nextWidth;
356
+ lockSpecimenHeight();
357
+ paintSpecimen(entryBySlug(selectedSlug));
358
+ }, 120);
359
+ });
298
360
  return;
299
361
  }
300
362
 
@@ -944,9 +944,11 @@ html[data-theme="light"] .home-hero-plate {
944
944
  }
945
945
 
946
946
  /* ── Engineering artifacts: specimen bench ──
947
- A specimen card beside a filing rack of project cards. The specimen keeps a
948
- min-height floor so short projects still fill the bench, and grows with its
949
- tagline and wrapping tag chips — the same chip wrap the projects index uses.
947
+ A specimen card beside a filing rack of project cards. Height is locked to
948
+ the tallest project (home.html measures once, then sets
949
+ `--home-specimen-height`), so swapping projects never resizes the band or
950
+ the inventory. Taglines stay full length and chips wrap whole pills like
951
+ the projects index; spare height parks chips and the foot on the floor.
950
952
  Every plate is 16:9, the ratio the thumbnails are drawn at, with the title
951
953
  below it. From 900px the specimen is half the band and the rack a narrower
952
954
  column beside it, the rest left blank. Below 900px the rack is an icon strip
@@ -966,8 +968,7 @@ html[data-theme="light"] .home-hero-plate {
966
968
  }
967
969
 
968
970
  .home-project-specimen {
969
- min-height: var(--home-specimen-height);
970
- height: auto;
971
+ height: var(--home-specimen-height);
971
972
  overflow: hidden;
972
973
  gap: var(--space-sm);
973
974
  padding: var(--space-md);
@@ -1266,7 +1267,7 @@ html[data-theme="light"] .home-hero-plate {
1266
1267
 
1267
1268
  @media (min-width: 900px) {
1268
1269
 
1269
- /* The rack panel stretches to the specimen's content height. */
1270
+ /* Desktop fallback before JS measures the tallest specimen. */
1270
1271
  .home-projects-bench {
1271
1272
  --home-specimen-height: 36rem;
1272
1273
  display: grid;
@@ -24,7 +24,7 @@ module Pandorga
24
24
 
25
25
  gem "pandorga", "~> 1.3"
26
26
  # Local checkout: gem "pandorga", path: "../pandorga"
27
- # GitHub tag: gem "pandorga", github: "alexandrelheinen/pandorga", tag: "v1.3.9"
27
+ # GitHub tag: gem "pandorga", github: "alexandrelheinen/pandorga", tag: "v1.3.10"
28
28
  gem "csv"
29
29
  gem "base64"
30
30
  RUBY
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pandorga
4
- VERSION = "1.3.9"
4
+ VERSION = "1.3.10"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pandorga
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.9
4
+ version: 1.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Pandorga contributors