@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
package/dist/ui.js ADDED
@@ -0,0 +1,106 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Box, Briefcase, Building2, Calendar, CheckSquare, CreditCard, FileText, Folder, Layers, LoaderCircle, Mail, MapPin, Package, ShoppingCart, Star, Tag, Ticket, Users, X, } from "lucide-react";
4
+ import { useEffect } from "react";
5
+ import { useT } from "./context.js";
6
+ import { Illustration } from "./illustrations.js";
7
+ export function cn(...classes) {
8
+ return classes.filter(Boolean).join(" ");
9
+ }
10
+ const ICONS = {
11
+ folder: Folder,
12
+ users: Users,
13
+ user: Users,
14
+ briefcase: Briefcase,
15
+ building: Building2,
16
+ "file-text": FileText,
17
+ box: Box,
18
+ tag: Tag,
19
+ layers: Layers,
20
+ star: Star,
21
+ calendar: Calendar,
22
+ "credit-card": CreditCard,
23
+ mail: Mail,
24
+ "map-pin": MapPin,
25
+ package: Package,
26
+ "shopping-cart": ShoppingCart,
27
+ ticket: Ticket,
28
+ "check-square": CheckSquare,
29
+ };
30
+ export function ResourceIcon({ name, className }) {
31
+ const Icon = ICONS[name] ?? Folder;
32
+ return _jsx(Icon, { className: className ?? "size-4", "aria-hidden": true });
33
+ }
34
+ /** Visual treatment comes from the active Forge style (styles.css); utilities only size and lay out. */
35
+ const VARIANTS = {
36
+ primary: "forge-btn forge-btn-primary",
37
+ secondary: "forge-btn forge-btn-secondary",
38
+ ghost: "forge-btn forge-btn-ghost",
39
+ danger: "forge-btn forge-btn-danger",
40
+ "danger-ghost": "forge-btn forge-btn-danger-ghost",
41
+ };
42
+ export function Button({ variant = "secondary", size = "md", loading, className, children, ...props }) {
43
+ return (_jsxs("button", { type: "button", ...props, disabled: props.disabled || loading, className: cn("inline-flex items-center justify-center gap-1.5 font-medium", size === "sm" ? "h-7 px-2.5 text-xs" : "h-[var(--forge-control-h)] px-3.5 text-sm", VARIANTS[variant], className), children: [loading && _jsx(LoaderCircle, { className: "size-3.5 animate-spin", "aria-hidden": true }), children] }));
44
+ }
45
+ export const inputClass = "forge-input block w-full px-3 py-[var(--forge-control-y)] text-sm";
46
+ export function Input({ className, ...props }) {
47
+ return _jsx("input", { ...props, className: cn(inputClass, className) });
48
+ }
49
+ export function Textarea({ className, ...props }) {
50
+ return _jsx("textarea", { rows: 4, ...props, className: cn(inputClass, "min-h-20", className) });
51
+ }
52
+ export function Select({ className, children, ...props }) {
53
+ return (_jsx("select", { ...props, className: cn(inputClass, "pr-8", className), children: children }));
54
+ }
55
+ export function Label({ children, htmlFor, required }) {
56
+ return (_jsxs("label", { htmlFor: htmlFor, className: "mb-1.5 block text-sm font-medium text-ink", children: [children, required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }));
57
+ }
58
+ export function FieldShell({ label, htmlFor, required, error, hint, children }) {
59
+ return (_jsxs("div", { children: [_jsx(Label, { htmlFor: htmlFor, required: required, children: label }), children, error ? _jsx("p", { className: "mt-1 text-xs text-danger", children: error }) : hint ? _jsx("p", { className: "mt-1 text-xs text-ink-muted", children: hint }) : null] }));
60
+ }
61
+ const BADGE_TONES = ["#6366f1", "#10b981", "#f59e0b", "#0ea5e9", "#f43f5e", "#8b5cf6"];
62
+ export function Badge({ children, tone }) {
63
+ const color = tone === undefined ? undefined : BADGE_TONES[tone % BADGE_TONES.length];
64
+ return (_jsx("span", { className: "forge-badge inline-flex items-center px-2 py-0.5 text-xs font-medium", style: color ? { "--tone": color } : undefined, children: children }));
65
+ }
66
+ export function Card({ children, className }) {
67
+ return _jsx("div", { className: cn("forge-card", className), children: children });
68
+ }
69
+ export function PageHeader({ title, description, actions }) {
70
+ return (_jsxs("div", { className: "mb-6 flex flex-wrap items-end justify-between gap-4", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h1", { className: "forge-heading truncate text-xl font-semibold tracking-tight text-ink", children: title }), description && _jsx("p", { className: "mt-1 text-sm text-ink-muted", children: description })] }), actions && _jsx("div", { className: "flex flex-wrap items-center gap-2", children: actions })] }));
71
+ }
72
+ export function Spinner({ label }) {
73
+ const t = useT();
74
+ return (_jsxs("div", { className: "flex items-center justify-center gap-2 py-16 text-sm text-ink-muted", role: "status", children: [_jsx(LoaderCircle, { className: "size-4 animate-spin", "aria-hidden": true }), " ", label ?? t("common.loading")] }));
75
+ }
76
+ export function EmptyState({ title, description, action, illustration }) {
77
+ return (_jsxs("div", { className: "forge-empty flex flex-col items-center justify-center px-6 py-16 text-center", children: [illustration && _jsx(Illustration, { name: illustration, className: "forge-illustration mb-4 text-ink-subtle" }), _jsx("p", { className: "text-sm font-medium text-ink", children: title }), description && _jsx("p", { className: "mt-1 max-w-sm text-sm text-ink-muted", children: description }), action && _jsx("div", { className: "mt-4", children: action })] }));
78
+ }
79
+ export function Alert({ tone = "error", children }) {
80
+ return (_jsx("div", { role: tone === "error" ? "alert" : "status", "data-forge-alert": tone, className: "forge-alert px-3 py-2 text-sm", children: children }));
81
+ }
82
+ const DIALOG_WIDTH = { md: "max-w-md", lg: "max-w-2xl", xl: "max-w-4xl" };
83
+ export function Dialog({ open, onClose, title, children, footer, size = "md", }) {
84
+ const t = useT();
85
+ useEffect(() => {
86
+ if (!open)
87
+ return;
88
+ const onKey = (e) => e.key === "Escape" && onClose();
89
+ window.addEventListener("keydown", onKey);
90
+ return () => window.removeEventListener("keydown", onKey);
91
+ }, [open, onClose]);
92
+ if (!open)
93
+ return null;
94
+ return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", children: [_jsx("div", { className: "forge-overlay absolute inset-0", onClick: onClose, "aria-hidden": true }), _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": title, className: cn("forge-dialog relative flex max-h-[90vh] w-full flex-col", DIALOG_WIDTH[size]), children: [_jsxs("div", { className: "flex items-center justify-between border-b border-line px-5 py-3", children: [_jsx("h2", { className: "text-sm font-semibold text-ink", children: title }), _jsx("button", { type: "button", onClick: onClose, className: "forge-btn forge-btn-ghost p-1", "aria-label": t("common.close"), children: _jsx(X, { className: "size-4" }) })] }), _jsx("div", { className: "min-h-0 overflow-y-auto px-5 py-4 text-sm text-ink", children: children }), footer && _jsx("div", { className: "flex justify-end gap-2 border-t border-line px-5 py-3", children: footer })] })] }));
95
+ }
96
+ export function ConfirmDialog({ open, title, message, confirmLabel, danger, loading, onConfirm, onClose, }) {
97
+ const t = useT();
98
+ return (_jsx(Dialog, { open: open, onClose: onClose, title: title, footer: _jsxs(_Fragment, { children: [_jsx(Button, { onClick: onClose, children: t("common.cancel") }), _jsx(Button, { variant: danger ? "danger" : "primary", loading: loading, onClick: onConfirm, children: confirmLabel ?? t("common.confirm") })] }), children: message }));
99
+ }
100
+ export function Pagination({ page, pages, total, onPage }) {
101
+ const t = useT();
102
+ const nums = new Set([1, pages, page - 1, page, page + 1].filter((n) => n >= 1 && n <= pages));
103
+ const sorted = [...nums].sort((a, b) => a - b);
104
+ return (_jsxs("div", { className: "flex items-center justify-between gap-4 border-t border-line px-4 py-3 text-sm text-ink-muted", children: [_jsx("span", { children: t("pagination.results", { count: total }) }), _jsxs("nav", { className: "flex items-center gap-1", "aria-label": t("pagination.label"), children: [_jsx(Button, { size: "sm", variant: "ghost", disabled: page <= 1, onClick: () => onPage(page - 1), children: t("pagination.previous") }), sorted.map((n, i) => (_jsxs("span", { className: "flex items-center", children: [i > 0 && sorted[i - 1] < n - 1 && _jsx("span", { className: "px-1", children: "\u2026" }), _jsx(Button, { size: "sm", variant: n === page ? "secondary" : "ghost", "aria-current": n === page ? "page" : undefined, onClick: () => onPage(n), children: n })] }, n))), _jsx(Button, { size: "sm", variant: "ghost", disabled: page >= pages, onClick: () => onPage(page + 1), children: t("pagination.next") })] })] }));
105
+ }
106
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { EntityIR, ResourceMeta } from "@tekki-forge/compiler";
2
+ type Params = Record<string, string>;
3
+ export declare const VIEW_ROW_LIMIT = 500;
4
+ /** List filters without UI-only state, for the views that load many rows at once. */
5
+ export declare function viewQuery(params: Params, fixed?: Params): Params;
6
+ export declare function TruncationNotice({ shown, total }: {
7
+ shown: number;
8
+ total: number;
9
+ }): import("react").JSX.Element | null;
10
+ export declare function BoardView({ entity, resource, params, fixed }: {
11
+ entity: EntityIR;
12
+ resource: ResourceMeta;
13
+ params: Params;
14
+ fixed?: Params;
15
+ }): import("react").JSX.Element;
16
+ export declare function CalendarView({ entity, resource, params, fixed, setParams }: {
17
+ entity: EntityIR;
18
+ resource: ResourceMeta;
19
+ params: Params;
20
+ fixed?: Params;
21
+ setParams: (p: Params) => void;
22
+ }): import("react").JSX.Element;
23
+ export {};
package/dist/views.js ADDED
@@ -0,0 +1,238 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { can, canWriteField, ruleAllowsRecord } from "@tekki-forge/runtime-permissions";
4
+ import { useQuery } from "@tanstack/react-query";
5
+ import { ChevronLeft, ChevronRight, Plus } from "lucide-react";
6
+ import Link from "next/link";
7
+ import { useMemo, useState } from "react";
8
+ import { ApiError, useForge, useMe } from "./context.js";
9
+ import { FieldValue } from "./fields.js";
10
+ import { useRecordChange } from "./record-mutation.js";
11
+ import { Alert, Badge, Button, ConfirmDialog, Spinner, cn } from "./ui.js";
12
+ export const VIEW_ROW_LIMIT = 500;
13
+ /** List filters without UI-only state, for the views that load many rows at once. */
14
+ export function viewQuery(params, fixed) {
15
+ const { page: _page, pageSize: _size, view: _view, month: _month, ...rest } = params;
16
+ return { ...rest, ...fixed, pageSize: String(VIEW_ROW_LIMIT) };
17
+ }
18
+ export function TruncationNotice({ shown, total }) {
19
+ const { t } = useForge();
20
+ if (total <= shown)
21
+ return null;
22
+ return (_jsx("p", { className: "border-b border-line px-4 py-2 text-xs text-ink-muted", children: t("views.truncated", { shown, total }) }));
23
+ }
24
+ function useViewRows(resource, query) {
25
+ const { api } = useForge();
26
+ return useQuery({ queryKey: ["resource", resource.path, "list", query], queryFn: () => api(`/${resource.path}`, { query }) });
27
+ }
28
+ const NONE = "__none";
29
+ export function BoardView({ entity, resource, params, fixed }) {
30
+ const board = entity.views.board;
31
+ const field = entity.fields.find((f) => f.name === board.groupBy);
32
+ const workflow = entity.workflow?.field === field.name ? entity.workflow : undefined;
33
+ const { t } = useForge();
34
+ const { principal } = useMe();
35
+ const list = useViewRows(resource, viewQuery(params, fixed));
36
+ const change = useRecordChange(resource);
37
+ const [dragging, setDragging] = useState(null);
38
+ const [over, setOver] = useState(null);
39
+ const [confirm, setConfirm] = useState(null);
40
+ const [error, setError] = useState(null);
41
+ const rows = list.data?.data ?? [];
42
+ const keyOf = (row) => {
43
+ if (field.relation)
44
+ return row[field.relation.foreignKey] ?? NONE;
45
+ if (field.kind === "boolean")
46
+ return String(!!row[field.name]);
47
+ return row[field.name] ?? NONE;
48
+ };
49
+ const columns = useMemo(() => {
50
+ if (field.kind === "enum") {
51
+ const cols = field.enumValues.map((v, i) => ({ key: v.value, label: v.label, value: v.value, tone: i }));
52
+ return field.required && !rows.some((r) => keyOf(r) === NONE) ? cols : [...cols, { key: NONE, label: t("common.none"), value: null }];
53
+ }
54
+ if (field.kind === "boolean")
55
+ return [{ key: "true", label: t("common.yes"), value: true, tone: 1 }, { key: "false", label: t("common.no"), value: false }];
56
+ const seen = new Map();
57
+ for (const r of rows)
58
+ if (r[field.name])
59
+ seen.set(r[field.name].id, r[field.name].label);
60
+ const cols = [...seen].sort((a, b) => a[1].localeCompare(b[1])).map(([id, label]) => ({ key: id, label, value: id }));
61
+ return field.required ? cols : [...cols, { key: NONE, label: t("common.none"), value: null }];
62
+ // eslint-disable-next-line react-hooks/exhaustive-deps
63
+ }, [rows, field, t]);
64
+ /** The transition (workflow) or permission that allows moving `row` into `col`; null when not allowed. */
65
+ const moveFor = (row, col) => {
66
+ if (keyOf(row) === col.key || row.deletedAt)
67
+ return null;
68
+ if (workflow) {
69
+ const tr = workflow.transitions.find((x) => x.to === col.value && (x.from.length === 0 || x.from.includes(row[field.name])) && ruleAllowsRecord(entity, x.permission, principal, row));
70
+ return tr ? { transition: tr } : null;
71
+ }
72
+ if (col.value === null && field.required)
73
+ return null;
74
+ return canWriteField(entity, field.name, principal, row) ? {} : null;
75
+ };
76
+ const move = (row, col, confirmed = false) => {
77
+ const m = moveFor(row, col);
78
+ if (!m)
79
+ return;
80
+ setError(null);
81
+ if (m.transition && (m.transition.confirm || m.transition.variant === "danger") && !confirmed) {
82
+ setConfirm({ row, transition: m.transition });
83
+ return;
84
+ }
85
+ const optimistic = field.relation
86
+ ? { [field.relation.foreignKey]: col.value, [field.name]: col.value ? { id: col.value, label: col.label } : null }
87
+ : { [field.name]: col.value };
88
+ const patch = field.relation ? { [field.relation.foreignKey]: col.value } : { [field.apiName]: col.value };
89
+ change.mutate({ id: row.id, ...(m.transition ? { transition: m.transition.name } : { patch }), optimistic }, { onError: (e) => setError(e instanceof ApiError ? e.message : t("views.board.moveFailed")) });
90
+ };
91
+ if (list.isLoading)
92
+ return _jsx(Spinner, {});
93
+ if (list.error)
94
+ return _jsx("div", { className: "p-3", children: _jsx(Alert, { children: list.error.message }) });
95
+ return (_jsxs("div", { children: [_jsx(TruncationNotice, { shown: rows.length, total: list.data?.meta.total ?? 0 }), error && (_jsx("div", { className: "p-3 pb-0", children: _jsx(Alert, { children: error }) })), _jsx("div", { className: "flex gap-3 overflow-x-auto p-3", role: "list", "aria-label": t("views.board.label", { items: resource.pluralLabel, field: field.label.toLowerCase() }), children: columns.map((col) => {
96
+ const cards = rows.filter((r) => keyOf(r) === col.key);
97
+ const droppable = dragging ? !!moveFor(dragging, col) : false;
98
+ return (_jsxs("section", { role: "listitem", "aria-label": col.label, "data-forge-column": col.key, onDragOver: (e) => {
99
+ if (!droppable)
100
+ return;
101
+ e.preventDefault();
102
+ e.dataTransfer.dropEffect = "move";
103
+ setOver(col.key);
104
+ }, onDragLeave: () => setOver((o) => (o === col.key ? null : o)), onDrop: (e) => {
105
+ e.preventDefault();
106
+ setOver(null);
107
+ if (dragging)
108
+ move(dragging, col);
109
+ setDragging(null);
110
+ }, className: cn("forge-board-column flex w-72 shrink-0 flex-col rounded-[var(--forge-radius)] bg-surface-muted/60 transition-opacity", dragging && !droppable && keyOf(dragging) !== col.key && "opacity-50", over === col.key && "ring-2 ring-primary"), children: [_jsxs("header", { className: "flex items-center justify-between px-3 py-2", children: [col.tone !== undefined ? _jsx(Badge, { tone: col.tone, children: col.label }) : _jsx("span", { className: "text-xs font-medium text-ink-muted", children: col.label }), _jsx("span", { className: "text-xs text-ink-subtle tabular-nums", children: cards.length })] }), _jsx("ul", { className: "flex min-h-24 flex-col gap-2 px-2 pb-2", children: cards.map((row) => {
111
+ const targets = columns.filter((c) => moveFor(row, c));
112
+ return (_jsxs("li", { draggable: targets.length > 0, onDragStart: (e) => {
113
+ e.dataTransfer.setData("text/plain", row.id);
114
+ e.dataTransfer.effectAllowed = "move";
115
+ setDragging(row);
116
+ }, onDragEnd: () => {
117
+ setDragging(null);
118
+ setOver(null);
119
+ }, className: cn("forge-card group p-3 text-sm", targets.length > 0 && "cursor-grab active:cursor-grabbing", dragging?.id === row.id && "opacity-40"), children: [_jsx(Link, { href: `/${resource.path}/${row.id}`, className: "block font-medium text-ink hover:text-link", draggable: false, children: row[board.title] ? String(row[board.title]) : t("common.untitled") }), board.fields.length > 0 && (_jsx("dl", { className: "mt-2 space-y-1 text-xs", children: board.fields.map((name) => {
120
+ const f = entity.fields.find((x) => x.name === name);
121
+ return (_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("dt", { className: "text-ink-subtle", children: f?.label ?? name }), _jsx("dd", { className: "min-w-0 truncate text-right text-ink-muted", children: _jsx(FieldValue, { field: f, value: row[name], cell: f ? undefined : "datetime" }) })] }, name));
122
+ }) })), targets.length > 0 && (_jsxs("select", { "aria-label": t("views.board.moveCard", { card: String(row[board.title] ?? t("views.board.card")) }), value: "", onChange: (e) => {
123
+ const col = columns.find((c) => c.key === e.target.value);
124
+ if (col)
125
+ move(row, col);
126
+ }, className: "forge-input mt-2 h-7 w-full px-2 py-0 text-xs opacity-0 focus:opacity-100 group-hover:opacity-100", children: [_jsx("option", { value: "", children: workflow ? t("views.board.moveTo") : t("views.board.setField", { field: field.label.toLowerCase() }) }), targets.map((c) => (_jsx("option", { value: c.key, children: moveFor(row, c)?.transition?.label ?? c.label }, c.key)))] }))] }, row.id));
127
+ }) })] }, col.key));
128
+ }) }), _jsx(ConfirmDialog, { open: !!confirm, title: confirm?.transition.label ?? "", message: confirm?.transition.confirm ?? t("detail.transitionConfirm", { item: resource.label.toLowerCase(), state: columns.find((x) => x.value === confirm?.transition.to)?.label ?? confirm?.transition.to.replaceAll("_", " ") ?? "" }), danger: confirm?.transition.variant === "danger", confirmLabel: confirm?.transition.label ?? t("common.confirm"), onConfirm: () => {
129
+ const c = confirm;
130
+ setConfirm(null);
131
+ const col = columns.find((x) => x.value === c.transition.to);
132
+ if (col)
133
+ move(c.row, col, true);
134
+ }, onClose: () => setConfirm(null) })] }));
135
+ }
136
+ // ─── Calendar ─────────────────────────────────────────────────────────────────────────────
137
+ const pad = (n) => String(n).padStart(2, "0");
138
+ /** Local calendar day of a Date as YYYY-MM-DD. */
139
+ const dayKey = (d) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
140
+ const parseDay = (key) => {
141
+ const [y, m, d] = key.split("-").map(Number);
142
+ return new Date(y, m - 1, d);
143
+ };
144
+ const addDays = (key, n) => {
145
+ const d = parseDay(key);
146
+ d.setDate(d.getDate() + n);
147
+ return dayKey(d);
148
+ };
149
+ const daysBetween = (a, b) => Math.round((parseDay(b).getTime() - parseDay(a).getTime()) / 86_400_000);
150
+ const MAX_PER_DAY = 3;
151
+ export function CalendarView({ entity, resource, params, fixed, setParams }) {
152
+ const cal = entity.views.calendar;
153
+ const dateField = entity.fields.find((f) => f.name === cal.date);
154
+ const endField = cal.end ? entity.fields.find((f) => f.name === cal.end) : undefined;
155
+ const { locale, t } = useForge();
156
+ const { principal } = useMe();
157
+ const change = useRecordChange(resource);
158
+ const [expanded, setExpanded] = useState(null);
159
+ const [error, setError] = useState(null);
160
+ const [overDay, setOverDay] = useState(null);
161
+ const [dragging, setDragging] = useState(null);
162
+ const today = dayKey(new Date());
163
+ const month = /^\d{4}-\d{2}$/.test(params.month ?? "") ? params.month : today.slice(0, 7);
164
+ const first = parseDay(`${month}-01`);
165
+ const gridStart = addDays(`${month}-01`, -((first.getDay() + 6) % 7)); // Monday
166
+ const days = Array.from({ length: 42 }, (_, i) => addDays(gridStart, i));
167
+ const gridEnd = days[41];
168
+ // Items that start before the grid but end inside it are included when there is an end field.
169
+ const from = endField ? addDays(gridStart, -62) : gridStart;
170
+ const bound = (key, end) => (dateField.kind === "date" ? key : (end ? new Date(parseDay(addDays(key, 1)).getTime() - 1) : parseDay(key)).toISOString());
171
+ const query = { ...viewQuery(params, fixed), sort: cal.date, [`${cal.date}.gte`]: bound(from, false), [`${cal.date}.lte`]: bound(gridEnd, true) };
172
+ const list = useViewRows(resource, query);
173
+ const keyOfValue = (kind, v) => (v ? (kind === "date" ? String(v).slice(0, 10) : dayKey(new Date(String(v)))) : null);
174
+ const items = (list.data?.data ?? [])
175
+ .map((row) => {
176
+ const start = keyOfValue(dateField.kind, row[cal.date]);
177
+ const endRaw = endField ? keyOfValue(endField.kind, row[endField.name]) : null;
178
+ return start ? { row, start, end: endRaw && endRaw >= start ? endRaw : start } : null;
179
+ })
180
+ .filter((x) => !!x && x.end >= gridStart && x.start <= gridEnd);
181
+ const canMove = (row) => canWriteField(entity, dateField.name, principal, row) && (!endField || canWriteField(entity, endField.name, principal, row));
182
+ const canCreate = can(entity, "create", principal);
183
+ const shift = (value, kind, delta) => {
184
+ if (!value)
185
+ return value;
186
+ if (kind === "date")
187
+ return addDays(String(value).slice(0, 10), delta);
188
+ const d = new Date(String(value));
189
+ d.setDate(d.getDate() + delta); // local days keep the wall-clock time across DST changes
190
+ return d.toISOString();
191
+ };
192
+ const moveTo = (item, day) => {
193
+ const delta = daysBetween(item.start, day);
194
+ if (!delta || !canMove(item.row))
195
+ return;
196
+ setError(null);
197
+ const patch = { [dateField.apiName]: shift(item.row[cal.date], dateField.kind, delta) };
198
+ if (endField && item.row[endField.name])
199
+ patch[endField.apiName] = shift(item.row[endField.name], endField.kind, delta);
200
+ change.mutate({ id: item.row.id, patch, optimistic: patch }, { onError: (e) => setError(e instanceof ApiError ? e.message : t("views.calendar.rescheduleFailed")) });
201
+ };
202
+ const monthLabel = new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" }).format(first);
203
+ const weekdays = Array.from({ length: 7 }, (_, i) => new Intl.DateTimeFormat(locale, { weekday: "short" }).format(parseDay(addDays(gridStart, i))));
204
+ const goto = (m) => setParams({ ...params, month: m });
205
+ const shiftMonth = (n) => {
206
+ const d = new Date(first);
207
+ d.setMonth(d.getMonth() + n);
208
+ goto(dayKey(d).slice(0, 7));
209
+ };
210
+ return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-line px-3 py-2", children: [_jsx("h2", { className: "text-sm font-semibold text-ink capitalize", "aria-live": "polite", children: monthLabel }), _jsxs("div", { className: "ml-auto flex items-center gap-1", children: [_jsx(Button, { size: "sm", variant: "ghost", "aria-label": t("views.calendar.previousMonth"), onClick: () => shiftMonth(-1), children: _jsx(ChevronLeft, { className: "size-4" }) }), _jsx(Button, { size: "sm", onClick: () => goto(today.slice(0, 7)), children: t("views.calendar.today") }), _jsx(Button, { size: "sm", variant: "ghost", "aria-label": t("views.calendar.nextMonth"), onClick: () => shiftMonth(1), children: _jsx(ChevronRight, { className: "size-4" }) })] })] }), list.data && _jsx(TruncationNotice, { shown: list.data.data.length, total: list.data.meta.total }), (error || list.error) && (_jsx("div", { className: "p-3 pb-0", children: _jsx(Alert, { children: error ?? list.error?.message }) })), _jsx("div", { className: cn("overflow-x-auto", list.isFetching && "opacity-80"), children: _jsxs("div", { className: "grid min-w-[42rem] grid-cols-7 text-xs", role: "grid", "aria-label": t("views.calendar.label", { items: resource.pluralLabel, month: monthLabel }), children: [weekdays.map((w) => (_jsx("div", { role: "columnheader", className: "border-b border-line px-2 py-1.5 font-medium text-ink-subtle", children: w }, w))), days.map((day) => {
211
+ const inMonth = day.startsWith(month);
212
+ const dayItems = items.filter((it) => it.start <= day && it.end >= day);
213
+ const visible = expanded === day ? dayItems : dayItems.slice(0, MAX_PER_DAY);
214
+ return (_jsxs("div", { role: "gridcell", "aria-label": parseDay(day).toLocaleDateString(locale, { dateStyle: "full" }), "data-forge-day": day, onDragOver: (e) => {
215
+ if (!dragging)
216
+ return;
217
+ e.preventDefault();
218
+ setOverDay(day);
219
+ }, onDragLeave: () => setOverDay((d) => (d === day ? null : d)), onDrop: (e) => {
220
+ e.preventDefault();
221
+ setOverDay(null);
222
+ if (dragging)
223
+ moveTo(dragging, day);
224
+ setDragging(null);
225
+ }, className: cn("group relative min-h-28 border-r border-b border-line p-1", !inMonth && "bg-surface-muted/40 text-ink-subtle", overDay === day && "ring-2 ring-primary ring-inset"), children: [_jsxs("div", { className: "flex items-center justify-between px-1", children: [_jsx("span", { className: cn("inline-flex size-6 items-center justify-center rounded-full tabular-nums", day === today && "bg-primary font-semibold text-primary-foreground"), children: Number(day.slice(8)) }), canCreate && (_jsx(Link, { href: `/${resource.path}/new?${new URLSearchParams({ ...Object.fromEntries(Object.entries(fixed ?? {}).map(([k, v]) => [`${k}Id`, v])), [dateField.apiName]: dateField.kind === "date" ? day : `${day}T09:00` }).toString()}`, "aria-label": t("views.calendar.newOn", { item: resource.label.toLowerCase(), date: day }), className: "forge-btn forge-btn-ghost p-0.5 opacity-0 group-hover:opacity-100 focus:opacity-100", children: _jsx(Plus, { className: "size-3.5" }) }))] }), _jsx("ul", { className: "mt-1 space-y-0.5", children: visible.map((it) => {
226
+ const movable = canMove(it.row);
227
+ const time = dateField.kind === "datetime" && it.start === day ? new Date(String(it.row[cal.date])).toLocaleTimeString(locale, { hour: "2-digit", minute: "2-digit" }) : null;
228
+ return (_jsx("li", { draggable: movable, onDragStart: (e) => {
229
+ e.dataTransfer.setData("text/plain", it.row.id);
230
+ setDragging(it);
231
+ }, onDragEnd: () => {
232
+ setDragging(null);
233
+ setOverDay(null);
234
+ }, children: _jsxs(Link, { href: `/${resource.path}/${it.row.id}`, draggable: false, className: cn("forge-calendar-item block truncate rounded px-1.5 py-0.5 text-[11px] leading-4", it.start < day ? "rounded-l-none" : "", it.end > day ? "rounded-r-none" : "", movable && "cursor-grab"), title: String(it.row[cal.title] ?? t("common.untitled")), children: [time && _jsx("span", { className: "mr-1 tabular-nums opacity-70", children: time }), String(it.row[cal.title] ?? t("common.untitled"))] }) }, it.row.id));
235
+ }) }), dayItems.length > MAX_PER_DAY && (_jsx("button", { type: "button", onClick: () => setExpanded(expanded === day ? null : day), className: "mt-0.5 px-1.5 text-[11px] text-ink-muted hover:text-link", children: expanded === day ? t("views.calendar.showLess") : t("views.calendar.more", { count: dayItems.length - MAX_PER_DAY }) }))] }, day));
236
+ })] }) })] }));
237
+ }
238
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../src/views.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@tekki-forge/runtime-admin",
3
+ "version": "0.1.0",
4
+ "description": "Forge admin runtime: metadata-driven React/Next.js UI for resources, auth, users and audit logs",
5
+ "keywords": [
6
+ "code-generator",
7
+ "forge",
8
+ "full-stack",
9
+ "tekki-forge"
10
+ ],
11
+ "author": "Mahy KANE",
12
+ "license": "MIT",
13
+ "type": "module",
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./styles.css": "./styles.css"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "styles.css"
26
+ ],
27
+ "engines": {
28
+ "node": ">=22"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "sideEffects": false,
34
+ "dependencies": {
35
+ "@tanstack/react-query": "^5.104.0",
36
+ "lucide-react": "^1.49.0",
37
+ "@tekki-forge/runtime-permissions": "^0.1.0",
38
+ "@tekki-forge/runtime-schema": "^0.1.0",
39
+ "@tekki-forge/compiler": "^0.1.0",
40
+ "@tekki-forge/runtime-auth": "^0.1.0"
41
+ },
42
+ "peerDependencies": {
43
+ "next": "^16.0.0",
44
+ "react": "^19.0.0",
45
+ "react-dom": "^19.0.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/react": "^19.2.0",
49
+ "@types/react-dom": "^19.2.0",
50
+ "next": "16.3.7",
51
+ "react": "19.3.0",
52
+ "react-dom": "19.3.0"
53
+ },
54
+ "scripts": {
55
+ "build": "tsc -p tsconfig.json",
56
+ "typecheck": "tsc -p tsconfig.json --noEmit"
57
+ }
58
+ }