@equal-experts/kuat-react 0.2.3 → 0.2.4
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/README.md +35 -2
- package/dist/components/ui/accordion.d.ts +7 -0
- package/dist/components/ui/alert-dialog.d.ts +20 -0
- package/dist/components/ui/badge.d.ts +9 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +461 -292
- package/dist/style.css +1 -1
- package/docs/README.md +35 -0
- package/docs/components/guidelines.md +221 -0
- package/docs/content/README.md +297 -0
- package/docs/content/content-foundations.md +506 -0
- package/docs/content/content-marketing-sales.md +454 -0
- package/docs/content/content-product-ux.md +875 -0
- package/docs/design/borders.md +500 -0
- package/docs/design/colours.md +523 -0
- package/docs/design/design-system.md +148 -0
- package/docs/design/layouts.md +681 -0
- package/docs/design/logo.md +383 -0
- package/docs/design/spacing.md +477 -0
- package/docs/design/typography.md +451 -0
- package/package.json +6 -3
|
@@ -0,0 +1,681 @@
|
|
|
1
|
+
# Kuat Design System Layout Templates
|
|
2
|
+
|
|
3
|
+
A guide to creating consistent layout structures for Equal Experts applications. This document provides standardized templates for marketing sites and product applications, ensuring brand consistency and optimal user experience across all EE digital products.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
All Equal Experts applications should follow consistent layout patterns to maintain brand recognition and provide a cohesive user experience. This guide provides two primary layout categories:
|
|
10
|
+
|
|
11
|
+
1. **Marketing Layouts** - For public-facing websites, landing pages, and marketing content
|
|
12
|
+
2. **Product/App Layouts** - For internal tools, dashboards, and application interfaces
|
|
13
|
+
|
|
14
|
+
**Key Principle:** Always include the Equal Experts logo correctly placed according to logo usage guidelines. Choose the appropriate layout type based on the application's purpose and audience.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Layout Decision Tree
|
|
19
|
+
|
|
20
|
+
### Choose Marketing Layout When:
|
|
21
|
+
- ✅ Public-facing website or landing page
|
|
22
|
+
- ✅ Marketing content or promotional materials
|
|
23
|
+
- ✅ External audience (customers, prospects, public)
|
|
24
|
+
- ✅ Content-focused (blog, documentation, marketing pages)
|
|
25
|
+
- ✅ No complex navigation or application features
|
|
26
|
+
|
|
27
|
+
### Choose Product/App Layout When:
|
|
28
|
+
- ✅ Internal tools or dashboards
|
|
29
|
+
- ✅ Application interfaces with complex navigation
|
|
30
|
+
- ✅ Data-heavy or interactive interfaces
|
|
31
|
+
- ✅ Requires persistent navigation
|
|
32
|
+
- ✅ User workflows and task completion
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Marketing Layouts
|
|
37
|
+
|
|
38
|
+
Marketing layouts are designed for public-facing content with a clean, spacious design that emphasizes content and brand presence.
|
|
39
|
+
|
|
40
|
+
### Structure
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
┌─────────────────────────────────────────┐
|
|
44
|
+
│ Header (Light background) │
|
|
45
|
+
│ [Logo] [Navigation Links] │
|
|
46
|
+
├─────────────────────────────────────────┤
|
|
47
|
+
│ │
|
|
48
|
+
│ Main Content Area │
|
|
49
|
+
│ (Full width, spacious) │
|
|
50
|
+
│ │
|
|
51
|
+
├─────────────────────────────────────────┤
|
|
52
|
+
│ Footer (Light background) │
|
|
53
|
+
│ [Logo] [Links/Info] │
|
|
54
|
+
└─────────────────────────────────────────┘
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Header Specifications
|
|
58
|
+
|
|
59
|
+
- **Background**: Light (`bg-background` or `bg-white`)
|
|
60
|
+
- **Logo**: Full-color Equal Experts logo, left-aligned
|
|
61
|
+
- **Logo Size**: 120px-150px width (minimum 100px)
|
|
62
|
+
- **Navigation**: Horizontal, right-aligned or centered
|
|
63
|
+
- **Height**: 64px-80px (flexible based on content)
|
|
64
|
+
- **Padding**: 16px-24px horizontal, 16px vertical
|
|
65
|
+
|
|
66
|
+
### Implementation Examples
|
|
67
|
+
|
|
68
|
+
#### React - Marketing Header
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
import { Button } from "@equal-experts/kuat-react";
|
|
72
|
+
|
|
73
|
+
export function MarketingHeader() {
|
|
74
|
+
return (
|
|
75
|
+
<header className="bg-background border-b border-border">
|
|
76
|
+
<div className="container mx-auto px-6 py-4 flex items-center justify-between">
|
|
77
|
+
{/* Logo - Left aligned */}
|
|
78
|
+
<div className="flex-shrink-0">
|
|
79
|
+
<img
|
|
80
|
+
src="/logo.svg"
|
|
81
|
+
alt="Equal Experts"
|
|
82
|
+
className="h-12 w-auto min-w-[100px]"
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
{/* Navigation - Right aligned */}
|
|
87
|
+
<nav className="hidden md:flex items-center gap-6">
|
|
88
|
+
<a href="/about" className="text-foreground hover:text-primary">
|
|
89
|
+
About
|
|
90
|
+
</a>
|
|
91
|
+
<a href="/services" className="text-foreground hover:text-primary">
|
|
92
|
+
Services
|
|
93
|
+
</a>
|
|
94
|
+
<a href="/contact" className="text-foreground hover:text-primary">
|
|
95
|
+
Contact
|
|
96
|
+
</a>
|
|
97
|
+
<Button variant="default">Get Started</Button>
|
|
98
|
+
</nav>
|
|
99
|
+
</div>
|
|
100
|
+
</header>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### Vue - Marketing Header
|
|
106
|
+
|
|
107
|
+
```vue
|
|
108
|
+
<script setup lang="ts">
|
|
109
|
+
import { Button } from "@equal-experts/kuat-vue";
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
<template>
|
|
113
|
+
<header class="bg-background border-b border-border">
|
|
114
|
+
<div class="container mx-auto px-6 py-4 flex items-center justify-between">
|
|
115
|
+
<!-- Logo - Left aligned -->
|
|
116
|
+
<div class="flex-shrink-0">
|
|
117
|
+
<img
|
|
118
|
+
src="/logo.svg"
|
|
119
|
+
alt="Equal Experts"
|
|
120
|
+
class="h-12 w-auto min-w-[100px]"
|
|
121
|
+
/>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<!-- Navigation - Right aligned -->
|
|
125
|
+
<nav class="hidden md:flex items-center gap-6">
|
|
126
|
+
<a href="/about" class="text-foreground hover:text-primary">
|
|
127
|
+
About
|
|
128
|
+
</a>
|
|
129
|
+
<a href="/services" class="text-foreground hover:text-primary">
|
|
130
|
+
Services
|
|
131
|
+
</a>
|
|
132
|
+
<a href="/contact" class="text-foreground hover:text-primary">
|
|
133
|
+
Contact
|
|
134
|
+
</a>
|
|
135
|
+
<Button variant="default">Get Started</Button>
|
|
136
|
+
</nav>
|
|
137
|
+
</div>
|
|
138
|
+
</header>
|
|
139
|
+
</template>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Footer Specifications
|
|
143
|
+
|
|
144
|
+
- **Background**: Light (`bg-muted` or `bg-slate-50`)
|
|
145
|
+
- **Logo**: Full-color Equal Experts logo (smaller than header, 100px-120px)
|
|
146
|
+
- **Content**: Links, copyright, social media
|
|
147
|
+
- **Padding**: 32px-48px vertical, 24px horizontal
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Product/App Layouts
|
|
152
|
+
|
|
153
|
+
Product layouts are designed for application interfaces with persistent navigation. They use **dark navigation** (either horizontal or sidebar) to create clear visual hierarchy and focus user attention on content.
|
|
154
|
+
|
|
155
|
+
### Layout Options
|
|
156
|
+
|
|
157
|
+
Product applications should use **one of two navigation patterns**:
|
|
158
|
+
|
|
159
|
+
1. **Dark Horizontal Navigation** - For simpler apps with limited navigation items
|
|
160
|
+
2. **Dark Sidebar Navigation** - For complex apps with hierarchical navigation
|
|
161
|
+
|
|
162
|
+
Both options use the sidebar color tokens (`--sidebar`, `--sidebar-foreground`) for consistent dark navigation styling.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Option 1: Dark Horizontal Navigation
|
|
167
|
+
|
|
168
|
+
Use horizontal navigation when you have a limited number of top-level navigation items (typically 5-7 items).
|
|
169
|
+
|
|
170
|
+
### Structure
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
┌─────────────────────────────────────────┐
|
|
174
|
+
│ Dark Navigation Bar (Tech Blue) │
|
|
175
|
+
│ [Logo] [Nav Items] [User Menu] │
|
|
176
|
+
├─────────────────────────────────────────┤
|
|
177
|
+
│ │
|
|
178
|
+
│ Main Content Area │
|
|
179
|
+
│ (Light background) │
|
|
180
|
+
│ │
|
|
181
|
+
└─────────────────────────────────────────┘
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Specifications
|
|
185
|
+
|
|
186
|
+
- **Background**: Dark sidebar color (`bg-sidebar` = Tech Blue)
|
|
187
|
+
- **Logo**: White monochrome Equal Experts logo
|
|
188
|
+
- **Logo Size**: 120px-150px width (minimum 100px)
|
|
189
|
+
- **Height**: 64px-72px fixed
|
|
190
|
+
- **Navigation Items**: Horizontal, left-aligned after logo
|
|
191
|
+
- **User Menu**: Right-aligned (profile, settings, logout)
|
|
192
|
+
|
|
193
|
+
### Implementation Examples
|
|
194
|
+
|
|
195
|
+
#### React - Dark Horizontal Navigation
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
import { Button } from "@equal-experts/kuat-react";
|
|
199
|
+
|
|
200
|
+
export function AppLayout({ children }: { children: React.ReactNode }) {
|
|
201
|
+
return (
|
|
202
|
+
<div className="min-h-screen bg-background">
|
|
203
|
+
{/* Dark Horizontal Navigation */}
|
|
204
|
+
<nav className="bg-sidebar text-sidebar-foreground border-b border-sidebar-border">
|
|
205
|
+
<div className="container mx-auto px-6 h-16 flex items-center justify-between">
|
|
206
|
+
{/* Logo - White monochrome */}
|
|
207
|
+
<div className="flex-shrink-0">
|
|
208
|
+
<img
|
|
209
|
+
src="/logo-white.svg"
|
|
210
|
+
alt="Equal Experts"
|
|
211
|
+
className="h-10 w-auto min-w-[100px]"
|
|
212
|
+
/>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
{/* Navigation Items */}
|
|
216
|
+
<div className="flex items-center gap-6 flex-1 px-8">
|
|
217
|
+
<a href="/dashboard" className="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
218
|
+
Dashboard
|
|
219
|
+
</a>
|
|
220
|
+
<a href="/projects" className="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
221
|
+
Projects
|
|
222
|
+
</a>
|
|
223
|
+
<a href="/reports" className="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
224
|
+
Reports
|
|
225
|
+
</a>
|
|
226
|
+
<a href="/settings" className="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
227
|
+
Settings
|
|
228
|
+
</a>
|
|
229
|
+
</div>
|
|
230
|
+
|
|
231
|
+
{/* User Menu - Right aligned */}
|
|
232
|
+
<div className="flex items-center gap-4">
|
|
233
|
+
<Button variant="ghost" className="text-sidebar-foreground">
|
|
234
|
+
Profile
|
|
235
|
+
</Button>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
</nav>
|
|
239
|
+
|
|
240
|
+
{/* Main Content */}
|
|
241
|
+
<main className="container mx-auto px-6 py-8">
|
|
242
|
+
{children}
|
|
243
|
+
</main>
|
|
244
|
+
</div>
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### Vue - Dark Horizontal Navigation
|
|
250
|
+
|
|
251
|
+
```vue
|
|
252
|
+
<script setup lang="ts">
|
|
253
|
+
import { Button } from "@equal-experts/kuat-vue";
|
|
254
|
+
|
|
255
|
+
defineProps<{
|
|
256
|
+
children?: any;
|
|
257
|
+
}>();
|
|
258
|
+
</script>
|
|
259
|
+
|
|
260
|
+
<template>
|
|
261
|
+
<div class="min-h-screen bg-background">
|
|
262
|
+
<!-- Dark Horizontal Navigation -->
|
|
263
|
+
<nav class="bg-sidebar text-sidebar-foreground border-b border-sidebar-border">
|
|
264
|
+
<div class="container mx-auto px-6 h-16 flex items-center justify-between">
|
|
265
|
+
<!-- Logo - White monochrome -->
|
|
266
|
+
<div class="flex-shrink-0">
|
|
267
|
+
<img
|
|
268
|
+
src="/logo-white.svg"
|
|
269
|
+
alt="Equal Experts"
|
|
270
|
+
class="h-10 w-auto min-w-[100px]"
|
|
271
|
+
/>
|
|
272
|
+
</div>
|
|
273
|
+
|
|
274
|
+
<!-- Navigation Items -->
|
|
275
|
+
<div class="flex items-center gap-6 flex-1 px-8">
|
|
276
|
+
<a href="/dashboard" class="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
277
|
+
Dashboard
|
|
278
|
+
</a>
|
|
279
|
+
<a href="/projects" class="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
280
|
+
Projects
|
|
281
|
+
</a>
|
|
282
|
+
<a href="/reports" class="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
283
|
+
Reports
|
|
284
|
+
</a>
|
|
285
|
+
<a href="/settings" class="text-sidebar-foreground hover:text-sidebar-primary-foreground">
|
|
286
|
+
Settings
|
|
287
|
+
</a>
|
|
288
|
+
</div>
|
|
289
|
+
|
|
290
|
+
<!-- User Menu - Right aligned -->
|
|
291
|
+
<div class="flex items-center gap-4">
|
|
292
|
+
<Button variant="ghost" class="text-sidebar-foreground">
|
|
293
|
+
Profile
|
|
294
|
+
</Button>
|
|
295
|
+
</div>
|
|
296
|
+
</div>
|
|
297
|
+
</nav>
|
|
298
|
+
|
|
299
|
+
<!-- Main Content -->
|
|
300
|
+
<main class="container mx-auto px-6 py-8">
|
|
301
|
+
<slot />
|
|
302
|
+
</main>
|
|
303
|
+
</div>
|
|
304
|
+
</template>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Option 2: Dark Sidebar Navigation
|
|
310
|
+
|
|
311
|
+
Use sidebar navigation when you have complex, hierarchical navigation with multiple levels or many navigation items.
|
|
312
|
+
|
|
313
|
+
### Structure
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
┌──────┬──────────────────────────────────┐
|
|
317
|
+
│ │ Top Bar (Light) │
|
|
318
|
+
│ Dark │ [Breadcrumbs] [User Menu] │
|
|
319
|
+
│ Side │──────────────────────────────────┤
|
|
320
|
+
│ bar │ │
|
|
321
|
+
│ │ Main Content Area │
|
|
322
|
+
│ [Logo│ (Light background) │
|
|
323
|
+
│ Nav] │ │
|
|
324
|
+
│ │ │
|
|
325
|
+
└──────┴──────────────────────────────────┘
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Specifications
|
|
329
|
+
|
|
330
|
+
- **Sidebar Background**: Dark sidebar color (`bg-sidebar` = Tech Blue)
|
|
331
|
+
- **Sidebar Width**: 240px-280px (collapsible to 64px)
|
|
332
|
+
- **Logo**: White monochrome Equal Experts logo at top
|
|
333
|
+
- **Logo Size**: 120px-150px width (minimum 100px)
|
|
334
|
+
- **Logo Placement**: Top of sidebar, centered or left-aligned with padding
|
|
335
|
+
- **Navigation**: Vertical, hierarchical if needed
|
|
336
|
+
- **Top Bar**: Light background (`bg-background`) for breadcrumbs and user actions
|
|
337
|
+
- **Content Area**: Light background, full remaining width
|
|
338
|
+
|
|
339
|
+
### Sidebar Color Tokens
|
|
340
|
+
|
|
341
|
+
The design system provides sidebar-specific color tokens:
|
|
342
|
+
|
|
343
|
+
- **`--sidebar`**: Sidebar background (Tech Blue)
|
|
344
|
+
- **`--sidebar-foreground`**: Text color on sidebar (White)
|
|
345
|
+
- **`--sidebar-primary`**: Primary accent color (EE Blue)
|
|
346
|
+
- **`--sidebar-primary-foreground`**: Text on primary accent
|
|
347
|
+
- **`--sidebar-accent`**: Hover/active state background
|
|
348
|
+
- **`--sidebar-accent-foreground`**: Text on accent background
|
|
349
|
+
- **`--sidebar-border`**: Border color for sidebar
|
|
350
|
+
- **`--sidebar-ring`**: Focus ring color
|
|
351
|
+
|
|
352
|
+
### Implementation Examples
|
|
353
|
+
|
|
354
|
+
#### React - Dark Sidebar Navigation
|
|
355
|
+
|
|
356
|
+
```tsx
|
|
357
|
+
import { Button } from "@equal-experts/kuat-react";
|
|
358
|
+
import { useState } from "react";
|
|
359
|
+
|
|
360
|
+
export function AppLayout({ children }: { children: React.ReactNode }) {
|
|
361
|
+
const [sidebarOpen, setSidebarOpen] = useState(true);
|
|
362
|
+
|
|
363
|
+
return (
|
|
364
|
+
<div className="min-h-screen bg-background flex">
|
|
365
|
+
{/* Dark Sidebar */}
|
|
366
|
+
<aside
|
|
367
|
+
className={`bg-sidebar text-sidebar-foreground border-r border-sidebar-border transition-all duration-300 ${
|
|
368
|
+
sidebarOpen ? 'w-64' : 'w-16'
|
|
369
|
+
}`}
|
|
370
|
+
>
|
|
371
|
+
{/* Logo */}
|
|
372
|
+
<div className="p-6 border-b border-sidebar-border">
|
|
373
|
+
<img
|
|
374
|
+
src="/logo-white.svg"
|
|
375
|
+
alt="Equal Experts"
|
|
376
|
+
className={`h-10 w-auto min-w-[100px] transition-opacity ${
|
|
377
|
+
sidebarOpen ? 'opacity-100' : 'opacity-0 w-0'
|
|
378
|
+
}`}
|
|
379
|
+
/>
|
|
380
|
+
</div>
|
|
381
|
+
|
|
382
|
+
{/* Navigation */}
|
|
383
|
+
<nav className="p-4 space-y-2">
|
|
384
|
+
<a
|
|
385
|
+
href="/dashboard"
|
|
386
|
+
className="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
387
|
+
>
|
|
388
|
+
<span>Dashboard</span>
|
|
389
|
+
</a>
|
|
390
|
+
<a
|
|
391
|
+
href="/projects"
|
|
392
|
+
className="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
393
|
+
>
|
|
394
|
+
<span>Projects</span>
|
|
395
|
+
</a>
|
|
396
|
+
<a
|
|
397
|
+
href="/reports"
|
|
398
|
+
className="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
399
|
+
>
|
|
400
|
+
<span>Reports</span>
|
|
401
|
+
</a>
|
|
402
|
+
<a
|
|
403
|
+
href="/settings"
|
|
404
|
+
className="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
405
|
+
>
|
|
406
|
+
<span>Settings</span>
|
|
407
|
+
</a>
|
|
408
|
+
</nav>
|
|
409
|
+
</aside>
|
|
410
|
+
|
|
411
|
+
{/* Main Content Area */}
|
|
412
|
+
<div className="flex-1 flex flex-col">
|
|
413
|
+
{/* Top Bar */}
|
|
414
|
+
<header className="bg-background border-b border-border px-6 py-4 flex items-center justify-between">
|
|
415
|
+
<div className="flex items-center gap-4">
|
|
416
|
+
<button
|
|
417
|
+
onClick={() => setSidebarOpen(!sidebarOpen)}
|
|
418
|
+
className="p-2 hover:bg-muted rounded-[6px]"
|
|
419
|
+
>
|
|
420
|
+
☰
|
|
421
|
+
</button>
|
|
422
|
+
<nav className="text-sm text-muted-foreground">
|
|
423
|
+
Dashboard / Overview
|
|
424
|
+
</nav>
|
|
425
|
+
</div>
|
|
426
|
+
<div className="flex items-center gap-4">
|
|
427
|
+
<Button variant="ghost">Profile</Button>
|
|
428
|
+
</div>
|
|
429
|
+
</header>
|
|
430
|
+
|
|
431
|
+
{/* Content */}
|
|
432
|
+
<main className="flex-1 p-6 overflow-auto">
|
|
433
|
+
{children}
|
|
434
|
+
</main>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
#### Vue - Dark Sidebar Navigation
|
|
442
|
+
|
|
443
|
+
```vue
|
|
444
|
+
<script setup lang="ts">
|
|
445
|
+
import { Button } from "@equal-experts/kuat-vue";
|
|
446
|
+
import { ref } from "vue";
|
|
447
|
+
|
|
448
|
+
const sidebarOpen = ref(true);
|
|
449
|
+
</script>
|
|
450
|
+
|
|
451
|
+
<template>
|
|
452
|
+
<div class="min-h-screen bg-background flex">
|
|
453
|
+
<!-- Dark Sidebar -->
|
|
454
|
+
<aside
|
|
455
|
+
:class="[
|
|
456
|
+
'bg-sidebar text-sidebar-foreground border-r border-sidebar-border transition-all duration-300',
|
|
457
|
+
sidebarOpen ? 'w-64' : 'w-16'
|
|
458
|
+
]"
|
|
459
|
+
>
|
|
460
|
+
<!-- Logo -->
|
|
461
|
+
<div class="p-6 border-b border-sidebar-border">
|
|
462
|
+
<img
|
|
463
|
+
src="/logo-white.svg"
|
|
464
|
+
alt="Equal Experts"
|
|
465
|
+
:class="[
|
|
466
|
+
'h-10 w-auto min-w-[100px] transition-opacity',
|
|
467
|
+
sidebarOpen ? 'opacity-100' : 'opacity-0 w-0'
|
|
468
|
+
]"
|
|
469
|
+
/>
|
|
470
|
+
</div>
|
|
471
|
+
|
|
472
|
+
<!-- Navigation -->
|
|
473
|
+
<nav class="p-4 space-y-2">
|
|
474
|
+
<a
|
|
475
|
+
href="/dashboard"
|
|
476
|
+
class="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
477
|
+
>
|
|
478
|
+
<span>Dashboard</span>
|
|
479
|
+
</a>
|
|
480
|
+
<a
|
|
481
|
+
href="/projects"
|
|
482
|
+
class="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
483
|
+
>
|
|
484
|
+
<span>Projects</span>
|
|
485
|
+
</a>
|
|
486
|
+
<a
|
|
487
|
+
href="/reports"
|
|
488
|
+
class="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
489
|
+
>
|
|
490
|
+
<span>Reports</span>
|
|
491
|
+
</a>
|
|
492
|
+
<a
|
|
493
|
+
href="/settings"
|
|
494
|
+
class="flex items-center gap-3 px-4 py-2 rounded-[6px] text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
|
|
495
|
+
>
|
|
496
|
+
<span>Settings</span>
|
|
497
|
+
</a>
|
|
498
|
+
</nav>
|
|
499
|
+
</aside>
|
|
500
|
+
|
|
501
|
+
<!-- Main Content Area -->
|
|
502
|
+
<div class="flex-1 flex flex-col">
|
|
503
|
+
<!-- Top Bar -->
|
|
504
|
+
<header class="bg-background border-b border-border px-6 py-4 flex items-center justify-between">
|
|
505
|
+
<div class="flex items-center gap-4">
|
|
506
|
+
<button
|
|
507
|
+
@click="sidebarOpen = !sidebarOpen"
|
|
508
|
+
class="p-2 hover:bg-muted rounded-[6px]"
|
|
509
|
+
>
|
|
510
|
+
☰
|
|
511
|
+
</button>
|
|
512
|
+
<nav class="text-sm text-muted-foreground">
|
|
513
|
+
Dashboard / Overview
|
|
514
|
+
</nav>
|
|
515
|
+
</div>
|
|
516
|
+
<div class="flex items-center gap-4">
|
|
517
|
+
<Button variant="ghost">Profile</Button>
|
|
518
|
+
</div>
|
|
519
|
+
</header>
|
|
520
|
+
|
|
521
|
+
<!-- Content -->
|
|
522
|
+
<main class="flex-1 p-6 overflow-auto">
|
|
523
|
+
<slot />
|
|
524
|
+
</main>
|
|
525
|
+
</div>
|
|
526
|
+
</div>
|
|
527
|
+
</template>
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Logo Placement Guidelines
|
|
533
|
+
|
|
534
|
+
### Marketing Layouts
|
|
535
|
+
|
|
536
|
+
- **Header**: Full-color logo, left-aligned, 120px-150px width
|
|
537
|
+
- **Footer**: Full-color logo, smaller (100px-120px), centered or left-aligned
|
|
538
|
+
- **Background**: Light backgrounds (white, light gray)
|
|
539
|
+
- **Clear Space**: Follow logo usage guidelines (bracket+equals width)
|
|
540
|
+
|
|
541
|
+
### Product/App Layouts
|
|
542
|
+
|
|
543
|
+
- **Horizontal Nav**: White monochrome logo, left-aligned, 120px-150px width
|
|
544
|
+
- **Sidebar**: White monochrome logo, top of sidebar, 120px-150px width, centered or left-aligned with padding
|
|
545
|
+
- **Background**: Dark sidebar background (Tech Blue)
|
|
546
|
+
- **Clear Space**: Maintain adequate padding around logo (minimum 16px-24px)
|
|
547
|
+
|
|
548
|
+
### Logo Variants
|
|
549
|
+
|
|
550
|
+
- **Full-color logo** (`/logo.svg`): Use on light backgrounds (marketing layouts)
|
|
551
|
+
- **White monochrome logo** (`/logo-white.svg`): Use on dark backgrounds (product/app navigation)
|
|
552
|
+
- **Never use full-color logo on dark backgrounds** - use white monochrome instead
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## Responsive Considerations
|
|
557
|
+
|
|
558
|
+
### Marketing Layouts
|
|
559
|
+
|
|
560
|
+
- **Mobile**: Stack logo and navigation vertically, or use hamburger menu
|
|
561
|
+
- **Tablet**: Maintain horizontal layout with adjusted spacing
|
|
562
|
+
- **Desktop**: Full horizontal layout with all navigation items visible
|
|
563
|
+
|
|
564
|
+
### Product/App Layouts
|
|
565
|
+
|
|
566
|
+
#### Horizontal Navigation
|
|
567
|
+
- **Mobile**: Collapse to hamburger menu, logo remains visible
|
|
568
|
+
- **Tablet**: Show primary navigation items, hide secondary
|
|
569
|
+
- **Desktop**: Full navigation with all items visible
|
|
570
|
+
|
|
571
|
+
#### Sidebar Navigation
|
|
572
|
+
- **Mobile**: Sidebar becomes overlay/drawer, hidden by default
|
|
573
|
+
- **Tablet**: Collapsible sidebar (default collapsed or expanded based on screen size)
|
|
574
|
+
- **Desktop**: Full sidebar visible (240px-280px width)
|
|
575
|
+
|
|
576
|
+
---
|
|
577
|
+
|
|
578
|
+
## Best Practices
|
|
579
|
+
|
|
580
|
+
### ✅ Do's
|
|
581
|
+
|
|
582
|
+
1. **Always include the logo**
|
|
583
|
+
- ✅ Place logo prominently in header/navigation
|
|
584
|
+
- ✅ Use appropriate variant (full-color or white monochrome)
|
|
585
|
+
- ✅ Maintain minimum size requirements (100px)
|
|
586
|
+
|
|
587
|
+
2. **Choose the right layout type**
|
|
588
|
+
- ✅ Use marketing layout for public-facing content
|
|
589
|
+
- ✅ Use product layout for application interfaces
|
|
590
|
+
- ✅ Select horizontal or sidebar based on navigation complexity
|
|
591
|
+
|
|
592
|
+
3. **Follow color guidelines**
|
|
593
|
+
- ✅ Use sidebar color tokens for dark navigation
|
|
594
|
+
- ✅ Use light backgrounds for content areas
|
|
595
|
+
- ✅ Maintain proper contrast for accessibility
|
|
596
|
+
|
|
597
|
+
4. **Ensure responsive design**
|
|
598
|
+
- ✅ Test layouts at all breakpoints
|
|
599
|
+
- ✅ Provide mobile-friendly navigation
|
|
600
|
+
- ✅ Maintain logo visibility on all screen sizes
|
|
601
|
+
|
|
602
|
+
5. **Maintain consistency**
|
|
603
|
+
- ✅ Use consistent spacing (8-point grid)
|
|
604
|
+
- ✅ Follow border radius guidelines (6px for interactive elements)
|
|
605
|
+
- ✅ Use design system components and tokens
|
|
606
|
+
|
|
607
|
+
### ❌ Don'ts
|
|
608
|
+
|
|
609
|
+
1. **Don't mix layout types**
|
|
610
|
+
- ❌ Don't use marketing layout for applications
|
|
611
|
+
- ❌ Don't use product layout for marketing sites
|
|
612
|
+
- ❌ Don't combine horizontal and sidebar navigation
|
|
613
|
+
|
|
614
|
+
2. **Don't compromise logo placement**
|
|
615
|
+
- ❌ Don't place logo in corners without adequate padding
|
|
616
|
+
- ❌ Don't use wrong logo variant for background color
|
|
617
|
+
- ❌ Don't scale logo below minimum size
|
|
618
|
+
|
|
619
|
+
3. **Don't ignore color tokens**
|
|
620
|
+
- ❌ Don't hardcode sidebar colors
|
|
621
|
+
- ❌ Don't use arbitrary dark colors for navigation
|
|
622
|
+
- ❌ Always use `bg-sidebar` and related tokens
|
|
623
|
+
|
|
624
|
+
4. **Don't skip responsive design**
|
|
625
|
+
- ❌ Don't create layouts that only work on desktop
|
|
626
|
+
- ❌ Don't hide navigation without mobile alternative
|
|
627
|
+
- ❌ Don't ignore touch target sizes
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Integration with Design System
|
|
632
|
+
|
|
633
|
+
### Color Tokens
|
|
634
|
+
|
|
635
|
+
Layouts use the following semantic color tokens:
|
|
636
|
+
|
|
637
|
+
**Marketing Layouts:**
|
|
638
|
+
- `bg-background` - Light background
|
|
639
|
+
- `text-foreground` - Primary text color
|
|
640
|
+
- `border-border` - Border color
|
|
641
|
+
|
|
642
|
+
**Product/App Layouts:**
|
|
643
|
+
- `bg-sidebar` - Dark navigation background (Tech Blue)
|
|
644
|
+
- `text-sidebar-foreground` - Text on sidebar (White)
|
|
645
|
+
- `bg-sidebar-accent` - Hover/active state background
|
|
646
|
+
- `bg-background` - Content area background
|
|
647
|
+
|
|
648
|
+
### Spacing
|
|
649
|
+
|
|
650
|
+
Follow the 8-point grid system:
|
|
651
|
+
- Navigation height: 64px-80px (multiples of 8)
|
|
652
|
+
- Sidebar width: 240px-280px (multiples of 8)
|
|
653
|
+
- Padding: 16px, 24px, 32px (multiples of 8)
|
|
654
|
+
|
|
655
|
+
### Border Radius
|
|
656
|
+
|
|
657
|
+
- Navigation items: `rounded-[6px]` (interactive elements)
|
|
658
|
+
- Content cards: No radius (0px) for static content
|
|
659
|
+
- Form inputs: `rounded-[4px]` for inputs
|
|
660
|
+
|
|
661
|
+
---
|
|
662
|
+
|
|
663
|
+
## Additional Resources
|
|
664
|
+
|
|
665
|
+
- **Logo Guide:** See [logo.md](./logo.md) for complete logo usage specifications
|
|
666
|
+
- **Color Guide:** See [colours.md](./colours.md) for sidebar color tokens and usage
|
|
667
|
+
- **Spacing Guide:** See [spacing.md](./spacing.md) for spacing patterns and 8-point grid
|
|
668
|
+
- **Borders Guide:** See [borders.md](./borders.md) for border radius guidelines
|
|
669
|
+
- **Design System Overview:** See [design-system.md](./design-system.md) for complete design system documentation
|
|
670
|
+
- **Component Guidelines:** See [../technical/component-guidelines.md](../technical/component-guidelines.md) for component patterns
|
|
671
|
+
|
|
672
|
+
---
|
|
673
|
+
|
|
674
|
+
## Notes
|
|
675
|
+
|
|
676
|
+
- **Consistency First:** All EE applications should follow these layout templates for brand consistency
|
|
677
|
+
- **Logo Always:** Every layout must include the Equal Experts logo correctly placed
|
|
678
|
+
- **Dark Navigation:** Product/app layouts use dark navigation (Tech Blue) for visual hierarchy
|
|
679
|
+
- **Responsive Required:** All layouts must work across mobile, tablet, and desktop
|
|
680
|
+
- **Design Tokens:** Always use design system color tokens—never hardcode colors
|
|
681
|
+
|