@tangible/ui 0.0.6 → 0.0.7

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.
@@ -66,6 +66,7 @@
66
66
  /* @tui-tokens
67
67
  --tui-card-bg
68
68
  --tui-card-border
69
+ --tui-card-border-width
69
70
  --tui-card-border-interact
70
71
  --tui-card-radius
71
72
  --tui-card-shadow
@@ -211,6 +212,14 @@
211
212
  */
212
213
  /* @tui-tokens
213
214
  --tui-radio-accent
215
+ --tui-radio-size
216
+ --tui-radio-border
217
+ --tui-radio-bg
218
+ --tui-radio-gap
219
+ --tui-radio-font-size
220
+ --tui-radio-label-color
221
+ --tui-radio-description-color
222
+ --tui-radio-group-gap
214
223
  */
215
224
  /* @tui-tokens
216
225
  --tui-rating-active
@@ -242,7 +251,14 @@
242
251
  */
243
252
  /* @tui-tokens
244
253
  --tui-switch-accent
245
- --tui-switch-track-off
254
+ --tui-switch-bg
255
+ --tui-switch-border
256
+ --tui-switch-thumb-bg
257
+ --tui-switch-track-height
258
+ --tui-switch-size
259
+ --tui-switch-label-color
260
+ --tui-switch-font-size
261
+ --tui-switch-gap
246
262
  */
247
263
  /* @tui-tokens
248
264
  --tui-sidebar-width
@@ -1063,7 +1079,6 @@
1063
1079
  font-weight: var(--tui-button-font-weight, normal);
1064
1080
  line-height: var(--tui-button-line-height, 1.4);
1065
1081
  display: inline-flex;
1066
- align-self: center;
1067
1082
  text-align: center;
1068
1083
  justify-content: center;
1069
1084
  align-items: center;
@@ -1082,7 +1097,7 @@
1082
1097
  border-width: var(--tui-border-width);
1083
1098
  }
1084
1099
  .tui-interface .tui-button .tui-icon {
1085
- font-size: inherit;
1100
+ font-size: 1.25em;
1086
1101
  }
1087
1102
  .tui-interface .tui-button:hover {
1088
1103
  --_bg: var(--_bg-interact);
@@ -1284,7 +1299,6 @@
1284
1299
  font-weight: var(--tui-button-font-weight, normal);
1285
1300
  line-height: var(--tui-button-line-height, 1.4);
1286
1301
  display: inline-flex;
1287
- align-self: center;
1288
1302
  text-align: center;
1289
1303
  justify-content: center;
1290
1304
  align-items: center;
@@ -1320,6 +1334,7 @@
1320
1334
  :where(.tui-interface) .tui-card {
1321
1335
  --_bg: var(--tui-card-bg, var(--tui-color-bg-surface));
1322
1336
  --_border: var(--tui-card-border, var(--tui-color-border));
1337
+ --_border-width: var(--tui-card-border-width, var(--tui-border-width));
1323
1338
  --_border-interact: var(--tui-card-border-interact, var(--tui-theme-primary-base));
1324
1339
  --_radius: var(--tui-card-radius, var(--tui-radius-md));
1325
1340
  --_shadow: var(--tui-card-shadow, var(--tui-shadow-sm));
@@ -1331,7 +1346,7 @@
1331
1346
  position: relative;
1332
1347
  width: 100%;
1333
1348
  border-style: solid;
1334
- border-width: var(--tui-border-width);
1349
+ border-width: var(--_border-width);
1335
1350
  border-color: var(--_border);
1336
1351
  border-radius: var(--_radius);
1337
1352
  background-color: var(--_bg);
@@ -1387,40 +1402,40 @@
1387
1402
  border-end-start-radius: calc(var(--_radius) - 1px);
1388
1403
  }
1389
1404
  @container tuiCard (width >= 400px) {
1390
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner {
1405
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner {
1391
1406
  display: flex;
1392
1407
  flex-direction: row;
1393
1408
  align-items: center;
1394
1409
  gap: var(--_padding);
1395
1410
  }
1396
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__media.is-flush {
1411
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__media.is-flush {
1397
1412
  object-fit: cover;
1398
1413
  object-position: center;
1399
1414
  margin-block: calc(var(--_padding) * -1);
1400
1415
  height: calc(100% + 2 * var(--_padding));
1401
1416
  }
1402
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner *:has(.tui-card__media.is-flush) {
1417
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner *:has(.tui-card__media.is-flush) {
1403
1418
  align-self: stretch;
1404
1419
  }
1405
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__head {
1420
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__head {
1406
1421
  padding-inline-start: var(--_padding);
1407
1422
  padding-block: var(--_padding);
1408
1423
  flex: 0 1 auto;
1409
1424
  }
1410
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__head:has(.tui-icon:only-child) {
1425
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__head:has(.tui-icon:only-child) {
1411
1426
  flex: 0 0 max-content;
1412
1427
  }
1413
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__head .tui-card__media.is-flush:first-child {
1428
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__head .tui-card__media.is-flush:first-child {
1414
1429
  margin-inline-end: var(--_padding);
1415
1430
  max-width: calc(100% + var(--_padding));
1416
1431
  border-start-end-radius: 0;
1417
1432
  border-end-start-radius: calc(var(--_radius) - 1px);
1418
1433
  }
1419
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__body {
1434
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__body {
1420
1435
  flex: 2 1 auto;
1421
1436
  padding-block: var(--_padding);
1422
1437
  }
1423
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__foot {
1438
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__foot {
1424
1439
  width: unset;
1425
1440
  flex: 0 1 var(--_foot-basis);
1426
1441
  padding-block: var(--_padding);
@@ -1428,20 +1443,20 @@
1428
1443
  margin-inline-start: auto;
1429
1444
  justify-content: flex-end;
1430
1445
  }
1431
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__foot .tui-card__media.is-flush:last-child {
1446
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__foot .tui-card__media.is-flush:last-child {
1432
1447
  margin-inline-start: var(--_padding);
1433
1448
  max-width: calc(100% + var(--_padding));
1434
1449
  border-end-start-radius: 0;
1435
1450
  border-start-end-radius: calc(var(--_radius) - 1px);
1436
1451
  }
1437
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__head:not(:first-child),
1438
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__body:not(:first-child),
1439
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__foot:not(:first-child) {
1452
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__head:not(:first-child),
1453
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__body:not(:first-child),
1454
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__foot:not(:first-child) {
1440
1455
  padding-inline-start: 0;
1441
1456
  }
1442
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__head:not(:last-child),
1443
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__body:not(:last-child),
1444
- :where(.tui-interface) .tui-card.is-layout-inline .tui-card__inner .tui-card__foot:not(:last-child) {
1457
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__head:not(:last-child),
1458
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__body:not(:last-child),
1459
+ :where(:where(.tui-interface) .tui-card.is-layout-inline) .tui-card__inner .tui-card__foot:not(:last-child) {
1445
1460
  padding-inline-end: 0;
1446
1461
  }
1447
1462
  }
@@ -3688,26 +3703,26 @@
3688
3703
  display: flex;
3689
3704
  align-items: center;
3690
3705
  }
3691
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner {
3706
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner {
3692
3707
  display: flex;
3693
3708
  flex-direction: row;
3694
3709
  align-items: center;
3695
3710
  gap: var(--_padding);
3696
3711
  flex: 1 1 auto;
3697
3712
  }
3698
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__head {
3713
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__head {
3699
3714
  padding-inline-start: var(--_padding);
3700
3715
  padding-block: var(--_padding);
3701
3716
  flex: 0 1 auto;
3702
3717
  }
3703
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__head:has(.tui-icon:only-child) {
3718
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__head:has(.tui-icon:only-child) {
3704
3719
  flex: 0 0 max-content;
3705
3720
  }
3706
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__body {
3721
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__body {
3707
3722
  flex: 2 1 auto;
3708
3723
  padding-block: var(--_padding);
3709
3724
  }
3710
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__foot {
3725
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__foot {
3711
3726
  width: unset;
3712
3727
  flex: 0 1 var(--_foot-basis);
3713
3728
  padding-block: var(--_padding);
@@ -3715,14 +3730,14 @@
3715
3730
  margin-inline-start: auto;
3716
3731
  justify-content: flex-end;
3717
3732
  }
3718
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__head:not(:first-child),
3719
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__body:not(:first-child),
3720
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__foot:not(:first-child) {
3733
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__head:not(:first-child),
3734
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__body:not(:first-child),
3735
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__foot:not(:first-child) {
3721
3736
  padding-inline-start: 0;
3722
3737
  }
3723
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__head:not(:last-child),
3724
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__body:not(:last-child),
3725
- :where(.tui-interface) .tui-notice.is-layout-inline .tui-notice__inner .tui-notice__foot:not(:last-child) {
3738
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__head:not(:last-child),
3739
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__body:not(:last-child),
3740
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline) .tui-notice__inner .tui-notice__foot:not(:last-child) {
3726
3741
  padding-inline-end: 0;
3727
3742
  }
3728
3743
  }
@@ -3730,18 +3745,27 @@
3730
3745
  padding-inline-end: calc(var(--_padding) + var(--tui-control-height-sm));
3731
3746
  }
3732
3747
  @container tuiNotice (width >= 400px) {
3733
- :where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible .tui-notice__inner {
3748
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible) .tui-notice__inner {
3734
3749
  padding-inline-end: 0;
3735
3750
  }
3736
- :where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible .tui-notice__inner .tui-notice__head:last-child,
3737
- :where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible .tui-notice__inner .tui-notice__body:last-child,
3738
- :where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible .tui-notice__inner .tui-notice__foot:last-child {
3751
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible) .tui-notice__inner .tui-notice__head:last-child,
3752
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible) .tui-notice__inner .tui-notice__body:last-child,
3753
+ :where(:where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible) .tui-notice__inner .tui-notice__foot:last-child {
3739
3754
  padding-inline-end: 0;
3740
3755
  }
3741
3756
  }
3742
3757
  :where(.tui-interface) .tui-notice.has-stripe {
3743
- border-inline-start-width: var(--tui-notice-stripe-width, 4px);
3744
- border-inline-start-color: var(--_stripe);
3758
+ overflow: hidden;
3759
+ padding-inline-start: var(--tui-notice-stripe-width, 4px);
3760
+ }
3761
+ :where(.tui-interface) .tui-notice.has-stripe::before {
3762
+ content: "";
3763
+ position: absolute;
3764
+ inset-block: 0;
3765
+ inset-inline-start: 0;
3766
+ width: var(--tui-notice-stripe-width, 4px);
3767
+ background-color: var(--_stripe);
3768
+ z-index: 1;
3745
3769
  }
3746
3770
  :where(.tui-interface) .tui-notice.is-theme-info {
3747
3771
  --_bg: var(--tui-notice-bg, var(--tui-theme-primary-subtlest));
@@ -3937,61 +3961,79 @@
3937
3961
  gap: var(--tui-spacing-xs);
3938
3962
  }
3939
3963
  :where(.tui-interface) .tui-radio-group {
3964
+ --_group-gap: var(--tui-radio-group-gap, var(--tui-spacing-xs));
3940
3965
  display: flex;
3941
3966
  flex-direction: column;
3942
- gap: var(--tui-spacing-xs);
3967
+ gap: var(--_group-gap);
3943
3968
  }
3944
3969
  :where(.tui-interface) .tui-radio-group.is-horizontal {
3945
3970
  flex-direction: row;
3946
3971
  flex-wrap: wrap;
3947
- gap: var(--tui-spacing-sm);
3972
+ gap: var(--_group-gap);
3948
3973
  }
3949
3974
  :where(.tui-interface) .tui-radio-group[aria-disabled=true] {
3950
3975
  opacity: var(--tui-opacity-disabled);
3951
3976
  }
3952
3977
  :where(.tui-interface) .tui-radio {
3953
3978
  --_accent: var(--tui-radio-accent, var(--tui-input-accent, var(--tui-theme-primary-base)));
3954
- --_border: var(--tui-input-border, var(--tui-color-border));
3979
+ --_border: var(--tui-radio-border, var(--tui-input-border, var(--tui-color-border)));
3980
+ --_bg: var(--tui-radio-bg, var(--tui-color-bg));
3981
+ --_size: var(--tui-radio-size, 1.15em);
3982
+ --_gap: var(--tui-radio-gap, var(--tui-spacing-xs));
3983
+ --_fs: var(--tui-radio-font-size, var(--tui-typography-size-sm));
3984
+ --_label-color: var(--tui-radio-label-color, var(--tui-color-fg));
3985
+ --_desc-color: var(--tui-radio-description-color, var(--tui-color-fg-muted));
3986
+ display: flex;
3987
+ flex-direction: column;
3988
+ }
3989
+ :where(.tui-interface) .tui-radio:has(.tui-radio__control[aria-checked=true]) .tui-radio__indicator {
3990
+ border-color: var(--_accent);
3991
+ }
3992
+ :where(.tui-interface) .tui-radio:has(.tui-radio__control[aria-checked=true]) .tui-radio__indicator::after {
3993
+ transform: scale(1);
3994
+ background-color: var(--_accent);
3995
+ }
3996
+ :where(.tui-interface) .tui-radio__control {
3955
3997
  display: inline-flex;
3956
3998
  align-items: center;
3957
- gap: var(--tui-spacing-xs);
3999
+ gap: var(--_gap);
3958
4000
  padding: 0;
3959
4001
  border: none;
3960
4002
  background: none;
3961
4003
  font: inherit;
3962
- font-size: var(--tui-typography-size-sm);
3963
- color: var(--tui-color-fg);
4004
+ font-size: var(--_fs);
4005
+ color: var(--_label-color);
3964
4006
  cursor: pointer;
3965
4007
  appearance: none;
3966
4008
  }
3967
- :where(.tui-interface) .tui-radio:focus-visible {
4009
+ :where(.tui-interface) .tui-radio__control:hover:not(:disabled):not([aria-disabled=true]) .tui-radio__indicator {
4010
+ border-color: var(--_accent);
4011
+ }
4012
+ :where(.tui-interface) .tui-radio__control:focus-visible {
3968
4013
  outline: none;
3969
4014
  }
3970
- :where(.tui-interface) .tui-radio:focus-visible .tui-radio__indicator {
4015
+ :where(.tui-interface) .tui-radio__control:focus-visible .tui-radio__indicator {
3971
4016
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3972
4017
  outline-offset: var(--tui-focus-ring-offset);
3973
4018
  }
3974
- :where(.tui-interface) .tui-radio:disabled {
4019
+ :where(.tui-interface) .tui-radio__control:disabled {
3975
4020
  cursor: not-allowed;
3976
4021
  opacity: var(--tui-opacity-disabled);
4022
+ pointer-events: none;
3977
4023
  }
3978
- :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator {
3979
- border-color: var(--_accent);
3980
- }
3981
- :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator::after {
3982
- transform: scale(1);
3983
- background-color: var(--_accent);
4024
+ :where(.tui-interface) .tui-radio__control[aria-disabled=true] {
4025
+ cursor: not-allowed;
3984
4026
  }
3985
4027
  :where(.tui-interface) .tui-radio__indicator {
3986
4028
  display: inline-flex;
3987
4029
  align-items: center;
3988
4030
  justify-content: center;
3989
4031
  flex-shrink: 0;
3990
- width: 1.15em;
3991
- height: 1.15em;
4032
+ width: var(--_size);
4033
+ height: var(--_size);
3992
4034
  border-radius: 50%;
3993
4035
  border: var(--tui-border-width) solid var(--_border);
3994
- background-color: var(--tui-color-bg);
4036
+ background-color: var(--_bg);
3995
4037
  transition-duration: var(--tui-motion-duration);
3996
4038
  transition-timing-function: var(--tui-motion-timing);
3997
4039
  transition-property: border-color;
@@ -3999,8 +4041,8 @@
3999
4041
  :where(.tui-interface) .tui-radio__indicator::after {
4000
4042
  content: "";
4001
4043
  display: block;
4002
- width: 0.5em;
4003
- height: 0.5em;
4044
+ width: calc(var(--_size) * 0.435);
4045
+ height: calc(var(--_size) * 0.435);
4004
4046
  border-radius: 50%;
4005
4047
  background-color: transparent;
4006
4048
  transform: scale(0);
@@ -4013,6 +4055,22 @@
4013
4055
  line-height: 1.25em;
4014
4056
  user-select: none;
4015
4057
  }
4058
+ :where(.tui-interface) .tui-radio__body {
4059
+ padding-inline-start: calc(var(--_size) + var(--_gap));
4060
+ }
4061
+ :where(.tui-interface) .tui-radio__description {
4062
+ display: block;
4063
+ margin: 0;
4064
+ font-size: var(--_fs);
4065
+ color: var(--_desc-color);
4066
+ line-height: var(--tui-typography-line-height);
4067
+ }
4068
+ @media (prefers-reduced-motion: reduce) {
4069
+ :where(.tui-interface) .tui-radio__indicator,
4070
+ :where(.tui-interface) .tui-radio__indicator::after {
4071
+ transition: none;
4072
+ }
4073
+ }
4016
4074
  @media (forced-colors: active) {
4017
4075
  :where(.tui-interface) .tui-radio__indicator {
4018
4076
  forced-color-adjust: none;
@@ -4022,10 +4080,10 @@
4022
4080
  :where(.tui-interface) .tui-radio__indicator::after {
4023
4081
  background-color: CanvasText;
4024
4082
  }
4025
- :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator {
4083
+ :where(.tui-interface) .tui-radio:has(.tui-radio__control[aria-checked=true]) .tui-radio__indicator {
4026
4084
  border-color: Highlight;
4027
4085
  }
4028
- :where(.tui-interface) .tui-radio[aria-checked=true] .tui-radio__indicator::after {
4086
+ :where(.tui-interface) .tui-radio:has(.tui-radio__control[aria-checked=true]) .tui-radio__indicator::after {
4029
4087
  background-color: Highlight;
4030
4088
  }
4031
4089
  }
@@ -4481,8 +4539,8 @@
4481
4539
  :where(.tui-interface) .tui-switch {
4482
4540
  display: inline-flex;
4483
4541
  align-items: center;
4484
- gap: var(--tui-spacing-xs);
4485
- font-size: var(--tui-typography-size-md);
4542
+ gap: var(--tui-switch-gap, var(--tui-spacing-xs));
4543
+ font-size: var(--tui-switch-font-size, var(--tui-typography-size-md));
4486
4544
  cursor: pointer;
4487
4545
  user-select: none;
4488
4546
  }
@@ -4500,12 +4558,17 @@
4500
4558
  font-weight: unset;
4501
4559
  line-height: 1.25em;
4502
4560
  font-size: var(--tui-typography-size-sm);
4561
+ color: var(--tui-switch-label-color, inherit);
4503
4562
  user-select: none;
4504
4563
  }
4505
4564
  :where(.tui-interface) .tui-switch__track {
4506
4565
  --_accent: var(--tui-switch-accent, var(--tui-input-accent, var(--tui-theme-primary-base)));
4507
- --_track-off: var(--tui-switch-track-off, var(--tui-theme-secondary-soft));
4508
- font-size: var(--tui-typography-size-md);
4566
+ --_bg: var(--tui-switch-bg, var(--tui-theme-secondary-soft));
4567
+ --_border: var(--tui-switch-border, var(--_bg));
4568
+ --_thumb-bg: var(--tui-switch-thumb-bg, var(--tui-color-bg));
4569
+ --_track-height: var(--tui-switch-track-height, 1.4285em);
4570
+ --_thumb-size: calc(var(--_track-height) - 4px);
4571
+ font-size: var(--tui-switch-size, var(--tui-typography-size-md));
4509
4572
  }
4510
4573
  :where(.tui-interface) .tui-switch__track.is-size-sm {
4511
4574
  font-size: var(--tui-typography-size-sm);
@@ -4519,10 +4582,10 @@
4519
4582
  align-items: center;
4520
4583
  flex-shrink: 0;
4521
4584
  width: 2.8575em;
4522
- height: 1.4285em;
4585
+ height: var(--_track-height);
4523
4586
  border-radius: 9999px;
4524
- border: var(--tui-border-width) solid var(--_track-off);
4525
- background-color: var(--_track-off);
4587
+ border: var(--tui-border-width) solid var(--_border);
4588
+ background-color: var(--_bg);
4526
4589
  padding: 0;
4527
4590
  cursor: pointer;
4528
4591
  appearance: none;
@@ -4538,24 +4601,30 @@
4538
4601
  :where(.tui-interface) .tui-switch__track:disabled {
4539
4602
  cursor: not-allowed;
4540
4603
  }
4541
- :where(.tui-interface) .tui-switch__track.is-checked {
4604
+ :where(.tui-interface) .tui-switch__track[aria-checked=true] {
4542
4605
  background-color: var(--_accent);
4543
4606
  border-color: var(--_accent);
4544
4607
  }
4608
+ :where(.tui-interface) .tui-switch__track[aria-invalid=true] {
4609
+ --_border: var(--tui-theme-danger-base);
4610
+ }
4611
+ :where(.tui-interface) .tui-switch__track[aria-invalid=true][aria-checked=true] {
4612
+ border-color: var(--tui-theme-danger-base);
4613
+ }
4545
4614
  :where(.tui-interface) .tui-switch__thumb {
4546
4615
  display: block;
4547
- width: calc(1.4285em - 4px);
4548
- height: calc(1.4285em - 4px);
4616
+ width: var(--_thumb-size);
4617
+ height: var(--_thumb-size);
4549
4618
  border-radius: 50%;
4550
- background-color: var(--tui-color-bg);
4619
+ background-color: var(--_thumb-bg);
4551
4620
  transform: translateX(2px);
4552
4621
  transition-duration: var(--tui-motion-duration);
4553
4622
  transition-timing-function: var(--tui-motion-timing);
4554
4623
  transition-property: transform;
4555
4624
  pointer-events: none;
4556
4625
  }
4557
- :where(.tui-interface) .tui-switch__track.is-checked .tui-switch__thumb {
4558
- transform: translateX(calc(2.8575em - calc(1.4285em - 4px) - 2px - 2 * var(--tui-border-width)));
4626
+ :where(.tui-interface) .tui-switch__track[aria-checked=true] .tui-switch__thumb {
4627
+ transform: translateX(calc(2.8575em - var(--_thumb-size) - 2px - 2 * var(--tui-border-width)));
4559
4628
  }
4560
4629
  @media (forced-colors: active) {
4561
4630
  :where(.tui-interface) .tui-switch__track {
@@ -4563,20 +4632,27 @@
4563
4632
  border: 2px solid CanvasText;
4564
4633
  background-color: Canvas;
4565
4634
  }
4566
- :where(.tui-interface) .tui-switch__track.is-checked {
4635
+ :where(.tui-interface) .tui-switch__track[aria-checked=true] {
4567
4636
  background-color: Highlight;
4568
4637
  border-color: Highlight;
4569
4638
  }
4570
4639
  :where(.tui-interface) .tui-switch__track:focus-visible {
4571
- outline-color: Highlight;
4640
+ outline-color: ButtonText;
4641
+ outline-offset: 3px;
4572
4642
  }
4573
4643
  :where(.tui-interface) .tui-switch__thumb {
4574
4644
  background-color: CanvasText;
4575
4645
  }
4576
- :where(.tui-interface) .tui-switch__track.is-checked .tui-switch__thumb {
4646
+ :where(.tui-interface) .tui-switch__track[aria-checked=true] .tui-switch__thumb {
4577
4647
  background-color: HighlightText;
4578
4648
  }
4579
4649
  }
4650
+ @media (prefers-reduced-motion: reduce) {
4651
+ :where(.tui-interface) .tui-switch__track,
4652
+ :where(.tui-interface) .tui-switch__thumb {
4653
+ transition: none;
4654
+ }
4655
+ }
4580
4656
  :where(.tui-interface) .tui-sidebar {
4581
4657
  --_width: var(--tui-sidebar-width, 320px);
4582
4658
  --_bg: var(--tui-sidebar-bg, var(--tui-color-bg-surface));
@@ -5909,8 +5985,7 @@
5909
5985
  .tui-interface ul.tui-inline-flex,
5910
5986
  .tui-interface ul.tui-flex {
5911
5987
  list-style: none !important;
5912
- padding: 0 !important;
5913
- margin: 0 !important;
5988
+ padding-inline-start: 0 !important;
5914
5989
  }
5915
5990
  .tui-interface ul.tui-grid > li,
5916
5991
  .tui-interface ul.tui-stack > li,
@@ -5918,6 +5993,14 @@
5918
5993
  .tui-interface ul.tui-flex > li {
5919
5994
  list-style: none !important;
5920
5995
  }
5996
+ .tui-interface .tui-list-reset {
5997
+ list-style: none !important;
5998
+ padding: 0 !important;
5999
+ margin: 0 !important;
6000
+ }
6001
+ .tui-interface .tui-list-reset > li {
6002
+ list-style: none !important;
6003
+ }
5921
6004
  .tui-interface .is-density-none {
5922
6005
  --tui-gap-inline: 0;
5923
6006
  --tui-gap-block: 0;