@victusvinceere/saas-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/index.d.mts +40 -0
- package/dist/auth/index.d.ts +40 -0
- package/dist/auth/index.js +147 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/index.mjs +111 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/authorization/index.d.mts +78 -0
- package/dist/authorization/index.d.ts +78 -0
- package/dist/authorization/index.js +137 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/index.mjs +104 -0
- package/dist/authorization/index.mjs.map +1 -0
- package/dist/components/auth/index.d.mts +26 -0
- package/dist/components/auth/index.d.ts +26 -0
- package/dist/components/auth/index.js +733 -0
- package/dist/components/auth/index.js.map +1 -0
- package/dist/components/auth/index.mjs +696 -0
- package/dist/components/auth/index.mjs.map +1 -0
- package/dist/components/dashboard/index.d.mts +32 -0
- package/dist/components/dashboard/index.d.ts +32 -0
- package/dist/components/dashboard/index.js +440 -0
- package/dist/components/dashboard/index.js.map +1 -0
- package/dist/components/dashboard/index.mjs +401 -0
- package/dist/components/dashboard/index.mjs.map +1 -0
- package/dist/components/ui/index.d.mts +351 -0
- package/dist/components/ui/index.d.ts +351 -0
- package/dist/components/ui/index.js +14342 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/components/ui/index.mjs +14173 -0
- package/dist/components/ui/index.mjs.map +1 -0
- package/dist/config/index.d.mts +45 -0
- package/dist/config/index.d.ts +45 -0
- package/dist/config/index.js +71 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +44 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/hooks/index.d.mts +20 -0
- package/dist/hooks/index.d.ts +20 -0
- package/dist/hooks/index.js +103 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/index.mjs +65 -0
- package/dist/hooks/index.mjs.map +1 -0
- package/dist/index.d.mts +21 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +459 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +401 -0
- package/dist/index.mjs.map +1 -0
- package/dist/prisma/index.d.mts +11 -0
- package/dist/prisma/index.d.ts +11 -0
- package/dist/prisma/index.js +46 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/prisma/index.mjs +20 -0
- package/dist/prisma/index.mjs.map +1 -0
- package/dist/providers/index.d.mts +37 -0
- package/dist/providers/index.d.ts +37 -0
- package/dist/providers/index.js +97 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/index.mjs +69 -0
- package/dist/providers/index.mjs.map +1 -0
- package/dist/sidebar-ttX_iZ40.d.mts +22 -0
- package/dist/sidebar-ttX_iZ40.d.ts +22 -0
- package/package.json +122 -0
- package/prisma/schema.prisma +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/authorization/index.ts"],"sourcesContent":["import { NextResponse } from \"next/server\";\n\n// Default role type - can be extended by consumers\nexport type Role = \"USER\" | \"MODERATOR\" | \"ADMIN\" | \"SUPER_ADMIN\";\n\n// Role hierarchy - higher index = more privileges\nconst DEFAULT_ROLE_HIERARCHY: Role[] = [\"USER\", \"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"];\n\nexport interface AuthorizationConfig {\n roleHierarchy?: string[];\n permissions?: Record<string, string[]>;\n}\n\nlet config: AuthorizationConfig = {\n roleHierarchy: DEFAULT_ROLE_HIERARCHY,\n permissions: {},\n};\n\n/**\n * Configure the authorization system\n */\nexport function configureAuthorization(options: AuthorizationConfig): void {\n config = { ...config, ...options };\n}\n\n/**\n * Check if a role has at least the minimum required role level\n */\nexport function hasMinRole(userRole: string, minRole: string): boolean {\n const hierarchy = config.roleHierarchy || DEFAULT_ROLE_HIERARCHY;\n const userLevel = hierarchy.indexOf(userRole);\n const minLevel = hierarchy.indexOf(minRole);\n\n if (userLevel === -1 || minLevel === -1) {\n return false;\n }\n\n return userLevel >= minLevel;\n}\n\n/**\n * Check if user has one of the allowed roles\n */\nexport function hasRole(userRole: string, allowedRoles: string[]): boolean {\n return allowedRoles.includes(userRole);\n}\n\n/**\n * Check if user is admin (ADMIN or SUPER_ADMIN)\n */\nexport function isAdmin(role: string): boolean {\n return hasMinRole(role, \"ADMIN\");\n}\n\n/**\n * Check if user is super admin\n */\nexport function isSuperAdmin(role: string): boolean {\n return role === \"SUPER_ADMIN\";\n}\n\n/**\n * Check if user is moderator or higher\n */\nexport function isModerator(role: string): boolean {\n return hasMinRole(role, \"MODERATOR\");\n}\n\n/**\n * Check if user has a specific permission\n */\nexport function hasPermission(userRole: string, permission: string): boolean {\n const permissions = config.permissions || {};\n const allowedRoles = permissions[permission];\n\n if (!allowedRoles) {\n return false;\n }\n\n return allowedRoles.includes(userRole);\n}\n\n/**\n * Default permissions configuration\n */\nexport const PERMISSIONS = {\n // User management\n \"users:read\": [\"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"],\n \"users:update\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"users:delete\": [\"SUPER_ADMIN\"],\n \"users:updateRole\": [\"SUPER_ADMIN\"],\n\n // Content management\n \"posts:create\": [\"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"],\n \"posts:update\": [\"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"],\n \"posts:delete\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"posts:publish\": [\"ADMIN\", \"SUPER_ADMIN\"],\n\n // Admin panel access\n \"admin:access\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"admin:settings\": [\"SUPER_ADMIN\"],\n\n // Subscription management\n \"subscriptions:read\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"subscriptions:manage\": [\"SUPER_ADMIN\"],\n} as const;\n\nexport type Permission = keyof typeof PERMISSIONS;\n\n/**\n * Higher-order function for protecting API routes\n * Returns unauthorized response if user doesn't have required role\n */\nexport interface WithRoleResult<T = unknown> {\n authorized: boolean;\n response: NextResponse | null;\n session: T | null;\n}\n\nexport interface WithRoleOptions {\n getSession: () => Promise<{ user?: { id?: string; role?: string } } | null>;\n minRole: string;\n}\n\nexport async function withRole(options: WithRoleOptions): Promise<WithRoleResult> {\n const session = await options.getSession();\n\n if (!session?.user?.id) {\n return {\n authorized: false,\n response: NextResponse.json({ error: \"Unauthorized\" }, { status: 401 }),\n session: null,\n };\n }\n\n const userRole = session.user.role || \"USER\";\n\n if (!hasMinRole(userRole, options.minRole)) {\n return {\n authorized: false,\n response: NextResponse.json({ error: \"Forbidden\" }, { status: 403 }),\n session,\n };\n }\n\n return {\n authorized: true,\n response: null,\n session,\n };\n}\n\n/**\n * Create a custom permission checker\n */\nexport function createPermissionChecker(permissions: Record<string, string[]>) {\n return function checkPermission(userRole: string, permission: string): boolean {\n const allowedRoles = permissions[permission];\n if (!allowedRoles) {\n return false;\n }\n return allowedRoles.includes(userRole);\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAM7B,IAAM,yBAAiC,CAAC,QAAQ,aAAa,SAAS,aAAa;AAOnF,IAAI,SAA8B;AAAA,EAChC,eAAe;AAAA,EACf,aAAa,CAAC;AAChB;AAKO,SAAS,uBAAuB,SAAoC;AACzE,WAAS,EAAE,GAAG,QAAQ,GAAG,QAAQ;AACnC;AAKO,SAAS,WAAW,UAAkB,SAA0B;AACrE,QAAM,YAAY,OAAO,iBAAiB;AAC1C,QAAM,YAAY,UAAU,QAAQ,QAAQ;AAC5C,QAAM,WAAW,UAAU,QAAQ,OAAO;AAE1C,MAAI,cAAc,MAAM,aAAa,IAAI;AACvC,WAAO;AAAA,EACT;AAEA,SAAO,aAAa;AACtB;AAKO,SAAS,QAAQ,UAAkB,cAAiC;AACzE,SAAO,aAAa,SAAS,QAAQ;AACvC;AAKO,SAAS,QAAQ,MAAuB;AAC7C,SAAO,WAAW,MAAM,OAAO;AACjC;AAKO,SAAS,aAAa,MAAuB;AAClD,SAAO,SAAS;AAClB;AAKO,SAAS,YAAY,MAAuB;AACjD,SAAO,WAAW,MAAM,WAAW;AACrC;AAKO,SAAS,cAAc,UAAkB,YAA6B;AAC3E,QAAM,cAAc,OAAO,eAAe,CAAC;AAC3C,QAAM,eAAe,YAAY,UAAU;AAE3C,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,aAAa,SAAS,QAAQ;AACvC;AAKO,IAAM,cAAc;AAAA;AAAA,EAEzB,cAAc,CAAC,aAAa,SAAS,aAAa;AAAA,EAClD,gBAAgB,CAAC,SAAS,aAAa;AAAA,EACvC,gBAAgB,CAAC,aAAa;AAAA,EAC9B,oBAAoB,CAAC,aAAa;AAAA;AAAA,EAGlC,gBAAgB,CAAC,aAAa,SAAS,aAAa;AAAA,EACpD,gBAAgB,CAAC,aAAa,SAAS,aAAa;AAAA,EACpD,gBAAgB,CAAC,SAAS,aAAa;AAAA,EACvC,iBAAiB,CAAC,SAAS,aAAa;AAAA;AAAA,EAGxC,gBAAgB,CAAC,SAAS,aAAa;AAAA,EACvC,kBAAkB,CAAC,aAAa;AAAA;AAAA,EAGhC,sBAAsB,CAAC,SAAS,aAAa;AAAA,EAC7C,wBAAwB,CAAC,aAAa;AACxC;AAmBA,eAAsB,SAAS,SAAmD;AAChF,QAAM,UAAU,MAAM,QAAQ,WAAW;AAEzC,MAAI,CAAC,SAAS,MAAM,IAAI;AACtB,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,UAAU,2BAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MACtE,SAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,KAAK,QAAQ;AAEtC,MAAI,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAC1C,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,UAAU,2BAAa,KAAK,EAAE,OAAO,YAAY,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,IACV;AAAA,EACF;AACF;AAKO,SAAS,wBAAwB,aAAuC;AAC7E,SAAO,SAAS,gBAAgB,UAAkB,YAA6B;AAC7E,UAAM,eAAe,YAAY,UAAU;AAC3C,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,IACT;AACA,WAAO,aAAa,SAAS,QAAQ;AAAA,EACvC;AACF;","names":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// src/authorization/index.ts
|
|
4
|
+
import { NextResponse } from "next/server";
|
|
5
|
+
var DEFAULT_ROLE_HIERARCHY = ["USER", "MODERATOR", "ADMIN", "SUPER_ADMIN"];
|
|
6
|
+
var config = {
|
|
7
|
+
roleHierarchy: DEFAULT_ROLE_HIERARCHY,
|
|
8
|
+
permissions: {}
|
|
9
|
+
};
|
|
10
|
+
function configureAuthorization(options) {
|
|
11
|
+
config = { ...config, ...options };
|
|
12
|
+
}
|
|
13
|
+
function hasMinRole(userRole, minRole) {
|
|
14
|
+
const hierarchy = config.roleHierarchy || DEFAULT_ROLE_HIERARCHY;
|
|
15
|
+
const userLevel = hierarchy.indexOf(userRole);
|
|
16
|
+
const minLevel = hierarchy.indexOf(minRole);
|
|
17
|
+
if (userLevel === -1 || minLevel === -1) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return userLevel >= minLevel;
|
|
21
|
+
}
|
|
22
|
+
function hasRole(userRole, allowedRoles) {
|
|
23
|
+
return allowedRoles.includes(userRole);
|
|
24
|
+
}
|
|
25
|
+
function isAdmin(role) {
|
|
26
|
+
return hasMinRole(role, "ADMIN");
|
|
27
|
+
}
|
|
28
|
+
function isSuperAdmin(role) {
|
|
29
|
+
return role === "SUPER_ADMIN";
|
|
30
|
+
}
|
|
31
|
+
function isModerator(role) {
|
|
32
|
+
return hasMinRole(role, "MODERATOR");
|
|
33
|
+
}
|
|
34
|
+
function hasPermission(userRole, permission) {
|
|
35
|
+
const permissions = config.permissions || {};
|
|
36
|
+
const allowedRoles = permissions[permission];
|
|
37
|
+
if (!allowedRoles) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return allowedRoles.includes(userRole);
|
|
41
|
+
}
|
|
42
|
+
var PERMISSIONS = {
|
|
43
|
+
// User management
|
|
44
|
+
"users:read": ["MODERATOR", "ADMIN", "SUPER_ADMIN"],
|
|
45
|
+
"users:update": ["ADMIN", "SUPER_ADMIN"],
|
|
46
|
+
"users:delete": ["SUPER_ADMIN"],
|
|
47
|
+
"users:updateRole": ["SUPER_ADMIN"],
|
|
48
|
+
// Content management
|
|
49
|
+
"posts:create": ["MODERATOR", "ADMIN", "SUPER_ADMIN"],
|
|
50
|
+
"posts:update": ["MODERATOR", "ADMIN", "SUPER_ADMIN"],
|
|
51
|
+
"posts:delete": ["ADMIN", "SUPER_ADMIN"],
|
|
52
|
+
"posts:publish": ["ADMIN", "SUPER_ADMIN"],
|
|
53
|
+
// Admin panel access
|
|
54
|
+
"admin:access": ["ADMIN", "SUPER_ADMIN"],
|
|
55
|
+
"admin:settings": ["SUPER_ADMIN"],
|
|
56
|
+
// Subscription management
|
|
57
|
+
"subscriptions:read": ["ADMIN", "SUPER_ADMIN"],
|
|
58
|
+
"subscriptions:manage": ["SUPER_ADMIN"]
|
|
59
|
+
};
|
|
60
|
+
async function withRole(options) {
|
|
61
|
+
const session = await options.getSession();
|
|
62
|
+
if (!session?.user?.id) {
|
|
63
|
+
return {
|
|
64
|
+
authorized: false,
|
|
65
|
+
response: NextResponse.json({ error: "Unauthorized" }, { status: 401 }),
|
|
66
|
+
session: null
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const userRole = session.user.role || "USER";
|
|
70
|
+
if (!hasMinRole(userRole, options.minRole)) {
|
|
71
|
+
return {
|
|
72
|
+
authorized: false,
|
|
73
|
+
response: NextResponse.json({ error: "Forbidden" }, { status: 403 }),
|
|
74
|
+
session
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
authorized: true,
|
|
79
|
+
response: null,
|
|
80
|
+
session
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function createPermissionChecker(permissions) {
|
|
84
|
+
return function checkPermission(userRole, permission) {
|
|
85
|
+
const allowedRoles = permissions[permission];
|
|
86
|
+
if (!allowedRoles) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return allowedRoles.includes(userRole);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
PERMISSIONS,
|
|
94
|
+
configureAuthorization,
|
|
95
|
+
createPermissionChecker,
|
|
96
|
+
hasMinRole,
|
|
97
|
+
hasPermission,
|
|
98
|
+
hasRole,
|
|
99
|
+
isAdmin,
|
|
100
|
+
isModerator,
|
|
101
|
+
isSuperAdmin,
|
|
102
|
+
withRole
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/authorization/index.ts"],"sourcesContent":["import { NextResponse } from \"next/server\";\n\n// Default role type - can be extended by consumers\nexport type Role = \"USER\" | \"MODERATOR\" | \"ADMIN\" | \"SUPER_ADMIN\";\n\n// Role hierarchy - higher index = more privileges\nconst DEFAULT_ROLE_HIERARCHY: Role[] = [\"USER\", \"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"];\n\nexport interface AuthorizationConfig {\n roleHierarchy?: string[];\n permissions?: Record<string, string[]>;\n}\n\nlet config: AuthorizationConfig = {\n roleHierarchy: DEFAULT_ROLE_HIERARCHY,\n permissions: {},\n};\n\n/**\n * Configure the authorization system\n */\nexport function configureAuthorization(options: AuthorizationConfig): void {\n config = { ...config, ...options };\n}\n\n/**\n * Check if a role has at least the minimum required role level\n */\nexport function hasMinRole(userRole: string, minRole: string): boolean {\n const hierarchy = config.roleHierarchy || DEFAULT_ROLE_HIERARCHY;\n const userLevel = hierarchy.indexOf(userRole);\n const minLevel = hierarchy.indexOf(minRole);\n\n if (userLevel === -1 || minLevel === -1) {\n return false;\n }\n\n return userLevel >= minLevel;\n}\n\n/**\n * Check if user has one of the allowed roles\n */\nexport function hasRole(userRole: string, allowedRoles: string[]): boolean {\n return allowedRoles.includes(userRole);\n}\n\n/**\n * Check if user is admin (ADMIN or SUPER_ADMIN)\n */\nexport function isAdmin(role: string): boolean {\n return hasMinRole(role, \"ADMIN\");\n}\n\n/**\n * Check if user is super admin\n */\nexport function isSuperAdmin(role: string): boolean {\n return role === \"SUPER_ADMIN\";\n}\n\n/**\n * Check if user is moderator or higher\n */\nexport function isModerator(role: string): boolean {\n return hasMinRole(role, \"MODERATOR\");\n}\n\n/**\n * Check if user has a specific permission\n */\nexport function hasPermission(userRole: string, permission: string): boolean {\n const permissions = config.permissions || {};\n const allowedRoles = permissions[permission];\n\n if (!allowedRoles) {\n return false;\n }\n\n return allowedRoles.includes(userRole);\n}\n\n/**\n * Default permissions configuration\n */\nexport const PERMISSIONS = {\n // User management\n \"users:read\": [\"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"],\n \"users:update\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"users:delete\": [\"SUPER_ADMIN\"],\n \"users:updateRole\": [\"SUPER_ADMIN\"],\n\n // Content management\n \"posts:create\": [\"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"],\n \"posts:update\": [\"MODERATOR\", \"ADMIN\", \"SUPER_ADMIN\"],\n \"posts:delete\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"posts:publish\": [\"ADMIN\", \"SUPER_ADMIN\"],\n\n // Admin panel access\n \"admin:access\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"admin:settings\": [\"SUPER_ADMIN\"],\n\n // Subscription management\n \"subscriptions:read\": [\"ADMIN\", \"SUPER_ADMIN\"],\n \"subscriptions:manage\": [\"SUPER_ADMIN\"],\n} as const;\n\nexport type Permission = keyof typeof PERMISSIONS;\n\n/**\n * Higher-order function for protecting API routes\n * Returns unauthorized response if user doesn't have required role\n */\nexport interface WithRoleResult<T = unknown> {\n authorized: boolean;\n response: NextResponse | null;\n session: T | null;\n}\n\nexport interface WithRoleOptions {\n getSession: () => Promise<{ user?: { id?: string; role?: string } } | null>;\n minRole: string;\n}\n\nexport async function withRole(options: WithRoleOptions): Promise<WithRoleResult> {\n const session = await options.getSession();\n\n if (!session?.user?.id) {\n return {\n authorized: false,\n response: NextResponse.json({ error: \"Unauthorized\" }, { status: 401 }),\n session: null,\n };\n }\n\n const userRole = session.user.role || \"USER\";\n\n if (!hasMinRole(userRole, options.minRole)) {\n return {\n authorized: false,\n response: NextResponse.json({ error: \"Forbidden\" }, { status: 403 }),\n session,\n };\n }\n\n return {\n authorized: true,\n response: null,\n session,\n };\n}\n\n/**\n * Create a custom permission checker\n */\nexport function createPermissionChecker(permissions: Record<string, string[]>) {\n return function checkPermission(userRole: string, permission: string): boolean {\n const allowedRoles = permissions[permission];\n if (!allowedRoles) {\n return false;\n }\n return allowedRoles.includes(userRole);\n };\n}\n"],"mappings":";;;AAAA,SAAS,oBAAoB;AAM7B,IAAM,yBAAiC,CAAC,QAAQ,aAAa,SAAS,aAAa;AAOnF,IAAI,SAA8B;AAAA,EAChC,eAAe;AAAA,EACf,aAAa,CAAC;AAChB;AAKO,SAAS,uBAAuB,SAAoC;AACzE,WAAS,EAAE,GAAG,QAAQ,GAAG,QAAQ;AACnC;AAKO,SAAS,WAAW,UAAkB,SAA0B;AACrE,QAAM,YAAY,OAAO,iBAAiB;AAC1C,QAAM,YAAY,UAAU,QAAQ,QAAQ;AAC5C,QAAM,WAAW,UAAU,QAAQ,OAAO;AAE1C,MAAI,cAAc,MAAM,aAAa,IAAI;AACvC,WAAO;AAAA,EACT;AAEA,SAAO,aAAa;AACtB;AAKO,SAAS,QAAQ,UAAkB,cAAiC;AACzE,SAAO,aAAa,SAAS,QAAQ;AACvC;AAKO,SAAS,QAAQ,MAAuB;AAC7C,SAAO,WAAW,MAAM,OAAO;AACjC;AAKO,SAAS,aAAa,MAAuB;AAClD,SAAO,SAAS;AAClB;AAKO,SAAS,YAAY,MAAuB;AACjD,SAAO,WAAW,MAAM,WAAW;AACrC;AAKO,SAAS,cAAc,UAAkB,YAA6B;AAC3E,QAAM,cAAc,OAAO,eAAe,CAAC;AAC3C,QAAM,eAAe,YAAY,UAAU;AAE3C,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,aAAa,SAAS,QAAQ;AACvC;AAKO,IAAM,cAAc;AAAA;AAAA,EAEzB,cAAc,CAAC,aAAa,SAAS,aAAa;AAAA,EAClD,gBAAgB,CAAC,SAAS,aAAa;AAAA,EACvC,gBAAgB,CAAC,aAAa;AAAA,EAC9B,oBAAoB,CAAC,aAAa;AAAA;AAAA,EAGlC,gBAAgB,CAAC,aAAa,SAAS,aAAa;AAAA,EACpD,gBAAgB,CAAC,aAAa,SAAS,aAAa;AAAA,EACpD,gBAAgB,CAAC,SAAS,aAAa;AAAA,EACvC,iBAAiB,CAAC,SAAS,aAAa;AAAA;AAAA,EAGxC,gBAAgB,CAAC,SAAS,aAAa;AAAA,EACvC,kBAAkB,CAAC,aAAa;AAAA;AAAA,EAGhC,sBAAsB,CAAC,SAAS,aAAa;AAAA,EAC7C,wBAAwB,CAAC,aAAa;AACxC;AAmBA,eAAsB,SAAS,SAAmD;AAChF,QAAM,UAAU,MAAM,QAAQ,WAAW;AAEzC,MAAI,CAAC,SAAS,MAAM,IAAI;AACtB,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,UAAU,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MACtE,SAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,KAAK,QAAQ;AAEtC,MAAI,CAAC,WAAW,UAAU,QAAQ,OAAO,GAAG;AAC1C,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,UAAU,aAAa,KAAK,EAAE,OAAO,YAAY,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,IACV;AAAA,EACF;AACF;AAKO,SAAS,wBAAwB,aAAuC;AAC7E,SAAO,SAAS,gBAAgB,UAAkB,YAA6B;AAC7E,UAAM,eAAe,YAAY,UAAU;AAC3C,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,IACT;AACA,WAAO,aAAa,SAAS,QAAQ;AAAA,EACvC;AACF;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface UserButtonMenuItem {
|
|
5
|
+
icon: LucideIcon;
|
|
6
|
+
label: string;
|
|
7
|
+
href: string;
|
|
8
|
+
}
|
|
9
|
+
interface UserButtonProps {
|
|
10
|
+
menuItems?: UserButtonMenuItem[];
|
|
11
|
+
signInHref?: string;
|
|
12
|
+
showThemeToggle?: boolean;
|
|
13
|
+
}
|
|
14
|
+
declare function UserButton({ menuItems, signInHref, showThemeToggle, }: UserButtonProps): react_jsx_runtime.JSX.Element;
|
|
15
|
+
|
|
16
|
+
interface AuthFormProps {
|
|
17
|
+
mode: "login" | "signup";
|
|
18
|
+
providers?: Array<"google" | "github" | "email">;
|
|
19
|
+
signupHref?: string;
|
|
20
|
+
loginHref?: string;
|
|
21
|
+
verifyRequestHref?: string;
|
|
22
|
+
defaultCallbackUrl?: string;
|
|
23
|
+
}
|
|
24
|
+
declare function AuthForm({ mode, providers, signupHref, loginHref, verifyRequestHref, defaultCallbackUrl, }: AuthFormProps): react_jsx_runtime.JSX.Element;
|
|
25
|
+
|
|
26
|
+
export { AuthForm, type AuthFormProps, UserButton, type UserButtonMenuItem, type UserButtonProps };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface UserButtonMenuItem {
|
|
5
|
+
icon: LucideIcon;
|
|
6
|
+
label: string;
|
|
7
|
+
href: string;
|
|
8
|
+
}
|
|
9
|
+
interface UserButtonProps {
|
|
10
|
+
menuItems?: UserButtonMenuItem[];
|
|
11
|
+
signInHref?: string;
|
|
12
|
+
showThemeToggle?: boolean;
|
|
13
|
+
}
|
|
14
|
+
declare function UserButton({ menuItems, signInHref, showThemeToggle, }: UserButtonProps): react_jsx_runtime.JSX.Element;
|
|
15
|
+
|
|
16
|
+
interface AuthFormProps {
|
|
17
|
+
mode: "login" | "signup";
|
|
18
|
+
providers?: Array<"google" | "github" | "email">;
|
|
19
|
+
signupHref?: string;
|
|
20
|
+
loginHref?: string;
|
|
21
|
+
verifyRequestHref?: string;
|
|
22
|
+
defaultCallbackUrl?: string;
|
|
23
|
+
}
|
|
24
|
+
declare function AuthForm({ mode, providers, signupHref, loginHref, verifyRequestHref, defaultCallbackUrl, }: AuthFormProps): react_jsx_runtime.JSX.Element;
|
|
25
|
+
|
|
26
|
+
export { AuthForm, type AuthFormProps, UserButton, type UserButtonMenuItem, type UserButtonProps };
|