@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.30 → 0.2.32

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 (42) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/ui/navigation/index.d.ts +4 -1
  3. package/dist/components/ui/navigation/index.d.ts.map +1 -1
  4. package/dist/components/ui/navigation/index.esm.js +4 -0
  5. package/dist/components/ui/navigation/index.js +4 -0
  6. package/dist/components/ui/navigation/subscription-badge.d.ts +9 -0
  7. package/dist/components/ui/navigation/subscription-badge.d.ts.map +1 -0
  8. package/dist/components/ui/navigation/subscription-badge.esm.js +58 -0
  9. package/dist/components/ui/navigation/subscription-badge.js +58 -0
  10. package/dist/components/ui/navigation/types.d.ts +1 -0
  11. package/dist/components/ui/navigation/types.d.ts.map +1 -1
  12. package/dist/components/ui/navigation/user-avatar.d.ts +9 -0
  13. package/dist/components/ui/navigation/user-avatar.d.ts.map +1 -0
  14. package/dist/components/ui/navigation/user-avatar.esm.js +55 -0
  15. package/dist/components/ui/navigation/user-avatar.js +55 -0
  16. package/dist/components/ui/navigation/user-menu-examples.d.ts +8 -0
  17. package/dist/components/ui/navigation/user-menu-examples.d.ts.map +1 -0
  18. package/dist/components/ui/navigation/user-menu-examples.esm.js +125 -0
  19. package/dist/components/ui/navigation/user-menu-examples.js +125 -0
  20. package/dist/components/ui/navigation/user-menu-types.d.ts +218 -0
  21. package/dist/components/ui/navigation/user-menu-types.d.ts.map +1 -0
  22. package/dist/components/ui/navigation/user-menu-types.esm.js +5 -0
  23. package/dist/components/ui/navigation/user-menu-types.js +5 -0
  24. package/dist/components/ui/navigation/user-menu.d.ts +9 -0
  25. package/dist/components/ui/navigation/user-menu.d.ts.map +1 -0
  26. package/dist/components/ui/navigation/user-menu.esm.js +154 -0
  27. package/dist/components/ui/navigation/user-menu.js +154 -0
  28. package/dist/index.d.ts +5 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.esm.js +5 -1
  31. package/dist/index.js +5 -1
  32. package/dist/styles.css +2 -2
  33. package/package.json +1 -1
  34. package/src/components/ui/navigation/index.ts +13 -0
  35. package/src/components/ui/navigation/subscription-badge.tsx +110 -0
  36. package/src/components/ui/navigation/types.ts +14 -0
  37. package/src/components/ui/navigation/user-avatar.tsx +111 -0
  38. package/src/components/ui/navigation/user-menu-examples.tsx +551 -0
  39. package/src/components/ui/navigation/user-menu-types.ts +308 -0
  40. package/src/components/ui/navigation/user-menu.tsx +354 -0
  41. package/src/index.ts +5 -1
  42. package/src/styles/components/navigation/user-menu.css +525 -0
@@ -0,0 +1,525 @@
1
+ /* UserMenu Component Styles */
2
+ /* Using semantic CSS architecture with CSS variables and BEM methodology */
3
+
4
+ /* UserMenu CSS Variables */
5
+ :root {
6
+ /* UserMenu Base Variables */
7
+ --user-menu-width: 288px;
8
+ --user-menu-max-height: 400px;
9
+ --user-menu-border-radius: var(--cs-border-radius-lg);
10
+ --user-menu-shadow: var(--cs-shadows-lg);
11
+ --user-menu-z-index: 50;
12
+
13
+ /* Header Variables */
14
+ --user-menu-header-padding: var(--cs-spacing-scale-lg);
15
+ --user-menu-header-border: 1px solid var(--cs-colors-border-subtle);
16
+ --user-menu-header-gap: var(--cs-spacing-scale-md);
17
+
18
+ /* Item Variables */
19
+ --user-menu-item-padding: var(--cs-spacing-scale-sm) var(--cs-spacing-scale-md);
20
+ --user-menu-item-gap: var(--cs-spacing-scale-md);
21
+ --user-menu-item-radius: var(--cs-border-radius-md);
22
+
23
+ /* Section Variables */
24
+ --user-menu-section-padding: var(--cs-spacing-scale-sm) 0;
25
+ --user-menu-section-title-padding: var(--cs-spacing-scale-xs) var(--cs-spacing-scale-md);
26
+
27
+ /* Avatar Variables */
28
+ --user-avatar-xs-size: 24px;
29
+ --user-avatar-sm-size: 32px;
30
+ --user-avatar-md-size: 40px;
31
+ --user-avatar-lg-size: 48px;
32
+ --user-avatar-xl-size: 56px;
33
+
34
+ /* Subscription Badge Variables */
35
+ --subscription-badge-gap: var(--cs-spacing-scale-xs);
36
+ --subscription-badge-padding: var(--cs-spacing-scale-xs) var(--cs-spacing-scale-sm);
37
+
38
+ /* Color Variables */
39
+ --user-menu-background: var(--cs-colors-surface-background);
40
+ --user-menu-border-color: var(--cs-colors-border);
41
+ --user-menu-text-primary: var(--cs-colors-text-primary);
42
+ --user-menu-text-secondary: var(--cs-colors-text-secondary);
43
+ --user-menu-text-muted: var(--cs-colors-text-muted);
44
+ --user-menu-hover-background: var(--cs-colors-interactive-hover);
45
+ --user-menu-focus-outline: var(--cs-colors-interactive-focus);
46
+ --user-menu-danger-color: var(--cs-colors-destructive-500);
47
+ --user-menu-danger-hover: var(--cs-colors-destructive-600);
48
+
49
+ /* Animation Variables */
50
+ --user-menu-transition: var(--cs-transitions-duration-normal) var(--cs-transitions-easing-ease);
51
+ }
52
+
53
+ /* Dark mode variables */
54
+ .dark {
55
+ --user-menu-background: var(--cs-modes-dark-colors-surface-surface);
56
+ --user-menu-border-color: var(--cs-modes-dark-colors-border);
57
+ --user-menu-text-primary: var(--cs-modes-dark-colors-text-primary);
58
+ --user-menu-text-secondary: var(--cs-modes-dark-colors-text-secondary);
59
+ --user-menu-text-muted: var(--cs-modes-dark-colors-text-muted);
60
+ --user-menu-hover-background: var(--cs-modes-dark-colors-interactive-hover);
61
+ --user-menu-focus-outline: var(--cs-modes-dark-colors-interactive-focus);
62
+ }
63
+
64
+ /* ============================================================================
65
+ BASE USERMENU COMPONENT
66
+ ============================================================================ */
67
+
68
+ .user-menu {
69
+ position: relative;
70
+ display: inline-block;
71
+ }
72
+
73
+ .user-menu__trigger {
74
+ background: none;
75
+ border: none;
76
+ cursor: pointer;
77
+ padding: 0;
78
+ transition: var(--user-menu-transition);
79
+ }
80
+
81
+ .user-menu__trigger:focus {
82
+ outline: 2px solid var(--user-menu-focus-outline);
83
+ outline-offset: 2px;
84
+ }
85
+
86
+ .user-menu__trigger-default {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: var(--cs-spacing-scale-sm);
90
+ padding: var(--cs-spacing-scale-sm);
91
+ border-radius: var(--cs-border-radius-md);
92
+ transition: var(--user-menu-transition);
93
+ }
94
+
95
+ .user-menu__trigger-default:hover {
96
+ background-color: var(--user-menu-hover-background);
97
+ }
98
+
99
+ .user-menu__trigger-name {
100
+ font-size: var(--cs-fonts-primary-sizes-sm);
101
+ font-weight: var(--cs-fonts-primary-weights-medium);
102
+ color: var(--user-menu-text-primary);
103
+ }
104
+
105
+ /* ============================================================================
106
+ DROPDOWN CONTAINER
107
+ ============================================================================ */
108
+
109
+ .user-menu__dropdown {
110
+ position: absolute;
111
+ z-index: var(--user-menu-z-index);
112
+ background-color: var(--user-menu-background);
113
+ border: 1px solid var(--user-menu-border-color);
114
+ border-radius: var(--user-menu-border-radius);
115
+ box-shadow: var(--user-menu-shadow);
116
+ overflow: hidden;
117
+ animation: userMenuSlideIn 0.2s ease-out;
118
+ }
119
+
120
+ /* Placement variants */
121
+ .user-menu__dropdown--bottom-left {
122
+ top: 100%;
123
+ left: 0;
124
+ margin-top: var(--cs-spacing-scale-xs);
125
+ }
126
+
127
+ .user-menu__dropdown--bottom-right {
128
+ top: 100%;
129
+ right: 0;
130
+ margin-top: var(--cs-spacing-scale-xs);
131
+ }
132
+
133
+ .user-menu__dropdown--top-left {
134
+ bottom: 100%;
135
+ left: 0;
136
+ margin-bottom: var(--cs-spacing-scale-xs);
137
+ }
138
+
139
+ .user-menu__dropdown--top-right {
140
+ bottom: 100%;
141
+ right: 0;
142
+ margin-bottom: var(--cs-spacing-scale-xs);
143
+ }
144
+
145
+ /* ============================================================================
146
+ USER HEADER SECTION
147
+ ============================================================================ */
148
+
149
+ .user-menu__header {
150
+ padding: var(--user-menu-header-padding);
151
+ border-bottom: var(--user-menu-header-border);
152
+ display: flex;
153
+ align-items: center;
154
+ gap: var(--user-menu-header-gap);
155
+ }
156
+
157
+ .user-menu__header-avatar {
158
+ flex-shrink: 0;
159
+ }
160
+
161
+ .user-menu__header-info {
162
+ flex: 1;
163
+ min-width: 0;
164
+ }
165
+
166
+ .user-menu__header-name {
167
+ font-size: var(--cs-fonts-primary-sizes-md);
168
+ font-weight: var(--cs-fonts-primary-weights-semibold);
169
+ color: var(--user-menu-text-primary);
170
+ margin-bottom: var(--cs-spacing-scale-xs);
171
+ white-space: nowrap;
172
+ overflow: hidden;
173
+ text-overflow: ellipsis;
174
+ }
175
+
176
+ .user-menu__header-email {
177
+ font-size: var(--cs-fonts-primary-sizes-sm);
178
+ color: var(--user-menu-text-muted);
179
+ margin-bottom: var(--cs-spacing-scale-sm);
180
+ white-space: nowrap;
181
+ overflow: hidden;
182
+ text-overflow: ellipsis;
183
+ }
184
+
185
+ .user-menu__header-subscription {
186
+ display: flex;
187
+ justify-content: flex-start;
188
+ }
189
+
190
+ /* ============================================================================
191
+ MENU SECTIONS
192
+ ============================================================================ */
193
+
194
+ .user-menu__sections {
195
+ max-height: inherit;
196
+ overflow-y: auto;
197
+ }
198
+
199
+ .user-menu__section {
200
+ padding: var(--user-menu-section-padding);
201
+ }
202
+
203
+ .user-menu__section--bordered {
204
+ border-top: 1px solid var(--user-menu-border-color);
205
+ }
206
+
207
+ .user-menu__section-title {
208
+ padding: var(--user-menu-section-title-padding);
209
+ font-size: var(--cs-fonts-primary-sizes-xs);
210
+ font-weight: var(--cs-fonts-primary-weights-semibold);
211
+ color: var(--user-menu-text-muted);
212
+ text-transform: uppercase;
213
+ letter-spacing: var(--cs-fonts-primary-letter-spacing-wide);
214
+ }
215
+
216
+ .user-menu__section-items {
217
+ display: flex;
218
+ flex-direction: column;
219
+ gap: var(--cs-spacing-scale-xs);
220
+ }
221
+
222
+ /* ============================================================================
223
+ MENU ITEMS
224
+ ============================================================================ */
225
+
226
+ .user-menu__item {
227
+ display: flex;
228
+ align-items: center;
229
+ width: 100%;
230
+ padding: var(--user-menu-item-padding);
231
+ border: none;
232
+ background: none;
233
+ color: var(--user-menu-text-primary);
234
+ text-decoration: none;
235
+ cursor: pointer;
236
+ border-radius: var(--user-menu-item-radius);
237
+ transition: var(--user-menu-transition);
238
+ text-align: left;
239
+ }
240
+
241
+ .user-menu__item:hover {
242
+ background-color: var(--user-menu-hover-background);
243
+ }
244
+
245
+ .user-menu__item:focus {
246
+ outline: 2px solid var(--user-menu-focus-outline);
247
+ outline-offset: -2px;
248
+ }
249
+
250
+ .user-menu__item--disabled {
251
+ color: var(--user-menu-text-muted);
252
+ cursor: not-allowed;
253
+ opacity: 0.6;
254
+ }
255
+
256
+ .user-menu__item--disabled:hover {
257
+ background-color: transparent;
258
+ }
259
+
260
+ .user-menu__item--danger {
261
+ color: var(--user-menu-danger-color);
262
+ }
263
+
264
+ .user-menu__item--danger:hover {
265
+ background-color: var(--cs-colors-destructive-50);
266
+ color: var(--user-menu-danger-hover);
267
+ }
268
+
269
+ .user-menu__item-content {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: var(--user-menu-item-gap);
273
+ flex: 1;
274
+ min-width: 0;
275
+ }
276
+
277
+ .user-menu__item-icon {
278
+ width: 16px;
279
+ height: 16px;
280
+ flex-shrink: 0;
281
+ display: flex;
282
+ align-items: center;
283
+ justify-content: center;
284
+ }
285
+
286
+ .user-menu__item-text {
287
+ flex: 1;
288
+ min-width: 0;
289
+ }
290
+
291
+ .user-menu__item-label {
292
+ display: block;
293
+ font-size: var(--cs-fonts-primary-sizes-sm);
294
+ font-weight: var(--cs-fonts-primary-weights-medium);
295
+ white-space: nowrap;
296
+ overflow: hidden;
297
+ text-overflow: ellipsis;
298
+ }
299
+
300
+ .user-menu__item-description {
301
+ display: block;
302
+ font-size: var(--cs-fonts-primary-sizes-xs);
303
+ color: var(--user-menu-text-muted);
304
+ margin-top: var(--cs-spacing-scale-xs);
305
+ white-space: nowrap;
306
+ overflow: hidden;
307
+ text-overflow: ellipsis;
308
+ }
309
+
310
+ .user-menu__item-badge {
311
+ flex-shrink: 0;
312
+ margin-left: var(--cs-spacing-scale-sm);
313
+ }
314
+
315
+ /* ============================================================================
316
+ USER AVATAR COMPONENT
317
+ ============================================================================ */
318
+
319
+ .user-avatar {
320
+ position: relative;
321
+ display: inline-flex;
322
+ align-items: center;
323
+ justify-content: center;
324
+ border-radius: 50%;
325
+ overflow: hidden;
326
+ background-color: var(--cs-colors-neutral-100);
327
+ }
328
+
329
+ .user-avatar--xs {
330
+ width: var(--user-avatar-xs-size);
331
+ height: var(--user-avatar-xs-size);
332
+ }
333
+
334
+ .user-avatar--sm {
335
+ width: var(--user-avatar-sm-size);
336
+ height: var(--user-avatar-sm-size);
337
+ }
338
+
339
+ .user-avatar--md {
340
+ width: var(--user-avatar-md-size);
341
+ height: var(--user-avatar-md-size);
342
+ }
343
+
344
+ .user-avatar--lg {
345
+ width: var(--user-avatar-lg-size);
346
+ height: var(--user-avatar-lg-size);
347
+ }
348
+
349
+ .user-avatar--xl {
350
+ width: var(--user-avatar-xl-size);
351
+ height: var(--user-avatar-xl-size);
352
+ }
353
+
354
+ .user-avatar__image {
355
+ width: 100%;
356
+ height: 100%;
357
+ object-fit: cover;
358
+ }
359
+
360
+ .user-avatar__fallback {
361
+ width: 100%;
362
+ height: 100%;
363
+ display: flex;
364
+ align-items: center;
365
+ justify-content: center;
366
+ background-color: var(--cs-colors-primary-100);
367
+ color: var(--cs-colors-primary-700);
368
+ }
369
+
370
+ .user-avatar__initials {
371
+ font-size: 0.6em;
372
+ font-weight: var(--cs-fonts-primary-weights-semibold);
373
+ text-transform: uppercase;
374
+ }
375
+
376
+ /* Dark mode avatar */
377
+ .dark .user-avatar {
378
+ background-color: var(--cs-modes-dark-colors-neutral-100);
379
+ }
380
+
381
+ .dark .user-avatar__fallback {
382
+ background-color: var(--cs-modes-dark-colors-primary-100);
383
+ color: var(--cs-modes-dark-colors-primary-700);
384
+ }
385
+
386
+ /* ============================================================================
387
+ SUBSCRIPTION BADGE COMPONENT
388
+ ============================================================================ */
389
+
390
+ .subscription-badge {
391
+ display: inline-flex;
392
+ align-items: center;
393
+ gap: var(--subscription-badge-gap);
394
+ }
395
+
396
+ .subscription-badge__icon {
397
+ display: flex;
398
+ align-items: center;
399
+ justify-content: center;
400
+ }
401
+
402
+ .subscription-badge__label {
403
+ font-size: inherit;
404
+ font-weight: inherit;
405
+ }
406
+
407
+ .subscription-badge--sm .subscription-badge__icon {
408
+ width: 12px;
409
+ height: 12px;
410
+ }
411
+
412
+ .subscription-badge--md .subscription-badge__icon {
413
+ width: 14px;
414
+ height: 14px;
415
+ }
416
+
417
+ .subscription-badge--lg .subscription-badge__icon {
418
+ width: 16px;
419
+ height: 16px;
420
+ }
421
+
422
+ /* ============================================================================
423
+ RESPONSIVE DESIGN
424
+ ============================================================================ */
425
+
426
+ @media (max-width: 768px) {
427
+ .user-menu__dropdown {
428
+ position: fixed;
429
+ top: 50%;
430
+ left: 50%;
431
+ transform: translate(-50%, -50%);
432
+ width: 90vw;
433
+ max-width: 320px;
434
+ max-height: 80vh;
435
+ }
436
+
437
+ .user-menu__dropdown--bottom-left,
438
+ .user-menu__dropdown--bottom-right,
439
+ .user-menu__dropdown--top-left,
440
+ .user-menu__dropdown--top-right {
441
+ margin: 0;
442
+ }
443
+
444
+ .user-menu__header {
445
+ padding: var(--cs-spacing-scale-md);
446
+ }
447
+
448
+ .user-menu__header-name {
449
+ font-size: var(--cs-fonts-primary-sizes-sm);
450
+ }
451
+
452
+ .user-menu__item {
453
+ padding: var(--cs-spacing-scale-md);
454
+ min-height: 44px; /* Touch target */
455
+ }
456
+
457
+ .user-menu__trigger-name {
458
+ display: none; /* Hide name on mobile */
459
+ }
460
+ }
461
+
462
+ @media (max-width: 480px) {
463
+ .user-menu__dropdown {
464
+ width: 95vw;
465
+ }
466
+ }
467
+
468
+ /* ============================================================================
469
+ ANIMATIONS
470
+ ============================================================================ */
471
+
472
+ @keyframes userMenuSlideIn {
473
+ from {
474
+ opacity: 0;
475
+ transform: translateY(-8px);
476
+ }
477
+ to {
478
+ opacity: 1;
479
+ transform: translateY(0);
480
+ }
481
+ }
482
+
483
+ /* ============================================================================
484
+ HIGH CONTRAST MODE
485
+ ============================================================================ */
486
+
487
+ @media (prefers-contrast: high) {
488
+ .user-menu__dropdown {
489
+ border-width: 2px;
490
+ }
491
+
492
+ .user-menu__item:focus {
493
+ outline-width: 3px;
494
+ }
495
+
496
+ .user-menu__section--bordered {
497
+ border-top-width: 2px;
498
+ }
499
+ }
500
+
501
+ /* ============================================================================
502
+ REDUCED MOTION
503
+ ============================================================================ */
504
+
505
+ @media (prefers-reduced-motion: reduce) {
506
+ .user-menu__dropdown {
507
+ animation: none;
508
+ }
509
+
510
+ .user-menu__item,
511
+ .user-menu__trigger,
512
+ .user-menu__trigger-default {
513
+ transition: none;
514
+ }
515
+ }
516
+
517
+ /* ============================================================================
518
+ PRINT STYLES
519
+ ============================================================================ */
520
+
521
+ @media print {
522
+ .user-menu__dropdown {
523
+ display: none;
524
+ }
525
+ }