@apptegy/nuxt-navigation 0.1.125 → 0.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.json +1 -1
- package/dist/runtime/components/Nav/Avatar.vue +64 -8
- package/dist/runtime/components/Nav/Avatar.vue.d.ts +4 -0
- package/dist/runtime/components/Nav/Header.vue +234 -153
- package/dist/runtime/components/Nav/Header.vue.d.ts +1 -17
- package/dist/runtime/components/Nav/HelpArticles.vue +107 -16
- package/dist/runtime/components/Nav/NotificationItem.vue +81 -150
- package/dist/runtime/components/Nav/NotificationItem.vue.d.ts +2 -2
- package/dist/runtime/components/Nav/NotificationsPanel.vue.d.ts +9 -9
- package/dist/runtime/components/Nav/OrgSelect.vue +152 -29
- package/dist/runtime/components/Nav/Sidebar.vue +386 -109
- package/dist/runtime/components/Nav/Sidebar.vue.d.ts +5 -5
- package/dist/runtime/components/Nav/SidebarItem.vue +86 -24
- package/dist/runtime/components/Nav/SidebarSection.vue +131 -20
- package/dist/runtime/components/Nav/SidebarSection.vue.d.ts +4 -2
- package/dist/runtime/components/Nav/UserDropdown.vue +145 -46
- package/dist/runtime/types/index.d.ts +1 -1
- package/dist/runtime/types/notifications.d.ts +1 -19
- package/dist/runtime/utils/constants.d.ts +49 -0
- package/dist/runtime/utils/constants.js +53 -0
- package/dist/runtime/utils/notification-api.d.ts +0 -10
- package/dist/runtime/utils/notification-api.js +1 -42
- package/locale/en.json +0 -1
- package/package.json +16 -15
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<nav
|
|
3
|
-
class="navbar"
|
|
4
3
|
role="navigation"
|
|
5
4
|
aria-label="Main"
|
|
6
|
-
|
|
5
|
+
class="navbar"
|
|
6
|
+
:class="[isBeaconNavEnabled ? 'beacon' : 'classic', { expanded }]"
|
|
7
7
|
:style="getBrandingStyles"
|
|
8
8
|
@mouseenter="!lockedExpanded && onHover()"
|
|
9
9
|
@mouseleave="!lockedExpanded && onHoverLeave()"
|
|
@@ -17,89 +17,173 @@
|
|
|
17
17
|
>
|
|
18
18
|
{{ $t("navigation.skipToContent") }}
|
|
19
19
|
</a>
|
|
20
|
-
<div
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
<div
|
|
21
|
+
class="navbar--wrapper"
|
|
22
|
+
:class="{ fixed }"
|
|
23
|
+
>
|
|
24
|
+
<div class="navbar--header">
|
|
25
|
+
<div :class="['header-actions', { collapsed: !expanded && !isMobile }]">
|
|
26
|
+
<NuxtLink
|
|
27
|
+
v-if="expanded"
|
|
28
|
+
class="no-link-style"
|
|
29
|
+
:to="homepageUrl"
|
|
30
|
+
>
|
|
31
|
+
<slot name="logo">
|
|
32
|
+
<div
|
|
33
|
+
class="navbar--logo"
|
|
34
|
+
:class="{ 'big-logo': _brandLogoWidth > 80 }"
|
|
35
|
+
>
|
|
36
|
+
<template v-if="brandLogo">
|
|
37
|
+
<div
|
|
38
|
+
v-if="isBeaconNavEnabled"
|
|
39
|
+
class="brand-logo"
|
|
40
|
+
>
|
|
41
|
+
<img
|
|
42
|
+
ref="brandLogoRef"
|
|
43
|
+
:src="brandLogo"
|
|
44
|
+
:alt="$t('navigation.brandLogoAlt')"
|
|
45
|
+
/>
|
|
46
|
+
</div>
|
|
47
|
+
<img
|
|
29
48
|
v-else
|
|
49
|
+
ref="brandLogoRef"
|
|
50
|
+
:src="brandLogo"
|
|
30
51
|
:alt="$t('navigation.brandLogoAlt')"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
52
|
+
/>
|
|
53
|
+
</template>
|
|
54
|
+
<component
|
|
55
|
+
:is="ApptegyLogo"
|
|
56
|
+
v-else
|
|
57
|
+
:alt="$t('navigation.brandLogoAlt')"
|
|
58
|
+
:use-light-logo="isAdmin || Object.values(getBrandingStyles).length === 0"
|
|
59
|
+
/>
|
|
60
|
+
<div v-if="!brand?.hide_school_name">
|
|
61
|
+
<div class="school-name">{{ brand?.school_name }}</div>
|
|
62
|
+
<div
|
|
63
|
+
v-if="brand?.school_tag_line"
|
|
64
|
+
class="school-tag"
|
|
65
|
+
>
|
|
66
|
+
{{ brand.school_tag_line }}
|
|
37
67
|
</div>
|
|
38
|
-
|
|
39
|
-
</NuxtLink>
|
|
40
|
-
<div v-if="!isMobile && showCollapseButton">
|
|
41
|
-
<button v-if="lockedExpanded && !allowCollapse && expanded" class="hamburger-button" @click="closeSidebar" v-tooltip.bottom="'Unpin menu'">
|
|
42
|
-
<Pinned />
|
|
43
|
-
</button>
|
|
44
|
-
<button v-if="!lockedExpanded && allowCollapse && expanded" class="hamburger-button" @click="lockSidebar" v-tooltip.bottom="'Pin menu open'">
|
|
45
|
-
<Unpinned />
|
|
46
|
-
</button>
|
|
47
|
-
<button v-if="!lockedExpanded && allowCollapse && !expanded" ref="hamburgerButtonRef" class="hamburger-button">
|
|
48
|
-
<a-icon icon="24:hamburger" />
|
|
49
|
-
</button>
|
|
68
|
+
</div>
|
|
50
69
|
</div>
|
|
70
|
+
</slot>
|
|
71
|
+
</NuxtLink>
|
|
72
|
+
<div v-if="!isMobile && showCollapseButton">
|
|
73
|
+
<button
|
|
74
|
+
v-if="lockedExpanded && !allowCollapse && expanded"
|
|
75
|
+
class="hamburger-button"
|
|
76
|
+
@click="closeSidebar"
|
|
77
|
+
v-tooltip.bottom="isBeaconNavEnabled ? 'Collapse menu' : 'Unpin menu'"
|
|
78
|
+
>
|
|
79
|
+
<Icon
|
|
80
|
+
v-if="isBeaconNavEnabled"
|
|
81
|
+
name="lucide:panel-left-close"
|
|
82
|
+
/>
|
|
83
|
+
<Pinned v-else />
|
|
84
|
+
</button>
|
|
85
|
+
<button
|
|
86
|
+
v-if="!lockedExpanded && allowCollapse && expanded"
|
|
87
|
+
class="hamburger-button"
|
|
88
|
+
@click="lockSidebar"
|
|
89
|
+
v-tooltip.bottom="isBeaconNavEnabled ? 'Expand menu' : 'Pin menu open'"
|
|
90
|
+
>
|
|
91
|
+
<Icon
|
|
92
|
+
v-if="isBeaconNavEnabled"
|
|
93
|
+
name="lucide:panel-right-close"
|
|
94
|
+
/>
|
|
95
|
+
<Unpinned v-else />
|
|
96
|
+
</button>
|
|
97
|
+
<button
|
|
98
|
+
v-if="!lockedExpanded && allowCollapse && !expanded"
|
|
99
|
+
ref="hamburgerButtonRef"
|
|
100
|
+
class="hamburger-button"
|
|
101
|
+
>
|
|
102
|
+
<Icon
|
|
103
|
+
v-if="isBeaconNavEnabled"
|
|
104
|
+
name="lucide:menu"
|
|
105
|
+
/>
|
|
106
|
+
<a-icon
|
|
107
|
+
v-else
|
|
108
|
+
icon="24:hamburger"
|
|
109
|
+
/>
|
|
110
|
+
</button>
|
|
51
111
|
</div>
|
|
52
|
-
<slot name="switcher" />
|
|
53
112
|
</div>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
113
|
+
</div>
|
|
114
|
+
<div class="navbar--content">
|
|
115
|
+
<slot name="switcher" />
|
|
116
|
+
<ul class="navbar-applications">
|
|
117
|
+
<li
|
|
118
|
+
v-for="application of applications"
|
|
119
|
+
:key="application.id"
|
|
120
|
+
>
|
|
121
|
+
<NavSidebarSection
|
|
122
|
+
v-if="isBeaconNavEnabled || expanded || isCurrentApplication(application) || isMobile"
|
|
123
|
+
:application="application"
|
|
124
|
+
:active="isCurrentApplication(application)"
|
|
125
|
+
:collapsed="!expanded && !isMobile"
|
|
126
|
+
>
|
|
127
|
+
<slot v-if="isCurrentApplication(application)" />
|
|
128
|
+
</NavSidebarSection>
|
|
129
|
+
</li>
|
|
130
|
+
</ul>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="navbar--footer">
|
|
133
|
+
<NavHelpArticles
|
|
134
|
+
:show-help-articles="showHelpArticles"
|
|
135
|
+
:help-article-options="helpArticleOptions"
|
|
136
|
+
:settings-route="settingsRoute"
|
|
137
|
+
:school-website="schoolWebsite"
|
|
138
|
+
:collapsed="!expanded && !isMobile"
|
|
139
|
+
/>
|
|
140
|
+
<NavImpersonateInfoPanel
|
|
141
|
+
v-if="impersonatedUser.show"
|
|
142
|
+
:impersonated-user="impersonatedUser"
|
|
143
|
+
/>
|
|
80
144
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
145
|
+
<slot name="logo">
|
|
146
|
+
<template v-if="brand">
|
|
147
|
+
<NuxtLink
|
|
148
|
+
v-if="expanded ? logo.src : logo.iconSrc"
|
|
149
|
+
:to="homepageUrl"
|
|
150
|
+
>
|
|
151
|
+
<div
|
|
152
|
+
v-if="!isMobile && expanded"
|
|
153
|
+
class="navbar--footer-logo"
|
|
154
|
+
>
|
|
155
|
+
<img
|
|
156
|
+
:src="expanded ? logo.src : logo.iconSrc"
|
|
157
|
+
:alt="logo.alt || $t('navigation.logoAlt')"
|
|
158
|
+
/>
|
|
159
|
+
</div>
|
|
160
|
+
</NuxtLink>
|
|
161
|
+
</template>
|
|
162
|
+
</slot>
|
|
163
|
+
</div>
|
|
91
164
|
</div>
|
|
92
165
|
</nav>
|
|
93
166
|
</template>
|
|
94
167
|
|
|
95
168
|
<script setup>
|
|
96
|
-
import {
|
|
169
|
+
import {
|
|
170
|
+
useSidebar,
|
|
171
|
+
useBranding,
|
|
172
|
+
useNuxtApp,
|
|
173
|
+
ref,
|
|
174
|
+
watch,
|
|
175
|
+
computed,
|
|
176
|
+
onMounted,
|
|
177
|
+
onBeforeUnmount,
|
|
178
|
+
nextTick
|
|
179
|
+
} from "#imports";
|
|
97
180
|
import { isSameApplication } from "../../utils/application";
|
|
98
181
|
import ApptegyLogo from "./Icons/ApptegyLogo.vue";
|
|
99
182
|
import { useWindowSize } from "@vueuse/core";
|
|
100
183
|
import Unpinned from "./Icons/Unpinned.vue";
|
|
101
184
|
import Pinned from "./Icons/Pinned.vue";
|
|
102
|
-
|
|
185
|
+
import PAvatar from "primevue/avatar";
|
|
186
|
+
const { $t, $ld } = useNuxtApp();
|
|
103
187
|
const props = defineProps({
|
|
104
188
|
clientId: { type: Number, required: true, default: void 0 },
|
|
105
189
|
applications: { type: Array, required: true, default: () => [] },
|
|
@@ -138,6 +222,9 @@ let brandLogoResizeObserver = null;
|
|
|
138
222
|
const _brandLogoWidth = computed(() => brandLogoWidthPx.value);
|
|
139
223
|
const { width: windowWidth } = useWindowSize();
|
|
140
224
|
const isMobile = computed(() => windowWidth.value < 600);
|
|
225
|
+
const isBeaconNavEnabled = computed(() => {
|
|
226
|
+
return Boolean($ld?.flags?.beaconNavEnabled);
|
|
227
|
+
});
|
|
141
228
|
const lockedExpanded = ref(true);
|
|
142
229
|
const allowCollapse = ref(false);
|
|
143
230
|
let focusOutTimeout = null;
|
|
@@ -166,13 +253,17 @@ onBeforeUnmount(() => {
|
|
|
166
253
|
watch(expanded, (value) => {
|
|
167
254
|
emit("toggle-expand", value ? 264 : 64);
|
|
168
255
|
});
|
|
169
|
-
watch(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
256
|
+
watch(
|
|
257
|
+
isMobile,
|
|
258
|
+
(value) => {
|
|
259
|
+
if (value) {
|
|
260
|
+
expanded.value = true;
|
|
261
|
+
lockedExpanded.value = true;
|
|
262
|
+
allowCollapse.value = false;
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
{ immediate: true }
|
|
266
|
+
);
|
|
176
267
|
function onHover() {
|
|
177
268
|
if (!expanded.value) {
|
|
178
269
|
expanded.value = true;
|
|
@@ -209,6 +300,7 @@ async function closeSidebar() {
|
|
|
209
300
|
lockedExpanded.value = false;
|
|
210
301
|
allowCollapse.value = true;
|
|
211
302
|
ignoreNextFocusIn = true;
|
|
303
|
+
if (isBeaconNavEnabled.value) return;
|
|
212
304
|
await nextTick();
|
|
213
305
|
if (hamburgerButtonRef.value) {
|
|
214
306
|
hamburgerButtonRef.value.focus();
|
|
@@ -222,7 +314,7 @@ function lockSidebar() {
|
|
|
222
314
|
</script>
|
|
223
315
|
|
|
224
316
|
<style scoped>
|
|
225
|
-
.navbar {
|
|
317
|
+
.navbar.classic {
|
|
226
318
|
grid-area: navsidebar;
|
|
227
319
|
font: var(--font-regular);
|
|
228
320
|
color: var(--nav-text-color, #646464);
|
|
@@ -234,24 +326,34 @@ function lockSidebar() {
|
|
|
234
326
|
width: 64px;
|
|
235
327
|
position: relative;
|
|
236
328
|
}
|
|
237
|
-
.navbar::-webkit-scrollbar {
|
|
329
|
+
.navbar.classic::-webkit-scrollbar {
|
|
238
330
|
display: none;
|
|
239
331
|
}
|
|
240
|
-
.navbar a:focus-visible {
|
|
332
|
+
.navbar.classic a:focus-visible {
|
|
241
333
|
outline: var(--orange) auto 2px;
|
|
242
334
|
outline-offset: 0px;
|
|
243
335
|
box-shadow: inset 0 0 0px 4px var(--primary-white);
|
|
244
336
|
}
|
|
245
|
-
.navbar
|
|
337
|
+
.navbar.classic.expanded {
|
|
338
|
+
transition: width 0.3s ease;
|
|
339
|
+
width: 264px;
|
|
340
|
+
}
|
|
341
|
+
.navbar.classic.expanded .navbar--content ul {
|
|
342
|
+
width: 264px;
|
|
343
|
+
}
|
|
344
|
+
.navbar.classic.expanded .navbar--header .header-actions {
|
|
345
|
+
width: 264px;
|
|
346
|
+
}
|
|
347
|
+
.navbar.classic .navbar--wrapper {
|
|
246
348
|
display: grid;
|
|
247
349
|
grid-template-rows: 0fr auto 0fr;
|
|
248
|
-
background-color: var(--nav-background-color, #
|
|
249
|
-
border-right: 1px solid #
|
|
350
|
+
background-color: var(--nav-background-color, #fff);
|
|
351
|
+
border-right: 1px solid #dfdfdf;
|
|
250
352
|
height: 100%;
|
|
251
353
|
overflow-y: auto;
|
|
252
354
|
overflow-x: hidden;
|
|
253
355
|
}
|
|
254
|
-
.navbar--wrapper.fixed {
|
|
356
|
+
.navbar.classic .navbar--wrapper.fixed {
|
|
255
357
|
position: fixed;
|
|
256
358
|
top: 0;
|
|
257
359
|
left: 0;
|
|
@@ -260,10 +362,10 @@ function lockSidebar() {
|
|
|
260
362
|
overflow-y: unset;
|
|
261
363
|
z-index: 10;
|
|
262
364
|
}
|
|
263
|
-
.navbar--header {
|
|
264
|
-
border-bottom: 1px solid var(--nav-border-colors, #
|
|
365
|
+
.navbar.classic .navbar--header {
|
|
366
|
+
border-bottom: 1px solid var(--nav-border-colors, #dfdfdf);
|
|
265
367
|
}
|
|
266
|
-
.navbar--header .header-actions {
|
|
368
|
+
.navbar.classic .navbar--header .header-actions {
|
|
267
369
|
padding: 12px 16px;
|
|
268
370
|
display: inline-flex;
|
|
269
371
|
align-items: center;
|
|
@@ -272,71 +374,240 @@ function lockSidebar() {
|
|
|
272
374
|
justify-content: space-between;
|
|
273
375
|
box-sizing: border-box;
|
|
274
376
|
}
|
|
275
|
-
.navbar--header .header-actions.collapsed {
|
|
377
|
+
.navbar.classic .navbar--header .header-actions.collapsed {
|
|
276
378
|
justify-content: center;
|
|
277
379
|
}
|
|
278
|
-
.navbar--logo {
|
|
380
|
+
.navbar.classic .navbar--logo {
|
|
279
381
|
display: flex;
|
|
280
382
|
align-items: center;
|
|
281
383
|
gap: 8px;
|
|
282
384
|
}
|
|
283
|
-
.navbar--logo.big-logo {
|
|
385
|
+
.navbar.classic .navbar--logo.big-logo {
|
|
284
386
|
flex-direction: column;
|
|
285
387
|
align-items: flex-start;
|
|
286
388
|
}
|
|
287
|
-
.navbar--logo .school-name {
|
|
389
|
+
.navbar.classic .navbar--logo .school-name {
|
|
288
390
|
font-size: 16px;
|
|
289
391
|
font-style: normal;
|
|
290
392
|
font-weight: 700;
|
|
291
393
|
overflow-wrap: break-word;
|
|
292
394
|
word-break: break-word;
|
|
293
395
|
}
|
|
294
|
-
.navbar--logo .school-tag {
|
|
396
|
+
.navbar.classic .navbar--logo .school-tag {
|
|
295
397
|
font-size: 14px;
|
|
296
398
|
font-style: normal;
|
|
297
399
|
font-weight: 400;
|
|
298
400
|
overflow-wrap: break-word;
|
|
299
401
|
word-break: break-word;
|
|
300
402
|
}
|
|
301
|
-
.navbar--logo img {
|
|
403
|
+
.navbar.classic .navbar--logo img {
|
|
302
404
|
display: inline;
|
|
303
405
|
max-height: 36px;
|
|
304
406
|
max-width: 180px;
|
|
305
407
|
}
|
|
306
|
-
.navbar--content {
|
|
408
|
+
.navbar.classic .navbar--content {
|
|
307
409
|
display: flex;
|
|
308
410
|
flex-direction: column;
|
|
309
411
|
}
|
|
310
|
-
.navbar--content ul {
|
|
412
|
+
.navbar.classic .navbar--content ul {
|
|
311
413
|
list-style: none;
|
|
312
414
|
padding: 0;
|
|
313
415
|
margin: 0;
|
|
314
416
|
width: 64px;
|
|
315
417
|
}
|
|
316
|
-
.navbar--footer {
|
|
418
|
+
.navbar.classic .navbar--footer {
|
|
317
419
|
display: flex;
|
|
318
420
|
flex-direction: column;
|
|
319
421
|
}
|
|
320
|
-
.navbar--footer-logo {
|
|
422
|
+
.navbar.classic .navbar--footer-logo {
|
|
321
423
|
padding: 8px 16px 16px 16px;
|
|
322
424
|
display: flex;
|
|
323
425
|
justify-content: center;
|
|
324
426
|
}
|
|
325
|
-
.navbar--footer-logo img {
|
|
427
|
+
.navbar.classic .navbar--footer-logo img {
|
|
326
428
|
height: 32px;
|
|
327
429
|
width: clamp(0px, 100%, 180px);
|
|
328
430
|
}
|
|
329
|
-
.navbar.
|
|
431
|
+
.navbar.classic .skip-to-content {
|
|
432
|
+
overflow: hidden;
|
|
433
|
+
padding: 16px 24px 14px;
|
|
434
|
+
position: absolute;
|
|
435
|
+
left: 5px;
|
|
436
|
+
top: 5px;
|
|
437
|
+
width: auto;
|
|
438
|
+
height: auto;
|
|
439
|
+
background-color: #f1f1f1;
|
|
440
|
+
border-radius: 3px;
|
|
441
|
+
text-decoration: none;
|
|
442
|
+
font-size: 14px;
|
|
443
|
+
font-weight: bold;
|
|
444
|
+
text-align: center;
|
|
445
|
+
z-index: 20;
|
|
446
|
+
opacity: 0;
|
|
447
|
+
pointer-events: none;
|
|
448
|
+
}
|
|
449
|
+
.navbar.classic .skip-to-content:focus-visible {
|
|
450
|
+
--native-outline-blue: #0000ff;
|
|
451
|
+
opacity: 1;
|
|
452
|
+
pointer-events: auto;
|
|
453
|
+
outline: var(--native-outline-blue) auto 2px;
|
|
454
|
+
outline-offset: 0px;
|
|
455
|
+
box-shadow: inset 0 0 0px 4px var(--primary-white);
|
|
456
|
+
}
|
|
457
|
+
.navbar.classic .no-link-style {
|
|
458
|
+
text-decoration: none;
|
|
459
|
+
color: inherit;
|
|
460
|
+
max-width: 200px;
|
|
461
|
+
}
|
|
462
|
+
.navbar.classic .hamburger-button {
|
|
463
|
+
background: none;
|
|
464
|
+
border: none;
|
|
465
|
+
cursor: pointer;
|
|
466
|
+
padding: 0;
|
|
467
|
+
margin: 0;
|
|
468
|
+
display: flex;
|
|
469
|
+
align-items: center;
|
|
470
|
+
}
|
|
471
|
+
.navbar.classic .hamburger-button svg {
|
|
472
|
+
cursor: pointer;
|
|
473
|
+
height: 24px;
|
|
474
|
+
width: 24px;
|
|
475
|
+
}
|
|
476
|
+
.navbar.beacon {
|
|
477
|
+
grid-area: navsidebar;
|
|
478
|
+
font: var(--font-regular, "Public Sans");
|
|
479
|
+
color: var(--nav-text-color, #2d2d2d);
|
|
480
|
+
font-weight: 400;
|
|
481
|
+
font-size: 14px;
|
|
482
|
+
line-height: 140%;
|
|
483
|
+
letter-spacing: 0.1px;
|
|
330
484
|
transition: width 0.3s ease;
|
|
331
|
-
width:
|
|
485
|
+
width: 64px;
|
|
486
|
+
height: 100%;
|
|
487
|
+
overflow-y: auto;
|
|
488
|
+
overflow-x: hidden;
|
|
489
|
+
scrollbar-width: none;
|
|
490
|
+
position: relative;
|
|
332
491
|
}
|
|
333
|
-
.navbar.
|
|
334
|
-
|
|
492
|
+
.navbar.beacon::-webkit-scrollbar {
|
|
493
|
+
display: none;
|
|
335
494
|
}
|
|
336
|
-
.navbar.
|
|
495
|
+
.navbar.beacon a:focus-visible {
|
|
496
|
+
outline: var(--orange) auto 2px;
|
|
497
|
+
outline-offset: 0px;
|
|
498
|
+
box-shadow: inset 0 0 0px 4px var(--primary-white);
|
|
499
|
+
}
|
|
500
|
+
.navbar.beacon.expanded {
|
|
501
|
+
transition: width 0.3s ease;
|
|
337
502
|
width: 264px;
|
|
338
503
|
}
|
|
339
|
-
.navbar .
|
|
504
|
+
.navbar.beacon .navbar--wrapper {
|
|
505
|
+
display: grid;
|
|
506
|
+
grid-template-rows: 0fr auto 0fr;
|
|
507
|
+
grid-template-columns: minmax(0, 1fr);
|
|
508
|
+
background-color: var(--nav-background-color, #f7f7f7);
|
|
509
|
+
border-right: 1px solid #e9e9e9;
|
|
510
|
+
height: 100%;
|
|
511
|
+
overflow-y: auto;
|
|
512
|
+
overflow-x: hidden;
|
|
513
|
+
padding: 16px 16px 0px 16px;
|
|
514
|
+
}
|
|
515
|
+
.navbar.beacon .navbar--wrapper.fixed {
|
|
516
|
+
position: fixed;
|
|
517
|
+
top: 0;
|
|
518
|
+
left: 0;
|
|
519
|
+
bottom: 0;
|
|
520
|
+
height: unset;
|
|
521
|
+
overflow-y: unset;
|
|
522
|
+
z-index: 10;
|
|
523
|
+
}
|
|
524
|
+
.navbar.beacon .navbar--header {
|
|
525
|
+
padding-bottom: 24px;
|
|
526
|
+
}
|
|
527
|
+
.navbar.beacon .navbar--header .header-actions {
|
|
528
|
+
display: flex;
|
|
529
|
+
align-items: center;
|
|
530
|
+
justify-content: space-between;
|
|
531
|
+
box-sizing: border-box;
|
|
532
|
+
}
|
|
533
|
+
.navbar.beacon .navbar--header .header-actions.collapsed {
|
|
534
|
+
justify-content: center;
|
|
535
|
+
}
|
|
536
|
+
.navbar.beacon .navbar--logo {
|
|
537
|
+
display: flex;
|
|
538
|
+
align-items: center;
|
|
539
|
+
gap: 8px;
|
|
540
|
+
}
|
|
541
|
+
.navbar.beacon .navbar--logo.big-logo {
|
|
542
|
+
flex-direction: column;
|
|
543
|
+
align-items: flex-start;
|
|
544
|
+
}
|
|
545
|
+
.navbar.beacon .navbar--logo .brand-logo {
|
|
546
|
+
background-color: #fff;
|
|
547
|
+
outline: 1px solid #d3d3d3;
|
|
548
|
+
border-radius: 6px;
|
|
549
|
+
padding: 2px;
|
|
550
|
+
min-width: 28px;
|
|
551
|
+
min-height: 28px;
|
|
552
|
+
max-width: 28px;
|
|
553
|
+
max-height: 28px;
|
|
554
|
+
}
|
|
555
|
+
.navbar.beacon .navbar--logo .brand-logo img {
|
|
556
|
+
width: 100%;
|
|
557
|
+
height: 100%;
|
|
558
|
+
object-fit: cover;
|
|
559
|
+
aspect-ratio: 1/1;
|
|
560
|
+
object-position: top;
|
|
561
|
+
}
|
|
562
|
+
.navbar.beacon .navbar--logo .school-name {
|
|
563
|
+
font-size: 16px;
|
|
564
|
+
font-style: normal;
|
|
565
|
+
font-weight: 700;
|
|
566
|
+
overflow-wrap: break-word;
|
|
567
|
+
word-break: break-word;
|
|
568
|
+
}
|
|
569
|
+
.navbar.beacon .navbar--logo .school-tag {
|
|
570
|
+
font-size: 14px;
|
|
571
|
+
font-style: normal;
|
|
572
|
+
font-weight: 400;
|
|
573
|
+
overflow-wrap: break-word;
|
|
574
|
+
word-break: break-word;
|
|
575
|
+
}
|
|
576
|
+
.navbar.beacon .navbar--logo img {
|
|
577
|
+
display: inline;
|
|
578
|
+
max-height: 36px;
|
|
579
|
+
max-width: 180px;
|
|
580
|
+
}
|
|
581
|
+
.navbar.beacon .navbar--content {
|
|
582
|
+
display: flex;
|
|
583
|
+
flex-direction: column;
|
|
584
|
+
padding: 4px 0px;
|
|
585
|
+
min-width: 36px;
|
|
586
|
+
}
|
|
587
|
+
.navbar.beacon .navbar--content .navbar-applications {
|
|
588
|
+
display: flex;
|
|
589
|
+
flex-direction: column;
|
|
590
|
+
gap: 6px;
|
|
591
|
+
}
|
|
592
|
+
.navbar.beacon .navbar--content ul {
|
|
593
|
+
list-style: none;
|
|
594
|
+
padding: 0;
|
|
595
|
+
margin: 0;
|
|
596
|
+
}
|
|
597
|
+
.navbar.beacon .navbar--footer {
|
|
598
|
+
display: flex;
|
|
599
|
+
flex-direction: column;
|
|
600
|
+
}
|
|
601
|
+
.navbar.beacon .navbar--footer-logo {
|
|
602
|
+
padding: 8px 16px 16px 16px;
|
|
603
|
+
display: flex;
|
|
604
|
+
justify-content: center;
|
|
605
|
+
}
|
|
606
|
+
.navbar.beacon .navbar--footer-logo img {
|
|
607
|
+
height: 32px;
|
|
608
|
+
width: clamp(0px, 100%, 180px);
|
|
609
|
+
}
|
|
610
|
+
.navbar.beacon .skip-to-content {
|
|
340
611
|
overflow: hidden;
|
|
341
612
|
padding: 16px 24px 14px;
|
|
342
613
|
position: absolute;
|
|
@@ -354,20 +625,21 @@ function lockSidebar() {
|
|
|
354
625
|
opacity: 0;
|
|
355
626
|
pointer-events: none;
|
|
356
627
|
}
|
|
357
|
-
.navbar .skip-to-content:focus-visible {
|
|
358
|
-
--native-outline-blue: #
|
|
628
|
+
.navbar.beacon .skip-to-content:focus-visible {
|
|
629
|
+
--native-outline-blue: #0000ff;
|
|
359
630
|
opacity: 1;
|
|
360
631
|
pointer-events: auto;
|
|
361
632
|
outline: var(--native-outline-blue) auto 2px;
|
|
362
633
|
outline-offset: 0px;
|
|
363
634
|
box-shadow: inset 0 0 0px 4px var(--primary-white);
|
|
364
635
|
}
|
|
365
|
-
.navbar .no-link-style {
|
|
636
|
+
.navbar.beacon .no-link-style {
|
|
366
637
|
text-decoration: none;
|
|
367
638
|
color: inherit;
|
|
368
639
|
max-width: 200px;
|
|
640
|
+
min-width: 200px;
|
|
369
641
|
}
|
|
370
|
-
.navbar .hamburger-button {
|
|
642
|
+
.navbar.beacon .hamburger-button {
|
|
371
643
|
background: none;
|
|
372
644
|
border: none;
|
|
373
645
|
cursor: pointer;
|
|
@@ -375,10 +647,15 @@ function lockSidebar() {
|
|
|
375
647
|
margin: 0;
|
|
376
648
|
display: flex;
|
|
377
649
|
align-items: center;
|
|
650
|
+
font-size: 16px;
|
|
651
|
+
min-height: 16px;
|
|
652
|
+
min-width: 16px;
|
|
653
|
+
max-height: 16px;
|
|
654
|
+
max-width: 16px;
|
|
378
655
|
}
|
|
379
|
-
.navbar .hamburger-button svg {
|
|
656
|
+
.navbar.beacon .hamburger-button svg {
|
|
380
657
|
cursor: pointer;
|
|
381
|
-
height:
|
|
382
|
-
width:
|
|
658
|
+
height: 16px;
|
|
659
|
+
width: 16px;
|
|
383
660
|
}
|
|
384
661
|
</style>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IApplication, IUser } from
|
|
1
|
+
import type { IApplication, IUser } from '../../types/index.js';
|
|
2
2
|
interface ILogo {
|
|
3
3
|
alt: string;
|
|
4
4
|
src: string;
|
|
@@ -21,15 +21,15 @@ interface ISidebarProps {
|
|
|
21
21
|
schoolWebsite: string;
|
|
22
22
|
showCollapseButton?: boolean;
|
|
23
23
|
}
|
|
24
|
-
declare var __VLS_6: {},
|
|
24
|
+
declare var __VLS_6: {}, __VLS_41: {}, __VLS_48: {}, __VLS_60: {};
|
|
25
25
|
type __VLS_Slots = {} & {
|
|
26
26
|
logo?: (props: typeof __VLS_6) => any;
|
|
27
27
|
} & {
|
|
28
|
-
switcher?: (props: typeof
|
|
28
|
+
switcher?: (props: typeof __VLS_41) => any;
|
|
29
29
|
} & {
|
|
30
|
-
default?: (props: typeof
|
|
30
|
+
default?: (props: typeof __VLS_48) => any;
|
|
31
31
|
} & {
|
|
32
|
-
logo?: (props: typeof
|
|
32
|
+
logo?: (props: typeof __VLS_60) => any;
|
|
33
33
|
};
|
|
34
34
|
declare const __VLS_component: import("vue").DefineComponent<ISidebarProps, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
35
35
|
"toggle-expand": (width: number) => any;
|