@dillingerstaffing/strand-ui 0.7.0 → 0.8.0

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/HTML_REFERENCE.md CHANGED
@@ -834,3 +834,34 @@ All container components (Grid, Stack, Card, Container) enforce boundary integri
834
834
  > **Keyboard navigation:** Tab/Shift+Tab reaches all interactive elements. Arrow keys navigate within Tabs and menus (requires JavaScript). Escape closes overlays. Enter/Space activates buttons. Dialog must trap focus. See [DL L1197-1204](./DESIGN_LANGUAGE.md#L1197).
835
835
 
836
836
  > **Motion anti-patterns (never do):** Never re-animate on viewport exit/re-enter. Never hijack scroll. Never animate width/height/margin/padding (use transform). Never use bounce/elastic easing. Never animate more than 3-4 elements simultaneously. Never use parallax on text. See [DL L671-680](./DESIGN_LANGUAGE.md#L671).
837
+
838
+ ---
839
+
840
+ ## Utility Classes
841
+
842
+ ### Overline
843
+
844
+ ```html
845
+ <span class="strand-overline">Specimen Label</span>
846
+ ```
847
+
848
+ The monospace uppercase tracked label pattern. Used for section labels, category headers, and data annotations.
849
+
850
+ > **DL foundation:** This is the laboratory specimen label pattern from [DL Part IV.5 (L386-L396)](./DESIGN_LANGUAGE.md#L386).
851
+
852
+ ### Headline
853
+
854
+ ```html
855
+ <div class="strand-headline strand-headline--xl">STRAND</div>
856
+ <h2 class="strand-headline strand-headline--lg">Section Title</h2>
857
+ ```
858
+
859
+ **Sizes:** `--xl` (hero, fluid 2.5rem-5rem) | `--lg` (section, fluid 1.5rem-2.5rem)
860
+
861
+ ### Lead
862
+
863
+ ```html
864
+ <p class="strand-lead">Design tokens + UI components. Zero-runtime CSS. Ship faster.</p>
865
+ ```
866
+
867
+ Intro paragraph. Max 50 characters per line. Used after headlines.
@@ -313,21 +313,21 @@
313
313
 
314
314
  /* ── Sizes ── */
315
315
  .strand-btn--sm {
316
- padding: var(--strand-space-1) var(--strand-space-3);
316
+ padding: var(--strand-space-2) var(--strand-space-5);
317
317
  font-size: var(--strand-text-sm);
318
318
  min-height: var(--strand-touch-target);
319
319
  }
320
320
 
321
321
  .strand-btn--md {
322
- padding: calc(var(--strand-space-2) + var(--strand-space-1) / 2) var(--strand-space-5);
322
+ padding: var(--strand-space-3) var(--strand-space-8);
323
323
  font-size: var(--strand-text-sm);
324
324
  min-height: var(--strand-touch-target);
325
325
  }
326
326
 
327
327
  .strand-btn--lg {
328
- padding: var(--strand-space-3) var(--strand-space-6);
328
+ padding: var(--strand-space-3) var(--strand-space-10);
329
329
  font-size: var(--strand-text-base);
330
- min-height: 48px;
330
+ min-height: var(--strand-touch-target);
331
331
  }
332
332
 
333
333
  /* ── Icon-only ── */
@@ -353,18 +353,18 @@
353
353
 
354
354
  /* ── Primary variant ── */
355
355
  .strand-btn--primary {
356
- background: var(--strand-blue-primary);
357
- color: var(--strand-on-blue-primary);
356
+ background: var(--strand-blue-deep);
357
+ color: var(--strand-on-blue-deep);
358
358
  }
359
359
 
360
360
  .strand-btn--primary:hover:not(:disabled) {
361
- background: var(--strand-blue-vivid);
361
+ background: var(--strand-blue-midnight);
362
362
  transform: translateY(-1px);
363
363
  box-shadow: var(--strand-hover-shadow-primary);
364
364
  }
365
365
 
366
366
  .strand-btn--primary:active:not(:disabled) {
367
- background: var(--strand-blue-deep);
367
+ background: var(--strand-blue-abyss);
368
368
  }
369
369
 
370
370
  /* ── Secondary variant ── */
@@ -672,7 +672,7 @@
672
672
  line-height: var(--strand-leading-relaxed);
673
673
  color: var(--strand-blue-midnight);
674
674
  background: var(--strand-surface-recessed);
675
- box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.06); /* strand-blue-abyss at 6% opacity */
675
+ box-shadow: var(--strand-shadow-inset);
676
676
  border-radius: var(--strand-radius-lg);
677
677
  padding: var(--strand-space-3) var(--strand-space-4);
678
678
  overflow-x: auto;
@@ -2603,9 +2603,48 @@
2603
2603
 
2604
2604
  .strand-viewport {
2605
2605
  background: var(--strand-surface-recessed);
2606
- box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.06);
2606
+ box-shadow: var(--strand-shadow-inset);
2607
2607
  border-radius: var(--strand-radius-lg);
2608
2608
  padding: var(--strand-space-6);
2609
2609
  }
2610
2610
 
2611
+ /* ── Overline (specimen label pattern, DL Part IV.5) ── */
2612
+ .strand-overline {
2613
+ font-family: var(--strand-font-mono);
2614
+ font-size: var(--strand-text-xs);
2615
+ font-weight: var(--strand-weight-medium);
2616
+ letter-spacing: var(--strand-tracking-ultra);
2617
+ text-transform: uppercase;
2618
+ color: var(--strand-gray-500);
2619
+ line-height: var(--strand-leading-normal);
2620
+ }
2621
+
2622
+ /* ── Headline (display heading, DL Part IV.5) ── */
2623
+ .strand-headline {
2624
+ font-family: var(--strand-font-mono);
2625
+ font-weight: var(--strand-weight-light);
2626
+ letter-spacing: var(--strand-tracking-widest);
2627
+ text-transform: uppercase;
2628
+ color: var(--strand-blue-midnight);
2629
+ line-height: var(--strand-leading-tight);
2630
+ }
2631
+
2632
+ .strand-headline--xl {
2633
+ font-size: clamp(2.5rem, 5vw + 1rem, 5rem);
2634
+ letter-spacing: 0.35em;
2635
+ }
2636
+
2637
+ .strand-headline--lg {
2638
+ font-size: clamp(1.5rem, 3vw + 0.5rem, 2.5rem);
2639
+ letter-spacing: var(--strand-tracking-tighter);
2640
+ }
2641
+
2642
+ /* ── Lead (intro paragraph, DL Part IV.6) ── */
2643
+ .strand-lead {
2644
+ font-size: var(--strand-text-lg);
2645
+ color: var(--strand-gray-500);
2646
+ max-width: 50ch;
2647
+ line-height: var(--strand-leading-relaxed);
2648
+ }
2649
+
2611
2650
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dillingerstaffing/strand-ui",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Strand UI - Preact/React component library built on the Strand Design Language",
5
5
  "author": "Dillinger Staffing <engineering@dillingerstaffing.com> (https://dillingerstaffing.com)",
6
6
  "license": "MIT",
@@ -60,7 +60,7 @@
60
60
  }
61
61
  },
62
62
  "dependencies": {
63
- "@dillingerstaffing/strand": "^0.7.0"
63
+ "@dillingerstaffing/strand": "^0.8.0"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@testing-library/preact": "^3.2.0",
@@ -35,21 +35,21 @@
35
35
 
36
36
  /* ── Sizes ── */
37
37
  .strand-btn--sm {
38
- padding: var(--strand-space-1) var(--strand-space-3);
38
+ padding: var(--strand-space-2) var(--strand-space-5);
39
39
  font-size: var(--strand-text-sm);
40
40
  min-height: var(--strand-touch-target);
41
41
  }
42
42
 
43
43
  .strand-btn--md {
44
- padding: calc(var(--strand-space-2) + var(--strand-space-1) / 2) var(--strand-space-5);
44
+ padding: var(--strand-space-3) var(--strand-space-8);
45
45
  font-size: var(--strand-text-sm);
46
46
  min-height: var(--strand-touch-target);
47
47
  }
48
48
 
49
49
  .strand-btn--lg {
50
- padding: var(--strand-space-3) var(--strand-space-6);
50
+ padding: var(--strand-space-3) var(--strand-space-10);
51
51
  font-size: var(--strand-text-base);
52
- min-height: 48px;
52
+ min-height: var(--strand-touch-target);
53
53
  }
54
54
 
55
55
  /* ── Icon-only ── */
@@ -75,18 +75,18 @@
75
75
 
76
76
  /* ── Primary variant ── */
77
77
  .strand-btn--primary {
78
- background: var(--strand-blue-primary);
79
- color: var(--strand-on-blue-primary);
78
+ background: var(--strand-blue-deep);
79
+ color: var(--strand-on-blue-deep);
80
80
  }
81
81
 
82
82
  .strand-btn--primary:hover:not(:disabled) {
83
- background: var(--strand-blue-vivid);
83
+ background: var(--strand-blue-midnight);
84
84
  transform: translateY(-1px);
85
85
  box-shadow: var(--strand-hover-shadow-primary);
86
86
  }
87
87
 
88
88
  .strand-btn--primary:active:not(:disabled) {
89
- background: var(--strand-blue-deep);
89
+ background: var(--strand-blue-abyss);
90
90
  }
91
91
 
92
92
  /* ── Secondary variant ── */
@@ -24,7 +24,7 @@
24
24
  line-height: var(--strand-leading-relaxed);
25
25
  color: var(--strand-blue-midnight);
26
26
  background: var(--strand-surface-recessed);
27
- box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.06); /* strand-blue-abyss at 6% opacity */
27
+ box-shadow: var(--strand-shadow-inset);
28
28
  border-radius: var(--strand-radius-lg);
29
29
  padding: var(--strand-space-3) var(--strand-space-4);
30
30
  overflow-x: auto;
package/src/static.css CHANGED
@@ -41,7 +41,46 @@
41
41
 
42
42
  .strand-viewport {
43
43
  background: var(--strand-surface-recessed);
44
- box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.06);
44
+ box-shadow: var(--strand-shadow-inset);
45
45
  border-radius: var(--strand-radius-lg);
46
46
  padding: var(--strand-space-6);
47
47
  }
48
+
49
+ /* ── Overline (specimen label pattern, DL Part IV.5) ── */
50
+ .strand-overline {
51
+ font-family: var(--strand-font-mono);
52
+ font-size: var(--strand-text-xs);
53
+ font-weight: var(--strand-weight-medium);
54
+ letter-spacing: var(--strand-tracking-ultra);
55
+ text-transform: uppercase;
56
+ color: var(--strand-gray-500);
57
+ line-height: var(--strand-leading-normal);
58
+ }
59
+
60
+ /* ── Headline (display heading, DL Part IV.5) ── */
61
+ .strand-headline {
62
+ font-family: var(--strand-font-mono);
63
+ font-weight: var(--strand-weight-light);
64
+ letter-spacing: var(--strand-tracking-widest);
65
+ text-transform: uppercase;
66
+ color: var(--strand-blue-midnight);
67
+ line-height: var(--strand-leading-tight);
68
+ }
69
+
70
+ .strand-headline--xl {
71
+ font-size: clamp(2.5rem, 5vw + 1rem, 5rem);
72
+ letter-spacing: 0.35em;
73
+ }
74
+
75
+ .strand-headline--lg {
76
+ font-size: clamp(1.5rem, 3vw + 0.5rem, 2.5rem);
77
+ letter-spacing: var(--strand-tracking-tighter);
78
+ }
79
+
80
+ /* ── Lead (intro paragraph, DL Part IV.6) ── */
81
+ .strand-lead {
82
+ font-size: var(--strand-text-lg);
83
+ color: var(--strand-gray-500);
84
+ max-width: 50ch;
85
+ line-height: var(--strand-leading-relaxed);
86
+ }