@syncedco/flow 0.3.1 → 0.4.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/components.css CHANGED
@@ -151,6 +151,24 @@
151
151
  gap: var(--sf-space-2xs);
152
152
  }
153
153
 
154
+ .sf-spinner {
155
+ animation: sf-spinner-rotate .75s linear infinite;
156
+ block-size: var(--sf-spinner-size, 1em);
157
+ border: .125em solid color-mix(in oklch, currentColor 28%, transparent);
158
+ border-block-start-color: currentColor;
159
+ border-radius: var(--sf-radius-full);
160
+ display: inline-block;
161
+ flex: 0 0 auto;
162
+ inline-size: var(--sf-spinner-size, 1em);
163
+ }
164
+
165
+ .sf-spinner[data-size="sm"] { --sf-spinner-size: .875em; }
166
+ .sf-spinner[data-size="lg"] { --sf-spinner-size: 1.5em; }
167
+
168
+ @keyframes sf-spinner-rotate {
169
+ to { transform: rotate(1turn); }
170
+ }
171
+
154
172
  .sf-icon {
155
173
  block-size: var(--sf-icon-size, 1em);
156
174
  color: var(--sf-icon-colour, currentColor);
@@ -897,6 +915,8 @@
897
915
 
898
916
  .sf-data-table :where(th button, .sf-table-sort) {
899
917
  align-items: center;
918
+ background: transparent;
919
+ border: 0;
900
920
  color: inherit;
901
921
  display: inline-flex;
902
922
  font: inherit;
@@ -905,14 +925,14 @@
905
925
  padding: 0;
906
926
  }
907
927
 
908
- .sf-data-table :where(th button, .sf-table-sort)[aria-sort]::after {
928
+ .sf-data-table th[aria-sort] :where(button, .sf-table-sort)::after {
909
929
  color: var(--sf-colour-subtle);
910
930
  content: "\2195";
911
931
  font-size: var(--sf-step--2);
912
932
  }
913
933
 
914
- .sf-data-table :where(th button, .sf-table-sort)[aria-sort="ascending"]::after { content: "\2191"; }
915
- .sf-data-table :where(th button, .sf-table-sort)[aria-sort="descending"]::after { content: "\2193"; }
934
+ .sf-data-table th[aria-sort="ascending"] :where(button, .sf-table-sort)::after { content: "\2191"; }
935
+ .sf-data-table th[aria-sort="descending"] :where(button, .sf-table-sort)::after { content: "\2193"; }
916
936
 
917
937
  .sf-data-table tr[data-clickable="true"] {
918
938
  cursor: pointer;
@@ -987,7 +1007,7 @@
987
1007
  }
988
1008
 
989
1009
  .sf-status::before {
990
- background: currentColor;
1010
+ background: var(--sf-status-dot, currentColor);
991
1011
  block-size: .42em;
992
1012
  border-radius: var(--sf-radius-full);
993
1013
  content: "";
@@ -1001,25 +1021,29 @@
1001
1021
  .sf-status[data-tone="success"] {
1002
1022
  --sf-status-bg: var(--sf-colour-success-soft);
1003
1023
  --sf-status-border: color-mix(in oklch, var(--sf-colour-success) 34%, transparent);
1004
- --sf-status-colour: color-mix(in oklch, var(--sf-colour-success) 76%, var(--sf-colour-foreground));
1024
+ --sf-status-colour: var(--sf-colour-foreground);
1025
+ --sf-status-dot: var(--sf-colour-success);
1005
1026
  }
1006
1027
 
1007
1028
  .sf-status[data-tone="warning"] {
1008
1029
  --sf-status-bg: var(--sf-colour-warning-soft);
1009
1030
  --sf-status-border: color-mix(in oklch, var(--sf-colour-warning) 38%, transparent);
1010
- --sf-status-colour: color-mix(in oklch, var(--sf-colour-warning) 70%, var(--sf-colour-foreground));
1031
+ --sf-status-colour: var(--sf-colour-foreground);
1032
+ --sf-status-dot: color-mix(in oklch, var(--sf-colour-warning) 60%, var(--sf-colour-foreground));
1011
1033
  }
1012
1034
 
1013
1035
  .sf-status[data-tone="danger"] {
1014
1036
  --sf-status-bg: var(--sf-colour-danger-soft);
1015
1037
  --sf-status-border: color-mix(in oklch, var(--sf-colour-danger) 34%, transparent);
1016
- --sf-status-colour: color-mix(in oklch, var(--sf-colour-danger) 76%, var(--sf-colour-foreground));
1038
+ --sf-status-colour: var(--sf-colour-foreground);
1039
+ --sf-status-dot: var(--sf-colour-danger);
1017
1040
  }
1018
1041
 
1019
1042
  .sf-status[data-tone="info"] {
1020
1043
  --sf-status-bg: var(--sf-colour-info-soft);
1021
1044
  --sf-status-border: color-mix(in oklch, var(--sf-colour-info) 34%, transparent);
1022
- --sf-status-colour: color-mix(in oklch, var(--sf-colour-info) 76%, var(--sf-colour-foreground));
1045
+ --sf-status-colour: var(--sf-colour-foreground);
1046
+ --sf-status-dot: color-mix(in oklch, var(--sf-colour-info) 68%, var(--sf-colour-foreground));
1023
1047
  }
1024
1048
 
1025
1049
  .sf-data-list {
@@ -1143,6 +1167,7 @@
1143
1167
  .sf-form {
1144
1168
  display: grid;
1145
1169
  gap: var(--sf-form-gap, var(--sf-space-s-m));
1170
+ grid-template-columns: minmax(0, 1fr);
1146
1171
  }
1147
1172
 
1148
1173
  .sf-form[data-density="compact"],
@@ -1169,6 +1194,7 @@
1169
1194
  .sf-field {
1170
1195
  display: grid;
1171
1196
  gap: var(--sf-space-2xs);
1197
+ grid-template-columns: minmax(0, 1fr);
1172
1198
  }
1173
1199
 
1174
1200
  .sf-label,
@@ -1251,6 +1277,140 @@
1251
1277
  padding-inline-start: var(--sf-space-l);
1252
1278
  }
1253
1279
 
1280
+ .sf-input-group {
1281
+ align-items: stretch;
1282
+ background: var(--sf-input-bg);
1283
+ border: 1px solid var(--sf-input-border);
1284
+ border-radius: var(--sf-input-radius);
1285
+ display: flex;
1286
+ inline-size: 100%;
1287
+ min-block-size: var(--sf-input-block-size);
1288
+ overflow: clip;
1289
+ transition: background-color var(--sf-duration-fast) var(--sf-ease-standard), border-color var(--sf-duration-fast) var(--sf-ease-standard), box-shadow var(--sf-duration-fast) var(--sf-ease-standard);
1290
+ }
1291
+
1292
+ .sf-input-group:focus-within {
1293
+ border-color: var(--sf-colour-ring);
1294
+ box-shadow: 0 0 0 .25rem color-mix(in oklch, var(--sf-colour-ring) 18%, transparent);
1295
+ outline: .125rem solid color-mix(in oklch, var(--sf-colour-ring) 24%, transparent);
1296
+ outline-offset: 0;
1297
+ }
1298
+
1299
+ .sf-input-group > :where(.sf-input, .sf-select) {
1300
+ background: transparent;
1301
+ border: 0;
1302
+ border-radius: 0;
1303
+ box-shadow: none;
1304
+ flex: 1 1 0%;
1305
+ inline-size: auto;
1306
+ min-inline-size: 0;
1307
+ outline: 0;
1308
+ }
1309
+
1310
+ .sf-input-group > :where(.sf-input, .sf-select):focus-visible {
1311
+ box-shadow: none;
1312
+ outline: 0;
1313
+ }
1314
+
1315
+ .sf-input-group__leading,
1316
+ .sf-input-group__trailing {
1317
+ align-items: center;
1318
+ color: var(--sf-colour-muted);
1319
+ display: inline-flex;
1320
+ flex: 0 0 auto;
1321
+ padding-inline: var(--sf-space-xs);
1322
+ white-space: nowrap;
1323
+ }
1324
+
1325
+ .sf-input-group__leading { border-inline-end: 1px solid var(--sf-colour-border-subtle); }
1326
+ .sf-input-group__trailing { border-inline-start: 1px solid var(--sf-colour-border-subtle); }
1327
+
1328
+ .sf-input-group__action {
1329
+ align-items: center;
1330
+ background: transparent;
1331
+ border: 0;
1332
+ border-inline-start: 1px solid var(--sf-colour-border-subtle);
1333
+ color: var(--sf-colour-foreground);
1334
+ display: inline-flex;
1335
+ flex: 0 0 auto;
1336
+ font-weight: 700;
1337
+ justify-content: center;
1338
+ padding-inline: var(--sf-space-xs);
1339
+ }
1340
+
1341
+ .sf-input-group__action:hover { background: var(--sf-colour-surface-hover); }
1342
+
1343
+ .sf-input-group[data-invalid="true"],
1344
+ .sf-field[data-invalid="true"] .sf-input-group {
1345
+ border-color: var(--sf-colour-danger);
1346
+ box-shadow: 0 0 0 .25rem var(--sf-colour-danger-soft);
1347
+ }
1348
+
1349
+ .sf-input-group:has(:disabled) {
1350
+ background: var(--sf-colour-surface-alt);
1351
+ color: var(--sf-colour-subtle);
1352
+ opacity: .72;
1353
+ }
1354
+
1355
+ .sf-file-input {
1356
+ background: var(--sf-input-bg);
1357
+ border: 1px solid var(--sf-input-border);
1358
+ border-radius: var(--sf-input-radius);
1359
+ color: var(--sf-colour-muted);
1360
+ inline-size: 100%;
1361
+ min-block-size: var(--sf-input-block-size);
1362
+ padding: var(--sf-space-3xs);
1363
+ }
1364
+
1365
+ .sf-file-input::file-selector-button {
1366
+ background: var(--sf-colour-surface-alt);
1367
+ border: 1px solid var(--sf-colour-border);
1368
+ border-radius: calc(var(--sf-input-radius) - .125rem);
1369
+ color: var(--sf-colour-foreground);
1370
+ font: inherit;
1371
+ font-weight: 700;
1372
+ margin-inline-end: var(--sf-space-xs);
1373
+ min-block-size: calc(var(--sf-input-block-size) - var(--sf-space-2xs));
1374
+ padding-inline: var(--sf-space-xs);
1375
+ }
1376
+
1377
+ .sf-file-input:hover { border-color: var(--sf-colour-border-strong); }
1378
+ .sf-file-input:hover::file-selector-button { background: var(--sf-colour-surface-hover); }
1379
+
1380
+ .sf-file-input:focus-visible {
1381
+ border-color: var(--sf-colour-ring);
1382
+ box-shadow: 0 0 0 .25rem color-mix(in oklch, var(--sf-colour-ring) 18%, transparent);
1383
+ outline: .125rem solid color-mix(in oklch, var(--sf-colour-ring) 24%, transparent);
1384
+ outline-offset: 0;
1385
+ }
1386
+
1387
+ .sf-file-input[aria-invalid="true"],
1388
+ .sf-field[data-invalid="true"] .sf-file-input {
1389
+ border-color: var(--sf-colour-danger);
1390
+ box-shadow: 0 0 0 .25rem var(--sf-colour-danger-soft);
1391
+ }
1392
+
1393
+ .sf-file-input:disabled { background: var(--sf-colour-surface-alt); opacity: .72; }
1394
+
1395
+ .sf-range {
1396
+ accent-color: var(--sf-colour-primary);
1397
+ inline-size: 100%;
1398
+ min-block-size: var(--sf-input-block-size);
1399
+ }
1400
+
1401
+ .sf-range:focus-visible {
1402
+ outline: .125rem solid var(--sf-colour-ring);
1403
+ outline-offset: .2rem;
1404
+ }
1405
+
1406
+ .sf-range[aria-invalid="true"],
1407
+ .sf-field[data-invalid="true"] .sf-range {
1408
+ accent-color: var(--sf-colour-danger);
1409
+ outline-color: var(--sf-colour-danger);
1410
+ }
1411
+
1412
+ .sf-range:disabled { opacity: .55; }
1413
+
1254
1414
  .sf-help[data-density="compact"],
1255
1415
  .sf-error[data-density="compact"] {
1256
1416
  font-size: var(--sf-step--2);
@@ -1292,6 +1452,11 @@
1292
1452
  box-shadow: 0 0 0 0.25rem var(--sf-colour-danger-soft);
1293
1453
  }
1294
1454
 
1455
+ .sf-field[data-invalid="true"] .sf-input-group > :where(.sf-input, .sf-select) {
1456
+ border: 0;
1457
+ box-shadow: none;
1458
+ }
1459
+
1295
1460
  .sf-field[data-invalid="true"] :where(.sf-label, label),
1296
1461
  .sf-field[data-invalid="true"] .sf-help {
1297
1462
  color: var(--sf-colour-danger);
@@ -1323,6 +1488,206 @@
1323
1488
  margin-block-start: .2em;
1324
1489
  }
1325
1490
 
1491
+ .sf-switch {
1492
+ align-items: center;
1493
+ display: inline-grid;
1494
+ gap: var(--sf-space-xs);
1495
+ grid-template-columns: auto 1fr;
1496
+ position: relative;
1497
+ }
1498
+
1499
+ .sf-switch > input[type="checkbox"] {
1500
+ block-size: .0625rem;
1501
+ clip: rect(0 0 0 0);
1502
+ clip-path: inset(50%);
1503
+ inline-size: .0625rem;
1504
+ overflow: hidden;
1505
+ position: absolute;
1506
+ white-space: nowrap;
1507
+ }
1508
+
1509
+ .sf-switch__control {
1510
+ background: var(--sf-colour-surface-inset);
1511
+ border: 1px solid var(--sf-colour-border-strong);
1512
+ border-radius: var(--sf-radius-full);
1513
+ block-size: 1.5rem;
1514
+ display: inline-flex;
1515
+ inline-size: 2.75rem;
1516
+ padding: .1875rem;
1517
+ transition: background-color var(--sf-duration-fast) var(--sf-ease-standard), border-color var(--sf-duration-fast) var(--sf-ease-standard);
1518
+ }
1519
+
1520
+ .sf-switch__control::before {
1521
+ background: var(--sf-colour-foreground);
1522
+ border-radius: var(--sf-radius-full);
1523
+ box-shadow: var(--sf-shadow-sm);
1524
+ content: "";
1525
+ inline-size: 1rem;
1526
+ transform: translateX(0);
1527
+ transition: transform var(--sf-duration-fast) var(--sf-ease-standard);
1528
+ }
1529
+
1530
+ .sf-switch > input[type="checkbox"]:checked + .sf-switch__control {
1531
+ background: var(--sf-colour-primary);
1532
+ border-color: var(--sf-colour-primary);
1533
+ }
1534
+
1535
+ .sf-switch > input[type="checkbox"]:checked + .sf-switch__control::before {
1536
+ background: var(--sf-colour-primary-foreground);
1537
+ transform: translateX(1.1875rem);
1538
+ }
1539
+
1540
+ .sf-switch > input[type="checkbox"]:focus-visible + .sf-switch__control {
1541
+ box-shadow: 0 0 0 .25rem color-mix(in oklch, var(--sf-colour-ring) 20%, transparent);
1542
+ outline: .125rem solid var(--sf-colour-ring);
1543
+ outline-offset: .125rem;
1544
+ }
1545
+
1546
+ .sf-switch__label { color: var(--sf-colour-foreground); font-weight: 700; }
1547
+
1548
+ .sf-switch:has(input:disabled),
1549
+ .sf-switch[aria-disabled="true"] { cursor: not-allowed; opacity: .55; }
1550
+
1551
+ .sf-segmented-control {
1552
+ background: var(--sf-colour-surface-alt);
1553
+ border: 1px solid var(--sf-colour-border);
1554
+ border-radius: var(--sf-radius-control);
1555
+ display: inline-flex;
1556
+ flex-wrap: wrap;
1557
+ gap: var(--sf-space-3xs);
1558
+ padding: var(--sf-space-3xs);
1559
+ }
1560
+
1561
+ fieldset.sf-segmented-control { margin: 0; }
1562
+
1563
+ .sf-segmented-control__option {
1564
+ cursor: pointer;
1565
+ position: relative;
1566
+ }
1567
+
1568
+ .sf-segmented-control__option > input[type="radio"] {
1569
+ block-size: .0625rem;
1570
+ clip: rect(0 0 0 0);
1571
+ clip-path: inset(50%);
1572
+ inline-size: .0625rem;
1573
+ overflow: hidden;
1574
+ position: absolute;
1575
+ white-space: nowrap;
1576
+ }
1577
+
1578
+ .sf-segmented-control__label {
1579
+ align-items: center;
1580
+ border: 1px solid transparent;
1581
+ border-radius: calc(var(--sf-radius-control) - .125rem);
1582
+ color: var(--sf-colour-muted);
1583
+ display: inline-flex;
1584
+ font-size: var(--sf-step--1);
1585
+ font-weight: 700;
1586
+ justify-content: center;
1587
+ min-block-size: 2.25rem;
1588
+ padding-inline: var(--sf-space-xs);
1589
+ }
1590
+
1591
+ .sf-segmented-control__option > input[type="radio"]:checked + .sf-segmented-control__label {
1592
+ background: var(--sf-colour-surface);
1593
+ border-color: var(--sf-colour-border);
1594
+ box-shadow: var(--sf-shadow-sm);
1595
+ color: var(--sf-colour-foreground);
1596
+ }
1597
+
1598
+ .sf-segmented-control__option > input[type="radio"]:focus + .sf-segmented-control__label {
1599
+ outline: .125rem solid var(--sf-colour-ring);
1600
+ outline-offset: .125rem;
1601
+ }
1602
+
1603
+ .sf-segmented-control__option:has(input:disabled) { cursor: not-allowed; opacity: .55; }
1604
+
1605
+ .sf-combobox { position: relative; }
1606
+
1607
+ .sf-combobox__listbox {
1608
+ background: var(--sf-colour-surface-raised);
1609
+ border: 1px solid var(--sf-colour-border);
1610
+ border-radius: var(--sf-radius-control);
1611
+ box-shadow: var(--sf-shadow-lg);
1612
+ display: grid;
1613
+ gap: var(--sf-space-3xs);
1614
+ inset-block-start: calc(100% + var(--sf-space-3xs));
1615
+ inset-inline: 0;
1616
+ list-style: none;
1617
+ max-block-size: min(18rem, 50dvh);
1618
+ overflow: auto;
1619
+ padding: var(--sf-space-2xs);
1620
+ position: absolute;
1621
+ z-index: var(--sf-z-overlay);
1622
+ }
1623
+
1624
+ .sf-combobox__option {
1625
+ border-radius: var(--sf-radius-sm);
1626
+ color: var(--sf-colour-foreground);
1627
+ cursor: pointer;
1628
+ padding-block: var(--sf-space-2xs);
1629
+ padding-inline: var(--sf-space-xs);
1630
+ }
1631
+
1632
+ .sf-combobox__option:hover,
1633
+ .sf-combobox__option[aria-selected="true"],
1634
+ .sf-combobox__option[data-active="true"] { background: var(--sf-colour-surface-hover); }
1635
+
1636
+ .sf-combobox__empty { color: var(--sf-colour-subtle); padding: var(--sf-space-xs); }
1637
+
1638
+ .sf-bulk-actions {
1639
+ align-items: center;
1640
+ background: var(--sf-colour-primary-soft);
1641
+ border: 1px solid var(--sf-colour-primary-soft-border);
1642
+ border-radius: var(--sf-radius-control);
1643
+ display: flex;
1644
+ flex-wrap: wrap;
1645
+ gap: var(--sf-space-xs);
1646
+ justify-content: space-between;
1647
+ padding: var(--sf-space-xs);
1648
+ }
1649
+
1650
+ .sf-bulk-actions__count { font-size: var(--sf-step--1); font-weight: 800; }
1651
+ .sf-bulk-actions__controls { align-items: center; display: flex; flex-wrap: wrap; gap: var(--sf-space-2xs); }
1652
+
1653
+ .sf-stepper {
1654
+ counter-reset: sf-step;
1655
+ display: grid;
1656
+ gap: var(--sf-space-xs);
1657
+ list-style: none;
1658
+ padding-inline-start: 0;
1659
+ }
1660
+
1661
+ .sf-stepper__step {
1662
+ align-items: center;
1663
+ color: var(--sf-colour-subtle);
1664
+ counter-increment: sf-step;
1665
+ display: grid;
1666
+ gap: var(--sf-space-xs);
1667
+ grid-template-columns: auto 1fr;
1668
+ }
1669
+
1670
+ .sf-stepper__marker {
1671
+ align-items: center;
1672
+ border: 1px solid var(--sf-colour-border-strong);
1673
+ border-radius: var(--sf-radius-full);
1674
+ block-size: 2rem;
1675
+ display: inline-flex;
1676
+ font-size: var(--sf-step--1);
1677
+ font-weight: 800;
1678
+ inline-size: 2rem;
1679
+ justify-content: center;
1680
+ }
1681
+
1682
+ .sf-stepper__marker:empty::before { content: counter(sf-step); }
1683
+
1684
+ .sf-stepper__step[aria-current="step"] { color: var(--sf-colour-foreground); }
1685
+ .sf-stepper__step[aria-current="step"] .sf-stepper__marker { background: var(--sf-colour-primary); border-color: var(--sf-colour-primary); color: var(--sf-colour-primary-foreground); }
1686
+ .sf-stepper__step[data-complete="true"] { color: var(--sf-colour-muted); }
1687
+ .sf-stepper__step[data-complete="true"] .sf-stepper__marker { background: var(--sf-colour-success-soft); border-color: var(--sf-colour-success); color: var(--sf-colour-success); }
1688
+ .sf-stepper__label { font-weight: 700; }
1689
+ .sf-wizard-actions { align-items: center; display: flex; flex-wrap: wrap; gap: var(--sf-space-xs); justify-content: space-between; }
1690
+
1326
1691
  .sf-alert {
1327
1692
  background: var(--sf-alert-bg, var(--sf-colour-info-soft));
1328
1693
  border: 1px solid var(--sf-alert-border, color-mix(in oklch, var(--sf-colour-info) 32%, transparent));
@@ -1448,8 +1813,11 @@
1448
1813
 
1449
1814
  .sf-menu :where(a, button),
1450
1815
  .sf-menu-popover :where(a, button) {
1816
+ background: transparent;
1817
+ border: 0;
1451
1818
  border-radius: var(--sf-radius-sm);
1452
1819
  color: inherit;
1820
+ font: inherit;
1453
1821
  padding-block: var(--sf-space-3xs);
1454
1822
  padding-inline: var(--sf-space-2xs);
1455
1823
  text-align: start;
@@ -1638,6 +2006,7 @@
1638
2006
 
1639
2007
  .sf-tab:hover,
1640
2008
  .sf-tab[aria-selected="true"],
2009
+ .sf-tab[aria-current="page"],
1641
2010
  .sf-tab[data-state="active"] {
1642
2011
  border-block-end-color: var(--sf-colour-primary);
1643
2012
  color: var(--sf-colour-foreground);
@@ -1645,6 +2014,7 @@
1645
2014
 
1646
2015
  .sf-tab[data-variant="pill"]:hover,
1647
2016
  .sf-tab[data-variant="pill"][aria-selected="true"],
2017
+ .sf-tab[data-variant="pill"][aria-current="page"],
1648
2018
  .sf-tab[data-variant="pill"][data-state="active"] {
1649
2019
  background: var(--sf-colour-primary-soft);
1650
2020
  border-color: var(--sf-colour-primary-soft-border);
@@ -1728,8 +2098,37 @@
1728
2098
  color: var(--sf-colour-foreground);
1729
2099
  }
1730
2100
 
2101
+ .sf-pagination[data-layout="complete"] {
2102
+ justify-content: space-between;
2103
+ row-gap: var(--sf-space-xs);
2104
+ }
2105
+
2106
+ .sf-pagination__summary {
2107
+ color: var(--sf-colour-muted);
2108
+ font-size: var(--sf-step--1);
2109
+ }
2110
+
2111
+ .sf-pagination__controls,
2112
+ .sf-pagination__pages,
2113
+ .sf-pagination__jump {
2114
+ align-items: center;
2115
+ display: flex;
2116
+ flex-wrap: wrap;
2117
+ gap: var(--sf-space-2xs);
2118
+ }
2119
+
2120
+ .sf-pagination__jump { color: var(--sf-colour-muted); font-size: var(--sf-step--1); }
2121
+ .sf-pagination__jump .sf-input { inline-size: 5rem; }
2122
+ .sf-pagination__jump .sf-select { inline-size: auto; }
2123
+
2124
+ @media (prefers-reduced-motion: reduce) {
2125
+ .sf-spinner { animation: none; border-color: currentColor; border-inline-end-color: transparent; }
2126
+ .sf-switch__control,
2127
+ .sf-switch__control::before { transition: none; }
2128
+ }
2129
+
1731
2130
  @media (forced-colors: active) {
1732
- :where(.sf-button, .sf-card, .sf-surface, .sf-alert, .sf-price-card, .sf-testimonial, .sf-faq__item, .sf-input, .sf-select, .sf-textarea, .sf-dialog, .sf-popover, .sf-tooltip, .sf-toast, .sf-banner, .sf-drawer, .sf-disclosure > details, details.sf-disclosure, .sf-accordion > details, .sf-tab-panel) {
2131
+ :where(.sf-button, .sf-card, .sf-surface, .sf-alert, .sf-price-card, .sf-testimonial, .sf-faq__item, .sf-input, .sf-select, .sf-textarea, .sf-input-group, .sf-file-input, .sf-dialog, .sf-popover, .sf-tooltip, .sf-toast, .sf-banner, .sf-drawer, .sf-disclosure > details, details.sf-disclosure, .sf-accordion > details, .sf-tab-panel, .sf-combobox__listbox, .sf-bulk-actions) {
1733
2132
  border-color: ButtonText;
1734
2133
  forced-color-adjust: auto;
1735
2134
  }
@@ -1746,6 +2145,38 @@
1746
2145
  color: HighlightText;
1747
2146
  }
1748
2147
 
2148
+ .sf-switch__control,
2149
+ .sf-segmented-control__label,
2150
+ .sf-stepper__marker {
2151
+ background: Canvas;
2152
+ border-color: ButtonText;
2153
+ color: ButtonText;
2154
+ forced-color-adjust: none;
2155
+ }
2156
+
2157
+ .sf-switch > input[type="checkbox"]:focus-visible + .sf-switch__control,
2158
+ .sf-segmented-control__option > input[type="radio"]:focus + .sf-segmented-control__label {
2159
+ outline: .125rem solid Highlight;
2160
+ outline-offset: .125rem;
2161
+ }
2162
+
2163
+ .sf-switch > input[type="checkbox"]:checked + .sf-switch__control,
2164
+ .sf-segmented-control__option > input[type="radio"]:checked + .sf-segmented-control__label,
2165
+ .sf-stepper__step[aria-current="step"] .sf-stepper__marker {
2166
+ background: Highlight;
2167
+ border-color: Highlight;
2168
+ color: HighlightText;
2169
+ }
2170
+
2171
+ .sf-switch__control::before { background: ButtonText; }
2172
+ .sf-switch > input[type="checkbox"]:checked + .sf-switch__control::before { background: HighlightText; }
2173
+
2174
+ .sf-stepper__step[data-complete="true"] .sf-stepper__marker {
2175
+ background: Canvas;
2176
+ border-color: LinkText;
2177
+ color: LinkText;
2178
+ }
2179
+
1749
2180
  :where(.sf-input, .sf-select, .sf-textarea)[aria-invalid="true"],
1750
2181
  .sf-field[data-invalid="true"] :where(.sf-input, .sf-select, .sf-textarea) {
1751
2182
  border-color: Mark;
package/dist/index.d.ts CHANGED
@@ -19,10 +19,79 @@ export declare const fluidSystem: {
19
19
  };
20
20
  readonly components: {
21
21
  readonly button: "sf-button";
22
+ readonly buttonGroup: "sf-button-group";
23
+ readonly icon: "sf-icon";
24
+ readonly iconButton: "sf-icon-button";
22
25
  readonly card: "sf-card";
26
+ readonly surface: "sf-surface";
27
+ readonly hero: "sf-hero";
28
+ readonly logoCloud: "sf-logo-cloud";
29
+ readonly feature: "sf-feature";
30
+ readonly stats: "sf-stats";
31
+ readonly testimonial: "sf-testimonial";
32
+ readonly pricingGrid: "sf-pricing-grid";
33
+ readonly faq: "sf-faq";
34
+ readonly callToAction: "sf-cta";
35
+ readonly footer: "sf-footer";
23
36
  readonly badge: "sf-badge";
37
+ readonly avatar: "sf-avatar";
38
+ readonly alert: "sf-alert";
39
+ readonly status: "sf-status";
40
+ readonly sectionHeader: "sf-section-header";
41
+ readonly kicker: "sf-kicker";
42
+ readonly nav: "sf-nav";
43
+ readonly form: "sf-form";
44
+ readonly fieldset: "sf-fieldset";
24
45
  readonly field: "sf-field";
46
+ readonly label: "sf-label";
47
+ readonly help: "sf-help";
48
+ readonly error: "sf-error";
25
49
  readonly input: "sf-input";
50
+ readonly inputGroup: "sf-input-group";
51
+ readonly select: "sf-select";
52
+ readonly textarea: "sf-textarea";
53
+ readonly check: "sf-check";
54
+ readonly switch: "sf-switch";
55
+ readonly fileInput: "sf-file-input";
56
+ readonly range: "sf-range";
57
+ readonly segmentedControl: "sf-segmented-control";
58
+ readonly spinner: "sf-spinner";
59
+ readonly search: "sf-search";
60
+ readonly combobox: "sf-combobox";
61
+ readonly filterBar: "sf-filter-bar";
62
+ readonly bulkActions: "sf-bulk-actions";
63
+ readonly dataTable: "sf-data-table";
64
+ readonly tableSort: "sf-table-sort";
65
+ readonly dataList: "sf-data-list";
66
+ readonly emptyState: "sf-empty-state";
67
+ readonly settingsSection: "sf-settings-section";
68
+ readonly detailPanel: "sf-detail-panel";
69
+ readonly dialog: "sf-dialog";
70
+ readonly popover: "sf-popover";
71
+ readonly drawer: "sf-drawer";
72
+ readonly tooltip: "sf-tooltip";
73
+ readonly toast: "sf-toast";
74
+ readonly toastStack: "sf-toast-stack";
75
+ readonly banner: "sf-banner";
76
+ readonly disclosure: "sf-disclosure";
77
+ readonly accordion: "sf-accordion";
78
+ readonly tabs: "sf-tabs";
79
+ readonly tab: "sf-tab";
80
+ readonly menu: "sf-menu";
81
+ readonly breadcrumb: "sf-breadcrumb";
82
+ readonly pagination: "sf-pagination";
83
+ readonly stepper: "sf-stepper";
84
+ readonly wizardActions: "sf-wizard-actions";
85
+ readonly progress: "sf-progress";
86
+ readonly skeleton: "sf-skeleton";
87
+ readonly chart: "sf-chart";
88
+ readonly meter: "sf-meter";
89
+ readonly codeWindow: "sf-code-window";
90
+ readonly codeLines: "sf-code-lines";
91
+ readonly tokenStrip: "sf-token-strip";
92
+ readonly marquee: "sf-marquee";
93
+ readonly commandList: "sf-command-list";
94
+ readonly platformCard: "sf-platform-card";
26
95
  };
27
96
  readonly utilities: {
28
97
  readonly visuallyHidden: "sf-visually-hidden";