@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/dist/charts.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useId, useRef, useState } from "react";
|
|
4
|
+
import { useLocale, useT } from "./context.js";
|
|
5
|
+
/** Series colours: theme primary, theme accent, then six mid-tone hues legible on light and dark surfaces. */
|
|
6
|
+
export const CHART_PALETTE = [
|
|
7
|
+
"var(--forge-primary)",
|
|
8
|
+
"var(--forge-accent)",
|
|
9
|
+
"#14b8a6", // teal
|
|
10
|
+
"#f59e0b", // amber
|
|
11
|
+
"#ec4899", // pink
|
|
12
|
+
"#8b5cf6", // violet
|
|
13
|
+
"#0ea5e9", // sky
|
|
14
|
+
"#84cc16", // lime
|
|
15
|
+
];
|
|
16
|
+
const DEFAULT_HEIGHT = 220;
|
|
17
|
+
const DEFAULT_WIDTH = 640;
|
|
18
|
+
const FONT = 11;
|
|
19
|
+
const CHAR_W = 6.4; // approximate advance of an 11px UI font glyph
|
|
20
|
+
const INK = "var(--forge-ink)";
|
|
21
|
+
const INK_MUTED = "var(--forge-ink-muted)";
|
|
22
|
+
const INK_SUBTLE = "var(--forge-ink-subtle)";
|
|
23
|
+
const LINE = "var(--forge-line)";
|
|
24
|
+
const SURFACE = "var(--forge-surface)";
|
|
25
|
+
const PRIMARY = "var(--forge-primary)";
|
|
26
|
+
const FORMATS = new Map();
|
|
27
|
+
/** Default value and percentage formatters for a UI locale ("en" → en-US). */
|
|
28
|
+
function localeFormats(locale) {
|
|
29
|
+
let f = FORMATS.get(locale);
|
|
30
|
+
if (!f) {
|
|
31
|
+
const tag = locale === "en" ? "en-US" : locale;
|
|
32
|
+
const compactFmt = new Intl.NumberFormat(tag, { notation: "compact", maximumFractionDigits: 1 });
|
|
33
|
+
const plainFmt = new Intl.NumberFormat(tag, { maximumFractionDigits: 2 });
|
|
34
|
+
const pctFmt = new Intl.NumberFormat(tag, { style: "percent", maximumFractionDigits: 1 });
|
|
35
|
+
f = { number: (v) => (Math.abs(v) >= 10_000 ? compactFmt.format(v) : plainFmt.format(v)), percent: (v) => pctFmt.format(v) };
|
|
36
|
+
FORMATS.set(locale, f);
|
|
37
|
+
}
|
|
38
|
+
return f;
|
|
39
|
+
}
|
|
40
|
+
const textWidth = (s) => s.length * CHAR_W;
|
|
41
|
+
const truncate = (s, max) => s.length > max ? `${s.slice(0, Math.max(1, max - 1)).trimEnd()}…` : s;
|
|
42
|
+
const tip = (d, fmt) => `${d.label}: ${fmt(d.value)}`;
|
|
43
|
+
const clean = (data) => data.map((d) => (Number.isFinite(d.value) ? d : { ...d, value: 0 }));
|
|
44
|
+
const isEmpty = (data) => data.length === 0 || data.every((d) => d.value === 0);
|
|
45
|
+
function summarize(kind, data, fmt, t) {
|
|
46
|
+
if (data.length === 0)
|
|
47
|
+
return t("charts.summaryEmpty", { kind });
|
|
48
|
+
let hi = data[0];
|
|
49
|
+
let lo = data[0];
|
|
50
|
+
for (const d of data) {
|
|
51
|
+
if (d.value > hi.value)
|
|
52
|
+
hi = d;
|
|
53
|
+
if (d.value < lo.value)
|
|
54
|
+
lo = d;
|
|
55
|
+
}
|
|
56
|
+
return t("charts.summary", { kind, count: data.length, highest: tip(hi, fmt), lowest: tip(lo, fmt) });
|
|
57
|
+
}
|
|
58
|
+
/** Domain that always includes zero, snapped to a 1/2/5×10^n step. */
|
|
59
|
+
function niceDomain(values, count) {
|
|
60
|
+
let lo = Math.min(0, ...values);
|
|
61
|
+
let hi = Math.max(0, ...values);
|
|
62
|
+
if (lo === hi)
|
|
63
|
+
hi = 1;
|
|
64
|
+
const raw = (hi - lo) / Math.max(1, count);
|
|
65
|
+
const mag = 10 ** Math.floor(Math.log10(raw));
|
|
66
|
+
const f = raw / mag;
|
|
67
|
+
let step = (f <= 1 ? 1 : f <= 2 ? 2 : f <= 5 ? 5 : 10) * mag;
|
|
68
|
+
// Counts and other whole numbers never get fractional ticks.
|
|
69
|
+
if (step < 1 && values.every((v) => Number.isInteger(v)))
|
|
70
|
+
step = 1;
|
|
71
|
+
lo = Math.floor(lo / step) * step;
|
|
72
|
+
hi = Math.ceil(hi / step) * step;
|
|
73
|
+
const ticks = [];
|
|
74
|
+
for (let i = 0, n = Math.round((hi - lo) / step); i <= n; i++)
|
|
75
|
+
ticks.push(+(lo + i * step).toPrecision(12));
|
|
76
|
+
return { lo, hi, ticks };
|
|
77
|
+
}
|
|
78
|
+
const linear = (d0, d1, r0, r1) => (v) => r0 + ((v - d0) / (d1 - d0 || 1)) * (r1 - r0);
|
|
79
|
+
/** Every Nth category label to show and how many characters each may use, given the slot width per category. */
|
|
80
|
+
function thinLabels(labels, slot) {
|
|
81
|
+
const longest = Math.max(1, ...labels.map((l) => l.length));
|
|
82
|
+
const want = Math.min(longest, 12) * CHAR_W + 8;
|
|
83
|
+
const every = Math.max(1, Math.ceil(want / Math.max(1, slot)));
|
|
84
|
+
return { every, chars: Math.max(3, Math.floor((slot * every - 8) / CHAR_W)) };
|
|
85
|
+
}
|
|
86
|
+
// ---- Shared building blocks ----
|
|
87
|
+
const CSS = `
|
|
88
|
+
.fc-marks:hover .fc-mark{opacity:.55}
|
|
89
|
+
.fc-marks .fc-mark:hover,.fc-marks .fc-link:focus-visible .fc-mark{opacity:1}
|
|
90
|
+
.fc-link{outline:none}
|
|
91
|
+
.fc-link:focus-visible .fc-mark{stroke:var(--forge-ink);stroke-width:2}
|
|
92
|
+
.fc-dense .fc-dot{opacity:0}
|
|
93
|
+
.fc-point:hover .fc-dot,.fc-link:focus-visible .fc-dot{opacity:1}
|
|
94
|
+
.fc-legend li:hover{opacity:.8}
|
|
95
|
+
@media (prefers-reduced-motion:no-preference){
|
|
96
|
+
.fc-mark,.fc-dot{transition:opacity .15s ease}
|
|
97
|
+
.fc-enter{animation:fc-fade .45s ease-out both}
|
|
98
|
+
.fc-draw{stroke-dasharray:1;stroke-dashoffset:1;animation:fc-draw .8s ease-out forwards}
|
|
99
|
+
}
|
|
100
|
+
@keyframes fc-fade{from{opacity:0}}
|
|
101
|
+
@keyframes fc-draw{to{stroke-dashoffset:0}}
|
|
102
|
+
`;
|
|
103
|
+
function ChartStyles() {
|
|
104
|
+
// React 19 hoists and de-duplicates <style> elements that carry href + precedence.
|
|
105
|
+
return _jsx("style", { href: "forge-charts", precedence: "default", children: CSS });
|
|
106
|
+
}
|
|
107
|
+
function useWidth() {
|
|
108
|
+
const ref = useRef(null);
|
|
109
|
+
const [width, setWidth] = useState(DEFAULT_WIDTH);
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
const el = ref.current;
|
|
112
|
+
if (!el || typeof ResizeObserver === "undefined")
|
|
113
|
+
return;
|
|
114
|
+
const ro = new ResizeObserver((entries) => {
|
|
115
|
+
const next = Math.round(entries[0]?.contentRect.width ?? 0);
|
|
116
|
+
if (next > 0)
|
|
117
|
+
setWidth((prev) => (Math.abs(prev - next) > 1 ? next : prev));
|
|
118
|
+
});
|
|
119
|
+
ro.observe(el);
|
|
120
|
+
return () => ro.disconnect();
|
|
121
|
+
}, []);
|
|
122
|
+
return [ref, width];
|
|
123
|
+
}
|
|
124
|
+
/** Figure shell: caption, responsive container, empty state and screen-reader data table. */
|
|
125
|
+
function ChartFrame({ title, height, empty, emptyLabel, columns, rows, children }) {
|
|
126
|
+
const [ref, width] = useWidth();
|
|
127
|
+
const t = useT();
|
|
128
|
+
return (_jsxs("figure", { className: "m-0 w-full", children: [_jsx(ChartStyles, {}), _jsx("figcaption", { className: "sr-only", children: title }), _jsx("div", { ref: ref, className: "w-full", children: empty ? (_jsx("div", { className: "flex items-center justify-center text-sm text-ink-subtle", style: { height }, children: emptyLabel ?? t("charts.noData") })) : (children(width)) }), !empty && (_jsxs("table", { className: "sr-only", children: [_jsx("caption", { children: title }), _jsx("thead", { children: _jsx("tr", { children: columns.map((c) => _jsx("th", { scope: "col", children: c }, c)) }) }), _jsx("tbody", { children: rows.map((r, i) => (_jsx("tr", { children: r.map((cell, j) => (j === 0 ? _jsx("th", { scope: "row", children: cell }, j) : _jsx("td", { children: cell }, j))) }, i))) })] }))] }));
|
|
129
|
+
}
|
|
130
|
+
function Svg({ width, height, label, className, children }) {
|
|
131
|
+
return (_jsx("svg", { role: "img", "aria-label": label, viewBox: `0 0 ${width} ${height}`, width: "100%", preserveAspectRatio: "xMidYMid meet", className: className, style: { display: "block", overflow: "visible", fontSize: FONT, fontVariantNumeric: "tabular-nums" }, children: children }));
|
|
132
|
+
}
|
|
133
|
+
/** Wraps a mark in an SVG link when the datum has an href. */
|
|
134
|
+
function Linked({ d, fmt, children }) {
|
|
135
|
+
return d.href ? (_jsx("a", { href: d.href, className: "fc-link", "aria-label": tip(d, fmt), children: children })) : (_jsx(_Fragment, { children: children }));
|
|
136
|
+
}
|
|
137
|
+
/** Value gridlines + tick labels. axis "y": horizontal lines, labels on the left; "x": vertical lines, labels below. */
|
|
138
|
+
function ValueGrid(props) {
|
|
139
|
+
const { axis, ticks, pos, from, to, labelAt, fmt } = props;
|
|
140
|
+
return (_jsx("g", { "aria-hidden": "true", children: ticks.map((t) => {
|
|
141
|
+
const p = pos(t);
|
|
142
|
+
const stroke = t === 0 ? INK_SUBTLE : LINE;
|
|
143
|
+
return axis === "y" ? (_jsxs("g", { children: [_jsx("line", { x1: from, x2: to, y1: p, y2: p, stroke: stroke, strokeDasharray: t === 0 ? undefined : "2 3", shapeRendering: "crispEdges" }), _jsx("text", { x: labelAt, y: p, dy: "0.32em", textAnchor: "end", fill: INK_MUTED, children: fmt(t) })] }, t)) : (_jsxs("g", { children: [_jsx("line", { y1: from, y2: to, x1: p, x2: p, stroke: stroke, strokeDasharray: t === 0 ? undefined : "2 3", shapeRendering: "crispEdges" }), _jsx("text", { x: p, y: labelAt, textAnchor: "middle", fill: INK_MUTED, children: fmt(t) })] }, t));
|
|
144
|
+
}) }));
|
|
145
|
+
}
|
|
146
|
+
/** Category tick labels along the bottom, thinned and truncated to fit. */
|
|
147
|
+
function CategoryAxis({ data, xs, slot, y }) {
|
|
148
|
+
const { every, chars } = thinLabels(data.map((d) => d.label), slot);
|
|
149
|
+
return (_jsx("g", { "aria-hidden": "true", children: data.map((d, i) => i % every === 0 ? (_jsxs("text", { x: xs[i], y: y, textAnchor: "middle", fill: INK_MUTED, children: [_jsx("title", { children: d.label }), truncate(d.label, chars)] }, i)) : null) }));
|
|
150
|
+
}
|
|
151
|
+
/** Rectangle path with the corners at the `end` side (away from the baseline) rounded. */
|
|
152
|
+
function barPath(x, y, w, h, end) {
|
|
153
|
+
const r = Math.min(4, w / 2, h / 2);
|
|
154
|
+
if (r < 0.5)
|
|
155
|
+
return `M${x},${y}h${w}v${h}h${-w}Z`;
|
|
156
|
+
const tl = end === "t" || end === "l", tr = end === "t" || end === "r";
|
|
157
|
+
const br = end === "b" || end === "r", bl = end === "b" || end === "l";
|
|
158
|
+
const x1 = x + w, y1 = y + h;
|
|
159
|
+
return [
|
|
160
|
+
`M${x + (tl ? r : 0)},${y}H${x1 - (tr ? r : 0)}`,
|
|
161
|
+
tr ? `Q${x1},${y} ${x1},${y + r}` : "",
|
|
162
|
+
`V${y1 - (br ? r : 0)}`,
|
|
163
|
+
br ? `Q${x1},${y1} ${x1 - r},${y1}` : "",
|
|
164
|
+
`H${x + (bl ? r : 0)}`,
|
|
165
|
+
bl ? `Q${x},${y1} ${x},${y1 - r}` : "",
|
|
166
|
+
`V${y + (tl ? r : 0)}`,
|
|
167
|
+
tl ? `Q${x},${y} ${x + r},${y}` : "",
|
|
168
|
+
"Z",
|
|
169
|
+
].join("");
|
|
170
|
+
}
|
|
171
|
+
const valueRows = (data, fmt) => data.map((d) => [d.label, fmt(d.value)]);
|
|
172
|
+
// ---- BarChart ----
|
|
173
|
+
export function BarChart(props) {
|
|
174
|
+
const t = useT();
|
|
175
|
+
const { title, height = DEFAULT_HEIGHT, format = localeFormats(useLocale()).number, emptyLabel } = props;
|
|
176
|
+
const data = clean(props.data);
|
|
177
|
+
const orientation = props.orientation ?? (data.length > 8 || data.some((d) => d.label.length > 12) ? "horizontal" : "vertical");
|
|
178
|
+
const label = summarize(t("charts.bar"), data, format, t);
|
|
179
|
+
return (_jsx(ChartFrame, { title: title, height: height, empty: isEmpty(data), emptyLabel: emptyLabel, columns: [t("charts.label"), t("charts.value")], rows: valueRows(data, format), children: (width) => orientation === "vertical" ? (_jsx(VerticalBars, { data: data, width: width, height: height, fmt: format, label: label })) : (_jsx(HorizontalBars, { data: data, width: width, height: height, fmt: format, label: label })) }));
|
|
180
|
+
}
|
|
181
|
+
function VerticalBars({ data, width, height, fmt, label }) {
|
|
182
|
+
const top = 10, bottom = 24, right = 8;
|
|
183
|
+
const { lo, hi, ticks } = niceDomain(data.map((d) => d.value), Math.max(2, Math.floor((height - top - bottom) / 40)));
|
|
184
|
+
const left = Math.max(...ticks.map((t) => textWidth(fmt(t)))) + 12;
|
|
185
|
+
const band = (width - left - right) / data.length;
|
|
186
|
+
const barW = Math.max(1, Math.min(56, band * 0.68));
|
|
187
|
+
const y = linear(lo, hi, height - bottom, top);
|
|
188
|
+
const xs = data.map((_, i) => left + band * (i + 0.5));
|
|
189
|
+
return (_jsxs(Svg, { width: width, height: height, label: label, children: [_jsx(ValueGrid, { axis: "y", ticks: ticks, pos: y, from: left, to: width - right, labelAt: left - 8, fmt: fmt }), _jsx("g", { className: "fc-marks fc-enter", children: data.map((d, i) => {
|
|
190
|
+
const y0 = y(Math.max(0, d.value)), y1 = y(Math.min(0, d.value));
|
|
191
|
+
return (_jsx(Linked, { d: d, fmt: fmt, children: _jsx("path", { className: "fc-mark", d: barPath(xs[i] - barW / 2, y0, barW, y1 - y0, d.value < 0 ? "b" : "t"), fill: PRIMARY, children: _jsx("title", { children: tip(d, fmt) }) }) }, i));
|
|
192
|
+
}) }), _jsx(CategoryAxis, { data: data, xs: xs, slot: band, y: height - 6 })] }));
|
|
193
|
+
}
|
|
194
|
+
function HorizontalBars({ data, width, height, fmt, label }) {
|
|
195
|
+
const rowH = 24, top = 4, bottom = 22;
|
|
196
|
+
const h = Math.max(height, data.length * rowH + top + bottom);
|
|
197
|
+
const row = (h - top - bottom) / data.length;
|
|
198
|
+
const barH = Math.max(2, Math.min(16, row * 0.62));
|
|
199
|
+
const chars = Math.max(4, Math.min(Math.max(...data.map((d) => d.label.length)), 20, Math.floor((width * 0.32) / CHAR_W)));
|
|
200
|
+
const left = chars * CHAR_W + 14;
|
|
201
|
+
const hasNeg = data.some((d) => d.value < 0);
|
|
202
|
+
const right = hasNeg ? 12 : Math.max(...data.map((d) => textWidth(fmt(d.value)))) + 14;
|
|
203
|
+
const { lo, hi, ticks } = niceDomain(data.map((d) => d.value), Math.max(2, Math.floor((width - left - right) / 90)));
|
|
204
|
+
const x = linear(lo, hi, left, width - right);
|
|
205
|
+
return (_jsxs(Svg, { width: width, height: h, label: label, children: [_jsx(ValueGrid, { axis: "x", ticks: ticks, pos: x, from: top, to: h - bottom, labelAt: h - 6, fmt: fmt }), _jsx("g", { className: "fc-marks fc-enter", children: data.map((d, i) => {
|
|
206
|
+
const cy = top + row * (i + 0.5);
|
|
207
|
+
const x0 = x(Math.min(0, d.value)), x1 = x(Math.max(0, d.value));
|
|
208
|
+
return (_jsx(Linked, { d: d, fmt: fmt, children: _jsxs("g", { className: "fc-mark", children: [_jsx("title", { children: tip(d, fmt) }), _jsx("path", { d: barPath(x0, cy - barH / 2, x1 - x0, barH, d.value < 0 ? "l" : "r"), fill: PRIMARY }), _jsx("text", { x: left - 10, y: cy, dy: "0.32em", textAnchor: "end", fill: INK, children: truncate(d.label, chars) }), !hasNeg && (_jsx("text", { x: x1 + 6, y: cy, dy: "0.32em", fill: INK_MUTED, children: fmt(d.value) }))] }) }, i));
|
|
209
|
+
}) })] }));
|
|
210
|
+
}
|
|
211
|
+
// ---- LineChart ----
|
|
212
|
+
export function LineChart(props) {
|
|
213
|
+
const t = useT();
|
|
214
|
+
const { title, height = DEFAULT_HEIGHT, format = localeFormats(useLocale()).number, emptyLabel, area = false } = props;
|
|
215
|
+
const data = clean(props.data);
|
|
216
|
+
const gradientId = `fc-area-${useId().replace(/[^\w-]/g, "")}`;
|
|
217
|
+
return (_jsx(ChartFrame, { title: title, height: height, empty: isEmpty(data), emptyLabel: emptyLabel, columns: [t("charts.label"), t("charts.value")], rows: valueRows(data, format), children: (width) => {
|
|
218
|
+
const top = 10, bottom = 24, right = 12;
|
|
219
|
+
const { lo, hi, ticks } = niceDomain(data.map((d) => d.value), Math.max(2, Math.floor((height - top - bottom) / 40)));
|
|
220
|
+
const left = Math.max(...ticks.map((t) => textWidth(format(t)))) + 14;
|
|
221
|
+
const plotW = width - left - right;
|
|
222
|
+
const slot = data.length > 1 ? plotW / (data.length - 1) : plotW;
|
|
223
|
+
const y = linear(lo, hi, height - bottom, top);
|
|
224
|
+
const pts = data.map((d, i) => ({ d, x: data.length > 1 ? left + i * slot : left + plotW / 2, y: y(d.value) }));
|
|
225
|
+
const line = pts.map((p, i) => `${i ? "L" : "M"}${p.x},${p.y}`).join("");
|
|
226
|
+
const base = y(0);
|
|
227
|
+
const dense = slot < 14;
|
|
228
|
+
return (_jsxs(Svg, { width: width, height: height, label: summarize(t("charts.line"), data, format, t), className: dense ? "fc-dense" : undefined, children: [_jsx(ValueGrid, { axis: "y", ticks: ticks, pos: y, from: left, to: width - right, labelAt: left - 8, fmt: format }), area && (_jsxs(_Fragment, { children: [_jsx("defs", { children: _jsxs("linearGradient", { id: gradientId, x1: "0", x2: "0", y1: "0", y2: "1", children: [_jsx("stop", { offset: "0%", style: { stopColor: PRIMARY, stopOpacity: 0.28 } }), _jsx("stop", { offset: "100%", style: { stopColor: PRIMARY, stopOpacity: 0.02 } })] }) }), _jsx("path", { className: "fc-enter", d: `${line}L${pts[pts.length - 1].x},${base}L${pts[0].x},${base}Z`, fill: `url(#${gradientId})` })] })), _jsx("path", { className: "fc-draw", pathLength: 1, d: line, fill: "none", stroke: PRIMARY, strokeWidth: 2, strokeLinejoin: "round", strokeLinecap: "round" }), _jsx("g", { children: pts.map(({ d, x, y: py }, i) => (_jsx(Linked, { d: d, fmt: format, children: _jsxs("g", { className: "fc-point", children: [_jsx("title", { children: tip(d, format) }), _jsx("circle", { cx: x, cy: py, r: Math.max(4, Math.min(10, slot / 2)), fill: "transparent" }), _jsx("circle", { className: "fc-dot", cx: x, cy: py, r: 3.5, fill: SURFACE, stroke: PRIMARY, strokeWidth: 2 })] }) }, i))) }), _jsx(CategoryAxis, { data: data, xs: pts.map((p) => p.x), slot: slot, y: height - 6 })] }));
|
|
229
|
+
} }));
|
|
230
|
+
}
|
|
231
|
+
// ---- DonutChart ----
|
|
232
|
+
const MAX_SLICES = 7;
|
|
233
|
+
function arcPath(c, r0, r1, a0, a1) {
|
|
234
|
+
const end = Math.min(a1, a0 + Math.PI * 2 - 1e-4); // a full circle is drawn as an almost-closed arc
|
|
235
|
+
const large = end - a0 > Math.PI ? 1 : 0;
|
|
236
|
+
const pt = (r, a) => `${c + r * Math.cos(a)},${c + r * Math.sin(a)}`;
|
|
237
|
+
return `M${pt(r1, a0)}A${r1},${r1} 0 ${large} 1 ${pt(r1, end)}L${pt(r0, end)}A${r0},${r0} 0 ${large} 0 ${pt(r0, a0)}Z`;
|
|
238
|
+
}
|
|
239
|
+
export function DonutChart(props) {
|
|
240
|
+
const t = useT();
|
|
241
|
+
const formats = localeFormats(useLocale());
|
|
242
|
+
const { title, height = DEFAULT_HEIGHT, format = formats.number, emptyLabel } = props;
|
|
243
|
+
const positive = clean(props.data).filter((d) => d.value > 0).sort((a, b) => b.value - a.value);
|
|
244
|
+
const total = positive.reduce((s, d) => s + d.value, 0);
|
|
245
|
+
const slices = positive.slice(0, MAX_SLICES).map((d, i) => ({ ...d, color: CHART_PALETTE[i] }));
|
|
246
|
+
if (positive.length > MAX_SLICES) {
|
|
247
|
+
const rest = positive.slice(MAX_SLICES).reduce((s, d) => s + d.value, 0);
|
|
248
|
+
slices.push({ label: t("charts.other"), value: rest, color: INK_SUBTLE });
|
|
249
|
+
}
|
|
250
|
+
const pct = (v) => formats.percent(total ? v / total : 0);
|
|
251
|
+
const S = height, c = S / 2, r1 = c - 4, r0 = r1 * 0.64;
|
|
252
|
+
let angle = -Math.PI / 2;
|
|
253
|
+
return (_jsx(ChartFrame, { title: title, height: height, empty: total <= 0, emptyLabel: emptyLabel, columns: [t("charts.label"), t("charts.value"), t("charts.share")], rows: slices.map((d) => [d.label, format(d.value), pct(d.value)]), children: () => (_jsxs("div", { className: "flex flex-wrap items-center gap-x-8 gap-y-4", children: [_jsx("div", { className: "shrink-0", style: { width: "100%", maxWidth: S }, children: _jsxs(Svg, { width: S, height: S, label: t("charts.donutSummary", { total: format(total), slices: slices.map((d) => `${tip(d, format)} (${pct(d.value)})`).join("; ") }), children: [_jsx("g", { className: "fc-marks fc-enter", children: slices.map((d, i) => {
|
|
254
|
+
const a0 = angle;
|
|
255
|
+
angle += (d.value / total) * Math.PI * 2;
|
|
256
|
+
return (_jsx(Linked, { d: d, fmt: format, children: _jsx("path", { className: "fc-mark", d: arcPath(c, r0, r1, a0, angle), fill: d.color, stroke: SURFACE, strokeWidth: slices.length > 1 ? 2 : 0, strokeLinejoin: "round", children: _jsx("title", { children: `${tip(d, format)} (${pct(d.value)})` }) }) }, i));
|
|
257
|
+
}) }), _jsx("text", { x: c, y: c, dy: "-0.1em", textAnchor: "middle", fill: INK, style: { fontSize: Math.max(14, S * 0.1), fontWeight: 600 }, children: format(total) }), _jsx("text", { x: c, y: c, dy: "1.6em", textAnchor: "middle", fill: INK_MUTED, children: t("charts.total") })] }) }), _jsx("ul", { className: "fc-legend m-0 min-w-40 flex-1 list-none space-y-1.5 p-0 text-sm", "aria-hidden": "true", children: slices.map((d, i) => (_jsxs("li", { className: "flex items-center gap-2", title: `${tip(d, format)} (${pct(d.value)})`, children: [_jsx("span", { className: "size-2.5 shrink-0 rounded-sm", style: { background: d.color } }), _jsx("span", { className: "min-w-0 flex-1 truncate text-ink", children: d.label }), _jsx("span", { className: "tabular-nums text-ink", children: format(d.value) }), _jsx("span", { className: "w-12 text-right tabular-nums text-ink-muted", children: pct(d.value) })] }, i))) })] })) }));
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../src/charts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Opens the command palette from anywhere (e.g. a sidebar button). */
|
|
2
|
+
export declare function openCommandPalette(): void;
|
|
3
|
+
/** ⌘K / Ctrl+K: jump to any page, create a record, or find records across every entity you can read. */
|
|
4
|
+
export declare function CommandPalette({ extra }: {
|
|
5
|
+
extra?: {
|
|
6
|
+
label: string;
|
|
7
|
+
href: string;
|
|
8
|
+
}[];
|
|
9
|
+
}): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Illustration } from "./illustrations.js";
|
|
4
|
+
import { can } from "@tekki-forge/runtime-permissions";
|
|
5
|
+
import { keepPreviousData, useQuery } from "@tanstack/react-query";
|
|
6
|
+
import { ArrowRight, LayoutDashboard, Plus, Search } from "lucide-react";
|
|
7
|
+
import { useRouter } from "next/navigation";
|
|
8
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
9
|
+
import { useForge, useMe } from "./context.js";
|
|
10
|
+
import { ResourceIcon, cn } from "./ui.js";
|
|
11
|
+
const matches = (label, q) => label.toLowerCase().includes(q.toLowerCase());
|
|
12
|
+
/** Opens the command palette from anywhere (e.g. a sidebar button). */
|
|
13
|
+
export function openCommandPalette() {
|
|
14
|
+
window.dispatchEvent(new CustomEvent("forge:command-palette"));
|
|
15
|
+
}
|
|
16
|
+
/** ⌘K / Ctrl+K: jump to any page, create a record, or find records across every entity you can read. */
|
|
17
|
+
export function CommandPalette({ extra = [] }) {
|
|
18
|
+
const { api, app, resources, t } = useForge();
|
|
19
|
+
const { principal } = useMe();
|
|
20
|
+
const router = useRouter();
|
|
21
|
+
const [open, setOpen] = useState(false);
|
|
22
|
+
const [q, setQ] = useState("");
|
|
23
|
+
const [debounced, setDebounced] = useState("");
|
|
24
|
+
const [active, setActive] = useState(0);
|
|
25
|
+
const inputRef = useRef(null);
|
|
26
|
+
const listRef = useRef(null);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const onKey = (e) => {
|
|
29
|
+
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
setOpen((o) => !o);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const onOpen = () => setOpen(true);
|
|
35
|
+
window.addEventListener("keydown", onKey);
|
|
36
|
+
window.addEventListener("forge:command-palette", onOpen);
|
|
37
|
+
return () => {
|
|
38
|
+
window.removeEventListener("keydown", onKey);
|
|
39
|
+
window.removeEventListener("forge:command-palette", onOpen);
|
|
40
|
+
};
|
|
41
|
+
}, []);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (open) {
|
|
44
|
+
setQ("");
|
|
45
|
+
setDebounced("");
|
|
46
|
+
setActive(0);
|
|
47
|
+
setTimeout(() => inputRef.current?.focus(), 0);
|
|
48
|
+
}
|
|
49
|
+
}, [open]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const t = setTimeout(() => setDebounced(q.trim()), 200);
|
|
52
|
+
return () => clearTimeout(t);
|
|
53
|
+
}, [q]);
|
|
54
|
+
const search = useQuery({
|
|
55
|
+
queryKey: ["forge", "search", debounced],
|
|
56
|
+
queryFn: () => api("/search", { query: { q: debounced } }),
|
|
57
|
+
enabled: open && debounced.length > 0,
|
|
58
|
+
placeholderData: keepPreviousData,
|
|
59
|
+
staleTime: 10_000,
|
|
60
|
+
});
|
|
61
|
+
const items = useMemo(() => {
|
|
62
|
+
const visible = app.entities.filter((e) => resources[e.name]?.nav !== false && can(e, "read", principal));
|
|
63
|
+
const pages = [
|
|
64
|
+
{ id: "nav:/", group: t("palette.goTo"), label: t("nav.dashboard"), href: "/", icon: _jsx(LayoutDashboard, { className: "size-4" }) },
|
|
65
|
+
...visible.map((e) => ({ id: `nav:${e.path}`, group: t("palette.goTo"), label: resources[e.name]?.pluralLabel ?? e.pluralLabel, href: `/${e.path}`, icon: _jsx(ResourceIcon, { name: e.icon }) })),
|
|
66
|
+
...extra.map((x) => ({ id: `nav:${x.href}`, group: t("palette.goTo"), label: x.label, href: x.href, icon: _jsx(ArrowRight, { className: "size-4" }) })),
|
|
67
|
+
];
|
|
68
|
+
const create = app.entities
|
|
69
|
+
.filter((e) => resources[e.name]?.nav !== false && can(e, "create", principal))
|
|
70
|
+
.map((e) => ({ id: `new:${e.path}`, group: t("palette.create"), label: t("list.new", { item: (resources[e.name]?.label ?? e.label).toLowerCase() }), href: `/${e.path}/new`, icon: _jsx(Plus, { className: "size-4" }) }));
|
|
71
|
+
const term = q.trim();
|
|
72
|
+
const records = term && search.data
|
|
73
|
+
? search.data.data.flatMap((g) => g.results.map((r) => ({ id: `rec:${g.path}:${r.id}`, group: resources[g.entity]?.pluralLabel ?? g.label, label: r.label, href: r.href, icon: _jsx(ResourceIcon, { name: g.icon }) })))
|
|
74
|
+
: [];
|
|
75
|
+
if (!term)
|
|
76
|
+
return [...pages, ...create];
|
|
77
|
+
return [...records, ...pages.filter((i) => matches(i.label, term)), ...create.filter((i) => matches(i.label, term))];
|
|
78
|
+
}, [app.entities, resources, principal, extra, q, search.data, t]);
|
|
79
|
+
useEffect(() => setActive(0), [debounced]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
listRef.current?.querySelector(`[data-index="${active}"]`)?.scrollIntoView({ block: "nearest" });
|
|
82
|
+
}, [active]);
|
|
83
|
+
if (!open)
|
|
84
|
+
return null;
|
|
85
|
+
const go = (item) => {
|
|
86
|
+
if (!item)
|
|
87
|
+
return;
|
|
88
|
+
setOpen(false);
|
|
89
|
+
router.push(item.href);
|
|
90
|
+
};
|
|
91
|
+
let lastGroup = "";
|
|
92
|
+
return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-start justify-center p-4 pt-[12vh]", children: [_jsx("div", { className: "forge-overlay absolute inset-0", onClick: () => setOpen(false), "aria-hidden": true }), _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": t("palette.label"), className: "forge-dialog relative w-full max-w-xl overflow-hidden", children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-line px-4", children: [_jsx(Search, { className: "size-4 shrink-0 text-ink-subtle", "aria-hidden": true }), _jsx("input", { ref: inputRef, autoFocus: true, role: "combobox", "aria-expanded": "true", "aria-controls": "forge-palette-list", "aria-activedescendant": items[active] ? `forge-palette-${active}` : undefined, "aria-autocomplete": "list", placeholder: t("palette.placeholder", { app: app.name }), value: q, onChange: (e) => setQ(e.target.value), onKeyDown: (e) => {
|
|
93
|
+
if (e.key === "ArrowDown") {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
setActive((a) => Math.min(items.length - 1, a + 1));
|
|
96
|
+
}
|
|
97
|
+
else if (e.key === "ArrowUp") {
|
|
98
|
+
e.preventDefault();
|
|
99
|
+
setActive((a) => Math.max(0, a - 1));
|
|
100
|
+
}
|
|
101
|
+
else if (e.key === "Enter") {
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
go(items[active]);
|
|
104
|
+
}
|
|
105
|
+
else if (e.key === "Escape") {
|
|
106
|
+
e.preventDefault();
|
|
107
|
+
setOpen(false);
|
|
108
|
+
}
|
|
109
|
+
}, className: "h-12 w-full bg-transparent text-sm text-ink outline-none placeholder:text-ink-subtle" }), _jsx("kbd", { className: "rounded border border-line px-1.5 text-[10px] text-ink-subtle", children: "Esc" })] }), _jsxs("ul", { ref: listRef, id: "forge-palette-list", role: "listbox", className: "max-h-[60vh] overflow-y-auto p-1.5", children: [items.map((item, i) => {
|
|
110
|
+
const header = item.group !== lastGroup ? item.group : null;
|
|
111
|
+
lastGroup = item.group;
|
|
112
|
+
return (_jsxs("li", { role: "presentation", children: [header && _jsx("p", { className: "px-2.5 pt-2 pb-1 text-[11px] font-medium tracking-wide text-ink-subtle uppercase", children: header }), _jsxs("div", { id: `forge-palette-${i}`, "data-index": i, role: "option", "aria-selected": i === active, onMouseMove: () => setActive(i), onClick: () => go(item), className: cn("forge-palette-item flex cursor-pointer items-center gap-2.5 rounded-[var(--forge-radius-control)] px-2.5 py-2 text-sm text-ink-muted"), children: [item.icon, _jsx("span", { className: "truncate", children: item.label }), i === active && _jsx(ArrowRight, { className: "ml-auto size-3.5 text-ink-subtle", "aria-hidden": true })] })] }, item.id));
|
|
113
|
+
}), items.length === 0 && (_jsxs("li", { className: "flex flex-col items-center px-3 py-8 text-center text-sm text-ink-muted", children: [!search.isFetching && _jsx(Illustration, { name: "search", className: "forge-illustration mb-3 h-16 w-auto text-ink-subtle" }), search.isFetching ? t("palette.searching") : t("palette.noMatches", { query: q })] }))] })] })] }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=command-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../src/command-palette.tsx"],"names":[],"mappings":"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"}
|