@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/CHANGELOG.md +33 -0
- package/CONTRIBUTING.md +18 -5
- package/README.md +32 -9
- package/base.css +2 -1
- package/bin/synced-flow.mjs +446 -58
- package/components.css +440 -9
- package/dist/index.d.ts +69 -0
- package/dist/index.js +69 -0
- package/docs/accessibility-css.md +14 -3
- package/docs/ai-usage.md +22 -1
- package/docs/api-contract.md +10 -2
- package/docs/audit-2026-06.md +13 -12
- package/docs/base-styling.md +5 -0
- package/docs/cli-reference.md +9 -6
- package/docs/config-reference.md +2 -2
- package/docs/css-optimisation.md +10 -10
- package/docs/native-components.md +121 -0
- package/docs/patterns.md +18 -0
- package/docs/quick-start.md +6 -4
- package/docs/recipes.md +12 -0
- package/docs/release-readiness.md +32 -7
- package/docs/system-primitives.md +10 -3
- package/docs/tokens.md +10 -2
- package/examples/README.md +2 -2
- package/examples/astro/src/styles/synced-flow.generated.css +14 -0
- package/examples/next/app/synced-flow.generated.css +19 -5
- package/examples/plain-html/synced-flow.generated.css +19 -5
- package/examples/templates/README.md +2 -0
- package/examples/templates/app-settings-workflow.html +81 -0
- package/examples/vite/src/synced-flow.generated.css +19 -5
- package/examples/wordpress/assets/css/synced-flow.css +542 -9
- package/package.json +14 -3
- package/reset.css +1 -1
- package/skills/synced-flow/SKILL.md +20 -3
- package/src/index.ts +69 -0
- package/src/presets.mjs +5 -5
- package/src/tokens.mjs +10 -8
- package/styles.css +456 -21
- package/tokens.css +13 -10
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(
|
|
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(
|
|
915
|
-
.sf-data-table :where(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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";
|