@tekki-forge/runtime-admin 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.
Files changed (138) hide show
  1. package/README.md +5 -0
  2. package/dist/account.d.ts +1 -0
  3. package/dist/account.js +105 -0
  4. package/dist/account.js.map +1 -0
  5. package/dist/activity.d.ts +65 -0
  6. package/dist/activity.js +299 -0
  7. package/dist/activity.js.map +1 -0
  8. package/dist/admin-access.d.ts +4 -0
  9. package/dist/admin-access.js +177 -0
  10. package/dist/admin-access.js.map +1 -0
  11. package/dist/admin.d.ts +5 -0
  12. package/dist/admin.js +129 -0
  13. package/dist/admin.js.map +1 -0
  14. package/dist/auth-pages.d.ts +13 -0
  15. package/dist/auth-pages.js +207 -0
  16. package/dist/auth-pages.js.map +1 -0
  17. package/dist/brand-art.d.ts +24 -0
  18. package/dist/brand-art.js +33 -0
  19. package/dist/brand-art.js.map +1 -0
  20. package/dist/brand.d.ts +11 -0
  21. package/dist/brand.js +16 -0
  22. package/dist/brand.js.map +1 -0
  23. package/dist/charts.d.ts +23 -0
  24. package/dist/charts.js +259 -0
  25. package/dist/charts.js.map +1 -0
  26. package/dist/command-palette.d.ts +9 -0
  27. package/dist/command-palette.js +115 -0
  28. package/dist/command-palette.js.map +1 -0
  29. package/dist/context.d.ts +242 -0
  30. package/dist/context.js +107 -0
  31. package/dist/context.js.map +1 -0
  32. package/dist/dashboard.d.ts +66 -0
  33. package/dist/dashboard.js +144 -0
  34. package/dist/dashboard.js.map +1 -0
  35. package/dist/fields.d.ts +71 -0
  36. package/dist/fields.js +326 -0
  37. package/dist/fields.js.map +1 -0
  38. package/dist/i18n/catalog.d.ts +7 -0
  39. package/dist/i18n/catalog.js +23 -0
  40. package/dist/i18n/catalog.js.map +1 -0
  41. package/dist/i18n/locale.d.ts +15 -0
  42. package/dist/i18n/locale.js +69 -0
  43. package/dist/i18n/locale.js.map +1 -0
  44. package/dist/i18n/messages/de.d.ts +3 -0
  45. package/dist/i18n/messages/de.js +627 -0
  46. package/dist/i18n/messages/de.js.map +1 -0
  47. package/dist/i18n/messages/en.d.ts +3 -0
  48. package/dist/i18n/messages/en.js +627 -0
  49. package/dist/i18n/messages/en.js.map +1 -0
  50. package/dist/i18n/messages/es.d.ts +3 -0
  51. package/dist/i18n/messages/es.js +627 -0
  52. package/dist/i18n/messages/es.js.map +1 -0
  53. package/dist/i18n/messages/fr.d.ts +3 -0
  54. package/dist/i18n/messages/fr.js +627 -0
  55. package/dist/i18n/messages/fr.js.map +1 -0
  56. package/dist/i18n/messages/pt.d.ts +3 -0
  57. package/dist/i18n/messages/pt.js +627 -0
  58. package/dist/i18n/messages/pt.js.map +1 -0
  59. package/dist/i18n/validation.d.ts +3 -0
  60. package/dist/i18n/validation.js +36 -0
  61. package/dist/i18n/validation.js.map +1 -0
  62. package/dist/illustrations.d.ts +6 -0
  63. package/dist/illustrations.js +16 -0
  64. package/dist/illustrations.js.map +1 -0
  65. package/dist/import-dialog.d.ts +11 -0
  66. package/dist/import-dialog.js +152 -0
  67. package/dist/import-dialog.js.map +1 -0
  68. package/dist/index.d.ts +38 -0
  69. package/dist/index.js +39 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/inline-edit.d.ts +18 -0
  72. package/dist/inline-edit.js +115 -0
  73. package/dist/inline-edit.js.map +1 -0
  74. package/dist/landing.d.ts +79 -0
  75. package/dist/landing.js +122 -0
  76. package/dist/landing.js.map +1 -0
  77. package/dist/locale-switcher.d.ts +4 -0
  78. package/dist/locale-switcher.js +15 -0
  79. package/dist/locale-switcher.js.map +1 -0
  80. package/dist/map.d.ts +26 -0
  81. package/dist/map.js +232 -0
  82. package/dist/map.js.map +1 -0
  83. package/dist/notifications.d.ts +12 -0
  84. package/dist/notifications.js +75 -0
  85. package/dist/notifications.js.map +1 -0
  86. package/dist/record-mutation.d.ts +19 -0
  87. package/dist/record-mutation.js +39 -0
  88. package/dist/record-mutation.js.map +1 -0
  89. package/dist/resource-detail.d.ts +4 -0
  90. package/dist/resource-detail.js +96 -0
  91. package/dist/resource-detail.js.map +1 -0
  92. package/dist/resource-form.d.ts +11 -0
  93. package/dist/resource-form.js +92 -0
  94. package/dist/resource-form.js.map +1 -0
  95. package/dist/resource-list.d.ts +10 -0
  96. package/dist/resource-list.js +154 -0
  97. package/dist/resource-list.js.map +1 -0
  98. package/dist/saved-views.d.ts +16 -0
  99. package/dist/saved-views.js +64 -0
  100. package/dist/saved-views.js.map +1 -0
  101. package/dist/schema-editor-diagram.d.ts +14 -0
  102. package/dist/schema-editor-diagram.js +54 -0
  103. package/dist/schema-editor-diagram.js.map +1 -0
  104. package/dist/schema-editor.d.ts +98 -0
  105. package/dist/schema-editor.js +571 -0
  106. package/dist/schema-editor.js.map +1 -0
  107. package/dist/shell.d.ts +10 -0
  108. package/dist/shell.js +228 -0
  109. package/dist/shell.js.map +1 -0
  110. package/dist/skeleton.d.ts +25 -0
  111. package/dist/skeleton.js +34 -0
  112. package/dist/skeleton.js.map +1 -0
  113. package/dist/theme-catalog.d.ts +71 -0
  114. package/dist/theme-catalog.js +55 -0
  115. package/dist/theme-catalog.js.map +1 -0
  116. package/dist/theme-head.d.ts +8 -0
  117. package/dist/theme-head.js +11 -0
  118. package/dist/theme-head.js.map +1 -0
  119. package/dist/theme-preview.d.ts +2 -0
  120. package/dist/theme-preview.js +23 -0
  121. package/dist/theme-preview.js.map +1 -0
  122. package/dist/theme-switcher.d.ts +20 -0
  123. package/dist/theme-switcher.js +159 -0
  124. package/dist/theme-switcher.js.map +1 -0
  125. package/dist/theme.d.ts +24 -0
  126. package/dist/theme.js +30 -0
  127. package/dist/theme.js.map +1 -0
  128. package/dist/toast.d.ts +21 -0
  129. package/dist/toast.js +51 -0
  130. package/dist/toast.js.map +1 -0
  131. package/dist/ui.d.ts +86 -0
  132. package/dist/ui.js +106 -0
  133. package/dist/ui.js.map +1 -0
  134. package/dist/views.d.ts +23 -0
  135. package/dist/views.js +238 -0
  136. package/dist/views.js.map +1 -0
  137. package/package.json +58 -0
  138. package/styles.css +778 -0
@@ -0,0 +1,207 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
4
+ import { KeyRound } from "lucide-react";
5
+ import Link from "next/link";
6
+ import { useRouter, useSearchParams } from "next/navigation";
7
+ import { useState } from "react";
8
+ import { BrandPattern, brandMeshStyle } from "./brand-art.js";
9
+ import { BrandMark } from "./brand.js";
10
+ import { useForge, useT } from "./context.js";
11
+ import { Alert, Button, Card, FieldShell, Input, cn } from "./ui.js";
12
+ const PROVIDER_LABELS = { google: "Google", microsoft: "Microsoft", github: "GitHub", apple: "Apple", gitlab: "GitLab", discord: "Discord" };
13
+ /** Decorative brand panel: a gradient mesh from the theme's primary/accent plus a geometric line pattern (pure CSS/SVG). */
14
+ function BrandPanel() {
15
+ const { app } = useForge();
16
+ return (_jsxs("div", { className: "forge-auth-brand relative hidden overflow-hidden lg:flex lg:flex-col lg:justify-between", style: brandMeshStyle(app.name), children: [_jsx(BrandPattern, { name: app.name }), _jsxs("div", { className: "relative flex items-center gap-3 p-10", children: [_jsx(BrandMark, { size: "md", className: "forge-auth-mark" }), _jsx("span", { className: "text-lg font-semibold", children: app.name })] }), _jsxs("div", { className: "forge-auth-copy relative p-10 pt-24", children: [app.theme.tagline && _jsx("p", { className: "forge-heading max-w-md text-4xl leading-tight font-semibold tracking-tight text-balance", children: app.theme.tagline }), app.description && _jsx("p", { className: cn("max-w-md text-base opacity-90", app.theme.tagline ? "mt-4" : "forge-heading text-3xl leading-tight font-semibold tracking-tight"), children: app.description })] })] }));
17
+ }
18
+ function AuthLayout({ title, subtitle, children, footer }) {
19
+ const { app } = useForge();
20
+ return (_jsxs("div", { className: "forge-app-bg min-h-dvh lg:grid lg:grid-cols-[minmax(0,1.05fr)_minmax(0,1fr)]", children: [_jsx(BrandPanel, {}), _jsx("div", { className: "flex min-h-dvh items-center justify-center px-4 py-12 sm:px-8", children: _jsxs("div", { className: "forge-enter w-full max-w-sm", children: [_jsxs("div", { className: "mb-8 text-center lg:text-left", children: [_jsx("div", { className: "mb-4 flex justify-center lg:hidden", children: _jsx(BrandMark, { size: "md" }) }), _jsx("p", { className: "sr-only lg:hidden", children: app.name }), _jsx("h1", { className: "forge-heading text-2xl font-semibold tracking-tight text-ink", children: title }), subtitle && _jsx("p", { className: "mt-1.5 text-sm text-ink-muted", children: subtitle })] }), _jsx(Card, { className: "p-6", children: children }), footer && _jsx("p", { className: "mt-6 text-center text-sm text-ink-muted lg:text-left", children: footer })] }) })] }));
21
+ }
22
+ function safeNext(next) {
23
+ return next && next.startsWith("/") && !next.startsWith("//") ? next : "/";
24
+ }
25
+ function useSubmit() {
26
+ const [error, setError] = useState(null);
27
+ const [loading, setLoading] = useState(false);
28
+ const t = useT();
29
+ const run = async (fn) => {
30
+ setError(null);
31
+ setLoading(true);
32
+ try {
33
+ const res = await fn();
34
+ if (res && res.error)
35
+ setError(res.error.message ?? t("common.somethingWentWrong"));
36
+ return res;
37
+ }
38
+ catch (e) {
39
+ setError(e.message);
40
+ }
41
+ finally {
42
+ setLoading(false);
43
+ }
44
+ };
45
+ return { error, setError, loading, run };
46
+ }
47
+ export function SocialButtons({ next }) {
48
+ const { auth, api, app, t } = useForge();
49
+ const config = useQuery({ queryKey: ["forge", "config"], queryFn: () => api("/config"), enabled: app.auth.social.length > 0 });
50
+ const providers = config.data?.socialProviders ?? [];
51
+ if (providers.length === 0)
52
+ return null;
53
+ return (_jsxs("div", { className: "space-y-2", children: [providers.map((p) => (_jsx(Button, { className: "w-full", onClick: () => auth.signIn.social({ provider: p, callbackURL: next }), children: t("auth.continueWith", { provider: PROVIDER_LABELS[p] ?? p }) }, p))), _jsxs("div", { className: "flex items-center gap-3 py-2 text-xs text-ink-subtle", children: [_jsx("div", { className: "h-px flex-1 bg-line" }), " ", t("auth.or"), " ", _jsx("div", { className: "h-px flex-1 bg-line" })] })] }));
54
+ }
55
+ export function SignInPage() {
56
+ const { app, auth, t } = useForge();
57
+ const params = useSearchParams();
58
+ const next = safeNext(params.get("next"));
59
+ const queryClient = useQueryClient();
60
+ const [email, setEmail] = useState("");
61
+ const [password, setPassword] = useState("");
62
+ const { error, loading, run } = useSubmit();
63
+ const done = async () => {
64
+ await queryClient.invalidateQueries();
65
+ window.location.href = next;
66
+ };
67
+ const submit = (e) => {
68
+ e.preventDefault();
69
+ run(async () => {
70
+ const res = await auth.signIn.email({ email, password });
71
+ if (res.error)
72
+ return res;
73
+ // A second factor is required: no session exists yet, so never continue to the app.
74
+ if (res.data?.twoFactorRedirect || !res.data?.user) {
75
+ window.location.href = `/two-factor${next !== "/" ? `?next=${encodeURIComponent(next)}` : ""}`;
76
+ return res;
77
+ }
78
+ await done();
79
+ return res;
80
+ });
81
+ };
82
+ return (_jsxs(AuthLayout, { title: t("auth.signInTo", { app: app.name }), footer: app.auth.registration && (_jsxs(_Fragment, { children: [t("auth.noAccount"), " ", _jsx(Link, { href: `/sign-up${next !== "/" ? `?next=${encodeURIComponent(next)}` : ""}`, className: "font-medium text-ink hover:underline", children: t("auth.createOne") })] })), children: [_jsx(SocialButtons, { next: next }), app.auth.emailPassword && (_jsxs("form", { onSubmit: submit, className: "space-y-4", children: [error && _jsx(Alert, { children: error }), _jsx(FieldShell, { label: t("auth.email"), htmlFor: "email", children: _jsx(Input, { id: "email", type: "email", autoComplete: "email webauthn", required: true, value: email, onChange: (e) => setEmail(e.target.value) }) }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1.5 flex items-center justify-between", children: [_jsx("label", { htmlFor: "password", className: "text-sm font-medium text-ink", children: t("auth.password") }), app.auth.passwordReset && (_jsx(Link, { href: "/forgot-password", className: "text-xs text-ink-muted hover:text-ink", children: t("auth.forgotPassword") }))] }), _jsx(Input, { id: "password", type: "password", autoComplete: "current-password", required: true, value: password, onChange: (e) => setPassword(e.target.value) })] }), _jsx(Button, { type: "submit", variant: "primary", className: "w-full", loading: loading, children: t("auth.signIn") })] })), app.auth.passkeys && (_jsxs(Button, { className: "mt-3 w-full", onClick: () => run(async () => {
83
+ const res = await auth.signIn.passkey();
84
+ if (!res?.error)
85
+ await done();
86
+ return res;
87
+ }), children: [_jsx(KeyRound, { className: "size-4" }), " ", t("auth.signInWithPasskey")] }))] }));
88
+ }
89
+ export function SignUpPage() {
90
+ const { app, auth, t } = useForge();
91
+ const params = useSearchParams();
92
+ const next = safeNext(params.get("next"));
93
+ const [form, setForm] = useState({ name: "", email: "", password: "" });
94
+ const [verifySent, setVerifySent] = useState(false);
95
+ const { error, loading, run } = useSubmit();
96
+ if (!app.auth.registration) {
97
+ return (_jsx(AuthLayout, { title: t("auth.registrationClosed"), footer: _jsx(Link, { href: "/sign-in", className: "font-medium text-ink hover:underline", children: t("auth.backToSignIn") }), children: _jsx("p", { className: "text-sm text-ink-muted", children: t("auth.askForInvite") }) }));
98
+ }
99
+ if (verifySent) {
100
+ return (_jsx(AuthLayout, { title: t("auth.checkEmail"), children: _jsx("p", { className: "text-sm text-ink-muted", children: t("auth.verificationSent", { email: form.email }) }) }));
101
+ }
102
+ return (_jsxs(AuthLayout, { title: t("auth.createYourAccount"), footer: _jsxs(_Fragment, { children: [t("auth.alreadyRegistered"), " ", _jsx(Link, { href: "/sign-in", className: "font-medium text-ink hover:underline", children: t("auth.signIn") })] }), children: [_jsx(SocialButtons, { next: next }), _jsxs("form", { onSubmit: (e) => {
103
+ e.preventDefault();
104
+ run(async () => {
105
+ const res = await auth.signUp.email(form);
106
+ if (!res.error) {
107
+ if (app.auth.emailVerification)
108
+ setVerifySent(true);
109
+ // Honour an explicit destination (e.g. an invitation); otherwise new tenants create an organization.
110
+ else
111
+ window.location.href = next !== "/" ? next : app.tenancy.enabled ? "/onboarding" : "/";
112
+ }
113
+ return res;
114
+ });
115
+ }, className: "space-y-4", children: [error && _jsx(Alert, { children: error }), _jsx(FieldShell, { label: t("account.name"), htmlFor: "name", children: _jsx(Input, { id: "name", autoComplete: "name", required: true, value: form.name, onChange: (e) => setForm({ ...form, name: e.target.value }) }) }), _jsx(FieldShell, { label: t("auth.email"), htmlFor: "email", children: _jsx(Input, { id: "email", type: "email", autoComplete: "email", required: true, value: form.email, onChange: (e) => setForm({ ...form, email: e.target.value }) }) }), _jsx(FieldShell, { label: t("auth.password"), htmlFor: "password", hint: t("auth.passwordHint"), children: _jsx(Input, { id: "password", type: "password", autoComplete: "new-password", minLength: 8, required: true, value: form.password, onChange: (e) => setForm({ ...form, password: e.target.value }) }) }), _jsx(Button, { type: "submit", variant: "primary", className: "w-full", loading: loading, children: t("auth.createAccount") })] })] }));
116
+ }
117
+ export function ForgotPasswordPage() {
118
+ const { auth, t } = useForge();
119
+ const [email, setEmail] = useState("");
120
+ const [sent, setSent] = useState(false);
121
+ const { error, loading, run } = useSubmit();
122
+ return (_jsx(AuthLayout, { title: t("auth.resetTitle"), subtitle: t("auth.resetSubtitle"), footer: _jsx(Link, { href: "/sign-in", className: "font-medium text-ink hover:underline", children: t("auth.backToSignIn") }), children: sent ? (_jsx(Alert, { tone: "success", children: t("auth.resetSent", { email }) })) : (_jsxs("form", { className: "space-y-4", onSubmit: (e) => {
123
+ e.preventDefault();
124
+ run(async () => {
125
+ const res = await auth.requestPasswordReset({ email, redirectTo: `${window.location.origin}/reset-password` });
126
+ if (!res.error)
127
+ setSent(true);
128
+ return res;
129
+ });
130
+ }, children: [error && _jsx(Alert, { children: error }), _jsx(FieldShell, { label: t("auth.email"), htmlFor: "email", children: _jsx(Input, { id: "email", type: "email", required: true, value: email, onChange: (e) => setEmail(e.target.value) }) }), _jsx(Button, { type: "submit", variant: "primary", className: "w-full", loading: loading, children: t("auth.sendResetLink") })] })) }));
131
+ }
132
+ export function ResetPasswordPage() {
133
+ const { auth, t } = useForge();
134
+ const router = useRouter();
135
+ const token = useSearchParams().get("token");
136
+ const [password, setPassword] = useState("");
137
+ const { error, loading, run } = useSubmit();
138
+ return (_jsx(AuthLayout, { title: t("auth.chooseNewPassword"), children: !token ? (_jsx(Alert, { children: t("auth.resetLinkInvalid") })) : (_jsxs("form", { className: "space-y-4", onSubmit: (e) => {
139
+ e.preventDefault();
140
+ run(async () => {
141
+ const res = await auth.resetPassword({ newPassword: password, token });
142
+ if (!res.error)
143
+ router.push("/sign-in");
144
+ return res;
145
+ });
146
+ }, children: [error && _jsx(Alert, { children: error }), _jsx(FieldShell, { label: t("account.newPassword"), htmlFor: "password", hint: t("auth.passwordHint"), children: _jsx(Input, { id: "password", type: "password", autoComplete: "new-password", minLength: 8, required: true, value: password, onChange: (e) => setPassword(e.target.value) }) }), _jsx(Button, { type: "submit", variant: "primary", className: "w-full", loading: loading, children: t("auth.updatePassword") })] })) }));
147
+ }
148
+ export function TwoFactorPage() {
149
+ const { auth, t } = useForge();
150
+ const next = safeNext(useSearchParams().get("next"));
151
+ const [code, setCode] = useState("");
152
+ const [backup, setBackup] = useState(false);
153
+ // Opt-in: a trusted device skips the second factor for 30 days.
154
+ const [trust, setTrust] = useState(false);
155
+ const { error, loading, run } = useSubmit();
156
+ return (_jsx(AuthLayout, { title: t("account.twoFactor"), subtitle: backup ? t("auth.enterBackupCode") : t("auth.enterTotpCode"), children: _jsxs("form", { className: "space-y-4", onSubmit: (e) => {
157
+ e.preventDefault();
158
+ run(async () => {
159
+ const res = backup ? await auth.twoFactor.verifyBackupCode({ code, trustDevice: trust }) : await auth.twoFactor.verifyTotp({ code, trustDevice: trust });
160
+ if (!res.error)
161
+ window.location.href = next;
162
+ return res;
163
+ });
164
+ }, children: [error && _jsx(Alert, { children: error }), _jsx(Input, { "aria-label": t("auth.code"), inputMode: backup ? "text" : "numeric", autoComplete: "one-time-code", autoFocus: true, required: true, value: code, onChange: (e) => setCode(e.target.value.trim()), className: "text-center font-mono text-lg tracking-widest" }), _jsxs("label", { className: "flex items-center gap-2 text-sm text-ink-muted", children: [_jsx("input", { type: "checkbox", checked: trust, onChange: (e) => setTrust(e.target.checked), className: "forge-check" }), " ", t("auth.trustDevice")] }), _jsx(Button, { type: "submit", variant: "primary", className: "w-full", loading: loading, children: t("account.verify") }), _jsx("button", { type: "button", onClick: () => setBackup(!backup), className: "w-full text-center text-xs text-ink-muted hover:text-ink", children: backup ? t("auth.useAuthenticatorCode") : t("auth.useBackupCode") })] }) }));
165
+ }
166
+ function slugify(s) {
167
+ return s
168
+ .toLowerCase()
169
+ .replace(/[^a-z0-9]+/g, "-")
170
+ .replace(/^-|-$/g, "")
171
+ .slice(0, 48);
172
+ }
173
+ /** First-run page for multi-tenant apps: create an organization and make it active. */
174
+ export function OnboardingPage() {
175
+ const { auth, t } = useForge();
176
+ const [name, setName] = useState("");
177
+ const { error, loading, run } = useSubmit();
178
+ return (_jsx(AuthLayout, { title: t("auth.createOrganization"), subtitle: t("auth.createOrganizationSubtitle"), children: _jsxs("form", { className: "space-y-4", onSubmit: (e) => {
179
+ e.preventDefault();
180
+ run(async () => {
181
+ const slug = `${slugify(name) || "org"}-${Math.random().toString(36).slice(2, 6)}`;
182
+ const res = await auth.organization.create({ name, slug });
183
+ if (!res.error) {
184
+ await auth.organization.setActive({ organizationId: res.data.id });
185
+ window.location.href = "/";
186
+ }
187
+ return res;
188
+ });
189
+ }, children: [error && _jsx(Alert, { children: error }), _jsx(FieldShell, { label: t("auth.organizationName"), htmlFor: "org", children: _jsx(Input, { id: "org", required: true, autoFocus: true, value: name, onChange: (e) => setName(e.target.value), placeholder: t("auth.organizationNamePlaceholder") }) }), _jsx(Button, { type: "submit", variant: "primary", className: "w-full", loading: loading, children: t("common.continue") })] }) }));
190
+ }
191
+ export function AcceptInvitationPage({ invitationId }) {
192
+ const { auth, t } = useForge();
193
+ const session = auth.useSession();
194
+ const { error, loading, run } = useSubmit();
195
+ if (!session.isPending && !session.data) {
196
+ return (_jsx(AuthLayout, { title: t("auth.invitedTitle"), subtitle: t("auth.invitedSubtitle"), children: _jsxs("div", { className: "flex gap-2", children: [_jsx(Link, { href: `/sign-in?next=/accept-invitation/${invitationId}`, className: "flex-1", children: _jsx(Button, { className: "w-full", variant: "primary", children: t("auth.signIn") }) }), _jsx(Link, { href: `/sign-up?next=/accept-invitation/${invitationId}`, className: "flex-1", children: _jsx(Button, { className: "w-full", children: t("auth.createAccount") }) })] }) }));
197
+ }
198
+ return (_jsxs(AuthLayout, { title: t("auth.joinOrganization"), children: [error && _jsx("div", { className: "mb-4", children: _jsx(Alert, { children: error }) }), _jsx(Button, { variant: "primary", className: "w-full", loading: loading, onClick: () => run(async () => {
199
+ const res = await auth.organization.acceptInvitation({ invitationId });
200
+ if (!res.error) {
201
+ await auth.organization.setActive({ organizationId: res.data.invitation?.organizationId ?? res.data.member?.organizationId });
202
+ window.location.href = "/";
203
+ }
204
+ return res;
205
+ }), children: t("auth.acceptInvitation") })] }));
206
+ }
207
+ //# sourceMappingURL=auth-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-pages.js","sourceRoot":"","sources":["../src/auth-pages.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AppIR } from "@tekki-forge/compiler";
2
+ import type { CSSProperties } from "react";
3
+ /** Small deterministic hash so each app gets its own arrangement of the brand art. */
4
+ export declare function brandSeed(text: string): number;
5
+ /** Positions of the gradient mesh blobs (CSS variables read by `.forge-auth-brand` / `.forge-landing-hero`). */
6
+ export declare function brandMeshStyle(name: string): CSSProperties;
7
+ /** Decorative geometric pattern (dots, concentric rings, a sweeping line) drawn in currentColor over the mesh. */
8
+ export declare function BrandPattern({ name, id, className }: {
9
+ name: string;
10
+ id?: string;
11
+ className?: string;
12
+ }): import("react").JSX.Element;
13
+ declare const LOGO_SIZES: {
14
+ readonly sm: "size-7 text-xs";
15
+ readonly md: "size-10 text-base";
16
+ readonly lg: "size-12 text-lg";
17
+ };
18
+ /** Server-safe BrandMark: the theme logo, else the app's initial on a brand-coloured tile. Decorative (pair it with the name). */
19
+ export declare function BrandLogo({ app, size, className }: {
20
+ app: Pick<AppIR, "name" | "theme">;
21
+ size?: keyof typeof LOGO_SIZES;
22
+ className?: string;
23
+ }): import("react").JSX.Element;
24
+ export {};
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /*
3
+ * Generated brand art shared by the sign-in brand panel and the landing page hero. No hooks and no
4
+ * "use client": safe in server components, so the landing page needs no JavaScript.
5
+ */
6
+ /** Small deterministic hash so each app gets its own arrangement of the brand art. */
7
+ export function brandSeed(text) {
8
+ let h = 2166136261;
9
+ for (let i = 0; i < text.length; i++)
10
+ h = Math.imul(h ^ text.charCodeAt(i), 16777619);
11
+ return h >>> 0;
12
+ }
13
+ /** Positions of the gradient mesh blobs (CSS variables read by `.forge-auth-brand` / `.forge-landing-hero`). */
14
+ export function brandMeshStyle(name) {
15
+ const h = brandSeed(name);
16
+ const pick = (shift, min, span) => `${min + ((h >>> shift) % span)}%`;
17
+ return { "--mesh-a-x": pick(0, 5, 35), "--mesh-a-y": pick(5, 5, 30), "--mesh-b-x": pick(10, 55, 40), "--mesh-b-y": pick(15, 10, 40), "--mesh-c-x": pick(20, 20, 50) };
18
+ }
19
+ /** Decorative geometric pattern (dots, concentric rings, a sweeping line) drawn in currentColor over the mesh. */
20
+ export function BrandPattern({ name, id = "forge-auth-dots", className = "forge-auth-pattern absolute inset-0 size-full" }) {
21
+ const rings = 5 + (brandSeed(name) % 3);
22
+ return (_jsxs("svg", { className: className, "aria-hidden": true, focusable: "false", children: [_jsx("defs", { children: _jsx("pattern", { id: id, width: "28", height: "28", patternUnits: "userSpaceOnUse", children: _jsx("circle", { cx: "2", cy: "2", r: "1.25", fill: "currentColor" }) }) }), _jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})`, opacity: "0.18" }), _jsx("g", { fill: "none", stroke: "currentColor", strokeWidth: "1", opacity: "0.22", children: Array.from({ length: rings }, (_, i) => (_jsx("circle", { cx: "88%", cy: "18%", r: 60 + i * 46 }, i))) }), _jsx("path", { d: "M-20 520 C 160 420, 300 640, 520 500 S 820 380, 1000 470", fill: "none", stroke: "currentColor", strokeWidth: "1.5", opacity: "0.28" })] }));
23
+ }
24
+ const LOGO_SIZES = { sm: "size-7 text-xs", md: "size-10 text-base", lg: "size-12 text-lg" };
25
+ /** Server-safe BrandMark: the theme logo, else the app's initial on a brand-coloured tile. Decorative (pair it with the name). */
26
+ export function BrandLogo({ app, size = "sm", className = "" }) {
27
+ if (app.theme.logo) {
28
+ // eslint-disable-next-line @next/next/no-img-element -- any URL or public file, no next/image config needed
29
+ return _jsx("img", { src: app.theme.logo, alt: "", className: `forge-logo-image shrink-0 object-contain ${LOGO_SIZES[size]} ${className}`.trim() });
30
+ }
31
+ return (_jsx("span", { "aria-hidden": true, className: `forge-logo flex shrink-0 items-center justify-center font-bold ${LOGO_SIZES[size]} ${className}`.trim(), children: app.name.slice(0, 1).toUpperCase() }));
32
+ }
33
+ //# sourceMappingURL=brand-art.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-art.js","sourceRoot":"","sources":["../src/brand-art.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ declare const SIZES: {
2
+ readonly sm: "size-7 text-xs";
3
+ readonly md: "size-10 text-base";
4
+ readonly lg: "size-12 text-lg";
5
+ };
6
+ /** The app's logo (theme.logo) or, without one, its initial on a brand-coloured tile. */
7
+ export declare function BrandMark({ size, className }: {
8
+ size?: keyof typeof SIZES;
9
+ className?: string;
10
+ }): import("react").JSX.Element;
11
+ export {};
package/dist/brand.js ADDED
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useForge } from "./context.js";
4
+ import { cn } from "./ui.js";
5
+ const SIZES = { sm: "size-7 text-xs", md: "size-10 text-base", lg: "size-12 text-lg" };
6
+ /** The app's logo (theme.logo) or, without one, its initial on a brand-coloured tile. */
7
+ export function BrandMark({ size = "sm", className }) {
8
+ const { app } = useForge();
9
+ const logo = app.theme.logo;
10
+ if (logo) {
11
+ // eslint-disable-next-line @next/next/no-img-element -- any URL or public file, no next/image config needed
12
+ return _jsx("img", { src: logo, alt: "", className: cn("forge-logo-image shrink-0 object-contain", SIZES[size], className) });
13
+ }
14
+ return (_jsx("div", { "aria-hidden": true, className: cn("forge-logo flex shrink-0 items-center justify-center font-bold", SIZES[size], className), children: app.name.slice(0, 1).toUpperCase() }));
15
+ }
16
+ //# sourceMappingURL=brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,iBAAiB,EAAW,CAAC;AAEhG,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAqD;IACrG,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,IAAI,IAAI,EAAE,CAAC;QACT,4GAA4G;QAC5G,OAAO,cAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,EAAE,EAAC,SAAS,EAAE,EAAE,CAAC,0CAA0C,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,GAAI,CAAC;IACtH,CAAC;IACD,OAAO,CACL,mCAAiB,SAAS,EAAE,EAAE,CAAC,gEAAgE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,YACrH,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAC/B,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type JSX } from "react";
2
+ export interface Datum {
3
+ label: string;
4
+ value: number;
5
+ href?: string;
6
+ }
7
+ export interface ChartProps {
8
+ data: Datum[];
9
+ title: string;
10
+ /** Plot height in px (default 220). */
11
+ height?: number;
12
+ format?: (v: number) => string;
13
+ emptyLabel?: string;
14
+ }
15
+ /** Series colours: theme primary, theme accent, then six mid-tone hues legible on light and dark surfaces. */
16
+ export declare const CHART_PALETTE: string[];
17
+ export declare function BarChart(props: ChartProps & {
18
+ orientation?: "vertical" | "horizontal";
19
+ }): JSX.Element;
20
+ export declare function LineChart(props: ChartProps & {
21
+ area?: boolean;
22
+ }): JSX.Element;
23
+ export declare function DonutChart(props: ChartProps): JSX.Element;