bways-report 0.1.3 → 0.1.5

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/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  2. package/esm2022/lib/core/services/index.mjs +2 -1
  3. package/esm2022/lib/core/services/report-storage.service.mjs +63 -0
  4. package/esm2022/lib/core/tokens/index.mjs +2 -1
  5. package/esm2022/lib/core/tokens/storage.token.mjs +128 -0
  6. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +16 -44
  7. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +5 -352
  8. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +6 -1011
  9. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +66 -683
  10. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +3 -789
  11. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +14 -480
  12. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +88 -25
  13. package/esm2022/lib/features/designer/designer.component.mjs +194 -65
  14. package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
  15. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  16. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +11 -3
  17. package/esm2022/lib/features/runtime/report-execution.service.mjs +1 -9
  18. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +223 -24
  19. package/esm2022/lib/features/runtime/report-runtime.component.mjs +11 -3
  20. package/esm2022/lib/features/runtime/rpt-report.component.mjs +11 -3
  21. package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +3 -3
  22. package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +3 -3
  23. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +3 -3
  24. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +4 -422
  25. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +23 -1
  26. package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +3 -3
  27. package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +3 -3
  28. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +3 -3
  29. package/fesm2022/bways-report.mjs +2094 -5139
  30. package/fesm2022/bways-report.mjs.map +1 -1
  31. package/lib/core/models/report-grid.model.d.ts +23 -1
  32. package/lib/core/services/index.d.ts +1 -0
  33. package/lib/core/services/report-storage.service.d.ts +26 -0
  34. package/lib/core/tokens/index.d.ts +2 -0
  35. package/lib/core/tokens/storage.token.d.ts +48 -0
  36. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +1 -0
  37. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +2 -1
  38. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +9 -0
  39. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +4 -1
  40. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +5 -1
  41. package/lib/features/designer/designer.component.d.ts +6 -0
  42. package/lib/features/runtime/dynamic-renderer.component.d.ts +4 -1
  43. package/lib/features/runtime/report-grid-bridge.component.d.ts +47 -4
  44. package/lib/features/runtime/report-runtime.component.d.ts +4 -1
  45. package/lib/features/runtime/rpt-report.component.d.ts +4 -1
  46. package/package.json +9 -1
@@ -77,6 +77,10 @@ export interface GridColumnDefinition {
77
77
  order?: number;
78
78
  /** Aggregate function to display in a footer row. */
79
79
  aggregate?: 'sum' | 'avg' | 'count' | 'min' | 'max' | 'none';
80
+ /** Whether to render a selection checkbox in this column's cells. */
81
+ checkboxSelection?: boolean;
82
+ /** Whether to render a select-all checkbox in this column's header. */
83
+ headerCheckboxSelection?: boolean;
80
84
  /** Optional cell-specific click action (overrides grid-level rowClickAction for this column). */
81
85
  action?: GridRowClickAction;
82
86
  }
@@ -90,8 +94,14 @@ export interface GridOptionsDefinition {
90
94
  pagination?: boolean;
91
95
  /** Whether row selection is enabled. */
92
96
  selectable?: boolean;
93
- /** Selection mode when selectable is true. */
97
+ /** Selection mode when selectable is true. Defaults to 'multiple'. */
94
98
  selectionMode?: 'single' | 'multiple';
99
+ /** Selection mode alias (compatible with UltraGrid and AG Grid rowSelection). */
100
+ rowSelection?: 'single' | 'multiple';
101
+ /** Whether to render selection checkboxes on rows. Defaults to true when selectable is true. */
102
+ checkboxSelection?: boolean;
103
+ /** Whether to render a select-all checkbox in the header. Defaults to true when multi-row checkbox selection is active. */
104
+ headerCheckboxSelection?: boolean;
95
105
  /** Whether to show row numbers. */
96
106
  showRowNumbers?: boolean;
97
107
  /** Whether to allow column reordering. */
@@ -112,6 +122,18 @@ export interface GridOptionsDefinition {
112
122
  reportState?: Record<string, unknown>;
113
123
  /** View presets / saved custom grid views. */
114
124
  presets?: unknown[];
125
+ /**
126
+ * Whether the grid side panel (tool panels for columns, filters, highlights, export, analytics, AI chat) is enabled.
127
+ * Standard BWays-grid / UltraGrid feature. Defaults to `true`.
128
+ */
129
+ sideBar?: boolean | {
130
+ visible?: boolean;
131
+ panel?: ('columns' | 'filters' | 'highlights' | 'export' | 'analytics' | 'chat')[];
132
+ };
133
+ /** Whether the real-time global search bar is enabled. Defaults to `true`. */
134
+ globalSearch?: boolean;
135
+ /** Whether the bottom status bar is enabled. Defaults to `true`. */
136
+ statusBar?: boolean;
115
137
  /** Declarative row-click action for master-detail drill-downs. */
116
138
  rowClickAction?: GridRowClickAction;
117
139
  }
@@ -1,3 +1,4 @@
1
1
  export { DynamicFormBuilder } from './dynamic-form-builder.service';
2
2
  export { ReportSessionContextService } from './report-session-context.service';
3
3
  export type { SessionParamMatch, DerivedParametersResult, } from './report-session-context.service';
4
+ export { ReportStorageService } from './report-storage.service';
@@ -0,0 +1,26 @@
1
+ import { ReportStorage } from '../tokens/storage.token';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Angular injectable service wrapping report storage operations.
5
+ * Provides type-safe JSON serialization/deserialization and environment-agnostic access.
6
+ */
7
+ export declare class ReportStorageService implements ReportStorage {
8
+ private readonly storage;
9
+ getItem(key: string): string | null;
10
+ setItem(key: string, value: string): void;
11
+ removeItem(key: string): void;
12
+ clear(): void;
13
+ key(index: number): string | null;
14
+ get length(): number;
15
+ /**
16
+ * Safely retrieves and parses a JSON value from storage.
17
+ * Returns fallback if key is missing or parsing fails.
18
+ */
19
+ getJSON<T>(key: string, fallback: T): T;
20
+ /**
21
+ * Safely serializes and stores a JSON value in storage.
22
+ */
23
+ setJSON<T>(key: string, value: T): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportStorageService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportStorageService>;
26
+ }
@@ -2,3 +2,5 @@ export { REPORTING_CONFIG, GRID_COMPONENT, CHART_COMPONENT, } from './reporting-
2
2
  export type { ReportingConfig, } from './reporting-config.token';
3
3
  export { REPORT_SESSION_CONTEXT, REPORT_SESSION_PROVIDER, SessionContextProvider, } from './session-context.token';
4
4
  export type { SessionParamPrimitive, SessionContextMap, SessionContextProviderFn, SessionContextSource, } from './session-context.token';
5
+ export { REPORT_STORAGE, BrowserReportStorage, MemoryReportStorage, } from './storage.token';
6
+ export type { ReportStorage, } from './storage.token';
@@ -0,0 +1,48 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Storage contract for reading and writing report configurations,
4
+ * presets, and layout states across environments (Browser, SSR, sandboxed iframes).
5
+ */
6
+ export interface ReportStorage {
7
+ getItem(key: string): string | null;
8
+ setItem(key: string, value: string): void;
9
+ removeItem(key: string): void;
10
+ clear(): void;
11
+ key?(index: number): string | null;
12
+ readonly length?: number;
13
+ }
14
+ /**
15
+ * In-memory fallback implementation of ReportStorage.
16
+ * Safe for SSR, unit tests, and sandboxed iframes where localStorage access is denied.
17
+ */
18
+ export declare class MemoryReportStorage implements ReportStorage {
19
+ private readonly store;
20
+ getItem(key: string): string | null;
21
+ setItem(key: string, value: string): void;
22
+ removeItem(key: string): void;
23
+ clear(): void;
24
+ key(index: number): string | null;
25
+ get length(): number;
26
+ }
27
+ /**
28
+ * Browser localStorage-backed implementation of ReportStorage
29
+ * with transparent in-memory fallback on DOMException or SSR.
30
+ */
31
+ export declare class BrowserReportStorage implements ReportStorage {
32
+ private readonly memory;
33
+ private readonly isSupported;
34
+ constructor();
35
+ private checkStorageSupport;
36
+ getItem(key: string): string | null;
37
+ setItem(key: string, value: string): void;
38
+ removeItem(key: string): void;
39
+ clear(): void;
40
+ key(index: number): string | null;
41
+ get length(): number;
42
+ }
43
+ /**
44
+ * Injection token for the report storage engine.
45
+ * Defaults to `BrowserReportStorage`, which transparently falls back to
46
+ * `MemoryReportStorage` when browser localStorage is unavailable or restricted.
47
+ */
48
+ export declare const REPORT_STORAGE: InjectionToken<ReportStorage>;
@@ -4,6 +4,7 @@ import { ReportDefinition, ReportSummary } from '../../core/models/report-defini
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class LocalStorageReportPersistenceAdapter extends ReportPersistenceAdapter {
6
6
  private readonly templateService;
7
+ private readonly storage;
7
8
  constructor();
8
9
  private seedDefaultBlueprintsIfEmpty;
9
10
  private getIndex;
@@ -3,6 +3,7 @@ import * as i0 from "@angular/core";
3
3
  export declare class ComponentPaletteComponent {
4
4
  private readonly registry;
5
5
  private readonly designerState;
6
+ readonly collapseRequested: import("@angular/core").OutputEmitterRef<void>;
6
7
  readonly searchQuery: import("@angular/core").WritableSignal<string>;
7
8
  /** Layout view mode: 'grid' (2-column side-by-side grid) or 'list' (compact row list). Defaults to 'grid'. */
8
9
  readonly layoutMode: import("@angular/core").WritableSignal<"grid" | "list">;
@@ -27,7 +28,7 @@ export declare class ComponentPaletteComponent {
27
28
  onItemDoubleClick(type: string): void;
28
29
  onAddClick(event: MouseEvent, type: string): void;
29
30
  static ɵfac: i0.ɵɵFactoryDeclaration<ComponentPaletteComponent, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<ComponentPaletteComponent, "rpt-component-palette", never, {}, {}, never, never, true, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentPaletteComponent, "rpt-component-palette", never, {}, { "collapseRequested": "collapseRequested"; }, never, never, true, never>;
31
32
  }
32
33
  /** Dictionary of synonyms for component types and UI concepts */
33
34
  export declare const COMPONENT_SYNONYMS: Record<string, string[]>;
@@ -51,6 +51,15 @@ export declare class PropertyEditorDatasourceComponent implements OnInit {
51
51
  ngOnInit(): void;
52
52
  loadEntities(): void;
53
53
  loadEntityDetails(entityName: string, type: DropdownSourceType): void;
54
+ /**
55
+ * Non-destructive linking: binds parameters to session or already-existing canvas fields.
56
+ * Never mutates or adds new components to the canvas.
57
+ */
58
+ autoLinkExistingParameters(paramsList?: ProcedureParameterMetadata[]): void;
59
+ /**
60
+ * Explicit user-initiated action: links existing fields, and creates missing filter inputs on canvas.
61
+ * Restores selection to the current dropdown component so the user stays in this property editor.
62
+ */
54
63
  autoWireAllParameters(paramsList?: ProcedureParameterMetadata[]): void;
55
64
  setSourceType(type: DropdownSourceType): void;
56
65
  onEntitySelected(entityName: string): void;
@@ -17,12 +17,15 @@ export declare class PropertyEditorComponent {
17
17
  readonly definition: import("@angular/core").WritableSignal<import("bways-report").ReportDefinition>;
18
18
  readonly activeTab: import("@angular/core").WritableSignal<DesignerActiveTab>;
19
19
  readonly selectedComponent: import("@angular/core").Signal<ReportComponentDefinition | null>;
20
+ readonly collapseRequested: import("@angular/core").OutputEmitterRef<void>;
20
21
  readonly maxColumns: import("@angular/core").Signal<number>;
21
22
  readonly allComponents: import("@angular/core").Signal<ReportComponentDefinition[]>;
22
23
  readonly propertySchema: import("@angular/core").Signal<PropertyDefinition[]>;
23
24
  setTab(tab: DesignerActiveTab): void;
24
25
  updateCompDataSource(id: string, dataSource: ComponentDataSourceDefinition): void;
25
26
  deselect(): void;
27
+ duplicateComponent(id: string): void;
28
+ deleteComponent(id: string): void;
26
29
  updateComp(field: string, value: unknown): void;
27
30
  updateProp(id: string, key: string, value: unknown): void;
28
31
  updateLayout(key: keyof ComponentLayoutDefinition, value: unknown): void;
@@ -47,5 +50,5 @@ export declare class PropertyEditorComponent {
47
50
  getLayoutBadge(comp: ReportComponentDefinition): string;
48
51
  getValidationBadge(comp: ReportComponentDefinition): string;
49
52
  static ɵfac: i0.ɵɵFactoryDeclaration<PropertyEditorComponent, never>;
50
- static ɵcmp: i0.ɵɵComponentDeclaration<PropertyEditorComponent, "rpt-property-editor", never, {}, {}, never, never, true, never>;
53
+ static ɵcmp: i0.ɵɵComponentDeclaration<PropertyEditorComponent, "rpt-property-editor", never, {}, { "collapseRequested": "collapseRequested"; }, never, never, true, never>;
51
54
  }
@@ -11,6 +11,10 @@ export declare class DesignerToolbarComponent {
11
11
  readonly canRedo: import("@angular/core").Signal<boolean>;
12
12
  readonly isTemplatesModalOpen: import("@angular/core").WritableSignal<boolean>;
13
13
  readonly availableBlueprints: ReportBlueprint[];
14
+ readonly isLeftPanelCollapsed: import("@angular/core").InputSignal<boolean>;
15
+ readonly isRightPanelCollapsed: import("@angular/core").InputSignal<boolean>;
16
+ readonly toggleLeftPanel: import("@angular/core").OutputEmitterRef<void>;
17
+ readonly toggleRightPanel: import("@angular/core").OutputEmitterRef<void>;
14
18
  readonly saveRequested: import("@angular/core").OutputEmitterRef<void>;
15
19
  setMode(mode: DesignerViewMode): void;
16
20
  undo(): void;
@@ -23,5 +27,5 @@ export declare class DesignerToolbarComponent {
23
27
  selectGridSettings(): void;
24
28
  exportJson(): void;
25
29
  static ɵfac: i0.ɵɵFactoryDeclaration<DesignerToolbarComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<DesignerToolbarComponent, "rpt-designer-toolbar", never, {}, { "saveRequested": "saveRequested"; }, never, never, true, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<DesignerToolbarComponent, "rpt-designer-toolbar", never, { "isLeftPanelCollapsed": { "alias": "isLeftPanelCollapsed"; "required": false; "isSignal": true; }; "isRightPanelCollapsed": { "alias": "isRightPanelCollapsed"; "required": false; "isSignal": true; }; }, { "toggleLeftPanel": "toggleLeftPanel"; "toggleRightPanel": "toggleRightPanel"; "saveRequested": "saveRequested"; }, never, never, true, never>;
27
31
  }
@@ -24,9 +24,15 @@ export declare class DesignerComponent implements OnInit {
24
24
  readonly isRightPanelCollapsed: import("@angular/core").WritableSignal<boolean>;
25
25
  toggleLeftPanel(): void;
26
26
  toggleRightPanel(): void;
27
+ openLeftPanelOnly(): void;
28
+ openRightPanelOnly(): void;
29
+ closeAllPanels(): void;
30
+ onResize(): void;
31
+ onKeyDown(event: KeyboardEvent): void;
27
32
  readonly formattedJson: import("@angular/core").Signal<string>;
28
33
  private loadedReportId;
29
34
  private loadedReportDef;
35
+ private lastEmittedDef;
30
36
  constructor();
31
37
  ngOnInit(): void;
32
38
  onSave(): void;
@@ -39,6 +39,8 @@ export declare class DynamicRendererComponent {
39
39
  }>;
40
40
  readonly gridStateChanged: import("@angular/core").OutputEmitterRef<any>;
41
41
  readonly columnDefsChanged: import("@angular/core").OutputEmitterRef<any>;
42
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<any[]>;
43
+ readonly selectionChanged: import("@angular/core").OutputEmitterRef<any[]>;
42
44
  readonly rowActionTriggered: import("@angular/core").OutputEmitterRef<{
43
45
  action: GridRowClickAction;
44
46
  row: Record<string, unknown>;
@@ -62,6 +64,7 @@ export declare class DynamicRendererComponent {
62
64
  column?: GridColumnDefinition;
63
65
  event?: MouseEvent;
64
66
  }): void;
67
+ onGridSelectionChange(rows: any[]): void;
65
68
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicRendererComponent, never>;
66
- static ɵcmp: i0.ɵɵComponentDeclaration<DynamicRendererComponent, "rpt-dynamic-renderer", never, { "definition": { "alias": "definition"; "required": true; "isSignal": true; }; "initialValues": { "alias": "initialValues"; "required": false; "isSignal": true; }; "resultData": { "alias": "resultData"; "required": false; "isSignal": true; }; }, { "executeRequested": "executeRequested"; "resetRequested": "resetRequested"; "exportRequested": "exportRequested"; "printRequested": "printRequested"; "customActionTriggered": "customActionTriggered"; "gridStateChanged": "gridStateChanged"; "columnDefsChanged": "columnDefsChanged"; "rowActionTriggered": "rowActionTriggered"; }, never, never, true, never>;
69
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicRendererComponent, "rpt-dynamic-renderer", never, { "definition": { "alias": "definition"; "required": true; "isSignal": true; }; "initialValues": { "alias": "initialValues"; "required": false; "isSignal": true; }; "resultData": { "alias": "resultData"; "required": false; "isSignal": true; }; }, { "executeRequested": "executeRequested"; "resetRequested": "resetRequested"; "exportRequested": "exportRequested"; "printRequested": "printRequested"; "customActionTriggered": "customActionTriggered"; "gridStateChanged": "gridStateChanged"; "columnDefsChanged": "columnDefsChanged"; "selectionChange": "selectionChange"; "selectionChanged": "selectionChanged"; "rowActionTriggered": "rowActionTriggered"; }, never, never, true, never>;
67
70
  }
@@ -14,15 +14,17 @@ export declare class RptGridOutletDirective implements OnDestroy {
14
14
  column?: any;
15
15
  event?: any;
16
16
  }>;
17
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<any[]>;
17
18
  constructor();
18
19
  private recreateComponent;
19
20
  private clear;
20
21
  ngOnDestroy(): void;
21
22
  static ɵfac: i0.ɵɵFactoryDeclaration<RptGridOutletDirective, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<RptGridOutletDirective, "[rptGridOutlet]", never, { "componentType": { "alias": "rptGridOutlet"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, { "gridStateChange": "gridStateChange"; "columnDefsChange": "columnDefsChange"; "rowClick": "rowClick"; }, never, never, true, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RptGridOutletDirective, "[rptGridOutlet]", never, { "componentType": { "alias": "rptGridOutlet"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, { "gridStateChange": "gridStateChange"; "columnDefsChange": "columnDefsChange"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; }, never, never, true, never>;
23
24
  }
24
25
  export declare class ReportGridBridgeComponent {
25
26
  private readonly injectedGrid;
27
+ private readonly storage;
26
28
  constructor();
27
29
  readonly gridDefinition: import("@angular/core").InputSignal<ReportGridDefinition>;
28
30
  readonly data: import("@angular/core").InputSignal<unknown[]>;
@@ -33,8 +35,14 @@ export declare class ReportGridBridgeComponent {
33
35
  column?: GridColumnDefinition;
34
36
  event?: MouseEvent;
35
37
  }>;
38
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<any[]>;
36
39
  readonly customGridComponent: import("@angular/core").Signal<Type<unknown> | null>;
40
+ readonly selectedRows: import("@angular/core").WritableSignal<any[]>;
37
41
  readonly hasRowClickAction: import("@angular/core").Signal<boolean>;
42
+ readonly isCheckboxSelectionEnabled: import("@angular/core").Signal<boolean>;
43
+ readonly effectiveRowSelection: import("@angular/core").Signal<"single" | "multiple">;
44
+ readonly isHeaderCheckboxSelectionEnabled: import("@angular/core").Signal<boolean>;
45
+ readonly isSelectionEnabled: import("@angular/core").Signal<boolean>;
38
46
  readonly sortColumn: import("@angular/core").WritableSignal<string | null>;
39
47
  readonly sortDirection: import("@angular/core").WritableSignal<"desc" | "asc">;
40
48
  readonly currentPage: import("@angular/core").WritableSignal<number>;
@@ -46,6 +54,8 @@ export declare class ReportGridBridgeComponent {
46
54
  hide: boolean;
47
55
  width: number | undefined;
48
56
  aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
57
+ checkboxSelection: boolean | undefined;
58
+ headerCheckboxSelection: boolean | undefined;
49
59
  field: string;
50
60
  label: string;
51
61
  dataType?: "string" | "number" | "date" | "boolean" | "currency";
@@ -62,11 +72,14 @@ export declare class ReportGridBridgeComponent {
62
72
  readonly gridInstanceKey: import("@angular/core").Signal<string>;
63
73
  readonly gridStateKey: import("@angular/core").Signal<string>;
64
74
  readonly gridConfig: import("@angular/core").Signal<{
75
+ rowSelection: "single" | "multiple";
76
+ selectionMode: "single" | "multiple";
77
+ checkboxSelection: boolean;
78
+ headerCheckboxSelection: boolean;
65
79
  stateKey: string;
66
80
  pageSize?: number;
67
81
  pagination?: boolean;
68
82
  selectable?: boolean;
69
- selectionMode?: "single" | "multiple";
70
83
  showRowNumbers?: boolean;
71
84
  allowColumnReorder?: boolean;
72
85
  allowExport?: boolean;
@@ -77,6 +90,12 @@ export declare class ReportGridBridgeComponent {
77
90
  sortModel?: unknown[];
78
91
  reportState?: Record<string, unknown>;
79
92
  presets?: unknown[];
93
+ sideBar: boolean | {
94
+ visible?: boolean;
95
+ panel?: ("columns" | "filters" | "highlights" | "export" | "analytics" | "chat")[];
96
+ };
97
+ globalSearch: boolean;
98
+ statusBar: boolean;
80
99
  rowClickAction?: import("../../core/models/report-grid.model").GridRowClickAction;
81
100
  }>;
82
101
  readonly gridReportState: import("@angular/core").Signal<{
@@ -88,6 +107,8 @@ export declare class ReportGridBridgeComponent {
88
107
  hide: boolean;
89
108
  width: number | undefined;
90
109
  aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
110
+ checkboxSelection: boolean | undefined;
111
+ headerCheckboxSelection: boolean | undefined;
91
112
  field: string;
92
113
  label: string;
93
114
  dataType?: "string" | "number" | "date" | "boolean" | "currency";
@@ -114,6 +135,8 @@ export declare class ReportGridBridgeComponent {
114
135
  hide: boolean;
115
136
  width: number | undefined;
116
137
  aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
138
+ checkboxSelection: boolean | undefined;
139
+ headerCheckboxSelection: boolean | undefined;
117
140
  field: string;
118
141
  label: string;
119
142
  dataType?: "string" | "number" | "date" | "boolean" | "currency";
@@ -134,6 +157,8 @@ export declare class ReportGridBridgeComponent {
134
157
  hide: boolean;
135
158
  width: number | undefined;
136
159
  aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
160
+ checkboxSelection: boolean | undefined;
161
+ headerCheckboxSelection: boolean | undefined;
137
162
  field: string;
138
163
  label: string;
139
164
  dataType?: "string" | "number" | "date" | "boolean" | "currency";
@@ -149,11 +174,14 @@ export declare class ReportGridBridgeComponent {
149
174
  }[];
150
175
  rowData: unknown[];
151
176
  config: {
177
+ rowSelection: "single" | "multiple";
178
+ selectionMode: "single" | "multiple";
179
+ checkboxSelection: boolean;
180
+ headerCheckboxSelection: boolean;
152
181
  stateKey: string;
153
182
  pageSize?: number;
154
183
  pagination?: boolean;
155
184
  selectable?: boolean;
156
- selectionMode?: "single" | "multiple";
157
185
  showRowNumbers?: boolean;
158
186
  allowColumnReorder?: boolean;
159
187
  allowExport?: boolean;
@@ -164,6 +192,12 @@ export declare class ReportGridBridgeComponent {
164
192
  sortModel?: unknown[];
165
193
  reportState?: Record<string, unknown>;
166
194
  presets?: unknown[];
195
+ sideBar: boolean | {
196
+ visible?: boolean;
197
+ panel?: ("columns" | "filters" | "highlights" | "export" | "analytics" | "chat")[];
198
+ };
199
+ globalSearch: boolean;
200
+ statusBar: boolean;
167
201
  rowClickAction?: import("../../core/models/report-grid.model").GridRowClickAction;
168
202
  };
169
203
  reportState: {
@@ -175,6 +209,8 @@ export declare class ReportGridBridgeComponent {
175
209
  hide: boolean;
176
210
  width: number | undefined;
177
211
  aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
212
+ checkboxSelection: boolean | undefined;
213
+ headerCheckboxSelection: boolean | undefined;
178
214
  field: string;
179
215
  label: string;
180
216
  dataType?: "string" | "number" | "date" | "boolean" | "currency";
@@ -195,6 +231,7 @@ export declare class ReportGridBridgeComponent {
195
231
  };
196
232
  pagination: boolean;
197
233
  pageSize: number;
234
+ rowSelection: "single" | "multiple";
198
235
  }>;
199
236
  readonly showRowNumbers: import("@angular/core").Signal<boolean>;
200
237
  readonly isPaginationEnabled: import("@angular/core").Signal<boolean>;
@@ -210,8 +247,14 @@ export declare class ReportGridBridgeComponent {
210
247
  nextPage(): void;
211
248
  formatValue(value: unknown, col: GridColumnDefinition): string;
212
249
  computeAggregate(col: GridColumnDefinition): string;
250
+ onSelectionChange(selected: any): void;
251
+ isRowSelected(row: Record<string, unknown>): boolean;
252
+ isAllSelected(): boolean;
253
+ isPartiallySelected(): boolean;
254
+ toggleSelectAll(event: Event): void;
255
+ toggleRowSelection(row: Record<string, unknown>, event: Event): void;
213
256
  onRowClick(row: Record<string, unknown>, event: MouseEvent): void;
214
257
  onCellClick(row: Record<string, unknown>, col: GridColumnDefinition, event: MouseEvent): void;
215
258
  static ɵfac: i0.ɵɵFactoryDeclaration<ReportGridBridgeComponent, never>;
216
- static ɵcmp: i0.ɵɵComponentDeclaration<ReportGridBridgeComponent, "rpt-grid-bridge", never, { "gridDefinition": { "alias": "gridDefinition"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, { "gridStateChange": "gridStateChange"; "columnDefsChange": "columnDefsChange"; "rowClick": "rowClick"; }, never, never, true, never>;
259
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportGridBridgeComponent, "rpt-grid-bridge", never, { "gridDefinition": { "alias": "gridDefinition"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, { "gridStateChange": "gridStateChange"; "columnDefsChange": "columnDefsChange"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; }, never, never, true, never>;
217
260
  }
@@ -33,6 +33,8 @@ export declare class ReportRuntimeComponent {
33
33
  }>;
34
34
  readonly gridStateChange: import("@angular/core").OutputEmitterRef<any>;
35
35
  readonly columnDefsChange: import("@angular/core").OutputEmitterRef<any>;
36
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<any[]>;
37
+ readonly selectionChanged: import("@angular/core").OutputEmitterRef<any[]>;
36
38
  readonly rowActionTriggered: import("@angular/core").OutputEmitterRef<{
37
39
  action: GridRowClickAction;
38
40
  row: Record<string, unknown>;
@@ -88,6 +90,7 @@ export declare class ReportRuntimeComponent {
88
90
  component: ReportComponentDefinition;
89
91
  parameters: Record<string, unknown>;
90
92
  }): void;
93
+ onSelectionChange(rows: any[]): void;
91
94
  onRowActionTriggered(event: {
92
95
  action: GridRowClickAction;
93
96
  row: Record<string, unknown>;
@@ -104,5 +107,5 @@ export declare class ReportRuntimeComponent {
104
107
  retryDrawer(): void;
105
108
  retry(): void;
106
109
  static ɵfac: i0.ɵɵFactoryDeclaration<ReportRuntimeComponent, never>;
107
- static ɵcmp: i0.ɵɵComponentDeclaration<ReportRuntimeComponent, "rpt-report-runtime, rpt-runtime", never, { "reportId": { "alias": "reportId"; "required": false; "isSignal": true; }; "definition": { "alias": "report"; "required": false; "isSignal": true; }; }, { "resetRequested": "resetRequested"; "exportRequested": "exportRequested"; "printRequested": "printRequested"; "customActionTriggered": "customActionTriggered"; "gridStateChange": "gridStateChange"; "columnDefsChange": "columnDefsChange"; "rowActionTriggered": "rowActionTriggered"; "drilldownRequested": "drilldownRequested"; }, never, never, true, never>;
110
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportRuntimeComponent, "rpt-report-runtime, rpt-runtime", never, { "reportId": { "alias": "reportId"; "required": false; "isSignal": true; }; "definition": { "alias": "report"; "required": false; "isSignal": true; }; }, { "resetRequested": "resetRequested"; "exportRequested": "exportRequested"; "printRequested": "printRequested"; "customActionTriggered": "customActionTriggered"; "gridStateChange": "gridStateChange"; "columnDefsChange": "columnDefsChange"; "selectionChange": "selectionChange"; "selectionChanged": "selectionChanged"; "rowActionTriggered": "rowActionTriggered"; "drilldownRequested": "drilldownRequested"; }, never, never, true, never>;
108
111
  }
@@ -25,6 +25,8 @@ export declare class RptReportComponent {
25
25
  }>;
26
26
  readonly dataLoaded: import("@angular/core").OutputEmitterRef<unknown[]>;
27
27
  readonly gridStateChange: import("@angular/core").OutputEmitterRef<any>;
28
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<any[]>;
29
+ readonly selectionChanged: import("@angular/core").OutputEmitterRef<any[]>;
28
30
  readonly presetSaved: import("@angular/core").OutputEmitterRef<{
29
31
  name: string;
30
32
  preset: ReportViewPreset;
@@ -49,6 +51,7 @@ export declare class RptReportComponent {
49
51
  parameters: Record<string, unknown>;
50
52
  }): void;
51
53
  onGridStateChanged(state: any): void;
54
+ onSelectionChange(rows: any[]): void;
52
55
  onSelectPreset(presetId: string): void;
53
56
  confirmSavePreset(): void;
54
57
  exportExcel(): void;
@@ -62,5 +65,5 @@ export declare class RptReportComponent {
62
65
  onExportCsv(): void;
63
66
  onPrintReport(): void;
64
67
  static ɵfac: i0.ɵɵFactoryDeclaration<RptReportComponent, never>;
65
- static ɵcmp: i0.ɵɵComponentDeclaration<RptReportComponent, "rpt-report, rpt-view", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "report": { "alias": "report"; "required": false; "isSignal": true; }; "parameters": { "alias": "parameters"; "required": false; "isSignal": true; }; "showExport": { "alias": "showExport"; "required": false; "isSignal": true; }; "enablePresets": { "alias": "enablePresets"; "required": false; "isSignal": true; }; "autoExecute": { "alias": "autoExecute"; "required": false; "isSignal": true; }; }, { "rowClick": "rowClick"; "dataLoaded": "dataLoaded"; "gridStateChange": "gridStateChange"; "presetSaved": "presetSaved"; "presetChange": "presetChange"; "exportRequested": "exportRequested"; "printRequested": "printRequested"; }, never, never, true, never>;
68
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptReportComponent, "rpt-report, rpt-view", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "report": { "alias": "report"; "required": false; "isSignal": true; }; "parameters": { "alias": "parameters"; "required": false; "isSignal": true; }; "showExport": { "alias": "showExport"; "required": false; "isSignal": true; }; "enablePresets": { "alias": "enablePresets"; "required": false; "isSignal": true; }; "autoExecute": { "alias": "autoExecute"; "required": false; "isSignal": true; }; }, { "rowClick": "rowClick"; "dataLoaded": "dataLoaded"; "gridStateChange": "gridStateChange"; "selectionChange": "selectionChange"; "selectionChanged": "selectionChanged"; "presetSaved": "presetSaved"; "presetChange": "presetChange"; "exportRequested": "exportRequested"; "printRequested": "printRequested"; }, never, never, true, never>;
66
69
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bways-report",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Enterprise-grade, metadata-driven reporting engine and visual page builder for Angular 18+ ERP applications.",
5
5
  "keywords": [
6
6
  "angular",
@@ -15,6 +15,14 @@
15
15
  ],
16
16
  "author": "CCPL / BWays Team",
17
17
  "license": "SEE LICENSE IN LICENSE",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/ccplProject/BWays-CustomeReport.git"
21
+ },
22
+ "homepage": "https://github.com/ccplProject/BWays-CustomeReport#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/ccplProject/BWays-CustomeReport/issues"
25
+ },
18
26
  "peerDependencies": {
19
27
  "@angular/common": ">=18.0.0",
20
28
  "@angular/core": ">=18.0.0",