@sproutsocial/racine 31.5.0 → 31.7.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/CHANGELOG.md +162 -0
- package/dist/components.css +982 -101
- package/package.json +65 -65
package/dist/components.css
CHANGED
|
@@ -487,6 +487,51 @@
|
|
|
487
487
|
}
|
|
488
488
|
|
|
489
489
|
} /* end @layer components */
|
|
490
|
+
/* --- seeds-react-collapsible --- */
|
|
491
|
+
/**
|
|
492
|
+
* Seeds Collapsible component classes
|
|
493
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
494
|
+
*
|
|
495
|
+
* Open/closed state is driven by Radix's data-state attribute on the panel.
|
|
496
|
+
*
|
|
497
|
+
* Usage:
|
|
498
|
+
* <div class="seeds-collapsible-content" data-state="open">…</div>
|
|
499
|
+
*/
|
|
500
|
+
|
|
501
|
+
/* @keyframes are not subject to cascade layers; keep them outside @layer so
|
|
502
|
+
they stay resolvable by name from the layered animation rules below. */
|
|
503
|
+
@keyframes collapsibleSlideDown {
|
|
504
|
+
from {
|
|
505
|
+
height: 0;
|
|
506
|
+
}
|
|
507
|
+
to {
|
|
508
|
+
height: var(--radix-collapsible-content-height);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
@keyframes collapsibleSlideUp {
|
|
513
|
+
from {
|
|
514
|
+
height: var(--radix-collapsible-content-height);
|
|
515
|
+
}
|
|
516
|
+
to {
|
|
517
|
+
height: 0;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
@layer components {
|
|
522
|
+
.seeds-collapsible-content {
|
|
523
|
+
overflow: hidden;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.seeds-collapsible-content[data-state="open"] {
|
|
527
|
+
animation: collapsibleSlideDown 300ms ease-in-out;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.seeds-collapsible-content[data-state="closed"] {
|
|
531
|
+
animation: collapsibleSlideUp 300ms ease-in-out;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
|
|
490
535
|
/* --- seeds-react-content-block --- */
|
|
491
536
|
/**
|
|
492
537
|
* Seeds ContentBlock component classes
|
|
@@ -846,6 +891,42 @@
|
|
|
846
891
|
.seeds-drawer-popup[data-nested-drawer-open][data-nested-drawer-swiping] > * {
|
|
847
892
|
opacity: 1;
|
|
848
893
|
}
|
|
894
|
+
|
|
895
|
+
/* Header ------------------------------------------------------------------ */
|
|
896
|
+
|
|
897
|
+
/* Port of the styled-components Box header (DrawerShared.tsx): flex row with
|
|
898
|
+
the title and close button, fixed at the top of the popup. */
|
|
899
|
+
.seeds-drawer-header {
|
|
900
|
+
display: flex;
|
|
901
|
+
flex: 0 0 auto;
|
|
902
|
+
justify-content: space-between;
|
|
903
|
+
align-items: center;
|
|
904
|
+
padding-top: var(--space-400);
|
|
905
|
+
padding-left: var(--space-450);
|
|
906
|
+
padding-right: var(--space-450);
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
/* Default title typography. `margin: 0` neutralises the user-agent <h2>
|
|
910
|
+
margin that the styled path's <Text> reset for us, avoiding a layout shift
|
|
911
|
+
between the Tailwind and styled headers. */
|
|
912
|
+
.seeds-drawer-header-title {
|
|
913
|
+
margin: 0;
|
|
914
|
+
font-size: var(--font-size-400);
|
|
915
|
+
line-height: var(--line-height-400);
|
|
916
|
+
font-weight: var(--font-weight-semibold);
|
|
917
|
+
color: var(--color-text-headline);
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
/* Content ----------------------------------------------------------------- */
|
|
921
|
+
|
|
922
|
+
/* Port of the styled-components Content (styles.ts) plus the styled-system
|
|
923
|
+
props it was rendered with (height/padding/color). */
|
|
924
|
+
.seeds-drawer-content {
|
|
925
|
+
height: 100%;
|
|
926
|
+
padding: var(--space-450);
|
|
927
|
+
overflow-y: auto;
|
|
928
|
+
color: var(--color-text-body);
|
|
929
|
+
}
|
|
849
930
|
}
|
|
850
931
|
|
|
851
932
|
/* --- seeds-react-link --- */
|
|
@@ -917,19 +998,23 @@
|
|
|
917
998
|
*
|
|
918
999
|
* Usage:
|
|
919
1000
|
* <div class="seeds-loader seeds-loader-delay">
|
|
1001
|
+
* <span class="seeds-loader-spinner" aria-hidden="true"></span>
|
|
920
1002
|
* <span class="seeds-loader-visually-hidden">Loading</span>
|
|
921
1003
|
* </div>
|
|
922
1004
|
* <div class="seeds-loader seeds-loader-sm">...</div> (small)
|
|
923
1005
|
* <div class="seeds-loader">...</div> (no delay)
|
|
1006
|
+
*
|
|
1007
|
+
* The visual is a thin rotating arc (--color-neutral-0) over a faint arc ring
|
|
1008
|
+
* (--color-neutral-600), both clipped to the bottom half by the spinner span.
|
|
924
1009
|
*/
|
|
925
1010
|
|
|
926
1011
|
@layer components {
|
|
927
1012
|
@keyframes seeds-loader-spin {
|
|
928
1013
|
from {
|
|
929
|
-
transform:
|
|
1014
|
+
transform: rotate(0deg);
|
|
930
1015
|
}
|
|
931
1016
|
to {
|
|
932
|
-
transform:
|
|
1017
|
+
transform: rotate(360deg);
|
|
933
1018
|
}
|
|
934
1019
|
}
|
|
935
1020
|
|
|
@@ -945,70 +1030,84 @@
|
|
|
945
1030
|
}
|
|
946
1031
|
}
|
|
947
1032
|
|
|
948
|
-
/* Base (large / 40px) */
|
|
1033
|
+
/* Base (large / 40px) — slow outer rotation hosting the spinner */
|
|
949
1034
|
.seeds-loader {
|
|
950
1035
|
position: relative;
|
|
951
1036
|
margin: 0 auto;
|
|
952
1037
|
padding: 0;
|
|
953
|
-
overflow: hidden;
|
|
954
|
-
border-radius: 100%;
|
|
955
1038
|
width: 40px;
|
|
956
1039
|
height: 40px;
|
|
957
|
-
|
|
958
|
-
0 0 0 2px var(--color-neutral-600),
|
|
959
|
-
inset 0 0 0 6px var(--color-neutral-600);
|
|
1040
|
+
animation: seeds-loader-spin 3s infinite linear;
|
|
960
1041
|
}
|
|
961
1042
|
|
|
962
|
-
|
|
1043
|
+
/* Visual spinner — clipped to bottom half, faster eased rotation */
|
|
1044
|
+
.seeds-loader-spinner {
|
|
963
1045
|
position: absolute;
|
|
964
|
-
|
|
965
|
-
|
|
1046
|
+
inset: 0;
|
|
1047
|
+
margin: auto;
|
|
1048
|
+
width: 40px;
|
|
1049
|
+
height: 40px;
|
|
1050
|
+
clip: rect(20px, 40px, 40px, 0);
|
|
1051
|
+
animation: seeds-loader-spin 1.5s cubic-bezier(0.77, 0, 0.175, 1) infinite;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
/* Bright arc */
|
|
1055
|
+
.seeds-loader-spinner::before {
|
|
1056
|
+
content: "";
|
|
1057
|
+
position: absolute;
|
|
1058
|
+
inset: 0;
|
|
1059
|
+
margin: auto;
|
|
966
1060
|
width: 40px;
|
|
967
1061
|
height: 40px;
|
|
968
1062
|
box-sizing: border-box;
|
|
969
|
-
border
|
|
970
|
-
|
|
971
|
-
border-style: solid;
|
|
1063
|
+
border: 4px solid transparent;
|
|
1064
|
+
border-top-color: var(--color-neutral-0);
|
|
972
1065
|
border-radius: 100%;
|
|
973
|
-
|
|
974
|
-
transition: opacity 250ms;
|
|
975
|
-
border-color: var(--color-neutral-0) var(--color-neutral-0)
|
|
976
|
-
var(--color-neutral-600) var(--color-neutral-600);
|
|
977
|
-
animation: seeds-loader-spin 2.25s infinite linear;
|
|
1066
|
+
animation: seeds-loader-spin 1.5s cubic-bezier(0.77, 0, 0.175, 1) infinite;
|
|
978
1067
|
}
|
|
979
1068
|
|
|
980
|
-
|
|
981
|
-
|
|
1069
|
+
/* Faint arc ring (static) — clipped to bottom half alongside the bright arc */
|
|
1070
|
+
.seeds-loader-spinner::after {
|
|
1071
|
+
content: "";
|
|
1072
|
+
position: absolute;
|
|
1073
|
+
inset: 0;
|
|
1074
|
+
margin: auto;
|
|
1075
|
+
width: 40px;
|
|
1076
|
+
height: 40px;
|
|
1077
|
+
box-sizing: border-box;
|
|
1078
|
+
border: 4px solid var(--color-neutral-600);
|
|
1079
|
+
border-radius: 100%;
|
|
982
1080
|
}
|
|
983
1081
|
|
|
984
|
-
/*
|
|
985
|
-
|
|
986
|
-
|
|
1082
|
+
/* When animations are disabled, the faint arc still renders so the loader
|
|
1083
|
+
is never invisible. */
|
|
1084
|
+
.no-cssanimations .seeds-loader-spinner::after {
|
|
1085
|
+
border-color: var(--color-neutral-600);
|
|
987
1086
|
}
|
|
988
1087
|
|
|
989
|
-
|
|
1088
|
+
/* Delay variant — fades the whole spinner in alongside the outer rotation */
|
|
1089
|
+
.seeds-loader-delay {
|
|
990
1090
|
animation:
|
|
991
|
-
seeds-loader-spin
|
|
1091
|
+
seeds-loader-spin 3s infinite linear,
|
|
992
1092
|
seeds-loader-delay-anim 2s 1;
|
|
993
1093
|
}
|
|
994
1094
|
|
|
995
|
-
/* Small (20px) */
|
|
996
|
-
.seeds-loader-sm
|
|
1095
|
+
/* Small (20px) — scale size, border width, and the clip rect together */
|
|
1096
|
+
.seeds-loader-sm,
|
|
1097
|
+
.seeds-loader-sm .seeds-loader-spinner,
|
|
1098
|
+
.seeds-loader-sm .seeds-loader-spinner::before,
|
|
1099
|
+
.seeds-loader-sm .seeds-loader-spinner::after {
|
|
997
1100
|
width: 20px;
|
|
998
1101
|
height: 20px;
|
|
999
|
-
box-shadow:
|
|
1000
|
-
0 0 0 2px var(--color-neutral-600),
|
|
1001
|
-
inset 0 0 0 4px var(--color-neutral-600);
|
|
1002
1102
|
}
|
|
1003
1103
|
|
|
1004
|
-
.seeds-loader-sm
|
|
1005
|
-
|
|
1006
|
-
height: 20px;
|
|
1007
|
-
border-width: 2px;
|
|
1104
|
+
.seeds-loader-sm .seeds-loader-spinner {
|
|
1105
|
+
clip: rect(10px, 20px, 20px, 0);
|
|
1008
1106
|
}
|
|
1009
1107
|
|
|
1010
|
-
.
|
|
1011
|
-
|
|
1108
|
+
.seeds-loader-sm .seeds-loader-spinner::before,
|
|
1109
|
+
.seeds-loader-sm .seeds-loader-spinner::after {
|
|
1110
|
+
border-width: 2px;
|
|
1012
1111
|
}
|
|
1013
1112
|
|
|
1014
1113
|
/* Visually-hidden accessibility text */
|
|
@@ -1078,6 +1177,47 @@
|
|
|
1078
1177
|
}
|
|
1079
1178
|
}
|
|
1080
1179
|
|
|
1180
|
+
/* --- seeds-react-narrative-kit --- */
|
|
1181
|
+
/**
|
|
1182
|
+
* Seeds AIContainer component classes.
|
|
1183
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
1184
|
+
*
|
|
1185
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
1186
|
+
* CSS variable definitions and dark mode support.
|
|
1187
|
+
*
|
|
1188
|
+
* Usage:
|
|
1189
|
+
* <div class="seeds-ai-container">…</div> // subtle (default)
|
|
1190
|
+
* <div class="seeds-ai-container seeds-ai-container-vivid">…</div>
|
|
1191
|
+
*/
|
|
1192
|
+
|
|
1193
|
+
@layer components {
|
|
1194
|
+
|
|
1195
|
+
.seeds-ai-container {
|
|
1196
|
+
position: relative;
|
|
1197
|
+
overflow: hidden;
|
|
1198
|
+
box-sizing: border-box;
|
|
1199
|
+
border-radius: var(--radius-800);
|
|
1200
|
+
box-shadow: var(--shadow-low);
|
|
1201
|
+
font-family: var(--font-family);
|
|
1202
|
+
/* Subtle (default): the 20% AI gradient tint composited over the base
|
|
1203
|
+
surface. --color-gradient-ai-subtle is already translucent, so layering it
|
|
1204
|
+
over the opaque base color produces the soft wash. */
|
|
1205
|
+
background-color: var(--color-container-bg-base);
|
|
1206
|
+
background-image: var(--color-gradient-ai-subtle);
|
|
1207
|
+
color: var(--color-text-headline);
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
/* Vivid: the full-saturation AI gradient with white content. White has no
|
|
1211
|
+
semantic Seeds token; it is part of the AI gradient treatment (mirrors the
|
|
1212
|
+
raw brand hex used in --color-gradient-ai). */
|
|
1213
|
+
.seeds-ai-container-vivid {
|
|
1214
|
+
background-color: transparent;
|
|
1215
|
+
background-image: var(--color-gradient-ai);
|
|
1216
|
+
color: #fff;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1081
1221
|
/* --- seeds-react-narrative-kit --- */
|
|
1082
1222
|
/**
|
|
1083
1223
|
* Seeds EyebrowToken component classes.
|
|
@@ -1287,6 +1427,64 @@
|
|
|
1287
1427
|
|
|
1288
1428
|
}
|
|
1289
1429
|
|
|
1430
|
+
/* --- seeds-react-narrative-kit --- */
|
|
1431
|
+
/**
|
|
1432
|
+
* Seeds NarrativeAttribution component classes.
|
|
1433
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
1434
|
+
*
|
|
1435
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
1436
|
+
* CSS variable definitions and dark mode support.
|
|
1437
|
+
*
|
|
1438
|
+
* Usage:
|
|
1439
|
+
* <div class="seeds-narrative-attribution">
|
|
1440
|
+
* <img class="seeds-narrative-attribution-avatar" />
|
|
1441
|
+
* <div class="seeds-narrative-attribution-social-icon">...</div>
|
|
1442
|
+
* <span class="seeds-narrative-attribution-user-name">...</span>
|
|
1443
|
+
* </div>
|
|
1444
|
+
*/
|
|
1445
|
+
|
|
1446
|
+
@layer components {
|
|
1447
|
+
|
|
1448
|
+
/* Main container — horizontal layout with avatar, social icon, and user name. */
|
|
1449
|
+
.seeds-narrative-attribution {
|
|
1450
|
+
box-sizing: border-box;
|
|
1451
|
+
display: flex;
|
|
1452
|
+
align-items: center;
|
|
1453
|
+
gap: var(--space-300); /* 8px */;
|
|
1454
|
+
font-family: var(--font-family);
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
/* Circular avatar image — fixed size with rounded corners. */
|
|
1458
|
+
.seeds-narrative-attribution-avatar {
|
|
1459
|
+
width: var(--space-450); /* 24px */
|
|
1460
|
+
height: var(--space-450); /* 24px */
|
|
1461
|
+
border-radius: var(--radius-circular); /* 50% */
|
|
1462
|
+
object-fit: cover;
|
|
1463
|
+
flex-shrink: 0;
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
/* Social network icon container — flexible sizing for partner logos. */
|
|
1467
|
+
.seeds-narrative-attribution-social-icon {
|
|
1468
|
+
flex-shrink: 0;
|
|
1469
|
+
display: flex;
|
|
1470
|
+
align-items: center;
|
|
1471
|
+
justify-content: center;
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
/* User name text — bold headline text with ellipsis overflow. */
|
|
1475
|
+
.seeds-narrative-attribution-user-name {
|
|
1476
|
+
overflow: hidden;
|
|
1477
|
+
color: var(--color-text-headline);
|
|
1478
|
+
text-overflow: ellipsis;
|
|
1479
|
+
font-family: var(--font-family);
|
|
1480
|
+
font-size: var(--text-base-font-size, 14px);
|
|
1481
|
+
font-style: normal;
|
|
1482
|
+
font-weight: var(--font-weight-bold, 700);
|
|
1483
|
+
line-height: var(--text-base-line-height, 24px);
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1290
1488
|
/* --- seeds-react-narrative-kit --- */
|
|
1291
1489
|
/**
|
|
1292
1490
|
* Seeds NarrativeContainer component classes.
|
|
@@ -1345,6 +1543,111 @@
|
|
|
1345
1543
|
|
|
1346
1544
|
}
|
|
1347
1545
|
|
|
1546
|
+
/* --- seeds-react-narrative-kit --- */
|
|
1547
|
+
/**
|
|
1548
|
+
* Seeds NarrativeDataCallout component classes.
|
|
1549
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
1550
|
+
*
|
|
1551
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
1552
|
+
* CSS variable definitions and dark mode support.
|
|
1553
|
+
*
|
|
1554
|
+
* The layout is a flex row driven by a container query on the root, so the
|
|
1555
|
+
* visual/text columns stack based on the width the component is given, not the
|
|
1556
|
+
* viewport.
|
|
1557
|
+
*
|
|
1558
|
+
* Usage:
|
|
1559
|
+
* <div class="seeds-narrative-data-callout">
|
|
1560
|
+
* <div class="seeds-narrative-data-callout-row">
|
|
1561
|
+
* <div class="seeds-narrative-data-callout-visual">…chart…</div>
|
|
1562
|
+
* <div class="seeds-narrative-data-callout-body">…copy…</div>
|
|
1563
|
+
* </div>
|
|
1564
|
+
* </div>
|
|
1565
|
+
*/
|
|
1566
|
+
|
|
1567
|
+
@layer components {
|
|
1568
|
+
|
|
1569
|
+
/* Establishes the query container. The row inside reacts to this element's
|
|
1570
|
+
inline size. A container query only styles DESCENDANTS of the query container,
|
|
1571
|
+
so the flex row lives on the inner element, not this one. */
|
|
1572
|
+
.seeds-narrative-data-callout {
|
|
1573
|
+
container-type: inline-size;
|
|
1574
|
+
box-sizing: border-box;
|
|
1575
|
+
font-family: var(--font-family);
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
/* Stacked single column by default (narrow). The container query below turns it
|
|
1579
|
+
into the horizontal 1/3 + 2/3 row once there is room. */
|
|
1580
|
+
.seeds-narrative-data-callout-row {
|
|
1581
|
+
box-sizing: border-box;
|
|
1582
|
+
display: flex;
|
|
1583
|
+
flex-direction: column;
|
|
1584
|
+
align-items: center;
|
|
1585
|
+
gap: var(--space-450); /* 24px */
|
|
1586
|
+
}
|
|
1587
|
+
|
|
1588
|
+
/* Visual slot — layout only, no stroke/background so the injected chart controls
|
|
1589
|
+
its own look and its own size. No fixed height: charts like the data-viz
|
|
1590
|
+
DonutChart carry their own intrinsic height (and a legend), so the slot sizes
|
|
1591
|
+
to the chart rather than clipping it. Stacked full-width until the container
|
|
1592
|
+
query expands the row. */
|
|
1593
|
+
.seeds-narrative-data-callout-visual {
|
|
1594
|
+
box-sizing: border-box;
|
|
1595
|
+
display: flex;
|
|
1596
|
+
align-items: center;
|
|
1597
|
+
justify-content: center;
|
|
1598
|
+
width: 100%;
|
|
1599
|
+
min-width: 0;
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
/* Stretch the injected visual to the slot's full width. A fluid-width chart like
|
|
1603
|
+
the v2 DonutChart otherwise shrinks to content inside this centered flex slot,
|
|
1604
|
+
so Highcharts fills that shrunk width and the ring gets width-capped below its
|
|
1605
|
+
fixed 270px height — leaving an empty vertical band. Filling the width lets the
|
|
1606
|
+
ring become height-capped and fill its box top-to-bottom, like the standalone
|
|
1607
|
+
chart story. */
|
|
1608
|
+
.seeds-narrative-data-callout-visual > * {
|
|
1609
|
+
width: 100%;
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
/* Body copy — fills the remaining space. */
|
|
1613
|
+
.seeds-narrative-data-callout-body {
|
|
1614
|
+
box-sizing: border-box;
|
|
1615
|
+
min-width: 0;
|
|
1616
|
+
font-size: var(--font-size-300); /* 16px */
|
|
1617
|
+
line-height: var(--line-height-400); /* ~28px */
|
|
1618
|
+
font-weight: var(--font-weight-normal);
|
|
1619
|
+
color: var(--color-text-body);
|
|
1620
|
+
overflow-wrap: break-word;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
/* Expand to the horizontal 1/3 + 2/3 split once the component is wide enough.
|
|
1624
|
+
The threshold is on the component's own width (container query), so a narrow
|
|
1625
|
+
callout on a wide screen still stacks. 480px keeps the donut + copy readable
|
|
1626
|
+
side by side. */
|
|
1627
|
+
@container (min-width: 480px) {
|
|
1628
|
+
.seeds-narrative-data-callout-row {
|
|
1629
|
+
flex-direction: row;
|
|
1630
|
+
}
|
|
1631
|
+
|
|
1632
|
+
.seeds-narrative-data-callout-visual {
|
|
1633
|
+
/* Nominally one-third, but never narrower than the injected chart's fixed
|
|
1634
|
+
height (the v2 DonutChart is 270px tall). Below that width a fluid-width,
|
|
1635
|
+
fixed-height chart like the donut gets width-capped and leaves an empty
|
|
1636
|
+
vertical band above/below the ring; the min-width keeps the visual square
|
|
1637
|
+
enough that the ring fills its box top-to-bottom, matching the standalone
|
|
1638
|
+
chart story. */
|
|
1639
|
+
flex: 0 0 33.333%;
|
|
1640
|
+
min-width: 270px;
|
|
1641
|
+
width: auto;
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
.seeds-narrative-data-callout-body {
|
|
1645
|
+
flex: 1 1 0;
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1348
1651
|
/* --- seeds-react-narrative-kit --- */
|
|
1349
1652
|
/**
|
|
1350
1653
|
* Seeds NarrativeDivider component classes.
|
|
@@ -1510,69 +1813,267 @@
|
|
|
1510
1813
|
|
|
1511
1814
|
/* --- seeds-react-narrative-kit --- */
|
|
1512
1815
|
/**
|
|
1513
|
-
* Seeds
|
|
1816
|
+
* Seeds NarrativeOrderedList component classes.
|
|
1514
1817
|
* Use these instead of writing out individual Tailwind utility classes.
|
|
1515
1818
|
*
|
|
1516
1819
|
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
1517
|
-
* CSS variable definitions and dark mode support.
|
|
1518
|
-
* narrative-headline.css (headline) and eyebrow-token.css (eyebrow).
|
|
1519
|
-
*
|
|
1520
|
-
* The layout is a CSS grid driven by a container query on the root, so the
|
|
1521
|
-
* columns collapse based on the width the component is given, not the viewport.
|
|
1820
|
+
* CSS variable definitions and dark mode support.
|
|
1522
1821
|
*
|
|
1523
1822
|
* Usage:
|
|
1524
|
-
* <div class="seeds-narrative-
|
|
1525
|
-
* <
|
|
1823
|
+
* <div class="seeds-narrative-ordered-list">
|
|
1824
|
+
* <ol class="seeds-narrative-ordered-list-track">
|
|
1825
|
+
* <li class="seeds-narrative-ordered-list-item">…</li>
|
|
1826
|
+
* </ol>
|
|
1526
1827
|
* </div>
|
|
1527
1828
|
*/
|
|
1528
1829
|
|
|
1529
1830
|
@layer components {
|
|
1530
1831
|
|
|
1531
|
-
/* Establishes the query container. The
|
|
1532
|
-
inline size
|
|
1533
|
-
.
|
|
1832
|
+
/* Establishes the query container. The track inside reacts to this element's
|
|
1833
|
+
inline size — a container query can only style descendants of the container,
|
|
1834
|
+
never the container element itself. */
|
|
1835
|
+
.seeds-narrative-ordered-list {
|
|
1534
1836
|
container-type: inline-size;
|
|
1535
1837
|
box-sizing: border-box;
|
|
1536
1838
|
font-family: var(--font-family);
|
|
1537
1839
|
}
|
|
1538
1840
|
|
|
1539
|
-
/*
|
|
1540
|
-
|
|
1541
|
-
.
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1841
|
+
/* The list itself, and the default (stacked) layout. The horizontal modifier
|
|
1842
|
+
only expands to a row once the container query below has room, so horizontal
|
|
1843
|
+
collapses back to this stack when narrow. */
|
|
1844
|
+
.seeds-narrative-ordered-list-track {
|
|
1845
|
+
display: flex;
|
|
1846
|
+
flex-direction: column;
|
|
1847
|
+
gap: var(--space-400); /* 16px */
|
|
1848
|
+
margin: 0;
|
|
1849
|
+
padding: 0;
|
|
1850
|
+
list-style: none;
|
|
1545
1851
|
}
|
|
1546
1852
|
|
|
1547
|
-
/*
|
|
1548
|
-
|
|
1549
|
-
column's default stretch would blow the eyebrow out to full width. The
|
|
1550
|
-
headline still fills and wraps because its text is wider than the track. */
|
|
1551
|
-
.seeds-narrative-summary-lead {
|
|
1853
|
+
/* An item row: the ordinal beside the body, on its own rounded surface. */
|
|
1854
|
+
.seeds-narrative-ordered-list-item {
|
|
1552
1855
|
display: flex;
|
|
1553
|
-
|
|
1856
|
+
gap: var(--space-450); /* 24px */
|
|
1554
1857
|
align-items: flex-start;
|
|
1555
|
-
|
|
1858
|
+
box-sizing: border-box;
|
|
1556
1859
|
min-width: 0;
|
|
1860
|
+
padding: var(--space-400) var(--space-450); /* 16px 24px */
|
|
1861
|
+
border-radius: var(--radius-800); /* 12px */
|
|
1862
|
+
background-color: var(--color-app-bg-base);
|
|
1557
1863
|
}
|
|
1558
1864
|
|
|
1559
|
-
/* The
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
two sections become grid items in their own columns. In two-column mode the
|
|
1570
|
-
container query below turns it into a real, stacking grid item. */
|
|
1571
|
-
.seeds-narrative-summary-content {
|
|
1572
|
-
display: contents;
|
|
1865
|
+
/* The ordinal (01, 02, …). No mono token exists yet, so fall back to a system
|
|
1866
|
+
monospace stack — mirrors the value treatment in metric-highlight.css. */
|
|
1867
|
+
.seeds-narrative-ordered-list-number {
|
|
1868
|
+
margin: 0;
|
|
1869
|
+
flex-shrink: 0;
|
|
1870
|
+
font-family: var(--font-family-mono, ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace);
|
|
1871
|
+
font-size: var(--font-size-700); /* 32px */
|
|
1872
|
+
line-height: var(--line-height-700); /* 40px */
|
|
1873
|
+
font-weight: var(--font-weight-bold);
|
|
1874
|
+
color: var(--color-text-headline);
|
|
1573
1875
|
}
|
|
1574
1876
|
|
|
1575
|
-
.
|
|
1877
|
+
/* Title + description + optional action, stacked. */
|
|
1878
|
+
.seeds-narrative-ordered-list-body {
|
|
1879
|
+
flex: 1 1 auto;
|
|
1880
|
+
display: flex;
|
|
1881
|
+
flex-direction: column;
|
|
1882
|
+
gap: var(--space-200); /* 4px */
|
|
1883
|
+
min-width: 0;
|
|
1884
|
+
}
|
|
1885
|
+
|
|
1886
|
+
/* Title. 16px / 28px — the 28px line-height has no exact type token (the scale
|
|
1887
|
+
skips from 24px to 32px), so the design value is kept verbatim. Same
|
|
1888
|
+
rationale as narrative-summary.css. */
|
|
1889
|
+
.seeds-narrative-ordered-list-title {
|
|
1890
|
+
margin: 0;
|
|
1891
|
+
font-size: var(--font-size-300); /* 16px */
|
|
1892
|
+
line-height: 28px; /* off-scale, see comment above */
|
|
1893
|
+
font-weight: var(--font-weight-bold);
|
|
1894
|
+
color: var(--color-text-body);
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1897
|
+
/* Description. 14px / 24px has no exact type token, so it is kept verbatim —
|
|
1898
|
+
same rationale as the title above. */
|
|
1899
|
+
.seeds-narrative-ordered-list-description {
|
|
1900
|
+
margin: 0;
|
|
1901
|
+
font-size: 14px; /* off-scale, see title above */
|
|
1902
|
+
line-height: 24px;
|
|
1903
|
+
font-weight: var(--font-weight-normal);
|
|
1904
|
+
color: var(--color-text-body);
|
|
1905
|
+
}
|
|
1906
|
+
|
|
1907
|
+
.seeds-narrative-ordered-list-action {
|
|
1908
|
+
padding-top: var(--space-350); /* 12px */
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1911
|
+
/* Expand the horizontal variant to a row of equal columns once the component is
|
|
1912
|
+
wide enough. The threshold is on the component's own width (container query),
|
|
1913
|
+
so a narrow card on a wide screen still stacks. 640px = Tailwind/Seeds sm
|
|
1914
|
+
breakpoint, matching narrative-summary.css. */
|
|
1915
|
+
@container (min-width: 640px) {
|
|
1916
|
+
.seeds-narrative-ordered-list-horizontal {
|
|
1917
|
+
flex-direction: row;
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
.seeds-narrative-ordered-list-horizontal > .seeds-narrative-ordered-list-item {
|
|
1921
|
+
flex: 1 1 0;
|
|
1922
|
+
min-width: 0;
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
}
|
|
1927
|
+
|
|
1928
|
+
/* --- seeds-react-narrative-kit --- */
|
|
1929
|
+
/**
|
|
1930
|
+
* Seeds NarrativeSocialMediaCard component classes.
|
|
1931
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
1932
|
+
*
|
|
1933
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
1934
|
+
* CSS variable definitions and dark mode support.
|
|
1935
|
+
*
|
|
1936
|
+
* Usage:
|
|
1937
|
+
* <div class="seeds-narrative-social-media-card">
|
|
1938
|
+
* <div class="seeds-narrative-social-media-card-header">...</div>
|
|
1939
|
+
* <div class="seeds-narrative-social-media-card-content">...</div>
|
|
1940
|
+
* <div class="seeds-narrative-social-media-card-footer">...</div>
|
|
1941
|
+
* </div>
|
|
1942
|
+
*/
|
|
1943
|
+
|
|
1944
|
+
/* Import dependent component styles */
|
|
1945
|
+
@import "./narrative-attribution.css";
|
|
1946
|
+
|
|
1947
|
+
@layer components {
|
|
1948
|
+
|
|
1949
|
+
/* Main card container — gray background with rounded corners and padding.
|
|
1950
|
+
Uses Seeds tokens for spacing, colors, and radius to match the design system. */
|
|
1951
|
+
.seeds-narrative-social-media-card {
|
|
1952
|
+
box-sizing: border-box;
|
|
1953
|
+
display: flex;
|
|
1954
|
+
flex-direction: column;
|
|
1955
|
+
align-items: flex-start;
|
|
1956
|
+
max-width: 320px;
|
|
1957
|
+
padding: var(--space-450); /* 24px */
|
|
1958
|
+
border-radius: var(--radius-500); /* 6px */
|
|
1959
|
+
background-color: var(--color-app-bg-base);
|
|
1960
|
+
font-family: var(--font-family);
|
|
1961
|
+
color: var(--color-text-body);
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
/* No background — transparent background for cards that blend seamlessly with the page. */
|
|
1965
|
+
.seeds-narrative-social-media-card--no-background {
|
|
1966
|
+
background-color: transparent;
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1969
|
+
/* Main content area — standard body text styling. */
|
|
1970
|
+
.seeds-narrative-social-media-card-content {
|
|
1971
|
+
flex: 1;
|
|
1972
|
+
margin-top: var(--space-400); /* 16px */
|
|
1973
|
+
font-family: var(--font-family);
|
|
1974
|
+
font-size: 14px;
|
|
1975
|
+
font-style: normal;
|
|
1976
|
+
font-weight: 400;
|
|
1977
|
+
line-height: 24px;
|
|
1978
|
+
color: var(--color-text-body);
|
|
1979
|
+
}
|
|
1980
|
+
|
|
1981
|
+
/* Footer section — horizontal layout for stats with equal spacing. */
|
|
1982
|
+
.seeds-narrative-social-media-card-footer {
|
|
1983
|
+
display: flex;
|
|
1984
|
+
align-items: center;
|
|
1985
|
+
gap: var(--space-400); /* 16px */
|
|
1986
|
+
margin-top: var(--space-400); /* 16px */;
|
|
1987
|
+
}
|
|
1988
|
+
|
|
1989
|
+
/* Hide footer when empty (no metadata items). */
|
|
1990
|
+
.seeds-narrative-social-media-card-footer:empty {
|
|
1991
|
+
display: none;
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1994
|
+
/* Individual stat container — icon + value in horizontal layout. */
|
|
1995
|
+
.seeds-narrative-social-media-card-stat {
|
|
1996
|
+
display: flex;
|
|
1997
|
+
align-items: center;
|
|
1998
|
+
gap: var(--space-200); /* 4px */
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
/* Stat value text — monospace font for numeric values. */
|
|
2002
|
+
.seeds-narrative-social-media-card-stat-value {
|
|
2003
|
+
font-family: var(--font-family-mono, ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace); font-size: 14px;
|
|
2004
|
+
font-style: normal;
|
|
2005
|
+
font-weight: 400;
|
|
2006
|
+
line-height: 24px;
|
|
2007
|
+
color: var(--color-text-body);
|
|
2008
|
+
}
|
|
2009
|
+
|
|
2010
|
+
}
|
|
2011
|
+
|
|
2012
|
+
/* --- seeds-react-narrative-kit --- */
|
|
2013
|
+
/**
|
|
2014
|
+
* Seeds NarrativeSummary component classes.
|
|
2015
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
2016
|
+
*
|
|
2017
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
2018
|
+
* CSS variable definitions and dark mode support. Also relies on
|
|
2019
|
+
* narrative-headline.css (headline) and eyebrow-token.css (eyebrow).
|
|
2020
|
+
*
|
|
2021
|
+
* The layout is a CSS grid driven by a container query on the root, so the
|
|
2022
|
+
* columns collapse based on the width the component is given, not the viewport.
|
|
2023
|
+
*
|
|
2024
|
+
* Usage:
|
|
2025
|
+
* <div class="seeds-narrative-summary">
|
|
2026
|
+
* <div class="seeds-narrative-summary-grid">…</div>
|
|
2027
|
+
* </div>
|
|
2028
|
+
*/
|
|
2029
|
+
|
|
2030
|
+
@layer components {
|
|
2031
|
+
|
|
2032
|
+
/* Establishes the query container. The grid inside reacts to this element's
|
|
2033
|
+
inline size. */
|
|
2034
|
+
.seeds-narrative-summary {
|
|
2035
|
+
container-type: inline-size;
|
|
2036
|
+
box-sizing: border-box;
|
|
2037
|
+
font-family: var(--font-family);
|
|
2038
|
+
}
|
|
2039
|
+
|
|
2040
|
+
/* Stacked single column by default (narrow). The container query below expands
|
|
2041
|
+
it once there is room. */
|
|
2042
|
+
.seeds-narrative-summary-grid {
|
|
2043
|
+
display: grid;
|
|
2044
|
+
grid-template-columns: 1fr;
|
|
2045
|
+
gap: var(--space-450); /* 24px */
|
|
2046
|
+
}
|
|
2047
|
+
|
|
2048
|
+
/* The lead column: eyebrow, headline, optional action. align-items:flex-start
|
|
2049
|
+
keeps the eyebrow pill and the action sized to their content — without it the
|
|
2050
|
+
column's default stretch would blow the eyebrow out to full width. The
|
|
2051
|
+
headline still fills and wraps because its text is wider than the track. */
|
|
2052
|
+
.seeds-narrative-summary-lead {
|
|
2053
|
+
display: flex;
|
|
2054
|
+
flex-direction: column;
|
|
2055
|
+
align-items: flex-start;
|
|
2056
|
+
gap: var(--space-300); /* 8px */
|
|
2057
|
+
min-width: 0;
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2060
|
+
/* The headline area grows so the action anchors toward the bottom of the lead
|
|
2061
|
+
column when the neighboring columns are taller. align-self:stretch fills the
|
|
2062
|
+
track width (the lead column pins other items to flex-start) so the headline
|
|
2063
|
+
wraps at the column edge regardless of its length. */
|
|
2064
|
+
.seeds-narrative-summary-headline {
|
|
2065
|
+
flex: 1 1 auto;
|
|
2066
|
+
align-self: stretch;
|
|
2067
|
+
}
|
|
2068
|
+
|
|
2069
|
+
/* In three-column mode the content wrapper is transparent to the grid, so its
|
|
2070
|
+
two sections become grid items in their own columns. In two-column mode the
|
|
2071
|
+
container query below turns it into a real, stacking grid item. */
|
|
2072
|
+
.seeds-narrative-summary-content {
|
|
2073
|
+
display: contents;
|
|
2074
|
+
}
|
|
2075
|
+
|
|
2076
|
+
.seeds-narrative-summary-section {
|
|
1576
2077
|
display: flex;
|
|
1577
2078
|
flex-direction: column;
|
|
1578
2079
|
gap: var(--space-300); /* 8px */
|
|
@@ -1641,20 +2142,17 @@
|
|
|
1641
2142
|
* Seeds PullQuote component classes.
|
|
1642
2143
|
* Use these instead of writing out individual Tailwind utility classes.
|
|
1643
2144
|
*
|
|
1644
|
-
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css
|
|
1645
|
-
* CSS variable definitions and
|
|
2145
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css and
|
|
2146
|
+
* ai-container.css imported for CSS variable definitions and surface styles.
|
|
1646
2147
|
*
|
|
1647
2148
|
* Usage:
|
|
1648
|
-
* <figure class="seeds-pull-quote">…</figure> // subtle (default)
|
|
1649
|
-
* <figure class="seeds-pull-quote seeds-pull-quote-vivid">…</figure>
|
|
2149
|
+
* <figure class="seeds-pull-quote seeds-ai-container">…</figure> // subtle (default)
|
|
2150
|
+
* <figure class="seeds-pull-quote seeds-ai-container seeds-ai-container-vivid seeds-pull-quote-vivid">…</figure>
|
|
1650
2151
|
*/
|
|
1651
2152
|
|
|
1652
2153
|
@layer components {
|
|
1653
2154
|
|
|
1654
2155
|
.seeds-pull-quote {
|
|
1655
|
-
position: relative;
|
|
1656
|
-
overflow: hidden;
|
|
1657
|
-
box-sizing: border-box;
|
|
1658
2156
|
width: 100%;
|
|
1659
2157
|
display: flex;
|
|
1660
2158
|
flex-direction: column;
|
|
@@ -1663,24 +2161,6 @@
|
|
|
1663
2161
|
/* 40px block / 48px inline — 48px is off the space scale, so derive it from
|
|
1664
2162
|
two tokens (40 + 8) rather than hardcoding an off-scale value. */
|
|
1665
2163
|
padding: var(--space-600) calc(var(--space-600) + var(--space-300));
|
|
1666
|
-
border-radius: var(--radius-800);
|
|
1667
|
-
box-shadow: var(--shadow-low);
|
|
1668
|
-
font-family: var(--font-family);
|
|
1669
|
-
/* Subtle (default): the 20% AI gradient tint composited over the base
|
|
1670
|
-
surface. --color-gradient-ai-subtle is already translucent, so layering it
|
|
1671
|
-
over the opaque base color produces the soft wash. */
|
|
1672
|
-
background-color: var(--color-container-bg-base);
|
|
1673
|
-
background-image: var(--color-gradient-ai-subtle);
|
|
1674
|
-
color: var(--color-text-headline);
|
|
1675
|
-
}
|
|
1676
|
-
|
|
1677
|
-
/* Vivid: the full-saturation AI gradient with white content. White has no
|
|
1678
|
-
semantic Seeds token; it is part of the AI gradient treatment (mirrors the
|
|
1679
|
-
raw brand hex used in --color-gradient-ai). */
|
|
1680
|
-
.seeds-pull-quote-vivid {
|
|
1681
|
-
background-color: transparent;
|
|
1682
|
-
background-image: var(--color-gradient-ai);
|
|
1683
|
-
color: #fff;
|
|
1684
2164
|
}
|
|
1685
2165
|
|
|
1686
2166
|
/* The accented bar holding the quote and attribution. */
|
|
@@ -1727,6 +2207,197 @@
|
|
|
1727
2207
|
|
|
1728
2208
|
}
|
|
1729
2209
|
|
|
2210
|
+
/* --- seeds-react-progress --- */
|
|
2211
|
+
/**
|
|
2212
|
+
* Seeds Progress component classes
|
|
2213
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
2214
|
+
*
|
|
2215
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
2216
|
+
* CSS variable definitions and dark mode support.
|
|
2217
|
+
*
|
|
2218
|
+
* Usage:
|
|
2219
|
+
* <div class="Progress seeds-progress"><div class="seeds-progress-indicator" /></div>
|
|
2220
|
+
*/
|
|
2221
|
+
|
|
2222
|
+
@layer components {
|
|
2223
|
+
.seeds-progress {
|
|
2224
|
+
position: relative;
|
|
2225
|
+
overflow: hidden;
|
|
2226
|
+
width: 100%;
|
|
2227
|
+
height: 8px;
|
|
2228
|
+
border-radius: var(--radius-outer);
|
|
2229
|
+
background-color: var(--color-container-border-base);
|
|
2230
|
+
}
|
|
2231
|
+
|
|
2232
|
+
.seeds-progress-indicator {
|
|
2233
|
+
height: 100%;
|
|
2234
|
+
width: 100%;
|
|
2235
|
+
border-radius: var(--radius-outer);
|
|
2236
|
+
background-color: var(--color-icon-base);
|
|
2237
|
+
transition: transform 150ms ease;
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2241
|
+
/* --- seeds-react-select --- */
|
|
2242
|
+
/**
|
|
2243
|
+
* Seeds Select component classes
|
|
2244
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
2245
|
+
*
|
|
2246
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
2247
|
+
* CSS variable definitions and dark mode support.
|
|
2248
|
+
*
|
|
2249
|
+
* Usage:
|
|
2250
|
+
* <div class="seeds-select seeds-select-default">
|
|
2251
|
+
* <select class="seeds-select-input">…</select>
|
|
2252
|
+
* <span class="seeds-select-arrow seeds-select-arrow-default">…</span>
|
|
2253
|
+
* </div>
|
|
2254
|
+
*/
|
|
2255
|
+
|
|
2256
|
+
@layer components {
|
|
2257
|
+
.seeds-select {
|
|
2258
|
+
position: relative;
|
|
2259
|
+
box-sizing: border-box;
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
.seeds-select .seeds-select-input {
|
|
2263
|
+
box-sizing: border-box;
|
|
2264
|
+
width: 100%;
|
|
2265
|
+
border: 1px solid var(--color-form-border-base);
|
|
2266
|
+
border-radius: var(--radius-500);
|
|
2267
|
+
background-color: var(--color-form-bg-base);
|
|
2268
|
+
color: var(--color-text-body);
|
|
2269
|
+
cursor: pointer;
|
|
2270
|
+
outline: none;
|
|
2271
|
+
appearance: none;
|
|
2272
|
+
transition:
|
|
2273
|
+
border-color var(--duration-fast) var(--ease-ease_in),
|
|
2274
|
+
box-shadow var(--duration-fast) var(--ease-ease_in);
|
|
2275
|
+
font-family: var(--font-family);
|
|
2276
|
+
font-weight: var(--font-weight-normal);
|
|
2277
|
+
margin: 0;
|
|
2278
|
+
/* We do this because the Sprout app sets it to hidden in Classic mode. We can delete after Nectar launches. */
|
|
2279
|
+
visibility: visible;
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
/* kill the dropdown arrow on IE 11 */
|
|
2283
|
+
.seeds-select .seeds-select-input::-ms-expand {
|
|
2284
|
+
display: none;
|
|
2285
|
+
}
|
|
2286
|
+
|
|
2287
|
+
.seeds-select .seeds-select-input:focus {
|
|
2288
|
+
box-shadow:
|
|
2289
|
+
0 0 0 1px var(--color-button-primary-bg-base),
|
|
2290
|
+
0 0px 0px 4px
|
|
2291
|
+
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
2292
|
+
outline: none;
|
|
2293
|
+
}
|
|
2294
|
+
|
|
2295
|
+
/* Fix for red ring when input is marked required in Firefox */
|
|
2296
|
+
.seeds-select
|
|
2297
|
+
.seeds-select-input:not(output):not(:focus):-moz-ui-invalid {
|
|
2298
|
+
box-shadow: none;
|
|
2299
|
+
}
|
|
2300
|
+
|
|
2301
|
+
/* size: default */
|
|
2302
|
+
.seeds-select-default .seeds-select-input {
|
|
2303
|
+
padding: var(--space-300) var(--space-500) var(--space-300) var(--space-300);
|
|
2304
|
+
font-size: var(--font-size-200);
|
|
2305
|
+
line-height: normal;
|
|
2306
|
+
}
|
|
2307
|
+
|
|
2308
|
+
/* size: large */
|
|
2309
|
+
.seeds-select-large .seeds-select-input {
|
|
2310
|
+
padding: var(--space-350) var(--space-600) var(--space-350) var(--space-400);
|
|
2311
|
+
font-size: var(--font-size-300);
|
|
2312
|
+
line-height: var(--line-height-300);
|
|
2313
|
+
}
|
|
2314
|
+
|
|
2315
|
+
/* size: small */
|
|
2316
|
+
.seeds-select-small .seeds-select-input {
|
|
2317
|
+
padding: var(--space-200) var(--space-500) var(--space-200) var(--space-200);
|
|
2318
|
+
font-size: var(--font-size-200);
|
|
2319
|
+
line-height: normal;
|
|
2320
|
+
}
|
|
2321
|
+
|
|
2322
|
+
.seeds-select-arrow {
|
|
2323
|
+
position: absolute;
|
|
2324
|
+
top: 50%;
|
|
2325
|
+
transform: translateY(-50%);
|
|
2326
|
+
color: var(--color-icon-base);
|
|
2327
|
+
pointer-events: none;
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
.seeds-select-arrow-default,
|
|
2331
|
+
.seeds-select-arrow-small {
|
|
2332
|
+
right: var(--space-300);
|
|
2333
|
+
}
|
|
2334
|
+
|
|
2335
|
+
.seeds-select-arrow-large {
|
|
2336
|
+
right: var(--space-350);
|
|
2337
|
+
}
|
|
2338
|
+
|
|
2339
|
+
/* disabled */
|
|
2340
|
+
.seeds-select-disabled {
|
|
2341
|
+
opacity: 0.4;
|
|
2342
|
+
}
|
|
2343
|
+
|
|
2344
|
+
.seeds-select-disabled .seeds-select-input {
|
|
2345
|
+
cursor: not-allowed;
|
|
2346
|
+
}
|
|
2347
|
+
|
|
2348
|
+
/* invalid */
|
|
2349
|
+
.seeds-select-invalid .seeds-select-input {
|
|
2350
|
+
border-color: var(--color-form-border-error);
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
.seeds-select-invalid .seeds-select-arrow {
|
|
2354
|
+
color: var(--color-icon-error);
|
|
2355
|
+
}
|
|
2356
|
+
}
|
|
2357
|
+
|
|
2358
|
+
/* --- seeds-react-spot-illustration --- */
|
|
2359
|
+
/**
|
|
2360
|
+
* Seeds SpotIllustration component classes
|
|
2361
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
2362
|
+
*
|
|
2363
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
2364
|
+
* CSS variable definitions and dark mode support.
|
|
2365
|
+
*
|
|
2366
|
+
* Usage:
|
|
2367
|
+
* <svg class="seeds-spot-illustration seeds-spot-illustration-red">…</svg>
|
|
2368
|
+
*/
|
|
2369
|
+
|
|
2370
|
+
@layer components {
|
|
2371
|
+
.seeds-spot-illustration {
|
|
2372
|
+
fill: var(--color-illustration-fill);
|
|
2373
|
+
color: var(--color-illustration-stroke);
|
|
2374
|
+
}
|
|
2375
|
+
|
|
2376
|
+
.seeds-spot-illustration-red {
|
|
2377
|
+
fill: var(--color-red-400);
|
|
2378
|
+
}
|
|
2379
|
+
|
|
2380
|
+
.seeds-spot-illustration-green {
|
|
2381
|
+
fill: var(--color-green-400);
|
|
2382
|
+
}
|
|
2383
|
+
|
|
2384
|
+
.seeds-spot-illustration-yellow {
|
|
2385
|
+
fill: var(--color-yellow-400);
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
.seeds-spot-illustration-magenta {
|
|
2389
|
+
fill: var(--color-magenta-400);
|
|
2390
|
+
}
|
|
2391
|
+
|
|
2392
|
+
.seeds-spot-illustration-purple {
|
|
2393
|
+
fill: var(--color-purple-400);
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2396
|
+
.seeds-spot-illustration-aqua {
|
|
2397
|
+
fill: var(--color-aqua-400);
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
|
|
1730
2401
|
/* --- seeds-react-text --- */
|
|
1731
2402
|
/**
|
|
1732
2403
|
* Seeds Text component classes
|
|
@@ -1762,4 +2433,214 @@
|
|
|
1762
2433
|
word-break: break-word;
|
|
1763
2434
|
hyphens: auto;
|
|
1764
2435
|
}
|
|
2436
|
+
|
|
2437
|
+
.seeds-text-headline {
|
|
2438
|
+
color: var(--color-text-headline);
|
|
2439
|
+
font-weight: var(--font-weight-bold);
|
|
2440
|
+
font-size: var(--font-size-400);
|
|
2441
|
+
line-height: var(--line-height-400);
|
|
2442
|
+
}
|
|
2443
|
+
|
|
2444
|
+
.seeds-text-subheadline {
|
|
2445
|
+
color: var(--color-text-headline);
|
|
2446
|
+
font-weight: var(--font-weight-bold);
|
|
2447
|
+
font-size: var(--font-size-300);
|
|
2448
|
+
line-height: var(--line-height-300);
|
|
2449
|
+
}
|
|
2450
|
+
|
|
2451
|
+
.seeds-text-small-subheadline {
|
|
2452
|
+
color: var(--color-text-headline);
|
|
2453
|
+
font-weight: var(--font-weight-bold);
|
|
2454
|
+
font-size: var(--font-size-200);
|
|
2455
|
+
line-height: var(--line-height-200);
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2458
|
+
.seeds-text-byline {
|
|
2459
|
+
color: var(--color-text-subtext);
|
|
2460
|
+
font-weight: var(--font-weight-normal);
|
|
2461
|
+
font-size: var(--font-size-200);
|
|
2462
|
+
line-height: var(--line-height-200);
|
|
2463
|
+
}
|
|
2464
|
+
|
|
2465
|
+
.seeds-text-small-byline {
|
|
2466
|
+
color: var(--color-text-subtext);
|
|
2467
|
+
font-weight: var(--font-weight-normal);
|
|
2468
|
+
font-size: var(--font-size-100);
|
|
2469
|
+
line-height: var(--line-height-100);
|
|
2470
|
+
}
|
|
2471
|
+
|
|
2472
|
+
.seeds-text-body {
|
|
2473
|
+
color: var(--color-text-body);
|
|
2474
|
+
font-weight: var(--font-weight-normal);
|
|
2475
|
+
font-size: var(--font-size-300);
|
|
2476
|
+
line-height: var(--line-height-300);
|
|
2477
|
+
}
|
|
2478
|
+
|
|
2479
|
+
.seeds-text-small-body {
|
|
2480
|
+
color: var(--color-text-body);
|
|
2481
|
+
font-weight: var(--font-weight-normal);
|
|
2482
|
+
font-size: var(--font-size-200);
|
|
2483
|
+
line-height: var(--line-height-200);
|
|
2484
|
+
}
|
|
2485
|
+
}
|
|
2486
|
+
/* --- seeds-react-token --- */
|
|
2487
|
+
/**
|
|
2488
|
+
* Seeds Token component classes
|
|
2489
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
2490
|
+
*
|
|
2491
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
2492
|
+
* CSS variable definitions and dark mode support.
|
|
2493
|
+
*
|
|
2494
|
+
* Usage:
|
|
2495
|
+
* <button class="seeds-token seeds-token-closeable">Token</button>
|
|
2496
|
+
*/
|
|
2497
|
+
|
|
2498
|
+
@layer components {
|
|
2499
|
+
.seeds-token {
|
|
2500
|
+
position: relative;
|
|
2501
|
+
display: inline-flex;
|
|
2502
|
+
align-items: center;
|
|
2503
|
+
margin: 0;
|
|
2504
|
+
outline: none;
|
|
2505
|
+
font-family: var(--font-family);
|
|
2506
|
+
font-size: var(--font-size-200);
|
|
2507
|
+
line-height: 13px;
|
|
2508
|
+
font-weight: var(--font-weight-normal);
|
|
2509
|
+
border: 1px solid var(--color-container-border-base);
|
|
2510
|
+
border-radius: var(--radius-500);
|
|
2511
|
+
color: var(--color-text-body);
|
|
2512
|
+
background: var(--color-container-bg-base);
|
|
2513
|
+
padding: var(--space-200) var(--space-300);
|
|
2514
|
+
transition: all var(--duration-fast) var(--ease-ease_inout);
|
|
2515
|
+
}
|
|
2516
|
+
|
|
2517
|
+
.seeds-token:focus {
|
|
2518
|
+
box-shadow:
|
|
2519
|
+
0 0 0 1px var(--color-button-primary-bg-base),
|
|
2520
|
+
0 0px 0px 4px
|
|
2521
|
+
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
2522
|
+
outline: none;
|
|
2523
|
+
}
|
|
2524
|
+
|
|
2525
|
+
.seeds-token::-moz-focus-inner {
|
|
2526
|
+
border: 0;
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
/* closeable / clickable */
|
|
2530
|
+
.seeds-token-closeable {
|
|
2531
|
+
cursor: pointer;
|
|
2532
|
+
}
|
|
2533
|
+
|
|
2534
|
+
.seeds-token-closeable:hover,
|
|
2535
|
+
.seeds-token-closeable:active {
|
|
2536
|
+
box-shadow: var(--shadow-low);
|
|
2537
|
+
border: 1px solid
|
|
2538
|
+
color-mix(in srgb, var(--color-container-border-base), black 20%);
|
|
2539
|
+
}
|
|
2540
|
+
|
|
2541
|
+
/* palette="blue" */
|
|
2542
|
+
.seeds-token-blue {
|
|
2543
|
+
background: var(--color-container-bg-decorative-blue);
|
|
2544
|
+
border: 1px solid var(--color-container-border-decorative-blue);
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2547
|
+
.seeds-token-blue:hover,
|
|
2548
|
+
.seeds-token-blue:active {
|
|
2549
|
+
cursor: pointer;
|
|
2550
|
+
box-shadow: var(--shadow-low);
|
|
2551
|
+
border: 1px solid
|
|
2552
|
+
color-mix(in srgb, var(--color-container-border-decorative-blue), black 20%);
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
/* disabled */
|
|
2556
|
+
.seeds-token-disabled {
|
|
2557
|
+
opacity: 0.4;
|
|
2558
|
+
cursor: not-allowed;
|
|
2559
|
+
}
|
|
2560
|
+
|
|
2561
|
+
.seeds-token-disabled:hover,
|
|
2562
|
+
.seeds-token-disabled:active {
|
|
2563
|
+
box-shadow: none;
|
|
2564
|
+
border: 1px solid var(--color-container-border-base);
|
|
2565
|
+
}
|
|
2566
|
+
|
|
2567
|
+
/* valid={false} */
|
|
2568
|
+
.seeds-token-invalid {
|
|
2569
|
+
color: var(--color-text-error);
|
|
2570
|
+
background: var(--color-container-bg-error);
|
|
2571
|
+
border: 1px solid var(--color-container-border-error);
|
|
2572
|
+
}
|
|
2573
|
+
|
|
2574
|
+
.seeds-token-invalid:hover {
|
|
2575
|
+
box-shadow: var(--shadow-low);
|
|
2576
|
+
border: 1px solid
|
|
2577
|
+
color-mix(in srgb, var(--color-container-border-error), black 20%);
|
|
2578
|
+
}
|
|
2579
|
+
|
|
2580
|
+
/* hasWarning */
|
|
2581
|
+
.seeds-token-warning {
|
|
2582
|
+
background: var(--color-container-bg-warning);
|
|
2583
|
+
border: 1px solid var(--color-container-border-warning);
|
|
2584
|
+
}
|
|
2585
|
+
|
|
2586
|
+
.seeds-token-warning:hover {
|
|
2587
|
+
box-shadow: var(--shadow-low);
|
|
2588
|
+
border: 1px solid
|
|
2589
|
+
color-mix(in srgb, var(--color-container-border-warning), black 20%);
|
|
2590
|
+
}
|
|
2591
|
+
|
|
2592
|
+
/* isGenerated (AI) */
|
|
2593
|
+
.seeds-token-generated {
|
|
2594
|
+
background: var(--color-container-bg-ai_generated);
|
|
2595
|
+
border: 1px solid var(--color-container-border-ai_generated);
|
|
2596
|
+
color: var(--color-text-ai_generated);
|
|
2597
|
+
}
|
|
2598
|
+
|
|
2599
|
+
.seeds-token-generated:hover {
|
|
2600
|
+
box-shadow: var(--shadow-low);
|
|
2601
|
+
border: 1px solid
|
|
2602
|
+
color-mix(in srgb, var(--color-container-border-ai_generated), black 20%);
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
/* Dark mode: useInteractiveColor lightens (white) instead of darkening (black). */
|
|
2606
|
+
[data-theme="dark"] .seeds-token-closeable:hover,
|
|
2607
|
+
[data-theme="dark"] .seeds-token-closeable:active,
|
|
2608
|
+
.dark .seeds-token-closeable:hover,
|
|
2609
|
+
.dark .seeds-token-closeable:active,
|
|
2610
|
+
.lights-out .seeds-token-closeable:hover,
|
|
2611
|
+
.lights-out .seeds-token-closeable:active {
|
|
2612
|
+
border: 1px solid
|
|
2613
|
+
color-mix(in srgb, var(--color-container-border-base), white 20%);
|
|
2614
|
+
}
|
|
2615
|
+
|
|
2616
|
+
[data-theme="dark"] .seeds-token-blue:hover,
|
|
2617
|
+
[data-theme="dark"] .seeds-token-blue:active,
|
|
2618
|
+
.dark .seeds-token-blue:hover,
|
|
2619
|
+
.dark .seeds-token-blue:active,
|
|
2620
|
+
.lights-out .seeds-token-blue:hover,
|
|
2621
|
+
.lights-out .seeds-token-blue:active {
|
|
2622
|
+
border: 1px solid
|
|
2623
|
+
color-mix(in srgb, var(--color-container-border-decorative-blue), white 20%);
|
|
2624
|
+
}
|
|
2625
|
+
|
|
2626
|
+
[data-theme="dark"] .seeds-token-invalid:hover,
|
|
2627
|
+
.dark .seeds-token-invalid:hover,
|
|
2628
|
+
.lights-out .seeds-token-invalid:hover {
|
|
2629
|
+
border: 1px solid
|
|
2630
|
+
color-mix(in srgb, var(--color-container-border-error), white 20%);
|
|
2631
|
+
}
|
|
2632
|
+
|
|
2633
|
+
[data-theme="dark"] .seeds-token-warning:hover,
|
|
2634
|
+
.dark .seeds-token-warning:hover,
|
|
2635
|
+
.lights-out .seeds-token-warning:hover {
|
|
2636
|
+
border: 1px solid
|
|
2637
|
+
color-mix(in srgb, var(--color-container-border-warning), white 20%);
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
[data-theme="dark"] .seeds-token-generated:hover,
|
|
2641
|
+
.dark .seeds-token-generated:hover,
|
|
2642
|
+
.lights-out .seeds-token-generated:hover {
|
|
2643
|
+
border: 1px solid
|
|
2644
|
+
color-mix(in srgb, var(--color-container-border-ai_generated), white 20%);
|
|
2645
|
+
}
|
|
1765
2646
|
}
|