bways-report 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +477 -0
  3. package/esm2022/bways-report.mjs +5 -0
  4. package/esm2022/lib/core/errors/index.mjs +2 -0
  5. package/esm2022/lib/core/errors/reporting-errors.mjs +65 -0
  6. package/esm2022/lib/core/index.mjs +8 -0
  7. package/esm2022/lib/core/models/component-event.model.mjs +8 -0
  8. package/esm2022/lib/core/models/index.mjs +5 -0
  9. package/esm2022/lib/core/models/report-component.model.mjs +10 -0
  10. package/esm2022/lib/core/models/report-datasource.model.mjs +9 -0
  11. package/esm2022/lib/core/models/report-definition.model.mjs +13 -0
  12. package/esm2022/lib/core/models/report-grid.model.mjs +10 -0
  13. package/esm2022/lib/core/models/report-layout.model.mjs +9 -0
  14. package/esm2022/lib/core/models/report-parameter.model.mjs +9 -0
  15. package/esm2022/lib/core/models/validation.model.mjs +8 -0
  16. package/esm2022/lib/core/registry/component-category.mjs +8 -0
  17. package/esm2022/lib/core/registry/component-registry.mjs +90 -0
  18. package/esm2022/lib/core/registry/index.mjs +2 -0
  19. package/esm2022/lib/core/registry/property-definition.model.mjs +10 -0
  20. package/esm2022/lib/core/services/dynamic-form-builder.service.mjs +55 -0
  21. package/esm2022/lib/core/services/index.mjs +3 -0
  22. package/esm2022/lib/core/services/report-session-context.service.mjs +314 -0
  23. package/esm2022/lib/core/tokens/index.mjs +3 -0
  24. package/esm2022/lib/core/tokens/reporting-config.token.mjs +26 -0
  25. package/esm2022/lib/core/tokens/session-context.token.mjs +18 -0
  26. package/esm2022/lib/core/utilities/id-generator.mjs +17 -0
  27. package/esm2022/lib/core/utilities/index.mjs +3 -0
  28. package/esm2022/lib/core/utilities/schema-migration.mjs +38 -0
  29. package/esm2022/lib/core/utils/identifier-humanizer.mjs +88 -0
  30. package/esm2022/lib/core/validation/index.mjs +2 -0
  31. package/esm2022/lib/core/validation/validation-factory.mjs +70 -0
  32. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +107 -0
  33. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +119 -0
  34. package/esm2022/lib/data-access/adapters/index.mjs +3 -0
  35. package/esm2022/lib/data-access/contracts/data-source.contract.mjs +28 -0
  36. package/esm2022/lib/data-access/contracts/index.mjs +7 -0
  37. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +6 -0
  38. package/esm2022/lib/data-access/contracts/master-data.provider.mjs +24 -0
  39. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +25 -0
  40. package/esm2022/lib/data-access/contracts/schema-discovery.contract.mjs +7 -0
  41. package/esm2022/lib/data-access/contracts/translation.contract.mjs +9 -0
  42. package/esm2022/lib/data-access/index.mjs +3 -0
  43. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +542 -0
  44. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +843 -0
  45. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +556 -0
  46. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +845 -0
  47. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +185 -0
  48. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +452 -0
  49. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +350 -0
  50. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +175 -0
  51. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +137 -0
  52. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +608 -0
  53. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +225 -0
  54. package/esm2022/lib/features/designer/designer.component.mjs +285 -0
  55. package/esm2022/lib/features/designer/index.mjs +7 -0
  56. package/esm2022/lib/features/designer/services/designer-state.service.mjs +310 -0
  57. package/esm2022/lib/features/designer/services/index.mjs +2 -0
  58. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +124 -0
  59. package/esm2022/lib/features/export/index.mjs +2 -0
  60. package/esm2022/lib/features/export/models/export.models.mjs +2 -0
  61. package/esm2022/lib/features/export/services/report-export.service.mjs +107 -0
  62. package/esm2022/lib/features/index.mjs +6 -0
  63. package/esm2022/lib/features/persistence/index.mjs +2 -0
  64. package/esm2022/lib/features/persistence/services/index.mjs +4 -0
  65. package/esm2022/lib/features/persistence/services/report-store.service.mjs +183 -0
  66. package/esm2022/lib/features/persistence/services/report-versioning.service.mjs +81 -0
  67. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +102 -0
  68. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +156 -0
  69. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +163 -0
  70. package/esm2022/lib/features/routing/index.mjs +6 -0
  71. package/esm2022/lib/features/routing/models/report-route.models.mjs +2 -0
  72. package/esm2022/lib/features/routing/report-routes.mjs +49 -0
  73. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +22 -0
  74. package/esm2022/lib/features/routing/services/report-menu.service.mjs +77 -0
  75. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +222 -0
  76. package/esm2022/lib/features/runtime/index.mjs +4 -0
  77. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +409 -0
  78. package/esm2022/lib/features/runtime/report-runtime.component.mjs +147 -0
  79. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +88 -0
  80. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +361 -0
  81. package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +86 -0
  82. package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +91 -0
  83. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +204 -0
  84. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +476 -0
  85. package/esm2022/lib/primitives/components/index.mjs +10 -0
  86. package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +88 -0
  87. package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +197 -0
  88. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +110 -0
  89. package/esm2022/lib/primitives/index.mjs +3 -0
  90. package/esm2022/lib/primitives/register-builtins.mjs +328 -0
  91. package/esm2022/lib/provide-reporting.mjs +92 -0
  92. package/esm2022/public-api.mjs +9 -0
  93. package/fesm2022/bways-report.mjs +10360 -0
  94. package/fesm2022/bways-report.mjs.map +1 -0
  95. package/index.d.ts +5 -0
  96. package/lib/core/errors/index.d.ts +1 -0
  97. package/lib/core/errors/reporting-errors.d.ts +42 -0
  98. package/lib/core/index.d.ts +7 -0
  99. package/lib/core/models/component-event.model.d.ts +37 -0
  100. package/lib/core/models/index.d.ts +11 -0
  101. package/lib/core/models/report-component.model.d.ts +95 -0
  102. package/lib/core/models/report-datasource.model.d.ts +39 -0
  103. package/lib/core/models/report-definition.model.d.ts +100 -0
  104. package/lib/core/models/report-grid.model.d.ts +73 -0
  105. package/lib/core/models/report-layout.model.d.ts +43 -0
  106. package/lib/core/models/report-parameter.model.d.ts +22 -0
  107. package/lib/core/models/validation.model.d.ts +30 -0
  108. package/lib/core/registry/component-category.d.ts +16 -0
  109. package/lib/core/registry/component-registry.d.ts +101 -0
  110. package/lib/core/registry/index.d.ts +4 -0
  111. package/lib/core/registry/property-definition.model.d.ts +38 -0
  112. package/lib/core/services/dynamic-form-builder.service.d.ts +30 -0
  113. package/lib/core/services/index.d.ts +3 -0
  114. package/lib/core/services/report-session-context.service.d.ts +87 -0
  115. package/lib/core/tokens/index.d.ts +4 -0
  116. package/lib/core/tokens/reporting-config.token.d.ts +42 -0
  117. package/lib/core/tokens/session-context.token.d.ts +36 -0
  118. package/lib/core/utilities/id-generator.d.ts +9 -0
  119. package/lib/core/utilities/index.d.ts +3 -0
  120. package/lib/core/utilities/schema-migration.d.ts +10 -0
  121. package/lib/core/utils/identifier-humanizer.d.ts +22 -0
  122. package/lib/core/validation/index.d.ts +1 -0
  123. package/lib/core/validation/validation-factory.d.ts +31 -0
  124. package/lib/data-access/adapters/http-lookup.adapter.d.ts +19 -0
  125. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +20 -0
  126. package/lib/data-access/adapters/index.d.ts +2 -0
  127. package/lib/data-access/contracts/data-source.contract.d.ts +37 -0
  128. package/lib/data-access/contracts/index.d.ts +9 -0
  129. package/lib/data-access/contracts/lookup.contract.d.ts +32 -0
  130. package/lib/data-access/contracts/master-data.provider.d.ts +54 -0
  131. package/lib/data-access/contracts/report-persistence.contract.d.ts +36 -0
  132. package/lib/data-access/contracts/schema-discovery.contract.d.ts +52 -0
  133. package/lib/data-access/contracts/translation.contract.d.ts +16 -0
  134. package/lib/data-access/index.d.ts +2 -0
  135. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +39 -0
  136. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +42 -0
  137. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +36 -0
  138. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +68 -0
  139. package/lib/features/designer/components/property-editor/property-editor-general.component.d.ts +20 -0
  140. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -0
  141. package/lib/features/designer/components/property-editor/property-editor-layout.component.d.ts +18 -0
  142. package/lib/features/designer/components/property-editor/property-editor-report.component.d.ts +15 -0
  143. package/lib/features/designer/components/property-editor/property-editor-validation.component.d.ts +12 -0
  144. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +44 -0
  145. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +18 -0
  146. package/lib/features/designer/designer.component.d.ts +36 -0
  147. package/lib/features/designer/index.d.ts +7 -0
  148. package/lib/features/designer/services/designer-state.service.d.ts +103 -0
  149. package/lib/features/designer/services/index.d.ts +2 -0
  150. package/lib/features/designer/utilities/canvas-layout.util.d.ts +55 -0
  151. package/lib/features/export/index.d.ts +2 -0
  152. package/lib/features/export/models/export.models.d.ts +16 -0
  153. package/lib/features/export/services/report-export.service.d.ts +27 -0
  154. package/lib/features/index.d.ts +5 -0
  155. package/lib/features/persistence/index.d.ts +1 -0
  156. package/lib/features/persistence/services/index.d.ts +5 -0
  157. package/lib/features/persistence/services/report-store.service.d.ts +53 -0
  158. package/lib/features/persistence/services/report-versioning.service.d.ts +29 -0
  159. package/lib/features/persistence/services/schema-validator.service.d.ts +34 -0
  160. package/lib/features/routing/components/routed-report-designer.component.d.ts +18 -0
  161. package/lib/features/routing/components/routed-report-runtime.component.d.ts +18 -0
  162. package/lib/features/routing/index.d.ts +6 -0
  163. package/lib/features/routing/models/report-route.models.d.ts +41 -0
  164. package/lib/features/routing/report-routes.d.ts +16 -0
  165. package/lib/features/routing/resolvers/report.resolver.d.ts +7 -0
  166. package/lib/features/routing/services/report-menu.service.d.ts +30 -0
  167. package/lib/features/runtime/dynamic-renderer.component.d.ts +30 -0
  168. package/lib/features/runtime/index.d.ts +3 -0
  169. package/lib/features/runtime/report-grid-bridge.component.d.ts +94 -0
  170. package/lib/features/runtime/report-runtime.component.d.ts +26 -0
  171. package/lib/primitives/components/button/rpt-button.component.d.ts +19 -0
  172. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +45 -0
  173. package/lib/primitives/components/checkbox/rpt-checkbox.component.d.ts +14 -0
  174. package/lib/primitives/components/date/rpt-date.component.d.ts +17 -0
  175. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +32 -0
  176. package/lib/primitives/components/icon/rpt-icon.component.d.ts +41 -0
  177. package/lib/primitives/components/index.d.ts +12 -0
  178. package/lib/primitives/components/input/rpt-input.component.d.ts +16 -0
  179. package/lib/primitives/components/kpi-card/rpt-kpi-card.component.d.ts +43 -0
  180. package/lib/primitives/components/number/rpt-number.component.d.ts +20 -0
  181. package/lib/primitives/index.d.ts +2 -0
  182. package/lib/primitives/register-builtins.d.ts +11 -0
  183. package/lib/provide-reporting.d.ts +75 -0
  184. package/package.json +55 -0
  185. package/public-api.d.ts +5 -0
@@ -0,0 +1,53 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ReportDefinition, ReportSummary } from '../../../core/models/report-definition.model';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * ReportStoreService manages application-wide cached report states,
6
+ * listing, and reactive access via Angular signals.
7
+ */
8
+ export declare class ReportStoreService {
9
+ private readonly adapter;
10
+ private readonly validator;
11
+ /** List of all known report summaries */
12
+ readonly summaries: import("@angular/core").WritableSignal<ReportSummary[]>;
13
+ /** In-memory cache of loaded full report definitions by ID */
14
+ private readonly cache;
15
+ /** Currently selected report ID */
16
+ readonly activeReportId: import("@angular/core").WritableSignal<string | null>;
17
+ /** Loading state indicator */
18
+ readonly isLoading: import("@angular/core").WritableSignal<boolean>;
19
+ /** Current error message */
20
+ readonly error: import("@angular/core").WritableSignal<string | null>;
21
+ /** Active report definition computed from cache */
22
+ readonly activeReport: import("@angular/core").Signal<ReportDefinition | null>;
23
+ /**
24
+ * Fetches the list of all available reports.
25
+ */
26
+ loadSummaries(): Observable<ReportSummary[]>;
27
+ /**
28
+ * Loads a report definition by ID, using cached instance if available.
29
+ *
30
+ * @param reportId - ID of the report to load.
31
+ * @param forceRefresh - If true, bypasses the in-memory cache.
32
+ */
33
+ loadReport(reportId: string, forceRefresh?: boolean): Observable<ReportDefinition>;
34
+ /**
35
+ * Saves a report definition, validates it, and updates local cache.
36
+ */
37
+ saveReport(report: ReportDefinition): Observable<ReportDefinition>;
38
+ /**
39
+ * Deletes a report definition by ID.
40
+ */
41
+ deleteReport(reportId: string): Observable<void>;
42
+ /**
43
+ * Sets the active report ID.
44
+ */
45
+ setActiveReport(id: string | null): void;
46
+ /**
47
+ * Clears the in-memory cache.
48
+ */
49
+ clearCache(): void;
50
+ private updateSummaryInList;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportStoreService, never>;
52
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportStoreService>;
53
+ }
@@ -0,0 +1,29 @@
1
+ import { ReportDefinition } from '../../../core/models/report-definition.model';
2
+ import * as i0 from "@angular/core";
3
+ export interface ReportDiffSummary {
4
+ hasLayoutChanges: boolean;
5
+ hasGridChanges: boolean;
6
+ addedComponentIds: string[];
7
+ removedComponentIds: string[];
8
+ modifiedComponentIds: string[];
9
+ }
10
+ /**
11
+ * ReportVersioningService manages the draft and publishing lifecycle of report definitions.
12
+ */
13
+ export declare class ReportVersioningService {
14
+ private readonly validator;
15
+ /**
16
+ * Prepares a new draft version from an existing definition.
17
+ */
18
+ createDraft(report: ReportDefinition): ReportDefinition;
19
+ /**
20
+ * Publishes a draft report definition, validating its integrity and incrementing its version.
21
+ */
22
+ publish(report: ReportDefinition): ReportDefinition;
23
+ /**
24
+ * Compares two versions of a report definition to produce a structured diff summary.
25
+ */
26
+ compareVersions(v1: ReportDefinition, v2: ReportDefinition): ReportDiffSummary;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportVersioningService, never>;
28
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportVersioningService>;
29
+ }
@@ -0,0 +1,34 @@
1
+ import { ReportDefinition } from '../../../core/models/report-definition.model';
2
+ import * as i0 from "@angular/core";
3
+ export interface SchemaValidationResult {
4
+ valid: boolean;
5
+ errors: string[];
6
+ warnings: string[];
7
+ }
8
+ /**
9
+ * Pure function that validates the integrity and constraints of a ReportDefinition.
10
+ *
11
+ * Checks:
12
+ * - ID and Name presence
13
+ * - Unique component IDs
14
+ * - Unique parameter/input keys
15
+ * - Grid data source references
16
+ * - Column span boundary violations
17
+ */
18
+ export declare function validateReportSchema(definition: ReportDefinition): SchemaValidationResult;
19
+ /**
20
+ * SchemaValidatorService provides schema verification methods.
21
+ */
22
+ export declare class SchemaValidatorService {
23
+ /**
24
+ * Validates a report definition and returns errors/warnings without throwing.
25
+ */
26
+ validate(definition: ReportDefinition): SchemaValidationResult;
27
+ /**
28
+ * Asserts that a report definition is valid.
29
+ * Throws `ReportDefinitionError` if any validation error is detected.
30
+ */
31
+ assertValid(definition: ReportDefinition): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<SchemaValidatorService, never>;
33
+ static ɵprov: i0.ɵɵInjectableDeclaration<SchemaValidatorService>;
34
+ }
@@ -0,0 +1,18 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { ReportDefinition } from '../../../core/models';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RoutedReportDesignerComponent implements OnInit {
5
+ private readonly route;
6
+ private readonly router;
7
+ private readonly store;
8
+ private readonly destroyRef;
9
+ readonly report: import("@angular/core").WritableSignal<ReportDefinition | null>;
10
+ readonly loading: import("@angular/core").WritableSignal<boolean>;
11
+ readonly savedFeedback: import("@angular/core").WritableSignal<boolean>;
12
+ ngOnInit(): void;
13
+ onSaveReport(updatedReport: ReportDefinition): void;
14
+ goBack(): void;
15
+ private createBlankReport;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<RoutedReportDesignerComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<RoutedReportDesignerComponent, "rpt-routed-designer", never, {}, {}, never, never, true, never>;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { ReportDefinition } from '../../../core/models';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RoutedReportRuntimeComponent implements OnInit {
5
+ private readonly route;
6
+ private readonly router;
7
+ private readonly store;
8
+ private readonly destroyRef;
9
+ readonly report: import("@angular/core").WritableSignal<ReportDefinition | null>;
10
+ readonly loading: import("@angular/core").WritableSignal<boolean>;
11
+ readonly canEdit: import("@angular/core").WritableSignal<boolean>;
12
+ ngOnInit(): void;
13
+ onReportExecuted(filters: Record<string, any>): void;
14
+ editReport(): void;
15
+ goBack(): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<RoutedReportRuntimeComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<RoutedReportRuntimeComponent, "rpt-routed-runtime", never, {}, {}, never, never, true, never>;
18
+ }
@@ -0,0 +1,6 @@
1
+ export type { ReportRoutingConfig, ReportMenuItem, ReportMenuGroup } from './models/report-route.models';
2
+ export { reportResolver } from './resolvers/report.resolver';
3
+ export { RoutedReportRuntimeComponent } from './components/routed-report-runtime.component';
4
+ export { RoutedReportDesignerComponent } from './components/routed-report-designer.component';
5
+ export { createReportRoutes } from './report-routes';
6
+ export { ReportMenuService, groupReportsByCategory } from './services/report-menu.service';
@@ -0,0 +1,41 @@
1
+ import { Type } from '@angular/core';
2
+ import { CanActivateFn } from '@angular/router';
3
+ export interface ReportRoutingConfig {
4
+ /**
5
+ * Route path parameter name for the report ID.
6
+ * Defaults to 'reportId'.
7
+ */
8
+ reportIdParam?: string;
9
+ /**
10
+ * Whether to include designer routes (:reportId/edit and new).
11
+ * Defaults to true.
12
+ */
13
+ enableDesignerRoutes?: boolean;
14
+ /**
15
+ * Route guards to apply to runtime report routes.
16
+ */
17
+ runtimeGuards?: (CanActivateFn | Type<unknown>)[];
18
+ /**
19
+ * Route guards to apply to designer routes (e.g., admin / author role).
20
+ */
21
+ designerGuards?: (CanActivateFn | Type<unknown>)[];
22
+ /**
23
+ * Custom customizer for generated routes.
24
+ */
25
+ extraRouteData?: Record<string, unknown>;
26
+ }
27
+ export interface ReportMenuItem {
28
+ id: string;
29
+ code: string;
30
+ name: string;
31
+ category: string;
32
+ icon?: string;
33
+ route: string;
34
+ isDraft?: boolean;
35
+ version?: number;
36
+ }
37
+ export interface ReportMenuGroup {
38
+ category: string;
39
+ displayName: string;
40
+ items: ReportMenuItem[];
41
+ }
@@ -0,0 +1,16 @@
1
+ import { Routes } from '@angular/router';
2
+ import { ReportRoutingConfig } from './models/report-route.models';
3
+ /**
4
+ * Generates Angular Route definitions for dynamic reporting pages in a host application.
5
+ *
6
+ * Example usage in host app's app.routes.ts:
7
+ * ```typescript
8
+ * export const routes: Routes = [
9
+ * {
10
+ * path: 'reports',
11
+ * children: createReportRoutes()
12
+ * }
13
+ * ];
14
+ * ```
15
+ */
16
+ export declare function createReportRoutes(config?: ReportRoutingConfig): Routes;
@@ -0,0 +1,7 @@
1
+ import { ResolveFn } from '@angular/router';
2
+ import { ReportDefinition } from '../../../core/models';
3
+ /**
4
+ * Functional resolver that fetches a ReportDefinition using ReportStoreService
5
+ * based on the :reportId route parameter.
6
+ */
7
+ export declare const reportResolver: ResolveFn<ReportDefinition | null>;
@@ -0,0 +1,30 @@
1
+ import { ReportSummary } from '../../../core/models';
2
+ import { ReportMenuGroup } from '../models/report-route.models';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Pure helper function to transform flat ReportSummary array into hierarchical
6
+ * menu groups for host ERP navigation sidebars or dropdowns.
7
+ */
8
+ export declare function groupReportsByCategory(reports: ReportSummary[], basePath?: string): ReportMenuGroup[];
9
+ /**
10
+ * Reactive service providing dynamically computed menu groups and items
11
+ * from the active ReportStoreService for host ERP sidebar navigation.
12
+ */
13
+ export declare class ReportMenuService {
14
+ private readonly store;
15
+ readonly basePath: import("@angular/core").WritableSignal<string>;
16
+ readonly searchQuery: import("@angular/core").WritableSignal<string>;
17
+ /**
18
+ * Computed hierarchical menu groups grouped by report category.
19
+ */
20
+ readonly menuGroups: import("@angular/core").Signal<ReportMenuGroup[]>;
21
+ /**
22
+ * Total count of available reports in the menu.
23
+ */
24
+ readonly totalReportsCount: import("@angular/core").Signal<number>;
25
+ setBasePath(path: string): void;
26
+ setSearchQuery(query: string): void;
27
+ refreshMenu(): void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportMenuService, never>;
29
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportMenuService>;
30
+ }
@@ -0,0 +1,30 @@
1
+ import { Type } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { ReportDefinition } from '../../core/models/report-definition.model';
4
+ import { ReportComponentDefinition } from '../../core/models/report-component.model';
5
+ import { ComponentActionDefinition } from '../../core/models/component-event.model';
6
+ import * as i0 from "@angular/core";
7
+ export declare class DynamicRendererComponent {
8
+ private readonly registry;
9
+ private readonly formBuilder;
10
+ readonly definition: import("@angular/core").InputSignal<ReportDefinition>;
11
+ readonly initialValues: import("@angular/core").InputSignal<Record<string, unknown>>;
12
+ readonly resultData: import("@angular/core").InputSignal<unknown[] | null>;
13
+ readonly executeRequested: import("@angular/core").OutputEmitterRef<{
14
+ definition: ReportDefinition;
15
+ parameters: Record<string, unknown>;
16
+ }>;
17
+ readonly form: import("@angular/core").Signal<FormGroup<any>>;
18
+ readonly sortedComponents: import("@angular/core").Signal<ReportComponentDefinition[]>;
19
+ readonly totalGridColumns: import("@angular/core").Signal<number>;
20
+ readonly gridColumnsTemplate: import("@angular/core").Signal<string>;
21
+ resolveComponent(type: string): Type<unknown> | null;
22
+ getComponentInputs(comp: ReportComponentDefinition): Record<string, unknown>;
23
+ getGridColumn(comp: ReportComponentDefinition): string;
24
+ getGridRow(comp: ReportComponentDefinition): string;
25
+ isComponentVisible(comp: ReportComponentDefinition): boolean;
26
+ onSubmit(): void;
27
+ handleAction(action: ComponentActionDefinition): void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicRendererComponent, never>;
29
+ 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"; }, never, never, true, never>;
30
+ }
@@ -0,0 +1,3 @@
1
+ export { ReportRuntimeComponent } from './report-runtime.component';
2
+ export { DynamicRendererComponent } from './dynamic-renderer.component';
3
+ export { ReportGridBridgeComponent } from './report-grid-bridge.component';
@@ -0,0 +1,94 @@
1
+ import { Type } from '@angular/core';
2
+ import { GridColumnDefinition, ReportGridDefinition } from '../../core/models/report-grid.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ReportGridBridgeComponent {
5
+ private readonly injectedGrid;
6
+ readonly gridDefinition: import("@angular/core").InputSignal<ReportGridDefinition>;
7
+ readonly data: import("@angular/core").InputSignal<unknown[]>;
8
+ readonly customGridComponent: import("@angular/core").Signal<Type<unknown> | null>;
9
+ readonly sortColumn: import("@angular/core").WritableSignal<string | null>;
10
+ readonly sortDirection: import("@angular/core").WritableSignal<"desc" | "asc">;
11
+ readonly currentPage: import("@angular/core").WritableSignal<number>;
12
+ readonly bridgedColumns: import("@angular/core").Signal<{
13
+ headerName: string;
14
+ header: string;
15
+ title: string;
16
+ hide: boolean;
17
+ width: number | undefined;
18
+ aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
19
+ field: string;
20
+ label: string;
21
+ dataType?: "string" | "number" | "date" | "boolean" | "currency";
22
+ format?: string;
23
+ sortable?: boolean;
24
+ filterable?: boolean;
25
+ align?: "left" | "center" | "right";
26
+ visible?: boolean;
27
+ pinned?: "left" | "right" | false;
28
+ order?: number;
29
+ aggregate?: "sum" | "avg" | "count" | "min" | "max" | "none";
30
+ }[]>;
31
+ readonly gridInputs: import("@angular/core").Signal<{
32
+ columns: {
33
+ headerName: string;
34
+ header: string;
35
+ title: string;
36
+ hide: boolean;
37
+ width: number | undefined;
38
+ aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
39
+ field: string;
40
+ label: string;
41
+ dataType?: "string" | "number" | "date" | "boolean" | "currency";
42
+ format?: string;
43
+ sortable?: boolean;
44
+ filterable?: boolean;
45
+ align?: "left" | "center" | "right";
46
+ visible?: boolean;
47
+ pinned?: "left" | "right" | false;
48
+ order?: number;
49
+ aggregate?: "sum" | "avg" | "count" | "min" | "max" | "none";
50
+ }[];
51
+ columnDefs: {
52
+ headerName: string;
53
+ header: string;
54
+ title: string;
55
+ hide: boolean;
56
+ width: number | undefined;
57
+ aggFunc: "sum" | "avg" | "count" | "min" | "max" | undefined;
58
+ field: string;
59
+ label: string;
60
+ dataType?: "string" | "number" | "date" | "boolean" | "currency";
61
+ format?: string;
62
+ sortable?: boolean;
63
+ filterable?: boolean;
64
+ align?: "left" | "center" | "right";
65
+ visible?: boolean;
66
+ pinned?: "left" | "right" | false;
67
+ order?: number;
68
+ aggregate?: "sum" | "avg" | "count" | "min" | "max" | "none";
69
+ }[];
70
+ data: unknown[];
71
+ rowData: unknown[];
72
+ options: import("../../core/models/report-grid.model").GridOptionsDefinition | undefined;
73
+ config: import("../../core/models/report-grid.model").GridOptionsDefinition | undefined;
74
+ pagination: boolean;
75
+ pageSize: number;
76
+ }>;
77
+ readonly visibleColumns: import("@angular/core").Signal<GridColumnDefinition[]>;
78
+ readonly showRowNumbers: import("@angular/core").Signal<boolean>;
79
+ readonly isPaginationEnabled: import("@angular/core").Signal<boolean>;
80
+ readonly pageSize: import("@angular/core").Signal<number>;
81
+ readonly colSpan: import("@angular/core").Signal<number>;
82
+ readonly hasAggregates: import("@angular/core").Signal<boolean | undefined>;
83
+ readonly sortedData: import("@angular/core").Signal<Record<string, unknown>[]>;
84
+ readonly totalPages: import("@angular/core").Signal<number>;
85
+ readonly paginatedData: import("@angular/core").Signal<Record<string, unknown>[]>;
86
+ getJustifyContent(align?: 'left' | 'center' | 'right'): string;
87
+ toggleSort(col: GridColumnDefinition): void;
88
+ prevPage(): void;
89
+ nextPage(): void;
90
+ formatValue(value: unknown, col: GridColumnDefinition): string;
91
+ computeAggregate(col: GridColumnDefinition): string;
92
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportGridBridgeComponent, never>;
93
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportGridBridgeComponent, "rpt-grid-bridge", never, { "gridDefinition": { "alias": "gridDefinition"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
94
+ }
@@ -0,0 +1,26 @@
1
+ import { ReportDefinition } from '../../core/models/report-definition.model';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ReportRuntimeComponent {
4
+ private readonly persistenceAdapter;
5
+ private readonly dataSourceAdapter;
6
+ private readonly sessionService;
7
+ /** Report ID to load via persistence adapter */
8
+ readonly reportId: import("@angular/core").InputSignal<string | undefined>;
9
+ /** Directly passed report definition (skips persistence adapter) */
10
+ readonly definition: import("@angular/core").InputSignal<ReportDefinition | null>;
11
+ readonly internalDefinition: import("@angular/core").WritableSignal<ReportDefinition | null>;
12
+ readonly resultData: import("@angular/core").WritableSignal<unknown[] | null>;
13
+ readonly isLoading: import("@angular/core").WritableSignal<boolean>;
14
+ readonly loadingMessage: import("@angular/core").WritableSignal<string>;
15
+ readonly errorMessage: import("@angular/core").WritableSignal<string | null>;
16
+ readonly currentDefinition: import("@angular/core").Signal<ReportDefinition | null>;
17
+ constructor();
18
+ loadReport(id: string): void;
19
+ onExecuteReport(event: {
20
+ definition: ReportDefinition;
21
+ parameters: Record<string, unknown>;
22
+ }): void;
23
+ retry(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportRuntimeComponent, never>;
25
+ 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; }; }, {}, never, never, true, never>;
26
+ }
@@ -0,0 +1,19 @@
1
+ import { ReportComponentDefinition } from '../../../core/models/report-component.model';
2
+ import { ComponentActionDefinition } from '../../../core/models/component-event.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RptButtonComponent {
5
+ readonly config: import("@angular/core").InputSignal<ReportComponentDefinition>;
6
+ readonly actionTriggered: import("@angular/core").OutputEmitterRef<ComponentActionDefinition>;
7
+ readonly elementId: import("@angular/core").Signal<string>;
8
+ readonly buttonLabel: import("@angular/core").Signal<string>;
9
+ readonly buttonHtmlType: import("@angular/core").Signal<"submit" | "button">;
10
+ readonly isDisabled: import("@angular/core").Signal<boolean>;
11
+ readonly icon: import("@angular/core").Signal<string>;
12
+ readonly buttonClasses: import("@angular/core").Signal<string>;
13
+ readonly isFullWidth: import("@angular/core").Signal<boolean>;
14
+ readonly customHeight: import("@angular/core").Signal<string | null>;
15
+ readonly customWidth: import("@angular/core").Signal<string | null>;
16
+ onClick(event: MouseEvent): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptButtonComponent, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptButtonComponent, "rpt-button", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
19
+ }
@@ -0,0 +1,45 @@
1
+ import { Type } from '@angular/core';
2
+ import { ReportComponentDefinition } from '../../../core/models/report-component.model';
3
+ import * as i0 from "@angular/core";
4
+ export interface ChartDataItem {
5
+ label: string;
6
+ value: number;
7
+ color?: string;
8
+ }
9
+ export type ChartType = 'bar' | 'line' | 'donut';
10
+ export declare class ReportChartBridgeComponent {
11
+ readonly hostChartComponent: Type<unknown> | null;
12
+ readonly definition: import("@angular/core").InputSignal<ReportComponentDefinition | undefined>;
13
+ readonly customData: import("@angular/core").InputSignal<ChartDataItem[] | undefined>;
14
+ readonly customChartType: import("@angular/core").InputSignal<ChartType | undefined>;
15
+ readonly customTitle: import("@angular/core").InputSignal<string | undefined>;
16
+ readonly customOptions: import("@angular/core").InputSignal<Record<string, any>>;
17
+ readonly defaultColors: string[];
18
+ readonly title: import("@angular/core").Signal<string>;
19
+ readonly chartType: import("@angular/core").Signal<ChartType>;
20
+ readonly data: import("@angular/core").Signal<ChartDataItem[]>;
21
+ readonly options: import("@angular/core").Signal<{
22
+ [x: string]: any;
23
+ }>;
24
+ readonly maxValue: import("@angular/core").Signal<number>;
25
+ readonly totalValue: import("@angular/core").Signal<number>;
26
+ getBarPercentage(value: number): number;
27
+ readonly donutSegments: import("@angular/core").Signal<{
28
+ label: string;
29
+ color: string;
30
+ dashArray: string;
31
+ dashOffset: number;
32
+ }[]>;
33
+ readonly linePoints: import("@angular/core").Signal<{
34
+ linePath: string;
35
+ areaPath: string;
36
+ points: {
37
+ x: number;
38
+ y: number;
39
+ label: string;
40
+ value: number;
41
+ }[];
42
+ }>;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportChartBridgeComponent, never>;
44
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportChartBridgeComponent, "rpt-chart-bridge", never, { "definition": { "alias": "definition"; "required": false; "isSignal": true; }; "customData": { "alias": "data"; "required": false; "isSignal": true; }; "customChartType": { "alias": "chartType"; "required": false; "isSignal": true; }; "customTitle": { "alias": "title"; "required": false; "isSignal": true; }; "customOptions": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
45
+ }
@@ -0,0 +1,14 @@
1
+ import { FormControl } from '@angular/forms';
2
+ import { ReportComponentDefinition } from '../../../core/models/report-component.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RptCheckboxComponent {
5
+ readonly config: import("@angular/core").InputSignal<ReportComponentDefinition>;
6
+ readonly control: import("@angular/core").InputSignal<FormControl<any> | undefined>;
7
+ private readonly fallbackControl;
8
+ readonly formControl: import("@angular/core").Signal<FormControl<any>>;
9
+ readonly elementId: import("@angular/core").Signal<string>;
10
+ readonly isInvalid: import("@angular/core").Signal<boolean>;
11
+ readonly errorMessage: import("@angular/core").Signal<string>;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptCheckboxComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptCheckboxComponent, "rpt-checkbox", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14
+ }
@@ -0,0 +1,17 @@
1
+ import { FormControl } from '@angular/forms';
2
+ import { ReportComponentDefinition } from '../../../core/models/report-component.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RptDateComponent {
5
+ readonly config: import("@angular/core").InputSignal<ReportComponentDefinition>;
6
+ readonly control: import("@angular/core").InputSignal<FormControl<any> | undefined>;
7
+ private readonly fallbackControl;
8
+ readonly formControl: import("@angular/core").Signal<FormControl<any>>;
9
+ readonly elementId: import("@angular/core").Signal<string>;
10
+ readonly dateType: import("@angular/core").Signal<"date" | "datetime-local">;
11
+ readonly minDate: import("@angular/core").Signal<string | null>;
12
+ readonly maxDate: import("@angular/core").Signal<string | null>;
13
+ readonly isInvalid: import("@angular/core").Signal<boolean>;
14
+ readonly errorMessage: import("@angular/core").Signal<string>;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptDateComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptDateComponent, "rpt-date", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17
+ }
@@ -0,0 +1,32 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import { ReportComponentDefinition } from '../../../core/models/report-component.model';
4
+ import * as i0 from "@angular/core";
5
+ export interface DropdownOption {
6
+ key: string | number;
7
+ label: string;
8
+ }
9
+ export declare class RptDropdownComponent implements OnInit, OnDestroy {
10
+ private readonly masterDataProvider;
11
+ private readonly lookupAdapter;
12
+ private readonly sessionService;
13
+ readonly config: import("@angular/core").InputSignal<ReportComponentDefinition>;
14
+ readonly control: import("@angular/core").InputSignal<FormControl<any> | undefined>;
15
+ private readonly fallbackControl;
16
+ private readonly dynamicOptions;
17
+ private lookupSub?;
18
+ private masterDataSub?;
19
+ readonly formControl: import("@angular/core").Signal<FormControl<any>>;
20
+ readonly elementId: import("@angular/core").Signal<string>;
21
+ readonly placeholder: import("@angular/core").Signal<string>;
22
+ readonly staticOptions: import("@angular/core").Signal<DropdownOption[]>;
23
+ readonly allOptions: import("@angular/core").Signal<DropdownOption[]>;
24
+ readonly isInvalid: import("@angular/core").Signal<boolean>;
25
+ readonly errorMessage: import("@angular/core").Signal<string>;
26
+ constructor();
27
+ ngOnInit(): void;
28
+ ngOnDestroy(): void;
29
+ private reloadDataSourceOptions;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptDropdownComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptDropdownComponent, "rpt-dropdown", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
32
+ }
@@ -0,0 +1,41 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Enterprise SVG Icon component for BWays-Report.
4
+ * Provides crisp, scalable vector icons without external font dependencies.
5
+ */
6
+ export declare class RptIconComponent {
7
+ /** Icon name (e.g. 'search', 'edit', 'save', 'kpi', 'chart-bar', 'trend-up') */
8
+ readonly name: import("@angular/core").InputSignal<string>;
9
+ /** Icon dimension in pixels. Defaults to 16. */
10
+ readonly size: import("@angular/core").InputSignal<number>;
11
+ /** Stroke/fill color. Defaults to 'currentColor'. */
12
+ readonly color: import("@angular/core").InputSignal<string>;
13
+ /** Stroke width for line-based icons. Defaults to 2. */
14
+ readonly strokeWidth: import("@angular/core").InputSignal<number>;
15
+ readonly viewBox: import("@angular/core").Signal<string>;
16
+ readonly stroke: import("@angular/core").Signal<string>;
17
+ readonly fill: import("@angular/core").Signal<string>;
18
+ private readonly iconData;
19
+ readonly paths: import("@angular/core").Signal<string[]>;
20
+ readonly circles: import("@angular/core").Signal<{
21
+ cx: number;
22
+ cy: number;
23
+ r: number;
24
+ }[]>;
25
+ readonly rects: import("@angular/core").Signal<{
26
+ x: number;
27
+ y: number;
28
+ width: number;
29
+ height: number;
30
+ rx?: number;
31
+ }[]>;
32
+ readonly lines: import("@angular/core").Signal<{
33
+ x1: number;
34
+ y1: number;
35
+ x2: number;
36
+ y2: number;
37
+ }[]>;
38
+ readonly polylines: import("@angular/core").Signal<string[]>;
39
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptIconComponent, never>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptIconComponent, "rpt-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
41
+ }
@@ -0,0 +1,12 @@
1
+ export { RptInputComponent } from './input/rpt-input.component';
2
+ export { RptDropdownComponent } from './dropdown/rpt-dropdown.component';
3
+ export type { DropdownOption } from './dropdown/rpt-dropdown.component';
4
+ export { RptDateComponent } from './date/rpt-date.component';
5
+ export { RptNumberComponent } from './number/rpt-number.component';
6
+ export { RptCheckboxComponent } from './checkbox/rpt-checkbox.component';
7
+ export { RptButtonComponent } from './button/rpt-button.component';
8
+ export { RptKpiCardComponent } from './kpi-card/rpt-kpi-card.component';
9
+ export type { KpiTheme, TrendDirection } from './kpi-card/rpt-kpi-card.component';
10
+ export { ReportChartBridgeComponent } from './chart-bridge/report-chart-bridge.component';
11
+ export type { ChartDataItem, ChartType } from './chart-bridge/report-chart-bridge.component';
12
+ export { RptIconComponent } from './icon/rpt-icon.component';
@@ -0,0 +1,16 @@
1
+ import { FormControl } from '@angular/forms';
2
+ import { ReportComponentDefinition } from '../../../core/models/report-component.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RptInputComponent {
5
+ readonly config: import("@angular/core").InputSignal<ReportComponentDefinition>;
6
+ readonly control: import("@angular/core").InputSignal<FormControl<any> | undefined>;
7
+ private readonly fallbackControl;
8
+ readonly formControl: import("@angular/core").Signal<FormControl<any>>;
9
+ readonly elementId: import("@angular/core").Signal<string>;
10
+ readonly inputType: import("@angular/core").Signal<string>;
11
+ readonly placeholder: import("@angular/core").Signal<string>;
12
+ readonly isInvalid: import("@angular/core").Signal<boolean>;
13
+ readonly errorMessage: import("@angular/core").Signal<string>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<RptInputComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<RptInputComponent, "rpt-input", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "control": { "alias": "control"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16
+ }