@tangible/ui 0.0.7 → 0.0.8

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 (91) hide show
  1. package/components/Accordion/Accordion.js +11 -3
  2. package/components/Avatar/Avatar.js +4 -3
  3. package/components/Avatar/AvatarGroup.js +7 -5
  4. package/components/Avatar/index.d.ts +2 -2
  5. package/components/Avatar/index.js +1 -1
  6. package/components/Avatar/types.d.ts +27 -0
  7. package/components/Avatar/types.js +8 -0
  8. package/components/Button/Button.js +4 -2
  9. package/components/Button/index.d.ts +2 -1
  10. package/components/Button/index.js +1 -0
  11. package/components/Button/types.d.ts +10 -0
  12. package/components/Button/types.js +3 -1
  13. package/components/Checkbox/Checkbox.js +46 -11
  14. package/components/Checkbox/types.d.ts +9 -0
  15. package/components/Combobox/Combobox.d.ts +1 -1
  16. package/components/Combobox/Combobox.js +28 -7
  17. package/components/Combobox/index.d.ts +2 -1
  18. package/components/Combobox/index.js +1 -0
  19. package/components/Combobox/types.d.ts +9 -0
  20. package/components/Combobox/types.js +3 -1
  21. package/components/Dropdown/Dropdown.js +16 -4
  22. package/components/Field/Field.d.ts +4 -1
  23. package/components/Field/Field.js +35 -14
  24. package/components/Field/FieldContext.d.ts +16 -0
  25. package/components/Field/FieldContext.js +3 -0
  26. package/components/Field/index.d.ts +2 -1
  27. package/components/Field/index.js +1 -0
  28. package/components/MoveHandle/MoveHandle.js +1 -1
  29. package/components/MoveHandle/types.d.ts +1 -1
  30. package/components/MultiSelect/MultiSelect.d.ts +1 -1
  31. package/components/MultiSelect/MultiSelect.js +37 -19
  32. package/components/MultiSelect/index.d.ts +2 -1
  33. package/components/MultiSelect/index.js +1 -0
  34. package/components/MultiSelect/types.d.ts +34 -0
  35. package/components/MultiSelect/types.js +10 -0
  36. package/components/Pager/Pager.d.ts +7 -1
  37. package/components/Pager/Pager.js +7 -5
  38. package/components/Pager/index.d.ts +2 -0
  39. package/components/Pager/index.js +1 -0
  40. package/components/Pager/types.d.ts +37 -0
  41. package/components/Pager/types.js +12 -0
  42. package/components/Rating/Rating.d.ts +2 -32
  43. package/components/Rating/Rating.js +5 -3
  44. package/components/Rating/index.d.ts +2 -1
  45. package/components/Rating/index.js +1 -0
  46. package/components/Rating/types.d.ts +41 -0
  47. package/components/Rating/types.js +4 -0
  48. package/components/SegmentedControl/SegmentedControl.js +6 -5
  49. package/components/SegmentedControl/types.d.ts +17 -5
  50. package/components/Select/Select.d.ts +1 -0
  51. package/components/Select/Select.js +109 -77
  52. package/components/Select/SelectContext.d.ts +4 -16
  53. package/components/Select/SelectContext.js +5 -35
  54. package/components/Select/types.d.ts +19 -19
  55. package/components/Sidebar/Sidebar.js +25 -20
  56. package/components/StepIndicator/StepIndicator.js +11 -8
  57. package/components/StepIndicator/index.d.ts +2 -1
  58. package/components/StepIndicator/index.js +1 -0
  59. package/components/StepIndicator/types.d.ts +18 -0
  60. package/components/StepIndicator/types.js +7 -1
  61. package/components/Table/BulkActionsBar.d.ts +4 -1
  62. package/components/Table/BulkActionsBar.js +5 -4
  63. package/components/Table/DataTable.d.ts +4 -1
  64. package/components/Table/DataTable.js +10 -8
  65. package/components/Table/index.d.ts +3 -0
  66. package/components/Table/index.js +2 -0
  67. package/components/Table/types.d.ts +20 -0
  68. package/components/Table/types.js +11 -0
  69. package/components/Tabs/Tabs.js +11 -4
  70. package/components/TextInput/TextInput.js +2 -1
  71. package/components/TextInput/types.d.ts +7 -1
  72. package/components/Textarea/Textarea.js +3 -2
  73. package/components/Textarea/types.d.ts +6 -1
  74. package/icons/icons.svg +29 -15
  75. package/icons/lms/index.d.ts +8 -0
  76. package/icons/lms/index.js +48 -4
  77. package/icons/manifest.json +112 -0
  78. package/icons/player/index.js +9 -9
  79. package/icons/registry.d.ts +28 -0
  80. package/icons/registry.js +14 -0
  81. package/icons/system/index.d.ts +20 -0
  82. package/icons/system/index.js +112 -2
  83. package/package.json +1 -1
  84. package/styles/all.css +1 -1
  85. package/styles/all.expanded.css +266 -59
  86. package/styles/all.expanded.unlayered.css +266 -59
  87. package/styles/all.unlayered.css +1 -1
  88. package/styles/components/input/index.scss +29 -7
  89. package/styles/system/_constants.scss +1 -1
  90. package/styles/system/_tokens.scss +1 -0
  91. package/tui-manifest.json +73 -44
@@ -75,7 +75,14 @@
75
75
  --tui-card-foot-basis
76
76
  */
77
77
  /* @tui-tokens
78
- --tui-input-accent
78
+ --tui-checkbox-accent
79
+ --tui-checkbox-border
80
+ --tui-checkbox-border-invalid
81
+ --tui-checkbox-radius
82
+ --tui-checkbox-bg
83
+ --tui-checkbox-size
84
+ --tui-checkbox-gap
85
+ --tui-checkbox-label-color
79
86
  */
80
87
  /* @tui-tokens
81
88
  --tui-chip-bg
@@ -248,6 +255,8 @@
248
255
  --tui-segmented-item-fg
249
256
  --tui-segmented-item-bg-active
250
257
  --tui-segmented-item-fg-active
258
+ --tui-segmented-indicator
259
+ --tui-segmented-indicator-size
251
260
  */
252
261
  /* @tui-tokens
253
262
  --tui-switch-accent
@@ -332,6 +341,7 @@
332
341
  --tui-focus-ring-color: #2563eb;
333
342
  /* Font Weight */
334
343
  --tui-font-weight-medium: 500;
344
+ --tui-font-weight-semibold: 600;
335
345
  /* Border */
336
346
  --tui-border-width: 1px;
337
347
  /* Z-Index Layers */
@@ -652,6 +662,7 @@
652
662
  --tui-radius-sm: 4px;
653
663
  --tui-radius-md: 8px;
654
664
  --tui-radius-lg: 12px;
665
+ --tui-radius-full: 9999px;
655
666
  --tui-font-size-base: 16px;
656
667
  --tui-line: 1.5;
657
668
  --tui-typography-weight-normal: 400;
@@ -1493,29 +1504,73 @@
1493
1504
  :where(.tui-interface) .tui-card.is-style-elevated:hover {
1494
1505
  box-shadow: var(--_shadow-interact);
1495
1506
  }
1496
- :where(.tui-interface) input[type=checkbox]:not(.tui-inline-choice input):focus-visible {
1507
+ .tui-interface input[type=checkbox] {
1508
+ --_accent: var(--tui-checkbox-accent, var(--tui-input-accent, var(--tui-theme-primary-base)));
1509
+ --_border: var(--tui-checkbox-border, var(--tui-color-border));
1510
+ --_radius: var(--tui-checkbox-radius, var(--tui-radius-sm));
1511
+ --_bg: var(--tui-checkbox-bg, var(--tui-color-bg));
1512
+ appearance: none;
1513
+ margin: 0;
1514
+ display: inline-block;
1515
+ width: 1em;
1516
+ height: 1em;
1517
+ flex-shrink: 0;
1518
+ border: var(--tui-border-width) solid var(--_border);
1519
+ border-radius: var(--_radius);
1520
+ background-color: var(--_bg);
1521
+ background-size: 75%;
1522
+ background-position: center;
1523
+ background-repeat: no-repeat;
1524
+ cursor: pointer;
1525
+ transition-duration: var(--tui-motion-duration);
1526
+ transition-timing-function: var(--tui-motion-timing);
1527
+ transition-property: background-color, border-color;
1528
+ }
1529
+ .tui-interface input[type=checkbox]:checked {
1530
+ background-color: var(--_accent);
1531
+ border-color: var(--_accent);
1532
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
1533
+ }
1534
+ .tui-interface input[type=checkbox]:indeterminate {
1535
+ background-color: var(--_accent);
1536
+ border-color: var(--_accent);
1537
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.5' stroke-linecap='round'%3E%3Cpath d='M6 12h12'/%3E%3C/svg%3E");
1538
+ }
1539
+ .tui-interface input[type=checkbox][aria-invalid=true] {
1540
+ --_border: var(--tui-checkbox-border-invalid, var(--tui-theme-danger-base));
1541
+ }
1542
+ .tui-interface input[type=checkbox]:focus-visible {
1497
1543
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
1498
1544
  outline-offset: var(--tui-focus-ring-offset);
1499
1545
  }
1500
- :where(.tui-interface) input[type=checkbox]:not(.tui-inline-choice input):checked {
1501
- accent-color: var(--tui-input-accent, var(--tui-theme-primary-base));
1546
+ .tui-interface input[type=checkbox]:disabled {
1547
+ cursor: not-allowed;
1502
1548
  }
1503
- :where(.tui-interface) input[type=checkbox]:not(.tui-inline-choice input):disabled {
1549
+ .tui-interface input[type=checkbox]:disabled {
1504
1550
  opacity: var(--tui-opacity-disabled);
1505
- cursor: not-allowed;
1506
1551
  }
1507
- :where(.tui-interface) input[type=checkbox][data-indeterminate=true] {
1508
- accent-color: var(--tui-input-accent, var(--tui-theme-primary-base));
1552
+ .tui-interface .tui-inline-choice input[type=checkbox]:disabled {
1553
+ opacity: 1;
1554
+ }
1555
+ .tui-interface .tui-inline-choice:has(input[type=checkbox]) {
1556
+ gap: var(--tui-checkbox-gap, var(--tui-spacing-xs));
1557
+ }
1558
+ .tui-interface .tui-inline-choice:has(input[type=checkbox]) input[type=checkbox] {
1559
+ font-size: var(--tui-checkbox-size, 1.15em);
1560
+ flex: 0 0 1em;
1561
+ }
1562
+ .tui-interface .tui-inline-choice:has(input[type=checkbox]) > span {
1563
+ color: var(--tui-checkbox-label-color, inherit);
1509
1564
  }
1510
- :where(.tui-interface) .tui-inline-choice.is-disabled {
1565
+ .tui-interface .tui-inline-choice.is-disabled {
1511
1566
  opacity: var(--tui-opacity-disabled);
1512
1567
  cursor: not-allowed;
1513
1568
  }
1514
- :where(.tui-interface) .tui-inline-choice.is-disabled input {
1569
+ .tui-interface .tui-inline-choice.is-disabled input {
1515
1570
  cursor: not-allowed;
1516
1571
  }
1517
1572
  @media (forced-colors: active) {
1518
- :where(.tui-interface) input[type=checkbox] {
1573
+ .tui-interface input[type=checkbox] {
1519
1574
  forced-color-adjust: auto;
1520
1575
  }
1521
1576
  }
@@ -1863,9 +1918,6 @@
1863
1918
  .tui-interface .tui-combobox__input::placeholder {
1864
1919
  color: var(--tui-color-fg-muted);
1865
1920
  }
1866
- .tui-interface .tui-combobox__input:hover:not(:disabled) {
1867
- --_border: var(--tui-theme-secondary-soft);
1868
- }
1869
1921
  .tui-interface .tui-combobox__input:focus {
1870
1922
  --_border: var(--_border-focus);
1871
1923
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
@@ -1879,6 +1931,12 @@
1879
1931
  cursor: not-allowed;
1880
1932
  }
1881
1933
  .tui-interface .tui-combobox__clear {
1934
+ appearance: none;
1935
+ border: none;
1936
+ background: none;
1937
+ padding: 0;
1938
+ font: inherit;
1939
+ margin: 0;
1882
1940
  position: absolute;
1883
1941
  right: calc(var(--tui-spacing-sm) + 1.25em + var(--tui-spacing-xxs));
1884
1942
  display: flex;
@@ -1895,6 +1953,13 @@
1895
1953
  color: var(--tui-color-fg);
1896
1954
  background-color: var(--tui-theme-secondary-subtlest);
1897
1955
  }
1956
+ .tui-interface .tui-combobox__clear:focus-visible {
1957
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
1958
+ outline-offset: var(--tui-focus-ring-offset);
1959
+ }
1960
+ :disabled ~ .tui-interface .tui-combobox__clear {
1961
+ pointer-events: none;
1962
+ }
1898
1963
  .tui-interface .tui-combobox__icon {
1899
1964
  position: absolute;
1900
1965
  right: var(--tui-spacing-sm);
@@ -1989,11 +2054,25 @@
1989
2054
  padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
1990
2055
  padding-bottom: var(--tui-spacing-xxs);
1991
2056
  font-size: var(--tui-typography-size-xs);
1992
- font-weight: 600;
2057
+ font-weight: var(--tui-font-weight-semibold, 600);
1993
2058
  color: var(--tui-color-fg-muted);
1994
2059
  text-transform: uppercase;
1995
2060
  letter-spacing: 0.05em;
1996
2061
  }
2062
+ @media (prefers-reduced-motion: reduce) {
2063
+ .tui-interface .tui-combobox__input {
2064
+ transition-duration: 0ms;
2065
+ }
2066
+ .tui-interface .tui-combobox__icon {
2067
+ transition-duration: 0ms;
2068
+ }
2069
+ .tui-interface .tui-combobox__clear {
2070
+ transition-duration: 0ms;
2071
+ }
2072
+ :where(.tui-interface) .tui-combobox__content {
2073
+ animation-duration: 0ms;
2074
+ }
2075
+ }
1997
2076
  @media (forced-colors: active) {
1998
2077
  .tui-interface .tui-combobox__input {
1999
2078
  background-color: Canvas;
@@ -2013,6 +2092,12 @@
2013
2092
  color: HighlightText;
2014
2093
  forced-color-adjust: none;
2015
2094
  }
2095
+ .tui-interface .tui-combobox__clear {
2096
+ color: CanvasText;
2097
+ }
2098
+ .tui-interface .tui-combobox__clear:focus-visible {
2099
+ outline-color: Highlight;
2100
+ }
2016
2101
  }
2017
2102
  :where(.tui-interface) .tui-content-indicator {
2018
2103
  --_bg: var(--tui-content-indicator-bg, transparent);
@@ -2276,9 +2361,6 @@
2276
2361
  transition-timing-function: var(--tui-motion-timing);
2277
2362
  transition-property: border-color, background-color;
2278
2363
  }
2279
- .tui-interface .tui-multiselect__trigger:hover:not([data-disabled]) {
2280
- --_border: var(--tui-theme-secondary-soft);
2281
- }
2282
2364
  .tui-interface .tui-multiselect__trigger:focus-visible {
2283
2365
  --_border: var(--_border-focus);
2284
2366
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
@@ -2287,7 +2369,7 @@
2287
2369
  .tui-interface .tui-multiselect__trigger[data-state=open] {
2288
2370
  --_border: var(--_border-focus);
2289
2371
  }
2290
- .tui-interface .tui-multiselect__trigger[data-disabled] {
2372
+ .tui-interface .tui-multiselect__trigger[data-disabled], .tui-interface .tui-multiselect__trigger[disabled] {
2291
2373
  opacity: var(--tui-opacity-disabled);
2292
2374
  cursor: not-allowed;
2293
2375
  }
@@ -2466,11 +2548,28 @@
2466
2548
  padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2467
2549
  padding-bottom: var(--tui-spacing-xxs);
2468
2550
  font-size: var(--tui-typography-size-xs);
2469
- font-weight: 600;
2551
+ font-weight: var(--tui-font-weight-semibold, 600);
2470
2552
  color: var(--tui-color-fg-muted);
2471
2553
  text-transform: uppercase;
2472
2554
  letter-spacing: 0.05em;
2473
2555
  }
2556
+ @media (prefers-reduced-motion: reduce) {
2557
+ .tui-interface .tui-multiselect__trigger {
2558
+ transition-duration: 0ms;
2559
+ }
2560
+ .tui-interface .tui-multiselect__clear {
2561
+ transition-duration: 0ms;
2562
+ }
2563
+ .tui-interface .tui-multiselect__icon {
2564
+ transition-duration: 0ms;
2565
+ }
2566
+ :where(.tui-interface) .tui-multiselect__content {
2567
+ animation-duration: 0ms;
2568
+ }
2569
+ :where(.tui-interface) .tui-multiselect__checkbox {
2570
+ transition-duration: 0ms;
2571
+ }
2572
+ }
2474
2573
  @media (forced-colors: active) {
2475
2574
  .tui-interface .tui-multiselect__trigger {
2476
2575
  background-color: Canvas;
@@ -2501,6 +2600,11 @@
2501
2600
  border: 1px solid CanvasText;
2502
2601
  }
2503
2602
  }
2603
+ .tui-interface .tui-select__trigger-wrap {
2604
+ position: relative;
2605
+ display: inline-flex;
2606
+ width: 100%;
2607
+ }
2504
2608
  .tui-interface .tui-select__trigger {
2505
2609
  --_bg: var(--tui-select-trigger-bg, var(--tui-color-bg-surface));
2506
2610
  --_fg: var(--tui-select-trigger-fg, var(--tui-color-fg));
@@ -2545,9 +2649,6 @@
2545
2649
  transition-timing-function: var(--tui-motion-timing);
2546
2650
  transition-property: border-color, background-color;
2547
2651
  }
2548
- .tui-interface .tui-select__trigger:hover:not([data-disabled]) {
2549
- --_border: var(--tui-theme-secondary-soft);
2550
- }
2551
2652
  .tui-interface .tui-select__trigger:focus-visible {
2552
2653
  --_border: var(--_border-focus);
2553
2654
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
@@ -2556,7 +2657,7 @@
2556
2657
  .tui-interface .tui-select__trigger[data-state=open] {
2557
2658
  --_border: var(--_border-focus);
2558
2659
  }
2559
- .tui-interface .tui-select__trigger[data-disabled] {
2660
+ .tui-interface .tui-select__trigger[data-disabled], .tui-interface .tui-select__trigger[disabled] {
2560
2661
  opacity: var(--tui-opacity-disabled);
2561
2662
  cursor: not-allowed;
2562
2663
  }
@@ -2579,10 +2680,19 @@
2579
2680
  transform: rotate(180deg);
2580
2681
  }
2581
2682
  .tui-interface .tui-select__clear {
2683
+ appearance: none;
2684
+ border: none;
2685
+ background: none;
2686
+ padding: 0;
2687
+ font: inherit;
2688
+ margin: 0;
2689
+ position: absolute;
2690
+ top: 50%;
2691
+ right: calc(var(--tui-spacing-sm) + 1em + var(--tui-spacing-xs));
2692
+ transform: translateY(-50%);
2582
2693
  display: flex;
2583
2694
  align-items: center;
2584
2695
  justify-content: center;
2585
- flex-shrink: 0;
2586
2696
  width: 1.25em;
2587
2697
  height: 1.25em;
2588
2698
  border-radius: var(--tui-radius-sm);
@@ -2594,7 +2704,11 @@
2594
2704
  color: var(--tui-color-fg);
2595
2705
  background-color: var(--tui-theme-secondary-subtlest);
2596
2706
  }
2597
- [data-disabled] .tui-interface .tui-select__clear {
2707
+ .tui-interface .tui-select__clear:focus-visible {
2708
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
2709
+ outline-offset: var(--tui-focus-ring-offset);
2710
+ }
2711
+ [data-disabled] .tui-interface .tui-select__clear, [disabled] .tui-interface .tui-select__clear {
2598
2712
  pointer-events: none;
2599
2713
  }
2600
2714
  :where(.tui-interface) .tui-select__content {
@@ -2681,11 +2795,25 @@
2681
2795
  padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
2682
2796
  padding-bottom: var(--tui-spacing-xxs);
2683
2797
  font-size: var(--tui-typography-size-xs);
2684
- font-weight: 600;
2798
+ font-weight: var(--tui-font-weight-semibold, 600);
2685
2799
  color: var(--tui-color-fg-muted);
2686
2800
  text-transform: uppercase;
2687
2801
  letter-spacing: 0.05em;
2688
2802
  }
2803
+ @media (prefers-reduced-motion: reduce) {
2804
+ .tui-interface .tui-select__trigger {
2805
+ transition-duration: 0ms;
2806
+ }
2807
+ .tui-interface .tui-select__icon {
2808
+ transition-duration: 0ms;
2809
+ }
2810
+ .tui-interface .tui-select__clear {
2811
+ transition-duration: 0ms;
2812
+ }
2813
+ :where(.tui-interface) .tui-select__content {
2814
+ animation-duration: 0ms;
2815
+ }
2816
+ }
2689
2817
  @media (forced-colors: active) {
2690
2818
  .tui-interface .tui-select__trigger {
2691
2819
  background-color: Canvas;
@@ -2705,6 +2833,12 @@
2705
2833
  color: HighlightText;
2706
2834
  forced-color-adjust: none;
2707
2835
  }
2836
+ .tui-interface .tui-select__clear {
2837
+ color: CanvasText;
2838
+ }
2839
+ .tui-interface .tui-select__clear:focus-visible {
2840
+ outline-color: Highlight;
2841
+ }
2708
2842
  }
2709
2843
  :where(.tui-interface) :is(label, .tui-label) {
2710
2844
  color: var(--tui-color-fg);
@@ -2730,7 +2864,7 @@
2730
2864
  textarea,
2731
2865
  select) {
2732
2866
  --_bg: var(--tui-input-bg, var(--tui-color-bg-surface));
2733
- --_fg: var(--tui-input-fg, var(--tui-color-fg-muted));
2867
+ --_fg: var(--tui-input-fg, var(--tui-color-fg));
2734
2868
  --_border: var(--tui-input-border, var(--tui-color-border));
2735
2869
  --_border-focus: var(--tui-input-border-focus, var(--tui-theme-primary-base));
2736
2870
  --_border-invalid: var(--tui-input-border-invalid, var(--tui-theme-danger-base));
@@ -2831,6 +2965,27 @@
2831
2965
  input[type=datetime-local],
2832
2966
  input[type=color],
2833
2967
  textarea,
2968
+ select)::placeholder {
2969
+ color: var(--tui-input-fg-placeholder, var(--tui-color-fg-muted));
2970
+ opacity: 1;
2971
+ }
2972
+ :where(.tui-interface) :is(.tui-input,
2973
+ input[type=text],
2974
+ input[type=email],
2975
+ input[type=url],
2976
+ input[type=password],
2977
+ input[type=search],
2978
+ input[type=number],
2979
+ input[type=tel],
2980
+ input[type=range],
2981
+ input[type=date],
2982
+ input[type=month],
2983
+ input[type=week],
2984
+ input[type=time],
2985
+ input[type=datetime],
2986
+ input[type=datetime-local],
2987
+ input[type=color],
2988
+ textarea,
2834
2989
  select):focus-visible {
2835
2990
  --_border: var(--_border-focus);
2836
2991
  outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
@@ -2853,6 +3008,27 @@
2853
3008
  input[type=datetime-local],
2854
3009
  input[type=color],
2855
3010
  textarea,
3011
+ select)[readonly] {
3012
+ background-color: var(--tui-input-bg-readonly, var(--tui-color-bg));
3013
+ cursor: default;
3014
+ }
3015
+ :where(.tui-interface) :is(.tui-input,
3016
+ input[type=text],
3017
+ input[type=email],
3018
+ input[type=url],
3019
+ input[type=password],
3020
+ input[type=search],
3021
+ input[type=number],
3022
+ input[type=tel],
3023
+ input[type=range],
3024
+ input[type=date],
3025
+ input[type=month],
3026
+ input[type=week],
3027
+ input[type=time],
3028
+ input[type=datetime],
3029
+ input[type=datetime-local],
3030
+ input[type=color],
3031
+ textarea,
2856
3032
  select)[disabled] {
2857
3033
  opacity: var(--tui-opacity-disabled);
2858
3034
  cursor: not-allowed;
@@ -2902,21 +3078,24 @@
2902
3078
  background-size: 1em;
2903
3079
  }
2904
3080
  :where(.tui-interface) .tui-inline-choice {
2905
- --_accent: var(--tui-input-accent, var(--tui-theme-primary-base));
2906
3081
  display: flex;
2907
3082
  align-items: center;
2908
3083
  gap: var(--tui-spacing-xs);
3084
+ cursor: pointer;
2909
3085
  }
2910
- :where(.tui-interface) .tui-inline-choice input[type=radio],
2911
- :where(.tui-interface) .tui-inline-choice input[type=checkbox] {
3086
+ :where(.tui-interface) .tui-inline-choice input[type=radio] {
3087
+ --_accent: var(--tui-input-accent, var(--tui-theme-primary-base));
2912
3088
  font-size: 1.15em;
2913
3089
  width: 1em;
2914
3090
  height: 1em;
2915
3091
  flex: 0 0 1em;
2916
3092
  margin: 0;
2917
3093
  }
2918
- :where(.tui-interface) .tui-inline-choice input[type=radio]:checked,
2919
- :where(.tui-interface) .tui-inline-choice input[type=checkbox]:checked {
3094
+ :where(.tui-interface) .tui-inline-choice input[type=radio]:focus-visible {
3095
+ outline: var(--tui-focus-ring-width) solid var(--tui-focus-ring-color);
3096
+ outline-offset: var(--tui-focus-ring-offset);
3097
+ }
3098
+ :where(.tui-interface) .tui-inline-choice input[type=radio]:checked {
2920
3099
  accent-color: var(--_accent);
2921
3100
  }
2922
3101
  :where(.tui-interface) .tui-inline-choice label {
@@ -2979,7 +3158,7 @@
2979
3158
  }
2980
3159
  :where(.tui-interface) input[type=file] {
2981
3160
  --_bg: var(--tui-input-bg, var(--tui-color-bg-surface));
2982
- --_fg: var(--tui-input-fg, var(--tui-color-fg-muted));
3161
+ --_fg: var(--tui-input-fg, var(--tui-color-fg));
2983
3162
  --_border: var(--tui-input-border, var(--tui-color-border));
2984
3163
  --_radius: var(--tui-input-radius, var(--tui-radius-md));
2985
3164
  font-size: var(--tui-typography-size-sm);
@@ -3088,7 +3267,7 @@
3088
3267
  --_size: var(--tui-control-height-lg, 3rem);
3089
3268
  }
3090
3269
  .tui-interface .tui-icon-button.is-shape-circle {
3091
- border-radius: 50%;
3270
+ border-radius: var(--tui-radius-full);
3092
3271
  }
3093
3272
  .tui-interface .tui-icon-button.is-theme-primary {
3094
3273
  --_fg: var(--tui-icon-button-fg, var(--tui-theme-primary-base));
@@ -3269,7 +3448,7 @@
3269
3448
  }
3270
3449
  .tui-modal__dialog .tui-modal__body {
3271
3450
  flex: 1 1 auto;
3272
- min-height: 4.5rem;
3451
+ min-height: var(--_min-body);
3273
3452
  display: flex;
3274
3453
  flex-direction: column;
3275
3454
  }
@@ -3337,12 +3516,14 @@
3337
3516
  }
3338
3517
  .tui-modal__dialog.is-size-sm {
3339
3518
  --_max: var(--tui-modal-max, 480px);
3519
+ --_min-body: 2rem;
3340
3520
  }
3341
3521
  .tui-modal__dialog.is-size-md {
3342
3522
  --_max: var(--tui-modal-max, 720px);
3343
3523
  }
3344
3524
  .tui-modal__dialog.is-size-lg {
3345
3525
  --_max: var(--tui-modal-max, 960px);
3526
+ --_min-body: 10rem;
3346
3527
  }
3347
3528
  .tui-modal__dialog.is-sticky-head .tui-modal__head {
3348
3529
  position: sticky;
@@ -3581,6 +3762,10 @@
3581
3762
  .tui-interface .tui-move-handle.is-handle:active {
3582
3763
  cursor: grabbing;
3583
3764
  }
3765
+ .tui-interface .tui-move-handle.is-handle.is-size-sm {
3766
+ min-width: 24px;
3767
+ min-height: 24px;
3768
+ }
3584
3769
  @media (forced-colors: active) {
3585
3770
  .tui-move-handle__up,
3586
3771
  .tui-move-handle__down,
@@ -4402,22 +4587,28 @@
4402
4587
  --_gap: var(--tui-segmented-gap, var(--tui-spacing-xs));
4403
4588
  --_padding: var(--tui-segmented-padding, var(--tui-spacing-xs));
4404
4589
  --_radius: var(--tui-segmented-radius, var(--tui-radius-lg));
4405
- --_bg: var(--tui-segmented-bg, var(--tui-color-bg-surface));
4590
+ --_bg: var(--tui-segmented-bg, var(--tui-color-bg-muted));
4406
4591
  --_border: var(--tui-segmented-border, transparent);
4407
4592
  display: inline-flex;
4408
- flex-wrap: wrap;
4593
+ flex-wrap: nowrap;
4409
4594
  gap: var(--_gap);
4410
4595
  padding: var(--_padding);
4411
4596
  background: var(--_bg);
4412
4597
  border: var(--tui-border-width) solid var(--_border);
4413
4598
  border-radius: var(--_radius);
4414
4599
  }
4600
+ :where(.tui-interface) .tui-segmented.is-wrap {
4601
+ flex-wrap: wrap;
4602
+ }
4415
4603
  :where(.tui-interface) .tui-segmented.is-vertical {
4416
4604
  flex-direction: column;
4417
4605
  }
4418
4606
  :where(.tui-interface) .tui-segmented[aria-disabled=true] {
4419
4607
  opacity: var(--tui-opacity-disabled);
4420
4608
  }
4609
+ .tui-interface .tui-segmented.is-variant-pill .tui-segmented__item {
4610
+ --_item-fg: var(--tui-segmented-item-fg, var(--tui-color-fg));
4611
+ }
4421
4612
  :where(.tui-interface) .tui-segmented.is-variant-outline {
4422
4613
  --_bg: transparent;
4423
4614
  --_border: var(--tui-segmented-border, var(--tui-color-border));
@@ -4427,6 +4618,7 @@
4427
4618
  --_padding: 0;
4428
4619
  --_gap: var(--tui-segmented-gap, var(--tui-spacing-md));
4429
4620
  border-radius: 0;
4621
+ border-block-end: var(--tui-border-width) solid var(--tui-color-border);
4430
4622
  }
4431
4623
  .tui-interface .tui-segmented__item {
4432
4624
  --_item-padding: var(--tui-segmented-item-padding, var(--tui-spacing-sm) var(--tui-spacing-md));
@@ -4447,9 +4639,9 @@
4447
4639
  background: var(--_item-bg);
4448
4640
  color: var(--_item-fg);
4449
4641
  font: inherit;
4450
- font-size: var(--tui-font-size-sm);
4642
+ font-size: var(--tui-typography-size-sm);
4451
4643
  font-weight: var(--tui-font-weight-medium, 500);
4452
- line-height: var(--tui-line-height-tight);
4644
+ line-height: var(--tui-line-height-tight, 1.25);
4453
4645
  white-space: nowrap;
4454
4646
  cursor: pointer;
4455
4647
  transition-property: background-color, color;
@@ -4474,44 +4666,45 @@
4474
4666
  }
4475
4667
  .tui-interface .tui-segmented.is-variant-outline .tui-segmented__item {
4476
4668
  --_item-radius: var(--tui-segmented-item-radius, var(--tui-radius-full));
4477
- border: var(--tui-border-width) solid var(--tui-color-border);
4669
+ --_item-border: var(--tui-segmented-border, var(--tui-color-border));
4670
+ --_item-bg-active: var(--tui-segmented-item-bg-active, var(--tui-theme-primary-subtlest));
4671
+ --_item-fg-active: var(--tui-segmented-item-fg-active, var(--tui-theme-primary-strong));
4672
+ border: var(--tui-border-width) solid var(--_item-border);
4478
4673
  }
4479
4674
  .tui-interface .tui-segmented.is-variant-outline .tui-segmented__item[aria-checked=true] {
4480
4675
  border-color: var(--tui-theme-primary-base);
4481
- background: var(--tui-theme-primary-subtlest);
4482
- color: var(--tui-theme-primary-strong);
4676
+ background: var(--_item-bg-active);
4677
+ color: var(--_item-fg-active);
4483
4678
  }
4484
4679
  .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item {
4485
4680
  --_item-radius: 0;
4486
4681
  --_item-fg: var(--tui-segmented-item-fg, var(--tui-color-fg));
4487
4682
  --_indicator: var(--tui-segmented-indicator, var(--tui-theme-primary-base));
4488
4683
  --_indicator-size: var(--tui-segmented-indicator-size, 2px);
4489
- position: relative;
4490
- padding-bottom: calc(var(--tui-spacing-sm) + var(--_indicator-size));
4684
+ margin-block-end: calc(var(--tui-border-width) * -1);
4685
+ border-bottom: var(--_indicator-size) solid transparent;
4491
4686
  }
4492
- .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item::after {
4493
- content: "";
4494
- position: absolute;
4495
- left: 0;
4496
- right: 0;
4497
- bottom: 0;
4498
- height: var(--_indicator-size);
4499
- background: transparent;
4500
- transition: background-color var(--tui-motion-duration) var(--tui-motion-timing);
4687
+ .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item:hover:not([aria-disabled=true]):not([aria-checked=true]) {
4688
+ color: var(--tui-color-fg);
4501
4689
  }
4502
4690
  .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item[aria-checked=true] {
4503
4691
  background: transparent;
4504
4692
  color: var(--tui-color-fg);
4505
- font-weight: var(--tui-font-weight-semibold, 600);
4693
+ border-bottom-color: var(--_indicator);
4506
4694
  }
4507
- .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item[aria-checked=true]::after {
4508
- background: var(--_indicator);
4695
+ .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item:focus-visible {
4696
+ outline-offset: calc(var(--tui-focus-ring-offset) * -1);
4509
4697
  }
4510
4698
  .tui-interface .tui-segmented.is-size-sm .tui-segmented__item {
4511
4699
  --_item-padding: var(--tui-spacing-xs) var(--tui-spacing-sm);
4512
- font-size: var(--tui-font-size-xs);
4700
+ font-size: var(--tui-typography-size-xs);
4513
4701
  min-height: var(--tui-control-height-sm);
4514
4702
  }
4703
+ .tui-interface .tui-segmented.is-size-lg .tui-segmented__item {
4704
+ --_item-padding: var(--tui-spacing-sm) var(--tui-spacing-lg);
4705
+ font-size: var(--tui-typography-size-md);
4706
+ min-height: var(--tui-control-height-lg);
4707
+ }
4515
4708
  :where(.tui-interface) .tui-segmented__item-icon {
4516
4709
  display: inline-flex;
4517
4710
  align-items: center;
@@ -4535,6 +4728,21 @@
4535
4728
  .tui-interface .tui-segmented__item:focus-visible {
4536
4729
  outline: 2px solid CanvasText;
4537
4730
  }
4731
+ .tui-interface .tui-segmented.is-variant-underline .tui-segmented__item[aria-checked=true] {
4732
+ background: transparent;
4733
+ color: CanvasText;
4734
+ border-bottom-color: Highlight;
4735
+ border-bottom-width: 3px;
4736
+ }
4737
+ .tui-interface .tui-segmented.is-variant-outline .tui-segmented__item {
4738
+ border-color: CanvasText;
4739
+ }
4740
+ .tui-interface .tui-segmented.is-variant-outline .tui-segmented__item[aria-checked=true] {
4741
+ background: transparent;
4742
+ color: CanvasText;
4743
+ border-color: Highlight;
4744
+ border-width: 2px;
4745
+ }
4538
4746
  }
4539
4747
  :where(.tui-interface) .tui-switch {
4540
4748
  display: inline-flex;
@@ -5172,7 +5380,6 @@
5172
5380
  }
5173
5381
  :where(.tui-interface) .tui-textarea {
5174
5382
  min-height: calc(4em + 2 * var(--_py));
5175
- padding-inline: 0.5em;
5176
5383
  font-family: inherit;
5177
5384
  line-height: 1.4;
5178
5385
  }