@openwarelabs/ui 0.1.1 → 0.3.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/dist/styles.css CHANGED
@@ -82,6 +82,7 @@
82
82
  --ow-key-ground: var(--ow-gray-50);
83
83
  --ow-track: var(--ow-gray-100);
84
84
  --ow-thumb: #ffffff;
85
+ --ow-knob: #ffffff;
85
86
  --ow-meter-track: var(--ow-gray-200);
86
87
  --ow-progress: var(--ow-brand-600);
87
88
  --ow-code-block: #15171c;
@@ -158,6 +159,7 @@
158
159
  --ow-key-ground: #22262e;
159
160
  --ow-track: #14161b;
160
161
  --ow-thumb: #2f3541;
162
+ --ow-knob: #e4e7ec;
161
163
  --ow-meter-track: #2c313a;
162
164
  --ow-progress: var(--ow-brand-400);
163
165
  --ow-code-block-border: #2c313a;
@@ -230,6 +232,7 @@
230
232
  --ow-key-ground: #22262e;
231
233
  --ow-track: #14161b;
232
234
  --ow-thumb: #2f3541;
235
+ --ow-knob: #e4e7ec;
233
236
  --ow-meter-track: #2c313a;
234
237
  --ow-progress: var(--ow-brand-400);
235
238
  --ow-code-block-border: #2c313a;
@@ -251,7 +254,7 @@
251
254
  }
252
255
 
253
256
  :root {
254
- --ow-space-3xs: 3px;
257
+ --ow-space-3xs: 4px;
255
258
  --ow-space-2xs: 4px;
256
259
  --ow-space-xs: 6px;
257
260
  --ow-space-sm: 8px;
@@ -467,6 +470,7 @@
467
470
  back into it. useFloating sets data-side and --ow-floating-origin; usePresence sets data-state. */
468
471
  .ow-floating {
469
472
  --ow-floating-shift: -4px;
473
+ --ow-floating-shift-x: 0px;
470
474
  transform-origin: var(--ow-floating-origin, top center);
471
475
  }
472
476
 
@@ -474,6 +478,16 @@
474
478
  --ow-floating-shift: 4px;
475
479
  }
476
480
 
481
+ .ow-floating[data-side="left"] {
482
+ --ow-floating-shift: 0px;
483
+ --ow-floating-shift-x: 4px;
484
+ }
485
+
486
+ .ow-floating[data-side="right"] {
487
+ --ow-floating-shift: 0px;
488
+ --ow-floating-shift-x: -4px;
489
+ }
490
+
477
491
  .ow-floating[data-state="open"] {
478
492
  animation: ow-floating-in var(--ow-duration-base) var(--ow-ease-emphasized);
479
493
  }
@@ -486,14 +500,14 @@
486
500
  @keyframes ow-floating-in {
487
501
  from {
488
502
  opacity: 0;
489
- transform: translateY(var(--ow-floating-shift)) scale(0.96);
503
+ transform: translate(var(--ow-floating-shift-x), var(--ow-floating-shift)) scale(0.96);
490
504
  }
491
505
  }
492
506
 
493
507
  @keyframes ow-floating-out {
494
508
  to {
495
509
  opacity: 0;
496
- transform: translateY(var(--ow-floating-shift)) scale(0.97);
510
+ transform: translate(var(--ow-floating-shift-x), var(--ow-floating-shift)) scale(0.97);
497
511
  }
498
512
  }
499
513
 
@@ -522,6 +536,104 @@
522
536
  }
523
537
  }
524
538
 
539
+ /* components/Text/Text.css */
540
+ /* Text: the type styles from tokens.css as a component, with colours and the sizes the display styles take on phones. */
541
+ .ow-text {
542
+ margin: 0;
543
+ }
544
+
545
+ /* Titles balance their lines; running text avoids a lone last word. */
546
+ .ow-text--hero,
547
+ .ow-text--page-title,
548
+ .ow-text--section-title,
549
+ .ow-text--heading {
550
+ text-wrap: balance;
551
+ }
552
+
553
+ .ow-text--lead,
554
+ .ow-text--prose,
555
+ .ow-text--copy {
556
+ text-wrap: pretty;
557
+ }
558
+
559
+ .ow-text--lead {
560
+ max-width: 560px;
561
+ }
562
+
563
+ .ow-text--overline {
564
+ text-transform: uppercase;
565
+ }
566
+
567
+ .ow-text--code,
568
+ .ow-text--kbd {
569
+ font-variant-ligatures: none;
570
+ }
571
+
572
+ .ow-text--default {
573
+ color: var(--ow-text);
574
+ }
575
+
576
+ .ow-text--soft {
577
+ color: var(--ow-text-soft);
578
+ }
579
+
580
+ .ow-text--muted {
581
+ color: var(--ow-text-muted);
582
+ }
583
+
584
+ .ow-text--primary {
585
+ color: var(--ow-primary-text);
586
+ }
587
+
588
+ .ow-text--danger {
589
+ color: var(--ow-danger-text);
590
+ }
591
+
592
+ .ow-text--success {
593
+ color: var(--ow-success-text);
594
+ }
595
+
596
+ .ow-text--warning {
597
+ color: var(--ow-warning-text);
598
+ }
599
+
600
+ .ow-text--center {
601
+ text-align: center;
602
+ }
603
+
604
+ .ow-text--center.ow-text--lead {
605
+ margin-inline: auto;
606
+ }
607
+
608
+ .ow-text--end {
609
+ text-align: end;
610
+ }
611
+
612
+ .ow-text--truncate {
613
+ overflow: hidden;
614
+ text-overflow: ellipsis;
615
+ white-space: nowrap;
616
+ }
617
+
618
+ /* The display styles on phones, as the Typography page gives them. */
619
+ @media (max-width: 760px) {
620
+ .ow-text--hero {
621
+ font-size: 42px;
622
+ line-height: 1.02;
623
+ }
624
+ .ow-text--page-title {
625
+ font-size: 40px;
626
+ line-height: 1.06;
627
+ }
628
+ .ow-text--section-title {
629
+ font-size: 32px;
630
+ line-height: 1.12;
631
+ }
632
+ .ow-text--heading {
633
+ font-size: 21px;
634
+ }
635
+ }
636
+
525
637
  /* components/Spinner/Spinner.css */
526
638
  /* Spinner: a ring with one coloured quarter, turning. */
527
639
  .ow-spinner {
@@ -922,6 +1034,8 @@
922
1034
  border-radius: var(--ow-radius-container);
923
1035
  background: var(--ow-track);
924
1036
  padding: var(--ow-space-2xs);
1037
+ /* A hairline edge, so the well shows on the canvas as well as on a surface. */
1038
+ box-shadow: inset 0 0 0 1px var(--ow-border);
925
1039
  }
926
1040
 
927
1041
  .ow-segmented--full {
@@ -1225,6 +1339,8 @@
1225
1339
  .ow-input-group {
1226
1340
  display: flex;
1227
1341
  width: 100%;
1342
+ /* Shrink in a narrow grid or flex column instead of pushing past it. */
1343
+ min-width: 0;
1228
1344
  height: 40px;
1229
1345
  align-items: center;
1230
1346
  gap: var(--ow-space-sm);
@@ -1271,6 +1387,8 @@
1271
1387
  }
1272
1388
 
1273
1389
  .ow-input-group__input {
1390
+ /* A percentage width lets the field's minimum size come from its start and end content alone. */
1391
+ width: 100%;
1274
1392
  min-width: 0;
1275
1393
  height: 100%;
1276
1394
  flex: 1;
@@ -1459,19 +1577,22 @@
1459
1577
 
1460
1578
  .ow-option {
1461
1579
  display: flex;
1462
- min-height: 32px;
1580
+ min-height: 36px;
1463
1581
  align-items: flex-start;
1464
1582
  gap: var(--ow-space-sm);
1465
1583
  border-radius: var(--ow-radius-lg);
1466
- padding: var(--ow-space-xs) var(--ow-space-sm);
1584
+ /* 10 + a 16px line + 10: one line sits centred in the 36px row; a description just makes the row taller. */
1585
+ padding: var(--ow-space-md);
1467
1586
  color: var(--ow-text);
1468
1587
  font-size: 14px;
1469
- line-height: 1.1;
1588
+ line-height: 16px;
1470
1589
  text-align: left;
1471
1590
  cursor: pointer;
1472
1591
  }
1473
1592
 
1474
1593
  .ow-listbox--sm .ow-option {
1594
+ min-height: 32px;
1595
+ padding-block: var(--ow-space-sm);
1475
1596
  font-size: 12px;
1476
1597
  }
1477
1598
 
@@ -1492,11 +1613,11 @@
1492
1613
  .ow-option__check {
1493
1614
  display: flex;
1494
1615
  width: 16px;
1616
+ /* As tall as the label's first line, so the tick sits level with it. */
1495
1617
  height: 16px;
1496
1618
  flex-shrink: 0;
1497
1619
  align-items: center;
1498
1620
  justify-content: center;
1499
- padding-top: 2px;
1500
1621
  color: var(--ow-primary-text);
1501
1622
  }
1502
1623
 
@@ -1504,7 +1625,7 @@
1504
1625
  display: grid;
1505
1626
  min-width: 0;
1506
1627
  flex: 1;
1507
- gap: var(--ow-space-3xs);
1628
+ gap: var(--ow-space-2xs);
1508
1629
  }
1509
1630
 
1510
1631
  .ow-option__label {
@@ -1680,12 +1801,13 @@
1680
1801
  cursor: pointer;
1681
1802
  }
1682
1803
 
1804
+ /* Centred on the label's first line, whatever its line height. */
1683
1805
  .ow-check-label .ow-checkbox--md {
1684
- margin-top: 2px;
1806
+ margin-top: calc((1lh - 16px) / 2);
1685
1807
  }
1686
1808
 
1687
1809
  .ow-check-label .ow-checkbox--sm {
1688
- margin-top: 3px;
1810
+ margin-top: calc((1lh - 14px) / 2);
1689
1811
  }
1690
1812
 
1691
1813
  .ow-check-label--disabled {
@@ -1695,7 +1817,7 @@
1695
1817
 
1696
1818
  .ow-check-label__text {
1697
1819
  display: grid;
1698
- gap: var(--ow-space-3xs);
1820
+ gap: var(--ow-space-2xs);
1699
1821
  }
1700
1822
 
1701
1823
  .ow-check-label__description {
@@ -1877,7 +1999,7 @@
1877
1999
  width: 16px;
1878
2000
  height: 16px;
1879
2001
  border-radius: var(--ow-radius-pill);
1880
- background: #ffffff;
2002
+ background: var(--ow-knob);
1881
2003
  box-shadow: var(--ow-shadow-control);
1882
2004
  transform: translateX(2px);
1883
2005
  transition:
@@ -1899,7 +2021,7 @@
1899
2021
  }
1900
2022
 
1901
2023
  /* components/Slider/Slider.css */
1902
- /* Slider: native range inputs over a drawn track. The thumb is the switch's knob: white, round, with a soft shadow. */
2024
+ /* Slider: native range inputs over a drawn track. The thumb is the switch's knob (ow-knob): round, with a soft shadow. */
1903
2025
  .ow-slider {
1904
2026
  display: grid;
1905
2027
  gap: var(--ow-space-sm);
@@ -1990,7 +2112,7 @@
1990
2112
  appearance: none;
1991
2113
  border: 1px solid var(--ow-border-strong);
1992
2114
  border-radius: 50%;
1993
- background: #ffffff;
2115
+ background: var(--ow-knob);
1994
2116
  box-shadow: 0 1px 3px rgba(15, 23, 42, 0.18);
1995
2117
  pointer-events: auto;
1996
2118
  cursor: grab;
@@ -2003,7 +2125,7 @@
2003
2125
  height: 18px;
2004
2126
  border: 1px solid var(--ow-border-strong);
2005
2127
  border-radius: 50%;
2006
- background: #ffffff;
2128
+ background: var(--ow-knob);
2007
2129
  box-shadow: 0 1px 3px rgba(15, 23, 42, 0.18);
2008
2130
  pointer-events: auto;
2009
2131
  cursor: grab;
@@ -2613,7 +2735,7 @@
2613
2735
  }
2614
2736
 
2615
2737
  /* components/Tooltip/Tooltip.css */
2616
- /* Tooltip: a small dark label in the top layer, above the child (or below when there's no room). */
2738
+ /* Tooltip: a small dark label in the top layer, on the side of the child it prefers (or the other side when there's no room). */
2617
2739
  .ow-tooltip {
2618
2740
  display: inline-flex;
2619
2741
  }
@@ -2625,7 +2747,7 @@
2625
2747
  border: 0;
2626
2748
  border-radius: var(--ow-radius-md);
2627
2749
  background: var(--ow-tooltip);
2628
- padding: var(--ow-space-3xs) var(--ow-space-sm);
2750
+ padding: var(--ow-space-2xs) var(--ow-space-sm);
2629
2751
  color: var(--ow-on-tooltip);
2630
2752
  font-family: var(--ow-font-sans);
2631
2753
  font-size: 12px;
@@ -3083,7 +3205,7 @@
3083
3205
  display: grid;
3084
3206
  min-width: 0;
3085
3207
  flex: 1;
3086
- gap: var(--ow-space-3xs);
3208
+ gap: var(--ow-space-2xs);
3087
3209
  padding-top: 5px;
3088
3210
  }
3089
3211
 
@@ -3608,7 +3730,7 @@
3608
3730
  }
3609
3731
 
3610
3732
  .ow-palette__group {
3611
- padding: var(--ow-space-sm) var(--ow-space-sm) var(--ow-space-3xs);
3733
+ padding: var(--ow-space-sm) var(--ow-space-sm) var(--ow-space-2xs);
3612
3734
  color: var(--ow-text-muted);
3613
3735
  font-size: 11px;
3614
3736
  font-weight: var(--ow-weight-control);
@@ -3867,7 +3989,7 @@
3867
3989
  .ow-disclosure__titles {
3868
3990
  display: grid;
3869
3991
  min-width: 0;
3870
- gap: var(--ow-space-3xs);
3992
+ gap: var(--ow-space-2xs);
3871
3993
  }
3872
3994
 
3873
3995
  .ow-disclosure__title {
@@ -4212,7 +4334,7 @@
4212
4334
  display: grid;
4213
4335
  min-width: 0;
4214
4336
  flex: 1 1 160px;
4215
- gap: var(--ow-space-3xs);
4337
+ gap: var(--ow-space-2xs);
4216
4338
  }
4217
4339
 
4218
4340
  .ow-steps__title {
@@ -4361,7 +4483,7 @@
4361
4483
 
4362
4484
  .ow-choice__text {
4363
4485
  display: grid;
4364
- gap: var(--ow-space-3xs);
4486
+ gap: var(--ow-space-2xs);
4365
4487
  }
4366
4488
 
4367
4489
  .ow-choice__title {
@@ -4417,6 +4539,19 @@
4417
4539
  font-size: 13px;
4418
4540
  }
4419
4541
 
4542
+ .ow-avatar--xl {
4543
+ width: 48px;
4544
+ height: 48px;
4545
+ font-size: 17px;
4546
+ }
4547
+
4548
+ /* Any size in pixels, through --ow-avatar-size: the initials stay in proportion. */
4549
+ .ow-avatar--custom {
4550
+ width: var(--ow-avatar-size);
4551
+ height: var(--ow-avatar-size);
4552
+ font-size: calc(var(--ow-avatar-size) * 0.36);
4553
+ }
4554
+
4420
4555
  .ow-avatar__image {
4421
4556
  width: 100%;
4422
4557
  height: 100%;
@@ -4453,6 +4588,18 @@
4453
4588
  gap: var(--ow-space-md);
4454
4589
  }
4455
4590
 
4591
+ .ow-user--xl {
4592
+ gap: var(--ow-space-lg);
4593
+ }
4594
+
4595
+ .ow-user--xl .ow-user__name {
4596
+ font-size: 15px;
4597
+ }
4598
+
4599
+ .ow-user--xl .ow-user__description {
4600
+ font-size: 13px;
4601
+ }
4602
+
4456
4603
  .ow-user__text {
4457
4604
  display: grid;
4458
4605
  min-width: 0;
@@ -5297,7 +5444,7 @@
5297
5444
  display: grid;
5298
5445
  min-width: 0;
5299
5446
  flex: 1 1 192px;
5300
- gap: var(--ow-space-3xs);
5447
+ gap: var(--ow-space-2xs);
5301
5448
  }
5302
5449
 
5303
5450
  .ow-settings-row__label {
package/dist/tailwind.css CHANGED
@@ -83,6 +83,7 @@
83
83
  --color-key-ground: var(--ow-key-ground);
84
84
  --color-track: var(--ow-track);
85
85
  --color-thumb: var(--ow-thumb);
86
+ --color-knob: var(--ow-knob);
86
87
  --color-meter-track: var(--ow-meter-track);
87
88
  --color-progress: var(--ow-progress);
88
89
  --color-code-block: var(--ow-code-block);
package/dist/tokens.css CHANGED
@@ -82,6 +82,7 @@
82
82
  --ow-key-ground: var(--ow-gray-50);
83
83
  --ow-track: var(--ow-gray-100);
84
84
  --ow-thumb: #ffffff;
85
+ --ow-knob: #ffffff;
85
86
  --ow-meter-track: var(--ow-gray-200);
86
87
  --ow-progress: var(--ow-brand-600);
87
88
  --ow-code-block: #15171c;
@@ -158,6 +159,7 @@
158
159
  --ow-key-ground: #22262e;
159
160
  --ow-track: #14161b;
160
161
  --ow-thumb: #2f3541;
162
+ --ow-knob: #e4e7ec;
161
163
  --ow-meter-track: #2c313a;
162
164
  --ow-progress: var(--ow-brand-400);
163
165
  --ow-code-block-border: #2c313a;
@@ -230,6 +232,7 @@
230
232
  --ow-key-ground: #22262e;
231
233
  --ow-track: #14161b;
232
234
  --ow-thumb: #2f3541;
235
+ --ow-knob: #e4e7ec;
233
236
  --ow-meter-track: #2c313a;
234
237
  --ow-progress: var(--ow-brand-400);
235
238
  --ow-code-block-border: #2c313a;
@@ -251,7 +254,7 @@
251
254
  }
252
255
 
253
256
  :root {
254
- --ow-space-3xs: 3px;
257
+ --ow-space-3xs: 4px;
255
258
  --ow-space-2xs: 4px;
256
259
  --ow-space-xs: 6px;
257
260
  --ow-space-sm: 8px;
package/dist/tokens.json CHANGED
@@ -556,7 +556,7 @@
556
556
  "light": "{ow-gray-100}",
557
557
  "dark": "#14161b"
558
558
  },
559
- "usage": "The well behind segmented controls and segmented tabs."
559
+ "usage": "The well behind segmented controls and segmented tabs, edged with ow-border so it shows on the canvas too."
560
560
  },
561
561
  {
562
562
  "name": "ow-thumb",
@@ -566,6 +566,14 @@
566
566
  },
567
567
  "usage": "The selected segment in a segmented control or segmented tabs; ow-text on it."
568
568
  },
569
+ {
570
+ "name": "ow-knob",
571
+ "value": {
572
+ "light": "#ffffff",
573
+ "dark": "#e4e7ec"
574
+ },
575
+ "usage": "Switch knobs and slider thumbs: white in light, a softer white in dark so it doesn't glare. Its shadow separates it from the ground."
576
+ },
569
577
  {
570
578
  "name": "ow-meter-track",
571
579
  "value": {
@@ -824,13 +832,13 @@
824
832
  "tokens": [
825
833
  {
826
834
  "name": "ow-space-3xs",
827
- "value": "3px",
828
- "usage": "Gap between a title and its description."
835
+ "value": "4px",
836
+ "usage": "The same as ow-space-2xs, which the library uses; kept so code written for 0.2 keeps working."
829
837
  },
830
838
  {
831
839
  "name": "ow-space-2xs",
832
840
  "value": "4px",
833
- "usage": "Gap between menu items and options; a menu's offset from its trigger."
841
+ "usage": "Gap between a title and its description, and between menu items; a menu's offset from its trigger."
834
842
  },
835
843
  {
836
844
  "name": "ow-space-xs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwarelabs/ui",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "Openware UI: React components and design tokens — midnight and brass, tactile buttons and Inter, in light and dark.",
5
5
  "license": "MIT",
6
6
  "author": "Alexander Silver",