@cadriciel/layout-cerema 0.0.4
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.
- package/fesm2022/cadriciel-layout-cerema.mjs +1576 -0
- package/fesm2022/cadriciel-layout-cerema.mjs.map +1 -0
- package/package.json +35 -0
- package/src/assets/layout/images/avatar.png +0 -0
- package/src/assets/layout/images/logo-cadriciel.png +0 -0
- package/src/assets/layout/images/logo-cerema.png +0 -0
- package/src/assets/layout/images/logo-cerema.svg +4 -0
- package/src/assets/layout/images/logo-dark.svg +3 -0
- package/src/assets/layout/images/logo-light.svg +3 -0
- package/src/lib/cerema-styles.scss +41 -0
- package/src/lib/cerema-tailwind.css +10 -0
- package/src/lib/styles/_breadcrumb.scss +18 -0
- package/src/lib/styles/_config.scss +8 -0
- package/src/lib/styles/_content.scss +20 -0
- package/src/lib/styles/_fonts.scss +32 -0
- package/src/lib/styles/_footer.scss +26 -0
- package/src/lib/styles/_main.scss +29 -0
- package/src/lib/styles/_responsive.scss +181 -0
- package/src/lib/styles/_sass_variables.scss +1 -0
- package/src/lib/styles/_sidebar.scss +3 -0
- package/src/lib/styles/_topbar.scss +230 -0
- package/src/lib/styles/_utils.scss +19 -0
- package/src/lib/styles/layout.scss +15 -0
- package/src/lib/styles/sidebar/_sidebar_slim.scss +146 -0
- package/src/lib/styles/sidebar/_sidebar_slim_plus.scss +158 -0
- package/src/lib/styles/sidebar/_sidebar_vertical.scss +132 -0
- package/src/lib/styles/theme/_dark.scss +10 -0
- package/src/lib/styles/theme/_light.scss +10 -0
- package/src/lib/styles/theme/_primary.scss +10 -0
- package/src/lib/styles/theme/_themes.scss +3 -0
- package/src/lib/styles/variables/_common.scss +15 -0
- package/src/lib/styles/variables/_dark.scss +3 -0
- package/src/lib/styles/variables/_light.scss +3 -0
- package/types/cadriciel-layout-cerema.d.ts +112 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
@media screen and (min-width: 992px) {
|
|
2
|
+
.layout-container {
|
|
3
|
+
&.layout-slim-plus {
|
|
4
|
+
.layout-topbar {
|
|
5
|
+
.app-logo {
|
|
6
|
+
width: 5rem;
|
|
7
|
+
justify-content: center;
|
|
8
|
+
|
|
9
|
+
span {
|
|
10
|
+
display: none;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.topbar-menu {
|
|
15
|
+
margin: 0 2rem;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.topbar-menubutton {
|
|
20
|
+
display: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.layout-sidebar {
|
|
24
|
+
width: 7rem;
|
|
25
|
+
overflow: visible;
|
|
26
|
+
|
|
27
|
+
.layout-menu-container {
|
|
28
|
+
overflow: auto;
|
|
29
|
+
display: flex;
|
|
30
|
+
justify-content: center;
|
|
31
|
+
padding: 0;
|
|
32
|
+
|
|
33
|
+
&::-webkit-scrollbar {
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.layout-content-wrapper {
|
|
40
|
+
margin-left: 7rem;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.layout-menu {
|
|
44
|
+
ul {
|
|
45
|
+
display: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
li.active-menuitem {
|
|
49
|
+
> ul {
|
|
50
|
+
display: block;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
.layout-root-menuitem {
|
|
54
|
+
> .layout-menuitem-root-text {
|
|
55
|
+
display: none;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
> a {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: center;
|
|
63
|
+
border-radius: var(--border-radius);
|
|
64
|
+
text-align: center;
|
|
65
|
+
cursor: pointer;
|
|
66
|
+
outline: none;
|
|
67
|
+
transition: background-color var(--transition-duration);
|
|
68
|
+
width: auto;
|
|
69
|
+
height: auto;
|
|
70
|
+
margin: 0 auto 1rem auto;
|
|
71
|
+
padding: 0.75rem 0;
|
|
72
|
+
color: var(--v-menuitem-text-color);
|
|
73
|
+
|
|
74
|
+
&:hover {
|
|
75
|
+
background: var(--v-menuitem-hover-bg);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.layout-submenu-toggler {
|
|
79
|
+
display: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.layout-menuitem-icon {
|
|
83
|
+
font-size: 1.75rem;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.layout-menuitem-text {
|
|
87
|
+
font-size: 0.875rem;
|
|
88
|
+
display: block;
|
|
89
|
+
margin-top: 0.25rem;
|
|
90
|
+
color: var(--menuitem-text-color);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
> ul {
|
|
95
|
+
position: absolute;
|
|
96
|
+
left: 7rem;
|
|
97
|
+
top: 0;
|
|
98
|
+
min-width: 15rem;
|
|
99
|
+
background-color: var(--surface-overlay);
|
|
100
|
+
border-radius: var(--border-radius);
|
|
101
|
+
box-shadow:
|
|
102
|
+
0px 4px 10px rgb(0 0 0 / 3%),
|
|
103
|
+
0px 0px 2px rgb(0 0 0 / 6%),
|
|
104
|
+
0px 2px 6px rgb(0 0 0 / 12%);
|
|
105
|
+
padding: 1rem;
|
|
106
|
+
max-height: 20rem;
|
|
107
|
+
overflow: auto;
|
|
108
|
+
z-index: 999;
|
|
109
|
+
|
|
110
|
+
a {
|
|
111
|
+
color: var(--v-overlay-menuitem-text-color);
|
|
112
|
+
|
|
113
|
+
&:hover {
|
|
114
|
+
background: var(--v-overlay-menuitem-hover-bg);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
li {
|
|
119
|
+
a {
|
|
120
|
+
padding-left: 0.5rem;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
li {
|
|
124
|
+
a {
|
|
125
|
+
padding-left: 1.5rem;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
li {
|
|
129
|
+
a {
|
|
130
|
+
padding-left: 2.5rem;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
li {
|
|
134
|
+
a {
|
|
135
|
+
padding-left: 3.5rem;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
li {
|
|
139
|
+
a {
|
|
140
|
+
padding-left: 4.5rem;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
li {
|
|
144
|
+
a {
|
|
145
|
+
padding-left: 5.5rem;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
.layout-sidebar {
|
|
2
|
+
position: fixed;
|
|
3
|
+
width: 14rem;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
height: calc(100% - 5rem);
|
|
7
|
+
left: 0;
|
|
8
|
+
top: 5rem;
|
|
9
|
+
user-select: none;
|
|
10
|
+
background: var(--v-body-bg);
|
|
11
|
+
z-index: 999;
|
|
12
|
+
|
|
13
|
+
.layout-menu-container {
|
|
14
|
+
overflow: auto;
|
|
15
|
+
flex: 1;
|
|
16
|
+
height: 100%;
|
|
17
|
+
padding: 1rem 1.5rem;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.layout-menu {
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
list-style-type: none;
|
|
24
|
+
|
|
25
|
+
.layout-root-menuitem {
|
|
26
|
+
> .layout-menuitem-root-text {
|
|
27
|
+
font-size: .857rem;
|
|
28
|
+
text-transform: uppercase;
|
|
29
|
+
font-weight: 700;
|
|
30
|
+
padding: 1rem 0 .5rem 0;
|
|
31
|
+
color: var(--v-menuitem-text-color-secondary);
|
|
32
|
+
|
|
33
|
+
.active-route {
|
|
34
|
+
font-weight: 700;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
> a {
|
|
39
|
+
display: none;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
li {
|
|
44
|
+
&.active-menuitem {
|
|
45
|
+
> a {
|
|
46
|
+
.layout-submenu-toggler {
|
|
47
|
+
transform: rotate(-180deg);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
ul {
|
|
54
|
+
margin: 0;
|
|
55
|
+
padding: 0;
|
|
56
|
+
list-style-type: none;
|
|
57
|
+
|
|
58
|
+
a {
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
outline: 0 none;
|
|
62
|
+
position: relative;
|
|
63
|
+
color: var(--v-menuitem-text-color);
|
|
64
|
+
padding: .5rem;
|
|
65
|
+
margin-bottom: .25rem;
|
|
66
|
+
border-radius: var(--border-radius);
|
|
67
|
+
line-height: 1;
|
|
68
|
+
transition: background-color var(--transition-duration), box-shadow var(--transition-duration);
|
|
69
|
+
cursor: pointer;
|
|
70
|
+
|
|
71
|
+
.layout-menuitem-icon {
|
|
72
|
+
margin-right: .5rem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.layout-submenu-toggler {
|
|
76
|
+
font-size: 75%;
|
|
77
|
+
margin-left: auto;
|
|
78
|
+
transition: transform var(--transition-duration);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&.active-route {
|
|
82
|
+
font-weight: 700;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&:hover {
|
|
86
|
+
background: var(--v-menuitem-hover-bg);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
ul {
|
|
91
|
+
overflow: hidden;
|
|
92
|
+
border-radius: var(--border-radius);
|
|
93
|
+
|
|
94
|
+
li {
|
|
95
|
+
a {
|
|
96
|
+
padding-left: 1.5rem;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
li {
|
|
100
|
+
a {
|
|
101
|
+
padding-left: 2.5rem;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
li {
|
|
105
|
+
a {
|
|
106
|
+
padding-left: 3.5rem;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
li {
|
|
110
|
+
a {
|
|
111
|
+
padding-left: 4.5rem;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
li {
|
|
115
|
+
a {
|
|
116
|
+
padding-left: 5.5rem;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
li {
|
|
120
|
+
a {
|
|
121
|
+
padding-left: 6.5rem;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
.layout-dark {
|
|
2
|
+
--v-body-bg: var(--p-surface-900);
|
|
3
|
+
--v-menuitem-text-color-secondary: var(--text-color-secondary);
|
|
4
|
+
--v-menuitem-text-color: var(--text-color);
|
|
5
|
+
--v-menuitem-hover-bg: var(--surface-hover);
|
|
6
|
+
--v-overlay-menuitem-text-color: var(--text-color);
|
|
7
|
+
--v-overlay-menuitem-hover-bg: var(--surface-hover);
|
|
8
|
+
--v-topbar-search-button-bg: var(--surface-ground);
|
|
9
|
+
--v-topbar-search-button-icon-color: var(--v-menuitem-text-color-secondary);
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
.layout-light {
|
|
2
|
+
--v-body-bg: var(--p-surface-0);
|
|
3
|
+
--v-menuitem-text-color-secondary: var(--text-color-secondary);
|
|
4
|
+
--v-menuitem-text-color: var(--text-color);
|
|
5
|
+
--v-menuitem-hover-bg: var(--surface-hover);
|
|
6
|
+
--v-overlay-menuitem-text-color: var(--text-color);
|
|
7
|
+
--v-overlay-menuitem-hover-bg: var(--surface-hover);
|
|
8
|
+
--v-topbar-search-button-bg: var(--surface-ground);
|
|
9
|
+
--v-topbar-search-button-icon-color: var(--v-menuitem-text-color-secondary);
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
.layout-primary {
|
|
2
|
+
--v-body-bg: linear-gradient(147.38deg, var(--p-primary-500) 0%, var(--p-primary-800) 100%);
|
|
3
|
+
--v-menuitem-text-color-secondary: var(--primary-color-text);
|
|
4
|
+
--v-menuitem-text-color: var(--primary-color-text);
|
|
5
|
+
--v-menuitem-hover-bg: rgba(255, 255, 255, 0.1);
|
|
6
|
+
--v-overlay-menuitem-text-color: var(--text-color);
|
|
7
|
+
--v-overlay-menuitem-hover-bg: var(--surface-hover);
|
|
8
|
+
--v-topbar-search-button-bg: var(--primary-color-text);
|
|
9
|
+
--v-topbar-search-button-icon-color: var(--primary-color);
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--primary-color: var(--p-primary-color);
|
|
3
|
+
--primary-color-text: var(--p-primary-contrast-color);
|
|
4
|
+
--text-color: var(--p-text-color);
|
|
5
|
+
--text-color-secondary: var(--p-text-muted-color);
|
|
6
|
+
--surface-border: var(--p-content-border-color);
|
|
7
|
+
--surface-card: var(--p-content-background);
|
|
8
|
+
--surface-hover: var(--p-content-hover-background);
|
|
9
|
+
--surface-overlay: var(--p-overlay-popover-background);
|
|
10
|
+
--transition-duration: var(--p-transition-duration);
|
|
11
|
+
--maskbg: var(--p-mask-background);
|
|
12
|
+
--border-radius: var(--p-content-border-radius);
|
|
13
|
+
--layout-section-transition-duration: 0.2s;
|
|
14
|
+
--focus-ring-shadow: var(--p-focus-ring-shadow);
|
|
15
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { ElementRef, OnInit, OnDestroy, Renderer2 } from '@angular/core';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import * as rxjs from 'rxjs';
|
|
5
|
+
import { Subscription } from 'rxjs';
|
|
6
|
+
import * as _cadriciel_core from '@cadriciel/core';
|
|
7
|
+
import { LayoutService as LayoutService$1, UserService } from '@cadriciel/core';
|
|
8
|
+
import { MenuItem } from 'primeng/api';
|
|
9
|
+
|
|
10
|
+
interface MenuChangeEvent {
|
|
11
|
+
key: string;
|
|
12
|
+
routeEvent?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface TabCloseEvent {
|
|
15
|
+
tab: MenuItem;
|
|
16
|
+
index: number;
|
|
17
|
+
}
|
|
18
|
+
declare class LayoutService extends LayoutService$1 {
|
|
19
|
+
private menuSource;
|
|
20
|
+
private tabOpen;
|
|
21
|
+
private tabClose;
|
|
22
|
+
tabs: MenuItem[];
|
|
23
|
+
menuSource$: rxjs.Observable<MenuChangeEvent>;
|
|
24
|
+
tabOpen$: rxjs.Observable<MenuItem>;
|
|
25
|
+
tabClose$: rxjs.Observable<TabCloseEvent>;
|
|
26
|
+
constructor();
|
|
27
|
+
onMenuStateChange(event: MenuChangeEvent): void;
|
|
28
|
+
showProfileSidebar(): void;
|
|
29
|
+
onTabOpen(value: MenuItem): void;
|
|
30
|
+
openTab(value: MenuItem): void;
|
|
31
|
+
onTabClose(value: MenuItem, index: number): void;
|
|
32
|
+
closeTab(index: number): void;
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LayoutService, never>;
|
|
34
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LayoutService>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare class AppTopbar {
|
|
38
|
+
menu: MenuItem[];
|
|
39
|
+
searchInput: ElementRef;
|
|
40
|
+
menuButton: ElementRef;
|
|
41
|
+
searchActive: boolean;
|
|
42
|
+
layoutService: LayoutService;
|
|
43
|
+
userService: UserService;
|
|
44
|
+
constructor();
|
|
45
|
+
currentUserSignal: i0.Signal<_cadriciel_core.User>;
|
|
46
|
+
formatRoles(roles: string[] | undefined): string;
|
|
47
|
+
get userInitials(): string;
|
|
48
|
+
onMenuButtonClick(): void;
|
|
49
|
+
activateSearch(): void;
|
|
50
|
+
deactivateSearch(): void;
|
|
51
|
+
removeTab(event: any, item: MenuItem, index: number): void;
|
|
52
|
+
get layoutTheme(): string | undefined;
|
|
53
|
+
set layoutTheme(value: string);
|
|
54
|
+
get logo(): string;
|
|
55
|
+
get tabs(): MenuItem[];
|
|
56
|
+
onConfigButtonClick(): void;
|
|
57
|
+
toggleConfigSidebar(): void;
|
|
58
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppTopbar, never>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppTopbar, "[app-topbar]", never, {}, {}, never, never, true, never>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
declare class AppMenu implements OnInit {
|
|
63
|
+
el: ElementRef;
|
|
64
|
+
private menuService;
|
|
65
|
+
menuContainer: ElementRef;
|
|
66
|
+
model: MenuItem[];
|
|
67
|
+
ngOnInit(): void;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppMenu, never>;
|
|
69
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppMenu, "[app-menu]", never, {}, {}, never, never, true, never>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
declare class AppSidebar {
|
|
73
|
+
el: ElementRef<any>;
|
|
74
|
+
appMenu: AppMenu;
|
|
75
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppSidebar, never>;
|
|
76
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppSidebar, "[app-sidebar]", never, {}, {}, never, never, true, never>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
declare class AppLayout implements OnDestroy {
|
|
80
|
+
layoutService: LayoutService;
|
|
81
|
+
renderer: Renderer2;
|
|
82
|
+
router: Router;
|
|
83
|
+
overlayMenuOpenSubscription: Subscription;
|
|
84
|
+
tabOpenSubscription: Subscription;
|
|
85
|
+
tabCloseSubscription: Subscription;
|
|
86
|
+
menuOutsideClickListener: any;
|
|
87
|
+
menuScrollListener: any;
|
|
88
|
+
appSidebar: AppSidebar;
|
|
89
|
+
appTopbar: AppTopbar;
|
|
90
|
+
constructor(layoutService: LayoutService, renderer: Renderer2, router: Router);
|
|
91
|
+
blockBodyScroll(): void;
|
|
92
|
+
unblockBodyScroll(): void;
|
|
93
|
+
hideMenu(): void;
|
|
94
|
+
get containerClass(): {
|
|
95
|
+
'layout-slim': boolean;
|
|
96
|
+
'layout-slim-plus': boolean;
|
|
97
|
+
'layout-static': boolean;
|
|
98
|
+
'layout-overlay': boolean;
|
|
99
|
+
'layout-overlay-active': boolean;
|
|
100
|
+
'layout-mobile-active': boolean;
|
|
101
|
+
'layout-static-inactive': boolean;
|
|
102
|
+
'layout-light': boolean;
|
|
103
|
+
'layout-dark': boolean;
|
|
104
|
+
'layout-primary': boolean;
|
|
105
|
+
};
|
|
106
|
+
ngOnDestroy(): void;
|
|
107
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppLayout, never>;
|
|
108
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppLayout, "app-layout", never, {}, {}, never, never, true, never>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { AppLayout, LayoutService };
|
|
112
|
+
export type { MenuChangeEvent, TabCloseEvent };
|