@modern-admin/react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-guard.d.ts +13 -0
- package/dist/action-guard.d.ts.map +1 -0
- package/dist/action-guard.js +15 -0
- package/dist/action-guard.js.map +1 -0
- package/dist/action-menu.d.ts +17 -0
- package/dist/action-menu.d.ts.map +1 -0
- package/dist/action-menu.jsx +80 -0
- package/dist/action-menu.jsx.map +1 -0
- package/dist/admin-app.d.ts +23 -0
- package/dist/admin-app.d.ts.map +1 -0
- package/dist/admin-app.jsx +407 -0
- package/dist/admin-app.jsx.map +1 -0
- package/dist/admin-router.d.ts +29 -0
- package/dist/admin-router.d.ts.map +1 -0
- package/dist/admin-router.jsx +215 -0
- package/dist/admin-router.jsx.map +1 -0
- package/dist/breadcrumbs.d.ts +17 -0
- package/dist/breadcrumbs.d.ts.map +1 -0
- package/dist/breadcrumbs.jsx +40 -0
- package/dist/breadcrumbs.jsx.map +1 -0
- package/dist/client.d.ts +526 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +582 -0
- package/dist/client.js.map +1 -0
- package/dist/component-loader.d.ts +10 -0
- package/dist/component-loader.d.ts.map +1 -0
- package/dist/component-loader.js +23 -0
- package/dist/component-loader.js.map +1 -0
- package/dist/components/ai-assistant-widget.d.ts +3 -0
- package/dist/components/ai-assistant-widget.d.ts.map +1 -0
- package/dist/components/ai-assistant-widget.jsx +390 -0
- package/dist/components/ai-assistant-widget.jsx.map +1 -0
- package/dist/components/ai-fill-dialog.d.ts +9 -0
- package/dist/components/ai-fill-dialog.d.ts.map +1 -0
- package/dist/components/ai-fill-dialog.jsx +105 -0
- package/dist/components/ai-fill-dialog.jsx.map +1 -0
- package/dist/components/chart-builder-dialog.d.ts +10 -0
- package/dist/components/chart-builder-dialog.d.ts.map +1 -0
- package/dist/components/chart-builder-dialog.jsx +433 -0
- package/dist/components/chart-builder-dialog.jsx.map +1 -0
- package/dist/components/chart-widget.d.ts +12 -0
- package/dist/components/chart-widget.d.ts.map +1 -0
- package/dist/components/chart-widget.jsx +365 -0
- package/dist/components/chart-widget.jsx.map +1 -0
- package/dist/components/global-search-dialog.d.ts +7 -0
- package/dist/components/global-search-dialog.d.ts.map +1 -0
- package/dist/components/global-search-dialog.jsx +187 -0
- package/dist/components/global-search-dialog.jsx.map +1 -0
- package/dist/components/group-settings-dialog.d.ts +13 -0
- package/dist/components/group-settings-dialog.d.ts.map +1 -0
- package/dist/components/group-settings-dialog.jsx +53 -0
- package/dist/components/group-settings-dialog.jsx.map +1 -0
- package/dist/components/move-chart-dialog.d.ts +18 -0
- package/dist/components/move-chart-dialog.d.ts.map +1 -0
- package/dist/components/move-chart-dialog.jsx +68 -0
- package/dist/components/move-chart-dialog.jsx.map +1 -0
- package/dist/components/reference-multi-table-dialog.d.ts +12 -0
- package/dist/components/reference-multi-table-dialog.d.ts.map +1 -0
- package/dist/components/reference-multi-table-dialog.jsx +126 -0
- package/dist/components/reference-multi-table-dialog.jsx.map +1 -0
- package/dist/components/related-records-tabs.d.ts +8 -0
- package/dist/components/related-records-tabs.d.ts.map +1 -0
- package/dist/components/related-records-tabs.jsx +75 -0
- package/dist/components/related-records-tabs.jsx.map +1 -0
- package/dist/components/revisions-button.d.ts +7 -0
- package/dist/components/revisions-button.d.ts.map +1 -0
- package/dist/components/revisions-button.jsx +152 -0
- package/dist/components/revisions-button.jsx.map +1 -0
- package/dist/components/wizard-form.d.ts +43 -0
- package/dist/components/wizard-form.d.ts.map +1 -0
- package/dist/components/wizard-form.jsx +136 -0
- package/dist/components/wizard-form.jsx.map +1 -0
- package/dist/dashboard/time-series.d.ts +20 -0
- package/dist/dashboard/time-series.d.ts.map +1 -0
- package/dist/dashboard/time-series.js +108 -0
- package/dist/dashboard/time-series.js.map +1 -0
- package/dist/dialogs.d.ts +35 -0
- package/dist/dialogs.d.ts.map +1 -0
- package/dist/dialogs.jsx +152 -0
- package/dist/dialogs.jsx.map +1 -0
- package/dist/export.d.ts +39 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +114 -0
- package/dist/export.js.map +1 -0
- package/dist/extension-registry.d.ts +122 -0
- package/dist/extension-registry.d.ts.map +1 -0
- package/dist/extension-registry.js +93 -0
- package/dist/extension-registry.js.map +1 -0
- package/dist/header-controls.d.ts +4 -0
- package/dist/header-controls.d.ts.map +1 -0
- package/dist/header-controls.jsx +70 -0
- package/dist/header-controls.jsx.map +1 -0
- package/dist/hooks.d.ts +104 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +374 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hotkey-help.d.ts +3 -0
- package/dist/hotkey-help.d.ts.map +1 -0
- package/dist/hotkey-help.jsx +32 -0
- package/dist/hotkey-help.jsx.map +1 -0
- package/dist/hotkey-registry.d.ts +18 -0
- package/dist/hotkey-registry.d.ts.map +1 -0
- package/dist/hotkey-registry.jsx +34 -0
- package/dist/hotkey-registry.jsx.map +1 -0
- package/dist/i18n.d.ts +74 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.jsx +127 -0
- package/dist/i18n.jsx.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/notify.d.ts +41 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.jsx +58 -0
- package/dist/notify.jsx.map +1 -0
- package/dist/pages/ai-assistant-settings-section.d.ts +3 -0
- package/dist/pages/ai-assistant-settings-section.d.ts.map +1 -0
- package/dist/pages/ai-assistant-settings-section.jsx +126 -0
- package/dist/pages/ai-assistant-settings-section.jsx.map +1 -0
- package/dist/pages/audit-log-page.d.ts +3 -0
- package/dist/pages/audit-log-page.d.ts.map +1 -0
- package/dist/pages/audit-log-page.jsx +354 -0
- package/dist/pages/audit-log-page.jsx.map +1 -0
- package/dist/pages/edit-page.d.ts +7 -0
- package/dist/pages/edit-page.d.ts.map +1 -0
- package/dist/pages/edit-page.jsx +614 -0
- package/dist/pages/edit-page.jsx.map +1 -0
- package/dist/pages/export-dialog.d.ts +11 -0
- package/dist/pages/export-dialog.d.ts.map +1 -0
- package/dist/pages/export-dialog.jsx +102 -0
- package/dist/pages/export-dialog.jsx.map +1 -0
- package/dist/pages/home-page.d.ts +3 -0
- package/dist/pages/home-page.d.ts.map +1 -0
- package/dist/pages/home-page.jsx +211 -0
- package/dist/pages/home-page.jsx.map +1 -0
- package/dist/pages/list-page.d.ts +42 -0
- package/dist/pages/list-page.d.ts.map +1 -0
- package/dist/pages/list-page.jsx +1596 -0
- package/dist/pages/list-page.jsx.map +1 -0
- package/dist/pages/login-page.d.ts +11 -0
- package/dist/pages/login-page.d.ts.map +1 -0
- package/dist/pages/login-page.jsx +157 -0
- package/dist/pages/login-page.jsx.map +1 -0
- package/dist/pages/settings-page.d.ts +5 -0
- package/dist/pages/settings-page.d.ts.map +1 -0
- package/dist/pages/settings-page.jsx +787 -0
- package/dist/pages/settings-page.jsx.map +1 -0
- package/dist/pages/settings-shared.d.ts +51 -0
- package/dist/pages/settings-shared.d.ts.map +1 -0
- package/dist/pages/settings-shared.jsx +66 -0
- package/dist/pages/settings-shared.jsx.map +1 -0
- package/dist/pages/show-page.d.ts +7 -0
- package/dist/pages/show-page.d.ts.map +1 -0
- package/dist/pages/show-page.jsx +147 -0
- package/dist/pages/show-page.jsx.map +1 -0
- package/dist/pages/wizard-create-page.d.ts +14 -0
- package/dist/pages/wizard-create-page.d.ts.map +1 -0
- package/dist/pages/wizard-create-page.jsx +106 -0
- package/dist/pages/wizard-create-page.jsx.map +1 -0
- package/dist/property-renderer.d.ts +8 -0
- package/dist/property-renderer.d.ts.map +1 -0
- package/dist/property-renderer.jsx +690 -0
- package/dist/property-renderer.jsx.map +1 -0
- package/dist/provider.d.ts +20 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.jsx +32 -0
- package/dist/provider.jsx.map +1 -0
- package/dist/realtime.d.ts +22 -0
- package/dist/realtime.d.ts.map +1 -0
- package/dist/realtime.js +38 -0
- package/dist/realtime.js.map +1 -0
- package/dist/reference.d.ts +52 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.jsx +224 -0
- package/dist/reference.jsx.map +1 -0
- package/dist/relations.d.ts +11 -0
- package/dist/relations.d.ts.map +1 -0
- package/dist/relations.js +36 -0
- package/dist/relations.js.map +1 -0
- package/dist/router.d.ts +82 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.jsx +187 -0
- package/dist/router.jsx.map +1 -0
- package/dist/show-when.d.ts +7 -0
- package/dist/show-when.d.ts.map +1 -0
- package/dist/show-when.js +77 -0
- package/dist/show-when.js.map +1 -0
- package/dist/types.d.ts +194 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/dist/use-dashboard-charts.d.ts +93 -0
- package/dist/use-dashboard-charts.d.ts.map +1 -0
- package/dist/use-dashboard-charts.js +263 -0
- package/dist/use-dashboard-charts.js.map +1 -0
- package/dist/use-hotkey.d.ts +17 -0
- package/dist/use-hotkey.d.ts.map +1 -0
- package/dist/use-hotkey.js +103 -0
- package/dist/use-hotkey.js.map +1 -0
- package/dist/user-directory.d.ts +18 -0
- package/dist/user-directory.d.ts.map +1 -0
- package/dist/user-directory.js +51 -0
- package/dist/user-directory.js.map +1 -0
- package/dist/validation.d.ts +22 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +338 -0
- package/dist/validation.js.map +1 -0
- package/package.json +59 -0
- package/src/action-guard.ts +20 -0
- package/src/action-menu.tsx +161 -0
- package/src/admin-app.tsx +630 -0
- package/src/admin-router.tsx +273 -0
- package/src/breadcrumbs.tsx +75 -0
- package/src/client.ts +1093 -0
- package/src/component-loader.ts +33 -0
- package/src/components/ai-assistant-widget.tsx +565 -0
- package/src/components/ai-fill-dialog.tsx +143 -0
- package/src/components/chart-builder-dialog.tsx +618 -0
- package/src/components/chart-widget.tsx +654 -0
- package/src/components/global-search-dialog.tsx +272 -0
- package/src/components/group-settings-dialog.tsx +93 -0
- package/src/components/move-chart-dialog.tsx +130 -0
- package/src/components/reference-multi-table-dialog.tsx +196 -0
- package/src/components/related-records-tabs.tsx +130 -0
- package/src/components/revisions-button.tsx +237 -0
- package/src/components/wizard-form.tsx +302 -0
- package/src/dashboard/time-series.ts +125 -0
- package/src/dialogs.tsx +265 -0
- package/src/export.ts +140 -0
- package/src/extension-registry.ts +195 -0
- package/src/header-controls.tsx +125 -0
- package/src/hooks.ts +509 -0
- package/src/hotkey-help.tsx +56 -0
- package/src/hotkey-registry.tsx +60 -0
- package/src/i18n.tsx +267 -0
- package/src/index.ts +192 -0
- package/src/notify.tsx +94 -0
- package/src/pages/ai-assistant-settings-section.tsx +167 -0
- package/src/pages/audit-log-page.tsx +580 -0
- package/src/pages/edit-page.tsx +743 -0
- package/src/pages/export-dialog.tsx +154 -0
- package/src/pages/home-page.tsx +318 -0
- package/src/pages/list-page.tsx +2645 -0
- package/src/pages/login-page.tsx +242 -0
- package/src/pages/settings-page.tsx +1143 -0
- package/src/pages/settings-shared.tsx +134 -0
- package/src/pages/show-page.tsx +223 -0
- package/src/pages/wizard-create-page.tsx +164 -0
- package/src/property-renderer.tsx +1143 -0
- package/src/provider.tsx +70 -0
- package/src/realtime.ts +55 -0
- package/src/reference.tsx +386 -0
- package/src/relations.ts +55 -0
- package/src/router.tsx +211 -0
- package/src/show-when.ts +76 -0
- package/src/types.ts +198 -0
- package/src/use-dashboard-charts.ts +362 -0
- package/src/use-hotkey.ts +128 -0
- package/src/user-directory.ts +56 -0
- package/src/validation.ts +361 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
// Tiny `fetch` wrapper aimed at the @modern-admin/nest REST surface. We avoid
|
|
2
|
+
// pulling axios — the host browser already has fetch, and TanStack Query gives
|
|
3
|
+
// us retry/dedup/caching anyway.
|
|
4
|
+
const DEFAULT_DEMO_SESSION_STORAGE_KEY = 'modern-admin:demo-session:v1';
|
|
5
|
+
const DEFAULT_AUTH_BASE_PATH = '/admin/api/auth';
|
|
6
|
+
const buildQuery = (query) => {
|
|
7
|
+
if (!query)
|
|
8
|
+
return '';
|
|
9
|
+
const params = new URLSearchParams();
|
|
10
|
+
if (query.page != null)
|
|
11
|
+
params.set('page', String(query.page));
|
|
12
|
+
if (query.perPage != null)
|
|
13
|
+
params.set('perPage', String(query.perPage));
|
|
14
|
+
if (query.sortBy)
|
|
15
|
+
params.set('sortBy', query.sortBy);
|
|
16
|
+
if (query.direction)
|
|
17
|
+
params.set('direction', query.direction);
|
|
18
|
+
if (query.filters) {
|
|
19
|
+
// Bracket notation — Express's qs parser turns `filters[k]=v` into
|
|
20
|
+
// `query.filters = { k: 'v' }` which is what the list action expects.
|
|
21
|
+
for (const [k, v] of Object.entries(query.filters)) {
|
|
22
|
+
if (v !== '' && v != null)
|
|
23
|
+
params.set(`filters[${k}]`, v);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const qs = params.toString();
|
|
27
|
+
return qs ? `?${qs}` : '';
|
|
28
|
+
};
|
|
29
|
+
export class AdminClient {
|
|
30
|
+
constructor(opts = {}) {
|
|
31
|
+
this.baseUrl = opts.baseUrl?.replace(/\/$/, '') ?? '';
|
|
32
|
+
this.credentials = opts.credentials ?? 'include';
|
|
33
|
+
this.headers = opts.headers ?? {};
|
|
34
|
+
this.demoSessionStorageKey = opts.persistDemoSession
|
|
35
|
+
? (opts.demoSessionStorageKey ?? DEFAULT_DEMO_SESSION_STORAGE_KEY)
|
|
36
|
+
: null;
|
|
37
|
+
this.authBasePath = (opts.authBasePath ?? DEFAULT_AUTH_BASE_PATH).replace(/\/$/, '');
|
|
38
|
+
this.signInPath = `${this.authBasePath}/sign-in/email`;
|
|
39
|
+
this.signOutPath = `${this.authBasePath}/sign-out`;
|
|
40
|
+
}
|
|
41
|
+
async requestOnce(path, init = {}) {
|
|
42
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
43
|
+
credentials: this.credentials,
|
|
44
|
+
...init,
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/json',
|
|
47
|
+
...this.headers,
|
|
48
|
+
...init.headers,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
if (!res.ok) {
|
|
52
|
+
const text = await res.text().catch(() => '');
|
|
53
|
+
throw new AdminApiError(res.status, text || res.statusText);
|
|
54
|
+
}
|
|
55
|
+
if (res.status === 204)
|
|
56
|
+
return undefined;
|
|
57
|
+
return (await res.json());
|
|
58
|
+
}
|
|
59
|
+
async request(path, init = {}, allowDemoRestore = true) {
|
|
60
|
+
try {
|
|
61
|
+
return await this.requestOnce(path, init);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
const canRestore = allowDemoRestore &&
|
|
65
|
+
err instanceof AdminApiError &&
|
|
66
|
+
err.status === 401 &&
|
|
67
|
+
path !== this.signInPath &&
|
|
68
|
+
path !== this.signOutPath;
|
|
69
|
+
if (!canRestore)
|
|
70
|
+
throw err;
|
|
71
|
+
const restored = await this.restoreDemoSession();
|
|
72
|
+
if (!restored)
|
|
73
|
+
throw err;
|
|
74
|
+
return this.requestOnce(path, init);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
readDemoSession() {
|
|
78
|
+
if (!this.demoSessionStorageKey || typeof window === 'undefined')
|
|
79
|
+
return null;
|
|
80
|
+
try {
|
|
81
|
+
const raw = window.localStorage.getItem(this.demoSessionStorageKey);
|
|
82
|
+
if (!raw)
|
|
83
|
+
return null;
|
|
84
|
+
const parsed = JSON.parse(raw);
|
|
85
|
+
if (typeof parsed.email !== 'string' || typeof parsed.password !== 'string')
|
|
86
|
+
return null;
|
|
87
|
+
return { email: parsed.email, password: parsed.password };
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
writeDemoSession(session) {
|
|
94
|
+
if (!this.demoSessionStorageKey || typeof window === 'undefined')
|
|
95
|
+
return;
|
|
96
|
+
try {
|
|
97
|
+
window.localStorage.setItem(this.demoSessionStorageKey, JSON.stringify(session));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
clearDemoSession() {
|
|
104
|
+
if (!this.demoSessionStorageKey || typeof window === 'undefined')
|
|
105
|
+
return;
|
|
106
|
+
try {
|
|
107
|
+
window.localStorage.removeItem(this.demoSessionStorageKey);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async restoreDemoSession() {
|
|
114
|
+
const session = this.readDemoSession();
|
|
115
|
+
if (!session)
|
|
116
|
+
return false;
|
|
117
|
+
try {
|
|
118
|
+
await this.request(this.signInPath, {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
body: JSON.stringify(session),
|
|
121
|
+
});
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
this.clearDemoSession();
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
config() {
|
|
130
|
+
return this.request('/admin/api/config');
|
|
131
|
+
}
|
|
132
|
+
/** Resolve the current authenticated admin. Throws AdminApiError(401) when
|
|
133
|
+
* unauthenticated — callers should branch on that to render login. */
|
|
134
|
+
me() {
|
|
135
|
+
return this.request('/admin/api/auth/me');
|
|
136
|
+
}
|
|
137
|
+
/** Email/password login via the host-mounted Better Auth handler. The
|
|
138
|
+
* endpoint sets an http-only session cookie that subsequent requests
|
|
139
|
+
* rely on (`credentials: 'include'`). The audit-log entry is written
|
|
140
|
+
* server-side by Better Auth's `session.create.after` hook, which
|
|
141
|
+
* covers email/password, OAuth, passkey and api-key flows uniformly. */
|
|
142
|
+
async login(email, password) {
|
|
143
|
+
await this.request(this.signInPath, {
|
|
144
|
+
method: 'POST',
|
|
145
|
+
body: JSON.stringify({ email, password }),
|
|
146
|
+
});
|
|
147
|
+
this.writeDemoSession({ email, password });
|
|
148
|
+
}
|
|
149
|
+
/** Fetch public auth UI metadata: which social providers are enabled,
|
|
150
|
+
* whether email/password login is active. The endpoint is unauthenticated. */
|
|
151
|
+
getAuthUiProps() {
|
|
152
|
+
return this.requestOnce('/admin/api/auth/ui-props');
|
|
153
|
+
}
|
|
154
|
+
/** Initiate an OAuth social-login flow. Calls Better Auth's sign-in/social
|
|
155
|
+
* endpoint which returns a redirect URL, then navigates the browser there.
|
|
156
|
+
* `callbackUrl` defaults to the current page so the app re-checks auth
|
|
157
|
+
* after the provider redirects back. */
|
|
158
|
+
async loginSocial(provider, callbackUrl) {
|
|
159
|
+
const resolved = callbackUrl ?? (typeof window !== 'undefined' ? window.location.href : '/');
|
|
160
|
+
const data = await this.requestOnce(`${this.authBasePath}/sign-in/social`, {
|
|
161
|
+
method: 'POST',
|
|
162
|
+
body: JSON.stringify({ provider, callbackURL: resolved }),
|
|
163
|
+
});
|
|
164
|
+
if (data.url && typeof window !== 'undefined') {
|
|
165
|
+
window.location.href = data.url;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** Sign the current session out. Better Auth's sign-out endpoint requires
|
|
169
|
+
* an explicit JSON body (even if empty) when Content-Type is JSON. */
|
|
170
|
+
async logout() {
|
|
171
|
+
try {
|
|
172
|
+
await this.request(this.signOutPath, {
|
|
173
|
+
method: 'POST',
|
|
174
|
+
body: '{}',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
this.clearDemoSession();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
list(resourceId, query) {
|
|
182
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/list${buildQuery(query)}`);
|
|
183
|
+
}
|
|
184
|
+
show(resourceId, recordId) {
|
|
185
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/actions/show`);
|
|
186
|
+
}
|
|
187
|
+
create(resourceId, payload) {
|
|
188
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/new`, { method: 'POST', body: JSON.stringify(payload) });
|
|
189
|
+
}
|
|
190
|
+
update(resourceId, recordId, payload) {
|
|
191
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/actions/edit`, { method: 'PATCH', body: JSON.stringify(payload) });
|
|
192
|
+
}
|
|
193
|
+
delete(resourceId, recordId) {
|
|
194
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/actions/delete`, { method: 'DELETE' });
|
|
195
|
+
}
|
|
196
|
+
/** Bulk-delete a set of records via the resource's `bulkDelete` action. */
|
|
197
|
+
bulkDelete(resourceId, recordIds) {
|
|
198
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/bulkDelete`, { method: 'POST', body: JSON.stringify({ recordIds }) });
|
|
199
|
+
}
|
|
200
|
+
/** Fetch distinct values for a field — used by the filter value picker.
|
|
201
|
+
* Returns `{ values, hasMore }`. */
|
|
202
|
+
distinctValues(resourceId, field, options) {
|
|
203
|
+
const params = new URLSearchParams({ field });
|
|
204
|
+
if (options?.search)
|
|
205
|
+
params.set('search', options.search);
|
|
206
|
+
if (options?.limit != null)
|
|
207
|
+
params.set('limit', String(options.limit));
|
|
208
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/values?${params.toString()}`);
|
|
209
|
+
}
|
|
210
|
+
search(resourceId, query) {
|
|
211
|
+
const qs = query ? `?q=${encodeURIComponent(query)}` : '';
|
|
212
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/search${qs}`);
|
|
213
|
+
}
|
|
214
|
+
/** Cross-resource search. Fans `query` out to every registered resource's
|
|
215
|
+
* `search` action; resources the principal cannot access are omitted.
|
|
216
|
+
*
|
|
217
|
+
* Accepts an optional `AbortSignal` so the command-palette dialog can
|
|
218
|
+
* cancel an in-flight request when the user keeps typing — without this
|
|
219
|
+
* the server is hit once per keystroke and stale responses race with
|
|
220
|
+
* newer ones. */
|
|
221
|
+
globalSearch(query, perResourceLimit, options = {}) {
|
|
222
|
+
const params = new URLSearchParams({ q: query });
|
|
223
|
+
if (perResourceLimit != null)
|
|
224
|
+
params.set('perResourceLimit', String(perResourceLimit));
|
|
225
|
+
return this.request(`/admin/api/global-search?${params.toString()}`, options.signal ? { signal: options.signal } : {});
|
|
226
|
+
}
|
|
227
|
+
/** Invoke a custom record-scoped action (actionType: 'record'). */
|
|
228
|
+
invokeRecordAction(resourceId, recordId, actionName, payload = {}) {
|
|
229
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/actions/${encodeURIComponent(actionName)}`, { method: 'POST', body: JSON.stringify(payload) });
|
|
230
|
+
}
|
|
231
|
+
/** Invoke a custom bulk-scoped action (actionType: 'bulk'). */
|
|
232
|
+
invokeBulkAction(resourceId, actionName, recordIds) {
|
|
233
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/${encodeURIComponent(actionName)}`, { method: 'POST', body: JSON.stringify({ recordIds: Array.from(recordIds) }) });
|
|
234
|
+
}
|
|
235
|
+
/** Invoke a custom resource-scoped action (actionType: 'resource'). */
|
|
236
|
+
invokeResourceAction(resourceId, actionName, payload = {}) {
|
|
237
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/actions/${encodeURIComponent(actionName)}`, { method: 'POST', body: JSON.stringify(payload) });
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Run a time-series aggregation. KPI mode = `step: 'all'`. Multi-series
|
|
241
|
+
* via secondary `groupBy` (top-N truncation server-side).
|
|
242
|
+
*/
|
|
243
|
+
timeseries(query) {
|
|
244
|
+
const body = {
|
|
245
|
+
resource: query.resource,
|
|
246
|
+
dateField: query.dateField,
|
|
247
|
+
step: query.step,
|
|
248
|
+
metric: query.metric,
|
|
249
|
+
from: toIsoDateTime(query.from, 'start'),
|
|
250
|
+
to: toIsoDateTime(query.to, 'end'),
|
|
251
|
+
};
|
|
252
|
+
if (query.field)
|
|
253
|
+
body.field = query.field;
|
|
254
|
+
if (query.groupBy)
|
|
255
|
+
body.groupBy = query.groupBy;
|
|
256
|
+
if (query.topN != null)
|
|
257
|
+
body.topN = query.topN;
|
|
258
|
+
if (query.filters && Object.keys(query.filters).length) {
|
|
259
|
+
body.filters = query.filters;
|
|
260
|
+
}
|
|
261
|
+
if (query.comparePrevious)
|
|
262
|
+
body.comparePrevious = true;
|
|
263
|
+
if (query.groupByLabelResource)
|
|
264
|
+
body.groupByLabelResource = query.groupByLabelResource;
|
|
265
|
+
return this.request('/admin/api/timeseries', {
|
|
266
|
+
method: 'POST',
|
|
267
|
+
body: JSON.stringify(body),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
listHistory(resourceId, recordId, query = {}) {
|
|
271
|
+
const params = new URLSearchParams();
|
|
272
|
+
if (query.limit != null)
|
|
273
|
+
params.set('limit', String(query.limit));
|
|
274
|
+
if (query.offset != null)
|
|
275
|
+
params.set('offset', String(query.offset));
|
|
276
|
+
const qs = params.toString() ? `?${params.toString()}` : '';
|
|
277
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/history${qs}`);
|
|
278
|
+
}
|
|
279
|
+
getHistoryRevision(resourceId, recordId, revisionId) {
|
|
280
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/history/${encodeURIComponent(revisionId)}`);
|
|
281
|
+
}
|
|
282
|
+
revertHistoryRevision(resourceId, recordId, revisionId, body = {}) {
|
|
283
|
+
return this.request(`/admin/api/resources/${encodeURIComponent(resourceId)}/records/${encodeURIComponent(recordId)}/history/${encodeURIComponent(revisionId)}/revert`, { method: 'POST', body: JSON.stringify(body) });
|
|
284
|
+
}
|
|
285
|
+
listAuditLog(query = {}) {
|
|
286
|
+
const params = new URLSearchParams();
|
|
287
|
+
if (query.resourceId)
|
|
288
|
+
params.set('resourceId', query.resourceId);
|
|
289
|
+
if (query.recordId)
|
|
290
|
+
params.set('recordId', query.recordId);
|
|
291
|
+
if (query.userId)
|
|
292
|
+
params.set('userId', query.userId);
|
|
293
|
+
if (query.actions?.length)
|
|
294
|
+
params.set('actions', query.actions.join(','));
|
|
295
|
+
if (query.from)
|
|
296
|
+
params.set('from', toIsoDateTime(query.from, 'start'));
|
|
297
|
+
if (query.to)
|
|
298
|
+
params.set('to', toIsoDateTime(query.to, 'end'));
|
|
299
|
+
if (query.limit != null)
|
|
300
|
+
params.set('limit', String(query.limit));
|
|
301
|
+
if (query.offset != null)
|
|
302
|
+
params.set('offset', String(query.offset));
|
|
303
|
+
if (query.before != null)
|
|
304
|
+
params.set('before', String(query.before));
|
|
305
|
+
const qs = params.toString() ? `?${params.toString()}` : '';
|
|
306
|
+
return this.request(`/admin/api/audit-log${qs}`);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Upload a single file for a `type: 'file'` property, reporting progress
|
|
310
|
+
* via `options.onProgress`. Uses `XMLHttpRequest` because the fetch API
|
|
311
|
+
* does not expose upload-side progress events.
|
|
312
|
+
*
|
|
313
|
+
* Returns the metadata record for the uploaded file. The server endpoint
|
|
314
|
+
* (`POST /admin/api/resources/:id/actions/upload`) accepts batch uploads
|
|
315
|
+
* and replies with an array; we send one file per request and unwrap the
|
|
316
|
+
* single result so the caller gets per-file progress and per-file errors.
|
|
317
|
+
*/
|
|
318
|
+
uploadFile(resourceId, field, file, options = {}) {
|
|
319
|
+
const url = `${this.baseUrl}/admin/api/resources/${encodeURIComponent(resourceId)}/actions/upload?field=${encodeURIComponent(field)}`;
|
|
320
|
+
const form = new FormData();
|
|
321
|
+
form.append('files', file);
|
|
322
|
+
return new Promise((resolve, reject) => {
|
|
323
|
+
const xhr = new XMLHttpRequest();
|
|
324
|
+
xhr.open('POST', url, true);
|
|
325
|
+
xhr.withCredentials = this.credentials !== 'omit';
|
|
326
|
+
for (const [k, v] of Object.entries(this.headers))
|
|
327
|
+
xhr.setRequestHeader(k, v);
|
|
328
|
+
xhr.responseType = 'text';
|
|
329
|
+
xhr.upload.onprogress = (ev) => {
|
|
330
|
+
if (!options.onProgress)
|
|
331
|
+
return;
|
|
332
|
+
const total = ev.lengthComputable ? ev.total : file.size;
|
|
333
|
+
const loaded = ev.loaded;
|
|
334
|
+
options.onProgress({
|
|
335
|
+
loaded,
|
|
336
|
+
total,
|
|
337
|
+
percent: total > 0 ? Math.min(100, Math.round((loaded / total) * 100)) : 0,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
xhr.onload = () => {
|
|
341
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
342
|
+
try {
|
|
343
|
+
const arr = JSON.parse(xhr.responseText);
|
|
344
|
+
const first = arr[0];
|
|
345
|
+
if (!first) {
|
|
346
|
+
reject(new AdminApiError(500, 'Server returned no upload result'));
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
// Emit a final 100% progress tick so UI can settle the bar.
|
|
350
|
+
options.onProgress?.({ loaded: file.size, total: file.size, percent: 100 });
|
|
351
|
+
resolve(first);
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
reject(new AdminApiError(500, err instanceof Error ? err.message : 'Invalid upload response'));
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
reject(new AdminApiError(xhr.status, xhr.responseText || xhr.statusText));
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
xhr.onerror = () => reject(new AdminApiError(0, 'Network error during upload'));
|
|
362
|
+
xhr.onabort = () => reject(new AdminApiError(0, 'Upload aborted'));
|
|
363
|
+
if (options.signal) {
|
|
364
|
+
if (options.signal.aborted) {
|
|
365
|
+
xhr.abort();
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
options.signal.addEventListener('abort', () => xhr.abort(), { once: true });
|
|
369
|
+
}
|
|
370
|
+
xhr.send(form);
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Upload many files with bounded concurrency, reporting per-file progress
|
|
375
|
+
* via `options.onItem*` callbacks. Each file is sent in its own request,
|
|
376
|
+
* so partial failures do not affect already-completed uploads.
|
|
377
|
+
*
|
|
378
|
+
* Returns the array of successful results in the order files were passed.
|
|
379
|
+
* Failed entries are omitted from the returned array; consumers wanting
|
|
380
|
+
* to react to failures should observe `onItemError`.
|
|
381
|
+
*/
|
|
382
|
+
async uploadFiles(resourceId, field, files, options = {}) {
|
|
383
|
+
if (files.length === 0)
|
|
384
|
+
return [];
|
|
385
|
+
const concurrency = Math.max(1, options.concurrency ?? 3);
|
|
386
|
+
const results = new Array(files.length).fill(null);
|
|
387
|
+
let cursor = 0;
|
|
388
|
+
const runOne = async () => {
|
|
389
|
+
while (true) {
|
|
390
|
+
const i = cursor++;
|
|
391
|
+
if (i >= files.length)
|
|
392
|
+
return;
|
|
393
|
+
const file = files[i];
|
|
394
|
+
options.onItemStart?.(i, file);
|
|
395
|
+
try {
|
|
396
|
+
const info = await this.uploadFile(resourceId, field, file, {
|
|
397
|
+
signal: options.signal,
|
|
398
|
+
onProgress: (p) => options.onItemProgress?.(i, file, p),
|
|
399
|
+
});
|
|
400
|
+
results[i] = info;
|
|
401
|
+
options.onItemComplete?.(i, file, info);
|
|
402
|
+
}
|
|
403
|
+
catch (err) {
|
|
404
|
+
const e = err instanceof Error ? err : new Error(String(err));
|
|
405
|
+
options.onItemError?.(i, file, e);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
const workers = Array.from({ length: Math.min(concurrency, files.length) }, () => runOne());
|
|
410
|
+
await Promise.all(workers);
|
|
411
|
+
return results.filter((r) => r != null);
|
|
412
|
+
}
|
|
413
|
+
/** Load the current user's dashboard layout from the server config store. */
|
|
414
|
+
loadDashboard() {
|
|
415
|
+
return this.request('/admin/api/dashboard');
|
|
416
|
+
}
|
|
417
|
+
/** Persist the current user's dashboard layout to the server config store. */
|
|
418
|
+
saveDashboard(dashboard) {
|
|
419
|
+
return this.request('/admin/api/dashboard', {
|
|
420
|
+
method: 'PUT',
|
|
421
|
+
body: JSON.stringify(dashboard),
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
/** List API keys belonging to the current admin. */
|
|
425
|
+
listApiKeys() {
|
|
426
|
+
return this.request('/admin/api/api-keys');
|
|
427
|
+
}
|
|
428
|
+
/** Create a new API key. The plaintext secret is returned exactly once. */
|
|
429
|
+
createApiKey(payload) {
|
|
430
|
+
return this.request('/admin/api/api-keys', {
|
|
431
|
+
method: 'POST',
|
|
432
|
+
body: JSON.stringify(payload),
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
/** Patch a key — name/enabled/permissions/expiry. */
|
|
436
|
+
updateApiKey(id, payload) {
|
|
437
|
+
return this.request(`/admin/api/api-keys/${encodeURIComponent(id)}`, { method: 'PATCH', body: JSON.stringify(payload) });
|
|
438
|
+
}
|
|
439
|
+
/** Permanently revoke (delete) an API key. */
|
|
440
|
+
deleteApiKey(id) {
|
|
441
|
+
return this.request(`/admin/api/api-keys/${encodeURIComponent(id)}`, { method: 'DELETE' });
|
|
442
|
+
}
|
|
443
|
+
listWebhooks() {
|
|
444
|
+
return this.request('/admin/api/webhooks');
|
|
445
|
+
}
|
|
446
|
+
createWebhook(payload) {
|
|
447
|
+
return this.request('/admin/api/webhooks', {
|
|
448
|
+
method: 'POST',
|
|
449
|
+
body: JSON.stringify(payload),
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
updateWebhook(id, payload) {
|
|
453
|
+
return this.request(`/admin/api/webhooks/${encodeURIComponent(id)}`, { method: 'PATCH', body: JSON.stringify(payload) });
|
|
454
|
+
}
|
|
455
|
+
deleteWebhook(id) {
|
|
456
|
+
return this.request(`/admin/api/webhooks/${encodeURIComponent(id)}`, { method: 'DELETE' });
|
|
457
|
+
}
|
|
458
|
+
listWebhookDeliveries(id, limit = 50) {
|
|
459
|
+
return this.request(`/admin/api/webhooks/${encodeURIComponent(id)}/deliveries?limit=${encodeURIComponent(String(limit))}`);
|
|
460
|
+
}
|
|
461
|
+
testWebhook(id) {
|
|
462
|
+
return this.request(`/admin/api/webhooks/${encodeURIComponent(id)}/test`, { method: 'POST', body: '{}' });
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Cancel a still-pending upload — deletes the file from storage immediately.
|
|
466
|
+
* Use when the user removes a freshly uploaded file *before* saving the
|
|
467
|
+
* form. Files that have already been confirmed (record saved) cannot be
|
|
468
|
+
* cancelled via this endpoint and the call will reject with 404.
|
|
469
|
+
*/
|
|
470
|
+
async cancelUpload(resourceId, field, key) {
|
|
471
|
+
const qs = `?field=${encodeURIComponent(field)}&key=${encodeURIComponent(key)}`;
|
|
472
|
+
const res = await fetch(`${this.baseUrl}/admin/api/resources/${encodeURIComponent(resourceId)}/actions/upload${qs}`, { method: 'DELETE', credentials: this.credentials, headers: this.headers });
|
|
473
|
+
if (!res.ok && res.status !== 404) {
|
|
474
|
+
const text = await res.text().catch(() => '');
|
|
475
|
+
throw new AdminApiError(res.status, text || res.statusText);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Send a single image to the resource's `aiFill` action and receive a
|
|
480
|
+
* `values` map the edit form can hydrate from. Uses multipart/form-data
|
|
481
|
+
* because vision models expect raw bytes, not base64-stringified payloads.
|
|
482
|
+
*
|
|
483
|
+
* Supports an optional `signal` for cancellation and the demo-session 401
|
|
484
|
+
* auto-restore logic (matching the behaviour of `request()`). Cannot use
|
|
485
|
+
* `requestOnce` directly because that always sets `Content-Type: application/json`,
|
|
486
|
+
* which would override the browser-generated multipart boundary.
|
|
487
|
+
*/
|
|
488
|
+
async aiFillFromImage(resourceId, file, options = {}) {
|
|
489
|
+
const url = `${this.baseUrl}/admin/api/resources/${encodeURIComponent(resourceId)}/ai-fill`;
|
|
490
|
+
const doFetch = async () => {
|
|
491
|
+
const form = new FormData();
|
|
492
|
+
form.append('image', file);
|
|
493
|
+
const res = await fetch(url, {
|
|
494
|
+
method: 'POST',
|
|
495
|
+
credentials: this.credentials,
|
|
496
|
+
// Intentionally omit Content-Type — the browser sets it automatically
|
|
497
|
+
// with the correct multipart/form-data boundary.
|
|
498
|
+
headers: this.headers,
|
|
499
|
+
body: form,
|
|
500
|
+
signal: options.signal,
|
|
501
|
+
});
|
|
502
|
+
if (!res.ok) {
|
|
503
|
+
const text = await res.text().catch(() => '');
|
|
504
|
+
throw new AdminApiError(res.status, text || res.statusText);
|
|
505
|
+
}
|
|
506
|
+
return (await res.json());
|
|
507
|
+
};
|
|
508
|
+
try {
|
|
509
|
+
return await doFetch();
|
|
510
|
+
}
|
|
511
|
+
catch (err) {
|
|
512
|
+
const canRestore = err instanceof AdminApiError &&
|
|
513
|
+
err.status === 401 &&
|
|
514
|
+
!options.signal?.aborted;
|
|
515
|
+
if (!canRestore)
|
|
516
|
+
throw err;
|
|
517
|
+
const restored = await this.restoreDemoSession();
|
|
518
|
+
if (!restored)
|
|
519
|
+
throw err;
|
|
520
|
+
return doFetch();
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
getAiAssistantSettings() {
|
|
524
|
+
return this.request('/admin/api/ai-assistant/settings');
|
|
525
|
+
}
|
|
526
|
+
async updateAiAssistantSettings(payload) {
|
|
527
|
+
return this.request('/admin/api/ai-assistant/settings', {
|
|
528
|
+
method: 'PUT',
|
|
529
|
+
body: JSON.stringify(payload),
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
async sendAiAssistantChat(messages, requestId, locale, conversationId, clientContext) {
|
|
533
|
+
return this.request('/admin/api/ai-assistant/chat', {
|
|
534
|
+
method: 'POST',
|
|
535
|
+
body: JSON.stringify({
|
|
536
|
+
messages,
|
|
537
|
+
...(requestId ? { requestId } : {}),
|
|
538
|
+
...(locale ? { locale } : {}),
|
|
539
|
+
...(conversationId ? { conversationId } : {}),
|
|
540
|
+
...(clientContext ? { clientContext } : {}),
|
|
541
|
+
}),
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
async listAiAssistantChats() {
|
|
545
|
+
return this.request('/admin/api/ai-assistant/chats');
|
|
546
|
+
}
|
|
547
|
+
async getAiAssistantTask(taskId) {
|
|
548
|
+
return this.request(`/admin/api/ai-assistant/tasks/${encodeURIComponent(taskId)}`);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
// ─── Time-series ──────────────────────────────────────────────────────────
|
|
552
|
+
const DATE_ONLY_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
553
|
+
const toIsoDateTime = (value, edge) => {
|
|
554
|
+
if (DATE_ONLY_RE.test(value)) {
|
|
555
|
+
return `${value}T${edge === 'start' ? '00:00:00.000' : '23:59:59.999'}Z`;
|
|
556
|
+
}
|
|
557
|
+
const date = new Date(value);
|
|
558
|
+
return Number.isNaN(date.getTime()) ? value : date.toISOString();
|
|
559
|
+
};
|
|
560
|
+
export class AdminApiError extends Error {
|
|
561
|
+
constructor(status, message) {
|
|
562
|
+
super(message);
|
|
563
|
+
this.status = status;
|
|
564
|
+
this.name = 'AdminApiError';
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/** Extract a human-readable message from any error thrown by AdminClient.
|
|
568
|
+
* The raw message is the HTTP response body text (often JSON). We try to
|
|
569
|
+
* parse the `.message` field from the JSON payload before falling back. */
|
|
570
|
+
export function parseApiError(err) {
|
|
571
|
+
if (err instanceof AdminApiError) {
|
|
572
|
+
try {
|
|
573
|
+
const body = JSON.parse(err.message);
|
|
574
|
+
return { status: err.status, message: body.message ?? err.message };
|
|
575
|
+
}
|
|
576
|
+
catch {
|
|
577
|
+
return { status: err.status, message: err.message };
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
return { message: err instanceof Error ? err.message : String(err) };
|
|
581
|
+
}
|
|
582
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
export type ComponentEntry = React.ComponentType<any>;
|
|
3
|
+
export declare class ComponentLoader {
|
|
4
|
+
private readonly entries;
|
|
5
|
+
add(name: string, component: ComponentEntry): this;
|
|
6
|
+
has(name: string): boolean;
|
|
7
|
+
get(name: string): ComponentEntry | undefined;
|
|
8
|
+
list(): string[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=component-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-loader.d.ts","sourceRoot":"","sources":["../src/component-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAMnC,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAErD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAE5D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI;IAKlD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,IAAI,IAAI,MAAM,EAAE;CAGjB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Browser-side ComponentLoader. Custom property/action components register
|
|
2
|
+
// themselves by name and consumers look them up by string. We intentionally
|
|
3
|
+
// keep this synchronous (no rollup/runtime bundling) — apps import their
|
|
4
|
+
// custom components as ES modules and call `.add()` at startup.
|
|
5
|
+
export class ComponentLoader {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.entries = new Map();
|
|
8
|
+
}
|
|
9
|
+
add(name, component) {
|
|
10
|
+
this.entries.set(name, component);
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
has(name) {
|
|
14
|
+
return this.entries.has(name);
|
|
15
|
+
}
|
|
16
|
+
get(name) {
|
|
17
|
+
return this.entries.get(name);
|
|
18
|
+
}
|
|
19
|
+
list() {
|
|
20
|
+
return Array.from(this.entries.keys());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=component-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-loader.js","sourceRoot":"","sources":["../src/component-loader.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,gEAAgE;AAUhE,MAAM,OAAO,eAAe;IAA5B;QACmB,YAAO,GAAG,IAAI,GAAG,EAA0B,CAAA;IAkB9D,CAAC;IAhBC,GAAG,CAAC,IAAY,EAAE,SAAyB;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;CACF"}
|