@nestjs-dash/core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/dist/actions/handlers.d.ts +16 -0
- package/dist/actions/handlers.d.ts.map +1 -0
- package/dist/actions/handlers.js +12 -0
- package/dist/actions/handlers.js.map +1 -0
- package/dist/actions/index.d.ts +101 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +232 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/charts/index.d.ts +65 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +143 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/forms/index.d.ts +146 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +291 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/json-fields.d.ts +7 -0
- package/dist/forms/json-fields.d.ts.map +1 -0
- package/dist/forms/json-fields.js +124 -0
- package/dist/forms/json-fields.js.map +1 -0
- package/dist/forms/validation.d.ts +10 -0
- package/dist/forms/validation.d.ts.map +1 -0
- package/dist/forms/validation.js +42 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/index.d.ts +353 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +588 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +54 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +126 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/tables/index.d.ts +117 -0
- package/dist/tables/index.d.ts.map +1 -0
- package/dist/tables/index.js +283 -0
- package/dist/tables/index.js.map +1 -0
- package/dist/tables/list-query-config.d.ts +6 -0
- package/dist/tables/list-query-config.d.ts.map +1 -0
- package/dist/tables/list-query-config.js +86 -0
- package/dist/tables/list-query-config.js.map +1 -0
- package/dist/theme/index.d.ts +44 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +2 -0
- package/dist/theme/index.js.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# @nestjs-dash/core
|
|
2
|
+
|
|
3
|
+
Filament-style fluent builders and the domain model at the heart of nestjs-dash: `Resource`, `Page`, `Panel`, `RelationManager`, and the `Table`/`Schema` (form) builders, plus field/column/action/chart builders. This package depends only on `@nestjs-dash/adapter` and `@nestjs-dash/support` — no ORM, no React, no `@nestjs/*` — so the same `Resource` subclass works no matter which adapter or host you wire it up with.
|
|
4
|
+
|
|
5
|
+
The NestJS host module that actually serves a panel lives in [`@nestjs-dash/nestjs`](https://github.com/nestjs-dash/nestjs-dash); ORM adapters live in their own packages (`@nestjs-dash/typeorm`, `@nestjs-dash/mikroorm`, `@nestjs-dash/prisma`, `@nestjs-dash/in-memory`).
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @nestjs-dash/core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Example resource
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { Resource, TextColumn, TextInput, type Schema, type Table } from '@nestjs-dash/core';
|
|
17
|
+
|
|
18
|
+
export class UserResource extends Resource {
|
|
19
|
+
static override slug = 'users';
|
|
20
|
+
static override label = 'User';
|
|
21
|
+
|
|
22
|
+
static override table(table: Table) {
|
|
23
|
+
return table.columns([
|
|
24
|
+
TextColumn.make('id').sortable(),
|
|
25
|
+
TextColumn.make('email').searchable().sortable(),
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static override form(form: Schema) {
|
|
30
|
+
return form.components([TextInput.make('email').email().required()]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Field builders
|
|
36
|
+
|
|
37
|
+
| Field | Notes |
|
|
38
|
+
|-------|-------|
|
|
39
|
+
| `TextInput` | text/email/password, `.icon()`/`.prefix()`/`.suffix()` |
|
|
40
|
+
| `Textarea` | |
|
|
41
|
+
| `Select` | static `.options()` or `.relationship()` (BelongsTo, loaded at runtime) |
|
|
42
|
+
| `Radio` | same `.options()` shape as `Select`, rendered as a radio group |
|
|
43
|
+
| `Checkbox` / `Toggle` | |
|
|
44
|
+
| `DatePicker` / `DateTimePicker` | native `date` / `datetime-local` inputs |
|
|
45
|
+
| `ColorPicker` | native `color` input |
|
|
46
|
+
| `CodeEditor` | monospace textarea with a `.language()` caption (no syntax highlighting) |
|
|
47
|
+
| `TagsInput` | chip input, submits a JSON array |
|
|
48
|
+
| `RichEditor` | markdown-toolbar-over-textarea — not a WYSIWYG editor |
|
|
49
|
+
| `ImageUpload` / `FileUpload` | share `disk()`/`directory()`/`visibility()`/`acceptedFileTypes()`/`maxSize()`; `ImageUpload` adds `shape()`/`croppable()`/`aspectRatio()`/`collection()` |
|
|
50
|
+
| `Repeater` | repeatable field group (`.schema([...])` of `TextInput`/`Textarea`/`Select`/`Checkbox`/`Toggle`), with `.minItems()`/`.maxItems()` |
|
|
51
|
+
|
|
52
|
+
Inputs accept an icon and text prefix/suffix:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
TextInput.make('price').icon('dollar-sign').prefix('$').suffix('USD');
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Actions
|
|
59
|
+
|
|
60
|
+
`Action` and its `EditAction`/`DeleteAction`/`BulkAction`/… subclasses support an icon position, a badge, a size, and an explicit variant — `.color()` maps to a Button variant (`primary`→`default`, `danger`→`destructive`, `gray`→`outline`, `success`/`warning`→matching variants):
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
Action.make('promote').icon('star').iconPosition('end').badge(3, 'red').color('warning');
|
|
64
|
+
Action.make('refresh').icon('refresh-cw').iconOnly(); // tooltip'd icon-only button
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Charts
|
|
68
|
+
|
|
69
|
+
`BarChart`/`LineChart`/`PieChart` builders produce a JSON-serializable `ChartSpec` (from `@nestjs-dash/support`) that `@nestjs-dash/design-system`'s `ChartWidget` renders client-side.
|
|
70
|
+
|
|
71
|
+
## Column-capability precedence
|
|
72
|
+
|
|
73
|
+
`.sortable()`/`.searchable()` on a `table()` column can conflict with an entity's `@Sortable()`/`@Searchable()`/`@Filterable()` decorator or the adapter's own default — see [`@nestjs-dash/adapter`](https://github.com/nestjs-dash/nestjs-dash) for the resolution rule (Resource Builder > Entity Decorator > Adapter Default).
|
|
74
|
+
|
|
75
|
+
## Part of nestjs-dash
|
|
76
|
+
|
|
77
|
+
This package is one piece of [nestjs-dash](https://github.com/nestjs-dash/nestjs-dash), a NestJS-native admin framework. Wire a `Resource` up with `@nestjs-dash/nestjs` and an ORM adapter to actually serve a panel.
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
|
|
81
|
+
MIT
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ResourceAdapter } from '@nestjs-dash/adapter';
|
|
2
|
+
export interface ActionHandlerContext {
|
|
3
|
+
resourceSlug: string;
|
|
4
|
+
record?: Record<string, unknown>;
|
|
5
|
+
records?: Record<string, unknown>[];
|
|
6
|
+
ids?: string[];
|
|
7
|
+
values: Record<string, unknown>;
|
|
8
|
+
adapter: ResourceAdapter;
|
|
9
|
+
}
|
|
10
|
+
export interface ActionHandlerResult {
|
|
11
|
+
message?: string;
|
|
12
|
+
}
|
|
13
|
+
export type ActionHandler = (ctx: ActionHandlerContext) => Promise<ActionHandlerResult | void> | ActionHandlerResult | void;
|
|
14
|
+
export declare function registerActionHandler(handler: ActionHandler): string;
|
|
15
|
+
export declare function resolveActionHandler(key: string): ActionHandler | undefined;
|
|
16
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/actions/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,WAAW,oBAAoB;IAEnC,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAEpC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAEf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAElC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,oBAAoB,KACtB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAAC;AAUtE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAKpE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE3E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const handlerRegistry = new Map();
|
|
2
|
+
let sequence = 0;
|
|
3
|
+
export function registerActionHandler(handler) {
|
|
4
|
+
sequence += 1;
|
|
5
|
+
const key = `ah-${sequence}`;
|
|
6
|
+
handlerRegistry.set(key, handler);
|
|
7
|
+
return key;
|
|
8
|
+
}
|
|
9
|
+
export function resolveActionHandler(key) {
|
|
10
|
+
return handlerRegistry.get(key);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/actions/handlers.ts"],"names":[],"mappings":"AAgCA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;AACzD,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,MAAM,UAAU,qBAAqB,CAAC,OAAsB;IAC1D,QAAQ,IAAI,CAAC,CAAC;IACd,MAAM,GAAG,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC7B,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { BadgeColor, SchemaNode } from '@nestjs-dash/support';
|
|
2
|
+
import { ComponentBuilder } from '../schemas/index.js';
|
|
3
|
+
import { type ActionHandler } from './handlers.js';
|
|
4
|
+
export type ActionColor = 'primary' | 'danger' | 'gray' | 'success' | 'warning';
|
|
5
|
+
export type ActionButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link' | 'success' | 'warning';
|
|
6
|
+
export type ActionButtonSize = 'xs' | 'sm' | 'default' | 'lg';
|
|
7
|
+
export declare const ACTION_COLOR_VARIANT: Record<ActionColor, ActionButtonVariant>;
|
|
8
|
+
export { resolveActionHandler } from './handlers.js';
|
|
9
|
+
export type { ActionHandler, ActionHandlerContext, ActionHandlerResult } from './handlers.js';
|
|
10
|
+
export declare class Dialog extends ComponentBuilder {
|
|
11
|
+
readonly kind: 'dialog';
|
|
12
|
+
static make(): Dialog;
|
|
13
|
+
heading(value: string): this;
|
|
14
|
+
description(value: string): this;
|
|
15
|
+
submitLabel(value: string): this;
|
|
16
|
+
cancelLabel(value: string): this;
|
|
17
|
+
form(components: ComponentBuilder[]): this;
|
|
18
|
+
}
|
|
19
|
+
export declare class Action extends ComponentBuilder {
|
|
20
|
+
readonly kind: SchemaNode['kind'];
|
|
21
|
+
static make(name: string): Action;
|
|
22
|
+
label(value: string): this;
|
|
23
|
+
color(value: ActionColor): this;
|
|
24
|
+
requiresConfirmation(value?: boolean): this;
|
|
25
|
+
icon(value: string): this;
|
|
26
|
+
iconPosition(value: 'start' | 'end'): this;
|
|
27
|
+
iconOnly(value?: boolean): this;
|
|
28
|
+
badge(value: string | number, color?: BadgeColor): this;
|
|
29
|
+
size(value: ActionButtonSize): this;
|
|
30
|
+
variant(value: ActionButtonVariant): this;
|
|
31
|
+
dialog(dialog: Dialog): this;
|
|
32
|
+
handler(fn: ActionHandler): this;
|
|
33
|
+
modalHeading(value: string): this;
|
|
34
|
+
modalDescription(value: string): this;
|
|
35
|
+
modalSubmitActionLabel(value: string): this;
|
|
36
|
+
modalCancelActionLabel(value: string): this;
|
|
37
|
+
private patchDialog;
|
|
38
|
+
}
|
|
39
|
+
export declare class EditAction extends Action {
|
|
40
|
+
readonly kind: 'edit-action';
|
|
41
|
+
static make(name?: string): EditAction;
|
|
42
|
+
}
|
|
43
|
+
export declare class DeleteAction extends Action {
|
|
44
|
+
readonly kind: 'delete-action';
|
|
45
|
+
static make(name?: string): DeleteAction;
|
|
46
|
+
}
|
|
47
|
+
export declare class RestoreAction extends Action {
|
|
48
|
+
readonly kind: 'restore-action';
|
|
49
|
+
static make(name?: string): RestoreAction;
|
|
50
|
+
}
|
|
51
|
+
export declare class CreateAction extends Action {
|
|
52
|
+
readonly kind: 'create-action';
|
|
53
|
+
static make(name?: string): CreateAction;
|
|
54
|
+
}
|
|
55
|
+
export declare class ViewAction extends Action {
|
|
56
|
+
readonly kind: 'view-action';
|
|
57
|
+
static make(name?: string): ViewAction;
|
|
58
|
+
}
|
|
59
|
+
export declare class ListAction extends Action {
|
|
60
|
+
readonly kind: 'action';
|
|
61
|
+
static make(name?: string): ListAction;
|
|
62
|
+
}
|
|
63
|
+
export declare class BulkAction extends Action {
|
|
64
|
+
readonly kind: 'bulk-action';
|
|
65
|
+
static make(name: string): BulkAction;
|
|
66
|
+
}
|
|
67
|
+
export declare class BulkDeleteAction extends Action {
|
|
68
|
+
readonly kind: 'bulk-delete-action';
|
|
69
|
+
static make(name?: string): BulkDeleteAction;
|
|
70
|
+
}
|
|
71
|
+
export declare class AssociateAction extends Action {
|
|
72
|
+
readonly kind: 'associate-action';
|
|
73
|
+
static make(name?: string): AssociateAction;
|
|
74
|
+
}
|
|
75
|
+
export declare class DissociateAction extends Action {
|
|
76
|
+
readonly kind: 'dissociate-action';
|
|
77
|
+
static make(name?: string): DissociateAction;
|
|
78
|
+
}
|
|
79
|
+
export declare class AttachAction extends Action {
|
|
80
|
+
readonly kind: 'attach-action';
|
|
81
|
+
static make(name?: string): AttachAction;
|
|
82
|
+
}
|
|
83
|
+
export declare class DetachAction extends Action {
|
|
84
|
+
readonly kind: 'detach-action';
|
|
85
|
+
static make(name?: string): DetachAction;
|
|
86
|
+
}
|
|
87
|
+
export declare class BulkDissociateAction extends Action {
|
|
88
|
+
readonly kind: 'bulk-dissociate-action';
|
|
89
|
+
static make(name?: string): BulkDissociateAction;
|
|
90
|
+
}
|
|
91
|
+
export declare class BulkDetachAction extends Action {
|
|
92
|
+
readonly kind: 'bulk-detach-action';
|
|
93
|
+
static make(name?: string): BulkDetachAction;
|
|
94
|
+
}
|
|
95
|
+
export declare function resolveActionDialog(action: SchemaNode, defaults?: {
|
|
96
|
+
heading?: string;
|
|
97
|
+
description?: string;
|
|
98
|
+
submitLabel?: string;
|
|
99
|
+
cancelLabel?: string;
|
|
100
|
+
}): SchemaNode | null;
|
|
101
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { ComponentBuilder } from '../schemas/index.js';
|
|
2
|
+
import { registerActionHandler } from './handlers.js';
|
|
3
|
+
export const ACTION_COLOR_VARIANT = {
|
|
4
|
+
primary: 'default',
|
|
5
|
+
danger: 'destructive',
|
|
6
|
+
gray: 'outline',
|
|
7
|
+
success: 'success',
|
|
8
|
+
warning: 'warning',
|
|
9
|
+
};
|
|
10
|
+
export { resolveActionHandler } from './handlers.js';
|
|
11
|
+
export class Dialog extends ComponentBuilder {
|
|
12
|
+
kind = 'dialog';
|
|
13
|
+
static make() {
|
|
14
|
+
return new Dialog();
|
|
15
|
+
}
|
|
16
|
+
heading(value) {
|
|
17
|
+
return this.setProp('heading', value);
|
|
18
|
+
}
|
|
19
|
+
description(value) {
|
|
20
|
+
return this.setProp('description', value);
|
|
21
|
+
}
|
|
22
|
+
submitLabel(value) {
|
|
23
|
+
return this.setProp('submitLabel', value);
|
|
24
|
+
}
|
|
25
|
+
cancelLabel(value) {
|
|
26
|
+
return this.setProp('cancelLabel', value);
|
|
27
|
+
}
|
|
28
|
+
form(components) {
|
|
29
|
+
this.children = components.map((component) => component.toSchema());
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class Action extends ComponentBuilder {
|
|
34
|
+
kind = 'action';
|
|
35
|
+
static make(name) {
|
|
36
|
+
return new Action().setProp('name', name).setProp('label', name);
|
|
37
|
+
}
|
|
38
|
+
label(value) {
|
|
39
|
+
return this.setProp('label', value);
|
|
40
|
+
}
|
|
41
|
+
color(value) {
|
|
42
|
+
return this.setProp('color', value);
|
|
43
|
+
}
|
|
44
|
+
requiresConfirmation(value = true) {
|
|
45
|
+
return this.setProp('requiresConfirmation', value);
|
|
46
|
+
}
|
|
47
|
+
icon(value) {
|
|
48
|
+
return this.setProp('icon', value);
|
|
49
|
+
}
|
|
50
|
+
iconPosition(value) {
|
|
51
|
+
return this.setProp('iconPosition', value);
|
|
52
|
+
}
|
|
53
|
+
iconOnly(value = true) {
|
|
54
|
+
return this.setProp('iconOnly', value);
|
|
55
|
+
}
|
|
56
|
+
badge(value, color) {
|
|
57
|
+
return this.setProp('badge', { text: String(value), color });
|
|
58
|
+
}
|
|
59
|
+
size(value) {
|
|
60
|
+
return this.setProp('size', value);
|
|
61
|
+
}
|
|
62
|
+
variant(value) {
|
|
63
|
+
return this.setProp('variant', value);
|
|
64
|
+
}
|
|
65
|
+
dialog(dialog) {
|
|
66
|
+
return this.setProp('dialog', dialog.toSchema()).requiresConfirmation(true);
|
|
67
|
+
}
|
|
68
|
+
handler(fn) {
|
|
69
|
+
return this.setProp('handlerKey', registerActionHandler(fn));
|
|
70
|
+
}
|
|
71
|
+
modalHeading(value) {
|
|
72
|
+
return this.patchDialog({ heading: value });
|
|
73
|
+
}
|
|
74
|
+
modalDescription(value) {
|
|
75
|
+
return this.patchDialog({ description: value });
|
|
76
|
+
}
|
|
77
|
+
modalSubmitActionLabel(value) {
|
|
78
|
+
return this.patchDialog({ submitLabel: value });
|
|
79
|
+
}
|
|
80
|
+
modalCancelActionLabel(value) {
|
|
81
|
+
return this.patchDialog({ cancelLabel: value });
|
|
82
|
+
}
|
|
83
|
+
patchDialog(partial) {
|
|
84
|
+
const existing = this.props.dialog ?? {
|
|
85
|
+
kind: 'dialog',
|
|
86
|
+
props: {},
|
|
87
|
+
};
|
|
88
|
+
const next = {
|
|
89
|
+
kind: 'dialog',
|
|
90
|
+
props: { ...existing.props, ...partial },
|
|
91
|
+
children: existing.children,
|
|
92
|
+
};
|
|
93
|
+
return this.setProp('dialog', next).requiresConfirmation(true);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export class EditAction extends Action {
|
|
97
|
+
kind = 'edit-action';
|
|
98
|
+
static make(name = 'edit') {
|
|
99
|
+
return new EditAction().setProp('name', name).setProp('label', 'Edit');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export class DeleteAction extends Action {
|
|
103
|
+
kind = 'delete-action';
|
|
104
|
+
static make(name = 'delete') {
|
|
105
|
+
return new DeleteAction()
|
|
106
|
+
.setProp('name', name)
|
|
107
|
+
.setProp('label', 'Delete')
|
|
108
|
+
.color('danger')
|
|
109
|
+
.requiresConfirmation();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export class RestoreAction extends Action {
|
|
113
|
+
kind = 'restore-action';
|
|
114
|
+
static make(name = 'restore') {
|
|
115
|
+
return new RestoreAction().setProp('name', name).setProp('label', 'Restore').color('success');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export class CreateAction extends Action {
|
|
119
|
+
kind = 'create-action';
|
|
120
|
+
static make(name = 'create') {
|
|
121
|
+
return new CreateAction().setProp('name', name).setProp('label', 'Create');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export class ViewAction extends Action {
|
|
125
|
+
kind = 'view-action';
|
|
126
|
+
static make(name = 'view') {
|
|
127
|
+
return new ViewAction().setProp('name', name).setProp('label', 'View');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export class ListAction extends Action {
|
|
131
|
+
kind = 'action';
|
|
132
|
+
static make(name = 'list') {
|
|
133
|
+
return new ListAction().setProp('name', name).setProp('label', 'List');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export class BulkAction extends Action {
|
|
137
|
+
kind = 'bulk-action';
|
|
138
|
+
static make(name) {
|
|
139
|
+
return new BulkAction().setProp('name', name).setProp('label', name);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export class BulkDeleteAction extends Action {
|
|
143
|
+
kind = 'bulk-delete-action';
|
|
144
|
+
static make(name = 'bulk-delete') {
|
|
145
|
+
return new BulkDeleteAction()
|
|
146
|
+
.setProp('name', name)
|
|
147
|
+
.setProp('label', 'Delete selected')
|
|
148
|
+
.color('danger')
|
|
149
|
+
.requiresConfirmation();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export class AssociateAction extends Action {
|
|
153
|
+
kind = 'associate-action';
|
|
154
|
+
static make(name = 'associate') {
|
|
155
|
+
return new AssociateAction().setProp('name', name).setProp('label', 'Associate');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export class DissociateAction extends Action {
|
|
159
|
+
kind = 'dissociate-action';
|
|
160
|
+
static make(name = 'dissociate') {
|
|
161
|
+
return new DissociateAction()
|
|
162
|
+
.setProp('name', name)
|
|
163
|
+
.setProp('label', 'Dissociate')
|
|
164
|
+
.color('gray')
|
|
165
|
+
.requiresConfirmation();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export class AttachAction extends Action {
|
|
169
|
+
kind = 'attach-action';
|
|
170
|
+
static make(name = 'attach') {
|
|
171
|
+
return new AttachAction().setProp('name', name).setProp('label', 'Attach');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
export class DetachAction extends Action {
|
|
175
|
+
kind = 'detach-action';
|
|
176
|
+
static make(name = 'detach') {
|
|
177
|
+
return new DetachAction()
|
|
178
|
+
.setProp('name', name)
|
|
179
|
+
.setProp('label', 'Detach')
|
|
180
|
+
.color('gray')
|
|
181
|
+
.requiresConfirmation();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
export class BulkDissociateAction extends Action {
|
|
185
|
+
kind = 'bulk-dissociate-action';
|
|
186
|
+
static make(name = 'bulk-dissociate') {
|
|
187
|
+
return new BulkDissociateAction()
|
|
188
|
+
.setProp('name', name)
|
|
189
|
+
.setProp('label', 'Dissociate selected')
|
|
190
|
+
.color('gray')
|
|
191
|
+
.requiresConfirmation();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export class BulkDetachAction extends Action {
|
|
195
|
+
kind = 'bulk-detach-action';
|
|
196
|
+
static make(name = 'bulk-detach') {
|
|
197
|
+
return new BulkDetachAction()
|
|
198
|
+
.setProp('name', name)
|
|
199
|
+
.setProp('label', 'Detach selected')
|
|
200
|
+
.color('gray')
|
|
201
|
+
.requiresConfirmation();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
export function resolveActionDialog(action, defaults = {}) {
|
|
205
|
+
const explicit = action.props.dialog;
|
|
206
|
+
if (explicit?.kind === 'dialog') {
|
|
207
|
+
return {
|
|
208
|
+
kind: 'dialog',
|
|
209
|
+
props: {
|
|
210
|
+
heading: defaults.heading ?? 'Confirm',
|
|
211
|
+
description: defaults.description ?? '',
|
|
212
|
+
submitLabel: defaults.submitLabel ?? 'Confirm',
|
|
213
|
+
cancelLabel: defaults.cancelLabel ?? 'Cancel',
|
|
214
|
+
...explicit.props,
|
|
215
|
+
},
|
|
216
|
+
children: explicit.children,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (!action.props.requiresConfirmation) {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
kind: 'dialog',
|
|
224
|
+
props: {
|
|
225
|
+
heading: defaults.heading ?? 'Confirm',
|
|
226
|
+
description: defaults.description ?? 'Are you sure you want to continue?',
|
|
227
|
+
submitLabel: defaults.submitLabel ?? String(action.props.label ?? 'Confirm'),
|
|
228
|
+
cancelLabel: defaults.cancelLabel ?? 'Cancel',
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAsB,MAAM,eAAe,CAAC;AAiB1E,MAAM,CAAC,MAAM,oBAAoB,GAA6C;IAC5E,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD,MAAM,OAAO,MAAO,SAAQ,gBAAgB;IACjC,IAAI,GAAG,QAAiB,CAAC;IAElC,MAAM,CAAC,IAAI;QACT,OAAO,IAAI,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,UAA8B;QACjC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,MAAO,SAAQ,gBAAgB;IACjC,IAAI,GAAuB,QAAQ,CAAC;IAE7C,MAAM,CAAC,IAAI,CAAC,IAAY;QACtB,OAAO,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,KAAkB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,oBAAoB,CAAC,KAAK,GAAG,IAAI;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAGD,YAAY,CAAC,KAAsB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAGD,QAAQ,CAAC,KAAK,GAAG,IAAI;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAGD,KAAK,CAAC,KAAsB,EAAE,KAAkB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAGD,IAAI,CAAC,KAAuB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAGD,OAAO,CAAC,KAA0B;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAGD,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAOD,OAAO,CAAC,EAAiB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,sBAAsB,CAAC,KAAa;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,sBAAsB,CAAC,KAAa;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAEO,WAAW,CAAC,OAA+B;QACjD,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,MAAiC,IAAI;YAChE,IAAI,EAAE,QAAiB;YACvB,KAAK,EAAE,EAAE;SACV,CAAC;QACF,MAAM,IAAI,GAAe;YACvB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;YACxC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,MAAM;IAClB,IAAI,GAAG,aAAsB,CAAC;IAEhD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,MAAM;QAChC,OAAO,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpB,IAAI,GAAG,eAAwB,CAAC;IAElD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,QAAQ;QAClC,OAAO,IAAI,YAAY,EAAE;aACtB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC1B,KAAK,CAAC,QAAQ,CAAC;aACf,oBAAoB,EAAE,CAAC;IAC5B,CAAC;CACF;AAOD,MAAM,OAAO,aAAc,SAAQ,MAAM;IACrB,IAAI,GAAG,gBAAyB,CAAC;IAEnD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,SAAS;QACnC,OAAO,IAAI,aAAa,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChG,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpB,IAAI,GAAG,eAAwB,CAAC;IAElD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,QAAQ;QAClC,OAAO,IAAI,YAAY,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,MAAM;IAClB,IAAI,GAAG,aAAsB,CAAC;IAEhD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,MAAM;QAChC,OAAO,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;CACF;AAGD,MAAM,OAAO,UAAW,SAAQ,MAAM;IAClB,IAAI,GAAG,QAAiB,CAAC;IAE3C,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,MAAM;QAChC,OAAO,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,MAAM;IAClB,IAAI,GAAG,aAAsB,CAAC;IAEhD,MAAM,CAAU,IAAI,CAAC,IAAY;QAC/B,OAAO,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,MAAM;IACxB,IAAI,GAAG,oBAA6B,CAAC;IAEvD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,aAAa;QACvC,OAAO,IAAI,gBAAgB,EAAE;aAC1B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC;aACnC,KAAK,CAAC,QAAQ,CAAC;aACf,oBAAoB,EAAE,CAAC;IAC5B,CAAC;CACF;AAGD,MAAM,OAAO,eAAgB,SAAQ,MAAM;IACvB,IAAI,GAAG,kBAA2B,CAAC;IAErD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,WAAW;QACrC,OAAO,IAAI,eAAe,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnF,CAAC;CACF;AAGD,MAAM,OAAO,gBAAiB,SAAQ,MAAM;IACxB,IAAI,GAAG,mBAA4B,CAAC;IAEtD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,YAAY;QACtC,OAAO,IAAI,gBAAgB,EAAE;aAC1B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;aAC9B,KAAK,CAAC,MAAM,CAAC;aACb,oBAAoB,EAAE,CAAC;IAC5B,CAAC;CACF;AAGD,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpB,IAAI,GAAG,eAAwB,CAAC;IAElD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,QAAQ;QAClC,OAAO,IAAI,YAAY,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;CACF;AAGD,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpB,IAAI,GAAG,eAAwB,CAAC;IAElD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,QAAQ;QAClC,OAAO,IAAI,YAAY,EAAE;aACtB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC1B,KAAK,CAAC,MAAM,CAAC;aACb,oBAAoB,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,MAAM;IAC5B,IAAI,GAAG,wBAAiC,CAAC;IAE3D,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,iBAAiB;QAC3C,OAAO,IAAI,oBAAoB,EAAE;aAC9B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC;aACvC,KAAK,CAAC,MAAM,CAAC;aACb,oBAAoB,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,MAAM;IACxB,IAAI,GAAG,oBAA6B,CAAC;IAEvD,MAAM,CAAU,IAAI,CAAC,IAAI,GAAG,aAAa;QACvC,OAAO,IAAI,gBAAgB,EAAE;aAC1B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC;aACnC,KAAK,CAAC,MAAM,CAAC;aACb,oBAAoB,EAAE,CAAC;IAC5B,CAAC;CACF;AAGD,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,QAAQ,GAKJ,EAAE;IAEN,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAgC,CAAC;IAC/D,IAAI,QAAQ,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS;gBACtC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;gBACvC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;gBAC9C,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ;gBAC7C,GAAG,QAAQ,CAAC,KAAK;aAClB;YACD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS;YACtC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,oCAAoC;YACzE,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;YAC5E,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ;SAC9C;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ChartKind, ChartRow, ChartSeriesSpec, ChartSpec } from '@nestjs-dash/support';
|
|
2
|
+
import type { AdminPolicyContext, DashboardWidget, PageRenderContext } from '../index.js';
|
|
3
|
+
export type { ChartKind, ChartRow, ChartSeriesSpec, ChartSpec } from '@nestjs-dash/support';
|
|
4
|
+
type DataInput = ChartRow[] | ((ctx: PageRenderContext) => ChartRow[] | Promise<ChartRow[]>);
|
|
5
|
+
type AccessPredicate = (ctx: AdminPolicyContext) => boolean | Promise<boolean>;
|
|
6
|
+
declare abstract class ChartWidgetBuilder implements DashboardWidget {
|
|
7
|
+
private readonly kind;
|
|
8
|
+
slot: 'main' | 'side';
|
|
9
|
+
private categoryKeyValue;
|
|
10
|
+
private seriesValue;
|
|
11
|
+
private dataInput;
|
|
12
|
+
private titleValue?;
|
|
13
|
+
private descriptionValue?;
|
|
14
|
+
private heightValue;
|
|
15
|
+
private legendValue?;
|
|
16
|
+
private emptyLabelValue?;
|
|
17
|
+
private accessPredicate?;
|
|
18
|
+
protected constructor(kind: ChartKind);
|
|
19
|
+
side(): this;
|
|
20
|
+
title(value: string): this;
|
|
21
|
+
description(value: string): this;
|
|
22
|
+
height(value: number): this;
|
|
23
|
+
legend(value?: boolean): this;
|
|
24
|
+
emptyLabel(value: string): this;
|
|
25
|
+
category(key: string): this;
|
|
26
|
+
series(series: ChartSeriesSpec[]): this;
|
|
27
|
+
data(input: DataInput): this;
|
|
28
|
+
visibleWhen(predicate: AccessPredicate): this;
|
|
29
|
+
canAccess(ctx: AdminPolicyContext): Promise<boolean>;
|
|
30
|
+
chart(ctx: PageRenderContext): Promise<ChartSpec>;
|
|
31
|
+
}
|
|
32
|
+
export declare class BarChart extends ChartWidgetBuilder {
|
|
33
|
+
protected constructor();
|
|
34
|
+
static make(): BarChart;
|
|
35
|
+
}
|
|
36
|
+
export declare class LineChart extends ChartWidgetBuilder {
|
|
37
|
+
protected constructor();
|
|
38
|
+
static make(): LineChart;
|
|
39
|
+
}
|
|
40
|
+
export declare class PieChart extends ChartWidgetBuilder {
|
|
41
|
+
protected constructor();
|
|
42
|
+
static make(): PieChart;
|
|
43
|
+
}
|
|
44
|
+
type StatCardValueInput = string | number | ((ctx: PageRenderContext) => string | number | Promise<string | number>);
|
|
45
|
+
type StatCardTrend = {
|
|
46
|
+
direction: 'up' | 'down';
|
|
47
|
+
label: string;
|
|
48
|
+
};
|
|
49
|
+
type StatCardTrendInput = StatCardTrend | undefined | ((ctx: PageRenderContext) => StatCardTrend | undefined | Promise<StatCardTrend | undefined>);
|
|
50
|
+
export declare class StatCard implements DashboardWidget {
|
|
51
|
+
private readonly labelValue;
|
|
52
|
+
slot: 'main' | 'side';
|
|
53
|
+
private valueInput;
|
|
54
|
+
private trendInput;
|
|
55
|
+
private accessPredicate?;
|
|
56
|
+
protected constructor(labelValue: string);
|
|
57
|
+
static make(label: string): StatCard;
|
|
58
|
+
value(input: StatCardValueInput): this;
|
|
59
|
+
trend(input: StatCardTrendInput): this;
|
|
60
|
+
side(): this;
|
|
61
|
+
visibleWhen(predicate: AccessPredicate): this;
|
|
62
|
+
canAccess(ctx: AdminPolicyContext): Promise<boolean>;
|
|
63
|
+
render(ctx: PageRenderContext): Promise<string>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"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"}
|