@dillingerstaffing/strand-ui 0.7.1 → 0.9.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,45 @@ 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.
868
+
869
+ ### Secondary Text
870
+
871
+ ```html
872
+ <p class="strand-text-secondary">Supporting description for a card, feature, or section.</p>
873
+ <span class="strand-text-secondary strand-text-secondary--xs">Fine print or metadata.</span>
874
+ ```
875
+
876
+ Caption/description text. text-sm, gray-500, relaxed leading. The `--xs` modifier reduces to text-xs for metadata and fine print.
877
+
878
+ > **DL foundation:** [DESIGN_LANGUAGE.md Part III.8 Color Roles](./DESIGN_LANGUAGE.md#L290) defines gray-500 as the secondary text role. [Part IV.7 Named Text Patterns](./DESIGN_LANGUAGE.md#L408) specifies the Secondary pattern.
@@ -488,6 +488,7 @@
488
488
 
489
489
  /* ── Variants ── */
490
490
  .strand-card--elevated {
491
+ border: 1px solid var(--strand-border-subtle);
491
492
  box-shadow: var(--strand-elevation-1);
492
493
  }
493
494
 
@@ -497,6 +498,7 @@
497
498
  }
498
499
 
499
500
  .strand-card--interactive {
501
+ border: 1px solid var(--strand-border-subtle);
500
502
  box-shadow: var(--strand-elevation-1);
501
503
  cursor: pointer;
502
504
  transition:
@@ -672,7 +674,7 @@
672
674
  line-height: var(--strand-leading-relaxed);
673
675
  color: var(--strand-blue-midnight);
674
676
  background: var(--strand-surface-recessed);
675
- box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.06); /* strand-blue-abyss at 6% opacity */
677
+ box-shadow: var(--strand-shadow-inset);
676
678
  border-radius: var(--strand-radius-lg);
677
679
  padding: var(--strand-space-3) var(--strand-space-4);
678
680
  overflow-x: auto;
@@ -960,11 +962,16 @@
960
962
  min-width: 0;
961
963
  }
962
964
 
963
- /* ── Column utilities ── */
965
+ /* ── Fixed column utilities ── */
964
966
  .strand-grid--cols-2 { grid-template-columns: repeat(2, 1fr); }
965
967
  .strand-grid--cols-3 { grid-template-columns: repeat(3, 1fr); }
966
968
  .strand-grid--cols-4 { grid-template-columns: repeat(4, 1fr); }
967
969
 
970
+ /* ── Responsive auto-fit (columns adjust to available width) ── */
971
+ .strand-grid--auto-sm { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
972
+ .strand-grid--auto-md { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
973
+ .strand-grid--auto-lg { grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); }
974
+
968
975
  /* ── Gap utilities ── */
969
976
  .strand-grid--gap-1 { gap: var(--strand-space-1); }
970
977
  .strand-grid--gap-2 { gap: var(--strand-space-2); }
@@ -2603,9 +2610,59 @@
2603
2610
 
2604
2611
  .strand-viewport {
2605
2612
  background: var(--strand-surface-recessed);
2606
- box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.06);
2613
+ box-shadow: var(--strand-shadow-inset);
2607
2614
  border-radius: var(--strand-radius-lg);
2608
2615
  padding: var(--strand-space-6);
2609
2616
  }
2610
2617
 
2618
+ /* ── Overline (specimen label pattern, DL Part IV.5) ── */
2619
+ .strand-overline {
2620
+ font-family: var(--strand-font-mono);
2621
+ font-size: var(--strand-text-xs);
2622
+ font-weight: var(--strand-weight-medium);
2623
+ letter-spacing: var(--strand-tracking-ultra);
2624
+ text-transform: uppercase;
2625
+ color: var(--strand-gray-500);
2626
+ line-height: var(--strand-leading-normal);
2627
+ }
2628
+
2629
+ /* ── Headline (display heading, DL Part IV.5) ── */
2630
+ .strand-headline {
2631
+ font-family: var(--strand-font-mono);
2632
+ font-weight: var(--strand-weight-light);
2633
+ letter-spacing: var(--strand-tracking-widest);
2634
+ text-transform: uppercase;
2635
+ color: var(--strand-blue-midnight);
2636
+ line-height: var(--strand-leading-tight);
2637
+ }
2638
+
2639
+ .strand-headline--xl {
2640
+ font-size: clamp(2.5rem, 5vw + 1rem, 5rem);
2641
+ letter-spacing: 0.35em;
2642
+ }
2643
+
2644
+ .strand-headline--lg {
2645
+ font-size: clamp(1.5rem, 3vw + 0.5rem, 2.5rem);
2646
+ letter-spacing: var(--strand-tracking-tighter);
2647
+ }
2648
+
2649
+ /* ── Lead (intro paragraph, DL Part IV.6) ── */
2650
+ .strand-lead {
2651
+ font-size: var(--strand-text-lg);
2652
+ color: var(--strand-gray-500);
2653
+ max-width: 50ch;
2654
+ line-height: var(--strand-leading-relaxed);
2655
+ }
2656
+
2657
+ /* ── Secondary text (caption/description, DL Part III.8 Color Roles) ── */
2658
+ .strand-text-secondary {
2659
+ font-size: var(--strand-text-sm);
2660
+ color: var(--strand-gray-500);
2661
+ line-height: var(--strand-leading-relaxed);
2662
+ }
2663
+
2664
+ .strand-text-secondary--xs {
2665
+ font-size: var(--strand-text-xs);
2666
+ }
2667
+
2611
2668
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dillingerstaffing/strand-ui",
3
- "version": "0.7.1",
3
+ "version": "0.9.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.1"
63
+ "@dillingerstaffing/strand": "^0.9.0"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@testing-library/preact": "^3.2.0",
@@ -12,6 +12,7 @@
12
12
 
13
13
  /* ── Variants ── */
14
14
  .strand-card--elevated {
15
+ border: 1px solid var(--strand-border-subtle);
15
16
  box-shadow: var(--strand-elevation-1);
16
17
  }
17
18
 
@@ -21,6 +22,7 @@
21
22
  }
22
23
 
23
24
  .strand-card--interactive {
25
+ border: 1px solid var(--strand-border-subtle);
24
26
  box-shadow: var(--strand-elevation-1);
25
27
  cursor: pointer;
26
28
  transition:
@@ -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;
@@ -12,11 +12,16 @@
12
12
  min-width: 0;
13
13
  }
14
14
 
15
- /* ── Column utilities ── */
15
+ /* ── Fixed column utilities ── */
16
16
  .strand-grid--cols-2 { grid-template-columns: repeat(2, 1fr); }
17
17
  .strand-grid--cols-3 { grid-template-columns: repeat(3, 1fr); }
18
18
  .strand-grid--cols-4 { grid-template-columns: repeat(4, 1fr); }
19
19
 
20
+ /* ── Responsive auto-fit (columns adjust to available width) ── */
21
+ .strand-grid--auto-sm { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
22
+ .strand-grid--auto-md { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
23
+ .strand-grid--auto-lg { grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); }
24
+
20
25
  /* ── Gap utilities ── */
21
26
  .strand-grid--gap-1 { gap: var(--strand-space-1); }
22
27
  .strand-grid--gap-2 { gap: var(--strand-space-2); }
package/src/static.css CHANGED
@@ -41,7 +41,57 @@
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
+ }
87
+
88
+ /* ── Secondary text (caption/description, DL Part III.8 Color Roles) ── */
89
+ .strand-text-secondary {
90
+ font-size: var(--strand-text-sm);
91
+ color: var(--strand-gray-500);
92
+ line-height: var(--strand-leading-relaxed);
93
+ }
94
+
95
+ .strand-text-secondary--xs {
96
+ font-size: var(--strand-text-xs);
97
+ }