@nice2dev/erp-adapter 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/CHANGELOG.md +14 -0
- package/LICENSE +21 -0
- package/README.md +96 -0
- package/dist/ErpAuthAdapter.d.ts +28 -0
- package/dist/ErpAuthAdapter.d.ts.map +1 -0
- package/dist/ErpDataAdapter.d.ts +29 -0
- package/dist/ErpDataAdapter.d.ts.map +1 -0
- package/dist/ErpExportAdapter.d.ts +19 -0
- package/dist/ErpExportAdapter.d.ts.map +1 -0
- package/dist/ErpFileAdapter.d.ts +23 -0
- package/dist/ErpFileAdapter.d.ts.map +1 -0
- package/dist/ErpSignalRAdapter.d.ts +17 -0
- package/dist/ErpSignalRAdapter.d.ts.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +713 -0
- package/dist/index.mjs.map +1 -0
- package/dist/registries/audioControls.d.ts +3 -0
- package/dist/registries/audioControls.d.ts.map +1 -0
- package/dist/registries/authControls.d.ts +3 -0
- package/dist/registries/authControls.d.ts.map +1 -0
- package/dist/registries/businessControls.d.ts +3 -0
- package/dist/registries/businessControls.d.ts.map +1 -0
- package/dist/registries/gamificationControls.d.ts +3 -0
- package/dist/registries/gamificationControls.d.ts.map +1 -0
- package/dist/registries/graphicControls.d.ts +3 -0
- package/dist/registries/graphicControls.d.ts.map +1 -0
- package/dist/registries/index.d.ts +11 -0
- package/dist/registries/index.d.ts.map +1 -0
- package/dist/registries/socialControls.d.ts +3 -0
- package/dist/registries/socialControls.d.ts.map +1 -0
- package/dist/registries/threeControls.d.ts +3 -0
- package/dist/registries/threeControls.d.ts.map +1 -0
- package/dist/types.d.ts +110 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +55 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@nice2dev/erp-adapter` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [0.1.0] - 2026-03-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `ErpDataAdapter` — REST CRUD adapter (load, getById, create, update, remove, removeBatch)
|
|
9
|
+
- `ErpSignalRAdapter` — SignalR real-time adapter with auto-reconnect
|
|
10
|
+
- `ErpAuthAdapter` — JWT auth adapter (login, refresh, logout, me, tokenFactory)
|
|
11
|
+
- `ErpFileAdapter` — File upload/download/delete with FormData support
|
|
12
|
+
- `ErpExportAdapter` — Server-side export (xlsx, pdf, csv, json, xml) with browser download
|
|
13
|
+
- Control registries for NiceViewBuilder (24 controls in 7 categories)
|
|
14
|
+
- TypeScript types for OmniVerk integration
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NiceToDev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# @nice2dev/erp-adapter
|
|
2
|
+
|
|
3
|
+
Adapter layer connecting an OmniVerk .NET backend with @nice2dev/* React components.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@nice2dev/erp-adapter)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @nice2dev/erp-adapter
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Peer dependencies:** `react >= 17.0.0`, `react-dom >= 17.0.0`
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- **ErpDataAdapter** — REST CRUD adapter for NiceDataGrid, NiceList, etc.
|
|
22
|
+
- **ErpSignalRAdapter** — Real-time adapter via SignalR for NiceChat, NiceScheduler
|
|
23
|
+
- **ErpAuthAdapter** — JWT authentication (login, refresh, logout)
|
|
24
|
+
- **ErpFileAdapter** — File upload/download with blob storage
|
|
25
|
+
- **ErpExportAdapter** — Server-side export (xlsx, pdf, csv)
|
|
26
|
+
- **Control Registries** — Pre-built control registrations for NiceViewBuilder
|
|
27
|
+
|
|
28
|
+
## Adapters
|
|
29
|
+
|
|
30
|
+
| Adapter | Description |
|
|
31
|
+
|---------|-------------|
|
|
32
|
+
| `ErpDataAdapter` | Generic REST adapter for list/detail CRUD (supports paging, sorting, filtering) |
|
|
33
|
+
| `ErpAuthAdapter` | JWT login, token refresh, logout |
|
|
34
|
+
| `ErpFileAdapter` | File upload, download, delete against blob storage |
|
|
35
|
+
| `ErpExportAdapter` | Server-side export to xlsx, pdf, csv, json, xml |
|
|
36
|
+
| `createSignalRAdapter` | Real-time SignalR connection with auto-reconnect |
|
|
37
|
+
|
|
38
|
+
## Control Registries
|
|
39
|
+
|
|
40
|
+
| Registry | Controls |
|
|
41
|
+
|----------|----------|
|
|
42
|
+
| `audioControlRegistry` | DAW editor, player, karaoke, playlist, visualizer |
|
|
43
|
+
| `graphicControlRegistry` | Pixel, vector, photo, animation editors |
|
|
44
|
+
| `threeControlRegistry` | 3D model editor |
|
|
45
|
+
| `gamificationControlRegistry` | Game engine, achievements, leaderboards |
|
|
46
|
+
| `businessControlRegistry` | Charts, data grid, scheduler, gantt, pivot |
|
|
47
|
+
| `authControlRegistry` | Login, registration, 2FA, OAuth, captcha |
|
|
48
|
+
| `socialControlRegistry` | Comments, ratings, wiki |
|
|
49
|
+
| `allControlRegistries` | All of the above combined |
|
|
50
|
+
|
|
51
|
+
## Usage
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
import { ErpDataAdapter, ErpAuthAdapter, allControlRegistries } from '@nice2dev/erp-adapter';
|
|
55
|
+
|
|
56
|
+
// Set up auth
|
|
57
|
+
const auth = new ErpAuthAdapter({ baseUrl: '/api/auth' });
|
|
58
|
+
await auth.login({ username: 'admin', password: 'secret' });
|
|
59
|
+
|
|
60
|
+
// Set up data adapter
|
|
61
|
+
const products = new ErpDataAdapter<Product>({
|
|
62
|
+
baseUrl: '/api/products',
|
|
63
|
+
tokenFactory: auth.tokenFactory,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// Load data
|
|
67
|
+
const result = await products.load({ skip: 0, take: 20 });
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### SignalR Real-time
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
import { createSignalRAdapter } from '@nice2dev/erp-adapter';
|
|
74
|
+
|
|
75
|
+
const signalR = createSignalRAdapter({
|
|
76
|
+
url: '/hubs/events',
|
|
77
|
+
tokenFactory: auth.tokenFactory,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
await signalR.start();
|
|
81
|
+
signalR.on('ItemUpdated', (item) => console.log('Updated:', item));
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Types
|
|
85
|
+
|
|
86
|
+
Key TypeScript types exported:
|
|
87
|
+
|
|
88
|
+
- `ErpResponse<T>`, `ErpFilter`, `ErpSort`, `ErpDataRequest` — data adapter types
|
|
89
|
+
- `ErpUser`, `ErpLoginRequest`, `ErpLoginResponse` — auth types
|
|
90
|
+
- `ErpFileInfo` — file adapter types
|
|
91
|
+
- `ErpExportFormat`, `ErpExportRequest`, `ErpExportResponse` — export types
|
|
92
|
+
- `ControlRegistryEntry`, `PropDescriptor`, `PropType` — view builder registry types
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
MIT © NiceToDev
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ErpLoginRequest, ErpLoginResponse, ErpUser, ErpResponse } from './types';
|
|
2
|
+
export interface ErpAuthAdapterConfig {
|
|
3
|
+
/** Auth API base URL, e.g. "/api/auth". */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
fetch?: typeof fetch;
|
|
6
|
+
/** Called when a new token pair is obtained. */
|
|
7
|
+
onTokens?: (access: string, refresh: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare class ErpAuthAdapter {
|
|
10
|
+
private cfg;
|
|
11
|
+
private accessToken;
|
|
12
|
+
private refreshToken;
|
|
13
|
+
constructor(config: ErpAuthAdapterConfig);
|
|
14
|
+
/** Current access token (or null). */
|
|
15
|
+
getAccessToken(): string | null;
|
|
16
|
+
/** Token factory for use with ErpDataAdapter.tokenFactory. */
|
|
17
|
+
tokenFactory: () => Promise<string>;
|
|
18
|
+
private post;
|
|
19
|
+
/** Login with username/password. */
|
|
20
|
+
login(req: ErpLoginRequest): Promise<ErpLoginResponse>;
|
|
21
|
+
/** Refresh the access token. */
|
|
22
|
+
refresh(): Promise<ErpLoginResponse>;
|
|
23
|
+
/** Get current user info. */
|
|
24
|
+
me(): Promise<ErpResponse<ErpUser>>;
|
|
25
|
+
/** Logout (invalidate tokens on server). */
|
|
26
|
+
logout(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ErpAuthAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErpAuthAdapter.d.ts","sourceRoot":"","sources":["../src/ErpAuthAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvF,MAAM,WAAW,oBAAoB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAuB;gBAE/B,MAAM,EAAE,oBAAoB;IAIxC,sCAAsC;IACtC,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,8DAA8D;IAC9D,YAAY,QAAa,OAAO,CAAC,MAAM,CAAC,CAGtC;YAEY,IAAI;IAWlB,oCAAoC;IAC9B,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAU5D,gCAAgC;IAC1B,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAW1C,6BAA6B;IACvB,EAAE,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IASzC,4CAA4C;IACtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAYhC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ErpDataRequest, ErpResponse } from './types';
|
|
2
|
+
export interface ErpDataAdapterConfig {
|
|
3
|
+
/** Base URL for the entity, e.g. "/api/products". */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
/** Custom fetch implementation (defaults to window.fetch). */
|
|
6
|
+
fetch?: typeof fetch;
|
|
7
|
+
/** Default headers (e.g. Authorization). */
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
/** Token factory — called before each request to get a fresh bearer token. */
|
|
10
|
+
tokenFactory?: () => string | Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
export declare class ErpDataAdapter<T = unknown> {
|
|
13
|
+
private cfg;
|
|
14
|
+
constructor(config: ErpDataAdapterConfig | string);
|
|
15
|
+
private request;
|
|
16
|
+
/** Load paged/filtered/sorted data. */
|
|
17
|
+
load(req?: ErpDataRequest): Promise<ErpResponse<T[]>>;
|
|
18
|
+
/** Get single entity by id. */
|
|
19
|
+
getById(id: string | number): Promise<ErpResponse<T>>;
|
|
20
|
+
/** Create entity. */
|
|
21
|
+
create(item: Partial<T>): Promise<ErpResponse<T>>;
|
|
22
|
+
/** Update entity. */
|
|
23
|
+
update(id: string | number, item: Partial<T>): Promise<ErpResponse<T>>;
|
|
24
|
+
/** Delete entity. */
|
|
25
|
+
remove(id: string | number): Promise<ErpResponse<void>>;
|
|
26
|
+
/** Batch delete. */
|
|
27
|
+
removeBatch(ids: (string | number)[]): Promise<ErpResponse<void>>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=ErpDataAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErpDataAdapter.d.ts","sourceRoot":"","sources":["../src/ErpDataAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAsB,MAAM,SAAS,CAAC;AAE/E,MAAM,WAAW,oBAAoB;IACjC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,qBAAa,cAAc,CAAC,CAAC,GAAG,OAAO;IACnC,OAAO,CAAC,GAAG,CAAuB;gBAEtB,MAAM,EAAE,oBAAoB,GAAG,MAAM;YAInC,OAAO;IAerB,uCAAuC;IACjC,IAAI,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAW3D,+BAA+B;IACzB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI3D,qBAAqB;IACf,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIvD,qBAAqB;IACf,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI5E,qBAAqB;IACf,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAI7D,oBAAoB;IACd,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;CAG1E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ErpExportRequest, ErpExportResponse, ErpResponse } from './types';
|
|
2
|
+
export interface ErpExportAdapterConfig {
|
|
3
|
+
/** Export API base URL, e.g. "/api/export". */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
fetch?: typeof fetch;
|
|
6
|
+
tokenFactory?: () => string | Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export declare class ErpExportAdapter {
|
|
9
|
+
private cfg;
|
|
10
|
+
constructor(config: ErpExportAdapterConfig);
|
|
11
|
+
private headers;
|
|
12
|
+
/** Request a server-side export. Returns a download URL / job id. */
|
|
13
|
+
requestExport(req: ErpExportRequest): Promise<ErpResponse<ErpExportResponse>>;
|
|
14
|
+
/** Download an exported file as a Blob. */
|
|
15
|
+
download(downloadUrl: string): Promise<Blob>;
|
|
16
|
+
/** Trigger browser download for an export. */
|
|
17
|
+
downloadToFile(req: ErpExportRequest, filename?: string): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ErpExportAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErpExportAdapter.d.ts","sourceRoot":"","sources":["../src/ErpExportAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhF,MAAM,WAAW,sBAAsB;IACnC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,qBAAa,gBAAgB;IACzB,OAAO,CAAC,GAAG,CAAyB;gBAExB,MAAM,EAAE,sBAAsB;YAI5B,OAAO;IAQrB,qEAAqE;IAC/D,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAWnF,2CAA2C;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlD,8CAA8C;IACxC,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAahF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ErpResponse, ErpFileInfo } from './types';
|
|
2
|
+
export interface ErpFileAdapterConfig {
|
|
3
|
+
/** File API base URL, e.g. "/api/files". */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
fetch?: typeof fetch;
|
|
6
|
+
tokenFactory?: () => string | Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export declare class ErpFileAdapter {
|
|
9
|
+
private cfg;
|
|
10
|
+
constructor(config: ErpFileAdapterConfig);
|
|
11
|
+
private headers;
|
|
12
|
+
/** Upload a file. Returns file metadata on success. */
|
|
13
|
+
upload(file: File, folder?: string): Promise<ErpResponse<ErpFileInfo>>;
|
|
14
|
+
/** Upload multiple files. */
|
|
15
|
+
uploadMultiple(files: File[], folder?: string): Promise<ErpResponse<ErpFileInfo[]>>;
|
|
16
|
+
/** Get file metadata by id. */
|
|
17
|
+
getInfo(id: string): Promise<ErpResponse<ErpFileInfo>>;
|
|
18
|
+
/** Get a download URL (or blob URL) for a file. */
|
|
19
|
+
getDownloadUrl(id: string): Promise<string>;
|
|
20
|
+
/** Delete file by id. */
|
|
21
|
+
remove(id: string): Promise<ErpResponse<void>>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ErpFileAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErpFileAdapter.d.ts","sourceRoot":"","sources":["../src/ErpFileAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACjC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,GAAG,CAAuB;gBAEtB,MAAM,EAAE,oBAAoB;YAI1B,OAAO;IAQrB,uDAAuD;IACjD,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAc5E,6BAA6B;IACvB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAczF,+BAA+B;IACzB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAS5D,mDAAmD;IAC7C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjD,yBAAyB;IACnB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;CASvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ErpSignalRConfig } from './types';
|
|
2
|
+
export type SignalRStatus = "disconnected" | "connecting" | "connected" | "reconnecting";
|
|
3
|
+
export interface ErpSignalRAdapter {
|
|
4
|
+
readonly status: SignalRStatus;
|
|
5
|
+
start(): Promise<void>;
|
|
6
|
+
stop(): Promise<void>;
|
|
7
|
+
on(event: string, handler: (...args: any[]) => void): void;
|
|
8
|
+
off(event: string, handler: (...args: any[]) => void): void;
|
|
9
|
+
invoke(method: string, ...args: any[]): Promise<any>;
|
|
10
|
+
onStatusChange(cb: (status: SignalRStatus) => void): () => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a SignalR adapter using dynamic import of @microsoft/signalr.
|
|
14
|
+
* This keeps the dependency optional — consumers must install it themselves.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createSignalRAdapter(config: ErpSignalRConfig): Promise<ErpSignalRAdapter>;
|
|
17
|
+
//# sourceMappingURL=ErpSignalRAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErpSignalRAdapter.d.ts","sourceRoot":"","sources":["../src/ErpSignalRAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC;AAEzF,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsD/F"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var g=Object.create;var c=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var k=(r,e,a,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let l of V(e))!S.call(r,l)&&l!==a&&c(r,l,{get:()=>e[l],enumerable:!(t=w(e,l))||t.enumerable});return r};var P=(r,e,a)=>(a=r!=null?g(v(r)):{},k(e||!r||!r.__esModule?c(a,"default",{value:r,enumerable:!0}):a,r));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class A{constructor(e){this.cfg=typeof e=="string"?{baseUrl:e}:e}async request(e,a){const t=this.cfg.fetch??globalThis.fetch,l={"Content-Type":"application/json",...this.cfg.headers};if(this.cfg.tokenFactory){const n=await this.cfg.tokenFactory();l.Authorization=`Bearer ${n}`}const o=await t(`${this.cfg.baseUrl}${e}`,{...a,headers:{...l,...a==null?void 0:a.headers}});if(!o.ok)throw new Error(`ERP request failed: ${o.status} ${o.statusText}`);return o.json()}async load(e){var l,o;const a=new URLSearchParams;(e==null?void 0:e.skip)!=null&&a.set("skip",String(e.skip)),(e==null?void 0:e.take)!=null&&a.set("take",String(e.take)),e!=null&&e.search&&a.set("search",e.search),(l=e==null?void 0:e.sort)!=null&&l.length&&a.set("sort",JSON.stringify(e.sort)),(o=e==null?void 0:e.filters)!=null&&o.length&&a.set("filters",JSON.stringify(e.filters));const t=a.toString();return this.request(t?`?${t}`:"")}async getById(e){return this.request(`/${e}`)}async create(e){return this.request("",{method:"POST",body:JSON.stringify(e)})}async update(e,a){return this.request(`/${e}`,{method:"PUT",body:JSON.stringify(a)})}async remove(e){return this.request(`/${e}`,{method:"DELETE"})}async removeBatch(e){return this.request("/batch-delete",{method:"POST",body:JSON.stringify({ids:e})})}}async function T(r){const e=await import("@microsoft/signalr");let a="disconnected";const t=new Set,l=s=>{a=s,t.forEach(u=>u(s))},n=new e.HubConnectionBuilder().withUrl(r.hubUrl,{accessTokenFactory:r.accessTokenFactory?()=>r.accessTokenFactory():void 0}).withAutomaticReconnect().build();return n.onreconnecting(()=>l("reconnecting")),n.onreconnected(()=>l("connected")),n.onclose(()=>l("disconnected")),{get status(){return a},async start(){l("connecting"),await n.start(),l("connected")},async stop(){await n.stop(),l("disconnected")},on(s,u){n.on(s,u)},off(s,u){n.off(s,u)},invoke(s,...u){return n.invoke(s,...u)},onStatusChange(s){return t.add(s),()=>t.delete(s)}}}class R{constructor(e){this.accessToken=null,this.refreshToken=null,this.tokenFactory=async()=>{if(!this.accessToken)throw new Error("Not authenticated");return this.accessToken},this.cfg=e}getAccessToken(){return this.accessToken}async post(e,a){const l=await(this.cfg.fetch??globalThis.fetch)(`${this.cfg.baseUrl}${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!l.ok)throw new Error(`Auth request failed: ${l.status}`);return l.json()}async login(e){var t,l;const a=await this.post("/login",e);return a.token&&(this.accessToken=a.token,this.refreshToken=a.refreshToken??null,(l=(t=this.cfg).onTokens)==null||l.call(t,a.token,a.refreshToken??"")),a}async refresh(){var a,t;if(!this.refreshToken)throw new Error("No refresh token");const e=await this.post("/refresh",{refreshToken:this.refreshToken});return e.token&&(this.accessToken=e.token,this.refreshToken=e.refreshToken??this.refreshToken,(t=(a=this.cfg).onTokens)==null||t.call(a,e.token,this.refreshToken)),e}async me(){const a=await(this.cfg.fetch??globalThis.fetch)(`${this.cfg.baseUrl}/me`,{headers:{Authorization:`Bearer ${this.accessToken}`}});if(!a.ok)throw new Error(`Auth /me failed: ${a.status}`);return a.json()}async logout(){try{await(this.cfg.fetch??globalThis.fetch)(`${this.cfg.baseUrl}/logout`,{method:"POST",headers:{Authorization:`Bearer ${this.accessToken}`}})}finally{this.accessToken=null,this.refreshToken=null}}}class C{constructor(e){this.cfg=e}async headers(){const e={};return this.cfg.tokenFactory&&(e.Authorization=`Bearer ${await this.cfg.tokenFactory()}`),e}async upload(e,a){const t=this.cfg.fetch??globalThis.fetch,l=new FormData;l.append("file",e),a&&l.append("folder",a);const o=await t(this.cfg.baseUrl,{method:"POST",headers:await this.headers(),body:l});if(!o.ok)throw new Error(`File upload failed: ${o.status}`);return o.json()}async uploadMultiple(e,a){const t=this.cfg.fetch??globalThis.fetch,l=new FormData;e.forEach(n=>l.append("files",n)),a&&l.append("folder",a);const o=await t(`${this.cfg.baseUrl}/batch`,{method:"POST",headers:await this.headers(),body:l});if(!o.ok)throw new Error(`Batch upload failed: ${o.status}`);return o.json()}async getInfo(e){const t=await(this.cfg.fetch??globalThis.fetch)(`${this.cfg.baseUrl}/${e}/info`,{headers:{...await this.headers(),"Content-Type":"application/json"}});if(!t.ok)throw new Error(`File info failed: ${t.status}`);return t.json()}async getDownloadUrl(e){const t=await(this.cfg.fetch??globalThis.fetch)(`${this.cfg.baseUrl}/${e}`,{headers:await this.headers()});if(!t.ok)throw new Error(`File download failed: ${t.status}`);const l=await t.blob();return URL.createObjectURL(l)}async remove(e){const t=await(this.cfg.fetch??globalThis.fetch)(`${this.cfg.baseUrl}/${e}`,{method:"DELETE",headers:{...await this.headers(),"Content-Type":"application/json"}});if(!t.ok)throw new Error(`File delete failed: ${t.status}`);return t.json()}}class E{constructor(e){this.cfg=e}async headers(){const e={"Content-Type":"application/json"};return this.cfg.tokenFactory&&(e.Authorization=`Bearer ${await this.cfg.tokenFactory()}`),e}async requestExport(e){const t=await(this.cfg.fetch??globalThis.fetch)(this.cfg.baseUrl,{method:"POST",headers:await this.headers(),body:JSON.stringify(e)});if(!t.ok)throw new Error(`Export request failed: ${t.status}`);return t.json()}async download(e){const t=await(this.cfg.fetch??globalThis.fetch)(e,{headers:await this.headers()});if(!t.ok)throw new Error(`Export download failed: ${t.status}`);return t.blob()}async downloadToFile(e,a){var i;const t=await this.requestExport(e);if(!((i=t.data)!=null&&i.downloadUrl))throw new Error("No download URL returned");const l=await this.download(t.data.downloadUrl),o=URL.createObjectURL(l),n=document.createElement("a");n.href=o,n.download=a??`export.${e.format}`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(o)}}const p=[{type:"NiceAudioPlayer",label:"Audio Player",category:"Audio",icon:"music",defaultProps:{src:"",autoplay:!1,showWaveform:!0},propDescriptors:[{name:"src",type:"string",label:"Audio source URL"},{name:"autoplay",type:"boolean",label:"Auto-play",defaultValue:!1},{name:"loop",type:"boolean",label:"Loop",defaultValue:!1},{name:"showWaveform",type:"boolean",label:"Show waveform",defaultValue:!0},{name:"showPlaylist",type:"boolean",label:"Show playlist",defaultValue:!1},{name:"visualizerMode",type:"select",label:"Visualizer mode",options:[{label:"None",value:"none"},{label:"Bars",value:"bars"},{label:"Wave",value:"wave"},{label:"Circle",value:"circle"}],defaultValue:"bars"},{name:"height",type:"size",label:"Height",group:"Layout"}]},{type:"NiceWaveform",label:"Waveform",category:"Audio",icon:"waveform",defaultProps:{peaks:[],color:"#4a90d9"},propDescriptors:[{name:"peaks",type:"json",label:"Peak data (JSON array)"},{name:"color",type:"color",label:"Waveform color",defaultValue:"#4a90d9"},{name:"progressColor",type:"color",label:"Progress color",defaultValue:"#1b5e20"},{name:"barWidth",type:"number",label:"Bar width (px)",min:1,max:10,step:1,defaultValue:2},{name:"height",type:"size",label:"Height",group:"Layout"},{name:"interactive",type:"boolean",label:"Allow seeking",defaultValue:!0}]},{type:"NicePianoRoll",label:"Piano Roll",category:"Audio",icon:"piano",defaultProps:{notes:[],octaves:4,startOctave:3},propDescriptors:[{name:"notes",type:"json",label:"MIDI notes (JSON)"},{name:"octaves",type:"number",label:"Visible octaves",min:1,max:8,defaultValue:4},{name:"startOctave",type:"number",label:"Start octave",min:0,max:8,defaultValue:3},{name:"quantize",type:"select",label:"Quantize",options:[{label:"1/4",value:"4"},{label:"1/8",value:"8"},{label:"1/16",value:"16"},{label:"1/32",value:"32"}],defaultValue:"16"},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1},{name:"height",type:"size",label:"Height",group:"Layout"}]},{type:"NiceKaraoke",label:"Karaoke",category:"Audio",icon:"microphone",defaultProps:{lyrics:[],audioSrc:""},propDescriptors:[{name:"audioSrc",type:"string",label:"Audio source URL"},{name:"lyrics",type:"json",label:"Lyrics (JSON array of {time, text})"},{name:"showScore",type:"boolean",label:"Show score",defaultValue:!0},{name:"pitchDetection",type:"boolean",label:"Pitch detection",defaultValue:!0},{name:"highlightColor",type:"color",label:"Highlight color",defaultValue:"#ffd700"},{name:"fontSize",type:"size",label:"Font size",group:"Typography"}]}],d=[{type:"NicePixelEditor",label:"Pixel Editor",category:"Graphics",icon:"grid",defaultProps:{width:32,height:32,palette:[]},propDescriptors:[{name:"width",type:"number",label:"Canvas width (px)",min:1,max:256,defaultValue:32},{name:"height",type:"number",label:"Canvas height (px)",min:1,max:256,defaultValue:32},{name:"palette",type:"json",label:"Color palette (JSON array)"},{name:"gridVisible",type:"boolean",label:"Show grid",defaultValue:!0},{name:"zoom",type:"number",label:"Zoom level",min:1,max:32,step:1,defaultValue:8},{name:"layers",type:"boolean",label:"Enable layers",defaultValue:!0},{name:"onion",type:"boolean",label:"Onion skin (animation)",defaultValue:!1}]},{type:"NiceVectorEditor",label:"Vector Editor",category:"Graphics",icon:"pen-tool",defaultProps:{width:800,height:600},propDescriptors:[{name:"width",type:"number",label:"Canvas width",min:100,max:4096,defaultValue:800,group:"Layout"},{name:"height",type:"number",label:"Canvas height",min:100,max:4096,defaultValue:600,group:"Layout"},{name:"showRulers",type:"boolean",label:"Show rulers",defaultValue:!0},{name:"snapToGrid",type:"boolean",label:"Snap to grid",defaultValue:!0},{name:"gridSize",type:"number",label:"Grid size",min:1,max:100,defaultValue:10},{name:"fillColor",type:"color",label:"Default fill",defaultValue:"#ffffff"},{name:"strokeColor",type:"color",label:"Default stroke",defaultValue:"#000000"},{name:"strokeWidth",type:"number",label:"Stroke width",min:0,max:20,step:.5,defaultValue:1}]},{type:"NicePhotoEditor",label:"Photo Editor",category:"Graphics",icon:"image",defaultProps:{src:""},propDescriptors:[{name:"src",type:"string",label:"Image source URL"},{name:"crop",type:"boolean",label:"Allow crop",defaultValue:!0},{name:"rotate",type:"boolean",label:"Allow rotate",defaultValue:!0},{name:"filters",type:"boolean",label:"Show filters",defaultValue:!0},{name:"adjustments",type:"boolean",label:"Show adjustments",defaultValue:!0},{name:"text",type:"boolean",label:"Allow text overlay",defaultValue:!0},{name:"outputFormat",type:"select",label:"Output format",options:[{label:"PNG",value:"png"},{label:"JPEG",value:"jpeg"},{label:"WebP",value:"webp"}],defaultValue:"png"},{name:"maxWidth",type:"number",label:"Max output width",min:100,max:8192,group:"Output"}]}],b=[{type:"NiceModelEditor",label:"3D Model Editor",category:"3D",icon:"cube",defaultProps:{modelUrl:""},propDescriptors:[{name:"modelUrl",type:"string",label:"Model URL (.glb / .gltf)"},{name:"environmentMap",type:"select",label:"Environment",options:[{label:"Studio",value:"studio"},{label:"Outdoor",value:"outdoor"},{label:"Warehouse",value:"warehouse"},{label:"None",value:"none"}],defaultValue:"studio"},{name:"showGrid",type:"boolean",label:"Show grid",defaultValue:!0},{name:"showAxes",type:"boolean",label:"Show axes",defaultValue:!0},{name:"enablePhysics",type:"boolean",label:"Enable physics",defaultValue:!1},{name:"wireframe",type:"boolean",label:"Wireframe mode",defaultValue:!1},{name:"backgroundColor",type:"color",label:"Background",defaultValue:"#1a1a2e"},{name:"height",type:"size",label:"Viewport height",group:"Layout"}]},{type:"NiceModelViewer",label:"3D Model Viewer",category:"3D",icon:"eye",defaultProps:{modelUrl:"",autoRotate:!0},propDescriptors:[{name:"modelUrl",type:"string",label:"Model URL (.glb / .gltf)"},{name:"autoRotate",type:"boolean",label:"Auto-rotate",defaultValue:!0},{name:"rotateSpeed",type:"number",label:"Rotate speed",min:.1,max:10,step:.1,defaultValue:1},{name:"zoom",type:"boolean",label:"Allow zoom",defaultValue:!0},{name:"pan",type:"boolean",label:"Allow pan",defaultValue:!0},{name:"environmentMap",type:"select",label:"Environment",options:[{label:"Studio",value:"studio"},{label:"Outdoor",value:"outdoor"},{label:"Warehouse",value:"warehouse"},{label:"None",value:"none"}],defaultValue:"studio"},{name:"backgroundColor",type:"color",label:"Background",defaultValue:"#1a1a2e"},{name:"showAnnotations",type:"boolean",label:"Show annotations",defaultValue:!1},{name:"height",type:"size",label:"Viewport height",group:"Layout"}]}],h=[{type:"NiceLeaderboard",label:"Leaderboard",category:"Gamification",icon:"trophy",defaultProps:{dataSource:[],maxRows:10},propDescriptors:[{name:"dataSource",type:"json",label:"Data source (JSON)"},{name:"maxRows",type:"number",label:"Max visible rows",min:3,max:100,defaultValue:10},{name:"showRank",type:"boolean",label:"Show rank column",defaultValue:!0},{name:"showAvatar",type:"boolean",label:"Show avatar",defaultValue:!0},{name:"highlightCurrentUser",type:"boolean",label:"Highlight current user",defaultValue:!0},{name:"scoreField",type:"string",label:"Score field name",defaultValue:"score"},{name:"nameField",type:"string",label:"Name field name",defaultValue:"name"},{name:"variant",type:"variant",label:"Visual style",defaultValue:"default"}]},{type:"NiceAchievement",label:"Achievement Badge",category:"Gamification",icon:"award",defaultProps:{title:"Achievement",unlocked:!1},propDescriptors:[{name:"title",type:"string",label:"Achievement title",defaultValue:"Achievement"},{name:"description",type:"string",label:"Description"},{name:"icon",type:"string",label:"Icon URL"},{name:"unlocked",type:"boolean",label:"Unlocked",defaultValue:!1},{name:"progress",type:"number",label:"Progress (0-100)",min:0,max:100,defaultValue:0},{name:"rarity",type:"select",label:"Rarity",options:[{label:"Common",value:"common"},{label:"Rare",value:"rare"},{label:"Epic",value:"epic"},{label:"Legendary",value:"legendary"}],defaultValue:"common"},{name:"size",type:"size",label:"Badge size",group:"Layout"}]},{type:"NiceQuest",label:"Quest Tracker",category:"Gamification",icon:"map",defaultProps:{title:"Quest",steps:[]},propDescriptors:[{name:"title",type:"string",label:"Quest title",defaultValue:"Quest"},{name:"description",type:"string",label:"Quest description"},{name:"steps",type:"json",label:"Steps (JSON array of {title, completed})"},{name:"reward",type:"string",label:"Reward description"},{name:"rewardXP",type:"number",label:"Reward XP",min:0,defaultValue:100},{name:"showProgress",type:"boolean",label:"Show progress bar",defaultValue:!0},{name:"variant",type:"variant",label:"Visual style",defaultValue:"default"}]},{type:"NiceXPBar",label:"XP Progress Bar",category:"Gamification",icon:"zap",defaultProps:{currentXP:0,maxXP:1e3,level:1},propDescriptors:[{name:"currentXP",type:"number",label:"Current XP",min:0,defaultValue:0},{name:"maxXP",type:"number",label:"Max XP (next level)",min:1,defaultValue:1e3},{name:"level",type:"number",label:"Current level",min:1,defaultValue:1},{name:"showLabel",type:"boolean",label:"Show XP label",defaultValue:!0},{name:"showLevel",type:"boolean",label:"Show level badge",defaultValue:!0},{name:"color",type:"color",label:"Bar color",defaultValue:"#4caf50"},{name:"animated",type:"boolean",label:"Animate changes",defaultValue:!0},{name:"height",type:"size",label:"Bar height",group:"Layout"}]}],m=[{type:"NiceAddress",label:"Address Editor",category:"Business",icon:"map-pin",defaultProps:{country:"PL"},propDescriptors:[{name:"street",type:"string",label:"Street",group:"Address"},{name:"city",type:"string",label:"City",group:"Address"},{name:"postalCode",type:"string",label:"Postal code",group:"Address"},{name:"country",type:"select",label:"Country",options:[{label:"Poland",value:"PL"},{label:"Germany",value:"DE"},{label:"USA",value:"US"},{label:"UK",value:"GB"},{label:"France",value:"FR"}],defaultValue:"PL",group:"Address"},{name:"showMap",type:"boolean",label:"Show map preview",defaultValue:!1},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]},{type:"NicePhone",label:"Phone Input",category:"Business",icon:"phone",defaultProps:{countryCode:"+48"},propDescriptors:[{name:"value",type:"string",label:"Phone number"},{name:"countryCode",type:"string",label:"Default country code",defaultValue:"+48"},{name:"showFlag",type:"boolean",label:"Show country flag",defaultValue:!0},{name:"format",type:"select",label:"Format",options:[{label:"International",value:"international"},{label:"National",value:"national"},{label:"E.164",value:"e164"}],defaultValue:"international"},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]},{type:"NiceCurrency",label:"Currency Input",category:"Business",icon:"dollar-sign",defaultProps:{currency:"PLN",decimals:2},propDescriptors:[{name:"value",type:"number",label:"Amount",defaultValue:0},{name:"currency",type:"select",label:"Currency",options:[{label:"PLN",value:"PLN"},{label:"EUR",value:"EUR"},{label:"USD",value:"USD"},{label:"GBP",value:"GBP"}],defaultValue:"PLN"},{name:"decimals",type:"number",label:"Decimal places",min:0,max:4,defaultValue:2},{name:"showCurrencySymbol",type:"boolean",label:"Show symbol",defaultValue:!0},{name:"thousandSeparator",type:"boolean",label:"Thousand separator",defaultValue:!0},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]},{type:"NiceVAT",label:"VAT Input",category:"Business",icon:"percent",defaultProps:{rate:23,country:"PL"},propDescriptors:[{name:"netValue",type:"number",label:"Net value",defaultValue:0,group:"Values"},{name:"rate",type:"number",label:"VAT rate (%)",min:0,max:100,defaultValue:23,group:"Values"},{name:"country",type:"select",label:"Country",options:[{label:"Poland",value:"PL"},{label:"Germany",value:"DE"},{label:"France",value:"FR"}],defaultValue:"PL"},{name:"showGross",type:"boolean",label:"Show gross value",defaultValue:!0},{name:"showVatAmount",type:"boolean",label:"Show VAT amount",defaultValue:!0},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]},{type:"NiceInvoiceLines",label:"Invoice Lines",category:"Business",icon:"file-text",defaultProps:{lines:[],currency:"PLN"},propDescriptors:[{name:"lines",type:"json",label:"Invoice lines (JSON)"},{name:"currency",type:"select",label:"Currency",options:[{label:"PLN",value:"PLN"},{label:"EUR",value:"EUR"},{label:"USD",value:"USD"}],defaultValue:"PLN"},{name:"showVAT",type:"boolean",label:"Show VAT column",defaultValue:!0},{name:"showDiscount",type:"boolean",label:"Show discount column",defaultValue:!1},{name:"showTotal",type:"boolean",label:"Show totals row",defaultValue:!0},{name:"editable",type:"boolean",label:"Editable",defaultValue:!0},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]}],y=[{type:"NiceLoginForm",label:"Login Form",category:"Auth",icon:"log-in",defaultProps:{showRemember:!0,showForgotPassword:!0},propDescriptors:[{name:"title",type:"string",label:"Form title",defaultValue:"Sign In"},{name:"showRemember",type:"boolean",label:"Show 'Remember me'",defaultValue:!0},{name:"showForgotPassword",type:"boolean",label:"Show 'Forgot password'",defaultValue:!0},{name:"showRegisterLink",type:"boolean",label:"Show register link",defaultValue:!1},{name:"showLogo",type:"boolean",label:"Show logo",defaultValue:!0},{name:"logoUrl",type:"string",label:"Logo URL",group:"Branding"},{name:"primaryColor",type:"color",label:"Primary color",defaultValue:"#1976d2",group:"Branding"},{name:"variant",type:"variant",label:"Visual style",defaultValue:"card"}]},{type:"NiceCaptcha",label:"Captcha",category:"Auth",icon:"shield",defaultProps:{provider:"recaptcha",size:"normal"},propDescriptors:[{name:"provider",type:"select",label:"Provider",options:[{label:"reCAPTCHA v2",value:"recaptcha"},{label:"reCAPTCHA v3",value:"recaptcha-v3"},{label:"hCaptcha",value:"hcaptcha"},{label:"Turnstile",value:"turnstile"}],defaultValue:"recaptcha"},{name:"siteKey",type:"string",label:"Site key"},{name:"size",type:"select",label:"Size",options:[{label:"Normal",value:"normal"},{label:"Compact",value:"compact"},{label:"Invisible",value:"invisible"}],defaultValue:"normal"},{name:"theme",type:"select",label:"Theme",options:[{label:"Light",value:"light"},{label:"Dark",value:"dark"}],defaultValue:"light"}]},{type:"Nice2FASetup",label:"2FA Setup",category:"Auth",icon:"key",defaultProps:{method:"totp"},propDescriptors:[{name:"method",type:"select",label:"2FA method",options:[{label:"TOTP (Authenticator)",value:"totp"},{label:"SMS",value:"sms"},{label:"Email",value:"email"}],defaultValue:"totp"},{name:"issuer",type:"string",label:"Issuer name",defaultValue:"OmniVerk"},{name:"showBackupCodes",type:"boolean",label:"Show backup codes",defaultValue:!0},{name:"showQR",type:"boolean",label:"Show QR code",defaultValue:!0},{name:"codeLength",type:"number",label:"Code length",min:4,max:8,defaultValue:6}]}],f=[{type:"NiceComments",label:"Comments",category:"Social",icon:"message-circle",defaultProps:{threadId:"",allowReplies:!0},propDescriptors:[{name:"threadId",type:"string",label:"Thread ID / entity ID"},{name:"allowReplies",type:"boolean",label:"Allow replies (nested)",defaultValue:!0},{name:"maxDepth",type:"number",label:"Max nesting depth",min:1,max:10,defaultValue:3},{name:"sortOrder",type:"select",label:"Default sort",options:[{label:"Newest first",value:"newest"},{label:"Oldest first",value:"oldest"},{label:"Most liked",value:"popular"}],defaultValue:"newest"},{name:"allowReactions",type:"boolean",label:"Allow reactions",defaultValue:!0},{name:"showAvatar",type:"boolean",label:"Show avatars",defaultValue:!0},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]},{type:"NiceRatings",label:"Ratings",category:"Social",icon:"star",defaultProps:{maxStars:5,allowHalf:!0},propDescriptors:[{name:"value",type:"number",label:"Current rating",min:0,max:10,step:.5,defaultValue:0},{name:"maxStars",type:"number",label:"Maximum stars",min:3,max:10,defaultValue:5},{name:"allowHalf",type:"boolean",label:"Allow half stars",defaultValue:!0},{name:"showCount",type:"boolean",label:"Show vote count",defaultValue:!0},{name:"showAverage",type:"boolean",label:"Show average",defaultValue:!0},{name:"color",type:"color",label:"Star color",defaultValue:"#ffc107"},{name:"size",type:"size",label:"Star size",group:"Layout"},{name:"readOnly",type:"boolean",label:"Read only",defaultValue:!1}]},{type:"NiceWiki",label:"Wiki Editor",category:"Social",icon:"book",defaultProps:{content:"",showTOC:!0},propDescriptors:[{name:"content",type:"string",label:"Initial content (Markdown)"},{name:"showTOC",type:"boolean",label:"Show table of contents",defaultValue:!0},{name:"showHistory",type:"boolean",label:"Show version history",defaultValue:!0},{name:"allowEdit",type:"boolean",label:"Allow editing",defaultValue:!0},{name:"showToolbar",type:"boolean",label:"Show Markdown toolbar",defaultValue:!0},{name:"previewMode",type:"select",label:"Preview mode",options:[{label:"Side by side",value:"split"},{label:"Tab switch",value:"tabs"},{label:"Live preview",value:"live"}],defaultValue:"split"},{name:"maxLength",type:"number",label:"Max content length",min:0,defaultValue:0}]}],L=[...p,...d,...b,...h,...m,...y,...f];exports.ErpAuthAdapter=R;exports.ErpDataAdapter=A;exports.ErpExportAdapter=E;exports.ErpFileAdapter=C;exports.allControlRegistries=L;exports.audioControlRegistry=p;exports.authControlRegistry=y;exports.businessControlRegistry=m;exports.createSignalRAdapter=T;exports.gamificationControlRegistry=h;exports.graphicControlRegistry=d;exports.socialControlRegistry=f;exports.threeControlRegistry=b;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/ErpDataAdapter.ts","../src/ErpSignalRAdapter.ts","../src/ErpAuthAdapter.ts","../src/ErpFileAdapter.ts","../src/ErpExportAdapter.ts","../src/registries/audioControls.ts","../src/registries/graphicControls.ts","../src/registries/threeControls.ts","../src/registries/gamificationControls.ts","../src/registries/businessControls.ts","../src/registries/authControls.ts","../src/registries/socialControls.ts","../src/registries/index.ts"],"sourcesContent":["/**\r\n * ErpDataAdapter — generic REST adapter connecting NiceDataGrid, NiceList, etc.\r\n * to OmniVerk's CRUD REST API.\r\n *\r\n * Usage:\r\n * const adapter = new ErpDataAdapter('/api/products');\r\n * const result = await adapter.load({ skip: 0, take: 20, sort: [{ field: 'name', dir: 'asc' }] });\r\n */\r\n\r\nimport type { ErpDataRequest, ErpResponse, ErpFilter, ErpSort } from \"./types\";\r\n\r\nexport interface ErpDataAdapterConfig {\r\n /** Base URL for the entity, e.g. \"/api/products\". */\r\n baseUrl: string;\r\n /** Custom fetch implementation (defaults to window.fetch). */\r\n fetch?: typeof fetch;\r\n /** Default headers (e.g. Authorization). */\r\n headers?: Record<string, string>;\r\n /** Token factory — called before each request to get a fresh bearer token. */\r\n tokenFactory?: () => string | Promise<string>;\r\n}\r\n\r\nexport class ErpDataAdapter<T = unknown> {\r\n private cfg: ErpDataAdapterConfig;\r\n\r\n constructor(config: ErpDataAdapterConfig | string) {\r\n this.cfg = typeof config === \"string\" ? { baseUrl: config } : config;\r\n }\r\n\r\n private async request<R>(path: string, init?: RequestInit): Promise<R> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n ...this.cfg.headers,\r\n };\r\n if (this.cfg.tokenFactory) {\r\n const token = await this.cfg.tokenFactory();\r\n headers[\"Authorization\"] = `Bearer ${token}`;\r\n }\r\n const res = await f(`${this.cfg.baseUrl}${path}`, { ...init, headers: { ...headers, ...init?.headers } });\r\n if (!res.ok) throw new Error(`ERP request failed: ${res.status} ${res.statusText}`);\r\n return res.json() as Promise<R>;\r\n }\r\n\r\n /** Load paged/filtered/sorted data. */\r\n async load(req?: ErpDataRequest): Promise<ErpResponse<T[]>> {\r\n const params = new URLSearchParams();\r\n if (req?.skip != null) params.set(\"skip\", String(req.skip));\r\n if (req?.take != null) params.set(\"take\", String(req.take));\r\n if (req?.search) params.set(\"search\", req.search);\r\n if (req?.sort?.length) params.set(\"sort\", JSON.stringify(req.sort));\r\n if (req?.filters?.length) params.set(\"filters\", JSON.stringify(req.filters));\r\n const qs = params.toString();\r\n return this.request<ErpResponse<T[]>>(qs ? `?${qs}` : \"\");\r\n }\r\n\r\n /** Get single entity by id. */\r\n async getById(id: string | number): Promise<ErpResponse<T>> {\r\n return this.request<ErpResponse<T>>(`/${id}`);\r\n }\r\n\r\n /** Create entity. */\r\n async create(item: Partial<T>): Promise<ErpResponse<T>> {\r\n return this.request<ErpResponse<T>>(\"\", { method: \"POST\", body: JSON.stringify(item) });\r\n }\r\n\r\n /** Update entity. */\r\n async update(id: string | number, item: Partial<T>): Promise<ErpResponse<T>> {\r\n return this.request<ErpResponse<T>>(`/${id}`, { method: \"PUT\", body: JSON.stringify(item) });\r\n }\r\n\r\n /** Delete entity. */\r\n async remove(id: string | number): Promise<ErpResponse<void>> {\r\n return this.request<ErpResponse<void>>(`/${id}`, { method: \"DELETE\" });\r\n }\r\n\r\n /** Batch delete. */\r\n async removeBatch(ids: (string | number)[]): Promise<ErpResponse<void>> {\r\n return this.request<ErpResponse<void>>(\"/batch-delete\", { method: \"POST\", body: JSON.stringify({ ids }) });\r\n }\r\n}\r\n","/**\r\n * ErpSignalRAdapter — wraps a SignalR HubConnection for real-time features\r\n * (NiceChat, NiceScheduler live updates, NiceDataGrid auto-refresh, etc.)\r\n */\r\n\r\nimport type { ErpSignalRConfig } from \"./types\";\r\n\r\nexport type SignalRStatus = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\r\n\r\nexport interface ErpSignalRAdapter {\r\n readonly status: SignalRStatus;\r\n start(): Promise<void>;\r\n stop(): Promise<void>;\r\n on(event: string, handler: (...args: any[]) => void): void;\r\n off(event: string, handler: (...args: any[]) => void): void;\r\n invoke(method: string, ...args: any[]): Promise<any>;\r\n onStatusChange(cb: (status: SignalRStatus) => void): () => void;\r\n}\r\n\r\n/**\r\n * Create a SignalR adapter using dynamic import of @microsoft/signalr.\r\n * This keeps the dependency optional — consumers must install it themselves.\r\n */\r\nexport async function createSignalRAdapter(config: ErpSignalRConfig): Promise<ErpSignalRAdapter> {\r\n const signalR = await import(\"@microsoft/signalr\");\r\n\r\n let status: SignalRStatus = \"disconnected\";\r\n const listeners = new Set<(s: SignalRStatus) => void>();\r\n\r\n const setStatus = (s: SignalRStatus) => {\r\n status = s;\r\n listeners.forEach((cb) => cb(s));\r\n };\r\n\r\n const builder = new signalR.HubConnectionBuilder()\r\n .withUrl(config.hubUrl, {\r\n accessTokenFactory: config.accessTokenFactory\r\n ? () => config.accessTokenFactory!()\r\n : undefined,\r\n })\r\n .withAutomaticReconnect();\r\n\r\n const connection = builder.build();\r\n\r\n connection.onreconnecting(() => setStatus(\"reconnecting\"));\r\n connection.onreconnected(() => setStatus(\"connected\"));\r\n connection.onclose(() => setStatus(\"disconnected\"));\r\n\r\n const adapter: ErpSignalRAdapter = {\r\n get status() {\r\n return status;\r\n },\r\n async start() {\r\n setStatus(\"connecting\");\r\n await connection.start();\r\n setStatus(\"connected\");\r\n },\r\n async stop() {\r\n await connection.stop();\r\n setStatus(\"disconnected\");\r\n },\r\n on(event, handler) {\r\n connection.on(event, handler);\r\n },\r\n off(event, handler) {\r\n connection.off(event, handler);\r\n },\r\n invoke(method, ...args) {\r\n return connection.invoke(method, ...args);\r\n },\r\n onStatusChange(cb) {\r\n listeners.add(cb);\r\n return () => listeners.delete(cb);\r\n },\r\n };\r\n\r\n return adapter;\r\n}\r\n","/**\r\n * ErpAuthAdapter — connects @nice2dev/auth components (LoginForm, RoleGuard, etc.)\r\n * to OmniVerk's JWT-based authentication API.\r\n */\r\n\r\nimport type { ErpLoginRequest, ErpLoginResponse, ErpUser, ErpResponse } from \"./types\";\r\n\r\nexport interface ErpAuthAdapterConfig {\r\n /** Auth API base URL, e.g. \"/api/auth\". */\r\n baseUrl: string;\r\n fetch?: typeof fetch;\r\n /** Called when a new token pair is obtained. */\r\n onTokens?: (access: string, refresh: string) => void;\r\n}\r\n\r\nexport class ErpAuthAdapter {\r\n private cfg: ErpAuthAdapterConfig;\r\n private accessToken: string | null = null;\r\n private refreshToken: string | null = null;\r\n\r\n constructor(config: ErpAuthAdapterConfig) {\r\n this.cfg = config;\r\n }\r\n\r\n /** Current access token (or null). */\r\n getAccessToken(): string | null {\r\n return this.accessToken;\r\n }\r\n\r\n /** Token factory for use with ErpDataAdapter.tokenFactory. */\r\n tokenFactory = async (): Promise<string> => {\r\n if (!this.accessToken) throw new Error(\"Not authenticated\");\r\n return this.accessToken;\r\n };\r\n\r\n private async post<R>(path: string, body: unknown): Promise<R> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(`${this.cfg.baseUrl}${path}`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(body),\r\n });\r\n if (!res.ok) throw new Error(`Auth request failed: ${res.status}`);\r\n return res.json() as Promise<R>;\r\n }\r\n\r\n /** Login with username/password. */\r\n async login(req: ErpLoginRequest): Promise<ErpLoginResponse> {\r\n const result = await this.post<ErpLoginResponse>(\"/login\", req);\r\n if (result.token) {\r\n this.accessToken = result.token;\r\n this.refreshToken = result.refreshToken ?? null;\r\n this.cfg.onTokens?.(result.token, result.refreshToken ?? \"\");\r\n }\r\n return result;\r\n }\r\n\r\n /** Refresh the access token. */\r\n async refresh(): Promise<ErpLoginResponse> {\r\n if (!this.refreshToken) throw new Error(\"No refresh token\");\r\n const result = await this.post<ErpLoginResponse>(\"/refresh\", { refreshToken: this.refreshToken });\r\n if (result.token) {\r\n this.accessToken = result.token;\r\n this.refreshToken = result.refreshToken ?? this.refreshToken;\r\n this.cfg.onTokens?.(result.token, this.refreshToken!);\r\n }\r\n return result;\r\n }\r\n\r\n /** Get current user info. */\r\n async me(): Promise<ErpResponse<ErpUser>> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(`${this.cfg.baseUrl}/me`, {\r\n headers: { Authorization: `Bearer ${this.accessToken}` },\r\n });\r\n if (!res.ok) throw new Error(`Auth /me failed: ${res.status}`);\r\n return res.json() as Promise<ErpResponse<ErpUser>>;\r\n }\r\n\r\n /** Logout (invalidate tokens on server). */\r\n async logout(): Promise<void> {\r\n try {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n await f(`${this.cfg.baseUrl}/logout`, {\r\n method: \"POST\",\r\n headers: { Authorization: `Bearer ${this.accessToken}` },\r\n });\r\n } finally {\r\n this.accessToken = null;\r\n this.refreshToken = null;\r\n }\r\n }\r\n}\r\n","/**\r\n * ErpFileAdapter — handles file uploads / downloads / management\r\n * against OmniVerk's blob-storage API.\r\n */\r\n\r\nimport type { ErpResponse, ErpFileInfo } from \"./types\";\r\n\r\nexport interface ErpFileAdapterConfig {\r\n /** File API base URL, e.g. \"/api/files\". */\r\n baseUrl: string;\r\n fetch?: typeof fetch;\r\n tokenFactory?: () => string | Promise<string>;\r\n}\r\n\r\nexport class ErpFileAdapter {\r\n private cfg: ErpFileAdapterConfig;\r\n\r\n constructor(config: ErpFileAdapterConfig) {\r\n this.cfg = config;\r\n }\r\n\r\n private async headers(): Promise<Record<string, string>> {\r\n const h: Record<string, string> = {};\r\n if (this.cfg.tokenFactory) {\r\n h[\"Authorization\"] = `Bearer ${await this.cfg.tokenFactory()}`;\r\n }\r\n return h;\r\n }\r\n\r\n /** Upload a file. Returns file metadata on success. */\r\n async upload(file: File, folder?: string): Promise<ErpResponse<ErpFileInfo>> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const form = new FormData();\r\n form.append(\"file\", file);\r\n if (folder) form.append(\"folder\", folder);\r\n const res = await f(this.cfg.baseUrl, {\r\n method: \"POST\",\r\n headers: await this.headers(),\r\n body: form,\r\n });\r\n if (!res.ok) throw new Error(`File upload failed: ${res.status}`);\r\n return res.json() as Promise<ErpResponse<ErpFileInfo>>;\r\n }\r\n\r\n /** Upload multiple files. */\r\n async uploadMultiple(files: File[], folder?: string): Promise<ErpResponse<ErpFileInfo[]>> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const form = new FormData();\r\n files.forEach((file) => form.append(\"files\", file));\r\n if (folder) form.append(\"folder\", folder);\r\n const res = await f(`${this.cfg.baseUrl}/batch`, {\r\n method: \"POST\",\r\n headers: await this.headers(),\r\n body: form,\r\n });\r\n if (!res.ok) throw new Error(`Batch upload failed: ${res.status}`);\r\n return res.json() as Promise<ErpResponse<ErpFileInfo[]>>;\r\n }\r\n\r\n /** Get file metadata by id. */\r\n async getInfo(id: string): Promise<ErpResponse<ErpFileInfo>> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(`${this.cfg.baseUrl}/${id}/info`, {\r\n headers: { ...(await this.headers()), \"Content-Type\": \"application/json\" },\r\n });\r\n if (!res.ok) throw new Error(`File info failed: ${res.status}`);\r\n return res.json() as Promise<ErpResponse<ErpFileInfo>>;\r\n }\r\n\r\n /** Get a download URL (or blob URL) for a file. */\r\n async getDownloadUrl(id: string): Promise<string> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(`${this.cfg.baseUrl}/${id}`, {\r\n headers: await this.headers(),\r\n });\r\n if (!res.ok) throw new Error(`File download failed: ${res.status}`);\r\n const blob = await res.blob();\r\n return URL.createObjectURL(blob);\r\n }\r\n\r\n /** Delete file by id. */\r\n async remove(id: string): Promise<ErpResponse<void>> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(`${this.cfg.baseUrl}/${id}`, {\r\n method: \"DELETE\",\r\n headers: { ...(await this.headers()), \"Content-Type\": \"application/json\" },\r\n });\r\n if (!res.ok) throw new Error(`File delete failed: ${res.status}`);\r\n return res.json() as Promise<ErpResponse<void>>;\r\n }\r\n}\r\n","/**\r\n * ErpExportAdapter — connects NiceDataGrid export actions to OmniVerk's\r\n * server-side report engine (xlsx, pdf, csv, json, xml).\r\n */\r\n\r\nimport type { ErpExportRequest, ErpExportResponse, ErpResponse } from \"./types\";\r\n\r\nexport interface ErpExportAdapterConfig {\r\n /** Export API base URL, e.g. \"/api/export\". */\r\n baseUrl: string;\r\n fetch?: typeof fetch;\r\n tokenFactory?: () => string | Promise<string>;\r\n}\r\n\r\nexport class ErpExportAdapter {\r\n private cfg: ErpExportAdapterConfig;\r\n\r\n constructor(config: ErpExportAdapterConfig) {\r\n this.cfg = config;\r\n }\r\n\r\n private async headers(): Promise<Record<string, string>> {\r\n const h: Record<string, string> = { \"Content-Type\": \"application/json\" };\r\n if (this.cfg.tokenFactory) {\r\n h[\"Authorization\"] = `Bearer ${await this.cfg.tokenFactory()}`;\r\n }\r\n return h;\r\n }\r\n\r\n /** Request a server-side export. Returns a download URL / job id. */\r\n async requestExport(req: ErpExportRequest): Promise<ErpResponse<ErpExportResponse>> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(this.cfg.baseUrl, {\r\n method: \"POST\",\r\n headers: await this.headers(),\r\n body: JSON.stringify(req),\r\n });\r\n if (!res.ok) throw new Error(`Export request failed: ${res.status}`);\r\n return res.json() as Promise<ErpResponse<ErpExportResponse>>;\r\n }\r\n\r\n /** Download an exported file as a Blob. */\r\n async download(downloadUrl: string): Promise<Blob> {\r\n const f = this.cfg.fetch ?? globalThis.fetch;\r\n const res = await f(downloadUrl, {\r\n headers: await this.headers(),\r\n });\r\n if (!res.ok) throw new Error(`Export download failed: ${res.status}`);\r\n return res.blob();\r\n }\r\n\r\n /** Trigger browser download for an export. */\r\n async downloadToFile(req: ErpExportRequest, filename?: string): Promise<void> {\r\n const result = await this.requestExport(req);\r\n if (!result.data?.downloadUrl) throw new Error(\"No download URL returned\");\r\n const blob = await this.download(result.data.downloadUrl);\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = filename ?? `export.${req.format}`;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","/**\r\n * 5.1.1 — Audio control registrations for NiceViewBuilder.\r\n * Controls: player, waveform, piano-roll, karaoke\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const audioControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NiceAudioPlayer\",\r\n label: \"Audio Player\",\r\n category: \"Audio\",\r\n icon: \"music\",\r\n defaultProps: { src: \"\", autoplay: false, showWaveform: true },\r\n propDescriptors: [\r\n { name: \"src\", type: \"string\", label: \"Audio source URL\" },\r\n { name: \"autoplay\", type: \"boolean\", label: \"Auto-play\", defaultValue: false },\r\n { name: \"loop\", type: \"boolean\", label: \"Loop\", defaultValue: false },\r\n { name: \"showWaveform\", type: \"boolean\", label: \"Show waveform\", defaultValue: true },\r\n { name: \"showPlaylist\", type: \"boolean\", label: \"Show playlist\", defaultValue: false },\r\n { name: \"visualizerMode\", type: \"select\", label: \"Visualizer mode\", options: [\r\n { label: \"None\", value: \"none\" },\r\n { label: \"Bars\", value: \"bars\" },\r\n { label: \"Wave\", value: \"wave\" },\r\n { label: \"Circle\", value: \"circle\" },\r\n ], defaultValue: \"bars\" },\r\n { name: \"height\", type: \"size\", label: \"Height\", group: \"Layout\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceWaveform\",\r\n label: \"Waveform\",\r\n category: \"Audio\",\r\n icon: \"waveform\",\r\n defaultProps: { peaks: [], color: \"#4a90d9\" },\r\n propDescriptors: [\r\n { name: \"peaks\", type: \"json\", label: \"Peak data (JSON array)\" },\r\n { name: \"color\", type: \"color\", label: \"Waveform color\", defaultValue: \"#4a90d9\" },\r\n { name: \"progressColor\", type: \"color\", label: \"Progress color\", defaultValue: \"#1b5e20\" },\r\n { name: \"barWidth\", type: \"number\", label: \"Bar width (px)\", min: 1, max: 10, step: 1, defaultValue: 2 },\r\n { name: \"height\", type: \"size\", label: \"Height\", group: \"Layout\" },\r\n { name: \"interactive\", type: \"boolean\", label: \"Allow seeking\", defaultValue: true },\r\n ],\r\n },\r\n {\r\n type: \"NicePianoRoll\",\r\n label: \"Piano Roll\",\r\n category: \"Audio\",\r\n icon: \"piano\",\r\n defaultProps: { notes: [], octaves: 4, startOctave: 3 },\r\n propDescriptors: [\r\n { name: \"notes\", type: \"json\", label: \"MIDI notes (JSON)\" },\r\n { name: \"octaves\", type: \"number\", label: \"Visible octaves\", min: 1, max: 8, defaultValue: 4 },\r\n { name: \"startOctave\", type: \"number\", label: \"Start octave\", min: 0, max: 8, defaultValue: 3 },\r\n { name: \"quantize\", type: \"select\", label: \"Quantize\", options: [\r\n { label: \"1/4\", value: \"4\" },\r\n { label: \"1/8\", value: \"8\" },\r\n { label: \"1/16\", value: \"16\" },\r\n { label: \"1/32\", value: \"32\" },\r\n ], defaultValue: \"16\" },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n { name: \"height\", type: \"size\", label: \"Height\", group: \"Layout\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceKaraoke\",\r\n label: \"Karaoke\",\r\n category: \"Audio\",\r\n icon: \"microphone\",\r\n defaultProps: { lyrics: [], audioSrc: \"\" },\r\n propDescriptors: [\r\n { name: \"audioSrc\", type: \"string\", label: \"Audio source URL\" },\r\n { name: \"lyrics\", type: \"json\", label: \"Lyrics (JSON array of {time, text})\" },\r\n { name: \"showScore\", type: \"boolean\", label: \"Show score\", defaultValue: true },\r\n { name: \"pitchDetection\", type: \"boolean\", label: \"Pitch detection\", defaultValue: true },\r\n { name: \"highlightColor\", type: \"color\", label: \"Highlight color\", defaultValue: \"#ffd700\" },\r\n { name: \"fontSize\", type: \"size\", label: \"Font size\", group: \"Typography\" },\r\n ],\r\n },\r\n];\r\n","/**\r\n * 5.1.2 — Graphic control registrations for NiceViewBuilder.\r\n * Controls: pixel-editor, vector-editor, photo-editor\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const graphicControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NicePixelEditor\",\r\n label: \"Pixel Editor\",\r\n category: \"Graphics\",\r\n icon: \"grid\",\r\n defaultProps: { width: 32, height: 32, palette: [] },\r\n propDescriptors: [\r\n { name: \"width\", type: \"number\", label: \"Canvas width (px)\", min: 1, max: 256, defaultValue: 32 },\r\n { name: \"height\", type: \"number\", label: \"Canvas height (px)\", min: 1, max: 256, defaultValue: 32 },\r\n { name: \"palette\", type: \"json\", label: \"Color palette (JSON array)\" },\r\n { name: \"gridVisible\", type: \"boolean\", label: \"Show grid\", defaultValue: true },\r\n { name: \"zoom\", type: \"number\", label: \"Zoom level\", min: 1, max: 32, step: 1, defaultValue: 8 },\r\n { name: \"layers\", type: \"boolean\", label: \"Enable layers\", defaultValue: true },\r\n { name: \"onion\", type: \"boolean\", label: \"Onion skin (animation)\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NiceVectorEditor\",\r\n label: \"Vector Editor\",\r\n category: \"Graphics\",\r\n icon: \"pen-tool\",\r\n defaultProps: { width: 800, height: 600 },\r\n propDescriptors: [\r\n { name: \"width\", type: \"number\", label: \"Canvas width\", min: 100, max: 4096, defaultValue: 800, group: \"Layout\" },\r\n { name: \"height\", type: \"number\", label: \"Canvas height\", min: 100, max: 4096, defaultValue: 600, group: \"Layout\" },\r\n { name: \"showRulers\", type: \"boolean\", label: \"Show rulers\", defaultValue: true },\r\n { name: \"snapToGrid\", type: \"boolean\", label: \"Snap to grid\", defaultValue: true },\r\n { name: \"gridSize\", type: \"number\", label: \"Grid size\", min: 1, max: 100, defaultValue: 10 },\r\n { name: \"fillColor\", type: \"color\", label: \"Default fill\", defaultValue: \"#ffffff\" },\r\n { name: \"strokeColor\", type: \"color\", label: \"Default stroke\", defaultValue: \"#000000\" },\r\n { name: \"strokeWidth\", type: \"number\", label: \"Stroke width\", min: 0, max: 20, step: 0.5, defaultValue: 1 },\r\n ],\r\n },\r\n {\r\n type: \"NicePhotoEditor\",\r\n label: \"Photo Editor\",\r\n category: \"Graphics\",\r\n icon: \"image\",\r\n defaultProps: { src: \"\" },\r\n propDescriptors: [\r\n { name: \"src\", type: \"string\", label: \"Image source URL\" },\r\n { name: \"crop\", type: \"boolean\", label: \"Allow crop\", defaultValue: true },\r\n { name: \"rotate\", type: \"boolean\", label: \"Allow rotate\", defaultValue: true },\r\n { name: \"filters\", type: \"boolean\", label: \"Show filters\", defaultValue: true },\r\n { name: \"adjustments\", type: \"boolean\", label: \"Show adjustments\", defaultValue: true },\r\n { name: \"text\", type: \"boolean\", label: \"Allow text overlay\", defaultValue: true },\r\n { name: \"outputFormat\", type: \"select\", label: \"Output format\", options: [\r\n { label: \"PNG\", value: \"png\" },\r\n { label: \"JPEG\", value: \"jpeg\" },\r\n { label: \"WebP\", value: \"webp\" },\r\n ], defaultValue: \"png\" },\r\n { name: \"maxWidth\", type: \"number\", label: \"Max output width\", min: 100, max: 8192, group: \"Output\" },\r\n ],\r\n },\r\n];\r\n","/**\r\n * 5.1.3 — 3D control registrations for NiceViewBuilder.\r\n * Controls: model-editor, model-viewer\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const threeControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NiceModelEditor\",\r\n label: \"3D Model Editor\",\r\n category: \"3D\",\r\n icon: \"cube\",\r\n defaultProps: { modelUrl: \"\" },\r\n propDescriptors: [\r\n { name: \"modelUrl\", type: \"string\", label: \"Model URL (.glb / .gltf)\" },\r\n { name: \"environmentMap\", type: \"select\", label: \"Environment\", options: [\r\n { label: \"Studio\", value: \"studio\" },\r\n { label: \"Outdoor\", value: \"outdoor\" },\r\n { label: \"Warehouse\", value: \"warehouse\" },\r\n { label: \"None\", value: \"none\" },\r\n ], defaultValue: \"studio\" },\r\n { name: \"showGrid\", type: \"boolean\", label: \"Show grid\", defaultValue: true },\r\n { name: \"showAxes\", type: \"boolean\", label: \"Show axes\", defaultValue: true },\r\n { name: \"enablePhysics\", type: \"boolean\", label: \"Enable physics\", defaultValue: false },\r\n { name: \"wireframe\", type: \"boolean\", label: \"Wireframe mode\", defaultValue: false },\r\n { name: \"backgroundColor\", type: \"color\", label: \"Background\", defaultValue: \"#1a1a2e\" },\r\n { name: \"height\", type: \"size\", label: \"Viewport height\", group: \"Layout\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceModelViewer\",\r\n label: \"3D Model Viewer\",\r\n category: \"3D\",\r\n icon: \"eye\",\r\n defaultProps: { modelUrl: \"\", autoRotate: true },\r\n propDescriptors: [\r\n { name: \"modelUrl\", type: \"string\", label: \"Model URL (.glb / .gltf)\" },\r\n { name: \"autoRotate\", type: \"boolean\", label: \"Auto-rotate\", defaultValue: true },\r\n { name: \"rotateSpeed\", type: \"number\", label: \"Rotate speed\", min: 0.1, max: 10, step: 0.1, defaultValue: 1 },\r\n { name: \"zoom\", type: \"boolean\", label: \"Allow zoom\", defaultValue: true },\r\n { name: \"pan\", type: \"boolean\", label: \"Allow pan\", defaultValue: true },\r\n { name: \"environmentMap\", type: \"select\", label: \"Environment\", options: [\r\n { label: \"Studio\", value: \"studio\" },\r\n { label: \"Outdoor\", value: \"outdoor\" },\r\n { label: \"Warehouse\", value: \"warehouse\" },\r\n { label: \"None\", value: \"none\" },\r\n ], defaultValue: \"studio\" },\r\n { name: \"backgroundColor\", type: \"color\", label: \"Background\", defaultValue: \"#1a1a2e\" },\r\n { name: \"showAnnotations\", type: \"boolean\", label: \"Show annotations\", defaultValue: false },\r\n { name: \"height\", type: \"size\", label: \"Viewport height\", group: \"Layout\" },\r\n ],\r\n },\r\n];\r\n","/**\r\n * 5.1.4 — Gamification control registrations for NiceViewBuilder.\r\n * Controls: leaderboard, achievement, quest, xp-bar\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const gamificationControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NiceLeaderboard\",\r\n label: \"Leaderboard\",\r\n category: \"Gamification\",\r\n icon: \"trophy\",\r\n defaultProps: { dataSource: [], maxRows: 10 },\r\n propDescriptors: [\r\n { name: \"dataSource\", type: \"json\", label: \"Data source (JSON)\" },\r\n { name: \"maxRows\", type: \"number\", label: \"Max visible rows\", min: 3, max: 100, defaultValue: 10 },\r\n { name: \"showRank\", type: \"boolean\", label: \"Show rank column\", defaultValue: true },\r\n { name: \"showAvatar\", type: \"boolean\", label: \"Show avatar\", defaultValue: true },\r\n { name: \"highlightCurrentUser\", type: \"boolean\", label: \"Highlight current user\", defaultValue: true },\r\n { name: \"scoreField\", type: \"string\", label: \"Score field name\", defaultValue: \"score\" },\r\n { name: \"nameField\", type: \"string\", label: \"Name field name\", defaultValue: \"name\" },\r\n { name: \"variant\", type: \"variant\", label: \"Visual style\", defaultValue: \"default\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceAchievement\",\r\n label: \"Achievement Badge\",\r\n category: \"Gamification\",\r\n icon: \"award\",\r\n defaultProps: { title: \"Achievement\", unlocked: false },\r\n propDescriptors: [\r\n { name: \"title\", type: \"string\", label: \"Achievement title\", defaultValue: \"Achievement\" },\r\n { name: \"description\", type: \"string\", label: \"Description\" },\r\n { name: \"icon\", type: \"string\", label: \"Icon URL\" },\r\n { name: \"unlocked\", type: \"boolean\", label: \"Unlocked\", defaultValue: false },\r\n { name: \"progress\", type: \"number\", label: \"Progress (0-100)\", min: 0, max: 100, defaultValue: 0 },\r\n { name: \"rarity\", type: \"select\", label: \"Rarity\", options: [\r\n { label: \"Common\", value: \"common\" },\r\n { label: \"Rare\", value: \"rare\" },\r\n { label: \"Epic\", value: \"epic\" },\r\n { label: \"Legendary\", value: \"legendary\" },\r\n ], defaultValue: \"common\" },\r\n { name: \"size\", type: \"size\", label: \"Badge size\", group: \"Layout\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceQuest\",\r\n label: \"Quest Tracker\",\r\n category: \"Gamification\",\r\n icon: \"map\",\r\n defaultProps: { title: \"Quest\", steps: [] },\r\n propDescriptors: [\r\n { name: \"title\", type: \"string\", label: \"Quest title\", defaultValue: \"Quest\" },\r\n { name: \"description\", type: \"string\", label: \"Quest description\" },\r\n { name: \"steps\", type: \"json\", label: \"Steps (JSON array of {title, completed})\" },\r\n { name: \"reward\", type: \"string\", label: \"Reward description\" },\r\n { name: \"rewardXP\", type: \"number\", label: \"Reward XP\", min: 0, defaultValue: 100 },\r\n { name: \"showProgress\", type: \"boolean\", label: \"Show progress bar\", defaultValue: true },\r\n { name: \"variant\", type: \"variant\", label: \"Visual style\", defaultValue: \"default\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceXPBar\",\r\n label: \"XP Progress Bar\",\r\n category: \"Gamification\",\r\n icon: \"zap\",\r\n defaultProps: { currentXP: 0, maxXP: 1000, level: 1 },\r\n propDescriptors: [\r\n { name: \"currentXP\", type: \"number\", label: \"Current XP\", min: 0, defaultValue: 0 },\r\n { name: \"maxXP\", type: \"number\", label: \"Max XP (next level)\", min: 1, defaultValue: 1000 },\r\n { name: \"level\", type: \"number\", label: \"Current level\", min: 1, defaultValue: 1 },\r\n { name: \"showLabel\", type: \"boolean\", label: \"Show XP label\", defaultValue: true },\r\n { name: \"showLevel\", type: \"boolean\", label: \"Show level badge\", defaultValue: true },\r\n { name: \"color\", type: \"color\", label: \"Bar color\", defaultValue: \"#4caf50\" },\r\n { name: \"animated\", type: \"boolean\", label: \"Animate changes\", defaultValue: true },\r\n { name: \"height\", type: \"size\", label: \"Bar height\", group: \"Layout\" },\r\n ],\r\n },\r\n];\r\n","/**\r\n * 5.1.5 — Business control registrations for NiceViewBuilder.\r\n * Controls: address, phone, currency, vat, invoice-lines\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const businessControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NiceAddress\",\r\n label: \"Address Editor\",\r\n category: \"Business\",\r\n icon: \"map-pin\",\r\n defaultProps: { country: \"PL\" },\r\n propDescriptors: [\r\n { name: \"street\", type: \"string\", label: \"Street\", group: \"Address\" },\r\n { name: \"city\", type: \"string\", label: \"City\", group: \"Address\" },\r\n { name: \"postalCode\", type: \"string\", label: \"Postal code\", group: \"Address\" },\r\n { name: \"country\", type: \"select\", label: \"Country\", options: [\r\n { label: \"Poland\", value: \"PL\" },\r\n { label: \"Germany\", value: \"DE\" },\r\n { label: \"USA\", value: \"US\" },\r\n { label: \"UK\", value: \"GB\" },\r\n { label: \"France\", value: \"FR\" },\r\n ], defaultValue: \"PL\", group: \"Address\" },\r\n { name: \"showMap\", type: \"boolean\", label: \"Show map preview\", defaultValue: false },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NicePhone\",\r\n label: \"Phone Input\",\r\n category: \"Business\",\r\n icon: \"phone\",\r\n defaultProps: { countryCode: \"+48\" },\r\n propDescriptors: [\r\n { name: \"value\", type: \"string\", label: \"Phone number\" },\r\n { name: \"countryCode\", type: \"string\", label: \"Default country code\", defaultValue: \"+48\" },\r\n { name: \"showFlag\", type: \"boolean\", label: \"Show country flag\", defaultValue: true },\r\n { name: \"format\", type: \"select\", label: \"Format\", options: [\r\n { label: \"International\", value: \"international\" },\r\n { label: \"National\", value: \"national\" },\r\n { label: \"E.164\", value: \"e164\" },\r\n ], defaultValue: \"international\" },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NiceCurrency\",\r\n label: \"Currency Input\",\r\n category: \"Business\",\r\n icon: \"dollar-sign\",\r\n defaultProps: { currency: \"PLN\", decimals: 2 },\r\n propDescriptors: [\r\n { name: \"value\", type: \"number\", label: \"Amount\", defaultValue: 0 },\r\n { name: \"currency\", type: \"select\", label: \"Currency\", options: [\r\n { label: \"PLN\", value: \"PLN\" },\r\n { label: \"EUR\", value: \"EUR\" },\r\n { label: \"USD\", value: \"USD\" },\r\n { label: \"GBP\", value: \"GBP\" },\r\n ], defaultValue: \"PLN\" },\r\n { name: \"decimals\", type: \"number\", label: \"Decimal places\", min: 0, max: 4, defaultValue: 2 },\r\n { name: \"showCurrencySymbol\", type: \"boolean\", label: \"Show symbol\", defaultValue: true },\r\n { name: \"thousandSeparator\", type: \"boolean\", label: \"Thousand separator\", defaultValue: true },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NiceVAT\",\r\n label: \"VAT Input\",\r\n category: \"Business\",\r\n icon: \"percent\",\r\n defaultProps: { rate: 23, country: \"PL\" },\r\n propDescriptors: [\r\n { name: \"netValue\", type: \"number\", label: \"Net value\", defaultValue: 0, group: \"Values\" },\r\n { name: \"rate\", type: \"number\", label: \"VAT rate (%)\", min: 0, max: 100, defaultValue: 23, group: \"Values\" },\r\n { name: \"country\", type: \"select\", label: \"Country\", options: [\r\n { label: \"Poland\", value: \"PL\" },\r\n { label: \"Germany\", value: \"DE\" },\r\n { label: \"France\", value: \"FR\" },\r\n ], defaultValue: \"PL\" },\r\n { name: \"showGross\", type: \"boolean\", label: \"Show gross value\", defaultValue: true },\r\n { name: \"showVatAmount\", type: \"boolean\", label: \"Show VAT amount\", defaultValue: true },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NiceInvoiceLines\",\r\n label: \"Invoice Lines\",\r\n category: \"Business\",\r\n icon: \"file-text\",\r\n defaultProps: { lines: [], currency: \"PLN\" },\r\n propDescriptors: [\r\n { name: \"lines\", type: \"json\", label: \"Invoice lines (JSON)\" },\r\n { name: \"currency\", type: \"select\", label: \"Currency\", options: [\r\n { label: \"PLN\", value: \"PLN\" },\r\n { label: \"EUR\", value: \"EUR\" },\r\n { label: \"USD\", value: \"USD\" },\r\n ], defaultValue: \"PLN\" },\r\n { name: \"showVAT\", type: \"boolean\", label: \"Show VAT column\", defaultValue: true },\r\n { name: \"showDiscount\", type: \"boolean\", label: \"Show discount column\", defaultValue: false },\r\n { name: \"showTotal\", type: \"boolean\", label: \"Show totals row\", defaultValue: true },\r\n { name: \"editable\", type: \"boolean\", label: \"Editable\", defaultValue: true },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n];\r\n","/**\r\n * 5.1.6 — Auth control registrations for NiceViewBuilder.\r\n * Controls: login-form, captcha, 2fa-setup\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const authControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NiceLoginForm\",\r\n label: \"Login Form\",\r\n category: \"Auth\",\r\n icon: \"log-in\",\r\n defaultProps: { showRemember: true, showForgotPassword: true },\r\n propDescriptors: [\r\n { name: \"title\", type: \"string\", label: \"Form title\", defaultValue: \"Sign In\" },\r\n { name: \"showRemember\", type: \"boolean\", label: \"Show 'Remember me'\", defaultValue: true },\r\n { name: \"showForgotPassword\", type: \"boolean\", label: \"Show 'Forgot password'\", defaultValue: true },\r\n { name: \"showRegisterLink\", type: \"boolean\", label: \"Show register link\", defaultValue: false },\r\n { name: \"showLogo\", type: \"boolean\", label: \"Show logo\", defaultValue: true },\r\n { name: \"logoUrl\", type: \"string\", label: \"Logo URL\", group: \"Branding\" },\r\n { name: \"primaryColor\", type: \"color\", label: \"Primary color\", defaultValue: \"#1976d2\", group: \"Branding\" },\r\n { name: \"variant\", type: \"variant\", label: \"Visual style\", defaultValue: \"card\" },\r\n ],\r\n },\r\n {\r\n type: \"NiceCaptcha\",\r\n label: \"Captcha\",\r\n category: \"Auth\",\r\n icon: \"shield\",\r\n defaultProps: { provider: \"recaptcha\", size: \"normal\" },\r\n propDescriptors: [\r\n { name: \"provider\", type: \"select\", label: \"Provider\", options: [\r\n { label: \"reCAPTCHA v2\", value: \"recaptcha\" },\r\n { label: \"reCAPTCHA v3\", value: \"recaptcha-v3\" },\r\n { label: \"hCaptcha\", value: \"hcaptcha\" },\r\n { label: \"Turnstile\", value: \"turnstile\" },\r\n ], defaultValue: \"recaptcha\" },\r\n { name: \"siteKey\", type: \"string\", label: \"Site key\" },\r\n { name: \"size\", type: \"select\", label: \"Size\", options: [\r\n { label: \"Normal\", value: \"normal\" },\r\n { label: \"Compact\", value: \"compact\" },\r\n { label: \"Invisible\", value: \"invisible\" },\r\n ], defaultValue: \"normal\" },\r\n { name: \"theme\", type: \"select\", label: \"Theme\", options: [\r\n { label: \"Light\", value: \"light\" },\r\n { label: \"Dark\", value: \"dark\" },\r\n ], defaultValue: \"light\" },\r\n ],\r\n },\r\n {\r\n type: \"Nice2FASetup\",\r\n label: \"2FA Setup\",\r\n category: \"Auth\",\r\n icon: \"key\",\r\n defaultProps: { method: \"totp\" },\r\n propDescriptors: [\r\n { name: \"method\", type: \"select\", label: \"2FA method\", options: [\r\n { label: \"TOTP (Authenticator)\", value: \"totp\" },\r\n { label: \"SMS\", value: \"sms\" },\r\n { label: \"Email\", value: \"email\" },\r\n ], defaultValue: \"totp\" },\r\n { name: \"issuer\", type: \"string\", label: \"Issuer name\", defaultValue: \"OmniVerk\" },\r\n { name: \"showBackupCodes\", type: \"boolean\", label: \"Show backup codes\", defaultValue: true },\r\n { name: \"showQR\", type: \"boolean\", label: \"Show QR code\", defaultValue: true },\r\n { name: \"codeLength\", type: \"number\", label: \"Code length\", min: 4, max: 8, defaultValue: 6 },\r\n ],\r\n },\r\n];\r\n","/**\r\n * 5.1.7 — Social control registrations for NiceViewBuilder.\r\n * Controls: comments, ratings, wiki\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\n\r\nexport const socialControlRegistry: ControlRegistryEntry[] = [\r\n {\r\n type: \"NiceComments\",\r\n label: \"Comments\",\r\n category: \"Social\",\r\n icon: \"message-circle\",\r\n defaultProps: { threadId: \"\", allowReplies: true },\r\n propDescriptors: [\r\n { name: \"threadId\", type: \"string\", label: \"Thread ID / entity ID\" },\r\n { name: \"allowReplies\", type: \"boolean\", label: \"Allow replies (nested)\", defaultValue: true },\r\n { name: \"maxDepth\", type: \"number\", label: \"Max nesting depth\", min: 1, max: 10, defaultValue: 3 },\r\n { name: \"sortOrder\", type: \"select\", label: \"Default sort\", options: [\r\n { label: \"Newest first\", value: \"newest\" },\r\n { label: \"Oldest first\", value: \"oldest\" },\r\n { label: \"Most liked\", value: \"popular\" },\r\n ], defaultValue: \"newest\" },\r\n { name: \"allowReactions\", type: \"boolean\", label: \"Allow reactions\", defaultValue: true },\r\n { name: \"showAvatar\", type: \"boolean\", label: \"Show avatars\", defaultValue: true },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NiceRatings\",\r\n label: \"Ratings\",\r\n category: \"Social\",\r\n icon: \"star\",\r\n defaultProps: { maxStars: 5, allowHalf: true },\r\n propDescriptors: [\r\n { name: \"value\", type: \"number\", label: \"Current rating\", min: 0, max: 10, step: 0.5, defaultValue: 0 },\r\n { name: \"maxStars\", type: \"number\", label: \"Maximum stars\", min: 3, max: 10, defaultValue: 5 },\r\n { name: \"allowHalf\", type: \"boolean\", label: \"Allow half stars\", defaultValue: true },\r\n { name: \"showCount\", type: \"boolean\", label: \"Show vote count\", defaultValue: true },\r\n { name: \"showAverage\", type: \"boolean\", label: \"Show average\", defaultValue: true },\r\n { name: \"color\", type: \"color\", label: \"Star color\", defaultValue: \"#ffc107\" },\r\n { name: \"size\", type: \"size\", label: \"Star size\", group: \"Layout\" },\r\n { name: \"readOnly\", type: \"boolean\", label: \"Read only\", defaultValue: false },\r\n ],\r\n },\r\n {\r\n type: \"NiceWiki\",\r\n label: \"Wiki Editor\",\r\n category: \"Social\",\r\n icon: \"book\",\r\n defaultProps: { content: \"\", showTOC: true },\r\n propDescriptors: [\r\n { name: \"content\", type: \"string\", label: \"Initial content (Markdown)\" },\r\n { name: \"showTOC\", type: \"boolean\", label: \"Show table of contents\", defaultValue: true },\r\n { name: \"showHistory\", type: \"boolean\", label: \"Show version history\", defaultValue: true },\r\n { name: \"allowEdit\", type: \"boolean\", label: \"Allow editing\", defaultValue: true },\r\n { name: \"showToolbar\", type: \"boolean\", label: \"Show Markdown toolbar\", defaultValue: true },\r\n { name: \"previewMode\", type: \"select\", label: \"Preview mode\", options: [\r\n { label: \"Side by side\", value: \"split\" },\r\n { label: \"Tab switch\", value: \"tabs\" },\r\n { label: \"Live preview\", value: \"live\" },\r\n ], defaultValue: \"split\" },\r\n { name: \"maxLength\", type: \"number\", label: \"Max content length\", min: 0, defaultValue: 0 },\r\n ],\r\n },\r\n];\r\n","/**\r\n * Combined control registry — all @nice2dev/* control registrations in one place.\r\n * Use `allControlRegistries` to register everything with NiceViewBuilder.\r\n */\r\nimport type { ControlRegistryEntry } from \"../types\";\r\nimport { audioControlRegistry } from \"./audioControls\";\r\nimport { graphicControlRegistry } from \"./graphicControls\";\r\nimport { threeControlRegistry } from \"./threeControls\";\r\nimport { gamificationControlRegistry } from \"./gamificationControls\";\r\nimport { businessControlRegistry } from \"./businessControls\";\r\nimport { authControlRegistry } from \"./authControls\";\r\nimport { socialControlRegistry } from \"./socialControls\";\r\n\r\nexport { audioControlRegistry } from \"./audioControls\";\r\nexport { graphicControlRegistry } from \"./graphicControls\";\r\nexport { threeControlRegistry } from \"./threeControls\";\r\nexport { gamificationControlRegistry } from \"./gamificationControls\";\r\nexport { businessControlRegistry } from \"./businessControls\";\r\nexport { authControlRegistry } from \"./authControls\";\r\nexport { socialControlRegistry } from \"./socialControls\";\r\n\r\n/** All control registries combined into a single flat array. */\r\nexport const allControlRegistries: ControlRegistryEntry[] = [\r\n ...audioControlRegistry,\r\n ...graphicControlRegistry,\r\n ...threeControlRegistry,\r\n ...gamificationControlRegistry,\r\n ...businessControlRegistry,\r\n ...authControlRegistry,\r\n ...socialControlRegistry,\r\n];\r\n"],"names":["ErpDataAdapter","config","path","init","f","headers","token","res","req","params","_a","_b","qs","id","item","ids","createSignalRAdapter","signalR","status","listeners","setStatus","cb","connection","event","handler","method","args","ErpAuthAdapter","body","result","ErpFileAdapter","h","file","folder","form","files","blob","ErpExportAdapter","downloadUrl","filename","url","a","audioControlRegistry","graphicControlRegistry","threeControlRegistry","gamificationControlRegistry","businessControlRegistry","authControlRegistry","socialControlRegistry","allControlRegistries"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nice2dev/erp-adapter
|
|
3
|
+
* Adapter layer connecting OmniVerk .NET backend with @nice2dev/* React components.
|
|
4
|
+
*/
|
|
5
|
+
export type { ErpResponse, ErpFilter, ErpSort, ErpDataRequest, ErpUser, ErpLoginRequest, ErpLoginResponse, ErpFileInfo, ErpExportFormat, ErpExportRequest, ErpExportResponse, ErpSignalRConfig, ControlRegistryEntry, PropDescriptor, PropType, } from './types';
|
|
6
|
+
export { ErpDataAdapter } from './ErpDataAdapter';
|
|
7
|
+
export type { ErpDataAdapterConfig } from './ErpDataAdapter';
|
|
8
|
+
export { createSignalRAdapter } from './ErpSignalRAdapter';
|
|
9
|
+
export type { ErpSignalRAdapter, SignalRStatus } from './ErpSignalRAdapter';
|
|
10
|
+
export { ErpAuthAdapter } from './ErpAuthAdapter';
|
|
11
|
+
export type { ErpAuthAdapterConfig } from './ErpAuthAdapter';
|
|
12
|
+
export { ErpFileAdapter } from './ErpFileAdapter';
|
|
13
|
+
export type { ErpFileAdapterConfig } from './ErpFileAdapter';
|
|
14
|
+
export { ErpExportAdapter } from './ErpExportAdapter';
|
|
15
|
+
export type { ErpExportAdapterConfig } from './ErpExportAdapter';
|
|
16
|
+
export { allControlRegistries, audioControlRegistry, graphicControlRegistry, threeControlRegistry, gamificationControlRegistry, businessControlRegistry, authControlRegistry, socialControlRegistry, } from './registries';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACR,WAAW,EACX,SAAS,EACT,OAAO,EACP,cAAc,EACd,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,QAAQ,GACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,GACxB,MAAM,cAAc,CAAC"}
|