bways-report 0.1.5 → 0.1.7

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 (107) hide show
  1. package/README.md +291 -422
  2. package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
  3. package/esm2022/lib/core/index.mjs +2 -1
  4. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  5. package/esm2022/lib/core/services/index.mjs +2 -1
  6. package/esm2022/lib/core/services/report-data-discovery.service.mjs +138 -0
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
  8. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  9. package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
  10. package/esm2022/lib/core/utils/identifier-humanizer.mjs +15 -4
  11. package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
  12. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
  13. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
  14. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
  15. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
  16. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
  17. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
  18. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +20 -30
  19. package/esm2022/lib/data-access/adapters/index.mjs +8 -1
  20. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
  21. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
  22. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +71 -13
  23. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
  24. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +403 -222
  25. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +41 -34
  26. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -20
  27. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +154 -5
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
  30. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
  31. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
  32. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +112 -39
  33. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
  34. package/esm2022/lib/features/designer/designer.component.mjs +44 -3
  35. package/esm2022/lib/features/designer/services/designer-state.service.mjs +70 -3
  36. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
  37. package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
  38. package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
  39. package/esm2022/lib/features/embed/index.mjs +5 -0
  40. package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
  41. package/esm2022/lib/features/index.mjs +2 -1
  42. package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
  43. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
  44. package/esm2022/lib/features/routing/index.mjs +2 -2
  45. package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
  46. package/esm2022/lib/features/routing/report-routes.mjs +42 -1
  47. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
  48. package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
  49. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
  50. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +121 -15
  51. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
  52. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +113 -20
  53. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  54. package/esm2022/lib/primitives/components/index.mjs +2 -1
  55. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
  56. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
  57. package/esm2022/lib/provide-reporting.mjs +156 -11
  58. package/fesm2022/bways-report.mjs +5703 -1766
  59. package/fesm2022/bways-report.mjs.map +1 -1
  60. package/lib/core/config/bways-report-config.d.ts +161 -0
  61. package/lib/core/index.d.ts +1 -0
  62. package/lib/core/models/report-definition.model.d.ts +16 -0
  63. package/lib/core/services/index.d.ts +1 -0
  64. package/lib/core/services/report-data-discovery.service.d.ts +38 -0
  65. package/lib/core/services/report-session-context.service.d.ts +1 -0
  66. package/lib/core/tokens/reporting-config.token.d.ts +18 -0
  67. package/lib/core/utils/data-normalization.util.d.ts +10 -0
  68. package/lib/core/utils/report-parameter.util.d.ts +18 -1
  69. package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
  70. package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
  71. package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
  72. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
  73. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
  74. package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
  75. package/lib/data-access/adapters/http-lookup.adapter.d.ts +2 -1
  76. package/lib/data-access/adapters/index.d.ts +7 -0
  77. package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
  78. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
  79. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +6 -2
  80. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
  81. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +6 -0
  82. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +3 -0
  83. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
  84. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +41 -1
  85. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +19 -0
  86. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
  87. package/lib/features/designer/designer.component.d.ts +4 -0
  88. package/lib/features/designer/services/designer-state.service.d.ts +12 -1
  89. package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
  90. package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
  91. package/lib/features/embed/bways-report-page.component.d.ts +61 -0
  92. package/lib/features/embed/index.d.ts +4 -0
  93. package/lib/features/embed/inject-report-menu.d.ts +44 -0
  94. package/lib/features/index.d.ts +1 -0
  95. package/lib/features/persistence/services/report-store.service.d.ts +5 -0
  96. package/lib/features/routing/index.d.ts +1 -1
  97. package/lib/features/routing/models/report-route.models.d.ts +3 -0
  98. package/lib/features/routing/report-routes.d.ts +40 -0
  99. package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
  100. package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
  101. package/lib/features/runtime/report-grid-bridge.component.d.ts +8 -59
  102. package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
  103. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +18 -2
  104. package/lib/primitives/components/index.d.ts +2 -0
  105. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
  106. package/lib/provide-reporting.d.ts +28 -6
  107. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { ElementRef, OnDestroy } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
+ import { ConnectedPosition, ConnectedOverlayPositionChange, ScrollStrategy } from '@angular/cdk/overlay';
3
4
  import { ReportComponentDefinition } from '../../../core/models/report-component.model';
4
5
  import * as i0 from "@angular/core";
5
6
  export interface DropdownOption {
@@ -11,11 +12,17 @@ export declare class RptDropdownComponent implements OnDestroy {
11
12
  private readonly lookupAdapter;
12
13
  private readonly sessionService;
13
14
  private readonly elementRef;
15
+ private readonly reportingConfig;
16
+ private readonly overlay;
17
+ readonly scrollStrategy: ScrollStrategy;
18
+ readonly triggerWidth: import("@angular/core").WritableSignal<string | number>;
19
+ readonly overlayPositions: ConnectedPosition[];
14
20
  readonly config: import("@angular/core").InputSignal<ReportComponentDefinition>;
15
21
  readonly control: import("@angular/core").InputSignal<FormControl<any> | null | undefined>;
16
22
  readonly parentForm: import("@angular/core").InputSignal<FormGroup<any> | null>;
17
23
  /** Designer mode: shows a small status line (Loading / N records / Waiting for…). */
18
24
  readonly showStatus: import("@angular/core").InputSignal<boolean>;
25
+ readonly dropdownClick: import("@angular/core").OutputEmitterRef<void>;
19
26
  private readonly fallbackControl;
20
27
  readonly dynamicOptions: import("@angular/core").WritableSignal<DropdownOption[]>;
21
28
  private lookupSub?;
@@ -47,9 +54,14 @@ export declare class RptDropdownComponent implements OnDestroy {
47
54
  readonly selectedOption: import("@angular/core").Signal<DropdownOption | null>;
48
55
  readonly filteredOptions: import("@angular/core").Signal<DropdownOption[]>;
49
56
  readonly MAX_FILTER_RENDER = 200;
57
+ readonly INITIAL_FILTER_RENDER = 200;
58
+ readonly filterRenderLimit: import("@angular/core").WritableSignal<number>;
50
59
  readonly visibleFilteredOptions: import("@angular/core").Signal<DropdownOption[]>;
51
60
  readonly excessFilteredCount: import("@angular/core").Signal<number>;
52
- readonly MAX_RENDERED_OPTIONS = 500;
61
+ onOptionsScroll(event: Event): void;
62
+ loadMoreFiltered(): void;
63
+ loadAllFiltered(): void;
64
+ readonly MAX_RENDERED_OPTIONS = 5000;
53
65
  readonly renderedOptions: import("@angular/core").Signal<DropdownOption[]>;
54
66
  readonly hasExcessOptions: import("@angular/core").Signal<boolean>;
55
67
  readonly excessOptionsCount: import("@angular/core").Signal<number>;
@@ -63,9 +75,13 @@ export declare class RptDropdownComponent implements OnDestroy {
63
75
  isSelected(opt: DropdownOption): boolean;
64
76
  toggleOpen(event?: Event): void;
65
77
  openDropdown(): void;
78
+ onPositionChange(change: ConnectedOverlayPositionChange): void;
79
+ onOverlayAttached(): void;
66
80
  closeDropdown(): void;
67
81
  selectOption(opt: DropdownOption): void;
68
82
  clearSelection(event: Event): void;
83
+ /** Manually retry loading dynamic lookup options (e.g. after database timeout). */
84
+ retryLookup(event?: Event): void;
69
85
  clearSearch(event: Event): void;
70
86
  onSearchInput(event: Event): void;
71
87
  onTriggerKeydown(event: KeyboardEvent): void;
@@ -76,5 +92,5 @@ export declare class RptDropdownComponent implements OnDestroy {
76
92
  private scheduleReload;
77
93
  private reloadDataSourceOptions;
78
94
  static ɵfac: i0.ɵɵFactoryDeclaration<RptDropdownComponent, never>;
79
- static ɵcmp: i0.ɵɵComponentDeclaration<RptDropdownComponent, "rpt-dropdown", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; "parentForm": { "alias": "parentForm"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
95
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptDropdownComponent, "rpt-dropdown", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; "parentForm": { "alias": "parentForm"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; }, { "dropdownClick": "dropdownClick"; }, never, never, true, never>;
80
96
  }
@@ -12,3 +12,5 @@ export type { KpiTheme, TrendDirection } from './kpi-card/rpt-kpi-card.component
12
12
  export { ReportChartBridgeComponent } from './chart-bridge/report-chart-bridge.component';
13
13
  export type { ChartDataItem, ChartType } from './chart-bridge/report-chart-bridge.component';
14
14
  export { RptIconComponent } from './icon/rpt-icon.component';
15
+ export { RptSearchableSelectComponent } from './searchable-select/rpt-searchable-select.component';
16
+ export type { SearchableSelectOption } from './searchable-select/rpt-searchable-select.component';
@@ -0,0 +1,89 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+ import { ConnectedPosition, ConnectedOverlayPositionChange, ScrollStrategy } from '@angular/cdk/overlay';
4
+ import * as i0 from "@angular/core";
5
+ export interface SearchableSelectOption<T = any> {
6
+ value: T;
7
+ label: string;
8
+ sublabel?: string;
9
+ badge?: string;
10
+ disabled?: boolean;
11
+ group?: string;
12
+ data?: any;
13
+ }
14
+ export declare class RptSearchableSelectComponent implements ControlValueAccessor {
15
+ private readonly elementRef;
16
+ private readonly overlay;
17
+ readonly panelId: string;
18
+ readonly scrollStrategy: ScrollStrategy;
19
+ readonly triggerWidth: import("@angular/core").WritableSignal<string | number>;
20
+ readonly overlayPositions: ConnectedPosition[];
21
+ constructor(elementRef: ElementRef<HTMLElement>);
22
+ readonly options: import("@angular/core").InputSignal<any[] | SearchableSelectOption<any>[]>;
23
+ readonly value: import("@angular/core").InputSignal<any>;
24
+ readonly placeholder: import("@angular/core").InputSignal<string>;
25
+ readonly searchPlaceholder: import("@angular/core").InputSignal<string>;
26
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
27
+ readonly loading: import("@angular/core").InputSignal<boolean>;
28
+ readonly loadingText: import("@angular/core").InputSignal<string>;
29
+ readonly emptyText: import("@angular/core").InputSignal<string>;
30
+ readonly clearable: import("@angular/core").InputSignal<boolean>;
31
+ readonly searchable: import("@angular/core").InputSignal<boolean>;
32
+ readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg">;
33
+ readonly id: import("@angular/core").InputSignal<string>;
34
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
35
+ readonly valueKey: import("@angular/core").InputSignal<string>;
36
+ readonly labelKey: import("@angular/core").InputSignal<string>;
37
+ readonly sublabelKey: import("@angular/core").InputSignal<string>;
38
+ readonly badgeKey: import("@angular/core").InputSignal<string>;
39
+ readonly panelMaxHeight: import("@angular/core").InputSignal<string>;
40
+ readonly openAbove: import("@angular/core").InputSignal<boolean | undefined>;
41
+ readonly valueChange: import("@angular/core").OutputEmitterRef<any>;
42
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<SearchableSelectOption<any>>;
43
+ readonly opened: import("@angular/core").OutputEmitterRef<void>;
44
+ readonly closed: import("@angular/core").OutputEmitterRef<void>;
45
+ readonly triggerBtnEl: import("@angular/core").Signal<ElementRef<HTMLButtonElement> | undefined>;
46
+ readonly searchInputEl: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
47
+ readonly optionsListEl: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
48
+ readonly internalValue: import("@angular/core").WritableSignal<any>;
49
+ readonly isOpen: import("@angular/core").WritableSignal<boolean>;
50
+ readonly opensAbove: import("@angular/core").WritableSignal<boolean>;
51
+ readonly searchTerm: import("@angular/core").WritableSignal<string>;
52
+ readonly focusedIndex: import("@angular/core").WritableSignal<number>;
53
+ private readonly cvaDisabled;
54
+ private onChange;
55
+ private onTouched;
56
+ readonly isDisabled: import("@angular/core").Signal<boolean>;
57
+ readonly normalizedOptions: import("@angular/core").Signal<SearchableSelectOption<any>[]>;
58
+ readonly filteredOptions: import("@angular/core").Signal<SearchableSelectOption<any>[]>;
59
+ readonly MAX_VISIBLE_OPTIONS = 150;
60
+ readonly INITIAL_VISIBLE_OPTIONS = 150;
61
+ readonly renderedLimit: import("@angular/core").WritableSignal<number>;
62
+ readonly visibleFilteredOptions: import("@angular/core").Signal<SearchableSelectOption<any>[]>;
63
+ readonly excessCount: import("@angular/core").Signal<number>;
64
+ onOptionsScroll(event: Event): void;
65
+ loadMore(): void;
66
+ loadAll(): void;
67
+ readonly selectedOption: import("@angular/core").Signal<SearchableSelectOption<any> | undefined>;
68
+ writeValue(obj: any): void;
69
+ registerOnChange(fn: any): void;
70
+ registerOnTouched(fn: any): void;
71
+ setDisabledState?(isDisabled: boolean): void;
72
+ toggle(event?: Event): void;
73
+ open(): void;
74
+ onPositionChange(change: ConnectedOverlayPositionChange): void;
75
+ onOverlayAttached(): void;
76
+ close(): void;
77
+ selectOption(opt: SearchableSelectOption): void;
78
+ clearSelection(event: Event): void;
79
+ clearSearch(event: Event): void;
80
+ onSearchInput(event: Event): void;
81
+ onTriggerKeydown(event: KeyboardEvent): void;
82
+ onSearchKeydown(event: KeyboardEvent): void;
83
+ private scrollFocusedIntoView;
84
+ isSelected(opt: SearchableSelectOption): boolean;
85
+ onDocumentClick(event: MouseEvent): void;
86
+ onEscape(): void;
87
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptSearchableSelectComponent, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptSearchableSelectComponent, "rpt-searchable-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "valueKey": { "alias": "valueKey"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "sublabelKey": { "alias": "sublabelKey"; "required": false; "isSignal": true; }; "badgeKey": { "alias": "badgeKey"; "required": false; "isSignal": true; }; "panelMaxHeight": { "alias": "panelMaxHeight"; "required": false; "isSignal": true; }; "openAbove": { "alias": "openAbove"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
89
+ }
@@ -11,6 +11,7 @@ import { MasterDataProvider } from './data-access/contracts/master-data.provider
11
11
  import { ReportPersistenceAdapter } from './data-access/contracts/report-persistence.contract';
12
12
  import { ReportSchemaDiscoveryAdapter } from './data-access/contracts/schema-discovery.contract';
13
13
  import { ReportLookupAdapter } from './data-access/contracts/lookup.contract';
14
+ import { BwaysReportConfig } from './core/config/bways-report-config';
14
15
  /**
15
16
  * Kinds of reporting features available in `provideBwaysReport`.
16
17
  */
@@ -23,6 +24,7 @@ export declare enum ReportingFeatureKind {
23
24
  */
24
25
  export interface ReportingFeature<KindT extends ReportingFeatureKind = ReportingFeatureKind> {
25
26
  ɵkind: KindT;
27
+ ɵconfig?: Partial<ReportingConfig>;
26
28
  ɵproviders: Provider[];
27
29
  }
28
30
  /**
@@ -34,6 +36,11 @@ export interface HttpAdaptersOptions {
34
36
  * @example 'http://localhost:3000/api/reporting'
35
37
  */
36
38
  apiBaseUrl: string;
39
+ /**
40
+ * Optional custom timeout in milliseconds for database lookup queries.
41
+ * Defaults to 300000ms (5 minutes).
42
+ */
43
+ lookupTimeoutMs?: number;
37
44
  }
38
45
  /**
39
46
  * Configures the built-in HTTP adapters for backend execution, persistence,
@@ -110,16 +117,31 @@ export type ProvideBwaysReportingOptions = ProvideBwaysReportOptions;
110
117
  /**
111
118
  * Provides the BWays-Report library to the Angular application.
112
119
  *
113
- * Supports modern idiomatic feature functions, e.g.:
114
- * `provideReporting({ apiBaseUrl: '/api/reporting' })`
115
- * or zero-backend sandbox mode:
116
- * `provideReporting(withLocalStorage())`
120
+ * **Simple config (recommended for most projects):**
121
+ * ```typescript
122
+ * provideBwaysReport({
123
+ * spEndpoint: '/api/reporting/procedures',
124
+ * tablesEndpoint: '/api/reporting/tables',
125
+ * executeEndpoint: '/api/reporting/execute',
126
+ * reportsEndpoint: '/api/reporting/reports',
127
+ * components: ['formInputs', 'actionButtons'],
128
+ * session: () => inject(AuthService).session(),
129
+ * })
130
+ * ```
131
+ *
132
+ * **Advanced config (existing adapter pattern):**
133
+ * ```typescript
134
+ * provideBwaysReport(
135
+ * { apiBaseUrl: '/api/reporting' },
136
+ * withHttpAdapters({ apiBaseUrl: '/api/reporting' })
137
+ * )
138
+ * ```
117
139
  *
118
- * @param options - Configuration and adapter implementations.
140
+ * @param options - Either a `BwaysReportConfig` (simple) or `ProvideBwaysReportOptions` (advanced).
119
141
  * @param features - Optional features like `withHttpAdapters(...)` or `withLocalStorage()`.
120
142
  * @returns Environment providers for the reporting library.
121
143
  */
122
- export declare function provideBwaysReport(options?: ProvideBwaysReportOptions, ...features: ReportingFeature[]): EnvironmentProviders;
144
+ export declare function provideBwaysReport(options?: BwaysReportConfig | ProvideBwaysReportOptions, ...features: ReportingFeature[]): EnvironmentProviders;
123
145
  /** Alias for provideBwaysReport */
124
146
  export declare const provideBwaysReporting: typeof provideBwaysReport;
125
147
  /** Backward-compatible alias for provideBwaysReport */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bways-report",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Enterprise-grade, metadata-driven reporting engine and visual page builder for Angular 18+ ERP applications.",
5
5
  "keywords": [
6
6
  "angular",