tyrell-components 1.0.0-RC14 → 1.0.0-RC15

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 (113) hide show
  1. package/README.md +9 -1
  2. package/css/tyrell-theme.css +25 -2
  3. package/css/tyrell.css +4 -0
  4. package/dist/tyrell-colors-static.css +1 -316
  5. package/dist/tyrell-theme.css +1 -1443
  6. package/dist/tyrell.css +1 -1390
  7. package/dist/tyrell.js +1 -1
  8. package/lib/base/ty-component.js +196 -196
  9. package/lib/components/button.d.ts +1 -1
  10. package/lib/components/button.js +261 -259
  11. package/lib/components/calendar-month.d.ts +2 -2
  12. package/lib/components/calendar-month.js +439 -416
  13. package/lib/components/calendar-navigation.js +238 -238
  14. package/lib/components/calendar.d.ts +5 -3
  15. package/lib/components/calendar.js +611 -602
  16. package/lib/components/checkbox.d.ts +1 -1
  17. package/lib/components/checkbox.js +273 -272
  18. package/lib/components/copy.d.ts +1 -1
  19. package/lib/components/copy.js +280 -278
  20. package/lib/components/date-picker.d.ts +8 -1
  21. package/lib/components/date-picker.js +1128 -1108
  22. package/lib/components/file-upload.js +404 -404
  23. package/lib/components/icon.js +141 -141
  24. package/lib/components/input.d.ts +1 -1
  25. package/lib/components/input.js +593 -596
  26. package/lib/components/modal.js +319 -319
  27. package/lib/components/option.js +167 -167
  28. package/lib/components/popup.js +233 -233
  29. package/lib/components/radio.d.ts +2 -2
  30. package/lib/components/radio.js +407 -406
  31. package/lib/components/resize-observer.js +67 -67
  32. package/lib/components/scroll-container.js +292 -294
  33. package/lib/components/select.d.ts +71 -12
  34. package/lib/components/select.js +1605 -1529
  35. package/lib/components/selected-tags.d.ts +1 -1
  36. package/lib/components/selected-tags.js +188 -182
  37. package/lib/components/step.js +62 -62
  38. package/lib/components/switch.d.ts +1 -1
  39. package/lib/components/switch.js +214 -213
  40. package/lib/components/tab.js +62 -62
  41. package/lib/components/tabs.d.ts +1 -0
  42. package/lib/components/tabs.js +523 -492
  43. package/lib/components/tag.d.ts +1 -1
  44. package/lib/components/tag.js +236 -235
  45. package/lib/components/textarea.d.ts +1 -1
  46. package/lib/components/textarea.js +457 -456
  47. package/lib/components/tooltip.js +283 -283
  48. package/lib/components/wizard.js +384 -384
  49. package/lib/icons/heroicons/micro.js +392 -392
  50. package/lib/icons/heroicons/mini.js +382 -382
  51. package/lib/icons/heroicons/outline.js +337 -337
  52. package/lib/icons/heroicons/solid.js +407 -407
  53. package/lib/icons/lucide.js +22843 -22843
  54. package/lib/icons/material/filled.js +9653 -9653
  55. package/lib/icons/material/outlined.js +10271 -10271
  56. package/lib/icons/material/round.js +10495 -10495
  57. package/lib/icons/material/sharp.js +9905 -9905
  58. package/lib/icons/material/two-tone.js +12792 -12792
  59. package/lib/index.js +21 -21
  60. package/lib/styles/button.js +200 -302
  61. package/lib/styles/calendar-month.js +123 -183
  62. package/lib/styles/calendar-navigation.d.ts +1 -1
  63. package/lib/styles/calendar-navigation.js +64 -79
  64. package/lib/styles/calendar.d.ts +1 -1
  65. package/lib/styles/calendar.js +9 -9
  66. package/lib/styles/checkbox.js +45 -72
  67. package/lib/styles/copy.js +67 -91
  68. package/lib/styles/custom-scrollbar.js +80 -100
  69. package/lib/styles/date-picker.js +261 -331
  70. package/lib/styles/field-size.d.ts +6 -0
  71. package/lib/styles/field-size.js +91 -0
  72. package/lib/styles/file-upload.js +139 -169
  73. package/lib/styles/icon.js +92 -156
  74. package/lib/styles/input.js +125 -241
  75. package/lib/styles/modal.js +67 -102
  76. package/lib/styles/option.d.ts +1 -1
  77. package/lib/styles/option.js +47 -67
  78. package/lib/styles/popup.js +34 -65
  79. package/lib/styles/radio.js +69 -96
  80. package/lib/styles/resize-observer.js +2 -5
  81. package/lib/styles/scroll-container.js +100 -130
  82. package/lib/styles/select-base.js +596 -773
  83. package/lib/styles/select.js +140 -228
  84. package/lib/styles/step.js +22 -29
  85. package/lib/styles/switch.js +34 -55
  86. package/lib/styles/tab.d.ts +1 -1
  87. package/lib/styles/tab.js +22 -29
  88. package/lib/styles/tabs.d.ts +1 -1
  89. package/lib/styles/tabs.js +186 -180
  90. package/lib/styles/tag.js +135 -188
  91. package/lib/styles/textarea.d.ts +1 -1
  92. package/lib/styles/textarea.js +205 -271
  93. package/lib/styles/tooltip.js +3 -3
  94. package/lib/styles/wizard.js +170 -226
  95. package/lib/types/common.d.ts +2 -0
  96. package/lib/types/common.js +6 -5
  97. package/lib/utils/calendar-utils.js +100 -100
  98. package/lib/utils/custom-scrollbar.js +272 -272
  99. package/lib/utils/flavor-sheet.js +14 -14
  100. package/lib/utils/icon-registry.js +127 -127
  101. package/lib/utils/loader-registry.js +3 -3
  102. package/lib/utils/locale.js +34 -34
  103. package/lib/utils/mobile.js +1 -1
  104. package/lib/utils/number-format.js +54 -54
  105. package/lib/utils/positioning.js +212 -212
  106. package/lib/utils/property-capture.js +36 -36
  107. package/lib/utils/property-manager.js +125 -125
  108. package/lib/utils/resize-observer.js +23 -23
  109. package/lib/utils/scroll-lock.js +57 -57
  110. package/lib/utils/styles.js +17 -17
  111. package/lib/version.d.ts +1 -1
  112. package/lib/version.js +1 -1
  113. package/package.json +4 -4
@@ -1,9 +1,9 @@
1
1
  import { FLAVORS } from "../types/common.js";
2
2
  const checkboxFlavor = (f, fb) => {
3
- const tok = (s) => fb
4
- ? `var(--ty-color-${f}${s}, var(--ty-color-${fb}${s}))`
5
- : `var(--ty-color-${f}${s})`;
6
- return `
3
+ const tok = (s) => fb
4
+ ? `var(--ty-color-${f}${s}, var(--ty-color-${fb}${s}))`
5
+ : `var(--ty-color-${f}${s})`;
6
+ return `
7
7
  :host([flavor="${f}"]) { --checkbox-color: ${tok("")}; --checkbox-color-off: ${tok("-soft")}; --checkbox-ring: color-mix(in oklab, ${tok("")} 25%, transparent); }
8
8
  :host([flavor="${f}+"]) { --checkbox-color: ${tok("-strong")}; --checkbox-color-off: ${tok("-soft")}; --checkbox-ring: color-mix(in oklab, ${tok("-strong")} 25%, transparent); }
9
9
  :host([flavor="${f}-"]) { --checkbox-color: ${tok("-soft")}; --checkbox-color-off: ${tok("-faint")}; --checkbox-ring: color-mix(in oklab, ${tok("-soft")} 25%, transparent); }
@@ -12,103 +12,76 @@ const checkboxFlavor = (f, fb) => {
12
12
  export const checkboxCustomFlavorCss = (base) => checkboxFlavor(base, "neutral");
13
13
  export const checkboxStyles = `
14
14
  :host {
15
- display: inline-flex;
16
- width: auto;
17
- vertical-align: middle;
15
+ display: inline-flex;
16
+ width: auto;
17
+ vertical-align: middle;
18
18
  }
19
-
20
19
  .checkbox-container {
21
- display: inline-flex;
22
- align-items: center;
23
- outline: none;
24
- transition: var(--ty-local-transition, all 0.15s ease-in-out);
25
- user-select: none;
26
- cursor: pointer;
27
- border-radius: 6px;
28
- gap: var(--ty-spacing-1);
29
- /* Default (no flavor attribute) is neutral — defaults don't reflect to the
30
- host attribute, so the fallbacks here carry the default look. */
31
- color: var(--checkbox-color-off, var(--ty-color-neutral-soft));
32
- }
33
-
20
+ display: inline-flex;
21
+ align-items: center;
22
+ outline: none;
23
+ transition: var(--ty-local-transition, all 0.15s ease-in-out);
24
+ user-select: none;
25
+ cursor: pointer;
26
+ border-radius: 6px;
27
+ gap: var(--ty-spacing-1);
28
+ color: var(--checkbox-color-off, var(--ty-color-neutral-soft));
29
+ }
34
30
  .checkbox-container[aria-checked="true"] {
35
- color: var(--checkbox-color, var(--ty-color-neutral));
31
+ color: var(--checkbox-color, var(--ty-color-neutral));
36
32
  }
37
-
38
- /* Visible focus ring (keyboard) — .focused is toggled by the component.
39
- Matches the checked-state color so a danger checkbox gets a red ring,
40
- not a fixed primary one. */
41
33
  .checkbox-container.focused,
42
34
  .checkbox-container:focus-visible {
43
- box-shadow: 0 0 0 3px var(--checkbox-ring, color-mix(in oklab, var(--ty-color-primary) 25%, transparent));
35
+ box-shadow: 0 0 0 3px var(--checkbox-ring, color-mix(in oklab, var(--ty-color-primary) 25%, transparent));
44
36
  }
45
-
46
37
  .checkbox-icon {
47
- display: flex;
48
- align-items: center;
49
- justify-content: center;
50
- color: inherit;
51
- transition: var(--ty-local-transition, color 0.15s ease-in-out);
52
- pointer-events: none;
53
- /* Let the container handle the click */
54
- }
55
-
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ color: inherit;
42
+ transition: var(--ty-local-transition, color 0.15s ease-in-out);
43
+ pointer-events: none;
44
+ }
56
45
  .checkbox-container svg {
57
- width: 16px;
58
- height: 16px;
46
+ width: 16px;
47
+ height: 16px;
59
48
  }
60
-
61
49
  .checkbox-container.xs svg {
62
- width: 12px;
63
- height: 12px;
50
+ width: 12px;
51
+ height: 12px;
64
52
  }
65
-
66
53
  .checkbox-container.sm svg {
67
- width: 14px;
68
- height: 14px;
54
+ width: 14px;
55
+ height: 14px;
69
56
  }
70
-
71
57
  .checkbox-container.lg svg {
72
- width: 20px;
73
- height: 20px;
58
+ width: 20px;
59
+ height: 20px;
74
60
  }
75
-
76
61
  .checkbox-container.xl svg {
77
- width: 24px;
78
- height: 24px;
62
+ width: 24px;
63
+ height: 24px;
79
64
  }
80
-
81
- /* Semantic flavors set --checkbox-color[-off], consumed above */
82
65
  ${FLAVORS.map((f) => checkboxFlavor(f)).join("")}
83
-
84
- /* Clean tick: no box outline, just the checkmark. Inactive = faint tick. */
85
66
  .checkbox-container:not([aria-checked="true"]) {
86
- opacity: 0.35;
67
+ opacity: 0.35;
87
68
  }
88
-
89
- /* Indeterminate (dash) sits between unchecked and checked */
90
69
  .checkbox-container[aria-checked="mixed"] {
91
- opacity: 0.7;
70
+ opacity: 0.7;
92
71
  }
93
-
94
- /* Disabled must stay distinguishable from merely-unchecked: grayscale kills
95
- the flavor color, and disabled-unchecked drops below the unchecked 0.35. */
96
72
  .checkbox-container.disabled {
97
- pointer-events: none;
98
- cursor: not-allowed;
99
- opacity: 0.5;
100
- filter: grayscale(1);
73
+ pointer-events: none;
74
+ cursor: not-allowed;
75
+ opacity: 0.5;
76
+ filter: grayscale(1);
101
77
  }
102
-
103
78
  .checkbox-container.disabled:not([aria-checked="true"]) {
104
- opacity: 0.2;
79
+ opacity: 0.2;
105
80
  }
106
-
107
81
  .checkbox-container.error .checkbox-icon {
108
- color: var(--ty-color-danger);
82
+ color: var(--ty-color-danger);
109
83
  }
110
-
111
84
  .checkbox-container.error:focus {
112
- box-shadow: 0 0 0 3px color-mix(in oklab, var(--ty-color-danger) 15%, transparent);
85
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ty-color-danger) 15%, transparent);
113
86
  }
114
87
  `;
@@ -1,12 +1,12 @@
1
1
  import { FLAVORS } from "../types/common.js";
2
2
  const copyFlavor = (f, fb) => {
3
- const c = (s) => fb
4
- ? `var(--ty-color-${f}${s}, var(--ty-color-${fb}${s}))`
5
- : `var(--ty-color-${f}${s})`;
6
- const bg = (s) => fb
7
- ? `var(--ty-bg-${f}${s}, var(--ty-bg-${fb}${s}))`
8
- : `var(--ty-bg-${f}${s})`;
9
- return `
3
+ const c = (s) => fb
4
+ ? `var(--ty-color-${f}${s}, var(--ty-color-${fb}${s}))`
5
+ : `var(--ty-color-${f}${s})`;
6
+ const bg = (s) => fb
7
+ ? `var(--ty-bg-${f}${s}, var(--ty-bg-${fb}${s}))`
8
+ : `var(--ty-bg-${f}${s})`;
9
+ return `
10
10
  :host([flavor="${f}"]) { --copy-color: ${c("")}; --copy-color-hover: ${c("-strong")}; --copy-bg-hover: ${bg("-soft")}; }
11
11
  :host([flavor="${f}+"]) { --copy-color: ${c("-strong")}; --copy-color-hover: ${c("-strong")}; --copy-bg-hover: ${bg("-soft")}; }
12
12
  :host([flavor="${f}-"]) { --copy-color: ${c("-soft")}; --copy-color-hover: ${c("")}; --copy-bg-hover: ${bg("-soft")}; }
@@ -15,120 +15,96 @@ const copyFlavor = (f, fb) => {
15
15
  export const copyCustomFlavorCss = (base) => copyFlavor(base, "neutral");
16
16
  export const copyStyles = `
17
17
  .copy-field-value {
18
- flex: 1;
19
- overflow: hidden;
20
- text-overflow: ellipsis;
21
- white-space: nowrap;
22
- user-select: none;
23
- padding: 0;
24
- margin: 0;
25
- background: transparent;
26
- border: none;
27
- color: inherit;
28
- font-family: inherit;
29
- font-size: inherit;
30
- line-height: inherit;
31
- }
32
-
18
+ flex: 1;
19
+ font-size: var(--ty-field-font);
20
+ line-height: var(--ty-field-leading);
21
+ letter-spacing: var(--ty-field-tracking);
22
+ overflow: hidden;
23
+ text-overflow: ellipsis;
24
+ white-space: nowrap;
25
+ user-select: none;
26
+ padding: 0;
27
+ margin: 0;
28
+ background: transparent;
29
+ border: none;
30
+ color: inherit;
31
+ font-family: inherit;
32
+ }
33
33
  .copy-field-value.multiline {
34
- white-space: pre-wrap;
35
- word-break: break-word;
36
- max-height: 200px;
37
- overflow-y: auto;
34
+ white-space: pre-wrap;
35
+ word-break: break-word;
36
+ max-height: 200px;
37
+ overflow-y: auto;
38
38
  }
39
-
40
- /* Keep the copy button pinned to the top-right when content wraps to multiple lines */
41
39
  .input-wrapper:has(.copy-field-value.multiline) {
42
- align-items: flex-start;
43
- padding-top: 8px;
44
- padding-bottom: 8px;
40
+ align-items: flex-start;
41
+ padding-top: 8px;
42
+ padding-bottom: 8px;
45
43
  }
46
-
47
- /* Scroll long content instead of clipping with an ellipsis */
48
44
  .copy-field-value.horizontal-scroll {
49
- overflow-x: auto;
50
- overflow-y: hidden;
51
- text-overflow: clip;
52
- white-space: nowrap;
45
+ overflow-x: auto;
46
+ overflow-y: hidden;
47
+ text-overflow: clip;
48
+ white-space: nowrap;
53
49
  }
54
-
55
- /* Multiline + horizontal scroll (e.g. code blocks): preserve lines, scroll both axes */
56
50
  .copy-field-value.multiline.horizontal-scroll {
57
- white-space: pre;
58
- word-break: normal;
59
- overflow-y: auto;
51
+ white-space: pre;
52
+ word-break: normal;
53
+ overflow-y: auto;
60
54
  }
61
-
62
- /* Hide scrollbars on scrollable value - content still scrolls, chrome stays clean */
63
55
  .copy-field-value.multiline,
64
56
  .copy-field-value.horizontal-scroll {
65
- scrollbar-width: none; /* Firefox */
57
+ scrollbar-width: none;
66
58
  }
67
59
  .copy-field-value.multiline::-webkit-scrollbar,
68
60
  .copy-field-value.horizontal-scroll::-webkit-scrollbar {
69
- display: none; /* Chrome/Safari */
70
- }
71
-
72
- .copy-field-value {
73
- font-size: 0.8em;
61
+ display: none;
74
62
  }
75
-
76
- /* Hover state — flavor-soft background (primary by default) */
77
63
  .input-wrapper:not(.disabled):hover {
78
- background: var(--copy-bg-hover, var(--ty-bg-primary-soft));
79
- transition: var(--ty-local-transition, background 0.2s ease);
64
+ background: var(--copy-bg-hover, var(--ty-bg-primary-soft));
65
+ transition: var(--ty-local-transition, background 0.2s ease);
80
66
  }
81
-
82
67
  .copy-button {
83
- flex-shrink: 0;
84
- display: flex;
85
- align-items: center;
86
- justify-content: center;
87
- width: 32px;
88
- height: 32px;
89
- cursor: pointer;
90
- border: none;
91
- background: transparent;
92
- color: var(--copy-color, var(--ty-text-soft));
93
- transition: var(--ty-local-transition, color 0.2s ease, transform 0.2s ease);
94
- padding: 0;
95
- margin: 0;
96
- }
97
-
68
+ flex-shrink: 0;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: var(--ty-field-control);
73
+ height: var(--ty-field-control);
74
+ cursor: pointer;
75
+ border: none;
76
+ background: transparent;
77
+ color: var(--copy-color, var(--ty-text-soft));
78
+ transition: var(--ty-local-transition, color 0.2s ease, transform 0.2s ease);
79
+ padding: 0;
80
+ margin: 0;
81
+ }
98
82
  .copy-button:hover:not(.disabled) {
99
- color: var(--copy-color-hover, var(--ty-text));
100
- transform: scale(1.1);
83
+ color: var(--copy-color-hover, var(--ty-text));
84
+ transform: scale(1.1);
101
85
  }
102
-
103
86
  .copy-button.success {
104
- color: var(--ty-color-success);
105
- animation: copy-feedback 0.3s ease;
87
+ color: var(--ty-color-success);
88
+ animation: copy-feedback 0.3s ease;
106
89
  }
107
-
108
90
  .copy-button.error {
109
- color: var(--ty-color-danger);
110
- animation: copy-feedback 0.3s ease;
91
+ color: var(--ty-color-danger);
92
+ animation: copy-feedback 0.3s ease;
111
93
  }
112
-
113
94
  @keyframes copy-feedback {
114
- 0%, 100% { transform: scale(1); }
115
- 50% { transform: scale(1.2); }
95
+ 0%, 100% { transform: scale(1); }
96
+ 50% { transform: scale(1.2); }
116
97
  }
117
-
118
98
  .copy-button svg {
119
- width: 18px;
120
- height: 18px;
99
+ width: var(--ty-field-icon);
100
+ height: var(--ty-field-icon);
121
101
  }
122
-
123
102
  .input-wrapper.disabled .copy-button {
124
- cursor: not-allowed;
125
- opacity: 0.5;
103
+ cursor: not-allowed;
104
+ opacity: 0.5;
126
105
  }
127
-
128
106
  .input-wrapper.disabled {
129
- cursor: not-allowed;
107
+ cursor: not-allowed;
130
108
  }
131
-
132
- /* Semantic flavors set --copy-*, consumed above */
133
109
  ${FLAVORS.map((f) => copyFlavor(f)).join("")}
134
110
  `;
@@ -1,142 +1,122 @@
1
1
  export const customScrollbarStyles = `
2
- /* Vertical track */
3
2
  .ty-scrollbar-track-y {
4
- position: absolute;
5
- top: 0;
6
- right: 0;
7
- bottom: 0;
8
- width: var(--ty-scrollbar-width, 8px);
9
- z-index: 3;
10
- opacity: 0;
11
- pointer-events: none;
12
- transition: opacity 0.25s ease-out;
13
- cursor: pointer;
14
- }
15
-
3
+ position: absolute;
4
+ top: 0;
5
+ right: 0;
6
+ bottom: 0;
7
+ width: var(--ty-scrollbar-width, 8px);
8
+ z-index: 3;
9
+ opacity: 0;
10
+ pointer-events: none;
11
+ transition: opacity 0.25s ease-out;
12
+ cursor: pointer;
13
+ }
16
14
  .ty-scrollbar-track-y.has-overflow {
17
- pointer-events: auto;
15
+ pointer-events: auto;
18
16
  }
19
-
20
17
  .ty-scrollbar-track-y.has-overflow:hover,
21
18
  .ty-scrollbar-track-y.has-overflow.scrolling,
22
19
  .ty-scrollbar-track-y.dragging {
23
- opacity: 1;
20
+ opacity: 1;
24
21
  }
25
-
26
22
  .ty-scrollbar-track-y::before {
27
- content: '';
28
- position: absolute;
29
- inset: 0;
30
- background: var(--ty-scrollbar-track, transparent);
31
- border-radius: var(--ty-scrollbar-radius, 4px);
32
- opacity: 0;
33
- transition: opacity 0.15s ease-out;
34
- }
35
-
23
+ content: '';
24
+ position: absolute;
25
+ inset: 0;
26
+ background: var(--ty-scrollbar-track, transparent);
27
+ border-radius: var(--ty-scrollbar-radius, 4px);
28
+ opacity: 0;
29
+ transition: opacity 0.15s ease-out;
30
+ }
36
31
  .ty-scrollbar-track-y:hover::before,
37
32
  .ty-scrollbar-track-y.dragging::before {
38
- opacity: 1;
39
- background: var(--ty-scrollbar-track-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 8%, transparent));
33
+ opacity: 1;
34
+ background: var(--ty-scrollbar-track-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 8%, transparent));
40
35
  }
41
-
42
36
  .ty-scrollbar-thumb-y {
43
- position: absolute;
44
- right: 0;
45
- width: 100%;
46
- min-height: var(--ty-scrollbar-thumb-min-height, 30px);
47
- background: var(--ty-scrollbar-thumb, color-mix(in oklab, var(--ty-color-neutral-bold) 40%, transparent));
48
- border-radius: var(--ty-scrollbar-radius, 4px);
49
- transition: var(--ty-local-transition, background 0.15s ease-out);
50
- box-sizing: border-box;
51
- border: 1px solid transparent;
52
- }
53
-
37
+ position: absolute;
38
+ right: 0;
39
+ width: 100%;
40
+ min-height: var(--ty-scrollbar-thumb-min-height, 30px);
41
+ background: var(--ty-scrollbar-thumb, color-mix(in oklab, var(--ty-color-neutral-bold) 40%, transparent));
42
+ border-radius: var(--ty-scrollbar-radius, 4px);
43
+ transition: var(--ty-local-transition, background 0.15s ease-out);
44
+ box-sizing: border-box;
45
+ border: 1px solid transparent;
46
+ }
54
47
  .ty-scrollbar-thumb-y:hover,
55
48
  .ty-scrollbar-track-y.dragging .ty-scrollbar-thumb-y {
56
- background: var(--ty-scrollbar-thumb-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 55%, transparent));
49
+ background: var(--ty-scrollbar-thumb-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 55%, transparent));
57
50
  }
58
-
59
51
  .ty-scrollbar-thumb-y:active,
60
52
  .ty-scrollbar-track-y.dragging .ty-scrollbar-thumb-y {
61
- background: var(--ty-scrollbar-thumb-active, color-mix(in oklab, var(--ty-color-neutral-bold) 70%, transparent));
53
+ background: var(--ty-scrollbar-thumb-active, color-mix(in oklab, var(--ty-color-neutral-bold) 70%, transparent));
62
54
  }
63
-
64
- /* Horizontal track */
65
55
  .ty-scrollbar-track-x {
66
- position: absolute;
67
- bottom: 0;
68
- left: 0;
69
- right: 0;
70
- height: var(--ty-scrollbar-width, 8px);
71
- z-index: 3;
72
- opacity: 0;
73
- pointer-events: none;
74
- transition: opacity 0.25s ease-out;
75
- cursor: pointer;
76
- }
77
-
56
+ position: absolute;
57
+ bottom: 0;
58
+ left: 0;
59
+ right: 0;
60
+ height: var(--ty-scrollbar-width, 8px);
61
+ z-index: 3;
62
+ opacity: 0;
63
+ pointer-events: none;
64
+ transition: opacity 0.25s ease-out;
65
+ cursor: pointer;
66
+ }
78
67
  .ty-scrollbar-track-x.has-overflow {
79
- pointer-events: auto;
68
+ pointer-events: auto;
80
69
  }
81
-
82
70
  .ty-scrollbar-track-x.has-overflow:hover,
83
71
  .ty-scrollbar-track-x.has-overflow.scrolling,
84
72
  .ty-scrollbar-track-x.dragging {
85
- opacity: 1;
73
+ opacity: 1;
86
74
  }
87
-
88
75
  .ty-scrollbar-track-x::before {
89
- content: '';
90
- position: absolute;
91
- inset: 0;
92
- background: var(--ty-scrollbar-track, transparent);
93
- border-radius: var(--ty-scrollbar-radius, 4px);
94
- opacity: 0;
95
- transition: opacity 0.15s ease-out;
96
- }
97
-
76
+ content: '';
77
+ position: absolute;
78
+ inset: 0;
79
+ background: var(--ty-scrollbar-track, transparent);
80
+ border-radius: var(--ty-scrollbar-radius, 4px);
81
+ opacity: 0;
82
+ transition: opacity 0.15s ease-out;
83
+ }
98
84
  .ty-scrollbar-track-x:hover::before,
99
85
  .ty-scrollbar-track-x.dragging::before {
100
- opacity: 1;
101
- background: var(--ty-scrollbar-track-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 8%, transparent));
86
+ opacity: 1;
87
+ background: var(--ty-scrollbar-track-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 8%, transparent));
102
88
  }
103
-
104
89
  .ty-scrollbar-thumb-x {
105
- position: absolute;
106
- bottom: 0;
107
- height: 100%;
108
- min-width: var(--ty-scrollbar-thumb-min-height, 30px);
109
- background: var(--ty-scrollbar-thumb, color-mix(in oklab, var(--ty-color-neutral-bold) 40%, transparent));
110
- border-radius: var(--ty-scrollbar-radius, 4px);
111
- transition: var(--ty-local-transition, background 0.15s ease-out);
112
- box-sizing: border-box;
113
- border: 1px solid transparent;
114
- }
115
-
90
+ position: absolute;
91
+ bottom: 0;
92
+ height: 100%;
93
+ min-width: var(--ty-scrollbar-thumb-min-height, 30px);
94
+ background: var(--ty-scrollbar-thumb, color-mix(in oklab, var(--ty-color-neutral-bold) 40%, transparent));
95
+ border-radius: var(--ty-scrollbar-radius, 4px);
96
+ transition: var(--ty-local-transition, background 0.15s ease-out);
97
+ box-sizing: border-box;
98
+ border: 1px solid transparent;
99
+ }
116
100
  .ty-scrollbar-thumb-x:hover,
117
101
  .ty-scrollbar-track-x.dragging .ty-scrollbar-thumb-x {
118
- background: var(--ty-scrollbar-thumb-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 55%, transparent));
102
+ background: var(--ty-scrollbar-thumb-hover, color-mix(in oklab, var(--ty-color-neutral-bold) 55%, transparent));
119
103
  }
120
-
121
104
  .ty-scrollbar-thumb-x:active,
122
105
  .ty-scrollbar-track-x.dragging .ty-scrollbar-thumb-x {
123
- background: var(--ty-scrollbar-thumb-active, color-mix(in oklab, var(--ty-color-neutral-bold) 70%, transparent));
106
+ background: var(--ty-scrollbar-thumb-active, color-mix(in oklab, var(--ty-color-neutral-bold) 70%, transparent));
124
107
  }
125
-
126
- /* Touch devices: hide the custom scrollbar */
127
108
  @media (pointer: coarse) and (hover: none) {
128
- .ty-scrollbar-track-y,
129
- .ty-scrollbar-track-x {
130
- display: none !important;
131
- }
109
+ .ty-scrollbar-track-y,
110
+ .ty-scrollbar-track-x {
111
+ display: none !important;
112
+ }
132
113
  }
133
-
134
114
  @media (prefers-reduced-motion: reduce) {
135
- .ty-scrollbar-track-y,
136
- .ty-scrollbar-track-x,
137
- .ty-scrollbar-thumb-y,
138
- .ty-scrollbar-thumb-x {
139
- transition-duration: 0ms !important;
140
- }
115
+ .ty-scrollbar-track-y,
116
+ .ty-scrollbar-track-x,
117
+ .ty-scrollbar-thumb-y,
118
+ .ty-scrollbar-thumb-x {
119
+ transition-duration: 0ms !important;
120
+ }
141
121
  }
142
122
  `;