@fylib/adapter-angular 0.2.5 → 0.2.7

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 (47) hide show
  1. package/dist/components/accordion.component.d.ts +3 -0
  2. package/dist/components/accordion.component.js +105 -194
  3. package/dist/components/badge.component.d.ts +3 -0
  4. package/dist/components/badge.component.js +30 -81
  5. package/dist/components/button.component.d.ts +3 -0
  6. package/dist/components/button.component.js +79 -194
  7. package/dist/components/card.component.d.ts +3 -0
  8. package/dist/components/card.component.js +76 -147
  9. package/dist/components/chart.component.d.ts +3 -0
  10. package/dist/components/chart.component.js +81 -141
  11. package/dist/components/icon.component.d.ts +3 -0
  12. package/dist/components/icon.component.js +39 -62
  13. package/dist/components/input.component.d.ts +3 -0
  14. package/dist/components/input.component.js +120 -221
  15. package/dist/components/modal.component.d.ts +3 -0
  16. package/dist/components/modal.component.js +121 -247
  17. package/dist/components/nav-link.component.d.ts +3 -0
  18. package/dist/components/nav-link.component.js +43 -92
  19. package/dist/components/notification-menu.component.d.ts +3 -0
  20. package/dist/components/notification-menu.component.js +205 -367
  21. package/dist/components/select.component.d.ts +3 -0
  22. package/dist/components/select.component.js +116 -188
  23. package/dist/components/table.component.d.ts +3 -0
  24. package/dist/components/table.component.js +235 -332
  25. package/dist/components/text.component.d.ts +3 -0
  26. package/dist/components/text.component.js +22 -32
  27. package/dist/components/toast.component.d.ts +3 -0
  28. package/dist/components/toast.component.js +58 -163
  29. package/dist/directives/animation.directive.d.ts +3 -0
  30. package/dist/directives/animation.directive.js +15 -22
  31. package/dist/directives/theme-vars.directive.d.ts +3 -0
  32. package/dist/directives/theme-vars.directive.js +12 -19
  33. package/dist/directives/wallpaper.directive.d.ts +3 -0
  34. package/dist/directives/wallpaper.directive.js +19 -31
  35. package/dist/layouts/layout.component.d.ts +3 -0
  36. package/dist/layouts/layout.component.js +36 -130
  37. package/dist/layouts/slot.component.d.ts +3 -0
  38. package/dist/layouts/slot.component.js +240 -596
  39. package/dist/services/fylib.service.d.ts +3 -0
  40. package/dist/services/fylib.service.js +19 -26
  41. package/dist/services/notification.service.d.ts +3 -0
  42. package/dist/services/notification.service.js +13 -16
  43. package/dist/services/sse.service.d.ts +3 -0
  44. package/dist/services/sse.service.js +11 -18
  45. package/dist/services/webclient.service.d.ts +3 -0
  46. package/dist/services/webclient.service.js +9 -12
  47. package/package.json +4 -3
@@ -1,19 +1,12 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
1
  import { Component, Input, ViewEncapsulation, HostBinding, inject } from '@angular/core';
11
2
  import { CommonModule } from '@angular/common';
12
3
  import { FyLibService } from '../services/fylib.service';
13
4
  import { FyIconComponent } from '../components/icon.component';
14
5
  import { FyBadgeComponent } from '../components/badge.component';
15
6
  import { resolveAnimationsActive, triggerEffectForEvent, styleString } from '../base/interaction.utils';
16
- let FySlotComponent = class FySlotComponent {
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ export class FySlotComponent {
17
10
  get currentYear() {
18
11
  return new Date().getFullYear();
19
12
  }
@@ -187,159 +180,9 @@ let FySlotComponent = class FySlotComponent {
187
180
  }
188
181
  }, 0);
189
182
  }
190
- };
191
- __decorate([
192
- Input(),
193
- __metadata("design:type", String)
194
- ], FySlotComponent.prototype, "name", void 0);
195
- __decorate([
196
- Input(),
197
- __metadata("design:type", Object)
198
- ], FySlotComponent.prototype, "activeAnimations", void 0);
199
- __decorate([
200
- Input(),
201
- __metadata("design:type", Object)
202
- ], FySlotComponent.prototype, "activeEffects", void 0);
203
- __decorate([
204
- Input(),
205
- __metadata("design:type", Object)
206
- ], FySlotComponent.prototype, "customStyles", void 0);
207
- __decorate([
208
- Input(),
209
- __metadata("design:type", Object)
210
- ], FySlotComponent.prototype, "fixedSidebar", void 0);
211
- __decorate([
212
- Input(),
213
- __metadata("design:type", Object)
214
- ], FySlotComponent.prototype, "copyrightText", void 0);
215
- __decorate([
216
- Input(),
217
- __metadata("design:type", String)
218
- ], FySlotComponent.prototype, "copyrightShineDuration", void 0);
219
- __decorate([
220
- Input(),
221
- __metadata("design:type", String)
222
- ], FySlotComponent.prototype, "openEffect", void 0);
223
- __decorate([
224
- Input(),
225
- __metadata("design:type", String)
226
- ], FySlotComponent.prototype, "closeEffect", void 0);
227
- __decorate([
228
- Input(),
229
- __metadata("design:type", Object)
230
- ], FySlotComponent.prototype, "headerMenuAnimationOpen", void 0);
231
- __decorate([
232
- Input(),
233
- __metadata("design:type", Object)
234
- ], FySlotComponent.prototype, "headerMenuAnimationClose", void 0);
235
- __decorate([
236
- Input(),
237
- __metadata("design:type", String)
238
- ], FySlotComponent.prototype, "headerLinksAlign", void 0);
239
- __decorate([
240
- Input(),
241
- __metadata("design:type", Object)
242
- ], FySlotComponent.prototype, "headerLogoImgSrc", void 0);
243
- __decorate([
244
- Input(),
245
- __metadata("design:type", Object)
246
- ], FySlotComponent.prototype, "headerLogoSvgSrc", void 0);
247
- __decorate([
248
- Input(),
249
- __metadata("design:type", Object)
250
- ], FySlotComponent.prototype, "headerLogoAlt", void 0);
251
- __decorate([
252
- Input(),
253
- __metadata("design:type", Object)
254
- ], FySlotComponent.prototype, "headerLogoBadgeText", void 0);
255
- __decorate([
256
- Input(),
257
- __metadata("design:type", Object)
258
- ], FySlotComponent.prototype, "headerLogoBadgeBG", void 0);
259
- __decorate([
260
- Input(),
261
- __metadata("design:type", Object)
262
- ], FySlotComponent.prototype, "headerLogoBadgeTextColor", void 0);
263
- __decorate([
264
- Input(),
265
- __metadata("design:type", Object)
266
- ], FySlotComponent.prototype, "headerLogoBadgeRadius", void 0);
267
- __decorate([
268
- Input(),
269
- __metadata("design:type", Object)
270
- ], FySlotComponent.prototype, "headerLogoBadgeShine", void 0);
271
- __decorate([
272
- Input(),
273
- __metadata("design:type", Object)
274
- ], FySlotComponent.prototype, "headerLogoColorLight", void 0);
275
- __decorate([
276
- Input(),
277
- __metadata("design:type", Object)
278
- ], FySlotComponent.prototype, "headerLogoColorDark", void 0);
279
- __decorate([
280
- Input(),
281
- __metadata("design:type", Object)
282
- ], FySlotComponent.prototype, "sidebarLogoImgSrc", void 0);
283
- __decorate([
284
- Input(),
285
- __metadata("design:type", Object)
286
- ], FySlotComponent.prototype, "sidebarLogoSvgSrc", void 0);
287
- __decorate([
288
- Input(),
289
- __metadata("design:type", Object)
290
- ], FySlotComponent.prototype, "sidebarLogoAlt", void 0);
291
- __decorate([
292
- Input(),
293
- __metadata("design:type", Object)
294
- ], FySlotComponent.prototype, "headerLogoFilter", void 0);
295
- __decorate([
296
- Input(),
297
- __metadata("design:type", Object)
298
- ], FySlotComponent.prototype, "sidebarLogoFilter", void 0);
299
- __decorate([
300
- Input(),
301
- __metadata("design:type", Object)
302
- ], FySlotComponent.prototype, "sidebarLogoColorLight", void 0);
303
- __decorate([
304
- Input(),
305
- __metadata("design:type", Object)
306
- ], FySlotComponent.prototype, "sidebarLogoColorDark", void 0);
307
- __decorate([
308
- Input(),
309
- __metadata("design:type", Object)
310
- ], FySlotComponent.prototype, "sidebarLogoBadgeText", void 0);
311
- __decorate([
312
- Input(),
313
- __metadata("design:type", Object)
314
- ], FySlotComponent.prototype, "sidebarLogoBadgeBG", void 0);
315
- __decorate([
316
- Input(),
317
- __metadata("design:type", Object)
318
- ], FySlotComponent.prototype, "sidebarLogoBadgeTextColor", void 0);
319
- __decorate([
320
- Input(),
321
- __metadata("design:type", Object)
322
- ], FySlotComponent.prototype, "sidebarLogoBadgeRadius", void 0);
323
- __decorate([
324
- Input(),
325
- __metadata("design:type", Object)
326
- ], FySlotComponent.prototype, "sidebarLogoBadgeShine", void 0);
327
- __decorate([
328
- HostBinding('class.fy-animations-disabled'),
329
- __metadata("design:type", Boolean),
330
- __metadata("design:paramtypes", [])
331
- ], FySlotComponent.prototype, "animationsDisabled", null);
332
- __decorate([
333
- HostBinding('style'),
334
- __metadata("design:type", String),
335
- __metadata("design:paramtypes", [])
336
- ], FySlotComponent.prototype, "hostStyles", null);
337
- FySlotComponent = __decorate([
338
- Component({
339
- selector: 'fy-slot',
340
- standalone: true,
341
- imports: [CommonModule, FyIconComponent, FyBadgeComponent],
342
- template: `
183
+ }
184
+ FySlotComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: FySlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
185
+ FySlotComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: FySlotComponent, isStandalone: true, selector: "fy-slot", inputs: { name: "name", activeAnimations: "activeAnimations", activeEffects: "activeEffects", customStyles: "customStyles", fixedSidebar: "fixedSidebar", copyrightText: "copyrightText", copyrightShineDuration: "copyrightShineDuration", openEffect: "openEffect", closeEffect: "closeEffect", headerMenuAnimationOpen: "headerMenuAnimationOpen", headerMenuAnimationClose: "headerMenuAnimationClose", headerLinksAlign: "headerLinksAlign", headerLogoImgSrc: "headerLogoImgSrc", headerLogoSvgSrc: "headerLogoSvgSrc", headerLogoAlt: "headerLogoAlt", headerLogoBadgeText: "headerLogoBadgeText", headerLogoBadgeBG: "headerLogoBadgeBG", headerLogoBadgeTextColor: "headerLogoBadgeTextColor", headerLogoBadgeRadius: "headerLogoBadgeRadius", headerLogoBadgeShine: "headerLogoBadgeShine", headerLogoColorLight: "headerLogoColorLight", headerLogoColorDark: "headerLogoColorDark", sidebarLogoImgSrc: "sidebarLogoImgSrc", sidebarLogoSvgSrc: "sidebarLogoSvgSrc", sidebarLogoAlt: "sidebarLogoAlt", headerLogoFilter: "headerLogoFilter", sidebarLogoFilter: "sidebarLogoFilter", sidebarLogoColorLight: "sidebarLogoColorLight", sidebarLogoColorDark: "sidebarLogoColorDark", sidebarLogoBadgeText: "sidebarLogoBadgeText", sidebarLogoBadgeBG: "sidebarLogoBadgeBG", sidebarLogoBadgeTextColor: "sidebarLogoBadgeTextColor", sidebarLogoBadgeRadius: "sidebarLogoBadgeRadius", sidebarLogoBadgeShine: "sidebarLogoBadgeShine" }, host: { properties: { "style.grid-area": "name", "class": "hostClass", "attr.data-slot": "name", "class.fy-animations-disabled": "this.animationsDisabled", "style": "this.hostStyles" } }, ngImport: i0, template: `
343
186
  <ng-template #projected>
344
187
  <ng-content></ng-content>
345
188
  </ng-template>
@@ -496,442 +339,243 @@ FySlotComponent = __decorate([
496
339
  <ng-container [ngTemplateOutlet]="projected"></ng-container>
497
340
  }
498
341
  }
499
- `,
500
- host: {
501
- '[style.grid-area]': 'name',
502
- '[class]': 'hostClass',
503
- '[attr.data-slot]': 'name'
504
- },
505
- styles: [`
506
- .fy-slot { display: block; position: relative; }
507
-
508
- body.fy-no-scroll {
509
- overflow: hidden !important;
510
- }
511
-
512
- .fy-slot__overlay {
513
- position: fixed;
514
- top: 0;
515
- left: 0;
516
- width: 100vw;
517
- height: 100vh;
518
- background-color: rgba(0, 0, 0, 0.45);
519
- opacity: 0;
520
- pointer-events: none;
521
- transition: opacity 0.25s ease;
522
- z-index: 100;
523
- }
524
-
525
- .fy-slot__overlay--open {
526
- opacity: 1;
527
- pointer-events: auto;
528
- }
529
-
530
- .fy-slot--header {
531
- z-index: 110;
532
- min-height: var(--fy-layout-header-height, 64px);
533
- padding: 0;
534
- display: flex;
535
- align-items: center;
536
- }
537
-
538
- .fy-slot__header-shell {
539
- display: grid;
540
- grid-auto-flow: column;
541
- grid-template-columns: auto 1fr auto auto;
542
- align-items: center;
543
- gap: var(--fy-spacing-md, 16px);
544
- width: 100%;
545
- position: relative;
546
- z-index: 110;
547
- min-height: inherit;
548
- padding: var(--fy-layout-header-padding, 0 24px);
549
- background-color: var(--fy-layout-header-background, var(--fy-colors-surface, #fff));
550
- border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));
551
- box-shadow: var(--fy-layout-header-shadow, 0 1px 0 rgba(0,0,0,0.06));
552
- }
553
-
554
- .fy-slot__header-left { display: flex; align-items: center; gap: var(--fy-spacing-md, 16px); flex-shrink: 0; }
555
- .fy-slot__header-menus { display: contents; }
556
- .fy-slot__header-links {
557
- display: flex;
558
- align-items: center;
559
- gap: var(--fy-spacing-md, 16px);
560
- min-width: 0;
561
- width: max-content;
562
- }
563
- .fy-slot__header-links.fy-slot__header-links--left { justify-self: start; justify-content: flex-start; }
564
- .fy-slot__header-links.fy-slot__header-links--center { justify-self: center; justify-content: center; }
565
- .fy-slot__header-links.fy-slot__header-links--right { justify-self: end; justify-content: flex-end; }
566
- .fy-slot__header-left .fy-logo { position: relative; display: inline-block; }
567
- .fy-slot__header-left .fy-logo__image img,
568
- .fy-slot__header-left .fy-logo__image svg { display: block; height: 28px; width: auto; }
569
- .fy-slot__header-left .fy-logo fy-badge { position: absolute; top: -6px; right: -6px; z-index: 1; }
570
- .fy-slot__header-left .fy-logo fy-badge .fy-badge { position: static; }
571
-
572
- .fy-slot__header-meta {
573
- display: flex;
574
- align-items: center;
575
- gap: var(--fy-spacing-md, 16px);
576
- flex-shrink: 0;
577
- }
578
-
579
- .fy-slot__header-links-right-meta {
580
- display: none;
581
- }
582
-
583
- .fy-slot__header-meta ::ng-deep fy-notification-menu {
584
- display: block;
585
- }
586
-
587
- .fy-slot__header-toggle {
588
- display: none;
589
- width: 40px;
590
- height: 40px;
591
- border-radius: var(--fy-layout-header-toggle-borderRadius, 999px);
592
- border: 1px solid var(--fy-layout-header-toggle-borderColor, transparent);
593
- background-color: var(--fy-layout-header-toggle-background, var(--fy-colors-primary, #2563eb));
594
- color: var(--fy-layout-header-toggle-textColor, #fff);
595
- align-items: center;
596
- justify-content: center;
597
- cursor: pointer;
598
- font-size: 18px;
599
- }
600
-
601
- .fy-slot__header-toggle .fy-icon { font-size: 18px; }
602
- .fy-slot__header-shell {
603
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
604
- }
605
- .fy-slot--header .fy-nav-link {
606
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
607
- }
608
-
609
- .fy-slot--sidebar {
610
- min-width: var(--fy-layout-sidebar-width, 260px);
611
- padding: var(--fy-layout-sidebar-padding, 16px 0);
612
- border-right: 1px solid var(--fy-colors-border, rgba(0,0,0,0.1));
613
- background-color: var(--fy-layout-sidebar-background, var(--fy-colors-surface, transparent));
614
- }
615
-
616
- .fy-slot--sidebar-fixed {
617
- height: 100%;
618
- max-height: 100%;
619
- overflow: hidden;
620
- display: flex;
621
- flex-direction: column;
622
- }
623
-
624
- .fy-slot--sidebar .fy-slot__panel {
625
- height: 100%;
626
- display: block;
627
- background-color: var(--fy-layout-sidebar-background, var(--fy-colors-surface, #fff));
628
- box-shadow: var(--fy-layout-sidebar-shadow, none);
629
- color: var(--fy-colors-textOverlay, var(--fy-colors-text, inherit));
630
- }
631
-
632
- .fy-slot__sidebar-inner {
633
- height: 100%;
634
- display: flex;
635
- flex-direction: column;
636
- }
637
- .fy-slot__sidebar-logo {
638
- padding: var(--fy-spacing-md, 16px);
639
- border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));
640
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
641
- }
642
- .fy-slot__sidebar-logo .fy-logo {
643
- position: relative;
644
- display: inline-block;
645
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
646
- }
647
- .fy-slot__sidebar-logo .fy-logo__image img,
648
- .fy-slot__sidebar-logo .fy-logo__image svg {
649
- display: block;
650
- height: 32px;
651
- width: auto;
652
- }
653
- .fy-slot__sidebar-logo .fy-logo fy-badge { position: absolute; top: -6px; right: -6px; z-index: 1; }
654
- .fy-slot__sidebar-logo .fy-logo fy-badge .fy-badge { position: static; }
655
-
656
- .fy-slot__sidebar-links {
657
- flex: 1 1 auto;
658
- overflow-y: auto;
659
- padding-inline: var(--fy-spacing-md, 16px);
660
- padding-top: var(--fy-spacing-md, 16px);
661
- padding-bottom: var(--fy-spacing-md, 16px);
662
- display: flex;
663
- flex-direction: column;
664
- gap: var(--fy-spacing-sm, 8px);
665
- }
666
- .fy-slot__sidebar-links > * {
667
- display: flex;
668
- flex-direction: column;
669
- gap: var(--fy-spacing-sm, 8px);
670
- }
671
- .fy-slot--sidebar .fy-nav-link {
672
- width: 100%;
673
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
674
- }
675
-
676
- .fy-slot__sidebar-footer {
677
- flex-shrink: 0;
678
- border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));
679
- padding: var(--fy-spacing-md, 16px);
680
- display: flex;
681
- flex-direction: column;
682
- gap: var(--fy-spacing-sm, 8px);
683
- }
684
-
685
- .fy-slot__copyright--mobile { display: none; }
686
- .fy-slot__copyright--desktop { display: block; }
687
-
688
- .fy-slot__copyright {
689
- font-size: var(--fy-typography-fontSize-sm, 12px);
690
- color: var(--fy-colors-secondary, #6b7280);
691
- }
692
-
693
- .fy-slot__copyright-text {
694
- position: relative;
695
- display: inline-block;
696
- font-weight: var(--fy-typography-fontWeight-bold, 600);
697
- background: linear-gradient(
698
- 120deg,
699
- var(--fy-colors-secondary, #6b7280) 0%,
700
- var(--fy-colors-secondary, #6b7280) 40%,
701
- var(--fy-colors-white, #ffffff) 50%,
702
- var(--fy-colors-secondary, #6b7280) 60%,
703
- var(--fy-colors-secondary, #6b7280) 100%
704
- );
705
- background-size: 200% auto;
706
- -webkit-background-clip: text;
707
- -webkit-text-fill-color: transparent;
708
- color: transparent;
709
- animation: fy-copyright-shine var(--fy-copyright-shine-duration, 12s) linear infinite;
710
- }
711
-
712
- @keyframes fy-copyright-shine {
713
- 0% { background-position: 200% center; }
714
- 100% { background-position: -200% center; }
715
- }
716
-
717
- .fy-animations-disabled .fy-slot__copyright-text {
718
- animation: none;
719
- background: none;
720
- -webkit-background-clip: initial;
721
- -webkit-text-fill-color: initial;
722
- color: var(--fy-colors-secondary, #6b7280);
723
- }
724
-
725
- .fy-sidebar-toggle {
726
- display: none;
727
- border-radius: var(--fy-layout-sidebar-toggle-borderRadius, 999px);
728
- background-color: var(--fy-layout-sidebar-toggle-background, var(--fy-colors-primary, #2563eb));
729
- color: var(--fy-layout-sidebar-toggle-textColor, #fff);
730
- }
731
-
732
- .fy-slot--content {
733
- padding: var(--fy-layout-content-padding, var(--fy-spacing-lg, 24px));
734
- overflow-y: auto;
735
- }
736
-
737
- @keyframes fy-copyright-shimmer {
738
- 0% {
739
- background-position: 0% 50%;
740
- }
741
- 50% {
742
- background-position: 100% 50%;
743
- }
744
- 100% {
745
- background-position: 0% 50%;
746
- }
747
- }
748
-
749
- @media (max-width: 768px) {
750
- .fy-slot--header {
751
- padding: 0;
752
- }
753
- .fy-slot__header-shell {
754
- align-items: center;
755
- padding: 0 var(--fy-spacing-md, 16px);
756
- background-color: var(--fy-layout-header-background, var(--fy-colors-surface, #ffffff));
757
- z-index: 110;
758
- }
759
- .fy-slot__header-left {
760
- flex: 0 0 auto;
761
- position: relative;
762
- z-index: 110;
763
- }
764
- .fy-slot__header-menus {
765
- position: absolute;
766
- top: 100%;
767
- left: 0;
768
- right: 0;
769
- width: 100vw;
770
- display: flex;
771
- flex-direction: column;
772
- align-items: center;
773
- background-color: inherit;
774
- border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));
775
- padding: var(--fy-spacing-md, 16px);
776
- max-height: 0;
777
- overflow: hidden;
778
- opacity: 0;
779
- transform: translateY(-8px);
780
- transition: max-height 0.25s ease, opacity 0.25s ease, transform 0.25s ease;
781
- z-index: 110;
782
- gap: var(--fy-spacing-lg, 24px);
783
- }
784
- .fy-slot__header-menus--open {
785
- max-height: 80vh;
786
- opacity: 1;
787
- transform: translateY(0);
788
- overflow: visible;
789
- }
790
- .fy-slot__header-links {
791
- display: flex;
792
- flex-direction: column;
793
- gap: var(--fy-spacing-md, 16px);
794
- width: 100%;
795
- align-items: stretch;
796
- }
797
- .fy-slot__header-links .fy-nav-link {
798
- width: 100%;
799
- justify-content: center;
800
- }
801
-
802
- .fy-slot__header-meta {
803
- flex: 1;
804
- justify-content: flex-end;
805
- position: relative;
806
- z-index: 110;
807
- }
808
-
809
- .fy-slot__header-links-right-meta {
810
- display: block !important;
811
- width: 100%;
812
- }
813
-
814
- .fy-slot__header-links-right-meta .fy-nav-link {
815
- width: 100%;
816
- justify-content: center;
817
- }
818
-
819
- .fy-slot__header-meta ::ng-deep fy-notification-menu {
820
- display: block !important;
821
- }
822
-
823
- .fy-slot__header-menus ::ng-deep fy-notification-menu {
824
- display: none !important;
825
- }
826
-
827
- .fy-slot__copyright--mobile {
828
- display: block;
829
- margin-top: auto;
830
- padding-top: var(--fy-spacing-md);
831
- border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));
832
- width: 100%;
833
- text-align: center;
834
- }
835
- .fy-slot__copyright--desktop {
836
- display: none;
837
- }
838
-
839
- .fy-slot__header-toggle {
840
- display: inline-flex;
841
- }
842
- .fy-slot--sidebar {
843
- height: 0;
844
- grid-area: unset !important;
845
- min-width: 0 !important;
846
- width: 0 !important;
847
- overflow: hidden !important;
848
- }
849
-
850
- .fy-slot--sidebar .fy-slot__panel {
851
- position: fixed;
852
- top: 0;
853
- left: 0;
854
- bottom: 0;
855
- width: var(--fy-layout-sidebar-width, 260px);
856
- max-width: 80vw;
857
- background-color: var(--fy-colors-surface, #fff);
858
- transform: translateX(-100%);
859
- opacity: 0;
860
- transition: transform 0.25s ease-out, opacity 0.25s ease-out;
861
- z-index: 110;
862
- overflow-y: auto;
863
- pointer-events: none;
864
- }
865
-
866
- .fy-slot--sidebar .fy-slot__panel.fy-slot__panel--open {
867
- transform: translateX(0);
868
- opacity: 1;
869
- box-shadow: 0 10px 40px rgba(0,0,0,0.35);
870
- pointer-events: auto;
871
- }
872
-
873
- .fy-layout--app-layout .fy-slot--content {
874
- width: 100%;
875
- }
876
-
877
- .fy-sidebar-toggle {
878
- position: fixed;
879
- bottom: 16px;
880
- left: 16px;
881
- width: 40px;
882
- height: 40px;
883
- border-radius: var(--fy-layout-sidebar-toggle-borderRadius, 999px);
884
- border: 1px solid var(--fy-layout-sidebar-toggle-borderColor, transparent);
885
- display: inline-flex;
886
- align-items: center;
887
- justify-content: center;
888
- background-color: var(--fy-layout-sidebar-toggle-background, var(--fy-colors-primary, #2563eb));
889
- color: var(--fy-layout-sidebar-toggle-textColor, #fff);
890
- box-shadow: 0 8px 24px rgba(0,0,0,0.2);
891
- cursor: pointer;
892
- z-index: 120;
893
- }
894
-
895
- .fy-sidebar-toggle.fy-sidebar-toggle--tongue {
896
- left: 0;
897
- transform: translateX(-50%);
898
- bottom: auto;
899
- }
900
- .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos="top"] { top: 16px; }
901
- .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos="middle"] { top: 50%; transform: translate(-50%, -50%); }
902
- .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos="bottom"] { top: auto; bottom: 16px; }
903
-
904
- .fy-sidebar-toggle span {
905
- display: inline;
906
- }
907
-
908
- .fy-sidebar-toggle .fy-icon { font-size: 18px; }
909
- }
910
-
911
- @media (min-width: 769px) {
912
- .fy-slot__header-menus { display: contents; }
913
- .fy-slot__header-links { max-height: none; opacity: 1; transform: none; position: static; padding: 0; border: 0; display: flex; }
342
+ `, isInline: true, styles: ["\n .fy-slot { display: block; position: relative; }\n\n body.fy-no-scroll {\n overflow: hidden !important;\n }\n\n .fy-slot__overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.45);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.25s ease;\n z-index: 100;\n }\n\n .fy-slot__overlay--open {\n opacity: 1;\n pointer-events: auto;\n }\n\n .fy-slot--header {\n z-index: 110;\n min-height: var(--fy-layout-header-height, 64px);\n padding: 0;\n display: flex;\n align-items: center;\n }\n\n .fy-slot__header-shell {\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: auto 1fr auto auto;\n align-items: center;\n gap: var(--fy-spacing-md, 16px);\n width: 100%;\n position: relative;\n z-index: 110;\n min-height: inherit;\n padding: var(--fy-layout-header-padding, 0 24px);\n background-color: var(--fy-layout-header-background, var(--fy-colors-surface, #fff));\n border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n box-shadow: var(--fy-layout-header-shadow, 0 1px 0 rgba(0,0,0,0.06));\n }\n\n .fy-slot__header-left { display: flex; align-items: center; gap: var(--fy-spacing-md, 16px); flex-shrink: 0; }\n .fy-slot__header-menus { display: contents; }\n .fy-slot__header-links {\n display: flex;\n align-items: center;\n gap: var(--fy-spacing-md, 16px);\n min-width: 0;\n width: max-content;\n }\n .fy-slot__header-links.fy-slot__header-links--left { justify-self: start; justify-content: flex-start; }\n .fy-slot__header-links.fy-slot__header-links--center { justify-self: center; justify-content: center; }\n .fy-slot__header-links.fy-slot__header-links--right { justify-self: end; justify-content: flex-end; }\n .fy-slot__header-left .fy-logo { position: relative; display: inline-block; }\n .fy-slot__header-left .fy-logo__image img,\n .fy-slot__header-left .fy-logo__image svg { display: block; height: 28px; width: auto; }\n .fy-slot__header-left .fy-logo fy-badge { position: absolute; top: -6px; right: -6px; z-index: 1; }\n .fy-slot__header-left .fy-logo fy-badge .fy-badge { position: static; }\n\n .fy-slot__header-meta {\n display: flex;\n align-items: center;\n gap: var(--fy-spacing-md, 16px);\n flex-shrink: 0;\n }\n\n .fy-slot__header-links-right-meta {\n display: none;\n }\n\n .fy-slot__header-meta ::ng-deep fy-notification-menu {\n display: block;\n }\n\n .fy-slot__header-toggle {\n display: none;\n width: 40px;\n height: 40px;\n border-radius: var(--fy-layout-header-toggle-borderRadius, 999px);\n border: 1px solid var(--fy-layout-header-toggle-borderColor, transparent);\n background-color: var(--fy-layout-header-toggle-background, var(--fy-colors-primary, #2563eb));\n color: var(--fy-layout-header-toggle-textColor, #fff);\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 18px;\n }\n\n .fy-slot__header-toggle .fy-icon { font-size: 18px; }\n .fy-slot__header-shell {\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n .fy-slot--header .fy-nav-link {\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n\n .fy-slot--sidebar {\n min-width: var(--fy-layout-sidebar-width, 260px);\n padding: var(--fy-layout-sidebar-padding, 16px 0);\n border-right: 1px solid var(--fy-colors-border, rgba(0,0,0,0.1));\n background-color: var(--fy-layout-sidebar-background, var(--fy-colors-surface, transparent));\n }\n\n .fy-slot--sidebar-fixed {\n height: 100%;\n max-height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .fy-slot--sidebar .fy-slot__panel {\n height: 100%;\n display: block;\n background-color: var(--fy-layout-sidebar-background, var(--fy-colors-surface, #fff));\n box-shadow: var(--fy-layout-sidebar-shadow, none);\n color: var(--fy-colors-textOverlay, var(--fy-colors-text, inherit));\n }\n\n .fy-slot__sidebar-inner {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .fy-slot__sidebar-logo {\n padding: var(--fy-spacing-md, 16px);\n border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n .fy-slot__sidebar-logo .fy-logo {\n position: relative;\n display: inline-block;\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n .fy-slot__sidebar-logo .fy-logo__image img,\n .fy-slot__sidebar-logo .fy-logo__image svg {\n display: block;\n height: 32px;\n width: auto;\n }\n .fy-slot__sidebar-logo .fy-logo fy-badge { position: absolute; top: -6px; right: -6px; z-index: 1; }\n .fy-slot__sidebar-logo .fy-logo fy-badge .fy-badge { position: static; }\n\n .fy-slot__sidebar-links {\n flex: 1 1 auto;\n overflow-y: auto;\n padding-inline: var(--fy-spacing-md, 16px);\n padding-top: var(--fy-spacing-md, 16px);\n padding-bottom: var(--fy-spacing-md, 16px);\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-sm, 8px);\n }\n .fy-slot__sidebar-links > * {\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-sm, 8px);\n }\n .fy-slot--sidebar .fy-nav-link {\n width: 100%;\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n\n .fy-slot__sidebar-footer {\n flex-shrink: 0;\n border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n padding: var(--fy-spacing-md, 16px);\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-sm, 8px);\n }\n\n .fy-slot__copyright--mobile { display: none; }\n .fy-slot__copyright--desktop { display: block; }\n \n .fy-slot__copyright {\n font-size: var(--fy-typography-fontSize-sm, 12px);\n color: var(--fy-colors-secondary, #6b7280);\n }\n\n .fy-slot__copyright-text {\n position: relative;\n display: inline-block;\n font-weight: var(--fy-typography-fontWeight-bold, 600);\n background: linear-gradient(\n 120deg, \n var(--fy-colors-secondary, #6b7280) 0%, \n var(--fy-colors-secondary, #6b7280) 40%, \n var(--fy-colors-white, #ffffff) 50%, \n var(--fy-colors-secondary, #6b7280) 60%, \n var(--fy-colors-secondary, #6b7280) 100%\n );\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: fy-copyright-shine var(--fy-copyright-shine-duration, 12s) linear infinite;\n }\n\n @keyframes fy-copyright-shine {\n 0% { background-position: 200% center; }\n 100% { background-position: -200% center; }\n }\n\n .fy-animations-disabled .fy-slot__copyright-text {\n animation: none;\n background: none;\n -webkit-background-clip: initial;\n -webkit-text-fill-color: initial;\n color: var(--fy-colors-secondary, #6b7280);\n }\n\n .fy-sidebar-toggle {\n display: none;\n border-radius: var(--fy-layout-sidebar-toggle-borderRadius, 999px);\n background-color: var(--fy-layout-sidebar-toggle-background, var(--fy-colors-primary, #2563eb));\n color: var(--fy-layout-sidebar-toggle-textColor, #fff);\n }\n\n .fy-slot--content {\n padding: var(--fy-layout-content-padding, var(--fy-spacing-lg, 24px));\n overflow-y: auto;\n }\n\n @keyframes fy-copyright-shimmer {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n\n @media (max-width: 768px) {\n .fy-slot--header {\n padding: 0;\n }\n .fy-slot__header-shell { \n align-items: center;\n padding: 0 var(--fy-spacing-md, 16px);\n background-color: var(--fy-layout-header-background, var(--fy-colors-surface, #ffffff));\n z-index: 110;\n }\n .fy-slot__header-left { \n flex: 0 0 auto; \n position: relative;\n z-index: 110;\n }\n .fy-slot__header-menus {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n width: 100vw;\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: inherit;\n border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n padding: var(--fy-spacing-md, 16px);\n max-height: 0;\n overflow: hidden;\n opacity: 0;\n transform: translateY(-8px);\n transition: max-height 0.25s ease, opacity 0.25s ease, transform 0.25s ease;\n z-index: 110;\n gap: var(--fy-spacing-lg, 24px);\n }\n .fy-slot__header-menus--open {\n max-height: 80vh;\n opacity: 1;\n transform: translateY(0);\n overflow: visible;\n }\n .fy-slot__header-links {\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-md, 16px);\n width: 100%;\n align-items: stretch;\n }\n .fy-slot__header-links .fy-nav-link {\n width: 100%;\n justify-content: center;\n }\n\n .fy-slot__header-meta {\n flex: 1;\n justify-content: flex-end;\n position: relative;\n z-index: 110;\n }\n\n .fy-slot__header-links-right-meta {\n display: block !important;\n width: 100%;\n }\n \n .fy-slot__header-links-right-meta .fy-nav-link {\n width: 100%;\n justify-content: center;\n }\n\n .fy-slot__header-meta ::ng-deep fy-notification-menu {\n display: block !important;\n }\n\n .fy-slot__header-menus ::ng-deep fy-notification-menu {\n display: none !important;\n }\n\n .fy-slot__copyright--mobile {\n display: block;\n margin-top: auto;\n padding-top: var(--fy-spacing-md);\n border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));\n width: 100%;\n text-align: center;\n }\n .fy-slot__copyright--desktop {\n display: none;\n }\n\n .fy-slot__header-toggle {\n display: inline-flex;\n }\n .fy-slot--sidebar {\n height: 0;\n grid-area: unset !important;\n min-width: 0 !important;\n width: 0 !important;\n overflow: hidden !important;\n }\n\n .fy-slot--sidebar .fy-slot__panel {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n width: var(--fy-layout-sidebar-width, 260px);\n max-width: 80vw;\n background-color: var(--fy-colors-surface, #fff);\n transform: translateX(-100%);\n opacity: 0;\n transition: transform 0.25s ease-out, opacity 0.25s ease-out;\n z-index: 110;\n overflow-y: auto;\n pointer-events: none;\n }\n\n .fy-slot--sidebar .fy-slot__panel.fy-slot__panel--open {\n transform: translateX(0);\n opacity: 1;\n box-shadow: 0 10px 40px rgba(0,0,0,0.35);\n pointer-events: auto;\n }\n\n .fy-layout--app-layout .fy-slot--content {\n width: 100%;\n }\n\n .fy-sidebar-toggle {\n position: fixed;\n bottom: 16px;\n left: 16px;\n width: 40px;\n height: 40px;\n border-radius: var(--fy-layout-sidebar-toggle-borderRadius, 999px);\n border: 1px solid var(--fy-layout-sidebar-toggle-borderColor, transparent);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background-color: var(--fy-layout-sidebar-toggle-background, var(--fy-colors-primary, #2563eb));\n color: var(--fy-layout-sidebar-toggle-textColor, #fff);\n box-shadow: 0 8px 24px rgba(0,0,0,0.2);\n cursor: pointer;\n z-index: 120;\n }\n\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue {\n left: 0;\n transform: translateX(-50%);\n bottom: auto;\n }\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos=\"top\"] { top: 16px; }\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos=\"middle\"] { top: 50%; transform: translate(-50%, -50%); }\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos=\"bottom\"] { top: auto; bottom: 16px; }\n\n .fy-sidebar-toggle span {\n display: inline;\n }\n\n .fy-sidebar-toggle .fy-icon { font-size: 18px; }\n }\n\n @media (min-width: 769px) {\n .fy-slot__header-menus { display: contents; }\n .fy-slot__header-links { max-height: none; opacity: 1; transform: none; position: static; padding: 0; border: 0; display: flex; }\n\n .fy-slot__header-toggle {\n display: none;\n }\n .fy-slot--sidebar .fy-slot__panel {\n position: relative;\n transform: none;\n box-shadow: none;\n width: 100%;\n max-width: none;\n opacity: 1;\n pointer-events: auto;\n }\n\n .fy-sidebar-toggle {\n display: none;\n }\n }\n "], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FyIconComponent, selector: "fy-icon", inputs: ["name", "size", "color", "strokeWidth", "variant", "set"] }, { kind: "component", type: FyBadgeComponent, selector: "fy-badge", inputs: ["text", "background", "textColor", "borderRadius", "shine"] }], encapsulation: i0.ViewEncapsulation.None });
343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: FySlotComponent, decorators: [{
344
+ type: Component,
345
+ args: [{ selector: 'fy-slot', standalone: true, imports: [CommonModule, FyIconComponent, FyBadgeComponent], template: `
346
+ <ng-template #projected>
347
+ <ng-content></ng-content>
348
+ </ng-template>
914
349
 
915
- .fy-slot__header-toggle {
916
- display: none;
350
+ @switch (name) {
351
+ @case ('sidebar') {
352
+ <button
353
+ type="button"
354
+ class="fy-sidebar-toggle"
355
+ [class.fy-sidebar-toggle--tongue]="sidebarToggleMode === 'tongue'"
356
+ [attr.data-tongue-pos]="sidebarTonguePos"
357
+ (click)="toggleSidebar()"
358
+ >
359
+ <fy-icon [name]="sidebarToggleIconName"></fy-icon>
360
+ </button>
361
+ <div class="fy-slot__overlay" [class.fy-slot__overlay--open]="sidebarOpen" (click)="toggleSidebar()"></div>
362
+ <div class="fy-slot__panel" [class.fy-slot__panel--open]="sidebarOpen">
363
+ <div class="fy-slot__sidebar-inner">
364
+ @if (sidebarLogoImgSrc || sidebarLogoSvgSrc) {
365
+ <div class="fy-slot__sidebar-logo">
366
+ <div class="fy-logo">
367
+ <div class="fy-logo__image" [style.filter]="sidebarLogoFilter || computedSidebarLogoFilter || null">
368
+ @if (sidebarLogoImgSrc) {
369
+ <img [src]="sidebarLogoImgSrc" [alt]="sidebarLogoAlt || 'Logo'">
370
+ } @else if (sidebarLogoSvgSrc) {
371
+ <img [src]="sidebarLogoSvgSrc" [alt]="sidebarLogoAlt || 'Logo'">
372
+ }
373
+ </div>
374
+ @if (sidebarLogoBadgeText) {
375
+ <fy-badge
376
+ [text]="sidebarLogoBadgeText"
377
+ [background]="sidebarLogoBadgeBG ?? headerLogoBadgeBG ?? null"
378
+ [textColor]="sidebarLogoBadgeTextColor ?? headerLogoBadgeTextColor ?? null"
379
+ [borderRadius]="sidebarLogoBadgeRadius ?? headerLogoBadgeRadius ?? null"
380
+ [shine]="(sidebarLogoBadgeShine ?? headerLogoBadgeShine) ?? null"></fy-badge>
381
+ }
382
+ </div>
383
+ </div>
384
+ } @else {
385
+ <div class="fy-slot__sidebar-logo">
386
+ <div class="fy-logo">
387
+ <div class="fy-logo__image" [style.filter]="sidebarLogoFilter || computedSidebarLogoFilter || null">
388
+ <ng-content select="[fy-sidebar-logo]"></ng-content>
389
+ </div>
390
+ @if (sidebarLogoBadgeText) {
391
+ <fy-badge
392
+ [text]="sidebarLogoBadgeText"
393
+ [background]="sidebarLogoBadgeBG ?? headerLogoBadgeBG ?? null"
394
+ [textColor]="sidebarLogoBadgeTextColor ?? headerLogoBadgeTextColor ?? null"
395
+ [borderRadius]="sidebarLogoBadgeRadius ?? headerLogoBadgeRadius ?? null"
396
+ [shine]="(sidebarLogoBadgeShine ?? headerLogoBadgeShine) ?? null"></fy-badge>
397
+ }
398
+ </div>
399
+ </div>
400
+ }
401
+ <div class="fy-slot__sidebar-header">
402
+ <ng-content select="[fy-sidebar-header]"></ng-content>
403
+ </div>
404
+ <div class="fy-slot__sidebar-links">
405
+ <ng-content select="[fy-sidebar-links]"></ng-content>
406
+ </div>
407
+ <div class="fy-slot__sidebar-footer">
408
+ <ng-content select="[fy-sidebar-footer]"></ng-content>
409
+ @if (copyrightText) {
410
+ <div class="fy-slot__copyright" [style.--fy-copyright-shine-duration]="copyrightShineDuration">
411
+ <span class="fy-slot__copyright-text">&copy; {{ copyrightText }} · {{ currentYear }}</span>
412
+ </div>
413
+ }
414
+ </div>
415
+ </div>
416
+ </div>
917
417
  }
918
- .fy-slot--sidebar .fy-slot__panel {
919
- position: relative;
920
- transform: none;
921
- box-shadow: none;
922
- width: 100%;
923
- max-width: none;
924
- opacity: 1;
925
- pointer-events: auto;
418
+ @case ('header') {
419
+ <div class="fy-slot__overlay" [class.fy-slot__overlay--open]="headerMenuOpen" (click)="toggleHeaderMenu()"></div>
420
+ <header class="fy-slot__header-shell">
421
+ <div class="fy-slot__header-left">
422
+ @if (headerLogoImgSrc || headerLogoSvgSrc) {
423
+ <div class="fy-logo">
424
+ <div class="fy-logo__image" [style.filter]="headerLogoFilter || computedHeaderLogoFilter || null">
425
+ @if (headerLogoImgSrc) {
426
+ <img [src]="headerLogoImgSrc" [alt]="headerLogoAlt || 'Logo'">
427
+ } @else if (headerLogoSvgSrc) {
428
+ <img [src]="headerLogoSvgSrc" [alt]="headerLogoAlt || 'Logo'">
429
+ }
430
+ </div>
431
+ @if (headerLogoBadgeText) {
432
+ <fy-badge
433
+ [text]="headerLogoBadgeText"
434
+ [background]="headerLogoBadgeBG || null"
435
+ [textColor]="headerLogoBadgeTextColor || null"
436
+ [borderRadius]="headerLogoBadgeRadius || null"
437
+ [shine]="headerLogoBadgeShine ?? null"></fy-badge>
438
+ }
439
+ </div>
440
+ } @else {
441
+ <div class="fy-logo">
442
+ <div class="fy-logo__image" [style.filter]="headerLogoFilter || computedHeaderLogoFilter || null">
443
+ <ng-content select="[fy-header-logo]"></ng-content>
444
+ </div>
445
+ @if (headerLogoBadgeText) {
446
+ <fy-badge
447
+ [text]="headerLogoBadgeText"
448
+ [background]="headerLogoBadgeBG || null"
449
+ [textColor]="headerLogoBadgeTextColor || null"
450
+ [borderRadius]="headerLogoBadgeRadius || null"
451
+ [shine]="headerLogoBadgeShine ?? null"></fy-badge>
452
+ }
453
+ </div>
454
+ }
455
+ </div>
456
+ <div class="fy-slot__header-menus"
457
+ [class.fy-slot__header-menus--open]="headerMenuOpen"
458
+ [class.fy-anim-header-menu-slide-in]="headerMenuAnimClass==='fy-anim-header-menu-slide-in'"
459
+ [class.fy-anim-header-menu-slide-out]="headerMenuAnimClass==='fy-anim-header-menu-slide-out'"
460
+ [class.fy-anim-header-menu-macos-slide-in]="headerMenuAnimClass==='fy-anim-header-menu-macos-slide-in'"
461
+ [class.fy-anim-header-menu-macos-slide-out]="headerMenuAnimClass==='fy-anim-header-menu-macos-slide-out'">
462
+ <nav class="fy-slot__header-links fy-slot__header-links--center">
463
+ <ng-content select="[fy-header-links],[fy-header-links-center]"></ng-content>
464
+ </nav>
465
+ <nav class="fy-slot__header-links fy-slot__header-links--right">
466
+ <ng-content select="[fy-header-links-right]"></ng-content>
467
+ </nav>
468
+
469
+ <!-- Copyright dentro do menu no mobile -->
470
+ @if (copyrightText) {
471
+ <div class="fy-slot__copyright fy-slot__copyright--mobile" [style.--fy-copyright-shine-duration]="copyrightShineDuration">
472
+ <span class="fy-slot__copyright-text">&copy; {{ copyrightText }} · {{ currentYear }}</span>
473
+ </div>
474
+ }
475
+ </div>
476
+ <div class="fy-slot__header-meta">
477
+ <!-- Espaço para elementos meta projetados (como notification-menu) -->
478
+ <ng-content select="[fy-header-meta]"></ng-content>
479
+
480
+ <!-- Outros links de cabeçalho que não são meta -->
481
+ <div class="fy-slot__header-links-right-meta">
482
+ <ng-content select="[fy-header-links-right]"></ng-content>
483
+ </div>
484
+
485
+ <!-- Copyright fora do menu no desktop -->
486
+ @if (copyrightText) {
487
+ <div class="fy-slot__copyright fy-slot__copyright--desktop" [style.--fy-copyright-shine-duration]="copyrightShineDuration">
488
+ <span class="fy-slot__copyright-text">&copy; {{ copyrightText }} · {{ currentYear }}</span>
489
+ </div>
490
+ }
491
+ <button type="button" class="fy-slot__header-toggle" (click)="toggleHeaderMenu()">
492
+ <fy-icon [name]="sidebarToggleIconName"></fy-icon>
493
+ </button>
494
+ </div>
495
+ </header>
926
496
  }
927
497
 
928
- .fy-sidebar-toggle {
929
- display: none;
498
+ @default {
499
+ <ng-container [ngTemplateOutlet]="projected"></ng-container>
930
500
  }
931
501
  }
932
- `],
933
- encapsulation: ViewEncapsulation.None
934
- }),
935
- __metadata("design:paramtypes", [])
936
- ], FySlotComponent);
937
- export { FySlotComponent };
502
+ `, host: {
503
+ '[style.grid-area]': 'name',
504
+ '[class]': 'hostClass',
505
+ '[attr.data-slot]': 'name'
506
+ }, encapsulation: ViewEncapsulation.None, styles: ["\n .fy-slot { display: block; position: relative; }\n\n body.fy-no-scroll {\n overflow: hidden !important;\n }\n\n .fy-slot__overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.45);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.25s ease;\n z-index: 100;\n }\n\n .fy-slot__overlay--open {\n opacity: 1;\n pointer-events: auto;\n }\n\n .fy-slot--header {\n z-index: 110;\n min-height: var(--fy-layout-header-height, 64px);\n padding: 0;\n display: flex;\n align-items: center;\n }\n\n .fy-slot__header-shell {\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: auto 1fr auto auto;\n align-items: center;\n gap: var(--fy-spacing-md, 16px);\n width: 100%;\n position: relative;\n z-index: 110;\n min-height: inherit;\n padding: var(--fy-layout-header-padding, 0 24px);\n background-color: var(--fy-layout-header-background, var(--fy-colors-surface, #fff));\n border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n box-shadow: var(--fy-layout-header-shadow, 0 1px 0 rgba(0,0,0,0.06));\n }\n\n .fy-slot__header-left { display: flex; align-items: center; gap: var(--fy-spacing-md, 16px); flex-shrink: 0; }\n .fy-slot__header-menus { display: contents; }\n .fy-slot__header-links {\n display: flex;\n align-items: center;\n gap: var(--fy-spacing-md, 16px);\n min-width: 0;\n width: max-content;\n }\n .fy-slot__header-links.fy-slot__header-links--left { justify-self: start; justify-content: flex-start; }\n .fy-slot__header-links.fy-slot__header-links--center { justify-self: center; justify-content: center; }\n .fy-slot__header-links.fy-slot__header-links--right { justify-self: end; justify-content: flex-end; }\n .fy-slot__header-left .fy-logo { position: relative; display: inline-block; }\n .fy-slot__header-left .fy-logo__image img,\n .fy-slot__header-left .fy-logo__image svg { display: block; height: 28px; width: auto; }\n .fy-slot__header-left .fy-logo fy-badge { position: absolute; top: -6px; right: -6px; z-index: 1; }\n .fy-slot__header-left .fy-logo fy-badge .fy-badge { position: static; }\n\n .fy-slot__header-meta {\n display: flex;\n align-items: center;\n gap: var(--fy-spacing-md, 16px);\n flex-shrink: 0;\n }\n\n .fy-slot__header-links-right-meta {\n display: none;\n }\n\n .fy-slot__header-meta ::ng-deep fy-notification-menu {\n display: block;\n }\n\n .fy-slot__header-toggle {\n display: none;\n width: 40px;\n height: 40px;\n border-radius: var(--fy-layout-header-toggle-borderRadius, 999px);\n border: 1px solid var(--fy-layout-header-toggle-borderColor, transparent);\n background-color: var(--fy-layout-header-toggle-background, var(--fy-colors-primary, #2563eb));\n color: var(--fy-layout-header-toggle-textColor, #fff);\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 18px;\n }\n\n .fy-slot__header-toggle .fy-icon { font-size: 18px; }\n .fy-slot__header-shell {\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n .fy-slot--header .fy-nav-link {\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n\n .fy-slot--sidebar {\n min-width: var(--fy-layout-sidebar-width, 260px);\n padding: var(--fy-layout-sidebar-padding, 16px 0);\n border-right: 1px solid var(--fy-colors-border, rgba(0,0,0,0.1));\n background-color: var(--fy-layout-sidebar-background, var(--fy-colors-surface, transparent));\n }\n\n .fy-slot--sidebar-fixed {\n height: 100%;\n max-height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .fy-slot--sidebar .fy-slot__panel {\n height: 100%;\n display: block;\n background-color: var(--fy-layout-sidebar-background, var(--fy-colors-surface, #fff));\n box-shadow: var(--fy-layout-sidebar-shadow, none);\n color: var(--fy-colors-textOverlay, var(--fy-colors-text, inherit));\n }\n\n .fy-slot__sidebar-inner {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .fy-slot__sidebar-logo {\n padding: var(--fy-spacing-md, 16px);\n border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n .fy-slot__sidebar-logo .fy-logo {\n position: relative;\n display: inline-block;\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n .fy-slot__sidebar-logo .fy-logo__image img,\n .fy-slot__sidebar-logo .fy-logo__image svg {\n display: block;\n height: 32px;\n width: auto;\n }\n .fy-slot__sidebar-logo .fy-logo fy-badge { position: absolute; top: -6px; right: -6px; z-index: 1; }\n .fy-slot__sidebar-logo .fy-logo fy-badge .fy-badge { position: static; }\n\n .fy-slot__sidebar-links {\n flex: 1 1 auto;\n overflow-y: auto;\n padding-inline: var(--fy-spacing-md, 16px);\n padding-top: var(--fy-spacing-md, 16px);\n padding-bottom: var(--fy-spacing-md, 16px);\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-sm, 8px);\n }\n .fy-slot__sidebar-links > * {\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-sm, 8px);\n }\n .fy-slot--sidebar .fy-nav-link {\n width: 100%;\n color: var(--fy-colors-textOverlay, var(--fy-colors-text));\n }\n\n .fy-slot__sidebar-footer {\n flex-shrink: 0;\n border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n padding: var(--fy-spacing-md, 16px);\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-sm, 8px);\n }\n\n .fy-slot__copyright--mobile { display: none; }\n .fy-slot__copyright--desktop { display: block; }\n \n .fy-slot__copyright {\n font-size: var(--fy-typography-fontSize-sm, 12px);\n color: var(--fy-colors-secondary, #6b7280);\n }\n\n .fy-slot__copyright-text {\n position: relative;\n display: inline-block;\n font-weight: var(--fy-typography-fontWeight-bold, 600);\n background: linear-gradient(\n 120deg, \n var(--fy-colors-secondary, #6b7280) 0%, \n var(--fy-colors-secondary, #6b7280) 40%, \n var(--fy-colors-white, #ffffff) 50%, \n var(--fy-colors-secondary, #6b7280) 60%, \n var(--fy-colors-secondary, #6b7280) 100%\n );\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: fy-copyright-shine var(--fy-copyright-shine-duration, 12s) linear infinite;\n }\n\n @keyframes fy-copyright-shine {\n 0% { background-position: 200% center; }\n 100% { background-position: -200% center; }\n }\n\n .fy-animations-disabled .fy-slot__copyright-text {\n animation: none;\n background: none;\n -webkit-background-clip: initial;\n -webkit-text-fill-color: initial;\n color: var(--fy-colors-secondary, #6b7280);\n }\n\n .fy-sidebar-toggle {\n display: none;\n border-radius: var(--fy-layout-sidebar-toggle-borderRadius, 999px);\n background-color: var(--fy-layout-sidebar-toggle-background, var(--fy-colors-primary, #2563eb));\n color: var(--fy-layout-sidebar-toggle-textColor, #fff);\n }\n\n .fy-slot--content {\n padding: var(--fy-layout-content-padding, var(--fy-spacing-lg, 24px));\n overflow-y: auto;\n }\n\n @keyframes fy-copyright-shimmer {\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n }\n\n @media (max-width: 768px) {\n .fy-slot--header {\n padding: 0;\n }\n .fy-slot__header-shell { \n align-items: center;\n padding: 0 var(--fy-spacing-md, 16px);\n background-color: var(--fy-layout-header-background, var(--fy-colors-surface, #ffffff));\n z-index: 110;\n }\n .fy-slot__header-left { \n flex: 0 0 auto; \n position: relative;\n z-index: 110;\n }\n .fy-slot__header-menus {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n width: 100vw;\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: inherit;\n border-bottom: 1px solid var(--fy-colors-border, rgba(0,0,0,0.08));\n padding: var(--fy-spacing-md, 16px);\n max-height: 0;\n overflow: hidden;\n opacity: 0;\n transform: translateY(-8px);\n transition: max-height 0.25s ease, opacity 0.25s ease, transform 0.25s ease;\n z-index: 110;\n gap: var(--fy-spacing-lg, 24px);\n }\n .fy-slot__header-menus--open {\n max-height: 80vh;\n opacity: 1;\n transform: translateY(0);\n overflow: visible;\n }\n .fy-slot__header-links {\n display: flex;\n flex-direction: column;\n gap: var(--fy-spacing-md, 16px);\n width: 100%;\n align-items: stretch;\n }\n .fy-slot__header-links .fy-nav-link {\n width: 100%;\n justify-content: center;\n }\n\n .fy-slot__header-meta {\n flex: 1;\n justify-content: flex-end;\n position: relative;\n z-index: 110;\n }\n\n .fy-slot__header-links-right-meta {\n display: block !important;\n width: 100%;\n }\n \n .fy-slot__header-links-right-meta .fy-nav-link {\n width: 100%;\n justify-content: center;\n }\n\n .fy-slot__header-meta ::ng-deep fy-notification-menu {\n display: block !important;\n }\n\n .fy-slot__header-menus ::ng-deep fy-notification-menu {\n display: none !important;\n }\n\n .fy-slot__copyright--mobile {\n display: block;\n margin-top: auto;\n padding-top: var(--fy-spacing-md);\n border-top: 1px solid var(--fy-colors-border, rgba(0,0,0,0.05));\n width: 100%;\n text-align: center;\n }\n .fy-slot__copyright--desktop {\n display: none;\n }\n\n .fy-slot__header-toggle {\n display: inline-flex;\n }\n .fy-slot--sidebar {\n height: 0;\n grid-area: unset !important;\n min-width: 0 !important;\n width: 0 !important;\n overflow: hidden !important;\n }\n\n .fy-slot--sidebar .fy-slot__panel {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n width: var(--fy-layout-sidebar-width, 260px);\n max-width: 80vw;\n background-color: var(--fy-colors-surface, #fff);\n transform: translateX(-100%);\n opacity: 0;\n transition: transform 0.25s ease-out, opacity 0.25s ease-out;\n z-index: 110;\n overflow-y: auto;\n pointer-events: none;\n }\n\n .fy-slot--sidebar .fy-slot__panel.fy-slot__panel--open {\n transform: translateX(0);\n opacity: 1;\n box-shadow: 0 10px 40px rgba(0,0,0,0.35);\n pointer-events: auto;\n }\n\n .fy-layout--app-layout .fy-slot--content {\n width: 100%;\n }\n\n .fy-sidebar-toggle {\n position: fixed;\n bottom: 16px;\n left: 16px;\n width: 40px;\n height: 40px;\n border-radius: var(--fy-layout-sidebar-toggle-borderRadius, 999px);\n border: 1px solid var(--fy-layout-sidebar-toggle-borderColor, transparent);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background-color: var(--fy-layout-sidebar-toggle-background, var(--fy-colors-primary, #2563eb));\n color: var(--fy-layout-sidebar-toggle-textColor, #fff);\n box-shadow: 0 8px 24px rgba(0,0,0,0.2);\n cursor: pointer;\n z-index: 120;\n }\n\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue {\n left: 0;\n transform: translateX(-50%);\n bottom: auto;\n }\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos=\"top\"] { top: 16px; }\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos=\"middle\"] { top: 50%; transform: translate(-50%, -50%); }\n .fy-sidebar-toggle.fy-sidebar-toggle--tongue[data-tongue-pos=\"bottom\"] { top: auto; bottom: 16px; }\n\n .fy-sidebar-toggle span {\n display: inline;\n }\n\n .fy-sidebar-toggle .fy-icon { font-size: 18px; }\n }\n\n @media (min-width: 769px) {\n .fy-slot__header-menus { display: contents; }\n .fy-slot__header-links { max-height: none; opacity: 1; transform: none; position: static; padding: 0; border: 0; display: flex; }\n\n .fy-slot__header-toggle {\n display: none;\n }\n .fy-slot--sidebar .fy-slot__panel {\n position: relative;\n transform: none;\n box-shadow: none;\n width: 100%;\n max-width: none;\n opacity: 1;\n pointer-events: auto;\n }\n\n .fy-sidebar-toggle {\n display: none;\n }\n }\n "] }]
507
+ }], ctorParameters: () => [], propDecorators: { name: [{
508
+ type: Input
509
+ }], activeAnimations: [{
510
+ type: Input
511
+ }], activeEffects: [{
512
+ type: Input
513
+ }], customStyles: [{
514
+ type: Input
515
+ }], fixedSidebar: [{
516
+ type: Input
517
+ }], copyrightText: [{
518
+ type: Input
519
+ }], copyrightShineDuration: [{
520
+ type: Input
521
+ }], openEffect: [{
522
+ type: Input
523
+ }], closeEffect: [{
524
+ type: Input
525
+ }], headerMenuAnimationOpen: [{
526
+ type: Input
527
+ }], headerMenuAnimationClose: [{
528
+ type: Input
529
+ }], headerLinksAlign: [{
530
+ type: Input
531
+ }], headerLogoImgSrc: [{
532
+ type: Input
533
+ }], headerLogoSvgSrc: [{
534
+ type: Input
535
+ }], headerLogoAlt: [{
536
+ type: Input
537
+ }], headerLogoBadgeText: [{
538
+ type: Input
539
+ }], headerLogoBadgeBG: [{
540
+ type: Input
541
+ }], headerLogoBadgeTextColor: [{
542
+ type: Input
543
+ }], headerLogoBadgeRadius: [{
544
+ type: Input
545
+ }], headerLogoBadgeShine: [{
546
+ type: Input
547
+ }], headerLogoColorLight: [{
548
+ type: Input
549
+ }], headerLogoColorDark: [{
550
+ type: Input
551
+ }], sidebarLogoImgSrc: [{
552
+ type: Input
553
+ }], sidebarLogoSvgSrc: [{
554
+ type: Input
555
+ }], sidebarLogoAlt: [{
556
+ type: Input
557
+ }], headerLogoFilter: [{
558
+ type: Input
559
+ }], sidebarLogoFilter: [{
560
+ type: Input
561
+ }], sidebarLogoColorLight: [{
562
+ type: Input
563
+ }], sidebarLogoColorDark: [{
564
+ type: Input
565
+ }], sidebarLogoBadgeText: [{
566
+ type: Input
567
+ }], sidebarLogoBadgeBG: [{
568
+ type: Input
569
+ }], sidebarLogoBadgeTextColor: [{
570
+ type: Input
571
+ }], sidebarLogoBadgeRadius: [{
572
+ type: Input
573
+ }], sidebarLogoBadgeShine: [{
574
+ type: Input
575
+ }], animationsDisabled: [{
576
+ type: HostBinding,
577
+ args: ['class.fy-animations-disabled']
578
+ }], hostStyles: [{
579
+ type: HostBinding,
580
+ args: ['style']
581
+ }] } });