@sproutsocial/racine 31.7.3 → 31.7.5

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,90 @@
1
1
  # Change Log
2
2
 
3
+ ## 31.7.5
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [c35fe22]
8
+ - Updated dependencies [dcd3fb9]
9
+ - Updated dependencies [235938d]
10
+ - Updated dependencies [c19788f]
11
+ - Updated dependencies [5b5b1bd]
12
+ - @sproutsocial/seeds-react-fieldset@1.0.27
13
+ - @sproutsocial/seeds-react-form-field@1.1.21
14
+ - @sproutsocial/seeds-react-radio@1.3.27
15
+ - @sproutsocial/seeds-react-input@1.5.31
16
+ - @sproutsocial/seeds-react-switch@1.2.43
17
+ - @sproutsocial/seeds-react-token-input@1.4.53
18
+ - @sproutsocial/seeds-react-accordion@0.4.52
19
+
20
+ ## 31.7.4
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [917a951]
25
+ - Updated dependencies [6611f6a]
26
+ - Updated dependencies [ca608f7]
27
+ - Updated dependencies [6216473]
28
+ - @sproutsocial/seeds-react-icon@2.4.3
29
+ - @sproutsocial/seeds-react-numeral@1.0.51
30
+ - @sproutsocial/seeds-react-system-props@3.1.2
31
+ - @sproutsocial/seeds-react-partner-logo@1.7.16
32
+ - @sproutsocial/seeds-react-segmented-control@1.1.25
33
+ - @sproutsocial/seeds-react-accordion@0.4.51
34
+ - @sproutsocial/seeds-react-badge@2.0.37
35
+ - @sproutsocial/seeds-react-banner@1.1.25
36
+ - @sproutsocial/seeds-react-breadcrumb@1.1.10
37
+ - @sproutsocial/seeds-react-button@2.2.4
38
+ - @sproutsocial/seeds-react-card@1.1.45
39
+ - @sproutsocial/seeds-react-chart-legend@1.0.44
40
+ - @sproutsocial/seeds-react-checkbox@1.3.45
41
+ - @sproutsocial/seeds-react-content-header@0.2.23
42
+ - @sproutsocial/seeds-react-data-table@2.6.26
43
+ - @sproutsocial/seeds-react-datepicker@1.0.42
44
+ - @sproutsocial/seeds-react-drawer@2.2.11
45
+ - @sproutsocial/seeds-react-indicator@1.0.43
46
+ - @sproutsocial/seeds-react-input@1.5.30
47
+ - @sproutsocial/seeds-react-link@1.1.16
48
+ - @sproutsocial/seeds-react-list@0.3.30
49
+ - @sproutsocial/seeds-react-modal@2.5.26
50
+ - @sproutsocial/seeds-react-pagination@0.1.24
51
+ - @sproutsocial/seeds-react-panel@1.0.4
52
+ - @sproutsocial/seeds-react-peek-in@0.3.3
53
+ - @sproutsocial/seeds-react-rating@1.0.44
54
+ - @sproutsocial/seeds-react-select@1.1.44
55
+ - @sproutsocial/seeds-react-switch@1.2.42
56
+ - @sproutsocial/seeds-react-table@1.0.45
57
+ - @sproutsocial/seeds-react-toast@1.0.45
58
+ - @sproutsocial/seeds-react-token@1.5.10
59
+ - @sproutsocial/seeds-react-token-input@1.4.52
60
+ - @sproutsocial/seeds-react-tooltip@1.1.30
61
+ - @sproutsocial/seeds-react-avatar@1.1.20
62
+ - @sproutsocial/seeds-react-box@1.1.24
63
+ - @sproutsocial/seeds-react-character-counter@1.0.5
64
+ - @sproutsocial/seeds-react-chat-bubble@0.2.3
65
+ - @sproutsocial/seeds-react-container@0.3.18
66
+ - @sproutsocial/seeds-react-content-block@0.5.18
67
+ - @sproutsocial/seeds-react-duration@1.0.27
68
+ - @sproutsocial/seeds-react-empty-state@1.0.26
69
+ - @sproutsocial/seeds-react-fieldset@1.0.26
70
+ - @sproutsocial/seeds-react-form-field@1.1.20
71
+ - @sproutsocial/seeds-react-grid@0.2.8
72
+ - @sproutsocial/seeds-react-image@1.0.24
73
+ - @sproutsocial/seeds-react-keyboard-key@1.0.26
74
+ - @sproutsocial/seeds-react-label@1.0.26
75
+ - @sproutsocial/seeds-react-loader@1.0.26
76
+ - @sproutsocial/seeds-react-loader-button@1.0.49
77
+ - @sproutsocial/seeds-react-message@1.0.52
78
+ - @sproutsocial/seeds-react-popout@2.5.12
79
+ - @sproutsocial/seeds-react-progress@0.2.11
80
+ - @sproutsocial/seeds-react-radio@1.3.26
81
+ - @sproutsocial/seeds-react-skeleton@1.1.24
82
+ - @sproutsocial/seeds-react-stack@1.0.23
83
+ - @sproutsocial/seeds-react-tabs@1.4.14
84
+ - @sproutsocial/seeds-react-text@1.5.1
85
+ - @sproutsocial/seeds-react-textarea@1.0.25
86
+ - @sproutsocial/seeds-react-visually-hidden@1.0.25
87
+
3
88
  ## 31.7.3
4
89
 
5
90
  ### Patch Changes
@@ -929,6 +929,282 @@
929
929
  }
930
930
  }
931
931
 
932
+ /* --- seeds-react-fieldset --- */
933
+ /**
934
+ * Seeds Fieldset 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
+ * Usage:
941
+ * <fieldset class="seeds-fieldset">
942
+ * <legend class="seeds-fieldset-legend">Label</legend>
943
+ * <p class="seeds-fieldset-helper-text">Helper text</p>
944
+ * <div class="seeds-fieldset-list seeds-fieldset-list-vertical">
945
+ * <div class="seeds-fieldset-item seeds-fieldset-item-vertical">...</div>
946
+ * </div>
947
+ * </fieldset>
948
+ */
949
+
950
+ @layer components {
951
+ .seeds-fieldset {
952
+ box-sizing: border-box;
953
+ font-family: var(--font-family);
954
+ border: none;
955
+ padding: 0;
956
+ }
957
+
958
+ .seeds-fieldset-legend {
959
+ margin: 0;
960
+ font-family: var(--font-family);
961
+ font-size: var(--font-size-300);
962
+ line-height: var(--line-height-300);
963
+ font-weight: var(--font-weight-semibold);
964
+ color: var(--color-text-body);
965
+ margin-bottom: var(--space-300);
966
+ }
967
+
968
+ .seeds-fieldset-helper-text {
969
+ margin: 0;
970
+ font-family: var(--font-family);
971
+ font-size: var(--font-size-200);
972
+ line-height: var(--line-height-200);
973
+ margin-bottom: var(--space-300);
974
+ }
975
+
976
+ .seeds-fieldset-list {
977
+ box-sizing: border-box;
978
+ font-family: var(--font-family);
979
+ display: flex;
980
+ }
981
+
982
+ .seeds-fieldset-list-vertical {
983
+ flex-direction: column;
984
+ }
985
+
986
+ .seeds-fieldset-list-horizontal {
987
+ flex-direction: row;
988
+ }
989
+
990
+ .seeds-fieldset-item {
991
+ box-sizing: border-box;
992
+ font-family: var(--font-family);
993
+ }
994
+
995
+ .seeds-fieldset-item-vertical {
996
+ margin-top: var(--space-300);
997
+ }
998
+
999
+ .seeds-fieldset-item-vertical:first-child {
1000
+ margin-top: 0;
1001
+ }
1002
+
1003
+ .seeds-fieldset-item-horizontal {
1004
+ margin-left: var(--space-300);
1005
+ }
1006
+
1007
+ .seeds-fieldset-item-horizontal:first-child {
1008
+ margin-left: 0;
1009
+ }
1010
+ }
1011
+
1012
+ /* --- seeds-react-form-field --- */
1013
+ /**
1014
+ * Seeds FormField component classes
1015
+ * Use these instead of writing out individual Tailwind utility classes.
1016
+ *
1017
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
1018
+ * CSS variable definitions and dark mode support.
1019
+ *
1020
+ * FormField only contributes the container's vertical layout/margin; the
1021
+ * label, helper text, and error text colors and spacing are owned by the
1022
+ * composed Label/Text children (via their styled-system tokens), so this
1023
+ * class carries layout only and hard-codes no color tokens.
1024
+ *
1025
+ * Usage:
1026
+ * <div class="seeds-form-field">…label, field, error…</div>
1027
+ */
1028
+
1029
+ @layer components {
1030
+ .seeds-form-field {
1031
+ display: block;
1032
+ }
1033
+ }
1034
+
1035
+ /* --- seeds-react-icon --- */
1036
+ /**
1037
+ * Seeds Icon component classes
1038
+ * Use these instead of writing out individual Tailwind utility classes.
1039
+ *
1040
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
1041
+ * CSS variable definitions and dark mode support.
1042
+ *
1043
+ * The dynamic `size` prop is applied through the `--icon-size` custom property,
1044
+ * set inline by IconTailwind (e.g. style={{ "--icon-size": "16px" }}).
1045
+ *
1046
+ * Usage:
1047
+ * <span class="Icon seeds-icon" style="--icon-size: 16px">
1048
+ * <svg class="Icon-svg" />
1049
+ * </span>
1050
+ */
1051
+
1052
+ @layer components {
1053
+ .seeds-icon {
1054
+ display: inline-block;
1055
+ color: inherit;
1056
+ vertical-align: middle;
1057
+ line-height: var(--icon-size);
1058
+ }
1059
+
1060
+ .seeds-icon,
1061
+ .seeds-icon .Icon-svg {
1062
+ height: var(--icon-size);
1063
+ fill: currentColor;
1064
+ }
1065
+
1066
+ /* width only applied when fixedWidth */
1067
+ .seeds-icon-fixed-width,
1068
+ .seeds-icon-fixed-width .Icon-svg {
1069
+ width: var(--icon-size);
1070
+ }
1071
+ }
1072
+
1073
+ /* --- seeds-react-input --- */
1074
+ /**
1075
+ * Seeds Input component classes
1076
+ * Use these instead of writing out individual Tailwind utility classes.
1077
+ *
1078
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
1079
+ * CSS variable definitions and dark mode support.
1080
+ *
1081
+ * Usage:
1082
+ * <div class="seeds-input seeds-input-primary"><input /></div>
1083
+ * <div class="seeds-input seeds-input-primary seeds-input-lg"><input /></div>
1084
+ */
1085
+
1086
+ @layer components {
1087
+ .seeds-input {
1088
+ box-sizing: border-box;
1089
+ position: relative;
1090
+ }
1091
+
1092
+ .seeds-input input {
1093
+ box-sizing: border-box;
1094
+ width: 100%;
1095
+ border: 1px solid transparent;
1096
+ border-radius: var(--radius-500);
1097
+ background-color: var(--color-form-bg-base);
1098
+ color: var(--color-text-body);
1099
+ outline: none;
1100
+ transition:
1101
+ border-color var(--duration-fast) var(--ease-ease_in),
1102
+ box-shadow var(--duration-fast) var(--ease-ease_in);
1103
+ font-family: var(--font-family);
1104
+ font-weight: var(--font-weight-normal);
1105
+ appearance: none;
1106
+ /* This matches the overall height of Button and Select */
1107
+ margin: 0;
1108
+ text-overflow: ellipsis;
1109
+ overflow: hidden;
1110
+ white-space: nowrap;
1111
+ padding: var(--space-300);
1112
+ font-size: var(--font-size-200);
1113
+ line-height: 16px;
1114
+ }
1115
+
1116
+ /* https://stackoverflow.com/questions/14007655/remove-ie10s-clear-field-x-button-on-certain-inputs */
1117
+ .seeds-input input::-ms-clear {
1118
+ display: none;
1119
+ }
1120
+
1121
+ .seeds-input input::-webkit-search-cancel-button {
1122
+ appearance: none;
1123
+ }
1124
+
1125
+ .seeds-input input:focus {
1126
+ outline: none;
1127
+ box-shadow:
1128
+ 0 0 0 1px var(--color-button-primary-bg-base),
1129
+ 0 0 0 4px color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
1130
+ }
1131
+
1132
+ /* Fix for red ring when input is marked required in Firefox */
1133
+ .seeds-input input:not(output):not(:focus):-moz-ui-invalid {
1134
+ box-shadow: none;
1135
+ }
1136
+
1137
+ .seeds-input input::placeholder {
1138
+ color: var(--color-form-placeholder-base);
1139
+ font-style: italic;
1140
+ }
1141
+
1142
+ /* Size modifiers */
1143
+ .seeds-input-lg input {
1144
+ padding: var(--space-350) var(--space-400);
1145
+ font-size: var(--font-size-300);
1146
+ line-height: var(--line-height-300);
1147
+ }
1148
+
1149
+ .seeds-input-sm input {
1150
+ padding: var(--space-200);
1151
+ }
1152
+
1153
+ /* Accessory spacing */
1154
+ .seeds-input-has-before input {
1155
+ padding-left: 40px;
1156
+ }
1157
+
1158
+ .seeds-input-has-after input {
1159
+ padding-right: 40px;
1160
+ }
1161
+
1162
+ /* Appearance */
1163
+ .seeds-input-primary input {
1164
+ border: 1px solid var(--color-form-border-base);
1165
+ }
1166
+
1167
+ /* State borders — declared after appearance so border-color wins */
1168
+ .seeds-input-invalid input {
1169
+ border-color: var(--color-form-border-error);
1170
+ }
1171
+
1172
+ .seeds-input-warning input {
1173
+ border-color: var(--color-form-border-warning);
1174
+ }
1175
+
1176
+ /* Disabled */
1177
+ .seeds-input-disabled {
1178
+ opacity: 0.4;
1179
+ }
1180
+
1181
+ .seeds-input-disabled input {
1182
+ cursor: not-allowed;
1183
+ }
1184
+
1185
+ /* Accessories (before / after / clear button) */
1186
+ .seeds-input-accessory {
1187
+ position: absolute;
1188
+ top: 50%;
1189
+ transform: translateY(-50%);
1190
+ color: var(--color-icon-base);
1191
+ display: flex;
1192
+ align-items: center;
1193
+ }
1194
+
1195
+ .seeds-input-accessory-before {
1196
+ left: var(--space-300);
1197
+ }
1198
+
1199
+ .seeds-input-accessory-after {
1200
+ right: var(--space-300);
1201
+ }
1202
+
1203
+ .seeds-input-accessory-clear {
1204
+ right: 0;
1205
+ }
1206
+ }
1207
+
932
1208
  /* --- seeds-react-link --- */
933
1209
  /**
934
1210
  * Seeds Link component classes
@@ -2282,6 +2558,65 @@
2282
2558
 
2283
2559
  }
2284
2560
 
2561
+ /* --- seeds-react-numeral --- */
2562
+ /**
2563
+ * Seeds Numeral component classes
2564
+ * Use these instead of writing out individual Tailwind utility classes.
2565
+ *
2566
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2567
+ * CSS variable definitions and dark mode support.
2568
+ *
2569
+ * Usage:
2570
+ * <span class="seeds-numeral">1,234</span>
2571
+ * <span class="seeds-numeral seeds-numeral-abbr">1.2K</span>
2572
+ */
2573
+
2574
+ @layer components {
2575
+ .seeds-numeral {
2576
+ font-variant-numeric: tabular-nums;
2577
+ }
2578
+
2579
+ .seeds-numeral-abbr {
2580
+ border-bottom: 1px dotted var(--color-container-border-base);
2581
+ }
2582
+ }
2583
+
2584
+ /* --- seeds-react-partner-logo --- */
2585
+ /**
2586
+ * Seeds Partner Logo component classes
2587
+ * Use these instead of writing out individual Tailwind utility classes.
2588
+ *
2589
+ * Ships as a separate CSS file (pulled in by consumers via the package css
2590
+ * export) — not imported from TS, matching the Button component.
2591
+ *
2592
+ * Sizing is runtime-computed (logo size lookup or the height prop), so it is
2593
+ * applied through inline CSS custom properties set on the element's style attr:
2594
+ * --seeds-partner-logo-height container height + line-height + svg height
2595
+ * --seeds-partner-logo-svg-width svg width (unset => auto => sizes from viewBox)
2596
+ *
2597
+ * Usage:
2598
+ * <span class="seeds-partner-logo logo" style="--seeds-partner-logo-height: 16px">
2599
+ * <svg class="logo-svg">…</svg>
2600
+ * </span>
2601
+ */
2602
+
2603
+ @layer components {
2604
+ .seeds-partner-logo {
2605
+ display: inline-block;
2606
+ color: inherit;
2607
+ vertical-align: middle;
2608
+ height: var(--seeds-partner-logo-height);
2609
+ line-height: var(--seeds-partner-logo-height);
2610
+ }
2611
+
2612
+ .seeds-partner-logo .logo-svg {
2613
+ height: var(--seeds-partner-logo-height);
2614
+ /* unset => auto => svg sizes from its viewBox aspect ratio,
2615
+ matching stylesForSize's empty width declaration */
2616
+ width: var(--seeds-partner-logo-svg-width, auto);
2617
+ }
2618
+ }
2619
+
2285
2620
  /* --- seeds-react-profile --- */
2286
2621
  /**
2287
2622
  * Seeds InlineProfile component classes
@@ -2488,6 +2823,129 @@
2488
2823
  }
2489
2824
  }
2490
2825
 
2826
+ /* --- seeds-react-radio --- */
2827
+ /**
2828
+ * Seeds Radio component classes
2829
+ * Use these instead of writing out individual Tailwind utility classes.
2830
+ *
2831
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2832
+ * CSS variable definitions and dark mode support.
2833
+ *
2834
+ * Usage:
2835
+ * <label class="seeds-radio">
2836
+ * <span class="seeds-radio-wrapper seeds-radio-checked">
2837
+ * <input type="radio" class="seeds-radio-input" />
2838
+ * </span>
2839
+ * <span class="seeds-radio-label">Label</span>
2840
+ * </label>
2841
+ */
2842
+
2843
+ @layer components {
2844
+ .seeds-radio {
2845
+ display: inline-flex;
2846
+ align-items: center;
2847
+ box-sizing: border-box;
2848
+ }
2849
+
2850
+ .seeds-radio-wrapper {
2851
+ position: relative;
2852
+ width: var(--space-400);
2853
+ height: var(--space-400);
2854
+ cursor: pointer;
2855
+ }
2856
+
2857
+ .seeds-radio-wrapper.seeds-radio-disabled {
2858
+ opacity: 0.4;
2859
+ pointer-events: none;
2860
+ cursor: not-allowed;
2861
+ }
2862
+
2863
+ .seeds-radio-input {
2864
+ box-sizing: border-box;
2865
+ position: absolute;
2866
+ top: 0;
2867
+ left: 0;
2868
+ width: 100%;
2869
+ height: 100%;
2870
+ margin: 0;
2871
+ appearance: none;
2872
+ cursor: pointer;
2873
+ border: 1px solid var(--color-form-border-base);
2874
+ border-radius: 50%;
2875
+ background-color: var(--color-form-bg-base);
2876
+ transition:
2877
+ border-color var(--duration-fast) ease-in,
2878
+ background-color var(--duration-fast) ease-in;
2879
+ }
2880
+
2881
+ /* Focus ring mirrors button.css (the CSS form of the focusRing mixin) */
2882
+ .seeds-radio-input:focus {
2883
+ outline: none;
2884
+ box-shadow:
2885
+ 0 0 0 1px var(--color-button-primary-bg-base),
2886
+ 0 0 0 4px color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
2887
+ }
2888
+
2889
+ .seeds-radio-wrapper:before {
2890
+ content: "";
2891
+ position: absolute;
2892
+ top: 50%;
2893
+ left: 50%;
2894
+ transform: translate(-50%, -50%);
2895
+ width: 6px;
2896
+ height: 6px;
2897
+ border-radius: 50%;
2898
+ opacity: 0;
2899
+ transition: opacity var(--duration-fast) ease-in;
2900
+ z-index: 1;
2901
+ pointer-events: none;
2902
+ }
2903
+
2904
+ /* Unchecked hover / focus: show the dot (only when NOT checked) */
2905
+ .seeds-radio-wrapper:not(.seeds-radio-checked):hover .seeds-radio-input,
2906
+ .seeds-radio-wrapper:not(.seeds-radio-checked):focus-within .seeds-radio-input {
2907
+ border-color: var(--color-form-border-base);
2908
+ background-color: var(--color-form-bg-base);
2909
+ }
2910
+
2911
+ .seeds-radio-wrapper:not(.seeds-radio-checked):hover:before,
2912
+ .seeds-radio-wrapper:not(.seeds-radio-checked):focus-within:before {
2913
+ opacity: 1;
2914
+ background-color: var(--color-form-bg-base);
2915
+ }
2916
+
2917
+ /* Disabled-unchecked keeps the hover dot hidden (parity with opacity: disabled ? 0 : 1) */
2918
+ .seeds-radio-wrapper.seeds-radio-disabled:not(.seeds-radio-checked):hover:before {
2919
+ opacity: 0;
2920
+ }
2921
+
2922
+ /* Checked state */
2923
+ .seeds-radio-wrapper.seeds-radio-checked .seeds-radio-input {
2924
+ border-color: var(--color-form-border-selected);
2925
+ /* No --color-form-bg-selected token exists; form.background.selected resolves
2926
+ to the same value as form.border.selected in both light and dark themes. */
2927
+ background-color: var(--color-form-border-selected);
2928
+ }
2929
+
2930
+ .seeds-radio-wrapper.seeds-radio-checked:before {
2931
+ opacity: 1;
2932
+ background-color: var(--color-form-bg-base);
2933
+ }
2934
+
2935
+ .seeds-radio-label {
2936
+ margin-left: var(--space-300);
2937
+ font-size: var(--font-size-200);
2938
+ line-height: 1;
2939
+ cursor: pointer;
2940
+ color: var(--color-text-headline);
2941
+ }
2942
+
2943
+ .seeds-radio.seeds-radio-disabled .seeds-radio-label {
2944
+ opacity: 0.4;
2945
+ cursor: not-allowed;
2946
+ }
2947
+ }
2948
+
2491
2949
  /* --- seeds-react-rating --- */
2492
2950
  @layer components {
2493
2951
  .seeds-rating {
@@ -2496,6 +2954,88 @@
2496
2954
  }
2497
2955
  }
2498
2956
 
2957
+ /* --- seeds-react-segmented-control --- */
2958
+ /**
2959
+ * Seeds SegmentedControl component classes
2960
+ * Use these instead of writing out individual Tailwind utility classes.
2961
+ *
2962
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
2963
+ * CSS variable definitions and dark mode support. Dark mode works
2964
+ * automatically because the variables below are redefined under
2965
+ * [data-theme="dark"] in theme-all.css.
2966
+ *
2967
+ * Usage:
2968
+ * <div class="seeds-segmented-control">
2969
+ * <button class="seeds-segmented-control-item" data-state="on">One</button>
2970
+ * <button class="seeds-segmented-control-item" data-state="off">Two</button>
2971
+ * </div>
2972
+ */
2973
+
2974
+ /* Rules live in the Tailwind `components` cascade layer so that consumer
2975
+ utility classes (which Tailwind v4 emits in the later `utilities` layer, or
2976
+ unlayered) can override the component's own styles. Without this layer the
2977
+ unlayered component rules would always win the cascade and classes like
2978
+ `p-300`, `mx-200`, or `inline-flex` could not override them. */
2979
+ @layer components {
2980
+ .seeds-segmented-control {
2981
+ display: flex;
2982
+ border: 1px solid var(--color-button-secondary-border-base);
2983
+ border-radius: var(--radius-outer);
2984
+ padding: var(--space-100);
2985
+ font-family: var(--font-family);
2986
+ }
2987
+
2988
+ .seeds-segmented-control-disabled {
2989
+ opacity: 0.4;
2990
+ pointer-events: none;
2991
+ }
2992
+
2993
+ .seeds-segmented-control-item {
2994
+ flex: 1 1 auto;
2995
+ display: flex;
2996
+ align-items: center;
2997
+ justify-content: center;
2998
+ text-align: center;
2999
+ border: 0;
3000
+ cursor: pointer;
3001
+ color: var(--color-text-body);
3002
+ background: transparent;
3003
+ font-size: var(--font-size-200);
3004
+ font-weight: var(--font-weight-semibold);
3005
+ /* Matches default line height of Icon. Also matches the overall height of
3006
+ Input, Select, and Button. */
3007
+ line-height: 16px;
3008
+ border-radius: var(--radius-inner);
3009
+ /* To match the height of buttons... 350 padding - 2px top and bottom padding
3010
+ of the parent - 1px border on top and bottom */
3011
+ padding: calc(var(--space-350) - 6px);
3012
+ transition: all var(--duration-fast);
3013
+ }
3014
+
3015
+ .seeds-segmented-control-item + .seeds-segmented-control-item {
3016
+ margin-left: var(--space-100);
3017
+ }
3018
+
3019
+ .seeds-segmented-control-item:hover {
3020
+ background-color: var(--color-listItem-bg-hover);
3021
+ }
3022
+
3023
+ .seeds-segmented-control-item[data-state="on"] {
3024
+ color: var(--color-text-inverse);
3025
+ background-color: var(--color-listItem-bg-selected);
3026
+ }
3027
+
3028
+ .seeds-segmented-control-item[data-state="on"]:hover {
3029
+ background-color: var(--color-listItem-bg-selected);
3030
+ }
3031
+
3032
+ .seeds-segmented-control-item:disabled,
3033
+ .seeds-segmented-control-item[data-disabled] {
3034
+ opacity: 0.4;
3035
+ pointer-events: none;
3036
+ }
3037
+ }
3038
+
2499
3039
  /* --- seeds-react-select --- */
2500
3040
  /**
2501
3041
  * Seeds Select component classes
@@ -2780,6 +3320,147 @@
2780
3320
  }
2781
3321
  }
2782
3322
 
3323
+ /* --- seeds-react-switch --- */
3324
+ /**
3325
+ * Seeds Switch component classes
3326
+ * Use these instead of writing out individual Tailwind utility classes.
3327
+ *
3328
+ * Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
3329
+ * CSS variable definitions and dark mode support.
3330
+ *
3331
+ * Usage:
3332
+ * <button class="seeds-switch" role="switch" aria-checked="true"></button>
3333
+ * <button class="seeds-switch loading" role="switch" aria-checked="false"></button>
3334
+ */
3335
+
3336
+ @layer components {
3337
+ .seeds-switch {
3338
+ position: relative;
3339
+ display: inline-flex;
3340
+ align-self: center;
3341
+ width: 40px;
3342
+ height: 24px;
3343
+ margin: 0;
3344
+ padding: var(--space-100) var(--space-200);
3345
+ vertical-align: middle;
3346
+ appearance: none;
3347
+ background-color: var(--color-form-bg-base);
3348
+ border-radius: 16px;
3349
+ outline: none;
3350
+ cursor: pointer;
3351
+ transition: background-color var(--duration-fast) var(--ease-ease_inout);
3352
+ border: 1px solid var(--color-form-border-base);
3353
+ white-space: nowrap;
3354
+ overflow: hidden;
3355
+ }
3356
+
3357
+ /* Mixin for styled focus ring — copied from button.css:34-39 */
3358
+ .seeds-switch:focus {
3359
+ outline: none;
3360
+ box-shadow:
3361
+ 0 0 0 1px var(--color-button-primary-bg-base),
3362
+ 0 0 0 4px color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
3363
+ }
3364
+
3365
+ /* Base styles for circle element */
3366
+ .seeds-switch[aria-checked]::after {
3367
+ display: block;
3368
+ width: 16px;
3369
+ height: 16px;
3370
+ border-radius: 50%;
3371
+ content: "";
3372
+ transition: transform var(--duration-fast) var(--ease-ease_inout);
3373
+ }
3374
+
3375
+ .seeds-switch[aria-checked].loading {
3376
+ cursor: not-allowed;
3377
+ pointer-events: none;
3378
+ background-size: contain;
3379
+ background-color: var(--color-form-bg-base);
3380
+ }
3381
+
3382
+ .seeds-switch[aria-checked].loading::after {
3383
+ position: absolute;
3384
+ box-sizing: content-box;
3385
+ width: 8px;
3386
+ height: 8px;
3387
+ border-radius: var(--radius-pill);
3388
+ border: 3px dotted var(--color-icon-base);
3389
+ background-color: transparent;
3390
+ animation: seeds-switch-loading 2s linear infinite;
3391
+ }
3392
+
3393
+ /* Checked State */
3394
+ .seeds-switch[aria-checked="true"] {
3395
+ color: var(--color-text-body);
3396
+ text-align: left;
3397
+ border-color: var(--color-form-border-selected);
3398
+ background-color: var(--color-form-bg-selected);
3399
+ }
3400
+
3401
+ .seeds-switch[aria-checked="true"] .Icon {
3402
+ position: absolute;
3403
+ top: 50%;
3404
+ left: 4px;
3405
+ transform: translate(0, -50%);
3406
+ color: var(--color-icon-inverse);
3407
+ }
3408
+
3409
+ .seeds-switch[aria-checked="true"]::after {
3410
+ background-color: var(--color-icon-inverse);
3411
+ opacity: 1;
3412
+ transform: translate(100%, 6%);
3413
+ }
3414
+
3415
+ .seeds-switch[aria-checked="true"].loading::after {
3416
+ top: 4px;
3417
+ right: 5px;
3418
+ }
3419
+
3420
+ .seeds-switch[aria-checked="true"]:hover::after,
3421
+ .seeds-switch[aria-checked="true"]:focus::after {
3422
+ transform: translate(90%, 6%);
3423
+ }
3424
+
3425
+ /* Unchecked State */
3426
+ .seeds-switch[aria-checked="false"]::after {
3427
+ background-color: var(--color-icon-base);
3428
+ opacity: 0.64;
3429
+ transform: translate(0%, 6%);
3430
+ }
3431
+
3432
+ .seeds-switch[aria-checked="false"].loading::after {
3433
+ top: 4px;
3434
+ left: 5px;
3435
+ }
3436
+
3437
+ .seeds-switch[aria-checked="false"]:hover::after,
3438
+ .seeds-switch[aria-checked="false"]:focus::after {
3439
+ transform: translate(10%, 6%);
3440
+ }
3441
+
3442
+ /* Disabled State Styles */
3443
+ .seeds-switch:disabled {
3444
+ opacity: 0.4;
3445
+ pointer-events: none;
3446
+ cursor: not-allowed;
3447
+ }
3448
+
3449
+ .seeds-switch:disabled[aria-checked="true"]:hover,
3450
+ .seeds-switch:disabled[aria-checked="true"]:focus {
3451
+ background-color: var(--color-container-bg-selected);
3452
+ }
3453
+
3454
+ @keyframes seeds-switch-loading {
3455
+ 0% {
3456
+ transform: rotate(0deg);
3457
+ }
3458
+ 100% {
3459
+ transform: rotate(360deg);
3460
+ }
3461
+ }
3462
+ }
3463
+
2783
3464
  /* --- seeds-react-text --- */
2784
3465
  /**
2785
3466
  * Seeds Text component classes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sproutsocial/racine",
3
- "version": "31.7.3",
3
+ "version": "31.7.5",
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.50",
77
- "@sproutsocial/seeds-react-avatar": "^1.1.19",
78
- "@sproutsocial/seeds-react-badge": "^2.0.36",
79
- "@sproutsocial/seeds-react-banner": "^1.1.24",
80
- "@sproutsocial/seeds-react-box": "^1.1.23",
81
- "@sproutsocial/seeds-react-breadcrumb": "^1.1.9",
82
- "@sproutsocial/seeds-react-button": "^2.2.3",
83
- "@sproutsocial/seeds-react-card": "^1.1.44",
84
- "@sproutsocial/seeds-react-character-counter": "^1.0.4",
85
- "@sproutsocial/seeds-react-chart-legend": "^1.0.43",
86
- "@sproutsocial/seeds-react-chat-bubble": "^0.2.2",
87
- "@sproutsocial/seeds-react-checkbox": "^1.3.44",
76
+ "@sproutsocial/seeds-react-accordion": "^0.4.52",
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.17",
90
- "@sproutsocial/seeds-react-content-block": "^0.5.17",
91
- "@sproutsocial/seeds-react-content-header": "^0.2.22",
92
- "@sproutsocial/seeds-react-data-table": "^2.6.25",
93
- "@sproutsocial/seeds-react-datepicker": "^1.0.41",
94
- "@sproutsocial/seeds-react-drawer": "^2.2.10",
95
- "@sproutsocial/seeds-react-duration": "^1.0.26",
96
- "@sproutsocial/seeds-react-empty-state": "^1.0.25",
97
- "@sproutsocial/seeds-react-fieldset": "^1.0.25",
98
- "@sproutsocial/seeds-react-form-field": "^1.1.19",
99
- "@sproutsocial/seeds-react-grid": "^0.2.7",
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.27",
98
+ "@sproutsocial/seeds-react-form-field": "^1.1.21",
99
+ "@sproutsocial/seeds-react-grid": "^0.2.8",
100
100
  "@sproutsocial/seeds-react-hooks": "^3.2.4",
101
- "@sproutsocial/seeds-react-icon": "^2.4.2",
102
- "@sproutsocial/seeds-react-image": "^1.0.23",
103
- "@sproutsocial/seeds-react-indicator": "^1.0.42",
104
- "@sproutsocial/seeds-react-input": "^1.5.29",
105
- "@sproutsocial/seeds-react-keyboard-key": "^1.0.25",
106
- "@sproutsocial/seeds-react-label": "^1.0.25",
107
- "@sproutsocial/seeds-react-link": "^1.1.15",
108
- "@sproutsocial/seeds-react-list": "^0.3.29",
109
- "@sproutsocial/seeds-react-loader": "^1.0.25",
110
- "@sproutsocial/seeds-react-loader-button": "^1.0.48",
111
- "@sproutsocial/seeds-react-message": "^1.0.51",
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.31",
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
112
  "@sproutsocial/seeds-react-mixins": "^4.3.9",
113
- "@sproutsocial/seeds-react-modal": "^2.5.25",
113
+ "@sproutsocial/seeds-react-modal": "^2.5.26",
114
114
  "@sproutsocial/seeds-react-narrative-kit": "^0.6.0",
115
- "@sproutsocial/seeds-react-numeral": "^1.0.50",
116
- "@sproutsocial/seeds-react-pagination": "^0.1.23",
117
- "@sproutsocial/seeds-react-panel": "^1.0.3",
118
- "@sproutsocial/seeds-react-peek-in": "^0.3.2",
119
- "@sproutsocial/seeds-react-partner-logo": "^1.7.15",
120
- "@sproutsocial/seeds-react-popout": "^2.5.11",
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.10",
123
- "@sproutsocial/seeds-react-radio": "^1.3.25",
124
- "@sproutsocial/seeds-react-rating": "^1.0.43",
125
- "@sproutsocial/seeds-react-segmented-control": "^1.1.24",
122
+ "@sproutsocial/seeds-react-progress": "^0.2.11",
123
+ "@sproutsocial/seeds-react-radio": "^1.3.27",
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.43",
128
- "@sproutsocial/seeds-react-skeleton": "^1.1.23",
129
- "@sproutsocial/seeds-react-stack": "^1.0.22",
130
- "@sproutsocial/seeds-react-switch": "^1.2.41",
131
- "@sproutsocial/seeds-react-system-props": "^3.1.1",
132
- "@sproutsocial/seeds-react-table": "^1.0.44",
133
- "@sproutsocial/seeds-react-tabs": "^1.4.13",
134
- "@sproutsocial/seeds-react-text": "^1.5.0",
135
- "@sproutsocial/seeds-react-textarea": "^1.0.24",
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",
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.43",
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.53",
139
+ "@sproutsocial/seeds-react-tooltip": "^1.1.30",
140
140
  "@sproutsocial/seeds-react-theme": "^4.2.0",
141
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.24",
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.3",
166
+ "@sproutsocial/seeds-react-menu": "^1.16.5",
167
167
  "@sproutsocial/seeds-react-testing-library": "*",
168
168
  "@sproutsocial/seeds-space": "^0.8.1",
169
169
  "@sproutsocial/seeds-testing": "*",