ode-csslib-openent-cg77 3.3.13 → 3.3.15-develop.202507291428

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.
@@ -1,158 +1,220 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
4
5
 
5
6
  <head>
6
- <!-- We use this i18n key to ensure portability because it is overriden by themes -->
7
+ <!-- We use this i18n key to ensure portability because it is overriden by themes -->
7
8
  <title>{{#i18n}}directory.admin.massMailing{{/i18n}}</title>
8
- <style type="text/css">
9
- body {
10
- font-family: sans-serif;
11
- color: #333;
12
- }
13
- h2 {font-size: 1.2em}
14
- h3 {font-size: 1.1em}
15
- h4 {margin-left: 1.1em}
16
- strong,
17
- a,
18
- .red {
19
- font-weight: bold;
20
- color: #d1232a;
21
- }
22
- ol li {
23
- padding: 10px 0;
24
- margin-left: -20px;
25
- }
26
- .column {
27
- width: 30%;
28
- margin: 1%;
29
- display: inline-block;
30
- vertical-align: top;
31
- text-align: center;
32
- font-size: 0.8em;
33
- }
34
- .column img {
35
- width: 75px;
36
- text-align: center;
37
- }
38
- .center{
39
- text-align: center;
40
- }
41
- #right{
42
- text-align: right;
43
- }
44
- .inline-block .baseline,
45
- .inline-block #logo {
46
- display: inline-block;
47
- vertical-align: middle;
48
- }
49
- #logo{
50
- width: 150px;
51
- }
52
- .baseline {
53
- text-align: right;
54
- color: #666;
55
- letter-spacing: 2px;
56
- font-weight: lighter;
57
- padding: 5px;
58
- border-bottom: 2px solid transparent;
59
- }
60
- .neo {
61
- border-color: #4bafd5;
62
- }
63
- .one {
64
- border-color: #FF8500;
65
- }
66
- {{#A5}}
67
- @page {
68
- size: landscape;
69
- }
70
- body {
71
- font-size: 0.7em;
72
- }
73
- .size {
74
- display: inline-block;
75
- vertical-align: top;
76
- width: 47%;
77
- margin: 0 1%;
78
- }
79
- .column img {
80
- width: 50px;
9
+ <style type="text/css">
10
+ body {
11
+ font-family: sans-serif;
12
+ color: #333;
13
+ }
14
+
15
+ h2 {
16
+ font-size: 1.2em
17
+ }
18
+
19
+ h3 {
20
+ font-size: 1.1em
21
+ }
22
+
23
+ h4 {
24
+ margin-left: 1.1em
25
+ }
26
+
27
+ strong,
28
+ a,
29
+ .red {
30
+ font-weight: bold;
31
+ color: #d1232a;
32
+ }
33
+
34
+ ol li {
35
+ padding: 10px 0;
36
+ margin-left: -20px;
37
+ }
38
+
39
+ .column {
40
+ width: 30%;
41
+ margin: 1%;
42
+ display: inline-block;
43
+ vertical-align: top;
44
+ text-align: center;
45
+ font-size: 0.8em;
46
+ }
47
+
48
+ .column img {
49
+ width: 75px;
50
+ text-align: center;
51
+ }
52
+
53
+ .center {
54
+ text-align: center;
55
+ }
56
+
57
+ #right {
58
+ text-align: right;
59
+ }
60
+
61
+ .inline-block .baseline,
62
+ .inline-block #logo {
63
+ display: inline-block;
64
+ vertical-align: middle;
65
+ }
66
+
67
+ #logo {
68
+ width: 150px;
69
+ }
70
+
71
+ .baseline {
72
+ text-align: right;
73
+ color: #666;
74
+ letter-spacing: 2px;
75
+ font-weight: lighter;
76
+ padding: 5px;
77
+ border-bottom: 2px solid transparent;
78
+ }
79
+
80
+ .neo {
81
+ border-color: #4bafd5;
82
+ }
83
+
84
+ .one {
85
+ border-color: #FF8500;
86
+ }
87
+
88
+ {
89
+ {
90
+ #A5
81
91
  }
82
- #logo {
83
- width: 100px;
92
+ }
93
+
94
+ @page {
95
+ size: landscape;
96
+ }
97
+
98
+ body {
99
+ font-size: 0.7em;
100
+ }
101
+
102
+ .size {
103
+ display: inline-block;
104
+ vertical-align: top;
105
+ width: 47%;
106
+ margin: 0 1%;
107
+ }
108
+
109
+ .qr {
110
+ width: 60px;
111
+ }
112
+
113
+ .column img {
114
+ width: 35px;
115
+ }
116
+
117
+ #logo {
118
+ width: 100px;
119
+ }
120
+
121
+ {
122
+ {
123
+ /A5
84
124
  }
85
- {{/A5}}
125
+ }
86
126
  </style>
87
127
  </head>
88
128
 
89
129
  <body>
90
130
 
91
- {{#users}}
131
+ {{#users}}
92
132
 
93
- <div class="size"{{^end}} style="page-break-after: always"{{/end}}>
94
- <div class="inline-block">
95
- <img id="logo" src="logo.png"></img>
96
- <p class="baseline neo">Votre portail numérique éducatif en Seine-et-Marne</p>
97
- </div>
98
- {{^activationCode}}
99
- <h2>Informations sur mon compte</h2>
100
- {{/activationCode}}
101
- {{#activationCode}}
102
- <h2>Ma première connexion en 5 étapes</h2>
103
- {{/activationCode}}
104
- <h3> » Cette fiche s'adresse à <strong>{{firstName}} {{lastName}}</strong></h3>
105
- {{^isGuestOrPersonnel}}
106
- <h4>{{^firstChild}}{{#i18n}}{{profile}}{{/i18n}}{{/firstChild}}{{#firstChild}}Parent de <strong>{{firstName}} {{lastName}}</strong>{{#otherChildren}}, <strong>{{firstName}} {{lastName}}</strong>{{/otherChildren}}{{/firstChild}}{{#firstClass}} en classe de <strong>{{.}}</strong>{{#otherClasses}}, <strong>{{.}}</strong>{{/otherClasses}}{{/firstClass}}.</h4>
107
- {{/isGuestOrPersonnel}}
108
- {{#isGuestOrPersonnel}}
109
- <h4>{{#i18n}}{{profile}}{{/i18n}}.</h4>
110
- {{/isGuestOrPersonnel}}
111
- <p>Réservé aux enseignants, aux personnels, aux élèves et leur famille, l'espace numérique est une solution sécurisée et facile à prendre en main pour :</p>
112
- <div class="column">
113
- <img src="illustrations/Publipostage_Actus.png"></img>
114
- <p>Créer des contenus interactifs (Wiki, Frise, Carte mentale…)</p>
115
- </div>
116
- <div class="column">
117
- <img src="illustrations/Publipostage_Messagerie.png"></img>
118
- <p>Simplifier les échanges entre les membres du réseau éducatif</p>
119
- </div>
120
- <div class="column">
121
- <img src="illustrations/Publipostage_Resa_Ressources.png"></img>
122
- <p>Rassembler tous les services numériques au même endroit</p>
123
- </div>
124
- {{^activationCode}}
125
- <h2> » Comment me connecter ?</h2>
126
- <p>Vous possédez déjà un compte sur l’espace numérique. Il vous suffit de saisir
127
- votre identifiant habituel et le mot de passe défini lors de votre première
128
- connexion. <br />Pour rappel, votre identifiant est le suivant :</p>
129
- <p class="center red">{{login}}</p>
130
- <br />
131
- <h2> » 3 étapes pour réinitialiser mon mot de passe</h2>
132
- <ol>
133
- <li>En cas d'oubli de votre mot de passe, rendez-vous sur <a href="https://ent.seine-et-marne.fr">https://ent.seine-et-marne.fr</a> et cliquez sur « Se connecter à l'ENT ».</li>
134
- <li>Cliquez sur « identifiant ou mot de passe oublié ». Un mail sera envoyé à l'adresse indiquée lors de l'activation de votre compte.</li>
133
+ <div class="size" {{^end}} style="page-break-after: always" {{/end}}>
134
+ <div class="inline-block">
135
+ <img id="logo" src="logo.png"></img>
136
+ <p class="baseline neo">Votre portail numérique éducatif en Seine-et-Marne</p>
137
+ </div>
138
+ {{^activationCode}}
139
+ <h2>Informations sur mon compte</h2>
140
+ {{/activationCode}}
141
+ {{#activationCode}}
142
+ <h2>Ma première connexion en 5 étapes</h2>
143
+ {{/activationCode}}
144
+ <h3> » Cette fiche s'adresse à <strong>{{firstName}} {{lastName}}</strong></h3>
145
+ {{^isGuestOrPersonnel}}
146
+ <h4>{{^firstChild}}{{#i18n}}{{profile}}{{/i18n}}{{/firstChild}}{{#firstChild}}Parent de <strong>{{firstName}}
147
+ {{lastName}}</strong>{{#otherChildren}}, <strong>{{firstName}}
148
+ {{lastName}}</strong>{{/otherChildren}}{{/firstChild}}{{#firstClass}} en classe de
149
+ <strong>{{.}}</strong>{{#otherClasses}}, <strong>{{.}}</strong>{{/otherClasses}}{{/firstClass}}.
150
+ </h4>
151
+ {{/isGuestOrPersonnel}}
152
+ {{#isGuestOrPersonnel}}
153
+ <h4>{{#i18n}}{{profile}}{{/i18n}}.</h4>
154
+ {{/isGuestOrPersonnel}}
155
+ <p>Réservé aux enseignants, aux personnels, aux élèves et leur famille, l'espace numérique est une solution
156
+ sécurisée et facile à prendre en main pour :</p>
157
+ <div class="column">
158
+ <img src="illustrations/Publipostage_Actus.png"></img>
159
+ <p>Créer des contenus interactifs (Wiki, Frise, Carte mentale…)</p>
160
+ </div>
161
+ <div class="column">
162
+ <img src="illustrations/Publipostage_Messagerie.png"></img>
163
+ <p>Simplifier les échanges entre les membres du réseau éducatif</p>
164
+ </div>
165
+ <div class="column">
166
+ <img src="illustrations/Publipostage_Resa_Ressources.png"></img>
167
+ <p>Rassembler tous les services numériques au même endroit</p>
168
+ </div>
169
+ {{^activationCode}}
170
+ <h2> » Comment me connecter ?</h2>
171
+ <p>Vous possédez déjà un compte sur l’espace numérique. Il vous suffit de saisir
172
+ votre identifiant habituel et le mot de passe défini lors de votre première
173
+ connexion. <br />Pour rappel, votre identifiant est le suivant :</p>
174
+ <p class="center red">{{login}}</p>
175
+ <br />
176
+ <h2> » 3 étapes pour réinitialiser mon mot de passe</h2>
177
+ <ol>
178
+ <li>En cas d'oubli de votre mot de passe, rendez-vous sur <a
179
+ href="https://ent.seine-et-marne.fr">https://ent.seine-et-marne.fr</a> et cliquez sur « Se connecter
180
+ à l'ENT », ou téléchargez l'application mobile <strong>ENT 77:</strong><br /> <img class="qr"
181
+ src="qr-code.png"></img></li>
182
+
183
+
184
+
185
+ <li>Cliquez sur « identifiant ou mot de passe oublié ». Un mail sera envoyé à l'adresse indiquée lors de
186
+ l'activation de votre compte.</li>
135
187
  <li>Ouvrez le mail et cliquez ensuite sur le lien pour définir votre nouveau mot de passe.</li>
136
188
  </ol>
137
- {{/activationCode}}
138
- {{#activationCode}}
139
- <h2> » Mode d'emploi de ma première connexion</h2>
140
- <ol>
141
- <li>Pour se connecter, rendez-vous sur <a href="https://ent.seine-et-marne.fr">https://ent.seine-et-marne.fr</a> et cliquez sur « Se connecter à l'ENT ».</li>
189
+ {{/activationCode}}
190
+ {{#activationCode}}
191
+ <h2> » Mode d'emploi de ma première connexion</h2>
192
+ <ol>
193
+ <li>Pour vous connecter, rendez-vous sur <a
194
+ href="https://ent.seine-et-marne.fr">https://ent.seine-et-marne.fr</a>, ou téléchargez l'application
195
+ mobile <strong>ENT
196
+ 77:<br /></strong> <img class="qr" src="qr-code.png"></img>
197
+ </li>
198
+
199
+
200
+
142
201
  <li>Entrez votre identifiant (à conserver pour vous connecter ultérieurement) et votre code d'activation :
143
202
  <div class="center">
144
- <p class="red">Identifiant : {{login}}</p>
145
- <p class="red">Code d'activation : {{activationCode}}</p>
203
+ <p class="red">Identifiant : {{login}}</p>
204
+ <p class="red">Code d'activation : {{activationCode}}</p>
146
205
  </div>
147
206
  </li>
148
- <li>Votre mot de passe doit être composé d'un minima de 12 caractères combinant majuscules, minuscules, chiffres et caractères spéciaux.</li>
149
- <li>Renseignez votre adresse mail personnelle pour obtenir un mail de réinitialisation en cas d'oubli de votre mot de passe.</li>
150
- <li>Vous n'avez plus qu'à lire et accepter les Conditions Générales d'Utilisation ainsi que la charte d'utilisation.</li>
207
+ <li>Votre mot de passe doit être composé d'un minima de 12 caractères combinant majuscules, minuscules,
208
+ chiffres et caractères spéciaux.</li>
209
+ <li>Renseignez votre adresse mail personnelle pour obtenir un mail de réinitialisation en cas d'oubli de
210
+ votre mot de passe.</li>
211
+ <li>Vous n'avez plus qu'à lire et accepter les Conditions Générales d'Utilisation ainsi que la charte
212
+ d'utilisation.</li>
151
213
  </ol>
152
- {{/activationCode}}
153
- <p id="right">Bonne navigation sur l'ENT77 - Collèges Connectés.</p>
154
- </div>
155
- {{/users}}
214
+ {{/activationCode}}
215
+ <p id="right">Bonne navigation sur l'ENT77 - Collèges Connectés.</p>
216
+ </div>
217
+ {{/users}}
156
218
  </body>
157
219
 
158
- </html>
220
+ </html>
@@ -1,76 +1,186 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
4
5
 
5
6
  <head>
6
7
  <title>{{#i18n}}directory.admin.massMailing{{/i18n}}</title>
7
8
  <style type="text/css">
8
- * {
9
- box-sizing: border-box;
10
- }
11
- body {
12
- font-family: Arial, sans-serif;
13
- color: #555;
14
- line-height: 1.4;
15
- }
16
- @page {
17
- size: A4;
18
- }
19
- @media print {
20
- html, body {
21
- width: 210mm;
22
- height: 297mm;
23
- }
24
- }
25
- p {
26
- font-size: 12px;
27
- margin: 0;
28
- }
29
- strong {
30
- color: #444;
31
- }
32
- a {
33
- color: #3889c1;
34
- }
35
- .card {
36
- float: left;
37
- width: 8cm;
38
- min-height: 5.9cm;
39
- max-height: 6cm;
40
- border: 0.5px dashed #ccc;
41
- padding: 15px;
42
- margin: 0;
43
- }
44
- .logo {
45
- width: 100px;
46
- float: right;
47
- }
48
- .grade {
49
- display: inline-block;
50
- font-size: 11px;
51
- margin-bottom: 15px;
52
- font-style: oblique;
53
- }
54
- .name {
55
- font-size: 16px;
56
- margin: 0;
57
- line-height: 1.1;
58
- }
59
- .activated {
60
- font-style: oblique;
61
- }
9
+ * {
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ body {
14
+ font-family: Arial, sans-serif;
15
+ color: #555;
16
+ line-height: 1.4;
17
+ margin: 0;
18
+ }
19
+
20
+ @page {
21
+ size: A4;
22
+ margin: 5mm;
23
+ }
24
+
25
+ @media print {
26
+
27
+ html,
28
+ body {
29
+ width: 210mm;
30
+ height: 297mm;
31
+ }
32
+ }
33
+
34
+ p {
35
+ font-size: 12px;
36
+ margin: 0;
37
+ }
38
+
39
+ strong {
40
+ color: #444;
41
+ }
42
+
43
+ a {
44
+ color: #3889c1;
45
+ }
46
+
47
+ .page-container {
48
+ display: grid;
49
+ grid-template-columns: repeat(4, 1fr);
50
+ /* Create 4 equal columns */
51
+ gap: 5mm;
52
+ /* Spacing between cards */
53
+ padding: 5mm;
54
+ /* Consistent padding around the grid */
55
+ width: calc(210mm - 10mm);
56
+ /* Adjust width for page margins */
57
+ min-height: calc(297mm - 10mm);
58
+ /* Adjust height for page margins */
59
+ box-sizing: border-box;
60
+ /* Ensure padding and border are inside the dimensions */
61
+ }
62
+
63
+ .page-break {
64
+ page-break-after: always;
65
+ }
66
+
67
+ .page {
68
+ display: flex;
69
+ flex-wrap: wrap;
70
+ justify-content: space-between;
71
+ align-content: flex-start;
72
+ width: 100%;
73
+ height: 100%;
74
+ page-break-after: always;
75
+ padding: 5mm;
76
+ }
77
+
78
+ .card {
79
+ float: left;
80
+ width: 8cm;
81
+ min-height: 5.79cm;
82
+ max-height: none;
83
+ border: 0.5px dashed #ccc;
84
+ padding: 15px;
85
+ margin: 0;
86
+ flex-direction: column;
87
+ position: relative;
88
+ overflow: hidden;
89
+ }
90
+
91
+ .logo {
92
+ width: 80px;
93
+ float: right;
94
+ margin-left: 10px;
95
+ margin-bottom: 0;
96
+ }
97
+
98
+ /* Target the paragraph containing the "relative" information and otherChildren */
99
+ .card>p:nth-child(8) {
100
+ overflow-wrap: break-word;
101
+ /* Adjust the nth-child if your structure changes */
102
+ word-break: break-word;
103
+ /* Ensure long words also break */
104
+ margin-right: 95px;
105
+ /* Forcing line breaks within words if needed */
106
+ }
107
+
108
+ /* Create a pseudo-element to act as an exclusion zone for the text */
109
+ .card::after {
110
+ content: "";
111
+ position: absolute;
112
+ top: 15px;
113
+ /* Adjust to the top position of your QR code */
114
+ right: 15px;
115
+ /* Adjust to the right position of your QR code */
116
+ width: 90px;
117
+ /* Adjust to be slightly wider than your QR code */
118
+ height: 90px;
119
+ /* Adjust to be slightly taller than your QR code */
120
+ pointer-events: none;
121
+ /* Ensure it doesn't interfere with clicks */
122
+ shape-outside: rectangle(0px, 0px, 90px, 90px);
123
+ /* Define the exclusion shape */
124
+ float: right;
125
+ /* Make it float to influence inline content */
126
+ margin-left: 10px;
127
+ /* Add some spacing */
128
+ }
129
+
130
+ .grade {
131
+ display: inline-block;
132
+ font-size: 11px;
133
+ margin-bottom: 15px;
134
+ font-style: oblique;
135
+ }
136
+
137
+ .name {
138
+ font-size: 16px;
139
+ margin: 0;
140
+ line-height: 1.1;
141
+ }
142
+
143
+ .activated {
144
+ font-style: oblique;
145
+ }
146
+
147
+ .qr {
148
+ width: 80px;
149
+ }
150
+
151
+ .qr-container {
152
+ margin-top: 20px;
153
+ /* Push below the floated logo */
154
+ float: right;
155
+ width: 80px;
156
+ text-align: center;
157
+ clear: right;
158
+ }
159
+
160
+ .qr-text {
161
+ font-size: 10px;
162
+ margin-top: 5px;
163
+ }
62
164
  </style>
63
165
  </head>
64
166
 
65
- <body>
167
+ <body class="page">
66
168
  {{#blocks}}
67
169
  <div style="page-break-after:always;">
68
170
  {{#users}}
69
171
  <div class="card">
70
- <img class="logo" src="logo.png"></img>
172
+ <div style="position: relative;">
173
+ <img class="logo" src="logo.png"></img>
174
+ <div class="qr-container">
175
+ <img class="qr" src="qr-code.png"></img>
176
+ <p class="qr-text">{{#i18n}}classAdmin.template.downloadAppInfo{{/i18n}}</p>
177
+ </div>
178
+ </div>
71
179
  <h2 class="name">{{displayName}}</h2>
72
180
  {{^isGuestOrPersonnel}}
73
- <strong class="grade">{{#i18n}}{{profile}}{{/i18n}}{{#firstClass}} {{#i18n}}classAdmin.template.class{{/i18n}} <strong>{{.}}</strong>{{#otherClasses}}, <strong>{{.}}</strong>{{/otherClasses}}{{/firstClass}}.</strong>
181
+ <strong class="grade">{{#i18n}}{{profile}}{{/i18n}}{{#firstClass}}
182
+ {{#i18n}}classAdmin.template.class{{/i18n}} <strong>{{.}}</strong>{{#otherClasses}},
183
+ <strong>{{.}}</strong>{{/otherClasses}}{{/firstClass}}.</strong>
74
184
  <br />
75
185
  {{/isGuestOrPersonnel}}
76
186
  {{#isGuestOrPersonnel}}
@@ -78,7 +188,8 @@
78
188
  <br />
79
189
  {{/isGuestOrPersonnel}}
80
190
  {{#firstChild}}
81
- <p><strong>{{#i18n}}classAdmin.template.relative{{/i18n}} : </strong><br />{{firstName}} {{lastName}}{{#otherChildren}}, {{firstName}} {{lastName}}{{/otherChildren}}</p>
191
+ <p><strong>{{#i18n}}classAdmin.template.relative{{/i18n}} : </strong><br />{{firstName}}
192
+ {{lastName}}</p>
82
193
  <br />
83
194
  {{/firstChild}}
84
195
  <p><strong>{{#i18n}}classAdmin.template.id{{/i18n}} : </strong>{{login}}</p>
@@ -97,7 +208,6 @@
97
208
  <p>
98
209
  <strong>{{#i18n}}classAdmin.template.url{{/i18n}} :</strong><br />
99
210
  <a href="#">{{hostname}}</a><br />
100
- {{#i18n}}classAdmin.template.downloadAppInfo{{/i18n}}
101
211
  </p>
102
212
  </div>
103
213
  {{/users}}
@@ -107,4 +217,5 @@
107
217
  </div>
108
218
  {{/blocks}}
109
219
  </body>
220
+
110
221
  </html>
package/dist/version.txt CHANGED
@@ -1,2 +1,2 @@
1
- entcore-css-lib 03/04/2025 12:39:25
2
- ode-csslib-openent-cg77 17/04/2025 18:07:52
1
+ entcore-css-lib 03/04/2025 10:52:22
2
+ ode-csslib-openent-cg77 29/07/2025 14:28:54
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ode-csslib-openent-cg77",
3
- "version": "3.3.13",
3
+ "version": "3.3.15-develop.202507291428",
4
4
  "description": "Open ENT theme by Edifice",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,7 +14,7 @@
14
14
  "author": "Edifice",
15
15
  "license": "AGPL-3.0",
16
16
  "dependencies": {
17
- "entcore-css-lib": "npm:ode-csslib@main"
17
+ "entcore-css-lib": "npm:ode-csslib@develop"
18
18
  },
19
19
  "devDependencies": {
20
20
  "concurrently": "^5.0.2",