@motor-cms/ui-admin 1.0.1-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.
Files changed (103) hide show
  1. package/README.md +77 -0
  2. package/app/components/form/inputs/CategoryTreeInput.vue +154 -0
  3. package/app/components/form/inputs/CategoryTreePicker.vue +355 -0
  4. package/app/components/form/inputs/NestedDraggable.vue +217 -0
  5. package/app/components/form/inputs/QuicklinksInput.vue +186 -0
  6. package/app/lang/de/motor-admin/CLAUDE.md +21 -0
  7. package/app/lang/de/motor-admin/ai_system_prompts.json +12 -0
  8. package/app/lang/de/motor-admin/categories.json +12 -0
  9. package/app/lang/de/motor-admin/category_trees.json +14 -0
  10. package/app/lang/de/motor-admin/clients.json +26 -0
  11. package/app/lang/de/motor-admin/config_variables.json +14 -0
  12. package/app/lang/de/motor-admin/domains.json +19 -0
  13. package/app/lang/de/motor-admin/email_templates.json +38 -0
  14. package/app/lang/de/motor-admin/global.json +5 -0
  15. package/app/lang/de/motor-admin/languages.json +16 -0
  16. package/app/lang/de/motor-admin/permissions.json +14 -0
  17. package/app/lang/de/motor-admin/roles.json +15 -0
  18. package/app/lang/de/motor-admin/users.json +22 -0
  19. package/app/lang/en/motor-admin/CLAUDE.md +7 -0
  20. package/app/lang/en/motor-admin/ai_system_prompts.json +12 -0
  21. package/app/lang/en/motor-admin/categories.json +12 -0
  22. package/app/lang/en/motor-admin/category_trees.json +14 -0
  23. package/app/lang/en/motor-admin/clients.json +26 -0
  24. package/app/lang/en/motor-admin/config_variables.json +14 -0
  25. package/app/lang/en/motor-admin/domains.json +18 -0
  26. package/app/lang/en/motor-admin/email_templates.json +33 -0
  27. package/app/lang/en/motor-admin/global.json +5 -0
  28. package/app/lang/en/motor-admin/languages.json +16 -0
  29. package/app/lang/en/motor-admin/permissions.json +14 -0
  30. package/app/lang/en/motor-admin/roles.json +15 -0
  31. package/app/lang/en/motor-admin/users.json +22 -0
  32. package/app/pages/dashboard.vue +5 -0
  33. package/app/pages/index.vue +39 -0
  34. package/app/pages/login.vue +85 -0
  35. package/app/pages/motor-admin/ai-system-prompts/CLAUDE.md +7 -0
  36. package/app/pages/motor-admin/ai-system-prompts/[id]/edit.vue +48 -0
  37. package/app/pages/motor-admin/ai-system-prompts/create.vue +40 -0
  38. package/app/pages/motor-admin/ai-system-prompts/index.vue +68 -0
  39. package/app/pages/motor-admin/category-trees/CLAUDE.md +7 -0
  40. package/app/pages/motor-admin/category-trees/[id]/CLAUDE.md +7 -0
  41. package/app/pages/motor-admin/category-trees/[id]/categories/[categoryId]/edit.vue +73 -0
  42. package/app/pages/motor-admin/category-trees/[id]/categories/create.vue +64 -0
  43. package/app/pages/motor-admin/category-trees/[id]/edit.vue +45 -0
  44. package/app/pages/motor-admin/category-trees/[id]/index.vue +81 -0
  45. package/app/pages/motor-admin/category-trees/create.vue +37 -0
  46. package/app/pages/motor-admin/category-trees/index.vue +54 -0
  47. package/app/pages/motor-admin/clients/CLAUDE.md +11 -0
  48. package/app/pages/motor-admin/clients/[id]/CLAUDE.md +11 -0
  49. package/app/pages/motor-admin/clients/[id]/edit.vue +45 -0
  50. package/app/pages/motor-admin/clients/create.vue +37 -0
  51. package/app/pages/motor-admin/clients/index.vue +46 -0
  52. package/app/pages/motor-admin/config-variables/CLAUDE.md +11 -0
  53. package/app/pages/motor-admin/config-variables/[id]/edit.vue +44 -0
  54. package/app/pages/motor-admin/config-variables/create.vue +36 -0
  55. package/app/pages/motor-admin/config-variables/index.vue +66 -0
  56. package/app/pages/motor-admin/domains/CLAUDE.md +11 -0
  57. package/app/pages/motor-admin/domains/[id]/edit.vue +54 -0
  58. package/app/pages/motor-admin/domains/create.vue +46 -0
  59. package/app/pages/motor-admin/domains/index.vue +98 -0
  60. package/app/pages/motor-admin/email-templates/CLAUDE.md +12 -0
  61. package/app/pages/motor-admin/email-templates/[id]/CLAUDE.md +7 -0
  62. package/app/pages/motor-admin/email-templates/[id]/edit.vue +56 -0
  63. package/app/pages/motor-admin/email-templates/create.vue +48 -0
  64. package/app/pages/motor-admin/email-templates/index.vue +67 -0
  65. package/app/pages/motor-admin/index.vue +12 -0
  66. package/app/pages/motor-admin/languages/CLAUDE.md +7 -0
  67. package/app/pages/motor-admin/languages/[id]/edit.vue +44 -0
  68. package/app/pages/motor-admin/languages/create.vue +36 -0
  69. package/app/pages/motor-admin/languages/index.vue +44 -0
  70. package/app/pages/motor-admin/permission-groups/CLAUDE.md +14 -0
  71. package/app/pages/motor-admin/permission-groups/[id]/CLAUDE.md +11 -0
  72. package/app/pages/motor-admin/permission-groups/[id]/edit.vue +49 -0
  73. package/app/pages/motor-admin/permission-groups/create.vue +41 -0
  74. package/app/pages/motor-admin/permission-groups/index.vue +43 -0
  75. package/app/pages/motor-admin/roles/CLAUDE.md +7 -0
  76. package/app/pages/motor-admin/roles/[id]/edit.vue +47 -0
  77. package/app/pages/motor-admin/roles/create.vue +40 -0
  78. package/app/pages/motor-admin/roles/index.vue +45 -0
  79. package/app/pages/motor-admin/theme-preview/CLAUDE.md +7 -0
  80. package/app/pages/motor-admin/theme-preview/index.vue +4801 -0
  81. package/app/pages/motor-admin/theme-preview/themes/CLAUDE.md +11 -0
  82. package/app/pages/motor-admin/theme-preview/themes/asymmetric-brutalist.md +381 -0
  83. package/app/pages/motor-admin/theme-preview/themes/bold-modern.md +231 -0
  84. package/app/pages/motor-admin/theme-preview/themes/geometric-minimal.md +778 -0
  85. package/app/pages/motor-admin/theme-preview/themes/gradient-flow.md +1057 -0
  86. package/app/pages/motor-admin/theme-preview/themes/liquid-glass.md +823 -0
  87. package/app/pages/motor-admin/theme-preview/themes/neon-amber.md +1223 -0
  88. package/app/pages/motor-admin/theme-preview/themes/neon-terminal.md +779 -0
  89. package/app/pages/motor-admin/theme-preview/themes/neon-violet.md +1134 -0
  90. package/app/pages/motor-admin/theme-preview/themes/professional-clean.md +232 -0
  91. package/app/pages/motor-admin/theme-preview/themes/refined-brutalist.md +462 -0
  92. package/app/pages/motor-admin/theme-preview/themes/wild-card.md +263 -0
  93. package/app/pages/motor-admin/users/CLAUDE.md +17 -0
  94. package/app/pages/motor-admin/users/[id]/CLAUDE.md +11 -0
  95. package/app/pages/motor-admin/users/[id]/edit.vue +83 -0
  96. package/app/pages/motor-admin/users/create.vue +40 -0
  97. package/app/pages/motor-admin/users/index.vue +66 -0
  98. package/app/pages/profile.vue +363 -0
  99. package/app/pages/search.vue +91 -0
  100. package/app/types/generated/form-meta.ts +258 -0
  101. package/app/types/generated/grid-meta.ts +172 -0
  102. package/nuxt.config.ts +1 -0
  103. package/package.json +26 -0
@@ -0,0 +1,232 @@
1
+ # Professional & Clean Theme
2
+
3
+ **Inspiration:** Stripe Dashboard, Linear App, Vercel Dashboard
4
+ **Mood:** Trustworthy, focused, calm authority, distraction-free
5
+
6
+ ---
7
+
8
+ ## Color Palette
9
+
10
+ ### Primary: Indigo (Tailwind `indigo`)
11
+
12
+ The primary accent color draws from Stripe's signature blue-violet and Linear's indigo. Indigo conveys professionalism, trust, and calm authority -- ideal for an admin panel where users manage critical data.
13
+
14
+ | Token | Tailwind Class | Hex | Usage |
15
+ |-------------------|------------------|-----------|----------------------------------------|
16
+ | primary-50 | `indigo-50` | `#eef2ff` | Hover backgrounds, subtle highlights |
17
+ | primary-100 | `indigo-100` | `#e0e7ff` | Selected row backgrounds, badges |
18
+ | primary-200 | `indigo-200` | `#c7d2fe` | Focus rings, light borders |
19
+ | primary-300 | `indigo-300` | `#a5b4fc` | Active states, progress indicators |
20
+ | primary-400 | `indigo-400` | `#818cf8` | Hover on primary buttons |
21
+ | **primary-500** | **`indigo-500`** | **`#6366f1`** | **Primary buttons, links, active nav** |
22
+ | primary-600 | `indigo-600` | `#4f46e5` | Primary button pressed state |
23
+ | primary-700 | `indigo-700` | `#4338ca` | Dark mode primary accent |
24
+ | primary-800 | `indigo-800` | `#3730a3` | Dark backgrounds with primary tint |
25
+ | primary-900 | `indigo-900` | `#312e81` | Very dark primary accents |
26
+ | primary-950 | `indigo-950` | `#1e1b4b` | Darkest primary, text on light bg |
27
+
28
+ **Nuxt UI config:** `primary: 'indigo'`
29
+
30
+ ### Neutral: Slate (Tailwind `slate`)
31
+
32
+ Slate provides a cool, blue-tinted neutral scale that pairs naturally with indigo. It avoids the warmth of stone/zinc and the sterility of pure gray, landing in a professional sweet spot reminiscent of Stripe's interface.
33
+
34
+ | Token | Tailwind Class | Hex | Usage |
35
+ |-------------------|-----------------|-----------|----------------------------------------|
36
+ | neutral-50 | `slate-50` | `#f8fafc` | Page background (light mode) |
37
+ | neutral-100 | `slate-100` | `#f1f5f9` | Card backgrounds, sidebar bg |
38
+ | neutral-200 | `slate-200` | `#e2e8f0` | Borders, dividers, input borders |
39
+ | neutral-300 | `slate-300` | `#cbd5e1` | Disabled states, placeholder text bg |
40
+ | neutral-400 | `slate-400` | `#94a3b8` | Placeholder text, muted icons |
41
+ | neutral-500 | `slate-500` | `#64748b` | Secondary text, labels |
42
+ | neutral-600 | `slate-600` | `#475569` | Body text (light mode) |
43
+ | neutral-700 | `slate-700` | `#334155` | Heading text (light mode) |
44
+ | neutral-800 | `slate-800` | `#1e293b` | Sidebar dark bg, card bg (dark mode) |
45
+ | neutral-900 | `slate-900` | `#0f172a` | Primary text, page bg (dark mode) |
46
+ | neutral-950 | `slate-950` | `#020617` | Deepest dark mode background |
47
+
48
+ **Nuxt UI config:** `neutral: 'slate'`
49
+
50
+ ### Semantic Colors
51
+
52
+ | Purpose | Color Family | Shade | Hex | Usage |
53
+ |------------|-----------------|-------|-----------|---------------------------|
54
+ | Success | `emerald` | 500 | `#10b981` | Success toasts, checkmarks |
55
+ | Warning | `amber` | 500 | `#f59e0b` | Warning alerts, badges |
56
+ | Error | `red` | 500 | `#ef4444` | Error states, destructive |
57
+ | Info | `sky` | 500 | `#0ea5e9` | Info banners, tooltips |
58
+
59
+ ---
60
+
61
+ ## Font Pairing
62
+
63
+ ### Heading Font: Manrope
64
+
65
+ - **Type:** Geometric sans-serif, variable weight (200-800)
66
+ - **Why:** Manrope has a distinctive geometric precision with subtly rounded terminals that make headings feel modern and approachable without sacrificing professionalism. Its wider letter-spacing at heavier weights creates confident, authoritative headings.
67
+ - **Weights used:** 600 (semibold for h3-h6), 700 (bold for h1-h2)
68
+
69
+ ### Body Font: Inter
70
+
71
+ - **Type:** Humanist sans-serif, variable weight (100-900)
72
+ - **Why:** Inter was designed specifically for computer screens with features like a tall x-height, open apertures, and careful optical adjustments that maximize readability at any size. It is the industry standard for SaaS dashboards and admin UIs -- used by Linear, Vercel, and countless modern applications. It provides low-friction reading in data-heavy interfaces.
73
+ - **Weights used:** 400 (regular body), 500 (medium for labels/table headers), 600 (semibold for emphasis)
74
+
75
+ ### Why They Work Together
76
+
77
+ Manrope's geometric structure contrasts nicely with Inter's humanist warmth. Manrope creates visual hierarchy through its distinctive letterforms in headings, while Inter maintains maximum readability in body content, tables, and form fields. Both fonts share similar x-heights and proportions, creating a harmonious rhythm without jarring transitions.
78
+
79
+ ### Google Fonts Import
80
+
81
+ ```
82
+ https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,100..900;1,100..900&family=Manrope:wght@200..800&display=swap
83
+ ```
84
+
85
+ ### CSS Application
86
+
87
+ ```css
88
+ :root {
89
+ --font-heading: 'Manrope', ui-sans-serif, system-ui, sans-serif;
90
+ --font-body: 'Inter', ui-sans-serif, system-ui, sans-serif;
91
+ }
92
+
93
+ h1, h2, h3, h4, h5, h6 {
94
+ font-family: var(--font-heading);
95
+ }
96
+
97
+ body {
98
+ font-family: var(--font-body);
99
+ }
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Component Styling Notes
105
+
106
+ ### Buttons
107
+
108
+ - **Border radius:** `rounded-lg` (8px) -- soft but professional, avoids the playfulness of full rounding
109
+ - **Primary button:** Solid indigo-500 background, white text, indigo-600 on hover
110
+ - **Secondary button:** Slate-100 background, slate-700 text, subtle border
111
+ - **Ghost button:** Transparent background, indigo-600 text, slate-50 hover background
112
+ - **Padding:** `px-4 py-2` for default, `px-3 py-1.5` for small
113
+ - **Font weight:** Medium (500) -- not bold, keeping the clean aesthetic
114
+ - **Transition:** Smooth 150ms color/background transitions
115
+
116
+ ### Cards
117
+
118
+ - **Border radius:** `rounded-xl` (12px)
119
+ - **Background:** White (light mode) / slate-800 (dark mode)
120
+ - **Border:** 1px slate-200 (light) / slate-700 (dark) -- subtle, not heavy
121
+ - **Shadow:** `shadow-sm` by default, `shadow-md` on hover for interactive cards
122
+ - **Padding:** `p-6` standard, `p-4` for compact cards
123
+
124
+ ### Sidebar
125
+
126
+ - **Background:** White with a right border of slate-200 (light mode) or slate-900 with slate-700 border (dark mode)
127
+ - **Width:** 260px (comfortable for navigation labels)
128
+ - **Active item:** Indigo-50 background with indigo-600 text and a 2px left border in indigo-500
129
+ - **Hover item:** Slate-50 background
130
+ - **Item padding:** `px-3 py-2`
131
+ - **Section labels:** Uppercase, slate-400, text-xs, font-medium, tracking-wide
132
+ - **Icons:** 20px, slate-400 default, indigo-500 when active
133
+
134
+ ### Tables / Data Grids
135
+
136
+ - **Header:** Slate-50 background, slate-500 text, text-xs uppercase, font-medium
137
+ - **Row borders:** Slate-100 horizontal dividers only (no vertical lines)
138
+ - **Row hover:** Slate-50 background
139
+ - **Selected row:** Indigo-50 background
140
+ - **Cell padding:** `px-4 py-3`
141
+ - **Stripe effect:** None -- clean white rows with subtle dividers
142
+
143
+ ### Forms / Inputs
144
+
145
+ - **Border radius:** `rounded-lg` (8px)
146
+ - **Border:** Slate-300, transitions to indigo-500 on focus
147
+ - **Focus ring:** 2px indigo-200 ring
148
+ - **Label:** Slate-700, text-sm, font-medium, mb-1
149
+ - **Placeholder:** Slate-400
150
+ - **Background:** White (light) / slate-800 (dark)
151
+ - **Error state:** Red-500 border, red-50 background tint, red-600 message text
152
+
153
+ ### Spacing Philosophy
154
+
155
+ - **Generous whitespace:** Let content breathe -- err on the side of more space
156
+ - **Consistent rhythm:** Use 4px base unit. Common spacing: 8px, 12px, 16px, 24px, 32px, 48px
157
+ - **Section separation:** 32px between major sections, 16px between related items
158
+ - **Card margins:** 24px gap in grid layouts
159
+
160
+ ### Typography Scale
161
+
162
+ | Element | Size | Weight | Font | Color |
163
+ |-------------|------------|---------|----------|-------------|
164
+ | Page title | text-2xl | 700 | Manrope | slate-900 |
165
+ | Section heading | text-lg | 600 | Manrope | slate-800 |
166
+ | Card title | text-base | 600 | Manrope | slate-800 |
167
+ | Body text | text-sm | 400 | Inter | slate-600 |
168
+ | Label | text-sm | 500 | Inter | slate-700 |
169
+ | Caption | text-xs | 400 | Inter | slate-500 |
170
+ | Badge | text-xs | 500 | Inter | varies |
171
+
172
+ ---
173
+
174
+ ## Mood & Inspiration
175
+
176
+ ### 1. Stripe Dashboard
177
+
178
+ Stripe's dashboard epitomizes the professional-clean aesthetic: deep navy-tinted neutrals (`#0A2540`), a bright violet accent (`#635BFF`), and generous whitespace. Their accessible color system ensures every combination passes WCAG AA guidelines. The interface feels premium and trustworthy -- exactly the confidence an admin panel should inspire.
179
+
180
+ ### 2. Linear App
181
+
182
+ Linear's interface demonstrates how a near-monochromatic palette with a single strong accent (indigo) creates a focused, productivity-oriented environment. Their use of Inter font, subtle shadows, and minimal borders achieves a clean look that doesn't sacrifice information density. The sidebar navigation with muted icons and clear active states is a direct reference for our admin panel.
183
+
184
+ ### 3. Vercel Dashboard
185
+
186
+ Vercel's dashboard shows how slate neutrals and minimal color create an interface that stays out of the way while remaining visually polished. Their approach to data tables (clean dividers, no zebra striping), card layouts (subtle borders, consistent spacing), and navigation (restrained use of active indicators) embodies the "professional & clean" direction.
187
+
188
+ ### Overall Feel
189
+
190
+ - **Clean, not sterile** -- Warmth from the blue-tinted slate neutrals
191
+ - **Focused, not boring** -- Indigo accent provides energy without distraction
192
+ - **Professional, not corporate** -- Modern typography and generous spacing feel contemporary
193
+ - **Calm, not passive** -- Strategic use of color draws attention to what matters
194
+
195
+ ---
196
+
197
+ ## Nuxt UI 4.x Configuration Summary
198
+
199
+ ```typescript
200
+ // nuxt.config.ts
201
+ export default defineNuxtConfig({
202
+ ui: {
203
+ colors: {
204
+ primary: 'indigo',
205
+ neutral: 'slate'
206
+ }
207
+ }
208
+ })
209
+ ```
210
+
211
+ ### Key Nuxt UI Component Overrides
212
+
213
+ ```typescript
214
+ // app.config.ts
215
+ export default defineAppConfig({
216
+ ui: {
217
+ button: {
218
+ rounded: 'rounded-lg',
219
+ default: {
220
+ size: 'md'
221
+ }
222
+ },
223
+ card: {
224
+ rounded: 'rounded-xl',
225
+ shadow: 'shadow-sm'
226
+ },
227
+ input: {
228
+ rounded: 'rounded-lg'
229
+ }
230
+ }
231
+ })
232
+ ```