@keenmate/web-multiselect 1.5.1 → 1.6.0

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.
@@ -1,259 +0,0 @@
1
- // ==============================================================================
2
- // INPUT & DROPDOWN COMPONENTS
3
- // ==============================================================================
4
- // Input field, toggle icon, count badge, floating hint, dropdown container, and actions
5
-
6
- @use 'variables' as *;
7
-
8
- // ==============================================================================
9
- // INPUT COMPONENT
10
- // ==============================================================================
11
-
12
- // Input wrapper
13
- .ms__input-wrapper {
14
- position: relative;
15
- display: flex;
16
- align-items: center;
17
- }
18
-
19
- // Search input
20
- .ms__input {
21
- box-sizing: border-box;
22
- width: 100%;
23
- font-family: inherit; // Form elements don't inherit font by default
24
- height: var(--ms-input-height, $ms-input-height);
25
- padding: var(--ms-input-padding, $ms-input-padding);
26
- padding-right: var(--ms-input-padding-right, $ms-input-padding-right); // Space for dropdown icon
27
- font-size: var(--ms-input-font-size, $ms-input-font-size);
28
- border: var(--ms-input-border-style, $ms-input-border-style);
29
- border-radius: var(--ms-input-border-radius, $ms-input-border-radius);
30
- background: var(--ms-input-background, $ms-input-bg);
31
- color: var(--ms-input-color, $ms-input-text);
32
- cursor: pointer;
33
- transition: border-color var(--ms-transition-fast, $ms-transition-fast) var(--ms-easing-snappy, $ms-easing-snappy);
34
-
35
- &:hover:not(:focus):not(:disabled) {
36
- border-color: var(--ms-input-border-color-hover, var(--ms-input-border-color, $ms-input-border));
37
- }
38
-
39
- &:focus {
40
- outline: none;
41
- border-color: var(--ms-input-border-color-focus, $ms-input-focus-border-color);
42
- }
43
-
44
- &::placeholder {
45
- color: var(--ms-input-placeholder-color, $ms-input-placeholder-color);
46
- opacity: 0; // Initially hidden until component is ready
47
- transition: opacity var(--ms-transition-fast, $ms-transition-fast) var(--ms-easing-snappy, $ms-easing-snappy);
48
- }
49
-
50
- // Show placeholder only after component is fully initialized
51
- :host([data-ready]) &::placeholder {
52
- opacity: var(--ms-placeholder-opacity, $ms-placeholder-opacity);
53
- }
54
-
55
- // Size variants
56
- &.ms__input--xs {
57
- font-size: var(--ms-input-size-xs-font);
58
- padding: var(--ms-input-size-xs-padding-v) var(--ms-input-size-xs-padding-h);
59
- padding-right: calc(var(--ms-input-size-xs-padding-h) * 2.5);
60
- height: var(--ms-input-size-xs-height);
61
- }
62
-
63
- &.ms__input--sm {
64
- font-size: var(--ms-input-size-sm-font);
65
- padding: var(--ms-input-size-sm-padding-v) var(--ms-input-size-sm-padding-h);
66
- padding-right: calc(var(--ms-input-size-sm-padding-h) * 2.5);
67
- height: var(--ms-input-size-sm-height);
68
- }
69
-
70
- &.ms__input--lg {
71
- font-size: var(--ms-input-size-lg-font);
72
- padding: var(--ms-input-size-lg-padding-v) var(--ms-input-size-lg-padding-h);
73
- padding-right: calc(var(--ms-input-size-lg-padding-h) * 2.5);
74
- height: var(--ms-input-size-lg-height);
75
- }
76
-
77
- &.ms__input--xl {
78
- font-size: var(--ms-input-size-xl-font);
79
- padding: var(--ms-input-size-xl-padding-v) var(--ms-input-size-xl-padding-h);
80
- padding-right: calc(var(--ms-input-size-xl-padding-h) * 2.5);
81
- height: var(--ms-input-size-xl-height);
82
- }
83
- }
84
-
85
- // ==============================================================================
86
- // TOGGLE ICON
87
- // ==============================================================================
88
-
89
- // Dropdown toggle icon
90
- .ms__toggle {
91
- position: absolute;
92
- right: var(--ms-toggle-right, $ms-toggle-right);
93
- top: 50%;
94
- transform: var(--ms-transform-center-y, $ms-transform-center-y);
95
- pointer-events: none;
96
- color: var(--ms-toggle-icon-color, $ms-toggle-color);
97
- transition: transform var(--ms-transition-fast, $ms-transition-fast) var(--ms-easing-snappy, $ms-easing-snappy);
98
-
99
- .ms--open & {
100
- transform: var(--ms-transform-center-y, $ms-transform-center-y) rotate(var(--ms-transform-rotate-180, $ms-transform-rotate-180));
101
- color: var(--ms-toggle-icon-color-open, $ms-toggle-color);
102
- }
103
- }
104
-
105
- // ==============================================================================
106
- // COUNT BADGE (IN INPUT)
107
- // ==============================================================================
108
-
109
- // Count badge (appears next to toggle icon)
110
- .ms__counter {
111
- position: absolute;
112
- right: var(--ms-counter-offset, $ms-counter-offset); // Space for toggle icon
113
- top: 50%;
114
- transform: var(--ms-transform-center-y, $ms-transform-center-y);
115
- padding: var(--ms-counter-padding, $ms-counter-padding);
116
- background: var(--ms-counter-badge-background, $ms-counter-bg);
117
- color: var(--ms-counter-badge-color, $ms-counter-color);
118
- font-size: var(--ms-counter-font-size, $ms-counter-font-size);
119
- font-weight: var(--ms-counter-font-weight, $ms-counter-font-weight);
120
- border-radius: var(--ms-counter-border-radius, $ms-counter-border-radius);
121
- cursor: pointer;
122
- transition: all var(--ms-transition-fast, $ms-transition-fast) var(--ms-easing-snappy, $ms-easing-snappy);
123
-
124
- &:hover {
125
- background: var(--ms-counter-badge-background-hover, $ms-counter-bg-hover);
126
- transform: var(--ms-transform-center-y, $ms-transform-center-y)
127
- scale(var(--ms-transform-scale-hover, $ms-transform-scale-hover));
128
- }
129
- }
130
-
131
- // ==============================================================================
132
- // FLOATING HINT
133
- // ==============================================================================
134
-
135
- // Floating search hint (appears above input)
136
- .ms__hint {
137
- display: none;
138
- position: absolute;
139
- z-index: var(--ms-z-index-popover, $ms-z-index-popover);
140
- padding: var(--ms-hint-padding, $ms-hint-padding);
141
- background: var(--ms-hint-background, $ms-hint-bg);
142
- border: var(--ms-hint-border, $ms-hint-border);
143
- border-radius: var(--ms-hint-border-radius, $ms-hint-border-radius);
144
- box-shadow: var(--ms-hint-box-shadow, $ms-hint-box-shadow);
145
- font-size: var(--ms-hint-font-size, $ms-hint-font-size);
146
- color: var(--ms-hint-color, $ms-hint-color);
147
- line-height: var(--ms-line-height-relaxed, $ms-line-height-relaxed);
148
- max-width: 100%;
149
-
150
- &--visible {
151
- display: block;
152
- }
153
- }
154
-
155
- // ==============================================================================
156
- // DROPDOWN CONTAINER
157
- // ==============================================================================
158
-
159
- // Floating dropdown (appears below input)
160
- .ms__dropdown {
161
- display: none;
162
- position: absolute;
163
- font-family: inherit; // Ensure font inherits from container
164
- z-index: var(--ms-z-index-dropdown, $ms-z-index-dropdown);
165
- background: var(--ms-dropdown-background, $ms-dropdown-bg);
166
- border: var(--ms-dropdown-border, $ms-dropdown-border);
167
- border-radius: var(--ms-dropdown-border-radius, $ms-dropdown-border-radius);
168
- box-shadow: var(--ms-dropdown-box-shadow, $ms-dropdown-box-shadow);
169
- max-height: var(--ms-options-max-height, $ms-options-max-height);
170
- overflow-y: auto;
171
- overscroll-behavior: contain;
172
- touch-action: pan-y;
173
- -webkit-overflow-scrolling: touch;
174
- color: var(--ms-dropdown-text-color, $ms-option-color);
175
-
176
- // Scrollbar styling
177
- scrollbar-width: thin; // Firefox
178
- scrollbar-color: var(--ms-scrollbar-thumb-bg, $ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg, $ms-scrollbar-track-bg);
179
-
180
- &::-webkit-scrollbar {
181
- width: var(--ms-scrollbar-width, $ms-scrollbar-width);
182
- }
183
-
184
- &::-webkit-scrollbar-track {
185
- background: var(--ms-scrollbar-track-bg, $ms-scrollbar-track-bg);
186
- }
187
-
188
- &::-webkit-scrollbar-thumb {
189
- background: var(--ms-scrollbar-thumb-bg, $ms-scrollbar-thumb-bg);
190
- border-radius: var(--ms-scrollbar-thumb-border-radius, $ms-scrollbar-thumb-border-radius);
191
- }
192
-
193
- &::-webkit-scrollbar-thumb:hover {
194
- background: var(--ms-scrollbar-thumb-bg-hover, $ms-scrollbar-thumb-bg-hover);
195
- }
196
-
197
- &--visible {
198
- display: block;
199
- }
200
-
201
- &--virtual {
202
- // In virtual scroll mode, let the options container handle scrolling
203
- overflow-y: visible;
204
- max-height: none;
205
- }
206
- }
207
-
208
- // ==============================================================================
209
- // DROPDOWN ACTIONS
210
- // ==============================================================================
211
-
212
- // Dropdown actions (Select All / Clear All)
213
- .ms__actions {
214
- display: flex;
215
- flex-wrap: nowrap;
216
- gap: var(--ms-actions-gap, $ms-actions-gap);
217
- padding: var(--ms-actions-padding, $ms-actions-padding);
218
- border-bottom: var(--ms-actions-border-bottom, $ms-actions-border-bottom);
219
-
220
- &--wrap {
221
- flex-wrap: wrap;
222
- }
223
-
224
- &--sticky {
225
- position: sticky;
226
- top: 0;
227
- z-index: var(--ms-z-index-sticky, $ms-z-index-sticky);
228
- background: var(--ms-actions-background, $ms-actions-bg);
229
- }
230
- }
231
-
232
- .ms__action-btn {
233
- flex: 1;
234
- font-family: inherit; // Form elements don't inherit font by default
235
- padding: var(--ms-action-btn-padding, $ms-action-btn-padding);
236
- font-size: var(--ms-action-btn-font-size, $ms-action-btn-font-size);
237
- border: var(--ms-action-btn-border, $ms-action-btn-border);
238
- border-radius: var(--ms-action-btn-border-radius, $ms-action-btn-border-radius);
239
- background: var(--ms-action-button-background, $ms-action-btn-bg);
240
- color: var(--ms-action-button-color, $ms-action-btn-color);
241
- cursor: pointer;
242
- transition: all var(--ms-transition-fast, $ms-transition-fast) var(--ms-easing-snappy, $ms-easing-snappy);
243
-
244
- &:hover {
245
- background: var(--ms-action-button-background-hover, $ms-action-btn-bg-hover);
246
- border-color: var(--ms-action-button-border-color-hover, $ms-action-btn-border-color-hover);
247
- }
248
-
249
- &:active {
250
- transform: scale(var(--ms-transform-scale-active, $ms-transform-scale-active));
251
- }
252
-
253
- &:disabled,
254
- &[disabled] {
255
- opacity: var(--ms-disabled-opacity, $ms-disabled-opacity);
256
- cursor: not-allowed;
257
- pointer-events: none;
258
- }
259
- }
@@ -1,36 +0,0 @@
1
- // ==============================================================================
2
- // MODIFIERS & VARIANTS
3
- // ==============================================================================
4
- // State modifiers (disabled, no-checkboxes)
5
- // Note: Size variants removed - use --ms-rem for global scaling instead
6
-
7
- @use 'variables' as *;
8
-
9
- // ==============================================================================
10
- // STATE MODIFIERS
11
- // ==============================================================================
12
-
13
- // Disabled state
14
- .ms--disabled {
15
- .ms__input {
16
- opacity: var(--ms-disabled-input-opacity, $ms-disabled-input-opacity);
17
- cursor: not-allowed;
18
- background: var(--ms-input-bg-disabled, $ms-input-bg-disabled);
19
- }
20
-
21
- .ms__toggle {
22
- opacity: var(--ms-disabled-input-opacity, $ms-disabled-input-opacity);
23
- }
24
- }
25
-
26
- // No checkboxes modifier (for simple select mode)
27
- .ms--no-checkboxes {
28
- .ms__option {
29
- gap: 0; // Remove gap since there's no checkbox
30
- padding-left: var(--ms-option-padding-h, $ms-option-padding-h); // Adjust padding
31
- }
32
-
33
- .ms__option-content {
34
- padding-left: 0; // No extra padding needed
35
- }
36
- }
@@ -1,358 +0,0 @@
1
- // ==============================================================================
2
- // OPTIONS & CONTENT
3
- // ==============================================================================
4
- // Options list, groups, checkbox, option content, icons, text, and states
5
-
6
- @use 'variables' as *;
7
-
8
- // ==============================================================================
9
- // OPTIONS CONTAINER
10
- // ==============================================================================
11
-
12
- // Options container
13
- .ms__options {
14
- padding: var(--ms-options-padding, $ms-options-padding);
15
-
16
- // Scrollbar styling
17
- scrollbar-width: thin; // Firefox
18
- scrollbar-color: var(--ms-scrollbar-thumb-bg, $ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg, $ms-scrollbar-track-bg);
19
-
20
- &::-webkit-scrollbar {
21
- width: var(--ms-scrollbar-width, $ms-scrollbar-width);
22
- }
23
-
24
- &::-webkit-scrollbar-track {
25
- background: var(--ms-scrollbar-track-bg, $ms-scrollbar-track-bg);
26
- }
27
-
28
- &::-webkit-scrollbar-thumb {
29
- background: var(--ms-scrollbar-thumb-bg, $ms-scrollbar-thumb-bg);
30
- border-radius: var(--ms-scrollbar-thumb-border-radius, $ms-scrollbar-thumb-border-radius);
31
- }
32
-
33
- &::-webkit-scrollbar-thumb:hover {
34
- background: var(--ms-scrollbar-thumb-bg-hover, $ms-scrollbar-thumb-bg-hover);
35
- }
36
- }
37
-
38
- // Virtual scroll - enforce consistent heights
39
- .ms__options--virtual {
40
- // overflow and position are set inline for proper dimensions
41
-
42
- .ms__option {
43
- height: var(--ms-option-height, 50px);
44
- min-height: var(--ms-option-height, 50px);
45
- max-height: var(--ms-option-height, 50px);
46
- overflow: hidden;
47
- box-sizing: border-box;
48
- }
49
- }
50
-
51
- // ==============================================================================
52
- // GROUPS
53
- // ==============================================================================
54
-
55
- // Group
56
- .ms__group {
57
- & + & {
58
- border-top: var(--ms-group-border-top, $ms-group-border-top);
59
- margin-top: var(--ms-group-margin-top, $ms-group-margin-top);
60
- padding-top: var(--ms-group-padding-top, $ms-group-padding-top);
61
- }
62
- }
63
-
64
- // Group label
65
- .ms__group-label {
66
- padding: var(--ms-group-label-padding, $ms-group-label-padding);
67
- font-size: var(--ms-group-label-font-size, $ms-group-label-font-size);
68
- font-weight: var(--ms-group-label-font-weight, $ms-group-label-font-weight);
69
- color: var(--ms-group-label-color, $ms-group-label-color);
70
- text-transform: var(--ms-group-label-transform, $ms-group-label-transform);
71
- letter-spacing: var(--ms-group-label-letter-spacing, $ms-group-label-letter-spacing);
72
- }
73
-
74
- // ==============================================================================
75
- // INDIVIDUAL OPTION
76
- // ==============================================================================
77
-
78
- // Individual option
79
- .ms__option {
80
- display: flex;
81
- align-items: var(--ms-checkbox-align, flex-start); // Support checkbox alignment
82
- gap: var(--ms-option-gap, $ms-option-gap);
83
- padding: var(--ms-option-padding, $ms-option-padding);
84
- color: var(--ms-option-text-color, $ms-option-color);
85
- background: var(--ms-option-background, $ms-option-bg);
86
- cursor: pointer;
87
-
88
- &:hover {
89
- background: var(--ms-option-background-hover, $ms-option-bg-hover);
90
- color: var(--ms-option-color-hover, inherit);
91
- }
92
-
93
- &--focused {
94
- background: var(--ms-option-background-focused, $ms-option-bg-focused);
95
- color: var(--ms-option-color-focused, inherit);
96
- outline: var(--ms-option-outline-focused, $ms-option-outline-focused);
97
- outline-offset: var(--ms-option-focus-outline-offset, $ms-option-focus-outline-offset);
98
- }
99
-
100
- &--matched {
101
- background: var(--ms-option-background-matched, $ms-option-bg-matched);
102
- color: var(--ms-option-color-matched, inherit);
103
- border-left: var(--ms-option-border-matched, $ms-option-border-matched);
104
- }
105
-
106
- &--selected {
107
- background: var(--ms-option-background-selected, $ms-option-bg-selected);
108
- color: var(--ms-option-color-selected, inherit);
109
-
110
- &:hover {
111
- background: var(--ms-option-bg-selected-hover, var(--ms-option-background-selected, $ms-option-bg-selected));
112
- color: var(--ms-option-color-selected-hover, var(--ms-option-color-selected, inherit));
113
- }
114
- }
115
-
116
- &--disabled {
117
- opacity: var(--ms-disabled-opacity, $ms-disabled-opacity);
118
- cursor: not-allowed;
119
-
120
- &:hover {
121
- background: var(--ms-option-background, $ms-option-bg);
122
- }
123
- }
124
-
125
- // Focused + Hover
126
- &--focused:hover {
127
- background: var(--ms-option-bg-focused-hover, $ms-option-bg-focused-hover);
128
- color: var(--ms-option-color-focused-hover, var(--ms-option-color-focused, var(--ms-option-text-color, $ms-option-color)));
129
- }
130
-
131
- // Matched + Hover
132
- &--matched:hover {
133
- background: var(--ms-option-bg-matched-hover, $ms-option-bg-matched-hover);
134
- color: var(--ms-option-color-matched-hover, var(--ms-option-color-matched, var(--ms-option-text-color, $ms-option-color)));
135
- }
136
-
137
- // Selected + Focused
138
- &--selected#{&}--focused {
139
- background: var(--ms-option-bg-selected-focused, $ms-option-bg-selected-focused);
140
- color: var(--ms-option-color-selected-focused, var(--ms-option-color-selected, var(--ms-option-text-color, $ms-option-color)));
141
- outline: var(--ms-option-outline-focused, $ms-option-outline-focused);
142
- outline-offset: var(--ms-option-focus-outline-offset, $ms-option-focus-outline-offset);
143
- }
144
-
145
- // Selected + Matched
146
- &--selected#{&}--matched {
147
- background: var(--ms-option-bg-selected-matched, $ms-option-bg-selected-matched);
148
- color: var(--ms-option-color-selected-matched, var(--ms-option-color-selected, var(--ms-option-text-color, $ms-option-color)));
149
- border-left: var(--ms-option-border-matched, $ms-option-border-matched);
150
- }
151
-
152
- // Disabled + Selected
153
- &--disabled#{&}--selected {
154
- background: var(--ms-option-bg-disabled-selected, $ms-option-bg-disabled-selected);
155
- color: var(--ms-option-color-disabled-selected, var(--ms-option-color-selected, var(--ms-option-text-color, $ms-option-color)));
156
- }
157
-
158
- // Disabled + Focused (prevents focus outline on disabled items)
159
- &--disabled#{&}--focused {
160
- outline: none;
161
- }
162
-
163
- // Checkbox alignment variants (center is default, defined in _css-variables.scss)
164
- &[data-checkbox-align="top"] {
165
- --ms-checkbox-align: flex-start;
166
- }
167
-
168
- &[data-checkbox-align="bottom"] {
169
- --ms-checkbox-align: flex-end;
170
- }
171
- }
172
-
173
- // ==============================================================================
174
- // CHECKBOX (Custom Styled)
175
- // ==============================================================================
176
- // Uses a hidden native checkbox with a custom styled pseudo-element overlay.
177
- // This allows full control over background, border, and checkmark colors.
178
-
179
- .ms__checkbox {
180
- // Hide native checkbox but keep it accessible
181
- appearance: none;
182
- -webkit-appearance: none;
183
- -moz-appearance: none;
184
- flex-shrink: 0;
185
- position: relative;
186
- margin-top: var(--ms-checkbox-margin-top, $ms-checkbox-margin-top);
187
- margin-right: var(--ms-checkbox-margin-right, $ms-checkbox-margin-right);
188
- margin-bottom: var(--ms-checkbox-margin-bottom, $ms-checkbox-margin-bottom);
189
- margin-left: var(--ms-checkbox-margin-left, $ms-checkbox-margin-left);
190
- width: var(--ms-checkbox-size, $ms-checkbox-size);
191
- height: var(--ms-checkbox-size, $ms-checkbox-size);
192
- transform: scale(var(--ms-checkbox-scale, $ms-checkbox-scale));
193
- transform-origin: top left;
194
- cursor: pointer;
195
-
196
- // Custom checkbox appearance
197
- background: var(--ms-checkbox-bg, $ms-checkbox-bg);
198
- border: var(--ms-checkbox-border, $ms-checkbox-border);
199
- border-radius: var(--ms-checkbox-border-radius, $ms-checkbox-border-radius);
200
- transition: background-color 0.15s ease, border-color 0.15s ease;
201
-
202
- // Checkmark using ::after pseudo-element
203
- &::after {
204
- content: '';
205
- position: absolute;
206
- display: none;
207
- // Checkmark positioning (centered, slightly offset for visual balance)
208
- left: 50%;
209
- top: 45%;
210
- width: 30%;
211
- height: 55%;
212
- transform: translate(-50%, -50%) rotate(45deg);
213
- // Checkmark shape (right and bottom borders form the check)
214
- border: solid var(--ms-checkbox-checkmark-color, $ms-checkbox-checkmark-color);
215
- border-width: 0 2px 2px 0;
216
- }
217
-
218
- // Hover state
219
- &:hover:not(:disabled) {
220
- border-color: var(--ms-checkbox-hover-border-color, $ms-checkbox-hover-border-color);
221
- }
222
-
223
- // Checked state
224
- &:checked {
225
- background: var(--ms-checkbox-checked-bg, $ms-checkbox-checked-bg);
226
- border: var(--ms-checkbox-checked-border, $ms-checkbox-checked-border);
227
-
228
- &::after {
229
- display: block;
230
- }
231
- }
232
-
233
- // Checked + Hover
234
- &:checked:hover:not(:disabled) {
235
- background: var(--ms-checkbox-checked-bg-hover, $ms-checkbox-checked-bg-hover);
236
- border-color: var(--ms-checkbox-checked-border-color-hover, $ms-checkbox-checked-border-color-hover);
237
- }
238
-
239
- // Focus state (accessibility)
240
- &:focus-visible {
241
- outline: 2px solid var(--ms-checkbox-checked-bg, $ms-checkbox-checked-bg);
242
- outline-offset: 2px;
243
- }
244
-
245
- // Disabled state
246
- &:disabled {
247
- cursor: not-allowed;
248
- background: var(--ms-checkbox-disabled-bg, $ms-checkbox-disabled-bg);
249
- border: var(--ms-checkbox-disabled-border, $ms-checkbox-disabled-border);
250
- opacity: 0.6;
251
-
252
- &:checked {
253
- background: var(--ms-checkbox-disabled-bg, $ms-checkbox-disabled-bg);
254
- }
255
- }
256
-
257
- .ms__option--disabled & {
258
- cursor: not-allowed;
259
- }
260
- }
261
-
262
- // ==============================================================================
263
- // OPTION CONTENT
264
- // ==============================================================================
265
-
266
- // Option content (rich content wrapper)
267
- .ms__option-content {
268
- flex: 1;
269
- display: flex;
270
- align-items: center;
271
- gap: var(--ms-option-content-gap, $ms-option-content-gap);
272
- min-width: 0; // Allow text truncation
273
- }
274
-
275
- // Option icon/SVG
276
- .ms__option-icon {
277
- flex-shrink: 0;
278
- width: var(--ms-option-icon-size, $ms-option-icon-size);
279
- height: var(--ms-option-icon-size, $ms-option-icon-size);
280
- display: flex;
281
- align-items: center;
282
- justify-content: center;
283
- font-size: var(--ms-option-icon-font-size, $ms-option-icon-font-size);
284
-
285
- svg {
286
- width: 100%;
287
- height: 100%;
288
- fill: currentColor;
289
- }
290
- }
291
-
292
- // Option text container
293
- .ms__option-text {
294
- flex: 1;
295
- min-width: 0;
296
- }
297
-
298
- // Option title/main text
299
- .ms__option-title {
300
- font-size: var(--ms-option-title-font-size, $ms-option-title-font-size);
301
- color: var(--ms-option-title-color, $ms-option-title-color);
302
- line-height: var(--ms-line-height-relaxed, $ms-line-height-relaxed);
303
-
304
- // Highlight matched text
305
- mark {
306
- background: var(--ms-option-mark-background, $ms-option-mark-bg);
307
- color: var(--ms-option-mark-color, $ms-option-mark-color);
308
- font-weight: var(--ms-option-mark-font-weight, $ms-option-mark-font-weight);
309
- }
310
- }
311
-
312
- // Option subtitle (multiline support)
313
- .ms__option-subtitle {
314
- margin-top: var(--ms-option-subtitle-margin-top, $ms-option-subtitle-margin-top);
315
- font-size: var(--ms-option-subtitle-font-size, $ms-option-subtitle-font-size);
316
- color: var(--ms-option-subtitle-color, $ms-option-subtitle-color);
317
- line-height: var(--ms-option-subtitle-line-height, $ms-option-subtitle-line-height);
318
-
319
- // Subtitle color states (for solid background themes)
320
- .ms__option:hover & {
321
- color: var(--ms-option-subtitle-color-hover, var(--ms-option-subtitle-color, $ms-option-subtitle-color));
322
- }
323
-
324
- .ms__option--selected & {
325
- color: var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color, $ms-option-subtitle-color));
326
- }
327
-
328
- .ms__option--selected:hover & {
329
- color: var(--ms-option-subtitle-color-selected-hover, var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color, $ms-option-subtitle-color)));
330
- }
331
- }
332
-
333
- // ==============================================================================
334
- // STATES
335
- // ==============================================================================
336
-
337
- // Empty state
338
- .ms__empty {
339
- padding: var(--ms-empty-padding, $ms-empty-padding);
340
- text-align: center;
341
- font-size: var(--ms-empty-font-size, $ms-empty-font-size);
342
- color: var(--ms-empty-color, $ms-empty-color);
343
- }
344
-
345
- // Loading state
346
- .ms__loader {
347
- display: flex;
348
- flex-direction: column;
349
- align-items: center;
350
- justify-content: center;
351
- padding: var(--ms-loader-padding, $ms-loader-padding);
352
- gap: var(--ms-loader-gap, $ms-loader-gap);
353
- }
354
-
355
- .ms__loading-text {
356
- font-size: var(--ms-loading-text-font-size, $ms-loading-text-font-size);
357
- color: var(--ms-loading-color, $ms-loading-text-color);
358
- }