@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.
- package/README.md +5 -0
- package/dist/account.d.ts +1 -0
- package/dist/account.js +105 -0
- package/dist/account.js.map +1 -0
- package/dist/activity.d.ts +65 -0
- package/dist/activity.js +299 -0
- package/dist/activity.js.map +1 -0
- package/dist/admin-access.d.ts +4 -0
- package/dist/admin-access.js +177 -0
- package/dist/admin-access.js.map +1 -0
- package/dist/admin.d.ts +5 -0
- package/dist/admin.js +129 -0
- package/dist/admin.js.map +1 -0
- package/dist/auth-pages.d.ts +13 -0
- package/dist/auth-pages.js +207 -0
- package/dist/auth-pages.js.map +1 -0
- package/dist/brand-art.d.ts +24 -0
- package/dist/brand-art.js +33 -0
- package/dist/brand-art.js.map +1 -0
- package/dist/brand.d.ts +11 -0
- package/dist/brand.js +16 -0
- package/dist/brand.js.map +1 -0
- package/dist/charts.d.ts +23 -0
- package/dist/charts.js +259 -0
- package/dist/charts.js.map +1 -0
- package/dist/command-palette.d.ts +9 -0
- package/dist/command-palette.js +115 -0
- package/dist/command-palette.js.map +1 -0
- package/dist/context.d.ts +242 -0
- package/dist/context.js +107 -0
- package/dist/context.js.map +1 -0
- package/dist/dashboard.d.ts +66 -0
- package/dist/dashboard.js +144 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/fields.d.ts +71 -0
- package/dist/fields.js +326 -0
- package/dist/fields.js.map +1 -0
- package/dist/i18n/catalog.d.ts +7 -0
- package/dist/i18n/catalog.js +23 -0
- package/dist/i18n/catalog.js.map +1 -0
- package/dist/i18n/locale.d.ts +15 -0
- package/dist/i18n/locale.js +69 -0
- package/dist/i18n/locale.js.map +1 -0
- package/dist/i18n/messages/de.d.ts +3 -0
- package/dist/i18n/messages/de.js +627 -0
- package/dist/i18n/messages/de.js.map +1 -0
- package/dist/i18n/messages/en.d.ts +3 -0
- package/dist/i18n/messages/en.js +627 -0
- package/dist/i18n/messages/en.js.map +1 -0
- package/dist/i18n/messages/es.d.ts +3 -0
- package/dist/i18n/messages/es.js +627 -0
- package/dist/i18n/messages/es.js.map +1 -0
- package/dist/i18n/messages/fr.d.ts +3 -0
- package/dist/i18n/messages/fr.js +627 -0
- package/dist/i18n/messages/fr.js.map +1 -0
- package/dist/i18n/messages/pt.d.ts +3 -0
- package/dist/i18n/messages/pt.js +627 -0
- package/dist/i18n/messages/pt.js.map +1 -0
- package/dist/i18n/validation.d.ts +3 -0
- package/dist/i18n/validation.js +36 -0
- package/dist/i18n/validation.js.map +1 -0
- package/dist/illustrations.d.ts +6 -0
- package/dist/illustrations.js +16 -0
- package/dist/illustrations.js.map +1 -0
- package/dist/import-dialog.d.ts +11 -0
- package/dist/import-dialog.js +152 -0
- package/dist/import-dialog.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/inline-edit.d.ts +18 -0
- package/dist/inline-edit.js +115 -0
- package/dist/inline-edit.js.map +1 -0
- package/dist/landing.d.ts +79 -0
- package/dist/landing.js +122 -0
- package/dist/landing.js.map +1 -0
- package/dist/locale-switcher.d.ts +4 -0
- package/dist/locale-switcher.js +15 -0
- package/dist/locale-switcher.js.map +1 -0
- package/dist/map.d.ts +26 -0
- package/dist/map.js +232 -0
- package/dist/map.js.map +1 -0
- package/dist/notifications.d.ts +12 -0
- package/dist/notifications.js +75 -0
- package/dist/notifications.js.map +1 -0
- package/dist/record-mutation.d.ts +19 -0
- package/dist/record-mutation.js +39 -0
- package/dist/record-mutation.js.map +1 -0
- package/dist/resource-detail.d.ts +4 -0
- package/dist/resource-detail.js +96 -0
- package/dist/resource-detail.js.map +1 -0
- package/dist/resource-form.d.ts +11 -0
- package/dist/resource-form.js +92 -0
- package/dist/resource-form.js.map +1 -0
- package/dist/resource-list.d.ts +10 -0
- package/dist/resource-list.js +154 -0
- package/dist/resource-list.js.map +1 -0
- package/dist/saved-views.d.ts +16 -0
- package/dist/saved-views.js +64 -0
- package/dist/saved-views.js.map +1 -0
- package/dist/schema-editor-diagram.d.ts +14 -0
- package/dist/schema-editor-diagram.js +54 -0
- package/dist/schema-editor-diagram.js.map +1 -0
- package/dist/schema-editor.d.ts +98 -0
- package/dist/schema-editor.js +571 -0
- package/dist/schema-editor.js.map +1 -0
- package/dist/shell.d.ts +10 -0
- package/dist/shell.js +228 -0
- package/dist/shell.js.map +1 -0
- package/dist/skeleton.d.ts +25 -0
- package/dist/skeleton.js +34 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/theme-catalog.d.ts +71 -0
- package/dist/theme-catalog.js +55 -0
- package/dist/theme-catalog.js.map +1 -0
- package/dist/theme-head.d.ts +8 -0
- package/dist/theme-head.js +11 -0
- package/dist/theme-head.js.map +1 -0
- package/dist/theme-preview.d.ts +2 -0
- package/dist/theme-preview.js +23 -0
- package/dist/theme-preview.js.map +1 -0
- package/dist/theme-switcher.d.ts +20 -0
- package/dist/theme-switcher.js +159 -0
- package/dist/theme-switcher.js.map +1 -0
- package/dist/theme.d.ts +24 -0
- package/dist/theme.js +30 -0
- package/dist/theme.js.map +1 -0
- package/dist/toast.d.ts +21 -0
- package/dist/toast.js +51 -0
- package/dist/toast.js.map +1 -0
- package/dist/ui.d.ts +86 -0
- package/dist/ui.js +106 -0
- package/dist/ui.js.map +1 -0
- package/dist/views.d.ts +23 -0
- package/dist/views.js +238 -0
- package/dist/views.js.map +1 -0
- package/package.json +58 -0
- package/styles.css +778 -0
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# @tekki-forge/runtime-admin
|
|
2
|
+
|
|
3
|
+
Forge admin runtime: metadata-driven React/Next.js UI for resources, auth, users and audit logs.
|
|
4
|
+
|
|
5
|
+
Part of [Tekki Forge](https://www.npmjs.com/package/tekki-forge), which turns a `forge.config.ts` into a production-ready full-stack app. Apps created with `forge new` install this package for you; see the [tekki-forge](https://www.npmjs.com/package/tekki-forge) package for the documentation.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function AccountPage(): import("react").JSX.Element | null;
|
package/dist/account.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { useForge, useT } from "./context.js";
|
|
6
|
+
import { Alert, Button, Card, FieldShell, Input, PageHeader } from "./ui.js";
|
|
7
|
+
function Section({ title, description, children }) {
|
|
8
|
+
return (_jsxs(Card, { className: "p-6", children: [_jsx("h2", { className: "text-sm font-semibold text-ink", children: title }), description && _jsx("p", { className: "mt-1 text-sm text-ink-muted", children: description }), _jsx("div", { className: "mt-5", children: children })] }));
|
|
9
|
+
}
|
|
10
|
+
function useAction() {
|
|
11
|
+
const [state, setState] = useState(null);
|
|
12
|
+
const [loading, setLoading] = useState(false);
|
|
13
|
+
const t = useT();
|
|
14
|
+
const run = async (fn, success) => {
|
|
15
|
+
setLoading(true);
|
|
16
|
+
setState(null);
|
|
17
|
+
try {
|
|
18
|
+
const res = await fn();
|
|
19
|
+
if (res?.error)
|
|
20
|
+
setState({ tone: "error", text: res.error.message ?? t("common.somethingWentWrong") });
|
|
21
|
+
else if (success)
|
|
22
|
+
setState({ tone: "success", text: success });
|
|
23
|
+
return res;
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return { state, loading, run, notice: state && _jsx(Alert, { tone: state.tone, children: state.text }) };
|
|
30
|
+
}
|
|
31
|
+
export function AccountPage() {
|
|
32
|
+
const { app, auth, t } = useForge();
|
|
33
|
+
const session = auth.useSession();
|
|
34
|
+
const user = session.data?.user;
|
|
35
|
+
if (!user)
|
|
36
|
+
return null;
|
|
37
|
+
return (_jsxs("div", { className: "mx-auto max-w-2xl space-y-6", children: [_jsx(PageHeader, { title: t("account.title"), description: user.email }), _jsx(ProfileSection, { initialName: user.name }), app.auth.emailPassword && _jsx(PasswordSection, {}), app.auth.twoFactor && _jsx(TwoFactorSection, { enabled: !!user.twoFactorEnabled }), app.auth.passkeys && _jsx(PasskeySection, {}), _jsx(SessionsSection, { currentToken: session.data?.session.token })] }));
|
|
38
|
+
}
|
|
39
|
+
function ProfileSection({ initialName }) {
|
|
40
|
+
const { auth, t } = useForge();
|
|
41
|
+
const queryClient = useQueryClient();
|
|
42
|
+
const [name, setName] = useState(initialName);
|
|
43
|
+
const a = useAction();
|
|
44
|
+
return (_jsx(Section, { title: t("account.profile"), children: _jsxs("form", { className: "space-y-4", onSubmit: (e) => {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
a.run(async () => {
|
|
47
|
+
const r = await auth.updateUser({ name });
|
|
48
|
+
await queryClient.invalidateQueries();
|
|
49
|
+
return r;
|
|
50
|
+
}, t("account.profileUpdated"));
|
|
51
|
+
}, children: [a.notice, _jsx(FieldShell, { label: t("account.name"), htmlFor: "profile-name", children: _jsx(Input, { id: "profile-name", value: name, onChange: (e) => setName(e.target.value), required: true }) }), _jsx(Button, { type: "submit", variant: "primary", loading: a.loading, children: t("common.save") })] }) }));
|
|
52
|
+
}
|
|
53
|
+
function PasswordSection() {
|
|
54
|
+
const { auth, t } = useForge();
|
|
55
|
+
const [form, setForm] = useState({ currentPassword: "", newPassword: "" });
|
|
56
|
+
const a = useAction();
|
|
57
|
+
return (_jsx(Section, { title: t("account.password"), children: _jsxs("form", { className: "space-y-4", onSubmit: (e) => {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
a.run(() => auth.changePassword({ ...form, revokeOtherSessions: true }), t("account.passwordChanged")).then(() => setForm({ currentPassword: "", newPassword: "" }));
|
|
60
|
+
}, children: [a.notice, _jsx(FieldShell, { label: t("account.currentPassword"), htmlFor: "current-password", children: _jsx(Input, { id: "current-password", type: "password", autoComplete: "current-password", required: true, value: form.currentPassword, onChange: (e) => setForm({ ...form, currentPassword: e.target.value }) }) }), _jsx(FieldShell, { label: t("account.newPassword"), htmlFor: "new-password", children: _jsx(Input, { id: "new-password", type: "password", autoComplete: "new-password", minLength: 8, required: true, value: form.newPassword, onChange: (e) => setForm({ ...form, newPassword: e.target.value }) }) }), _jsx(Button, { type: "submit", variant: "primary", loading: a.loading, children: t("account.changePassword") })] }) }));
|
|
61
|
+
}
|
|
62
|
+
function TwoFactorSection({ enabled }) {
|
|
63
|
+
const { auth, t } = useForge();
|
|
64
|
+
const [password, setPassword] = useState("");
|
|
65
|
+
const [setup, setSetup] = useState(null);
|
|
66
|
+
const [code, setCode] = useState("");
|
|
67
|
+
const a = useAction();
|
|
68
|
+
const secret = setup ? new URL(setup.totpURI).searchParams.get("secret") : null;
|
|
69
|
+
if (setup) {
|
|
70
|
+
return (_jsx(Section, { title: t("account.twoFactor"), description: t("account.twoFactorSetup"), children: _jsxs("div", { className: "space-y-4", children: [a.notice, _jsxs("div", { className: "forge-card-flat p-3 text-sm", children: [_jsx("p", { className: "text-ink-muted", children: t("account.secretKey") }), _jsx("p", { className: "mt-1 font-mono break-all text-ink select-all", children: secret }), _jsx("a", { href: setup.totpURI, className: "mt-2 inline-block text-xs text-link hover:underline", children: t("account.openInAuthenticator") })] }), _jsxs("div", { className: "forge-card-flat p-3 text-sm", children: [_jsx("p", { className: "text-ink-muted", children: t("account.backupCodes") }), _jsx("p", { className: "mt-1 grid grid-cols-2 gap-1 font-mono text-ink", children: setup.backupCodes.map((c) => (_jsx("span", { children: c }, c))) })] }), _jsxs("form", { className: "flex gap-2", onSubmit: (e) => {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
a.run(async () => {
|
|
73
|
+
const r = await auth.twoFactor.verifyTotp({ code });
|
|
74
|
+
if (!r.error)
|
|
75
|
+
window.location.reload();
|
|
76
|
+
return r;
|
|
77
|
+
});
|
|
78
|
+
}, children: [_jsx(Input, { "aria-label": t("account.verificationCode"), inputMode: "numeric", placeholder: "123456", value: code, onChange: (e) => setCode(e.target.value), className: "font-mono" }), _jsx(Button, { type: "submit", variant: "primary", loading: a.loading, children: t("account.verify") })] })] }) }));
|
|
79
|
+
}
|
|
80
|
+
return (_jsxs(Section, { title: t("account.twoFactor"), description: enabled ? t("account.twoFactorEnabled") : t("account.twoFactorDisabled"), children: [_jsxs("form", { className: "flex gap-2", onSubmit: (e) => {
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
a.run(async () => {
|
|
83
|
+
const r = enabled ? await auth.twoFactor.disable({ password }) : await auth.twoFactor.enable({ password });
|
|
84
|
+
if (!r.error) {
|
|
85
|
+
if (enabled)
|
|
86
|
+
window.location.reload();
|
|
87
|
+
else
|
|
88
|
+
setSetup(r.data);
|
|
89
|
+
}
|
|
90
|
+
return r;
|
|
91
|
+
});
|
|
92
|
+
}, children: [_jsx(Input, { "aria-label": t("account.confirmWithPassword"), type: "password", placeholder: t("account.confirmWithPassword"), required: true, value: password, onChange: (e) => setPassword(e.target.value) }), _jsx(Button, { type: "submit", variant: enabled ? "danger" : "primary", loading: a.loading, className: "shrink-0", children: enabled ? t("account.disable2fa") : t("account.enable2fa") })] }), a.state?.tone === "error" && _jsx("div", { className: "mt-3", children: a.notice })] }));
|
|
93
|
+
}
|
|
94
|
+
function PasskeySection() {
|
|
95
|
+
const { auth, locale, t } = useForge();
|
|
96
|
+
const list = useQuery({ queryKey: ["forge", "passkeys"], queryFn: async () => (await auth.passkey.listUserPasskeys()).data ?? [] });
|
|
97
|
+
const a = useAction();
|
|
98
|
+
return (_jsx(Section, { title: t("account.passkeys"), description: t("account.passkeysDescription"), children: _jsxs("div", { className: "space-y-3", children: [a.notice, _jsx("ul", { className: "divide-y divide-line text-sm", children: list.data?.map((p) => (_jsxs("li", { className: "flex items-center justify-between py-2", children: [_jsxs("span", { children: [p.name ?? t("account.passkey"), " ", _jsx("span", { className: "text-xs text-ink-subtle", children: t("account.passkeyAdded", { date: p.createdAt ? new Date(p.createdAt).toLocaleDateString(locale) : "" }) })] }), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => a.run(() => auth.passkey.deletePasskey({ id: p.id })).then(() => list.refetch()), children: t("common.remove") })] }, p.id))) }), _jsx(Button, { onClick: () => a.run(() => auth.passkey.addPasskey({ name: navigator.platform || "Passkey" }), t("account.passkeyAddedNotice")).then(() => list.refetch()), loading: a.loading, children: t("account.addPasskey") })] }) }));
|
|
99
|
+
}
|
|
100
|
+
function SessionsSection({ currentToken }) {
|
|
101
|
+
const { auth, locale, t } = useForge();
|
|
102
|
+
const list = useQuery({ queryKey: ["forge", "sessions"], queryFn: async () => ((await auth.listSessions()).data ?? []) });
|
|
103
|
+
return (_jsx(Section, { title: t("account.sessions"), children: _jsx("ul", { className: "divide-y divide-line text-sm", children: list.data?.map((s) => (_jsxs("li", { className: "flex items-center justify-between gap-4 py-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "truncate text-ink", children: s.userAgent ?? t("account.unknownDevice") }), _jsxs("p", { className: "text-xs text-ink-subtle", children: [s.ipAddress ?? "", " \u00B7 ", new Date(s.createdAt).toLocaleString(locale), " ", s.token === currentToken && `· ${t("account.thisDevice")}`] })] }), s.token !== currentToken && (_jsx(Button, { size: "sm", variant: "ghost", onClick: async () => { await auth.revokeSession({ token: s.token }); list.refetch(); }, children: t("account.revoke") }))] }, s.id))) }) }));
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { EntityIR } from "@tekki-forge/compiler";
|
|
2
|
+
/** Same limit as the API. */
|
|
3
|
+
export declare const COMMENT_MAX_LENGTH = 5000;
|
|
4
|
+
export interface ActivityUser {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
image: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface CommentItem {
|
|
10
|
+
id: string;
|
|
11
|
+
body: string;
|
|
12
|
+
mentions: string[];
|
|
13
|
+
author: ActivityUser | null;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
editedAt: string | null;
|
|
16
|
+
canEdit: boolean;
|
|
17
|
+
canDelete: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface TimelineEvent {
|
|
20
|
+
id: string;
|
|
21
|
+
kind: "created" | "updated" | "deleted" | "restored" | "transition" | "action" | "comment";
|
|
22
|
+
at: string;
|
|
23
|
+
actor: ActivityUser | null;
|
|
24
|
+
changes?: {
|
|
25
|
+
field: string;
|
|
26
|
+
label: string;
|
|
27
|
+
values: boolean;
|
|
28
|
+
from?: unknown;
|
|
29
|
+
to?: unknown;
|
|
30
|
+
}[];
|
|
31
|
+
transition?: {
|
|
32
|
+
name: string;
|
|
33
|
+
label: string;
|
|
34
|
+
from: string | null;
|
|
35
|
+
to: string | null;
|
|
36
|
+
};
|
|
37
|
+
action?: {
|
|
38
|
+
name: string;
|
|
39
|
+
label: string;
|
|
40
|
+
};
|
|
41
|
+
comment?: CommentItem;
|
|
42
|
+
}
|
|
43
|
+
/** Relative time ("3 hours ago"), with the exact date and time on hover. */
|
|
44
|
+
export declare function RelativeTime({ iso, className }: {
|
|
45
|
+
iso: string;
|
|
46
|
+
className?: string;
|
|
47
|
+
}): import("react").JSX.Element;
|
|
48
|
+
export declare function Avatar({ user, size }: {
|
|
49
|
+
user: ActivityUser | null;
|
|
50
|
+
size?: "sm" | "md";
|
|
51
|
+
}): import("react").JSX.Element;
|
|
52
|
+
/** A comment body: plain text with line breaks; mentions are highlighted. */
|
|
53
|
+
export declare function CommentBody({ body }: {
|
|
54
|
+
body: string;
|
|
55
|
+
}): import("react").JSX.Element;
|
|
56
|
+
/**
|
|
57
|
+
* The record's Activity panel: audit history (created, field changes, transitions, deletes) and comments in
|
|
58
|
+
* time order, older events on demand, and a comment box with @mentions. Everything is filtered by the API.
|
|
59
|
+
*/
|
|
60
|
+
export declare function ActivityPanel({ path, entity, recordId, readOnly }: {
|
|
61
|
+
path: string;
|
|
62
|
+
entity: EntityIR;
|
|
63
|
+
recordId: string;
|
|
64
|
+
readOnly?: boolean;
|
|
65
|
+
}): import("react").JSX.Element;
|
package/dist/activity.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
4
|
+
import { ArrowRightLeft, CirclePlus, History, Pencil, RotateCcw, Trash2, Zap } from "lucide-react";
|
|
5
|
+
import { Fragment, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { ApiError, useForge } from "./context.js";
|
|
7
|
+
import { FieldValue } from "./fields.js";
|
|
8
|
+
import { ListSkeleton } from "./skeleton.js";
|
|
9
|
+
import { useToast } from "./toast.js";
|
|
10
|
+
import { Button, Card, ConfirmDialog, cn, inputClass } from "./ui.js";
|
|
11
|
+
/** Same limit as the API. */
|
|
12
|
+
export const COMMENT_MAX_LENGTH = 5000;
|
|
13
|
+
/** A mention inside a comment body: `@[Ada Lovelace](<user id>)`. */
|
|
14
|
+
const MENTION = /@\[([^\]\n]{1,100})\]\(([A-Za-z0-9_-]{1,64})\)/g;
|
|
15
|
+
/** Fill a translated template with React nodes: "{actor} created" + { actor: <b>Ada</b> }. */
|
|
16
|
+
function rich(template, nodes) {
|
|
17
|
+
return template.split(/(\{\w+\})/g).map((part, i) => {
|
|
18
|
+
const m = /^\{(\w+)\}$/.exec(part);
|
|
19
|
+
return _jsx(Fragment, { children: m && m[1] in nodes ? nodes[m[1]] : part }, i);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const UNITS = [
|
|
23
|
+
["year", 31_536_000],
|
|
24
|
+
["month", 2_592_000],
|
|
25
|
+
["week", 604_800],
|
|
26
|
+
["day", 86_400],
|
|
27
|
+
["hour", 3_600],
|
|
28
|
+
["minute", 60],
|
|
29
|
+
];
|
|
30
|
+
function relativeTime(iso, locale) {
|
|
31
|
+
const seconds = (new Date(iso).getTime() - Date.now()) / 1000;
|
|
32
|
+
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" });
|
|
33
|
+
for (const [unit, size] of UNITS)
|
|
34
|
+
if (Math.abs(seconds) >= size)
|
|
35
|
+
return rtf.format(Math.round(seconds / size), unit);
|
|
36
|
+
return rtf.format(0, "second");
|
|
37
|
+
}
|
|
38
|
+
/** Relative time ("3 hours ago"), with the exact date and time on hover. */
|
|
39
|
+
export function RelativeTime({ iso, className }) {
|
|
40
|
+
const { locale } = useForge();
|
|
41
|
+
const [, refresh] = useState(0);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
const timer = setInterval(() => refresh((n) => n + 1), 60_000);
|
|
44
|
+
return () => clearInterval(timer);
|
|
45
|
+
}, []);
|
|
46
|
+
const absolute = new Date(iso).toLocaleString(locale);
|
|
47
|
+
return (_jsx("time", { dateTime: iso, title: absolute, className: cn("tabular-nums", className), children: relativeTime(iso, locale) }));
|
|
48
|
+
}
|
|
49
|
+
const AVATAR_TONES = ["#6366f1", "#0ea5e9", "#10b981", "#f59e0b", "#f43f5e", "#8b5cf6", "#14b8a6", "#ec4899"];
|
|
50
|
+
function initials(name) {
|
|
51
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
52
|
+
return ((parts[0]?.[0] ?? "?") + (parts.length > 1 ? (parts[parts.length - 1][0] ?? "") : "")).toUpperCase();
|
|
53
|
+
}
|
|
54
|
+
export function Avatar({ user, size = "md" }) {
|
|
55
|
+
const dims = size === "sm" ? "size-6 text-[10px]" : "size-8 text-xs";
|
|
56
|
+
if (user?.image)
|
|
57
|
+
return _jsx("img", { src: user.image, alt: "", className: cn("shrink-0 rounded-full object-cover ring-1 ring-line", dims) });
|
|
58
|
+
const tone = user ? AVATAR_TONES[[...user.id].reduce((h, c) => (h * 31 + c.charCodeAt(0)) >>> 0, 7) % AVATAR_TONES.length] : undefined;
|
|
59
|
+
return (_jsx("span", { "aria-hidden": true, className: cn("flex shrink-0 items-center justify-center rounded-full font-semibold", dims, tone ? "text-white" : "bg-surface-muted text-ink-muted"), style: tone ? { backgroundColor: tone } : undefined, children: user ? initials(user.name) : "?" }));
|
|
60
|
+
}
|
|
61
|
+
/** A comment body: plain text with line breaks; mentions are highlighted. */
|
|
62
|
+
export function CommentBody({ body }) {
|
|
63
|
+
const parts = [];
|
|
64
|
+
let last = 0;
|
|
65
|
+
for (const m of body.matchAll(MENTION)) {
|
|
66
|
+
if (m.index > last)
|
|
67
|
+
parts.push(body.slice(last, m.index));
|
|
68
|
+
parts.push(_jsxs("span", { className: "rounded bg-primary/10 px-0.5 font-medium text-link", "data-user-id": m[2], children: ["@", m[1]] }, m.index));
|
|
69
|
+
last = m.index + m[0].length;
|
|
70
|
+
}
|
|
71
|
+
if (last < body.length)
|
|
72
|
+
parts.push(body.slice(last));
|
|
73
|
+
return _jsx("p", { className: "text-sm whitespace-pre-wrap break-words text-ink", children: parts });
|
|
74
|
+
}
|
|
75
|
+
/** Turn a stored body into editable text (`@Name`) plus the mentions it holds. */
|
|
76
|
+
function toEditable(body) {
|
|
77
|
+
const mentions = [];
|
|
78
|
+
const text = body.replace(MENTION, (_m, name, id) => {
|
|
79
|
+
if (!mentions.some((x) => x.id === id))
|
|
80
|
+
mentions.push({ id, name, image: null });
|
|
81
|
+
return `@${name}`;
|
|
82
|
+
});
|
|
83
|
+
return { text, mentions };
|
|
84
|
+
}
|
|
85
|
+
/** Encode `@Name` back into mention tokens for the people picked in the editor. */
|
|
86
|
+
function toBody(text, mentions) {
|
|
87
|
+
let out = text;
|
|
88
|
+
for (const m of [...mentions].sort((a, b) => b.name.length - a.name.length)) {
|
|
89
|
+
const label = m.name.replace(/[[\]\n]/g, "").slice(0, 100);
|
|
90
|
+
if (label)
|
|
91
|
+
out = out.split(`@${m.name}`).join(`@[${label}](${m.id})`);
|
|
92
|
+
}
|
|
93
|
+
return out.trim();
|
|
94
|
+
}
|
|
95
|
+
/** Text with @mention autocomplete (arrows to move, Enter or Tab to pick, Escape to close; Ctrl/⌘+Enter submits). */
|
|
96
|
+
function CommentEditor({ path, recordId, initial = "", submitLabel, pending, autoFocus, onSubmit, onCancel, }) {
|
|
97
|
+
const { api, t } = useForge();
|
|
98
|
+
const start = useMemo(() => toEditable(initial), [initial]);
|
|
99
|
+
const [text, setText] = useState(start.text);
|
|
100
|
+
const [mentions, setMentions] = useState(start.mentions);
|
|
101
|
+
const [trigger, setTrigger] = useState(null);
|
|
102
|
+
const [search, setSearch] = useState("");
|
|
103
|
+
const [active, setActive] = useState(0);
|
|
104
|
+
const ref = useRef(null);
|
|
105
|
+
const listId = useId();
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
const timer = setTimeout(() => setSearch(trigger?.query ?? ""), 150);
|
|
108
|
+
return () => clearTimeout(timer);
|
|
109
|
+
}, [trigger?.query]);
|
|
110
|
+
const people = useQuery({
|
|
111
|
+
queryKey: ["resource", path, "mentionable", recordId, search],
|
|
112
|
+
queryFn: () => api(`/${path}/${recordId}/comments/mentionable`, { query: { search } }),
|
|
113
|
+
enabled: trigger !== null,
|
|
114
|
+
staleTime: 30_000,
|
|
115
|
+
});
|
|
116
|
+
const options = trigger ? (people.data?.data ?? []) : [];
|
|
117
|
+
const open = trigger !== null;
|
|
118
|
+
useEffect(() => setActive(0), [search]);
|
|
119
|
+
const detect = (value, caret) => {
|
|
120
|
+
const m = /(^|\s)@([^\s@[\]()]{0,30})$/u.exec(value.slice(0, caret));
|
|
121
|
+
setTrigger(m ? { start: caret - m[2].length - 1, query: m[2] } : null);
|
|
122
|
+
};
|
|
123
|
+
const pick = (user) => {
|
|
124
|
+
const el = ref.current;
|
|
125
|
+
if (!el || !trigger)
|
|
126
|
+
return;
|
|
127
|
+
const caret = el.selectionStart ?? text.length;
|
|
128
|
+
const insert = `@${user.name} `;
|
|
129
|
+
const next = text.slice(0, trigger.start) + insert + text.slice(caret);
|
|
130
|
+
setText(next);
|
|
131
|
+
setMentions((all) => (all.some((m) => m.id === user.id) ? all : [...all, user]));
|
|
132
|
+
setTrigger(null);
|
|
133
|
+
const pos = trigger.start + insert.length;
|
|
134
|
+
requestAnimationFrame(() => {
|
|
135
|
+
el.focus();
|
|
136
|
+
el.setSelectionRange(pos, pos);
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
const body = toBody(text, mentions);
|
|
140
|
+
const submit = async () => {
|
|
141
|
+
if (!body || pending || body.length > COMMENT_MAX_LENGTH)
|
|
142
|
+
return;
|
|
143
|
+
if ((await onSubmit(body)) && !initial) {
|
|
144
|
+
setText("");
|
|
145
|
+
setMentions([]);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
const onKeyDown = (e) => {
|
|
149
|
+
if (open && e.key === "Escape") {
|
|
150
|
+
e.preventDefault();
|
|
151
|
+
e.stopPropagation();
|
|
152
|
+
setTrigger(null);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (open && options.length > 0) {
|
|
156
|
+
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
157
|
+
e.preventDefault();
|
|
158
|
+
setActive((i) => (i + (e.key === "ArrowDown" ? 1 : -1) + options.length) % options.length);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if ((e.key === "Enter" && !e.shiftKey && !e.metaKey && !e.ctrlKey) || e.key === "Tab") {
|
|
162
|
+
e.preventDefault();
|
|
163
|
+
pick(options[Math.min(active, options.length - 1)]);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
|
|
168
|
+
e.preventDefault();
|
|
169
|
+
void submit();
|
|
170
|
+
}
|
|
171
|
+
else if (e.key === "Escape" && onCancel) {
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
onCancel();
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
return (_jsxs("div", { className: "relative", children: [_jsx("textarea", { ref: ref, rows: 3, autoFocus: autoFocus, value: text, maxLength: COMMENT_MAX_LENGTH, placeholder: t("activity.placeholder"), "aria-label": t("activity.commentLabel"), role: "combobox", "aria-autocomplete": "list", "aria-expanded": open, "aria-controls": listId, "aria-activedescendant": open && options[active] ? `${listId}-${options[active].id}` : undefined, className: cn(inputClass, "min-h-20 resize-y"), onChange: (e) => {
|
|
177
|
+
setText(e.target.value);
|
|
178
|
+
detect(e.target.value, e.target.selectionStart ?? e.target.value.length);
|
|
179
|
+
}, onClick: (e) => detect(e.currentTarget.value, e.currentTarget.selectionStart ?? 0), onKeyUp: (e) => ["ArrowLeft", "ArrowRight", "Home", "End"].includes(e.key) && detect(e.currentTarget.value, e.currentTarget.selectionStart ?? 0), onBlur: () => setTimeout(() => setTrigger(null), 150), onKeyDown: onKeyDown }), open && (_jsxs("ul", { id: listId, role: "listbox", "aria-label": t("activity.mentionSuggestions"), className: "forge-popover absolute left-0 z-30 mt-1 max-h-64 w-72 overflow-auto py-1", children: [options.map((u, i) => (_jsxs("li", { id: `${listId}-${u.id}`, role: "option", "aria-selected": i === active, className: cn("flex cursor-pointer items-center gap-2 px-3 py-1.5 text-sm text-ink", i === active ? "bg-selected" : "hover:bg-hover"), onMouseDown: (e) => {
|
|
180
|
+
e.preventDefault();
|
|
181
|
+
pick(u);
|
|
182
|
+
}, onMouseEnter: () => setActive(i), children: [_jsx(Avatar, { user: u, size: "sm" }), _jsx("span", { className: "truncate", children: u.name })] }, u.id))), options.length === 0 && (_jsx("li", { role: "presentation", className: "px-3 py-2 text-sm text-ink-subtle", children: people.isFetching || search !== (trigger?.query ?? "") ? t("common.loading") : t("activity.noMatches") }))] })), _jsxs("div", { className: "mt-2 flex items-center justify-end gap-2", children: [_jsx("span", { className: "mr-auto text-xs text-ink-subtle", children: t("activity.sendHint") }), onCancel && (_jsx(Button, { size: "sm", variant: "ghost", onClick: onCancel, children: t("common.cancel") })), _jsx(Button, { size: "sm", variant: "primary", loading: pending, disabled: !body, onClick: () => void submit(), children: submitLabel })] })] }));
|
|
183
|
+
}
|
|
184
|
+
function ChangeValue({ field, value }) {
|
|
185
|
+
const { t } = useForge();
|
|
186
|
+
if (field?.relation) {
|
|
187
|
+
const refs = (Array.isArray(value) ? value : [value]).filter(Boolean);
|
|
188
|
+
if (!refs.length)
|
|
189
|
+
return _jsx("span", { className: "text-ink-subtle", children: "\u2014" });
|
|
190
|
+
return _jsx("span", { className: "font-medium text-ink", children: refs.map((r) => r.label ?? t("activity.unknownRecord")).join(", ") });
|
|
191
|
+
}
|
|
192
|
+
return (_jsx("span", { className: "inline-block max-w-[16rem] truncate align-bottom font-medium text-ink", children: _jsx(FieldValue, { field: field, value: value }) }));
|
|
193
|
+
}
|
|
194
|
+
function SystemEvent({ entity, event, stateLabel }) {
|
|
195
|
+
const { t } = useForge();
|
|
196
|
+
const actor = _jsx("span", { className: "font-medium text-ink", children: event.actor?.name ?? t("activity.someone") });
|
|
197
|
+
const Icon = { created: CirclePlus, updated: Pencil, deleted: Trash2, restored: RotateCcw, transition: ArrowRightLeft, action: Zap, comment: History }[event.kind];
|
|
198
|
+
let text;
|
|
199
|
+
if (event.kind === "created")
|
|
200
|
+
text = rich(t("activity.created"), { actor });
|
|
201
|
+
else if (event.kind === "updated")
|
|
202
|
+
text = rich(t("activity.updated"), { actor });
|
|
203
|
+
else if (event.kind === "deleted")
|
|
204
|
+
text = rich(t("activity.deleted"), { actor });
|
|
205
|
+
else if (event.kind === "restored")
|
|
206
|
+
text = rich(t("activity.restored"), { actor });
|
|
207
|
+
else if (event.kind === "transition") {
|
|
208
|
+
const tr = event.transition;
|
|
209
|
+
const transition = _jsx("span", { className: "font-medium text-ink", children: entity.workflow?.transitions.find((x) => x.name === tr.name)?.label ?? tr.label });
|
|
210
|
+
text =
|
|
211
|
+
tr.from && tr.to
|
|
212
|
+
? rich(t("activity.transitionTo"), { actor, transition, from: stateLabel(tr.from), to: _jsx("span", { className: "font-medium text-ink", children: stateLabel(tr.to) }) })
|
|
213
|
+
: rich(t("activity.transition"), { actor, transition });
|
|
214
|
+
}
|
|
215
|
+
else
|
|
216
|
+
text = rich(t("activity.action"), { actor, action: _jsx("span", { className: "font-medium text-ink", children: entity.actions.find((a) => a.name === event.action?.name)?.label ?? event.action?.label }) });
|
|
217
|
+
return (_jsxs("div", { className: "flex gap-3", children: [_jsx("span", { className: "flex size-8 shrink-0 items-center justify-center", children: _jsx("span", { className: "flex size-6 items-center justify-center rounded-full bg-surface-muted text-ink-muted ring-4 ring-surface", children: _jsx(Icon, { className: "size-3.5", "aria-hidden": true }) }) }), _jsxs("div", { className: "min-w-0 flex-1 pt-1 text-sm text-ink-muted", children: [_jsxs("p", { children: [text, " ", _jsx("span", { "aria-hidden": true, children: "\u00B7" }), " ", _jsx(RelativeTime, { iso: event.at, className: "text-xs text-ink-subtle" })] }), event.changes && event.changes.length > 0 && (_jsx("ul", { className: "mt-1 space-y-0.5 text-xs", children: event.changes.map((c) => {
|
|
218
|
+
const field = entity.fields.find((f) => f.name === c.field);
|
|
219
|
+
const label = _jsx("span", { className: "text-ink", children: field?.label ?? c.label });
|
|
220
|
+
const empty = (v) => v === null || v === undefined || v === "" || (Array.isArray(v) && v.length === 0);
|
|
221
|
+
return (_jsx("li", { children: !c.values
|
|
222
|
+
? rich(t("activity.changedHidden"), { field: label })
|
|
223
|
+
: empty(c.from)
|
|
224
|
+
? rich(t("activity.set"), { field: label, to: _jsx(ChangeValue, { field: field, value: c.to }) })
|
|
225
|
+
: empty(c.to)
|
|
226
|
+
? rich(t("activity.cleared"), { field: label, from: _jsx(ChangeValue, { field: field, value: c.from }) })
|
|
227
|
+
: rich(t("activity.changed"), { field: label, from: _jsx(ChangeValue, { field: field, value: c.from }), to: _jsx(ChangeValue, { field: field, value: c.to }) }) }, c.field));
|
|
228
|
+
}) }))] })] }));
|
|
229
|
+
}
|
|
230
|
+
function CommentEvent({ path, recordId, comment, highlighted, readOnly, onDelete }) {
|
|
231
|
+
const { api, locale, t, tv } = useForge();
|
|
232
|
+
const toast = useToast();
|
|
233
|
+
const queryClient = useQueryClient();
|
|
234
|
+
const [editing, setEditing] = useState(false);
|
|
235
|
+
const edit = useMutation({
|
|
236
|
+
mutationFn: (body) => api(`/${path}/${recordId}/comments/${comment.id}`, { method: "PATCH", body: JSON.stringify({ body }) }),
|
|
237
|
+
onSuccess: async () => {
|
|
238
|
+
setEditing(false);
|
|
239
|
+
toast.success(t("activity.commentUpdated"));
|
|
240
|
+
await queryClient.invalidateQueries({ queryKey: ["resource", path, "timeline", recordId] });
|
|
241
|
+
},
|
|
242
|
+
onError: (e) => toast.error(t("toast.failed"), errorText(e, tv)),
|
|
243
|
+
});
|
|
244
|
+
return (_jsxs("div", { id: `comment-${comment.id}`, className: "flex scroll-mt-24 gap-3", children: [_jsx(Avatar, { user: comment.author }), _jsxs("div", { className: cn("min-w-0 flex-1 rounded-[var(--forge-radius-control)] border border-line bg-surface px-3 py-2", highlighted && "ring-2 ring-primary/40"), children: [_jsxs("div", { className: "mb-1 flex items-center gap-2 text-xs", children: [_jsx("span", { className: "text-sm font-medium text-ink", children: comment.author?.name ?? t("activity.someone") }), _jsx(RelativeTime, { iso: comment.createdAt, className: "text-ink-subtle" }), comment.editedAt && (_jsxs("span", { className: "text-ink-subtle", title: new Date(comment.editedAt).toLocaleString(locale), children: ["(", t("activity.edited"), ")"] })), !editing && ((comment.canEdit && !readOnly) || comment.canDelete) && (_jsxs("span", { className: "ml-auto flex items-center gap-0.5", children: [comment.canEdit && !readOnly && (_jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", "aria-label": t("activity.editComment"), title: t("activity.editComment"), onClick: () => setEditing(true), children: _jsx(Pencil, { className: "size-3.5" }) })), comment.canDelete && (_jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1 text-ink-muted hover:text-danger", "aria-label": t("activity.deleteComment"), title: t("activity.deleteComment"), onClick: onDelete, children: _jsx(Trash2, { className: "size-3.5" }) }))] }))] }), editing ? (_jsx(CommentEditor, { path: path, recordId: recordId, initial: comment.body, autoFocus: true, submitLabel: t("common.save"), pending: edit.isPending, onSubmit: (body) => edit.mutateAsync(body).then(() => true, () => false), onCancel: () => setEditing(false) })) : (_jsx(CommentBody, { body: comment.body }))] })] }));
|
|
245
|
+
}
|
|
246
|
+
function errorText(e, tv) {
|
|
247
|
+
const issue = e instanceof ApiError ? e.body?.issues?.[0]?.message : undefined;
|
|
248
|
+
return issue ? tv(issue) : e.message;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* The record's Activity panel: audit history (created, field changes, transitions, deletes) and comments in
|
|
252
|
+
* time order, older events on demand, and a comment box with @mentions. Everything is filtered by the API.
|
|
253
|
+
*/
|
|
254
|
+
export function ActivityPanel({ path, entity, recordId, readOnly }) {
|
|
255
|
+
const { api, t, tv } = useForge();
|
|
256
|
+
const toast = useToast();
|
|
257
|
+
const queryClient = useQueryClient();
|
|
258
|
+
const key = ["resource", path, "timeline", recordId];
|
|
259
|
+
const timeline = useInfiniteQuery({
|
|
260
|
+
queryKey: key,
|
|
261
|
+
queryFn: ({ pageParam }) => api(`/${path}/${recordId}/timeline`, { query: { limit: 20, before: pageParam } }),
|
|
262
|
+
initialPageParam: undefined,
|
|
263
|
+
getNextPageParam: (last) => last.nextCursor ?? undefined,
|
|
264
|
+
});
|
|
265
|
+
const [toDelete, setToDelete] = useState(null);
|
|
266
|
+
const [hash, setHash] = useState("");
|
|
267
|
+
useEffect(() => setHash(typeof window === "undefined" ? "" : window.location.hash.slice(1)), []);
|
|
268
|
+
const refresh = () => queryClient.invalidateQueries({ queryKey: key });
|
|
269
|
+
const post = useMutation({
|
|
270
|
+
mutationFn: (body) => api(`/${path}/${recordId}/comments`, { method: "POST", body: JSON.stringify({ body }) }),
|
|
271
|
+
onSuccess: async () => {
|
|
272
|
+
toast.success(t("activity.commentPosted"));
|
|
273
|
+
await refresh();
|
|
274
|
+
},
|
|
275
|
+
onError: (e) => toast.error(t("toast.failed"), errorText(e, tv)),
|
|
276
|
+
});
|
|
277
|
+
const remove = useMutation({
|
|
278
|
+
mutationFn: (id) => api(`/${path}/${recordId}/comments/${id}`, { method: "DELETE" }),
|
|
279
|
+
onSuccess: async () => {
|
|
280
|
+
setToDelete(null);
|
|
281
|
+
toast.success(t("activity.commentDeleted"));
|
|
282
|
+
await refresh();
|
|
283
|
+
},
|
|
284
|
+
onError: (e) => {
|
|
285
|
+
setToDelete(null);
|
|
286
|
+
toast.error(t("toast.failed"), errorText(e, tv));
|
|
287
|
+
},
|
|
288
|
+
});
|
|
289
|
+
// Oldest first; each API page is newest first.
|
|
290
|
+
const events = useMemo(() => (timeline.data?.pages.flatMap((p) => p.data) ?? []).slice().reverse(), [timeline.data]);
|
|
291
|
+
const stateLabel = (state) => entity.fields.find((f) => f.name === entity.workflow?.field)?.enumValues?.find((v) => v.value === state)?.label ?? state;
|
|
292
|
+
useEffect(() => {
|
|
293
|
+
if (!hash.startsWith("comment-") || !events.some((e) => `comment-${e.id}` === hash))
|
|
294
|
+
return;
|
|
295
|
+
document.getElementById(hash)?.scrollIntoView({ block: "center" });
|
|
296
|
+
}, [hash, events]);
|
|
297
|
+
return (_jsxs("section", { className: "mt-8", "aria-labelledby": "forge-activity-title", children: [_jsx("h2", { id: "forge-activity-title", className: "mb-3 text-sm font-semibold text-ink", children: t("activity.title") }), _jsxs(Card, { className: "p-[var(--forge-pad-card)]", children: [timeline.isLoading ? (_jsx(ListSkeleton, { rows: 3 })) : timeline.error ? (_jsx("p", { role: "alert", className: "text-sm text-danger", children: timeline.error.message })) : (_jsxs(_Fragment, { children: [timeline.hasNextPage && (_jsx("div", { className: "mb-4 flex justify-center", children: _jsxs(Button, { size: "sm", variant: "ghost", loading: timeline.isFetchingNextPage, onClick: () => void timeline.fetchNextPage(), children: [_jsx(History, { className: "size-3.5" }), " ", t("activity.loadEarlier")] }) })), events.length === 0 ? (_jsxs("div", { className: "py-6 text-center", children: [_jsx("p", { className: "text-sm font-medium text-ink", children: t("activity.empty") }), entity.features.comments && !readOnly && _jsx("p", { className: "mt-1 text-sm text-ink-muted", children: t("activity.emptyHint") })] })) : (_jsx("ol", { className: "relative space-y-4 before:absolute before:top-2 before:bottom-2 before:left-4 before:w-px before:bg-line", children: events.map((e) => (_jsx("li", { className: "relative", children: e.kind === "comment" && e.comment ? (_jsx(CommentEvent, { path: path, recordId: recordId, comment: e.comment, highlighted: hash === `comment-${e.id}`, readOnly: readOnly, onDelete: () => setToDelete(e.comment) })) : (_jsx(SystemEvent, { entity: entity, event: e, stateLabel: stateLabel })) }, `${e.kind}-${e.id}`))) }))] })), entity.features.comments && !readOnly && (_jsx("div", { className: "mt-5 border-t border-line pt-4", children: _jsx(CommentEditor, { path: path, recordId: recordId, submitLabel: t("activity.send"), pending: post.isPending, onSubmit: (body) => post.mutateAsync(body).then(() => true, () => false) }) }))] }), _jsx(ConfirmDialog, { open: !!toDelete, title: t("activity.deleteTitle"), message: t("detail.deleteHard"), confirmLabel: t("common.delete"), danger: true, loading: remove.isPending, onConfirm: () => toDelete && remove.mutate(toDelete.id), onClose: () => setToDelete(null) })] }));
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Teams of the active organization (features.teams): create, rename, delete, manage members. */
|
|
2
|
+
export declare function TeamsPage(): import("react").JSX.Element;
|
|
3
|
+
/** Scoped API keys of the organization: create (shown once), list, revoke. */
|
|
4
|
+
export declare function ApiKeysPage(): import("react").JSX.Element;
|