titaned-frontend-library 1.0.1

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 (77) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/MEILISEARCH_INTEGRATION.md +261 -0
  3. package/README.md +236 -0
  4. package/SEARCH_INTEGRATION_README.md +208 -0
  5. package/dist/App.d.ts +3 -0
  6. package/dist/components/ButtonComponent.scss +3 -0
  7. package/dist/components/Footer.scss +87 -0
  8. package/dist/components/MainHeader.scss +915 -0
  9. package/dist/components/Sidebar.scss +170 -0
  10. package/dist/components/UserMenu.scss +0 -0
  11. package/dist/components/common/Button/ButtonComponent.d.ts +4 -0
  12. package/dist/components/common/Footer/Footer.d.ts +4 -0
  13. package/dist/components/common/Header/MainHeader.d.ts +4 -0
  14. package/dist/components/common/Header/SimpleSearchContext.d.ts +36 -0
  15. package/dist/components/common/NavDropdownMenu/NavDropdownMenu.d.ts +11 -0
  16. package/dist/components/common/SearchHighlight.d.ts +11 -0
  17. package/dist/components/common/SearchResultItem.d.ts +12 -0
  18. package/dist/components/common/Sidebar/Sidebar.d.ts +12 -0
  19. package/dist/components/common/UserMenu/UserMenu.d.ts +15 -0
  20. package/dist/components/common/menu/MenuComponent.d.ts +4 -0
  21. package/dist/contexts/SidebarContext.d.ts +6 -0
  22. package/dist/examples/MeiliSearchUsageExample.d.ts +3 -0
  23. package/dist/hooks/useIsMobileSize.d.ts +2 -0
  24. package/dist/hooks/useSidebar.d.ts +1 -0
  25. package/dist/index.cjs +27 -0
  26. package/dist/index.css +1 -0
  27. package/dist/index.d.ts +8 -0
  28. package/dist/index.js +1867 -0
  29. package/dist/interfaces/components.d.ts +181 -0
  30. package/dist/main.d.ts +0 -0
  31. package/dist/providers/SidebarProvider.d.ts +4 -0
  32. package/dist/services/meiliSearchService.d.ts +47 -0
  33. package/dist/utils/searchNavigation.d.ts +43 -0
  34. package/dist/vite.svg +1 -0
  35. package/eslint.config.js +28 -0
  36. package/index.html +13 -0
  37. package/next.config.ts +35 -0
  38. package/package.json +53 -0
  39. package/public/vite.svg +1 -0
  40. package/src/@edx-frontend-platform-i18n.d.ts +1 -0
  41. package/src/App.css +66 -0
  42. package/src/App.tsx +54 -0
  43. package/src/assets/react.svg +1 -0
  44. package/src/components/common/Button/ButtonComponent.scss +3 -0
  45. package/src/components/common/Button/ButtonComponent.tsx +34 -0
  46. package/src/components/common/Footer/Footer.scss +87 -0
  47. package/src/components/common/Footer/Footer.tsx +53 -0
  48. package/src/components/common/Header/MainHeader.scss +915 -0
  49. package/src/components/common/Header/MainHeader.tsx +701 -0
  50. package/src/components/common/Header/SimpleSearchContext.tsx +194 -0
  51. package/src/components/common/NavDropdownMenu/NavDropdownMenu.tsx +58 -0
  52. package/src/components/common/SearchHighlight.tsx +64 -0
  53. package/src/components/common/SearchResultItem.tsx +162 -0
  54. package/src/components/common/Sidebar/Sidebar.scss +170 -0
  55. package/src/components/common/Sidebar/Sidebar.tsx +137 -0
  56. package/src/components/common/UserMenu/UserMenu.scss +0 -0
  57. package/src/components/common/UserMenu/UserMenu.tsx +73 -0
  58. package/src/components/common/menu/MenuComponent.module.css +12 -0
  59. package/src/components/common/menu/MenuComponent.tsx +37 -0
  60. package/src/contexts/SidebarContext.tsx +9 -0
  61. package/src/declarations.d.ts +10 -0
  62. package/src/examples/MeiliSearchUsageExample.tsx +102 -0
  63. package/src/hooks/useIsMobileSize.ts +19 -0
  64. package/src/hooks/useSidebar.ts +10 -0
  65. package/src/index.css +68 -0
  66. package/src/index.ts +21 -0
  67. package/src/interfaces/components.ts +172 -0
  68. package/src/main.tsx +11 -0
  69. package/src/providers/SidebarProvider.tsx +20 -0
  70. package/src/services/meiliSearchService.ts +233 -0
  71. package/src/styles/global-overrides.scss +1131 -0
  72. package/src/utils/searchNavigation.ts +140 -0
  73. package/src/vite-env.d.ts +1 -0
  74. package/tsconfig.app.json +26 -0
  75. package/tsconfig.json +17 -0
  76. package/tsconfig.node.json +24 -0
  77. package/vite.config.ts +34 -0
@@ -0,0 +1,1131 @@
1
+ /* global-overrides.scss */
2
+ /* Add styles here that you want to apply globally and potentially override existing component styles. */
3
+ /* Due to the import order in index.jsx, styles defined here will have higher specificity. */
4
+
5
+ /* Example: */
6
+ /*
7
+ body {
8
+ background-color: lightblue !important;
9
+ }
10
+
11
+ .btn {
12
+ border-radius: 0 !important;
13
+ }
14
+ */
15
+
16
+ /* Theme colors */
17
+ :root {
18
+ /* Main Theme Colors */
19
+ --primary: #2B2399;
20
+ /* Berry Purple */
21
+ --primary-alt: #3C32B5;
22
+ --primary-hover: #E2E1F9;
23
+ --primary-active: #1F1A7D;
24
+ --primary-light: #E2E1F9;
25
+
26
+ --secondary: #7A8AFF;
27
+ /* Berry Blue */
28
+ --secondary-alt: #5C6EF0;
29
+ --secondary-hover: #ECEEFF;
30
+ --secondary-active: #4A5BD1;
31
+ --secondary-light: #ECEEFF;
32
+
33
+ --disabled: #bdbdbd;
34
+
35
+ /* Semantic Colors */
36
+ --success: #358F0A;
37
+ --success-hover: #2d7908;
38
+ --success-light: #eaf6e6;
39
+
40
+ --warning: #FFCD29;
41
+ --warning-hover: #e6b800;
42
+ --warning-light: #fff8e6;
43
+
44
+ --danger: #dc3545;
45
+ --danger-hover: #c82333;
46
+ --danger-light: #fbecec;
47
+
48
+ --info: #0B8E77;
49
+ --info-hover: #097a66;
50
+ --info-light: #e6f5f2;
51
+
52
+ /* Text Colors */
53
+ --text-primary: #121926;
54
+ --text-secondary: #9e9f9e;
55
+ --text-muted: #6b7280;
56
+ --text-light: #364152;
57
+ --text-white: #ffffff;
58
+
59
+ /* Background Colors */
60
+ --bg-body: #f4f7ff;
61
+ --bg-surface: #ffffff;
62
+ --bg-hover: #f9fafb;
63
+ --bg-disabled: #e5e7eb;
64
+
65
+ /* Border Colors */
66
+ --border-color: #e5e6e6;
67
+ --border-color-hover: #d1d5db;
68
+ }
69
+
70
+ // Mixins
71
+ @mixin card-style1 {
72
+ border-radius: 1rem;
73
+ border: 1px solid var(--border-color);
74
+ background-color: var(--bg-surface);
75
+ }
76
+
77
+ @mixin card-style2 {
78
+ border-radius: 12px;
79
+ border: 1px solid var(--border-color);
80
+ background-color: var(--bg-surface);
81
+ }
82
+
83
+ @mixin card-style3 {
84
+ border-radius: 8px;
85
+ border: 1px solid var(--border-color);
86
+ background-color: var(--bg-surface);
87
+ }
88
+
89
+ @mixin sub-header-title-style1 {
90
+ font-size: 20px !important;
91
+ font-weight: 600 !important;
92
+ line-height: 1.2 !important;
93
+ letter-spacing: normal !important;
94
+ }
95
+
96
+ @mixin section-title-style1 {
97
+ font-size: 18px !important;
98
+ font-weight: 500 !important;
99
+ line-height: 1.2 !important;
100
+ letter-spacing: normal !important;
101
+ }
102
+
103
+ @mixin section-title-style2 {
104
+ font-size: 16px !important;
105
+ font-weight: 500 !important;
106
+ line-height: 1.2 !important;
107
+ letter-spacing: normal !important;
108
+ }
109
+
110
+ @mixin section-title-style3 {
111
+ font-size: 16px !important;
112
+ font-weight: 400 !important;
113
+ line-height: 1.2 !important;
114
+ letter-spacing: normal !important;
115
+ }
116
+
117
+ /* Button Styles */
118
+ .btn {
119
+ border-radius: 4px;
120
+ font-weight: 500;
121
+ transition: all 0.2s ease-in-out;
122
+
123
+
124
+ // &:focus {
125
+ // box-shadow: 0 0 0 0.2rem rgba(var(--primary-rgb), 0.25);
126
+ // }
127
+ }
128
+
129
+ /* Primary Button */
130
+ .btn-primary {
131
+ color: var(--primary-light) !important;
132
+ background-color: var(--primary) !important;
133
+ border-color: var(--primary) !important;
134
+ border-radius: 8px !important;
135
+
136
+ &:hover {
137
+ background-color: var(--primary-hover) !important;
138
+ border-color: var(--primary-hover) !important;
139
+ color: var(--primary-alt) !important;
140
+ }
141
+
142
+ &:active,
143
+ &.active {
144
+ background-color: var(--primary-active) !important;
145
+ border-color: var(--primary-active) !important;
146
+ color: var(--primary-light) !important;
147
+ }
148
+
149
+ &:disabled {
150
+ background-color: var(--disabled) !important;
151
+ border-color: var(--disabled) !important;
152
+ color: var(--primary-alt) !important;
153
+ }
154
+
155
+ &:focus::before {
156
+ border: none !important;
157
+ }
158
+
159
+ &:focus-visible {
160
+ outline: none !important;
161
+ }
162
+ }
163
+
164
+ /* Outline Primary Button */
165
+ .btn-outline-primary {
166
+ color: var(--primary) !important;
167
+ border-color: var(--primary) !important;
168
+ background-color: transparent !important;
169
+ border-radius: 8px !important;
170
+
171
+ &:hover {
172
+ color: var(--primary-light) !important;
173
+ background-color: var(--primary) !important;
174
+ border-color: var(--primary) !important;
175
+ }
176
+
177
+ &:active,
178
+ &.active {
179
+ color: var(--primary-light) !important;
180
+ background-color: var(--primary-active) !important;
181
+ border-color: var(--primary-active) !important;
182
+ }
183
+
184
+ &:disabled {
185
+ color: var(--disabled) !important;
186
+ border-color: var(--disabled) !important;
187
+ }
188
+
189
+ &:focus::before {
190
+ border: none !important;
191
+ }
192
+
193
+ &:focus-visible {
194
+ outline: none !important;
195
+ }
196
+ }
197
+
198
+ /* Secondary Button */
199
+ .btn-secondary {
200
+ color: var(--primary-light) !important;
201
+ background-color: var(--secondary) !important;
202
+ border-color: var(--secondary) !important;
203
+ border-radius: 8px !important;
204
+
205
+ &:hover {
206
+ background-color: var(--secondary-hover) !important;
207
+ border-color: var(--secondary-hover) !important;
208
+ color: var(--secondary-hover) !important;
209
+ }
210
+
211
+ &:active,
212
+ &.active {
213
+ background-color: var(--secondary-active) !important;
214
+ border-color: var(--secondary-active) !important;
215
+ }
216
+
217
+ &:disabled {
218
+ background-color: var(--disabled) !important;
219
+ border-color: var(--disabled) !important;
220
+ color: var(--primary-alt) !important;
221
+ }
222
+
223
+ &:focus-visible {
224
+ outline: none !important;
225
+ }
226
+ }
227
+
228
+ /* Outline Secondary Button */
229
+ .btn-outline-secondary {
230
+ color: var(--secondary);
231
+ border-color: var(--secondary);
232
+ background-color: transparent;
233
+ border-radius: 8px;
234
+
235
+ &:hover {
236
+ color: var(--primary-light);
237
+ background-color: var(--secondary);
238
+ border-color: var(--secondary);
239
+ }
240
+
241
+ &:active,
242
+ &.active {
243
+ color: var(--primary-light) !important;
244
+ background-color: var(--secondary-active) !important;
245
+ border-color: var(--secondary-active) !important;
246
+ }
247
+
248
+ &:disabled {
249
+ color: var(--disabled) !important;
250
+ border-color: var(--disabled) !important;
251
+ }
252
+
253
+ &:focus::before {
254
+ border: none !important;
255
+ }
256
+
257
+ &:focus-visible {
258
+ outline: none !important;
259
+ }
260
+ }
261
+
262
+ /* Tertiary Button */
263
+ .btn-tertiary {
264
+ color: var(--primary) !important;
265
+ background-color: transparent;
266
+ border: none !important;
267
+ border-radius: 8px;
268
+
269
+ &:hover {
270
+ color: var(--primary-light);
271
+ background-color: var(--primary-light) !important;
272
+ }
273
+
274
+ &:active,
275
+ &.active {
276
+ color: var(--primary-active) !important;
277
+ background-color: var(--primary-light) !important;
278
+ }
279
+
280
+ &:disabled {
281
+ color: var(--disabled) !important;
282
+ }
283
+
284
+ &:focus::before {
285
+ border: none !important;
286
+ border: solid 2px transparent;
287
+ }
288
+
289
+ &:focus-visible {
290
+ outline: none !important;
291
+ }
292
+ }
293
+
294
+ .btn-outline-tertiary {
295
+ color: var(--primary) !important;
296
+ background-color: transparent !important;
297
+ border: none !important;
298
+ border-radius: 8px;
299
+
300
+ &:hover {
301
+ color: var(--primary-hover);
302
+ background-color: var(--primary-light);
303
+ }
304
+
305
+ &:active,
306
+ &.active {
307
+ color: var(--primary-active) !important;
308
+ background-color: var(--primary-light) !important;
309
+ }
310
+
311
+ &:disabled {
312
+ color: var(--disabled) !important;
313
+ }
314
+
315
+ &:focus::before {
316
+ border: none !important;
317
+ }
318
+
319
+ &:focus-visible {
320
+ outline: none !important;
321
+ }
322
+ }
323
+
324
+ /* Dropdown Styles */
325
+ .dropdown-menu {
326
+ border-radius: 4px;
327
+ border: 1px solid rgba(0, 0, 0, 0.1);
328
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
329
+ padding: 0.5rem 0;
330
+ }
331
+
332
+ .dropdown-item {
333
+ color: #333333;
334
+ padding: 0.5rem 1rem;
335
+
336
+ &:hover {
337
+ background-color: var(--primary-light);
338
+ color: var(--primary);
339
+ }
340
+
341
+ &:active,
342
+ &.active {
343
+ background-color: var(--primary);
344
+ color: #FFFFFF;
345
+ }
346
+
347
+ &:disabled {
348
+ color: rgba(var(--secondary-rgb), 0.5);
349
+ }
350
+ }
351
+
352
+ /* Form Controls */
353
+ .form-control {
354
+ border-radius: 8px;
355
+ border: 1px solid #ced4da;
356
+
357
+ &:focus {
358
+ border-color: var(--primary);
359
+ box-shadow: 0 0 0 0.2rem rgba(var(--primary-rgb), 0.25);
360
+ }
361
+
362
+ &:disabled {
363
+ background-color: #e9ecef;
364
+ }
365
+ }
366
+
367
+ /* Badges */
368
+ .badge {
369
+ font-weight: 500;
370
+ padding: 0.35em 0.65em;
371
+ border-radius: 4px;
372
+ }
373
+
374
+ .badge-primary {
375
+ background-color: var(--primary) !important;
376
+ color: #FFFFFF;
377
+ }
378
+
379
+ .badge-secondary {
380
+ background-color: var(--secondary);
381
+ color: #FFFFFF;
382
+ }
383
+
384
+ /* Alerts */
385
+ .alert {
386
+ border-radius: 4px;
387
+ border: 1px solid transparent;
388
+ }
389
+
390
+ .alert-primary {
391
+ background-color: var(--primary-light);
392
+ border-color: var(--primary);
393
+ color: var(--primary);
394
+ }
395
+
396
+ /* Paragon Components Override */
397
+ .pgn__bubble.pgn__bubble-primary {
398
+ background-color: var(--primary);
399
+ color: #FFFFFF;
400
+ }
401
+
402
+ .pgn__data-table {
403
+ th {
404
+ color: var(--secondary);
405
+ }
406
+
407
+ .pgn__data-table-cell-wrap {
408
+ max-width: unset;
409
+ }
410
+
411
+ .pgn__data-table-footer {
412
+ border-top: none;
413
+ justify-content: center;
414
+ }
415
+ }
416
+
417
+ /* Card Styles */
418
+ .card {
419
+ border-radius: 16px;
420
+ // border: 1px solid rgba(0, 0, 0, 0.1);
421
+ // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
422
+ box-shadow: none !important;
423
+
424
+ // .card-header {
425
+ // background-color: #FFFFFF;
426
+ // border-bottom: 1px solid rgba(0, 0, 0, 0.1);
427
+ // }
428
+ }
429
+
430
+ /* Navigation Styles */
431
+ .nav-link {
432
+ color: var(--secondary);
433
+
434
+ &:hover {
435
+ color: var(--primary);
436
+ }
437
+
438
+ &.active {
439
+ color: var(--primary);
440
+ font-weight: 500;
441
+ }
442
+ }
443
+
444
+ .nav-tabs {
445
+
446
+ .nav-link.active:focus::before,
447
+ .nav-link:focus::before,
448
+ .nav-link:focus-visible::before {
449
+ border: none !important;
450
+ }
451
+
452
+ .nav-link {
453
+ color: var(--text-primary) !important;
454
+ }
455
+
456
+ .nav-link.active {
457
+ color: var(--primary) !important;
458
+ border-bottom: 2px solid var(--primary) !important;
459
+ }
460
+ }
461
+
462
+ /* Modal Styles */
463
+ .pgn__modal {
464
+ .pgn__modal-header {
465
+ padding: 1.5rem;
466
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
467
+
468
+ h2 {
469
+ color: var(--primary);
470
+ font-size: 1.375rem;
471
+ line-height: 1.75rem;
472
+ }
473
+ }
474
+
475
+ // .pgn__modal-body {
476
+ // padding: 1.5rem;
477
+ // }
478
+
479
+ .pgn__modal-footer {
480
+ padding: 1rem 1.5rem;
481
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
482
+ }
483
+ }
484
+
485
+ /* Form Group Styles */
486
+ .pgn__form-group {
487
+ margin-bottom: 1rem;
488
+
489
+ .pgn__form-label {
490
+ font-weight: 500;
491
+ font-size: 0.875rem;
492
+ color: var(--text-primary);
493
+ margin-bottom: 0.5rem;
494
+ }
495
+
496
+ .pgn__form-control-description {
497
+ font-size: 0.75rem;
498
+ color: var(--text-primary);
499
+ margin-top: 0.25rem;
500
+ }
501
+ }
502
+
503
+ /* Checkbox and Radio Styles */
504
+ .pgn__form-checkbox,
505
+ .pgn__form-radio {
506
+ margin: 0.5rem 0;
507
+ display: flex;
508
+ align-items: flex-start;
509
+
510
+ input {
511
+ margin-right: 0.5rem;
512
+ margin-top: 0.25rem;
513
+ }
514
+
515
+ &.pgn__form-control-disabled {
516
+ opacity: 0.5;
517
+ cursor: not-allowed;
518
+ }
519
+ }
520
+
521
+ .pgn__form-checkbox-input,
522
+ .pgn__form-radio-input {
523
+ width: 1rem;
524
+ height: 1rem;
525
+
526
+ &:checked {
527
+ background-color: var(--primary);
528
+ border-color: var(--primary);
529
+ }
530
+
531
+ &:focus {
532
+ box-shadow: 0 0 0 0.2rem rgba(var(--primary-rgb), 0.25);
533
+ border-color: var(--primary);
534
+ }
535
+ }
536
+
537
+ /* Selectable Box Styles */
538
+ .pgn__selectable_box {
539
+ border: 1px solid rgba(0, 0, 0, 0.1);
540
+ border-radius: 4px;
541
+ padding: 1rem;
542
+ transition: all 0.2s ease-in-out;
543
+ cursor: pointer;
544
+
545
+ &:hover {
546
+ border-color: var(--primary);
547
+ background-color: var(--primary-light);
548
+ }
549
+
550
+ &.pgn__selectable_box-active {
551
+ border-color: var(--primary);
552
+ background-color: var(--primary-light);
553
+ }
554
+
555
+ &.pgn__selectable_box-invalid {
556
+ border-color: var(--danger);
557
+ }
558
+ }
559
+
560
+ .pgn__selectable_box-set {
561
+ display: grid;
562
+ gap: 1rem;
563
+ margin: 1rem 0;
564
+ }
565
+
566
+ /* Success Button */
567
+ .btn-success {
568
+ color: #FFFFFF;
569
+ background-color: var(--success);
570
+ border-color: var(--success);
571
+
572
+ &:hover {
573
+ background-color: var(--success-hover);
574
+ border-color: var(--success-hover);
575
+ }
576
+
577
+ &:active,
578
+ &.active {
579
+ background-color: var(--success-hover) !important;
580
+ border-color: var(--success-hover) !important;
581
+ }
582
+
583
+ &:disabled {
584
+ opacity: 0.5;
585
+ }
586
+ }
587
+
588
+ /* Warning Button */
589
+ .btn-warning {
590
+ color: #000000;
591
+ background-color: var(--warning);
592
+ border-color: var(--warning);
593
+
594
+ &:hover {
595
+ background-color: var(--warning-hover);
596
+ border-color: var(--warning-hover);
597
+ }
598
+
599
+ &:active,
600
+ &.active {
601
+ background-color: var(--warning-hover) !important;
602
+ border-color: var(--warning-hover) !important;
603
+ }
604
+
605
+ &:disabled {
606
+ opacity: 0.5;
607
+ }
608
+ }
609
+
610
+ /* Danger Button */
611
+ .btn-danger {
612
+ color: #FFFFFF;
613
+ background-color: var(--danger);
614
+ border-color: var(--danger);
615
+
616
+ &:hover {
617
+ background-color: var(--danger-hover);
618
+ border-color: var(--danger-hover);
619
+ }
620
+
621
+ &:active,
622
+ &.active {
623
+ background-color: var(--danger-hover) !important;
624
+ border-color: var(--danger-hover) !important;
625
+ }
626
+
627
+ &:disabled {
628
+ opacity: 0.5;
629
+ }
630
+ }
631
+
632
+ /* Info Button */
633
+ .btn-info {
634
+ color: #FFFFFF;
635
+ background-color: var(--info);
636
+ border-color: var(--info);
637
+
638
+ &:hover {
639
+ background-color: var(--info-hover);
640
+ border-color: var(--info-hover);
641
+ }
642
+
643
+ &:active,
644
+ &.active {
645
+ background-color: var(--info-hover) !important;
646
+ border-color: var(--info-hover) !important;
647
+ }
648
+
649
+ &:disabled {
650
+ opacity: 0.5;
651
+ }
652
+ }
653
+
654
+ /* Icon Button Styles */
655
+ .btn-icon {
656
+
657
+
658
+ &:focus {
659
+ color: var(--primary) !important;
660
+ // box-shadow: 0 0 0 0.2rem rgba(var(--primary-rgb), 0.25) !important;
661
+ }
662
+
663
+ /* Primary Icon Button */
664
+ &.btn-icon-primary {
665
+ color: var(--primary);
666
+ // background-color: var(--primary);
667
+ // border-color: var(--primary);
668
+
669
+ &:hover {
670
+ color: var(--primary-alt) !important;
671
+ background-color: var(--primary-hover);
672
+ border-color: var(--primary-hover);
673
+ }
674
+
675
+ &:active,
676
+ &.active {
677
+ color: var(--primary-light) !important;
678
+ background-color: var(--primary-active) !important;
679
+ border-color: var(--primary-active) !important;
680
+ }
681
+
682
+ &:disabled {
683
+ color: var(--disabled) !important;
684
+ }
685
+
686
+ &:focus {
687
+ box-shadow: none !important;
688
+ }
689
+ }
690
+
691
+ /* Secondary Icon Button */
692
+ &.btn-icon-secondary {
693
+ color: var(--secondary);
694
+ // background-color: var(--secondary);
695
+ // border-color: var(--secondary);
696
+
697
+ &:hover {
698
+ color: var(--secondary-alt) !important;
699
+ background-color: var(--secondary-hover);
700
+ border-color: var(--secondary-hover);
701
+ }
702
+
703
+ &:active,
704
+ &.active {
705
+ color: var(--secondary-light) !important;
706
+ background-color: var(--secondary-active) !important;
707
+ border-color: var(--secondary-active) !important;
708
+ }
709
+
710
+ &:disabled {
711
+ color: var(--disabled) !important;
712
+ }
713
+
714
+ &:focus {
715
+ box-shadow: none !important;
716
+ }
717
+ }
718
+
719
+
720
+ /* Outline Primary Icon Button */
721
+ &.btn-outline-primary {
722
+ color: var(--primary);
723
+ border-color: var(--primary);
724
+ background-color: transparent;
725
+
726
+ .pgn__icon {
727
+ color: var(--primary);
728
+ }
729
+
730
+ &:hover {
731
+ color: var(--primary-light);
732
+ background-color: var(--primary);
733
+ border-color: var(--primary);
734
+
735
+ .pgn__icon {
736
+ color: var(--primary-light);
737
+ }
738
+ }
739
+
740
+ &:active,
741
+ &.active {
742
+ color: var(--primary-light) !important;
743
+ background-color: var(--primary-active) !important;
744
+ border-color: var(--primary-active) !important;
745
+
746
+ .pgn__icon {
747
+ color: var(--primary-light) !important;
748
+ }
749
+ }
750
+
751
+ &:disabled {
752
+ color: var(--disabled) !important;
753
+ border-color: var(--disabled) !important;
754
+
755
+ .pgn__icon {
756
+ color: var(--disabled) !important;
757
+ }
758
+ }
759
+ }
760
+
761
+ /* Outline Secondary Icon Button */
762
+ &.btn-outline-secondary {
763
+ color: var(--secondary);
764
+ border-color: var(--secondary);
765
+ background-color: transparent;
766
+
767
+ .pgn__icon {
768
+ color: var(--secondary);
769
+ }
770
+
771
+ &:hover {
772
+ color: var(--primary-light);
773
+ background-color: var(--secondary);
774
+ border-color: var(--secondary);
775
+
776
+ .pgn__icon {
777
+ color: var(--primary-light);
778
+ }
779
+ }
780
+
781
+ &:active,
782
+ &.active {
783
+ color: var(--primary-light) !important;
784
+ background-color: var(--secondary-active) !important;
785
+ border-color: var(--secondary-active) !important;
786
+
787
+ .pgn__icon {
788
+ color: var(--primary-light) !important;
789
+ }
790
+ }
791
+
792
+ &:disabled {
793
+ color: var(--disabled) !important;
794
+ border-color: var(--disabled) !important;
795
+
796
+ .pgn__icon {
797
+ color: var(--disabled) !important;
798
+ }
799
+ }
800
+ }
801
+
802
+ /* Tertiary Icon Button */
803
+ &.btn-tertiary {
804
+ color: var(--primary);
805
+ background-color: transparent;
806
+ border: none;
807
+
808
+ .dropdown-toggle {
809
+ background-color: var(--primary-light) !important;
810
+ }
811
+
812
+ .pgn__icon {
813
+ color: var(--primary);
814
+ }
815
+
816
+ &:hover {
817
+ color: var(--primary-hover);
818
+ background-color: var(--primary-light);
819
+
820
+ .pgn__icon {
821
+ color: var(--primary-hover);
822
+ }
823
+ }
824
+
825
+ &:active,
826
+ &.active {
827
+ color: var(--primary-active) !important;
828
+ background-color: var(--primary-light) !important;
829
+
830
+ .pgn__icon {
831
+ color: var(--primary-active) !important;
832
+ }
833
+ }
834
+
835
+ &:disabled {
836
+ color: var(--disabled) !important;
837
+
838
+ .pgn__icon {
839
+ color: var(--disabled) !important;
840
+ }
841
+ }
842
+ }
843
+
844
+ // /* Small Icon Button */
845
+ // &.btn-sm {
846
+ // width: 2rem;
847
+ // height: 2rem;
848
+ // padding: 0.375rem;
849
+
850
+ // .pgn__icon {
851
+ // width: 1rem;
852
+ // height: 1rem;
853
+ // }
854
+ // }
855
+
856
+ // /* Large Icon Button */
857
+ // &.btn-lg {
858
+ // width: 3rem;
859
+ // height: 3rem;
860
+ // padding: 0.75rem;
861
+
862
+ // .pgn__icon {
863
+ // width: 1.5rem;
864
+ // height: 1.5rem;
865
+ // }
866
+ // }
867
+ }
868
+
869
+ /* Text Color Utilities */
870
+ .text-primary {
871
+ color: var(--text-primary) !important;
872
+ }
873
+
874
+ .text-secondary {
875
+ color: var(--text-secondary) !important;
876
+ }
877
+
878
+ .text-success {
879
+ color: var(--success) !important;
880
+ }
881
+
882
+ .text-warning {
883
+ color: var(--warning) !important;
884
+ }
885
+
886
+ .text-danger {
887
+ color: var(--danger) !important;
888
+ }
889
+
890
+ .text-info {
891
+ color: var(--info) !important;
892
+ }
893
+
894
+ /* Icon specific color overrides */
895
+ .pgn__icon {
896
+ &.text-primary {
897
+ color: var(--text-primary) !important;
898
+ }
899
+
900
+ &.text-secondary {
901
+ color: var(--text-secondary) !important;
902
+ }
903
+
904
+ &.text-success {
905
+ color: var(--success) !important;
906
+ }
907
+
908
+ &.text-warning {
909
+ color: var(--warning) !important;
910
+ }
911
+
912
+ &.text-danger {
913
+ color: var(--danger) !important;
914
+ }
915
+
916
+ &.text-info {
917
+ color: var(--info) !important;
918
+ }
919
+ }
920
+
921
+ .cursor-pointer {
922
+ cursor: pointer;
923
+ }
924
+
925
+ .custom-outline-section .row {
926
+ box-shadow: none !important;
927
+ border: 1px solid #e1e1e1;
928
+ }
929
+
930
+
931
+ // .btn-tertiary.dropdown-toggle {
932
+ // &:active, &.active {
933
+ // background-color: var(--primary-light) !important;
934
+ // }
935
+ // }
936
+
937
+ [data-tooltip] {
938
+ position: relative;
939
+ margin: 0 5px 0 5px;
940
+ height: 20px;
941
+
942
+ &:hover::after {
943
+ content: attr(data-tooltip);
944
+ position: absolute;
945
+ left: 50%;
946
+ transform: translateX(-50%);
947
+ top: calc(100% + 8px);
948
+ padding: 8px 12px;
949
+ background: var(--text-primary);
950
+ color: var(--text-white);
951
+ border-radius: 6px;
952
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
953
+ white-space: normal;
954
+ z-index: 10;
955
+ font-size: 12px;
956
+ line-height: 1.4;
957
+ max-width: 250px;
958
+ width: max-content;
959
+ text-align: center;
960
+ }
961
+
962
+ &:hover::before {
963
+ content: '';
964
+ position: absolute;
965
+ left: 50%;
966
+ transform: translateX(-50%);
967
+ top: 100%;
968
+ border: 6px solid transparent;
969
+ border-bottom-color: var(--text-primary);
970
+ z-index: 11;
971
+ }
972
+ }
973
+
974
+ /* Breadcrumb and Title styles */
975
+ .ca-breadcrumb-bg {
976
+ // position: fixed;
977
+ width: 100%;
978
+ padding: 0.5rem 0 0 0;
979
+ }
980
+
981
+ .ca-breadcrumb-container {
982
+ margin: 0 auto;
983
+ padding: 0 32px;
984
+ }
985
+
986
+ .ca-breadcrumb {
987
+ color: #b0b7c3;
988
+ font-size: 14px;
989
+ margin-bottom: 8px;
990
+ }
991
+
992
+ .ca-breadcrumb .ca-breadcrumb-icon {
993
+ opacity: 0.7;
994
+
995
+ .custom-icon {
996
+ width: 16px;
997
+ height: 16px;
998
+ margin-right: 4px;
999
+ }
1000
+ }
1001
+
1002
+ .ca-breadcrumb .ca-breadcrumb-divider {
1003
+ margin: 0 8px;
1004
+ }
1005
+
1006
+ .ca-breadcrumb .ca-breadcrumb-current {
1007
+ color: #6b7280;
1008
+ }
1009
+
1010
+ .ca-title {
1011
+ font-weight: 600;
1012
+ font-size: 20px;
1013
+ color: #22223b;
1014
+ }
1015
+
1016
+ /* Main layout styles */
1017
+ .ca-main-layout {
1018
+ display: flex;
1019
+ min-height: 100vh;
1020
+ align-items: flex-start;
1021
+ }
1022
+
1023
+ /* Sidebar styles */
1024
+ .ca-sidebar {
1025
+ // position: sticky;
1026
+ // top: 17%;
1027
+ min-width: 220px;
1028
+ max-width: 260px;
1029
+ // width: 240px;
1030
+ // height: 100vh !important;
1031
+ // max-height: 100vh !important;
1032
+ // overflow-y: scroll !important;
1033
+ // overflow-x: hidden;
1034
+ background: transparent;
1035
+ // border-right: 1px solid #eee;
1036
+ z-index: 2;
1037
+ margin: 0;
1038
+ border-radius: 0 !important;
1039
+ padding-bottom: 0 !important;
1040
+ box-sizing: border-box;
1041
+ margin-left: 16px;
1042
+ margin-top: 16px;
1043
+ border-radius: 16px;
1044
+ position: sticky;
1045
+ top: 32px;
1046
+ align-self: flex-start;
1047
+ overflow-y: auto;
1048
+ overflow-x: hidden;
1049
+ height: calc(100vh - 32px);
1050
+ max-height: calc(100vh - 32px);
1051
+
1052
+ }
1053
+
1054
+ /* Main content styles */
1055
+ .ca-main-content {
1056
+ flex: 1;
1057
+ padding-top: 1rem;
1058
+ }
1059
+
1060
+ /* Responsive styles for Course Navigation */
1061
+ .ca-mobile-nav {
1062
+ display: none;
1063
+ /* Hidden by default */
1064
+ width: 100%;
1065
+ padding: 16px;
1066
+ padding-left: 1.5rem;
1067
+ padding-right: 1.5rem;
1068
+ border-bottom: 1px solid #eee;
1069
+ }
1070
+
1071
+ .ca-mobile-nav-select {
1072
+ width: 100%;
1073
+ padding: 12px;
1074
+ font-size: 1rem;
1075
+ border: 1px solid #ccc;
1076
+ border-radius: 8px;
1077
+ background-color: white;
1078
+
1079
+ /* Remove default arrow and add a custom one with spacing */
1080
+ -webkit-appearance: none;
1081
+ -moz-appearance: none;
1082
+ appearance: none;
1083
+ padding-right: 30px;
1084
+ /* Space for the arrow */
1085
+ background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%236c757d%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E');
1086
+ background-repeat: no-repeat;
1087
+ background-position: right 10px center;
1088
+ background-size: 10px 10px;
1089
+ }
1090
+
1091
+ /* Media query for mobile devices */
1092
+ @media (max-width: 768px) {
1093
+ .ca-sidebar {
1094
+ display: none;
1095
+ /* Hide the desktop sidebar */
1096
+ }
1097
+
1098
+ .ca-mobile-nav {
1099
+ display: block;
1100
+ /* Show the mobile dropdown */
1101
+ }
1102
+
1103
+ .ca-main-layout {
1104
+ flex-direction: column;
1105
+ }
1106
+
1107
+ // .ca-breadcrumb-bg {
1108
+ // position: unset;
1109
+ // }
1110
+
1111
+ // .ca-main-content {
1112
+ // padding-top: 1rem;
1113
+ // }
1114
+ }
1115
+
1116
+ // @media (max-height: 690px) {
1117
+ // .ca-main-content {
1118
+ // flex: 1;
1119
+ // padding-top: 5rem;
1120
+ // }
1121
+ // }
1122
+
1123
+ // .course-sidebar-nav {
1124
+ // overflow-x: hidden;
1125
+ // overflow-y: auto;
1126
+ // position: sticky;
1127
+ // right: 15%;
1128
+ // top: 10%;
1129
+ // max-height: 64vh !important;
1130
+ // margin-left: 24px;
1131
+ // }