@apptegy/nuxt-navigation 0.1.126 → 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.
@@ -1,7 +1,7 @@
1
1
  <script setup>
2
2
  import { useDropdown, useNuxtApp, useAppConfig, computed, ref, watch, onBeforeUpdate } from "#imports";
3
3
  import { vOnClickOutside } from "@vueuse/components";
4
- const { $t } = useNuxtApp();
4
+ const { $t, $ld } = useNuxtApp();
5
5
  const appConfig = useAppConfig();
6
6
  const zIndex = computed(() => appConfig?.navigation?.zIndex || 100);
7
7
  const emit = defineEmits(["update:model-value"]);
@@ -13,12 +13,18 @@ const props = defineProps({
13
13
  modelValue: { type: Number, required: true }
14
14
  });
15
15
  const localSelectedOrgId = ref(props.modelValue);
16
- watch(() => props.modelValue, (newValue) => {
17
- localSelectedOrgId.value = newValue;
18
- });
16
+ watch(
17
+ () => props.modelValue,
18
+ (newValue) => {
19
+ localSelectedOrgId.value = newValue;
20
+ }
21
+ );
19
22
  const selectedOrg = computed(() => {
20
23
  return props.orgs.find(({ id }) => id == localSelectedOrgId.value);
21
24
  });
25
+ const isBeaconNavEnabled = computed(() => {
26
+ return Boolean($ld?.flags?.beaconNavEnabled);
27
+ });
22
28
  const {
23
29
  active,
24
30
  searchQuery,
@@ -77,8 +83,14 @@ function handleSelectedOrg($event, orgId) {
77
83
  </script>
78
84
 
79
85
  <template>
80
- <div class="org-selection">
81
- <label id="org-dropdown-label" class="sr-only">
86
+ <div
87
+ class="org-selection"
88
+ :class="[isBeaconNavEnabled ? 'beacon' : 'classic']"
89
+ >
90
+ <label
91
+ id="org-dropdown-label"
92
+ class="sr-only"
93
+ >
82
94
  {{ $t("navigation.orgDropdown") }}
83
95
  </label>
84
96
  <div
@@ -89,7 +101,7 @@ function handleSelectedOrg($event, orgId) {
89
101
  aria-haspopup="listbox"
90
102
  role="combobox"
91
103
  class="dropdown-trigger"
92
- >
104
+ >
93
105
  <input
94
106
  ref="inputRef"
95
107
  type="text"
@@ -99,17 +111,29 @@ function handleSelectedOrg($event, orgId) {
99
111
  @keydown="keydownActionsOnTrigger"
100
112
  @click.prevent="toggleDropdown"
101
113
  @input="handleDropdownSearch"
114
+ />
115
+ <span
116
+ v-if="selectedOrg?.intranet"
117
+ class="badge selected"
102
118
  >
103
- <span v-if="selectedOrg?.intranet" class="badge selected">
104
119
  <a-icon icon="16:lock-locked" />
105
120
  {{ $t("navigation.orgBadge") }}
106
121
  </span>
122
+ <Icon
123
+ v-if="isBeaconNavEnabled"
124
+ class="icon"
125
+ :name="active ? 'lucide:chevron-up' : 'lucide:chevron-down'"
126
+ @keydown="keydownActionsOnTrigger"
127
+ @click.prevent="toggleDropdown"
128
+ @input="handleDropdownSearch"
129
+ />
107
130
  <a-icon
108
- :icon="active ? '16:carret-up' : '16:carret-down'"
109
- @keydown="keydownActionsOnTrigger"
110
- @click.prevent="toggleDropdown"
111
- @input="handleDropdownSearch"
112
- />
131
+ v-else
132
+ :icon="active ? '16:carret-up' : '16:carret-down'"
133
+ @keydown="keydownActionsOnTrigger"
134
+ @click.prevent="toggleDropdown"
135
+ @input="handleDropdownSearch"
136
+ />
113
137
  </div>
114
138
  <div
115
139
  v-show="active"
@@ -135,7 +159,10 @@ function handleSelectedOrg($event, orgId) {
135
159
  >
136
160
  <span :class="{ pinned: option.pinned, 'item-flex': true }"
137
161
  >{{ option.name }}
138
- <span v-if="option.intranet" class="badge selected">
162
+ <span
163
+ v-if="option.intranet"
164
+ class="badge selected"
165
+ >
139
166
  <a-icon icon="16:lock-locked" />
140
167
  {{ $t("navigation.orgBadge") }}
141
168
  </span>
@@ -155,13 +182,13 @@ function handleSelectedOrg($event, orgId) {
155
182
  z-index: v-bind(zIndex);
156
183
  }
157
184
 
158
- .org-selection {
185
+ .org-selection.classic {
159
186
  border-radius: 4px 4px 0 0;
160
187
  }
161
- .org-selection:focus-within {
188
+ .org-selection.classic:focus-within {
162
189
  outline: 2px var(--purple) solid;
163
190
  }
164
- .org-selection .dropdown-trigger {
191
+ .org-selection.classic .dropdown-trigger {
165
192
  width: 300px;
166
193
  padding: 0 8px;
167
194
  display: flex;
@@ -173,7 +200,7 @@ function handleSelectedOrg($event, orgId) {
173
200
  border-bottom: 1px solid var(--dscl-forms-underline, var(--grey-50));
174
201
  background: var(--dscl-forms-bg, var(--grey-10));
175
202
  }
176
- .org-selection .dropdown-trigger .org-title {
203
+ .org-selection.classic .dropdown-trigger .org-title {
177
204
  line-height: 16px;
178
205
  width: 100%;
179
206
  padding: 12px;
@@ -187,14 +214,110 @@ function handleSelectedOrg($event, orgId) {
187
214
  white-space: nowrap;
188
215
  cursor: pointer;
189
216
  }
190
- .org-selection .dropdown-trigger .org-title:focus-visible {
217
+ .org-selection.classic .dropdown-trigger .org-title:focus-visible {
218
+ outline: none;
219
+ }
220
+ .org-selection.classic .dropdown {
221
+ border-radius: 0 0 4px 4px;
222
+ box-shadow: 0px 6px 20px 0px rgba(0, 0, 0, 0.06);
223
+ }
224
+ .org-selection.classic .dropdown .org-option {
225
+ padding: 12px 12px 12px 36px;
226
+ min-height: 40px;
227
+ line-height: 16px;
228
+ text-decoration: none;
229
+ text-transform: none;
230
+ position: relative;
231
+ cursor: pointer;
232
+ }
233
+ .org-selection.classic .dropdown .org-option.selected {
234
+ background-image: url("../../assets/checkmark.svg");
235
+ background-repeat: no-repeat;
236
+ background-position: center left 15px;
237
+ color: var(--purple);
238
+ }
239
+ .org-selection.classic .dropdown .org-option.highlighted {
240
+ background-color: #f8f6fc;
241
+ }
242
+ .org-selection.classic .dropdown .org-option:focus-visible, .org-selection.classic .dropdown .org-option:hover {
243
+ background-color: #f8f6fc;
244
+ }
245
+ .org-selection.classic .custom-search {
246
+ margin: 8px 16px;
247
+ }
248
+ .org-selection.classic .item-flex {
249
+ display: flex;
250
+ gap: 8px;
251
+ align-items: center;
252
+ width: 100%;
253
+ justify-content: space-between;
254
+ }
255
+ .org-selection.classic .badge {
256
+ display: inline-flex;
257
+ align-items: center;
258
+ background-color: var(--purple-50);
259
+ padding: 2px 4px;
260
+ color: white;
261
+ border-radius: 2px;
262
+ text-transform: uppercase;
263
+ }
264
+ .org-selection.classic .badge svg {
265
+ margin-right: 4px;
266
+ }
267
+ .org-selection.classic .badge.selected {
268
+ background-color: var(--grey-50);
269
+ }
270
+ .org-selection.beacon {
271
+ border-radius: 8px;
272
+ font-weight: 400;
273
+ font-size: 14px;
274
+ line-height: 140%;
275
+ letter-spacing: 0.5px;
276
+ color: #757575;
277
+ }
278
+ .org-selection.beacon:focus-within {
279
+ outline: 2px var(--purple) solid;
280
+ }
281
+ .org-selection.beacon .dropdown-trigger {
282
+ width: 300px;
283
+ padding: 0 8px;
284
+ display: flex;
285
+ align-items: center;
286
+ gap: 8px;
287
+ justify-content: space-between;
288
+ border-radius: 8px;
289
+ border: 1px solid #adadad;
290
+ background: var(--dscl-forms-bg, #fff);
291
+ }
292
+ .org-selection.beacon .dropdown-trigger .org-title {
293
+ line-height: inherit;
294
+ font-weight: inherit;
295
+ font-size: inherit;
296
+ letter-spacing: inherit;
297
+ width: 100%;
298
+ touch-action: manipulation;
299
+ color: inherit;
300
+ height: 40px;
301
+ border: 0;
302
+ padding: 8px;
303
+ background: var(--dscl-forms-bg, #fff);
304
+ white-space: nowrap;
305
+ cursor: pointer;
306
+ }
307
+ .org-selection.beacon .dropdown-trigger .org-title:focus-visible {
191
308
  outline: none;
192
309
  }
193
- .org-selection .dropdown {
310
+ .org-selection.beacon .dropdown-trigger .icon {
311
+ min-width: 16px;
312
+ min-height: 16px;
313
+ max-width: 16px;
314
+ max-height: 16px;
315
+ }
316
+ .org-selection.beacon .dropdown {
194
317
  border-radius: 0 0 4px 4px;
195
318
  box-shadow: 0px 6px 20px 0px rgba(0, 0, 0, 0.06);
196
319
  }
197
- .org-selection .dropdown .org-option {
320
+ .org-selection.beacon .dropdown .org-option {
198
321
  padding: 12px 12px 12px 36px;
199
322
  min-height: 40px;
200
323
  line-height: 16px;
@@ -203,29 +326,29 @@ function handleSelectedOrg($event, orgId) {
203
326
  position: relative;
204
327
  cursor: pointer;
205
328
  }
206
- .org-selection .dropdown .org-option.selected {
329
+ .org-selection.beacon .dropdown .org-option.selected {
207
330
  background-image: url("../../assets/checkmark.svg");
208
331
  background-repeat: no-repeat;
209
332
  background-position: center left 15px;
210
333
  color: var(--purple);
211
334
  }
212
- .org-selection .dropdown .org-option.highlighted {
335
+ .org-selection.beacon .dropdown .org-option.highlighted {
213
336
  background-color: #f8f6fc;
214
337
  }
215
- .org-selection .dropdown .org-option:focus-visible, .org-selection .dropdown .org-option:hover {
338
+ .org-selection.beacon .dropdown .org-option:focus-visible, .org-selection.beacon .dropdown .org-option:hover {
216
339
  background-color: #f8f6fc;
217
340
  }
218
- .org-selection .custom-search {
341
+ .org-selection.beacon .custom-search {
219
342
  margin: 8px 16px;
220
343
  }
221
- .org-selection .item-flex {
344
+ .org-selection.beacon .item-flex {
222
345
  display: flex;
223
346
  gap: 8px;
224
347
  align-items: center;
225
348
  width: 100%;
226
349
  justify-content: space-between;
227
350
  }
228
- .org-selection .badge {
351
+ .org-selection.beacon .badge {
229
352
  display: inline-flex;
230
353
  align-items: center;
231
354
  background-color: var(--purple-50);
@@ -234,10 +357,10 @@ function handleSelectedOrg($event, orgId) {
234
357
  border-radius: 2px;
235
358
  text-transform: uppercase;
236
359
  }
237
- .org-selection .badge svg {
360
+ .org-selection.beacon .badge svg {
238
361
  margin-right: 4px;
239
362
  }
240
- .org-selection .badge.selected {
363
+ .org-selection.beacon .badge.selected {
241
364
  background-color: var(--grey-50);
242
365
  }
243
366
  </style>