@wwtdev/bsds-css 2.0.9 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/wwt-bsds.css CHANGED
@@ -709,6 +709,14 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
709
709
  .box-shadow:where([data-variant="profile"]) {
710
710
  box-shadow: var(--bs-shadow-profilePhoto);
711
711
  }
712
+ :root {
713
+ /* get design sign off on these first
714
+ --bs-trans-color: color 100ms ease-in-out;
715
+ --bs-trans-outline-color: outline-color 100ms ease-in-out;
716
+ */
717
+
718
+ --bs-trans-rotate180: transform 200ms ease-in-out;
719
+ }
712
720
  /* Specificity should be either (0, 1, 0) (class-based) or (0, 0, 1) (element-based) for each selector */
713
721
  .box {
714
722
  background: var(--bg-color, var(--bs-bg-subtle));
@@ -878,7 +886,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
878
886
  .bs-accordion :where(header button) > :where([data-position="end"]) {
879
887
  grid-area: end;
880
888
  transform: rotate(0);
881
- transition: transform 250ms ease-out;
889
+ transition: var(--bs-trans-rotate180);
882
890
  }
883
891
  .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
884
892
  transform: rotate(180deg);
@@ -906,8 +914,11 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
906
914
  .bs-badge {
907
915
  --badge-bg: var(--bs-red-base);
908
916
  --badge-text: var(--bs-white);
917
+ display: inline-block;
909
918
  }
910
- .bs-badge[data-position^='left']::before,
919
+ /* ------ Badge wrapped around text ------ */
920
+ /* Badge DOT */
921
+ .bs-badge:where([data-position^='left'])::before,
911
922
  .bs-badge:where(:not([data-position^='left']))::after {
912
923
  align-items: center;
913
924
  background: var(--badge-bg);
@@ -927,38 +938,55 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
927
938
  .bs-pill .bs-badge::after {
928
939
  font-size: 0.8125em;
929
940
  }
930
- .bs-badge[data-count]:where([data-position^='left'])::before,
931
- .bs-badge[data-count]:where(:not([data-position^='left']))::after {
941
+ /* Badge COUNT */
942
+ .bs-badge:where([data-count][data-position^='left'])::before,
943
+ .bs-badge:where([data-count]:not([data-position^='left']))::after {
932
944
  color: var(--badge-text);
933
945
  content: attr(data-count);
934
- min-height: 1rem;
946
+ height: 1rem;
935
947
  min-width: 1rem;
936
948
  padding: 0 4px;
937
949
  top: -0.0625rem;
938
950
  vertical-align: unset;
939
951
  width: auto;
940
952
  }
941
- .bs-badge[data-count]::before {
942
- margin-right: 0.25rem;
943
- }
944
- .bs-badge[data-count]::after {
945
- margin-left: 0.25rem;
946
- }
947
- .bs-badge[data-count='0']::before,
948
- .bs-badge[data-count='0']::after {
953
+ .bs-badge:where([data-count='0'])::before,
954
+ .bs-badge:where([data-count='0'])::after {
949
955
  display: none;
950
956
  }
951
- .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::before,
952
- .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::after {
957
+ .bs-badge:where([data-show-zero]):where(:not([data-show-zero="false"]))::before,
958
+ .bs-badge:where([data-show-zero]):where(:not([data-show-zero="false"]))::after {
953
959
  display: inline-flex;
954
960
  }
955
- .bs-badge[data-badge-color^='blue'] {
961
+ /* Badge SPACING against wrapped text */
962
+ .bs-badge::before {
963
+ margin-right: 0.25rem;
964
+ }
965
+ .bs-badge::after {
966
+ margin-left: 0.25rem;
967
+ }
968
+ /* Badge COLORS */
969
+ .bs-badge:where([data-badge-color^='blue']) {
956
970
  --badge-bg: var(--bs-blue-base);
957
971
  }
958
- .bs-badge[data-badge-color^='white'] {
972
+ .bs-badge:where([data-badge-color^='white']) {
959
973
  --badge-bg: var(--bs-white);
960
974
  --badge-text: var(--bs-black);
961
975
  }
976
+ /* ------ Standalone Badge (not wrapped around text) ------ */
977
+ .bs-badge:where([data-variant="notext"]) {
978
+ align-items: center;
979
+ display: inline-flex;
980
+ justify-content: center;
981
+ }
982
+ .bs-badge:where([data-variant="notext"]) {
983
+ line-height: 1;
984
+ }
985
+ .bs-badge:where([data-variant="notext"])::after,
986
+ .bs-badge:where([data-variant="notext"])::before {
987
+ margin: 0;
988
+ top: unset;
989
+ }
962
990
  .bs-banner {
963
991
  background-color: var(--bs-royal-400);
964
992
  color: var(--bs-gray-100);
@@ -1009,7 +1037,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1009
1037
  --btn-main: var(--bs-blue-base);
1010
1038
  --btn-secondary: var(--bs-blue-medium);
1011
1039
  --btn-highlight: var(--bs-blue-100);
1012
- --btn-padding: .25rem .75rem .375rem;
1040
+ --btn-padding: .25rem .75rem;
1013
1041
  --btn-focus-pseudo-width: calc(100% + 0.5rem);
1014
1042
  align-items: center;
1015
1043
  background-color: var(--btn-main);
@@ -1018,8 +1046,9 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1018
1046
  color: var(--bs-white);
1019
1047
  cursor: pointer;
1020
1048
  display: inline-flex;
1021
- font-size: var(--bs-text-md);
1049
+ font-size: var(--btn-text-size, var(--bs-text-md));
1022
1050
  font-weight: 600;
1051
+ height: var(--btn-height, 2.5rem);
1023
1052
  justify-content: center;
1024
1053
  line-height: 1.5;
1025
1054
  outline: 2px solid transparent;
@@ -1038,7 +1067,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1038
1067
  transform-origin: center;
1039
1068
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
1040
1069
  }
1041
- /* Button Focus Styles */
1070
+ /* ------------ Focus Styles ------------ */
1042
1071
  .bs-button::before {
1043
1072
  border-color: transparent;
1044
1073
  border-radius: 0.5rem;
@@ -1064,7 +1093,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1064
1093
  border-color: transparent;
1065
1094
  box-shadow: none;
1066
1095
  }
1067
- /* Ghost Buttons */
1096
+ /* ------------ Ghost Buttons ------------ */
1068
1097
  .bs-button:where([data-ghost]:not([data-ghost="false"])) {
1069
1098
  --btn-light: var(--bs-blue-10);
1070
1099
  --btn-secondary: var(--bs-blue-10);
@@ -1084,7 +1113,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1084
1113
  inset 0 0 0 1px var(--btn-main),
1085
1114
  inset 0px 0px 4px 1px var(--btn-highlight);
1086
1115
  }
1087
- /* Button type */
1116
+ /* ------------ Button type ------------ */
1088
1117
  .bs-button:where([data-variant^='secondary']) {
1089
1118
  --btn-main: var(--bs-plum-400);
1090
1119
  --btn-secondary: var(--bs-plum-300);
@@ -1115,14 +1144,15 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1115
1144
  --btn-light: var(--bs-red-10);
1116
1145
  --btn-highlight: var(--bs-red-100);
1117
1146
  }
1118
- /* Text Button */
1147
+ /* ------------ Text Button ------------ */
1119
1148
  .bs-button:where([data-text]:not([data-text="false"])) {
1120
- --btn-padding: 0 0;
1121
- --btn-focus-pseudo-width: calc(100% + 1.25rem); /* text btns don't have side padding, but we do want focus outline to look padded */
1149
+ --btn-height: auto;
1150
+ --btn-padding: 0;
1151
+ --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
1152
+ --btn-text-size: var(--bs-text-md);
1122
1153
  background-color: transparent;
1123
1154
  color: var(--bs-blue-500);
1124
1155
  cursor: pointer;
1125
- font-size: var(--bs-text-md);
1126
1156
  font-weight: 400;
1127
1157
  line-height: 150%;
1128
1158
  }
@@ -1137,14 +1167,24 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1137
1167
  .bs-button:where([data-text]:not([data-text="false"])):active {
1138
1168
  box-shadow: none;
1139
1169
  }
1140
- /* Button Size */
1170
+ /* ------------ Button Size -------------- */
1141
1171
  .bs-button:where([data-size^='sm']) {
1142
- font-size: var(--bs-text-sm);
1172
+ --btn-height: 1.75rem;
1173
+ --btn-padding: .25rem .75rem .375rem;
1174
+ --btn-text-size: var(--bs-text-sm);
1143
1175
  }
1144
- .bs-button:where([data-size^='sm']):where([data-text]:not([data-text="false"])) {
1145
- font-size: var(--bs-text-base);
1176
+ .bs-button:where([data-size][data-text]:not([data-text="false"])) {
1177
+ --btn-height: auto;
1178
+ --btn-padding: 0;
1179
+ }
1180
+ .bs-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
1181
+ --btn-text-size: var(--bs-text-base);
1182
+ }
1183
+ /* Size XS only applies to text buttons */
1184
+ .bs-button:where([data-size^='xs'][data-text]:not([data-text="false"])) {
1185
+ --btn-text-size: var(--bs-text-sm);
1146
1186
  }
1147
- /* Disabled Styling */
1187
+ /* ------------ Disabled Styling ------------ */
1148
1188
  :where(button:disabled),
1149
1189
  .bs-button:where(:disabled),
1150
1190
  .bs-button:where([aria-disabled="true"]) /* for links as buttons */ {
@@ -1163,14 +1203,7 @@ a:where(.bs-link):where(:focus:not(:focus-visible)) {
1163
1203
  .bs-button:where([data-text]:not([data-text="false"]))[aria-disabled="true"] {
1164
1204
  background-color: transparent;
1165
1205
  }
1166
- /* Icon Height */
1167
- .bs-button :where(svg:not([height])) {
1168
- height: var(--bs-text-base);
1169
- }
1170
- .bs-button:where([data-size^='sm']) :where(svg:not([height])) {
1171
- height: var(--bs-text-xs);
1172
- }
1173
- /* links as buttons */
1206
+ /* ------------ links as buttons ------------ */
1174
1207
  a.bs-button {
1175
1208
  align-items: center;
1176
1209
  display: inline-flex;
@@ -1216,7 +1249,7 @@ a.bs-circle-button {
1216
1249
  height: calc(100% + 0.5rem);
1217
1250
  inset: -0.25rem;
1218
1251
  position: absolute;
1219
- transition: border-color 0.125s ease-in-out;
1252
+ transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
1220
1253
  width: calc(100% + 0.5rem);
1221
1254
  }
1222
1255
  .bs-circle-button :where(.bs-circle-button-icon) {
@@ -1269,10 +1302,12 @@ a.bs-circle-button {
1269
1302
  transform-origin: center;
1270
1303
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
1271
1304
  }
1272
- .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon) {
1305
+ .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon),
1306
+ .bs-circle-button:where([data-direction="right"]):hover::before {
1273
1307
  transform: translateX(.25rem);
1274
1308
  }
1275
- .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon) {
1309
+ .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon),
1310
+ .bs-circle-button:where([data-direction="left"]):hover::before {
1276
1311
  transform: translateX(-.25rem);
1277
1312
  }
1278
1313
  .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):hover :where(.bs-circle-button-icon) {
@@ -1557,6 +1592,91 @@ a.bs-circle-button {
1557
1592
  padding-right: 0.75rem;
1558
1593
  }
1559
1594
  }
1595
+ /*
1596
+ custom properties:
1597
+ --filterbtn-caret-size
1598
+ --filterbtn-caret-transform
1599
+ --filterbtn-color
1600
+ --filterbtn-focus-color
1601
+ --filterbtn-height
1602
+ --filterbtn-text-size
1603
+ --filterbtn-weight
1604
+ */
1605
+ button:where(.bs-filter-button) {
1606
+ flex-shrink: 0;
1607
+ }
1608
+ .bs-filter-button {
1609
+ align-items: center;
1610
+ border-radius: 0.25rem;
1611
+ color: var(--filterbtn-color, var(--bs-ink-blue));
1612
+ -moz-column-gap: 0.5rem;
1613
+ column-gap: 0.5rem;
1614
+ cursor: pointer;
1615
+ display: inline-flex;
1616
+ font-size: var(--filterbtn-text-size, var(--bs-text-base));
1617
+ font-weight: var(--filterbtn-weight, 400);
1618
+ height: var(--filterbtn-height, 2rem);
1619
+ line-height: 1.5;
1620
+ outline: solid var(--filterbtn-focus-color, transparent) .125rem;
1621
+ outline-offset: -.125rem;
1622
+ padding-inline: .5rem;
1623
+ transition: outline-color 100ms ease-in-out;
1624
+ width: -moz-max-content;
1625
+ width: max-content;
1626
+ }
1627
+ .bs-filter-button :where(.bs-icon),
1628
+ .bs-filter-button :where(span:has(svg:only-child)) {
1629
+ display: block;
1630
+ height: var(--filterbtn-caret-size, 1rem);
1631
+ line-height: 1;
1632
+ transform: var(--filterbtn-caret-transform, rotate(0deg));
1633
+ transform-origin: center;
1634
+ transition: var(--bs-trans-rotate180);
1635
+ width: var(--filterbtn-caret-size, 1rem);
1636
+ }
1637
+ .bs-filter-button:where([data-size="sm"],[data-size="xs"]) {
1638
+ --filterbtn-height: 1.75rem;
1639
+ --filterbtn-text-size: var(--bs-text-sm);
1640
+ --filterbtn-caret-size: .75rem;
1641
+ }
1642
+ .bs-filter-button:where([data-size="sm"]) {
1643
+ --filterbtn-text-size: var(--bs-text-sm);
1644
+ }
1645
+ .bs-filter-button:where([data-size="xs"]) {
1646
+ --filterbtn-text-size: var(--bs-text-xs);
1647
+ --filterbtn-weight: 600;
1648
+ }
1649
+ /* Hover state */
1650
+ .bs-filter-button:hover {
1651
+ --filterbtn-color: var(--bs-blue-base);
1652
+ }
1653
+ /* Focus state */
1654
+ .bs-filter-button:where(:focus-visible) {
1655
+ --filterbtn-focus-color: var(--bs-blue-base);
1656
+ }
1657
+ /* Filter open state */
1658
+ .bs-filter-button:where([aria-expanded="true"],[data-open="true"]) {
1659
+ --filterbtn-caret-transform: rotate(180deg);
1660
+ }
1661
+ /* Badge non-standard color */
1662
+ .bs-filter-button :where(.bs-badge) {
1663
+ --badge-bg: var(--bs-ink-blue);
1664
+ }
1665
+ :where(.dark) .bs-filter-button :where(.bs-badge) {
1666
+ --badge-bg: var(--bs-blue-medium);
1667
+ }
1668
+ .bs-filter-button:hover :where(.bs-badge) {
1669
+ --badge-bg: var(--filterbtn-color);
1670
+ }
1671
+ /* Disabled state */
1672
+ .bs-filter-button:where(:disabled) {
1673
+ --filterbtn-color: var(--bs-ink-disabled);
1674
+ cursor: default;
1675
+ }
1676
+ .bs-filter-button:where(:disabled) :where(.bs-badge) {
1677
+ --badge-bg: var(--bs-bg-disabled);
1678
+ --badge-text: var(--bs-ink-disabled);
1679
+ }
1560
1680
  :where(label, legend),
1561
1681
  label:where(.bs-label) {
1562
1682
  display: inline-block;
@@ -1618,28 +1738,37 @@ label:where(.bs-label) {
1618
1738
  :where(label + select, label > select) {
1619
1739
  margin-top: 0.25rem;
1620
1740
  }
1741
+ /*
1742
+ Custom properties:
1743
+ --input-bg (background color)
1744
+ --input-border (border color)
1745
+ --input-border-width (border width)
1746
+ --input-caret (caret color)
1747
+ --input-padding-block (padding block)
1748
+ --input-padding-inline (padding inline)
1749
+ --input-placeholder (placeholder color)
1750
+ --input-text-size (font size)
1751
+ */
1621
1752
  input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
1622
1753
  textarea,
1623
1754
  select,
1624
1755
  :is(.bs-input, .bs-select, .bs-textarea) {
1625
- --input-bg: var(--bs-bg-base);
1626
- --input-border: var(--bs-violet-medium);
1627
1756
  -webkit-appearance: none;
1628
1757
  -moz-appearance: none;
1629
1758
  appearance: none;
1630
- background-color: var(--input-bg);
1631
- border-color: var(--input-border);
1759
+ background-color: var(--input-bg, var(--bs-bg-base));
1760
+ border-color: var(--input-border, var(--bs-violet-medium));
1632
1761
  border-radius: 0.25rem;
1633
1762
  border-style: solid;
1634
1763
  border-width: var(--input-border-width, 1px);
1635
- caret-color: var(--bs-blue-base);
1764
+ caret-color: var(--input-caret, var(--bs-blue-base));
1636
1765
  color: var(--bs-ink-base);
1637
- font-size: var(--bs-text-base);
1766
+ font-size: var(--input-text-size, var(--bs-text-base));
1638
1767
  font-weight: 400;
1639
1768
  height: 2.5rem;
1640
1769
  line-height: var(--bs-leading-base);
1641
- min-height: 2.5rem;
1642
- padding-inline: 0.75rem;
1770
+ padding-block: var(--input-padding-block, 0.0625rem);
1771
+ padding-inline: var(--input-padding-inline, 0.75rem);
1643
1772
  }
1644
1773
  input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
1645
1774
  textarea,
@@ -1659,11 +1788,11 @@ textarea {
1659
1788
  resize: vertical;
1660
1789
  }
1661
1790
  :is(input, textarea, select)::-moz-placeholder, :is(.bs-input, .bs-select, .bs-textarea)::-moz-placeholder {
1662
- color: var(--bs-violet-lightest);
1791
+ color: var(--input-placeholder, var(--bs-violet-lightest));
1663
1792
  }
1664
1793
  :is(input, textarea, select)::placeholder,
1665
1794
  :is(.bs-input, .bs-select, .bs-textarea)::placeholder {
1666
- color: var(--bs-violet-lightest);
1795
+ color: var(--input-placeholder, var(--bs-violet-lightest));
1667
1796
  }
1668
1797
  :is(input, textarea, select):where(:focus-visible)::-moz-placeholder, :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible)::-moz-placeholder {
1669
1798
  opacity: 0;
@@ -1675,6 +1804,7 @@ textarea {
1675
1804
  :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:focus-visible),
1676
1805
  :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible) {
1677
1806
  --input-border: var(--bs-blue-base);
1807
+ outline-style: none;
1678
1808
  outline-width: 0px;
1679
1809
  }
1680
1810
  :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled),
@@ -1743,7 +1873,7 @@ select,
1743
1873
  border-radius: .25rem;
1744
1874
  color: var(--bs-ink-base);
1745
1875
  display: flex;
1746
- height: 2.5rem;
1876
+ height: var(--input-addon-height, 2.5rem);
1747
1877
  overflow: hidden;
1748
1878
  padding: 0;
1749
1879
  pointer-events: none;
@@ -1781,7 +1911,7 @@ and issues with box-sizing
1781
1911
  flex-shrink: 0;
1782
1912
  position: relative;
1783
1913
  }
1784
- .bs-input-addon > :where([data-autowidth]:not([data-autowidth="false"]), .bs-input-addon, bs-input) {
1914
+ .bs-input-addon > :where([data-autowidth]:not([data-autowidth="false"]), .bs-input-addon, bs-input, .bs-input) {
1785
1915
  flex-grow: 1;
1786
1916
  flex-shrink: 1;
1787
1917
  }
@@ -1800,6 +1930,7 @@ and issues with box-sizing
1800
1930
  .bs-input-addon > *,
1801
1931
  .bs-input-addon :where(input, select),
1802
1932
  .bs-input-addon :is(bs-input, bs-select) :where(input, select),
1933
+ .bs-input-addon :is(input, select):where(.bs-input, .bs-select),
1803
1934
  .bs-input-addon :where(.bs-input-addon) {
1804
1935
  --input-border: transparent;
1805
1936
  --input-border-width: 0px;
@@ -1807,9 +1938,11 @@ and issues with box-sizing
1807
1938
  .bs-input-addon {
1808
1939
  --input-addon-nested-border: transparent;
1809
1940
  }
1810
- .bs-input-addon :where(:focus-within) :where(input, select),
1941
+ .bs-input-addon :where(:focus-within) :where(input, select, button),
1811
1942
  .bs-input-addon :where(:focus-within) :is(bs-input, bs-select) :where(input, select),
1812
- .bs-input-addon :where(input, select):where(:focus, :focus-within, :focus-visible),
1943
+ .bs-input-addon :where(:focus-within) :is(input, select, button):where(.bs-input, .bs-select),
1944
+ .bs-input-addon :where(input, select, button):where(:focus, :focus-within, :focus-visible),
1945
+ .bs-input-addon :is(input, select):where(.bs-input, .bs-select):where(:focus, :focus-within, :focus-visible),
1813
1946
  .bs-input-addon :is(bs-input, bs-select) :where(input, select):where(:focus, :focus-within, :focus-visible) {
1814
1947
  --input-border: transparent;
1815
1948
  box-shadow: none;
@@ -1854,6 +1987,7 @@ and issues with box-sizing
1854
1987
  .bs-input-addon:where(:not([data-multifocus]):focus-within),
1855
1988
  .bs-input-addon:where([data-multifocus="false"]:focus-within),
1856
1989
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :where(input, select):where(:focus, :focus-within, :focus-visible),
1990
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :is(input, select):where(.bs-input, .bs-select):where(:focus, :focus-within, :focus-visible),
1857
1991
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :is(bs-input, bs-select) :where(input, select):where(:focus, :focus-within, :focus-visible) {
1858
1992
  --input-border: var(--focus-border);
1859
1993
  position: relative;
@@ -1866,11 +2000,13 @@ and issues with box-sizing
1866
2000
  .bs-input-addon :where(.bs-input-addon:focus-within)::after {
1867
2001
  z-index: 1;
1868
2002
  }
1869
- .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(:not(.bs-input-addon)) > :where(input:focus, select:focus),
2003
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(:not(.bs-input-addon)) > :where(input:focus, select:focus, button:focus),
2004
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :is(input, select):where(.bs-input, .bs-select):where(:focus),
1870
2005
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :is(bs-input, bs-select) :where(input:focus, select:focus),
1871
- .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(input:focus, select:focus) {
2006
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(input:focus, select:focus, button:focus) {
1872
2007
  border-radius: .25rem;
1873
2008
  box-shadow: var(--focus-border) 0px 0px 0px 1px inset;
2009
+ z-index: 1;
1874
2010
  }
1875
2011
  .bs-input-addon:where(:not([data-multifocus]):focus-within)::after,
1876
2012
  .bs-input-addon:where([data-multifocus="false"]:focus-within)::after {
@@ -1891,7 +2027,7 @@ and issues with box-sizing
1891
2027
  }
1892
2028
  /* -------- Disabled styles -------- */
1893
2029
  .bs-input-addon:where([data-disabled]:not([data-disabled="false"])),
1894
- .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) bs-button .bs-button {
2030
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) .bs-button {
1895
2031
  --input-bg: var(--bs-gray-200);
1896
2032
  --input-border: var(--bs-gray-400);
1897
2033
  color: var(--bs-gray-400);
@@ -1920,11 +2056,12 @@ and issues with box-sizing
1920
2056
  .bs-input-search :where(.bs-icon svg) {
1921
2057
  box-sizing: content-box;
1922
2058
  }
1923
- .bs-input-search:where(.bs-input-addon) :where([data-component="bs-icon-search"]) {
1924
- --icon-size: 1.75rem;
1925
- padding-left: 0.75rem;
2059
+ .bs-input-search :where([data-component="bs-icon-search"]) {
2060
+ --icon-size: var(--search-icon-size, 1.75rem);
2061
+ padding: var(--search-icon-padding, 0 0 0 .75rem);
1926
2062
  }
1927
- .bs-input-search:where(.bs-input-addon) :where(button) {
2063
+ /* Clear Button */
2064
+ .bs-input-search button {
1928
2065
  align-items: center;
1929
2066
  background-color: transparent;
1930
2067
  cursor: pointer;
@@ -1934,11 +2071,35 @@ and issues with box-sizing
1934
2071
  padding-right: 0.75rem;
1935
2072
  transition: transform 100ms ease-in-out;
1936
2073
  }
1937
- .bs-input-search:where(.bs-input-addon) :where(button:active) {
2074
+ .bs-input-search button:where(:active) {
1938
2075
  transform: scale(0.97);
1939
2076
  transform-origin: center;
1940
2077
  box-shadow: inset 0px 0px 4px 1px var(--bs-blue-base);
1941
2078
  }
2079
+ .bs-input-search button:where(:focus) {
2080
+ border-radius: .25rem;
2081
+ box-shadow: var(--focus-border) 0px 0px 0px 1px inset;
2082
+ z-index: 1;
2083
+ }
2084
+ /* Filter variant */
2085
+ .bs-input-search:where([data-variant="filter"]) {
2086
+ --focus-border: transparent;
2087
+ --input-border: transparent;
2088
+ --input-addon-height: 1.5rem;
2089
+ --input-caret: var(--bs-blue-base);
2090
+ --input-padding-block: 0 0.125rem;
2091
+ --input-padding-inline: 0.5rem;
2092
+ --input-placeholder: var(--bs-ink-light);
2093
+ --input-text-size: var(--bs-text-sm);
2094
+ --search-icon-size: 1rem;
2095
+ --search-icon-padding: 0;
2096
+ }
2097
+ /* -------- Disabled styles -------- */
2098
+ .bs-input-addon:where([data-variant="filter"][data-disabled="true"]),
2099
+ .bs-input-addon:where([data-variant="filter"][data-disabled="true"]) :is(.bs-button, .bs-input) {
2100
+ --input-bg: var(--bs-bg-base);
2101
+ --input-border: transparent;
2102
+ }
1942
2103
  .bs-field-details {
1943
2104
  display: flex;
1944
2105
  justify-content: space-between;