@svadmin/ui 0.42.3 → 0.44.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/app.css +462 -825
- package/dist/app.theme.css +462 -825
- package/dist/components/ErrorPage.svelte +4 -56
- package/dist/components/ResourceOperationsPage.svelte +84 -223
- package/dist/components/ResourceOperationsPage.svelte.d.ts +1 -1
- package/dist/components/TwoFactorAuthPage.svelte +44 -232
- package/dist/components/account/CompanyProfilePage.svelte +21 -142
- package/dist/components/account/GetStartedPage.svelte +45 -106
- package/dist/components/account/GetStartedPage.svelte.d.ts +1 -2
- package/dist/components/account/MembersStarterPage.svelte +49 -92
- package/dist/components/account/SecurityLogPage.svelte +16 -131
- package/dist/components/account/SettingsEnterprisePage.svelte +15 -275
- package/dist/components/account/SettingsPlainPage.svelte +10 -175
- package/dist/components/account/SettingsSidebarPage.svelte +11 -304
- package/dist/components/account/TeamMembersPage.svelte +18 -187
- package/dist/components/account/UserProfilePage.svelte +19 -196
- package/dist/components/account/UserProfilePage.svelte.d.ts +1 -2
- package/dist/components/content/ApiKeyList.svelte +13 -0
- package/dist/components/content/ApiKeyList.svelte.d.ts +16 -0
- package/dist/components/content/ContentPageHeader.svelte +31 -0
- package/dist/components/content/ContentPageHeader.svelte.d.ts +12 -0
- package/dist/components/content/ContentPageShell.svelte +39 -0
- package/dist/components/content/ContentPageShell.svelte.d.ts +14 -0
- package/dist/components/content/DataState.svelte +44 -0
- package/dist/components/content/DataState.svelte.d.ts +13 -0
- package/dist/components/content/DescriptionList.svelte +27 -0
- package/dist/components/content/DescriptionList.svelte.d.ts +14 -0
- package/dist/components/content/FileList.svelte +13 -0
- package/dist/components/content/FileList.svelte.d.ts +16 -0
- package/dist/components/content/FilterToolbar.svelte +24 -0
- package/dist/components/content/FilterToolbar.svelte.d.ts +11 -0
- package/dist/components/content/ImportDropzone.svelte +19 -0
- package/dist/components/content/ImportDropzone.svelte.d.ts +10 -0
- package/dist/components/content/IntegrationCard.svelte +16 -0
- package/dist/components/content/IntegrationCard.svelte.d.ts +15 -0
- package/dist/components/content/MemberList.svelte +16 -0
- package/dist/components/content/MemberList.svelte.d.ts +17 -0
- package/dist/components/content/MetricBlock.svelte +27 -0
- package/dist/components/content/MetricBlock.svelte.d.ts +13 -0
- package/dist/components/content/NetworkTable.svelte +18 -0
- package/dist/components/content/NetworkTable.svelte.d.ts +31 -0
- package/dist/components/content/NetworkTable.types.d.ts +4 -0
- package/dist/components/content/NetworkTable.types.js +1 -0
- package/dist/components/content/NetworkUserCard.svelte +17 -0
- package/dist/components/content/NetworkUserCard.svelte.d.ts +17 -0
- package/dist/components/content/OtpInput.svelte +22 -0
- package/dist/components/content/OtpInput.svelte.d.ts +10 -0
- package/dist/components/content/PageToolbar.svelte +18 -0
- package/dist/components/content/PageToolbar.svelte.d.ts +10 -0
- package/dist/components/content/ProjectCard.svelte +39 -0
- package/dist/components/content/ProjectCard.svelte.d.ts +20 -0
- package/dist/components/content/SectionHeader.svelte +18 -0
- package/dist/components/content/SectionHeader.svelte.d.ts +10 -0
- package/dist/components/content/SecurityEventTable.svelte +18 -0
- package/dist/components/content/SecurityEventTable.svelte.d.ts +15 -0
- package/dist/components/content/StatusBadge.svelte +19 -0
- package/dist/components/content/StatusBadge.svelte.d.ts +9 -0
- package/dist/components/content/SystemErrorState.svelte +18 -0
- package/dist/components/content/SystemErrorState.svelte.d.ts +10 -0
- package/dist/components/content/TeamCard.svelte +26 -0
- package/dist/components/content/TeamCard.svelte.d.ts +23 -0
- package/dist/components/content/TwoFactorStepper.svelte +11 -0
- package/dist/components/content/TwoFactorStepper.svelte.d.ts +8 -0
- package/dist/components/content/index.d.ts +32 -0
- package/dist/components/content/index.js +22 -0
- package/dist/components/network/TeamCrewTablePage.svelte +29 -181
- package/dist/components/network/UserCardsNFTPage.svelte +24 -137
- package/dist/components/profile/ActivityTimeline.svelte +17 -91
- package/dist/components/profile/ProfileCard.svelte +4 -4
- package/dist/components/profile/ProjectsGrid.svelte +28 -106
- package/dist/components/profile/ProjectsGrid.svelte.d.ts +2 -12
- package/dist/components/profile/PublicProfilePage.svelte +34 -186
- package/dist/components/profile/TeamsShowcase.svelte +12 -114
- package/dist/components/profile/TeamsShowcase.svelte.d.ts +2 -12
- package/dist/index.d.ts +36 -0
- package/dist/index.js +24 -0
- package/dist/reference-data.d.ts +171 -0
- package/dist/reference-data.js +47 -0
- package/package.json +2 -2
|
@@ -1,60 +1,8 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import { AlertTriangle, ArrowLeft, FileQuestion, Home } from '@lucide/svelte';
|
|
6
|
-
import { Button } from './ui/button/index.js';
|
|
7
|
-
import * as Card from './ui/card/index.js';
|
|
8
|
-
|
|
9
|
-
const i18n = useTranslation();
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
status?: '404' | '500';
|
|
13
|
-
title?: string;
|
|
14
|
-
description?: string;
|
|
15
|
-
}
|
|
16
|
-
|
|
2
|
+
import SystemErrorState from './content/SystemErrorState.svelte';
|
|
3
|
+
import ContentPageShell from './content/ContentPageShell.svelte';
|
|
4
|
+
interface Props { status?: '404' | '500'; title?: string; description?: string; }
|
|
17
5
|
let { status = '404', title, description }: Props = $props();
|
|
18
|
-
const adminContext = captureAdminContext();
|
|
19
|
-
|
|
20
|
-
function goBack() {
|
|
21
|
-
adminContext.back();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const isNotFound = $derived(status === '404');
|
|
25
|
-
const resolvedTitle = $derived(title ?? (isNotFound ? i18n.t('common.pageNotFound') : i18n.t('common.error')));
|
|
26
|
-
const resolvedDescription = $derived(
|
|
27
|
-
description ?? (isNotFound ? i18n.t('error.pageNotFoundDescription') : i18n.t('error.internalServerErrorDescription')),
|
|
28
|
-
);
|
|
29
6
|
</script>
|
|
30
7
|
|
|
31
|
-
<
|
|
32
|
-
<Card.Card class="w-full max-w-md border-border/60">
|
|
33
|
-
<Card.CardContent class="space-y-6 px-6 py-10 text-center">
|
|
34
|
-
<div class="mx-auto inline-flex h-16 w-16 items-center justify-center rounded-lg bg-muted/50 text-muted-foreground">
|
|
35
|
-
{#if isNotFound}
|
|
36
|
-
<FileQuestion class="h-8 w-8" />
|
|
37
|
-
{:else}
|
|
38
|
-
<AlertTriangle class="h-8 w-8 text-destructive" />
|
|
39
|
-
{/if}
|
|
40
|
-
</div>
|
|
41
|
-
|
|
42
|
-
<div class="space-y-2">
|
|
43
|
-
<p class="text-xs font-semibold uppercase text-muted-foreground">{status}</p>
|
|
44
|
-
<h1 class="text-2xl font-semibold text-foreground">{resolvedTitle}</h1>
|
|
45
|
-
<p class="mx-auto max-w-sm text-sm leading-relaxed text-muted-foreground">{resolvedDescription}</p>
|
|
46
|
-
</div>
|
|
47
|
-
|
|
48
|
-
<div class="flex flex-col justify-center gap-2 sm:flex-row">
|
|
49
|
-
<Button variant="outline" onclick={goBack}>
|
|
50
|
-
<ArrowLeft class="h-4 w-4" />
|
|
51
|
-
{i18n.t('common.back')}
|
|
52
|
-
</Button>
|
|
53
|
-
<Button onclick={() => adminContext.navigate('/')}>
|
|
54
|
-
<Home class="h-4 w-4" />
|
|
55
|
-
{i18n.t('common.returnHome')}
|
|
56
|
-
</Button>
|
|
57
|
-
</div>
|
|
58
|
-
</Card.CardContent>
|
|
59
|
-
</Card.Card>
|
|
60
|
-
</div>
|
|
8
|
+
<ContentPageShell pageId="system-error" width="narrow"><SystemErrorState {status} {title} {description} /></ContentPageShell>
|
|
@@ -28,13 +28,19 @@
|
|
|
28
28
|
type WorkspaceStyle =
|
|
29
29
|
| 'inventory'
|
|
30
30
|
| 'operations'
|
|
31
|
+
| 'orders'
|
|
31
32
|
| 'people'
|
|
32
33
|
| 'calendar'
|
|
33
34
|
| 'communications'
|
|
34
35
|
| 'crm'
|
|
35
36
|
| 'property'
|
|
36
37
|
| 'ai'
|
|
37
|
-
| 'store'
|
|
38
|
+
| 'store'
|
|
39
|
+
| 'planning'
|
|
40
|
+
| 'generation'
|
|
41
|
+
| 'billing'
|
|
42
|
+
| 'security'
|
|
43
|
+
| 'referral';
|
|
38
44
|
|
|
39
45
|
interface Props {
|
|
40
46
|
resourceName: string;
|
|
@@ -72,228 +78,83 @@
|
|
|
72
78
|
const adminContext = captureAdminContext();
|
|
73
79
|
</script>
|
|
74
80
|
|
|
75
|
-
<div class="space-y-6" data-svadmin-resource-operations={resourceName} data-svadmin-workspace-style={workspaceStyle}>
|
|
76
|
-
<
|
|
77
|
-
<div class="min-w-0
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
{#if Icon}
|
|
81
|
-
<span class="flex h-10 w-10 shrink-0 items-center justify-center text-primary">
|
|
82
|
-
<Icon class="h-6 w-6" />
|
|
83
|
-
</span>
|
|
84
|
-
{/if}
|
|
85
|
-
<div class="min-w-0">
|
|
86
|
-
<h1 class="text-3xl font-semibold tracking-tight">{title}</h1>
|
|
87
|
-
<p class="mt-2 max-w-2xl text-sm text-muted-foreground">{description}</p>
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
<Button class="mt-6" onclick={() => adminContext.navigate(`/${resourceName}/create`)}>
|
|
91
|
-
{actionLabel}
|
|
92
|
-
</Button>
|
|
81
|
+
<div class="space-y-6" data-svadmin-resource-operations={resourceName} data-svadmin-workspace-style={workspaceStyle} data-svadmin-layout-identity={workspaceStyle}>
|
|
82
|
+
<header class="flex flex-col gap-4 border-b border-border pb-5 sm:flex-row sm:items-start sm:justify-between" data-svadmin-ops-hero>
|
|
83
|
+
<div class="flex min-w-0 items-start gap-3">
|
|
84
|
+
{#if Icon}<span class="flex size-9 shrink-0 items-center justify-center rounded-md border border-border bg-card text-primary"><Icon class="size-4" /></span>{/if}
|
|
85
|
+
<div class="min-w-0"><Badge variant="outline">{eyebrow}</Badge><h1 class="mt-2 text-xl font-semibold text-foreground">{title}</h1><p class="mt-1 max-w-3xl text-sm leading-6 text-muted-foreground">{description}</p></div>
|
|
93
86
|
</div>
|
|
87
|
+
<Button class="shrink-0" size="sm" onclick={() => adminContext.navigate(`/${resourceName}/create`)}>{actionLabel}</Button>
|
|
88
|
+
</header>
|
|
94
89
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
</Card.Root>
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
</div>
|
|
166
|
-
{#if item.description}
|
|
167
|
-
<p class="mt-2 text-sm text-muted-foreground">{item.description}</p>
|
|
168
|
-
{/if}
|
|
169
|
-
{#if item.meta}
|
|
170
|
-
<p class="mt-2 text-xs font-medium text-primary">{item.meta}</p>
|
|
171
|
-
{/if}
|
|
172
|
-
</div>
|
|
173
|
-
{/each}
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
{:else if workspaceStyle === 'communications'}
|
|
177
|
-
<div class="grid gap-4 lg:grid-cols-[0.82fr_1.18fr]">
|
|
178
|
-
<div class="space-y-2">
|
|
179
|
-
{#each lanes as lane (lane.label)}
|
|
180
|
-
<div class="flex items-center justify-between rounded-lg border bg-muted/25 px-3 py-2">
|
|
181
|
-
<div>
|
|
182
|
-
<p class="text-sm font-medium">{lane.label}</p>
|
|
183
|
-
{#if lane.hint}
|
|
184
|
-
<p class="text-xs text-muted-foreground">{lane.hint}</p>
|
|
185
|
-
{/if}
|
|
186
|
-
</div>
|
|
187
|
-
<Badge variant="outline">{lane.value}</Badge>
|
|
188
|
-
</div>
|
|
189
|
-
{/each}
|
|
190
|
-
</div>
|
|
191
|
-
<div class="divide-y rounded-lg border">
|
|
192
|
-
{#each highlights as item (item.title)}
|
|
193
|
-
<div class="px-4 py-3">
|
|
194
|
-
<div class="flex items-center justify-between gap-3">
|
|
195
|
-
<p class="font-medium">{item.title}</p>
|
|
196
|
-
{#if item.badge}
|
|
197
|
-
<Badge>{item.badge}</Badge>
|
|
198
|
-
{/if}
|
|
199
|
-
</div>
|
|
200
|
-
{#if item.description}
|
|
201
|
-
<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>
|
|
202
|
-
{/if}
|
|
203
|
-
{#if item.meta}
|
|
204
|
-
<p class="mt-2 text-xs font-medium text-primary">{item.meta}</p>
|
|
205
|
-
{/if}
|
|
206
|
-
</div>
|
|
207
|
-
{/each}
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
210
|
-
{:else if workspaceStyle === 'crm'}
|
|
211
|
-
<div class="grid gap-3 md:grid-cols-3">
|
|
212
|
-
{#each lanes as lane (lane.label)}
|
|
213
|
-
<div class="rounded-lg border bg-muted/25 p-3">
|
|
214
|
-
<div class="flex items-center justify-between gap-3">
|
|
215
|
-
<p class="text-sm font-semibold">{lane.label}</p>
|
|
216
|
-
<Badge variant="outline">{lane.value}</Badge>
|
|
217
|
-
</div>
|
|
218
|
-
{#if lane.hint}
|
|
219
|
-
<p class="mt-2 text-xs text-muted-foreground">{lane.hint}</p>
|
|
220
|
-
{/if}
|
|
221
|
-
</div>
|
|
222
|
-
{/each}
|
|
223
|
-
</div>
|
|
224
|
-
<div class="mt-4 grid gap-3">
|
|
225
|
-
{#each highlights as item (item.title)}
|
|
226
|
-
<div class="rounded-lg border-l-4 border-l-primary bg-muted/20 px-4 py-3">
|
|
227
|
-
<div class="flex items-center justify-between gap-3">
|
|
228
|
-
<p class="font-medium">{item.title}</p>
|
|
229
|
-
{#if item.badge}
|
|
230
|
-
<Badge>{item.badge}</Badge>
|
|
231
|
-
{/if}
|
|
232
|
-
</div>
|
|
233
|
-
{#if item.description}
|
|
234
|
-
<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>
|
|
235
|
-
{/if}
|
|
236
|
-
{#if item.meta}
|
|
237
|
-
<p class="mt-2 text-xs font-medium text-primary">{item.meta}</p>
|
|
238
|
-
{/if}
|
|
239
|
-
</div>
|
|
240
|
-
{/each}
|
|
241
|
-
</div>
|
|
242
|
-
{:else if workspaceStyle === 'property' || workspaceStyle === 'store'}
|
|
243
|
-
<div class="grid gap-3 md:grid-cols-2">
|
|
244
|
-
{#each highlights as item (item.title)}
|
|
245
|
-
<div class="rounded-xl border bg-gradient-to-br from-muted/45 to-background p-4">
|
|
246
|
-
<div class="flex items-center justify-between gap-3">
|
|
247
|
-
<p class="font-medium">{item.title}</p>
|
|
248
|
-
{#if item.badge}
|
|
249
|
-
<Badge>{item.badge}</Badge>
|
|
250
|
-
{/if}
|
|
251
|
-
</div>
|
|
252
|
-
{#if item.description}
|
|
253
|
-
<p class="mt-2 text-sm text-muted-foreground">{item.description}</p>
|
|
254
|
-
{/if}
|
|
255
|
-
{#if item.meta}
|
|
256
|
-
<p class="mt-3 text-xs font-semibold text-primary">{item.meta}</p>
|
|
257
|
-
{/if}
|
|
258
|
-
</div>
|
|
259
|
-
{/each}
|
|
260
|
-
{#each lanes as lane (lane.label)}
|
|
261
|
-
<div class="rounded-xl border bg-card p-4">
|
|
262
|
-
<div class="flex items-center justify-between gap-3">
|
|
263
|
-
<p class="font-medium">{lane.label}</p>
|
|
264
|
-
<Badge variant="outline">{lane.value}</Badge>
|
|
265
|
-
</div>
|
|
266
|
-
{#if lane.hint}
|
|
267
|
-
<p class="mt-2 text-xs text-muted-foreground">{lane.hint}</p>
|
|
268
|
-
{/if}
|
|
269
|
-
</div>
|
|
270
|
-
{/each}
|
|
271
|
-
</div>
|
|
272
|
-
{:else}
|
|
273
|
-
<div class="space-y-3">
|
|
274
|
-
{#each highlights as item (item.title)}
|
|
275
|
-
<div class="py-3">
|
|
276
|
-
<div class="flex items-center justify-between gap-3">
|
|
277
|
-
<p class="font-medium">{item.title}</p>
|
|
278
|
-
{#if item.badge}
|
|
279
|
-
<Badge>{item.badge}</Badge>
|
|
280
|
-
{/if}
|
|
281
|
-
</div>
|
|
282
|
-
{#if item.description}
|
|
283
|
-
<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>
|
|
284
|
-
{/if}
|
|
285
|
-
{#if item.meta}
|
|
286
|
-
<p class="mt-2 text-xs font-medium text-primary">{item.meta}</p>
|
|
287
|
-
{/if}
|
|
288
|
-
</div>
|
|
289
|
-
{/each}
|
|
290
|
-
</div>
|
|
291
|
-
{/if}
|
|
292
|
-
</Card.Content>
|
|
293
|
-
</Card.Root>
|
|
294
|
-
{/if}
|
|
295
|
-
</div>
|
|
296
|
-
|
|
297
|
-
<AutoTable {resourceName} />
|
|
298
|
-
</div>
|
|
90
|
+
{#if workspaceStyle === 'inventory'}
|
|
91
|
+
<section class="grid gap-6 xl:grid-cols-[minmax(0,1fr)_18rem]" data-svadmin-inventory-layout>
|
|
92
|
+
<div class="space-y-5"><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-2 text-2xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
|
|
93
|
+
<aside class="space-y-5"><section><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><p class="mt-1 text-sm text-muted-foreground">{tableDescription}</p><div class="mt-3 divide-y divide-border border-y border-border">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3 py-3"><div><p class="text-sm font-medium text-foreground">{lane.label}</p>{#if lane.hint}<p class="text-xs text-muted-foreground">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{:else}<p class="py-3 text-sm text-muted-foreground">{emptyLanesText}</p>{/each}</div></section><section><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><div class="mt-3 space-y-2">{#each highlights as item (item.title)}<article class="rounded-lg border border-border bg-card p-3"><div class="flex items-start justify-between gap-3"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs font-medium text-primary">{item.meta}</p>{/if}</article>{/each}</div></section></aside>
|
|
94
|
+
</section>
|
|
95
|
+
{:else if workspaceStyle === 'operations'}
|
|
96
|
+
<section class="space-y-5" data-svadmin-operations-layout>
|
|
97
|
+
<div class="grid gap-4 lg:grid-cols-[1fr_1.4fr]"><div class="rounded-lg border border-border bg-card p-4"><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><div class="mt-4 space-y-4">{#each lanes as lane (lane.label)}<div><div class="flex items-center justify-between gap-3 text-sm"><span class="font-medium">{lane.label}</span><span class="text-muted-foreground">{lane.value}</span></div><div class="mt-2 h-1.5 overflow-hidden rounded-full bg-muted"><div class="h-full rounded-full bg-primary" style:width={`${Math.min(100, Math.max(12, Number(lane.value) * 8))}%`}></div></div>{#if lane.hint}<p class="mt-1 text-xs text-muted-foreground">{lane.hint}</p>{/if}</div>{/each}</div></div><div class="rounded-lg border border-border bg-card"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<div class="grid gap-2 px-4 py-3 sm:grid-cols-[1fr_auto]"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}</div><div class="flex items-center gap-2">{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}{#if item.meta}<span class="text-xs text-muted-foreground">{item.meta}</span>{/if}</div></div>{/each}</div></div></div>
|
|
98
|
+
<div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="flex items-center justify-between gap-3 bg-card p-4"><div><p class="text-sm text-muted-foreground">{metric.label}</p>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div><p class="text-xl font-semibold text-foreground">{metric.value}</p></div>{/each}</div>
|
|
99
|
+
<AutoTable {resourceName} />
|
|
100
|
+
</section>
|
|
101
|
+
{:else if workspaceStyle === 'orders'}
|
|
102
|
+
<section class="grid gap-5 xl:grid-cols-[minmax(0,1fr)_20rem]" data-svadmin-orders-layout>
|
|
103
|
+
<div class="space-y-5"><div class="grid gap-3 sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="border-l-2 border-primary pl-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-2xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
|
|
104
|
+
<aside class="rounded-lg border border-border bg-card"><div class="border-b border-border p-4"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-xs text-muted-foreground">{tableDescription}</p></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<div class="p-4"><div class="flex items-center justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3 p-4"><div><p class="text-sm font-medium">{lane.label}</p>{#if lane.hint}<p class="text-xs text-muted-foreground">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside>
|
|
105
|
+
</section>
|
|
106
|
+
{:else if workspaceStyle === 'people'}
|
|
107
|
+
<section class="grid gap-5 xl:grid-cols-[18rem_minmax(0,1fr)]" data-svadmin-people-layout>
|
|
108
|
+
<aside class="space-y-5 rounded-lg border border-border bg-card p-4">
|
|
109
|
+
<div><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-xs leading-5 text-muted-foreground">{tableDescription}</p></div>
|
|
110
|
+
<div class="grid gap-px overflow-hidden rounded-md border border-border bg-border sm:grid-cols-3 xl:grid-cols-1">{#each metrics as metric (metric.label)}<div class="bg-card py-3"><div class="flex items-center justify-between gap-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div>
|
|
111
|
+
<div class="space-y-3">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><div><p class="text-sm font-medium text-foreground">{lane.label}</p>{#if lane.hint}<p class="text-xs text-muted-foreground">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div>
|
|
112
|
+
</aside>
|
|
113
|
+
<div class="space-y-5"><div class="divide-y divide-border rounded-lg border border-border bg-card">{#each highlights as item (item.title)}<article class="flex items-start justify-between gap-4 p-4"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
|
|
114
|
+
</section>
|
|
115
|
+
{:else if workspaceStyle === 'calendar'}
|
|
116
|
+
<section class="space-y-5" data-svadmin-calendar-layout>
|
|
117
|
+
<div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-xs text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div>
|
|
118
|
+
<div class="grid gap-5 lg:grid-cols-[minmax(0,1fr)_17rem]"><div class="rounded-lg border border-border bg-card"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<article class="grid gap-2 p-4 sm:grid-cols-[5rem_minmax(0,1fr)_auto]"><p class="text-xs font-medium text-primary">{item.meta}</p><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</article>{/each}</div></div><aside class="space-y-3">{#each lanes as lane (lane.label)}<div class="rounded-lg border border-border bg-card p-4"><div class="flex items-center justify-between gap-3"><p class="text-sm font-medium text-foreground">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="mt-1 text-xs text-muted-foreground">{lane.hint}</p>{/if}</div>{/each}</aside></div>
|
|
119
|
+
<AutoTable {resourceName} />
|
|
120
|
+
</section>
|
|
121
|
+
{:else if workspaceStyle === 'crm'}
|
|
122
|
+
<section class="space-y-5" data-svadmin-crm-layout>
|
|
123
|
+
<div class="grid gap-4 sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="border-l-2 border-primary pl-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-2xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div>
|
|
124
|
+
<div class="grid gap-4 lg:grid-cols-[minmax(0,1fr)_20rem]"><div class="grid gap-4 sm:grid-cols-3">{#each lanes as lane (lane.label)}<section class="rounded-lg border border-border bg-muted/15"><div class="flex items-center justify-between border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="p-4 text-xs leading-5 text-muted-foreground">{lane.hint}</p>{/if}</section>{/each}</div><aside class="divide-y divide-border rounded-lg border border-border bg-card">{#each highlights as item (item.title)}<article class="p-4"><div class="flex items-start justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</article>{/each}</aside></div>
|
|
125
|
+
<AutoTable {resourceName} />
|
|
126
|
+
</section>
|
|
127
|
+
{:else if workspaceStyle === 'property'}
|
|
128
|
+
<section class="space-y-5" data-svadmin-property-layout>
|
|
129
|
+
<div class="grid gap-5 xl:grid-cols-[minmax(0,1fr)_18rem]"><div class="grid gap-4 md:grid-cols-2">{#each highlights as item (item.title)}<Card.Root><Card.Content class="p-4"><div class="flex aspect-[16/7] items-center justify-center rounded-md bg-muted text-primary">{#if Icon}<Icon class="size-7" />{/if}</div><div class="mt-4 flex items-start justify-between gap-3"><div><h2 class="text-sm font-semibold text-foreground">{item.title}</h2>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="mt-3 text-xs font-medium text-primary">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><aside class="space-y-4">{#each metrics as metric (metric.label)}<div class="border-b border-border pb-4"><div class="flex items-center justify-between gap-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div>
|
|
130
|
+
<AutoTable {resourceName} />
|
|
131
|
+
</section>
|
|
132
|
+
{:else if workspaceStyle === 'ai'}
|
|
133
|
+
<section class="grid min-h-[30rem] overflow-hidden rounded-lg border border-border bg-card lg:grid-cols-[16rem_minmax(0,1fr)]" data-svadmin-ai-layout>
|
|
134
|
+
<aside class="border-b border-border bg-muted/20 p-4 lg:border-b-0 lg:border-r"><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><p class="mt-1 text-xs leading-5 text-muted-foreground">{tableDescription}</p><div class="mt-4 space-y-2">{#each lanes as lane (lane.label)}<div class="rounded-md border border-border bg-card px-3 py-2"><div class="flex items-center justify-between gap-3"><p class="text-sm font-medium text-foreground">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="mt-1 text-xs text-muted-foreground">{lane.hint}</p>{/if}</div>{/each}</div></aside>
|
|
135
|
+
<div class="min-w-0"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="space-y-3 p-4">{#each highlights as item (item.title)}<article class="max-w-2xl rounded-lg border border-border bg-muted/15 p-4"><div class="flex items-start justify-between gap-3"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-2 text-sm leading-6 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</article>{/each}</div><div class="border-t border-border p-4"><AutoTable {resourceName} /></div></div>
|
|
136
|
+
</section>
|
|
137
|
+
{:else if workspaceStyle === 'communications'}
|
|
138
|
+
<section class="grid min-h-[32rem] overflow-hidden rounded-lg border border-border bg-card lg:grid-cols-[15rem_minmax(0,1fr)]" data-svadmin-communications-layout>
|
|
139
|
+
<nav class="border-b border-border bg-muted/20 p-3 lg:border-b-0 lg:border-r">{#each lanes as lane (lane.label)}<button class="flex w-full items-center justify-between gap-3 rounded-md px-3 py-2 text-left text-sm hover:bg-card"><span><span class="block font-medium text-foreground">{lane.label}</span>{#if lane.hint}<span class="text-xs text-muted-foreground">{lane.hint}</span>{/if}</span><Badge variant="outline">{lane.value}</Badge></button>{/each}</nav>
|
|
140
|
+
<div class="min-w-0"><div class="border-b border-border p-4"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<article class="grid gap-3 p-4 sm:grid-cols-[1fr_auto]"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-sm text-muted-foreground">{item.description}</p>{/if}</div><div class="flex items-center gap-2">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="text-xs text-muted-foreground">{item.meta}</span>{/if}</div></article>{/each}</div><div class="border-t border-border p-4"><AutoTable {resourceName} /></div></div>
|
|
141
|
+
</section>
|
|
142
|
+
{:else if workspaceStyle === 'store'}
|
|
143
|
+
<section class="space-y-5" data-svadmin-store-layout><div class="flex flex-col gap-4 border-b border-border pb-4 sm:flex-row sm:items-end sm:justify-between"><div><h2 class="text-base font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-sm text-muted-foreground">{tableDescription}</p></div><div class="flex gap-5">{#each metrics as metric (metric.label)}<div><p class="text-xs text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{/each}</div></div><div class="grid gap-4 md:grid-cols-2 xl:grid-cols-3">{#each highlights as item (item.title)}<Card.Root><Card.Content class="p-4"><div class="flex aspect-[16/8] items-center justify-center rounded-md bg-muted text-primary">{#if Icon}<Icon class="size-8" />{/if}</div><div class="mt-4 flex items-start justify-between gap-3"><div><h3 class="text-sm font-semibold text-foreground">{item.title}</h3>{#if item.description}<p class="mt-1 text-sm text-muted-foreground">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="mt-3 text-xs font-medium text-primary">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="grid gap-4 lg:grid-cols-[18rem_minmax(0,1fr)]"><aside class="rounded-lg border border-border bg-card p-4"><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><div class="mt-3 space-y-3">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {resourceName} /></div></section>
|
|
144
|
+
{:else if workspaceStyle === 'planning'}
|
|
145
|
+
<section class="space-y-5" data-svadmin-planning-layout><div class="grid gap-4 lg:grid-cols-3">{#each lanes as lane, laneIndex (lane.label)}<section class="rounded-lg border border-border bg-muted/15"><div class="flex items-center justify-between border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="space-y-3 p-3">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="rounded-md border border-border bg-card p-3"><div class="flex items-start justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></section>
|
|
146
|
+
{:else if workspaceStyle === 'generation'}
|
|
147
|
+
<section class="grid gap-5 xl:grid-cols-[19rem_minmax(0,1fr)]" data-svadmin-generation-layout>
|
|
148
|
+
<aside class="rounded-lg border border-border bg-card p-4"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><div class="mt-4 space-y-4">{#each lanes as lane, index (lane.label)}<div class="flex items-start gap-3"><span class="flex size-7 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-xs font-semibold text-foreground">{index + 1}</span><div><div class="flex items-center gap-2"><p class="text-sm font-medium text-foreground">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="mt-1 text-xs leading-5 text-muted-foreground">{lane.hint}</p>{/if}</div></div>{/each}</div></aside>
|
|
149
|
+
<div class="space-y-5"><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><div class="grid gap-3 md:grid-cols-3">{#each highlights as item (item.title)}<article class="rounded-lg border border-border bg-card p-4"><div class="flex items-start justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-2 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
|
|
150
|
+
</section>
|
|
151
|
+
{:else if workspaceStyle === 'billing'}
|
|
152
|
+
<section class="space-y-5" data-svadmin-billing-layout><div class="grid gap-4 md:grid-cols-3">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="flex items-center justify-between gap-3"><Card.Title class="text-base">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="text-2xl font-semibold text-foreground">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="mt-4 w-full">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="grid gap-5 xl:grid-cols-[minmax(0,1fr)_18rem]"><AutoTable {resourceName} /><aside class="space-y-4">{#each metrics as metric (metric.label)}<div class="border-b border-border pb-4"><div class="flex items-center justify-between gap-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
|
|
153
|
+
{:else if workspaceStyle === 'security'}
|
|
154
|
+
<section class="space-y-5" data-svadmin-security-layout><div class="grid gap-4 lg:grid-cols-[0.7fr_1.3fr]"><div class="rounded-lg border border-border bg-card p-5"><p class="text-sm font-medium text-muted-foreground">{metrics[0]?.label}</p><p class="mt-3 text-3xl font-semibold text-foreground">{metrics[0]?.value}</p><p class="mt-1 text-sm text-muted-foreground">{metrics[0]?.hint}</p><div class="mt-5 space-y-3">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="rounded-lg border border-border bg-card"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<div class="flex items-start justify-between gap-3 p-4"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {resourceName} /></section>
|
|
155
|
+
{:else if workspaceStyle === 'referral'}
|
|
156
|
+
<section class="grid gap-6 lg:grid-cols-[minmax(0,1fr)_20rem]" data-svadmin-referral-layout><div class="space-y-5"><div class="rounded-lg border border-border bg-card p-5"><h2 class="text-base font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-sm text-muted-foreground">{tableDescription}</p><div class="mt-5 grid gap-3 sm:grid-cols-3">{#each metrics as metric (metric.label)}<div><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-2xl font-semibold text-foreground">{metric.value}</p><p class="text-xs text-muted-foreground">{metric.hint}</p></div>{/each}</div></div><AutoTable {resourceName} /></div><aside class="space-y-3">{#each highlights as item (item.title)}<article class="rounded-lg border border-border bg-card p-4"><div class="flex items-center justify-between gap-3"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-3 rounded-md bg-muted px-3 py-2 font-mono text-xs text-foreground">{item.meta}</p>{/if}</article>{/each}</aside></section>
|
|
157
|
+
{:else}
|
|
158
|
+
<section class="space-y-4" data-svadmin-default-layout><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p></div>{/each}</div><AutoTable {resourceName} /></section>
|
|
159
|
+
{/if}
|
|
299
160
|
</div>
|
|
@@ -15,7 +15,7 @@ interface HighlightItem {
|
|
|
15
15
|
meta?: string;
|
|
16
16
|
badge?: string;
|
|
17
17
|
}
|
|
18
|
-
type WorkspaceStyle = 'inventory' | 'operations' | 'people' | 'calendar' | 'communications' | 'crm' | 'property' | 'ai' | 'store';
|
|
18
|
+
type WorkspaceStyle = 'inventory' | 'operations' | 'orders' | 'people' | 'calendar' | 'communications' | 'crm' | 'property' | 'ai' | 'store' | 'planning' | 'generation' | 'billing' | 'security' | 'referral';
|
|
19
19
|
interface Props {
|
|
20
20
|
resourceName: string;
|
|
21
21
|
eyebrow: string;
|