tango-app-ui-shared 3.0.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 (114) hide show
  1. package/.eslintrc.json +37 -0
  2. package/README.md +24 -0
  3. package/ng-package.json +7 -0
  4. package/package.json +12 -0
  5. package/src/lib/guards/auth.guard.ts +20 -0
  6. package/src/lib/i18n/index.ts +2 -0
  7. package/src/lib/i18n/translation.module.ts +9 -0
  8. package/src/lib/i18n/translation.service.ts +61 -0
  9. package/src/lib/i18n/vocabs/ch.ts +105 -0
  10. package/src/lib/i18n/vocabs/de.ts +105 -0
  11. package/src/lib/i18n/vocabs/en.ts +105 -0
  12. package/src/lib/i18n/vocabs/es.ts +105 -0
  13. package/src/lib/i18n/vocabs/fr.ts +105 -0
  14. package/src/lib/i18n/vocabs/jp.ts +105 -0
  15. package/src/lib/interceptors/http-auth-interceptor.ts +21 -0
  16. package/src/lib/interfaces/global-state.ts +6 -0
  17. package/src/lib/modules/errors/error404/error404.component.html +24 -0
  18. package/src/lib/modules/errors/error404/error404.component.scss +0 -0
  19. package/src/lib/modules/errors/error404/error404.component.spec.ts +25 -0
  20. package/src/lib/modules/errors/error404/error404.component.ts +50 -0
  21. package/src/lib/modules/errors/error500/error500.component.html +24 -0
  22. package/src/lib/modules/errors/error500/error500.component.scss +0 -0
  23. package/src/lib/modules/errors/error500/error500.component.spec.ts +25 -0
  24. package/src/lib/modules/errors/error500/error500.component.ts +50 -0
  25. package/src/lib/modules/errors/errors-routing.module.ts +30 -0
  26. package/src/lib/modules/errors/errors.component.html +15 -0
  27. package/src/lib/modules/errors/errors.component.scss +4 -0
  28. package/src/lib/modules/errors/errors.component.spec.ts +25 -0
  29. package/src/lib/modules/errors/errors.component.ts +42 -0
  30. package/src/lib/modules/errors/errors.module.ts +21 -0
  31. package/src/lib/modules/layout/content/content.component.html +12 -0
  32. package/src/lib/modules/layout/content/content.component.scss +0 -0
  33. package/src/lib/modules/layout/content/content.component.ts +35 -0
  34. package/src/lib/modules/layout/footer/footer.component.html +32 -0
  35. package/src/lib/modules/layout/footer/footer.component.scss +0 -0
  36. package/src/lib/modules/layout/footer/footer.component.spec.ts +25 -0
  37. package/src/lib/modules/layout/footer/footer.component.ts +13 -0
  38. package/src/lib/modules/layout/header/header-menu/header-menu.component.html +27 -0
  39. package/src/lib/modules/layout/header/header-menu/header-menu.component.scss +4 -0
  40. package/src/lib/modules/layout/header/header-menu/header-menu.component.spec.ts +25 -0
  41. package/src/lib/modules/layout/header/header-menu/header-menu.component.ts +38 -0
  42. package/src/lib/modules/layout/header/header.component.html +90 -0
  43. package/src/lib/modules/layout/header/header.component.scss +0 -0
  44. package/src/lib/modules/layout/header/header.component.spec.ts +25 -0
  45. package/src/lib/modules/layout/header/header.component.ts +139 -0
  46. package/src/lib/modules/layout/header/navbar/navbar.component.html +92 -0
  47. package/src/lib/modules/layout/header/navbar/navbar.component.scss +0 -0
  48. package/src/lib/modules/layout/header/navbar/navbar.component.spec.ts +23 -0
  49. package/src/lib/modules/layout/header/navbar/navbar.component.ts +20 -0
  50. package/src/lib/modules/layout/header/page-title/page-title.component.html +32 -0
  51. package/src/lib/modules/layout/header/page-title/page-title.component.ts +40 -0
  52. package/src/lib/modules/layout/keenicon/icons.json +1 -0
  53. package/src/lib/modules/layout/keenicon/keenicon.component.html +4 -0
  54. package/src/lib/modules/layout/keenicon/keenicon.component.scss +0 -0
  55. package/src/lib/modules/layout/keenicon/keenicon.component.spec.ts +23 -0
  56. package/src/lib/modules/layout/keenicon/keenicon.component.ts +30 -0
  57. package/src/lib/modules/layout/layout/layout.component.html +70 -0
  58. package/src/lib/modules/layout/layout/layout.component.scss +15 -0
  59. package/src/lib/modules/layout/layout/layout.component.ts +399 -0
  60. package/src/lib/modules/layout/layout.module.ts +93 -0
  61. package/src/lib/modules/layout/scripts-init/scripts-init.component.html +0 -0
  62. package/src/lib/modules/layout/scripts-init/scripts-init.component.ts +81 -0
  63. package/src/lib/modules/layout/scroll-top/scroll-top.component.html +1 -0
  64. package/src/lib/modules/layout/scroll-top/scroll-top.component.ts +75 -0
  65. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.html +9 -0
  66. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.scss +0 -0
  67. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.spec.ts +23 -0
  68. package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.ts +13 -0
  69. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.html +26 -0
  70. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.scss +0 -0
  71. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.spec.ts +23 -0
  72. package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.ts +36 -0
  73. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.html +276 -0
  74. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.scss +0 -0
  75. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.spec.ts +23 -0
  76. package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.ts +15 -0
  77. package/src/lib/modules/layout/sidebar/sidebar.component.html +16 -0
  78. package/src/lib/modules/layout/sidebar/sidebar.component.scss +0 -0
  79. package/src/lib/modules/layout/sidebar/sidebar.component.spec.ts +23 -0
  80. package/src/lib/modules/layout/sidebar/sidebar.component.ts +203 -0
  81. package/src/lib/modules/layout/toolbar/accounting/accounting.component.html +84 -0
  82. package/src/lib/modules/layout/toolbar/accounting/accounting.component.scss +0 -0
  83. package/src/lib/modules/layout/toolbar/accounting/accounting.component.spec.ts +23 -0
  84. package/src/lib/modules/layout/toolbar/accounting/accounting.component.ts +14 -0
  85. package/src/lib/modules/layout/toolbar/classic/classic.component.html +37 -0
  86. package/src/lib/modules/layout/toolbar/classic/classic.component.scss +0 -0
  87. package/src/lib/modules/layout/toolbar/classic/classic.component.spec.ts +23 -0
  88. package/src/lib/modules/layout/toolbar/classic/classic.component.ts +88 -0
  89. package/src/lib/modules/layout/toolbar/extended/extended.component.html +100 -0
  90. package/src/lib/modules/layout/toolbar/extended/extended.component.scss +0 -0
  91. package/src/lib/modules/layout/toolbar/extended/extended.component.spec.ts +23 -0
  92. package/src/lib/modules/layout/toolbar/extended/extended.component.ts +12 -0
  93. package/src/lib/modules/layout/toolbar/reports/reports.component.html +62 -0
  94. package/src/lib/modules/layout/toolbar/reports/reports.component.scss +0 -0
  95. package/src/lib/modules/layout/toolbar/reports/reports.component.spec.ts +23 -0
  96. package/src/lib/modules/layout/toolbar/reports/reports.component.ts +14 -0
  97. package/src/lib/modules/layout/toolbar/saas/saas.component.html +77 -0
  98. package/src/lib/modules/layout/toolbar/saas/saas.component.scss +0 -0
  99. package/src/lib/modules/layout/toolbar/saas/saas.component.spec.ts +23 -0
  100. package/src/lib/modules/layout/toolbar/saas/saas.component.ts +14 -0
  101. package/src/lib/modules/layout/toolbar/toolbar.component.html +27 -0
  102. package/src/lib/modules/layout/toolbar/toolbar.component.scss +0 -0
  103. package/src/lib/modules/layout/toolbar/toolbar.component.spec.ts +25 -0
  104. package/src/lib/modules/layout/toolbar/toolbar.component.ts +125 -0
  105. package/src/lib/routes/route-wraper-modules/manage-wrapper.module.ts +12 -0
  106. package/src/lib/routes/route-wraper-modules/profile-wrapper.module.ts +12 -0
  107. package/src/lib/routes/route-wraper-modules/store-wrapper.module.ts +12 -0
  108. package/src/lib/routes/routing.ts +72 -0
  109. package/src/lib/services/auth.service.ts +16 -0
  110. package/src/lib/services/global-state.service.ts +11 -0
  111. package/src/public-api.ts +64 -0
  112. package/tsconfig.lib.json +14 -0
  113. package/tsconfig.lib.prod.json +10 -0
  114. package/tsconfig.spec.json +14 -0
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { SidebarMenuComponent } from './sidebar-menu.component';
4
+
5
+ describe('SidebarMenuComponent', () => {
6
+ let component: SidebarMenuComponent;
7
+ let fixture: ComponentFixture<SidebarMenuComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ declarations: [ SidebarMenuComponent ]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(SidebarMenuComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,15 @@
1
+ import { Component, OnInit } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: 'lib-sidebar-menu',
5
+ templateUrl: './sidebar-menu.component.html',
6
+ styleUrls: ['./sidebar-menu.component.scss']
7
+ })
8
+ export class SidebarMenuComponent implements OnInit {
9
+
10
+ constructor() { }
11
+
12
+ ngOnInit(): void {
13
+ }
14
+
15
+ }
@@ -0,0 +1,16 @@
1
+ <!--begin::Logo-->
2
+ <lib-sidebar-logo class="app-sidebar-logo px-6" id="kt_app_sidebar_logo"
3
+ [toggleButtonClass]="toggleButtonClass" [toggleEnabled]="toggleEnabled" [toggleType]="toggleType"
4
+ [toggleState]="toggleState">
5
+ </lib-sidebar-logo>
6
+ <!--end::Logo-->
7
+
8
+ <!--begin::sidebar menu-->
9
+ <lib-sidebar-menu class="app-sidebar-menu overflow-hidden flex-column-fluid">
10
+ </lib-sidebar-menu>
11
+ <!--end::sidebar menu-->
12
+
13
+ <!--begin::Footer-->
14
+ <lib-sidebar-footer class="app-sidebar-footer flex-column-auto pt-2 pb-6 px-6" id="kt_app_sidebar_footer">
15
+ </lib-sidebar-footer>
16
+ <!--end::Footer-->
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { SidebarComponent } from './sidebar.component';
4
+
5
+ describe('SidebarComponent', () => {
6
+ let component: SidebarComponent;
7
+ let fixture: ComponentFixture<SidebarComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ declarations: [ SidebarComponent ]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(SidebarComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,203 @@
1
+ import { Component, Input, OnDestroy, OnInit } from '@angular/core';
2
+ import { Subscription } from 'rxjs';
3
+ import { LayoutService } from 'tango-app-metronics';
4
+ import { ILayout, LayoutType } from 'tango-app-metronics/lib/layout/core/configs/config';
5
+
6
+ @Component({
7
+ selector: 'lib-sidebar',
8
+ templateUrl: './sidebar.component.html',
9
+ styleUrls: ['./sidebar.component.scss'],
10
+ })
11
+ export class SidebarComponent implements OnInit, OnDestroy {
12
+ private unsubscribe: Subscription[] = [];
13
+
14
+ // public props
15
+ appSidebarDisplay: boolean;
16
+ appSidebarDefaultFixedDesktop: boolean;
17
+ appSidebarDefaultMinimizeDesktopEnabled: boolean;
18
+ appSidebarDefaultMinimizeDesktopDefault: boolean;
19
+ appSidebarDefaultMinimizeDesktopHoverable: boolean;
20
+ appSidebarDefaultMinimizeMobileEnabled: boolean;
21
+ appSidebarDefaultMinimizeMobileDefault: boolean;
22
+ appSidebarDefaultMinimizeMobileHoverable: boolean;
23
+ appSidebarDefaultCollapseDesktopEnabled: boolean;
24
+ appSidebarDefaultCollapseDesktopDefault: boolean;
25
+ appSidebarDefaultCollapseMobileEnabled: boolean;
26
+ appSidebarDefaultCollapseMobileDefault: boolean;
27
+
28
+ appSidebarDefaultPushHeader: boolean;
29
+ appSidebarDefaultPushToolbar: boolean;
30
+ appSidebarDefaultPushFooter: boolean;
31
+
32
+ appSidebarDefaultStacked: boolean;
33
+
34
+ // logo
35
+ appSidebarDefaultMinimizeDefault: boolean;
36
+ toggleButtonClass: string;
37
+ toggleEnabled: boolean;
38
+ toggleType: string;
39
+ toggleState: string;
40
+
41
+ constructor(private layout: LayoutService) {}
42
+
43
+ ngOnInit(): void {
44
+ const subscr = this.layout.layoutConfigSubject
45
+ .asObservable()
46
+ .subscribe((config: ILayout) => {
47
+ this.updateProps(config);
48
+ });
49
+ this.unsubscribe.push(subscr);
50
+ }
51
+
52
+ updateProps(config: ILayout) {
53
+ this.appSidebarDisplay = this.layout.getProp('app.sidebar.display', config) as boolean;
54
+ if (!this.appSidebarDisplay) {
55
+ return;
56
+ }
57
+
58
+ this.appSidebarDefaultFixedDesktop = this.layout.getProp(
59
+ 'app.sidebar.default.fixed.desktop',
60
+ config
61
+ ) as boolean;
62
+
63
+ this.appSidebarDefaultMinimizeDesktopEnabled = this.layout.getProp(
64
+ 'app.sidebar.default.minimize.desktop.enabled',
65
+ config
66
+ ) as boolean;
67
+ if (this.appSidebarDefaultMinimizeDesktopEnabled) {
68
+ this.appSidebarDefaultMinimizeDesktopDefault = this.layout.getProp(
69
+ 'app.sidebar.default.minimize.desktop.default',
70
+ config
71
+ ) as boolean;
72
+ // if (this.appSidebarDefaultMinimizeDesktopDefault) {
73
+ document.body.setAttribute('data-kt-app-sidebar-minimize', 'on');
74
+ // }
75
+
76
+ this.appSidebarDefaultMinimizeDesktopHoverable = this.layout.getProp(
77
+ 'app.sidebar.default.minimize.desktop.hoverable',
78
+ config
79
+ ) as boolean;
80
+ if (this.appSidebarDefaultMinimizeDesktopHoverable) {
81
+ document.body.setAttribute('data-kt-app-sidebar-hoverable', 'true');
82
+ }
83
+ }
84
+
85
+ this.appSidebarDefaultMinimizeMobileEnabled = this.layout.getProp(
86
+ 'app.sidebar.default.minimize.mobile.enabled',
87
+ config
88
+ ) as boolean;
89
+ if (this.appSidebarDefaultMinimizeMobileEnabled) {
90
+ this.appSidebarDefaultMinimizeMobileDefault = this.layout.getProp(
91
+ 'app.sidebar.default.minimize.mobile.default',
92
+ config
93
+ ) as boolean;
94
+ // if (this.appSidebarDefaultMinimizeMobileDefault) {
95
+ document.body.setAttribute('data-kt-app-sidebar-minimize-mobile', 'on');
96
+ // }
97
+
98
+ this.appSidebarDefaultMinimizeMobileHoverable = this.layout.getProp(
99
+ 'app.sidebar.default.minimize.mobile.hoverable',
100
+ config
101
+ ) as boolean;
102
+ if (this.appSidebarDefaultMinimizeMobileHoverable) {
103
+ document.body.setAttribute(
104
+ 'data-kt-app-sidebar-hoverable-mobile',
105
+ 'true'
106
+ );
107
+ }
108
+ }
109
+
110
+ this.appSidebarDefaultCollapseDesktopEnabled = this.layout.getProp(
111
+ 'app.sidebar.default.collapse.desktop.enabled',
112
+ config
113
+ ) as boolean;
114
+ if (this.appSidebarDefaultCollapseDesktopEnabled) {
115
+ this.appSidebarDefaultCollapseDesktopDefault = this.layout.getProp(
116
+ 'app.sidebar.default.collapse.desktop.default',
117
+ config
118
+ ) as boolean;
119
+ if (this.appSidebarDefaultCollapseDesktopDefault) {
120
+ document.body.setAttribute('data-kt-app-sidebar-collapse', 'on');
121
+ }
122
+ }
123
+
124
+ this.appSidebarDefaultCollapseMobileEnabled = this.layout.getProp(
125
+ 'app.sidebar.default.collapse.mobile.enabled',
126
+ config
127
+ ) as boolean;
128
+ if (this.appSidebarDefaultCollapseMobileEnabled) {
129
+ this.appSidebarDefaultCollapseMobileDefault = this.layout.getProp(
130
+ 'app.sidebar.default.collapse.mobile.default',
131
+ config
132
+ ) as boolean;
133
+ if (this.appSidebarDefaultCollapseMobileDefault) {
134
+ document.body.setAttribute('data-kt-app-sidebar-collapse-mobile', 'on');
135
+ }
136
+ }
137
+
138
+ if (this.layout.getProp('app.sidebar.default.push')) {
139
+ this.appSidebarDefaultPushHeader = this.layout.getProp(
140
+ 'app.sidebar.default.push.header',
141
+ config
142
+ ) as boolean;
143
+ if (this.appSidebarDefaultPushHeader) {
144
+ document.body.setAttribute('data-kt-app-sidebar-push-header', 'true');
145
+ }
146
+
147
+ this.appSidebarDefaultPushToolbar = this.layout.getProp(
148
+ 'app.sidebar.default.push.toolbar',
149
+ config
150
+ ) as boolean;
151
+ if (this.appSidebarDefaultPushToolbar) {
152
+ document.body.setAttribute('data-kt-app-sidebar-push-toolbar', 'true');
153
+ }
154
+
155
+ this.appSidebarDefaultPushFooter = this.layout.getProp(
156
+ 'app.sidebar.default.push.footer',
157
+ config
158
+ ) as boolean;
159
+ if (this.appSidebarDefaultPushFooter) {
160
+ document.body.setAttribute('data-kt-app-sidebar-push-footer', 'true');
161
+ }
162
+ }
163
+
164
+ this.appSidebarDefaultStacked = this.layout.getProp(
165
+ 'app.sidebar.default.stacked',
166
+ config
167
+ ) as boolean;
168
+ if (this.appSidebarDefaultStacked) {
169
+ document.body.setAttribute('app-sidebar-stacked', 'true');
170
+ }
171
+
172
+ // Logo
173
+ this.appSidebarDefaultMinimizeDefault = this.layout.getProp(
174
+ 'app.sidebar.default.minimize.desktop.default',
175
+ config
176
+ ) as boolean;
177
+ this.toggleButtonClass = this.appSidebarDefaultMinimizeDefault
178
+ ? 'active'
179
+ : '';
180
+ this.toggleEnabled =
181
+ this.appSidebarDefaultMinimizeDesktopEnabled ||
182
+ this.appSidebarDefaultCollapseDesktopEnabled;
183
+ if (this.appSidebarDefaultMinimizeDesktopEnabled) {
184
+ this.toggleType = 'minimize';
185
+ this.toggleState = 'active';
186
+ }
187
+
188
+ if (this.appSidebarDefaultCollapseDesktopEnabled) {
189
+ this.toggleType = 'collapse';
190
+ this.toggleState = '';
191
+ }
192
+
193
+ document.body.setAttribute('data-kt-app-sidebar-enabled', 'true');
194
+ document.body.setAttribute(
195
+ 'data-kt-app-sidebar-fixed',
196
+ this.appSidebarDefaultFixedDesktop.toString()
197
+ );
198
+ }
199
+
200
+ ngOnDestroy() {
201
+ this.unsubscribe.forEach((sb) => sb.unsubscribe());
202
+ }
203
+ }
@@ -0,0 +1,84 @@
1
+ <!--begin::Input group-->
2
+ <div class="d-flex align-items-center flex-shrink-0">
3
+ <!--begin::Label-->
4
+ <span class="fs-7 text-gray-700 fw-bold pe-3 d-none d-md-block">Actions:</span>
5
+ <!--end::Label-->
6
+
7
+ <!--begin::Actions-->
8
+ <div class="d-flex flex-shrink-0">
9
+ <!--begin::Button-->
10
+ <div data-bs-toggle="tooltip" data-bs-placement="top" data-bs-trigger="hover" title="Add a team member">
11
+ <a href="#" class="btn btn-sm btn-icon btn-active-color-success">
12
+ <lib-keenicon name="plus-square" class="fs-2x"></lib-keenicon>
13
+ </a>
14
+ </div>
15
+ <!--end::Button-->
16
+
17
+ <!--begin::Button-->
18
+ <div data-bs-toggle="tooltip" data-bs-placement="top" data-bs-trigger="hover" title="Create new account">
19
+ <a href="#" class="btn btn-sm btn-icon btn-active-color-success">
20
+ <lib-keenicon name="gen037.svg" class="fs-2x"></lib-keenicon>
21
+ </a>
22
+ </div>
23
+ <!--end::Button-->
24
+
25
+ <!--begin::Button-->
26
+ <div data-bs-toggle="tooltip" data-bs-placement="top" data-bs-trigger="hover" title="Invite friends">
27
+ <a href="#" class="btn btn-sm btn-icon btn-active-color-success">
28
+ <lib-keenicon name="dots-square" class="fs-2x"></lib-keenicon>
29
+ </a>
30
+ </div>
31
+ <!--end::Button-->
32
+ </div>
33
+ <!--end::Actions-->
34
+ </div>
35
+ <!--end::Input group-->
36
+
37
+ <!--begin::Input group-->
38
+ <div class="d-flex align-items-center flex-shrink-0">
39
+ <!--begin::Desktop separartor-->
40
+ <div class="bullet bg-secondary h-35px w-1px mx-5"></div>
41
+ <!--end::Desktop separartor-->
42
+
43
+ <!--begin::Label-->
44
+ <span class="fs-7 text-gray-700 fw-bold pe-4 ps-1 d-none d-md-block">Progress:</span>
45
+ <!--end::Label-->
46
+
47
+ <div class="progress w-100px w-xl-150px w-xxl-300px h-25px bg-light-success">
48
+ <div class="progress-bar rounded bg-success fs-7 fw-bold" role="progressbar" style="width: 72%;" aria-valuenow="72"
49
+ aria-valuemin="0" aria-valuemax="100">72%</div>
50
+ </div>
51
+ </div>
52
+ <!--end::Input group-->
53
+ <!--end::Toolbar start-->
54
+
55
+ <!--begin::Toolbar end-->
56
+ <div class="d-flex align-items-center">
57
+ <!--begin::Input group-->
58
+ <div class="me-3">
59
+ <!--begin::Select-->
60
+ <select class="form-select form-select-sm form-select-solid" data-control="select2" data-placeholder="Latest"
61
+ data-hide-search="true">
62
+ <option value=""></option>
63
+ <option value="1" selected>Today 16 Feb</option>
64
+ <option value="2">In Progress</option>
65
+ <option value="3">Done</option>
66
+ </select>
67
+ <!--end::Select-->
68
+ </div>
69
+ <!--end::Input group--->
70
+
71
+ <!--begin::Input group--->
72
+ <div class="m-0">
73
+ <!--begin::Select-->
74
+ <select class="form-select form-select-sm form-select-solid w-md-125px" data-control="select2"
75
+ data-placeholder="Filters" data-hide-search="true">
76
+ <option value=""></option>
77
+ <option value="1" selected>Filters</option>
78
+ <option value="2">In Progress</option>
79
+ <option value="3">Done</option>
80
+ </select>
81
+ <!--end::Content-->
82
+ </div>
83
+ <!--end::Input group--->
84
+ </div>
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { AccountingComponent } from './accounting.component';
4
+
5
+ describe('AccountingComponent', () => {
6
+ let component: AccountingComponent;
7
+ let fixture: ComponentFixture<AccountingComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ declarations: [ AccountingComponent ]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(AccountingComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,14 @@
1
+ import { Component, OnInit } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: 'lib-accounting',
5
+ templateUrl: './accounting.component.html',
6
+ styleUrls: ['./accounting.component.scss']
7
+ })
8
+ export class AccountingComponent implements OnInit {
9
+ constructor() { }
10
+
11
+ ngOnInit(): void {
12
+ }
13
+
14
+ }
@@ -0,0 +1,37 @@
1
+ <ng-container *ngIf="appToolbarFilterButton">
2
+ <!--begin::Filter menu-->
3
+ <div class="m-0">
4
+ <!--begin::Menu toggle-->
5
+ <a href="#" class="btn btn-sm btn-flex fw-bold" [ngClass]="daterangepickerButtonClass" data-kt-menu-trigger="click"
6
+ data-kt-menu-placement="bottom-end">
7
+ <lib-keenicon name="filter" class="fs-6 text-muted me-1"></lib-keenicon>
8
+ Filter
9
+ </a>
10
+ <!--end::Menu toggle-->
11
+
12
+ <!-- <lib-dropdown-menu1></lib-dropdown-menu1> -->
13
+ </div>
14
+ <!--end::Filter menu-->
15
+ </ng-container>
16
+
17
+ <ng-container *ngIf="appToolbarDaterangepickerButton">
18
+ <div data-kt-daterangepicker="true" data-kt-daterangepicker-opens="left"
19
+ class="btn btn-sm fw-bold d-flex align-items-center px-4" [ngClass]="daterangepickerButtonClass">
20
+ <!--begin::Display range-->
21
+ <div class="text-gray-600 fw-bold">
22
+ Loading date range...
23
+ </div>
24
+ <!--end::Display range-->
25
+ <lib-keenicon name="calendar-8" class="fs-1 ms-2 me-0"></lib-keenicon>
26
+ </div>
27
+ </ng-container>
28
+
29
+ <!--begin::Secondary button-->
30
+ <a href="javascript:;" class="btn btn-sm btn-flex btn-light fw-bold">
31
+ Filter
32
+ </a>
33
+ <!--end::Secondary button-->
34
+
35
+ <!--begin::Primary button-->
36
+ <a href="javascript:;" class="btn btn-sm fw-bold btn-primary" data-bs-toggle="modal" data-bs-target="#kt_modal_create_app">Create</a>
37
+ <!--end::Primary button-->
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { ClassicComponent } from './classic.component';
4
+
5
+ describe('ClassicComponent', () => {
6
+ let component: ClassicComponent;
7
+ let fixture: ComponentFixture<ClassicComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ declarations: [ ClassicComponent ]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(ClassicComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,88 @@
1
+ import { Component, Input, OnDestroy, OnInit } from '@angular/core';
2
+ import { Subscription } from 'rxjs';
3
+ import { LayoutService } from 'tango-app-metronics';
4
+
5
+ @Component({
6
+ selector: 'lib-classic',
7
+ templateUrl: './classic.component.html',
8
+ styleUrls: ['./classic.component.scss'],
9
+ })
10
+ export class ClassicComponent implements OnInit, OnDestroy {
11
+ private unsubscribe: Subscription[] = [];
12
+ appToolbarPrimaryButton: boolean;
13
+ appToolbarPrimaryButtonLabel: string = '';
14
+ appToolbarPrimaryButtonUrl: string = '';
15
+ appToolbarPrimaryButtonModal: string = '';
16
+ appToolbarSecondaryButton: boolean;
17
+ appToolbarFixedDesktop: boolean;
18
+ appToolbarSecondaryButtonLabel: string = '';
19
+ appToolbarSecondaryButtonUrl: string = '';
20
+ appToolbarSecondaryButtonModal: string = '';
21
+ appToolbarFilterButton: boolean;
22
+ appToolbarDaterangepickerButton: boolean;
23
+ secondaryButtonClass: string = '';
24
+ filterButtonClass: string = '';
25
+ daterangepickerButtonClass: string = '';
26
+
27
+ constructor(private layout: LayoutService) {}
28
+
29
+ ngOnInit(): void {
30
+ this.updateProps();
31
+ const subscr = this.layout.layoutConfigSubject
32
+ .asObservable()
33
+ .subscribe(() => {
34
+ this.updateProps();
35
+ });
36
+ this.unsubscribe.push(subscr);
37
+ }
38
+
39
+ updateProps() {
40
+ this.appToolbarPrimaryButton = this.layout.getProp(
41
+ 'app.toolbar.primaryButton'
42
+ ) as boolean;
43
+ this.appToolbarPrimaryButtonLabel = this.layout.getProp(
44
+ 'app.toolbar.primaryButtonLabel'
45
+ ) as string;
46
+ this.appToolbarPrimaryButtonUrl = this.layout.getProp(
47
+ 'app.toolbar.primaryButtonUrl'
48
+ ) as string;
49
+ this.appToolbarPrimaryButtonModal = this.layout.getProp(
50
+ 'app.toolbar.primaryButtonModal'
51
+ ) as string;
52
+ this.appToolbarSecondaryButton = this.layout.getProp(
53
+ 'app.toolbar.secondaryButton'
54
+ ) as boolean;
55
+ this.secondaryButtonClass = this.appToolbarFixedDesktop
56
+ ? 'btn-light'
57
+ : 'bg-body btn-color-gray-700 btn-active-color-primary';
58
+ this.appToolbarFixedDesktop = this.layout.getProp(
59
+ 'appToolbarFixedDesktop'
60
+ ) as boolean;
61
+ this.appToolbarSecondaryButtonLabel = this.layout.getProp(
62
+ 'appToolbarSecondaryButtonLabel'
63
+ ) as string;
64
+ this.appToolbarSecondaryButtonUrl = this.layout.getProp(
65
+ 'appToolbarSecondaryButtonUrl'
66
+ ) as string;
67
+ this.appToolbarSecondaryButtonModal = this.layout.getProp(
68
+ 'appToolbarSecondaryButtonModal'
69
+ ) as string;
70
+ this.appToolbarFilterButton = this.layout.getProp(
71
+ 'appToolbarFilterButton'
72
+ ) as boolean;
73
+ this.appToolbarDaterangepickerButton = this.layout.getProp(
74
+ 'appToolbarDaterangepickerButton'
75
+ ) as boolean;
76
+
77
+ this.filterButtonClass = this.appToolbarFixedDesktop
78
+ ? 'btn-light'
79
+ : 'bg-body btn-color-gray-600 btn-active-color-primary';
80
+ this.daterangepickerButtonClass = this.appToolbarFixedDesktop
81
+ ? 'btn-light'
82
+ : 'bg-body btn-color-gray-700 btn-active-color-primary';
83
+ }
84
+
85
+ ngOnDestroy() {
86
+ this.unsubscribe.forEach((sb) => sb.unsubscribe());
87
+ }
88
+ }
@@ -0,0 +1,100 @@
1
+ <!--begin::Label-->
2
+ <span class="fs-7 fw-bold text-gray-700 pe-4 d-none d-md-block">Team:</span>
3
+ <!--end::Label-->
4
+
5
+ <!--begin::Users-->
6
+ <div class="symbol-group symbol-hover flex-shrink-0 me-2">
7
+ <!--begin::User-->
8
+ <div class="symbol symbol-circle symbol-35px">
9
+ <div class="symbol-label fw-bold bg-warning text-inverse-warning">A</div>
10
+ </div>
11
+ <!--end::User-->
12
+
13
+ <!--begin::User-->
14
+ <div class="symbol symbol-circle symbol-35px">
15
+ <img src="./assets/media/avatars/300-1.jpg" alt="" />
16
+ </div>
17
+ <!--end::User-->
18
+
19
+ <!--begin::User-->
20
+ <div class="symbol symbol-circle symbol-35px">
21
+ <img src="./assets/media/avatars/300-2.jpg" alt="" />
22
+ </div>
23
+ <!--end::User-->
24
+
25
+ <!--begin::User-->
26
+ <div class="symbol symbol-circle symbol-35px">
27
+ <div class="symbol-label fw-bold bg-primary text-inverse-primary">S</div>
28
+ </div>
29
+ <!--end::User-->
30
+
31
+ <!--begin::User-->
32
+ <div class="symbol symbol-circle symbol-35px">
33
+ <img src="./assets/media/avatars/300-5.jpg" alt="" />
34
+ </div>
35
+ <!--end::User-->
36
+
37
+ <!--begin::User-->
38
+ <div class="symbol symbol-circle symbol-35px">
39
+ <div class="symbol-label fw-bold bg-danger text-inverse-danger">P</div>
40
+ </div>
41
+ <!--end::User-->
42
+
43
+ <!--begin::User-->
44
+ <div class="symbol symbol-circle symbol-35px">
45
+ <img src="./assets/media/avatars/300-20.jpg" alt="" />
46
+ </div>
47
+ <!--end::User-->
48
+ </div>
49
+ <!--end::Users-->
50
+
51
+ <!--begin::Button-->
52
+ <div data-bs-toggle="tooltip" data-bs-placement="top" data-bs-trigger="hover" title="Invite a team member">
53
+ <a href="#" class="btn btn-sm btn-icon">
54
+ <lib-keenicon name="plus-square" class="fs-2hx text-success"></lib-keenicon>
55
+ </a>
56
+ </div>
57
+ <!--end::Button-->
58
+ <!--end::Toolbar start-->
59
+
60
+ <!--begin::Toolbar end-->
61
+ <div class="d-flex align-items-center overflow-auto">
62
+ <!--begin::Search-->
63
+ <div class="position-relative my-1">
64
+ <lib-keenicon name="magnifier" class="fs-3 text-gray500 position-absolute top-50 translate-middle ps-10"></lib-keenicon>
65
+ <input type="text" class="form-control form-control-sm form-control-solid w-150px ps-10" name="Search Team" value=""
66
+ placeholder="Search Team" />
67
+ </div>
68
+ <!--end::Search-->
69
+
70
+ <!--begin::Separartor-->
71
+ <div class="bullet bg-secondary h-35px w-1px mx-6"></div>
72
+ <!--end::Separartor-->
73
+
74
+ <!--begin::Label-->
75
+ <span class="fs-7 fw-bold text-gray-700 flex-shrink-0 pe-4 d-none d-md-block">Sort By:</span>
76
+ <!--end::Label-->
77
+
78
+ <!--begin::Select-->
79
+ <select class="form-select form-select-sm w-125px form-select-solid me-6" data-control="select2"
80
+ data-placeholder="Latest" data-hide-search="true">
81
+ <option value=""></option>
82
+ <option value="1" selected>Latest</option>
83
+ <option value="2">In Progress</option>
84
+ <option value="3">Done</option>
85
+ </select>
86
+ <!--end::Select-->
87
+
88
+ <!--begin::Actions-->
89
+ <div class="d-flex align-items-center">
90
+ <button type="button" class="btn btn-sm btn-icon btn-light-primary me-3" data-bs-toggle="tooltip"
91
+ data-bs-placement="top" title="Enable grid view">
92
+ <lib-keenicon name="element-11" class="fs-3 text-primary"></lib-keenicon>
93
+ </button>
94
+
95
+ <button type="button" class="btn btn-sm btn-icon btn-light" data-bs-toggle="tooltip" data-bs-placement="top"
96
+ title="Enable row view">
97
+ <lib-keenicon name="row-horizontal" class="fs-3 text-gray400"></lib-keenicon>
98
+ </button>
99
+ </div>
100
+ <!--end::Actions-->