@nubitio/core 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.
@@ -0,0 +1,548 @@
1
+ import React, { ReactNode } from "react";
2
+
3
+ //#region packages/core/data/DataRecord.d.ts
4
+ type DataRecord = Record<string, unknown>;
5
+ //#endregion
6
+ //#region packages/core/data/GridData.d.ts
7
+ interface GridData<T> {
8
+ data: T[];
9
+ totalCount: number;
10
+ summary: T[] | null;
11
+ }
12
+ //#endregion
13
+ //#region packages/core/date/DateUtils.d.ts
14
+ /**
15
+ * Recommended default for new projects using @nubitio/core.
16
+ * You should almost always override this via CoreConfigProvider.
17
+ */
18
+ declare const DEFAULT_TIMEZONE = "UTC";
19
+ declare class DateUtils {
20
+ static dateFormatter(date: Date): string;
21
+ static dateParser(dateString: string): Date;
22
+ static format(dateString: string, formatOptions?: Intl.DateTimeFormatOptions): string;
23
+ static addDays(fieldValue: string | number | Date, days: number): Date;
24
+ static addMonths(fieldValue: string | number | Date, months: number): Date;
25
+ static addYears(fieldValue: string | number | Date, years: number): Date;
26
+ static dayDiff(startDate: string | number | Date, endDate: string | number | Date): number;
27
+ static monthDiff(startDate: string | number | Date, endDate: string | number | Date): number;
28
+ }
29
+ //#endregion
30
+ //#region packages/core/config/CoreConfig.d.ts
31
+ interface CoreConfig {
32
+ locale: string;
33
+ timezone: string;
34
+ apiBaseUrl: string;
35
+ }
36
+ /**
37
+ * Configure core runtime values (locale, timezone, apiBaseUrl).
38
+ * This updates the module-level singleton so it can be read from non-React code
39
+ * (e.g. inside defineResource, entityField builders, DateUtils, etc.).
40
+ */
41
+ declare function configureCore(config: Partial<CoreConfig>): void;
42
+ /**
43
+ * @deprecated Use configureCore() instead.
44
+ */
45
+ declare const configureCoreDate: typeof configureCore;
46
+ declare function getCoreLocale(): string;
47
+ declare function getCoreTimezone(): string;
48
+ declare function getCoreApiBaseUrl(): string;
49
+ interface CoreConfigProviderProps {
50
+ locale: string;
51
+ timezone: string;
52
+ apiBaseUrl: string;
53
+ children: React.ReactNode;
54
+ }
55
+ declare const CoreConfigProvider: ({
56
+ locale,
57
+ timezone,
58
+ apiBaseUrl,
59
+ children
60
+ }: CoreConfigProviderProps) => React.JSX.Element;
61
+ declare function useCoreConfig(): CoreConfig;
62
+ //#endregion
63
+ //#region packages/core/event/EventHook.d.ts
64
+ type Unsubscribe = () => void;
65
+ /** Minimal subscription token — compatible with RxJS Subscription.unsubscribe() call-sites */
66
+ interface EventSubscription {
67
+ unsubscribe: Unsubscribe;
68
+ /** Convenience alias used by some call-sites via .add() — no-op, kept for compat */
69
+ add: (teardown: Unsubscribe) => EventSubscription;
70
+ }
71
+ declare const useEvents: () => readonly [<T>(name: string, handler: (payload: T) => void) => EventSubscription, <T>(name: string, payload?: T) => void];
72
+ declare const dispatch: <T>(name: string, payload?: T) => void;
73
+ //#endregion
74
+ //#region packages/core/event/createCrudEvents.d.ts
75
+ /**
76
+ * Generic factory that builds a typed set of CRUD event name strings for a
77
+ * given `prefix`. The returned object is `const`-asserted so every value is
78
+ * a template-literal type — callers get full type inference without having to
79
+ * cast anything.
80
+ *
81
+ * This helper belongs in `core/` because it has no feature-specific logic; it
82
+ * is used by both the core event bus and by every feature module that needs
83
+ * its own event namespace.
84
+ *
85
+ * @example
86
+ * const productEvents = createCrudEvents('product');
87
+ * // productEvents.ADD === 'product:add'
88
+ */
89
+ declare const createCrudEvents: <TPrefix extends string>(prefix: TPrefix) => {
90
+ readonly ADD: `${TPrefix}:add`;
91
+ readonly EDIT: `${TPrefix}:edit`;
92
+ readonly DELETE: `${TPrefix}:delete`;
93
+ readonly SAVE: `${TPrefix}:save`;
94
+ readonly CANCEL: `${TPrefix}:cancel`;
95
+ readonly SUCCESS: `${TPrefix}:success`;
96
+ readonly LOADING: `${TPrefix}:loading`;
97
+ };
98
+ //#endregion
99
+ //#region packages/core/event/EventTypes.d.ts
100
+ /**
101
+ * Typed event name interfaces for core components.
102
+ * Each field is optional — only declare the events your feature uses.
103
+ */
104
+ interface DataGridEventNames {
105
+ ADD?: string;
106
+ EDIT?: string;
107
+ DELETE?: string;
108
+ SUCCESS?: string;
109
+ LOADING?: string;
110
+ CANCEL?: string;
111
+ EXPORT?: string;
112
+ }
113
+ interface FormEventNames {
114
+ ADD?: string;
115
+ EDIT?: string;
116
+ DELETE?: string;
117
+ SAVE?: string;
118
+ SUCCESS?: string;
119
+ LOADING?: string;
120
+ CANCEL?: string;
121
+ }
122
+ interface DialogEventNames {
123
+ ADD?: string;
124
+ EDIT?: string;
125
+ SAVE?: string;
126
+ SUCCESS?: string;
127
+ LOADING?: string;
128
+ CANCEL?: string;
129
+ }
130
+ interface ToolbarButtonItem {
131
+ icon?: string;
132
+ text: string;
133
+ hint?: string;
134
+ /** Semantic button type. Common values: 'default' | 'normal' | 'danger' | 'success' | 'back' */
135
+ type?: string;
136
+ onClick?: () => void;
137
+ disabled?: boolean;
138
+ visible?: boolean;
139
+ }
140
+ //#endregion
141
+ //#region packages/core/event/createScopedEventBus.d.ts
142
+ /**
143
+ * A `FormEventNames` object whose event strings are namespaced with a
144
+ * per-instance scope ID to prevent cross-component event leakage.
145
+ * The extra `_scopeId` property carries the raw 8-char scope token for
146
+ * diagnostics / testing.
147
+ */
148
+ type ScopedFormEventNames = FormEventNames & {
149
+ readonly _scopeId: string;
150
+ };
151
+ /**
152
+ * Creates a scoped event bus for the given resource.
153
+ *
154
+ * Internally this generates an 8-character random scope token and delegates to
155
+ * `createCrudEvents(`${resourceId}:${scopeId}`)`. This means each call produces
156
+ * a unique set of event name strings, even for the same `resourceId`, which
157
+ * prevents accidental cross-instance event coupling when multiple CRUD pages
158
+ * for the same resource are mounted simultaneously.
159
+ *
160
+ * @param resourceId - The resource id (e.g. `'product'`).
161
+ * @returns A `ScopedFormEventNames` object with a stable `_scopeId` tag.
162
+ */
163
+ declare function createScopedEventBus(resourceId: string): ScopedFormEventNames;
164
+ //#endregion
165
+ //#region packages/core/i18n/CoreTranslationKeys.d.ts
166
+ interface CoreTranslationKeys {
167
+ 'crudPage.selectedCount': string;
168
+ 'crudPage.auditTrailButton': string;
169
+ 'crudPage.allColumns': string;
170
+ 'crudPage.columnsLabel': string;
171
+ 'crudPage.dialogTitleAdd': string;
172
+ 'crudPage.dialogTitleEdit': string;
173
+ 'crudPage.dialogTitleView': string;
174
+ 'crudPage.schemaErrorTitle': string;
175
+ 'crudPage.schemaErrorMessage': string;
176
+ 'crudPage.schemaErrorDetails': string;
177
+ 'crudPage.schemaErrorRetry': string;
178
+ 'auditTrail.title': string;
179
+ 'auditTrail.closeButton': string;
180
+ 'auditTrail.selectRecord': string;
181
+ 'auditTrail.loading': string;
182
+ 'auditTrail.error': string;
183
+ 'auditTrail.empty': string;
184
+ 'auditTrail.action.create': string;
185
+ 'auditTrail.action.update': string;
186
+ 'auditTrail.action.delete': string;
187
+ 'form.detailRequired': string;
188
+ 'form.detailEmpty': string;
189
+ 'form.detailEmptyHint': string;
190
+ 'form.detailAdd': string;
191
+ 'form.detailRemove': string;
192
+ 'form.validationError': string;
193
+ 'form.loading': string;
194
+ 'form.groupOther': string;
195
+ 'grid.noRecords': string;
196
+ 'grid.selectRequired': string;
197
+ 'grid.loading': string;
198
+ 'grid.buttonNew': string;
199
+ 'grid.buttonEdit': string;
200
+ 'grid.buttonDelete': string;
201
+ 'grid.buttonRefresh': string;
202
+ 'grid.buttonActions': string;
203
+ 'grid.buttonView': string;
204
+ 'grid.rowsPerPage': string;
205
+ 'grid.recordRange': string;
206
+ 'grid.noRecordCount': string;
207
+ 'grid.selectedCount': string;
208
+ 'grid.pageStatus': string;
209
+ 'grid.firstPage': string;
210
+ 'grid.previousPage': string;
211
+ 'grid.nextPage': string;
212
+ 'grid.lastPage': string;
213
+ 'grid.back': string;
214
+ 'grid.expandDetail': string;
215
+ 'grid.collapseDetail': string;
216
+ 'grid.selectRow': string;
217
+ 'grid.resizeColumn': string;
218
+ 'grid.allFilter': string;
219
+ 'grid.clearFilter': string;
220
+ 'grid.filterColumn': string;
221
+ 'grid.filterFrom': string;
222
+ 'grid.filterTo': string;
223
+ 'grid.sortColumn': string;
224
+ 'grid.filters': string;
225
+ 'grid.sortBy': string;
226
+ 'grid.sortNone': string;
227
+ 'grid.sortAscending': string;
228
+ 'grid.sortDescending': string;
229
+ 'grid.clearFilters': string;
230
+ 'grid.done': string;
231
+ 'grid.searchPlaceholder': string;
232
+ 'grid.showMore': string;
233
+ 'grid.showLess': string;
234
+ 'grid.filterOperator.contains': string;
235
+ 'grid.filterOperator.notcontains': string;
236
+ 'grid.filterOperator.startswith': string;
237
+ 'grid.filterOperator.equals': string;
238
+ 'grid.filterOperator.notEquals': string;
239
+ 'grid.filterOperator.greaterThan': string;
240
+ 'grid.filterOperator.greaterOrEqual': string;
241
+ 'grid.filterOperator.lessThan': string;
242
+ 'grid.filterOperator.lessOrEqual': string;
243
+ 'grid.filterOperator.between': string;
244
+ 'grid.filterOperator.reset': string;
245
+ 'dialog.buttonCancel': string;
246
+ 'dialog.buttonSave': string;
247
+ 'dialog.close': string;
248
+ 'dialog.confirmDelete': string;
249
+ 'dialog.confirmDeleteTitle': string;
250
+ 'common.yes': string;
251
+ 'common.no': string;
252
+ 'validation.defaultError': string;
253
+ 'form.searchButton': string;
254
+ 'form.actionButton': string;
255
+ 'form.detailTitle': string;
256
+ 'form.lookupSearching': string;
257
+ 'form.lookupNoResults': string;
258
+ 'form.lookupLoadingMore': string;
259
+ 'form.fieldRequired': string;
260
+ 'form.invalidEmail': string;
261
+ 'form.invalidNumeric': string;
262
+ 'form.invalidPattern': string;
263
+ 'form.stringTooShort': string;
264
+ 'form.stringTooLong': string;
265
+ 'form.outOfRange': string;
266
+ 'form.fileUploadPrompt': string;
267
+ 'form.fileUploadDrop': string;
268
+ 'form.fileUploadHint': string;
269
+ 'form.fileUploading': string;
270
+ 'form.fileUploadReplace': string;
271
+ 'form.fileUploadRemove': string;
272
+ 'form.fileUploadOpen': string;
273
+ 'form.fileUploadFailed': string;
274
+ 'form.fileUploadInvalidResponse': string;
275
+ 'form.imageUploadPrompt': string;
276
+ 'form.imageUploadHint': string;
277
+ 'crudPage.confirmActionTitle': string;
278
+ }
279
+ //#endregion
280
+ //#region packages/core/i18n/coreTranslations.d.ts
281
+ declare const coreTranslationsEs: CoreTranslationKeys;
282
+ declare const coreTranslationsEn: CoreTranslationKeys;
283
+ //#endregion
284
+ //#region packages/core/i18n/useCoreTranslation.d.ts
285
+ declare function useCoreTranslation(): {
286
+ t: (key: keyof CoreTranslationKeys, options?: DataRecord) => string;
287
+ };
288
+ //#endregion
289
+ //#region packages/core/i18n/initCoreI18n.d.ts
290
+ declare function initCoreI18n(): void;
291
+ //#endregion
292
+ //#region packages/core/http/CoreHttpClient.d.ts
293
+ type CoreResponseType = 'json' | 'arraybuffer' | 'blob' | 'text';
294
+ interface CoreRequestConfig {
295
+ params?: DataRecord;
296
+ headers?: Record<string, string>;
297
+ signal?: AbortSignal;
298
+ responseType?: CoreResponseType;
299
+ }
300
+ interface CoreHttpResponse<T> {
301
+ response: Response;
302
+ data: T;
303
+ headers: Headers;
304
+ status: number;
305
+ }
306
+ interface CoreHttpErrorData {
307
+ detail?: string;
308
+ message?: string;
309
+ violations?: unknown;
310
+ [key: string]: unknown;
311
+ }
312
+ interface CoreHttpError extends Error {
313
+ status?: number;
314
+ data?: CoreHttpErrorData;
315
+ }
316
+ interface CoreHttpClientConfig {
317
+ baseUrl?: string;
318
+ credentials?: RequestCredentials;
319
+ locale?: string;
320
+ /**
321
+ * Path used by the built-in cookie refresh logic (only used when no `refreshFn` is provided).
322
+ * @default "auth/refresh"
323
+ */
324
+ refreshPath?: string;
325
+ /**
326
+ * Path used to detect "this is a login attempt" (skips auto-refresh).
327
+ * @default "auth/login"
328
+ */
329
+ loginPath?: string;
330
+ /**
331
+ * If false, the client will never attempt automatic session refresh on 401.
332
+ * Useful when you want full control (e.g. Bearer JWT + react-query error handling).
333
+ * @default true
334
+ */
335
+ autoRefresh?: boolean;
336
+ /**
337
+ * Completely replace the internal refresh logic.
338
+ * If provided, this function is called instead of the built-in cookie refresh.
339
+ * Should throw (or return a rejected promise) when refresh fails.
340
+ *
341
+ * Example (custom Bearer token refresh):
342
+ * refreshFn: async (client) => {
343
+ * const res = await fetch('/api/auth/refresh', { method: 'POST', credentials: 'include' });
344
+ * if (!res.ok) throw new Error('Refresh failed');
345
+ * const { accessToken } = await res.json();
346
+ * // store token somewhere your requests can use it (e.g. in memory or secure storage)
347
+ * }
348
+ */
349
+ refreshFn?: (client: CoreHttpClient) => Promise<void>;
350
+ onUnauthorized?: (error: CoreHttpError) => void;
351
+ onError?: (error: CoreHttpError) => void;
352
+ }
353
+ declare class CoreHttpClient {
354
+ private readonly config;
355
+ private refreshPromise;
356
+ constructor(config?: CoreHttpClientConfig);
357
+ private headers;
358
+ /**
359
+ * Built-in cookie-based refresh (the original behavior).
360
+ * Only used when `refreshFn` is not provided in config.
361
+ */
362
+ private performBuiltInRefresh;
363
+ private performRefresh;
364
+ private safeErrorData;
365
+ private request;
366
+ get<T>(url: string, config?: CoreRequestConfig): Promise<CoreHttpResponse<T>>;
367
+ post<T>(url: string, data?: unknown, config?: CoreRequestConfig): Promise<CoreHttpResponse<T>>;
368
+ put<T>(url: string, data?: unknown, config?: CoreRequestConfig): Promise<CoreHttpResponse<T>>;
369
+ patch<T>(url: string, data?: unknown, config?: CoreRequestConfig): Promise<CoreHttpResponse<T>>;
370
+ delete<T>(url: string, config?: CoreRequestConfig): Promise<CoreHttpResponse<T>>;
371
+ }
372
+ declare function createCoreHttpClient(config?: CoreHttpClientConfig): CoreHttpClient;
373
+ //#endregion
374
+ //#region packages/core/http/CoreHttpContext.d.ts
375
+ interface CoreHttpProviderProps {
376
+ children: React.ReactNode;
377
+ client?: CoreHttpClient;
378
+ config?: CoreHttpClientConfig;
379
+ }
380
+ declare function CoreHttpProvider({
381
+ children,
382
+ client,
383
+ config
384
+ }: CoreHttpProviderProps): React.JSX.Element;
385
+ declare function useCoreHttpClient(): CoreHttpClient;
386
+ //#endregion
387
+ //#region packages/core/runtime/CoreRuntimeContext.d.ts
388
+ type CoreNotificationType = 'success' | 'error' | 'warning' | 'info';
389
+ interface CoreRuntime {
390
+ notify: (message: string, type?: CoreNotificationType, durationMs?: number) => void;
391
+ confirm: (message: string) => boolean;
392
+ }
393
+ interface CoreRuntimeProviderProps {
394
+ children: React.ReactNode;
395
+ runtime?: Partial<CoreRuntime>;
396
+ }
397
+ declare function CoreRuntimeProvider({
398
+ children,
399
+ runtime
400
+ }: CoreRuntimeProviderProps): React.JSX.Element;
401
+ declare function useCoreRuntime(): CoreRuntime;
402
+ //#endregion
403
+ //#region packages/core/provider/CoreProvider.d.ts
404
+ interface CoreProviderProps {
405
+ children: React.ReactNode;
406
+ http?: CoreHttpClientConfig;
407
+ httpClient?: CoreHttpClient;
408
+ runtime?: Partial<CoreRuntime>;
409
+ }
410
+ declare function CoreProvider({
411
+ children,
412
+ http,
413
+ httpClient,
414
+ runtime
415
+ }: CoreProviderProps): React.JSX.Element;
416
+ //#endregion
417
+ //#region packages/core/mercure/MercureProvider.d.ts
418
+ interface MercureProviderProps {
419
+ /** Hub URL discovered from the `Link` header, or null if unavailable. */
420
+ hubUrl: string | null;
421
+ children: ReactNode;
422
+ }
423
+ /**
424
+ * Provides the Mercure hub URL to the React tree and keeps `MercureManager`
425
+ * in sync whenever the URL changes.
426
+ */
427
+ declare function MercureProvider({
428
+ hubUrl,
429
+ children
430
+ }: MercureProviderProps): React.JSX.Element;
431
+ //#endregion
432
+ //#region packages/core/mercure/useMercureHub.d.ts
433
+ /**
434
+ * useMercureHub — Hook that returns the Mercure hub URL from context.
435
+ *
436
+ * Returns `null` if:
437
+ * - The component is rendered outside a `<MercureProvider>` (default context value).
438
+ * - The hub URL has not been discovered yet (header `Link` not received).
439
+ * - Mercure is not configured in the backend.
440
+ *
441
+ * This hook does NOT perform any fetch or side effect — it only reads from context.
442
+ * Hub discovery (usually from a `Link` header) must be done by the host application.
443
+ *
444
+ * ## Usage
445
+ *
446
+ * ```tsx
447
+ * const hubUrl = useMercureHub();
448
+ * // hubUrl is string | null
449
+ * ```
450
+ */
451
+ /**
452
+ * Returns the Mercure hub URL from the nearest `<MercureProvider>`,
453
+ * or `null` if the hub is not available.
454
+ */
455
+ declare function useMercureHub(): string | null;
456
+ //#endregion
457
+ //#region packages/core/mercure/useMercureSubscription.d.ts
458
+ /**
459
+ * useMercureSubscription — Hook that subscribes to a Mercure topic and calls
460
+ * a callback whenever an SSE message is received for that topic.
461
+ *
462
+ * ## Behaviour
463
+ * - If `hubUrl` is null (Mercure not configured) or `enabled` is false → no-op.
464
+ * - Subscribes to the wildcard topic `<origin>/<apiUrl>/{id}` (URI Template RFC 6570),
465
+ * which captures any item-level event (create / update / delete) for the collection.
466
+ * - Cleanup: unsubscribes on unmount or when dependencies change (no memory leaks).
467
+ *
468
+ * ## Usage
469
+ *
470
+ * ```tsx
471
+ * useMercureSubscription(
472
+ * resource.apiUrl,
473
+ * () => { gridRef.current?.instance().refresh(); },
474
+ * resource.mercure !== false,
475
+ * );
476
+ * ```
477
+ *
478
+ * @param apiUrl The resource API URL (e.g. `'api/products'` or `'/api/products'`).
479
+ * Used to build the wildcard topic URI.
480
+ * @param onUpdate Callback invoked on every SSE message for the topic.
481
+ * @param enabled When false, the subscription is skipped entirely. Defaults to true.
482
+ */
483
+ declare function useMercureSubscription(apiUrl: string | undefined, onUpdate: () => void, enabled?: boolean): void;
484
+ //#endregion
485
+ //#region packages/core/mercure/MercureManager.d.ts
486
+ /**
487
+ * MercureManager — Singleton that manages the lifecycle of EventSource connections.
488
+ *
489
+ * Inspired by the `manager.ts` pattern from `api-platform/admin`, adapted for this project:
490
+ * - Ref-counting per topic: multiple subscribers to the same topic share one EventSource.
491
+ * - Graceful degradation: if hubUrl is null, subscribe() is a no-op.
492
+ * - Topic format: full URI or URI Template (RFC 6570), e.g. `https://host/api/products/{id}`.
493
+ * The hub receives it as a query param: `?topic=<encoded-topic>`.
494
+ */
495
+ declare class MercureManager {
496
+ private hubUrl;
497
+ private readonly topics;
498
+ private readonly hubUrlListeners;
499
+ /**
500
+ * Update the hub URL (called by the Axios interceptor when the `Link` header is discovered,
501
+ * or by MercureProvider). Notifies all registered listeners.
502
+ *
503
+ * Idempotent: if the URL is already set to the same value, listeners are NOT re-notified.
504
+ */
505
+ setHubUrl(url: string | null): void;
506
+ getHubUrl(): string | null;
507
+ /**
508
+ * Register a callback that fires whenever the hub URL changes.
509
+ *
510
+ * Returns an unsubscribe function — call it in a `useEffect` cleanup to avoid memory leaks.
511
+ *
512
+ * @example
513
+ * ```tsx
514
+ * useEffect(() => {
515
+ * return MercureManager.onHubUrlChange(setHubUrl);
516
+ * }, []);
517
+ * ```
518
+ */
519
+ onHubUrlChange(callback: (url: string | null) => void): () => void;
520
+ /**
521
+ * Subscribe to a Mercure topic.
522
+ *
523
+ * @param topic Full topic URI or URI Template, e.g. `https://host/api/products/{id}`.
524
+ * @param callback Called with the parsed JSON payload on each SSE message.
525
+ *
526
+ * If `hubUrl` is null (hub not configured), this is a no-op (graceful degradation).
527
+ * If an EventSource for this topic already exists, it is reused (ref-counting).
528
+ */
529
+ subscribe(topic: string, callback: (data: unknown) => void): void;
530
+ /**
531
+ * Unsubscribe a specific callback from a topic.
532
+ *
533
+ * Decrements the ref count. When count reaches 0, the EventSource is closed
534
+ * and removed from the internal map.
535
+ */
536
+ unsubscribe(topic: string, callback: (data: unknown) => void): void;
537
+ /**
538
+ * Close all active EventSource connections and clear the topic map.
539
+ *
540
+ * Called internally when the hub URL changes so stale connections
541
+ * bound to the previous hub are not leaked.
542
+ */
543
+ disconnectAll(): void;
544
+ }
545
+ /** Singleton instance — shared across the entire application. */
546
+ declare const mercureManager: MercureManager;
547
+ //#endregion
548
+ export { type CoreConfig, CoreConfigProvider, type CoreConfigProviderProps, CoreHttpClient, type CoreHttpClientConfig, type CoreHttpError, type CoreHttpErrorData, CoreHttpProvider, type CoreHttpProviderProps, type CoreHttpResponse, type CoreNotificationType, CoreProvider, type CoreProviderProps, type CoreRequestConfig, type CoreResponseType, type CoreRuntime, CoreRuntimeProvider, type CoreRuntimeProviderProps, type CoreTranslationKeys, DEFAULT_TIMEZONE, type DataGridEventNames, type DataRecord, DateUtils, type DialogEventNames, type EventSubscription, type FormEventNames, type GridData, mercureManager as MercureManager, type MercureManager as MercureManagerType, MercureProvider, type MercureProviderProps, type ScopedFormEventNames, type ToolbarButtonItem, configureCore, configureCoreDate, coreTranslationsEn, coreTranslationsEs, createCoreHttpClient, createCrudEvents, createScopedEventBus, dispatch, getCoreApiBaseUrl, getCoreLocale, getCoreTimezone, initCoreI18n, useCoreConfig, useCoreHttpClient, useCoreRuntime, useCoreTranslation, useEvents, useMercureHub, useMercureSubscription };