@sproutsocial/racine 31.7.1 → 31.7.4

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 CHANGED
@@ -1,5 +1,153 @@
1
1
  # Change Log
2
2
 
3
+ ## 31.7.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [917a951]
8
+ - Updated dependencies [6611f6a]
9
+ - Updated dependencies [ca608f7]
10
+ - Updated dependencies [6216473]
11
+ - @sproutsocial/seeds-react-icon@2.4.3
12
+ - @sproutsocial/seeds-react-numeral@1.0.51
13
+ - @sproutsocial/seeds-react-system-props@3.1.2
14
+ - @sproutsocial/seeds-react-partner-logo@1.7.16
15
+ - @sproutsocial/seeds-react-segmented-control@1.1.25
16
+ - @sproutsocial/seeds-react-accordion@0.4.51
17
+ - @sproutsocial/seeds-react-badge@2.0.37
18
+ - @sproutsocial/seeds-react-banner@1.1.25
19
+ - @sproutsocial/seeds-react-breadcrumb@1.1.10
20
+ - @sproutsocial/seeds-react-button@2.2.4
21
+ - @sproutsocial/seeds-react-card@1.1.45
22
+ - @sproutsocial/seeds-react-chart-legend@1.0.44
23
+ - @sproutsocial/seeds-react-checkbox@1.3.45
24
+ - @sproutsocial/seeds-react-content-header@0.2.23
25
+ - @sproutsocial/seeds-react-data-table@2.6.26
26
+ - @sproutsocial/seeds-react-datepicker@1.0.42
27
+ - @sproutsocial/seeds-react-drawer@2.2.11
28
+ - @sproutsocial/seeds-react-indicator@1.0.43
29
+ - @sproutsocial/seeds-react-input@1.5.30
30
+ - @sproutsocial/seeds-react-link@1.1.16
31
+ - @sproutsocial/seeds-react-list@0.3.30
32
+ - @sproutsocial/seeds-react-modal@2.5.26
33
+ - @sproutsocial/seeds-react-pagination@0.1.24
34
+ - @sproutsocial/seeds-react-panel@1.0.4
35
+ - @sproutsocial/seeds-react-peek-in@0.3.3
36
+ - @sproutsocial/seeds-react-rating@1.0.44
37
+ - @sproutsocial/seeds-react-select@1.1.44
38
+ - @sproutsocial/seeds-react-switch@1.2.42
39
+ - @sproutsocial/seeds-react-table@1.0.45
40
+ - @sproutsocial/seeds-react-toast@1.0.45
41
+ - @sproutsocial/seeds-react-token@1.5.10
42
+ - @sproutsocial/seeds-react-token-input@1.4.52
43
+ - @sproutsocial/seeds-react-tooltip@1.1.30
44
+ - @sproutsocial/seeds-react-avatar@1.1.20
45
+ - @sproutsocial/seeds-react-box@1.1.24
46
+ - @sproutsocial/seeds-react-character-counter@1.0.5
47
+ - @sproutsocial/seeds-react-chat-bubble@0.2.3
48
+ - @sproutsocial/seeds-react-container@0.3.18
49
+ - @sproutsocial/seeds-react-content-block@0.5.18
50
+ - @sproutsocial/seeds-react-duration@1.0.27
51
+ - @sproutsocial/seeds-react-empty-state@1.0.26
52
+ - @sproutsocial/seeds-react-fieldset@1.0.26
53
+ - @sproutsocial/seeds-react-form-field@1.1.20
54
+ - @sproutsocial/seeds-react-grid@0.2.8
55
+ - @sproutsocial/seeds-react-image@1.0.24
56
+ - @sproutsocial/seeds-react-keyboard-key@1.0.26
57
+ - @sproutsocial/seeds-react-label@1.0.26
58
+ - @sproutsocial/seeds-react-loader@1.0.26
59
+ - @sproutsocial/seeds-react-loader-button@1.0.49
60
+ - @sproutsocial/seeds-react-message@1.0.52
61
+ - @sproutsocial/seeds-react-popout@2.5.12
62
+ - @sproutsocial/seeds-react-progress@0.2.11
63
+ - @sproutsocial/seeds-react-radio@1.3.26
64
+ - @sproutsocial/seeds-react-skeleton@1.1.24
65
+ - @sproutsocial/seeds-react-stack@1.0.23
66
+ - @sproutsocial/seeds-react-tabs@1.4.14
67
+ - @sproutsocial/seeds-react-text@1.5.1
68
+ - @sproutsocial/seeds-react-textarea@1.0.25
69
+ - @sproutsocial/seeds-react-visually-hidden@1.0.25
70
+
71
+ ## 31.7.3
72
+
73
+ ### Patch Changes
74
+
75
+ - Updated dependencies [4f969e6]
76
+ - Updated dependencies [6c37edd]
77
+ - Updated dependencies [a64cdfd]
78
+ - @sproutsocial/seeds-react-rating@1.0.43
79
+ - @sproutsocial/seeds-react-skeleton@1.1.23
80
+ - @sproutsocial/seeds-react-textarea@1.0.24
81
+ - @sproutsocial/seeds-react-list@0.3.29
82
+
83
+ ## 31.7.2
84
+
85
+ ### Patch Changes
86
+
87
+ - Updated dependencies [0f4bfe2]
88
+ - Updated dependencies [85f9728]
89
+ - Updated dependencies [fa7d859]
90
+ - @sproutsocial/seeds-react-narrative-kit@0.6.0
91
+ - @sproutsocial/seeds-react-theme@4.2.0
92
+ - @sproutsocial/seeds-react-accordion@0.4.50
93
+ - @sproutsocial/seeds-react-avatar@1.1.19
94
+ - @sproutsocial/seeds-react-banner@1.1.24
95
+ - @sproutsocial/seeds-react-box@1.1.23
96
+ - @sproutsocial/seeds-react-breadcrumb@1.1.9
97
+ - @sproutsocial/seeds-react-card@1.1.44
98
+ - @sproutsocial/seeds-react-chart-legend@1.0.43
99
+ - @sproutsocial/seeds-react-container@0.3.17
100
+ - @sproutsocial/seeds-react-content-block@0.5.17
101
+ - @sproutsocial/seeds-react-data-table@2.6.25
102
+ - @sproutsocial/seeds-react-datepicker@1.0.41
103
+ - @sproutsocial/seeds-react-drawer@2.2.10
104
+ - @sproutsocial/seeds-react-duration@1.0.26
105
+ - @sproutsocial/seeds-react-empty-state@1.0.25
106
+ - @sproutsocial/seeds-react-fieldset@1.0.25
107
+ - @sproutsocial/seeds-react-form-field@1.1.19
108
+ - @sproutsocial/seeds-react-grid@0.2.7
109
+ - @sproutsocial/seeds-react-hooks@3.2.4
110
+ - @sproutsocial/seeds-react-icon@2.4.2
111
+ - @sproutsocial/seeds-react-image@1.0.23
112
+ - @sproutsocial/seeds-react-indicator@1.0.42
113
+ - @sproutsocial/seeds-react-keyboard-key@1.0.25
114
+ - @sproutsocial/seeds-react-label@1.0.25
115
+ - @sproutsocial/seeds-react-link@1.1.15
116
+ - @sproutsocial/seeds-react-list@0.3.28
117
+ - @sproutsocial/seeds-react-loader@1.0.25
118
+ - @sproutsocial/seeds-react-loader-button@1.0.48
119
+ - @sproutsocial/seeds-react-message@1.0.51
120
+ - @sproutsocial/seeds-react-mixins@4.3.9
121
+ - @sproutsocial/seeds-react-modal@2.5.25
122
+ - @sproutsocial/seeds-react-numeral@1.0.50
123
+ - @sproutsocial/seeds-react-pagination@0.1.23
124
+ - @sproutsocial/seeds-react-panel@1.0.3
125
+ - @sproutsocial/seeds-react-partner-logo@1.7.15
126
+ - @sproutsocial/seeds-react-progress@0.2.10
127
+ - @sproutsocial/seeds-react-rating@1.0.42
128
+ - @sproutsocial/seeds-react-segmented-control@1.1.24
129
+ - @sproutsocial/seeds-react-select@1.1.43
130
+ - @sproutsocial/seeds-react-skeleton@1.1.22
131
+ - @sproutsocial/seeds-react-stack@1.0.22
132
+ - @sproutsocial/seeds-react-table@1.0.44
133
+ - @sproutsocial/seeds-react-tabs@1.4.13
134
+ - @sproutsocial/seeds-react-textarea@1.0.23
135
+ - @sproutsocial/seeds-react-theme-provider@1.1.22
136
+ - @sproutsocial/seeds-react-toast@1.0.44
137
+ - @sproutsocial/seeds-react-token@1.5.9
138
+ - @sproutsocial/seeds-react-token-input@1.4.51
139
+ - @sproutsocial/seeds-react-tooltip@1.1.29
140
+ - @sproutsocial/seeds-react-visually-hidden@1.0.24
141
+ - @sproutsocial/seeds-react-badge@2.0.36
142
+ - @sproutsocial/seeds-react-checkbox@1.3.44
143
+ - @sproutsocial/seeds-react-content-header@0.2.22
144
+ - @sproutsocial/seeds-react-input@1.5.29
145
+ - @sproutsocial/seeds-react-peek-in@0.3.2
146
+ - @sproutsocial/seeds-react-popout@2.5.11
147
+ - @sproutsocial/seeds-react-button@2.2.3
148
+ - @sproutsocial/seeds-react-switch@1.2.41
149
+ - @sproutsocial/seeds-react-radio@1.3.25
150
+
3
151
  ## 31.7.1
4
152
 
5
153
  ### Patch Changes
@@ -929,6 +929,44 @@
929
929
  }
930
930
  }
931
931
 
932
+ /* --- seeds-react-icon --- */
933
+ /**
934
+ * Seeds Icon component classes
935
+ * Use these instead of writing out individual Tailwind utility classes.
936
+ *
937
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
938
+ * CSS variable definitions and dark mode support.
939
+ *
940
+ * The dynamic `size` prop is applied through the `--icon-size` custom property,
941
+ * set inline by IconTailwind (e.g. style={{ "--icon-size": "16px" }}).
942
+ *
943
+ * Usage:
944
+ * <span class="Icon seeds-icon" style="--icon-size: 16px">
945
+ * <svg class="Icon-svg" />
946
+ * </span>
947
+ */
948
+
949
+ @layer components {
950
+ .seeds-icon {
951
+ display: inline-block;
952
+ color: inherit;
953
+ vertical-align: middle;
954
+ line-height: var(--icon-size);
955
+ }
956
+
957
+ .seeds-icon,
958
+ .seeds-icon .Icon-svg {
959
+ height: var(--icon-size);
960
+ fill: currentColor;
961
+ }
962
+
963
+ /* width only applied when fixedWidth */
964
+ .seeds-icon-fixed-width,
965
+ .seeds-icon-fixed-width .Icon-svg {
966
+ width: var(--icon-size);
967
+ }
968
+ }
969
+
932
970
  /* --- seeds-react-link --- */
933
971
  /**
934
972
  * Seeds Link component classes
@@ -1277,6 +1315,11 @@
1277
1315
  .seeds-metric-highlight {
1278
1316
  box-sizing: border-box;
1279
1317
  display: flex;
1318
+ /* Wrap the fixed-width chart onto its own line when the metric block + chart
1319
+ can't sit side by side (narrow cards / mobile). The metric block claims its
1320
+ min-content width below, so a cramped row drops the chart down rather than
1321
+ overflowing the card and getting clipped by the container. */
1322
+ flex-wrap: wrap;
1280
1323
  align-items: flex-start;
1281
1324
  gap: var(--space-350); /* 12px */
1282
1325
  border-radius: var(--radius-800); /* 12px */
@@ -1303,8 +1346,11 @@
1303
1346
  flex-direction: column;
1304
1347
  align-items: flex-start;
1305
1348
  gap: var(--space-200); /* 4px */
1306
- flex: 1 0 0;
1307
- min-width: 0;
1349
+ /* Grow to fill the row, but never shrink below the metric's own content
1350
+ (the nowrap value + trend pill). That min-content floor is what forces the
1351
+ chart to wrap below on narrow cards instead of the row overflowing. */
1352
+ flex: 1 1 auto;
1353
+ min-width: min-content;
1308
1354
  }
1309
1355
 
1310
1356
  .seeds-metric-highlight-vertical .seeds-metric-highlight-metric {
@@ -1336,6 +1382,7 @@
1336
1382
 
1337
1383
  .seeds-metric-highlight-value-row {
1338
1384
  display: flex;
1385
+ flex-wrap: wrap; /* trend pill drops under the value on very narrow cards */
1339
1386
  align-items: center;
1340
1387
  gap: var(--space-300); /* 8px */
1341
1388
  }
@@ -1513,6 +1560,24 @@
1513
1560
  font-family: var(--font-family);
1514
1561
  }
1515
1562
 
1563
+ /* Grid and flex items default to `min-width: auto`, so they never shrink below
1564
+ their own min-content. A wide row of widgets (a metric grid, a card grid) then
1565
+ forces its column wider than the padded surface — and since the container clips
1566
+ with overflow:hidden, the excess is cut off at the edge, eating the right-hand
1567
+ padding, and the whole layout can't reflow down to mobile widths. Letting the
1568
+ container and its layout descendants shrink to zero lets the grids collapse to
1569
+ their fair 1fr share and reflow within the padding, so the padding stays
1570
+ consistent at every size.
1571
+
1572
+ Wrapped in :where() so the whole rule carries ZERO specificity — it is only a
1573
+ default. Any component that needs a real floor (e.g. the data callout's 270px
1574
+ donut slot) sets its own min-width via a plain class and always wins, instead
1575
+ of racing this rule on source order. */
1576
+ :where(.seeds-narrative-container),
1577
+ :where(.seeds-narrative-container *) {
1578
+ min-width: 0;
1579
+ }
1580
+
1516
1581
  /* Decorative inner gradient border anchored to the top-left corner.
1517
1582
  A masked ::before so the gradient renders as a uniform-width ring that follows
1518
1583
  border-radius and never tints the content. The radial ellipse fades to
@@ -1925,6 +1990,54 @@
1925
1990
 
1926
1991
  }
1927
1992
 
1993
+ /* --- seeds-react-narrative-kit --- */
1994
+ /**
1995
+ * Seeds NarrativeSection component classes.
1996
+ * Use these instead of writing out individual Tailwind utility classes.
1997
+ *
1998
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
1999
+ * CSS variable definitions and dark mode support.
2000
+ *
2001
+ * Usage:
2002
+ * <section class="seeds-narrative-section">
2003
+ * <h2 class="seeds-narrative-section-title">What's Happening</h2>
2004
+ * <div class="seeds-narrative-section-content">...</div>
2005
+ * </section>
2006
+ */
2007
+
2008
+ @layer components {
2009
+
2010
+ /* The wrapper stacks the title above the content with a small gap. It carries
2011
+ no surface of its own — it's meant to sit inside a NarrativeContainer. */
2012
+ .seeds-narrative-section {
2013
+ display: flex;
2014
+ flex-direction: column;
2015
+ gap: var(--space-400); /* 16px — title to content */
2016
+ }
2017
+
2018
+ /* The content slot stacks the section's widgets with the same 32px rhythm a
2019
+ single-column grid (gap={500}) would give them, so multiple primitives inside
2020
+ one section are spaced exactly as they are between sections. */
2021
+ .seeds-narrative-section-content {
2022
+ display: flex;
2023
+ flex-direction: column;
2024
+ gap: var(--space-500); /* 32px — between widgets */
2025
+ }
2026
+
2027
+ /* The section title: bold 14px/24px in the headline color token (#273333,
2028
+ which also tracks dark mode). Matches the summary-label recipe used across
2029
+ the kit. The heading element ships with user-agent margins, so reset them. */
2030
+ .seeds-narrative-section-title {
2031
+ margin: 0;
2032
+ font-family: var(--font-family);
2033
+ font-size: 14px;
2034
+ line-height: 24px;
2035
+ font-weight: var(--font-weight-bold);
2036
+ color: var(--color-text-headline); /* #273333 */
2037
+ }
2038
+
2039
+ }
2040
+
1928
2041
  /* --- seeds-react-narrative-kit --- */
1929
2042
  /**
1930
2043
  * Seeds NarrativeSocialMediaCard component classes.
@@ -1944,13 +2057,16 @@
1944
2057
  @layer components {
1945
2058
 
1946
2059
  /* Main card container — gray background with rounded corners and padding.
1947
- Uses Seeds tokens for spacing, colors, and radius to match the design system. */
2060
+ Uses Seeds tokens for spacing, colors, and radius to match the design system.
2061
+ Fills the width it is given (e.g. a grid column) and stretches its content to
2062
+ match, mirroring the horizontal NarrativeOrderedList — so a row of cards grows
2063
+ and resizes together instead of being pinned to a fixed 320px. */
1948
2064
  .seeds-narrative-social-media-card {
1949
2065
  box-sizing: border-box;
1950
2066
  display: flex;
1951
2067
  flex-direction: column;
1952
- align-items: flex-start;
1953
- max-width: 320px;
2068
+ align-items: stretch;
2069
+ width: 100%;
1954
2070
  padding: var(--space-450); /* 24px */
1955
2071
  border-radius: var(--radius-500); /* 6px */
1956
2072
  background-color: var(--color-app-bg-base);
@@ -2204,6 +2320,240 @@
2204
2320
 
2205
2321
  }
2206
2322
 
2323
+ /* --- seeds-react-numeral --- */
2324
+ /**
2325
+ * Seeds Numeral component classes
2326
+ * Use these instead of writing out individual Tailwind utility classes.
2327
+ *
2328
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2329
+ * CSS variable definitions and dark mode support.
2330
+ *
2331
+ * Usage:
2332
+ * <span class="seeds-numeral">1,234</span>
2333
+ * <span class="seeds-numeral seeds-numeral-abbr">1.2K</span>
2334
+ */
2335
+
2336
+ @layer components {
2337
+ .seeds-numeral {
2338
+ font-variant-numeric: tabular-nums;
2339
+ }
2340
+
2341
+ .seeds-numeral-abbr {
2342
+ border-bottom: 1px dotted var(--color-container-border-base);
2343
+ }
2344
+ }
2345
+
2346
+ /* --- seeds-react-partner-logo --- */
2347
+ /**
2348
+ * Seeds Partner Logo component classes
2349
+ * Use these instead of writing out individual Tailwind utility classes.
2350
+ *
2351
+ * Ships as a separate CSS file (pulled in by consumers via the package css
2352
+ * export) — not imported from TS, matching the Button component.
2353
+ *
2354
+ * Sizing is runtime-computed (logo size lookup or the height prop), so it is
2355
+ * applied through inline CSS custom properties set on the element's style attr:
2356
+ * --seeds-partner-logo-height container height + line-height + svg height
2357
+ * --seeds-partner-logo-svg-width svg width (unset => auto => sizes from viewBox)
2358
+ *
2359
+ * Usage:
2360
+ * <span class="seeds-partner-logo logo" style="--seeds-partner-logo-height: 16px">
2361
+ * <svg class="logo-svg">…</svg>
2362
+ * </span>
2363
+ */
2364
+
2365
+ @layer components {
2366
+ .seeds-partner-logo {
2367
+ display: inline-block;
2368
+ color: inherit;
2369
+ vertical-align: middle;
2370
+ height: var(--seeds-partner-logo-height);
2371
+ line-height: var(--seeds-partner-logo-height);
2372
+ }
2373
+
2374
+ .seeds-partner-logo .logo-svg {
2375
+ height: var(--seeds-partner-logo-height);
2376
+ /* unset => auto => svg sizes from its viewBox aspect ratio,
2377
+ matching stylesForSize's empty width declaration */
2378
+ width: var(--seeds-partner-logo-svg-width, auto);
2379
+ }
2380
+ }
2381
+
2382
+ /* --- seeds-react-profile --- */
2383
+ /**
2384
+ * Seeds InlineProfile component classes
2385
+ *
2386
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2387
+ * CSS variable definitions and dark mode support.
2388
+ */
2389
+
2390
+ @layer components {
2391
+ .seeds-inline-profile {
2392
+ display: inline-flex;
2393
+ flex-direction: row;
2394
+ align-items: center;
2395
+ gap: var(--space-200);
2396
+ max-width: 100%;
2397
+ font-size: var(--font-size-200);
2398
+ line-height: var(--line-height-200);
2399
+ color: var(--color-text-subtext);
2400
+ text-align: inherit;
2401
+ }
2402
+
2403
+ .seeds-inline-profile-avatar {
2404
+ display: inline-flex;
2405
+ flex-shrink: 0;
2406
+ }
2407
+
2408
+ .seeds-inline-profile-content {
2409
+ display: inline-flex;
2410
+ align-items: center;
2411
+ gap: var(--space-200);
2412
+ min-width: 0;
2413
+ flex: 1;
2414
+ }
2415
+
2416
+ .seeds-inline-profile-network {
2417
+ display: inline-flex;
2418
+ align-items: center;
2419
+ flex-shrink: 0;
2420
+ }
2421
+
2422
+ .seeds-inline-profile-text {
2423
+ display: inline-flex;
2424
+ flex-direction: row;
2425
+ align-items: center;
2426
+ gap: var(--space-200);
2427
+ min-width: 0;
2428
+ flex: 1;
2429
+ }
2430
+
2431
+ .seeds-inline-profile-name {
2432
+ display: inline-block;
2433
+ font-size: var(--font-size-200);
2434
+ line-height: var(--line-height-200);
2435
+ font-family: var(--font-family);
2436
+ font-weight: var(--font-weight-semibold);
2437
+ color: var(--color-text-body);
2438
+ max-width: 100%;
2439
+ overflow: hidden;
2440
+ text-overflow: ellipsis;
2441
+ white-space: nowrap;
2442
+ }
2443
+
2444
+ .seeds-inline-profile-handle {
2445
+ display: inline-block;
2446
+ font-size: var(--font-size-200);
2447
+ line-height: var(--line-height-200);
2448
+ font-family: var(--font-family);
2449
+ color: var(--color-text-subtext);
2450
+ max-width: 100%;
2451
+ overflow: hidden;
2452
+ text-overflow: ellipsis;
2453
+ white-space: nowrap;
2454
+ }
2455
+ }
2456
+
2457
+ /* --- seeds-react-profile --- */
2458
+ /**
2459
+ * Seeds ProfileCard component classes
2460
+ *
2461
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2462
+ * CSS variable definitions and dark mode support.
2463
+ *
2464
+ * The header background color is dynamic (consumer bannerColor or the network
2465
+ * color for the partner) and is supplied via the
2466
+ * --seeds-profile-card-banner-bg custom property set as an inline style on the
2467
+ * header element; the background declaration below consumes it.
2468
+ */
2469
+
2470
+ @layer components {
2471
+ .seeds-profile-card {
2472
+ max-width: 300px;
2473
+ border-radius: var(--radius-500);
2474
+ background-color: var(--color-container-bg-base);
2475
+ border: 1px solid var(--color-container-border-base);
2476
+ }
2477
+
2478
+ .seeds-profile-card-header {
2479
+ display: flex;
2480
+ flex-direction: row;
2481
+ position: relative;
2482
+ height: 80px;
2483
+ padding: var(--space-400) var(--space-400) 0 var(--space-400);
2484
+ margin-bottom: 0;
2485
+ color: var(--color-text-inverse);
2486
+ background: var(--seeds-profile-card-banner-bg, transparent);
2487
+ border-radius: var(--radius-500) var(--radius-500) 0 0;
2488
+ }
2489
+
2490
+ .seeds-profile-card-footer {
2491
+ border-top: 1px solid var(--color-container-border-base);
2492
+ border-radius: 0 0 var(--radius-500) var(--radius-500);
2493
+ padding: var(--space-400);
2494
+ }
2495
+
2496
+ .seeds-profile-card-banner-content {
2497
+ display: flex;
2498
+ justify-content: flex-end;
2499
+ width: 100%;
2500
+ }
2501
+
2502
+ .seeds-profile-card-actions {
2503
+ display: flex;
2504
+ justify-content: flex-end;
2505
+ gap: var(--space-100);
2506
+ padding: 0 var(--space-300);
2507
+ }
2508
+
2509
+ .seeds-profile-card-actions:empty {
2510
+ min-height: 44px;
2511
+ }
2512
+
2513
+ .seeds-profile-card-content {
2514
+ display: flex;
2515
+ flex-direction: column;
2516
+ gap: var(--space-300);
2517
+ padding: 0 var(--space-400) var(--space-400);
2518
+ }
2519
+
2520
+ .seeds-profile-card-name-section {
2521
+ display: flex;
2522
+ align-items: center;
2523
+ gap: var(--space-200);
2524
+ }
2525
+
2526
+ .seeds-profile-card-info-row {
2527
+ display: flex;
2528
+ align-items: center;
2529
+ gap: var(--space-300);
2530
+ }
2531
+ }
2532
+ /* --- seeds-react-profile --- */
2533
+ /**
2534
+ * Seeds ProfileToken component classes
2535
+ *
2536
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2537
+ * CSS variable definitions and dark mode support.
2538
+ */
2539
+
2540
+ @layer components {
2541
+ /*
2542
+ * The rendered element carries both .seeds-token (from Token) and
2543
+ * .seeds-profile-token at equal specificity, so the tighter profile padding
2544
+ * would otherwise depend on CSS concatenation order. The compound selector
2545
+ * raises specificity so this override deterministically wins over .seeds-token.
2546
+ */
2547
+ .seeds-token.seeds-profile-token {
2548
+ box-sizing: border-box;
2549
+ display: inline-flex;
2550
+ max-width: 100%;
2551
+ vertical-align: middle;
2552
+ padding: var(--space-100) var(--space-200);
2553
+ margin: var(--space-100) 0;
2554
+ }
2555
+ }
2556
+
2207
2557
  /* --- seeds-react-progress --- */
2208
2558
  /**
2209
2559
  * Seeds Progress component classes
@@ -2235,6 +2585,96 @@
2235
2585
  }
2236
2586
  }
2237
2587
 
2588
+ /* --- seeds-react-rating --- */
2589
+ @layer components {
2590
+ .seeds-rating {
2591
+ display: flex;
2592
+ align-items: center;
2593
+ }
2594
+ }
2595
+
2596
+ /* --- seeds-react-segmented-control --- */
2597
+ /**
2598
+ * Seeds SegmentedControl component classes
2599
+ * Use these instead of writing out individual Tailwind utility classes.
2600
+ *
2601
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2602
+ * CSS variable definitions and dark mode support. Dark mode works
2603
+ * automatically because the variables below are redefined under
2604
+ * [data-theme="dark"] in theme-all.css.
2605
+ *
2606
+ * Usage:
2607
+ * <div class="seeds-segmented-control">
2608
+ * <button class="seeds-segmented-control-item" data-state="on">One</button>
2609
+ * <button class="seeds-segmented-control-item" data-state="off">Two</button>
2610
+ * </div>
2611
+ */
2612
+
2613
+ /* Rules live in the Tailwind `components` cascade layer so that consumer
2614
+ utility classes (which Tailwind v4 emits in the later `utilities` layer, or
2615
+ unlayered) can override the component's own styles. Without this layer the
2616
+ unlayered component rules would always win the cascade and classes like
2617
+ `p-300`, `mx-200`, or `inline-flex` could not override them. */
2618
+ @layer components {
2619
+ .seeds-segmented-control {
2620
+ display: flex;
2621
+ border: 1px solid var(--color-button-secondary-border-base);
2622
+ border-radius: var(--radius-outer);
2623
+ padding: var(--space-100);
2624
+ font-family: var(--font-family);
2625
+ }
2626
+
2627
+ .seeds-segmented-control-disabled {
2628
+ opacity: 0.4;
2629
+ pointer-events: none;
2630
+ }
2631
+
2632
+ .seeds-segmented-control-item {
2633
+ flex: 1 1 auto;
2634
+ display: flex;
2635
+ align-items: center;
2636
+ justify-content: center;
2637
+ text-align: center;
2638
+ border: 0;
2639
+ cursor: pointer;
2640
+ color: var(--color-text-body);
2641
+ background: transparent;
2642
+ font-size: var(--font-size-200);
2643
+ font-weight: var(--font-weight-semibold);
2644
+ /* Matches default line height of Icon. Also matches the overall height of
2645
+ Input, Select, and Button. */
2646
+ line-height: 16px;
2647
+ border-radius: var(--radius-inner);
2648
+ /* To match the height of buttons... 350 padding - 2px top and bottom padding
2649
+ of the parent - 1px border on top and bottom */
2650
+ padding: calc(var(--space-350) - 6px);
2651
+ transition: all var(--duration-fast);
2652
+ }
2653
+
2654
+ .seeds-segmented-control-item + .seeds-segmented-control-item {
2655
+ margin-left: var(--space-100);
2656
+ }
2657
+
2658
+ .seeds-segmented-control-item:hover {
2659
+ background-color: var(--color-listItem-bg-hover);
2660
+ }
2661
+
2662
+ .seeds-segmented-control-item[data-state="on"] {
2663
+ color: var(--color-text-inverse);
2664
+ background-color: var(--color-listItem-bg-selected);
2665
+ }
2666
+
2667
+ .seeds-segmented-control-item[data-state="on"]:hover {
2668
+ background-color: var(--color-listItem-bg-selected);
2669
+ }
2670
+
2671
+ .seeds-segmented-control-item:disabled,
2672
+ .seeds-segmented-control-item[data-disabled] {
2673
+ opacity: 0.4;
2674
+ pointer-events: none;
2675
+ }
2676
+ }
2677
+
2238
2678
  /* --- seeds-react-select --- */
2239
2679
  /**
2240
2680
  * Seeds Select component classes
@@ -2352,21 +2792,145 @@
2352
2792
  }
2353
2793
  }
2354
2794
 
2355
- /* --- seeds-react-spot-illustration --- */
2795
+ /* --- seeds-react-skeleton --- */
2356
2796
  /**
2357
- * Seeds SpotIllustration component classes
2358
- * Use these instead of writing out individual Tailwind utility classes.
2797
+ * Seeds Skeleton component classes
2798
+ * Static reproduction of the styled-components Skeleton visuals.
2359
2799
  *
2360
2800
  * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2361
2801
  * CSS variable definitions and dark mode support.
2362
2802
  *
2363
2803
  * Usage:
2364
- * <svg class="seeds-spot-illustration seeds-spot-illustration-red">…</svg>
2804
+ * <div class="seeds-skeleton circular" style="width:48px;height:48px"></div>
2805
+ * <div class="seeds-skeleton linear" style="width:100%;height:16px"></div>
2806
+ *
2807
+ * The `--skeleton-radius` custom property (set inline from the `borderRadius`
2808
+ * prop) controls corner rounding for the linear surface; the circular variant
2809
+ * masks its own shape.
2365
2810
  */
2366
2811
 
2367
2812
  @layer components {
2368
- .seeds-spot-illustration {
2369
- fill: var(--color-illustration-fill);
2813
+ .seeds-skeleton {
2814
+ position: relative;
2815
+ background: var(--color-container-bg-decorative-neutral);
2816
+ overflow: hidden;
2817
+ border-radius: var(--skeleton-radius, 0);
2818
+ }
2819
+
2820
+ .seeds-skeleton.circular::before {
2821
+ position: absolute;
2822
+ top: -25%;
2823
+ left: -25%;
2824
+ content: "";
2825
+ background-image: conic-gradient(
2826
+ var(--color-container-bg-decorative-neutral) 270deg,
2827
+ var(--color-container-border-decorative-neutral) 300deg
2828
+ );
2829
+ height: 150%;
2830
+ width: 150%;
2831
+ animation: SkeletonRotate 2s infinite linear;
2832
+ }
2833
+
2834
+ .seeds-skeleton.circular::after {
2835
+ position: absolute;
2836
+ top: 50%;
2837
+ left: 50%;
2838
+ transform: translate(-50%, -50%);
2839
+ content: "";
2840
+ height: calc(100% - 8px);
2841
+ width: calc(100% - 8px);
2842
+ background: var(--color-app-bg-base);
2843
+ border-radius: 50%;
2844
+ }
2845
+
2846
+ .seeds-skeleton.linear {
2847
+ position: relative;
2848
+ background-image: linear-gradient(
2849
+ 288deg,
2850
+ var(--color-container-bg-decorative-neutral) 32%,
2851
+ var(--color-container-border-decorative-neutral),
2852
+ var(--color-container-bg-decorative-neutral) 68%
2853
+ );
2854
+ background-size: 400%;
2855
+ background-repeat: no-repeat;
2856
+ animation: SkeletonShimmer 2s linear infinite reverse;
2857
+ overflow: hidden;
2858
+ }
2859
+
2860
+ .seeds-skeleton.linear::after {
2861
+ position: absolute;
2862
+ bottom: 0;
2863
+ content: "";
2864
+ height: calc(100% - 4px);
2865
+ width: 100%;
2866
+ background: var(--color-container-bg-decorative-neutral);
2867
+ }
2868
+
2869
+ @media (prefers-reduced-motion) {
2870
+ .seeds-skeleton.linear,
2871
+ .seeds-skeleton.circular::before {
2872
+ animation: none;
2873
+ }
2874
+ .seeds-skeleton::before,
2875
+ .seeds-skeleton::after {
2876
+ display: none;
2877
+ }
2878
+ .seeds-skeleton.linear,
2879
+ .seeds-skeleton.circular {
2880
+ border: 1px solid var(--color-container-border-decorative-neutral);
2881
+ animation: SkeletonPulse 2s linear infinite alternate;
2882
+ }
2883
+ }
2884
+ }
2885
+
2886
+ @keyframes SkeletonRotate {
2887
+ 100% {
2888
+ transform: rotate(360deg);
2889
+ }
2890
+ }
2891
+
2892
+ @keyframes SkeletonShimmer {
2893
+ 0% {
2894
+ background-position: 0% 0;
2895
+ }
2896
+ 100% {
2897
+ background-position: 100% 0;
2898
+ }
2899
+ }
2900
+
2901
+ /*
2902
+ * The styled-components original faded the border via hex-alpha concatenation
2903
+ * (…neutral + "FF" → "1A"); that string trick does not translate to var(--…),
2904
+ * so the fade is reproduced with color-mix (≈10% alpha matches 0x1A).
2905
+ */
2906
+ @keyframes SkeletonPulse {
2907
+ 0% {
2908
+ border-color: var(--color-container-border-decorative-neutral);
2909
+ }
2910
+ 100% {
2911
+ border-color: color-mix(
2912
+ in srgb,
2913
+ var(--color-container-border-decorative-neutral) 10%,
2914
+ transparent
2915
+ );
2916
+ }
2917
+ }
2918
+
2919
+ /* --- seeds-react-spot-illustration --- */
2920
+ /**
2921
+ * Seeds SpotIllustration component classes
2922
+ * Use these instead of writing out individual Tailwind utility classes.
2923
+ *
2924
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2925
+ * CSS variable definitions and dark mode support.
2926
+ *
2927
+ * Usage:
2928
+ * <svg class="seeds-spot-illustration seeds-spot-illustration-red">…</svg>
2929
+ */
2930
+
2931
+ @layer components {
2932
+ .seeds-spot-illustration {
2933
+ fill: var(--color-illustration-fill);
2370
2934
  color: var(--color-illustration-stroke);
2371
2935
  }
2372
2936
 
@@ -2480,6 +3044,98 @@
2480
3044
  line-height: var(--line-height-200);
2481
3045
  }
2482
3046
  }
3047
+ /* --- seeds-react-textarea --- */
3048
+ /**
3049
+ * Seeds Textarea component classes
3050
+ * Use these instead of writing out individual Tailwind utility classes.
3051
+ *
3052
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
3053
+ * CSS variable definitions and dark mode support.
3054
+ *
3055
+ * Usage:
3056
+ * <div class="seeds-textarea">
3057
+ * <textarea class="seeds-textarea-input"></textarea>
3058
+ * </div>
3059
+ */
3060
+
3061
+ @layer components {
3062
+ .seeds-textarea {
3063
+ box-sizing: border-box;
3064
+ position: relative;
3065
+ }
3066
+
3067
+ .seeds-textarea-disabled {
3068
+ opacity: 0.4;
3069
+ }
3070
+
3071
+ .seeds-textarea-input {
3072
+ box-sizing: border-box;
3073
+ display: block;
3074
+ width: 100%;
3075
+ padding: var(--space-300);
3076
+ border: 1px solid var(--color-form-border-base);
3077
+ border-radius: var(--radius-500);
3078
+ background-color: var(--color-form-bg-base);
3079
+ color: var(--color-text-body);
3080
+ outline: none;
3081
+ resize: none;
3082
+ transition-property: border-color, box-shadow;
3083
+ transition-duration: var(--duration-fast);
3084
+ font-family: var(--font-family);
3085
+ font-size: var(--font-size-200);
3086
+ line-height: var(--line-height-200);
3087
+ font-weight: var(--font-weight-normal);
3088
+ appearance: none;
3089
+ }
3090
+
3091
+ .seeds-textarea-input:focus {
3092
+ box-shadow:
3093
+ 0 0 0 1px var(--color-button-primary-bg-base),
3094
+ 0 0 0 4px color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
3095
+ outline: none;
3096
+ }
3097
+
3098
+ .seeds-textarea-input::placeholder {
3099
+ color: var(--color-form-placeholder-base);
3100
+ font-style: italic;
3101
+ }
3102
+
3103
+ .seeds-textarea-input-resizable {
3104
+ resize: vertical;
3105
+ }
3106
+
3107
+ .seeds-textarea-input-before {
3108
+ padding-left: 40px;
3109
+ }
3110
+
3111
+ .seeds-textarea-input-after {
3112
+ padding-right: 40px;
3113
+ }
3114
+
3115
+ .seeds-textarea-input-disabled {
3116
+ cursor: not-allowed;
3117
+ }
3118
+
3119
+ .seeds-textarea-input-invalid {
3120
+ border-color: var(--color-form-border-error);
3121
+ }
3122
+
3123
+ .seeds-textarea-accessory {
3124
+ position: absolute;
3125
+ color: var(--color-icon-base);
3126
+ }
3127
+
3128
+ .seeds-textarea-accessory-before {
3129
+ top: var(--space-300);
3130
+ left: var(--space-350);
3131
+ }
3132
+
3133
+ .seeds-textarea-accessory-after {
3134
+ right: var(--space-350);
3135
+ bottom: var(--space-300);
3136
+ }
3137
+ }
3138
+
2483
3139
  /* --- seeds-react-token --- */
2484
3140
  /**
2485
3141
  * Seeds Token component classes
@@ -2641,3 +3297,323 @@
2641
3297
  color-mix(in srgb, var(--color-container-border-ai_generated), white 20%);
2642
3298
  }
2643
3299
  }
3300
+
3301
+ /* --- seeds-react-tree --- */
3302
+ /**
3303
+ * Seeds Tree component classes
3304
+ * CSS-class mirror of the styled-components that previously styled the tree
3305
+ * package (TreeStyles.tsx, TreeCombobox.tsx, Common/TreeSearchableSelectBase.tsx).
3306
+ *
3307
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
3308
+ * CSS variable definitions and dark mode support.
3309
+ *
3310
+ * Rules live in @layer components so consumer Tailwind utilities (which sit in
3311
+ * the later `utilities` layer) can override component styles on equal
3312
+ * specificity. Without the layer, these unlayered rules would out-rank any
3313
+ * utility class.
3314
+ *
3315
+ * Usage:
3316
+ * <ul class="seeds-tree" role="tree">
3317
+ * <li class="seeds-tree-item" role="treeitem">
3318
+ * <div class="seeds-tree-item-row" style="--tree-level: 1">…</div>
3319
+ * </li>
3320
+ * </ul>
3321
+ */
3322
+
3323
+ @layer components {
3324
+ /* ---------------------------------------------------------------------- */
3325
+ /* Tree / TreeItem (mirror of TreeStyles.tsx) */
3326
+ /* ---------------------------------------------------------------------- */
3327
+
3328
+ .seeds-tree {
3329
+ list-style: none;
3330
+ margin: 0;
3331
+ padding: 0;
3332
+ font-family: var(--font-family);
3333
+ font-size: var(--font-size-200);
3334
+ line-height: var(--line-height-200);
3335
+ color: var(--color-text-body);
3336
+ }
3337
+
3338
+ .seeds-tree-item {
3339
+ list-style: none;
3340
+ outline: none;
3341
+ }
3342
+
3343
+ /*
3344
+ * Tree rows stack tightly, so the standard outset Seeds focusRing bleeds
3345
+ * into adjacent rows. Use an inset outline so the ring is drawn just inside
3346
+ * the row's edge and never overlaps siblings or children.
3347
+ *
3348
+ * The same ring is drawn when [data-treeitem-active] is set so combobox
3349
+ * hosts that drive the tree via aria-activedescendant (no real DOM focus)
3350
+ * still get a visible "active" indicator on the row.
3351
+ */
3352
+ .seeds-tree-item:focus-visible > .seeds-tree-item-row,
3353
+ .seeds-tree-item[data-treeitem-active] > .seeds-tree-item-row {
3354
+ outline: 2px solid var(--color-button-primary-bg-base);
3355
+ outline-offset: -2px;
3356
+ }
3357
+
3358
+ .seeds-tree-item-row {
3359
+ display: flex;
3360
+ align-items: center;
3361
+ gap: var(--space-300);
3362
+ padding: var(--space-300);
3363
+ /* Indentation per depth: --tree-level is set inline on each row. */
3364
+ padding-left: calc(
3365
+ var(--space-300) + (var(--tree-level) - 1) * var(--space-400)
3366
+ );
3367
+ border-radius: var(--radius-400);
3368
+ cursor: pointer;
3369
+ user-select: none;
3370
+ background: transparent;
3371
+ transition: background-color var(--duration-fast) var(--ease-ease_in);
3372
+ }
3373
+
3374
+ .seeds-tree-item-row:hover {
3375
+ background: var(--color-listItem-bg-hover);
3376
+ }
3377
+
3378
+ .seeds-tree-item-row.selected {
3379
+ background: var(--color-listItem-bg-hover);
3380
+ font-weight: var(--font-weight-semibold);
3381
+ }
3382
+
3383
+ .seeds-tree-item-row.disabled {
3384
+ opacity: 0.4;
3385
+ cursor: not-allowed;
3386
+ pointer-events: none;
3387
+ }
3388
+
3389
+ .seeds-tree-item-group {
3390
+ list-style: none;
3391
+ margin: 0;
3392
+ padding: 0;
3393
+ }
3394
+
3395
+ .seeds-tree-item-label {
3396
+ flex: 1;
3397
+ min-width: 0;
3398
+ overflow: hidden;
3399
+ text-overflow: ellipsis;
3400
+ white-space: nowrap;
3401
+ }
3402
+
3403
+ .seeds-tree-item-icon {
3404
+ display: inline-flex;
3405
+ align-items: center;
3406
+ flex-shrink: 0;
3407
+ }
3408
+
3409
+ .seeds-tree-item-chevron {
3410
+ display: inline-flex;
3411
+ align-items: center;
3412
+ justify-content: center;
3413
+ flex-shrink: 0;
3414
+ width: var(--space-500);
3415
+ height: var(--space-500);
3416
+ padding: 0;
3417
+ border: none;
3418
+ background: transparent;
3419
+ color: var(--color-icon-base);
3420
+ cursor: pointer;
3421
+ border-radius: var(--radius-300);
3422
+ transition: transform var(--duration-fast) var(--ease-ease_in);
3423
+ transform: rotate(-90deg);
3424
+ }
3425
+
3426
+ .seeds-tree-item-chevron.expanded {
3427
+ transform: rotate(0deg);
3428
+ }
3429
+
3430
+ .seeds-tree-item-chevron:hover {
3431
+ background: var(--color-listItem-bg-hover);
3432
+ }
3433
+
3434
+ /* ---------------------------------------------------------------------- */
3435
+ /* TreeCombobox (mirror of TreeCombobox.tsx) */
3436
+ /* ---------------------------------------------------------------------- */
3437
+
3438
+ .seeds-tree-combobox {
3439
+ display: flex;
3440
+ flex-direction: column;
3441
+ flex: 1;
3442
+ min-height: 0;
3443
+ }
3444
+
3445
+ .seeds-tree-combobox-search {
3446
+ padding: var(--space-300);
3447
+ border-bottom: 1px solid var(--color-container-border-base);
3448
+ flex-shrink: 0;
3449
+ }
3450
+
3451
+ .seeds-tree-combobox-input-group {
3452
+ display: flex;
3453
+ align-items: center;
3454
+ gap: var(--space-200);
3455
+ padding: var(--space-200) var(--space-300);
3456
+ border-radius: var(--radius-500);
3457
+ border: 1px solid var(--color-container-border-base);
3458
+ background: var(--color-container-bg-base);
3459
+ color: var(--color-icon-base);
3460
+ }
3461
+
3462
+ .seeds-tree-combobox-input-group:focus-within {
3463
+ box-shadow:
3464
+ 0 0 0 1px var(--color-button-primary-bg-base),
3465
+ 0 0px 0px 4px
3466
+ color-mix(
3467
+ in srgb,
3468
+ var(--color-button-primary-bg-base),
3469
+ transparent 70%
3470
+ );
3471
+ outline: none;
3472
+ }
3473
+
3474
+ .seeds-tree-combobox-input {
3475
+ flex: 1;
3476
+ border: none;
3477
+ background: transparent;
3478
+ outline: none;
3479
+ font-family: var(--font-family);
3480
+ font-size: var(--font-size-200);
3481
+ line-height: var(--line-height-200);
3482
+ color: var(--color-text-body);
3483
+ }
3484
+
3485
+ .seeds-tree-combobox-input::placeholder {
3486
+ color: var(--color-text-subtext);
3487
+ }
3488
+
3489
+ .seeds-tree-combobox-list {
3490
+ padding: var(--space-200);
3491
+ overflow: auto;
3492
+ flex: 1;
3493
+ min-height: 0;
3494
+ }
3495
+
3496
+ .seeds-tree-combobox-empty {
3497
+ padding: var(--space-300) var(--space-350);
3498
+ text-align: center;
3499
+ color: var(--color-text-subtext);
3500
+ font-size: var(--font-size-200);
3501
+ line-height: var(--line-height-200);
3502
+ }
3503
+
3504
+ /* ---------------------------------------------------------------------- */
3505
+ /* TreeSearchableSelect (mirror of Common/TreeSearchableSelectBase.tsx) */
3506
+ /* ---------------------------------------------------------------------- */
3507
+
3508
+ .seeds-tree-select-trigger {
3509
+ display: flex;
3510
+ align-items: center;
3511
+ justify-content: space-between;
3512
+ gap: var(--space-300);
3513
+ padding: var(--space-200) var(--space-350);
3514
+ min-width: 160px;
3515
+ width: auto;
3516
+ border-radius: var(--radius-500);
3517
+ border: 1px solid var(--color-form-border-base);
3518
+ background: var(--color-form-bg-base);
3519
+ font-family: var(--font-family);
3520
+ font-size: var(--font-size-200);
3521
+ line-height: var(--line-height-200);
3522
+ color: var(--color-text-body);
3523
+ text-align: left;
3524
+ cursor: default;
3525
+ outline: none;
3526
+ user-select: none;
3527
+ transition:
3528
+ border-color var(--duration-fast) var(--ease-ease_in),
3529
+ box-shadow var(--duration-fast) var(--ease-ease_in);
3530
+ }
3531
+
3532
+ .seeds-tree-select-trigger.full-width {
3533
+ width: 100%;
3534
+ }
3535
+
3536
+ .seeds-tree-select-trigger:focus-visible {
3537
+ box-shadow:
3538
+ 0 0 0 1px var(--color-button-primary-bg-base),
3539
+ 0 0px 0px 4px
3540
+ color-mix(
3541
+ in srgb,
3542
+ var(--color-button-primary-bg-base),
3543
+ transparent 70%
3544
+ );
3545
+ outline: none;
3546
+ }
3547
+
3548
+ .seeds-tree-select-trigger::-moz-focus-inner {
3549
+ border: 0;
3550
+ }
3551
+
3552
+ .seeds-tree-select-trigger[aria-disabled="true"],
3553
+ .seeds-tree-select-trigger:disabled {
3554
+ opacity: 0.4;
3555
+ cursor: not-allowed;
3556
+ }
3557
+
3558
+ .seeds-tree-select-trigger.invalid {
3559
+ border-color: var(--color-form-border-error);
3560
+ }
3561
+
3562
+ .seeds-tree-select-trigger-label {
3563
+ flex: 1;
3564
+ min-width: 0;
3565
+ overflow: hidden;
3566
+ text-overflow: ellipsis;
3567
+ white-space: nowrap;
3568
+ }
3569
+
3570
+ .seeds-tree-select-placeholder {
3571
+ color: var(--color-text-subtext);
3572
+ }
3573
+
3574
+ .seeds-tree-select-chevron {
3575
+ display: inline-flex;
3576
+ align-items: center;
3577
+ color: var(--color-icon-base);
3578
+ transition: transform var(--duration-fast) var(--ease-ease_in);
3579
+ }
3580
+
3581
+ .seeds-tree-select-chevron.open {
3582
+ transform: rotate(-180deg);
3583
+ }
3584
+
3585
+ /*
3586
+ * Visually-hidden input that mirrors the combobox's selected value into a
3587
+ * form-submittable element. Matches Base UI's pattern (used by v3
3588
+ * SearchableSelect): the input stays in the DOM so HTML forms pick up the
3589
+ * value, but it's removed from view and from the accessibility tree.
3590
+ */
3591
+ .seeds-tree-select-hidden-input {
3592
+ clip-path: inset(50%);
3593
+ overflow: hidden;
3594
+ white-space: nowrap;
3595
+ border: 0;
3596
+ padding: 0;
3597
+ width: 1px;
3598
+ height: 1px;
3599
+ margin: -1px;
3600
+ position: fixed;
3601
+ top: 0;
3602
+ left: 0;
3603
+ }
3604
+
3605
+ .seeds-tree-select-popout {
3606
+ display: flex;
3607
+ flex-direction: column;
3608
+ /* Width sizes to content within bounds: at least the trigger width, never */
3609
+ /* wider than the available viewport space. Shallow popups stay flush with */
3610
+ /* the trigger; deeply nested trees expand horizontally as needed. */
3611
+ min-width: var(--radix-popover-trigger-width);
3612
+ max-width: var(--radix-popper-available-width);
3613
+ /* Height caps at 400px (or available viewport) so a popup with many */
3614
+ /* expanded branches scrolls vertically instead of growing off-screen. */
3615
+ max-height: min(var(--radix-popper-available-height), 400px);
3616
+ /* Width is set inline via --tree-select-width (defaults to max-content). */
3617
+ width: var(--tree-select-width, max-content);
3618
+ }
3619
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sproutsocial/racine",
3
- "version": "31.7.1",
3
+ "version": "31.7.4",
4
4
  "license": "MIT",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -73,74 +73,74 @@
73
73
  },
74
74
  "dependencies": {
75
75
  "@size-limit/file": "^11.1.6",
76
- "@sproutsocial/seeds-react-accordion": "^0.4.49",
77
- "@sproutsocial/seeds-react-avatar": "^1.1.18",
78
- "@sproutsocial/seeds-react-badge": "^2.0.35",
79
- "@sproutsocial/seeds-react-banner": "^1.1.23",
80
- "@sproutsocial/seeds-react-box": "^1.1.22",
81
- "@sproutsocial/seeds-react-breadcrumb": "^1.1.8",
82
- "@sproutsocial/seeds-react-button": "^2.2.2",
83
- "@sproutsocial/seeds-react-card": "^1.1.43",
84
- "@sproutsocial/seeds-react-character-counter": "^1.0.4",
85
- "@sproutsocial/seeds-react-chart-legend": "^1.0.42",
86
- "@sproutsocial/seeds-react-chat-bubble": "^0.2.2",
87
- "@sproutsocial/seeds-react-checkbox": "^1.3.43",
76
+ "@sproutsocial/seeds-react-accordion": "^0.4.51",
77
+ "@sproutsocial/seeds-react-avatar": "^1.1.20",
78
+ "@sproutsocial/seeds-react-badge": "^2.0.37",
79
+ "@sproutsocial/seeds-react-banner": "^1.1.25",
80
+ "@sproutsocial/seeds-react-box": "^1.1.24",
81
+ "@sproutsocial/seeds-react-breadcrumb": "^1.1.10",
82
+ "@sproutsocial/seeds-react-button": "^2.2.4",
83
+ "@sproutsocial/seeds-react-card": "^1.1.45",
84
+ "@sproutsocial/seeds-react-character-counter": "^1.0.5",
85
+ "@sproutsocial/seeds-react-chart-legend": "^1.0.44",
86
+ "@sproutsocial/seeds-react-chat-bubble": "^0.2.3",
87
+ "@sproutsocial/seeds-react-checkbox": "^1.3.45",
88
88
  "@sproutsocial/seeds-react-collapsible": "^2.0.1",
89
- "@sproutsocial/seeds-react-container": "^0.3.16",
90
- "@sproutsocial/seeds-react-content-block": "^0.5.16",
91
- "@sproutsocial/seeds-react-content-header": "^0.2.21",
92
- "@sproutsocial/seeds-react-data-table": "^2.6.24",
93
- "@sproutsocial/seeds-react-datepicker": "^1.0.40",
94
- "@sproutsocial/seeds-react-drawer": "^2.2.9",
95
- "@sproutsocial/seeds-react-duration": "^1.0.25",
96
- "@sproutsocial/seeds-react-empty-state": "^1.0.24",
97
- "@sproutsocial/seeds-react-fieldset": "^1.0.24",
98
- "@sproutsocial/seeds-react-form-field": "^1.1.18",
99
- "@sproutsocial/seeds-react-grid": "^0.2.6",
100
- "@sproutsocial/seeds-react-hooks": "^3.2.3",
101
- "@sproutsocial/seeds-react-icon": "^2.4.1",
102
- "@sproutsocial/seeds-react-image": "^1.0.22",
103
- "@sproutsocial/seeds-react-indicator": "^1.0.41",
104
- "@sproutsocial/seeds-react-input": "^1.5.28",
105
- "@sproutsocial/seeds-react-keyboard-key": "^1.0.24",
106
- "@sproutsocial/seeds-react-label": "^1.0.24",
107
- "@sproutsocial/seeds-react-link": "^1.1.14",
108
- "@sproutsocial/seeds-react-list": "^0.3.27",
109
- "@sproutsocial/seeds-react-loader": "^1.0.24",
110
- "@sproutsocial/seeds-react-loader-button": "^1.0.47",
111
- "@sproutsocial/seeds-react-message": "^1.0.50",
112
- "@sproutsocial/seeds-react-mixins": "^4.3.8",
113
- "@sproutsocial/seeds-react-modal": "^2.5.24",
114
- "@sproutsocial/seeds-react-narrative-kit": "^0.5.1",
115
- "@sproutsocial/seeds-react-numeral": "^1.0.49",
116
- "@sproutsocial/seeds-react-pagination": "^0.1.22",
117
- "@sproutsocial/seeds-react-panel": "^1.0.2",
118
- "@sproutsocial/seeds-react-peek-in": "^0.3.1",
119
- "@sproutsocial/seeds-react-partner-logo": "^1.7.14",
120
- "@sproutsocial/seeds-react-popout": "^2.5.10",
89
+ "@sproutsocial/seeds-react-container": "^0.3.18",
90
+ "@sproutsocial/seeds-react-content-block": "^0.5.18",
91
+ "@sproutsocial/seeds-react-content-header": "^0.2.23",
92
+ "@sproutsocial/seeds-react-data-table": "^2.6.26",
93
+ "@sproutsocial/seeds-react-datepicker": "^1.0.42",
94
+ "@sproutsocial/seeds-react-drawer": "^2.2.11",
95
+ "@sproutsocial/seeds-react-duration": "^1.0.27",
96
+ "@sproutsocial/seeds-react-empty-state": "^1.0.26",
97
+ "@sproutsocial/seeds-react-fieldset": "^1.0.26",
98
+ "@sproutsocial/seeds-react-form-field": "^1.1.20",
99
+ "@sproutsocial/seeds-react-grid": "^0.2.8",
100
+ "@sproutsocial/seeds-react-hooks": "^3.2.4",
101
+ "@sproutsocial/seeds-react-icon": "^2.4.3",
102
+ "@sproutsocial/seeds-react-image": "^1.0.24",
103
+ "@sproutsocial/seeds-react-indicator": "^1.0.43",
104
+ "@sproutsocial/seeds-react-input": "^1.5.30",
105
+ "@sproutsocial/seeds-react-keyboard-key": "^1.0.26",
106
+ "@sproutsocial/seeds-react-label": "^1.0.26",
107
+ "@sproutsocial/seeds-react-link": "^1.1.16",
108
+ "@sproutsocial/seeds-react-list": "^0.3.30",
109
+ "@sproutsocial/seeds-react-loader": "^1.0.26",
110
+ "@sproutsocial/seeds-react-loader-button": "^1.0.49",
111
+ "@sproutsocial/seeds-react-message": "^1.0.52",
112
+ "@sproutsocial/seeds-react-mixins": "^4.3.9",
113
+ "@sproutsocial/seeds-react-modal": "^2.5.26",
114
+ "@sproutsocial/seeds-react-narrative-kit": "^0.6.0",
115
+ "@sproutsocial/seeds-react-numeral": "^1.0.51",
116
+ "@sproutsocial/seeds-react-pagination": "^0.1.24",
117
+ "@sproutsocial/seeds-react-panel": "^1.0.4",
118
+ "@sproutsocial/seeds-react-peek-in": "^0.3.3",
119
+ "@sproutsocial/seeds-react-partner-logo": "^1.7.16",
120
+ "@sproutsocial/seeds-react-popout": "^2.5.12",
121
121
  "@sproutsocial/seeds-react-portal": "^1.2.0",
122
- "@sproutsocial/seeds-react-progress": "^0.2.9",
123
- "@sproutsocial/seeds-react-radio": "^1.3.24",
124
- "@sproutsocial/seeds-react-rating": "^1.0.41",
125
- "@sproutsocial/seeds-react-segmented-control": "^1.1.23",
122
+ "@sproutsocial/seeds-react-progress": "^0.2.11",
123
+ "@sproutsocial/seeds-react-radio": "^1.3.26",
124
+ "@sproutsocial/seeds-react-rating": "^1.0.44",
125
+ "@sproutsocial/seeds-react-segmented-control": "^1.1.25",
126
126
  "@sproutsocial/seeds-react-spot-illustration": "^1.2.4",
127
- "@sproutsocial/seeds-react-select": "^1.1.42",
128
- "@sproutsocial/seeds-react-skeleton": "^1.1.21",
129
- "@sproutsocial/seeds-react-stack": "^1.0.21",
130
- "@sproutsocial/seeds-react-switch": "^1.2.40",
131
- "@sproutsocial/seeds-react-system-props": "^3.1.1",
132
- "@sproutsocial/seeds-react-table": "^1.0.43",
133
- "@sproutsocial/seeds-react-tabs": "^1.4.12",
134
- "@sproutsocial/seeds-react-text": "^1.5.0",
135
- "@sproutsocial/seeds-react-textarea": "^1.0.22",
136
- "@sproutsocial/seeds-react-toast": "^1.0.43",
137
- "@sproutsocial/seeds-react-token": "^1.5.8",
138
- "@sproutsocial/seeds-react-token-input": "^1.4.50",
139
- "@sproutsocial/seeds-react-tooltip": "^1.1.28",
140
- "@sproutsocial/seeds-react-theme": "^4.1.1",
141
- "@sproutsocial/seeds-react-theme-provider": "^1.1.21",
127
+ "@sproutsocial/seeds-react-select": "^1.1.44",
128
+ "@sproutsocial/seeds-react-skeleton": "^1.1.24",
129
+ "@sproutsocial/seeds-react-stack": "^1.0.23",
130
+ "@sproutsocial/seeds-react-switch": "^1.2.42",
131
+ "@sproutsocial/seeds-react-system-props": "^3.1.2",
132
+ "@sproutsocial/seeds-react-table": "^1.0.45",
133
+ "@sproutsocial/seeds-react-tabs": "^1.4.14",
134
+ "@sproutsocial/seeds-react-text": "^1.5.1",
135
+ "@sproutsocial/seeds-react-textarea": "^1.0.25",
136
+ "@sproutsocial/seeds-react-toast": "^1.0.45",
137
+ "@sproutsocial/seeds-react-token": "^1.5.10",
138
+ "@sproutsocial/seeds-react-token-input": "^1.4.52",
139
+ "@sproutsocial/seeds-react-tooltip": "^1.1.30",
140
+ "@sproutsocial/seeds-react-theme": "^4.2.0",
141
+ "@sproutsocial/seeds-react-theme-provider": "^1.1.22",
142
142
  "@sproutsocial/seeds-react-utilities": "^4.3.0",
143
- "@sproutsocial/seeds-react-visually-hidden": "^1.0.23",
143
+ "@sproutsocial/seeds-react-visually-hidden": "^1.0.25",
144
144
  "scroll-into-view-if-needed": "^2.2.20",
145
145
  "lodash.uniqueid": "^4.0.1",
146
146
  "styled-system": "^5.1.5",
@@ -163,7 +163,7 @@
163
163
  "@sproutsocial/seeds-motion": "^1.8.2",
164
164
  "@sproutsocial/seeds-networkcolor": "^2.22.0",
165
165
  "@sproutsocial/seeds-partner-logos": "^2.4.1",
166
- "@sproutsocial/seeds-react-menu": "^1.16.2",
166
+ "@sproutsocial/seeds-react-menu": "^1.16.4",
167
167
  "@sproutsocial/seeds-react-testing-library": "*",
168
168
  "@sproutsocial/seeds-space": "^0.8.1",
169
169
  "@sproutsocial/seeds-testing": "*",