@fylib/adapter-angular 0.1.0 → 0.2.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.
Files changed (28) hide show
  1. package/dist/components/accordion.component.js +128 -128
  2. package/dist/components/badge.component.js +43 -43
  3. package/dist/components/button.component.js +103 -103
  4. package/dist/components/card.component.js +103 -103
  5. package/dist/components/chart.component.js +72 -72
  6. package/dist/components/icon.component.js +29 -29
  7. package/dist/components/input.component.js +111 -111
  8. package/dist/components/modal.component.js +122 -122
  9. package/dist/components/nav-link.component.js +56 -56
  10. package/dist/components/notification-menu.component.js +388 -388
  11. package/dist/components/select.component.js +122 -122
  12. package/dist/components/table.component.js +371 -371
  13. package/dist/components/text.component.js +2 -2
  14. package/dist/components/toast.component.js +115 -115
  15. package/dist/directives/theme-vars.directive.js +10 -10
  16. package/dist/directives/wallpaper.directive.js +5 -5
  17. package/dist/layouts/layout.component.js +69 -69
  18. package/dist/layouts/slot.component.js +584 -584
  19. package/dist/schematics/collection.json +9 -0
  20. package/dist/schematics/ng-add/index.d.ts +2 -0
  21. package/dist/schematics/ng-add/index.js +64 -0
  22. package/dist/schematics/ng-add/index.js.map +1 -0
  23. package/dist/schematics/ng-add/schema.json +8 -0
  24. package/dist/schematics/templates/fylib/crypto.config.ts.template +7 -0
  25. package/dist/schematics/templates/fylib/logging.config.ts.template +9 -0
  26. package/dist/schematics/templates/fylib/sse.config.ts.template +7 -0
  27. package/dist/schematics/templates/fylib/theme.config.ts.template +9 -0
  28. package/package.json +46 -43
@@ -298,395 +298,395 @@ FyNotificationMenuComponent = __decorate([
298
298
  FyIconComponent,
299
299
  FyAccordionComponent
300
300
  ],
301
- template: `
302
- <div class="fy-notification-menu">
303
- <!-- Botão de Notificação -->
304
- <button
305
- class="fy-notification-menu__trigger"
306
- (click)="toggleMenu()"
307
- [style.color]="themeTokens()?.button?.textColor"
308
- >
309
- <fy-icon [name]="themeTokens()?.button?.icon || 'bell'"></fy-icon>
310
- @if (unreadCountDisplay > 0) {
311
- <span
312
- class="fy-notification-menu__badge"
313
- [style.background]="themeTokens()?.button?.badgeBackground"
314
- [style.color]="themeTokens()?.button?.badgeTextColor"
315
- >
316
- {{ unreadCountDisplay > 99 ? '99+' : unreadCountDisplay }}
317
- </span>
318
- }
319
- </button>
320
-
321
- <!-- Dropdown -->
322
- @if (isOpen() || isClosing()) {
323
- <div
324
- class="fy-notification-menu__dropdown"
325
- [class]="composeAnimClasses(animationClassSuffix)"
326
- [style.width]="themeTokens()?.dropdown?.width"
327
- [style.background]="themeTokens()?.dropdown?.background"
328
- [style.border-color]="themeTokens()?.dropdown?.borderColor"
329
- [style.box-shadow]="themeTokens()?.dropdown?.shadow"
330
- [style.border-radius]="themeTokens()?.dropdown?.borderRadius"
331
- >
332
- <!-- Header -->
333
- <div class="fy-notification-menu__header">
334
- <span class="fy-notification-menu__title">Notificações</span>
335
-
336
- <div class="fy-notification-menu__header-actions">
337
- @if (resolvedConfig().allowClear && notifications.length > 0) {
338
- <button
339
- class="fy-notification-menu__action-btn"
340
- (click)="clearAll()"
341
- >
342
- Limpar tudo
343
- </button>
344
- }
345
-
346
- @if (resolvedConfig().showViewAll && resolvedConfig().viewAllPosition.startsWith('header')) {
347
- <button
348
- class="fy-notification-menu__action-btn"
349
- (click)="viewAll()"
350
- >
351
- Ver todas
352
- </button>
353
- }
354
-
355
- <!-- Botão fechar (Mobile/Tablet) -->
356
- <button class="fy-notification-menu__close-btn" (click)="closeMenu()">
357
- <fy-icon name="x"></fy-icon>
358
- </button>
359
- </div>
360
- </div>
361
-
362
- <!-- List -->
363
- <div
364
- class="fy-notification-menu__body"
365
- [class.fy-notification-menu__body--scroll]="shouldScroll()"
366
- >
367
- @if (_notifications().length === 0) {
368
- <div class="fy-notification-menu__empty">
369
- Nenhuma notificação por enquanto.
370
- </div>
371
- }
372
-
373
- @if (resolvedConfig().accordionMode) {
374
- @for (item of displayNotifications(); track item.id) {
375
- <div class="fy-notification-menu__item-wrapper">
376
- <fy-accordion
377
- [items]="[{ id: item.id, title: item.title, subtitle: item.description, content: item.details }]"
378
- [flush]="true"
379
- class="fy-notification-menu__accordion-item"
380
- [class.fy-notification-menu__item--unread]="!item.read"
381
- [class.fy-notification-menu__item--read]="item.read"
382
- (fyExpand)="onItemExpand(item)"
383
- >
384
- </fy-accordion>
385
- @if (!item.read) {
386
- <div class="fy-notification-menu__unread-dot"></div>
387
- }
388
- </div>
389
- }
390
- } @else {
391
- @for (item of displayNotifications(); track item.id) {
392
- <div
393
- class="fy-notification-menu__item"
394
- [class.fy-notification-menu__item--unread]="!item.read"
395
- [class.fy-notification-menu__item--read]="item.read"
396
- (click)="onItemClick(item)"
397
- >
398
- @if (item.icon) {
399
- <div class="fy-notification-menu__item-icon">
400
- <fy-icon [name]="item.icon"></fy-icon>
401
- </div>
402
- }
403
- <div class="fy-notification-menu__item-content">
404
- <div class="fy-notification-menu__item-title">{{ item.title }}</div>
405
- <div class="fy-notification-menu__item-desc">{{ item.description }}</div>
406
- <div class="fy-notification-menu__item-date">{{ item.date | date:'short' }}</div>
407
- </div>
408
- @if (!item.read) {
409
- <div class="fy-notification-menu__item-actions">
410
- <button class="fy-notification-menu__read-btn" (click)="onMarkAsRead($event, item)">
411
- <fy-icon name="check"></fy-icon>
412
- </button>
413
- </div>
414
- }
415
- @if (!item.read) {
416
- <div class="fy-notification-menu__unread-dot"></div>
417
- }
418
- </div>
419
- }
420
- }
421
- </div>
422
-
423
- <!-- Footer -->
424
- @if (resolvedConfig().showViewAll && resolvedConfig().viewAllPosition.startsWith('footer')) {
425
- <div
426
- class="fy-notification-menu__footer"
427
- [style.justify-content]="resolvedConfig().viewAllPosition.endsWith('right') ? 'flex-end' : 'flex-start'"
428
- >
429
- <button class="fy-notification-menu__action-btn" (click)="viewAll()">Ver todas</button>
430
- @if (shouldScroll() && displayNotifications().length < _notifications().length) {
431
- <button
432
- class="fy-notification-menu__action-btn"
433
- (click)="loadMore()"
434
- >
435
- Carregar mais
436
- </button>
437
- }
438
- </div>
439
- }
440
- </div>
441
- }
442
- </div>
301
+ template: `
302
+ <div class="fy-notification-menu">
303
+ <!-- Botão de Notificação -->
304
+ <button
305
+ class="fy-notification-menu__trigger"
306
+ (click)="toggleMenu()"
307
+ [style.color]="themeTokens()?.button?.textColor"
308
+ >
309
+ <fy-icon [name]="themeTokens()?.button?.icon || 'bell'"></fy-icon>
310
+ @if (unreadCountDisplay > 0) {
311
+ <span
312
+ class="fy-notification-menu__badge"
313
+ [style.background]="themeTokens()?.button?.badgeBackground"
314
+ [style.color]="themeTokens()?.button?.badgeTextColor"
315
+ >
316
+ {{ unreadCountDisplay > 99 ? '99+' : unreadCountDisplay }}
317
+ </span>
318
+ }
319
+ </button>
320
+
321
+ <!-- Dropdown -->
322
+ @if (isOpen() || isClosing()) {
323
+ <div
324
+ class="fy-notification-menu__dropdown"
325
+ [class]="composeAnimClasses(animationClassSuffix)"
326
+ [style.width]="themeTokens()?.dropdown?.width"
327
+ [style.background]="themeTokens()?.dropdown?.background"
328
+ [style.border-color]="themeTokens()?.dropdown?.borderColor"
329
+ [style.box-shadow]="themeTokens()?.dropdown?.shadow"
330
+ [style.border-radius]="themeTokens()?.dropdown?.borderRadius"
331
+ >
332
+ <!-- Header -->
333
+ <div class="fy-notification-menu__header">
334
+ <span class="fy-notification-menu__title">Notificações</span>
335
+
336
+ <div class="fy-notification-menu__header-actions">
337
+ @if (resolvedConfig().allowClear && notifications.length > 0) {
338
+ <button
339
+ class="fy-notification-menu__action-btn"
340
+ (click)="clearAll()"
341
+ >
342
+ Limpar tudo
343
+ </button>
344
+ }
345
+
346
+ @if (resolvedConfig().showViewAll && resolvedConfig().viewAllPosition.startsWith('header')) {
347
+ <button
348
+ class="fy-notification-menu__action-btn"
349
+ (click)="viewAll()"
350
+ >
351
+ Ver todas
352
+ </button>
353
+ }
354
+
355
+ <!-- Botão fechar (Mobile/Tablet) -->
356
+ <button class="fy-notification-menu__close-btn" (click)="closeMenu()">
357
+ <fy-icon name="x"></fy-icon>
358
+ </button>
359
+ </div>
360
+ </div>
361
+
362
+ <!-- List -->
363
+ <div
364
+ class="fy-notification-menu__body"
365
+ [class.fy-notification-menu__body--scroll]="shouldScroll()"
366
+ >
367
+ @if (_notifications().length === 0) {
368
+ <div class="fy-notification-menu__empty">
369
+ Nenhuma notificação por enquanto.
370
+ </div>
371
+ }
372
+
373
+ @if (resolvedConfig().accordionMode) {
374
+ @for (item of displayNotifications(); track item.id) {
375
+ <div class="fy-notification-menu__item-wrapper">
376
+ <fy-accordion
377
+ [items]="[{ id: item.id, title: item.title, subtitle: item.description, content: item.details }]"
378
+ [flush]="true"
379
+ class="fy-notification-menu__accordion-item"
380
+ [class.fy-notification-menu__item--unread]="!item.read"
381
+ [class.fy-notification-menu__item--read]="item.read"
382
+ (fyExpand)="onItemExpand(item)"
383
+ >
384
+ </fy-accordion>
385
+ @if (!item.read) {
386
+ <div class="fy-notification-menu__unread-dot"></div>
387
+ }
388
+ </div>
389
+ }
390
+ } @else {
391
+ @for (item of displayNotifications(); track item.id) {
392
+ <div
393
+ class="fy-notification-menu__item"
394
+ [class.fy-notification-menu__item--unread]="!item.read"
395
+ [class.fy-notification-menu__item--read]="item.read"
396
+ (click)="onItemClick(item)"
397
+ >
398
+ @if (item.icon) {
399
+ <div class="fy-notification-menu__item-icon">
400
+ <fy-icon [name]="item.icon"></fy-icon>
401
+ </div>
402
+ }
403
+ <div class="fy-notification-menu__item-content">
404
+ <div class="fy-notification-menu__item-title">{{ item.title }}</div>
405
+ <div class="fy-notification-menu__item-desc">{{ item.description }}</div>
406
+ <div class="fy-notification-menu__item-date">{{ item.date | date:'short' }}</div>
407
+ </div>
408
+ @if (!item.read) {
409
+ <div class="fy-notification-menu__item-actions">
410
+ <button class="fy-notification-menu__read-btn" (click)="onMarkAsRead($event, item)">
411
+ <fy-icon name="check"></fy-icon>
412
+ </button>
413
+ </div>
414
+ }
415
+ @if (!item.read) {
416
+ <div class="fy-notification-menu__unread-dot"></div>
417
+ }
418
+ </div>
419
+ }
420
+ }
421
+ </div>
422
+
423
+ <!-- Footer -->
424
+ @if (resolvedConfig().showViewAll && resolvedConfig().viewAllPosition.startsWith('footer')) {
425
+ <div
426
+ class="fy-notification-menu__footer"
427
+ [style.justify-content]="resolvedConfig().viewAllPosition.endsWith('right') ? 'flex-end' : 'flex-start'"
428
+ >
429
+ <button class="fy-notification-menu__action-btn" (click)="viewAll()">Ver todas</button>
430
+ @if (shouldScroll() && displayNotifications().length < _notifications().length) {
431
+ <button
432
+ class="fy-notification-menu__action-btn"
433
+ (click)="loadMore()"
434
+ >
435
+ Carregar mais
436
+ </button>
437
+ }
438
+ </div>
439
+ }
440
+ </div>
441
+ }
442
+ </div>
443
443
  `,
444
- styles: [`
445
- .fy-notification-menu {
446
- position: relative;
447
- display: inline-block;
448
- }
449
-
450
- .fy-notification-menu__trigger {
451
- background: transparent;
452
- border: none;
453
- padding: 8px;
454
- cursor: pointer;
455
- position: relative;
456
- display: flex;
457
- align-items: center;
458
- justify-content: center;
459
- font-size: 22px;
460
- border-radius: 50%;
461
- transition: background 0.2s;
462
- }
463
-
464
- .fy-notification-menu__trigger:hover {
465
- background: rgba(0,0,0,0.05);
466
- }
467
-
468
- .fy-notification-menu__badge {
469
- position: absolute;
470
- top: 4px;
471
- right: 4px;
472
- min-width: 18px;
473
- height: 18px;
474
- padding: 0 4px;
475
- border-radius: 9px;
476
- font-size: 10px;
477
- font-weight: bold;
478
- display: flex;
479
- align-items: center;
480
- justify-content: center;
481
- border: 2px solid var(--fy-colors-surface, #ffffff);
482
- }
483
-
484
- .fy-notification-menu__dropdown {
485
- position: absolute;
486
- top: 100%;
487
- right: 0;
488
- margin-top: 8px;
489
- z-index: 1000;
490
- display: flex;
491
- flex-direction: column;
492
- overflow: hidden;
493
- box-shadow: var(--fy-notificationMenu-dropdown-shadow, 0 10px 40px rgba(0,0,0,0.1));
494
- border: 1px solid var(--fy-notificationMenu-dropdown-borderColor, rgba(0,0,0,0.08));
495
- background-color: var(--fy-notificationMenu-dropdown-background, #fff);
496
- border-radius: var(--fy-notificationMenu-dropdown-borderRadius, 12px);
497
- max-height: var(--fy-notificationMenu-dropdown-maxHeight, 450px);
498
- }
499
-
500
- @media (max-width: 768px) {
501
- .fy-notification-menu__dropdown {
502
- position: fixed;
503
- top: calc(var(--fy-layout-header-height, 64px) + 8px);
504
- left: 16px;
505
- right: 16px;
506
- width: calc(100% - 32px) !important;
507
- max-height: calc(100vh - var(--fy-layout-header-height, 64px) - 32px) !important;
508
- margin-top: 0;
509
- z-index: 2000;
510
- }
511
- }
512
-
513
- .fy-notification-menu__header {
514
- padding: 12px 16px;
515
- display: flex;
516
- justify-content: space-between;
517
- align-items: center;
518
- border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));
519
- flex-shrink: 0;
520
- }
521
-
522
- .fy-notification-menu__header-actions {
523
- display: flex;
524
- align-items: center;
525
- gap: 8px;
526
- }
527
-
528
- .fy-notification-menu__title {
529
- font-weight: var(--fy-typography-fontWeight-bold, 600);
530
- font-size: 14px;
531
- }
532
-
533
- .fy-notification-menu__action-btn {
534
- background: transparent;
535
- border: none;
536
- color: var(--fy-colors-primary, #007aff);
537
- font-size: 12px;
538
- cursor: pointer;
539
- padding: 4px 8px;
540
- border-radius: 4px;
541
- }
542
-
543
- .fy-notification-menu__action-btn:hover {
544
- background: rgba(var(--fy-colors-primary-rgb), 0.08);
545
- }
546
-
547
- .fy-notification-menu__close-btn {
548
- display: none;
549
- background: transparent;
550
- border: none;
551
- color: var(--fy-colors-text, inherit);
552
- font-size: 20px;
553
- cursor: pointer;
554
- padding: 4px;
555
- line-height: 1;
556
- opacity: 0.6;
557
- transition: opacity 0.2s;
558
- }
559
-
560
- .fy-notification-menu__close-btn:hover {
561
- opacity: 1;
562
- }
563
-
564
- @media (max-width: 768px) {
565
- .fy-notification-menu__close-btn {
566
- display: inline-flex;
567
- align-items: center;
568
- justify-content: center;
569
- }
570
- }
571
-
572
- .fy-notification-menu__body {
573
- flex: 1;
574
- min-height: 0;
575
- overflow-y: auto;
576
- }
577
- .fy-notification-menu__body--scroll {
578
- max-height: var(--fy-notificationMenu-dropdown-maxHeight, 320px);
579
- }
580
-
581
- .fy-notification-menu__empty {
582
- padding: 32px 16px;
583
- text-align: center;
584
- color: var(--fy-colors-secondary, #86868b);
585
- font-size: 13px;
586
- }
587
-
588
- .fy-notification-menu__item {
589
- padding: 12px 16px;
590
- display: flex;
591
- gap: 12px;
592
- cursor: pointer;
593
- transition: background 0.2s;
594
- border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.03));
595
- position: relative;
596
- }
597
-
598
- .fy-notification-menu__item:hover {
599
- background: rgba(0,0,0,0.02);
600
- }
601
-
602
- .fy-notification-menu__item--unread {
603
- background: rgba(var(--fy-colors-primary-rgb), 0.02);
604
- }
605
-
606
- .fy-notification-menu__item--read {
607
- opacity: 0.6;
608
- filter: grayscale(0.4);
609
- transition: all 0.3s ease;
610
- }
611
-
612
- .fy-notification-menu__item--read:hover {
613
- opacity: 0.8;
614
- filter: grayscale(0.2);
615
- }
616
-
617
- .fy-notification-menu__accordion-item.fy-notification-menu__item--read ::ng-deep .fy-accordion__header {
618
- opacity: 0.7;
619
- }
620
-
621
- .fy-notification-menu__unread-dot {
622
- position: absolute;
623
- right: 12px;
624
- top: 12px;
625
- width: 8px;
626
- height: 8px;
627
- background: var(--fy-colors-primary, #007aff);
628
- border-radius: 50%;
629
- }
630
-
631
- .fy-notification-menu__item-content {
632
- flex: 1;
633
- }
634
-
635
- .fy-notification-menu__item-title {
636
- font-weight: 600;
637
- font-size: 13px;
638
- margin-bottom: 2px;
639
- }
640
-
641
- .fy-notification-menu__item-desc {
642
- font-size: 12px;
643
- color: var(--fy-colors-secondary, #86868b);
644
- line-height: 1.4;
645
- }
646
-
647
- .fy-notification-menu__item-date {
648
- font-size: 11px;
649
- color: var(--fy-colors-secondary, #86868b);
650
- margin-top: 4px;
651
- opacity: 0.7;
652
- }
653
-
654
- .fy-notification-menu__item-actions {
655
- display: flex;
656
- align-items: center;
657
- margin-right: 20px;
658
- }
659
-
660
- .fy-notification-menu__read-btn {
661
- background: transparent;
662
- border: none;
663
- padding: 6px;
664
- border-radius: 4px;
665
- cursor: pointer;
666
- color: var(--fy-colors-primary, #007aff);
667
- opacity: 0.4;
668
- transition: all 0.2s;
669
- display: flex;
670
- align-items: center;
671
- justify-content: center;
672
- }
673
-
674
- .fy-notification-menu__read-btn:hover {
675
- opacity: 1;
676
- background: rgba(var(--fy-colors-primary-rgb), 0.1);
677
- }
678
-
679
- .fy-notification-menu__accordion-item {
680
- display: block;
681
- border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.03));
682
- }
683
-
684
- .fy-notification-menu__footer {
685
- padding: 8px 16px;
686
- border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));
687
- display: flex;
688
- flex-shrink: 0;
689
- }
444
+ styles: [`
445
+ .fy-notification-menu {
446
+ position: relative;
447
+ display: inline-block;
448
+ }
449
+
450
+ .fy-notification-menu__trigger {
451
+ background: transparent;
452
+ border: none;
453
+ padding: 8px;
454
+ cursor: pointer;
455
+ position: relative;
456
+ display: flex;
457
+ align-items: center;
458
+ justify-content: center;
459
+ font-size: 22px;
460
+ border-radius: 50%;
461
+ transition: background 0.2s;
462
+ }
463
+
464
+ .fy-notification-menu__trigger:hover {
465
+ background: rgba(0,0,0,0.05);
466
+ }
467
+
468
+ .fy-notification-menu__badge {
469
+ position: absolute;
470
+ top: 4px;
471
+ right: 4px;
472
+ min-width: 18px;
473
+ height: 18px;
474
+ padding: 0 4px;
475
+ border-radius: 9px;
476
+ font-size: 10px;
477
+ font-weight: bold;
478
+ display: flex;
479
+ align-items: center;
480
+ justify-content: center;
481
+ border: 2px solid var(--fy-colors-surface, #ffffff);
482
+ }
483
+
484
+ .fy-notification-menu__dropdown {
485
+ position: absolute;
486
+ top: 100%;
487
+ right: 0;
488
+ margin-top: 8px;
489
+ z-index: 1000;
490
+ display: flex;
491
+ flex-direction: column;
492
+ overflow: hidden;
493
+ box-shadow: var(--fy-notificationMenu-dropdown-shadow, 0 10px 40px rgba(0,0,0,0.1));
494
+ border: 1px solid var(--fy-notificationMenu-dropdown-borderColor, rgba(0,0,0,0.08));
495
+ background-color: var(--fy-notificationMenu-dropdown-background, #fff);
496
+ border-radius: var(--fy-notificationMenu-dropdown-borderRadius, 12px);
497
+ max-height: var(--fy-notificationMenu-dropdown-maxHeight, 450px);
498
+ }
499
+
500
+ @media (max-width: 768px) {
501
+ .fy-notification-menu__dropdown {
502
+ position: fixed;
503
+ top: calc(var(--fy-layout-header-height, 64px) + 8px);
504
+ left: 16px;
505
+ right: 16px;
506
+ width: calc(100% - 32px) !important;
507
+ max-height: calc(100vh - var(--fy-layout-header-height, 64px) - 32px) !important;
508
+ margin-top: 0;
509
+ z-index: 2000;
510
+ }
511
+ }
512
+
513
+ .fy-notification-menu__header {
514
+ padding: 12px 16px;
515
+ display: flex;
516
+ justify-content: space-between;
517
+ align-items: center;
518
+ border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));
519
+ flex-shrink: 0;
520
+ }
521
+
522
+ .fy-notification-menu__header-actions {
523
+ display: flex;
524
+ align-items: center;
525
+ gap: 8px;
526
+ }
527
+
528
+ .fy-notification-menu__title {
529
+ font-weight: var(--fy-typography-fontWeight-bold, 600);
530
+ font-size: 14px;
531
+ }
532
+
533
+ .fy-notification-menu__action-btn {
534
+ background: transparent;
535
+ border: none;
536
+ color: var(--fy-colors-primary, #007aff);
537
+ font-size: 12px;
538
+ cursor: pointer;
539
+ padding: 4px 8px;
540
+ border-radius: 4px;
541
+ }
542
+
543
+ .fy-notification-menu__action-btn:hover {
544
+ background: rgba(var(--fy-colors-primary-rgb), 0.08);
545
+ }
546
+
547
+ .fy-notification-menu__close-btn {
548
+ display: none;
549
+ background: transparent;
550
+ border: none;
551
+ color: var(--fy-colors-text, inherit);
552
+ font-size: 20px;
553
+ cursor: pointer;
554
+ padding: 4px;
555
+ line-height: 1;
556
+ opacity: 0.6;
557
+ transition: opacity 0.2s;
558
+ }
559
+
560
+ .fy-notification-menu__close-btn:hover {
561
+ opacity: 1;
562
+ }
563
+
564
+ @media (max-width: 768px) {
565
+ .fy-notification-menu__close-btn {
566
+ display: inline-flex;
567
+ align-items: center;
568
+ justify-content: center;
569
+ }
570
+ }
571
+
572
+ .fy-notification-menu__body {
573
+ flex: 1;
574
+ min-height: 0;
575
+ overflow-y: auto;
576
+ }
577
+ .fy-notification-menu__body--scroll {
578
+ max-height: var(--fy-notificationMenu-dropdown-maxHeight, 320px);
579
+ }
580
+
581
+ .fy-notification-menu__empty {
582
+ padding: 32px 16px;
583
+ text-align: center;
584
+ color: var(--fy-colors-secondary, #86868b);
585
+ font-size: 13px;
586
+ }
587
+
588
+ .fy-notification-menu__item {
589
+ padding: 12px 16px;
590
+ display: flex;
591
+ gap: 12px;
592
+ cursor: pointer;
593
+ transition: background 0.2s;
594
+ border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.03));
595
+ position: relative;
596
+ }
597
+
598
+ .fy-notification-menu__item:hover {
599
+ background: rgba(0,0,0,0.02);
600
+ }
601
+
602
+ .fy-notification-menu__item--unread {
603
+ background: rgba(var(--fy-colors-primary-rgb), 0.02);
604
+ }
605
+
606
+ .fy-notification-menu__item--read {
607
+ opacity: 0.6;
608
+ filter: grayscale(0.4);
609
+ transition: all 0.3s ease;
610
+ }
611
+
612
+ .fy-notification-menu__item--read:hover {
613
+ opacity: 0.8;
614
+ filter: grayscale(0.2);
615
+ }
616
+
617
+ .fy-notification-menu__accordion-item.fy-notification-menu__item--read ::ng-deep .fy-accordion__header {
618
+ opacity: 0.7;
619
+ }
620
+
621
+ .fy-notification-menu__unread-dot {
622
+ position: absolute;
623
+ right: 12px;
624
+ top: 12px;
625
+ width: 8px;
626
+ height: 8px;
627
+ background: var(--fy-colors-primary, #007aff);
628
+ border-radius: 50%;
629
+ }
630
+
631
+ .fy-notification-menu__item-content {
632
+ flex: 1;
633
+ }
634
+
635
+ .fy-notification-menu__item-title {
636
+ font-weight: 600;
637
+ font-size: 13px;
638
+ margin-bottom: 2px;
639
+ }
640
+
641
+ .fy-notification-menu__item-desc {
642
+ font-size: 12px;
643
+ color: var(--fy-colors-secondary, #86868b);
644
+ line-height: 1.4;
645
+ }
646
+
647
+ .fy-notification-menu__item-date {
648
+ font-size: 11px;
649
+ color: var(--fy-colors-secondary, #86868b);
650
+ margin-top: 4px;
651
+ opacity: 0.7;
652
+ }
653
+
654
+ .fy-notification-menu__item-actions {
655
+ display: flex;
656
+ align-items: center;
657
+ margin-right: 20px;
658
+ }
659
+
660
+ .fy-notification-menu__read-btn {
661
+ background: transparent;
662
+ border: none;
663
+ padding: 6px;
664
+ border-radius: 4px;
665
+ cursor: pointer;
666
+ color: var(--fy-colors-primary, #007aff);
667
+ opacity: 0.4;
668
+ transition: all 0.2s;
669
+ display: flex;
670
+ align-items: center;
671
+ justify-content: center;
672
+ }
673
+
674
+ .fy-notification-menu__read-btn:hover {
675
+ opacity: 1;
676
+ background: rgba(var(--fy-colors-primary-rgb), 0.1);
677
+ }
678
+
679
+ .fy-notification-menu__accordion-item {
680
+ display: block;
681
+ border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.03));
682
+ }
683
+
684
+ .fy-notification-menu__footer {
685
+ padding: 8px 16px;
686
+ border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));
687
+ display: flex;
688
+ flex-shrink: 0;
689
+ }
690
690
  `],
691
691
  encapsulation: ViewEncapsulation.None
692
692
  }),