@diabolic/hangover 0.1.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.
@@ -0,0 +1,547 @@
1
+ :root {
2
+ --hangover-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
3
+ --hangover-font-size-base: 14px;
4
+ --hangover-font-size-sm: 12px;
5
+ --hangover-color-text: #0a1551;
6
+ --hangover-color-text-muted: #8a9ab5;
7
+ --hangover-color-bg-panel: #ffffff;
8
+ --hangover-color-bg-title: #eceef5;
9
+ --hangover-color-bg-nav: #F5F6FC;
10
+ --hangover-color-bg-nav-active: #EAECF5;
11
+ --hangover-color-bg-nav-hover: #E0E3EF;
12
+ --hangover-color-bg-hover: #f3f3fe;
13
+ --hangover-color-bg-hover-dark: #eaeaf9;
14
+ --hangover-color-bg-selected: #eef2ff;
15
+ --hangover-color-bg-checked: #EDF8FF;
16
+ --hangover-color-border: #e2e8f0;
17
+ --hangover-color-search-ph: #979DC6;
18
+ --hangover-color-search-icon: #343C6A;
19
+ --hangover-color-icon: #343C6A;
20
+ --hangover-color-focus: #3b82f6;
21
+ --hangover-group-default-color: #16a34a;
22
+ --hangover-radius-panel: 4px;
23
+ --hangover-radius-item: 4px;
24
+ --hangover-radius-nav-item: 4px;
25
+ --hangover-shadow-panel:
26
+ 0 8px 16px 0 rgba(84, 95, 111, 0.16),
27
+ 0 2px 4px 0 rgba(37, 45, 91, 0.04);
28
+ --hangover-nav-width: 172px;
29
+ --hangover-content-max-width: 240px;
30
+ --hangover-list-max-height: 280px;
31
+ --hangover-transition: 330ms ease;
32
+ }
33
+
34
+ .hangoverDropdown--dark {
35
+ --hangover-color-text: #dde1f5;
36
+ --hangover-color-text-muted: #5a6888;
37
+ --hangover-color-bg-panel: #1a1d2e;
38
+ --hangover-color-bg-title: #22253a;
39
+ --hangover-color-bg-nav: #1e2235;
40
+ --hangover-color-bg-nav-hover: #1c3a5c;
41
+ --hangover-color-bg-nav-active: #162f50;
42
+ --hangover-color-bg-hover: #22253a;
43
+ --hangover-color-bg-hover-dark: #272b42;
44
+ --hangover-color-bg-selected: #1c2d55;
45
+ --hangover-color-bg-checked: #1a3050;
46
+ --hangover-color-border: #2a2f4a;
47
+ --hangover-color-search-ph: #4a5070;
48
+ --hangover-color-search-icon: #7880b0;
49
+ --hangover-color-icon: #7880b0;
50
+ --hangover-group-default-color: #22c55e;
51
+ --hangover-shadow-panel:
52
+ 0 8px 24px 0 rgba(0, 0, 0, 0.56),
53
+ 0 2px 6px 0 rgba(0, 0, 0, 0.40);
54
+ }
55
+ .hangoverDropdown--dark .hangoverDropdown-list:hover, .hangoverDropdown--dark .hangoverDropdown-list:focus-within {
56
+ scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
57
+ }
58
+ .hangoverDropdown--dark .hangoverDropdown-list:hover::-webkit-scrollbar-thumb, .hangoverDropdown--dark .hangoverDropdown-list:focus-within::-webkit-scrollbar-thumb {
59
+ background: rgba(255, 255, 255, 0.18);
60
+ }
61
+
62
+ @keyframes hangoverDropdownIn {
63
+ from {
64
+ opacity: 0;
65
+ transform: translateY(-6px);
66
+ }
67
+ to {
68
+ opacity: 1;
69
+ transform: translateY(0);
70
+ }
71
+ }
72
+ .hangoverDropdown {
73
+ display: inline-block;
74
+ position: relative;
75
+ font-family: var(--hangover-font-family);
76
+ font-size: var(--hangover-font-size-base);
77
+ font-weight: 400;
78
+ line-height: 16px;
79
+ color: var(--hangover-color-text);
80
+ }
81
+ .hangoverDropdown-panel {
82
+ width: max-content;
83
+ background: var(--hangover-color-bg-panel);
84
+ border: 1px solid var(--hangover-color-border);
85
+ border-radius: var(--hangover-radius-panel);
86
+ box-shadow: var(--hangover-shadow-panel);
87
+ display: flex;
88
+ flex-direction: column;
89
+ overflow: hidden;
90
+ max-height: calc(100vh - 32px);
91
+ box-sizing: border-box;
92
+ font-family: var(--hangover-font-family);
93
+ font-size: var(--hangover-font-size-base);
94
+ color: var(--hangover-color-text);
95
+ animation: hangoverDropdownIn 330ms ease;
96
+ }
97
+ .hangoverDropdown-panel.hasNoNav {
98
+ min-width: unset;
99
+ width: 240px;
100
+ }
101
+ .hangoverDropdown-panel-inner {
102
+ display: flex;
103
+ flex: 1;
104
+ flex-direction: row;
105
+ overflow: hidden;
106
+ }
107
+ .hangoverDropdown-panel-body {
108
+ display: flex;
109
+ flex: 1;
110
+ overflow: hidden;
111
+ }
112
+ .hangoverDropdown-panel-title {
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: space-between;
116
+ font-size: var(--hangover-font-size-sm);
117
+ font-weight: 400;
118
+ text-transform: uppercase;
119
+ color: var(--hangover-color-text-muted);
120
+ user-select: none;
121
+ position: static;
122
+ border-bottom: 1px solid var(--hangover-color-border);
123
+ padding: 10px 12px 9px;
124
+ background: var(--hangover-color-bg-title);
125
+ }
126
+ .hangoverDropdown-column {
127
+ display: flex;
128
+ flex-direction: column;
129
+ flex: 1;
130
+ min-width: 0;
131
+ }
132
+ .hangoverDropdown-column.forItems {
133
+ width: calc(100vw - 80px);
134
+ max-width: var(--hangover-content-max-width);
135
+ }
136
+ .hangoverDropdown-column.forNavigation {
137
+ width: var(--hangover-nav-width);
138
+ min-width: var(--hangover-nav-width);
139
+ border-right: 1px solid var(--hangover-color-border);
140
+ background: var(--hangover-color-bg-nav);
141
+ padding: 8px;
142
+ gap: 2px;
143
+ box-sizing: border-box;
144
+ flex-shrink: 0;
145
+ flex: none;
146
+ transition: width 330ms ease, min-width 330ms ease;
147
+ }
148
+ .hangoverDropdown-column.forNavigation .hangoverDropdown-nav-item {
149
+ transition: width 330ms ease, padding 330ms ease, justify-content 330ms ease, gap 330ms ease, background 330ms ease;
150
+ }
151
+ .hangoverDropdown-column.forNavigation .hangoverDropdown-nav-item-label {
152
+ max-width: 200px;
153
+ opacity: 1;
154
+ overflow: hidden;
155
+ white-space: nowrap;
156
+ transition: opacity 330ms ease, max-width 330ms ease;
157
+ }
158
+ .hangoverDropdown-column.forNavigation.isCollapsed {
159
+ width: 48px;
160
+ min-width: 48px;
161
+ padding: 8px 0;
162
+ align-items: center;
163
+ }
164
+ .hangoverDropdown-column.forNavigation.isCollapsed .hangoverDropdown-nav {
165
+ align-items: center;
166
+ }
167
+ .hangoverDropdown-column.forNavigation.isCollapsed .hangoverDropdown-nav-item {
168
+ justify-content: center;
169
+ padding: 8px;
170
+ gap: 0;
171
+ width: 36px;
172
+ align-self: auto;
173
+ }
174
+ .hangoverDropdown-column.forNavigation.isCollapsed .hangoverDropdown-nav-item-label {
175
+ max-width: 0;
176
+ opacity: 0;
177
+ }
178
+ .hangoverDropdown-nav {
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: 6px;
182
+ width: 100%;
183
+ }
184
+ .hangoverDropdown-nav-item {
185
+ display: flex;
186
+ align-items: center;
187
+ gap: 8px;
188
+ width: 100%;
189
+ padding: 8px;
190
+ border: none;
191
+ background: transparent;
192
+ border-radius: var(--hangover-radius-nav-item);
193
+ cursor: pointer;
194
+ text-align: left;
195
+ font-family: var(--hangover-font-family);
196
+ font-size: var(--hangover-font-size-base);
197
+ font-weight: 500;
198
+ line-height: 16px;
199
+ color: var(--hangover-color-text);
200
+ transition: background var(--hangover-transition);
201
+ box-sizing: border-box;
202
+ }
203
+ .hangoverDropdown-nav-item:hover {
204
+ background: var(--hangover-color-bg-nav-hover);
205
+ }
206
+ .hangoverDropdown-nav-item.isActive {
207
+ background: var(--hangover-color-bg-nav-active);
208
+ color: var(--hangover-color-text);
209
+ }
210
+ .hangoverDropdown-nav-item.isActive:hover {
211
+ background: var(--hangover-color-bg-nav-hover);
212
+ }
213
+ .hangoverDropdown-nav-item-icon {
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ width: 20px;
218
+ height: 20px;
219
+ flex-shrink: 0;
220
+ color: currentColor;
221
+ }
222
+ .hangoverDropdown-nav-item-icon svg {
223
+ width: 20px;
224
+ height: 20px;
225
+ }
226
+ .hangoverDropdown-nav-item-label {
227
+ flex: 1;
228
+ overflow: hidden;
229
+ white-space: nowrap;
230
+ text-overflow: ellipsis;
231
+ }
232
+ .isTabMode.isAllActive > .hangoverDropdown-section, .hasNoNav .hangoverDropdown-list > .hangoverDropdown-section {
233
+ padding-top: 8px;
234
+ }
235
+ .isTabMode.isAllActive > .hangoverDropdown-section:last-child, .hasNoNav .hangoverDropdown-list > .hangoverDropdown-section:last-child {
236
+ padding-bottom: 8px;
237
+ }
238
+ .hangoverDropdown-panel:not(.hasNoNav) .hangoverDropdown-list:not(.isTabMode) > .hangoverDropdown-section:last-child {
239
+ padding-bottom: 8px;
240
+ }
241
+ .hangoverDropdown-section-title {
242
+ display: flex;
243
+ align-items: center;
244
+ justify-content: space-between;
245
+ padding: 8px 8px 6px;
246
+ font-size: var(--hangover-font-size-sm);
247
+ font-weight: 400;
248
+ text-transform: uppercase;
249
+ color: var(--hangover-color-text-muted);
250
+ position: sticky;
251
+ top: 0;
252
+ z-index: 1;
253
+ background: var(--hangover-color-bg-panel);
254
+ user-select: none;
255
+ }
256
+ .hangoverDropdown-section-title.isClickable {
257
+ cursor: pointer;
258
+ transition: color var(--hangover-transition);
259
+ }
260
+ .hangoverDropdown-section-title.isClickable:hover {
261
+ color: var(--hangover-color-text);
262
+ }
263
+ .hangoverDropdown-search {
264
+ display: flex;
265
+ align-items: center;
266
+ gap: 4px;
267
+ padding: 10px 12px;
268
+ border-bottom: 1px solid var(--hangover-color-border);
269
+ box-sizing: border-box;
270
+ flex-shrink: 0;
271
+ cursor: text;
272
+ }
273
+ .hangoverDropdown-search-icon {
274
+ display: flex;
275
+ align-items: center;
276
+ color: var(--hangover-color-search-icon);
277
+ flex-shrink: 0;
278
+ width: 20px;
279
+ height: 20px;
280
+ }
281
+ .hangoverDropdown-search-input {
282
+ flex: 1;
283
+ border: none;
284
+ outline: none;
285
+ background: transparent;
286
+ font-size: var(--hangover-font-size-base);
287
+ color: var(--hangover-color-text);
288
+ font-family: var(--hangover-font-family);
289
+ }
290
+ .hangoverDropdown-search-input::placeholder {
291
+ color: var(--hangover-color-search-ph);
292
+ }
293
+ .hangoverDropdown-search-input:disabled {
294
+ cursor: not-allowed;
295
+ }
296
+ .hangoverDropdown-search.isDisabled {
297
+ opacity: 0.5;
298
+ cursor: not-allowed;
299
+ pointer-events: none;
300
+ }
301
+ .hangoverDropdown-content-empty {
302
+ margin: 8px;
303
+ margin-top: 8px;
304
+ margin-bottom: 4px;
305
+ }
306
+ .hangoverDropdown-list {
307
+ flex: 1;
308
+ display: flex;
309
+ flex-direction: column;
310
+ overflow-y: overlay;
311
+ overscroll-behavior: none;
312
+ max-height: var(--hangover-list-max-height);
313
+ box-sizing: border-box;
314
+ scrollbar-width: none;
315
+ scrollbar-color: transparent transparent;
316
+ transition: scrollbar-color 330ms ease;
317
+ }
318
+ .hangoverDropdown-list:hover, .hangoverDropdown-list:focus-within {
319
+ scrollbar-color: rgba(0, 0, 0, 0.18) transparent;
320
+ }
321
+ .hangoverDropdown-list::-webkit-scrollbar {
322
+ width: 4px;
323
+ }
324
+ .hangoverDropdown-list::-webkit-scrollbar-track {
325
+ background: transparent;
326
+ }
327
+ .hangoverDropdown-list::-webkit-scrollbar-thumb {
328
+ background: transparent;
329
+ border-radius: 2px;
330
+ transition: background 330ms ease;
331
+ }
332
+ .hangoverDropdown-list:hover::-webkit-scrollbar-thumb, .hangoverDropdown-list:focus-within::-webkit-scrollbar-thumb {
333
+ background: rgba(0, 0, 0, 0.18);
334
+ }
335
+ .hangoverDropdown-group {
336
+ margin-inline: 8px;
337
+ margin-bottom: 4px;
338
+ }
339
+ .hangoverDropdown-group:last-child {
340
+ margin-bottom: 0;
341
+ }
342
+ .hangoverDropdown-group.isCollapsed:last-child {
343
+ margin-bottom: 4px;
344
+ }
345
+ .hangoverDropdown-group-header {
346
+ display: flex;
347
+ align-items: stretch;
348
+ box-sizing: border-box;
349
+ border-radius: var(--hangover-radius-item);
350
+ background: var(--hangover-color-bg-hover);
351
+ cursor: pointer;
352
+ user-select: none;
353
+ transition: background var(--hangover-transition);
354
+ overflow: hidden;
355
+ }
356
+ .hangoverDropdown-group-header:hover {
357
+ background: var(--hangover-color-bg-hover-dark);
358
+ }
359
+ .hangoverDropdown-group-header-accent {
360
+ width: 6px;
361
+ flex-shrink: 0;
362
+ background: var(--hangover-group-color, var(--hangover-group-default-color));
363
+ }
364
+ .hangoverDropdown-group-header-body {
365
+ display: flex;
366
+ flex: 1;
367
+ min-width: 0;
368
+ padding: 10px 6px;
369
+ box-sizing: border-box;
370
+ }
371
+ .hangoverDropdown-group-header-inner {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: 8px;
375
+ flex: 1;
376
+ min-width: 0;
377
+ }
378
+ .hangoverDropdown-group-header-icon {
379
+ display: flex;
380
+ align-items: center;
381
+ justify-content: center;
382
+ width: 16px;
383
+ height: 16px;
384
+ flex-shrink: 0;
385
+ color: currentColor;
386
+ }
387
+ .hangoverDropdown-group-header-icon svg {
388
+ width: 16px;
389
+ height: 16px;
390
+ }
391
+ .hangoverDropdown-group-header-label {
392
+ flex: 1;
393
+ min-width: 0;
394
+ font-size: var(--hangover-font-size-base);
395
+ font-weight: 400;
396
+ line-height: 16px;
397
+ color: var(--hangover-color-text);
398
+ display: -webkit-box;
399
+ -webkit-line-clamp: 2;
400
+ -webkit-box-orient: vertical;
401
+ overflow: hidden;
402
+ }
403
+ .hangoverDropdown-group-header-chevron {
404
+ display: flex;
405
+ align-items: center;
406
+ color: var(--hangover-color-text);
407
+ flex-shrink: 0;
408
+ transition: transform var(--hangover-transition);
409
+ }
410
+ .hangoverDropdown-group-header.isExpanded .hangoverDropdown-group-header-chevron {
411
+ transform: rotate(180deg);
412
+ }
413
+ .hangoverDropdown-group-items-wrap {
414
+ display: grid;
415
+ grid-template-rows: 0fr;
416
+ overflow: hidden;
417
+ transition: grid-template-rows 330ms ease;
418
+ }
419
+ .hangoverDropdown-group-items-wrap.isExpanded {
420
+ grid-template-rows: 1fr;
421
+ }
422
+ .hangoverDropdown-group-items {
423
+ padding: 0;
424
+ min-height: 0;
425
+ display: flex;
426
+ flex-direction: column;
427
+ gap: 4px;
428
+ }
429
+ .hangoverDropdown-group-items .hangoverDropdown-item {
430
+ margin-inline: 0;
431
+ padding-left: 12px;
432
+ }
433
+ .hangoverDropdown-group-items-wrap.isExpanded .hangoverDropdown-group-items {
434
+ padding: 2px 0;
435
+ }
436
+ .hangoverDropdown-group-empty {
437
+ margin-top: 4px;
438
+ padding: 6px 8px;
439
+ font-size: var(--hangover-font-size-base);
440
+ color: var(--hangover-color-text-muted);
441
+ text-align: center;
442
+ border: 1px dashed var(--hangover-color-border);
443
+ border-radius: var(--hangover-radius-item);
444
+ }
445
+ .hangoverDropdown-item {
446
+ display: flex;
447
+ align-items: center;
448
+ justify-content: space-between;
449
+ margin-inline: 8px;
450
+ padding: 9px 12px;
451
+ box-sizing: border-box;
452
+ border-radius: var(--hangover-radius-item);
453
+ cursor: pointer;
454
+ transition: background var(--hangover-transition);
455
+ outline: none;
456
+ gap: 8px;
457
+ }
458
+ .hangoverDropdown-item:hover {
459
+ background: var(--hangover-color-bg-hover);
460
+ }
461
+ .hangoverDropdown-item:focus-visible {
462
+ box-shadow: 0 0 0 2px var(--hangover-color-focus);
463
+ }
464
+ .hangoverDropdown-item.isSelected {
465
+ background: var(--hangover-color-bg-selected);
466
+ }
467
+ .hangoverDropdown-item.isChecked {
468
+ background: var(--hangover-color-bg-checked);
469
+ }
470
+ .hangoverDropdown-item-icon {
471
+ display: flex;
472
+ align-items: center;
473
+ justify-content: center;
474
+ width: 16px;
475
+ height: 16px;
476
+ flex-shrink: 0;
477
+ color: currentColor;
478
+ }
479
+ .hangoverDropdown-item-icon svg {
480
+ width: 16px;
481
+ height: 16px;
482
+ }
483
+ .hangoverDropdown-item-label {
484
+ flex: 1;
485
+ min-width: 0;
486
+ font-size: var(--hangover-font-size-base);
487
+ color: var(--hangover-color-text);
488
+ display: -webkit-box;
489
+ -webkit-line-clamp: 2;
490
+ -webkit-box-orient: vertical;
491
+ overflow: hidden;
492
+ }
493
+ .hangoverDropdown-item-actions {
494
+ display: inline-flex;
495
+ align-items: center;
496
+ justify-content: flex-end;
497
+ gap: 6px;
498
+ flex-shrink: 0;
499
+ }
500
+ .hangoverDropdown-item-actions button,
501
+ .hangoverDropdown-item-actions [role=button] {
502
+ display: inline-flex;
503
+ align-items: center;
504
+ justify-content: center;
505
+ width: 24px;
506
+ height: 24px;
507
+ padding: 0;
508
+ border: 0;
509
+ border-radius: 999px;
510
+ background: transparent;
511
+ color: var(--hangover-color-text-muted);
512
+ cursor: pointer;
513
+ transition: background var(--hangover-transition), color var(--hangover-transition);
514
+ }
515
+ .hangoverDropdown-item-actions button:hover,
516
+ .hangoverDropdown-item-actions [role=button]:hover {
517
+ background: var(--hangover-color-bg-hover);
518
+ color: var(--hangover-color-text);
519
+ }
520
+ .hangoverDropdown-item-actions button:focus-visible,
521
+ .hangoverDropdown-item-actions [role=button]:focus-visible {
522
+ outline: none;
523
+ box-shadow: 0 0 0 2px var(--hangover-color-focus);
524
+ }
525
+ .hangoverDropdown-item-actions button svg,
526
+ .hangoverDropdown-item-actions [role=button] svg {
527
+ width: 14px;
528
+ height: 14px;
529
+ }
530
+ .hangoverDropdown-item-check-icon {
531
+ display: flex;
532
+ align-items: center;
533
+ width: 20px;
534
+ height: 20px;
535
+ color: var(--hangover-color-text);
536
+ flex-shrink: 0;
537
+ opacity: 0;
538
+ transition: opacity var(--hangover-transition);
539
+ }
540
+ .hangoverDropdown-item-check-icon.isVisible {
541
+ opacity: 1;
542
+ }
543
+ .hangoverDropdown-select-all {
544
+ font-size: var(--hangover-font-size-sm);
545
+ color: var(--hangover-color-text-muted);
546
+ font-style: italic;
547
+ }