@tangible/ui 0.0.3 → 0.0.5

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 (52) hide show
  1. package/README.md +21 -13
  2. package/components/Accordion/Accordion.d.ts +2 -2
  3. package/components/Accordion/Accordion.js +94 -23
  4. package/components/Accordion/index.d.ts +1 -1
  5. package/components/Accordion/types.d.ts +28 -4
  6. package/components/Avatar/Avatar.js +16 -7
  7. package/components/Avatar/AvatarGroup.js +7 -5
  8. package/components/Avatar/types.d.ts +11 -0
  9. package/components/Button/Button.js +10 -3
  10. package/components/Button/types.d.ts +9 -1
  11. package/components/Card/Card.js +26 -13
  12. package/components/Checkbox/Checkbox.d.ts +1 -1
  13. package/components/Chip/Chip.d.ts +37 -1
  14. package/components/Chip/Chip.js +10 -8
  15. package/components/ChipGroup/ChipGroup.js +5 -4
  16. package/components/ChipGroup/types.d.ts +3 -0
  17. package/components/Dropdown/Dropdown.d.ts +19 -1
  18. package/components/Dropdown/Dropdown.js +84 -28
  19. package/components/Dropdown/index.d.ts +2 -2
  20. package/components/Dropdown/index.js +1 -1
  21. package/components/Dropdown/types.d.ts +15 -0
  22. package/components/IconButton/IconButton.js +5 -4
  23. package/components/IconButton/index.d.ts +1 -1
  24. package/components/IconButton/types.d.ts +24 -4
  25. package/components/Modal/Modal.d.ts +16 -2
  26. package/components/Modal/Modal.js +45 -20
  27. package/components/MoveHandle/MoveHandle.js +3 -3
  28. package/components/MoveHandle/types.d.ts +12 -2
  29. package/components/Notice/Notice.js +32 -19
  30. package/components/Select/Select.js +6 -2
  31. package/components/Sidebar/Sidebar.d.ts +6 -1
  32. package/components/Sidebar/Sidebar.js +65 -11
  33. package/components/Sidebar/index.d.ts +1 -1
  34. package/components/Sidebar/types.d.ts +39 -14
  35. package/components/Tabs/Tabs.d.ts +1 -1
  36. package/components/Tabs/Tabs.js +12 -3
  37. package/components/Tabs/types.d.ts +20 -5
  38. package/components/TextInput/TextInput.js +10 -2
  39. package/components/Tooltip/Tooltip.d.ts +2 -2
  40. package/components/Tooltip/Tooltip.js +61 -40
  41. package/components/Tooltip/index.d.ts +1 -1
  42. package/components/Tooltip/types.d.ts +28 -1
  43. package/components/index.d.ts +2 -2
  44. package/components/index.js +1 -1
  45. package/package.json +1 -1
  46. package/styles/all.css +1 -1
  47. package/styles/all.expanded.css +354 -64
  48. package/styles/all.expanded.unlayered.css +354 -64
  49. package/styles/all.unlayered.css +1 -1
  50. package/styles/system/_tokens.scss +3 -0
  51. package/tui-manifest.json +291 -66
  52. package/utils/focus-trap.js +8 -1
@@ -23,11 +23,17 @@
23
23
  --tui-accordion-bg
24
24
  --tui-accordion-bg-open
25
25
  --tui-accordion-border
26
+ --tui-accordion-divider
26
27
  --tui-accordion-radius
27
28
  --tui-accordion-padding
29
+ --tui-accordion-trigger-padding
30
+ --tui-accordion-trigger-bg
31
+ --tui-accordion-trigger-hover
32
+ --tui-accordion-panel-padding
33
+ --tui-accordion-panel-bg
34
+ --tui-accordion-panel-spacing
28
35
  --tui-accordion-gap
29
36
  --tui-accordion-indicator
30
- --tui-accordion-trigger-hover
31
37
  */
32
38
  /* @tui-tokens
33
39
  --tui-avatar-size
@@ -52,6 +58,7 @@
52
58
  --tui-button-bg-interact
53
59
  --tui-button-fg-interact
54
60
  --tui-button-border-interact
61
+ --tui-button-fg-active
55
62
  --tui-control-height-sm
56
63
  --tui-control-height-md
57
64
  --tui-control-height-lg
@@ -75,6 +82,7 @@
75
82
  --tui-chip-border
76
83
  --tui-chip-icon
77
84
  --tui-chip-radius
85
+ --tui-chip-selected-ring
78
86
  */
79
87
  /* @tui-tokens
80
88
  --tui-chip-group-gap
@@ -176,6 +184,7 @@
176
184
  --tui-notice-bg
177
185
  --tui-notice-border
178
186
  --tui-notice-stripe
187
+ --tui-notice-stripe-width
179
188
  --tui-notice-fg
180
189
  --tui-notice-radius
181
190
  --tui-notice-padding
@@ -297,6 +306,8 @@
297
306
  --tui-focus-ring-width: 2px;
298
307
  --tui-focus-ring-offset: 2px;
299
308
  --tui-focus-ring-color: #2563eb;
309
+ /* Font Weight */
310
+ --tui-font-weight-medium: 500;
300
311
  /* Border */
301
312
  --tui-border-width: 1px;
302
313
  /* Z-Index Layers */
@@ -671,10 +682,15 @@
671
682
  --_bg: var(--tui-accordion-bg, var(--tui-color-bg-surface));
672
683
  --_bg-open: var(--tui-accordion-bg-open, var(--_bg));
673
684
  --_border: var(--tui-accordion-border, var(--tui-color-border));
685
+ --_divider: var(--tui-accordion-divider, var(--_border));
674
686
  --_radius: var(--tui-accordion-radius, var(--tui-radius-md));
675
687
  --_padding: var(--tui-accordion-padding, var(--tui-spacing-md));
676
- --_indicator: var(--tui-accordion-indicator, currentColor);
688
+ --_trigger-padding: var(--tui-accordion-trigger-padding, var(--_padding));
689
+ --_trigger-bg: var(--tui-accordion-trigger-bg, transparent);
677
690
  --_trigger-hover: var(--tui-accordion-trigger-hover, var(--tui-color-bg-muted));
691
+ --_panel-padding: var(--tui-accordion-panel-padding, var(--_padding));
692
+ --_panel-bg: var(--tui-accordion-panel-bg, transparent);
693
+ --_indicator: var(--tui-accordion-indicator, currentColor);
678
694
  background-color: var(--_bg);
679
695
  border: var(--tui-border-width) solid var(--_border);
680
696
  border-radius: var(--_radius);
@@ -683,10 +699,10 @@
683
699
  :where(.tui-interface) .tui-accordion__item[data-state=open] {
684
700
  --_bg: var(--_bg-open);
685
701
  }
686
- :where(.tui-interface) .tui-accordion__item[data-disabled=true] {
702
+ :where(.tui-interface) .tui-accordion__item[data-disabled] {
687
703
  opacity: var(--tui-opacity-disabled);
688
704
  }
689
- :where(.tui-interface) .tui-accordion__heading {
705
+ .tui-interface .tui-accordion__heading {
690
706
  margin: 0;
691
707
  font: inherit;
692
708
  }
@@ -696,10 +712,10 @@
696
712
  justify-content: space-between;
697
713
  gap: var(--tui-spacing-sm);
698
714
  width: 100%;
699
- padding: var(--_padding);
715
+ padding: var(--_trigger-padding);
700
716
  border: none;
701
717
  border-radius: var(--_radius);
702
- background: transparent;
718
+ background: var(--_trigger-bg);
703
719
  color: inherit;
704
720
  font: inherit;
705
721
  font-weight: var(--tui-font-weight-medium, 500);
@@ -734,7 +750,7 @@
734
750
  transition-duration: var(--tui-motion-duration);
735
751
  transition-timing-function: var(--tui-motion-timing);
736
752
  }
737
- [data-state=open] > :where(.tui-interface) .tui-accordion__indicator {
753
+ :where(.tui-interface) .tui-accordion__trigger[data-state=open] > .tui-accordion__indicator {
738
754
  transform: rotate(180deg);
739
755
  }
740
756
  :where(.tui-interface) .tui-accordion__panel {
@@ -748,9 +764,11 @@
748
764
  grid-template-rows: 1fr;
749
765
  }
750
766
  :where(.tui-interface) .tui-accordion__panel-content {
767
+ --_panel-spacing: var(--tui-accordion-panel-spacing, var(--_panel-padding));
751
768
  min-height: 0;
752
769
  overflow: hidden;
753
- padding-inline: var(--_padding);
770
+ padding-inline: var(--_panel-padding);
771
+ background: var(--_panel-bg);
754
772
  }
755
773
  :where(.tui-interface) .tui-accordion__panel-content > *:first-child {
756
774
  margin-block-start: 0;
@@ -758,10 +776,15 @@
758
776
  :where(.tui-interface) .tui-accordion__panel-content > *:last-child {
759
777
  margin-block-end: 0;
760
778
  }
779
+ :where(.tui-interface) .tui-accordion__panel-content::before {
780
+ content: "";
781
+ display: block;
782
+ height: var(--_panel-spacing);
783
+ }
761
784
  :where(.tui-interface) .tui-accordion__panel-content::after {
762
785
  content: "";
763
786
  display: block;
764
- height: var(--_padding);
787
+ height: var(--_panel-spacing);
765
788
  }
766
789
  :where(.tui-interface) .tui-accordion__panel[data-state=closed] > .tui-accordion__panel-content {
767
790
  animation: tui-fadeToTransparent var(--tui-motion-duration) var(--tui-motion-timing) forwards;
@@ -769,6 +792,25 @@
769
792
  :where(.tui-interface) .tui-accordion__panel[data-state=open] > .tui-accordion__panel-content {
770
793
  animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing) forwards;
771
794
  }
795
+ :where(.tui-interface) .tui-accordion__item[data-state=open] > .tui-accordion__panel {
796
+ border-block-start: var(--tui-border-width) solid var(--_divider);
797
+ }
798
+ :where(.tui-interface) .tui-accordion.is-variant-flush {
799
+ gap: 0;
800
+ border: var(--tui-border-width) solid var(--tui-accordion-border, var(--tui-color-border));
801
+ border-radius: var(--tui-accordion-radius, var(--tui-radius-md));
802
+ overflow: hidden;
803
+ }
804
+ :where(.tui-interface) .tui-accordion.is-variant-flush .tui-accordion__item {
805
+ border: none;
806
+ border-radius: 0;
807
+ }
808
+ :where(.tui-interface) .tui-accordion.is-variant-flush .tui-accordion__item + .tui-accordion__item {
809
+ border-block-start: var(--tui-border-width) solid var(--_border);
810
+ }
811
+ :where(.tui-interface) .tui-accordion.is-variant-flush .tui-accordion__trigger {
812
+ border-radius: 0;
813
+ }
772
814
  @media (forced-colors: active) {
773
815
  :where(.tui-interface) .tui-accordion__item {
774
816
  border-color: CanvasText;
@@ -799,7 +841,7 @@
799
841
  --_radius: var(--tui-avatar-radius, 50%);
800
842
  --_bg: var(--tui-avatar-bg, var(--tui-color-bg-muted));
801
843
  --_fg: var(--tui-avatar-fg, var(--tui-color-fg-inverted));
802
- --_border: var(--tui-avatar-border, 2px solid var(--tui-color-bg));
844
+ --_border: var(--tui-avatar-border, none);
803
845
  position: relative;
804
846
  display: inline-flex;
805
847
  align-items: center;
@@ -807,9 +849,10 @@
807
849
  width: var(--_size);
808
850
  height: var(--_size);
809
851
  border-radius: var(--_radius);
852
+ border: var(--_border);
810
853
  background-color: var(--_bg);
811
854
  color: var(--_fg);
812
- font-weight: 500;
855
+ font-weight: var(--tui-font-weight-medium, 500);
813
856
  font-size: calc(var(--_size) * 0.4);
814
857
  line-height: 1;
815
858
  flex-shrink: 0;
@@ -952,6 +995,20 @@
952
995
  :where(.tui-interface) .tui-avatar-group.is-overlap .tui-avatar {
953
996
  box-shadow: 0 0 0 var(--tui-avatar-group-border-width, 2px) var(--tui-avatar-group-border-color, var(--tui-color-bg-surface));
954
997
  }
998
+ .tui-interface[data-theme=dark] .tui-avatar.is-color-amber, .tui-interface[data-theme=dark] .tui-avatar.is-color-lime, .tui-interface[data-theme=dark] .tui-avatar.is-color-cyan,
999
+ .tui-interface[data-theme=dark] :where(.tui-interface) .tui-avatar.is-color-amber,
1000
+ .tui-interface[data-theme=dark] :where(.tui-interface) .tui-avatar.is-color-lime,
1001
+ .tui-interface[data-theme=dark] :where(.tui-interface) .tui-avatar.is-color-cyan {
1002
+ --_fg: var(--tui-avatar-fg, var(--tui-color-fg-inverted));
1003
+ }
1004
+ @media (prefers-color-scheme: dark) {
1005
+ .tui-interface[data-theme=auto] .tui-avatar.is-color-amber, .tui-interface[data-theme=auto] .tui-avatar.is-color-lime, .tui-interface[data-theme=auto] .tui-avatar.is-color-cyan,
1006
+ .tui-interface[data-theme=auto] :where(.tui-interface) .tui-avatar.is-color-amber,
1007
+ .tui-interface[data-theme=auto] :where(.tui-interface) .tui-avatar.is-color-lime,
1008
+ .tui-interface[data-theme=auto] :where(.tui-interface) .tui-avatar.is-color-cyan {
1009
+ --_fg: var(--tui-avatar-fg, var(--tui-color-fg-inverted));
1010
+ }
1011
+ }
955
1012
  @media (forced-colors: active) {
956
1013
  :where(.tui-interface) .tui-avatar {
957
1014
  background-color: Canvas;
@@ -997,15 +1054,15 @@
997
1054
  padding-block: 0.575em;
998
1055
  min-height: var(--tui-control-height-md);
999
1056
  gap: 0.5em;
1057
+ border-radius: var(--_radius);
1058
+ transition-duration: var(--tui-motion-duration);
1059
+ transition-timing-function: var(--tui-motion-timing);
1060
+ transition-property: border-color, color, background-color;
1000
1061
  background-color: var(--_bg) !important;
1001
1062
  color: var(--_fg) !important;
1002
1063
  border-color: var(--_border) !important;
1003
1064
  border-style: solid;
1004
1065
  border-width: var(--tui-border-width);
1005
- border-radius: var(--_radius);
1006
- transition-duration: var(--tui-motion-duration);
1007
- transition-timing-function: var(--tui-motion-timing);
1008
- transition-property: border-color, color, background-color;
1009
1066
  }
1010
1067
  .tui-interface .tui-button .tui-icon {
1011
1068
  font-size: inherit;
@@ -1048,6 +1105,12 @@
1048
1105
  display: inline-block;
1049
1106
  animation: tui-spin 0.85s linear infinite;
1050
1107
  }
1108
+ @media (prefers-reduced-motion: reduce) {
1109
+ .tui-interface .tui-button[data-loading=true]::before {
1110
+ animation: none;
1111
+ border-style: dashed;
1112
+ }
1113
+ }
1051
1114
  .tui-interface .tui-button.is-width-full {
1052
1115
  width: 100%;
1053
1116
  }
@@ -1143,6 +1206,7 @@
1143
1206
  --_bg: var(--tui-button-bg, transparent);
1144
1207
  --_fg: var(--tui-button-fg, var(--tui-theme-primary-strong));
1145
1208
  --_border: transparent;
1209
+ text-decoration: underline;
1146
1210
  border-width: 0;
1147
1211
  padding: 0;
1148
1212
  }
@@ -1183,10 +1247,15 @@
1183
1247
  color: LinkText;
1184
1248
  border-color: transparent;
1185
1249
  }
1250
+ .tui-interface .tui-button[disabled], .tui-interface .tui-button.is-disabled {
1251
+ color: GrayText;
1252
+ border-color: GrayText;
1253
+ background-color: Canvas;
1254
+ }
1186
1255
  }
1187
1256
  .tui-interface input[type=file] {
1188
1257
  --_bg: var(--tui-button-bg, var(--tui-theme-primary-base));
1189
- --_fg: var(--tui-button-fg, var(--tui-color-bg-surface));
1258
+ --_fg: var(--tui-button-fg, var(--tui-color-fg-on-accent));
1190
1259
  --_border: var(--tui-button-border, var(--tui-theme-primary-base));
1191
1260
  --_radius: var(--tui-button-radius, var(--tui-radius-md));
1192
1261
  --_bg-interact: var(--tui-button-bg-interact, var(--tui-theme-primary-stronger));
@@ -1206,13 +1275,13 @@
1206
1275
  padding-block: 0.575em;
1207
1276
  min-height: var(--tui-control-height-md);
1208
1277
  gap: 0.5em;
1209
- background-color: var(--_bg);
1210
- color: var(--_fg);
1211
- border: var(--tui-border-width) solid var(--_border);
1212
1278
  border-radius: var(--_radius);
1213
1279
  transition-duration: var(--tui-motion-duration);
1214
1280
  transition-timing-function: var(--tui-motion-timing);
1215
1281
  transition-property: border-color, color, background-color;
1282
+ background-color: var(--_bg);
1283
+ color: var(--_fg);
1284
+ border: var(--tui-border-width) solid var(--_border);
1216
1285
  }
1217
1286
  .tui-interface input[type=file]:hover::file-selector-button {
1218
1287
  background-color: var(--_bg-interact);
@@ -1236,9 +1305,9 @@
1236
1305
  --_border: var(--tui-card-border, var(--tui-color-border));
1237
1306
  --_border-interact: var(--tui-card-border-interact, var(--tui-theme-primary-base));
1238
1307
  --_radius: var(--tui-card-radius, var(--tui-radius-md));
1239
- --_shadow: var(--tui-card-shadow, var(--tui-shadow-md));
1240
- --_shadow-interact: var(--tui-card-shadow-interact, var(--tui-shadow-sm));
1241
- --_padding: var(--tui-card-padding, var(--tui-spacing-md));
1308
+ --_shadow: var(--tui-card-shadow, var(--tui-shadow-sm));
1309
+ --_shadow-interact: var(--tui-card-shadow-interact, var(--tui-shadow-md));
1310
+ --_padding: var(--tui-card-padding, var(--tui-spacing-lg));
1242
1311
  --_foot-basis: var(--tui-card-foot-basis, 500px);
1243
1312
  container-type: inline-size;
1244
1313
  container-name: tuiCard;
@@ -1367,15 +1436,23 @@
1367
1436
  :where(.tui-interface) .tui-card.has-interaction:hover {
1368
1437
  --_border: var(--_border-interact);
1369
1438
  }
1370
- :where(.tui-interface) .tui-card.has-interaction:focus, :where(.tui-interface) .tui-card.has-interaction:focus-within {
1439
+ :where(.tui-interface) .tui-card.has-interaction:focus-visible, :where(.tui-interface) .tui-card.has-interaction:has(:focus-visible) {
1371
1440
  --_border: var(--_border-interact);
1372
1441
  }
1373
1442
  :where(.tui-interface) .tui-card.has-interaction:active, :where(.tui-interface) .tui-card.has-interaction.active {
1374
- --_border: var(--tui-card-border-active, var(--tui-theme-secondary-subtlest));
1443
+ --_border: var(--tui-card-border-active, var(--tui-theme-primary-soft));
1444
+ }
1445
+ :where(.tui-interface) .tui-card .tui-stretched-link:focus {
1446
+ outline: none;
1447
+ }
1448
+ :where(.tui-interface) .tui-card .tui-stretched-link:focus-visible::after {
1449
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
1450
+ outline-offset: calc(-1 * var(--tui-focus-ring-offset));
1451
+ border-radius: var(--_radius);
1375
1452
  }
1376
- :where(.tui-interface) .tui-card.has-interaction [disabled],
1377
- :where(.tui-interface) .tui-card.has-interaction .disabled {
1453
+ :where(.tui-interface) .tui-card[aria-disabled=true] {
1378
1454
  opacity: var(--tui-opacity-disabled);
1455
+ pointer-events: none;
1379
1456
  }
1380
1457
  :where(.tui-interface) .tui-card.is-style-elevated {
1381
1458
  box-shadow: var(--_shadow);
@@ -1464,7 +1541,7 @@
1464
1541
  outline-offset: var(--tui-focus-ring-offset);
1465
1542
  }
1466
1543
  :where(.tui-interface) .tui-chip.is-interactive:is(:active, [aria-pressed=true], .is-selected), :where(.tui-interface) .tui-chip.is-interactive:has(input:checked), :where(.tui-interface) .tui-chip:is(a, button, [role=button]):is(:active, [aria-pressed=true], .is-selected), :where(.tui-interface) .tui-chip:is(a, button, [role=button]):has(input:checked), :where(.tui-interface) .tui-chip:has(input[type=checkbox], input[type=radio]):is(:active, [aria-pressed=true], .is-selected), :where(.tui-interface) .tui-chip:has(input[type=checkbox], input[type=radio]):has(input:checked) {
1467
- box-shadow: 0 0 0 1px var(--_fg) inset;
1544
+ box-shadow: 0 0 0 var(--tui-chip-selected-ring, 1px) var(--_fg) inset;
1468
1545
  filter: brightness(0.95);
1469
1546
  }
1470
1547
  :where(.tui-interface) .tui-chip.is-interactive:is(a), :where(.tui-interface) .tui-chip:is(a, button, [role=button]):is(a), :where(.tui-interface) .tui-chip:has(input[type=checkbox], input[type=radio]):is(a) {
@@ -1502,12 +1579,21 @@
1502
1579
  --_border: var(--tui-chip-border, var(--tui-theme-danger-subtlest));
1503
1580
  --_icon: var(--tui-chip-icon, var(--tui-theme-danger-base));
1504
1581
  }
1505
- :where(.tui-interface) .tui-chip.is-style-ghost:not(:is(a, button, [role=button])), :where(.tui-interface) .tui-chip.is-style-ghost:not(:is(:hover, :focus)) {
1582
+ :where(.tui-interface) .tui-chip.is-style-ghost {
1506
1583
  --_bg: transparent;
1507
- }
1508
- :where(.tui-interface) .tui-chip.is-style-ghost:not(:is(:focus-visible, :active, [aria-pressed=true], .is-selected)) {
1509
1584
  --_border: transparent;
1510
1585
  }
1586
+ @media (hover: hover) {
1587
+ :where(.tui-interface) .tui-chip.is-style-ghost.is-interactive:hover, :where(.tui-interface) .tui-chip.is-style-ghost:is(a, button, [role=button]):hover, :where(.tui-interface) .tui-chip.is-style-ghost:has(input[type=checkbox], input[type=radio]):hover {
1588
+ --_bg: var(--tui-chip-bg, var(--tui-theme-secondary-subtle));
1589
+ }
1590
+ }
1591
+ :where(.tui-interface) .tui-chip.is-style-ghost.is-interactive:focus, :where(.tui-interface) .tui-chip.is-style-ghost:is(a, button, [role=button]):focus, :where(.tui-interface) .tui-chip.is-style-ghost:has(input[type=checkbox], input[type=radio]):focus {
1592
+ --_bg: var(--tui-chip-bg, var(--tui-theme-secondary-subtle));
1593
+ }
1594
+ :where(.tui-interface) .tui-chip.is-style-ghost:is(:focus-visible, :active, [aria-pressed=true], .is-selected), :where(.tui-interface) .tui-chip.is-style-ghost:has(input:checked) {
1595
+ --_border: var(--tui-chip-border, var(--tui-theme-secondary-subtle));
1596
+ }
1511
1597
  :where(.tui-interface) .tui-chip.is-style-outline {
1512
1598
  --_bg: var(--tui-chip-bg, var(--tui-color-bg-surface));
1513
1599
  --_fg: var(--tui-chip-fg, var(--tui-theme-secondary-base));
@@ -1956,12 +2042,12 @@
1956
2042
  }
1957
2043
  :where(.tui-interface) .tui-dropdown {
1958
2044
  --_bg: var(--tui-dropdown-bg, var(--tui-color-bg-elevated));
1959
- --_fg: var(--tui-dropdown-fg, var(--tui-color-fg-default));
2045
+ --_fg: var(--tui-dropdown-fg, var(--tui-color-fg));
1960
2046
  --_radius: var(--tui-dropdown-radius, var(--tui-radius-sm));
1961
2047
  --_shadow: var(--tui-dropdown-shadow, var(--tui-shadow-md));
1962
2048
  --_z: var(--tui-dropdown-z, var(--tui-layer-top));
1963
- --_border: var(--tui-dropdown-border, var(--tui-color-border-default));
1964
- --_item-bg-hover: var(--tui-dropdown-item-bg-hover, var(--tui-color-bg-subtle));
2049
+ --_border: var(--tui-dropdown-border, var(--tui-color-border));
2050
+ --_item-bg-hover: var(--tui-dropdown-item-bg-hover, var(--tui-color-bg-muted));
1965
2051
  --_item-bg-active: var(--tui-dropdown-item-bg-active, var(--tui-color-bg-muted));
1966
2052
  z-index: var(--_z);
1967
2053
  min-width: var(--tui-dropdown-min-width, 160px);
@@ -1991,16 +2077,21 @@
1991
2077
  --tui-button-fg: inherit;
1992
2078
  --tui-button-border-color: transparent;
1993
2079
  }
1994
- :where(.tui-interface) .tui-dropdown__item:hover, :where(.tui-interface) .tui-dropdown__item:focus-visible, :where(.tui-interface) .tui-dropdown__item[data-active],
2080
+ :where(.tui-interface) .tui-dropdown__item:hover, :where(.tui-interface) .tui-dropdown__item[data-active],
1995
2081
  :where(.tui-interface) .tui-dropdown .tui-button:hover,
1996
- :where(.tui-interface) .tui-dropdown .tui-button:focus-visible,
1997
2082
  :where(.tui-interface) .tui-dropdown .tui-button[data-active],
1998
2083
  :where(.tui-interface) .tui-dropdown .tui-icon-button:hover,
1999
- :where(.tui-interface) .tui-dropdown .tui-icon-button:focus-visible,
2000
2084
  :where(.tui-interface) .tui-dropdown .tui-icon-button[data-active] {
2001
2085
  --tui-button-bg: var(--_item-bg-hover);
2002
2086
  --tui-button-fg: inherit;
2003
- outline: none;
2087
+ }
2088
+ :where(.tui-interface) .tui-dropdown__item:focus-visible,
2089
+ :where(.tui-interface) .tui-dropdown .tui-button:focus-visible,
2090
+ :where(.tui-interface) .tui-dropdown .tui-icon-button:focus-visible {
2091
+ --tui-button-bg: var(--_item-bg-hover);
2092
+ --tui-button-fg: inherit;
2093
+ outline: var(--tui-focus-ring-width, 2px) solid var(--tui-focus-ring-color, #2563eb);
2094
+ outline-offset: calc(-1 * var(--tui-focus-ring-width, 2px));
2004
2095
  }
2005
2096
  :where(.tui-interface) .tui-dropdown__item:active,
2006
2097
  :where(.tui-interface) .tui-dropdown .tui-button:active,
@@ -2019,6 +2110,25 @@
2019
2110
  :where(.tui-interface) .tui-dropdown .tui-icon-button {
2020
2111
  justify-content: center;
2021
2112
  }
2113
+ :where(.tui-interface) .tui-dropdown__separator {
2114
+ border: none;
2115
+ border-top: 1px solid var(--tui-color-border);
2116
+ margin: var(--tui-spacing-xxs, 4px) 0;
2117
+ }
2118
+ :where(.tui-interface) .tui-dropdown__header {
2119
+ padding: var(--tui-spacing-xs, 8px) var(--tui-spacing-sm, 12px);
2120
+ padding-block-end: var(--tui-spacing-xxs, 4px);
2121
+ font-size: var(--tui-typography-size-xs, 11px);
2122
+ font-weight: var(--tui-font-weight-semibold, 600);
2123
+ color: var(--tui-color-fg-muted);
2124
+ letter-spacing: 0.02em;
2125
+ user-select: none;
2126
+ }
2127
+ @media (prefers-reduced-motion: reduce) {
2128
+ :where(.tui-interface) .tui-dropdown {
2129
+ animation: none;
2130
+ }
2131
+ }
2022
2132
  @media (forced-colors: active) {
2023
2133
  :where(.tui-interface) .tui-dropdown {
2024
2134
  background-color: Canvas;
@@ -2507,7 +2617,7 @@
2507
2617
  }
2508
2618
  :where(.tui-interface) .tui-select__option[aria-selected=true] {
2509
2619
  background-color: var(--_bg-selected);
2510
- font-weight: 500;
2620
+ font-weight: var(--tui-font-weight-medium, 500);
2511
2621
  }
2512
2622
  :where(.tui-interface) .tui-select__option[aria-selected=true]:hover:not([data-disabled]), :where(.tui-interface) .tui-select__option[aria-selected=true][data-highlighted]:not([data-disabled]) {
2513
2623
  background-color: var(--tui-theme-primary-subtle);
@@ -2882,6 +2992,7 @@
2882
2992
  --_radius: var(--tui-icon-button-radius, var(--tui-radius-md));
2883
2993
  --_bg-interact: var(--tui-icon-button-bg-interact, var(--tui-theme-secondary-subtle));
2884
2994
  --_fg-interact: var(--tui-icon-button-fg-interact, var(--tui-color-fg));
2995
+ --_bg-pressed: var(--tui-theme-secondary-soft);
2885
2996
  appearance: none;
2886
2997
  border: none;
2887
2998
  background: none;
@@ -2918,10 +3029,14 @@
2918
3029
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
2919
3030
  outline-offset: var(--tui-focus-ring-offset);
2920
3031
  }
2921
- .tui-interface .tui-icon-button:is(:active, [aria-pressed=true]) {
3032
+ .tui-interface .tui-icon-button:active {
2922
3033
  --_bg: var(--_bg-interact);
2923
3034
  --_fg: var(--_fg-interact);
2924
3035
  }
3036
+ .tui-interface .tui-icon-button[aria-pressed=true] {
3037
+ --_bg: var(--_bg-pressed);
3038
+ --_fg: var(--_fg-interact);
3039
+ }
2925
3040
  .tui-interface .tui-icon-button:where(:disabled, [aria-disabled=true], .is-disabled) {
2926
3041
  pointer-events: none;
2927
3042
  cursor: not-allowed;
@@ -2937,15 +3052,20 @@
2937
3052
  .tui-interface .tui-icon-button.is-size-lg {
2938
3053
  --_size: var(--tui-control-height-lg, 3rem);
2939
3054
  }
3055
+ .tui-interface .tui-icon-button.is-shape-circle {
3056
+ border-radius: 50%;
3057
+ }
2940
3058
  .tui-interface .tui-icon-button.is-theme-primary {
2941
3059
  --_fg: var(--tui-icon-button-fg, var(--tui-theme-primary-base));
2942
3060
  --_fg-interact: var(--tui-icon-button-fg-interact, var(--tui-theme-primary-strong));
2943
3061
  --_bg-interact: var(--tui-icon-button-bg-interact, var(--tui-theme-primary-subtlest));
3062
+ --_bg-pressed: var(--tui-theme-primary-subtle);
2944
3063
  }
2945
3064
  .tui-interface .tui-icon-button.is-theme-danger {
2946
3065
  --_fg: var(--tui-icon-button-fg, var(--tui-theme-danger-base));
2947
3066
  --_fg-interact: var(--tui-icon-button-fg-interact, var(--tui-theme-danger-strong));
2948
3067
  --_bg-interact: var(--tui-icon-button-bg-interact, var(--tui-theme-danger-subtlest));
3068
+ --_bg-pressed: var(--tui-theme-danger-subtle);
2949
3069
  }
2950
3070
  .tui-interface .tui-icon-button.is-style-outline {
2951
3071
  --_border: var(--tui-icon-button-border, var(--tui-color-border));
@@ -2964,24 +3084,36 @@
2964
3084
  .tui-interface .tui-icon-button.is-style-solid {
2965
3085
  --_bg: var(--tui-icon-button-bg, var(--tui-theme-secondary-subtle));
2966
3086
  --_fg: var(--tui-icon-button-fg, var(--tui-color-fg));
3087
+ --_bg-pressed: var(--tui-theme-secondary-soft);
2967
3088
  }
2968
- .tui-interface .tui-icon-button.is-style-solid:hover, .tui-interface .tui-icon-button.is-style-solid:focus-visible, .tui-interface .tui-icon-button.is-style-solid:is(:active, [aria-pressed=true]) {
3089
+ .tui-interface .tui-icon-button.is-style-solid:hover, .tui-interface .tui-icon-button.is-style-solid:focus-visible, .tui-interface .tui-icon-button.is-style-solid:active {
2969
3090
  --_bg: var(--tui-icon-button-bg-interact, var(--tui-theme-secondary-soft));
2970
3091
  }
3092
+ .tui-interface .tui-icon-button.is-style-solid[aria-pressed=true] {
3093
+ --_bg: var(--_bg-pressed);
3094
+ }
2971
3095
  .tui-interface .tui-icon-button.is-style-solid.is-theme-primary {
2972
3096
  --_bg: var(--tui-icon-button-bg, var(--tui-theme-primary-base));
2973
3097
  --_fg: var(--tui-icon-button-fg, var(--tui-color-fg-on-accent));
3098
+ --_bg-pressed: var(--tui-theme-primary-stronger);
2974
3099
  }
2975
- .tui-interface .tui-icon-button.is-style-solid.is-theme-primary:hover, .tui-interface .tui-icon-button.is-style-solid.is-theme-primary:focus-visible, .tui-interface .tui-icon-button.is-style-solid.is-theme-primary:is(:active, [aria-pressed=true]) {
3100
+ .tui-interface .tui-icon-button.is-style-solid.is-theme-primary:hover, .tui-interface .tui-icon-button.is-style-solid.is-theme-primary:focus-visible, .tui-interface .tui-icon-button.is-style-solid.is-theme-primary:active {
2976
3101
  --_bg: var(--tui-icon-button-bg-interact, var(--tui-theme-primary-stronger));
2977
3102
  }
3103
+ .tui-interface .tui-icon-button.is-style-solid.is-theme-primary[aria-pressed=true] {
3104
+ --_bg: var(--_bg-pressed);
3105
+ }
2978
3106
  .tui-interface .tui-icon-button.is-style-solid.is-theme-danger {
2979
3107
  --_bg: var(--tui-icon-button-bg, var(--tui-theme-danger-base));
2980
3108
  --_fg: var(--tui-icon-button-fg, var(--tui-color-fg-on-accent));
3109
+ --_bg-pressed: var(--tui-theme-danger-stronger);
2981
3110
  }
2982
- .tui-interface .tui-icon-button.is-style-solid.is-theme-danger:hover, .tui-interface .tui-icon-button.is-style-solid.is-theme-danger:focus-visible, .tui-interface .tui-icon-button.is-style-solid.is-theme-danger:is(:active, [aria-pressed=true]) {
3111
+ .tui-interface .tui-icon-button.is-style-solid.is-theme-danger:hover, .tui-interface .tui-icon-button.is-style-solid.is-theme-danger:focus-visible, .tui-interface .tui-icon-button.is-style-solid.is-theme-danger:active {
2983
3112
  --_bg: var(--tui-icon-button-bg-interact, var(--tui-theme-danger-stronger));
2984
3113
  }
3114
+ .tui-interface .tui-icon-button.is-style-solid.is-theme-danger[aria-pressed=true] {
3115
+ --_bg: var(--_bg-pressed);
3116
+ }
2985
3117
  .tui-interface .tui-icon-button[aria-busy=true] {
2986
3118
  pointer-events: none;
2987
3119
  }
@@ -2997,6 +3129,12 @@
2997
3129
  border-radius: 50%;
2998
3130
  animation: tui-spin 0.85s linear infinite;
2999
3131
  }
3132
+ @media (prefers-reduced-motion: reduce) {
3133
+ .tui-interface .tui-icon-button__spinner {
3134
+ animation: none;
3135
+ border-style: dashed;
3136
+ }
3137
+ }
3000
3138
  @media (forced-colors: active) {
3001
3139
  .tui-icon-button {
3002
3140
  forced-color-adjust: none;
@@ -3012,6 +3150,11 @@
3012
3150
  outline: 2px solid Highlight;
3013
3151
  outline-offset: 2px;
3014
3152
  }
3153
+ .tui-icon-button:is(:disabled, [aria-disabled=true]) {
3154
+ color: GrayText;
3155
+ border-color: GrayText;
3156
+ background-color: Canvas;
3157
+ }
3015
3158
  }
3016
3159
  .tui-modal {
3017
3160
  --_z: var(--tui-modal-z, var(--tui-layer-modal, 1000));
@@ -3047,7 +3190,7 @@
3047
3190
  --_bg: var(--tui-modal-bg, var(--tui-color-bg-surface));
3048
3191
  --_border: var(--tui-modal-border, var(--tui-color-border));
3049
3192
  --_radius: var(--tui-modal-radius, var(--tui-radius-lg));
3050
- --_padding: var(--tui-modal-padding, var(--tui-spacing-md));
3193
+ --_padding: var(--tui-modal-padding, var(--tui-spacing-lg));
3051
3194
  --_shadow: var(--tui-modal-shadow, var(--tui-shadow-lg));
3052
3195
  position: relative;
3053
3196
  width: 100%;
@@ -3068,6 +3211,10 @@
3068
3211
  .tui-modal__dialog:has(> .tui-modal__foot) {
3069
3212
  --_min-foot: 4rem;
3070
3213
  }
3214
+ .tui-modal__dialog:focus-visible {
3215
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3216
+ outline-offset: var(--tui-focus-ring-offset);
3217
+ }
3071
3218
  .tui-modal__dialog {
3072
3219
  color: var(--tui-color-fg);
3073
3220
  border-style: solid;
@@ -3102,12 +3249,41 @@
3102
3249
  }
3103
3250
  .tui-modal__dialog .tui-modal__body-inner > p {
3104
3251
  margin: 0;
3252
+ margin-block-end: var(--tui-spacing-md);
3253
+ }
3254
+ .tui-modal__dialog .tui-modal__body-inner > p:last-child {
3255
+ margin-block-end: 0;
3105
3256
  }
3106
3257
  .tui-modal__dialog .tui-modal__head {
3107
3258
  padding-block: var(--_padding);
3108
3259
  padding-inline: var(--_padding);
3109
3260
  width: 100%;
3110
3261
  }
3262
+ .tui-modal__dialog .tui-modal__head.has-icon {
3263
+ display: flex;
3264
+ align-items: flex-start;
3265
+ gap: var(--tui-spacing-sm);
3266
+ }
3267
+ .tui-modal__dialog .tui-modal__head-icon {
3268
+ flex-shrink: 0;
3269
+ display: flex;
3270
+ align-items: center;
3271
+ height: 1.5em;
3272
+ font-size: var(--tui-typography-size-lg);
3273
+ color: var(--tui-color-fg);
3274
+ }
3275
+ .tui-modal__dialog .tui-modal__head-content {
3276
+ flex: 1 1 auto;
3277
+ min-width: 0;
3278
+ }
3279
+ .tui-modal__dialog .tui-modal__head-subtitle {
3280
+ margin-block-start: var(--tui-spacing-xxs);
3281
+ font-size: var(--tui-typography-size-sm);
3282
+ color: var(--tui-color-fg-muted);
3283
+ }
3284
+ .tui-modal__dialog:has(> .tui-modal__close) > .tui-modal__head {
3285
+ padding-inline-end: calc(var(--_padding) + var(--tui-spacing-xl));
3286
+ }
3111
3287
  .tui-modal__dialog .tui-modal__foot {
3112
3288
  padding-block: var(--_padding);
3113
3289
  padding-inline: var(--_padding);
@@ -3331,7 +3507,8 @@
3331
3507
  align-items: center;
3332
3508
  justify-content: center;
3333
3509
  width: auto;
3334
- min-height: auto;
3510
+ min-width: 32px;
3511
+ min-height: 32px;
3335
3512
  background: none;
3336
3513
  border: none;
3337
3514
  border-radius: var(--tui-radius-sm);
@@ -3345,7 +3522,7 @@
3345
3522
  transition-property: color;
3346
3523
  }
3347
3524
  .tui-interface .tui-move-handle.is-handle .tui-icon {
3348
- font-size: 24px;
3525
+ font-size: var(--_icon-size);
3349
3526
  }
3350
3527
  .tui-interface .tui-move-handle.is-handle:hover {
3351
3528
  color: var(--_fg-interact);
@@ -3396,7 +3573,7 @@
3396
3573
  --_stripe: var(--tui-notice-stripe, var(--tui-theme-primary-base));
3397
3574
  --_fg: var(--tui-notice-fg, inherit);
3398
3575
  --_radius: var(--tui-notice-radius, var(--tui-radius-md));
3399
- --_padding: var(--tui-notice-padding, var(--tui-spacing-sm));
3576
+ --_padding: var(--tui-notice-padding, var(--tui-spacing-md));
3400
3577
  --_foot-basis: var(--tui-notice-foot-basis, 500px);
3401
3578
  --_gap: var(--tui-spacing-sm);
3402
3579
  container-type: inline-size;
@@ -3421,6 +3598,7 @@
3421
3598
  justify-content: center;
3422
3599
  line-height: 0;
3423
3600
  font-size: var(--tui-typography-size-xl);
3601
+ color: var(--_icon-color, inherit);
3424
3602
  }
3425
3603
  :where(.tui-interface) .tui-notice__title {
3426
3604
  flex: 1 1 auto;
@@ -3447,6 +3625,10 @@
3447
3625
  }
3448
3626
  :where(.tui-interface) .tui-notice__body > p {
3449
3627
  margin: 0;
3628
+ margin-block-end: var(--tui-spacing-sm);
3629
+ }
3630
+ :where(.tui-interface) .tui-notice__body > p:last-child {
3631
+ margin-block-end: 0;
3450
3632
  }
3451
3633
  :where(.tui-interface) .tui-notice__body a {
3452
3634
  color: var(--tui-theme-primary-strong);
@@ -3514,7 +3696,7 @@
3514
3696
  }
3515
3697
  }
3516
3698
  :where(.tui-interface) .tui-notice.is-dismissible .tui-notice__inner {
3517
- padding-inline-end: calc(var(--_padding) + 2rem);
3699
+ padding-inline-end: calc(var(--_padding) + var(--tui-control-height-sm));
3518
3700
  }
3519
3701
  @container tuiNotice (width >= 400px) {
3520
3702
  :where(.tui-interface) .tui-notice.is-layout-inline.is-dismissible .tui-notice__inner {
@@ -3527,24 +3709,32 @@
3527
3709
  }
3528
3710
  }
3529
3711
  :where(.tui-interface) .tui-notice.has-stripe {
3530
- border-inline-start-width: 4px;
3712
+ border-inline-start-width: var(--tui-notice-stripe-width, 4px);
3531
3713
  border-inline-start-color: var(--_stripe);
3532
3714
  }
3533
3715
  :where(.tui-interface) .tui-notice.is-theme-info {
3534
3716
  --_bg: var(--tui-notice-bg, var(--tui-theme-primary-subtlest));
3717
+ --_bg-hover: var(--tui-theme-primary-subtle);
3535
3718
  --_stripe: var(--tui-notice-stripe, var(--tui-theme-primary-base));
3719
+ --_icon-color: var(--tui-theme-primary-base);
3536
3720
  }
3537
3721
  :where(.tui-interface) .tui-notice.is-theme-success {
3538
3722
  --_bg: var(--tui-notice-bg, var(--tui-theme-success-subtlest));
3723
+ --_bg-hover: var(--tui-theme-success-subtle);
3539
3724
  --_stripe: var(--tui-notice-stripe, var(--tui-theme-success-base));
3725
+ --_icon-color: var(--tui-theme-success-base);
3540
3726
  }
3541
3727
  :where(.tui-interface) .tui-notice.is-theme-warning {
3542
3728
  --_bg: var(--tui-notice-bg, var(--tui-theme-warning-subtlest));
3729
+ --_bg-hover: var(--tui-theme-warning-subtle);
3543
3730
  --_stripe: var(--tui-notice-stripe, var(--tui-theme-warning-base));
3731
+ --_icon-color: var(--tui-theme-warning-base);
3544
3732
  }
3545
3733
  :where(.tui-interface) .tui-notice.is-theme-danger {
3546
3734
  --_bg: var(--tui-notice-bg, var(--tui-theme-danger-subtlest));
3735
+ --_bg-hover: var(--tui-theme-danger-subtle);
3547
3736
  --_stripe: var(--tui-notice-stripe, var(--tui-theme-danger-base));
3737
+ --_icon-color: var(--tui-theme-danger-base);
3548
3738
  }
3549
3739
  :where(.tui-interface) .tui-notice.is-style-elevated {
3550
3740
  box-shadow: var(--tui-shadow-md);
@@ -3556,7 +3746,7 @@
3556
3746
  transition-timing-function: var(--tui-motion-timing);
3557
3747
  }
3558
3748
  :where(.tui-interface) .tui-notice.has-interaction:hover {
3559
- --_bg: var(--tui-color-bg-muted);
3749
+ --_bg: var(--_bg-hover, var(--tui-color-bg-muted));
3560
3750
  }
3561
3751
  :where(.tui-interface) .tui-notice.has-interaction:focus-visible {
3562
3752
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
@@ -3572,20 +3762,23 @@
3572
3762
  }
3573
3763
  :where(.tui-interface) .tui-notice.is-exiting-collapse {
3574
3764
  display: grid;
3575
- animation: tui-noticeExitCollapse 200ms var(--tui-motion-timing) forwards;
3765
+ animation: tui-noticeExitCollapse var(--tui-motion-duration) var(--tui-motion-timing) forwards;
3576
3766
  }
3577
3767
  :where(.tui-interface) .tui-notice.is-exiting-collapse .tui-notice__inner {
3578
3768
  min-height: 0;
3579
3769
  overflow: hidden;
3580
3770
  }
3581
3771
  :where(.tui-interface) .tui-notice.is-exiting-fade {
3582
- animation: tui-noticeExitFade 200ms var(--tui-motion-timing) forwards;
3772
+ animation: tui-noticeExitFade var(--tui-motion-duration) var(--tui-motion-timing) forwards;
3583
3773
  }
3584
3774
  @media (prefers-reduced-motion: reduce) {
3585
3775
  :where(.tui-interface) .tui-notice.is-exiting-collapse, :where(.tui-interface) .tui-notice.is-exiting-fade {
3586
3776
  animation: none;
3587
3777
  opacity: 0;
3588
3778
  }
3779
+ :where(.tui-interface) .tui-notice.has-interaction {
3780
+ transition-duration: 0s;
3781
+ }
3589
3782
  }
3590
3783
  @keyframes tui-noticeExitCollapse {
3591
3784
  0% {
@@ -3609,15 +3802,15 @@
3609
3802
  }
3610
3803
  .tui-notice .tui-notice__dismiss {
3611
3804
  position: absolute;
3612
- inset-block-start: var(--tui-notice-padding, var(--tui-spacing-sm));
3613
- inset-inline-end: var(--tui-notice-padding, var(--tui-spacing-sm));
3805
+ inset-block-start: var(--tui-notice-padding, var(--tui-spacing-md));
3806
+ inset-inline-end: var(--tui-notice-padding, var(--tui-spacing-md));
3614
3807
  }
3615
3808
  .tui-notice.is-layout-inline .tui-notice__dismiss {
3616
3809
  position: static;
3617
3810
  flex-shrink: 0;
3618
3811
  align-self: center;
3619
3812
  margin-inline-start: var(--tui-spacing-sm);
3620
- margin-inline-end: var(--tui-notice-padding, var(--tui-spacing-sm));
3813
+ margin-inline-end: var(--tui-notice-padding, var(--tui-spacing-md));
3621
3814
  }
3622
3815
  :where(.tui-interface) .tui-overlap-stack {
3623
3816
  display: inline-flex;
@@ -3651,7 +3844,7 @@
3651
3844
  background-color: var(--_bg);
3652
3845
  color: var(--_fg);
3653
3846
  font-size: 0.75rem;
3654
- font-weight: 500;
3847
+ font-weight: var(--tui-font-weight-medium, 500);
3655
3848
  }
3656
3849
  @media (forced-colors: active) {
3657
3850
  :where(.tui-interface) .tui-overlap-stack__overflow {
@@ -4387,6 +4580,15 @@
4387
4580
  :where(.tui-interface) .tui-sidebar__header h1, :where(.tui-interface) .tui-sidebar__header h2, :where(.tui-interface) .tui-sidebar__header h3, :where(.tui-interface) .tui-sidebar__header h4, :where(.tui-interface) .tui-sidebar__header h5, :where(.tui-interface) .tui-sidebar__header h6 {
4388
4581
  margin: 0;
4389
4582
  }
4583
+ :where(.tui-interface) .tui-sidebar__footer {
4584
+ flex-shrink: 0;
4585
+ margin-top: auto;
4586
+ padding: var(--_padding);
4587
+ border-top: var(--tui-border-width) solid var(--_border);
4588
+ display: flex;
4589
+ flex-direction: column;
4590
+ gap: var(--tui-spacing-sm);
4591
+ }
4390
4592
  :where(.tui-interface) .tui-sidebar__nav {
4391
4593
  flex: 1;
4392
4594
  overflow-y: auto;
@@ -4405,9 +4607,12 @@
4405
4607
  :where(.tui-interface) .tui-sidebar-drawer__backdrop {
4406
4608
  position: absolute;
4407
4609
  inset: 0;
4408
- background-color: var(--tui-color-bg-overlay, rgba(0, 0, 0, 0.5));
4610
+ background-color: var(--tui-color-bg-overlay);
4409
4611
  animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing);
4410
4612
  }
4613
+ [data-state=closing] > :where(.tui-interface) .tui-sidebar-drawer__backdrop {
4614
+ animation: tui-fadeToTransparent var(--tui-motion-duration) var(--tui-motion-timing) forwards;
4615
+ }
4411
4616
  :where(.tui-interface) .tui-sidebar-drawer__panel {
4412
4617
  position: relative;
4413
4618
  z-index: 1;
@@ -4420,6 +4625,12 @@
4420
4625
  [data-position=right] > :where(.tui-interface) .tui-sidebar-drawer__panel {
4421
4626
  animation: tui-slideInFromRight var(--tui-motion-duration) var(--tui-motion-timing);
4422
4627
  }
4628
+ [data-state=closing][data-position=left] > :where(.tui-interface) .tui-sidebar-drawer__panel {
4629
+ animation: tui-slideOutToLeft var(--tui-motion-duration) var(--tui-motion-timing) forwards;
4630
+ }
4631
+ [data-state=closing][data-position=right] > :where(.tui-interface) .tui-sidebar-drawer__panel {
4632
+ animation: tui-slideOutToRight var(--tui-motion-duration) var(--tui-motion-timing) forwards;
4633
+ }
4423
4634
  :where(.tui-interface) .tui-sidebar-drawer__panel .tui-sidebar {
4424
4635
  height: 100%;
4425
4636
  border-left: none;
@@ -4441,6 +4652,36 @@
4441
4652
  transform: translateX(0);
4442
4653
  }
4443
4654
  }
4655
+ @keyframes tui-slideOutToLeft {
4656
+ from {
4657
+ transform: translateX(0);
4658
+ }
4659
+ to {
4660
+ transform: translateX(-100%);
4661
+ }
4662
+ }
4663
+ @keyframes tui-slideOutToRight {
4664
+ from {
4665
+ transform: translateX(0);
4666
+ }
4667
+ to {
4668
+ transform: translateX(100%);
4669
+ }
4670
+ }
4671
+ @keyframes tui-fadeToTransparent {
4672
+ from {
4673
+ opacity: 1;
4674
+ }
4675
+ to {
4676
+ opacity: 0;
4677
+ }
4678
+ }
4679
+ @media (prefers-reduced-motion: reduce) {
4680
+ :where(.tui-interface) .tui-sidebar-drawer__backdrop,
4681
+ :where(.tui-interface) .tui-sidebar-drawer__panel {
4682
+ animation: none;
4683
+ }
4684
+ }
4444
4685
  body.tui-sidebar-drawer-open {
4445
4686
  overflow: hidden;
4446
4687
  }
@@ -4659,6 +4900,10 @@
4659
4900
  align-items: stretch;
4660
4901
  flex-wrap: nowrap;
4661
4902
  }
4903
+ :where(.tui-interface) .tui-tabs[data-orientation=vertical] .tui-tabs__tab {
4904
+ text-align: start;
4905
+ justify-content: flex-start;
4906
+ }
4662
4907
  :where(.tui-interface) .tui-tabs__list {
4663
4908
  display: flex;
4664
4909
  flex-wrap: wrap;
@@ -4682,7 +4927,7 @@
4682
4927
  --_fg: var(--tui-tabs-tab-fg, var(--tui-color-fg-muted));
4683
4928
  --_border: var(--tui-tabs-tab-border, transparent);
4684
4929
  --_bg-active: var(--tui-tabs-tab-bg-active, var(--tui-theme-primary-base, currentColor));
4685
- --_fg-active: var(--tui-tabs-tab-fg-active, var(--tui-color-fg-on-accent, #fff));
4930
+ --_fg-active: var(--tui-tabs-tab-fg-active, var(--tui-color-fg-on-accent));
4686
4931
  --_bg-hover: var(--tui-tabs-tab-bg-hover, var(--tui-color-bg-muted));
4687
4932
  --_indicator: var(--tui-tabs-indicator, var(--tui-theme-primary-base, currentColor));
4688
4933
  --_indicator-size: var(--tui-tabs-indicator-size, 2px);
@@ -4698,9 +4943,9 @@
4698
4943
  background: var(--_bg);
4699
4944
  color: var(--_fg);
4700
4945
  font: inherit;
4701
- font-size: var(--tui-font-size-sm);
4946
+ font-size: var(--tui-typography-size-sm);
4702
4947
  font-weight: var(--tui-font-weight-medium, 500);
4703
- line-height: var(--tui-line-height-tight);
4948
+ line-height: var(--tui-line-height-tight, 1.25);
4704
4949
  text-decoration: none;
4705
4950
  white-space: nowrap;
4706
4951
  cursor: pointer;
@@ -4736,6 +4981,7 @@
4736
4981
  --_padding: var(--tui-tabs-tab-padding, var(--tui-spacing-sm) var(--tui-spacing-xs));
4737
4982
  --_radius: 0;
4738
4983
  --_bg-hover: transparent;
4984
+ --_fg-active: var(--tui-tabs-tab-fg-active, var(--tui-color-fg));
4739
4985
  position: relative;
4740
4986
  margin-block-end: calc(var(--tui-border-width) * -1);
4741
4987
  border-bottom: var(--_indicator-size) solid transparent;
@@ -4745,7 +4991,7 @@
4745
4991
  color: var(--tui-color-fg);
4746
4992
  }
4747
4993
  .tui-interface [data-variant=underline] .tui-tabs__tab[data-state=active] {
4748
- color: var(--tui-color-fg);
4994
+ color: var(--_fg-active);
4749
4995
  border-bottom-color: var(--_indicator);
4750
4996
  }
4751
4997
  .tui-interface [data-variant=underline] .tui-tabs__tab:focus-visible {
@@ -4755,11 +5001,12 @@
4755
5001
  --_radius: var(--tui-tabs-tab-radius, var(--tui-radius-full));
4756
5002
  --_border: var(--tui-tabs-tab-border, var(--tui-color-border));
4757
5003
  --_bg-hover: var(--tui-tabs-tab-bg-hover, var(--tui-color-bg-muted));
5004
+ --_fg-active: var(--tui-tabs-tab-fg-active, var(--tui-theme-primary-strong, currentColor));
4758
5005
  border: var(--tui-border-width) solid var(--_border);
4759
5006
  }
4760
5007
  .tui-interface [data-variant=outline] .tui-tabs__tab[data-state=active] {
4761
5008
  --_border: var(--tui-theme-primary-base, currentColor);
4762
- color: var(--tui-theme-primary-strong, currentColor);
5009
+ color: var(--_fg-active);
4763
5010
  background: var(--tui-theme-primary-subtlest, transparent);
4764
5011
  }
4765
5012
  :where(.tui-interface) .tui-tabs__panel[data-state=inactive] {
@@ -4855,10 +5102,12 @@
4855
5102
  border: var(--tui-border-width) solid var(--_border);
4856
5103
  border-radius: var(--_radius);
4857
5104
  padding-inline: var(--tui-spacing-xs);
5105
+ cursor: text;
4858
5106
  }
4859
5107
  :where(.tui-interface) .tui-input-group .tui-input,
4860
5108
  :where(.tui-interface) .tui-input-group input {
4861
5109
  border: none;
5110
+ border-radius: 0;
4862
5111
  background: transparent;
4863
5112
  padding-inline: 0;
4864
5113
  padding-block: 0;
@@ -4904,6 +5153,31 @@
4904
5153
  :where(.tui-interface) .tui-input-group__suffix .tui-icon {
4905
5154
  font-size: 1em;
4906
5155
  }
5156
+ :where(.tui-interface) .tui-input-group__prefix.is-text,
5157
+ :where(.tui-interface) .tui-input-group__suffix.is-text {
5158
+ background-color: var(--tui-color-bg-surface);
5159
+ padding-inline: var(--tui-spacing-xs);
5160
+ margin-block: calc(-1 * var(--_py));
5161
+ align-self: stretch;
5162
+ display: inline-flex;
5163
+ align-items: center;
5164
+ }
5165
+ :where(.tui-interface) .tui-input-group__prefix.is-text {
5166
+ border-inline-end: var(--tui-border-width) solid var(--_border);
5167
+ border-start-start-radius: calc(var(--_radius) - var(--tui-border-width));
5168
+ border-end-start-radius: calc(var(--_radius) - var(--tui-border-width));
5169
+ }
5170
+ :where(.tui-interface) .tui-input-group__suffix.is-text {
5171
+ border-inline-start: var(--tui-border-width) solid var(--_border);
5172
+ border-start-end-radius: calc(var(--_radius) - var(--tui-border-width));
5173
+ border-end-end-radius: calc(var(--_radius) - var(--tui-border-width));
5174
+ }
5175
+ :where(.tui-interface) .tui-input-group:has(> .tui-input-group__prefix.is-text) {
5176
+ padding-inline-start: 0;
5177
+ }
5178
+ :where(.tui-interface) .tui-input-group:has(> .tui-input-group__suffix.is-text) {
5179
+ padding-inline-end: 0;
5180
+ }
4907
5181
  :where(.tui-interface) .tui-toolbar {
4908
5182
  --_gap: var(--tui-toolbar-gap, var(--tui-spacing-sm));
4909
5183
  --_padding: var(--tui-toolbar-padding, 0);
@@ -4936,30 +5210,46 @@
4936
5210
  :where(.tui-interface) .tui-tooltip {
4937
5211
  --_bg: var(--tui-tooltip-bg, var(--tui-color-bg-inverted));
4938
5212
  --_fg: var(--tui-tooltip-fg, var(--tui-color-fg-inverted));
4939
- --_radius: var(--tui-tooltip-radius, var(--tui-radius-xs));
5213
+ --_radius: var(--tui-tooltip-radius, var(--tui-radius-sm));
4940
5214
  --_z: var(--tui-tooltip-z, var(--tui-layer-top));
4941
5215
  z-index: var(--_z);
4942
5216
  width: max-content;
4943
5217
  max-width: min(250px, 100vw - 2 * var(--tui-spacing-xs, 8px));
4944
- padding: 0.27em 0.54em;
5218
+ padding: 0.35em 0.65em;
4945
5219
  pointer-events: auto;
4946
5220
  background-color: var(--_bg);
4947
5221
  color: var(--_fg);
4948
5222
  border-radius: var(--_radius);
4949
- font-size: var(--tui-typography-size-xs, 11px);
5223
+ font-size: var(--tui-typography-size-sm, 13px);
4950
5224
  line-height: 1.4;
4951
5225
  animation: tui-fadeFromTransparent var(--tui-motion-duration) var(--tui-motion-timing);
4952
5226
  }
5227
+ :where(.tui-interface) .tui-tooltip.is-theme-light {
5228
+ --_bg: var(--tui-tooltip-bg, var(--tui-color-bg-surface));
5229
+ --_fg: var(--tui-tooltip-fg, var(--tui-color-fg));
5230
+ border: 1px solid var(--tui-color-border);
5231
+ }
5232
+ :where(.tui-interface) .tui-tooltip__arrow {
5233
+ fill: var(--_bg);
5234
+ }
4953
5235
  :where(.tui-interface) [data-tooltip-open]:focus-visible {
4954
5236
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
4955
5237
  outline-offset: var(--tui-focus-ring-offset);
4956
5238
  }
5239
+ @media (prefers-reduced-motion: reduce) {
5240
+ :where(.tui-interface) .tui-tooltip {
5241
+ animation: none;
5242
+ }
5243
+ }
4957
5244
  @media (forced-colors: active) {
4958
5245
  :where(.tui-interface) .tui-tooltip {
4959
5246
  background-color: Canvas;
4960
5247
  color: CanvasText;
4961
5248
  border: 1px solid CanvasText;
4962
5249
  }
5250
+ :where(.tui-interface) .tui-tooltip__arrow {
5251
+ fill: Canvas;
5252
+ }
4963
5253
  }
4964
5254
 
4965
5255