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,915 @@
1
+ .mainHeaderContainer {
2
+ display: flex;
3
+ }
4
+
5
+ .navbarContainer {
6
+ background-color: var(--bg-surface);
7
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
8
+ height: 6rem;
9
+ position: relative;
10
+ display: flex;
11
+ align-items: center;
12
+
13
+ // padding-left: 3rem;
14
+ padding-right: 3rem;
15
+ // .d-flex.align-items-center {
16
+ // display: flex;
17
+ // align-items: center;
18
+ // gap: 1rem;
19
+ // }
20
+
21
+ .navbar-brand {
22
+ padding: 0;
23
+ display: flex;
24
+ align-items: center;
25
+ margin: 0;
26
+
27
+ img {
28
+ max-width: 100%;
29
+ height: auto;
30
+ object-fit: contain;
31
+ max-height: 5rem;
32
+ padding-top: 0.5rem;
33
+ padding-bottom: 0.5rem;
34
+ }
35
+ }
36
+
37
+ .navbar-collapse {
38
+ background-color: var(--c8);
39
+ border-radius: 0 0 0.5rem 0.5rem;
40
+ padding: 1rem;
41
+ }
42
+
43
+ // Center search container
44
+ .d-flex.align-items-center.justify-content-center {
45
+ position: absolute;
46
+ left: 50%;
47
+ transform: translateX(-50%);
48
+ width: auto;
49
+ z-index: 1;
50
+ }
51
+
52
+ .toggle-sidebar-icon {
53
+ display: flex;
54
+ align-items: center;
55
+ margin: 0;
56
+ margin-right: 1rem;
57
+ }
58
+
59
+ .search-field-custom {
60
+ max-width: 30rem;
61
+ }
62
+
63
+ // .icon-curved-square {
64
+ // display: flex;
65
+ // align-items: center;
66
+ // justify-content: center;
67
+ // // width: 2.5rem;
68
+ // // height: 2.5rem;
69
+ // // border-radius: 0.5rem;
70
+ // background-color: #f5f5f5;
71
+ // margin: 0 0.25rem;
72
+ // cursor: pointer;
73
+ // transition: background-color 0.2s;
74
+
75
+ // &:hover {
76
+ // background-color: #e5e5e5;
77
+ // }
78
+ // }
79
+
80
+ // .language-dropdown {
81
+ // margin: 0 0.5rem;
82
+ // }
83
+
84
+ // .usermenu-dropdown {
85
+ // margin-left: 0.5rem;
86
+ // }
87
+
88
+ // Mobile styles
89
+ @media (max-width: 767px) {
90
+ // padding-left: 1rem;
91
+ padding-right: 0.25rem;
92
+
93
+ // .d-flex.align-items-center {
94
+ // gap: 0.5rem;
95
+ // }
96
+
97
+ .navbar-brand {
98
+ img {
99
+ max-width: 5rem;
100
+ height: auto;
101
+ object-fit: contain;
102
+ max-height: 5rem;
103
+ padding-top: 0.2rem;
104
+ padding-bottom: 0.2rem;
105
+ }
106
+ }
107
+
108
+ .toggle-sidebar-icon {
109
+ margin: 0;
110
+ padding: 0;
111
+ }
112
+ .more-menu-dropdown {
113
+ position: absolute;
114
+ top: 100%;
115
+ right: 1rem;
116
+ background-color: var(--bg-surface);
117
+ border-radius: 0.5rem;
118
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
119
+ padding: 1rem;
120
+ z-index: 1000;
121
+ display: flex;
122
+ flex-direction: column;
123
+ min-width: 200px;
124
+
125
+ .more-menu-icons-row {
126
+ display: flex;
127
+ flex-direction: row;
128
+ gap: 0.5rem;
129
+ width: 100%;
130
+ margin-bottom: 0.5rem;
131
+
132
+ .icon-curved-square {
133
+ flex: 1;
134
+ display: flex;
135
+
136
+ .btn-icon {
137
+ width: 100%;
138
+ height: 100%;
139
+ padding: 0.5rem;
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ }
144
+ }
145
+ }
146
+
147
+ .language-dropdown {
148
+ width: 100%;
149
+ margin-top: 0.5rem;
150
+ margin-bottom: 0.5rem;
151
+ }
152
+ }
153
+ // .navbar-brand,
154
+ // .toggle-sidebar-icon {
155
+ // flex: 0 0 auto;
156
+ // min-width: unset;
157
+ // max-width: unset;
158
+ // }
159
+ // .navbar-brand {
160
+ // margin-right: 0;
161
+ // padding-right: 0;
162
+ // img {
163
+ // max-width: 5rem;
164
+ // height: auto;
165
+ // object-fit: contain;
166
+ // max-height: 5rem;
167
+ // padding-top: 0.5rem;
168
+ // padding-bottom: 0.5rem;
169
+ // }
170
+ // }
171
+ .toggle-sidebar-icon {
172
+ margin-left: 0;
173
+ padding-left: 0;
174
+ }
175
+ display: flex;
176
+ align-items: center;
177
+ gap: 0.25rem;
178
+ height: 5rem;
179
+ justify-content: flex-start;
180
+ }
181
+
182
+ @media (max-width: 400px) {
183
+ // .d-flex.align-items-center {
184
+ // gap: 0.3rem;
185
+ // }
186
+
187
+ // .toggle-sidebar-icon {
188
+ // max-width: 2rem;
189
+ // min-width: 2rem;
190
+ // width: 2rem;
191
+ // height: 2rem;
192
+ // margin: 0 1px;
193
+ // padding: 0;
194
+ // flex-shrink: 0;
195
+ // }
196
+
197
+ // .navbar-brand {
198
+ // img {
199
+ // max-width: 4rem;
200
+ // max-height: 4rem;
201
+ // padding: 0.1rem 0;
202
+ // }
203
+ // }
204
+ // .icon-curved-square,
205
+ // .language-dropdown {
206
+ // max-width: 2rem;
207
+ // min-width: 2rem;
208
+ // width: 2rem;
209
+ // height: 2rem;
210
+ // margin: 0 1px;
211
+ // padding: 0;
212
+ // flex-shrink: 0;
213
+ // }
214
+ // .usermenu-dropdown {
215
+ // min-width: 0;
216
+ // max-width: 100%;
217
+ // flex-shrink: 1;
218
+ // margin: 0 1px;
219
+ // padding: 0;
220
+ // }
221
+ // .d-flex.align-items-center.gap-2.ms-auto {
222
+ // gap: 0.15rem !important;
223
+ // min-width: 0;
224
+ // }
225
+
226
+
227
+ }
228
+ }
229
+
230
+ .buttonListContainer {
231
+ display: grid;
232
+ grid-template-columns: 1fr auto;
233
+ align-items: center;
234
+ flex: 1;
235
+ }
236
+
237
+ .navbarList {
238
+ display: flex;
239
+ gap: 2rem;
240
+ padding: 0;
241
+ margin: 0;
242
+ list-style-type: none;
243
+ }
244
+
245
+ .navbarList li {
246
+ cursor: pointer;
247
+ color: var(--c6);
248
+ }
249
+
250
+ .navbarList li:hover {
251
+ color: var(--c2);
252
+ }
253
+
254
+ .navbarButtons {
255
+ display: flex;
256
+ gap: 0.5rem;
257
+ margin-left: auto;
258
+ }
259
+
260
+ .navbarListLeft {
261
+ justify-self: start;
262
+ margin-left: 4rem;
263
+ }
264
+
265
+ .navbarListCenter {
266
+ justify-self: center;
267
+ }
268
+
269
+ .navbarListRight {
270
+ justify-self: end;
271
+ margin-right: 4rem;
272
+ }
273
+
274
+ .menuButton {
275
+ padding: 0.75rem 1.25rem;
276
+ font-weight: 600;
277
+ text-transform: uppercase;
278
+ color: var(--c6); /* or your preferred text color */
279
+ background-color: var(--bg-surface);
280
+ outline: none !important;
281
+ border-color: var(--bg-surface) !important;
282
+ width: 8rem;
283
+ }
284
+
285
+ .mainHeaderContainer {
286
+ display: flex;
287
+ position: relative;
288
+ // z-index: 100;
289
+ }
290
+
291
+ // .btn-outline-primary {
292
+ // border: none;
293
+ // }
294
+
295
+
296
+ .nav-gap {
297
+ gap: 3rem;
298
+ }
299
+
300
+ .dropdown-menu {
301
+ min-width: 15rem !important;
302
+ }
303
+
304
+ .search-field-custom {
305
+ background: var(--bg-surface);
306
+ border: 2px solid var(--primary-light) !important;
307
+ border-radius: 30px !important;
308
+ padding: 0.3rem 0.6rem !important;
309
+ display: flex;
310
+ align-items: center;
311
+ box-shadow: none !important;
312
+ min-height: 35px;
313
+ position: relative;
314
+ pointer-events: auto !important;
315
+
316
+ input {
317
+ background: transparent !important;
318
+ border: none !important;
319
+ box-shadow: none !important;
320
+ color: var(--text-light) !important;
321
+ font-size: 1.1rem;
322
+ font-weight: 500;
323
+ pointer-events: auto !important;
324
+ user-select: text !important;
325
+ &::placeholder {
326
+ color: var(--text-secondary, #697586) !important;
327
+ opacity: 1;
328
+ }
329
+ }
330
+
331
+ // .btn-icon.btn-icon-primary {
332
+ // width: 42px;
333
+ // height: 42px;
334
+ // border-radius: 12px;
335
+ // }
336
+
337
+ .pgn__searchfield-form {
338
+ outline: none !important;
339
+ border: none !important;
340
+ }
341
+
342
+ }
343
+
344
+ .search-field-custom input:focus {
345
+ outline: none !important;
346
+ box-shadow: none !important;
347
+ }
348
+
349
+ .pgn__searchfield.has-focus:not(.pgn__searchfield--external)::after {
350
+ border: none !important;
351
+ }
352
+
353
+ .pgn__searchfield:hover, .pgn__searchfield:active {
354
+ border: 2px solid var(--primary) !important;
355
+ }
356
+
357
+ .icon-curved-square .btn-icon.btn-icon-primary {
358
+ background-color: var(--primary-light) !important;
359
+ margin-right: 1rem;
360
+ // width: 42px;
361
+ // height: 42px;
362
+ // border-radius: 12px;
363
+
364
+ &:hover {
365
+ background-color: var(--primary) !important;
366
+ color: var(--primary-light) !important;
367
+ }
368
+
369
+ &:active {
370
+ background-color: var(--primary) !important;
371
+ color: var(--primary-light) !important;
372
+ }
373
+
374
+ &:focus {
375
+ background-color: var(--primary-light);
376
+ color: var(--primary);
377
+
378
+ &:hover {
379
+ background-color: var(--primary) !important;
380
+ color: var(--primary-light) !important;
381
+ }
382
+ }
383
+ }
384
+
385
+ .language-dropdown {
386
+
387
+
388
+ .btn-tertiary {
389
+ background-color: var(--primary-light);
390
+ border-radius: 25px;
391
+ }
392
+
393
+ .btn-tertiary:hover {
394
+ background-color: var(--primary) !important;
395
+ color: var(--primary-light) !important;
396
+ }
397
+
398
+ .btn-tertiary.dropdown-toggle {
399
+ background-color: var(--primary-light) !important;
400
+ color: var(--primary) !important;
401
+
402
+ &:hover {
403
+ background-color: var(--primary) !important;
404
+ color: var(--primary-light) !important;
405
+ }
406
+ }
407
+ }
408
+
409
+ .usermenu-dropdown {
410
+ // margin: 0 6px;
411
+ margin-left: 1rem;
412
+
413
+ .btn-tertiary {
414
+ // background-color: var(--primary-light);
415
+ border-radius: 10px;
416
+ }
417
+
418
+ // .btn-tertiary:hover {
419
+ // background-color: var(--primary) !important;
420
+ // color: var(--primary-light) !important;
421
+ // }
422
+
423
+ // .btn-tertiary.dropdown-toggle {
424
+ // background-color: var(--primary-light) !important;
425
+ // color: var(--primary) !important;
426
+
427
+ // &:hover {
428
+ // background-color: var(--primary) !important;
429
+ // color: var(--primary-light) !important;
430
+ // }
431
+ // }
432
+ }
433
+
434
+ .toggle-sidebar-icon .btn-icon.btn-icon-primary {
435
+ background-color: var(--primary-light);
436
+ // width: 42px;
437
+ // height: 42px;
438
+ // border-radius: 12px;
439
+
440
+ &:hover {
441
+ background-color: var(--primary);
442
+ color: var(--primary-light) !important;
443
+ }
444
+
445
+ &:active {
446
+ background-color: var(--primary) !important;
447
+ color: var(--primary-light) !important;
448
+ }
449
+
450
+ &:focus {
451
+ background-color: var(--primary-light);
452
+ color: var(--primary);
453
+
454
+ &:hover {
455
+ background-color: var(--primary) !important;
456
+ color: var(--primary-light) !important;
457
+ }
458
+ }
459
+ }
460
+
461
+ // Search modal styles
462
+ .search-modal {
463
+ .modal-content {
464
+ border-radius: 0.5rem;
465
+ }
466
+
467
+ .modal-header {
468
+ border-bottom: none;
469
+ padding: 1rem 1.5rem;
470
+ }
471
+
472
+ .modal-body {
473
+ padding: 0 1.5rem 1.5rem;
474
+ }
475
+ }
476
+
477
+ .fixed-search-bar {
478
+ position: fixed;
479
+ top: 0;
480
+ left: 0;
481
+ width: 100vw;
482
+ z-index: 2000;
483
+ background: rgba(255,255,255,0.98);
484
+ box-shadow: 0 2px 8px rgba(0,0,0,0.10);
485
+ padding: 1rem 0.5rem;
486
+ display: flex;
487
+ justify-content: center;
488
+ align-items: center;
489
+ }
490
+
491
+ .fixed-search-bar-inner {
492
+ width: 100%;
493
+ max-width: 600px;
494
+ position: relative;
495
+ display: flex;
496
+ align-items: center;
497
+ }
498
+
499
+ .fixed-search-bar .close-search-bar {
500
+ background: none;
501
+ border: none;
502
+ font-size: 2rem;
503
+ color: var(--text-muted);
504
+ margin-left: 0.5rem;
505
+ cursor: pointer;
506
+ line-height: 1;
507
+ transition: color 0.2s;
508
+ }
509
+
510
+ .fixed-search-bar .close-search-bar:hover {
511
+ color: var(--text-primary);
512
+ }
513
+
514
+ .no-results-message {
515
+ text-align: center;
516
+ padding: 1rem;
517
+ margin-top: 1rem;
518
+ color: var(--text-muted);
519
+ font-size: 1rem;
520
+ background-color: var(--bg-surface);
521
+ border-radius: 0.5rem;
522
+ border: 1px solid var(--border-color);
523
+
524
+ p {
525
+ margin: 0;
526
+ font-weight: 400;
527
+ }
528
+ }
529
+
530
+ .no-results-message-desktop {
531
+ position: absolute;
532
+ top: 100%;
533
+ left: 0;
534
+ right: 0;
535
+ z-index: 1000;
536
+ background-color: var(--bg-surface);
537
+ border: 1px solid var(--border-color);
538
+ border-radius: 0.5rem;
539
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
540
+ padding: 1rem;
541
+ margin-top: 0.5rem;
542
+ text-align: center;
543
+ color: var(--text-muted);
544
+ font-size: 0.9rem;
545
+
546
+ p {
547
+ margin: 0;
548
+ font-weight: 400;
549
+ }
550
+ }
551
+
552
+ .search-loading-spinner {
553
+ display: inline-block;
554
+ width: 16px;
555
+ height: 16px;
556
+ border: 2px solid var(--border-color);
557
+ border-top: 2px solid var(--primary);
558
+ border-radius: 50%;
559
+ animation: spin 1s linear infinite;
560
+ margin-right: 8px;
561
+ }
562
+
563
+ @keyframes spin {
564
+ 0% { transform: rotate(0deg); }
565
+ 100% { transform: rotate(360deg); }
566
+ }
567
+
568
+ .search-loading-spinner-container {
569
+ position: absolute;
570
+ top: 100%;
571
+ left: 0;
572
+ right: 0;
573
+ z-index: 1000;
574
+ background-color: var(--bg-surface);
575
+ border: 1px solid var(--border-color);
576
+ border-radius: 0.5rem;
577
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
578
+ padding: 1rem;
579
+ margin-top: 0.5rem;
580
+ display: flex;
581
+ align-items: center;
582
+ justify-content: center;
583
+ color: var(--text-muted);
584
+ font-size: 0.9rem;
585
+ }
586
+
587
+ .search-error-message-desktop {
588
+ position: absolute;
589
+ top: 100%;
590
+ left: 0;
591
+ right: 0;
592
+ z-index: 1000;
593
+ background-color: var(--bg-surface);
594
+ border: 1px solid var(--danger);
595
+ border-radius: 0.5rem;
596
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
597
+ padding: 1rem;
598
+ margin-top: 0.5rem;
599
+ text-align: center;
600
+ color: var(--danger);
601
+ font-size: 0.9rem;
602
+
603
+ p {
604
+ margin: 0;
605
+ font-weight: 400;
606
+ }
607
+ }
608
+
609
+ .search-results-dropdown {
610
+ position: absolute;
611
+ top: 100%;
612
+ left: 0;
613
+ right: 0;
614
+ z-index: 1000;
615
+ background-color: var(--bg-surface);
616
+ border: 1px solid var(--border-color);
617
+ border-radius: 0.5rem;
618
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
619
+ margin-top: 0.5rem;
620
+ max-height: 400px;
621
+ overflow-y: auto;
622
+
623
+ .search-results-header {
624
+ padding: 0.75rem 1rem;
625
+ border-bottom: 1px solid var(--border-color);
626
+ background-color: var(--bg-body);
627
+ font-size: 0.875rem;
628
+ font-weight: 600;
629
+ color: var(--text-muted);
630
+ }
631
+
632
+ .search-results-list {
633
+ max-height: 300px;
634
+ overflow-y: auto;
635
+ }
636
+
637
+ .search-result-item {
638
+ padding: 0.75rem 1rem;
639
+ border-bottom: 1px solid var(--border-color);
640
+ cursor: pointer;
641
+ transition: background-color 0.2s;
642
+
643
+ &:hover {
644
+ background-color: var(--bg-hover);
645
+ }
646
+
647
+ &:last-child {
648
+ border-bottom: none;
649
+ }
650
+
651
+ .search-result-content {
652
+ display: flex;
653
+ align-items: flex-start;
654
+ gap: 0.75rem;
655
+ }
656
+
657
+ .search-result-icon {
658
+ flex-shrink: 0;
659
+ margin-top: 0.125rem;
660
+ color: var(--text-muted);
661
+ }
662
+
663
+ .search-result-text {
664
+ flex: 1;
665
+ min-width: 0;
666
+ }
667
+
668
+ .search-result-title {
669
+ font-weight: 600;
670
+ color: var(--text-primary);
671
+ margin-bottom: 0.25rem;
672
+ font-size: 0.9rem;
673
+ line-height: 1.3;
674
+ }
675
+
676
+ .search-result-description {
677
+ color: var(--text-muted);
678
+ font-size: 0.8rem;
679
+ line-height: 1.4;
680
+ margin-bottom: 0.5rem;
681
+ display: -webkit-box;
682
+ -webkit-line-clamp: 2;
683
+ -webkit-box-orient: vertical;
684
+ overflow: hidden;
685
+ }
686
+
687
+ .search-result-breadcrumbs {
688
+ color: var(--text-muted);
689
+ font-size: 0.75rem;
690
+ line-height: 1.2;
691
+ margin-top: 0.25rem;
692
+ }
693
+
694
+ .search-result-actions {
695
+ flex-shrink: 0;
696
+ margin-top: 0.125rem;
697
+ }
698
+
699
+ .search-result-meta {
700
+ display: flex;
701
+ align-items: center;
702
+ gap: 0.5rem;
703
+
704
+ .search-result-type {
705
+ background-color: var(--bg-surface);
706
+ color: var(--text-muted);
707
+ padding: 0.125rem 0.5rem;
708
+ border-radius: 0.25rem;
709
+ font-size: 0.75rem;
710
+ font-weight: 500;
711
+ text-transform: uppercase;
712
+ }
713
+ }
714
+ }
715
+
716
+ // Search highlight styles
717
+ .search-highlight {
718
+ background-color: var(--bg-hover);
719
+ padding: 0.125rem 0.25rem;
720
+ border-radius: 0.25rem;
721
+ font-weight: 600;
722
+ }
723
+
724
+ .search-results-more {
725
+ padding: 0;
726
+ text-align: center;
727
+ background-color: var(--bg-body);
728
+ border-top: 1px solid var(--border-color);
729
+
730
+ button {
731
+ background: none;
732
+ border: none;
733
+ color: var(--primary);
734
+ cursor: pointer;
735
+ padding: 8px 16px;
736
+ width: 100%;
737
+ text-align: center;
738
+ font-size: 14px;
739
+ transition: background-color 0.2s;
740
+
741
+ &:hover {
742
+ background-color: var(--bg-hover);
743
+ }
744
+ }
745
+ }
746
+ }
747
+
748
+ .search-results-mobile {
749
+ margin-top: 1rem;
750
+ background-color: var(--bg-surface);
751
+ border-radius: 0.5rem;
752
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
753
+ max-height: 60vh;
754
+ overflow-y: auto;
755
+
756
+ .search-results-header {
757
+ padding: 0.75rem 1rem;
758
+ border-bottom: 1px solid var(--border-color);
759
+ background-color: var(--bg-body);
760
+ font-size: 0.875rem;
761
+ font-weight: 600;
762
+ color: var(--text-muted);
763
+ }
764
+
765
+ .search-results-list {
766
+ max-height: 50vh;
767
+ overflow-y: auto;
768
+ }
769
+
770
+ .search-result-item {
771
+ padding: 1rem;
772
+ border-bottom: 1px solid var(--border-color);
773
+ cursor: pointer;
774
+ transition: background-color 0.2s;
775
+
776
+ &:hover {
777
+ background-color: var(--bg-hover);
778
+ }
779
+
780
+ &:last-child {
781
+ border-bottom: none;
782
+ }
783
+
784
+ .search-result-content {
785
+ display: flex;
786
+ align-items: flex-start;
787
+ gap: 1rem;
788
+ }
789
+
790
+ .search-result-icon {
791
+ flex-shrink: 0;
792
+ margin-top: 0.25rem;
793
+ color: var(--text-muted);
794
+ }
795
+
796
+ .search-result-text {
797
+ flex: 1;
798
+ min-width: 0;
799
+ }
800
+
801
+ .search-result-title {
802
+ font-weight: 600;
803
+ color: var(--text-primary);
804
+ margin-bottom: 0.5rem;
805
+ font-size: 1rem;
806
+ line-height: 1.3;
807
+ }
808
+
809
+ .search-result-description {
810
+ color: var(--text-muted);
811
+ font-size: 0.875rem;
812
+ line-height: 1.4;
813
+ margin-bottom: 0.75rem;
814
+ display: -webkit-box;
815
+ -webkit-line-clamp: 3;
816
+ -webkit-box-orient: vertical;
817
+ overflow: hidden;
818
+ }
819
+
820
+ .search-result-breadcrumbs {
821
+ color: var(--text-muted);
822
+ font-size: 0.8rem;
823
+ line-height: 1.2;
824
+ margin-top: 0.5rem;
825
+ }
826
+
827
+ .search-result-actions {
828
+ flex-shrink: 0;
829
+ margin-top: 0.25rem;
830
+ }
831
+
832
+ .search-result-meta {
833
+ display: flex;
834
+ align-items: center;
835
+ gap: 0.5rem;
836
+
837
+ .search-result-type {
838
+ background-color: var(--bg-hover);
839
+ color: var(--text-secondary);
840
+ padding: 0.25rem 0.75rem;
841
+ border-radius: 0.375rem;
842
+ font-size: 0.75rem;
843
+ font-weight: 500;
844
+ text-transform: uppercase;
845
+ }
846
+ }
847
+ }
848
+ }
849
+
850
+ .search-error-message {
851
+ margin-top: 1rem;
852
+ padding: 1rem;
853
+ background-color: var(--bg-disabled);
854
+ border: 1px solid var(--danger);
855
+ border-radius: 0.5rem;
856
+ color: var(--danger);
857
+ text-align: center;
858
+
859
+ p {
860
+ margin: 0;
861
+ font-weight: 400;
862
+ }
863
+ }
864
+
865
+ .navbar-buttons .btn-icon.btn-icon-primary {
866
+ background-color: var(--primary-light);
867
+ // width: 42px;
868
+ // height: 42px;
869
+ // border-radius: 12px;
870
+
871
+ &:hover {
872
+ background-color: var(--primary);
873
+ color: var(--primary-light) !important;
874
+ }
875
+
876
+ &:active {
877
+ background-color: var(--primary) !important;
878
+ color: var(--primary-light) !important;
879
+ }
880
+
881
+ &:focus {
882
+ background-color: var(--primary-light);
883
+ color: var(--primary);
884
+
885
+ &:hover {
886
+ background-color: var(--primary) !important;
887
+ color: var(--primary-light) !important;
888
+ }
889
+ }
890
+ }
891
+
892
+
893
+ .usermenu-dropdown-mobile {
894
+ // margin: 0 6px;
895
+
896
+ .btn-tertiary {
897
+ background-color: var(--primary-light);
898
+ border-radius: 25px;
899
+ }
900
+
901
+ .btn-tertiary:hover {
902
+ background-color: var(--primary) !important;
903
+ color: var(--primary-light) !important;
904
+ }
905
+
906
+ .btn-tertiary.dropdown-toggle {
907
+ background-color: var(--primary-light) !important;
908
+ color: var(--primary) !important;
909
+
910
+ &:hover {
911
+ background-color: var(--primary) !important;
912
+ color: var(--primary-light) !important;
913
+ }
914
+ }
915
+ }