@framingui/ui 0.6.2 → 0.6.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 +22 -1090
- package/dist/chunk-7UBERMRE.mjs +180 -0
- package/dist/chunk-RWYATDH5.mjs +180 -0
- package/dist/index.d.mts +1 -140
- package/dist/index.mjs +425 -1846
- package/dist/src/components/alert-dialog.stories.js +1 -1
- package/dist/src/components/alert-dialog.stories.js.map +1 -1
- package/dist/src/components/avatar.js +2 -2
- package/dist/src/components/avatar.js.map +1 -1
- package/dist/src/components/avatar.stories.js +2 -2
- package/dist/src/components/avatar.stories.js.map +1 -1
- package/dist/src/components/badge.js +5 -5
- package/dist/src/components/badge.js.map +1 -1
- package/dist/src/components/breadcrumb.js +7 -7
- package/dist/src/components/breadcrumb.js.map +1 -1
- package/dist/src/components/button.js +10 -10
- package/dist/src/components/button.js.map +1 -1
- package/dist/src/components/calendar.js +11 -11
- package/dist/src/components/calendar.js.map +1 -1
- package/dist/src/components/calendar.stories.js +9 -9
- package/dist/src/components/calendar.stories.js.map +1 -1
- package/dist/src/components/card.js +5 -5
- package/dist/src/components/card.js.map +1 -1
- package/dist/src/components/card.stories.js +3 -3
- package/dist/src/components/card.stories.js.map +1 -1
- package/dist/src/components/checkbox.js +1 -1
- package/dist/src/components/checkbox.js.map +1 -1
- package/dist/src/components/checkbox.stories.js +2 -2
- package/dist/src/components/checkbox.stories.js.map +1 -1
- package/dist/src/components/command.d.ts +7 -7
- package/dist/src/components/command.js +8 -8
- package/dist/src/components/command.js.map +1 -1
- package/dist/src/components/command.stories.js +6 -6
- package/dist/src/components/command.stories.js.map +1 -1
- package/dist/src/components/dialog.stories.js +1 -1
- package/dist/src/components/dialog.stories.js.map +1 -1
- package/dist/src/components/dropdown-menu.js +8 -8
- package/dist/src/components/dropdown-menu.js.map +1 -1
- package/dist/src/components/form.js +4 -4
- package/dist/src/components/form.js.map +1 -1
- package/dist/src/components/input.js +1 -1
- package/dist/src/components/input.js.map +1 -1
- package/dist/src/components/input.stories.js +2 -2
- package/dist/src/components/input.stories.js.map +1 -1
- package/dist/src/components/label.stories.js +2 -2
- package/dist/src/components/label.stories.js.map +1 -1
- package/dist/src/components/navigation-menu.js +4 -4
- package/dist/src/components/navigation-menu.js.map +1 -1
- package/dist/src/components/navigation-menu.stories.js +2 -2
- package/dist/src/components/navigation-menu.stories.js.map +1 -1
- package/dist/src/components/popover.js +1 -1
- package/dist/src/components/popover.js.map +1 -1
- package/dist/src/components/popover.stories.js +2 -2
- package/dist/src/components/popover.stories.js.map +1 -1
- package/dist/src/components/progress.js +1 -1
- package/dist/src/components/progress.js.map +1 -1
- package/dist/src/components/radio-group.js +2 -2
- package/dist/src/components/radio-group.js.map +1 -1
- package/dist/src/components/radio-group.stories.js +2 -2
- package/dist/src/components/radio-group.stories.js.map +1 -1
- package/dist/src/components/scroll-area.js +1 -1
- package/dist/src/components/scroll-area.js.map +1 -1
- package/dist/src/components/scroll-area.stories.js +4 -4
- package/dist/src/components/scroll-area.stories.js.map +1 -1
- package/dist/src/components/select.js +5 -5
- package/dist/src/components/select.js.map +1 -1
- package/dist/src/components/separator.js +1 -1
- package/dist/src/components/separator.js.map +1 -1
- package/dist/src/components/separator.stories.js +2 -2
- package/dist/src/components/separator.stories.js.map +1 -1
- package/dist/src/components/sheet.d.ts +1 -1
- package/dist/src/components/sheet.js +11 -11
- package/dist/src/components/sheet.js.map +1 -1
- package/dist/src/components/sidebar.js +13 -13
- package/dist/src/components/sidebar.js.map +1 -1
- package/dist/src/components/sidebar.stories.js +2 -2
- package/dist/src/components/sidebar.stories.js.map +1 -1
- package/dist/src/components/skeleton.js +1 -1
- package/dist/src/components/skeleton.js.map +1 -1
- package/dist/src/components/skeleton.stories.js +1 -1
- package/dist/src/components/skeleton.stories.js.map +1 -1
- package/dist/src/components/switch.js +1 -1
- package/dist/src/components/switch.js.map +1 -1
- package/dist/src/components/switch.stories.js +3 -3
- package/dist/src/components/switch.stories.js.map +1 -1
- package/dist/src/components/table.js +5 -5
- package/dist/src/components/table.js.map +1 -1
- package/dist/src/components/tabs.js +3 -3
- package/dist/src/components/tabs.js.map +1 -1
- package/dist/src/components/tabs.stories.js +2 -2
- package/dist/src/components/tabs.stories.js.map +1 -1
- package/dist/src/components/textarea.js +1 -1
- package/dist/src/components/textarea.js.map +1 -1
- package/dist/src/components/textarea.stories.js +4 -4
- package/dist/src/components/textarea.stories.js.map +1 -1
- package/dist/src/components/toast.js +6 -6
- package/dist/src/components/toast.js.map +1 -1
- package/dist/src/components/tooltip.js +1 -1
- package/dist/src/components/tooltip.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/theme-loader.d.ts.map +1 -1
- package/dist/src/lib/theme-loader.js +41 -29
- package/dist/src/lib/theme-loader.js.map +1 -1
- package/dist/src/lib/tokens.d.ts.map +1 -1
- package/dist/src/lib/tokens.js +38 -38
- package/dist/src/lib/tokens.js.map +1 -1
- package/dist/src/templates/auth/forgot-password.d.ts +2 -2
- package/dist/src/templates/auth/forgot-password.d.ts.map +1 -1
- package/dist/src/templates/auth/forgot-password.js +3 -36
- package/dist/src/templates/auth/forgot-password.js.map +1 -1
- package/dist/src/templates/auth/login.d.ts +2 -2
- package/dist/src/templates/auth/login.d.ts.map +1 -1
- package/dist/src/templates/auth/login.js +3 -36
- package/dist/src/templates/auth/login.js.map +1 -1
- package/dist/src/templates/auth/signup.d.ts +2 -2
- package/dist/src/templates/auth/signup.d.ts.map +1 -1
- package/dist/src/templates/auth/signup.js +3 -36
- package/dist/src/templates/auth/signup.js.map +1 -1
- package/dist/src/templates/auth/verification.d.ts +2 -2
- package/dist/src/templates/auth/verification.d.ts.map +1 -1
- package/dist/src/templates/auth/verification.js +3 -36
- package/dist/src/templates/auth/verification.js.map +1 -1
- package/dist/src/templates/core/landing.d.ts +2 -2
- package/dist/src/templates/core/landing.d.ts.map +1 -1
- package/dist/src/templates/core/landing.js +3 -36
- package/dist/src/templates/core/landing.js.map +1 -1
- package/dist/src/templates/core/preferences.d.ts +2 -2
- package/dist/src/templates/core/preferences.d.ts.map +1 -1
- package/dist/src/templates/core/preferences.js +3 -42
- package/dist/src/templates/core/preferences.js.map +1 -1
- package/dist/src/templates/core/profile.d.ts +2 -2
- package/dist/src/templates/core/profile.d.ts.map +1 -1
- package/dist/src/templates/core/profile.js +3 -36
- package/dist/src/templates/core/profile.js.map +1 -1
- package/dist/src/templates/create-template.d.ts +4 -0
- package/dist/src/templates/create-template.d.ts.map +1 -0
- package/dist/src/templates/create-template.js +41 -0
- package/dist/src/templates/create-template.js.map +1 -0
- package/dist/src/templates/dashboard/overview.d.ts +2 -2
- package/dist/src/templates/dashboard/overview.d.ts.map +1 -1
- package/dist/src/templates/dashboard/overview.js +3 -57
- package/dist/src/templates/dashboard/overview.js.map +1 -1
- package/dist/src/templates/feedback/confirmation.d.ts +2 -2
- package/dist/src/templates/feedback/confirmation.d.ts.map +1 -1
- package/dist/src/templates/feedback/confirmation.js +3 -36
- package/dist/src/templates/feedback/confirmation.js.map +1 -1
- package/dist/src/templates/feedback/empty.d.ts +2 -2
- package/dist/src/templates/feedback/empty.d.ts.map +1 -1
- package/dist/src/templates/feedback/empty.js +3 -36
- package/dist/src/templates/feedback/empty.js.map +1 -1
- package/dist/src/templates/feedback/error.d.ts +2 -2
- package/dist/src/templates/feedback/error.d.ts.map +1 -1
- package/dist/src/templates/feedback/error.js +3 -36
- package/dist/src/templates/feedback/error.js.map +1 -1
- package/dist/src/templates/feedback/loading.d.ts +2 -2
- package/dist/src/templates/feedback/loading.d.ts.map +1 -1
- package/dist/src/templates/feedback/loading.js +3 -36
- package/dist/src/templates/feedback/loading.js.map +1 -1
- package/dist/src/templates/feedback/success.d.ts +2 -2
- package/dist/src/templates/feedback/success.d.ts.map +1 -1
- package/dist/src/templates/feedback/success.js +3 -36
- package/dist/src/templates/feedback/success.js.map +1 -1
- package/dist/src/templates/types.js +6 -6
- package/dist/src/templates/types.js.map +1 -1
- package/dist/templates/index.d.mts +142 -0
- package/dist/templates/index.mjs +905 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -2
- package/styles/globals.css +113 -84
|
@@ -0,0 +1,905 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
Card,
|
|
5
|
+
CardContent,
|
|
6
|
+
CardDescription,
|
|
7
|
+
CardFooter,
|
|
8
|
+
CardHeader,
|
|
9
|
+
CardTitle,
|
|
10
|
+
Input,
|
|
11
|
+
Label,
|
|
12
|
+
Separator
|
|
13
|
+
} from "../chunk-RWYATDH5.mjs";
|
|
14
|
+
|
|
15
|
+
// src/templates/types.ts
|
|
16
|
+
var DEFAULT_RESPONSIVE_LAYOUT = {
|
|
17
|
+
mobile: {
|
|
18
|
+
padding: "var(--layout-padding-mobile)",
|
|
19
|
+
// 16px
|
|
20
|
+
gap: "var(--layout-gap-mobile)",
|
|
21
|
+
// 16px
|
|
22
|
+
columns: 4
|
|
23
|
+
},
|
|
24
|
+
tablet: {
|
|
25
|
+
padding: "var(--layout-padding-tablet)",
|
|
26
|
+
// 32px
|
|
27
|
+
gap: "var(--layout-gap-tablet)",
|
|
28
|
+
// 24px
|
|
29
|
+
columns: 8
|
|
30
|
+
},
|
|
31
|
+
desktop: {
|
|
32
|
+
padding: "var(--layout-padding-desktop)",
|
|
33
|
+
// 64px
|
|
34
|
+
gap: "var(--layout-gap-desktop)",
|
|
35
|
+
// 32px
|
|
36
|
+
columns: 12
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var DEFAULT_BREAKPOINTS = {
|
|
40
|
+
mobile: 768,
|
|
41
|
+
tablet: 1024,
|
|
42
|
+
desktop: 1024
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// src/templates/registry.ts
|
|
46
|
+
var TemplateRegistry = class _TemplateRegistry {
|
|
47
|
+
static instance;
|
|
48
|
+
templates;
|
|
49
|
+
constructor() {
|
|
50
|
+
this.templates = /* @__PURE__ */ new Map();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get singleton instance
|
|
54
|
+
*/
|
|
55
|
+
static getInstance() {
|
|
56
|
+
if (!_TemplateRegistry.instance) {
|
|
57
|
+
_TemplateRegistry.instance = new _TemplateRegistry();
|
|
58
|
+
}
|
|
59
|
+
return _TemplateRegistry.instance;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Register a template
|
|
63
|
+
*/
|
|
64
|
+
register(template) {
|
|
65
|
+
if (this.templates.has(template.id)) {
|
|
66
|
+
console.warn(`Template "${template.id}" is already registered. Overwriting.`);
|
|
67
|
+
}
|
|
68
|
+
this.templates.set(template.id, {
|
|
69
|
+
template,
|
|
70
|
+
metadata: {
|
|
71
|
+
usageCount: 0
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Register multiple templates
|
|
77
|
+
*/
|
|
78
|
+
registerMany(templates) {
|
|
79
|
+
templates.forEach((template) => this.register(template));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get template by ID
|
|
83
|
+
*/
|
|
84
|
+
get(id) {
|
|
85
|
+
const entry = this.templates.get(id);
|
|
86
|
+
if (entry) {
|
|
87
|
+
entry.metadata.usageCount++;
|
|
88
|
+
entry.metadata.lastUsed = (/* @__PURE__ */ new Date()).toISOString();
|
|
89
|
+
return entry.template;
|
|
90
|
+
}
|
|
91
|
+
return void 0;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get all templates
|
|
95
|
+
*/
|
|
96
|
+
getAll() {
|
|
97
|
+
return Array.from(this.templates.values()).map((entry) => entry.template);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get templates by category
|
|
101
|
+
*/
|
|
102
|
+
getByCategory(category) {
|
|
103
|
+
return this.getAll().filter((template) => template.category === category);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Find templates by required components
|
|
107
|
+
* Returns templates that include ALL specified components
|
|
108
|
+
*/
|
|
109
|
+
findByRequiredComponents(components) {
|
|
110
|
+
return this.getAll().filter((template) => {
|
|
111
|
+
return components.every((component) => template.requiredComponents.includes(component));
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Search templates by keyword
|
|
116
|
+
* Searches in: id, name, description, tags
|
|
117
|
+
*/
|
|
118
|
+
search(keyword) {
|
|
119
|
+
const lowerKeyword = keyword.toLowerCase();
|
|
120
|
+
return this.getAll().filter((template) => {
|
|
121
|
+
return template.id.toLowerCase().includes(lowerKeyword) || template.name.toLowerCase().includes(lowerKeyword) || template.description.toLowerCase().includes(lowerKeyword) || template.tags?.some((tag) => tag.toLowerCase().includes(lowerKeyword));
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get template metadata
|
|
126
|
+
*/
|
|
127
|
+
getMetadata(id) {
|
|
128
|
+
return this.templates.get(id)?.metadata;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get most used templates
|
|
132
|
+
*/
|
|
133
|
+
getMostUsed(limit = 10) {
|
|
134
|
+
return Array.from(this.templates.values()).sort((a, b) => b.metadata.usageCount - a.metadata.usageCount).slice(0, limit).map((entry) => entry.template);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get recently used templates
|
|
138
|
+
*/
|
|
139
|
+
getRecentlyUsed(limit = 10) {
|
|
140
|
+
return Array.from(this.templates.values()).filter((entry) => entry.metadata.lastUsed).sort((a, b) => {
|
|
141
|
+
const dateA = new Date(a.metadata.lastUsed).getTime();
|
|
142
|
+
const dateB = new Date(b.metadata.lastUsed).getTime();
|
|
143
|
+
return dateB - dateA;
|
|
144
|
+
}).slice(0, limit).map((entry) => entry.template);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Clear all templates
|
|
148
|
+
*/
|
|
149
|
+
clear() {
|
|
150
|
+
this.templates.clear();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get template count
|
|
154
|
+
*/
|
|
155
|
+
count() {
|
|
156
|
+
return this.templates.size;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check if template exists
|
|
160
|
+
*/
|
|
161
|
+
has(id) {
|
|
162
|
+
return this.templates.has(id);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Remove template
|
|
166
|
+
*/
|
|
167
|
+
remove(id) {
|
|
168
|
+
return this.templates.delete(id);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
var templateRegistry = TemplateRegistry.getInstance();
|
|
172
|
+
|
|
173
|
+
// src/templates/create-template.ts
|
|
174
|
+
import { loadTemplateDefinition } from "@framingui/core/template-catalog";
|
|
175
|
+
var PRIMARY_SECTION_SLOTS = /* @__PURE__ */ new Set(["main", "primaryContent"]);
|
|
176
|
+
var NoopSectionComponent = () => null;
|
|
177
|
+
function toSectionTemplates(template, Component) {
|
|
178
|
+
return template.skeleton.sections.map((section) => ({
|
|
179
|
+
id: section.id,
|
|
180
|
+
name: section.name,
|
|
181
|
+
slot: section.slot,
|
|
182
|
+
required: section.required,
|
|
183
|
+
Component: PRIMARY_SECTION_SLOTS.has(section.slot) ? Component : NoopSectionComponent
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
function createTemplateFromCatalog(templateId, Component) {
|
|
187
|
+
const definition = loadTemplateDefinition(templateId);
|
|
188
|
+
if (!definition) {
|
|
189
|
+
throw new Error(`Unknown template definition: ${templateId}`);
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
id: definition.id,
|
|
193
|
+
name: definition.name,
|
|
194
|
+
category: definition.category,
|
|
195
|
+
description: definition.description,
|
|
196
|
+
skeleton: {
|
|
197
|
+
shell: definition.skeleton.shell,
|
|
198
|
+
page: definition.skeleton.page,
|
|
199
|
+
sections: toSectionTemplates(definition, Component)
|
|
200
|
+
},
|
|
201
|
+
layout: {
|
|
202
|
+
type: definition.layout.type,
|
|
203
|
+
responsive: definition.layout.responsive
|
|
204
|
+
},
|
|
205
|
+
customizable: definition.customizable,
|
|
206
|
+
requiredComponents: definition.requiredComponents,
|
|
207
|
+
Component,
|
|
208
|
+
version: definition.version,
|
|
209
|
+
created: definition.created,
|
|
210
|
+
updated: definition.updated,
|
|
211
|
+
tags: definition.tags
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// src/templates/auth/login.tsx
|
|
216
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
217
|
+
function LoginTemplateComponent({
|
|
218
|
+
children,
|
|
219
|
+
className = "",
|
|
220
|
+
slots = {},
|
|
221
|
+
texts = {},
|
|
222
|
+
options = {}
|
|
223
|
+
}) {
|
|
224
|
+
const title = texts.title || "Welcome Back";
|
|
225
|
+
const subtitle = texts.subtitle || "Sign in to your account";
|
|
226
|
+
const buttonLabel = texts.button_label || "Sign In";
|
|
227
|
+
const showSocialLogin = options.social_login ?? false;
|
|
228
|
+
const showRememberMe = options.remember_me ?? false;
|
|
229
|
+
return /* @__PURE__ */ jsxs(
|
|
230
|
+
"div",
|
|
231
|
+
{
|
|
232
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
233
|
+
children: [
|
|
234
|
+
/* @__PURE__ */ jsxs(Card, { className: "w-full max-w-md", children: [
|
|
235
|
+
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
236
|
+
slots.logo && /* @__PURE__ */ jsx("div", { className: "mb-[var(--spacing-4)]", children: slots.logo }),
|
|
237
|
+
/* @__PURE__ */ jsx(CardTitle, { children: title }),
|
|
238
|
+
/* @__PURE__ */ jsx(CardDescription, { children: subtitle })
|
|
239
|
+
] }),
|
|
240
|
+
/* @__PURE__ */ jsxs(CardContent, { className: "space-y-[var(--spacing-4)]", children: [
|
|
241
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
242
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "email", children: "Email" }),
|
|
243
|
+
/* @__PURE__ */ jsx(Input, { id: "email", type: "email", placeholder: "Enter your email" })
|
|
244
|
+
] }),
|
|
245
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
246
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
247
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "password", children: "Password" }),
|
|
248
|
+
slots.forgotPassword && /* @__PURE__ */ jsx("div", { children: slots.forgotPassword })
|
|
249
|
+
] }),
|
|
250
|
+
/* @__PURE__ */ jsx(Input, { id: "password", type: "password", placeholder: "Enter your password" })
|
|
251
|
+
] }),
|
|
252
|
+
showRememberMe && slots.rememberMe && /* @__PURE__ */ jsx("div", { className: "flex items-center space-x-[var(--spacing-2)]", children: slots.rememberMe }),
|
|
253
|
+
/* @__PURE__ */ jsx(Button, { className: "w-full", children: buttonLabel }),
|
|
254
|
+
showSocialLogin && slots.socialLogin && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
255
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
256
|
+
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx(Separator, {}) }),
|
|
257
|
+
/* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-xs uppercase", children: /* @__PURE__ */ jsx("span", { className: "bg-[var(--bg-background)] px-[var(--spacing-2)] text-[var(--text-muted-foreground)]", children: "Or continue with" }) })
|
|
258
|
+
] }),
|
|
259
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-[var(--spacing-4)]", children: slots.socialLogin })
|
|
260
|
+
] })
|
|
261
|
+
] }),
|
|
262
|
+
/* @__PURE__ */ jsx(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs("p", { className: "text-sm text-center w-full text-[var(--text-muted-foreground)]", children: [
|
|
263
|
+
"Don't have an account?",
|
|
264
|
+
" ",
|
|
265
|
+
/* @__PURE__ */ jsx("a", { href: "#", className: "text-[var(--text-primary)] hover:underline", children: "Sign up" })
|
|
266
|
+
] }) })
|
|
267
|
+
] }),
|
|
268
|
+
children
|
|
269
|
+
]
|
|
270
|
+
}
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
var LoginTemplate = createTemplateFromCatalog("auth.login", LoginTemplateComponent);
|
|
274
|
+
|
|
275
|
+
// src/templates/auth/signup.tsx
|
|
276
|
+
import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
277
|
+
function SignupTemplateComponent({
|
|
278
|
+
children,
|
|
279
|
+
className = "",
|
|
280
|
+
slots = {},
|
|
281
|
+
texts = {},
|
|
282
|
+
options = {}
|
|
283
|
+
}) {
|
|
284
|
+
const title = texts.title || "Create Account";
|
|
285
|
+
const subtitle = texts.subtitle || "Sign up to get started";
|
|
286
|
+
const buttonLabel = texts.button_label || "Sign Up";
|
|
287
|
+
const showSocialSignup = options.social_signup ?? false;
|
|
288
|
+
return /* @__PURE__ */ jsxs2(
|
|
289
|
+
"div",
|
|
290
|
+
{
|
|
291
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
292
|
+
children: [
|
|
293
|
+
/* @__PURE__ */ jsxs2(Card, { className: "w-full max-w-md", children: [
|
|
294
|
+
/* @__PURE__ */ jsxs2(CardHeader, { children: [
|
|
295
|
+
slots.logo && /* @__PURE__ */ jsx2("div", { className: "mb-[var(--spacing-4)]", children: slots.logo }),
|
|
296
|
+
/* @__PURE__ */ jsx2(CardTitle, { children: title }),
|
|
297
|
+
/* @__PURE__ */ jsx2(CardDescription, { children: subtitle })
|
|
298
|
+
] }),
|
|
299
|
+
/* @__PURE__ */ jsxs2(CardContent, { className: "space-y-[var(--spacing-4)]", children: [
|
|
300
|
+
/* @__PURE__ */ jsxs2("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
301
|
+
/* @__PURE__ */ jsx2(Label, { htmlFor: "name", children: "Name" }),
|
|
302
|
+
/* @__PURE__ */ jsx2(Input, { id: "name", type: "text", placeholder: "Enter your name" })
|
|
303
|
+
] }),
|
|
304
|
+
/* @__PURE__ */ jsxs2("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
305
|
+
/* @__PURE__ */ jsx2(Label, { htmlFor: "email", children: "Email" }),
|
|
306
|
+
/* @__PURE__ */ jsx2(Input, { id: "email", type: "email", placeholder: "Enter your email" })
|
|
307
|
+
] }),
|
|
308
|
+
/* @__PURE__ */ jsxs2("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
309
|
+
/* @__PURE__ */ jsx2(Label, { htmlFor: "password", children: "Password" }),
|
|
310
|
+
/* @__PURE__ */ jsx2(Input, { id: "password", type: "password", placeholder: "Enter your password" })
|
|
311
|
+
] }),
|
|
312
|
+
/* @__PURE__ */ jsxs2("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
313
|
+
/* @__PURE__ */ jsx2(Label, { htmlFor: "password-confirm", children: "Confirm Password" }),
|
|
314
|
+
/* @__PURE__ */ jsx2(Input, { id: "password-confirm", type: "password", placeholder: "Confirm your password" })
|
|
315
|
+
] }),
|
|
316
|
+
slots.termsCheckbox && /* @__PURE__ */ jsx2("div", { className: "flex items-start space-x-[var(--spacing-2)]", children: slots.termsCheckbox }),
|
|
317
|
+
/* @__PURE__ */ jsx2(Button, { className: "w-full", children: buttonLabel }),
|
|
318
|
+
showSocialSignup && slots.socialSignup && /* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
319
|
+
/* @__PURE__ */ jsxs2("div", { className: "relative", children: [
|
|
320
|
+
/* @__PURE__ */ jsx2("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx2(Separator, {}) }),
|
|
321
|
+
/* @__PURE__ */ jsx2("div", { className: "relative flex justify-center text-xs uppercase", children: /* @__PURE__ */ jsx2("span", { className: "bg-[var(--bg-background)] px-[var(--spacing-2)] text-[var(--text-muted-foreground)]", children: "Or sign up with" }) })
|
|
322
|
+
] }),
|
|
323
|
+
/* @__PURE__ */ jsx2("div", { className: "grid grid-cols-2 gap-[var(--spacing-4)]", children: slots.socialSignup })
|
|
324
|
+
] })
|
|
325
|
+
] }),
|
|
326
|
+
/* @__PURE__ */ jsx2(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs2("p", { className: "text-sm text-center w-full text-[var(--text-muted-foreground)]", children: [
|
|
327
|
+
"Already have an account?",
|
|
328
|
+
" ",
|
|
329
|
+
/* @__PURE__ */ jsx2("a", { href: "#", className: "text-[var(--text-primary)] hover:underline", children: "Sign in" })
|
|
330
|
+
] }) })
|
|
331
|
+
] }),
|
|
332
|
+
children
|
|
333
|
+
]
|
|
334
|
+
}
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
var SignupTemplate = createTemplateFromCatalog("auth.signup", SignupTemplateComponent);
|
|
338
|
+
|
|
339
|
+
// src/templates/auth/forgot-password.tsx
|
|
340
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
341
|
+
function ForgotPasswordTemplateComponent({
|
|
342
|
+
children,
|
|
343
|
+
className = "",
|
|
344
|
+
slots = {},
|
|
345
|
+
texts = {}
|
|
346
|
+
}) {
|
|
347
|
+
const title = texts.title || "Forgot Password?";
|
|
348
|
+
const subtitle = texts.subtitle || "Enter your email address and we'll send you a reset link";
|
|
349
|
+
const buttonLabel = texts.button_label || "Send Reset Link";
|
|
350
|
+
return /* @__PURE__ */ jsxs3(
|
|
351
|
+
"div",
|
|
352
|
+
{
|
|
353
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
354
|
+
children: [
|
|
355
|
+
/* @__PURE__ */ jsxs3(Card, { className: "w-full max-w-md", children: [
|
|
356
|
+
/* @__PURE__ */ jsxs3(CardHeader, { children: [
|
|
357
|
+
slots.logo && /* @__PURE__ */ jsx3("div", { className: "mb-[var(--spacing-4)]", children: slots.logo }),
|
|
358
|
+
/* @__PURE__ */ jsx3(CardTitle, { children: title }),
|
|
359
|
+
/* @__PURE__ */ jsx3(CardDescription, { children: subtitle })
|
|
360
|
+
] }),
|
|
361
|
+
/* @__PURE__ */ jsxs3(CardContent, { className: "space-y-[var(--spacing-4)]", children: [
|
|
362
|
+
/* @__PURE__ */ jsxs3("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
363
|
+
/* @__PURE__ */ jsx3(Label, { htmlFor: "email", children: "Email" }),
|
|
364
|
+
/* @__PURE__ */ jsx3(Input, { id: "email", type: "email", placeholder: "Enter your email" })
|
|
365
|
+
] }),
|
|
366
|
+
/* @__PURE__ */ jsx3(Button, { className: "w-full", children: buttonLabel })
|
|
367
|
+
] }),
|
|
368
|
+
/* @__PURE__ */ jsx3(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs3("p", { className: "text-sm text-center w-full text-[var(--text-muted-foreground)]", children: [
|
|
369
|
+
"Remember your password?",
|
|
370
|
+
" ",
|
|
371
|
+
/* @__PURE__ */ jsx3("a", { href: "#", className: "text-[var(--text-primary)] hover:underline", children: "Back to login" })
|
|
372
|
+
] }) })
|
|
373
|
+
] }),
|
|
374
|
+
children
|
|
375
|
+
]
|
|
376
|
+
}
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
var ForgotPasswordTemplate = createTemplateFromCatalog(
|
|
380
|
+
"auth.forgot-password",
|
|
381
|
+
ForgotPasswordTemplateComponent
|
|
382
|
+
);
|
|
383
|
+
|
|
384
|
+
// src/templates/auth/verification.tsx
|
|
385
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
386
|
+
function VerificationTemplateComponent({
|
|
387
|
+
children,
|
|
388
|
+
className = "",
|
|
389
|
+
slots = {},
|
|
390
|
+
texts = {},
|
|
391
|
+
options = {}
|
|
392
|
+
}) {
|
|
393
|
+
const title = texts.title || "Verify Your Email";
|
|
394
|
+
const subtitle = texts.subtitle || "We've sent a verification link to your email address";
|
|
395
|
+
const buttonLabel = texts.button_label || "Continue";
|
|
396
|
+
const showResend = options.show_resend ?? true;
|
|
397
|
+
const userEmail = options.user_email || "user@example.com";
|
|
398
|
+
return /* @__PURE__ */ jsxs4(
|
|
399
|
+
"div",
|
|
400
|
+
{
|
|
401
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
402
|
+
children: [
|
|
403
|
+
/* @__PURE__ */ jsxs4(Card, { className: "w-full max-w-md", children: [
|
|
404
|
+
/* @__PURE__ */ jsxs4(CardHeader, { children: [
|
|
405
|
+
slots.icon && /* @__PURE__ */ jsx4("div", { className: "mb-[var(--spacing-4)]", children: slots.icon }),
|
|
406
|
+
/* @__PURE__ */ jsx4(CardTitle, { children: title }),
|
|
407
|
+
/* @__PURE__ */ jsx4(CardDescription, { children: subtitle })
|
|
408
|
+
] }),
|
|
409
|
+
/* @__PURE__ */ jsxs4(CardContent, { className: "space-y-[var(--spacing-4)]", children: [
|
|
410
|
+
/* @__PURE__ */ jsx4("div", { className: "bg-[var(--bg-muted)] p-[var(--spacing-3)] rounded-[var(--radius-md)] text-center", children: /* @__PURE__ */ jsx4("p", { className: "text-sm font-medium", children: userEmail }) }),
|
|
411
|
+
/* @__PURE__ */ jsx4(Button, { className: "w-full", children: buttonLabel }),
|
|
412
|
+
showResend && /* @__PURE__ */ jsx4("div", { className: "text-center", children: /* @__PURE__ */ jsxs4("p", { className: "text-sm text-[var(--text-muted-foreground)]", children: [
|
|
413
|
+
"Didn't receive the email?",
|
|
414
|
+
" ",
|
|
415
|
+
/* @__PURE__ */ jsx4("button", { className: "text-[var(--text-primary)] hover:underline", children: "Resend" })
|
|
416
|
+
] }) })
|
|
417
|
+
] }),
|
|
418
|
+
/* @__PURE__ */ jsx4(CardFooter, { children: slots.footer || /* @__PURE__ */ jsxs4("p", { className: "text-sm text-center w-full text-[var(--text-muted-foreground)]", children: [
|
|
419
|
+
"Wrong email?",
|
|
420
|
+
" ",
|
|
421
|
+
/* @__PURE__ */ jsx4("a", { href: "#", className: "text-[var(--text-primary)] hover:underline", children: "Change email address" })
|
|
422
|
+
] }) })
|
|
423
|
+
] }),
|
|
424
|
+
children
|
|
425
|
+
]
|
|
426
|
+
}
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
var VerificationTemplate = createTemplateFromCatalog(
|
|
430
|
+
"auth.verification",
|
|
431
|
+
VerificationTemplateComponent
|
|
432
|
+
);
|
|
433
|
+
|
|
434
|
+
// src/templates/core/landing.tsx
|
|
435
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
436
|
+
function LandingTemplateComponent({
|
|
437
|
+
children,
|
|
438
|
+
className = "",
|
|
439
|
+
slots = {},
|
|
440
|
+
texts = {}
|
|
441
|
+
}) {
|
|
442
|
+
const title = texts.title || "Welcome Back";
|
|
443
|
+
const subtitle = texts.subtitle || "Start a new conversation or continue where you left off";
|
|
444
|
+
const ctaLabel = texts.cta_label || "New Conversation";
|
|
445
|
+
return /* @__PURE__ */ jsxs5("div", { className: `min-h-screen flex ${className}`, children: [
|
|
446
|
+
slots.sidebar && /* @__PURE__ */ jsx5("aside", { className: "w-64 border-r border-[var(--border-default)] bg-[var(--bg-muted)]", children: slots.sidebar }),
|
|
447
|
+
/* @__PURE__ */ jsxs5("main", { className: "flex-1 flex flex-col", children: [
|
|
448
|
+
slots.header && /* @__PURE__ */ jsx5("header", { className: "border-b border-[var(--border-default)] p-[var(--spacing-4)]", children: slots.header }),
|
|
449
|
+
/* @__PURE__ */ jsx5("div", { className: "flex-1 flex flex-col items-center justify-center p-[var(--spacing-8)]", children: /* @__PURE__ */ jsxs5("div", { className: "max-w-2xl w-full text-center space-y-[var(--spacing-6)]", children: [
|
|
450
|
+
/* @__PURE__ */ jsxs5("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
451
|
+
/* @__PURE__ */ jsx5("h1", { className: "text-3xl font-bold", children: title }),
|
|
452
|
+
/* @__PURE__ */ jsx5("p", { className: "text-[var(--text-muted-foreground)]", children: subtitle })
|
|
453
|
+
] }),
|
|
454
|
+
/* @__PURE__ */ jsx5("div", { children: /* @__PURE__ */ jsx5(Button, { size: "lg", children: ctaLabel }) }),
|
|
455
|
+
slots.recentActivity && /* @__PURE__ */ jsx5("div", { className: "mt-[var(--spacing-8)]", children: slots.recentActivity }),
|
|
456
|
+
slots.suggestions && /* @__PURE__ */ jsx5("div", { className: "mt-[var(--spacing-6)]", children: slots.suggestions })
|
|
457
|
+
] }) })
|
|
458
|
+
] }),
|
|
459
|
+
children
|
|
460
|
+
] });
|
|
461
|
+
}
|
|
462
|
+
var LandingTemplate = createTemplateFromCatalog("core.landing", LandingTemplateComponent);
|
|
463
|
+
|
|
464
|
+
// src/templates/core/preferences.tsx
|
|
465
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
466
|
+
function PreferencesTemplateComponent({
|
|
467
|
+
children,
|
|
468
|
+
className = "",
|
|
469
|
+
slots = {},
|
|
470
|
+
texts = {}
|
|
471
|
+
}) {
|
|
472
|
+
const title = texts.title || "Preferences";
|
|
473
|
+
const subtitle = texts.subtitle || "Manage your account settings and preferences";
|
|
474
|
+
const saveLabel = texts.save_label || "Save Changes";
|
|
475
|
+
return /* @__PURE__ */ jsxs6("div", { className: `min-h-screen flex ${className}`, children: [
|
|
476
|
+
slots.settingsNav && /* @__PURE__ */ jsx6("aside", { className: "w-64 border-r border-[var(--border-default)] p-[var(--spacing-4)] bg-[var(--bg-muted)]", children: slots.settingsNav }),
|
|
477
|
+
/* @__PURE__ */ jsx6("main", { className: "flex-1 p-[var(--spacing-8)]", children: /* @__PURE__ */ jsxs6("div", { className: "max-w-3xl", children: [
|
|
478
|
+
/* @__PURE__ */ jsxs6("div", { className: "mb-[var(--spacing-8)]", children: [
|
|
479
|
+
/* @__PURE__ */ jsx6("h1", { className: "text-3xl font-bold mb-[var(--spacing-2)]", children: title }),
|
|
480
|
+
/* @__PURE__ */ jsx6("p", { className: "text-[var(--text-muted-foreground)]", children: subtitle })
|
|
481
|
+
] }),
|
|
482
|
+
/* @__PURE__ */ jsxs6("div", { className: "space-y-[var(--spacing-6)]", children: [
|
|
483
|
+
slots.generalSettings && /* @__PURE__ */ jsxs6(Card, { children: [
|
|
484
|
+
/* @__PURE__ */ jsxs6(CardHeader, { children: [
|
|
485
|
+
/* @__PURE__ */ jsx6(CardTitle, { children: "General" }),
|
|
486
|
+
/* @__PURE__ */ jsx6(CardDescription, { children: "Manage your general preferences" })
|
|
487
|
+
] }),
|
|
488
|
+
/* @__PURE__ */ jsx6(CardContent, { children: slots.generalSettings })
|
|
489
|
+
] }),
|
|
490
|
+
slots.appearanceSettings && /* @__PURE__ */ jsxs6(Card, { children: [
|
|
491
|
+
/* @__PURE__ */ jsxs6(CardHeader, { children: [
|
|
492
|
+
/* @__PURE__ */ jsx6(CardTitle, { children: "Appearance" }),
|
|
493
|
+
/* @__PURE__ */ jsx6(CardDescription, { children: "Customize the look and feel" })
|
|
494
|
+
] }),
|
|
495
|
+
/* @__PURE__ */ jsx6(CardContent, { children: slots.appearanceSettings })
|
|
496
|
+
] }),
|
|
497
|
+
slots.notificationsSettings && /* @__PURE__ */ jsxs6(Card, { children: [
|
|
498
|
+
/* @__PURE__ */ jsxs6(CardHeader, { children: [
|
|
499
|
+
/* @__PURE__ */ jsx6(CardTitle, { children: "Notifications" }),
|
|
500
|
+
/* @__PURE__ */ jsx6(CardDescription, { children: "Manage notification preferences" })
|
|
501
|
+
] }),
|
|
502
|
+
/* @__PURE__ */ jsx6(CardContent, { children: slots.notificationsSettings })
|
|
503
|
+
] }),
|
|
504
|
+
slots.additionalSettings && slots.additionalSettings
|
|
505
|
+
] }),
|
|
506
|
+
/* @__PURE__ */ jsxs6("div", { className: "mt-[var(--spacing-8)] flex justify-end gap-[var(--spacing-4)]", children: [
|
|
507
|
+
/* @__PURE__ */ jsx6(Button, { variant: "outline", children: "Cancel" }),
|
|
508
|
+
/* @__PURE__ */ jsx6(Button, { children: saveLabel })
|
|
509
|
+
] })
|
|
510
|
+
] }) }),
|
|
511
|
+
children
|
|
512
|
+
] });
|
|
513
|
+
}
|
|
514
|
+
var PreferencesTemplate = createTemplateFromCatalog(
|
|
515
|
+
"core.preferences",
|
|
516
|
+
PreferencesTemplateComponent
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
// src/templates/core/profile.tsx
|
|
520
|
+
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
521
|
+
function ProfileTemplateComponent({
|
|
522
|
+
children,
|
|
523
|
+
className = "",
|
|
524
|
+
slots = {},
|
|
525
|
+
texts = {},
|
|
526
|
+
options = {}
|
|
527
|
+
}) {
|
|
528
|
+
const title = texts.title || "Profile";
|
|
529
|
+
const subtitle = texts.subtitle || "Manage your profile information";
|
|
530
|
+
const saveLabel = texts.save_label || "Save Changes";
|
|
531
|
+
const userName = String(options.user_name || "John Doe");
|
|
532
|
+
const userEmail = String(options.user_email || "john@example.com");
|
|
533
|
+
return /* @__PURE__ */ jsxs7("div", { className: `min-h-screen p-[var(--spacing-8)] ${className}`, children: [
|
|
534
|
+
/* @__PURE__ */ jsxs7("div", { className: "max-w-3xl mx-auto", children: [
|
|
535
|
+
/* @__PURE__ */ jsxs7("div", { className: "mb-[var(--spacing-8)]", children: [
|
|
536
|
+
/* @__PURE__ */ jsx7("h1", { className: "text-3xl font-bold mb-[var(--spacing-2)]", children: title }),
|
|
537
|
+
/* @__PURE__ */ jsx7("p", { className: "text-[var(--text-muted-foreground)]", children: subtitle })
|
|
538
|
+
] }),
|
|
539
|
+
/* @__PURE__ */ jsxs7(Card, { children: [
|
|
540
|
+
/* @__PURE__ */ jsxs7(CardHeader, { children: [
|
|
541
|
+
/* @__PURE__ */ jsx7(CardTitle, { children: "Personal Information" }),
|
|
542
|
+
/* @__PURE__ */ jsx7(CardDescription, { children: "Update your profile details" })
|
|
543
|
+
] }),
|
|
544
|
+
/* @__PURE__ */ jsxs7(CardContent, { className: "space-y-[var(--spacing-6)]", children: [
|
|
545
|
+
slots.avatar && /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-[var(--spacing-4)]", children: [
|
|
546
|
+
/* @__PURE__ */ jsx7("div", { children: slots.avatar }),
|
|
547
|
+
/* @__PURE__ */ jsxs7("div", { children: [
|
|
548
|
+
/* @__PURE__ */ jsx7(Button, { variant: "outline", size: "sm", children: "Change Photo" }),
|
|
549
|
+
/* @__PURE__ */ jsx7("p", { className: "text-xs text-[var(--text-muted-foreground)] mt-[var(--spacing-2)]", children: "JPG, PNG. Max 2MB" })
|
|
550
|
+
] })
|
|
551
|
+
] }),
|
|
552
|
+
/* @__PURE__ */ jsxs7("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
553
|
+
/* @__PURE__ */ jsx7(Label, { htmlFor: "name", children: "Name" }),
|
|
554
|
+
/* @__PURE__ */ jsx7(Input, { id: "name", type: "text", defaultValue: userName })
|
|
555
|
+
] }),
|
|
556
|
+
/* @__PURE__ */ jsxs7("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
557
|
+
/* @__PURE__ */ jsx7(Label, { htmlFor: "email", children: "Email" }),
|
|
558
|
+
/* @__PURE__ */ jsx7(Input, { id: "email", type: "email", defaultValue: userEmail, disabled: true }),
|
|
559
|
+
/* @__PURE__ */ jsx7("p", { className: "text-xs text-[var(--text-muted-foreground)]", children: "Contact support to change your email address" })
|
|
560
|
+
] }),
|
|
561
|
+
slots.bioField && /* @__PURE__ */ jsx7("div", { className: "space-y-[var(--spacing-2)]", children: slots.bioField }),
|
|
562
|
+
slots.additionalFields && slots.additionalFields
|
|
563
|
+
] })
|
|
564
|
+
] }),
|
|
565
|
+
slots.additionalSections && /* @__PURE__ */ jsx7("div", { className: "mt-[var(--spacing-6)]", children: slots.additionalSections }),
|
|
566
|
+
/* @__PURE__ */ jsxs7("div", { className: "mt-[var(--spacing-8)] flex justify-end gap-[var(--spacing-4)]", children: [
|
|
567
|
+
/* @__PURE__ */ jsx7(Button, { variant: "outline", children: "Cancel" }),
|
|
568
|
+
/* @__PURE__ */ jsx7(Button, { children: saveLabel })
|
|
569
|
+
] })
|
|
570
|
+
] }),
|
|
571
|
+
children
|
|
572
|
+
] });
|
|
573
|
+
}
|
|
574
|
+
var ProfileTemplate = createTemplateFromCatalog("core.profile", ProfileTemplateComponent);
|
|
575
|
+
|
|
576
|
+
// src/templates/feedback/loading.tsx
|
|
577
|
+
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
578
|
+
function LoadingTemplateComponent({
|
|
579
|
+
children,
|
|
580
|
+
className = "",
|
|
581
|
+
slots = {},
|
|
582
|
+
texts = {},
|
|
583
|
+
options = {}
|
|
584
|
+
}) {
|
|
585
|
+
const message = texts.message || "Loading...";
|
|
586
|
+
const showMessage = options.show_message ?? true;
|
|
587
|
+
return /* @__PURE__ */ jsxs8(
|
|
588
|
+
"div",
|
|
589
|
+
{
|
|
590
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
591
|
+
children: [
|
|
592
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex flex-col items-center gap-[var(--spacing-4)]", children: [
|
|
593
|
+
slots.spinner || /* @__PURE__ */ jsx8("div", { className: "animate-spin rounded-full h-12 w-12 border-b-2 border-[var(--border-primary)]" }),
|
|
594
|
+
showMessage && /* @__PURE__ */ jsx8("p", { className: "text-sm text-[var(--text-muted-foreground)]", children: message })
|
|
595
|
+
] }),
|
|
596
|
+
children
|
|
597
|
+
]
|
|
598
|
+
}
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
var LoadingTemplate = createTemplateFromCatalog(
|
|
602
|
+
"feedback.loading",
|
|
603
|
+
LoadingTemplateComponent
|
|
604
|
+
);
|
|
605
|
+
|
|
606
|
+
// src/templates/feedback/error.tsx
|
|
607
|
+
import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
608
|
+
function ErrorTemplateComponent({
|
|
609
|
+
children,
|
|
610
|
+
className = "",
|
|
611
|
+
slots = {},
|
|
612
|
+
texts = {},
|
|
613
|
+
options = {}
|
|
614
|
+
}) {
|
|
615
|
+
const title = texts.title || "Something Went Wrong";
|
|
616
|
+
const message = texts.message || "An error occurred. Please try again.";
|
|
617
|
+
const retryLabel = texts.retry_label || "Try Again";
|
|
618
|
+
const showRetry = options.show_retry ?? true;
|
|
619
|
+
return /* @__PURE__ */ jsxs9(
|
|
620
|
+
"div",
|
|
621
|
+
{
|
|
622
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
623
|
+
children: [
|
|
624
|
+
/* @__PURE__ */ jsxs9("div", { className: "max-w-md text-center space-y-[var(--spacing-6)]", children: [
|
|
625
|
+
slots.icon || /* @__PURE__ */ jsx9("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx9("div", { className: "rounded-full bg-[var(--bg-destructive)] bg-opacity-10 p-[var(--spacing-4)]", children: /* @__PURE__ */ jsx9(
|
|
626
|
+
"svg",
|
|
627
|
+
{
|
|
628
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
629
|
+
className: "h-12 w-12 text-[var(--text-destructive)]",
|
|
630
|
+
fill: "none",
|
|
631
|
+
viewBox: "0 0 24 24",
|
|
632
|
+
stroke: "currentColor",
|
|
633
|
+
children: /* @__PURE__ */ jsx9(
|
|
634
|
+
"path",
|
|
635
|
+
{
|
|
636
|
+
strokeLinecap: "round",
|
|
637
|
+
strokeLinejoin: "round",
|
|
638
|
+
strokeWidth: 2,
|
|
639
|
+
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
640
|
+
}
|
|
641
|
+
)
|
|
642
|
+
}
|
|
643
|
+
) }) }),
|
|
644
|
+
/* @__PURE__ */ jsxs9("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
645
|
+
/* @__PURE__ */ jsx9("h2", { className: "text-2xl font-bold", children: title }),
|
|
646
|
+
/* @__PURE__ */ jsx9("p", { className: "text-[var(--text-muted-foreground)]", children: message })
|
|
647
|
+
] }),
|
|
648
|
+
slots.errorDetails && /* @__PURE__ */ jsx9("div", { className: "text-left bg-[var(--bg-muted)] p-[var(--spacing-4)] rounded-[var(--radius-md)] text-sm", children: slots.errorDetails }),
|
|
649
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex flex-col gap-[var(--spacing-3)]", children: [
|
|
650
|
+
showRetry && /* @__PURE__ */ jsx9(Button, { className: "w-full", children: retryLabel }),
|
|
651
|
+
slots.additionalActions && slots.additionalActions
|
|
652
|
+
] })
|
|
653
|
+
] }),
|
|
654
|
+
children
|
|
655
|
+
]
|
|
656
|
+
}
|
|
657
|
+
);
|
|
658
|
+
}
|
|
659
|
+
var ErrorTemplate = createTemplateFromCatalog("feedback.error", ErrorTemplateComponent);
|
|
660
|
+
|
|
661
|
+
// src/templates/feedback/empty.tsx
|
|
662
|
+
import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
663
|
+
function EmptyTemplateComponent({
|
|
664
|
+
children,
|
|
665
|
+
className = "",
|
|
666
|
+
slots = {},
|
|
667
|
+
texts = {},
|
|
668
|
+
options = {}
|
|
669
|
+
}) {
|
|
670
|
+
const title = texts.title || "No Items Found";
|
|
671
|
+
const message = texts.message || "Get started by creating your first item";
|
|
672
|
+
const ctaLabel = texts.cta_label || "Create New";
|
|
673
|
+
const showCta = options.show_cta ?? true;
|
|
674
|
+
return /* @__PURE__ */ jsxs10(
|
|
675
|
+
"div",
|
|
676
|
+
{
|
|
677
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
678
|
+
children: [
|
|
679
|
+
/* @__PURE__ */ jsxs10("div", { className: "max-w-md text-center space-y-[var(--spacing-6)]", children: [
|
|
680
|
+
slots.illustration || /* @__PURE__ */ jsx10("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx10("div", { className: "rounded-full bg-[var(--bg-muted)] p-[var(--spacing-8)]", children: /* @__PURE__ */ jsx10(
|
|
681
|
+
"svg",
|
|
682
|
+
{
|
|
683
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
684
|
+
className: "h-16 w-16 text-[var(--text-muted-foreground)]",
|
|
685
|
+
fill: "none",
|
|
686
|
+
viewBox: "0 0 24 24",
|
|
687
|
+
stroke: "currentColor",
|
|
688
|
+
children: /* @__PURE__ */ jsx10(
|
|
689
|
+
"path",
|
|
690
|
+
{
|
|
691
|
+
strokeLinecap: "round",
|
|
692
|
+
strokeLinejoin: "round",
|
|
693
|
+
strokeWidth: 2,
|
|
694
|
+
d: "M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"
|
|
695
|
+
}
|
|
696
|
+
)
|
|
697
|
+
}
|
|
698
|
+
) }) }),
|
|
699
|
+
/* @__PURE__ */ jsxs10("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
700
|
+
/* @__PURE__ */ jsx10("h2", { className: "text-2xl font-bold", children: title }),
|
|
701
|
+
/* @__PURE__ */ jsx10("p", { className: "text-[var(--text-muted-foreground)]", children: message })
|
|
702
|
+
] }),
|
|
703
|
+
showCta && /* @__PURE__ */ jsx10("div", { children: /* @__PURE__ */ jsx10(Button, { size: "lg", children: ctaLabel }) }),
|
|
704
|
+
slots.helpText && /* @__PURE__ */ jsx10("div", { className: "text-sm text-[var(--text-muted-foreground)]", children: slots.helpText })
|
|
705
|
+
] }),
|
|
706
|
+
children
|
|
707
|
+
]
|
|
708
|
+
}
|
|
709
|
+
);
|
|
710
|
+
}
|
|
711
|
+
var EmptyTemplate = createTemplateFromCatalog("feedback.empty", EmptyTemplateComponent);
|
|
712
|
+
|
|
713
|
+
// src/templates/feedback/confirmation.tsx
|
|
714
|
+
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
715
|
+
function ConfirmationTemplateComponent({
|
|
716
|
+
children,
|
|
717
|
+
className = "",
|
|
718
|
+
slots = {},
|
|
719
|
+
texts = {},
|
|
720
|
+
options = {}
|
|
721
|
+
}) {
|
|
722
|
+
const title = texts.title || "Are You Sure?";
|
|
723
|
+
const message = texts.message || "This action cannot be undone.";
|
|
724
|
+
const confirmLabel = texts.confirm_label || "Confirm";
|
|
725
|
+
const cancelLabel = texts.cancel_label || "Cancel";
|
|
726
|
+
const isDestructive = options.is_destructive ?? false;
|
|
727
|
+
return /* @__PURE__ */ jsxs11(
|
|
728
|
+
"div",
|
|
729
|
+
{
|
|
730
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
731
|
+
children: [
|
|
732
|
+
/* @__PURE__ */ jsxs11(Card, { className: "w-full max-w-md", children: [
|
|
733
|
+
/* @__PURE__ */ jsxs11(CardHeader, { children: [
|
|
734
|
+
isDestructive && slots.warningIcon && /* @__PURE__ */ jsx11("div", { className: "mb-[var(--spacing-2)]", children: slots.warningIcon }),
|
|
735
|
+
/* @__PURE__ */ jsx11(CardTitle, { children: title }),
|
|
736
|
+
/* @__PURE__ */ jsx11(CardDescription, { children: message })
|
|
737
|
+
] }),
|
|
738
|
+
/* @__PURE__ */ jsx11(CardContent, { children: slots.details && /* @__PURE__ */ jsx11("div", { className: "bg-[var(--bg-muted)] p-[var(--spacing-4)] rounded-[var(--radius-md)] text-sm", children: slots.details }) }),
|
|
739
|
+
/* @__PURE__ */ jsxs11(CardFooter, { className: "flex justify-end gap-[var(--spacing-3)]", children: [
|
|
740
|
+
/* @__PURE__ */ jsx11(Button, { variant: "outline", children: cancelLabel }),
|
|
741
|
+
/* @__PURE__ */ jsx11(Button, { variant: isDestructive ? "destructive" : "default", children: confirmLabel })
|
|
742
|
+
] })
|
|
743
|
+
] }),
|
|
744
|
+
children
|
|
745
|
+
]
|
|
746
|
+
}
|
|
747
|
+
);
|
|
748
|
+
}
|
|
749
|
+
var ConfirmationTemplate = createTemplateFromCatalog(
|
|
750
|
+
"feedback.confirmation",
|
|
751
|
+
ConfirmationTemplateComponent
|
|
752
|
+
);
|
|
753
|
+
|
|
754
|
+
// src/templates/feedback/success.tsx
|
|
755
|
+
import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
756
|
+
function SuccessTemplateComponent({
|
|
757
|
+
children,
|
|
758
|
+
className = "",
|
|
759
|
+
slots = {},
|
|
760
|
+
texts = {},
|
|
761
|
+
options = {}
|
|
762
|
+
}) {
|
|
763
|
+
const title = texts.title || "Success!";
|
|
764
|
+
const message = texts.message || "Your action was completed successfully";
|
|
765
|
+
const ctaLabel = texts.cta_label || "Continue";
|
|
766
|
+
const showCta = options.show_cta ?? true;
|
|
767
|
+
return /* @__PURE__ */ jsxs12(
|
|
768
|
+
"div",
|
|
769
|
+
{
|
|
770
|
+
className: `min-h-screen flex items-center justify-center p-[var(--spacing-4)] ${className}`,
|
|
771
|
+
children: [
|
|
772
|
+
/* @__PURE__ */ jsxs12("div", { className: "max-w-md text-center space-y-[var(--spacing-6)]", children: [
|
|
773
|
+
slots.icon || /* @__PURE__ */ jsx12("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx12("div", { className: "rounded-full bg-[var(--bg-success)] bg-opacity-10 p-[var(--spacing-4)]", children: /* @__PURE__ */ jsx12(
|
|
774
|
+
"svg",
|
|
775
|
+
{
|
|
776
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
777
|
+
className: "h-12 w-12 text-[var(--text-success)]",
|
|
778
|
+
fill: "none",
|
|
779
|
+
viewBox: "0 0 24 24",
|
|
780
|
+
stroke: "currentColor",
|
|
781
|
+
children: /* @__PURE__ */ jsx12(
|
|
782
|
+
"path",
|
|
783
|
+
{
|
|
784
|
+
strokeLinecap: "round",
|
|
785
|
+
strokeLinejoin: "round",
|
|
786
|
+
strokeWidth: 2,
|
|
787
|
+
d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
788
|
+
}
|
|
789
|
+
)
|
|
790
|
+
}
|
|
791
|
+
) }) }),
|
|
792
|
+
/* @__PURE__ */ jsxs12("div", { className: "space-y-[var(--spacing-2)]", children: [
|
|
793
|
+
/* @__PURE__ */ jsx12("h2", { className: "text-2xl font-bold", children: title }),
|
|
794
|
+
/* @__PURE__ */ jsx12("p", { className: "text-[var(--text-muted-foreground)]", children: message })
|
|
795
|
+
] }),
|
|
796
|
+
slots.details && /* @__PURE__ */ jsx12("div", { className: "text-left bg-[var(--bg-muted)] p-[var(--spacing-4)] rounded-[var(--radius-md)] text-sm", children: slots.details }),
|
|
797
|
+
showCta && /* @__PURE__ */ jsx12("div", { children: /* @__PURE__ */ jsx12(Button, { className: "w-full", size: "lg", children: ctaLabel }) }),
|
|
798
|
+
slots.additionalActions && /* @__PURE__ */ jsx12("div", { className: "flex flex-col gap-[var(--spacing-3)]", children: slots.additionalActions })
|
|
799
|
+
] }),
|
|
800
|
+
children
|
|
801
|
+
]
|
|
802
|
+
}
|
|
803
|
+
);
|
|
804
|
+
}
|
|
805
|
+
var SuccessTemplate = createTemplateFromCatalog(
|
|
806
|
+
"feedback.success",
|
|
807
|
+
SuccessTemplateComponent
|
|
808
|
+
);
|
|
809
|
+
|
|
810
|
+
// src/templates/dashboard/overview.tsx
|
|
811
|
+
import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
812
|
+
function DashboardTemplateComponent({
|
|
813
|
+
children,
|
|
814
|
+
className = "",
|
|
815
|
+
slots = {},
|
|
816
|
+
texts = {}
|
|
817
|
+
}) {
|
|
818
|
+
const title = texts.title || "Dashboard";
|
|
819
|
+
const subtitle = texts.subtitle || "Welcome to your dashboard";
|
|
820
|
+
return /* @__PURE__ */ jsxs13("div", { className: `min-h-screen flex ${className}`, children: [
|
|
821
|
+
slots.sidebar && /* @__PURE__ */ jsx13("aside", { className: "w-64 border-r border-[var(--border-default)] bg-[var(--bg-card)] hidden lg:block", children: slots.sidebar }),
|
|
822
|
+
/* @__PURE__ */ jsxs13("main", { className: "flex-1 overflow-auto bg-[var(--bg-background)]", children: [
|
|
823
|
+
/* @__PURE__ */ jsx13("header", { className: "sticky top-0 z-10 border-b border-[var(--border-default)] bg-[var(--bg-background)]/80 backdrop-blur-md p-[var(--spacing-4)]", children: /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-between", children: [
|
|
824
|
+
/* @__PURE__ */ jsxs13("div", { children: [
|
|
825
|
+
/* @__PURE__ */ jsx13("h1", { className: "text-2xl font-bold text-[var(--text-foreground)]", children: title }),
|
|
826
|
+
/* @__PURE__ */ jsx13("p", { className: "text-sm text-[var(--text-muted-foreground)]", children: subtitle })
|
|
827
|
+
] }),
|
|
828
|
+
slots.headerActions && /* @__PURE__ */ jsx13("div", { children: slots.headerActions })
|
|
829
|
+
] }) }),
|
|
830
|
+
/* @__PURE__ */ jsxs13("div", { className: "py-[var(--layout-section-py,var(--spacing-6))] px-[var(--layout-container-px,var(--spacing-6))] space-y-[var(--layout-stack-gap,var(--spacing-6))] max-w-[var(--layout-container-xl)] mx-auto", children: [
|
|
831
|
+
slots.metrics && /* @__PURE__ */ jsx13("div", { className: "grid gap-[var(--spacing-4)] grid-cols-2 lg:grid-cols-4", children: slots.metrics }),
|
|
832
|
+
/* @__PURE__ */ jsx13(Separator, {}),
|
|
833
|
+
/* @__PURE__ */ jsxs13("div", { className: "grid gap-x-[var(--layout-grid-gap-x,var(--spacing-6))] gap-y-[var(--layout-grid-gap-y,var(--spacing-6))] lg:grid-cols-12", children: [
|
|
834
|
+
slots.primaryContent && /* @__PURE__ */ jsx13("div", { className: "lg:col-span-8 space-y-[var(--layout-stack-gap,var(--spacing-6))]", children: slots.primaryContent }),
|
|
835
|
+
slots.secondaryContent && /* @__PURE__ */ jsx13("div", { className: "lg:col-span-4 space-y-[var(--layout-stack-gap,var(--spacing-6))]", children: /* @__PURE__ */ jsxs13(Card, { className: "h-full", children: [
|
|
836
|
+
/* @__PURE__ */ jsxs13(CardHeader, { children: [
|
|
837
|
+
/* @__PURE__ */ jsx13(CardTitle, { children: texts.secondary_title || "Activity" }),
|
|
838
|
+
/* @__PURE__ */ jsx13(CardDescription, { children: texts.secondary_description || "Recent updates" })
|
|
839
|
+
] }),
|
|
840
|
+
/* @__PURE__ */ jsx13(CardContent, { className: "p-0", children: slots.secondaryContent })
|
|
841
|
+
] }) })
|
|
842
|
+
] }),
|
|
843
|
+
slots.additionalSections && /* @__PURE__ */ jsx13("div", { children: slots.additionalSections })
|
|
844
|
+
] })
|
|
845
|
+
] }),
|
|
846
|
+
children
|
|
847
|
+
] });
|
|
848
|
+
}
|
|
849
|
+
var DashboardTemplate = createTemplateFromCatalog(
|
|
850
|
+
"dashboard.overview",
|
|
851
|
+
DashboardTemplateComponent
|
|
852
|
+
);
|
|
853
|
+
|
|
854
|
+
// src/templates/index.ts
|
|
855
|
+
templateRegistry.registerMany([
|
|
856
|
+
// Auth
|
|
857
|
+
LoginTemplate,
|
|
858
|
+
SignupTemplate,
|
|
859
|
+
ForgotPasswordTemplate,
|
|
860
|
+
VerificationTemplate,
|
|
861
|
+
// Core
|
|
862
|
+
LandingTemplate,
|
|
863
|
+
PreferencesTemplate,
|
|
864
|
+
ProfileTemplate,
|
|
865
|
+
// Feedback
|
|
866
|
+
LoadingTemplate,
|
|
867
|
+
ErrorTemplate,
|
|
868
|
+
EmptyTemplate,
|
|
869
|
+
ConfirmationTemplate,
|
|
870
|
+
SuccessTemplate,
|
|
871
|
+
// Dashboard
|
|
872
|
+
DashboardTemplate
|
|
873
|
+
]);
|
|
874
|
+
export {
|
|
875
|
+
ConfirmationTemplate,
|
|
876
|
+
ConfirmationTemplateComponent,
|
|
877
|
+
DEFAULT_BREAKPOINTS,
|
|
878
|
+
DEFAULT_RESPONSIVE_LAYOUT,
|
|
879
|
+
DashboardTemplate,
|
|
880
|
+
DashboardTemplateComponent,
|
|
881
|
+
EmptyTemplate,
|
|
882
|
+
EmptyTemplateComponent,
|
|
883
|
+
ErrorTemplate,
|
|
884
|
+
ErrorTemplateComponent,
|
|
885
|
+
ForgotPasswordTemplate,
|
|
886
|
+
ForgotPasswordTemplateComponent,
|
|
887
|
+
LandingTemplate,
|
|
888
|
+
LandingTemplateComponent,
|
|
889
|
+
LoadingTemplate,
|
|
890
|
+
LoadingTemplateComponent,
|
|
891
|
+
LoginTemplate,
|
|
892
|
+
LoginTemplateComponent,
|
|
893
|
+
PreferencesTemplate,
|
|
894
|
+
PreferencesTemplateComponent,
|
|
895
|
+
ProfileTemplate,
|
|
896
|
+
ProfileTemplateComponent,
|
|
897
|
+
SignupTemplate,
|
|
898
|
+
SignupTemplateComponent,
|
|
899
|
+
SuccessTemplate,
|
|
900
|
+
SuccessTemplateComponent,
|
|
901
|
+
TemplateRegistry,
|
|
902
|
+
VerificationTemplate,
|
|
903
|
+
VerificationTemplateComponent,
|
|
904
|
+
templateRegistry
|
|
905
|
+
};
|