@updevs/components 1.0.0-alpha.40 → 1.0.0-alpha.41

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 (95) hide show
  1. package/assets/styles/_core.scss +9 -0
  2. package/assets/styles/_debug.scss +49 -0
  3. package/assets/styles/_props.scss +91 -0
  4. package/assets/styles/_utilities-marketing.scss +209 -0
  5. package/assets/styles/_utilities.scss +127 -92
  6. package/assets/styles/_variables-dark.scss +8 -6
  7. package/assets/styles/_variables.scss +326 -257
  8. package/assets/styles/helpers/_index.scss +143 -0
  9. package/assets/styles/layout/_core.scss +3 -2
  10. package/assets/styles/layout/_dark.scss +40 -35
  11. package/assets/styles/layout/_footer.scss +1 -1
  12. package/assets/styles/layout/_navbar.scss +31 -19
  13. package/assets/styles/layout/_page.scss +6 -5
  14. package/assets/styles/layout/_root.scss +26 -34
  15. package/assets/styles/marketing/_browser.scss +67 -0
  16. package/assets/styles/marketing/_core.scss +8 -0
  17. package/assets/styles/marketing/_filters.scss +0 -0
  18. package/assets/styles/marketing/_hero.scss +70 -0
  19. package/assets/styles/marketing/_pricing.scss +111 -0
  20. package/assets/styles/marketing/_sections.scss +124 -0
  21. package/assets/styles/marketing/_shape.scss +31 -0
  22. package/assets/styles/mixins/_functions.scss +53 -0
  23. package/assets/styles/mixins/_mixins.scss +9 -9
  24. package/assets/styles/ui/_accordion.scss +165 -11
  25. package/assets/styles/ui/_alerts.scss +80 -38
  26. package/assets/styles/ui/_avatars.scss +36 -9
  27. package/assets/styles/ui/_badges.scss +47 -13
  28. package/assets/styles/ui/_button-group.scss +1 -1
  29. package/assets/styles/ui/_buttons.scss +33 -37
  30. package/assets/styles/ui/_calendars.scss +2 -2
  31. package/assets/styles/ui/_cards.scss +9 -0
  32. package/assets/styles/ui/_carousel.scss +1 -1
  33. package/assets/styles/ui/_charts.scss +1 -1
  34. package/assets/styles/ui/_chat.scss +38 -0
  35. package/assets/styles/ui/_close.scss +54 -1
  36. package/assets/styles/ui/_datagrid.scss +1 -1
  37. package/assets/styles/ui/_dropdowns.scss +3 -0
  38. package/assets/styles/ui/_empty.scss +0 -5
  39. package/assets/styles/ui/_flags.scss +2 -2
  40. package/assets/styles/ui/_forms.scss +33 -7
  41. package/assets/styles/ui/_grid.scss +1 -1
  42. package/assets/styles/ui/_icons.scss +1 -1
  43. package/assets/styles/ui/_images.scss +4 -0
  44. package/assets/styles/ui/_lists.scss +12 -16
  45. package/assets/styles/ui/_loaders.scss +1 -1
  46. package/assets/styles/ui/_markdown.scss +15 -4
  47. package/assets/styles/ui/_modals.scss +2 -2
  48. package/assets/styles/ui/_nav.scss +17 -3
  49. package/assets/styles/ui/_offcanvas.scss +2 -2
  50. package/assets/styles/ui/_pagination.scss +2 -0
  51. package/assets/styles/ui/_payments.scss +1 -1
  52. package/assets/styles/ui/_placeholder.scss +1 -1
  53. package/assets/styles/ui/_progress.scss +1 -1
  54. package/assets/styles/ui/_ribbons.scss +1 -0
  55. package/assets/styles/ui/_segmented.scss +101 -0
  56. package/assets/styles/ui/_signature.scss +15 -0
  57. package/assets/styles/ui/_social.scss +52 -0
  58. package/assets/styles/ui/_status.scss +1 -1
  59. package/assets/styles/ui/_steps.scss +5 -1
  60. package/assets/styles/ui/_switch-icon.scss +1 -1
  61. package/assets/styles/ui/_tables.scss +27 -1
  62. package/assets/styles/ui/_tags.scss +1 -1
  63. package/assets/styles/ui/_timeline.scss +1 -1
  64. package/assets/styles/ui/_toasts.scss +0 -1
  65. package/assets/styles/ui/_tracking.scss +1 -1
  66. package/assets/styles/ui/_type.scss +169 -8
  67. package/assets/styles/ui/forms/_form-check.scss +1 -1
  68. package/assets/styles/ui/forms/_form-colorinput.scss +1 -1
  69. package/assets/styles/ui/forms/_form-custom.scss +1 -1
  70. package/assets/styles/ui/forms/_form-imagecheck.scss +6 -5
  71. package/assets/styles/ui/forms/_form-selectgroup.scss +2 -2
  72. package/assets/styles/ui/typo/_hr.scss +4 -2
  73. package/assets/styles/utils/_colors.scss +72 -11
  74. package/assets/styles/utils/_opacity.scss +1 -1
  75. package/assets/styles/utils/_scroll.scss +0 -2
  76. package/assets/styles/utils/_sizing.scss +1 -1
  77. package/assets/styles/utils/_text.scss +1 -2
  78. package/assets/styles/vendor/_apexcharts.scss +52 -0
  79. package/assets/styles/vendor/_coloris.scss +72 -0
  80. package/assets/styles/vendor/_dropzone.scss +27 -0
  81. package/assets/styles/vendor/_fslightbox.scss +13 -0
  82. package/assets/styles/vendor/_jsvectormap.scss +47 -0
  83. package/assets/styles/vendor/_litepicker.scss +69 -0
  84. package/assets/styles/vendor/_nouislider.scss +49 -0
  85. package/assets/styles/vendor/_plyr.scss +3 -0
  86. package/assets/styles/vendor/_stars-rating.scss +22 -0
  87. package/assets/styles/vendor/_tom-select.scss +81 -0
  88. package/assets/styles/vendor/_turbo.scss +3 -0
  89. package/assets/styles/vendor/_typed.scss +4 -0
  90. package/assets/styles/vendor/_wysiwyg.scss +46 -0
  91. package/esm2022/layout/partials/sidebar/sidebar.component.mjs +102 -30
  92. package/fesm2022/updevs-components-layout.mjs +101 -29
  93. package/fesm2022/updevs-components-layout.mjs.map +1 -1
  94. package/layout/partials/sidebar/sidebar.component.d.ts +5 -0
  95. package/package.json +46 -46
@@ -511,14 +511,17 @@ class SidebarComponent extends BaseComponent {
511
511
  this.menuItems = [];
512
512
  this.textService = inject(TextService);
513
513
  this.currentRoute = '';
514
+ this.menuItemsBackup = [];
514
515
  this.router = inject(Router);
515
516
  this.menuService = inject(MenuService);
516
517
  }
517
518
  ngOnInit() {
518
519
  this.currentRoute = this.router.url;
519
520
  this.menuItems = this.menuService.generateMenu();
521
+ this.menuItemsBackup = [...this.menuItems];
520
522
  const menuRefreshSub = this.menuService.refreshSubject.subscribe(() => {
521
523
  this.menuItems = [...this.menuService.generateMenu()];
524
+ this.menuItemsBackup = [...this.menuItems];
522
525
  this.updateActiveRoute();
523
526
  });
524
527
  const routerSub = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(event => {
@@ -535,17 +538,19 @@ class SidebarComponent extends BaseComponent {
535
538
  }
536
539
  return;
537
540
  }
538
- this.resetMenuState(this.menuItems);
539
- item.isActive = true;
540
- this.updateParents(item);
541
+ let newMenuItems = this.resetMenuState(this.menuItems);
542
+ newMenuItems = this.setItemActive(newMenuItems, item, this.hasChildren(item) ? !item.isActive : true);
543
+ newMenuItems = this.updateParents(newMenuItems, item);
544
+ this.menuItems = newMenuItems;
541
545
  if (!!item.clickFunction) {
542
546
  item.clickFunction();
543
547
  return;
544
548
  }
545
- if ((item.children?.length || 0) > 0) {
549
+ if (this.hasChildren(item)) {
546
550
  return;
547
551
  }
548
- this.router.navigate(item.getFullPath()).then();
552
+ const fullPath = this.findItemById(this.menuItemsBackup, item.id).getFullPath();
553
+ this.router.navigate(fullPath).then();
549
554
  }
550
555
  hasChildren(item) {
551
556
  return (item.children?.length || 0) > 0;
@@ -564,50 +569,117 @@ class SidebarComponent extends BaseComponent {
564
569
  if (item.fullPath === fullPath) {
565
570
  return item;
566
571
  }
567
- else if (item.children.length > 0) {
568
- let result;
569
- for (let i = 0; !result && i < item.children.length; i++) {
570
- result = this.findActiveNode(item.children[i], fullPath);
572
+ for (const child of item.children) {
573
+ const found = this.findActiveNode(child, fullPath);
574
+ if (found) {
575
+ return found;
571
576
  }
572
- return result;
573
577
  }
574
578
  return undefined;
575
579
  }
576
580
  updateActiveRoute() {
577
- this.resetMenuState(this.menuItems);
578
- let item;
579
- for (const mi of this.menuItems) {
580
- item = this.findActiveNode(mi, this.currentRoute);
581
- if (!!item) {
581
+ let newMenuItems = this.resetMenuState(this.menuItems);
582
+ const activePath = this.getActivePath(newMenuItems);
583
+ newMenuItems = this.setActivePath(newMenuItems, activePath);
584
+ this.menuItems = newMenuItems;
585
+ }
586
+ setActivePath(items, path) {
587
+ if (path.length === 0) {
588
+ return items;
589
+ }
590
+ return items.map(item => {
591
+ const pathItem = path.find(p => p.id === item.id);
592
+ if (!pathItem) {
593
+ return item;
594
+ }
595
+ const newItem = { ...item, isActive: true };
596
+ if (newItem.children?.length) {
597
+ newItem.children = this.setActivePath(newItem.children, path.filter(p => p.parent?.id === newItem.id));
598
+ newItem.children.forEach(child => child.parent = newItem);
599
+ }
600
+ return newItem;
601
+ });
602
+ }
603
+ getActivePath(items) {
604
+ let activeItem;
605
+ // Find the deepest active item.
606
+ for (const item of items) {
607
+ activeItem = this.findActiveNode(item, this.currentRoute);
608
+ if (activeItem) {
582
609
  break;
583
610
  }
584
611
  }
585
- while (!!item) {
586
- item.isActive = true;
587
- item = item.parent;
612
+ // Collect parent hierarchy.
613
+ const path = [];
614
+ while (activeItem) {
615
+ path.unshift(activeItem);
616
+ activeItem = activeItem.parent;
588
617
  }
618
+ return path;
589
619
  }
590
620
  resetMenuState(items) {
591
- items.forEach(i => {
592
- i.isActive = false;
593
- if (i.children.length > 0) {
594
- this.resetMenuState(i.children);
621
+ return items.map(item => {
622
+ const newItem = { ...item, isActive: false };
623
+ if (newItem.children?.length) {
624
+ newItem.children = this.resetMenuState(newItem.children);
625
+ newItem.children.forEach(child => child.parent = newItem);
626
+ }
627
+ return newItem;
628
+ });
629
+ }
630
+ setItemActive(items, target, isActive) {
631
+ return items.map(item => {
632
+ if (item.id === target.id) {
633
+ const newItem = { ...item, isActive };
634
+ if (newItem.children?.length) {
635
+ newItem.children = this.setItemActive(newItem.children, target, isActive);
636
+ newItem.children.forEach(child => child.parent = newItem);
637
+ }
638
+ return newItem;
595
639
  }
640
+ if (item.children?.length) {
641
+ const newChildren = this.setItemActive(item.children, target, isActive);
642
+ const newItem = { ...item, children: newChildren };
643
+ newChildren.forEach(child => child.parent = newItem);
644
+ return newItem;
645
+ }
646
+ return item;
596
647
  });
597
648
  }
598
- updateParents(menuItem) {
599
- let item = menuItem;
600
- while (!!item) {
601
- item.isActive = true;
602
- item = item.parent;
649
+ updateParents(items, childItem) {
650
+ let parent = childItem.parent;
651
+ let updatedItems = [...items];
652
+ while (parent) {
653
+ updatedItems = updatedItems.map(item => {
654
+ if (item.id === parent.id) {
655
+ return { ...parent, isActive: true };
656
+ }
657
+ return item;
658
+ });
659
+ parent = parent.parent;
660
+ }
661
+ return updatedItems;
662
+ }
663
+ findItemById(items, targetId) {
664
+ for (const item of items) {
665
+ if (item.id === targetId) {
666
+ return item;
667
+ }
668
+ if (item.children?.length) {
669
+ const child = this.findItemById(item.children, targetId);
670
+ if (!!child) {
671
+ return child;
672
+ }
673
+ }
603
674
  }
675
+ return undefined;
604
676
  }
605
677
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
678
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
607
679
  }
608
680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, decorators: [{
609
681
  type: Component,
610
- args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
682
+ args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
611
683
  }], propDecorators: { wrapperClasses: [{
612
684
  type: HostBinding,
613
685
  args: ['class']