tyrell-components 1.0.0-RC11 → 1.0.0-RC13

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 (240) hide show
  1. package/README.md +1 -0
  2. package/css/tyrell-colors-static.css +316 -0
  3. package/css/tyrell-theme.css +1454 -0
  4. package/css/tyrell.css +112 -420
  5. package/dist/tyrell-colors-static.css +316 -0
  6. package/dist/tyrell-theme.css +1454 -0
  7. package/dist/tyrell.css +112 -420
  8. package/dist/tyrell.js +1 -1
  9. package/lib/base/ty-component.d.ts +7 -0
  10. package/lib/base/ty-component.d.ts.map +1 -1
  11. package/lib/base/ty-component.js +27 -0
  12. package/lib/base/ty-component.js.map +1 -1
  13. package/lib/components/button.d.ts +16 -1
  14. package/lib/components/button.d.ts.map +1 -1
  15. package/lib/components/button.js +34 -4
  16. package/lib/components/button.js.map +1 -1
  17. package/lib/components/calendar-month.d.ts +23 -0
  18. package/lib/components/calendar-month.d.ts.map +1 -1
  19. package/lib/components/calendar-month.js +168 -11
  20. package/lib/components/calendar-month.js.map +1 -1
  21. package/lib/components/calendar-navigation.d.ts +31 -5
  22. package/lib/components/calendar-navigation.d.ts.map +1 -1
  23. package/lib/components/calendar-navigation.js +71 -31
  24. package/lib/components/calendar-navigation.js.map +1 -1
  25. package/lib/components/calendar.d.ts +17 -2
  26. package/lib/components/calendar.d.ts.map +1 -1
  27. package/lib/components/calendar.js +83 -12
  28. package/lib/components/calendar.js.map +1 -1
  29. package/lib/components/checkbox.d.ts +14 -3
  30. package/lib/components/checkbox.d.ts.map +1 -1
  31. package/lib/components/checkbox.js +86 -57
  32. package/lib/components/checkbox.js.map +1 -1
  33. package/lib/components/copy.d.ts +14 -3
  34. package/lib/components/copy.d.ts.map +1 -1
  35. package/lib/components/copy.js +47 -25
  36. package/lib/components/copy.js.map +1 -1
  37. package/lib/components/date-picker.d.ts +26 -1
  38. package/lib/components/date-picker.d.ts.map +1 -1
  39. package/lib/components/date-picker.js +151 -32
  40. package/lib/components/date-picker.js.map +1 -1
  41. package/lib/components/input.d.ts +17 -2
  42. package/lib/components/input.d.ts.map +1 -1
  43. package/lib/components/input.js +104 -25
  44. package/lib/components/input.js.map +1 -1
  45. package/lib/components/modal.d.ts.map +1 -1
  46. package/lib/components/modal.js +28 -3
  47. package/lib/components/modal.js.map +1 -1
  48. package/lib/components/option.d.ts +0 -27
  49. package/lib/components/option.d.ts.map +1 -1
  50. package/lib/components/option.js +11 -102
  51. package/lib/components/option.js.map +1 -1
  52. package/lib/components/popup.d.ts.map +1 -1
  53. package/lib/components/popup.js +36 -2
  54. package/lib/components/popup.js.map +1 -1
  55. package/lib/components/radio.d.ts +6 -2
  56. package/lib/components/radio.d.ts.map +1 -1
  57. package/lib/components/radio.js +55 -13
  58. package/lib/components/radio.js.map +1 -1
  59. package/lib/components/scroll-container.d.ts +16 -0
  60. package/lib/components/scroll-container.d.ts.map +1 -1
  61. package/lib/components/scroll-container.js +105 -1
  62. package/lib/components/scroll-container.js.map +1 -1
  63. package/lib/components/select.d.ts +550 -0
  64. package/lib/components/select.d.ts.map +1 -0
  65. package/lib/components/select.js +2115 -0
  66. package/lib/components/select.js.map +1 -0
  67. package/lib/components/selected-tags.d.ts +93 -0
  68. package/lib/components/selected-tags.d.ts.map +1 -0
  69. package/lib/components/selected-tags.js +286 -0
  70. package/lib/components/selected-tags.js.map +1 -0
  71. package/lib/components/switch.d.ts +6 -3
  72. package/lib/components/switch.d.ts.map +1 -1
  73. package/lib/components/switch.js +54 -36
  74. package/lib/components/switch.js.map +1 -1
  75. package/lib/components/tabs.d.ts.map +1 -1
  76. package/lib/components/tabs.js +190 -25
  77. package/lib/components/tabs.js.map +1 -1
  78. package/lib/components/tag.d.ts +9 -1
  79. package/lib/components/tag.d.ts.map +1 -1
  80. package/lib/components/tag.js +41 -5
  81. package/lib/components/tag.js.map +1 -1
  82. package/lib/components/textarea.d.ts +3 -0
  83. package/lib/components/textarea.d.ts.map +1 -1
  84. package/lib/components/textarea.js +61 -6
  85. package/lib/components/textarea.js.map +1 -1
  86. package/lib/components/tooltip.d.ts +4 -2
  87. package/lib/components/tooltip.d.ts.map +1 -1
  88. package/lib/components/tooltip.js +109 -70
  89. package/lib/components/tooltip.js.map +1 -1
  90. package/lib/components/wizard.d.ts.map +1 -1
  91. package/lib/components/wizard.js +22 -3
  92. package/lib/components/wizard.js.map +1 -1
  93. package/lib/index.d.ts +3 -2
  94. package/lib/index.d.ts.map +1 -1
  95. package/lib/index.js +3 -2
  96. package/lib/index.js.map +1 -1
  97. package/lib/styles/button.d.ts +41 -6
  98. package/lib/styles/button.d.ts.map +1 -1
  99. package/lib/styles/button.js +294 -254
  100. package/lib/styles/button.js.map +1 -1
  101. package/lib/styles/calendar-month.d.ts +3 -1
  102. package/lib/styles/calendar-month.d.ts.map +1 -1
  103. package/lib/styles/calendar-month.js +100 -67
  104. package/lib/styles/calendar-month.js.map +1 -1
  105. package/lib/styles/calendar-navigation.d.ts +1 -1
  106. package/lib/styles/calendar-navigation.d.ts.map +1 -1
  107. package/lib/styles/calendar-navigation.js +20 -28
  108. package/lib/styles/calendar-navigation.js.map +1 -1
  109. package/lib/styles/checkbox.d.ts +7 -5
  110. package/lib/styles/checkbox.d.ts.map +1 -1
  111. package/lib/styles/checkbox.js +125 -8
  112. package/lib/styles/checkbox.js.map +1 -1
  113. package/lib/styles/copy.d.ts +3 -1
  114. package/lib/styles/copy.d.ts.map +1 -1
  115. package/lib/styles/copy.js +61 -6
  116. package/lib/styles/copy.js.map +1 -1
  117. package/lib/styles/custom-scrollbar.d.ts +1 -1
  118. package/lib/styles/custom-scrollbar.d.ts.map +1 -1
  119. package/lib/styles/custom-scrollbar.js +2 -2
  120. package/lib/styles/date-picker.d.ts +3 -1
  121. package/lib/styles/date-picker.d.ts.map +1 -1
  122. package/lib/styles/date-picker.js +65 -103
  123. package/lib/styles/date-picker.js.map +1 -1
  124. package/lib/styles/file-upload.d.ts +1 -1
  125. package/lib/styles/file-upload.d.ts.map +1 -1
  126. package/lib/styles/file-upload.js +3 -3
  127. package/lib/styles/input.d.ts +3 -1
  128. package/lib/styles/input.d.ts.map +1 -1
  129. package/lib/styles/input.js +93 -419
  130. package/lib/styles/input.js.map +1 -1
  131. package/lib/styles/multiselect.d.ts +3 -1
  132. package/lib/styles/multiselect.d.ts.map +1 -1
  133. package/lib/styles/multiselect.js +26 -2
  134. package/lib/styles/multiselect.js.map +1 -1
  135. package/lib/styles/option.d.ts +1 -1
  136. package/lib/styles/option.d.ts.map +1 -1
  137. package/lib/styles/option.js +20 -47
  138. package/lib/styles/option.js.map +1 -1
  139. package/lib/styles/radio.d.ts +3 -1
  140. package/lib/styles/radio.d.ts.map +1 -1
  141. package/lib/styles/radio.js +24 -21
  142. package/lib/styles/radio.js.map +1 -1
  143. package/lib/styles/scroll-container.d.ts +1 -1
  144. package/lib/styles/scroll-container.d.ts.map +1 -1
  145. package/lib/styles/scroll-container.js +6 -0
  146. package/lib/styles/scroll-container.js.map +1 -1
  147. package/lib/styles/select-base.d.ts +9 -0
  148. package/lib/styles/select-base.d.ts.map +1 -0
  149. package/lib/styles/select-base.js +973 -0
  150. package/lib/styles/select-base.js.map +1 -0
  151. package/lib/styles/select.d.ts +12 -0
  152. package/lib/styles/select.d.ts.map +1 -0
  153. package/lib/styles/select.js +308 -0
  154. package/lib/styles/select.js.map +1 -0
  155. package/lib/styles/step.d.ts +1 -1
  156. package/lib/styles/step.d.ts.map +1 -1
  157. package/lib/styles/switch.d.ts +3 -1
  158. package/lib/styles/switch.d.ts.map +1 -1
  159. package/lib/styles/switch.js +25 -10
  160. package/lib/styles/switch.js.map +1 -1
  161. package/lib/styles/tab.d.ts +1 -1
  162. package/lib/styles/tab.d.ts.map +1 -1
  163. package/lib/styles/tabs.d.ts +1 -1
  164. package/lib/styles/tabs.d.ts.map +1 -1
  165. package/lib/styles/tabs.js +71 -1
  166. package/lib/styles/tabs.js.map +1 -1
  167. package/lib/styles/tag.d.ts +1 -1
  168. package/lib/styles/tag.d.ts.map +1 -1
  169. package/lib/styles/tag.js +40 -141
  170. package/lib/styles/tag.js.map +1 -1
  171. package/lib/styles/textarea.d.ts +1 -1
  172. package/lib/styles/textarea.d.ts.map +1 -1
  173. package/lib/styles/textarea.js +71 -37
  174. package/lib/styles/textarea.js.map +1 -1
  175. package/lib/styles/tooltip.d.ts +4 -2
  176. package/lib/styles/tooltip.d.ts.map +1 -1
  177. package/lib/styles/tooltip.js +4 -119
  178. package/lib/styles/tooltip.js.map +1 -1
  179. package/lib/styles/wizard.d.ts +1 -1
  180. package/lib/styles/wizard.d.ts.map +1 -1
  181. package/lib/styles/wizard.js +18 -6
  182. package/lib/styles/wizard.js.map +1 -1
  183. package/lib/types/common.d.ts +2 -1
  184. package/lib/types/common.d.ts.map +1 -1
  185. package/lib/types/common.js +15 -1
  186. package/lib/types/common.js.map +1 -1
  187. package/lib/utils/calendar-utils.d.ts +0 -48
  188. package/lib/utils/calendar-utils.d.ts.map +1 -1
  189. package/lib/utils/calendar-utils.js +0 -69
  190. package/lib/utils/calendar-utils.js.map +1 -1
  191. package/lib/utils/flavor-sheet.d.ts +32 -0
  192. package/lib/utils/flavor-sheet.d.ts.map +1 -0
  193. package/lib/utils/flavor-sheet.js +40 -0
  194. package/lib/utils/flavor-sheet.js.map +1 -0
  195. package/lib/utils/icon-registry.d.ts +0 -13
  196. package/lib/utils/icon-registry.d.ts.map +1 -1
  197. package/lib/utils/icon-registry.js +0 -35
  198. package/lib/utils/icon-registry.js.map +1 -1
  199. package/lib/utils/icons.d.ts +10 -0
  200. package/lib/utils/icons.d.ts.map +1 -0
  201. package/lib/utils/icons.js +10 -0
  202. package/lib/utils/icons.js.map +1 -0
  203. package/lib/utils/loader-registry.d.ts +2 -2
  204. package/lib/utils/loader-registry.js +2 -2
  205. package/lib/utils/locale.d.ts +0 -57
  206. package/lib/utils/locale.d.ts.map +1 -1
  207. package/lib/utils/locale.js +0 -89
  208. package/lib/utils/locale.js.map +1 -1
  209. package/lib/utils/number-format.d.ts +0 -21
  210. package/lib/utils/number-format.d.ts.map +1 -1
  211. package/lib/utils/number-format.js +0 -27
  212. package/lib/utils/number-format.js.map +1 -1
  213. package/lib/utils/positioning.d.ts +29 -22
  214. package/lib/utils/positioning.d.ts.map +1 -1
  215. package/lib/utils/positioning.js +23 -87
  216. package/lib/utils/positioning.js.map +1 -1
  217. package/lib/utils/scroll-lock.d.ts.map +1 -1
  218. package/lib/utils/scroll-lock.js +0 -1
  219. package/lib/utils/scroll-lock.js.map +1 -1
  220. package/lib/utils/styles.d.ts +0 -5
  221. package/lib/utils/styles.d.ts.map +1 -1
  222. package/lib/utils/styles.js +0 -7
  223. package/lib/utils/styles.js.map +1 -1
  224. package/lib/version.d.ts +1 -1
  225. package/lib/version.js +1 -1
  226. package/package.json +22 -11
  227. package/css/tyrell-brand.css +0 -913
  228. package/dist/tyrell-brand.css +0 -913
  229. package/lib/components/dropdown.d.ts +0 -424
  230. package/lib/components/dropdown.d.ts.map +0 -1
  231. package/lib/components/dropdown.js +0 -1640
  232. package/lib/components/dropdown.js.map +0 -1
  233. package/lib/components/multiselect.d.ts +0 -397
  234. package/lib/components/multiselect.d.ts.map +0 -1
  235. package/lib/components/multiselect.js +0 -1595
  236. package/lib/components/multiselect.js.map +0 -1
  237. package/lib/styles/dropdown.d.ts +0 -12
  238. package/lib/styles/dropdown.d.ts.map +0 -1
  239. package/lib/styles/dropdown.js +0 -1081
  240. package/lib/styles/dropdown.js.map +0 -1
@@ -1,1081 +0,0 @@
1
- /**
2
- * Dropdown Component Styles
3
- *
4
- * ARCHITECTURE:
5
- * - Shared styles: Apply to both desktop and mobile
6
- * - Desktop styles: Scoped under .dropdown-mode-desktop
7
- * - Mobile styles: Scoped under .dropdown-mode-mobile
8
- *
9
- * This prevents CSS conflicts between desktop dialog and mobile modal implementations.
10
- */
11
- import { customScrollbarStyles } from "./custom-scrollbar.js";
12
- export const dropdownStyles = `
13
- /* ==================== SHARED STYLES ==================== */
14
- /* These apply to BOTH desktop and mobile modes */
15
-
16
- :host {
17
- display: block;
18
- width: auto;
19
- }
20
-
21
- :host {
22
- --mobile-border-color: var(--ty-border, #5858587d);
23
- }
24
-
25
- .dropdown-container {
26
- display: flex;
27
- flex-direction: column;
28
- width: 100%;
29
- box-sizing: border-box;
30
- }
31
-
32
- /* Label styling */
33
- .ty-field-label {
34
- font-size: var(--ty-font-sm);
35
- line-height: var(--ty-leading-sm);
36
- letter-spacing: var(--ty-tracking-sm);
37
- font-weight: var(--ty-font-medium);
38
- color: var(--ty-label-color);
39
- margin-bottom: 6px;
40
- padding-left: 12px;
41
- display: flex;
42
- align-items: center;
43
- }
44
-
45
- .required-icon {
46
- display: inline-flex;
47
- align-items: center;
48
- color: #ef4444;
49
- width: 12px;
50
- height: 12px;
51
- vertical-align: middle;
52
- margin-left: 4px;
53
- }
54
-
55
- .dropdown-wrapper {
56
- position: relative;
57
- display: block;
58
- width: 100%;
59
- }
60
-
61
- /* ==================== DESKTOP MODE STYLES ==================== */
62
- /* All styles scoped under .dropdown-mode-desktop */
63
-
64
- /* Stub (trigger button) */
65
- .dropdown-mode-desktop .dropdown-stub {
66
- width: 100%;
67
- cursor: pointer;
68
- box-sizing: border-box;
69
- position: relative;
70
- display: flex;
71
- align-items: center;
72
- background: var(--input-bg, var(--ty-input-bg));
73
- color: var(--input-color, var(--ty-input-color));
74
- border: 1px solid var(--input-border, var(--ty-input-border));
75
- border-radius: var(--ty-radius-md);
76
- font-family: var(--ty-font-sans);
77
- font-size: var(--ty-font-sm);
78
- line-height: var(--ty-leading-sm);
79
- letter-spacing: var(--ty-tracking-sm);
80
- font-weight: var(--ty-font-normal);
81
- min-height: var(--ty-size-md);
82
- padding: 0 var(--ty-spacing-3);
83
- padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
84
- transition: var(--ty-transition-all), opacity 0.2s ease;
85
- outline: none;
86
- }
87
-
88
- .dropdown-mode-desktop .dropdown-stub:hover {
89
- border-color: var(--input-border-hover, var(--ty-input-border-hover));
90
- }
91
-
92
- .dropdown-mode-desktop .dropdown-stub[disabled] {
93
- background-color: var(--input-disabled-bg, var(--ty-input-disabled-bg));
94
- color: var(--input-disabled-color, var(--ty-input-disabled-color));
95
- cursor: not-allowed;
96
- opacity: 0.6;
97
- }
98
-
99
- .dropdown-mode-desktop .dropdown-stub:focus {
100
- border-color: var(--input-border-hover, var(--ty-input-border-hover));
101
- }
102
-
103
- /* Hide stub when dropdown is open */
104
- .dropdown-mode-desktop .dropdown-wrapper:has(.dropdown-chevron.open) .dropdown-stub {
105
- opacity: 0;
106
- pointer-events: none;
107
- }
108
-
109
- /* Size variants */
110
- .dropdown-mode-desktop .dropdown-stub.xs {
111
- min-height: var(--ty-size-xs);
112
- font-size: var(--ty-font-xs);
113
- line-height: var(--ty-leading-xs);
114
- letter-spacing: var(--ty-tracking-xs);
115
- padding: var(--ty-spacing-1) var(--ty-spacing-2);
116
- padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));
117
- }
118
-
119
- .dropdown-mode-desktop .dropdown-stub.sm {
120
- min-height: var(--ty-size-sm);
121
- font-size: var(--ty-font-sm);
122
- line-height: var(--ty-leading-sm);
123
- letter-spacing: var(--ty-tracking-sm);
124
- padding: var(--ty-spacing-1) var(--ty-spacing-2);
125
- padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));
126
- }
127
-
128
- .dropdown-mode-desktop .dropdown-stub.md {
129
- min-height: var(--ty-size-md);
130
- font-size: var(--ty-font-sm);
131
- line-height: var(--ty-leading-sm);
132
- letter-spacing: var(--ty-tracking-sm);
133
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
134
- padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
135
- }
136
-
137
- .dropdown-mode-desktop .dropdown-stub.lg {
138
- min-height: var(--ty-size-lg);
139
- font-size: var(--ty-font-base);
140
- line-height: var(--ty-leading-base);
141
- letter-spacing: var(--ty-tracking-base);
142
- padding: var(--ty-spacing-3) var(--ty-spacing-4);
143
- padding-right: calc(var(--ty-spacing-4) + 1rem + var(--ty-spacing-3));
144
- }
145
-
146
- .dropdown-mode-desktop .dropdown-stub.xl {
147
- min-height: var(--ty-size-xl);
148
- font-size: var(--ty-font-lg);
149
- line-height: var(--ty-leading-lg);
150
- letter-spacing: var(--ty-tracking-lg);
151
- padding: var(--ty-spacing-4) var(--ty-spacing-5);
152
- padding-right: calc(var(--ty-spacing-5) + 1rem + var(--ty-spacing-4));
153
- }
154
-
155
- /* Clearable adjustments */
156
- .dropdown-mode-desktop .dropdown-stub.xs.clearable.has-selection {
157
- padding-right: calc(var(--ty-spacing-2) + 2rem + var(--ty-spacing-2));
158
- }
159
-
160
- .dropdown-mode-desktop .dropdown-stub.sm.clearable.has-selection {
161
- padding-right: calc(var(--ty-spacing-2) + 2rem + var(--ty-spacing-2));
162
- }
163
-
164
- .dropdown-mode-desktop .dropdown-stub.md.clearable.has-selection {
165
- padding-right: calc(var(--ty-spacing-3) + 2rem + var(--ty-spacing-3));
166
- }
167
-
168
- .dropdown-mode-desktop .dropdown-stub.lg.clearable.has-selection {
169
- padding-right: calc(var(--ty-spacing-4) + 2rem + var(--ty-spacing-4));
170
- }
171
-
172
- .dropdown-mode-desktop .dropdown-stub.xl.clearable.has-selection {
173
- padding-right: calc(var(--ty-spacing-5) + 2rem + var(--ty-spacing-5));
174
- }
175
-
176
- /* Start-slot icon (leading content inside the stub trigger) */
177
- .dropdown-mode-desktop .dropdown-stub ::slotted([slot="start"]),
178
- .dropdown-mode-mobile .dropdown-stub ::slotted([slot="start"]) {
179
- display: flex;
180
- align-items: center;
181
- justify-content: center;
182
- flex-shrink: 0;
183
- margin-right: 0.5rem;
184
- color: var(--ty-color-text-soft);
185
- }
186
-
187
- .dropdown-mode-desktop .dropdown-stub ::slotted(ty-icon[slot="start"]),
188
- .dropdown-mode-mobile .dropdown-stub ::slotted(ty-icon[slot="start"]) {
189
- width: 1em;
190
- height: 1em;
191
- }
192
-
193
- /* Placeholder */
194
- .dropdown-mode-desktop .dropdown-placeholder {
195
- color: var(--input-placeholder, var(--ty-input-placeholder));
196
- font-weight: var(--ty-font-light);
197
- font-size: var(--ty-font-sm);
198
- line-height: var(--ty-leading-sm);
199
- letter-spacing: var(--ty-tracking-sm);
200
- font-style: italic;
201
- pointer-events: none;
202
- }
203
-
204
- .dropdown-mode-desktop .dropdown-stub.has-selection .dropdown-placeholder {
205
- display: none;
206
- }
207
-
208
- /* Selected content */
209
- .dropdown-mode-desktop .dropdown-stub slot[name="selected"] {
210
- display: block;
211
- }
212
-
213
- .dropdown-mode-desktop .dropdown-stub.has-selection slot[name="selected"] {
214
- width: 100%;
215
- }
216
-
217
- .dropdown-mode-desktop .dropdown-stub slot[name="selected"] * {
218
- display: block;
219
- width: 100%;
220
- padding: 0;
221
- margin: 0;
222
- border: none;
223
- background: none;
224
- color: inherit;
225
- font: inherit;
226
- line-height: inherit;
227
- outline: none;
228
- appearance: none;
229
- }
230
-
231
- /* Chevron */
232
- .dropdown-mode-desktop .dropdown-chevron {
233
- position: absolute;
234
- top: 50%;
235
- right: var(--ty-spacing-3);
236
- transform: translateY(-50%);
237
- width: 1rem;
238
- height: 1rem;
239
- color: var(--input-placeholder, var(--ty-input-placeholder));
240
- transition: var(--ty-transition-transform);
241
- pointer-events: none;
242
- }
243
-
244
- .dropdown-mode-desktop .dropdown-chevron.open {
245
- transform: translateY(-50%) rotate(180deg);
246
- }
247
-
248
- .dropdown-mode-desktop .dropdown-chevron svg {
249
- width: 100%;
250
- height: 100%;
251
- }
252
-
253
- /* Clear button */
254
- .dropdown-mode-desktop .dropdown-clear-btn {
255
- position: absolute;
256
- top: 50%;
257
- right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
258
- transform: translateY(-50%);
259
- width: 1rem;
260
- height: 1rem;
261
- padding: 0;
262
- border: none;
263
- background: none;
264
- color: var(--input-placeholder, var(--ty-input-placeholder));
265
- cursor: pointer;
266
- transition: var(--ty-transition-colors);
267
- display: none;
268
- }
269
-
270
- .dropdown-mode-desktop .dropdown-clear-btn:hover {
271
- color: var(--ty-color-danger);
272
- }
273
-
274
- .dropdown-mode-desktop .dropdown-clear-btn:active {
275
- transform: translateY(-50%) scale(0.9);
276
- }
277
-
278
- .dropdown-mode-desktop .dropdown-clear-btn svg {
279
- width: 100%;
280
- height: 100%;
281
- display: block;
282
- }
283
-
284
- /* Dialog */
285
- .dropdown-mode-desktop .dropdown-dialog {
286
- position: fixed;
287
- width: var(--dropdown-width, 200px);
288
- max-width: 100vw;
289
- margin: 0;
290
- padding: 0;
291
- border: none;
292
- background: transparent;
293
- box-sizing: border-box;
294
- padding: var(--dropdown-padding, 20px);
295
- opacity: 0;
296
- transition: opacity 400ms ease;
297
- transform: translate(var(--dropdown-offset-x, 0px), var(--dropdown-offset-y, 0px));
298
- top: -1000px;
299
- left: -1000px;
300
- }
301
-
302
- /* When opened via showModal(), apply flex layout and direction */
303
- .dropdown-mode-desktop .dropdown-dialog[open] {
304
- display: flex;
305
- flex-direction: column;
306
- }
307
-
308
- .dropdown-mode-desktop .dropdown-dialog.position-below {
309
- left: var(--dropdown-x);
310
- top: var(--dropdown-y);
311
- }
312
-
313
- .dropdown-mode-desktop .dropdown-dialog.position-above {
314
- left: var(--dropdown-x);
315
- bottom: var(--dropdown-y);
316
- top: auto;
317
- flex-direction: column-reverse;
318
- }
319
-
320
- .dropdown-mode-desktop .dropdown-dialog.position-above .dropdown-header {
321
- margin-top: 4px;
322
- }
323
-
324
- .dropdown-mode-desktop .dropdown-dialog.position-below .dropdown-header {
325
- margin-bottom: 4px;
326
- }
327
-
328
- .dropdown-mode-desktop .dropdown-dialog.position-below .dropdown-options {
329
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1), var(--ty-shadow-md);
330
- }
331
-
332
- .dropdown-mode-desktop .dropdown-dialog.open {
333
- display: flex;
334
- opacity: 1;
335
- }
336
-
337
- .dropdown-mode-desktop .dropdown-dialog.open .dropdown-options {
338
- opacity: 1;
339
- transform: translateY(0) scale(1);
340
- }
341
-
342
- .dropdown-mode-desktop .dropdown-dialog::backdrop {
343
- background: transparent;
344
- }
345
-
346
- /* Dialog header */
347
- .dropdown-mode-desktop .dropdown-header {
348
- display: flex;
349
- align-items: center;
350
- gap: var(--ty-spacing-2);
351
- position: relative;
352
- }
353
-
354
- .dropdown-mode-desktop .dropdown-search-input {
355
- width: 100%;
356
- min-width: 0;
357
- box-sizing: border-box;
358
- background: var(--input-bg, var(--ty-input-bg));
359
- color: var(--input-color, var(--ty-input-color));
360
- border: 1px solid var(--input-border, var(--ty-input-border));
361
- border-radius: var(--ty-radius-md);
362
- font-family: var(--ty-font-sans);
363
- font-size: var(--ty-font-sm);
364
- line-height: var(--ty-leading-sm);
365
- letter-spacing: var(--ty-tracking-sm);
366
- font-weight: var(--ty-font-normal);
367
- min-height: var(--ty-size-md);
368
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
369
- padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
370
- transition: var(--ty-transition-all);
371
- outline: none;
372
- }
373
-
374
- .dropdown-mode-desktop .dropdown-search-input:focus {
375
- border-color: var(--input-border-focus, var(--ty-input-border-focus));
376
- box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
377
- }
378
-
379
- .dropdown-mode-desktop .dropdown-search-input:disabled {
380
- background-color: var(--input-disabled-bg, var(--ty-input-disabled-bg));
381
- color: var(--input-disabled-color, var(--ty-input-disabled-color));
382
- cursor: not-allowed;
383
- opacity: 0.6;
384
- }
385
-
386
- .dropdown-mode-desktop .dropdown-search-input::placeholder {
387
- color: var(--input-placeholder, var(--ty-input-placeholder));
388
- }
389
-
390
- /* Search input sizes */
391
- .dropdown-mode-desktop .dropdown-search-input.xs {
392
- min-height: var(--ty-size-xs);
393
- font-size: var(--ty-font-xs);
394
- line-height: var(--ty-leading-xs);
395
- letter-spacing: var(--ty-tracking-xs);
396
- padding: var(--ty-spacing-1) var(--ty-spacing-2);
397
- padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));
398
- }
399
-
400
- .dropdown-mode-desktop .dropdown-search-input.sm {
401
- min-height: var(--ty-size-sm);
402
- font-size: var(--ty-font-sm);
403
- line-height: var(--ty-leading-sm);
404
- letter-spacing: var(--ty-tracking-sm);
405
- padding: var(--ty-spacing-1) var(--ty-spacing-2);
406
- padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));
407
- }
408
-
409
- .dropdown-mode-desktop .dropdown-search-input.md {
410
- min-height: var(--ty-size-md);
411
- font-size: var(--ty-font-sm);
412
- line-height: var(--ty-leading-sm);
413
- letter-spacing: var(--ty-tracking-sm);
414
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
415
- padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
416
- }
417
-
418
- .dropdown-mode-desktop .dropdown-search-input.lg {
419
- min-height: var(--ty-size-lg);
420
- font-size: var(--ty-font-base);
421
- line-height: var(--ty-leading-base);
422
- letter-spacing: var(--ty-tracking-base);
423
- padding: var(--ty-spacing-3) var(--ty-spacing-4);
424
- padding-right: calc(var(--ty-spacing-4) + 1rem + var(--ty-spacing-3));
425
- }
426
-
427
- .dropdown-mode-desktop .dropdown-search-input.xl {
428
- min-height: var(--ty-size-xl);
429
- font-size: var(--ty-font-lg);
430
- line-height: var(--ty-leading-lg);
431
- letter-spacing: var(--ty-tracking-lg);
432
- padding: var(--ty-spacing-4) var(--ty-spacing-5);
433
- padding-right: calc(var(--ty-spacing-5) + 1rem + var(--ty-spacing-4));
434
- }
435
-
436
- .dropdown-mode-desktop .dropdown-search-chevron {
437
- position: absolute;
438
- top: 50%;
439
- right: var(--ty-spacing-3);
440
- transform: translateY(-50%);
441
- width: 1rem;
442
- height: 1rem;
443
- color: var(--input-placeholder, var(--ty-input-placeholder));
444
- transition: var(--ty-transition-transform);
445
- pointer-events: none;
446
- }
447
-
448
- .dropdown-mode-desktop .dropdown-search-chevron.open {
449
- transform: translateY(-50%) rotate(180deg);
450
- }
451
-
452
- .dropdown-mode-desktop .dropdown-search-chevron svg {
453
- width: 100%;
454
- height: 100%;
455
- }
456
-
457
- /* Options container */
458
- .dropdown-mode-desktop .dropdown-options {
459
- opacity: 0;
460
- background: var(--input-bg, var(--ty-input-bg));
461
- border: 1px solid var(--input-border, var(--ty-input-border));
462
- border-radius: var(--ty-radius-lg);
463
- max-height: 16rem;
464
- width: 100%;
465
- max-width: 100%;
466
- overflow-x: hidden;
467
- overflow-y: auto;
468
- scroll-behavior: smooth;
469
- box-sizing: border-box;
470
- position: relative;
471
- box-shadow:
472
- 0 20px 25px -5px rgba(0, 0, 0, 0.1),
473
- 0 10px 10px -5px rgba(0, 0, 0, 0.04);
474
- transform: translateY(-20px) scale(0.90);
475
- transition:
476
- opacity 100ms cubic-bezier(0.16, 1, 0.3, 1),
477
- transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
478
-
479
- }
480
-
481
- /* Hide native scrollbar only when custom scrollbar is active */
482
- .dropdown-mode-desktop .dropdown-options.ty-custom-scroll {
483
- scrollbar-width: none;
484
- -ms-overflow-style: none;
485
- }
486
-
487
- .dropdown-mode-desktop .dropdown-options.ty-custom-scroll::-webkit-scrollbar {
488
- display: none;
489
- }
490
-
491
- /* Options wrapper - positioned container for scrollbar track */
492
- .dropdown-mode-desktop .dropdown-options-wrapper {
493
- position: relative;
494
- }
495
-
496
- /* Show custom scrollbar on hover over options */
497
- .dropdown-mode-desktop .dropdown-options-wrapper:hover .ty-scrollbar-track-y.has-overflow {
498
- opacity: 1;
499
- }
500
-
501
- /* Option elements */
502
- .dropdown-mode-desktop .dropdown-options ::slotted(option) {
503
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
504
- color: var(--input-color, var(--ty-input-color));
505
- cursor: pointer;
506
- transition:
507
- var(--ty-transition-colors),
508
- transform 150ms cubic-bezier(0.16, 1, 0.3, 1);
509
- border: none;
510
- background: none;
511
- font-size: inherit;
512
- font-family: inherit;
513
- width: 100%;
514
- text-align: left;
515
- box-sizing: border-box;
516
- transform: translateX(0);
517
- }
518
-
519
- .dropdown-mode-desktop .dropdown-options ::slotted(option:hover) {
520
- background-color: var(--ty-bg-neutral-soft);
521
- }
522
-
523
- .dropdown-mode-desktop .dropdown-options ::slotted(option[highlighted]) {
524
- background-color: var(--ty-bg-primary-soft);
525
- color: var(--ty-color-primary-bold);
526
- }
527
-
528
- .dropdown-mode-desktop .dropdown-options ::slotted(option[selected]) {
529
- background-color: var(--ty-color-primary);
530
- color: #ffffff;
531
- }
532
-
533
- .dropdown-mode-desktop .dropdown-options ::slotted(option[hidden]),
534
- .dropdown-mode-desktop .dropdown-options ::slotted(ty-option[hidden]),
535
- .dropdown-mode-desktop .dropdown-options ::slotted(ty-tag[hidden]) {
536
- display: none;
537
- }
538
-
539
- /* ==================== MOBILE MODE STYLES ==================== */
540
- /* All styles scoped under .dropdown-mode-mobile */
541
- /* Floating modal design (centered card with backdrop) */
542
-
543
- /* Stub (trigger button) - same as desktop but scoped */
544
- .dropdown-mode-mobile .dropdown-stub {
545
- width: 100%;
546
- cursor: pointer;
547
- box-sizing: border-box;
548
- position: relative;
549
- display: flex;
550
- align-items: center;
551
- background: var(--input-bg, var(--ty-input-bg));
552
- color: var(--input-color, var(--ty-input-color));
553
- border: 1px solid var(--input-border, var(--ty-input-border));
554
- border-radius: var(--ty-radius-md);
555
- font-family: var(--ty-font-sans);
556
- font-size: var(--ty-font-sm);
557
- line-height: var(--ty-leading-sm);
558
- letter-spacing: var(--ty-tracking-sm);
559
- font-weight: var(--ty-font-normal);
560
- min-height: var(--ty-size-md);
561
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
562
- padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
563
- transition: var(--ty-transition-all);
564
- outline: none;
565
- }
566
-
567
- .dropdown-mode-mobile .dropdown-stub:hover {
568
- border-color: var(--input-border-hover, var(--ty-input-border-hover));
569
- }
570
-
571
- .dropdown-mode-mobile .dropdown-stub[disabled] {
572
- background-color: var(--input-disabled-bg, var(--ty-input-disabled-bg));
573
- color: var(--input-disabled-color, var(--ty-input-disabled-color));
574
- cursor: not-allowed;
575
- opacity: 0.6;
576
- }
577
-
578
- /* Size variants */
579
- .dropdown-mode-mobile .dropdown-stub.xs {
580
- min-height: var(--ty-size-xs);
581
- font-size: var(--ty-font-xs);
582
- line-height: var(--ty-leading-xs);
583
- letter-spacing: var(--ty-tracking-xs);
584
- padding: var(--ty-spacing-1) var(--ty-spacing-2);
585
- padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));
586
- }
587
-
588
- .dropdown-mode-mobile .dropdown-stub.sm {
589
- min-height: var(--ty-size-sm);
590
- font-size: var(--ty-font-sm);
591
- line-height: var(--ty-leading-sm);
592
- letter-spacing: var(--ty-tracking-sm);
593
- padding: var(--ty-spacing-1) var(--ty-spacing-2);
594
- padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));
595
- }
596
-
597
- .dropdown-mode-mobile .dropdown-stub.md {
598
- min-height: var(--ty-size-md);
599
- font-size: var(--ty-font-sm);
600
- line-height: var(--ty-leading-sm);
601
- letter-spacing: var(--ty-tracking-sm);
602
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
603
- padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
604
- }
605
-
606
- .dropdown-mode-mobile .dropdown-stub.lg {
607
- min-height: var(--ty-size-lg);
608
- font-size: var(--ty-font-base);
609
- line-height: var(--ty-leading-base);
610
- letter-spacing: var(--ty-tracking-base);
611
- padding: var(--ty-spacing-3) var(--ty-spacing-4);
612
- padding-right: calc(var(--ty-spacing-4) + 1rem + var(--ty-spacing-3));
613
- }
614
-
615
- .dropdown-mode-mobile .dropdown-stub.xl {
616
- min-height: var(--ty-size-xl);
617
- font-size: var(--ty-font-lg);
618
- line-height: var(--ty-leading-lg);
619
- letter-spacing: var(--ty-tracking-lg);
620
- padding: var(--ty-spacing-4) var(--ty-spacing-5);
621
- padding-right: calc(var(--ty-spacing-5) + 1rem + var(--ty-spacing-4));
622
- }
623
-
624
- /* Placeholder */
625
- .dropdown-mode-mobile .dropdown-placeholder {
626
- color: var(--input-placeholder, var(--ty-input-placeholder));
627
- font-weight: var(--ty-font-light);
628
- font-size: var(--ty-font-sm);
629
- line-height: var(--ty-leading-sm);
630
- letter-spacing: var(--ty-tracking-sm);
631
- font-style: italic;
632
- pointer-events: none;
633
- }
634
-
635
- .dropdown-mode-mobile .dropdown-stub.has-selection .dropdown-placeholder {
636
- display: none;
637
- }
638
-
639
- /* Selected content */
640
- .dropdown-mode-mobile .dropdown-stub slot[name="selected"] {
641
- display: block;
642
- }
643
-
644
- .dropdown-mode-mobile .dropdown-stub.has-selection slot[name="selected"] {
645
- width: 100%;
646
- }
647
-
648
- .dropdown-mode-mobile .dropdown-stub slot[name="selected"] * {
649
- display: block;
650
- width: 100%;
651
- padding: 0;
652
- margin: 0;
653
- border: none;
654
- background: none;
655
- color: inherit;
656
- font: inherit;
657
- line-height: inherit;
658
- outline: none;
659
- appearance: none;
660
- }
661
-
662
- /* Chevron */
663
- .dropdown-mode-mobile .dropdown-chevron {
664
- position: absolute;
665
- top: 50%;
666
- right: var(--ty-spacing-3);
667
- transform: translateY(-50%);
668
- width: 1rem;
669
- height: 1rem;
670
- color: var(--input-placeholder, var(--ty-input-placeholder));
671
- transition: var(--ty-transition-transform);
672
- pointer-events: none;
673
- }
674
-
675
- .dropdown-mode-mobile .dropdown-chevron svg {
676
- width: 100%;
677
- height: 100%;
678
- }
679
-
680
- /* Mobile dialog - full screen overlay with centered floating card */
681
- .dropdown-mode-mobile .mobile-dialog {
682
- position: fixed;
683
- top: 0;
684
- left: 0;
685
- right: 0;
686
- bottom: 0;
687
- width: 100vw;
688
- height: 100vh;
689
- max-width: 100vw;
690
- max-height: 100vh;
691
- margin: 0;
692
- padding: 0;
693
- padding-top: 10vh;
694
- border: none;
695
- background: transparent;
696
- align-items: flex-start;
697
- justify-content: center;
698
- opacity: 0;
699
- transition: opacity 300ms ease;
700
- }
701
-
702
- /* When opened via showModal(), add flex layout */
703
- .dropdown-mode-mobile .mobile-dialog[open] {
704
- display: flex;
705
- }
706
-
707
- .dropdown-mode-mobile .mobile-dialog.open {
708
- opacity: 1;
709
- }
710
-
711
- /* Native dialog backdrop with blur */
712
- .dropdown-mode-mobile .mobile-dialog::backdrop {
713
- background: rgba(0, 0, 0, 0.5);
714
- backdrop-filter: blur(8px);
715
- -webkit-backdrop-filter: blur(8px);
716
- }
717
-
718
- /* Mobile content container - floating card */
719
- .dropdown-mode-mobile .mobile-dialog-content {
720
- position: relative;
721
- display: flex;
722
- flex-direction: column;
723
- width: calc(100% - 32px);
724
- max-width: 400px;
725
- min-height: 200px;
726
- max-height: calc(90vh - 10vh);
727
- opacity: 0;
728
- transform: scale(0.95);
729
- transition:
730
- opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),
731
- transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
732
- }
733
-
734
- .dropdown-mode-mobile .mobile-dialog.open .mobile-dialog-content {
735
- opacity: 1;
736
- transform: scale(1);
737
- }
738
-
739
- /* Mobile search header - label floats above, search + close below */
740
- .dropdown-mode-mobile .mobile-search-header {
741
- flex-shrink: 0;
742
- display: flex;
743
- flex-direction: column;
744
- margin-bottom: 16px;
745
- padding: 0;
746
- background: transparent;
747
- position: relative;
748
- }
749
-
750
- .dropdown-mode-mobile .mobile-header-content {
751
- display: flex;
752
- align-items: center;
753
- gap: 12px;
754
- width: 100%;
755
- }
756
-
757
- /* Header for non-searchable (label + close button) */
758
- .dropdown-mode-mobile .mobile-header-nosearch {
759
- flex-shrink: 0;
760
- display: flex;
761
- align-items: center;
762
- justify-content: flex-end;
763
- margin-bottom: 16px;
764
- padding: 0;
765
- background: transparent;
766
- position: relative;
767
- min-height: 40px;
768
- }
769
-
770
- .dropdown-mode-mobile .mobile-header-label {
771
- position: absolute;
772
- bottom: 100%;
773
- left: 6px;
774
- margin-bottom: 4px;
775
- font-size: var(--ty-font-lg);
776
- line-height: var(--ty-leading-lg);
777
- letter-spacing: var(--ty-tracking-lg);
778
- font-weight: 700;
779
- color: var(--ty-color-neutral);
780
- pointer-events: none;
781
- }
782
-
783
- /* Close button - circular with border */
784
- .dropdown-mode-mobile .mobile-close-button {
785
- flex-shrink: 0;
786
- width: 36px;
787
- height: 36px;
788
- display: flex;
789
- align-items: center;
790
- justify-content: center;
791
- background: var(--ty-surface-floating);
792
- border: 2px solid var(--mobile-border-color);
793
- border-radius: 50%;
794
- color: var(--ty-text-strong);
795
- cursor: pointer;
796
- transition: var(--ty-transition-all);
797
- padding: 0;
798
- }
799
-
800
- .dropdown-mode-mobile .mobile-close-button:hover {
801
- background: var(--ty-bg-neutral);
802
- border-color: var(--ty-border);
803
- color: var(--ty-text-strong);
804
- }
805
-
806
- .dropdown-mode-mobile .mobile-close-button:active {
807
- transform: scale(0.9);
808
- }
809
-
810
- .dropdown-mode-mobile .mobile-close-button svg {
811
- width: 24px;
812
- height: 24px;
813
- }
814
-
815
- /* Mobile search input */
816
- .dropdown-mode-mobile .mobile-search-input {
817
- flex: 1;
818
- min-width: 0;
819
- box-sizing: border-box;
820
- background: var(--ty-surface-floating);
821
- color: var(--ty-text);
822
- border: 1px solid var(--ty-border-soft);
823
- border-radius: var(--ty-radius-md);
824
- font-family: var(--ty-font-sans);
825
- font-size: var(--ty-font-sm);
826
- line-height: var(--ty-leading-sm);
827
- letter-spacing: var(--ty-tracking-sm);
828
- font-weight: var(--ty-font-normal);
829
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
830
- height: 40px;
831
- transition: var(--ty-transition-all);
832
- outline: none;
833
- border: 2px solid;
834
- border-color: var(--mobile-border-color);
835
- }
836
-
837
- .dropdown-mode-mobile .mobile-search-input::placeholder {
838
- color: var(--ty-text-faint);
839
- }
840
-
841
- /* Mobile options container - floating card with elevation */
842
- .dropdown-mode-mobile .mobile-options-container {
843
- position: relative;
844
- flex: 1;
845
- overflow-y: auto;
846
- overflow-x: hidden;
847
- -webkit-overflow-scrolling: touch;
848
- background: var(--ty-surface-floating); /* Floating card background */
849
- border-radius: var(--ty-radius-lg);
850
- border: 1px solid var(--ty-border-soft);
851
- box-shadow:
852
- 0 20px 25px -5px rgba(0, 0, 0, 0.1),
853
- 0 10px 10px -5px rgba(0, 0, 0, 0.04);
854
- border: 2px solid;
855
- border-color: var(--mobile-border-color);
856
- }
857
-
858
- /* Hide scrollbar but keep functionality */
859
- .dropdown-mode-mobile .mobile-options-container {
860
- scrollbar-width: none; /* Firefox */
861
- -ms-overflow-style: none; /* IE/Edge */
862
- }
863
-
864
- .dropdown-mode-mobile .mobile-options-container::-webkit-scrollbar {
865
- display: none; /* Chrome, Safari, Opera */
866
- }
867
-
868
- /* Mobile option styling - native <option> only */
869
- .dropdown-mode-mobile .mobile-options-container ::slotted(option) {
870
- display: block;
871
- padding: var(--ty-spacing-2) var(--ty-spacing-3);
872
- margin: 2px 8px;
873
- color: var(--ty-text);
874
- cursor: pointer;
875
- transition: var(--ty-transition-all);
876
- border: none;
877
- background: transparent;
878
- font-size: var(--ty-font-sm);
879
- line-height: var(--ty-leading-sm);
880
- letter-spacing: var(--ty-tracking-sm);
881
- font-family: inherit;
882
- width: calc(100% - 16px);
883
- text-align: left;
884
- box-sizing: border-box;
885
- border-radius: var(--ty-radius-sm);
886
- min-height: 36px;
887
- }
888
-
889
- .dropdown-mode-mobile .mobile-options-container ::slotted(option:active) {
890
- background-color: var(--ty-bg-neutral-soft);
891
- }
892
-
893
- .dropdown-mode-mobile .mobile-options-container ::slotted(option[highlighted]) {
894
- background-color: var(--ty-bg-primary-soft);
895
- color: var(--ty-color-primary-bold);
896
- }
897
-
898
- .dropdown-mode-mobile .mobile-options-container ::slotted(option[selected]) {
899
- background: var(--ty-bg-primary);
900
- color: var(--ty-color-primary-strong);
901
- }
902
-
903
- .dropdown-mode-mobile .mobile-options-container ::slotted(option[hidden]),
904
- .dropdown-mode-mobile .mobile-options-container ::slotted(ty-option[hidden]),
905
- .dropdown-mode-mobile .mobile-options-container ::slotted(ty-tag[hidden]) {
906
- display: none;
907
- }
908
-
909
- /* ==================== FLAVOR VARIANTS ==================== */
910
- /* Apply to both modes */
911
-
912
- :host([flavor="primary"]) .dropdown-stub,
913
- :host([flavor="primary"]) .dropdown-search-input {
914
- border-color: var(--ty-color-primary);
915
- }
916
-
917
- :host([flavor="primary"]) .dropdown-stub:hover,
918
- :host([flavor="primary"]) .dropdown-search-input:focus {
919
- border-color: var(--ty-color-primary-bold);
920
- box-shadow: 0 0 0 3px var(--ty-color-primary-faint);
921
- }
922
-
923
- :host([flavor="secondary"]) .dropdown-stub,
924
- :host([flavor="secondary"]) .dropdown-search-input {
925
- border-color: var(--ty-color-secondary);
926
- }
927
-
928
- :host([flavor="secondary"]) .dropdown-stub:hover,
929
- :host([flavor="secondary"]) .dropdown-search-input:focus {
930
- border-color: var(--ty-color-secondary-bold);
931
- box-shadow: 0 0 0 3px var(--ty-color-secondary-faint);
932
- }
933
-
934
- :host([flavor="success"]) .dropdown-stub,
935
- :host([flavor="success"]) .dropdown-search-input {
936
- border-color: var(--ty-color-success);
937
- }
938
-
939
- :host([flavor="success"]) .dropdown-stub:hover,
940
- :host([flavor="success"]) .dropdown-search-input:focus {
941
- border-color: var(--ty-color-success-bold);
942
- box-shadow: 0 0 0 3px var(--ty-color-success-faint);
943
- }
944
-
945
- :host([flavor="danger"]) .dropdown-stub,
946
- :host([flavor="danger"]) .dropdown-search-input {
947
- border-color: var(--ty-color-danger);
948
- }
949
-
950
- :host([flavor="danger"]) .dropdown-stub:hover,
951
- :host([flavor="danger"]) .dropdown-search-input:focus {
952
- border-color: var(--ty-color-danger-bold);
953
- box-shadow: 0 0 0 3px var(--ty-color-danger-faint);
954
- }
955
-
956
- :host([flavor="warning"]) .dropdown-stub,
957
- :host([flavor="warning"]) .dropdown-search-input {
958
- border-color: var(--ty-color-warning);
959
- }
960
-
961
- :host([flavor="warning"]) .dropdown-stub:hover,
962
- :host([flavor="warning"]) .dropdown-search-input:focus {
963
- border-color: var(--ty-color-warning-bold);
964
- box-shadow: 0 0 0 3px var(--ty-color-warning-faint);
965
- }
966
-
967
- /* ==================== READONLY STATE ==================== */
968
-
969
- :host([readonly]) .dropdown-chevron {
970
- display: none;
971
- }
972
-
973
- :host([readonly]) .dropdown-stub {
974
- padding-right: var(--ty-spacing-3);
975
- }
976
-
977
- :host([readonly]) .dropdown-stub,
978
- :host([readonly]) .dropdown-stub slot[name="selected"] {
979
- cursor: initial;
980
- }
981
-
982
- /* ==================== LOADING STATE ====================
983
- Spinner overlay shown inside the popup options area while
984
- the parent (external-search mode) is fetching results.
985
- Search input stays usable so users can keep refining.
986
-
987
- Carries its own surface (background + radius + subtle border)
988
- so it stays visible even when the host has restyled the popup
989
- with a transparent or unusual background.
990
- Override with --ty-loader-bg / --ty-loader-radius / --ty-loader-border
991
- on the host element.
992
- */
993
- .dropdown-loading {
994
- display: none;
995
- align-items: center;
996
- justify-content: center;
997
- gap: var(--ty-spacing-2);
998
- padding: var(--ty-spacing-4) var(--ty-spacing-3);
999
- color: var(--ty-text-soft);
1000
- font-size: var(--ty-font-sm);
1001
- min-height: 4rem;
1002
- /* Match the .dropdown-options popup look — same background, border, radius, shadow */
1003
- background: var(--ty-loader-bg, var(--input-bg, var(--ty-input-bg)));
1004
- border: 1px solid var(--ty-loader-border, var(--input-border, var(--ty-input-border)));
1005
- border-radius: var(--ty-loader-radius, var(--ty-radius-lg));
1006
- box-shadow: var(--ty-loader-shadow, 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04));
1007
- box-sizing: border-box;
1008
- }
1009
-
1010
- .dropdown-options-wrapper.loading .dropdown-loading {
1011
- display: flex;
1012
- }
1013
-
1014
- /* Make the loading slot transparent for layout so default fallback (spinner + text)
1015
- AND user-provided slotted content both act as direct flex children of .dropdown-loading. */
1016
- .dropdown-loading > slot[name="loading"] {
1017
- display: contents;
1018
- }
1019
-
1020
- /* Mobile: full-screen dialog is the surface — drop the card chrome,
1021
- stack vertically, scale up so it feels native to a fullscreen view.
1022
- Slotted content adapts automatically since the slot is display:contents. */
1023
- .dropdown-mode-mobile .dropdown-loading {
1024
- background: transparent;
1025
- border: none;
1026
- box-shadow: none;
1027
- flex: 1;
1028
- flex-direction: column;
1029
- gap: var(--ty-spacing-3);
1030
- padding: var(--ty-spacing-8) var(--ty-spacing-4);
1031
- min-height: 12rem;
1032
- }
1033
-
1034
- .dropdown-mode-mobile .dropdown-loading-spinner {
1035
- width: 2rem;
1036
- height: 2rem;
1037
- }
1038
-
1039
- .dropdown-mode-mobile .dropdown-loading-text {
1040
- font-size: var(--ty-font-base);
1041
- }
1042
-
1043
- .dropdown-options-wrapper.loading .dropdown-options,
1044
- .dropdown-options-wrapper.loading > slot#options-slot {
1045
- display: none;
1046
- }
1047
-
1048
- .dropdown-loading-spinner {
1049
- display: inline-flex;
1050
- align-items: center;
1051
- justify-content: center;
1052
- width: 1.125rem;
1053
- height: 1.125rem;
1054
- flex-shrink: 0;
1055
- animation: ty-dropdown-spin 0.7s linear infinite;
1056
- color: var(--ty-color-primary);
1057
- }
1058
-
1059
- .dropdown-loading-spinner svg {
1060
- width: 100%;
1061
- height: 100%;
1062
- }
1063
-
1064
- .dropdown-loading-text {
1065
- color: var(--ty-text-soft);
1066
- }
1067
-
1068
- @keyframes ty-dropdown-spin {
1069
- to { transform: rotate(360deg); }
1070
- }
1071
-
1072
- @media (prefers-reduced-motion: reduce) {
1073
- .dropdown-loading-spinner {
1074
- animation-duration: 1.6s;
1075
- }
1076
- }
1077
-
1078
- /* Custom scrollbar styles */
1079
- ${customScrollbarStyles}
1080
- `;
1081
- //# sourceMappingURL=dropdown.js.map