data-primals-engine 1.7.1 → 1.7.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 (99) hide show
  1. package/README.md +9 -9
  2. package/client/package-lock.json +8430 -8121
  3. package/client/package.json +7 -4
  4. package/client/src/APIInfo.jsx +1 -1
  5. package/client/src/App.jsx +2 -1
  6. package/client/src/App.scss +1635 -1626
  7. package/client/src/AssistantChat.jsx +2 -3
  8. package/client/src/CalendarView.jsx +1 -0
  9. package/client/src/ContentView.jsx +3 -3
  10. package/client/src/Dashboard.jsx +5 -2
  11. package/client/src/DashboardChart.jsx +1 -0
  12. package/client/src/DashboardFlexViewItem.jsx +1 -0
  13. package/client/src/DashboardHtmlViewItem.jsx +1 -0
  14. package/client/src/DashboardView.jsx +2 -0
  15. package/client/src/DataEditor.jsx +0 -1
  16. package/client/src/DataImporter.jsx +489 -468
  17. package/client/src/DataLayout.jsx +25 -23
  18. package/client/src/DataTable.jsx +6 -5
  19. package/client/src/Dialog.jsx +92 -90
  20. package/client/src/Dialog.scss +122 -116
  21. package/client/src/DisplayFlexNodeRenderer.jsx +1 -0
  22. package/client/src/DocumentationPageLayout.scss +1 -1
  23. package/client/src/FlexBuilderControls.jsx +1 -0
  24. package/client/src/FlexBuilderPreview.jsx +1 -1
  25. package/client/src/FlexNode.jsx +1 -1
  26. package/client/src/HistoryDialog.jsx +3 -2
  27. package/client/src/KPIWidget.jsx +1 -1
  28. package/client/src/KanbanView.jsx +1 -0
  29. package/client/src/ModelCreator.jsx +4 -0
  30. package/client/src/ModelList.jsx +1 -0
  31. package/client/src/PackGallery.jsx +5 -4
  32. package/client/src/RTETrans.jsx +1 -1
  33. package/client/src/RelationField.jsx +2 -0
  34. package/client/src/RelationSelectorWidget.jsx +2 -0
  35. package/client/src/RelationValue.jsx +1 -0
  36. package/client/src/RestoreDialog.jsx +1 -0
  37. package/client/src/ViewSwitcher.jsx +1 -1
  38. package/client/src/WorkflowEditor.jsx +3 -0
  39. package/client/src/contexts/CommandContext.jsx +2 -1
  40. package/client/src/contexts/ModelContext.jsx +3 -3
  41. package/client/src/hooks/data.js +1 -0
  42. package/client/src/hooks/useValidation.js +1 -0
  43. package/client/src/translations.js +24 -24
  44. package/client/vite.config.js +31 -30
  45. package/doc/AI-assistance.md +87 -63
  46. package/doc/Concepts.md +122 -0
  47. package/doc/Custom-Endpoints.md +31 -0
  48. package/doc/Event-system.md +13 -14
  49. package/doc/Home.md +33 -0
  50. package/doc/Modules.md +83 -0
  51. package/doc/Packs-gallery.md +8 -23
  52. package/doc/Workflows.md +32 -0
  53. package/doc/automation-workflows.md +141 -102
  54. package/doc/dashboards-kpis-charts.md +47 -49
  55. package/doc/data-management.md +126 -120
  56. package/doc/data-models.md +68 -75
  57. package/doc/roles-permissions.md +144 -43
  58. package/doc/sharding-replication.md +158 -0
  59. package/doc/users.md +54 -30
  60. package/package.json +27 -17
  61. package/server.js +37 -37
  62. package/src/ai.jobs.js +135 -0
  63. package/src/constants.js +560 -545
  64. package/src/data.js +521 -518
  65. package/src/email.js +157 -154
  66. package/src/engine.js +167 -49
  67. package/src/gameObject.js +6 -0
  68. package/src/i18n.js +0 -1
  69. package/src/modules/assistant/assistant.js +782 -763
  70. package/src/modules/assistant/constants.js +23 -16
  71. package/src/modules/assistant/providers.js +77 -37
  72. package/src/modules/auth-google/index.js +53 -50
  73. package/src/modules/bucket.js +346 -335
  74. package/src/modules/data/data.backup.js +400 -376
  75. package/src/modules/data/data.cluster.js +559 -0
  76. package/src/modules/data/data.core.js +11 -8
  77. package/src/modules/data/data.js +311 -311
  78. package/src/modules/data/data.operations.js +3666 -3555
  79. package/src/modules/data/data.relations.js +1 -0
  80. package/src/modules/data/data.replication.js +125 -0
  81. package/src/modules/data/data.routes.js +2206 -1879
  82. package/src/modules/data/data.scheduling.js +2 -1
  83. package/src/modules/file.js +248 -247
  84. package/src/modules/mongodb.js +76 -73
  85. package/src/modules/user.js +18 -2
  86. package/src/modules/worker-script-runner.js +97 -0
  87. package/src/modules/workflow.js +177 -52
  88. package/src/packs.js +5701 -5701
  89. package/src/providers.js +298 -297
  90. package/src/sso.js +91 -25
  91. package/test/assistant.test.js +207 -206
  92. package/test/cluster.test.js +221 -0
  93. package/test/core.test.js +0 -2
  94. package/test/data.integration.test.js +1425 -1416
  95. package/test/import_export.integration.test.js +210 -210
  96. package/test/replication.test.js +163 -0
  97. package/test/workflow.actions.integration.test.js +487 -475
  98. package/test/workflow.integration.test.js +332 -329
  99. package/doc/core-concepts.md +0 -33
@@ -1,1626 +1,1635 @@
1
- @import "_variables.scss";
2
- img {
3
- margin: 0 auto;
4
- max-width: 100%;
5
- width: auto;
6
- }
7
-
8
- /*
9
- * Style global pour les barres de défilement (scrollbars)
10
- * S'applique à toute l'application, y compris les blocs de code.
11
- */
12
-
13
- /* Pour les navigateurs WebKit (Chrome, Safari, Edge, etc.) */
14
- ::-webkit-scrollbar {
15
- width: 8px; /* Largeur de la scrollbar verticale */
16
- height: 8px; /* Hauteur de la scrollbar horizontale */
17
- }
18
-
19
- /* La piste (le fond de la scrollbar) */
20
- ::-webkit-scrollbar-track {
21
- background: $scrollbar-track-color;
22
- border-radius: 10px;
23
- }
24
-
25
- /* La poignée (la partie mobile de la scrollbar) */
26
- ::-webkit-scrollbar-thumb {
27
- background-color: $scrollbar-thumb-color;
28
- border-radius: 10px;
29
- border: 2px solid $scrollbar-track-color; /* Crée un petit espacement autour de la poignée */
30
- }
31
-
32
- /* La poignée au survol de la souris */
33
- ::-webkit-scrollbar-thumb:hover {
34
- background-color: $scrollbar-thumb-hover-color;
35
- }
36
-
37
- body {
38
- font-family: "Nunito Sans", sans-serif;
39
- line-height: 1.6; // Améliore la lisibilité
40
- background-color: $light-color;
41
- color: $dark-color;
42
- margin: 0;
43
- padding: 0;
44
- }
45
-
46
- header {
47
- background-color: #3498db;
48
- color: white;
49
- align-items: center;
50
- h1 {
51
- font-size: 100%;
52
- line-height: 100%;
53
- color: white;
54
- padding: 0;
55
- }
56
- > div.flex {
57
- gap: 16px;
58
- padding: 8px;
59
- font-size: 20px;
60
- }
61
- svg {
62
- cursor: pointer;
63
- }
64
- height: 50px;
65
- overflow: hidden;
66
- }
67
- .flex {
68
- display: flex;
69
- flex-wrap: wrap;
70
- align-items: center;
71
- &.flex-fw {
72
- width: 100%;
73
- }
74
- &.flex-start {
75
- align-items: start;
76
- }
77
- &.flex-end {
78
- justify-content: flex-end;
79
- }
80
- &.flex-self-end {
81
- align-self: end;
82
- }
83
- .flex-left {
84
- justify-content: flex-start;
85
- }
86
- &.flex-no-wrap {
87
- flex-wrap: nowrap;
88
- }
89
- &.flex-no-gap {
90
- gap: 0px;
91
- }
92
- &.flex-mini-gap {
93
- gap: 4px;
94
- }
95
- &.flex-big-gap {
96
- gap: 32px;
97
- }
98
- &.flex-stretch {
99
- align-items: stretch;
100
- }
101
- &.flex-centered{
102
- margin-left: auto;
103
- margin-right: auto;
104
- width: fit-content;
105
- justify-content: center;
106
- }
107
- &.flex-border {
108
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
109
- padding: 4px;
110
- }
111
- &.flex-row {
112
- flex-direction: column;
113
- }
114
- gap: 4px;
115
- @media only screen and (min-width: 720px){
116
- gap: 12px;
117
- }
118
- }
119
- .flex-1 {
120
- flex: 1;
121
- }
122
- .flex-2 {
123
- flex: 2;
124
- }
125
- .flex-3 {
126
- flex: 3;
127
- }
128
- .flex-4 {
129
- flex: 4;
130
- }
131
-
132
- h1, h2, h3 {
133
- color: #333; // Couleur de titre consistante et lisible
134
- }
135
- h2 {
136
- box-sizing: border-box;
137
- margin: 4px;
138
- color: #575656;
139
- border-bottom: 1px solid #969696;
140
- }
141
-
142
- .p-1 {
143
- padding: 4px;
144
- }
145
- .p-2 {
146
- padding: 8px;
147
- }
148
- .p-3 {
149
- padding: 16px;
150
- }
151
- .p-4 {
152
- padding: 32px;
153
- }
154
- .prior {
155
- position: relative;
156
- text-align: center;
157
- max-width: 640px;
158
- font-size: 75%;
159
- flex-direction: column;
160
- @media only screen and (min-width: 480px){
161
- font-size: 100%;
162
- flex-direction: row;
163
- }
164
- img {
165
- align-self: flex-start;
166
- margin: 0 auto;
167
- max-width: 100%;
168
- width: auto;
169
- max-height: 160px;
170
- }
171
- &.tiny {
172
- position: fixed;
173
- bottom: 48px;
174
- right: 0;
175
- background-color: white;
176
- border-radius: 100%;
177
- line-height: 100%;
178
- cursor: pointer;
179
- padding: 2px;
180
- border: 1px solid grey;
181
- width: 64px;
182
- height: 64px;
183
- @media only screen and (max-width: 479px){
184
- width: 42px;
185
- height: 42px;
186
- }
187
- }
188
-
189
- .bubble {
190
- position: static;
191
- margin: 8px;
192
- .inner {
193
- border-radius: 12px;
194
- color: $dark-color;
195
- padding: 8px;
196
- border: 1px solid grey;
197
- background-color: white;
198
- }
199
- }
200
-
201
- .close {
202
- font-size: 140%;
203
- position: absolute;
204
- top: 0;
205
- right: 0;
206
- cursor: pointer;
207
- }
208
- }
209
-
210
- .btn .no-mobile-text {
211
- @media only screen and (max-width: 768px){
212
- display: none;
213
- }
214
- display: block;
215
- }
216
- .model-list {
217
- max-height: 30vh;
218
-
219
- @media only screen and (min-height: 768px){
220
- max-height:50vh;
221
- }
222
- overflow-y: scroll;
223
- overflow-x: hidden;
224
- padding: 0 8px;
225
- background-color: white;
226
- border-radius: 5px;
227
- margin: 20px 0;
228
-
229
- h2 {
230
- margin-bottom: 10px;
231
- }
232
- .btns {
233
- opacity: 0.35;
234
- }
235
-
236
- ul {
237
- list-style: none;
238
- margin: 0;
239
- padding: 0;
240
- display: flex;
241
- flex-direction: column;
242
- li {
243
- flex: 1;
244
- display: flex;
245
- cursor: pointer;
246
- padding: 10px;
247
- align-items: center;
248
- border-bottom: 1px solid #eee;
249
-
250
- &:last-child {
251
- border-bottom: none;
252
- }
253
-
254
- &:hover, &.active {
255
- background-color: #f5f5f5;
256
- transform: translateX(2px);
257
- transition: transform 0.2s ease;
258
-
259
- .btns {
260
- opacity: 1;
261
- &:hover {
262
- opacity: 1;
263
- }
264
- button {
265
- }
266
- }
267
- }
268
- }
269
- }
270
- }
271
-
272
- form, .form {
273
- background-color: white;
274
- border-radius: 12px;
275
- box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
276
-
277
- padding: 16px;
278
-
279
- label {
280
- display: block;
281
- margin-bottom: 0;
282
- color: $primary-color;
283
- font-weight: 500;
284
- }
285
-
286
-
287
- input,
288
- textarea,
289
- select {
290
- width: 100%;
291
- max-width: 100%;
292
- padding: 10px;
293
- border: 1px solid #ccc;
294
- border-radius: 5px;
295
- box-sizing: border-box;
296
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
297
- font-family: "Nunito Sans", sans-serif;
298
- &:focus, &:-webkit-autofill {
299
- border-color: $secondary-color;
300
- background-color: #eaeaea !important;
301
- outline: none;
302
- }
303
-
304
- &:focus {
305
- box-shadow: 0 0 5px rgba(var(--input-focus-border-color), 0.5); /* Added a glow effect */
306
- outline: none; /* Removed the default outline */
307
- }
308
-
309
- &.input-fit {
310
- flex: 1
311
- }
312
- }
313
-
314
- textarea {
315
- height: 120px;
316
- }
317
- input[type=number]{
318
- max-width: 150px;
319
- }
320
-
321
- input[type*=date] {
322
- padding: 4px 8px;
323
- font-size: 80%;
324
- }
325
-
326
- .btn {
327
- background-color: $primary-color;
328
- color: white;
329
- padding: 10px 20px;
330
- border: none;
331
- border-radius: 5px;
332
- cursor: pointer;
333
- transition: background-color 0.3s ease, transform 0.2s ease; /* Added transitions */
334
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* Added a subtle shadow */
335
- &:hover {
336
- transform: translateY(-2px); /* Added a slight lift effect */
337
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2); /* Increased shadow on hover */
338
- }
339
- &:active {
340
- transform: translateY(1px); /* Added a slight push effect */
341
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); /* Reduced shadow on click */
342
- }
343
- }
344
- }
345
-
346
-
347
- input,
348
- textarea, select {
349
- background-color: #f0f0f0; // Gris légèrement plus foncé au survol
350
- border-color: #ccc;
351
- color: black;
352
- }
353
-
354
- input,
355
- textarea {
356
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); // Ombre légère
357
- }
358
-
359
- input[type=checkbox]{
360
- box-shadow: none;
361
- }
362
- select {
363
- height: 3em;
364
- max-width: 480px;
365
- }
366
- input[type=checkbox]{
367
- width: auto;
368
- }
369
- input[type="datetime-local"]::-webkit-calendar-picker-indicator, input[type="date"]::-webkit-calendar-picker-indicator {
370
- cursor: pointer;
371
- border-radius: 4px;
372
- color-scheme: light;
373
- padding: 6px;
374
- margin: 0;
375
- &:hover {
376
- color-scheme: dark;
377
- background-color: $primary-color;
378
- }
379
- }
380
-
381
- input[type=color] {
382
- padding: 0 2px;
383
- min-width: 80px;
384
- height: 30px;
385
- }
386
-
387
-
388
-
389
- #content .models {
390
- width: 100%;
391
- h2 {
392
- margin-bottom: 0;
393
- }
394
- @media only screen and (min-width: 1024px){
395
- max-width: 320px;
396
- }
397
- }
398
-
399
- table {
400
- background-color: white;
401
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
402
- width: 100%;
403
- border-collapse: collapse;
404
- text-align: center;
405
- border: 1px solid #ddd; /* Added a border */
406
- border-radius: 8px; /* Added rounded corners */
407
- overflow: hidden; /* Hide overflow for rounded corners */
408
- th, td {
409
- word-wrap: break-word;
410
- padding: 12px; /* Increased padding */
411
- border-bottom: 1px solid #eee; /* Changed the border style */
412
- max-width: 480px;
413
- }
414
- thead tr {
415
- background-color: #f3f3f3;
416
- th:not(:first-child) {
417
- border-left: 1px solid #ddd;
418
- }
419
- th:hover{
420
- background-color: #f3f3f3;
421
- }
422
- }
423
- tr {
424
- &:nth-child(even) {
425
- background-color: #f8f8f8;
426
- }
427
- &:hover {
428
- background-color: #f1f1f1;
429
- }
430
- }
431
- td {
432
- border: 1px dotted #cccccc;
433
- &.notmet {
434
- background:#ffeedb8f;
435
- }
436
- }
437
- }
438
-
439
- dt {
440
- font-weight: bold;
441
- }
442
- dd {
443
- font-size: 100%;
444
- margin-bottom: 16px;
445
- }
446
-
447
- .datatable {
448
- width: 100%;
449
- .reversed {
450
- .flex.flex-row {
451
- flex-direction: column-reverse;
452
- }
453
- }
454
- tr:not(.reversed) th {
455
- border-bottom-right-radius: 0;
456
- border-bottom-left-radius: 0;
457
- }
458
- .reversed th {
459
- border-top-right-radius: 0;
460
- border-top-left-radius: 0;
461
- }
462
- table{
463
- background-color: transparent;
464
- }
465
- .rte img {
466
- max-width: 100%;
467
- }
468
- > .table-wrapper{
469
- overflow-x: auto;
470
- }
471
- th {
472
- padding: 4px;
473
- min-width: 100px;
474
- }
475
- }
476
- /* ensures the increment/decrement arrows always display */
477
- input[type=number]::-webkit-inner-spin-button,
478
- input[type=number]::-webkit-outer-spin-button {
479
- opacity: 1;
480
- }
481
-
482
- form .field {
483
- width: 100%;
484
- .help {
485
- width: 100%;
486
- color: #575757;
487
- padding: 4px;
488
- }
489
- }
490
-
491
- form .field-checkbox {
492
- .inline {
493
- display: flex;
494
- text-align: left;
495
- }
496
- label {
497
- flex:1;
498
- cursor: pointer;
499
- }
500
- input {
501
- cursor: pointer;
502
- }
503
- }
504
-
505
- form .field-checkbox {
506
- .inline2 {
507
- flex-direction: row-reverse;
508
- }
509
- }
510
-
511
- label + .field, label + input, label + select {
512
- margin-bottom: 12px;
513
- }
514
- .flex {
515
- > label + .field, label + input, label + select {
516
- margin-bottom: 0;
517
- }
518
- }
519
-
520
- .field-relation {
521
- position: relative;
522
- width: fit-content;
523
- margin-bottom: 16px;
524
- .inner {
525
- display: flex;
526
- width: auto;
527
- position: relative;
528
- }
529
- input[type=text]{
530
- height: 3em;
531
- }
532
- select {
533
- display: none;
534
- }
535
- .results {
536
- position: absolute;
537
- top: 2.8em;
538
- z-index: 10;
539
- width: 100%;
540
- background-color: white;
541
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
542
- left: 0;
543
- max-height: 220px;
544
- overflow-y: auto;
545
- }
546
- .selected-values {
547
- width: 100%;
548
- .selected-value {
549
- width: 100%;
550
- padding: 4px;
551
- margin: 0;
552
- &:hover {
553
- background-color: #F8F8F8;
554
- }
555
- }
556
- }
557
- .item{
558
- cursor: pointer;
559
- padding: 4px;
560
- &:hover {
561
- background-color: #F8F8F8;
562
- }
563
- }
564
- }
565
-
566
- .cursor-pointer {
567
- cursor: pointer;
568
- }
569
-
570
- .datas {
571
- flex: 1;
572
- min-width: 320px;
573
- @media only screen and (min-width: 480px){
574
- min-width: 480px;
575
- }
576
- }
577
-
578
-
579
- /* website*/
580
- #content {
581
- padding: 0;
582
- h1 {
583
- margin: 24px 8px;
584
- }
585
- h2 {
586
- margin: 20px 4px;
587
- }
588
- h3 {
589
- margin: 16px 4px;
590
- }
591
- h4 {
592
- margin: 12px 2px;
593
- }
594
- h5 {
595
- margin: 8px 2px;
596
- }
597
- h6 {
598
- margin: 2px;
599
- }
600
- }
601
-
602
- .languages {
603
- display: none;
604
- gap: 8px;
605
- @media only screen and (min-width: 480px){
606
- display: flex;
607
- }
608
- .field {
609
- margin: 0 auto;
610
- select {
611
- max-width: 180px;
612
- margin: 0;
613
- }
614
- }
615
- }
616
- .sections {
617
- display: flex;
618
- gap: 16px;
619
- align-items: center;
620
- }
621
- .blocs-prez{
622
- display: grid;
623
- grid-template-columns: repeat(auto-fit, minmax(364px, 1fr));
624
- gap: 64px;
625
- margin-top: 2rem;
626
- @media only screen and (min-width: 480px){
627
- padding: 0px 32px;
628
- }
629
- }
630
-
631
- #content .bloc-prez {
632
- &.tech{
633
- align-self: flex-start;
634
- }
635
- ul {
636
- list-style: none;
637
- padding: 0;
638
- margin-top: 1rem;
639
-
640
- li {
641
- margin-bottom: 0.5rem;
642
- position: relative;
643
- padding-left: 1.5rem;
644
-
645
- &::before {
646
- content: '✓';
647
- position: absolute;
648
- left: 0;
649
- color: $secondary-color;
650
-
651
- }
652
- }
653
- }
654
-
655
- background-color: white;
656
- border-radius: 12px;
657
- padding: 2rem;
658
- box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
659
- transition: transform 0.3s ease;
660
- box-sizing: border-box;
661
-
662
- &:hover {
663
- transform: translateY(-5px);
664
- }
665
- img {
666
- display: block; // Pour que la transformation s'applique bien
667
- transition: transform 0.3s ease-out;
668
- &:hover {
669
- transform: scale(1.03); // Léger zoom sur l'image au survol
670
- }
671
- }
672
- h2 {
673
- color: $dark-gray;
674
- margin-top: 0;
675
- margin-bottom: 15px;
676
- border-bottom: none; // Enlever la bordure par défaut si non désirée ici
677
- }
678
- position: relative;
679
- .icon-header {
680
- font-size: 3rem;
681
- color: $primary-color;
682
- margin-bottom: 1rem;
683
- position: absolute;
684
- top: -25px;
685
- right: 20px;
686
- opacity: 0.8;
687
- @media only screen and (min-width: 480px){
688
- right: -28px;
689
- top: -32px;
690
- font-size: 350%;
691
- }
692
- }
693
-
694
- img {
695
- border-radius: 8px; // Coins arrondis pour l'image
696
- margin-bottom: 15px;
697
- max-width: 100%;
698
- height: auto; // Assurer la proportion
699
- }
700
- .logolink {
701
- flex: 1;
702
- min-width: 128px;
703
- }
704
- .logolinks {
705
- flex-wrap: wrap;
706
- }
707
- }
708
-
709
- .rtl #content .bloc-prez {
710
- ul {
711
- li {
712
- &::before{
713
- right: -20px;
714
- }
715
- }
716
- }
717
- }
718
- .rtl {
719
- direction: rtl;
720
- }
721
- .ltr {
722
- direction: ltr;
723
- }
724
- .hint {
725
- white-space: break-spaces;
726
- max-width: 720px;
727
- font-size: 90%;
728
- margin: 0 0 4px 0;
729
- padding: 2px 10px;
730
- background: #f9f9f9;
731
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
732
- }
733
-
734
- .hint-icon {
735
- color: $primary-color;
736
- cursor: pointer;
737
- display: flex;
738
- }
739
-
740
- .rte {
741
- width: 100%;
742
- padding: 8px;
743
- border: 1px solid #ccc;
744
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
745
- button {
746
- padding: 2px 4px;
747
- &.is-active {
748
- background-color: $primary-color-darker;
749
- color: white;
750
- }
751
- }
752
-
753
- }
754
-
755
- .rte-value {
756
- width: 100%;
757
- display: block;
758
- overflow-x: hidden;
759
- overflow-y: auto;
760
- max-height: 250px;
761
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
762
- }
763
-
764
- .model-desc {
765
- margin: 20px 0;
766
- }
767
-
768
-
769
-
770
- a {
771
- font-weight: 500;
772
- color: $primary-color;
773
- text-decoration: inherit;
774
- }
775
- a:hover {
776
- color: #1e669a;
777
- }
778
-
779
- .api-info {
780
- background-color: #fff;
781
- border-radius: 5px;
782
- padding: 20px;
783
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
784
- margin-top: 20px;
785
- h2 {
786
- color: $primary-color;
787
- }
788
-
789
- h3 {
790
- margin-top: 10px;
791
- }
792
-
793
- h4{
794
- margin-bottom: 4px;
795
- }
796
-
797
- .query {
798
- }
799
-
800
- .endpoint {
801
- font-weight: bold;
802
- color: $primary-color;
803
- }
804
- .api-endpoints {
805
- .api-endpoint {
806
- margin-bottom: 15px;
807
- padding: 10px;
808
- border: 1px solid #eee;
809
- border-radius: 5px;
810
-
811
- .response {
812
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
813
- padding: 4px;
814
- background-color: white;
815
- }
816
- .method {
817
- font-weight: bold;
818
- font-size: 120%;
819
- margin-right: 10px;
820
- padding: 2px 5px;
821
- border-radius: 3px;
822
- &::before{
823
- content: '[';
824
- }
825
- &::after{
826
- content: ']';
827
- }
828
- &.GET {
829
- background-color: #2ecc71;
830
- color: #fff;
831
- }
832
- &.POST {
833
- background-color: #3498db;
834
- color: #fff;
835
- }
836
- &.PUT {
837
- background-color: #f39c12;
838
- color: #fff;
839
- }
840
- &.DELETE {
841
- background-color: #e74c3c;
842
- color: #fff;
843
- }
844
- }
845
-
846
- .description {
847
- margin-top: 5px;
848
- }
849
- pre{
850
- white-space: pre-wrap;
851
- max-width: 100%;
852
- overflow: auto;
853
- background-color: #f8f8f8;
854
- }
855
- }
856
- }
857
- }
858
-
859
- .dialog-modal {
860
- max-width: 720px;
861
- width: 100%;
862
- }
863
-
864
- .fs-mini {
865
- word-break: break-all;
866
- direction: ltr;
867
- overflow-wrap: break-word;
868
- font-size: 90%;
869
-
870
- line-height: 70%;
871
- max-height: 480px;
872
- overflow-y: scroll;
873
- code{
874
- white-space: pre-wrap !important;
875
- }
876
- }
877
-
878
- .fs-regular{
879
- font-size: 140%;
880
- }
881
-
882
- .data-add {
883
- flex: 1;
884
- min-width: 320px;
885
- }
886
-
887
- .mg-1 {
888
- margin: 8px;
889
- }
890
- .mg-v-1 {
891
- margin: 8px 0 ;
892
- }
893
- .mg-h-1 {
894
- margin: 0 8px;
895
- }
896
- .mg-2 {
897
- margin: 16px;
898
- }
899
- .mg-3 {
900
- margin: 24px;
901
- }
902
- .mg-4 {
903
- margin: 32px;
904
- }
905
-
906
- span.required {
907
- color: red;
908
- font-weight: bold;
909
- }
910
-
911
- .primalsbar .left {
912
- font-size: 80%;
913
- .website{
914
- direction: ltr;
915
- }
916
- .rtl .website .title{
917
- direction: ltr;
918
- }
919
- @media only screen and (min-width: 480px){
920
- font-size: 100%;
921
- }
922
- .svg {
923
- max-width: 32px;
924
- }
925
- a {
926
- color: rgb(52, 152, 219);
927
- }
928
- }
929
-
930
-
931
- label{
932
- padding: 4px;
933
- }
934
- .checkbox-label {
935
- background: #f0f0f0;
936
- cursor: pointer;
937
- border: 1px solid transparent;
938
- &:hover,&:focus,&:active {
939
- border: 1px solid #c8c8c8;
940
- }
941
- margin: 8px 0;
942
- input {
943
- margin-left: auto;
944
- }
945
- }
946
-
947
- .flex.actions {
948
- margin: 16px 0;
949
- justify-content: center;
950
- gap: 8px;
951
- display: flex;
952
- &.left {
953
- justify-content: flex-start;
954
- }
955
- &.center {
956
- justify-content: center;
957
- }
958
- }
959
-
960
- h1 {
961
- text-align: center;
962
- padding: 8px;
963
- @media only screen and (min-width: 480px){
964
- padding: 16px;
965
- font-size: 200%;
966
- }
967
- }
968
-
969
- .hidden-anchor {
970
- scroll-margin: 50px;
971
- @media only screen and (min-width: 1024px){
972
- position: relative;
973
- }
974
- }
975
-
976
- footer {
977
- margin-top: 40px; // Espace avant le footer
978
- padding: 20px;
979
- text-align: center;
980
- color: $dark-gray;
981
- border-top: 1px solid $medium-gray;
982
- svg {
983
- vertical-align: middle;
984
- }
985
- }
986
-
987
- .ui {
988
- pointer-events: all;
989
- }
990
- .ui-locked {
991
- pointer-events: none;
992
- }
993
-
994
- .model-importer-item {
995
- border: 1px solid #dedede;
996
- padding: 8px;
997
- margin: 24px 0;
998
- cursor: pointer;
999
- label {
1000
- margin: 8px;
1001
- font-size: 120%;
1002
- font-weight: bolder;
1003
- }
1004
- &:hover,&.active {
1005
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
1006
- background-color: white;
1007
- label {
1008
- }
1009
- }
1010
- }
1011
-
1012
- .break-word {
1013
- word-break: break-word;
1014
- }
1015
-
1016
- .filter-active .filter-field {
1017
- > .flex {
1018
- width: 100%;
1019
- min-height: 122px;
1020
- }
1021
- }
1022
- .filter-field {
1023
- align-items: flex-end;
1024
- overflow: hidden;
1025
- .title{
1026
- text-overflow: ellipsis;
1027
- overflow: hidden;
1028
- white-space: nowrap;
1029
- max-width: 460px;
1030
- padding: 0 4px;
1031
- }
1032
- .filter {
1033
- width: 100%;
1034
- label, input, select {
1035
- margin: 4px;
1036
- width: 100%;
1037
- }
1038
- > .flex {
1039
- width: 100%;
1040
- }
1041
- }
1042
- button {
1043
- opacity: 0.4;
1044
- }
1045
- button.active {
1046
- opacity: 1;
1047
- }
1048
- }
1049
- .filter {
1050
- .field {
1051
- flex:1;
1052
- }
1053
- }
1054
-
1055
-
1056
- .link-value {
1057
- width: 350px;
1058
- overflow: hidden;
1059
- white-space: nowrap;
1060
- display: block;
1061
- text-overflow: ellipsis;
1062
- margin: 0 auto;
1063
- }
1064
-
1065
- #ui .msg {
1066
- padding: 8px;
1067
- margin: 16px 0;
1068
- }
1069
- #ui .msg.msg-tiny {
1070
- padding: 4px;
1071
- margin: 8px 0;
1072
- font-size: 80%;
1073
- border: 1px solid $medium-gray;
1074
- }
1075
- #ui .msg.msg-info {
1076
- background-color: #2f7caf;
1077
- color: #fdfdfd;
1078
- }
1079
- #ui .msg.msg-valid {
1080
- background-color: #4f9b2a;
1081
- color: #fdfdfd;
1082
- }
1083
-
1084
- .shadow{
1085
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
1086
- background-color: white;
1087
- }
1088
-
1089
- h2.shadow {
1090
- padding: 8px;
1091
- color: #727272;
1092
- }
1093
- .model-importer-item {
1094
- label {
1095
- color: #898989;
1096
- }
1097
- &.active {
1098
- label {
1099
- color: #727272;
1100
- }
1101
- }
1102
- }
1103
-
1104
- .mini {
1105
- .field-checkbox.field-bg {
1106
- background: none;
1107
- }
1108
- input[type=checkbox] {
1109
- cursor: pointer;
1110
- margin: 0 auto;
1111
- background: none;
1112
- width: 16px;
1113
- height: 16px;
1114
- display: block;
1115
- }
1116
- }
1117
-
1118
- .pagination-wrapper {
1119
- justify-self: flex-end;
1120
- .pagination {
1121
- flex:1;
1122
- }
1123
- .elementsPerPage {
1124
- padding: 8px;
1125
- font-size: 80%;
1126
- input {
1127
- max-width: 60px;
1128
- }
1129
- }
1130
- }
1131
-
1132
- .spinner-loader{
1133
- display: block;
1134
- position: relative;
1135
- height: 10px;
1136
- width: 70px;
1137
- background-image:
1138
- linear-gradient(#3c3c3c 20px, transparent 0),
1139
- linear-gradient(#3c3c3c 20px, transparent 0),
1140
- linear-gradient(#3c3c3c 20px, transparent 0),
1141
- linear-gradient(#3c3c3c 20px, transparent 0);
1142
- background-repeat: no-repeat;
1143
- background-size: 10px auto;
1144
- background-position: 0 0, 20px 0, 40px 0, 60px 0;
1145
- animation: pgfill 1s linear infinite;
1146
- }
1147
- @keyframes pgfill {
1148
- 0% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1149
- 25% { background-image: linear-gradient(#686868 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1150
- 50% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#686868 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1151
- 75% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#686868 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1152
- 100% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#686868 10px, transparent 0); }
1153
- }
1154
-
1155
- .datas .relation-value {
1156
- background: #ededed;
1157
- color: #5a5a5a;
1158
- border-radius: 9px;
1159
- cursor: pointer;
1160
- padding: 2px 8px 2px 8px;
1161
- &:hover {
1162
- box-shadow: none;
1163
- outline: 1px solid #5a5a5a;
1164
- }
1165
-
1166
- }
1167
-
1168
- .condition-details {
1169
- padding-left: 4px;
1170
- margin-left:2px;
1171
- @media only screen and (min-width: 480px) {
1172
- padding-left: 20px; // Indentation
1173
- margin-left: 10px;
1174
- margin-top: 5px;
1175
- margin-bottom: 10px;
1176
- }
1177
- border-left: 2px solid #eee; // Ligne visuelle
1178
- gap: 5px; // Espacement entre les éléments de condition
1179
- }
1180
-
1181
- .code-editor-wrapper {
1182
- position: relative;
1183
- min-height: 200px;
1184
- }
1185
- .code-editor {
1186
- position: absolute;
1187
- left: 0;
1188
- top: 0;
1189
- width: 100%;
1190
- height: 100%;
1191
- margin: 0;
1192
- padding: 0;
1193
- overflow: hidden;
1194
- }
1195
-
1196
- .code {
1197
- text-align: left;
1198
- font-size: 75%;
1199
- direction: ltr;
1200
- max-height: 480px;
1201
- overflow-y: scroll;
1202
- }
1203
-
1204
- .react-tooltip{
1205
- z-index: 9999;
1206
- max-width: 280px;
1207
- }
1208
- .profiles {
1209
- width: 100%;
1210
- .profile-link {
1211
- margin: 0;
1212
- padding: 0;
1213
- display: flex;
1214
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
1215
- }
1216
- }
1217
-
1218
- .ws-pre-line {
1219
- white-space: pre-line;
1220
- }
1221
-
1222
- form .cm-editor {
1223
- max-width: 600px;
1224
- }
1225
-
1226
- td .gallery{
1227
- width: 360px;
1228
- display: flex;
1229
- gap: 4px;
1230
- }
1231
-
1232
- .image {
1233
- width: 100%;
1234
- max-width: 256px;
1235
- }
1236
-
1237
- .codefield {
1238
- width: 100%;
1239
- direction: ltr;
1240
-
1241
- }
1242
-
1243
- .react-international-phone-country-selector {
1244
- width: 44px;
1245
- }
1246
- .datatable .react-international-phone-country-selector-dropdown {
1247
- position: static;
1248
- }
1249
-
1250
- select[multiple]{
1251
- height: 250px;
1252
- min-width: 280px;
1253
- }
1254
-
1255
- // Exemple de styles pour ModelList
1256
- .model-list-container {
1257
- display: flex;
1258
- flex-direction: column;
1259
- gap: 1rem; // Espace entre la barre de recherche et la liste
1260
-
1261
- .model-list-search-bar-container {
1262
- margin-top: 12px;
1263
- // background-color: #f8f9fa; // Optionnel: un fond léger
1264
- // border-bottom: 1px solid #dee2e6; // Optionnel: une bordure
1265
- }
1266
-
1267
- .model-list-search-input {
1268
- width: 100%;
1269
- padding: 0.5rem 0.75rem;
1270
- font-size: 1rem;
1271
- border: 1px solid #ced4da;
1272
- border-radius: 0.25rem;
1273
- box-sizing: border-box; // Important pour que padding ne s'ajoute pas à la largeur
1274
-
1275
- &:focus {
1276
- border-color: #80bdff;
1277
- outline: 0;
1278
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1279
- }
1280
- }
1281
-
1282
- .model-list {
1283
- list-style: none;
1284
- padding: 0;
1285
- margin: 0;
1286
- overflow-y: auto;
1287
-
1288
- .model-list-item {
1289
- padding: 0.75rem 1rem;
1290
- border-bottom: 1px solid #eee;
1291
- cursor: pointer;
1292
- transition: background-color 0.2s ease-in-out;
1293
-
1294
- &:last-child {
1295
- border-bottom: none;
1296
- }
1297
-
1298
- &:hover {
1299
- background-color: #f1f1f1;
1300
- }
1301
-
1302
- &.selected {
1303
- background-color: #007bff;
1304
- color: white;
1305
- font-weight: bold;
1306
-
1307
- .model-item-description { // Si vous affichez la description
1308
- color: #e0e0e0;
1309
- }
1310
- }
1311
-
1312
- .model-name {
1313
- display: block; // Ou flex pour aligner avec description
1314
- }
1315
- .model-item-description {
1316
- font-size: 0.85em;
1317
- color: #6c757d;
1318
- margin-top: 0.25rem;
1319
- display: block;
1320
- }
1321
- }
1322
- }
1323
-
1324
- .no-models-found, .loading-models {
1325
- padding: 1rem;
1326
- text-align: center;
1327
- color: #6c757d;
1328
- }
1329
- }
1330
- #content .home-header {
1331
- background: #126f9b;
1332
- color: white;
1333
- flex-direction: column;
1334
- padding: 16px 4px;
1335
- box-sizing: border-box;
1336
- width: 100%;
1337
- gap:8px;
1338
-
1339
- .link-top {
1340
- text-align: right;
1341
- width: 100%;
1342
- }
1343
- @media only screen and (min-width: 480px){
1344
- padding: 30px;
1345
- }
1346
- h1 {
1347
- margin: 0;
1348
- color: white;
1349
- font-size: 140%;
1350
- }
1351
- > * {
1352
- flex:1;
1353
- }
1354
- }
1355
-
1356
- .badge {
1357
- background-color: #d9d9d9;
1358
- padding: 4px 16px;
1359
- border-radius: 16px;
1360
- border: 1px solid #929292;
1361
- }
1362
-
1363
- .yarl__portal {
1364
- z-index: 9999999 !important;
1365
- }
1366
-
1367
- .data-add {
1368
- input[type=text], input[type=password]{
1369
- min-width: 240px;
1370
- }
1371
- }
1372
-
1373
- .model-creator {
1374
- .field-checkbox {
1375
- padding: 2px;
1376
- display: flex;
1377
- gap: 8px;
1378
- align-items: flex-start;
1379
- .inline {
1380
- flex-direction: row-reverse;
1381
- }
1382
- }
1383
- }
1384
-
1385
- .datalayout {
1386
- @media only screen and (min-width: 480px) {
1387
- padding: 0 16px;
1388
- }
1389
- }
1390
- .main-menu {
1391
- padding: 16px 0;
1392
- @media only screen and (max-width: 479px) {
1393
- &.flex.flex-centered{
1394
- width: 100%;
1395
- }
1396
- }
1397
- .btn.btn-nav {
1398
- @media only screen and (max-width: 479px) {
1399
- display: block;
1400
- width: 100%;
1401
- margin: 0;
1402
- border-radius: 0;
1403
- padding: 5px;
1404
- }
1405
- }
1406
- }
1407
-
1408
-
1409
- // client/src/AIHomePagePrompt.scss
1410
- .ai-home-prompt-section {
1411
- background-color: #f4f7f9;
1412
- border-radius: 8px;
1413
- text-align: center;
1414
- margin: 0 auto;
1415
- max-width: 700px;
1416
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
1417
-
1418
- padding: 1rem;
1419
- @media only screen and (min-width: 480px){
1420
- padding: 2rem;
1421
- }
1422
- textarea {
1423
- width: 100%;
1424
- min-height: 120px;
1425
- margin-bottom: 1.5rem;
1426
- padding: 8px;
1427
- }
1428
-
1429
- button {
1430
- padding: 12px 24px;
1431
- font-size: 1rem;
1432
- cursor: pointer;
1433
- }
1434
- }
1435
-
1436
- #content .ai-home-prompt-section{
1437
-
1438
- h2 {
1439
- margin: 0 0 1.5rem 0;
1440
- font-size: 110%;
1441
- color: $primary-color;
1442
- @media only screen and (min-width: 480px){
1443
- font-size: 140%;
1444
- }
1445
- }
1446
- }
1447
-
1448
- .home-header {
1449
- background: linear-gradient(135deg, #126f9b 0%, #0d4b6e 100%);
1450
- color: white;
1451
- padding: 4rem 2rem;
1452
- text-align: center;
1453
- position: relative;
1454
- overflow: hidden;
1455
-
1456
- h1 {
1457
- font-size: 3rem;
1458
- font-weight: 700;
1459
- margin-bottom: 1rem;
1460
- text-shadow: 0 2px 4px rgba(0,0,0,0.2);
1461
- position: relative;
1462
- }
1463
-
1464
- .message-rotator {
1465
- font-size: 1.2rem;
1466
- margin: 2rem auto;
1467
- max-width: 800px;
1468
- padding: 1rem;
1469
- background: rgba(255,255,255,0.1);
1470
- border-radius: 50px;
1471
- backdrop-filter: blur(5px);
1472
- }
1473
- }
1474
-
1475
-
1476
- .btn {
1477
- transition: all 0.3s ease;
1478
- position: relative;
1479
- overflow: hidden;
1480
-
1481
- &::after {
1482
- content: '';
1483
- position: absolute;
1484
- top: 50%;
1485
- left: 50%;
1486
- width: 5px;
1487
- height: 5px;
1488
- background: rgba(255,255,255,0.5);
1489
- opacity: 0;
1490
- border-radius: 100%;
1491
- transform: scale(1, 1) translate(-50%, -50%);
1492
- transform-origin: 50% 50%;
1493
- }
1494
-
1495
- &:hover::after {
1496
- animation: ripple 1s ease-out;
1497
- }
1498
- }
1499
-
1500
- @keyframes ripple {
1501
- 0% {
1502
- transform: scale(0, 0);
1503
- opacity: 0.5;
1504
- }
1505
- 100% {
1506
- transform: scale(20, 20);
1507
- opacity: 0;
1508
- }
1509
- }
1510
-
1511
- .suggested-prompts {
1512
- text-align: left;
1513
- color: $dark-gray;
1514
-
1515
- p {
1516
- font-weight: 500;
1517
- margin-bottom: 0.75rem;
1518
- color: lighten($dark-gray, 30%);
1519
- }
1520
-
1521
- ul {
1522
- list-style: none;
1523
- padding: 0;
1524
- margin: 0;
1525
- display: grid;
1526
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1527
- gap: 1rem;
1528
- }
1529
-
1530
- li {
1531
- background-color: #ffffff;
1532
- padding: 1rem;
1533
- border-radius: 6px;
1534
- border: 1px solid $medium-gray;
1535
- cursor: pointer;
1536
- transition: all 0.2s ease-in-out;
1537
- box-shadow: 0 2px 4px $shadow-color;
1538
- display: flex;
1539
- flex-direction: column;
1540
-
1541
- &:hover {
1542
- transform: translateY(-3px);
1543
- box-shadow: 0 4px 8px $shadow-color-hover;
1544
- border-color: $primary-color;
1545
- }
1546
-
1547
- strong {
1548
- display: block;
1549
- font-weight: 600;
1550
- color: $primary-color;
1551
- margin-bottom: 0.5rem;
1552
- }
1553
-
1554
- span {
1555
- font-size: 0.9em;
1556
- color: $dark-gray;
1557
- line-height: 1.5;
1558
- opacity: 0.9;
1559
- flex-grow: 1; // Permet aux cartes d'une même ligne d'avoir la même hauteur
1560
- }
1561
- }
1562
- }
1563
-
1564
- .kpi-selection-list {
1565
- list-style: none;
1566
- padding: 0;
1567
- margin: 0;
1568
- max-height: 300px;
1569
- overflow-y: auto;
1570
- }
1571
- .kpi-selection-list li {
1572
- padding: 10px;
1573
- border-bottom: 1px solid #eee;
1574
- cursor: pointer;
1575
- }
1576
- .kpi-selection-list li:hover {
1577
- background-color: #f5f5f5;
1578
- }
1579
- .kpi-selection-list li:last-child {
1580
- border-bottom: none;
1581
- }
1582
-
1583
-
1584
- // Styles for TextField with suggestions
1585
- .with-suggestions {
1586
- position: relative;
1587
- }
1588
-
1589
- .suggestions-list {
1590
- position: absolute;
1591
- background-color: white;
1592
- border: 1px solid #ccc;
1593
- border-top: none;
1594
- list-style: none;
1595
- margin: 0;
1596
- padding: 0;
1597
- width: 100%;
1598
- z-index: 1000; // High z-index to appear over other elements
1599
- max-height: 250px;
1600
- overflow-y: auto;
1601
- box-shadow: 0 4px 6px rgba(0,0,0,0.1);
1602
- border-radius: 0 0 4px 4px;
1603
-
1604
- li {
1605
- padding: 8px 12px;
1606
- cursor: pointer;
1607
- display: flex;
1608
- align-items: center;
1609
- gap: 8px;
1610
- font-size: 0.9rem;
1611
-
1612
- &:hover {
1613
- background-color: #f0f8ff; // A light blue hover
1614
- }
1615
- }
1616
- }
1617
-
1618
- .gap-2 {
1619
- gap: 8px;
1620
- }
1621
- .gap-3 {
1622
- gap: 16px;
1623
- }
1624
- .gap-4 {
1625
- gap: 32px;
1626
- }
1
+ @import "_variables.scss";
2
+ img {
3
+ margin: 0 auto;
4
+ max-width: 100%;
5
+ width: auto;
6
+ }
7
+
8
+ /*
9
+ * Style global pour les barres de défilement (scrollbars)
10
+ * S'applique à toute l'application, y compris les blocs de code.
11
+ */
12
+
13
+ /* Pour les navigateurs WebKit (Chrome, Safari, Edge, etc.) */
14
+ ::-webkit-scrollbar {
15
+ width: 8px; /* Largeur de la scrollbar verticale */
16
+ height: 8px; /* Hauteur de la scrollbar horizontale */
17
+ }
18
+
19
+ /* La piste (le fond de la scrollbar) */
20
+ ::-webkit-scrollbar-track {
21
+ background: $scrollbar-track-color;
22
+ border-radius: 10px;
23
+ }
24
+
25
+ /* La poignée (la partie mobile de la scrollbar) */
26
+ ::-webkit-scrollbar-thumb {
27
+ background-color: $scrollbar-thumb-color;
28
+ border-radius: 10px;
29
+ border: 2px solid $scrollbar-track-color; /* Crée un petit espacement autour de la poignée */
30
+ }
31
+
32
+ /* La poignée au survol de la souris */
33
+ ::-webkit-scrollbar-thumb:hover {
34
+ background-color: $scrollbar-thumb-hover-color;
35
+ }
36
+
37
+ body {
38
+ font-family: "Nunito Sans", sans-serif;
39
+ line-height: 1.6; // Améliore la lisibilité
40
+ background-color: $light-color;
41
+ color: $dark-color;
42
+ margin: 0;
43
+ padding: 0;
44
+ }
45
+
46
+ header {
47
+ background-color: #3498db;
48
+ color: white;
49
+ align-items: center;
50
+ h1 {
51
+ font-size: 100%;
52
+ line-height: 100%;
53
+ color: white;
54
+ padding: 0;
55
+ }
56
+ > div.flex {
57
+ gap: 16px;
58
+ padding: 8px;
59
+ font-size: 20px;
60
+ }
61
+ svg {
62
+ cursor: pointer;
63
+ }
64
+ height: 50px;
65
+ overflow: hidden;
66
+ }
67
+ .flex {
68
+ display: flex;
69
+ flex-wrap: wrap;
70
+ align-items: center;
71
+ &.flex-fw {
72
+ width: 100%;
73
+ }
74
+ &.flex-start {
75
+ align-items: start;
76
+ }
77
+ &.flex-end {
78
+ justify-content: flex-end;
79
+ }
80
+ &.flex-self-end {
81
+ align-self: end;
82
+ }
83
+ .flex-left {
84
+ justify-content: flex-start;
85
+ }
86
+ &.flex-no-wrap {
87
+ flex-wrap: nowrap;
88
+ }
89
+ &.flex-no-gap {
90
+ gap: 0px;
91
+ }
92
+ &.flex-mini-gap {
93
+ gap: 4px;
94
+ }
95
+ &.flex-big-gap {
96
+ gap: 32px;
97
+ }
98
+ &.flex-stretch {
99
+ align-items: stretch;
100
+ }
101
+ &.flex-centered{
102
+ margin-left: auto;
103
+ margin-right: auto;
104
+ width: fit-content;
105
+ justify-content: center;
106
+ }
107
+ &.flex-border {
108
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
109
+ padding: 4px;
110
+ }
111
+ &.flex-row {
112
+ flex-direction: column;
113
+ }
114
+ gap: 4px;
115
+ @media only screen and (min-width: 720px){
116
+ gap: 12px;
117
+ }
118
+ }
119
+ .flex-1 {
120
+ flex: 1;
121
+ }
122
+ .flex-2 {
123
+ flex: 2;
124
+ }
125
+ .flex-3 {
126
+ flex: 3;
127
+ }
128
+ .flex-4 {
129
+ flex: 4;
130
+ }
131
+
132
+ h1, h2, h3 {
133
+ color: #333; // Couleur de titre consistante et lisible
134
+ }
135
+ h2 {
136
+ box-sizing: border-box;
137
+ margin: 4px;
138
+ color: #575656;
139
+ border-bottom: 1px solid #969696;
140
+ }
141
+
142
+ .p-1 {
143
+ padding: 4px;
144
+ }
145
+ .p-2 {
146
+ padding: 8px;
147
+ }
148
+ .p-3 {
149
+ padding: 16px;
150
+ }
151
+ .p-4 {
152
+ padding: 32px;
153
+ }
154
+ .prior {
155
+ position: relative;
156
+ text-align: center;
157
+ max-width: 640px;
158
+ font-size: 75%;
159
+ flex-direction: column;
160
+ @media only screen and (min-width: 480px){
161
+ font-size: 100%;
162
+ flex-direction: row;
163
+ }
164
+ img {
165
+ align-self: flex-start;
166
+ margin: 0 auto;
167
+ max-width: 100%;
168
+ width: auto;
169
+ max-height: 160px;
170
+ }
171
+ &.tiny {
172
+ position: fixed;
173
+ bottom: 48px;
174
+ right: 0;
175
+ background-color: white;
176
+ border-radius: 100%;
177
+ line-height: 100%;
178
+ cursor: pointer;
179
+ padding: 2px;
180
+ border: 1px solid grey;
181
+ width: 64px;
182
+ height: 64px;
183
+ @media only screen and (max-width: 479px){
184
+ width: 42px;
185
+ height: 42px;
186
+ }
187
+ }
188
+
189
+ .bubble {
190
+ position: static;
191
+ margin: 8px;
192
+ .inner {
193
+ border-radius: 12px;
194
+ color: $dark-color;
195
+ padding: 8px;
196
+ border: 1px solid grey;
197
+ background-color: white;
198
+ }
199
+ }
200
+
201
+ .close {
202
+ font-size: 140%;
203
+ position: absolute;
204
+ top: 0;
205
+ right: 0;
206
+ cursor: pointer;
207
+ }
208
+ }
209
+
210
+ .btn .no-mobile-text {
211
+ @media only screen and (max-width: 768px){
212
+ display: none;
213
+ }
214
+ display: block;
215
+ }
216
+ .model-list {
217
+ max-height: 30vh;
218
+
219
+ @media only screen and (min-height: 768px){
220
+ max-height:50vh;
221
+ }
222
+ overflow-y: scroll;
223
+ overflow-x: hidden;
224
+ padding: 0 8px;
225
+ background-color: white;
226
+ border-radius: 5px;
227
+ margin: 20px 0;
228
+
229
+ h2 {
230
+ margin-bottom: 10px;
231
+ }
232
+ .btns {
233
+ opacity: 0.35;
234
+ }
235
+
236
+ ul {
237
+ list-style: none;
238
+ margin: 0;
239
+ padding: 0;
240
+ display: flex;
241
+ flex-direction: column;
242
+ li {
243
+ flex: 1;
244
+ display: flex;
245
+ cursor: pointer;
246
+ padding: 10px;
247
+ align-items: center;
248
+ border-bottom: 1px solid #eee;
249
+
250
+ &:last-child {
251
+ border-bottom: none;
252
+ }
253
+
254
+ &:hover, &.active {
255
+ background-color: #f5f5f5;
256
+ transform: translateX(2px);
257
+ transition: transform 0.2s ease;
258
+
259
+ .btns {
260
+ opacity: 1;
261
+ &:hover {
262
+ opacity: 1;
263
+ }
264
+ button {
265
+ }
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+
272
+ form, .form {
273
+ background-color: white;
274
+ border-radius: 12px;
275
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
276
+
277
+ padding: 16px;
278
+
279
+ label {
280
+ display: block;
281
+ margin-bottom: 0;
282
+ color: $primary-color;
283
+ font-weight: 500;
284
+ }
285
+
286
+
287
+ input,
288
+ textarea,
289
+ select {
290
+ width: 100%;
291
+ max-width: 100%;
292
+ padding: 10px;
293
+ border: 1px solid #ccc;
294
+ border-radius: 5px;
295
+ box-sizing: border-box;
296
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
297
+ font-family: "Nunito Sans", sans-serif;
298
+ &:focus, &:-webkit-autofill {
299
+ border-color: $secondary-color;
300
+ background-color: #eaeaea !important;
301
+ outline: none;
302
+ }
303
+
304
+ &:focus {
305
+ box-shadow: 0 0 5px rgba(var(--input-focus-border-color), 0.5); /* Added a glow effect */
306
+ outline: none; /* Removed the default outline */
307
+ }
308
+
309
+ &.input-fit {
310
+ flex: 1
311
+ }
312
+ }
313
+
314
+ textarea {
315
+ height: 120px;
316
+ }
317
+ input[type=number]{
318
+ max-width: 150px;
319
+ }
320
+
321
+ input[type*=date] {
322
+ padding: 4px 8px;
323
+ font-size: 80%;
324
+ }
325
+
326
+ .btn {
327
+ background-color: $primary-color;
328
+ color: white;
329
+ padding: 10px 20px;
330
+ border: none;
331
+ border-radius: 5px;
332
+ cursor: pointer;
333
+ transition: background-color 0.3s ease, transform 0.2s ease; /* Added transitions */
334
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* Added a subtle shadow */
335
+ &:hover {
336
+ transform: translateY(-2px); /* Added a slight lift effect */
337
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2); /* Increased shadow on hover */
338
+ }
339
+ &:active {
340
+ transform: translateY(1px); /* Added a slight push effect */
341
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); /* Reduced shadow on click */
342
+ }
343
+ }
344
+ }
345
+
346
+
347
+ input,
348
+ textarea, select {
349
+ background-color: #f0f0f0; // Gris légèrement plus foncé au survol
350
+ border-color: #ccc;
351
+ color: black;
352
+ }
353
+
354
+ input,
355
+ textarea {
356
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); // Ombre légère
357
+ }
358
+
359
+ input[type=checkbox]{
360
+ box-shadow: none;
361
+ }
362
+ select {
363
+ height: 3em;
364
+ max-width: 480px;
365
+ }
366
+ input[type=checkbox]{
367
+ width: auto;
368
+ }
369
+ input[type="datetime-local"]::-webkit-calendar-picker-indicator, input[type="date"]::-webkit-calendar-picker-indicator {
370
+ cursor: pointer;
371
+ border-radius: 4px;
372
+ color-scheme: light;
373
+ padding: 6px;
374
+ margin: 0;
375
+ &:hover {
376
+ color-scheme: dark;
377
+ background-color: $primary-color;
378
+ }
379
+ }
380
+
381
+ input[type=color] {
382
+ padding: 0 2px;
383
+ min-width: 80px;
384
+ height: 30px;
385
+ }
386
+
387
+
388
+
389
+ #content .models {
390
+ width: 100%;
391
+ h2 {
392
+ margin-bottom: 0;
393
+ }
394
+ @media only screen and (min-width: 1024px){
395
+ max-width: 320px;
396
+ }
397
+ }
398
+
399
+ table {
400
+ background-color: white;
401
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
402
+ width: 100%;
403
+ border-collapse: collapse;
404
+ text-align: center;
405
+ border: 1px solid #ddd; /* Added a border */
406
+ border-radius: 8px; /* Added rounded corners */
407
+ overflow: hidden; /* Hide overflow for rounded corners */
408
+ th, td {
409
+ word-wrap: break-word;
410
+ padding: 12px; /* Increased padding */
411
+ border-bottom: 1px solid #eee; /* Changed the border style */
412
+ max-width: 480px;
413
+ }
414
+ thead tr {
415
+ background-color: #f3f3f3;
416
+ th:not(:first-child) {
417
+ border-left: 1px solid #ddd;
418
+ }
419
+ th:hover{
420
+ background-color: #f3f3f3;
421
+ }
422
+ }
423
+ tr {
424
+ &:nth-child(even) {
425
+ background-color: #f8f8f8;
426
+ }
427
+ &:hover {
428
+ background-color: #f1f1f1;
429
+ }
430
+ }
431
+ td {
432
+ border: 1px dotted #cccccc;
433
+ &.notmet {
434
+ background:#ffeedb8f;
435
+ }
436
+ }
437
+ }
438
+
439
+ dt {
440
+ font-weight: bold;
441
+ }
442
+ dd {
443
+ font-size: 100%;
444
+ margin-bottom: 16px;
445
+ }
446
+
447
+ .datatable {
448
+ width: 100%;
449
+ .reversed {
450
+ .flex.flex-row {
451
+ flex-direction: column-reverse;
452
+ }
453
+ }
454
+ tr:not(.reversed) th {
455
+ border-bottom-right-radius: 0;
456
+ border-bottom-left-radius: 0;
457
+ }
458
+ .reversed th {
459
+ border-top-right-radius: 0;
460
+ border-top-left-radius: 0;
461
+ }
462
+ table{
463
+ background-color: transparent;
464
+ }
465
+ .rte img {
466
+ max-width: 100%;
467
+ }
468
+ > .table-wrapper{
469
+ overflow-x: auto;
470
+ }
471
+ th {
472
+ padding: 4px;
473
+ min-width: 100px;
474
+ }
475
+ }
476
+ /* ensures the increment/decrement arrows always display */
477
+ input[type=number]::-webkit-inner-spin-button,
478
+ input[type=number]::-webkit-outer-spin-button {
479
+ opacity: 1;
480
+ }
481
+
482
+ form .field {
483
+ width: 100%;
484
+ .help {
485
+ width: 100%;
486
+ color: #575757;
487
+ padding: 4px;
488
+ }
489
+ }
490
+
491
+ form .field-checkbox {
492
+ .inline {
493
+ display: flex;
494
+ text-align: left;
495
+ }
496
+ label {
497
+ flex:1;
498
+ cursor: pointer;
499
+ }
500
+ input {
501
+ cursor: pointer;
502
+ }
503
+ }
504
+
505
+ form .field-checkbox {
506
+ .inline2 {
507
+ flex-direction: row-reverse;
508
+ }
509
+ }
510
+
511
+ label + .field, label + input, label + select {
512
+ margin-bottom: 12px;
513
+ }
514
+ .flex {
515
+ > label + .field, label + input, label + select {
516
+ margin-bottom: 0;
517
+ }
518
+ }
519
+
520
+ .field-relation {
521
+ position: relative;
522
+ width: fit-content;
523
+ margin-bottom: 16px;
524
+ .inner {
525
+ display: flex;
526
+ width: auto;
527
+ position: relative;
528
+ }
529
+ input[type=text]{
530
+ height: 3em;
531
+ }
532
+ select {
533
+ display: none;
534
+ }
535
+ .results {
536
+ position: absolute;
537
+ top: 2.8em;
538
+ z-index: 10;
539
+ width: 100%;
540
+ background-color: white;
541
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
542
+ left: 0;
543
+ max-height: 220px;
544
+ overflow-y: auto;
545
+ }
546
+ .selected-values {
547
+ width: 100%;
548
+ .selected-value {
549
+ width: 100%;
550
+ padding: 4px;
551
+ margin: 0;
552
+ &:hover {
553
+ background-color: #F8F8F8;
554
+ }
555
+ }
556
+ }
557
+ .item{
558
+ cursor: pointer;
559
+ padding: 4px;
560
+ &:hover {
561
+ background-color: #F8F8F8;
562
+ }
563
+ }
564
+ }
565
+
566
+ .cursor-pointer {
567
+ cursor: pointer;
568
+ }
569
+
570
+ .datas {
571
+ flex: 1;
572
+ min-width: 320px;
573
+ @media only screen and (min-width: 480px){
574
+ min-width: 480px;
575
+ }
576
+ }
577
+
578
+
579
+ /* website*/
580
+ #content {
581
+ padding: 0;
582
+ h1 {
583
+ margin: 24px 8px;
584
+ }
585
+ h2 {
586
+ margin: 20px 4px;
587
+ }
588
+ h3 {
589
+ margin: 16px 4px;
590
+ }
591
+ h4 {
592
+ margin: 12px 2px;
593
+ }
594
+ h5 {
595
+ margin: 8px 2px;
596
+ }
597
+ h6 {
598
+ margin: 2px;
599
+ }
600
+ }
601
+
602
+ .languages {
603
+ display: none;
604
+ gap: 8px;
605
+ @media only screen and (min-width: 480px){
606
+ display: flex;
607
+ }
608
+ .field {
609
+ margin: 0 auto;
610
+ select {
611
+ max-width: 180px;
612
+ margin: 0;
613
+ }
614
+ }
615
+ }
616
+ .sections {
617
+ display: flex;
618
+ gap: 16px;
619
+ align-items: center;
620
+ }
621
+ .blocs-prez{
622
+ display: grid;
623
+ grid-template-columns: repeat(auto-fit, minmax(364px, 1fr));
624
+ gap: 64px;
625
+ margin-top: 2rem;
626
+ @media only screen and (min-width: 480px){
627
+ padding: 0px 32px;
628
+ }
629
+ }
630
+
631
+ #content .bloc-prez {
632
+ &.tech{
633
+ align-self: flex-start;
634
+ }
635
+ ul {
636
+ list-style: none;
637
+ padding: 0;
638
+ margin-top: 1rem;
639
+
640
+ li {
641
+ margin-bottom: 0.5rem;
642
+ position: relative;
643
+ padding-left: 1.5rem;
644
+
645
+ &::before {
646
+ content: '✓';
647
+ position: absolute;
648
+ left: 0;
649
+ color: $secondary-color;
650
+
651
+ }
652
+ }
653
+ }
654
+
655
+ background-color: white;
656
+ border-radius: 12px;
657
+ padding: 2rem;
658
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
659
+ transition: transform 0.3s ease;
660
+ box-sizing: border-box;
661
+
662
+ &:hover {
663
+ transform: translateY(-5px);
664
+ }
665
+ img {
666
+ display: block; // Pour que la transformation s'applique bien
667
+ transition: transform 0.3s ease-out;
668
+ &:hover {
669
+ transform: scale(1.03); // Léger zoom sur l'image au survol
670
+ }
671
+ }
672
+ h2 {
673
+ color: $dark-gray;
674
+ margin-top: 0;
675
+ margin-bottom: 15px;
676
+ border-bottom: none; // Enlever la bordure par défaut si non désirée ici
677
+ }
678
+ position: relative;
679
+ .icon-header {
680
+ font-size: 3rem;
681
+ color: $primary-color;
682
+ margin-bottom: 1rem;
683
+ position: absolute;
684
+ top: -25px;
685
+ right: 20px;
686
+ opacity: 0.8;
687
+ @media only screen and (min-width: 480px){
688
+ right: -28px;
689
+ top: -32px;
690
+ font-size: 350%;
691
+ }
692
+ }
693
+
694
+ img {
695
+ border-radius: 8px; // Coins arrondis pour l'image
696
+ margin-bottom: 15px;
697
+ max-width: 100%;
698
+ height: auto; // Assurer la proportion
699
+ }
700
+ .logolink {
701
+ flex: 1;
702
+ min-width: 128px;
703
+ }
704
+ .logolinks {
705
+ flex-wrap: wrap;
706
+ }
707
+ }
708
+
709
+ .rtl #content .bloc-prez {
710
+ ul {
711
+ li {
712
+ &::before{
713
+ right: -20px;
714
+ }
715
+ }
716
+ }
717
+ }
718
+ .rtl {
719
+ direction: rtl;
720
+ }
721
+ .ltr {
722
+ direction: ltr;
723
+ }
724
+ .hint {
725
+ white-space: break-spaces;
726
+ max-width: 720px;
727
+ font-size: 90%;
728
+ margin: 0 0 4px 0;
729
+ padding: 2px 10px;
730
+ background: #f9f9f9;
731
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
732
+ }
733
+
734
+ .hint-icon {
735
+ color: $primary-color;
736
+ cursor: pointer;
737
+ display: flex;
738
+ }
739
+
740
+ .rte {
741
+ width: 100%;
742
+ padding: 8px;
743
+ border: 1px solid #ccc;
744
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
745
+ button {
746
+ padding: 2px 4px;
747
+ &.is-active {
748
+ background-color: $primary-color-darker;
749
+ color: white;
750
+ }
751
+ }
752
+
753
+ }
754
+
755
+ .rte-value {
756
+ width: 100%;
757
+ display: block;
758
+ overflow-x: hidden;
759
+ overflow-y: auto;
760
+ max-height: 250px;
761
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
762
+ }
763
+
764
+ .model-desc {
765
+ margin: 20px 0;
766
+ }
767
+
768
+
769
+
770
+ a {
771
+ font-weight: 500;
772
+ color: $primary-color;
773
+ text-decoration: inherit;
774
+ }
775
+ a:hover {
776
+ color: #1e669a;
777
+ }
778
+
779
+ .api-info {
780
+ background-color: #fff;
781
+ border-radius: 5px;
782
+ padding: 20px;
783
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
784
+ margin-top: 20px;
785
+ h2 {
786
+ color: $primary-color;
787
+ }
788
+
789
+ h3 {
790
+ margin-top: 10px;
791
+ }
792
+
793
+ h4{
794
+ margin-bottom: 4px;
795
+ }
796
+
797
+ .query {
798
+ }
799
+
800
+ .endpoint {
801
+ font-weight: bold;
802
+ color: $primary-color;
803
+ }
804
+ .api-endpoints {
805
+ .api-endpoint {
806
+ margin-bottom: 15px;
807
+ padding: 10px;
808
+ border: 1px solid #eee;
809
+ border-radius: 5px;
810
+
811
+ .response {
812
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
813
+ padding: 4px;
814
+ background-color: white;
815
+ }
816
+ .method {
817
+ font-weight: bold;
818
+ font-size: 120%;
819
+ margin-right: 10px;
820
+ padding: 2px 5px;
821
+ border-radius: 3px;
822
+ &::before{
823
+ content: '[';
824
+ }
825
+ &::after{
826
+ content: ']';
827
+ }
828
+ &.GET {
829
+ background-color: #2ecc71;
830
+ color: #fff;
831
+ }
832
+ &.POST {
833
+ background-color: #3498db;
834
+ color: #fff;
835
+ }
836
+ &.PUT {
837
+ background-color: #f39c12;
838
+ color: #fff;
839
+ }
840
+ &.DELETE {
841
+ background-color: #e74c3c;
842
+ color: #fff;
843
+ }
844
+ }
845
+
846
+ .description {
847
+ margin-top: 5px;
848
+ }
849
+ pre{
850
+ white-space: pre-wrap;
851
+ max-width: 100%;
852
+ overflow: auto;
853
+ background-color: #f8f8f8;
854
+ }
855
+ }
856
+ }
857
+ }
858
+
859
+ .dialog-modal {
860
+ max-width: 720px;
861
+ width: 100%;
862
+ }
863
+
864
+ .fs-mini {
865
+ word-break: break-all;
866
+ direction: ltr;
867
+ overflow-wrap: break-word;
868
+ font-size: 90%;
869
+
870
+ line-height: 70%;
871
+ max-height: 480px;
872
+ overflow-y: scroll;
873
+ code{
874
+ white-space: pre-wrap !important;
875
+ }
876
+ }
877
+
878
+ .fs-regular{
879
+ font-size: 140%;
880
+ }
881
+
882
+ .data-add {
883
+ flex: 1;
884
+ min-width: 320px;
885
+ }
886
+
887
+ .mg-1 {
888
+ margin: 8px;
889
+ }
890
+ .mg-v-1 {
891
+ margin: 8px 0 ;
892
+ }
893
+ .mg-h-1 {
894
+ margin: 0 8px;
895
+ }
896
+ .mg-2 {
897
+ margin: 16px;
898
+ }
899
+ .mg-3 {
900
+ margin: 24px;
901
+ }
902
+ .mg-4 {
903
+ margin: 32px;
904
+ }
905
+
906
+ span.required {
907
+ color: red;
908
+ font-weight: bold;
909
+ }
910
+
911
+ .primalsbar .left {
912
+ font-size: 80%;
913
+ .website{
914
+ direction: ltr;
915
+ }
916
+ .rtl .website .title{
917
+ direction: ltr;
918
+ }
919
+ @media only screen and (min-width: 480px){
920
+ font-size: 100%;
921
+ }
922
+ .svg {
923
+ max-width: 32px;
924
+ }
925
+ a {
926
+ color: rgb(52, 152, 219);
927
+ }
928
+ }
929
+
930
+
931
+ label{
932
+ padding: 4px;
933
+ }
934
+ .checkbox-label {
935
+ background: #f0f0f0;
936
+ cursor: pointer;
937
+ border: 1px solid transparent;
938
+ &:hover,&:focus,&:active {
939
+ border: 1px solid #c8c8c8;
940
+ }
941
+ margin: 8px 0;
942
+ input {
943
+ margin-left: auto;
944
+ }
945
+ }
946
+
947
+ .flex.actions {
948
+ margin: 16px 0;
949
+ justify-content: center;
950
+ gap: 8px;
951
+ display: flex;
952
+ &.left {
953
+ justify-content: flex-start;
954
+ }
955
+ &.center {
956
+ justify-content: center;
957
+ }
958
+ }
959
+
960
+ h1 {
961
+ text-align: center;
962
+ padding: 8px;
963
+ @media only screen and (min-width: 480px){
964
+ padding: 16px;
965
+ font-size: 200%;
966
+ }
967
+ }
968
+
969
+ .hidden-anchor {
970
+ scroll-margin: 50px;
971
+ @media only screen and (min-width: 1024px){
972
+ position: relative;
973
+ }
974
+ }
975
+
976
+ footer {
977
+ margin-top: 40px; // Espace avant le footer
978
+ padding: 20px;
979
+ text-align: center;
980
+ color: $dark-gray;
981
+ border-top: 1px solid $medium-gray;
982
+ svg {
983
+ vertical-align: middle;
984
+ }
985
+ }
986
+
987
+ .ui {
988
+ pointer-events: all;
989
+ }
990
+ .ui-locked {
991
+ pointer-events: none;
992
+ }
993
+
994
+ .model-importer-item {
995
+ border: 1px solid #dedede;
996
+ padding: 8px;
997
+ margin: 24px 0;
998
+ cursor: pointer;
999
+ label {
1000
+ margin: 8px;
1001
+ font-size: 120%;
1002
+ font-weight: bolder;
1003
+ }
1004
+ &:hover,&.active {
1005
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
1006
+ background-color: white;
1007
+ label {
1008
+ }
1009
+ }
1010
+ }
1011
+
1012
+ .break-word {
1013
+ word-break: break-word;
1014
+ }
1015
+
1016
+ .filter-active .filter-field {
1017
+ > .flex {
1018
+ width: 100%;
1019
+ min-height: 122px;
1020
+ }
1021
+ }
1022
+ .filter-field {
1023
+ align-items: flex-end;
1024
+ overflow: hidden;
1025
+ .title{
1026
+ text-overflow: ellipsis;
1027
+ overflow: hidden;
1028
+ white-space: nowrap;
1029
+ max-width: 460px;
1030
+ padding: 0 4px;
1031
+ }
1032
+ .filter {
1033
+ width: 100%;
1034
+ label, input, select {
1035
+ margin: 4px;
1036
+ width: 100%;
1037
+ }
1038
+ > .flex {
1039
+ width: 100%;
1040
+ }
1041
+ }
1042
+ button {
1043
+ opacity: 0.4;
1044
+ }
1045
+ button.active {
1046
+ opacity: 1;
1047
+ }
1048
+ }
1049
+ .filter {
1050
+ .field {
1051
+ flex:1;
1052
+ }
1053
+ }
1054
+
1055
+
1056
+ .link-value {
1057
+ width: 350px;
1058
+ overflow: hidden;
1059
+ white-space: nowrap;
1060
+ display: block;
1061
+ text-overflow: ellipsis;
1062
+ margin: 0 auto;
1063
+ }
1064
+
1065
+ #ui .msg {
1066
+ padding: 8px;
1067
+ margin: 16px 0;
1068
+ }
1069
+ #ui .msg.msg-tiny {
1070
+ padding: 4px;
1071
+ margin: 8px 0;
1072
+ font-size: 80%;
1073
+ border: 1px solid $medium-gray;
1074
+ }
1075
+ #ui .msg.msg-info {
1076
+ background-color: #2f7caf;
1077
+ color: #fdfdfd;
1078
+ }
1079
+ #ui .msg.msg-valid {
1080
+ background-color: #4f9b2a;
1081
+ color: #fdfdfd;
1082
+ }
1083
+
1084
+ .shadow{
1085
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
1086
+ background-color: white;
1087
+ }
1088
+
1089
+ h2.shadow {
1090
+ padding: 8px;
1091
+ color: #727272;
1092
+ }
1093
+ .model-importer-item {
1094
+ label {
1095
+ color: #898989;
1096
+ }
1097
+ &.active {
1098
+ label {
1099
+ color: #727272;
1100
+ }
1101
+ }
1102
+ }
1103
+
1104
+ .mini {
1105
+ .field-checkbox.field-bg {
1106
+ background: none;
1107
+ }
1108
+ input[type=checkbox] {
1109
+ cursor: pointer;
1110
+ margin: 0 auto;
1111
+ background: none;
1112
+ width: 16px;
1113
+ height: 16px;
1114
+ display: block;
1115
+ }
1116
+ }
1117
+
1118
+ .mini {
1119
+ input[type=checkbox] {
1120
+ &:checked, &:hover, &:focus, &:active {
1121
+ outline: 1px solid #c8c8c8;
1122
+ background-color: #3498db;
1123
+ }
1124
+ }
1125
+ }
1126
+
1127
+ .pagination-wrapper {
1128
+ justify-self: flex-end;
1129
+ .pagination {
1130
+ flex:1;
1131
+ }
1132
+ .elementsPerPage {
1133
+ padding: 8px;
1134
+ font-size: 80%;
1135
+ input {
1136
+ max-width: 60px;
1137
+ }
1138
+ }
1139
+ }
1140
+
1141
+ .spinner-loader{
1142
+ display: block;
1143
+ position: relative;
1144
+ height: 10px;
1145
+ width: 70px;
1146
+ background-image:
1147
+ linear-gradient(#3c3c3c 20px, transparent 0),
1148
+ linear-gradient(#3c3c3c 20px, transparent 0),
1149
+ linear-gradient(#3c3c3c 20px, transparent 0),
1150
+ linear-gradient(#3c3c3c 20px, transparent 0);
1151
+ background-repeat: no-repeat;
1152
+ background-size: 10px auto;
1153
+ background-position: 0 0, 20px 0, 40px 0, 60px 0;
1154
+ animation: pgfill 1s linear infinite;
1155
+ }
1156
+ @keyframes pgfill {
1157
+ 0% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1158
+ 25% { background-image: linear-gradient(#686868 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1159
+ 50% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#686868 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1160
+ 75% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#686868 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0); }
1161
+ 100% { background-image: linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#3c3c3c 10px, transparent 0), linear-gradient(#686868 10px, transparent 0); }
1162
+ }
1163
+
1164
+ .datas .relation-value {
1165
+ background: #ededed;
1166
+ color: #5a5a5a;
1167
+ border-radius: 9px;
1168
+ cursor: pointer;
1169
+ padding: 2px 8px 2px 8px;
1170
+ &:hover {
1171
+ box-shadow: none;
1172
+ outline: 1px solid #5a5a5a;
1173
+ }
1174
+
1175
+ }
1176
+
1177
+ .condition-details {
1178
+ padding-left: 4px;
1179
+ margin-left:2px;
1180
+ @media only screen and (min-width: 480px) {
1181
+ padding-left: 20px; // Indentation
1182
+ margin-left: 10px;
1183
+ margin-top: 5px;
1184
+ margin-bottom: 10px;
1185
+ }
1186
+ border-left: 2px solid #eee; // Ligne visuelle
1187
+ gap: 5px; // Espacement entre les éléments de condition
1188
+ }
1189
+
1190
+ .code-editor-wrapper {
1191
+ position: relative;
1192
+ min-height: 200px;
1193
+ }
1194
+ .code-editor {
1195
+ position: absolute;
1196
+ left: 0;
1197
+ top: 0;
1198
+ width: 100%;
1199
+ height: 100%;
1200
+ margin: 0;
1201
+ padding: 0;
1202
+ overflow: hidden;
1203
+ }
1204
+
1205
+ .code {
1206
+ text-align: left;
1207
+ font-size: 75%;
1208
+ direction: ltr;
1209
+ max-height: 480px;
1210
+ overflow-y: scroll;
1211
+ }
1212
+
1213
+ .react-tooltip{
1214
+ z-index: 9999;
1215
+ max-width: 280px;
1216
+ }
1217
+ .profiles {
1218
+ width: 100%;
1219
+ .profile-link {
1220
+ margin: 0;
1221
+ padding: 0;
1222
+ display: flex;
1223
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
1224
+ }
1225
+ }
1226
+
1227
+ .ws-pre-line {
1228
+ white-space: pre-line;
1229
+ }
1230
+
1231
+ form .cm-editor {
1232
+ max-width: 600px;
1233
+ }
1234
+
1235
+ td .gallery{
1236
+ width: 360px;
1237
+ display: flex;
1238
+ gap: 4px;
1239
+ }
1240
+
1241
+ .image {
1242
+ width: 100%;
1243
+ max-width: 256px;
1244
+ }
1245
+
1246
+ .codefield {
1247
+ width: 100%;
1248
+ direction: ltr;
1249
+
1250
+ }
1251
+
1252
+ .react-international-phone-country-selector {
1253
+ width: 44px;
1254
+ }
1255
+ .datatable .react-international-phone-country-selector-dropdown {
1256
+ position: static;
1257
+ }
1258
+
1259
+ select[multiple]{
1260
+ height: 250px;
1261
+ min-width: 280px;
1262
+ }
1263
+
1264
+ // Exemple de styles pour ModelList
1265
+ .model-list-container {
1266
+ display: flex;
1267
+ flex-direction: column;
1268
+ gap: 1rem; // Espace entre la barre de recherche et la liste
1269
+
1270
+ .model-list-search-bar-container {
1271
+ margin-top: 12px;
1272
+ // background-color: #f8f9fa; // Optionnel: un fond léger
1273
+ // border-bottom: 1px solid #dee2e6; // Optionnel: une bordure
1274
+ }
1275
+
1276
+ .model-list-search-input {
1277
+ width: 100%;
1278
+ padding: 0.5rem 0.75rem;
1279
+ font-size: 1rem;
1280
+ border: 1px solid #ced4da;
1281
+ border-radius: 0.25rem;
1282
+ box-sizing: border-box; // Important pour que padding ne s'ajoute pas à la largeur
1283
+
1284
+ &:focus {
1285
+ border-color: #80bdff;
1286
+ outline: 0;
1287
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1288
+ }
1289
+ }
1290
+
1291
+ .model-list {
1292
+ list-style: none;
1293
+ padding: 0;
1294
+ margin: 0;
1295
+ overflow-y: auto;
1296
+
1297
+ .model-list-item {
1298
+ padding: 0.75rem 1rem;
1299
+ border-bottom: 1px solid #eee;
1300
+ cursor: pointer;
1301
+ transition: background-color 0.2s ease-in-out;
1302
+
1303
+ &:last-child {
1304
+ border-bottom: none;
1305
+ }
1306
+
1307
+ &:hover {
1308
+ background-color: #f1f1f1;
1309
+ }
1310
+
1311
+ &.selected {
1312
+ background-color: #007bff;
1313
+ color: white;
1314
+ font-weight: bold;
1315
+
1316
+ .model-item-description { // Si vous affichez la description
1317
+ color: #e0e0e0;
1318
+ }
1319
+ }
1320
+
1321
+ .model-name {
1322
+ display: block; // Ou flex pour aligner avec description
1323
+ }
1324
+ .model-item-description {
1325
+ font-size: 0.85em;
1326
+ color: #6c757d;
1327
+ margin-top: 0.25rem;
1328
+ display: block;
1329
+ }
1330
+ }
1331
+ }
1332
+
1333
+ .no-models-found, .loading-models {
1334
+ padding: 1rem;
1335
+ text-align: center;
1336
+ color: #6c757d;
1337
+ }
1338
+ }
1339
+ #content .home-header {
1340
+ background: #126f9b;
1341
+ color: white;
1342
+ flex-direction: column;
1343
+ padding: 16px 4px;
1344
+ box-sizing: border-box;
1345
+ width: 100%;
1346
+ gap:8px;
1347
+
1348
+ .link-top {
1349
+ text-align: right;
1350
+ width: 100%;
1351
+ }
1352
+ @media only screen and (min-width: 480px){
1353
+ padding: 30px;
1354
+ }
1355
+ h1 {
1356
+ margin: 0;
1357
+ color: white;
1358
+ font-size: 140%;
1359
+ }
1360
+ > * {
1361
+ flex:1;
1362
+ }
1363
+ }
1364
+
1365
+ .badge {
1366
+ background-color: #d9d9d9;
1367
+ padding: 4px 16px;
1368
+ border-radius: 16px;
1369
+ border: 1px solid #929292;
1370
+ }
1371
+
1372
+ .yarl__portal {
1373
+ z-index: 9999999 !important;
1374
+ }
1375
+
1376
+ .data-add {
1377
+ input[type=text], input[type=password]{
1378
+ min-width: 240px;
1379
+ }
1380
+ }
1381
+
1382
+ .model-creator {
1383
+ .field-checkbox {
1384
+ padding: 2px;
1385
+ display: flex;
1386
+ gap: 8px;
1387
+ align-items: flex-start;
1388
+ .inline {
1389
+ flex-direction: row-reverse;
1390
+ }
1391
+ }
1392
+ }
1393
+
1394
+ .datalayout {
1395
+ @media only screen and (min-width: 480px) {
1396
+ padding: 0 16px;
1397
+ }
1398
+ }
1399
+ .main-menu {
1400
+ padding: 16px 0;
1401
+ @media only screen and (max-width: 479px) {
1402
+ &.flex.flex-centered{
1403
+ width: 100%;
1404
+ }
1405
+ }
1406
+ .btn.btn-nav {
1407
+ @media only screen and (max-width: 479px) {
1408
+ display: block;
1409
+ width: 100%;
1410
+ margin: 0;
1411
+ border-radius: 0;
1412
+ padding: 5px;
1413
+ }
1414
+ }
1415
+ }
1416
+
1417
+
1418
+ // client/src/AIHomePagePrompt.scss
1419
+ .ai-home-prompt-section {
1420
+ background-color: #f4f7f9;
1421
+ border-radius: 8px;
1422
+ text-align: center;
1423
+ margin: 0 auto;
1424
+ max-width: 700px;
1425
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
1426
+
1427
+ padding: 1rem;
1428
+ @media only screen and (min-width: 480px){
1429
+ padding: 2rem;
1430
+ }
1431
+ textarea {
1432
+ width: 100%;
1433
+ min-height: 120px;
1434
+ margin-bottom: 1.5rem;
1435
+ padding: 8px;
1436
+ }
1437
+
1438
+ button {
1439
+ padding: 12px 24px;
1440
+ font-size: 1rem;
1441
+ cursor: pointer;
1442
+ }
1443
+ }
1444
+
1445
+ #content .ai-home-prompt-section{
1446
+
1447
+ h2 {
1448
+ margin: 0 0 1.5rem 0;
1449
+ font-size: 110%;
1450
+ color: $primary-color;
1451
+ @media only screen and (min-width: 480px){
1452
+ font-size: 140%;
1453
+ }
1454
+ }
1455
+ }
1456
+
1457
+ .home-header {
1458
+ background: linear-gradient(135deg, #126f9b 0%, #0d4b6e 100%);
1459
+ color: white;
1460
+ padding: 4rem 2rem;
1461
+ text-align: center;
1462
+ position: relative;
1463
+ overflow: hidden;
1464
+
1465
+ h1 {
1466
+ font-size: 3rem;
1467
+ font-weight: 700;
1468
+ margin-bottom: 1rem;
1469
+ text-shadow: 0 2px 4px rgba(0,0,0,0.2);
1470
+ position: relative;
1471
+ }
1472
+
1473
+ .message-rotator {
1474
+ font-size: 1.2rem;
1475
+ margin: 2rem auto;
1476
+ max-width: 800px;
1477
+ padding: 1rem;
1478
+ background: rgba(255,255,255,0.1);
1479
+ border-radius: 50px;
1480
+ backdrop-filter: blur(5px);
1481
+ }
1482
+ }
1483
+
1484
+
1485
+ .btn {
1486
+ transition: all 0.3s ease;
1487
+ position: relative;
1488
+ overflow: hidden;
1489
+
1490
+ &::after {
1491
+ content: '';
1492
+ position: absolute;
1493
+ top: 50%;
1494
+ left: 50%;
1495
+ width: 5px;
1496
+ height: 5px;
1497
+ background: rgba(255,255,255,0.5);
1498
+ opacity: 0;
1499
+ border-radius: 100%;
1500
+ transform: scale(1, 1) translate(-50%, -50%);
1501
+ transform-origin: 50% 50%;
1502
+ }
1503
+
1504
+ &:hover::after {
1505
+ animation: ripple 1s ease-out;
1506
+ }
1507
+ }
1508
+
1509
+ @keyframes ripple {
1510
+ 0% {
1511
+ transform: scale(0, 0);
1512
+ opacity: 0.5;
1513
+ }
1514
+ 100% {
1515
+ transform: scale(20, 20);
1516
+ opacity: 0;
1517
+ }
1518
+ }
1519
+
1520
+ .suggested-prompts {
1521
+ text-align: left;
1522
+ color: $dark-gray;
1523
+
1524
+ p {
1525
+ font-weight: 500;
1526
+ margin-bottom: 0.75rem;
1527
+ color: lighten($dark-gray, 30%);
1528
+ }
1529
+
1530
+ ul {
1531
+ list-style: none;
1532
+ padding: 0;
1533
+ margin: 0;
1534
+ display: grid;
1535
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1536
+ gap: 1rem;
1537
+ }
1538
+
1539
+ li {
1540
+ background-color: #ffffff;
1541
+ padding: 1rem;
1542
+ border-radius: 6px;
1543
+ border: 1px solid $medium-gray;
1544
+ cursor: pointer;
1545
+ transition: all 0.2s ease-in-out;
1546
+ box-shadow: 0 2px 4px $shadow-color;
1547
+ display: flex;
1548
+ flex-direction: column;
1549
+
1550
+ &:hover {
1551
+ transform: translateY(-3px);
1552
+ box-shadow: 0 4px 8px $shadow-color-hover;
1553
+ border-color: $primary-color;
1554
+ }
1555
+
1556
+ strong {
1557
+ display: block;
1558
+ font-weight: 600;
1559
+ color: $primary-color;
1560
+ margin-bottom: 0.5rem;
1561
+ }
1562
+
1563
+ span {
1564
+ font-size: 0.9em;
1565
+ color: $dark-gray;
1566
+ line-height: 1.5;
1567
+ opacity: 0.9;
1568
+ flex-grow: 1; // Permet aux cartes d'une même ligne d'avoir la même hauteur
1569
+ }
1570
+ }
1571
+ }
1572
+
1573
+ .kpi-selection-list {
1574
+ list-style: none;
1575
+ padding: 0;
1576
+ margin: 0;
1577
+ max-height: 300px;
1578
+ overflow-y: auto;
1579
+ }
1580
+ .kpi-selection-list li {
1581
+ padding: 10px;
1582
+ border-bottom: 1px solid #eee;
1583
+ cursor: pointer;
1584
+ }
1585
+ .kpi-selection-list li:hover {
1586
+ background-color: #f5f5f5;
1587
+ }
1588
+ .kpi-selection-list li:last-child {
1589
+ border-bottom: none;
1590
+ }
1591
+
1592
+
1593
+ // Styles for TextField with suggestions
1594
+ .with-suggestions {
1595
+ position: relative;
1596
+ }
1597
+
1598
+ .suggestions-list {
1599
+ position: absolute;
1600
+ background-color: white;
1601
+ border: 1px solid #ccc;
1602
+ border-top: none;
1603
+ list-style: none;
1604
+ margin: 0;
1605
+ padding: 0;
1606
+ width: 100%;
1607
+ z-index: 1000; // High z-index to appear over other elements
1608
+ max-height: 250px;
1609
+ overflow-y: auto;
1610
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
1611
+ border-radius: 0 0 4px 4px;
1612
+
1613
+ li {
1614
+ padding: 8px 12px;
1615
+ cursor: pointer;
1616
+ display: flex;
1617
+ align-items: center;
1618
+ gap: 8px;
1619
+ font-size: 0.9rem;
1620
+
1621
+ &:hover {
1622
+ background-color: #f0f8ff; // A light blue hover
1623
+ }
1624
+ }
1625
+ }
1626
+
1627
+ .gap-2 {
1628
+ gap: 8px;
1629
+ }
1630
+ .gap-3 {
1631
+ gap: 16px;
1632
+ }
1633
+ .gap-4 {
1634
+ gap: 32px;
1635
+ }