@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.
Files changed (46) hide show
  1. package/README.md +81 -0
  2. package/dist/actions/handlers.d.ts +16 -0
  3. package/dist/actions/handlers.d.ts.map +1 -0
  4. package/dist/actions/handlers.js +12 -0
  5. package/dist/actions/handlers.js.map +1 -0
  6. package/dist/actions/index.d.ts +101 -0
  7. package/dist/actions/index.d.ts.map +1 -0
  8. package/dist/actions/index.js +232 -0
  9. package/dist/actions/index.js.map +1 -0
  10. package/dist/charts/index.d.ts +65 -0
  11. package/dist/charts/index.d.ts.map +1 -0
  12. package/dist/charts/index.js +143 -0
  13. package/dist/charts/index.js.map +1 -0
  14. package/dist/forms/index.d.ts +146 -0
  15. package/dist/forms/index.d.ts.map +1 -0
  16. package/dist/forms/index.js +291 -0
  17. package/dist/forms/index.js.map +1 -0
  18. package/dist/forms/json-fields.d.ts +7 -0
  19. package/dist/forms/json-fields.d.ts.map +1 -0
  20. package/dist/forms/json-fields.js +124 -0
  21. package/dist/forms/json-fields.js.map +1 -0
  22. package/dist/forms/validation.d.ts +10 -0
  23. package/dist/forms/validation.d.ts.map +1 -0
  24. package/dist/forms/validation.js +42 -0
  25. package/dist/forms/validation.js.map +1 -0
  26. package/dist/index.d.ts +353 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +588 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/schemas/index.d.ts +54 -0
  31. package/dist/schemas/index.d.ts.map +1 -0
  32. package/dist/schemas/index.js +126 -0
  33. package/dist/schemas/index.js.map +1 -0
  34. package/dist/tables/index.d.ts +117 -0
  35. package/dist/tables/index.d.ts.map +1 -0
  36. package/dist/tables/index.js +283 -0
  37. package/dist/tables/index.js.map +1 -0
  38. package/dist/tables/list-query-config.d.ts +6 -0
  39. package/dist/tables/list-query-config.d.ts.map +1 -0
  40. package/dist/tables/list-query-config.js +86 -0
  41. package/dist/tables/list-query-config.js.map +1 -0
  42. package/dist/theme/index.d.ts +44 -0
  43. package/dist/theme/index.d.ts.map +1 -0
  44. package/dist/theme/index.js +2 -0
  45. package/dist/theme/index.js.map +1 -0
  46. package/package.json +62 -0
package/dist/index.js ADDED
@@ -0,0 +1,588 @@
1
+ import { isSoftDeleteCapable, } from '@nestjs-dash/adapter';
2
+ import { Schema } from './schemas/index.js';
3
+ import { Table } from './tables/index.js';
4
+ export * from '@nestjs-dash/adapter';
5
+ export * from './actions/index.js';
6
+ export * from './charts/index.js';
7
+ export * from './forms/index.js';
8
+ export * from './schemas/index.js';
9
+ export * from './tables/index.js';
10
+ export * from './theme/index.js';
11
+ export * from '@nestjs-dash/support';
12
+ export class NavigationLink {
13
+ data;
14
+ constructor(label) {
15
+ this.data = { label, url: '#' };
16
+ }
17
+ static make(label) {
18
+ return new NavigationLink(label);
19
+ }
20
+ url(value) {
21
+ this.data.url = value;
22
+ return this;
23
+ }
24
+ slug(value) {
25
+ this.data.slug = value;
26
+ return this;
27
+ }
28
+ group(value) {
29
+ this.data.group = value;
30
+ return this;
31
+ }
32
+ sort(value) {
33
+ this.data.sort = value;
34
+ return this;
35
+ }
36
+ icon(value) {
37
+ this.data.icon = value;
38
+ return this;
39
+ }
40
+ openInNewTab(value = true) {
41
+ this.data.openInNewTab = value;
42
+ return this;
43
+ }
44
+ toNavigationItem(panelPath) {
45
+ const href = this.data.url.startsWith('http')
46
+ ? this.data.url
47
+ : this.data.url.startsWith('/')
48
+ ? this.data.url
49
+ : `${panelPath}/${this.data.url}`;
50
+ return {
51
+ label: this.data.label,
52
+ slug: this.data.slug ??
53
+ this.data.label
54
+ .toLowerCase()
55
+ .replace(/[^a-z0-9]+/g, '-')
56
+ .replace(/^-|-$/g, ''),
57
+ href,
58
+ type: 'link',
59
+ group: this.data.group ?? null,
60
+ sort: this.data.sort ?? 100,
61
+ icon: this.data.icon,
62
+ openInNewTab: this.data.openInNewTab,
63
+ };
64
+ }
65
+ }
66
+ export class Resource {
67
+ static slug;
68
+ static label;
69
+ static model;
70
+ static adapter;
71
+ static api;
72
+ static relationManagers;
73
+ static navigationGroup;
74
+ static navigationLabel;
75
+ static navigationSort;
76
+ static navigationIcon;
77
+ static breadcrumb;
78
+ static shouldRegisterNavigation;
79
+ }
80
+ export class Page {
81
+ static slug;
82
+ static title;
83
+ static navigationLabel;
84
+ static navigationGroup;
85
+ static navigationSort;
86
+ static navigationIcon;
87
+ static shouldRegisterNavigation;
88
+ content(_ctx) {
89
+ return `<p class="text-afi-muted mt-4">Empty page.</p>`;
90
+ }
91
+ }
92
+ export class RelationManager {
93
+ static relationship = '';
94
+ static type = 'has-many';
95
+ static title;
96
+ static icon;
97
+ static relatedResource;
98
+ static foreignKey;
99
+ static ownerKey;
100
+ static pivotTable;
101
+ static pivotForeignKey;
102
+ static pivotRelatedKey;
103
+ static pivotFields;
104
+ static ownerRelationProperty;
105
+ static relatedRelationProperty;
106
+ }
107
+ function humanize(value) {
108
+ return value
109
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
110
+ .replace(/[-_]/g, ' ')
111
+ .replace(/\s+resource$/i, '')
112
+ .trim();
113
+ }
114
+ export function resolveResourceSlug(resource) {
115
+ if (resource.slug) {
116
+ return resource.slug;
117
+ }
118
+ return resource.name
119
+ .replace(/Resource$/i, '')
120
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
121
+ .toLowerCase();
122
+ }
123
+ export function resolveResourceLabel(resource) {
124
+ return resource.label ?? humanize(resource.name);
125
+ }
126
+ export function extractFormFieldNames(form) {
127
+ if (!form?.children?.length) {
128
+ return [];
129
+ }
130
+ const names = [];
131
+ const walk = (nodes) => {
132
+ for (const node of nodes) {
133
+ if (node.kind === 'html') {
134
+ continue;
135
+ }
136
+ if (node.children?.length) {
137
+ walk(node.children);
138
+ continue;
139
+ }
140
+ const name = node.name ?? node.props.name;
141
+ if (typeof name === 'string' && name.length > 0) {
142
+ names.push(name);
143
+ }
144
+ }
145
+ };
146
+ walk(form.children);
147
+ return names;
148
+ }
149
+ const ALL_API_METHODS = ['list', 'get', 'create', 'update', 'delete'];
150
+ export function resolveResourceApi(resource, form) {
151
+ const formFields = extractFormFieldNames(form);
152
+ const config = resource.api ?? {};
153
+ return {
154
+ enabled: config.enabled !== false,
155
+ methods: config.methods?.length ? config.methods : [...ALL_API_METHODS],
156
+ fields: {
157
+ create: config.fields?.create ?? (formFields.length ? formFields : '*'),
158
+ update: config.fields?.update ?? (formFields.length ? formFields : '*'),
159
+ response: config.fields?.response ?? '*',
160
+ },
161
+ strict: config.strict !== false,
162
+ };
163
+ }
164
+ export function pickFields(data, allowed) {
165
+ if (allowed === '*') {
166
+ return { ...data };
167
+ }
168
+ const result = {};
169
+ for (const key of allowed) {
170
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
171
+ result[key] = data[key];
172
+ }
173
+ }
174
+ return result;
175
+ }
176
+ export function assertAllowedFields(data, allowed, strict) {
177
+ if (allowed === '*') {
178
+ return { data: { ...data }, rejected: [] };
179
+ }
180
+ const allowedSet = new Set(allowed);
181
+ const rejected = Object.keys(data).filter((key) => !allowedSet.has(key));
182
+ const filtered = pickFields(data, allowed);
183
+ if (strict && rejected.length > 0) {
184
+ return { data: filtered, rejected };
185
+ }
186
+ return { data: filtered, rejected: strict ? rejected : [] };
187
+ }
188
+ export function serializeRelationManager(manager) {
189
+ const relationship = manager.relationship;
190
+ if (!relationship) {
191
+ throw new Error(`RelationManager ${manager.name} is missing relationship`);
192
+ }
193
+ let tableSchema = null;
194
+ let listQueryConfig = null;
195
+ let formSchema = null;
196
+ if (typeof manager.table === 'function') {
197
+ const table = manager.table(Table.make());
198
+ tableSchema = table.toSchema();
199
+ listQueryConfig = table.toListQueryConfig();
200
+ }
201
+ if (typeof manager.form === 'function') {
202
+ formSchema = manager.form(Schema.make()).toSchema();
203
+ }
204
+ const relatedResource = manager.relatedResource ?? relationship;
205
+ const ownerKey = manager.ownerKey ?? 'id';
206
+ const pivotFields = manager.pivotFields ?? [];
207
+ const definition = {
208
+ name: relationship,
209
+ type: manager.type,
210
+ relatedResource,
211
+ foreignKey: manager.foreignKey,
212
+ ownerKey,
213
+ pivotTable: manager.pivotTable,
214
+ pivotForeignKey: manager.pivotForeignKey,
215
+ pivotRelatedKey: manager.pivotRelatedKey,
216
+ pivotFields,
217
+ listQueryConfig: listQueryConfig ?? undefined,
218
+ ownerRelationProperty: manager.ownerRelationProperty ?? relationship,
219
+ relatedRelationProperty: manager.relatedRelationProperty,
220
+ };
221
+ return {
222
+ relationship,
223
+ type: manager.type,
224
+ title: manager.title ?? humanize(relationship),
225
+ icon: manager.icon,
226
+ relatedResource,
227
+ foreignKey: manager.foreignKey,
228
+ ownerKey,
229
+ pivotTable: manager.pivotTable,
230
+ pivotForeignKey: manager.pivotForeignKey,
231
+ pivotRelatedKey: manager.pivotRelatedKey,
232
+ pivotFields,
233
+ ownerRelationProperty: definition.ownerRelationProperty,
234
+ relatedRelationProperty: manager.relatedRelationProperty,
235
+ table: tableSchema,
236
+ form: formSchema,
237
+ listQueryConfig,
238
+ definition,
239
+ };
240
+ }
241
+ export function relationsFromResource(resource) {
242
+ return (resource.relationManagers ?? []).map((manager) => serializeRelationManager(manager).definition);
243
+ }
244
+ export class Panel {
245
+ panelId = 'admin';
246
+ panelPath = '/admin';
247
+ panelApiPath = '/api';
248
+ panelBrand = 'Nestjs-Dash';
249
+ resourceClasses = [];
250
+ pageClasses = [];
251
+ panelWidgets = [];
252
+ customNavLinks = [];
253
+ panelPlugins = [];
254
+ adapters = [];
255
+ panelTheme = 'system';
256
+ panelStylesheetUrl = null;
257
+ panelThemeOverrides = {};
258
+ panelNavigationOverrides = {};
259
+ static make() {
260
+ return new Panel();
261
+ }
262
+ id(value) {
263
+ this.panelId = value;
264
+ return this;
265
+ }
266
+ path(value) {
267
+ this.panelPath = value.startsWith('/') ? value : `/${value}`;
268
+ return this;
269
+ }
270
+ apiPath(value) {
271
+ this.panelApiPath = value.startsWith('/') ? value : `/${value}`;
272
+ return this;
273
+ }
274
+ brandName(value) {
275
+ this.panelBrand = value;
276
+ return this;
277
+ }
278
+ theme(value) {
279
+ this.panelTheme = value;
280
+ return this;
281
+ }
282
+ stylesheetUrl(value) {
283
+ this.panelStylesheetUrl = value;
284
+ return this;
285
+ }
286
+ colors(value) {
287
+ this.panelThemeOverrides = {
288
+ ...this.panelThemeOverrides,
289
+ light: { ...this.panelThemeOverrides.light, ...value },
290
+ };
291
+ return this;
292
+ }
293
+ darkColors(value) {
294
+ this.panelThemeOverrides = {
295
+ ...this.panelThemeOverrides,
296
+ dark: { ...this.panelThemeOverrides.dark, ...value },
297
+ };
298
+ return this;
299
+ }
300
+ radius(value) {
301
+ this.panelThemeOverrides = { ...this.panelThemeOverrides, radius: value };
302
+ return this;
303
+ }
304
+ fontFamily(value) {
305
+ this.panelThemeOverrides = { ...this.panelThemeOverrides, fontSans: value };
306
+ return this;
307
+ }
308
+ sidebarWidth(value) {
309
+ this.panelThemeOverrides = { ...this.panelThemeOverrides, sidebarWidth: value };
310
+ return this;
311
+ }
312
+ sidebarWidthIcon(value) {
313
+ this.panelThemeOverrides = { ...this.panelThemeOverrides, sidebarWidthIcon: value };
314
+ return this;
315
+ }
316
+ spacing(value) {
317
+ this.panelThemeOverrides = { ...this.panelThemeOverrides, spacing: value };
318
+ return this;
319
+ }
320
+ navigationOverrides(overrides) {
321
+ const merged = { ...this.panelNavigationOverrides };
322
+ for (const [slug, override] of Object.entries(overrides)) {
323
+ merged[slug] = { ...merged[slug], ...override };
324
+ }
325
+ this.panelNavigationOverrides = merged;
326
+ return this;
327
+ }
328
+ getNavigationOverrides() {
329
+ return this.panelNavigationOverrides;
330
+ }
331
+ resources(resources) {
332
+ this.resourceClasses = resources;
333
+ return this;
334
+ }
335
+ registerResources(resources) {
336
+ const seen = new Set(this.resourceClasses.map((resource) => resolveResourceSlug(resource)));
337
+ for (const resource of resources) {
338
+ const slug = resolveResourceSlug(resource);
339
+ if (seen.has(slug)) {
340
+ continue;
341
+ }
342
+ seen.add(slug);
343
+ this.resourceClasses.push(resource);
344
+ }
345
+ return this;
346
+ }
347
+ pages(pages) {
348
+ this.pageClasses = pages;
349
+ return this;
350
+ }
351
+ registerPages(pages) {
352
+ const seen = new Set(this.pageClasses.map((page) => resolvePageSlug(page)));
353
+ for (const page of pages) {
354
+ const slug = resolvePageSlug(page);
355
+ if (seen.has(slug)) {
356
+ continue;
357
+ }
358
+ seen.add(slug);
359
+ this.pageClasses.push(page);
360
+ }
361
+ return this;
362
+ }
363
+ widgets(widgets) {
364
+ this.panelWidgets = widgets;
365
+ return this;
366
+ }
367
+ registerWidgets(widgets) {
368
+ this.panelWidgets.push(...widgets);
369
+ return this;
370
+ }
371
+ navigationItems(items) {
372
+ this.customNavLinks = items;
373
+ return this;
374
+ }
375
+ plugins(plugins) {
376
+ this.panelPlugins = plugins;
377
+ for (const plugin of plugins) {
378
+ if (plugin.pages?.length) {
379
+ this.registerPages(plugin.pages);
380
+ }
381
+ if (plugin.widgets?.length) {
382
+ this.registerWidgets(plugin.widgets);
383
+ }
384
+ }
385
+ return this;
386
+ }
387
+ registerDatabase(adapter) {
388
+ this.adapters.push(adapter);
389
+ return this;
390
+ }
391
+ getId() {
392
+ return this.panelId;
393
+ }
394
+ getPath() {
395
+ return this.panelPath;
396
+ }
397
+ getApiPath() {
398
+ return this.panelApiPath;
399
+ }
400
+ getBrandName() {
401
+ return this.panelBrand;
402
+ }
403
+ getTheme() {
404
+ return this.panelTheme;
405
+ }
406
+ getStylesheetUrl() {
407
+ return this.panelStylesheetUrl;
408
+ }
409
+ getThemeOverrides() {
410
+ return this.panelThemeOverrides;
411
+ }
412
+ getResources() {
413
+ return this.resourceClasses;
414
+ }
415
+ getPages() {
416
+ return this.pageClasses;
417
+ }
418
+ getPageClass(slug) {
419
+ return this.pageClasses.find((page) => resolvePageSlug(page) === slug);
420
+ }
421
+ getResourceClass(slug) {
422
+ return this.resourceClasses.find((resource) => resolveResourceSlug(resource) === slug);
423
+ }
424
+ getWidgets() {
425
+ return this.panelWidgets;
426
+ }
427
+ getPlugins() {
428
+ return this.panelPlugins;
429
+ }
430
+ getAdapters() {
431
+ return this.adapters;
432
+ }
433
+ getResourceAdapter(slug) {
434
+ for (const resource of this.resourceClasses) {
435
+ if (resolveResourceSlug(resource) === slug && resource.adapter) {
436
+ return resource.adapter;
437
+ }
438
+ }
439
+ for (const adapter of this.adapters) {
440
+ const match = adapter.resources().find((item) => item.id() === slug);
441
+ if (match) {
442
+ return match;
443
+ }
444
+ }
445
+ return undefined;
446
+ }
447
+ serialize() {
448
+ const resources = this.resourceClasses.map((resource) => this.serializeResource(resource));
449
+ const pages = this.pageClasses.map((page) => this.serializePage(page));
450
+ const navigation = this.finalizeNavigation(this.buildNavigation(resources, pages));
451
+ return {
452
+ id: this.panelId,
453
+ path: this.panelPath,
454
+ apiPath: this.panelApiPath,
455
+ brandName: this.panelBrand,
456
+ resources,
457
+ pages,
458
+ navigation,
459
+ navigationGroups: groupNavigationItems(navigation),
460
+ };
461
+ }
462
+ buildNavigation(resources, pages) {
463
+ const items = [];
464
+ for (const resourceClass of this.resourceClasses) {
465
+ if (resourceClass.shouldRegisterNavigation === false) {
466
+ continue;
467
+ }
468
+ const slug = resolveResourceSlug(resourceClass);
469
+ const serialized = resources.find((item) => item.slug === slug);
470
+ if (!serialized)
471
+ continue;
472
+ items.push({
473
+ label: resourceClass.navigationLabel ?? serialized.label,
474
+ slug,
475
+ href: `${this.panelPath}/${slug}`,
476
+ type: 'resource',
477
+ group: resourceClass.navigationGroup ?? null,
478
+ sort: resourceClass.navigationSort ?? 0,
479
+ icon: resourceClass.navigationIcon,
480
+ });
481
+ }
482
+ for (const page of pages) {
483
+ const pageClass = this.getPageClass(page.slug);
484
+ if (pageClass?.shouldRegisterNavigation === false) {
485
+ continue;
486
+ }
487
+ items.push({
488
+ label: page.navigationLabel,
489
+ slug: page.slug,
490
+ href: `${this.panelPath}/pages/${page.slug}`,
491
+ type: 'page',
492
+ group: page.navigationGroup ?? null,
493
+ sort: page.navigationSort ?? 50,
494
+ icon: page.navigationIcon,
495
+ });
496
+ }
497
+ for (const link of this.customNavLinks) {
498
+ items.push(link.toNavigationItem(this.panelPath));
499
+ }
500
+ return items;
501
+ }
502
+ finalizeNavigation(items) {
503
+ const withOverrides = items.map((item) => {
504
+ const override = this.panelNavigationOverrides[item.slug];
505
+ if (!override)
506
+ return item;
507
+ return {
508
+ ...item,
509
+ group: override.group !== undefined ? override.group : item.group,
510
+ sort: override.sort !== undefined ? override.sort : item.sort,
511
+ label: override.label !== undefined ? override.label : item.label,
512
+ };
513
+ });
514
+ return withOverrides.sort((a, b) => (a.sort ?? 0) - (b.sort ?? 0) || a.label.localeCompare(b.label));
515
+ }
516
+ serializePage(page) {
517
+ const slug = resolvePageSlug(page);
518
+ const title = page.title ?? humanize(page.name ?? slug);
519
+ return {
520
+ slug,
521
+ title,
522
+ navigationLabel: page.navigationLabel ?? title,
523
+ navigationGroup: page.navigationGroup ?? null,
524
+ navigationSort: page.navigationSort,
525
+ navigationIcon: page.navigationIcon,
526
+ };
527
+ }
528
+ serializeResource(resource) {
529
+ const slug = resolveResourceSlug(resource);
530
+ const label = resolveResourceLabel(resource);
531
+ let tableSchema = null;
532
+ let listQueryConfig = null;
533
+ let formSchema = null;
534
+ if (typeof resource.table === 'function') {
535
+ const table = resource.table(Table.make());
536
+ tableSchema = table.toSchema();
537
+ listQueryConfig = table.toListQueryConfig();
538
+ }
539
+ if (typeof resource.form === 'function') {
540
+ formSchema = resource.form(Schema.make()).toSchema();
541
+ }
542
+ const relationManagers = (resource.relationManagers ?? []).map((manager) => serializeRelationManager(manager));
543
+ const adapter = this.getResourceAdapter(slug);
544
+ const softDeleteCapable = adapter != null && isSoftDeleteCapable(adapter);
545
+ return {
546
+ slug,
547
+ label,
548
+ table: tableSchema,
549
+ form: formSchema,
550
+ listQueryConfig,
551
+ api: resolveResourceApi(resource, formSchema),
552
+ relationManagers,
553
+ navigationGroup: resource.navigationGroup ?? null,
554
+ navigationSort: resource.navigationSort,
555
+ breadcrumb: resource.breadcrumb,
556
+ supportsSoftDelete: softDeleteCapable,
557
+ deletedAtField: softDeleteCapable ? adapter.deletedAtField() : undefined,
558
+ };
559
+ }
560
+ }
561
+ export function resolvePageSlug(page) {
562
+ if (page.slug) {
563
+ return page.slug;
564
+ }
565
+ return (page.name ?? 'page')
566
+ .replace(/Page$/i, '')
567
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
568
+ .toLowerCase();
569
+ }
570
+ export function groupNavigationItems(items) {
571
+ const order = [];
572
+ const buckets = new Map();
573
+ for (const item of items) {
574
+ const key = item.group?.trim() || '';
575
+ if (!buckets.has(key)) {
576
+ buckets.set(key, []);
577
+ order.push(key);
578
+ }
579
+ buckets.get(key).push(item);
580
+ }
581
+ return order.map((key) => ({
582
+ label: key || 'Main',
583
+ items: buckets.get(key) ?? [],
584
+ collapsible: key.length > 0,
585
+ collapsed: false,
586
+ }));
587
+ }
588
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { JsonObject, SchemaNode } from '@nestjs-dash/support';
2
+ export declare abstract class ComponentBuilder {
3
+ abstract readonly kind: SchemaNode['kind'];
4
+ protected props: JsonObject;
5
+ protected children: SchemaNode[];
6
+ protected setProp(key: string, value: unknown): this;
7
+ toSchema(): SchemaNode;
8
+ }
9
+ export declare class Schema extends ComponentBuilder {
10
+ readonly kind: 'schema';
11
+ static make(): Schema;
12
+ components(components: ComponentBuilder[]): this;
13
+ }
14
+ export declare class Section extends ComponentBuilder {
15
+ readonly kind: 'section';
16
+ static make(heading?: string): Section;
17
+ components(components: ComponentBuilder[]): this;
18
+ collapsible(value?: boolean): this;
19
+ }
20
+ export declare class Grid extends ComponentBuilder {
21
+ readonly kind: 'grid';
22
+ static make(columns?: number): Grid;
23
+ components(components: ComponentBuilder[]): this;
24
+ }
25
+ export declare class Tab extends ComponentBuilder {
26
+ readonly kind: 'tab';
27
+ static make(label: string): Tab;
28
+ id(value: string): this;
29
+ icon(value: string): this;
30
+ components(components: ComponentBuilder[]): this;
31
+ }
32
+ export declare class Tabs extends ComponentBuilder {
33
+ readonly kind: 'tabs';
34
+ static make(): Tabs;
35
+ tabs(items: Tab[]): this;
36
+ }
37
+ export interface HtmlRenderContext {
38
+ record?: Record<string, unknown>;
39
+ resource: {
40
+ slug: string;
41
+ label: string;
42
+ };
43
+ path: string;
44
+ mode: 'create' | 'edit';
45
+ }
46
+ export type HtmlContentFn = (ctx: HtmlRenderContext) => string;
47
+ export declare function resolveHtmlContent(key: string): HtmlContentFn | undefined;
48
+ export declare class Html extends ComponentBuilder {
49
+ readonly kind: 'html';
50
+ static make(content: string | HtmlContentFn): Html;
51
+ key(value: string): this;
52
+ }
53
+ export { type SchemaNode } from '@nestjs-dash/support';
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGnE,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,EAAE,UAAU,CAAM;IACjC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAM;IAEtC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKnD;IAED,QAAQ,IAAI,UAAU,CAMrB;CACF;AAED,qBAAa,MAAO,SAAQ,gBAAgB;IAC1C,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,MAAM,CAAC,IAAI,IAAI,MAAM,CAEpB;IAED,UAAU,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAG/C;CACF;AAED,qBAAa,OAAQ,SAAQ,gBAAgB;IAC3C,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAEnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAMrC;IAED,UAAU,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAG/C;IAED,WAAW,CAAC,KAAK,UAAO,GAAG,IAAI,CAE9B;CACF;AAED,qBAAa,IAAK,SAAQ,gBAAgB;IACxC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEhC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAI,GAAG,IAAI,CAE7B;IAED,UAAU,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAG/C;CACF;AAUD,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAE/B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAE9B;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEtB;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,UAAU,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAG/C;CACF;AAED,qBAAa,IAAK,SAAQ,gBAAgB;IACxC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEhC,MAAM,CAAC,IAAI,IAAI,IAAI,CAElB;IAED,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAGvB;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,MAAM,CAAC;AAa/D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE;AAED,qBAAa,IAAK,SAAQ,gBAAgB;IACxC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAMhC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAUjD;IAGD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAUvB;CACF;AAED,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC"}