fokus-styles 2.6.2 → 2.7.0

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.
Files changed (82) hide show
  1. package/README.md +5 -0
  2. package/dist/css/components.css +534 -27
  3. package/dist/css/components.min.css +1 -1
  4. package/dist/css/fokus-components.css +534 -27
  5. package/dist/css/fokus-components.min.css +1 -1
  6. package/dist/css/fokus-core.css +42 -0
  7. package/dist/css/fokus-core.min.css +1 -1
  8. package/dist/css/fokus-dark.css +42 -0
  9. package/dist/css/fokus-dark.min.css +1 -1
  10. package/dist/css/fokus-helpers.css +646 -0
  11. package/dist/css/fokus-helpers.min.css +2 -0
  12. package/dist/css/fokus-rtl.css +9667 -2716
  13. package/dist/css/fokus-rtl.min.css +1 -1
  14. package/dist/css/fokus-utilities.css +9175 -2682
  15. package/dist/css/fokus-utilities.min.css +1 -1
  16. package/dist/css/fokus.css +9893 -2799
  17. package/dist/css/fokus.min.css +1 -1
  18. package/dist/css/forms.css +206 -28
  19. package/dist/css/forms.min.css +1 -1
  20. package/dist/css/helpers.css +9175 -2682
  21. package/dist/css/helpers.min.css +1 -1
  22. package/dist/css/layout.css +42 -0
  23. package/dist/css/layout.min.css +1 -1
  24. package/dist/js/fokus.js +91 -69
  25. package/dist/js/fokus.min.js +19 -19
  26. package/package.json +2 -1
  27. package/packages/fokus-components/scss/components/_button-group.scss +12 -0
  28. package/packages/fokus-components/scss/components/_buttons.scss +39 -6
  29. package/packages/fokus-components/scss/components/_datepicker.scss +47 -1
  30. package/packages/fokus-components/scss/components/_dropdown.scss +212 -6
  31. package/packages/fokus-components/scss/components/_index.scss +1 -0
  32. package/packages/fokus-components/scss/components/_menu.scss +95 -0
  33. package/packages/fokus-components/scss/components/_pagination.scss +43 -16
  34. package/packages/fokus-components/scss/components/_segmented-control.scss +16 -1
  35. package/packages/fokus-components/scss/components/_tabs.scss +58 -0
  36. package/packages/fokus-components/scss/components/_tag.scss +32 -0
  37. package/packages/fokus-components/scss/forms/_forms.scss +155 -28
  38. package/packages/fokus-components/scss/forms/_range.scss +29 -0
  39. package/packages/fokus-core/scss/base/_motion.scss +3 -1
  40. package/packages/fokus-core/scss/settings/_config.scss +39 -1
  41. package/packages/fokus-core/scss/settings/_index.scss +1 -0
  42. package/packages/fokus-core/scss/settings/_utilities.scss +86 -0
  43. package/packages/fokus-core/scss/themes/_dark.scss +9 -0
  44. package/packages/fokus-core/scss/tokens/_root.scss +23 -0
  45. package/packages/fokus-js/js/combobox.js +2 -6
  46. package/packages/fokus-js/js/command-palette.js +2 -6
  47. package/packages/fokus-js/js/core/positioning.d.ts +2 -0
  48. package/packages/fokus-js/js/core/positioning.js +2 -2
  49. package/packages/fokus-js/js/core/theme.js +8 -0
  50. package/packages/fokus-js/js/datatable.js +6 -2
  51. package/packages/fokus-js/js/datepicker.js +13 -5
  52. package/packages/fokus-js/js/dropdown.js +37 -5
  53. package/packages/fokus-js/js/nested-menu.js +2 -6
  54. package/packages/fokus-js/js/notification-center.js +2 -6
  55. package/packages/fokus-js/js/pagination.js +15 -9
  56. package/packages/fokus-js/js/popover.js +2 -6
  57. package/packages/fokus-js/js/select.js +4 -0
  58. package/packages/fokus-js/js/tabs.js +4 -4
  59. package/packages/fokus-js/js/tooltip.js +2 -6
  60. package/packages/fokus-utilities/scss/utilities/_api.scss +62 -69
  61. package/packages/fokus-utilities/scss/utilities/_borders.scss +39 -0
  62. package/packages/fokus-utilities/scss/utilities/_colors.scss +27 -0
  63. package/packages/fokus-utilities/scss/utilities/_display.scss +20 -16
  64. package/packages/fokus-utilities/scss/utilities/_effects.scss +53 -0
  65. package/packages/fokus-utilities/scss/utilities/_flex.scss +50 -35
  66. package/packages/fokus-utilities/scss/utilities/_generated.scss +21 -0
  67. package/packages/fokus-utilities/scss/utilities/_grid.scss +25 -0
  68. package/packages/fokus-utilities/scss/utilities/_helpers.scss +35 -0
  69. package/packages/fokus-utilities/scss/utilities/_index.scss +11 -0
  70. package/packages/fokus-utilities/scss/utilities/_interactivity.scss +51 -0
  71. package/packages/fokus-utilities/scss/utilities/_layout.scss +61 -0
  72. package/packages/fokus-utilities/scss/utilities/_motion.scss +51 -0
  73. package/packages/fokus-utilities/scss/utilities/_position.scss +6 -6
  74. package/packages/fokus-utilities/scss/utilities/_print.scss +22 -18
  75. package/packages/fokus-utilities/scss/utilities/_shadow.scss +7 -3
  76. package/packages/fokus-utilities/scss/utilities/_sizing.scss +46 -0
  77. package/packages/fokus-utilities/scss/utilities/_spacing.scss +40 -113
  78. package/packages/fokus-utilities/scss/utilities/_states.scss +26 -10
  79. package/packages/fokus-utilities/scss/utilities/_transforms.scss +67 -0
  80. package/packages/fokus-utilities/scss/utilities/_typography.scss +72 -94
  81. package/scss/entries/helpers-entry.scss +5 -0
  82. package/scss/entries/rtl-entry.scss +6 -3
@@ -43,9 +43,26 @@
43
43
  --fs-control-height: 38px;
44
44
  --fs-control-height-sm: 30px;
45
45
  --fs-control-height-lg: 46px;
46
+ --fs-control-height-xs: 26px;
47
+ --fs-control-height-xl: 52px;
46
48
  --fs-control-padding-x: 12px;
47
49
  --fs-control-padding-x-sm: 8px;
48
50
  --fs-control-padding-x-lg: 16px;
51
+ --fs-control-padding-x-xs: 6px;
52
+ --fs-control-padding-x-xl: 20px;
53
+ --fs-control-border-color: var(--fs-color-border);
54
+ --fs-control-bg: var(--fs-color-surface);
55
+ --fs-control-hover-bg: var(--fs-color-subtle);
56
+ --fs-control-placeholder-color: var(--fs-color-muted);
57
+ --fs-control-focus-color: var(--fs-focus-color);
58
+ --fs-control-invalid-color: var(--fs-color-danger);
59
+ --fs-control-valid-color: var(--fs-color-success);
60
+ --fs-control-disabled-opacity: var(--fs-disabled-opacity);
61
+ --fs-control-radius: var(--fs-radius-sm);
62
+ --fs-control-touch-target: 44px;
63
+ --fs-control-transition: color var(--fs-transition-fast) var(--fs-ease-standard), background-color var(--fs-transition-fast) var(--fs-ease-standard), border-color var(--fs-transition-fast) var(--fs-ease-standard), box-shadow var(--fs-transition-fast) var(--fs-ease-standard);
64
+ --fs-control-option-gap: var(--fs-space-2);
65
+ --fs-control-addon-bg: var(--fs-color-subtle);
49
66
  --fs-focus-width: 2px;
50
67
  --fs-focus-offset: 2px;
51
68
  --fs-focus-color: var(--fs-color-primary);
@@ -108,6 +125,24 @@
108
125
  --fs-feedback-warning-bg: #fff9e6;
109
126
  --fs-feedback-danger-bg: #fff2f3;
110
127
  --fs-feedback-info-bg: #f2f2ff;
128
+ --fs-color-primary-bg-subtle: var(--fs-feedback-primary-bg);
129
+ --fs-color-primary-border-subtle: var(--fs-color-primary);
130
+ --fs-color-primary-text-emphasis: var(--fs-alert-primary-text);
131
+ --fs-color-secondary-bg-subtle: var(--fs-feedback-secondary-bg);
132
+ --fs-color-secondary-border-subtle: var(--fs-color-secondary);
133
+ --fs-color-secondary-text-emphasis: var(--fs-alert-secondary-text);
134
+ --fs-color-success-bg-subtle: var(--fs-feedback-success-bg);
135
+ --fs-color-success-border-subtle: var(--fs-color-success);
136
+ --fs-color-success-text-emphasis: var(--fs-alert-success-text);
137
+ --fs-color-warning-bg-subtle: var(--fs-feedback-warning-bg);
138
+ --fs-color-warning-border-subtle: var(--fs-color-warning);
139
+ --fs-color-warning-text-emphasis: var(--fs-alert-warning-text);
140
+ --fs-color-danger-bg-subtle: var(--fs-feedback-danger-bg);
141
+ --fs-color-danger-border-subtle: var(--fs-color-danger);
142
+ --fs-color-danger-text-emphasis: var(--fs-alert-danger-text);
143
+ --fs-color-info-bg-subtle: var(--fs-feedback-info-bg);
144
+ --fs-color-info-border-subtle: var(--fs-color-info);
145
+ --fs-color-info-text-emphasis: var(--fs-alert-info-text);
111
146
  }
112
147
  @supports (color: oklch(0% 0 0deg)) {
113
148
  :root {
@@ -330,7 +365,9 @@
330
365
  justify-content: center;
331
366
  gap: var(--fs-space-1);
332
367
  min-height: var(--fs-control-height);
333
- padding: 0 var(--fs-control-padding-x);
368
+ min-block-size: var(--fs-control-height);
369
+ padding-block: 0;
370
+ padding-inline: var(--fs-control-padding-x);
334
371
  border: var(--fs-border-width) solid var(--fs-btn-border-color);
335
372
  border-radius: var(--fs-radius-sm);
336
373
  color: var(--fs-btn-color);
@@ -339,7 +376,8 @@
339
376
  font-weight: 500;
340
377
  text-decoration: none;
341
378
  cursor: pointer;
342
- transition: color var(--fs-transition-fast) var(--fs-ease-standard), background-color var(--fs-transition-fast) var(--fs-ease-standard), border-color var(--fs-transition-fast) var(--fs-ease-standard), box-shadow var(--fs-transition-fast) var(--fs-ease-standard);
379
+ transition: var(--fs-control-transition);
380
+ white-space: nowrap;
343
381
  }
344
382
  .fs-btn:hover {
345
383
  --fs-btn-bg: var(--fs-btn-hover-bg, var(--fs-color-subtle));
@@ -354,10 +392,37 @@
354
392
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--fs-color-primary) 22%, transparent);
355
393
  }
356
394
  .fs-btn:disabled,
357
- .fs-btn.is-disabled {
395
+ .fs-btn.is-disabled,
396
+ .fs-btn[aria-disabled=true] {
358
397
  opacity: var(--fs-disabled-opacity);
398
+ cursor: not-allowed;
399
+ }
400
+ .fs-btn[aria-disabled=true] {
401
+ pointer-events: none;
402
+ }
403
+ .fs-btn.is-loading,
404
+ .fs-btn[aria-busy=true] {
405
+ cursor: wait;
359
406
  pointer-events: none;
360
407
  }
408
+ .fs-btn.is-loading::after,
409
+ .fs-btn[aria-busy=true]::after {
410
+ width: 1em;
411
+ height: 1em;
412
+ border: 2px solid currentcolor;
413
+ border-inline-end-color: transparent;
414
+ border-radius: 50%;
415
+ content: "";
416
+ animation: fokus-spin 650ms linear infinite;
417
+ }
418
+ .fs-btn-icon {
419
+ display: inline-grid;
420
+ width: var(--fs-control-touch-target);
421
+ min-width: var(--fs-control-touch-target);
422
+ min-height: var(--fs-control-touch-target);
423
+ padding: 0;
424
+ place-items: center;
425
+ }
361
426
  .fs-btn-primary {
362
427
  --fs-btn-color: var(--fs-color-on-primary);
363
428
  --fs-btn-bg: var(--fs-color-primary);
@@ -462,11 +527,13 @@
462
527
  }
463
528
  .fs-btn-sm {
464
529
  min-height: var(--fs-control-height-sm);
530
+ min-block-size: var(--fs-control-height-sm);
465
531
  padding: 0 var(--fs-control-padding-x-sm);
466
532
  font-size: 0.75rem;
467
533
  }
468
534
  .fs-btn-lg {
469
535
  min-height: var(--fs-control-height-lg);
536
+ min-block-size: var(--fs-control-height-lg);
470
537
  padding: 0 var(--fs-control-padding-x-lg);
471
538
  font-size: 1rem;
472
539
  }
@@ -1162,6 +1229,89 @@
1162
1229
  pointer-events: none;
1163
1230
  }
1164
1231
  }
1232
+ @layer components {
1233
+ .fs-menu {
1234
+ --fs-menu-item-padding-block: 0.5rem;
1235
+ --fs-menu-item-padding-inline: 0.75rem;
1236
+ --fs-menu-item-radius: var(--fs-radius-sm);
1237
+ --fs-menu-label-color: var(--fs-color-muted);
1238
+ --fs-menu-nested-indent: 0.875rem;
1239
+ min-inline-size: 12rem;
1240
+ }
1241
+ .fs-menu-label {
1242
+ margin-block: 1rem 0.375rem;
1243
+ padding-inline: var(--fs-menu-item-padding-inline);
1244
+ color: var(--fs-menu-label-color);
1245
+ font-size: 0.6875rem;
1246
+ font-weight: 500;
1247
+ letter-spacing: 0.06em;
1248
+ text-transform: uppercase;
1249
+ }
1250
+ .fs-menu-label:first-child {
1251
+ margin-block-start: 0;
1252
+ }
1253
+ .fs-menu-list,
1254
+ .fs-menu-list ul {
1255
+ margin: 0;
1256
+ padding: 0;
1257
+ list-style: none;
1258
+ }
1259
+ .fs-menu-list ul {
1260
+ margin-block-start: 0.25rem;
1261
+ padding-inline-start: var(--fs-menu-nested-indent);
1262
+ border-inline-start: var(--fs-border-width) solid var(--fs-color-border-default);
1263
+ }
1264
+ .fs-menu-list a,
1265
+ .fs-menu-list button {
1266
+ display: flex;
1267
+ align-items: center;
1268
+ gap: 0.5rem;
1269
+ inline-size: 100%;
1270
+ min-block-size: 2.5rem;
1271
+ padding-block: var(--fs-menu-item-padding-block);
1272
+ padding-inline: var(--fs-menu-item-padding-inline);
1273
+ border: 0;
1274
+ border-radius: var(--fs-menu-item-radius);
1275
+ color: var(--fs-color-text);
1276
+ background: transparent;
1277
+ font: inherit;
1278
+ text-align: start;
1279
+ text-decoration: none;
1280
+ cursor: pointer;
1281
+ }
1282
+ .fs-menu-list a:hover,
1283
+ .fs-menu-list a:focus-visible,
1284
+ .fs-menu-list button:hover,
1285
+ .fs-menu-list button:focus-visible {
1286
+ color: var(--fs-color-text);
1287
+ background-color: var(--fs-color-subtle);
1288
+ outline: none;
1289
+ }
1290
+ .fs-menu-list .is-active,
1291
+ .fs-menu-list [aria-current=page] {
1292
+ color: var(--fs-alert-primary-text);
1293
+ background-color: var(--fs-color-primary-bg-subtle);
1294
+ font-weight: 500;
1295
+ }
1296
+ .fs-menu-list .is-disabled,
1297
+ .fs-menu-list [aria-disabled=true],
1298
+ .fs-menu-list :disabled {
1299
+ color: var(--fs-color-muted);
1300
+ pointer-events: none;
1301
+ opacity: 0.6;
1302
+ }
1303
+ .fs-menu-compact {
1304
+ --fs-menu-item-padding-block: 0.375rem;
1305
+ --fs-menu-item-padding-inline: 0.625rem;
1306
+ }
1307
+ .fs-menu-bordered {
1308
+ padding: 0.375rem;
1309
+ border: var(--fs-border-width) solid var(--fs-color-border-default);
1310
+ border-radius: var(--fs-radius-md);
1311
+ background-color: var(--fs-color-surface);
1312
+ box-shadow: var(--fs-shadow-sm);
1313
+ }
1314
+ }
1165
1315
  @layer components {
1166
1316
  .fs-combobox {
1167
1317
  position: relative;
@@ -1175,9 +1325,28 @@
1175
1325
  }
1176
1326
  @layer components {
1177
1327
  [data-theme=dark] .fs-form-control[type=date]::-webkit-calendar-picker-indicator,
1178
- [data-theme=dark] .fs-form-control[type=time]::-webkit-calendar-picker-indicator {
1328
+ [data-theme=dark] .fs-form-control[type=time]::-webkit-calendar-picker-indicator,
1329
+ [data-theme=dark] .fs-form-date::-webkit-calendar-picker-indicator,
1330
+ [data-theme=dark] .fs-form-time::-webkit-calendar-picker-indicator {
1179
1331
  filter: invert(1);
1180
1332
  }
1333
+ .fs-form-date,
1334
+ .fs-form-time {
1335
+ appearance: auto;
1336
+ color-scheme: light;
1337
+ }
1338
+ [data-theme=dark] .fs-form-date,
1339
+ [data-theme=dark] .fs-form-time,
1340
+ [data-fs-theme=dark] .fs-form-date,
1341
+ [data-fs-theme=dark] .fs-form-time,
1342
+ [data-theme=dark] .fs-datepicker-panel,
1343
+ [data-fs-theme=dark] .fs-datepicker-panel {
1344
+ color-scheme: dark;
1345
+ }
1346
+ .fs-form-date::-webkit-calendar-picker-indicator,
1347
+ .fs-form-time::-webkit-calendar-picker-indicator {
1348
+ cursor: pointer;
1349
+ }
1181
1350
  .fs-datepicker {
1182
1351
  position: relative;
1183
1352
  display: inline-flex;
@@ -1193,6 +1362,7 @@
1193
1362
  background-color: var(--fs-color-surface);
1194
1363
  box-shadow: var(--fs-shadow-md);
1195
1364
  z-index: var(--fs-z-dropdown);
1365
+ color-scheme: light;
1196
1366
  }
1197
1367
  .fs-datepicker-panel.is-open {
1198
1368
  display: block;
@@ -1290,6 +1460,25 @@
1290
1460
  pointer-events: none;
1291
1461
  opacity: 0.4;
1292
1462
  }
1463
+ .fs-datepicker-day[aria-current=date] {
1464
+ outline: var(--fs-border-width) solid var(--fs-color-primary);
1465
+ outline-offset: -2px;
1466
+ }
1467
+ .fs-datepicker-title[aria-live=polite] {
1468
+ min-inline-size: 8rem;
1469
+ text-align: center;
1470
+ }
1471
+ @media (forced-colors: active) {
1472
+ .fs-datepicker-panel {
1473
+ border: 1px solid CanvasText;
1474
+ background: Canvas;
1475
+ color: CanvasText;
1476
+ }
1477
+ .fs-datepicker-day.is-selected {
1478
+ background: Highlight;
1479
+ color: HighlightText;
1480
+ }
1481
+ }
1293
1482
  }
1294
1483
  @layer components {
1295
1484
  .fs-datatable-toolbar {
@@ -1465,11 +1654,20 @@
1465
1654
  border-left: 5px solid transparent;
1466
1655
  }
1467
1656
  .fs-dropdown-menu {
1657
+ --fs-dropdown-min-inline-size: 12rem;
1658
+ --fs-dropdown-max-block-size: min(70vh, 28rem);
1659
+ --fs-dropdown-offset: 0.25rem;
1660
+ --fs-dropdown-padding-block: 0.375rem;
1661
+ --fs-dropdown-item-padding-block: 0.5rem;
1662
+ --fs-dropdown-item-padding-inline: 1rem;
1468
1663
  position: absolute;
1469
1664
  display: none;
1470
- min-width: 180px;
1665
+ min-inline-size: var(--fs-dropdown-min-inline-size);
1666
+ max-block-size: var(--fs-dropdown-max-block-size);
1667
+ overflow-y: auto;
1471
1668
  margin: 0;
1472
- padding: 6px 0;
1669
+ padding-block: var(--fs-dropdown-padding-block);
1670
+ padding-inline: 0;
1473
1671
  border: var(--fs-border-width) solid var(--fs-color-border-default);
1474
1672
  border-radius: var(--fs-radius-md);
1475
1673
  color: var(--fs-color-text);
@@ -1477,6 +1675,28 @@
1477
1675
  box-shadow: var(--fs-shadow-md);
1478
1676
  z-index: var(--fs-z-dropdown);
1479
1677
  }
1678
+ .fs-dropdown-menu[data-placement=top] {
1679
+ transform-origin: bottom center;
1680
+ }
1681
+ .fs-dropdown-menu[data-placement=bottom] {
1682
+ transform-origin: top center;
1683
+ }
1684
+ .fs-dropdown-menu[data-placement=left] {
1685
+ transform-origin: right center;
1686
+ }
1687
+ .fs-dropdown-menu[data-placement=right] {
1688
+ transform-origin: left center;
1689
+ }
1690
+ .fs-dropdown-menu.fs-dropdown-menu-sm {
1691
+ --fs-dropdown-min-inline-size: 10rem;
1692
+ --fs-dropdown-item-padding-block: 0.375rem;
1693
+ --fs-dropdown-item-padding-inline: 0.75rem;
1694
+ }
1695
+ .fs-dropdown-menu.fs-dropdown-menu-lg {
1696
+ --fs-dropdown-min-inline-size: 16rem;
1697
+ --fs-dropdown-item-padding-block: 0.625rem;
1698
+ --fs-dropdown-item-padding-inline: 1.25rem;
1699
+ }
1480
1700
  .fs-dropdown-menu.is-open {
1481
1701
  display: block;
1482
1702
  }
@@ -1484,12 +1704,14 @@
1484
1704
  display: flex;
1485
1705
  align-items: center;
1486
1706
  width: 100%;
1487
- padding: 8px 16px;
1707
+ min-block-size: 2.5rem;
1708
+ padding-block: var(--fs-dropdown-item-padding-block);
1709
+ padding-inline: var(--fs-dropdown-item-padding-inline);
1488
1710
  border: 0;
1489
1711
  color: var(--fs-color-text);
1490
1712
  background-color: var(--fs-color-surface-raised);
1491
1713
  font-size: 0.8125rem;
1492
- text-align: left;
1714
+ text-align: start;
1493
1715
  text-decoration: none;
1494
1716
  cursor: pointer;
1495
1717
  }
@@ -1508,19 +1730,167 @@
1508
1730
  pointer-events: none;
1509
1731
  opacity: 0.6;
1510
1732
  }
1733
+ .fs-dropdown-item[aria-disabled=true],
1734
+ .fs-dropdown-item:disabled {
1735
+ color: var(--fs-color-muted);
1736
+ pointer-events: none;
1737
+ opacity: 0.6;
1738
+ cursor: not-allowed;
1739
+ }
1740
+ .fs-dropdown-item .fs-icon,
1741
+ .fs-dropdown-item > svg {
1742
+ flex: 0 0 auto;
1743
+ }
1511
1744
  .fs-dropdown-divider {
1512
1745
  height: 1px;
1513
- margin: 6px 0;
1746
+ margin-block: 6px;
1747
+ margin-inline: 0;
1514
1748
  border: none;
1515
1749
  background-color: var(--fs-color-border);
1516
1750
  }
1517
1751
  .fs-dropdown-header {
1518
- padding: 4px 16px;
1752
+ padding-block: 4px;
1753
+ padding-inline: var(--fs-dropdown-item-padding-inline);
1519
1754
  color: var(--fs-color-muted);
1520
1755
  font-size: 0.6875rem;
1521
1756
  font-weight: 500;
1522
1757
  text-transform: uppercase;
1523
1758
  }
1759
+ .fs-dropdown-content {
1760
+ padding-block: var(--fs-dropdown-padding-block);
1761
+ }
1762
+ .fs-dropdown-content > .fs-dropdown-item {
1763
+ min-block-size: auto;
1764
+ }
1765
+ .fs-dropdown-menu.fs-dropdown-rich {
1766
+ --fs-dropdown-rich-inline-size: 22rem;
1767
+ inline-size: min(var(--fs-dropdown-rich-inline-size), 100vw - 2rem);
1768
+ min-inline-size: 0;
1769
+ max-inline-size: calc(100vw - 2rem);
1770
+ padding-block: 0;
1771
+ overflow: hidden;
1772
+ }
1773
+ .fs-dropdown-rich-header {
1774
+ display: flex;
1775
+ align-items: flex-start;
1776
+ gap: 0.75rem;
1777
+ padding: 1rem;
1778
+ }
1779
+ .fs-dropdown-rich-avatar {
1780
+ display: inline-grid;
1781
+ flex: 0 0 2.25rem;
1782
+ width: 2.25rem;
1783
+ height: 2.25rem;
1784
+ place-items: center;
1785
+ border-radius: 50%;
1786
+ color: var(--fs-color-on-primary);
1787
+ background: var(--fs-color-primary);
1788
+ font-size: 0.75rem;
1789
+ font-weight: 700;
1790
+ }
1791
+ .fs-dropdown-rich-heading {
1792
+ display: grid;
1793
+ min-inline-size: 0;
1794
+ flex: 1 1 auto;
1795
+ gap: 0.125rem;
1796
+ }
1797
+ .fs-dropdown-rich-title,
1798
+ .fs-dropdown-rich-description,
1799
+ .fs-dropdown-rich-item-title,
1800
+ .fs-dropdown-rich-item-description {
1801
+ overflow: hidden;
1802
+ text-overflow: ellipsis;
1803
+ white-space: nowrap;
1804
+ }
1805
+ .fs-dropdown-rich-title {
1806
+ color: var(--fs-color-text);
1807
+ font-size: 0.75rem;
1808
+ font-weight: 600;
1809
+ }
1810
+ .fs-dropdown-rich-description,
1811
+ .fs-dropdown-rich-item-description {
1812
+ color: var(--fs-color-muted);
1813
+ font-size: 0.6875rem;
1814
+ }
1815
+ .fs-dropdown-rich-status {
1816
+ flex: 0 0 auto;
1817
+ }
1818
+ .fs-dropdown-rich-list {
1819
+ display: grid;
1820
+ gap: 0.25rem;
1821
+ padding: 0.5rem;
1822
+ }
1823
+ .fs-dropdown-rich-list > .fs-dropdown-item {
1824
+ min-block-size: 3.25rem;
1825
+ gap: 0.75rem;
1826
+ padding: 0.625rem 0.75rem;
1827
+ border-radius: var(--fs-radius-sm);
1828
+ background: transparent;
1829
+ }
1830
+ .fs-dropdown-rich-list > .fs-dropdown-item:hover,
1831
+ .fs-dropdown-rich-list > .fs-dropdown-item:focus-visible {
1832
+ background: var(--fs-color-subtle);
1833
+ }
1834
+ .fs-dropdown-rich-icon {
1835
+ display: inline-grid;
1836
+ flex: 0 0 2rem;
1837
+ width: 2rem;
1838
+ height: 2rem;
1839
+ place-items: center;
1840
+ border: 1px solid var(--fs-color-border-default);
1841
+ border-radius: var(--fs-radius-sm);
1842
+ color: var(--fs-color-primary);
1843
+ background: var(--fs-color-surface);
1844
+ }
1845
+ .fs-dropdown-rich-icon > svg {
1846
+ width: 1rem;
1847
+ height: 1rem;
1848
+ stroke: currentcolor;
1849
+ }
1850
+ .fs-dropdown-rich-copy {
1851
+ display: grid;
1852
+ min-inline-size: 0;
1853
+ flex: 1 1 auto;
1854
+ gap: 0.125rem;
1855
+ }
1856
+ .fs-dropdown-rich-item-title {
1857
+ color: inherit;
1858
+ font-size: 0.75rem;
1859
+ font-weight: 600;
1860
+ }
1861
+ .fs-dropdown-rich-chevron {
1862
+ flex: 0 0 auto;
1863
+ color: var(--fs-color-muted);
1864
+ font-size: 1rem;
1865
+ line-height: 1;
1866
+ }
1867
+ .fs-dropdown-rich-footer {
1868
+ display: flex;
1869
+ align-items: center;
1870
+ justify-content: space-between;
1871
+ gap: 0.75rem;
1872
+ padding: 0.75rem 1rem;
1873
+ color: var(--fs-color-muted);
1874
+ background: var(--fs-color-subtle);
1875
+ font-size: 0.6875rem;
1876
+ }
1877
+ .fs-dropdown-rich-footer a {
1878
+ color: var(--fs-color-primary);
1879
+ font-weight: 600;
1880
+ text-decoration: none;
1881
+ }
1882
+ .fs-dropdown-rich-footer a:hover,
1883
+ .fs-dropdown-rich-footer a:focus-visible {
1884
+ text-decoration: underline;
1885
+ }
1886
+ .fs-dropdown-item.fs-dropdown-item-danger {
1887
+ color: var(--fs-color-danger);
1888
+ }
1889
+ .fs-dropdown-item.fs-dropdown-item-danger:hover,
1890
+ .fs-dropdown-item.fs-dropdown-item-danger:focus-visible {
1891
+ color: var(--fs-color-on-danger);
1892
+ background-color: var(--fs-color-danger);
1893
+ }
1524
1894
  }
1525
1895
  @layer components {
1526
1896
  .fs-modal {
@@ -1739,6 +2109,31 @@
1739
2109
  padding-inline-start: var(--fs-tag-padding-inline-start);
1740
2110
  padding-inline-end: var(--fs-tag-padding-inline-end);
1741
2111
  }
2112
+ .fs-tag-rounded {
2113
+ --fs-badge-radius: 999px;
2114
+ --fs-tag-padding-inline-start: 8px;
2115
+ --fs-tag-padding-inline-end: 8px;
2116
+ }
2117
+ .fs-tag-addons {
2118
+ --fs-tag-addon-padding-inline: 8px;
2119
+ display: inline-flex;
2120
+ align-items: stretch;
2121
+ gap: 0;
2122
+ }
2123
+ .fs-tag-addons > .fs-tag {
2124
+ --fs-tag-padding-inline-start: var(--fs-tag-addon-padding-inline);
2125
+ --fs-tag-padding-inline-end: var(--fs-tag-addon-padding-inline);
2126
+ min-inline-size: 0;
2127
+ border-radius: 0;
2128
+ }
2129
+ .fs-tag-addons > .fs-tag:first-child {
2130
+ border-start-start-radius: var(--fs-badge-radius);
2131
+ border-end-start-radius: var(--fs-badge-radius);
2132
+ }
2133
+ .fs-tag-addons > .fs-tag:last-child {
2134
+ border-start-end-radius: var(--fs-badge-radius);
2135
+ border-end-end-radius: var(--fs-badge-radius);
2136
+ }
1742
2137
  .fs-tag-label {
1743
2138
  min-width: 0;
1744
2139
  }
@@ -2093,8 +2488,42 @@
2093
2488
  @layer components {
2094
2489
  .fs-tabs {
2095
2490
  display: flex;
2491
+ max-inline-size: 100%;
2492
+ overflow-x: auto;
2493
+ scrollbar-width: thin;
2096
2494
  border-bottom: var(--fs-border-width) solid var(--fs-color-border-default);
2097
2495
  }
2496
+ .fs-tabs .fs-nav-link {
2497
+ flex: 0 0 auto;
2498
+ }
2499
+ .fs-tabs-boxed {
2500
+ border: var(--fs-border-width) solid var(--fs-color-border-default);
2501
+ border-radius: var(--fs-radius-md);
2502
+ padding: 0.25rem;
2503
+ }
2504
+ .fs-tabs-boxed .fs-nav-link,
2505
+ .fs-tabs-toggle .fs-nav-link {
2506
+ margin-block-end: 0;
2507
+ border: 0;
2508
+ border-radius: var(--fs-radius-sm);
2509
+ }
2510
+ .fs-tabs-boxed .fs-nav-link.is-active,
2511
+ .fs-tabs-toggle .fs-nav-link.is-active {
2512
+ color: var(--fs-color-text);
2513
+ background-color: var(--fs-color-surface);
2514
+ box-shadow: var(--fs-shadow-sm);
2515
+ }
2516
+ .fs-tabs-toggle {
2517
+ gap: 0;
2518
+ padding: 0.25rem;
2519
+ border: 0;
2520
+ border-radius: var(--fs-radius-md);
2521
+ background-color: var(--fs-color-subtle);
2522
+ }
2523
+ .fs-tabs-toggle .fs-nav-link {
2524
+ flex: 1 1 0;
2525
+ justify-content: center;
2526
+ }
2098
2527
  .fs-tabs .fs-nav-link {
2099
2528
  margin-bottom: -1px;
2100
2529
  border-bottom: 2px solid transparent;
@@ -2142,6 +2571,23 @@
2142
2571
  justify-content: center;
2143
2572
  text-align: center;
2144
2573
  }
2574
+ .fs-tabs-vertical {
2575
+ flex-direction: column;
2576
+ align-items: stretch;
2577
+ overflow-x: visible;
2578
+ border-inline-start: var(--fs-border-width) solid var(--fs-color-border-default);
2579
+ border-block-end: 0;
2580
+ }
2581
+ .fs-tabs-vertical .fs-nav-link {
2582
+ justify-content: flex-start;
2583
+ margin-block-end: 0;
2584
+ margin-inline-start: -1px;
2585
+ border-block-end: 0;
2586
+ border-inline-start: 2px solid transparent;
2587
+ }
2588
+ .fs-tabs-vertical .fs-nav-link.is-active {
2589
+ border-inline-start-color: var(--fs-color-primary);
2590
+ }
2145
2591
  .fs-tabs-sm .fs-nav-link {
2146
2592
  padding: 6px 10px;
2147
2593
  font-size: 0.75rem;
@@ -2631,6 +3077,23 @@
2631
3077
  margin: 0;
2632
3078
  padding: 0;
2633
3079
  list-style: none;
3080
+ align-items: center;
3081
+ flex-wrap: wrap;
3082
+ }
3083
+ .fs-pagination-centered {
3084
+ justify-content: center;
3085
+ }
3086
+ .fs-pagination-right {
3087
+ justify-content: flex-end;
3088
+ }
3089
+ .fs-pagination-list {
3090
+ display: flex;
3091
+ align-items: center;
3092
+ flex-wrap: wrap;
3093
+ gap: 0.25rem;
3094
+ margin: 0;
3095
+ padding: 0;
3096
+ list-style: none;
2634
3097
  }
2635
3098
  .fs-pagination-scroll {
2636
3099
  max-width: 100%;
@@ -2644,18 +3107,20 @@
2644
3107
  display: inline-flex;
2645
3108
  align-items: center;
2646
3109
  justify-content: center;
2647
- min-width: 32px;
2648
- height: 32px;
2649
- padding: 0 8px;
2650
- border: 1px solid var(--fs-color-border);
3110
+ min-inline-size: 2rem;
3111
+ min-block-size: 2rem;
3112
+ padding-inline: 0.5rem;
3113
+ border: var(--fs-border-width) solid var(--fs-color-border-default);
2651
3114
  border-radius: var(--fs-radius-sm);
2652
3115
  color: var(--fs-color-text);
2653
3116
  background-color: var(--fs-color-surface);
2654
3117
  text-decoration: none;
2655
- transition: background-color 0.15s ease-in-out;
3118
+ transition: color var(--fs-transition-fast) var(--fs-ease-standard), background-color var(--fs-transition-fast) var(--fs-ease-standard), border-color var(--fs-transition-fast) var(--fs-ease-standard), box-shadow var(--fs-transition-fast) var(--fs-ease-standard);
2656
3119
  }
2657
3120
  .fs-page-link:hover {
3121
+ color: var(--fs-color-primary);
2658
3122
  background-color: var(--fs-color-subtle);
3123
+ border-color: var(--fs-color-primary);
2659
3124
  }
2660
3125
  .fs-page-link:focus-visible {
2661
3126
  outline: var(--fs-focus-width) solid var(--fs-color-primary);
@@ -2673,6 +3138,16 @@
2673
3138
  opacity: 0.6;
2674
3139
  pointer-events: none;
2675
3140
  }
3141
+ .fs-page-item[aria-disabled=true] .fs-page-link,
3142
+ .fs-page-link[aria-disabled=true] {
3143
+ color: var(--fs-color-muted);
3144
+ opacity: 0.6;
3145
+ pointer-events: none;
3146
+ cursor: not-allowed;
3147
+ }
3148
+ .fs-pagination-rounded .fs-page-link {
3149
+ border-radius: 999px;
3150
+ }
2676
3151
  .fs-pagination-bordered {
2677
3152
  gap: 0;
2678
3153
  }
@@ -2680,15 +3155,15 @@
2680
3155
  border-radius: 0;
2681
3156
  }
2682
3157
  .fs-pagination-bordered .fs-page-item:not(:first-child) .fs-page-link {
2683
- margin-left: -1px;
3158
+ margin-inline-start: -1px;
2684
3159
  }
2685
3160
  .fs-pagination-bordered .fs-page-item:first-child .fs-page-link {
2686
- border-top-left-radius: var(--fs-radius-sm);
2687
- border-bottom-left-radius: var(--fs-radius-sm);
3161
+ border-start-start-radius: var(--fs-radius-sm);
3162
+ border-end-start-radius: var(--fs-radius-sm);
2688
3163
  }
2689
3164
  .fs-pagination-bordered .fs-page-item:last-child .fs-page-link {
2690
- border-top-right-radius: var(--fs-radius-sm);
2691
- border-bottom-right-radius: var(--fs-radius-sm);
3165
+ border-start-end-radius: var(--fs-radius-sm);
3166
+ border-end-end-radius: var(--fs-radius-sm);
2692
3167
  }
2693
3168
  .fs-pagination-bordered .fs-page-link:hover,
2694
3169
  .fs-pagination-bordered .fs-page-item.is-active .fs-page-link {
@@ -2696,15 +3171,15 @@
2696
3171
  z-index: 1;
2697
3172
  }
2698
3173
  .fs-pagination-sm .fs-page-link {
2699
- min-width: 26px;
2700
- height: 26px;
2701
- padding: 0 6px;
3174
+ min-inline-size: 1.625rem;
3175
+ min-block-size: 1.625rem;
3176
+ padding-inline: 0.375rem;
2702
3177
  font-size: 0.6875rem;
2703
3178
  }
2704
3179
  .fs-pagination-lg .fs-page-link {
2705
- min-width: 40px;
2706
- height: 40px;
2707
- padding: 0 12px;
3180
+ min-inline-size: 2.5rem;
3181
+ min-block-size: 2.5rem;
3182
+ padding-inline: 0.75rem;
2708
3183
  font-size: 0.8125rem;
2709
3184
  }
2710
3185
  .fs-page-link-text {
@@ -3506,6 +3981,10 @@
3506
3981
  border: 1px solid var(--fs-color-border);
3507
3982
  border-radius: var(--fs-radius-sm);
3508
3983
  overflow: hidden;
3984
+ max-inline-size: 100%;
3985
+ }
3986
+ .fs-segmented-control-vertical {
3987
+ flex-direction: column;
3509
3988
  }
3510
3989
  .fs-segmented-item {
3511
3990
  display: flex;
@@ -3530,6 +4009,7 @@
3530
4009
  align-items: center;
3531
4010
  justify-content: center;
3532
4011
  min-height: 38px;
4012
+ min-block-size: var(--fs-control-touch-target);
3533
4013
  padding: 0 12px;
3534
4014
  color: var(--fs-color-text);
3535
4015
  background-color: var(--fs-color-surface);
@@ -3540,7 +4020,7 @@
3540
4020
  cursor: pointer;
3541
4021
  -webkit-user-select: none;
3542
4022
  user-select: none;
3543
- transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;
4023
+ transition: var(--fs-control-transition);
3544
4024
  }
3545
4025
  .fs-segmented-label:hover {
3546
4026
  background-color: var(--fs-color-subtle);
@@ -3561,6 +4041,15 @@
3561
4041
  opacity: 0.4;
3562
4042
  pointer-events: none;
3563
4043
  }
4044
+ .fs-segmented-input[aria-invalid=true] + .fs-segmented-label,
4045
+ .fs-segmented-control.is-invalid {
4046
+ outline: var(--fs-border-width) solid var(--fs-control-invalid-color);
4047
+ outline-offset: var(--fs-focus-offset);
4048
+ }
4049
+ .fs-segmented-control-vertical .fs-segmented-item:not(:first-child) .fs-segmented-label {
4050
+ border-block-start: 1px solid var(--fs-color-border);
4051
+ border-inline-start: 0;
4052
+ }
3564
4053
  .fs-segmented-control-sm .fs-segmented-label {
3565
4054
  min-height: 30px;
3566
4055
  padding: 0 8px;
@@ -4061,6 +4550,17 @@
4061
4550
  .fs-button-group-vertical > .fs-btn {
4062
4551
  width: 100%;
4063
4552
  }
4553
+ .fs-button-group[role=group] {
4554
+ isolation: isolate;
4555
+ }
4556
+ .fs-button-group > .fs-btn:focus-visible {
4557
+ z-index: 2;
4558
+ }
4559
+ .fs-button-group > .fs-btn[aria-pressed=true] {
4560
+ --fs-btn-bg: var(--fs-color-primary);
4561
+ --fs-btn-color: var(--fs-color-on-primary);
4562
+ --fs-btn-border-color: var(--fs-color-primary);
4563
+ }
4064
4564
  }
4065
4565
  /* stylelint-disable declaration-block-single-line-max-declarations */
4066
4566
  @layer components {
@@ -4438,6 +4938,13 @@
4438
4938
  --fs-color-focus: var(--fs-color-primary);
4439
4939
  --fs-color-action-primary: var(--fs-color-primary);
4440
4940
  --fs-color-action-danger: var(--fs-color-danger);
4941
+ --fs-control-bg: var(--fs-color-surface);
4942
+ --fs-control-border-color: var(--fs-color-border);
4943
+ --fs-control-hover-bg: var(--fs-color-subtle);
4944
+ --fs-control-placeholder-color: var(--fs-color-muted);
4945
+ --fs-control-invalid-color: var(--fs-color-danger);
4946
+ --fs-control-valid-color: var(--fs-color-success);
4947
+ --fs-control-addon-bg: var(--fs-color-subtle);
4441
4948
  --fs-shadow-sm: 0 1px 3px rgb(0 0 0 / 50%), 0 1px 2px rgb(0 0 0 / 40%);
4442
4949
  --fs-shadow-md: 0 6px 12px rgb(0 0 0 / 55%), 0 3px 6px rgb(0 0 0 / 45%);
4443
4950
  --fs-shadow-lg: 0 15px 30px rgb(0 0 0 / 60%), 0 6px 12px rgb(0 0 0 / 50%);