@framingui/ui 0.6.2 → 0.6.3

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 (68) hide show
  1. package/README.md +22 -1090
  2. package/dist/chunk-7UBERMRE.mjs +180 -0
  3. package/dist/index.d.mts +1 -140
  4. package/dist/index.mjs +248 -1681
  5. package/dist/src/index.d.ts +0 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +0 -1
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/templates/auth/forgot-password.d.ts +2 -2
  10. package/dist/src/templates/auth/forgot-password.d.ts.map +1 -1
  11. package/dist/src/templates/auth/forgot-password.js +2 -35
  12. package/dist/src/templates/auth/forgot-password.js.map +1 -1
  13. package/dist/src/templates/auth/login.d.ts +2 -2
  14. package/dist/src/templates/auth/login.d.ts.map +1 -1
  15. package/dist/src/templates/auth/login.js +2 -35
  16. package/dist/src/templates/auth/login.js.map +1 -1
  17. package/dist/src/templates/auth/signup.d.ts +2 -2
  18. package/dist/src/templates/auth/signup.d.ts.map +1 -1
  19. package/dist/src/templates/auth/signup.js +2 -35
  20. package/dist/src/templates/auth/signup.js.map +1 -1
  21. package/dist/src/templates/auth/verification.d.ts +2 -2
  22. package/dist/src/templates/auth/verification.d.ts.map +1 -1
  23. package/dist/src/templates/auth/verification.js +2 -35
  24. package/dist/src/templates/auth/verification.js.map +1 -1
  25. package/dist/src/templates/core/landing.d.ts +2 -2
  26. package/dist/src/templates/core/landing.d.ts.map +1 -1
  27. package/dist/src/templates/core/landing.js +2 -35
  28. package/dist/src/templates/core/landing.js.map +1 -1
  29. package/dist/src/templates/core/preferences.d.ts +2 -2
  30. package/dist/src/templates/core/preferences.d.ts.map +1 -1
  31. package/dist/src/templates/core/preferences.js +2 -41
  32. package/dist/src/templates/core/preferences.js.map +1 -1
  33. package/dist/src/templates/core/profile.d.ts +2 -2
  34. package/dist/src/templates/core/profile.d.ts.map +1 -1
  35. package/dist/src/templates/core/profile.js +2 -35
  36. package/dist/src/templates/core/profile.js.map +1 -1
  37. package/dist/src/templates/create-template.d.ts +4 -0
  38. package/dist/src/templates/create-template.d.ts.map +1 -0
  39. package/dist/src/templates/create-template.js +41 -0
  40. package/dist/src/templates/create-template.js.map +1 -0
  41. package/dist/src/templates/dashboard/overview.d.ts +2 -2
  42. package/dist/src/templates/dashboard/overview.d.ts.map +1 -1
  43. package/dist/src/templates/dashboard/overview.js +2 -56
  44. package/dist/src/templates/dashboard/overview.js.map +1 -1
  45. package/dist/src/templates/feedback/confirmation.d.ts +2 -2
  46. package/dist/src/templates/feedback/confirmation.d.ts.map +1 -1
  47. package/dist/src/templates/feedback/confirmation.js +2 -35
  48. package/dist/src/templates/feedback/confirmation.js.map +1 -1
  49. package/dist/src/templates/feedback/empty.d.ts +2 -2
  50. package/dist/src/templates/feedback/empty.d.ts.map +1 -1
  51. package/dist/src/templates/feedback/empty.js +2 -35
  52. package/dist/src/templates/feedback/empty.js.map +1 -1
  53. package/dist/src/templates/feedback/error.d.ts +2 -2
  54. package/dist/src/templates/feedback/error.d.ts.map +1 -1
  55. package/dist/src/templates/feedback/error.js +2 -35
  56. package/dist/src/templates/feedback/error.js.map +1 -1
  57. package/dist/src/templates/feedback/loading.d.ts +2 -2
  58. package/dist/src/templates/feedback/loading.d.ts.map +1 -1
  59. package/dist/src/templates/feedback/loading.js +2 -35
  60. package/dist/src/templates/feedback/loading.js.map +1 -1
  61. package/dist/src/templates/feedback/success.d.ts +2 -2
  62. package/dist/src/templates/feedback/success.d.ts.map +1 -1
  63. package/dist/src/templates/feedback/success.js +2 -35
  64. package/dist/src/templates/feedback/success.js.map +1 -1
  65. package/dist/templates/index.d.mts +142 -0
  66. package/dist/templates/index.mjs +905 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +6 -1
@@ -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-7UBERMRE.mjs";
14
+
15
+ // src/templates/types.ts
16
+ var DEFAULT_RESPONSIVE_LAYOUT = {
17
+ mobile: {
18
+ padding: "var(--tekton-layout-padding-mobile)",
19
+ // 16px
20
+ gap: "var(--tekton-layout-gap-mobile)",
21
+ // 16px
22
+ columns: 4
23
+ },
24
+ tablet: {
25
+ padding: "var(--tekton-layout-padding-tablet)",
26
+ // 32px
27
+ gap: "var(--tekton-layout-gap-tablet)",
28
+ // 24px
29
+ columns: 8
30
+ },
31
+ desktop: {
32
+ padding: "var(--tekton-layout-padding-desktop)",
33
+ // 64px
34
+ gap: "var(--tekton-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(--tekton-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(--tekton-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(--tekton-spacing-4)]", children: [
241
+ /* @__PURE__ */ jsxs("div", { className: "space-y-[var(--tekton-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(--tekton-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(--tekton-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(--tekton-bg-background)] px-[var(--tekton-spacing-2)] text-[var(--tekton-text-muted-foreground)]", children: "Or continue with" }) })
258
+ ] }),
259
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-[var(--tekton-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(--tekton-text-muted-foreground)]", children: [
263
+ "Don't have an account?",
264
+ " ",
265
+ /* @__PURE__ */ jsx("a", { href: "#", className: "text-[var(--tekton-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(--tekton-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(--tekton-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(--tekton-spacing-4)]", children: [
300
+ /* @__PURE__ */ jsxs2("div", { className: "space-y-[var(--tekton-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(--tekton-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(--tekton-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(--tekton-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(--tekton-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(--tekton-bg-background)] px-[var(--tekton-spacing-2)] text-[var(--tekton-text-muted-foreground)]", children: "Or sign up with" }) })
322
+ ] }),
323
+ /* @__PURE__ */ jsx2("div", { className: "grid grid-cols-2 gap-[var(--tekton-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(--tekton-text-muted-foreground)]", children: [
327
+ "Already have an account?",
328
+ " ",
329
+ /* @__PURE__ */ jsx2("a", { href: "#", className: "text-[var(--tekton-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(--tekton-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(--tekton-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(--tekton-spacing-4)]", children: [
362
+ /* @__PURE__ */ jsxs3("div", { className: "space-y-[var(--tekton-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(--tekton-text-muted-foreground)]", children: [
369
+ "Remember your password?",
370
+ " ",
371
+ /* @__PURE__ */ jsx3("a", { href: "#", className: "text-[var(--tekton-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(--tekton-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(--tekton-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(--tekton-spacing-4)]", children: [
410
+ /* @__PURE__ */ jsx4("div", { className: "bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-3)] rounded-[var(--tekton-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(--tekton-text-muted-foreground)]", children: [
413
+ "Didn't receive the email?",
414
+ " ",
415
+ /* @__PURE__ */ jsx4("button", { className: "text-[var(--tekton-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(--tekton-text-muted-foreground)]", children: [
419
+ "Wrong email?",
420
+ " ",
421
+ /* @__PURE__ */ jsx4("a", { href: "#", className: "text-[var(--tekton-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(--tekton-border-default)] bg-[var(--tekton-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(--tekton-border-default)] p-[var(--tekton-spacing-4)]", children: slots.header }),
449
+ /* @__PURE__ */ jsx5("div", { className: "flex-1 flex flex-col items-center justify-center p-[var(--tekton-spacing-8)]", children: /* @__PURE__ */ jsxs5("div", { className: "max-w-2xl w-full text-center space-y-[var(--tekton-spacing-6)]", children: [
450
+ /* @__PURE__ */ jsxs5("div", { className: "space-y-[var(--tekton-spacing-2)]", children: [
451
+ /* @__PURE__ */ jsx5("h1", { className: "text-3xl font-bold", children: title }),
452
+ /* @__PURE__ */ jsx5("p", { className: "text-[var(--tekton-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(--tekton-spacing-8)]", children: slots.recentActivity }),
456
+ slots.suggestions && /* @__PURE__ */ jsx5("div", { className: "mt-[var(--tekton-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(--tekton-border-default)] p-[var(--tekton-spacing-4)] bg-[var(--tekton-bg-muted)]", children: slots.settingsNav }),
477
+ /* @__PURE__ */ jsx6("main", { className: "flex-1 p-[var(--tekton-spacing-8)]", children: /* @__PURE__ */ jsxs6("div", { className: "max-w-3xl", children: [
478
+ /* @__PURE__ */ jsxs6("div", { className: "mb-[var(--tekton-spacing-8)]", children: [
479
+ /* @__PURE__ */ jsx6("h1", { className: "text-3xl font-bold mb-[var(--tekton-spacing-2)]", children: title }),
480
+ /* @__PURE__ */ jsx6("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: subtitle })
481
+ ] }),
482
+ /* @__PURE__ */ jsxs6("div", { className: "space-y-[var(--tekton-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(--tekton-spacing-8)] flex justify-end gap-[var(--tekton-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(--tekton-spacing-8)] ${className}`, children: [
534
+ /* @__PURE__ */ jsxs7("div", { className: "max-w-3xl mx-auto", children: [
535
+ /* @__PURE__ */ jsxs7("div", { className: "mb-[var(--tekton-spacing-8)]", children: [
536
+ /* @__PURE__ */ jsx7("h1", { className: "text-3xl font-bold mb-[var(--tekton-spacing-2)]", children: title }),
537
+ /* @__PURE__ */ jsx7("p", { className: "text-[var(--tekton-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(--tekton-spacing-6)]", children: [
545
+ slots.avatar && /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-[var(--tekton-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(--tekton-text-muted-foreground)] mt-[var(--tekton-spacing-2)]", children: "JPG, PNG. Max 2MB" })
550
+ ] })
551
+ ] }),
552
+ /* @__PURE__ */ jsxs7("div", { className: "space-y-[var(--tekton-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(--tekton-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(--tekton-text-muted-foreground)]", children: "Contact support to change your email address" })
560
+ ] }),
561
+ slots.bioField && /* @__PURE__ */ jsx7("div", { className: "space-y-[var(--tekton-spacing-2)]", children: slots.bioField }),
562
+ slots.additionalFields && slots.additionalFields
563
+ ] })
564
+ ] }),
565
+ slots.additionalSections && /* @__PURE__ */ jsx7("div", { className: "mt-[var(--tekton-spacing-6)]", children: slots.additionalSections }),
566
+ /* @__PURE__ */ jsxs7("div", { className: "mt-[var(--tekton-spacing-8)] flex justify-end gap-[var(--tekton-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(--tekton-spacing-4)] ${className}`,
591
+ children: [
592
+ /* @__PURE__ */ jsxs8("div", { className: "flex flex-col items-center gap-[var(--tekton-spacing-4)]", children: [
593
+ slots.spinner || /* @__PURE__ */ jsx8("div", { className: "animate-spin rounded-full h-12 w-12 border-b-2 border-[var(--tekton-border-primary)]" }),
594
+ showMessage && /* @__PURE__ */ jsx8("p", { className: "text-sm text-[var(--tekton-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(--tekton-spacing-4)] ${className}`,
623
+ children: [
624
+ /* @__PURE__ */ jsxs9("div", { className: "max-w-md text-center space-y-[var(--tekton-spacing-6)]", children: [
625
+ slots.icon || /* @__PURE__ */ jsx9("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx9("div", { className: "rounded-full bg-[var(--tekton-bg-destructive)] bg-opacity-10 p-[var(--tekton-spacing-4)]", children: /* @__PURE__ */ jsx9(
626
+ "svg",
627
+ {
628
+ xmlns: "http://www.w3.org/2000/svg",
629
+ className: "h-12 w-12 text-[var(--tekton-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(--tekton-spacing-2)]", children: [
645
+ /* @__PURE__ */ jsx9("h2", { className: "text-2xl font-bold", children: title }),
646
+ /* @__PURE__ */ jsx9("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: message })
647
+ ] }),
648
+ slots.errorDetails && /* @__PURE__ */ jsx9("div", { className: "text-left bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-4)] rounded-[var(--tekton-radius-md)] text-sm", children: slots.errorDetails }),
649
+ /* @__PURE__ */ jsxs9("div", { className: "flex flex-col gap-[var(--tekton-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(--tekton-spacing-4)] ${className}`,
678
+ children: [
679
+ /* @__PURE__ */ jsxs10("div", { className: "max-w-md text-center space-y-[var(--tekton-spacing-6)]", children: [
680
+ slots.illustration || /* @__PURE__ */ jsx10("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx10("div", { className: "rounded-full bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-8)]", children: /* @__PURE__ */ jsx10(
681
+ "svg",
682
+ {
683
+ xmlns: "http://www.w3.org/2000/svg",
684
+ className: "h-16 w-16 text-[var(--tekton-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(--tekton-spacing-2)]", children: [
700
+ /* @__PURE__ */ jsx10("h2", { className: "text-2xl font-bold", children: title }),
701
+ /* @__PURE__ */ jsx10("p", { className: "text-[var(--tekton-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(--tekton-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(--tekton-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(--tekton-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(--tekton-bg-muted)] p-[var(--tekton-spacing-4)] rounded-[var(--tekton-radius-md)] text-sm", children: slots.details }) }),
739
+ /* @__PURE__ */ jsxs11(CardFooter, { className: "flex justify-end gap-[var(--tekton-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(--tekton-spacing-4)] ${className}`,
771
+ children: [
772
+ /* @__PURE__ */ jsxs12("div", { className: "max-w-md text-center space-y-[var(--tekton-spacing-6)]", children: [
773
+ slots.icon || /* @__PURE__ */ jsx12("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx12("div", { className: "rounded-full bg-[var(--tekton-bg-success)] bg-opacity-10 p-[var(--tekton-spacing-4)]", children: /* @__PURE__ */ jsx12(
774
+ "svg",
775
+ {
776
+ xmlns: "http://www.w3.org/2000/svg",
777
+ className: "h-12 w-12 text-[var(--tekton-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(--tekton-spacing-2)]", children: [
793
+ /* @__PURE__ */ jsx12("h2", { className: "text-2xl font-bold", children: title }),
794
+ /* @__PURE__ */ jsx12("p", { className: "text-[var(--tekton-text-muted-foreground)]", children: message })
795
+ ] }),
796
+ slots.details && /* @__PURE__ */ jsx12("div", { className: "text-left bg-[var(--tekton-bg-muted)] p-[var(--tekton-spacing-4)] rounded-[var(--tekton-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(--tekton-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(--tekton-border-default)] bg-[var(--tekton-bg-card)] hidden lg:block", children: slots.sidebar }),
822
+ /* @__PURE__ */ jsxs13("main", { className: "flex-1 overflow-auto bg-[var(--tekton-bg-background)]", children: [
823
+ /* @__PURE__ */ jsx13("header", { className: "sticky top-0 z-10 border-b border-[var(--tekton-border-default)] bg-[var(--tekton-bg-background)]/80 backdrop-blur-md p-[var(--tekton-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(--tekton-text-foreground)]", children: title }),
826
+ /* @__PURE__ */ jsx13("p", { className: "text-sm text-[var(--tekton-text-muted-foreground)]", children: subtitle })
827
+ ] }),
828
+ slots.headerActions && /* @__PURE__ */ jsx13("div", { children: slots.headerActions })
829
+ ] }) }),
830
+ /* @__PURE__ */ jsxs13("div", { className: "py-[var(--tekton-layout-section-py,var(--tekton-spacing-6))] px-[var(--tekton-layout-container-px,var(--tekton-spacing-6))] space-y-[var(--tekton-layout-stack-gap,var(--tekton-spacing-6))] max-w-[var(--tekton-layout-container-xl)] mx-auto", children: [
831
+ slots.metrics && /* @__PURE__ */ jsx13("div", { className: "grid gap-[var(--tekton-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(--tekton-layout-grid-gap-x,var(--tekton-spacing-6))] gap-y-[var(--tekton-layout-grid-gap-y,var(--tekton-spacing-6))] lg:grid-cols-12", children: [
834
+ slots.primaryContent && /* @__PURE__ */ jsx13("div", { className: "lg:col-span-8 space-y-[var(--tekton-layout-stack-gap,var(--tekton-spacing-6))]", children: slots.primaryContent }),
835
+ slots.secondaryContent && /* @__PURE__ */ jsx13("div", { className: "lg:col-span-4 space-y-[var(--tekton-layout-stack-gap,var(--tekton-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
+ };