@dillingerstaffing/strand-svelte 0.17.4 → 0.17.6

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.
@@ -9,7 +9,7 @@
9
9
  .strand-alert {
10
10
  position: relative;
11
11
  display: flex;
12
- align-items: flex-start;
12
+ align-items: center;
13
13
  justify-content: space-between;
14
14
  width: 100%;
15
15
  padding: var(--strand-space-6);
@@ -964,7 +964,7 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
964
964
  font-weight: var(--strand-weight-medium);
965
965
  letter-spacing: var(--strand-tracking-widest);
966
966
  text-transform: uppercase;
967
- color: var(--strand-gray-500);
967
+ color: var(--strand-gray-600);
968
968
  margin-bottom: var(--strand-space-2);
969
969
  }
970
970
 
@@ -3352,7 +3352,14 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
3352
3352
  /* Shell root: two-column grid, sidebar left, main right. */
3353
3353
  .strand-ref-shell {
3354
3354
  display: grid;
3355
- grid-template-columns: 256px 1fr;
3355
+ /* minmax(0, 1fr) on the main track, not a bare 1fr. A bare 1fr keeps an
3356
+ implicit min-content floor, so a wide child (a long heading, the metrics
3357
+ row) forces the track wider than the viewport. Paired with the shell's
3358
+ overflow-x clip below, that surplus is cut off on the right while the
3359
+ left gutter renders correctly: asymmetric clipping on narrow viewports.
3360
+ minmax(0, ...) lets the track shrink to the available width so content
3361
+ reflows instead. Boundary Integrity: the container owns its width. */
3362
+ grid-template-columns: 256px minmax(0, 1fr);
3356
3363
  min-height: 100vh;
3357
3364
  }
3358
3365
 
@@ -3495,6 +3502,10 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
3495
3502
  .strand-ref-shell__main {
3496
3503
  padding: 56px var(--strand-space-16) 96px;
3497
3504
  max-width: 1120px;
3505
+ /* min-width: 0 lets this grid item shrink below its content's min-content
3506
+ width so content reflows within the track rather than overflowing the
3507
+ viewport and being clipped on the right (Boundary Integrity). */
3508
+ min-width: 0;
3498
3509
  }
3499
3510
 
3500
3511
  /* Header: h1 + lead + metrics row, bottom hairline. */
@@ -3729,7 +3740,9 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
3729
3740
  on tap. */
3730
3741
  @media (max-width: 1040px) {
3731
3742
  .strand-ref-shell {
3732
- grid-template-columns: 1fr;
3743
+ /* Single column at mobile, but still minmax(0, ...) so the lone track can
3744
+ shrink below its content's min-content width (see the base rule). */
3745
+ grid-template-columns: minmax(0, 1fr);
3733
3746
  }
3734
3747
 
3735
3748
  .strand-ref-shell__sidebar {
@@ -4607,6 +4620,31 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
4607
4620
  }
4608
4621
  }
4609
4622
 
4623
+ /* Manual / programmatic reveal. Opts out of the scroll-driven view-timeline so a
4624
+ consumer can drive the reveal by toggling .strand-reveal--visible: replay on
4625
+ click, reveal on mount, reveal on state change. Uses the same transition as the
4626
+ no-JS fallback, so it stays replayable even where animation-timeline is supported.
4627
+ Add .strand-reveal--manual per element, or .strand-reveal-group--manual on the group. */
4628
+ .strand-reveal--manual,
4629
+ .strand-reveal-group--manual > .strand-reveal {
4630
+ animation: none;
4631
+ animation-timeline: auto;
4632
+ transition: opacity var(--strand-duration-glacial) var(--strand-ease-out-expo),
4633
+ transform var(--strand-duration-glacial) var(--strand-ease-out-expo);
4634
+ }
4635
+
4636
+ /* A manual reveal toggled visible must win over the @supports view-timeline
4637
+ base rule above, which re-declares opacity:0 / transform on .strand-reveal at
4638
+ equal specificity but later in source order. With the animation removed (above)
4639
+ nothing else drives opacity, so without this compound (higher-specificity)
4640
+ rule the element stays at opacity 0 and toggling --visible has no effect:
4641
+ the reveal never appears and replay does nothing. */
4642
+ .strand-reveal--manual.strand-reveal--visible,
4643
+ .strand-reveal-group--manual > .strand-reveal--visible {
4644
+ opacity: 1;
4645
+ transform: translateY(0);
4646
+ }
4647
+
4610
4648
  @media (prefers-reduced-motion: reduce) {
4611
4649
  .strand-reveal {
4612
4650
  opacity: 1;
@@ -6556,12 +6594,12 @@ body.strand-banner-active .strand-instrument-viewport--full-bleed {
6556
6594
 
6557
6595
  .strand-bar-chart__col {
6558
6596
  flex: 1;
6559
- display: flex;
6560
- flex-direction: column;
6561
- align-items: center;
6597
+ display: grid;
6598
+ grid-template-rows: auto 1fr auto;
6599
+ align-items: end;
6600
+ justify-items: center;
6562
6601
  gap: var(--strand-space-1);
6563
6602
  height: 100%;
6564
- justify-content: flex-end;
6565
6603
  }
6566
6604
 
6567
6605
  .strand-bar-chart__bar {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dillingerstaffing/strand-svelte",
3
- "version": "0.17.4",
3
+ "version": "0.17.6",
4
4
  "description": "Strand UI - Svelte component library built on the Strand Design Language",
5
5
  "author": "Dillinger Staffing <engineering@dillingerstaffing.com> (https://dillingerstaffing.com)",
6
6
  "license": "MIT",
@@ -56,7 +56,7 @@
56
56
  "svelte": "^4.0.0 || ^5.0.0"
57
57
  },
58
58
  "dependencies": {
59
- "@dillingerstaffing/strand": "^0.17.4"
59
+ "@dillingerstaffing/strand": "^0.17.6"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@sveltejs/vite-plugin-svelte": "^5.0.0",