@nuxt-customer-portal/ui 0.3.0 → 0.3.2
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/CHANGELOG.md +22 -0
- package/app/components/AppHeader.vue +27 -23
- package/app/layouts/default.vue +7 -3
- package/app/layouts/portal.vue +1 -1
- package/package.json +2 -2
- package/portal.manifest.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @nuxt-customer-portal/ui
|
|
2
2
|
|
|
3
|
+
## 0.3.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d8c40f1: Allow the dashboard header and viewport to reserve space for a top demo bar without covering content.
|
|
8
|
+
- 5dcf164: Make the header logo, company name, and tagline one home link while keeping the organization switcher a separate button.
|
|
9
|
+
- 8815843: Reserve top-bar space in the public portal layout so the demo notice does not cover the home-page header.
|
|
10
|
+
- 6994c36: Align customer and admin request lists with the portal collection toolbar, card layout, and fixed pagination footer. Preserve filters and sorting through detail navigation, support adjacent-page loading, and show scoped category choices independently of the current page.
|
|
11
|
+
|
|
12
|
+
Repair request editing and deletion confirmation, add localized form validation, and provide working admin status, priority, provider-team assignment, and internal-note controls.
|
|
13
|
+
|
|
14
|
+
Provide one request workspace with permission-aware management controls. Redirect legacy admin links while preserving collection state, and keep creation in the list header rather than the sidebar. Allow the dashboard body to shrink beneath the top bar so mobile pagination remains visible.
|
|
15
|
+
|
|
16
|
+
- Updated dependencies [f23f664]
|
|
17
|
+
- @nuxt-customer-portal/core@0.3.2
|
|
18
|
+
|
|
19
|
+
## 0.3.1
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- @nuxt-customer-portal/core@0.3.1
|
|
24
|
+
|
|
3
25
|
## 0.3.0
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
|
@@ -168,7 +168,11 @@ const stopImpersonating = async () => {
|
|
|
168
168
|
<template #left>
|
|
169
169
|
<div class="flex items-center gap-3">
|
|
170
170
|
<!-- Logo Icon -->
|
|
171
|
-
<NuxtLink
|
|
171
|
+
<NuxtLink
|
|
172
|
+
to="/"
|
|
173
|
+
class="flex items-center gap-3 rounded-lg focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary"
|
|
174
|
+
:aria-label="runtimeBrandName"
|
|
175
|
+
>
|
|
172
176
|
<div class="relative">
|
|
173
177
|
<img v-if="runtimeMark" :src="runtimeMark" alt="" class="size-10 rounded-lg object-contain" />
|
|
174
178
|
<svg
|
|
@@ -193,31 +197,31 @@ const stopImpersonating = async () => {
|
|
|
193
197
|
<rect x="18" y="20" width="2" height="5" fill="var(--portal-logo-surface)" />
|
|
194
198
|
</svg>
|
|
195
199
|
</div>
|
|
196
|
-
</NuxtLink>
|
|
197
200
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
</span>
|
|
203
|
-
<div class="-mt-1 flex items-center gap-1">
|
|
204
|
-
<span class="text-sm leading-tight text-gray-600 dark:text-gray-400">
|
|
205
|
-
{{ runtimeTagline }}
|
|
201
|
+
<!-- Neutral fallback wordmark; host shells can replace the layout entirely. -->
|
|
202
|
+
<div class="hidden flex-col sm:flex">
|
|
203
|
+
<span class="portal-wordmark text-2xl font-bold text-gray-900 dark:text-white leading-tight">
|
|
204
|
+
{{ runtimeBrandName }}
|
|
206
205
|
</span>
|
|
207
|
-
<
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
color="neutral"
|
|
213
|
-
variant="ghost"
|
|
214
|
-
size="xs"
|
|
215
|
-
square
|
|
216
|
-
class="hidden size-6 text-muted hover:text-highlighted lg:inline-flex"
|
|
217
|
-
@click="showOrgSwitcherModal = true"
|
|
218
|
-
/>
|
|
206
|
+
<div class="-mt-1 flex items-center gap-1">
|
|
207
|
+
<span class="text-sm leading-tight text-gray-600 dark:text-gray-400">
|
|
208
|
+
{{ runtimeTagline }}
|
|
209
|
+
</span>
|
|
210
|
+
</div>
|
|
219
211
|
</div>
|
|
220
|
-
</
|
|
212
|
+
</NuxtLink>
|
|
213
|
+
<UButton
|
|
214
|
+
v-if="isAuthenticated && activeOrganization && hasMultipleOrganizations"
|
|
215
|
+
:aria-label="t('menu.switchOrganization')"
|
|
216
|
+
:title="t('menu.switchOrganization')"
|
|
217
|
+
icon="i-lucide-arrow-left-right"
|
|
218
|
+
color="neutral"
|
|
219
|
+
variant="ghost"
|
|
220
|
+
size="xs"
|
|
221
|
+
square
|
|
222
|
+
class="hidden size-6 text-muted hover:text-highlighted lg:inline-flex"
|
|
223
|
+
@click="showOrgSwitcherModal = true"
|
|
224
|
+
/>
|
|
221
225
|
</div>
|
|
222
226
|
</template>
|
|
223
227
|
|
package/app/layouts/default.vue
CHANGED
|
@@ -41,13 +41,17 @@ onMounted(async () => {
|
|
|
41
41
|
<template>
|
|
42
42
|
<div class="dashboard-layout relative min-h-screen">
|
|
43
43
|
<!-- AppHeader - fixed at top -->
|
|
44
|
-
<div class="fixed
|
|
44
|
+
<div class="fixed left-0 right-0 z-50" style="top: var(--portal-top-bar-height, 0px)">
|
|
45
45
|
<div class="mx-auto w-full max-w-[1600px] px-4">
|
|
46
46
|
<AppHeader />
|
|
47
47
|
</div>
|
|
48
48
|
</div>
|
|
49
49
|
|
|
50
|
-
<UDashboardGroup
|
|
50
|
+
<UDashboardGroup
|
|
51
|
+
unit="rem"
|
|
52
|
+
class="px-4 mx-auto max-w-[1600px]! w-full!"
|
|
53
|
+
style="top: var(--portal-top-bar-height, 0px)"
|
|
54
|
+
>
|
|
51
55
|
<UDashboardSidebar
|
|
52
56
|
id="default"
|
|
53
57
|
v-model:open="open"
|
|
@@ -81,7 +85,7 @@ onMounted(async () => {
|
|
|
81
85
|
</UDashboardSidebar>
|
|
82
86
|
|
|
83
87
|
<NotificationsSlideover />
|
|
84
|
-
<UMain class="flex-1 min-w-0" :class="isImpersonating ? 'pt-32 lg:pt-28' : 'pt-20 lg:pt-16'">
|
|
88
|
+
<UMain class="flex-1 min-h-0 min-w-0" :class="isImpersonating ? 'pt-32 lg:pt-28' : 'pt-20 lg:pt-16'">
|
|
85
89
|
<slot />
|
|
86
90
|
</UMain>
|
|
87
91
|
</UDashboardGroup>
|
package/app/layouts/portal.vue
CHANGED
|
@@ -4,7 +4,7 @@ const showFooter = computed(() => route.meta?.public === true)
|
|
|
4
4
|
</script>
|
|
5
5
|
|
|
6
6
|
<template>
|
|
7
|
-
<div class="portal-layout min-h-screen">
|
|
7
|
+
<div class="portal-layout min-h-screen" style="padding-top: var(--portal-top-bar-height, 0px)">
|
|
8
8
|
<div class="mx-auto w-full max-w-[1600px] px-4">
|
|
9
9
|
<AppHeader />
|
|
10
10
|
</div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuxt-customer-portal/ui",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://nuxt-customer-portal.com",
|
|
6
6
|
"repository": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@nuxtjs/i18n": "^10.6.0",
|
|
30
30
|
"@pinia/nuxt": "^1.0.1",
|
|
31
31
|
"pinia": "^4.0.2",
|
|
32
|
-
"@nuxt-customer-portal/core": "^0.3.
|
|
32
|
+
"@nuxt-customer-portal/core": "^0.3.2"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"nuxt": "^4.5.1",
|