@goat-bravos/intern-hub-layout 1.0.1 → 1.0.3

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 (100) hide show
  1. package/dist/intern-hub-layout/README.md +267 -0
  2. package/dist/intern-hub-layout/fesm2022/goat-bravos-intern-hub-layout.mjs +561 -0
  3. package/dist/intern-hub-layout/fesm2022/goat-bravos-intern-hub-layout.mjs.map +1 -0
  4. package/dist/intern-hub-layout/types/goat-bravos-intern-hub-layout.d.ts +189 -0
  5. package/package.json +46 -33
  6. package/.editorconfig +0 -17
  7. package/.vscode/extensions.json +0 -4
  8. package/.vscode/launch.json +0 -20
  9. package/.vscode/mcp.json +0 -9
  10. package/.vscode/tasks.json +0 -42
  11. package/angular.json +0 -131
  12. package/ng-package.json +0 -6
  13. package/projects/layout-templates/README.md +0 -63
  14. package/projects/layout-templates/ng-package.json +0 -7
  15. package/projects/layout-templates/package.json +0 -12
  16. package/projects/layout-templates/src/lib/layout-templates.spec.ts +0 -23
  17. package/projects/layout-templates/src/lib/layout-templates.ts +0 -15
  18. package/projects/layout-templates/src/public-api.ts +0 -5
  19. package/projects/layout-templates/tsconfig.lib.json +0 -17
  20. package/projects/layout-templates/tsconfig.lib.prod.json +0 -11
  21. package/projects/layout-templates/tsconfig.spec.json +0 -15
  22. package/projects/ui-components/README.md +0 -63
  23. package/projects/ui-components/ng-package.json +0 -7
  24. package/projects/ui-components/package.json +0 -12
  25. package/projects/ui-components/src/lib/ui-components.spec.ts +0 -23
  26. package/projects/ui-components/src/lib/ui-components.ts +0 -15
  27. package/projects/ui-components/src/public-api.ts +0 -5
  28. package/projects/ui-components/tsconfig.lib.json +0 -17
  29. package/projects/ui-components/tsconfig.lib.prod.json +0 -11
  30. package/projects/ui-components/tsconfig.spec.json +0 -15
  31. package/public/B/341/273/231 icon message (1).svg" +0 -87
  32. package/public/B/341/273/231 icon message (2).svg" +0 -104
  33. package/public/B/341/273/231 icon message.svg" +0 -98
  34. package/public/FPT-IS-Logo.png +0 -0
  35. package/public/FPT_IS_Logo.svg +0 -12
  36. package/public/favicon.ico +0 -0
  37. package/public/federation.manifest.json +0 -8
  38. package/src/app/app.config.ts +0 -22
  39. package/src/app/app.html +0 -1
  40. package/src/app/app.routes.ts +0 -24
  41. package/src/app/app.scss +0 -0
  42. package/src/app/app.spec.ts +0 -23
  43. package/src/app/app.ts +0 -19
  44. package/src/index.html +0 -15
  45. package/src/libs/layouts/header/header.component.html +0 -27
  46. package/src/libs/layouts/header/header.component.scss +0 -96
  47. package/src/libs/layouts/header/header.component.ts +0 -13
  48. package/src/libs/layouts/main-layout/main-layout.component.html +0 -15
  49. package/src/libs/layouts/main-layout/main-layout.component.scss +0 -35
  50. package/src/libs/layouts/main-layout/main-layout.component.ts +0 -17
  51. package/src/libs/layouts/main-layout-test/main-layout-test.component.html +0 -296
  52. package/src/libs/layouts/main-layout-test/main-layout-test.component.scss +0 -94
  53. package/src/libs/layouts/main-layout-test/main-layout-test.component.ts +0 -121
  54. package/src/libs/layouts/sidebar/sidebar.component.html +0 -7
  55. package/src/libs/layouts/sidebar/sidebar.component.scss +0 -38
  56. package/src/libs/layouts/sidebar/sidebar.component.ts +0 -19
  57. package/src/libs/shared/components/approval/approval-list/approval-list.component.html +0 -19
  58. package/src/libs/shared/components/approval/approval-list/approval-list.component.scss +0 -24
  59. package/src/libs/shared/components/approval/approval-list/approval-list.component.ts +0 -19
  60. package/src/libs/shared/components/approval/approval-list-item/approval-list-item.component.html +0 -21
  61. package/src/libs/shared/components/approval/approval-list-item/approval-list-item.component.scss +0 -28
  62. package/src/libs/shared/components/approval/approval-list-item/approval-list-item.component.ts +0 -20
  63. package/src/libs/shared/components/approval/approval-list-item/approval-list-item.model.ts +0 -8
  64. package/src/libs/shared/components/button/button-container/button-container.component.html +0 -20
  65. package/src/libs/shared/components/button/button-container/button-container.component.scss +0 -49
  66. package/src/libs/shared/components/button/button-container/button-container.component.ts +0 -38
  67. package/src/libs/shared/components/button/button-container/button-container.model.ts +0 -58
  68. package/src/libs/shared/components/button/label-button/label-button.component.html +0 -11
  69. package/src/libs/shared/components/button/label-button/label-button.component.scss +0 -13
  70. package/src/libs/shared/components/button/label-button/label-button.component.ts +0 -18
  71. package/src/libs/shared/components/functional-label/functional-label.component.html +0 -4
  72. package/src/libs/shared/components/functional-label/functional-label.component.scss +0 -58
  73. package/src/libs/shared/components/functional-label/functional-label.component.ts +0 -15
  74. package/src/libs/shared/components/input/input-calendar/input-calendar.component.html +0 -52
  75. package/src/libs/shared/components/input/input-calendar/input-calendar.component.scss +0 -98
  76. package/src/libs/shared/components/input/input-calendar/input-calendar.component.ts +0 -102
  77. package/src/libs/shared/components/input/input-label/input-label.component.html +0 -0
  78. package/src/libs/shared/components/input/input-label/input-label.component.scss +0 -0
  79. package/src/libs/shared/components/input/input-label/input-label.component.ts +0 -0
  80. package/src/libs/shared/components/input/input-stepper/input-stepper.component.html +0 -62
  81. package/src/libs/shared/components/input/input-stepper/input-stepper.component.scss +0 -211
  82. package/src/libs/shared/components/input/input-stepper/input-stepper.component.ts +0 -73
  83. package/src/libs/shared/components/input/input-text/input-text.component.html +0 -40
  84. package/src/libs/shared/components/input/input-text/input-text.component.scss +0 -143
  85. package/src/libs/shared/components/input/input-text/input-text.component.ts +0 -63
  86. package/src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.html +0 -15
  87. package/src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.scss +0 -70
  88. package/src/libs/shared/components/pop-up/pop-up-confirm/pop-up-confirm.component.ts +0 -29
  89. package/src/libs/shared/components/table/table-body/table-body.component.html +0 -18
  90. package/src/libs/shared/components/table/table-body/table-body.component.scss +0 -6
  91. package/src/libs/shared/components/table/table-body/table-body.component.ts +0 -17
  92. package/src/libs/shared/components/table/table-header/table-header.component.html +0 -27
  93. package/src/libs/shared/components/table/table-header/table-header.component.scss +0 -91
  94. package/src/libs/shared/components/table/table-header/table-header.component.ts +0 -25
  95. package/src/main.ts +0 -6
  96. package/src/public-api.ts +0 -22
  97. package/src/styles.scss +0 -27
  98. package/tsconfig.app.json +0 -15
  99. package/tsconfig.json +0 -53
  100. package/tsconfig.spec.json +0 -15
@@ -1,296 +0,0 @@
1
- <ng-template #textRight let-content>
2
- <p class="text-gray-700">{{ content }}</p>
3
- </ng-template>
4
-
5
- <ng-template #buttonRight let-onClick="onClick">
6
- <button class="px-4 py-2 bg-black text-white rounded hover:bg-gray-800" (click)="onClick()">
7
- Xem chi tiết
8
- </button>
9
- </ng-template>
10
-
11
- <!-- DEMO BUTTON AREA -->
12
- <div class="demo-buttons">
13
- <!-- Row 1: Brand buttons -->
14
- <app-button-container
15
- size="xs"
16
- content="XS"
17
- backgroundColor="var(--brand-600)"
18
- color="#fff"
19
- (buttonClick)="onButtonClick('XS Brand')"
20
- ></app-button-container>
21
- <app-button-container
22
- size="sm"
23
- content="SM Button"
24
- leftIcon="◀"
25
- rightIcon="▶"
26
- backgroundColor="var(--brand-600)"
27
- color="#fff"
28
- (buttonClick)="onButtonClick('SM Brand')"
29
- ></app-button-container>
30
- <app-button-container
31
- size="md"
32
- content="MD Button"
33
- leftIcon="◀"
34
- rightIcon="▶"
35
- backgroundColor="var(--brand-600)"
36
- color="#fff"
37
- (buttonClick)="onButtonClick('MD Brand')"
38
- ></app-button-container>
39
- <app-button-container
40
- size="lg"
41
- content="LG Button"
42
- leftIcon="◀"
43
- rightIcon="▶"
44
- backgroundColor="var(--brand-600)"
45
- color="#fff"
46
- (buttonClick)="onButtonClick('LG Brand')"
47
- ></app-button-container>
48
- </div>
49
-
50
- <div class="demo-buttons">
51
- <!-- Row 2: Primary buttons -->
52
- <app-button-container
53
- size="xs"
54
- content="XS"
55
- backgroundColor="var(--primary-600)"
56
- color="#fff"
57
- (buttonClick)="onButtonClick('XS Primary')"
58
- ></app-button-container>
59
- <app-button-container
60
- size="sm"
61
- content="SM Button"
62
- leftIcon="★"
63
- rightIcon="★"
64
- backgroundColor="var(--primary-600)"
65
- color="#fff"
66
- (buttonClick)="onButtonClick('SM Primary')"
67
- ></app-button-container>
68
- <app-button-container
69
- size="md"
70
- content="MD Button"
71
- leftIcon="★"
72
- rightIcon="★"
73
- backgroundColor="var(--primary-600)"
74
- color="#fff"
75
- (buttonClick)="onButtonClick('MD Primary')"
76
- ></app-button-container>
77
- <app-button-container
78
- size="lg"
79
- content="LG Button"
80
- leftIcon="★"
81
- rightIcon="★"
82
- backgroundColor="var(--primary-600)"
83
- color="#fff"
84
- (buttonClick)="onButtonClick('LG Primary')"
85
- ></app-button-container>
86
- </div>
87
-
88
- <!-- APPROVAL LIST DEMO -->
89
- <div class="demo-approval-list">
90
- <app-approval-list
91
- [rows]="approvalRows"
92
- headerContentLeft="Thao tác"
93
- headerContentRight="Danh sách chờ duyệt"
94
- width="600px"
95
- >
96
- </app-approval-list>
97
- </div>
98
-
99
- <!-- INPUT TEXT DEMO SECTION -->
100
- <div class="demo-section">
101
- <h3 class="demo-section-title">INPUT TEXT</h3>
102
- <div class="input-text-demo-grid">
103
- <!-- Row 1: Basic inputs -->
104
- <app-input-text
105
- headerInput="Input Label"
106
- placeholder="Placeholder..."
107
- [required]="true"
108
- width="100%"
109
- icon="dsi dsi-anchor-line dsi-theme-red-600"
110
- ></app-input-text>
111
-
112
- <app-input-text
113
- headerInput="Input Label"
114
- placeholder="Placeholder..."
115
- [required]="true"
116
- width="100%"
117
- ></app-input-text>
118
-
119
- <app-input-text placeholder="Placeholder..." width="100%"></app-input-text>
120
-
121
- <app-input-text placeholder="Placeholder..." width="100%" [readonly]="true"></app-input-text>
122
-
123
- <!-- Row 2: With helper text and character limit -->
124
- <app-input-text
125
- headerInput="Input Label"
126
- placeholder="Placeholder..."
127
- [required]="true"
128
- [maxLength]="500"
129
- [showLimit]="true"
130
- width="100%"
131
- ></app-input-text>
132
-
133
- <app-input-text
134
- headerInput="Input Label"
135
- placeholder="Placeholder..."
136
- [required]="true"
137
- [maxLength]="500"
138
- [showLimit]="true"
139
- width="100%"
140
- ></app-input-text>
141
-
142
- <app-input-text
143
- placeholder="Placeholder..."
144
- [maxLength]="500"
145
- [showLimit]="true"
146
- width="100%"
147
- ></app-input-text>
148
-
149
- <app-input-text
150
- placeholder="Placeholder..."
151
- [maxLength]="500"
152
- [showLimit]="true"
153
- width="100%"
154
- [readonly]="true"
155
- ></app-input-text>
156
- </div>
157
- </div>
158
-
159
- <!-- PASSWORD DEMO SECTION -->
160
- <div class="demo-section">
161
- <h3 class="demo-section-title">PASSWORD INPUT</h3>
162
- <div class="input-text-demo-grid">
163
- <app-input-text
164
- headerInput="Mật khẩu"
165
- placeholder="Nhập mật khẩu..."
166
- [typeInput]="passwordType"
167
- [icon]="passwordIcon"
168
- (iconClick)="togglePassword()"
169
- [required]="true"
170
- width="250px"
171
- ></app-input-text>
172
-
173
- <app-input-text
174
- headerInput="Tìm kiếm"
175
- placeholder="Tìm kiếm theo tên..."
176
- icon="fa-solid fa-magnifying-glass"
177
- width="250px"
178
- ></app-input-text>
179
- </div>
180
- </div>
181
-
182
- <!-- CALENDAR DEMO SECTION -->
183
- <div class="demo-section">
184
- <h3 class="demo-section-title">CALENDAR INPUT</h3>
185
- <div class="input-text-demo-grid">
186
- <app-input-calendar
187
- headerInput="Ngày sinh"
188
- placeholder="dd/mm/yyyy"
189
- [required]="true"
190
- ></app-input-calendar>
191
-
192
- <app-input-calendar
193
- headerInput="Date Picker"
194
- placeholder="dd/mm/yyyy"
195
- [required]="true"
196
- ></app-input-calendar>
197
- </div>
198
- </div>
199
-
200
- <!-- STEPPER DEMO SECTION -->
201
- <div class="demo-section">
202
- <h3 class="demo-section-title">INPUT STEPPER</h3>
203
- <div class="stepper-demo-grid">
204
- <!-- Default State -->
205
- <app-input-stepper
206
- headerInput="Input Label"
207
- helperText="Placeholder of hint text to help"
208
- [min]="0"
209
- [max]="100"
210
- [step]="1"
211
- [value]="0"
212
- [required]="true"
213
- width="250px"
214
- ></app-input-stepper>
215
-
216
- <!-- Negative State -->
217
- <app-input-stepper
218
- headerInput="Input Label"
219
- helperText="Placeholder of hint text to help"
220
- state="negative"
221
- [min]="0"
222
- [max]="100"
223
- [step]="1"
224
- [value]="0"
225
- [required]="true"
226
- width="250px"
227
- ></app-input-stepper>
228
-
229
- <!-- Positive State -->
230
- <app-input-stepper
231
- headerInput="Input Label"
232
- helperText="Placeholder of hint text to help"
233
- state="positive"
234
- [min]="0"
235
- [max]="100"
236
- [step]="1"
237
- [value]="0"
238
- [required]="true"
239
- width="250px"
240
- ></app-input-stepper>
241
-
242
- <!-- Disabled State -->
243
- <app-input-stepper
244
- headerInput="Input Label"
245
- helperText="Placeholder of hint text to help"
246
- [disabled]="true"
247
- [min]="0"
248
- [max]="100"
249
- [step]="1"
250
- [value]="0"
251
- [required]="true"
252
- width="250px"
253
- ></app-input-stepper>
254
- </div>
255
- </div>
256
-
257
- <!-- TABLE DEMO SECTION -->
258
- <div class="demo-section">
259
- <h3 class="demo-section-title">TABLE</h3>
260
- <ng-template #statusTemplate let-status>
261
- <app-button-container
262
- [content]="status"
263
- [backgroundColor]="status === 'Active' ? 'var(--brand-600)' : 'var(--neutral-color-100)'"
264
- [color]="status === 'Active' ? 'var(--neutral-color-100)' : 'var(--neutral-color-600)'"
265
- borderColor="transparent"
266
- ></app-button-container>
267
- </ng-template>
268
-
269
- <table>
270
- <thead>
271
- <tr app-table-header [columns]="columns" [backgroundColor]="tableBackgroundColor"></tr>
272
- </thead>
273
-
274
- <tbody
275
- app-table-body
276
- [rows]="rows"
277
- [columns]="columns"
278
- [columnTemplates]="{ status: statusTemplate }"
279
- ></tbody>
280
- </table>
281
- </div>
282
-
283
- <!-- ROUTER CONTENT (keep it for children if any, though likely unused now) -->
284
- <router-outlet />
285
-
286
- @if (showPopup) {
287
- <app-pop-up-confirm
288
- imgUrl="/Bộ icon message (1).svg"
289
- title="Xác nhận hành động"
290
- content="Bạn có chắc chắn muốn thực hiện hành động này không?"
291
- colorButton="var(--brand-600)"
292
- (confirmClick)="onPopupConfirm()"
293
- (cancelClick)="onPopupCancel()"
294
- >
295
- </app-pop-up-confirm>
296
- }
@@ -1,94 +0,0 @@
1
- .web-container {
2
- display: flex;
3
- justify-content: center;
4
- align-items: flex-start;
5
- background-color: var(--brand-100);
6
- min-height: 100vh;
7
- width: 100%;
8
- }
9
-
10
- .main-layout {
11
- background-color: var(--brand-100);
12
- min-height: 100vh;
13
- display: flex;
14
- flex-direction: column;
15
- padding: 4px;
16
- width: 100%;
17
- max-width: 1370px;
18
- margin: 0 auto;
19
- }
20
-
21
- .main-layout-content {
22
- background-color: var(--brand-900);
23
- }
24
-
25
- .layout-body {
26
- padding: 16px 8px;
27
- margin: 0;
28
- display: flex;
29
- flex: 1;
30
- width: 100%;
31
- justify-content: flex-start;
32
- }
33
-
34
- .layout-body-sidebar {
35
- flex-shrink: 0;
36
- width: auto;
37
- min-width: 56px;
38
- }
39
-
40
- .demo-buttons {
41
- display: flex;
42
- gap: 16px;
43
- flex-wrap: wrap;
44
- align-items: center;
45
-
46
- & + .demo-buttons {
47
- margin-top: 16px;
48
- }
49
- }
50
-
51
- .layout-body-content {
52
- flex: 1;
53
- min-width: 0;
54
- overflow: hidden;
55
- margin-left: 12px;
56
- }
57
-
58
- .stepper-demo-grid {
59
- display: grid;
60
- grid-template-columns: repeat(2, 1fr);
61
- gap: 24px;
62
- padding: 24px;
63
- background-color: var(--neutral-color-10);
64
- border-radius: var(--radius-md);
65
- }
66
-
67
- .demo-section {
68
- margin-top: 24px;
69
- padding: 24px;
70
- background-color: var(--neutral-color-10);
71
- border-radius: var(--radius-md);
72
- border: 2px dashed var(--neutral-color-200);
73
- }
74
-
75
- .demo-section-title {
76
- font-size: var(--font-sm);
77
- font-weight: 600;
78
- color: var(--neutral-color-600);
79
- margin: 0 0 16px 0;
80
- text-transform: uppercase;
81
- letter-spacing: 0.5px;
82
- }
83
-
84
- .input-text-demo-grid {
85
- display: grid;
86
- grid-template-columns: repeat(4, 1fr);
87
- gap: 24px;
88
- }
89
-
90
- table {
91
- width: 100%;
92
- border-collapse: collapse;
93
- table-layout: fixed;
94
- }
@@ -1,121 +0,0 @@
1
- import { Component, TemplateRef, ViewChild } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { RouterOutlet } from '@angular/router';
4
-
5
- import { ApprovalListItemInterface } from '../../shared/components/approval/approval-list-item/approval-list-item.model';
6
- import { ButtonContainerComponent } from '../../shared/components/button/button-container/button-container.component';
7
- import { InputTextComponent } from '../../shared/components/input/input-text/input-text.component';
8
- import { InputCalendarComponent } from '../../shared/components/input/input-calendar/input-calendar.component';
9
- import { ApprovalListComponent } from '../../shared/components/approval/approval-list/approval-list.component';
10
- import { PopUpConfirmComponent } from '../../shared/components/pop-up/pop-up-confirm/pop-up-confirm.component';
11
- import { InputStepperComponent } from '../../shared/components/input/input-stepper/input-stepper.component';
12
- import { TableBodyComponent } from '../../shared/components/table/table-body/table-body.component';
13
- import {
14
- ColumnConfig,
15
- TableHeaderComponent,
16
- } from '../../shared/components/table/table-header/table-header.component';
17
-
18
- @Component({
19
- selector: 'app-main-layout-test',
20
- standalone: true,
21
- imports: [
22
- CommonModule,
23
- RouterOutlet,
24
- ButtonContainerComponent,
25
- ApprovalListComponent,
26
- InputTextComponent,
27
- InputCalendarComponent,
28
- PopUpConfirmComponent,
29
- InputStepperComponent,
30
- TableBodyComponent,
31
- TableHeaderComponent,
32
- ],
33
- templateUrl: './main-layout-test.component.html',
34
- styleUrls: ['./main-layout-test.component.scss'],
35
- })
36
- export class MainLayoutTestComponent {
37
- @ViewChild('textRight', { static: true })
38
- textRight!: TemplateRef<any>;
39
-
40
- @ViewChild('buttonRight', { static: true })
41
- buttonRight!: TemplateRef<any>;
42
-
43
- // Sample data for approval list
44
- approvalRows: ApprovalListItemInterface[] = [
45
- { name: 'Nguyễn Văn A', date: new Date('2026-01-15') },
46
- { name: 'Trần Thị B', date: new Date('2026-01-20') },
47
- { name: 'Lê Văn C', date: new Date('2026-01-25') },
48
- { name: 'Phạm Thị D', date: new Date('2026-01-28') },
49
- ];
50
- tableBackgroundColor = 'var(--brand-600)';
51
-
52
- columns: ColumnConfig[] = [
53
- { key: 'name', header: 'Tên', width: '20%' },
54
- { key: 'role', header: 'Chức vụ', width: '15%' },
55
- { key: 'status', header: 'Trạng thái', width: '15%' },
56
- { key: 'email', header: 'Email', width: '30%' },
57
- { key: 'date', header: 'Ngày', width: '20%' },
58
- ];
59
-
60
- rows = [
61
- {
62
- name: 'Nguyễn Văn A',
63
- role: 'Developer',
64
- status: 'Active',
65
- email: 'a.nguyen@example.com',
66
- date: '15/01/2026',
67
- },
68
- {
69
- name: 'Trần Thị B',
70
- role: 'Tester',
71
- status: 'Inactive',
72
- email: 'b.tran@example.com',
73
- date: '20/01/2026',
74
- },
75
- {
76
- name: 'Lê Văn C',
77
- role: 'Manager',
78
- status: 'Active',
79
- email: 'c.le@example.com',
80
- date: '25/01/2026',
81
- },
82
- {
83
- name: 'Phạm Thị D',
84
- role: 'Designer',
85
- status: 'Pending',
86
- email: 'd.pham@example.com',
87
- date: '28/01/2026',
88
- },
89
- ];
90
-
91
- showPopup = false;
92
-
93
- onButtonClick(buttonName: string): void {
94
- console.log(`Button clicked: ${buttonName}`);
95
- this.showPopup = true;
96
- }
97
-
98
- onPopupConfirm(): void {
99
- console.log('✅ Popup confirmed!');
100
- this.showPopup = false;
101
- }
102
-
103
- onPopupCancel(): void {
104
- console.log('❌ Popup cancelled!');
105
- this.showPopup = false;
106
- }
107
-
108
- // Password toggle logic demo
109
- passwordType: 'text' | 'password' = 'password';
110
- passwordIcon: string = 'fa-solid fa-eye-slash';
111
-
112
- togglePassword(): void {
113
- if (this.passwordType === 'password') {
114
- this.passwordType = 'text';
115
- this.passwordIcon = 'fa-solid fa-eye';
116
- } else {
117
- this.passwordType = 'password';
118
- this.passwordIcon = 'fa-solid fa-eye-slash';
119
- }
120
- }
121
- }
@@ -1,7 +0,0 @@
1
- <div class="sidebar-wrapper">
2
- <aside class="sidebar">
3
- @for (item of menuItems; track $index) {
4
- <app-functional-label [icon]="item.icon" [content]="item.content"></app-functional-label>
5
- }
6
- </aside>
7
- </div>
@@ -1,38 +0,0 @@
1
- // Sidebar Component - System Design Format
2
- :host {
3
- display: block;
4
- height: 100%; // Đảm bảo component chiếm hết chiều cao của cha
5
- }
6
-
7
- .sidebar-wrapper {
8
- width: 56px;
9
- height: 100%;
10
- transition: width 0.3s ease;
11
- }
12
-
13
- .sidebar {
14
- width: 56px;
15
- height: 100%;
16
- padding: 8px;
17
- box-sizing: border-box; // Giữ nguyên chiều cao khi thay đổi padding
18
-
19
- background-color: var(--brand-600);
20
- // Bo góc trên, nhưng bỏ bo góc dưới để tràn xuống
21
- border-radius: 16px;
22
-
23
- overflow: hidden;
24
-
25
- transition:
26
- width 0.3s ease,
27
- padding 0.3s ease,
28
- background-color 0.3s ease;
29
- }
30
-
31
- .sidebar-wrapper:hover {
32
- width: 344px;
33
- .sidebar {
34
- width: 344px;
35
- padding: 16px;
36
- background-color: var(--theme-neutral-light-100);
37
- }
38
- }
@@ -1,19 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FunctionalLabelComponent } from '../../shared/components/functional-label/functional-label.component';
4
-
5
- export interface SidebarItem {
6
- icon: string;
7
- content: string;
8
- }
9
-
10
- @Component({
11
- selector: 'app-sidebar',
12
- standalone: true,
13
- imports: [CommonModule, FunctionalLabelComponent],
14
- templateUrl: './sidebar.component.html',
15
- styleUrls: ['./sidebar.component.scss'],
16
- })
17
- export class SidebarComponent {
18
- @Input() menuItems: SidebarItem[] = [];
19
- }
@@ -1,19 +0,0 @@
1
- <div class="approval-list" [style.width]="width">
2
- <div class="approval-list-header">
3
- <span class="approval-list-header-left">{{ headerContentRight }}</span>
4
- <div>
5
- <p>{{ headerContentLeft }}</p>
6
- </div>
7
- </div>
8
-
9
- <div class="approval-list-content" [style.width]="width">
10
- <app-approval-list-item
11
- *ngFor="let row of rows"
12
- [name]="row.name"
13
- [date]="row.date"
14
- [rightTemplate]="row.rightTemplate"
15
- [rightContext]="row.rightContext"
16
- >
17
- </app-approval-list-item>
18
- </div>
19
- </div>
@@ -1,24 +0,0 @@
1
- .approval-list {
2
- display: flex;
3
- flex-direction: column;
4
- background-color: var(--theme-neutral-light-100);
5
- border-radius: 16px;
6
- }
7
-
8
- .approval-list-header {
9
- display: flex;
10
- justify-content: space-between;
11
- align-items: center;
12
- padding: 16px 8px;
13
- height: fit-content;
14
- }
15
-
16
- .approval-list-header span {
17
- font-size: 20px;
18
- color: var(--brand-600);
19
- font-weight: bold;
20
- }
21
-
22
- .approval-list-header p {
23
- font-size: var(--font-sm);
24
- }
@@ -1,19 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ApprovalListItemInterface } from '../approval-list-item/approval-list-item.model';
4
- import { ApprovalListItemComponent } from '../approval-list-item/approval-list-item.component';
5
-
6
- @Component({
7
- selector: 'app-approval-list',
8
- standalone: true,
9
- imports: [CommonModule, ApprovalListItemComponent],
10
- templateUrl: './approval-list.component.html',
11
- styleUrls: ['./approval-list.component.scss'],
12
- })
13
- export class ApprovalListComponent {
14
- @Input() rows: ApprovalListItemInterface[] = [];
15
-
16
- @Input() headerContentRight!: string;
17
- @Input() headerContentLeft!: string;
18
- @Input() width!: string;
19
- }
@@ -1,21 +0,0 @@
1
- <div class="approval-item">
2
- <!-- LEFT -->
3
- <div class="approval-item-left">
4
- <span class="approval-item-left-name">{{ name }}</span>
5
- <span class="approval-item-left-date">
6
- <span class="approval-item-left-date-title">Ngày tạo đơn:</span>
7
- {{ date | date: 'dd/MM/yyyy' }}
8
- </span>
9
- </div>
10
-
11
- <div class="approval-item-right">
12
- <ng-container *ngIf="rightTemplate; else defaultRight">
13
- <ng-container *ngTemplateOutlet="rightTemplate; context: rightContext">
14
- </ng-container>
15
- </ng-container>
16
-
17
- <ng-template #defaultRight>
18
- <span class="text-gray-400">—</span>
19
- </ng-template>
20
- </div>
21
- </div>
@@ -1,28 +0,0 @@
1
- .approval-item {
2
- display: flex;
3
- justify-content: space-between;
4
- min-width: 400px;
5
- height: fit-content;
6
- align-items: center;
7
- padding: 16px 8px;
8
- }
9
-
10
- .approval-item-left-date-title {
11
- color: var(--theme-neutral-500);
12
- }
13
-
14
- .approval-item-right p {
15
- color: var(--secondary-800);
16
- font-weight: 500;
17
- }
18
-
19
- .approval-item-left {
20
- display: flex;
21
- flex-direction: column;
22
- gap: 8px;
23
- }
24
-
25
- span,
26
- p {
27
- font-size: var(--font-sm);
28
- }