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.
- package/LICENSE +26 -0
- package/README.md +477 -0
- package/esm2022/bways-report.mjs +5 -0
- package/esm2022/lib/core/errors/index.mjs +2 -0
- package/esm2022/lib/core/errors/reporting-errors.mjs +65 -0
- package/esm2022/lib/core/index.mjs +8 -0
- package/esm2022/lib/core/models/component-event.model.mjs +8 -0
- package/esm2022/lib/core/models/index.mjs +5 -0
- package/esm2022/lib/core/models/report-component.model.mjs +10 -0
- package/esm2022/lib/core/models/report-datasource.model.mjs +9 -0
- package/esm2022/lib/core/models/report-definition.model.mjs +13 -0
- package/esm2022/lib/core/models/report-grid.model.mjs +10 -0
- package/esm2022/lib/core/models/report-layout.model.mjs +9 -0
- package/esm2022/lib/core/models/report-parameter.model.mjs +9 -0
- package/esm2022/lib/core/models/validation.model.mjs +8 -0
- package/esm2022/lib/core/registry/component-category.mjs +8 -0
- package/esm2022/lib/core/registry/component-registry.mjs +90 -0
- package/esm2022/lib/core/registry/index.mjs +2 -0
- package/esm2022/lib/core/registry/property-definition.model.mjs +10 -0
- package/esm2022/lib/core/services/dynamic-form-builder.service.mjs +55 -0
- package/esm2022/lib/core/services/index.mjs +3 -0
- package/esm2022/lib/core/services/report-session-context.service.mjs +314 -0
- package/esm2022/lib/core/tokens/index.mjs +3 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +26 -0
- package/esm2022/lib/core/tokens/session-context.token.mjs +18 -0
- package/esm2022/lib/core/utilities/id-generator.mjs +17 -0
- package/esm2022/lib/core/utilities/index.mjs +3 -0
- package/esm2022/lib/core/utilities/schema-migration.mjs +38 -0
- package/esm2022/lib/core/utils/identifier-humanizer.mjs +88 -0
- package/esm2022/lib/core/validation/index.mjs +2 -0
- package/esm2022/lib/core/validation/validation-factory.mjs +70 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +107 -0
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +119 -0
- package/esm2022/lib/data-access/adapters/index.mjs +3 -0
- package/esm2022/lib/data-access/contracts/data-source.contract.mjs +28 -0
- package/esm2022/lib/data-access/contracts/index.mjs +7 -0
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +6 -0
- package/esm2022/lib/data-access/contracts/master-data.provider.mjs +24 -0
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +25 -0
- package/esm2022/lib/data-access/contracts/schema-discovery.contract.mjs +7 -0
- package/esm2022/lib/data-access/contracts/translation.contract.mjs +9 -0
- package/esm2022/lib/data-access/index.mjs +3 -0
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +542 -0
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +843 -0
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +556 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +845 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +185 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +452 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +350 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +175 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +137 -0
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +608 -0
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +225 -0
- package/esm2022/lib/features/designer/designer.component.mjs +285 -0
- package/esm2022/lib/features/designer/index.mjs +7 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +310 -0
- package/esm2022/lib/features/designer/services/index.mjs +2 -0
- package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +124 -0
- package/esm2022/lib/features/export/index.mjs +2 -0
- package/esm2022/lib/features/export/models/export.models.mjs +2 -0
- package/esm2022/lib/features/export/services/report-export.service.mjs +107 -0
- package/esm2022/lib/features/index.mjs +6 -0
- package/esm2022/lib/features/persistence/index.mjs +2 -0
- package/esm2022/lib/features/persistence/services/index.mjs +4 -0
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +183 -0
- package/esm2022/lib/features/persistence/services/report-versioning.service.mjs +81 -0
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +102 -0
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +156 -0
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +163 -0
- package/esm2022/lib/features/routing/index.mjs +6 -0
- package/esm2022/lib/features/routing/models/report-route.models.mjs +2 -0
- package/esm2022/lib/features/routing/report-routes.mjs +49 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +22 -0
- package/esm2022/lib/features/routing/services/report-menu.service.mjs +77 -0
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +222 -0
- package/esm2022/lib/features/runtime/index.mjs +4 -0
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +409 -0
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +147 -0
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +88 -0
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +361 -0
- package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +86 -0
- package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +91 -0
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +204 -0
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +476 -0
- package/esm2022/lib/primitives/components/index.mjs +10 -0
- package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +88 -0
- package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +197 -0
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +110 -0
- package/esm2022/lib/primitives/index.mjs +3 -0
- package/esm2022/lib/primitives/register-builtins.mjs +328 -0
- package/esm2022/lib/provide-reporting.mjs +92 -0
- package/esm2022/public-api.mjs +9 -0
- package/fesm2022/bways-report.mjs +10360 -0
- package/fesm2022/bways-report.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/core/errors/index.d.ts +1 -0
- package/lib/core/errors/reporting-errors.d.ts +42 -0
- package/lib/core/index.d.ts +7 -0
- package/lib/core/models/component-event.model.d.ts +37 -0
- package/lib/core/models/index.d.ts +11 -0
- package/lib/core/models/report-component.model.d.ts +95 -0
- package/lib/core/models/report-datasource.model.d.ts +39 -0
- package/lib/core/models/report-definition.model.d.ts +100 -0
- package/lib/core/models/report-grid.model.d.ts +73 -0
- package/lib/core/models/report-layout.model.d.ts +43 -0
- package/lib/core/models/report-parameter.model.d.ts +22 -0
- package/lib/core/models/validation.model.d.ts +30 -0
- package/lib/core/registry/component-category.d.ts +16 -0
- package/lib/core/registry/component-registry.d.ts +101 -0
- package/lib/core/registry/index.d.ts +4 -0
- package/lib/core/registry/property-definition.model.d.ts +38 -0
- package/lib/core/services/dynamic-form-builder.service.d.ts +30 -0
- package/lib/core/services/index.d.ts +3 -0
- package/lib/core/services/report-session-context.service.d.ts +87 -0
- package/lib/core/tokens/index.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +42 -0
- package/lib/core/tokens/session-context.token.d.ts +36 -0
- package/lib/core/utilities/id-generator.d.ts +9 -0
- package/lib/core/utilities/index.d.ts +3 -0
- package/lib/core/utilities/schema-migration.d.ts +10 -0
- package/lib/core/utils/identifier-humanizer.d.ts +22 -0
- package/lib/core/validation/index.d.ts +1 -0
- package/lib/core/validation/validation-factory.d.ts +31 -0
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +19 -0
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +20 -0
- package/lib/data-access/adapters/index.d.ts +2 -0
- package/lib/data-access/contracts/data-source.contract.d.ts +37 -0
- package/lib/data-access/contracts/index.d.ts +9 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +32 -0
- package/lib/data-access/contracts/master-data.provider.d.ts +54 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +36 -0
- package/lib/data-access/contracts/schema-discovery.contract.d.ts +52 -0
- package/lib/data-access/contracts/translation.contract.d.ts +16 -0
- package/lib/data-access/index.d.ts +2 -0
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +39 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +42 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +36 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +68 -0
- package/lib/features/designer/components/property-editor/property-editor-general.component.d.ts +20 -0
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -0
- package/lib/features/designer/components/property-editor/property-editor-layout.component.d.ts +18 -0
- package/lib/features/designer/components/property-editor/property-editor-report.component.d.ts +15 -0
- package/lib/features/designer/components/property-editor/property-editor-validation.component.d.ts +12 -0
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +44 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +18 -0
- package/lib/features/designer/designer.component.d.ts +36 -0
- package/lib/features/designer/index.d.ts +7 -0
- package/lib/features/designer/services/designer-state.service.d.ts +103 -0
- package/lib/features/designer/services/index.d.ts +2 -0
- package/lib/features/designer/utilities/canvas-layout.util.d.ts +55 -0
- package/lib/features/export/index.d.ts +2 -0
- package/lib/features/export/models/export.models.d.ts +16 -0
- package/lib/features/export/services/report-export.service.d.ts +27 -0
- package/lib/features/index.d.ts +5 -0
- package/lib/features/persistence/index.d.ts +1 -0
- package/lib/features/persistence/services/index.d.ts +5 -0
- package/lib/features/persistence/services/report-store.service.d.ts +53 -0
- package/lib/features/persistence/services/report-versioning.service.d.ts +29 -0
- package/lib/features/persistence/services/schema-validator.service.d.ts +34 -0
- package/lib/features/routing/components/routed-report-designer.component.d.ts +18 -0
- package/lib/features/routing/components/routed-report-runtime.component.d.ts +18 -0
- package/lib/features/routing/index.d.ts +6 -0
- package/lib/features/routing/models/report-route.models.d.ts +41 -0
- package/lib/features/routing/report-routes.d.ts +16 -0
- package/lib/features/routing/resolvers/report.resolver.d.ts +7 -0
- package/lib/features/routing/services/report-menu.service.d.ts +30 -0
- package/lib/features/runtime/dynamic-renderer.component.d.ts +30 -0
- package/lib/features/runtime/index.d.ts +3 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +94 -0
- package/lib/features/runtime/report-runtime.component.d.ts +26 -0
- package/lib/primitives/components/button/rpt-button.component.d.ts +19 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +45 -0
- package/lib/primitives/components/checkbox/rpt-checkbox.component.d.ts +14 -0
- package/lib/primitives/components/date/rpt-date.component.d.ts +17 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +32 -0
- package/lib/primitives/components/icon/rpt-icon.component.d.ts +41 -0
- package/lib/primitives/components/index.d.ts +12 -0
- package/lib/primitives/components/input/rpt-input.component.d.ts +16 -0
- package/lib/primitives/components/kpi-card/rpt-kpi-card.component.d.ts +43 -0
- package/lib/primitives/components/number/rpt-number.component.d.ts +20 -0
- package/lib/primitives/index.d.ts +2 -0
- package/lib/primitives/register-builtins.d.ts +11 -0
- package/lib/provide-reporting.d.ts +75 -0
- package/package.json +55 -0
- package/public-api.d.ts +5 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
|
2
|
+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { getValidationMessage } from '../../../core/validation/validation-factory';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
export class RptInputComponent {
|
|
7
|
+
config = input.required();
|
|
8
|
+
control = input();
|
|
9
|
+
fallbackControl = new FormControl('');
|
|
10
|
+
formControl = computed(() => this.control() ?? this.fallbackControl);
|
|
11
|
+
elementId = computed(() => this.config().key || this.config().id);
|
|
12
|
+
inputType = computed(() => this.config().properties?.['type'] || 'text');
|
|
13
|
+
placeholder = computed(() => this.config().properties?.['placeholder'] || '');
|
|
14
|
+
isInvalid = computed(() => {
|
|
15
|
+
const ctrl = this.formControl();
|
|
16
|
+
return ctrl.invalid && (ctrl.dirty || ctrl.touched);
|
|
17
|
+
});
|
|
18
|
+
errorMessage = computed(() => {
|
|
19
|
+
const ctrl = this.formControl();
|
|
20
|
+
if (!ctrl.invalid || (!ctrl.dirty && !ctrl.touched)) {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
const errors = ctrl.errors;
|
|
24
|
+
if (!errors)
|
|
25
|
+
return '';
|
|
26
|
+
const firstKey = Object.keys(errors)[0];
|
|
27
|
+
return getValidationMessage(this.config().validation, firstKey);
|
|
28
|
+
});
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptInputComponent, isStandalone: true, selector: "rpt-input", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
31
|
+
<div class="rpt-field-group">
|
|
32
|
+
@if (config().label) {
|
|
33
|
+
<label [for]="elementId()" class="rpt-label">
|
|
34
|
+
{{ config().label }}
|
|
35
|
+
@if (config().validation?.required) {
|
|
36
|
+
<span class="rpt-required-marker">*</span>
|
|
37
|
+
}
|
|
38
|
+
</label>
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
<div class="rpt-input-wrapper">
|
|
42
|
+
<input
|
|
43
|
+
[id]="elementId()"
|
|
44
|
+
[type]="inputType()"
|
|
45
|
+
[formControl]="formControl()"
|
|
46
|
+
[placeholder]="placeholder()"
|
|
47
|
+
[class.rpt-invalid]="isInvalid()"
|
|
48
|
+
class="rpt-input"
|
|
49
|
+
/>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
@if (errorMessage()) {
|
|
53
|
+
<span class="rpt-error-text">{{ errorMessage() }}</span>
|
|
54
|
+
}
|
|
55
|
+
</div>
|
|
56
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:4px;box-sizing:border-box}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-input-wrapper{position:relative;width:100%;flex:1;min-height:0;display:flex}.rpt-input{width:100%;height:100%;min-height:38px;box-sizing:border-box;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease;outline:none}.rpt-input:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-input:focus{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-input:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-input.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-input.rpt-invalid:focus{box-shadow:0 0 0 3px #ef444440}.rpt-error-text{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);margin-top:2px}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptInputComponent, decorators: [{
|
|
59
|
+
type: Component,
|
|
60
|
+
args: [{ selector: 'rpt-input', standalone: true, imports: [ReactiveFormsModule], template: `
|
|
61
|
+
<div class="rpt-field-group">
|
|
62
|
+
@if (config().label) {
|
|
63
|
+
<label [for]="elementId()" class="rpt-label">
|
|
64
|
+
{{ config().label }}
|
|
65
|
+
@if (config().validation?.required) {
|
|
66
|
+
<span class="rpt-required-marker">*</span>
|
|
67
|
+
}
|
|
68
|
+
</label>
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
<div class="rpt-input-wrapper">
|
|
72
|
+
<input
|
|
73
|
+
[id]="elementId()"
|
|
74
|
+
[type]="inputType()"
|
|
75
|
+
[formControl]="formControl()"
|
|
76
|
+
[placeholder]="placeholder()"
|
|
77
|
+
[class.rpt-invalid]="isInvalid()"
|
|
78
|
+
class="rpt-input"
|
|
79
|
+
/>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
@if (errorMessage()) {
|
|
83
|
+
<span class="rpt-error-text">{{ errorMessage() }}</span>
|
|
84
|
+
}
|
|
85
|
+
</div>
|
|
86
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:4px;box-sizing:border-box}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-input-wrapper{position:relative;width:100%;flex:1;min-height:0;display:flex}.rpt-input{width:100%;height:100%;min-height:38px;box-sizing:border-box;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease;outline:none}.rpt-input:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-input:focus{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-input:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-input.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-input.rpt-invalid:focus{box-shadow:0 0 0 3px #ef444440}.rpt-error-text{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);margin-top:2px}\n"] }]
|
|
87
|
+
}] });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pbnB1dC9ycHQtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQTBHbkYsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUNyRCxPQUFPLEdBQUcsS0FBSyxFQUFlLENBQUM7SUFFdkIsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVyRSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBWSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0lBQ3JGLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTFGLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQzt3R0ExQlEsaUJBQWlCOzRGQUFqQixpQkFBaUIseVVBcEdsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQsd2pEQTNCUyxtQkFBbUI7OzRGQXFHbEIsaUJBQWlCO2tCQXhHN0IsU0FBUzsrQkFDRSxXQUFXLGNBQ1QsSUFBSSxXQUNQLENBQUMsbUJBQW1CLENBQUMsWUFDcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJULG1CQXdFZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdmFsaWRhdGlvbi92YWxpZGF0aW9uLWZhY3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1maWVsZC1ncm91cFwiPlxuICAgICAgQGlmIChjb25maWcoKS5sYWJlbCkge1xuICAgICAgICA8bGFiZWwgW2Zvcl09XCJlbGVtZW50SWQoKVwiIGNsYXNzPVwicnB0LWxhYmVsXCI+XG4gICAgICAgICAge3sgY29uZmlnKCkubGFiZWwgfX1cbiAgICAgICAgICBAaWYgKGNvbmZpZygpLnZhbGlkYXRpb24/LnJlcXVpcmVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1yZXF1aXJlZC1tYXJrZXJcIj4qPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKVwiXG4gICAgICAgICAgW3R5cGVdPVwiaW5wdXRUeXBlKClcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbCgpXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgW2NsYXNzLnJwdC1pbnZhbGlkXT1cImlzSW52YWxpZCgpXCJcbiAgICAgICAgICBjbGFzcz1cInJwdC1pbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChlcnJvck1lc3NhZ2UoKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1lcnJvci10ZXh0XCI+e3sgZXJyb3JNZXNzYWdlKCkgfX08L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgIH1cbiAgICAucnB0LWZpZWxkLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAucnB0LWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAucnB0LXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgIH1cbiAgICAucnB0LWlucHV0LXdyYXBwZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIC5ycHQtaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAzOHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2UsXG4gICAgICAgICAgICAgICAgICBib3gtc2hhZG93IHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICAgIC5ycHQtaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICB9XG4gICAgLnJwdC1pbnB1dDpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItZm9jdXMsICMyNTYzZWIpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3ctZm9jdXMsIDAgMCAwIDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KSk7XG4gICAgfVxuICAgIC5ycHQtaW5wdXQ6ZGlzYWJsZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICAgIC5ycHQtaW5wdXQucnB0LWludmFsaWQge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICB9XG4gICAgLnJwdC1pbnB1dC5ycHQtaW52YWxpZDpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMzksIDY4LCA2OCwgMC4yNSk7XG4gICAgfVxuICAgIC5ycHQtZXJyb3ItdGV4dCB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHRJbnB1dENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0LnJlcXVpcmVkPFJlcG9ydENvbXBvbmVudERlZmluaXRpb24+KCk7XG4gIHJlYWRvbmx5IGNvbnRyb2wgPSBpbnB1dDxGb3JtQ29udHJvbD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRyb2woKSA/PyB0aGlzLmZhbGxiYWNrQ29udHJvbCk7XG5cbiAgcmVhZG9ubHkgZWxlbWVudElkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5rZXkgfHwgdGhpcy5jb25maWcoKS5pZCk7XG4gIHJlYWRvbmx5IGlucHV0VHlwZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsndHlwZSddIGFzIHN0cmluZykgfHwgJ3RleHQnKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ3BsYWNlaG9sZGVyJ10gYXMgc3RyaW5nKSB8fCAnJyk7XG5cbiAgcmVhZG9ubHkgaXNJbnZhbGlkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGN0cmwuaW52YWxpZCAmJiAoY3RybC5kaXJ0eSB8fCBjdHJsLnRvdWNoZWQpO1xuICB9KTtcblxuICByZWFkb25seSBlcnJvck1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICBpZiAoIWN0cmwuaW52YWxpZCB8fCAoIWN0cmwuZGlydHkgJiYgIWN0cmwudG91Y2hlZCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZXJyb3JzID0gY3RybC5lcnJvcnM7XG4gICAgaWYgKCFlcnJvcnMpIHJldHVybiAnJztcbiAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgcmV0dXJuIGdldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnKCkudmFsaWRhdGlvbiwgZmlyc3RLZXkpO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { RptIconComponent } from '../icon/rpt-icon.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class RptKpiCardComponent {
|
|
6
|
+
/** Optional metadata component definition. */
|
|
7
|
+
definition = input();
|
|
8
|
+
/** Title of metric (e.g., 'Total Revenue'). */
|
|
9
|
+
customTitle = input(undefined, { alias: 'title' });
|
|
10
|
+
/** Metric value. */
|
|
11
|
+
customValue = input(undefined, { alias: 'value' });
|
|
12
|
+
/** Currency or unit prefix (e.g. '$'). */
|
|
13
|
+
customPrefix = input(undefined, { alias: 'prefix' });
|
|
14
|
+
/** Unit suffix (e.g. '%', 'items'). */
|
|
15
|
+
customSuffix = input(undefined, { alias: 'suffix' });
|
|
16
|
+
/** Theme accent color. */
|
|
17
|
+
customTheme = input(undefined, { alias: 'theme' });
|
|
18
|
+
/** Icon symbol or emoji. */
|
|
19
|
+
customIcon = input(undefined, { alias: 'icon' });
|
|
20
|
+
/** Trend direction: up | down | neutral */
|
|
21
|
+
customTrendDirection = input(undefined, { alias: 'trendDirection' });
|
|
22
|
+
/** Trend percentage value. */
|
|
23
|
+
customTrendValue = input(undefined, { alias: 'trendValue' });
|
|
24
|
+
/** Trend contextual label. */
|
|
25
|
+
customTrendLabel = input(undefined, { alias: 'trendLabel' });
|
|
26
|
+
/** Subtitle. */
|
|
27
|
+
customSubtitle = input(undefined, { alias: 'subtitle' });
|
|
28
|
+
// Computed properties merging definition properties and inputs
|
|
29
|
+
title = computed(() => {
|
|
30
|
+
return this.customTitle() ?? this.definition()?.properties?.['title'] ?? this.definition()?.label ?? 'Metric';
|
|
31
|
+
});
|
|
32
|
+
rawValue = computed(() => {
|
|
33
|
+
const val = this.customValue();
|
|
34
|
+
if (val !== undefined && val !== '')
|
|
35
|
+
return val;
|
|
36
|
+
return this.definition()?.properties?.['value'] ?? '0';
|
|
37
|
+
});
|
|
38
|
+
formattedValue = computed(() => {
|
|
39
|
+
const v = this.rawValue();
|
|
40
|
+
if (typeof v === 'number') {
|
|
41
|
+
return v.toLocaleString();
|
|
42
|
+
}
|
|
43
|
+
return String(v);
|
|
44
|
+
});
|
|
45
|
+
prefix = computed(() => {
|
|
46
|
+
return this.customPrefix() ?? this.definition()?.properties?.['prefix'] ?? '';
|
|
47
|
+
});
|
|
48
|
+
suffix = computed(() => {
|
|
49
|
+
return this.customSuffix() ?? this.definition()?.properties?.['suffix'] ?? '';
|
|
50
|
+
});
|
|
51
|
+
theme = computed(() => {
|
|
52
|
+
return (this.customTheme() ?? this.definition()?.properties?.['theme'] ?? 'primary');
|
|
53
|
+
});
|
|
54
|
+
icon = computed(() => {
|
|
55
|
+
return this.customIcon() ?? this.definition()?.properties?.['icon'] ?? '';
|
|
56
|
+
});
|
|
57
|
+
trendDirection = computed(() => {
|
|
58
|
+
return (this.customTrendDirection() ||
|
|
59
|
+
this.definition()?.properties?.['trendDirection'] ||
|
|
60
|
+
'neutral');
|
|
61
|
+
});
|
|
62
|
+
trendValue = computed(() => {
|
|
63
|
+
if (this.customTrendValue() !== undefined)
|
|
64
|
+
return this.customTrendValue();
|
|
65
|
+
return this.definition()?.properties?.['trendValue'];
|
|
66
|
+
});
|
|
67
|
+
hasTrend = computed(() => {
|
|
68
|
+
return this.trendValue() !== undefined;
|
|
69
|
+
});
|
|
70
|
+
trendArrow = computed(() => {
|
|
71
|
+
switch (this.trendDirection()) {
|
|
72
|
+
case 'up':
|
|
73
|
+
return 'trend-up';
|
|
74
|
+
case 'down':
|
|
75
|
+
return 'trend-down';
|
|
76
|
+
default:
|
|
77
|
+
return 'minus';
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
trendLabel = computed(() => {
|
|
81
|
+
return this.customTrendLabel() || this.definition()?.properties?.['trendLabel'] || '';
|
|
82
|
+
});
|
|
83
|
+
subtitle = computed(() => {
|
|
84
|
+
return this.customSubtitle() || this.definition()?.properties?.['subtitle'] || '';
|
|
85
|
+
});
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptKpiCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
87
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptKpiCardComponent, isStandalone: true, selector: "rpt-kpi-card", inputs: { definition: { classPropertyName: "definition", publicName: "definition", isSignal: true, isRequired: false, transformFunction: null }, customTitle: { classPropertyName: "customTitle", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, customValue: { classPropertyName: "customValue", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, customPrefix: { classPropertyName: "customPrefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, customSuffix: { classPropertyName: "customSuffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, customTheme: { classPropertyName: "customTheme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, customIcon: { classPropertyName: "customIcon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, customTrendDirection: { classPropertyName: "customTrendDirection", publicName: "trendDirection", isSignal: true, isRequired: false, transformFunction: null }, customTrendValue: { classPropertyName: "customTrendValue", publicName: "trendValue", isSignal: true, isRequired: false, transformFunction: null }, customTrendLabel: { classPropertyName: "customTrendLabel", publicName: "trendLabel", isSignal: true, isRequired: false, transformFunction: null }, customSubtitle: { classPropertyName: "customSubtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
88
|
+
<div
|
|
89
|
+
class="rpt-kpi-card"
|
|
90
|
+
[class]="'rpt-kpi-card--' + theme()"
|
|
91
|
+
[attr.role]="'region'"
|
|
92
|
+
[attr.aria-label]="title()"
|
|
93
|
+
>
|
|
94
|
+
<div class="rpt-kpi-header">
|
|
95
|
+
<span class="rpt-kpi-title">{{ title() }}</span>
|
|
96
|
+
@if (icon()) {
|
|
97
|
+
<span class="rpt-kpi-icon-badge">
|
|
98
|
+
<rpt-icon [name]="icon()" [size]="18" />
|
|
99
|
+
</span>
|
|
100
|
+
}
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<div class="rpt-kpi-body">
|
|
104
|
+
<div class="rpt-kpi-value-row">
|
|
105
|
+
@if (prefix()) {
|
|
106
|
+
<span class="rpt-kpi-prefix">{{ prefix() }}</span>
|
|
107
|
+
}
|
|
108
|
+
<span class="rpt-kpi-value">{{ formattedValue() }}</span>
|
|
109
|
+
@if (suffix()) {
|
|
110
|
+
<span class="rpt-kpi-suffix">{{ suffix() }}</span>
|
|
111
|
+
}
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
@if (hasTrend() || subtitle()) {
|
|
115
|
+
<div class="rpt-kpi-footer">
|
|
116
|
+
@if (hasTrend()) {
|
|
117
|
+
<span
|
|
118
|
+
class="rpt-kpi-trend"
|
|
119
|
+
[class]="'rpt-kpi-trend--' + trendDirection()"
|
|
120
|
+
>
|
|
121
|
+
<rpt-icon
|
|
122
|
+
[name]="trendDirection() === 'up' ? 'trend-up' : (trendDirection() === 'down' ? 'trend-down' : 'minus')"
|
|
123
|
+
[size]="12"
|
|
124
|
+
/>
|
|
125
|
+
<span>{{ trendValue() }}%</span>
|
|
126
|
+
</span>
|
|
127
|
+
}
|
|
128
|
+
@if (trendLabel() || subtitle()) {
|
|
129
|
+
<span class="rpt-kpi-subtitle">{{ trendLabel() || subtitle() }}</span>
|
|
130
|
+
}
|
|
131
|
+
</div>
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<!-- Subtle glowing gradient bar at card top -->
|
|
137
|
+
<div class="rpt-kpi-accent-bar"></div>
|
|
138
|
+
</div>
|
|
139
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-kpi-card{position:relative;background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 2px 6px -1px #0000000d,0 1px 4px -2px #0000000a;display:flex;flex-direction:column;justify-content:space-between;height:100%;box-sizing:border-box;gap:12px;overflow:hidden;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;-webkit-user-select:none;user-select:none}.rpt-kpi-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px -4px #00000014,0 4px 10px -4px #0000000d;border-color:var(--rpt-border-hover, #cbd5e1)}.rpt-kpi-accent-bar{position:absolute;top:0;left:0;right:0;height:3px;background:var(--kpi-accent, var(--rpt-primary, #2563eb))}.rpt-kpi-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.rpt-kpi-title{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--rpt-text-muted, #64748b)}.rpt-kpi-icon-badge{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:var(--kpi-badge-bg, rgba(37, 99, 235, .08));color:var(--kpi-accent, var(--rpt-primary, #2563eb));font-size:1rem}.rpt-kpi-body{display:flex;flex-direction:column;gap:6px}.rpt-kpi-value-row{display:flex;align-items:baseline;gap:4px}.rpt-kpi-prefix,.rpt-kpi-suffix{font-size:1.125rem;font-weight:500;color:var(--rpt-text-muted, #64748b)}.rpt-kpi-value{font-size:1.875rem;font-weight:700;color:var(--rpt-text-color, #0f172a);line-height:1.1;font-feature-settings:\"tnum\";font-variant-numeric:tabular-nums}.rpt-kpi-footer{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:2px}.rpt-kpi-trend{display:inline-flex;align-items:center;gap:2px;font-size:.75rem;font-weight:600;padding:2px 6px;border-radius:4px}.rpt-kpi-trend--up{background:#10b9811f;color:#059669}.rpt-kpi-trend--down{background:#ef44441f;color:#dc2626}.rpt-kpi-trend--neutral{background:#64748b1f;color:#475569}.rpt-kpi-subtitle{font-size:.75rem;color:var(--rpt-text-muted, #64748b)}.rpt-kpi-card--primary{--kpi-accent: var(--rpt-primary, #2563eb);--kpi-badge-bg: rgba(37, 99, 235, .1)}.rpt-kpi-card--success{--kpi-accent: #10b981;--kpi-badge-bg: rgba(16, 185, 129, .1)}.rpt-kpi-card--warning{--kpi-accent: #f59e0b;--kpi-badge-bg: rgba(245, 158, 11, .1)}.rpt-kpi-card--danger{--kpi-accent: #ef4444;--kpi-badge-bg: rgba(239, 68, 68, .1)}.rpt-kpi-card--info{--kpi-accent: #06b6d4;--kpi-badge-bg: rgba(6, 182, 212, .1)}.rpt-kpi-card--neutral{--kpi-accent: #64748b;--kpi-badge-bg: rgba(100, 116, 139, .1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
140
|
+
}
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptKpiCardComponent, decorators: [{
|
|
142
|
+
type: Component,
|
|
143
|
+
args: [{ selector: 'rpt-kpi-card', standalone: true, imports: [CommonModule, RptIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
144
|
+
<div
|
|
145
|
+
class="rpt-kpi-card"
|
|
146
|
+
[class]="'rpt-kpi-card--' + theme()"
|
|
147
|
+
[attr.role]="'region'"
|
|
148
|
+
[attr.aria-label]="title()"
|
|
149
|
+
>
|
|
150
|
+
<div class="rpt-kpi-header">
|
|
151
|
+
<span class="rpt-kpi-title">{{ title() }}</span>
|
|
152
|
+
@if (icon()) {
|
|
153
|
+
<span class="rpt-kpi-icon-badge">
|
|
154
|
+
<rpt-icon [name]="icon()" [size]="18" />
|
|
155
|
+
</span>
|
|
156
|
+
}
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="rpt-kpi-body">
|
|
160
|
+
<div class="rpt-kpi-value-row">
|
|
161
|
+
@if (prefix()) {
|
|
162
|
+
<span class="rpt-kpi-prefix">{{ prefix() }}</span>
|
|
163
|
+
}
|
|
164
|
+
<span class="rpt-kpi-value">{{ formattedValue() }}</span>
|
|
165
|
+
@if (suffix()) {
|
|
166
|
+
<span class="rpt-kpi-suffix">{{ suffix() }}</span>
|
|
167
|
+
}
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
@if (hasTrend() || subtitle()) {
|
|
171
|
+
<div class="rpt-kpi-footer">
|
|
172
|
+
@if (hasTrend()) {
|
|
173
|
+
<span
|
|
174
|
+
class="rpt-kpi-trend"
|
|
175
|
+
[class]="'rpt-kpi-trend--' + trendDirection()"
|
|
176
|
+
>
|
|
177
|
+
<rpt-icon
|
|
178
|
+
[name]="trendDirection() === 'up' ? 'trend-up' : (trendDirection() === 'down' ? 'trend-down' : 'minus')"
|
|
179
|
+
[size]="12"
|
|
180
|
+
/>
|
|
181
|
+
<span>{{ trendValue() }}%</span>
|
|
182
|
+
</span>
|
|
183
|
+
}
|
|
184
|
+
@if (trendLabel() || subtitle()) {
|
|
185
|
+
<span class="rpt-kpi-subtitle">{{ trendLabel() || subtitle() }}</span>
|
|
186
|
+
}
|
|
187
|
+
</div>
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<!-- Subtle glowing gradient bar at card top -->
|
|
193
|
+
<div class="rpt-kpi-accent-bar"></div>
|
|
194
|
+
</div>
|
|
195
|
+
`, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-kpi-card{position:relative;background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 2px 6px -1px #0000000d,0 1px 4px -2px #0000000a;display:flex;flex-direction:column;justify-content:space-between;height:100%;box-sizing:border-box;gap:12px;overflow:hidden;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;-webkit-user-select:none;user-select:none}.rpt-kpi-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px -4px #00000014,0 4px 10px -4px #0000000d;border-color:var(--rpt-border-hover, #cbd5e1)}.rpt-kpi-accent-bar{position:absolute;top:0;left:0;right:0;height:3px;background:var(--kpi-accent, var(--rpt-primary, #2563eb))}.rpt-kpi-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.rpt-kpi-title{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--rpt-text-muted, #64748b)}.rpt-kpi-icon-badge{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:var(--kpi-badge-bg, rgba(37, 99, 235, .08));color:var(--kpi-accent, var(--rpt-primary, #2563eb));font-size:1rem}.rpt-kpi-body{display:flex;flex-direction:column;gap:6px}.rpt-kpi-value-row{display:flex;align-items:baseline;gap:4px}.rpt-kpi-prefix,.rpt-kpi-suffix{font-size:1.125rem;font-weight:500;color:var(--rpt-text-muted, #64748b)}.rpt-kpi-value{font-size:1.875rem;font-weight:700;color:var(--rpt-text-color, #0f172a);line-height:1.1;font-feature-settings:\"tnum\";font-variant-numeric:tabular-nums}.rpt-kpi-footer{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:2px}.rpt-kpi-trend{display:inline-flex;align-items:center;gap:2px;font-size:.75rem;font-weight:600;padding:2px 6px;border-radius:4px}.rpt-kpi-trend--up{background:#10b9811f;color:#059669}.rpt-kpi-trend--down{background:#ef44441f;color:#dc2626}.rpt-kpi-trend--neutral{background:#64748b1f;color:#475569}.rpt-kpi-subtitle{font-size:.75rem;color:var(--rpt-text-muted, #64748b)}.rpt-kpi-card--primary{--kpi-accent: var(--rpt-primary, #2563eb);--kpi-badge-bg: rgba(37, 99, 235, .1)}.rpt-kpi-card--success{--kpi-accent: #10b981;--kpi-badge-bg: rgba(16, 185, 129, .1)}.rpt-kpi-card--warning{--kpi-accent: #f59e0b;--kpi-badge-bg: rgba(245, 158, 11, .1)}.rpt-kpi-card--danger{--kpi-accent: #ef4444;--kpi-badge-bg: rgba(239, 68, 68, .1)}.rpt-kpi-card--info{--kpi-accent: #06b6d4;--kpi-badge-bg: rgba(6, 182, 212, .1)}.rpt-kpi-card--neutral{--kpi-accent: #64748b;--kpi-badge-bg: rgba(100, 116, 139, .1)}\n"] }]
|
|
196
|
+
}] });
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWtwaS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9rcGktY2FyZC9ycHQta3BpLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQXFPOUQsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qiw4Q0FBOEM7SUFDckMsVUFBVSxHQUFHLEtBQUssRUFBNkIsQ0FBQztJQUV6RCwrQ0FBK0M7SUFDdEMsV0FBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFaEYsb0JBQW9CO0lBQ1gsV0FBVyxHQUFHLEtBQUssQ0FBOEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFekYsMENBQTBDO0lBQ2pDLFlBQVksR0FBRyxLQUFLLENBQXFCLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWxGLHVDQUF1QztJQUM5QixZQUFZLEdBQUcsS0FBSyxDQUFxQixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUVsRiwwQkFBMEI7SUFDakIsV0FBVyxHQUFHLEtBQUssQ0FBdUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFbEYsNEJBQTRCO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENB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QUFDLENBQUMsQ0FBQzt3R0F4R1EsbUJBQW1COzRGQUFuQixtQkFBbUIsd2tEQTNOcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRFQsd3JGQXREUyxZQUFZLCtCQUFFLGdCQUFnQjs7NEZBNk43QixtQkFBbUI7a0JBaE8vQixTQUFTOytCQUNFLGNBQWMsY0FDWixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsbUJBQ3hCLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIEtwaVRoZW1lID0gJ3ByaW1hcnknIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2RhbmdlcicgfCAnaW5mbycgfCAnbmV1dHJhbCc7XG5leHBvcnQgdHlwZSBUcmVuZERpcmVjdGlvbiA9ICd1cCcgfCAnZG93bicgfCAnbmV1dHJhbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1rcGktY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJwdEljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJwdC1rcGktY2FyZFwiXG4gICAgICBbY2xhc3NdPVwiJ3JwdC1rcGktY2FyZC0tJyArIHRoZW1lKClcIlxuICAgICAgW2F0dHIucm9sZV09XCIncmVnaW9uJ1wiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRpdGxlKClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJycHQta3BpLWhlYWRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1rcGktdGl0bGVcIj57eyB0aXRsZSgpIH19PC9zcGFuPlxuICAgICAgICBAaWYgKGljb24oKSkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWtwaS1pY29uLWJhZGdlXCI+XG4gICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiaWNvbigpXCIgW3NpemVdPVwiMThcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJycHQta3BpLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1rcGktdmFsdWUtcm93XCI+XG4gICAgICAgICAgQGlmIChwcmVmaXgoKSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQta3BpLXByZWZpeFwiPnt7IHByZWZpeCgpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1rcGktdmFsdWVcIj57eyBmb3JtYXR0ZWRWYWx1ZSgpIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAoc3VmZml4KCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWtwaS1zdWZmaXhcIj57eyBzdWZmaXgoKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoaGFzVHJlbmQoKSB8fCBzdWJ0aXRsZSgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1rcGktZm9vdGVyXCI+XG4gICAgICAgICAgICBAaWYgKGhhc1RyZW5kKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1rcGktdHJlbmRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCIncnB0LWtwaS10cmVuZC0tJyArIHRyZW5kRGlyZWN0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHJwdC1pY29uXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJ0cmVuZERpcmVjdGlvbigpID09PSAndXAnID8gJ3RyZW5kLXVwJyA6ICh0cmVuZERpcmVjdGlvbigpID09PSAnZG93bicgPyAndHJlbmQtZG93bicgOiAnbWludXMnKVwiXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09XCIxMlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0cmVuZFZhbHVlKCkgfX0lPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHRyZW5kTGFiZWwoKSB8fCBzdWJ0aXRsZSgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWtwaS1zdWJ0aXRsZVwiPnt7IHRyZW5kTGFiZWwoKSB8fCBzdWJ0aXRsZSgpIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFN1YnRsZSBnbG93aW5nIGdyYWRpZW50IGJhciBhdCBjYXJkIHRvcCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJycHQta3BpLWFjY2VudC1iYXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQta3BpLWNhcmQge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLWxnLCAxMnB4KTtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMjBweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDFweCA0cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZ2FwOiAxMnB4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJwdC1rcGktY2FyZDpob3ZlciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAyMHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjA4KSwgMCA0cHggMTBweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1ib3JkZXItaG92ZXIsICNjYmQ1ZTEpO1xuICAgIH1cblxuICAgIC5ycHQta3BpLWFjY2VudC1iYXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgaGVpZ2h0OiAzcHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1rcGktYWNjZW50LCB2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYikpO1xuICAgIH1cblxuICAgIC5ycHQta3BpLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGdhcDogOHB4O1xuICAgIH1cblxuICAgIC5ycHQta3BpLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS1pY29uLWJhZGdlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWtwaS1iYWRnZS1iZywgcmdiYSgzNywgOTksIDIzNSwgMC4wOCkpO1xuICAgICAgY29sb3I6IHZhcigtLWtwaS1hY2NlbnQsIHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKSk7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgfVxuXG4gICAgLnJwdC1rcGktYm9keSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogNnB4O1xuICAgIH1cblxuICAgIC5ycHQta3BpLXZhbHVlLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuXG4gICAgLnJwdC1rcGktcHJlZml4LFxuICAgIC5ycHQta3BpLXN1ZmZpeCB7XG4gICAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuXG4gICAgLnJwdC1rcGktdmFsdWUge1xuICAgICAgZm9udC1zaXplOiAxLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtY29sb3IsICMwZjE3MmEpO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ3RudW0nO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB9XG5cbiAgICAucnB0LWtwaS1mb290ZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICB9XG5cbiAgICAucnB0LWtwaS10cmVuZCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC5ycHQta3BpLXRyZW5kLS11cCB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE2LCAxODUsIDEyOSwgMC4xMik7XG4gICAgICBjb2xvcjogIzA1OTY2OTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS10cmVuZC0tZG93biB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKTtcbiAgICAgIGNvbG9yOiAjZGMyNjI2O1xuICAgIH1cblxuICAgIC5ycHQta3BpLXRyZW5kLS1uZXV0cmFsIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTAwLCAxMTYsIDEzOSwgMC4xMik7XG4gICAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS1zdWJ0aXRsZSB7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC8qIFRoZW1lcyAqL1xuICAgIC5ycHQta3BpLWNhcmQtLXByaW1hcnkge1xuICAgICAgLS1rcGktYWNjZW50OiB2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICAtLWtwaS1iYWRnZS1iZzogcmdiYSgzNywgOTksIDIzNSwgMC4xKTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS1jYXJkLS1zdWNjZXNzIHtcbiAgICAgIC0ta3BpLWFjY2VudDogIzEwYjk4MTtcbiAgICAgIC0ta3BpLWJhZGdlLWJnOiByZ2JhKDE2LCAxODUsIDEyOSwgMC4xKTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS1jYXJkLS13YXJuaW5nIHtcbiAgICAgIC0ta3BpLWFjY2VudDogI2Y1OWUwYjtcbiAgICAgIC0ta3BpLWJhZGdlLWJnOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4xKTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS1jYXJkLS1kYW5nZXIge1xuICAgICAgLS1rcGktYWNjZW50OiAjZWY0NDQ0O1xuICAgICAgLS1rcGktYmFkZ2UtYmc6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMSk7XG4gICAgfVxuXG4gICAgLnJwdC1rcGktY2FyZC0taW5mbyB7XG4gICAgICAtLWtwaS1hY2NlbnQ6ICMwNmI2ZDQ7XG4gICAgICAtLWtwaS1iYWRnZS1iZzogcmdiYSg2LCAxODIsIDIxMiwgMC4xKTtcbiAgICB9XG5cbiAgICAucnB0LWtwaS1jYXJkLS1uZXV0cmFsIHtcbiAgICAgIC0ta3BpLWFjY2VudDogIzY0NzQ4YjtcbiAgICAgIC0ta3BpLWJhZGdlLWJnOiByZ2JhKDEwMCwgMTE2LCAxMzksIDAuMSk7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBScHRLcGlDYXJkQ29tcG9uZW50IHtcbiAgLyoqIE9wdGlvbmFsIG1ldGFkYXRhIGNvbXBvbmVudCBkZWZpbml0aW9uLiAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcblxuICAvKiogVGl0bGUgb2YgbWV0cmljIChlLmcuLCAnVG90YWwgUmV2ZW51ZScpLiAqL1xuICByZWFkb25seSBjdXN0b21UaXRsZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAndGl0bGUnIH0pO1xuXG4gIC8qKiBNZXRyaWMgdmFsdWUuICovXG4gIHJlYWRvbmx5IGN1c3RvbVZhbHVlID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICd2YWx1ZScgfSk7XG5cbiAgLyoqIEN1cnJlbmN5IG9yIHVuaXQgcHJlZml4IChlLmcuICckJykuICovXG4gIHJlYWRvbmx5IGN1c3RvbVByZWZpeCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAncHJlZml4JyB9KTtcblxuICAvKiogVW5pdCBzdWZmaXggKGUuZy4gJyUnLCAnaXRlbXMnKS4gKi9cbiAgcmVhZG9ubHkgY3VzdG9tU3VmZml4ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICdzdWZmaXgnIH0pO1xuXG4gIC8qKiBUaGVtZSBhY2NlbnQgY29sb3IuICovXG4gIHJlYWRvbmx5IGN1c3RvbVRoZW1lID0gaW5wdXQ8S3BpVGhlbWUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RoZW1lJyB9KTtcblxuICAvKiogSWNvbiBzeW1ib2wgb3IgZW1vamkuICovXG4gIHJlYWRvbmx5IGN1c3RvbUljb24gPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2ljb24nIH0pO1xuXG4gIC8qKiBUcmVuZCBkaXJlY3Rpb246IHVwIHwgZG93biB8IG5ldXRyYWwgKi9cbiAgcmVhZG9ubHkgY3VzdG9tVHJlbmREaXJlY3Rpb24gPSBpbnB1dDxUcmVuZERpcmVjdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAndHJlbmREaXJlY3Rpb24nIH0pO1xuXG4gIC8qKiBUcmVuZCBwZXJjZW50YWdlIHZhbHVlLiAqL1xuICByZWFkb25seSBjdXN0b21UcmVuZFZhbHVlID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICd0cmVuZFZhbHVlJyB9KTtcblxuICAvKiogVHJlbmQgY29udGV4dHVhbCBsYWJlbC4gKi9cbiAgcmVhZG9ubHkgY3VzdG9tVHJlbmRMYWJlbCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAndHJlbmRMYWJlbCcgfSk7XG5cbiAgLyoqIFN1YnRpdGxlLiAqL1xuICByZWFkb25seSBjdXN0b21TdWJ0aXRsZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnc3VidGl0bGUnIH0pO1xuXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgbWVyZ2luZyBkZWZpbml0aW9uIHByb3BlcnRpZXMgYW5kIGlucHV0c1xuICByZWFkb25seSB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UaXRsZSgpID8/ICh0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcz8uWyd0aXRsZSddIGFzIHN0cmluZykgPz8gdGhpcy5kZWZpbml0aW9uKCk/LmxhYmVsID8/ICdNZXRyaWMnO1xuICB9KTtcblxuICByZWFkb25seSByYXdWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmN1c3RvbVZhbHVlKCk7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gJycpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuICh0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcz8uWyd2YWx1ZSddIGFzIHN0cmluZyB8IG51bWJlcikgPz8gJzAnO1xuICB9KTtcblxuICByZWFkb25seSBmb3JtYXR0ZWRWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2ID0gdGhpcy5yYXdWYWx1ZSgpO1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB2LnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodik7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZWZpeCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QcmVmaXgoKSA/PyAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsncHJlZml4J10gYXMgc3RyaW5nKSA/PyAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3VmZml4ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVN1ZmZpeCgpID8/ICh0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcz8uWydzdWZmaXgnXSBhcyBzdHJpbmcpID8/ICcnO1xuICB9KTtcblxuICByZWFkb25seSB0aGVtZSA9IGNvbXB1dGVkPEtwaVRoZW1lPigoKSA9PiB7XG4gICAgcmV0dXJuICh0aGlzLmN1c3RvbVRoZW1lKCkgPz8gKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ3RoZW1lJ10gYXMgS3BpVGhlbWUpID8/ICdwcmltYXJ5JykgYXMgS3BpVGhlbWU7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSWNvbigpID8/ICh0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcz8uWydpY29uJ10gYXMgc3RyaW5nKSA/PyAnJztcbiAgfSk7XG5cblxuICByZWFkb25seSB0cmVuZERpcmVjdGlvbiA9IGNvbXB1dGVkPFRyZW5kRGlyZWN0aW9uPigoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tVHJlbmREaXJlY3Rpb24oKSB8fFxuICAgICAgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ3RyZW5kRGlyZWN0aW9uJ10gYXMgVHJlbmREaXJlY3Rpb24pIHx8XG4gICAgICAnbmV1dHJhbCdcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSB0cmVuZFZhbHVlID0gY29tcHV0ZWQ8bnVtYmVyIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tVHJlbmRWYWx1ZSgpICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmN1c3RvbVRyZW5kVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndHJlbmRWYWx1ZSddIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzVHJlbmQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudHJlbmRWYWx1ZSgpICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRyZW5kQXJyb3cgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMudHJlbmREaXJlY3Rpb24oKSkge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICByZXR1cm4gJ3RyZW5kLXVwJztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICByZXR1cm4gJ3RyZW5kLWRvd24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdtaW51cyc7XG4gICAgfVxuICB9KTtcblxuICByZWFkb25seSB0cmVuZExhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVRyZW5kTGFiZWwoKSB8fCAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndHJlbmRMYWJlbCddIGFzIHN0cmluZykgfHwgJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN1YnRpdGxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVN1YnRpdGxlKCkgfHwgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ3N1YnRpdGxlJ10gYXMgc3RyaW5nKSB8fCAnJztcbiAgfSk7XG59XG5cbiJdfQ==
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
|
2
|
+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { getValidationMessage } from '../../../core/validation/validation-factory';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
export class RptNumberComponent {
|
|
7
|
+
config = input.required();
|
|
8
|
+
control = input();
|
|
9
|
+
fallbackControl = new FormControl(null);
|
|
10
|
+
formControl = computed(() => this.control() ?? this.fallbackControl);
|
|
11
|
+
elementId = computed(() => this.config().key || this.config().id);
|
|
12
|
+
placeholder = computed(() => this.config().properties?.['placeholder'] || '');
|
|
13
|
+
prefix = computed(() => this.config().properties?.['prefix'] || '');
|
|
14
|
+
suffix = computed(() => this.config().properties?.['suffix'] || '');
|
|
15
|
+
minVal = computed(() => this.config().validation?.min ?? this.config().properties?.['min'] ?? null);
|
|
16
|
+
maxVal = computed(() => this.config().validation?.max ?? this.config().properties?.['max'] ?? null);
|
|
17
|
+
stepVal = computed(() => this.config().properties?.['step'] ?? 1);
|
|
18
|
+
isInvalid = computed(() => {
|
|
19
|
+
const ctrl = this.formControl();
|
|
20
|
+
return ctrl.invalid && (ctrl.dirty || ctrl.touched);
|
|
21
|
+
});
|
|
22
|
+
errorMessage = computed(() => {
|
|
23
|
+
const ctrl = this.formControl();
|
|
24
|
+
if (!ctrl.invalid || (!ctrl.dirty && !ctrl.touched)) {
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
const errors = ctrl.errors;
|
|
28
|
+
if (!errors)
|
|
29
|
+
return '';
|
|
30
|
+
const firstKey = Object.keys(errors)[0];
|
|
31
|
+
return getValidationMessage(this.config().validation, firstKey);
|
|
32
|
+
});
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptNumberComponent, isStandalone: true, selector: "rpt-number", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
35
|
+
<div class="rpt-field-group">
|
|
36
|
+
@if (config().label) {
|
|
37
|
+
<label [for]="elementId()" class="rpt-label">
|
|
38
|
+
{{ config().label }}
|
|
39
|
+
@if (config().validation?.required) {
|
|
40
|
+
<span class="rpt-required-marker">*</span>
|
|
41
|
+
}
|
|
42
|
+
</label>
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
<div class="rpt-input-wrapper" [class.has-prefix]="prefix()" [class.has-suffix]="suffix()">
|
|
46
|
+
@if (prefix()) {
|
|
47
|
+
<span class="rpt-affix rpt-prefix">{{ prefix() }}</span>
|
|
48
|
+
}
|
|
49
|
+
<input
|
|
50
|
+
[id]="elementId()"
|
|
51
|
+
type="number"
|
|
52
|
+
[formControl]="formControl()"
|
|
53
|
+
[min]="minVal()"
|
|
54
|
+
[max]="maxVal()"
|
|
55
|
+
[step]="stepVal()"
|
|
56
|
+
[placeholder]="placeholder()"
|
|
57
|
+
[class.rpt-invalid]="isInvalid()"
|
|
58
|
+
class="rpt-number-input"
|
|
59
|
+
/>
|
|
60
|
+
@if (suffix()) {
|
|
61
|
+
<span class="rpt-affix rpt-suffix">{{ suffix() }}</span>
|
|
62
|
+
}
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
@if (errorMessage()) {
|
|
66
|
+
<span class="rpt-error-text">{{ errorMessage() }}</span>
|
|
67
|
+
}
|
|
68
|
+
</div>
|
|
69
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:4px;box-sizing:border-box}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-input-wrapper{position:relative;display:flex;align-items:stretch;width:100%;flex:1;min-height:0}.rpt-affix{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);background-color:var(--rpt-color-surface, #f8fafc);padding:0 10px;height:100%;min-height:38px;display:flex;align-items:center;border:1px solid var(--rpt-color-border, #cbd5e1);-webkit-user-select:none;user-select:none;box-sizing:border-box}.rpt-prefix{border-right:none;border-top-left-radius:var(--rpt-border-radius, 6px);border-bottom-left-radius:var(--rpt-border-radius, 6px)}.rpt-suffix{border-left:none;border-top-right-radius:var(--rpt-border-radius, 6px);border-bottom-right-radius:var(--rpt-border-radius, 6px)}.rpt-number-input{width:100%;box-sizing:border-box;height:100%;min-height:38px;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease;outline:none}.has-prefix .rpt-number-input{border-top-left-radius:0;border-bottom-left-radius:0}.has-suffix .rpt-number-input{border-top-right-radius:0;border-bottom-right-radius:0}.rpt-number-input:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-number-input:focus{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-number-input:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-number-input.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-number-input.rpt-invalid:focus{box-shadow:0 0 0 3px #ef444440}.rpt-error-text{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);margin-top:2px}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptNumberComponent, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{ selector: 'rpt-number', standalone: true, imports: [ReactiveFormsModule], template: `
|
|
74
|
+
<div class="rpt-field-group">
|
|
75
|
+
@if (config().label) {
|
|
76
|
+
<label [for]="elementId()" class="rpt-label">
|
|
77
|
+
{{ config().label }}
|
|
78
|
+
@if (config().validation?.required) {
|
|
79
|
+
<span class="rpt-required-marker">*</span>
|
|
80
|
+
}
|
|
81
|
+
</label>
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
<div class="rpt-input-wrapper" [class.has-prefix]="prefix()" [class.has-suffix]="suffix()">
|
|
85
|
+
@if (prefix()) {
|
|
86
|
+
<span class="rpt-affix rpt-prefix">{{ prefix() }}</span>
|
|
87
|
+
}
|
|
88
|
+
<input
|
|
89
|
+
[id]="elementId()"
|
|
90
|
+
type="number"
|
|
91
|
+
[formControl]="formControl()"
|
|
92
|
+
[min]="minVal()"
|
|
93
|
+
[max]="maxVal()"
|
|
94
|
+
[step]="stepVal()"
|
|
95
|
+
[placeholder]="placeholder()"
|
|
96
|
+
[class.rpt-invalid]="isInvalid()"
|
|
97
|
+
class="rpt-number-input"
|
|
98
|
+
/>
|
|
99
|
+
@if (suffix()) {
|
|
100
|
+
<span class="rpt-affix rpt-suffix">{{ suffix() }}</span>
|
|
101
|
+
}
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
@if (errorMessage()) {
|
|
105
|
+
<span class="rpt-error-text">{{ errorMessage() }}</span>
|
|
106
|
+
}
|
|
107
|
+
</div>
|
|
108
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:4px;box-sizing:border-box}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-input-wrapper{position:relative;display:flex;align-items:stretch;width:100%;flex:1;min-height:0}.rpt-affix{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #64748b);background-color:var(--rpt-color-surface, #f8fafc);padding:0 10px;height:100%;min-height:38px;display:flex;align-items:center;border:1px solid var(--rpt-color-border, #cbd5e1);-webkit-user-select:none;user-select:none;box-sizing:border-box}.rpt-prefix{border-right:none;border-top-left-radius:var(--rpt-border-radius, 6px);border-bottom-left-radius:var(--rpt-border-radius, 6px)}.rpt-suffix{border-left:none;border-top-right-radius:var(--rpt-border-radius, 6px);border-bottom-right-radius:var(--rpt-border-radius, 6px)}.rpt-number-input{width:100%;box-sizing:border-box;height:100%;min-height:38px;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text, #0f172a);background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease;outline:none}.has-prefix .rpt-number-input{border-top-left-radius:0;border-bottom-left-radius:0}.has-suffix .rpt-number-input{border-top-right-radius:0;border-bottom-right-radius:0}.rpt-number-input:hover:not(:disabled){border-color:var(--rpt-color-border-hover, #94a3b8)}.rpt-number-input:focus{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-number-input:disabled{background-color:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);cursor:not-allowed}.rpt-number-input.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-number-input.rpt-invalid:focus{box-shadow:0 0 0 3px #ef444440}.rpt-error-text{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);margin-top:2px}\n"] }]
|
|
109
|
+
}] });
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvbnVtYmVyL3JwdC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQW1KbkYsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkIsQ0FBQztJQUNyRCxPQUFPLEdBQUcsS0FBSyxFQUFlLENBQUM7SUFFdkIsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUUvRCxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDckUsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsRSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVoRixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNoSCxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNoSCxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUU5RSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFFTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7d0dBOUJRLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDBVQTdJbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNULHE0RUFwQ1MsbUJBQW1COzs0RkE4SWxCLGtCQUFrQjtrQkFqSjlCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLG1CQUFtQixDQUFDLFlBQ3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVCxtQkF3R2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgZ2V0VmFsaWRhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1mYWN0b3J5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LW51bWJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWZpZWxkLWdyb3VwXCI+XG4gICAgICBAaWYgKGNvbmZpZygpLmxhYmVsKSB7XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImVsZW1lbnRJZCgpXCIgY2xhc3M9XCJycHQtbGFiZWxcIj5cbiAgICAgICAgICB7eyBjb25maWcoKS5sYWJlbCB9fVxuICAgICAgICAgIEBpZiAoY29uZmlnKCkudmFsaWRhdGlvbj8ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJlcXVpcmVkLW1hcmtlclwiPio8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LWlucHV0LXdyYXBwZXJcIiBbY2xhc3MuaGFzLXByZWZpeF09XCJwcmVmaXgoKVwiIFtjbGFzcy5oYXMtc3VmZml4XT1cInN1ZmZpeCgpXCI+XG4gICAgICAgIEBpZiAocHJlZml4KCkpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1hZmZpeCBycHQtcHJlZml4XCI+e3sgcHJlZml4KCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpXCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2woKVwiXG4gICAgICAgICAgW21pbl09XCJtaW5WYWwoKVwiXG4gICAgICAgICAgW21heF09XCJtYXhWYWwoKVwiXG4gICAgICAgICAgW3N0ZXBdPVwic3RlcFZhbCgpXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgW2NsYXNzLnJwdC1pbnZhbGlkXT1cImlzSW52YWxpZCgpXCJcbiAgICAgICAgICBjbGFzcz1cInJwdC1udW1iZXItaW5wdXRcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKHN1ZmZpeCgpKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWZmaXggcnB0LXN1ZmZpeFwiPnt7IHN1ZmZpeCgpIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChlcnJvck1lc3NhZ2UoKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1lcnJvci10ZXh0XCI+e3sgZXJyb3JNZXNzYWdlKCkgfX08L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgIH1cbiAgICAucnB0LWZpZWxkLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAucnB0LWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAucnB0LXJlcXVpcmVkLW1hcmtlciB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgIH1cbiAgICAucnB0LWlucHV0LXdyYXBwZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICB9XG4gICAgLnJwdC1hZmZpeCB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDM4cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAucnB0LXByZWZpeCB7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgIH1cbiAgICAucnB0LXN1ZmZpeCB7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICB9XG4gICAgLnJwdC1udW1iZXItaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMzhweDtcbiAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2UsXG4gICAgICAgICAgICAgICAgICBib3gtc2hhZG93IHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuICAgIC5oYXMtcHJlZml4IC5ycHQtbnVtYmVyLWlucHV0IHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgIH1cbiAgICAuaGFzLXN1ZmZpeCAucnB0LW51bWJlci1pbnB1dCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgICAucnB0LW51bWJlci1pbnB1dDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgIH1cbiAgICAucnB0LW51bWJlci1pbnB1dDpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItZm9jdXMsICMyNTYzZWIpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3ctZm9jdXMsIDAgMCAwIDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KSk7XG4gICAgfVxuICAgIC5ycHQtbnVtYmVyLWlucHV0OmRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgICAucnB0LW51bWJlci1pbnB1dC5ycHQtaW52YWxpZCB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgIH1cbiAgICAucnB0LW51bWJlci1pbnB1dC5ycHQtaW52YWxpZDpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMzksIDY4LCA2OCwgMC4yNSk7XG4gICAgfVxuICAgIC5ycHQtZXJyb3ItdGV4dCB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHROdW1iZXJDb21wb25lbnQge1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8Rm9ybUNvbnRyb2w+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBmYWxsYmFja0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRyb2woKSA/PyB0aGlzLmZhbGxiYWNrQ29udHJvbCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkua2V5IHx8IHRoaXMuY29uZmlnKCkuaWQpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsncGxhY2Vob2xkZXInXSBhcyBzdHJpbmcpIHx8ICcnKTtcbiAgcmVhZG9ubHkgcHJlZml4ID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydwcmVmaXgnXSBhcyBzdHJpbmcpIHx8ICcnKTtcbiAgcmVhZG9ubHkgc3VmZml4ID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydzdWZmaXgnXSBhcyBzdHJpbmcpIHx8ICcnKTtcblxuICByZWFkb25seSBtaW5WYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnZhbGlkYXRpb24/Lm1pbiA/PyAodGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ21pbiddIGFzIG51bWJlcikgPz8gbnVsbCk7XG4gIHJlYWRvbmx5IG1heFZhbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkudmFsaWRhdGlvbj8ubWF4ID8/ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnbWF4J10gYXMgbnVtYmVyKSA/PyBudWxsKTtcbiAgcmVhZG9ubHkgc3RlcFZhbCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/Llsnc3RlcCddIGFzIG51bWJlcikgPz8gMSk7XG5cbiAgcmVhZG9ubHkgaXNJbnZhbGlkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGN0cmwuaW52YWxpZCAmJiAoY3RybC5kaXJ0eSB8fCBjdHJsLnRvdWNoZWQpO1xuICB9KTtcblxuICByZWFkb25seSBlcnJvck1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICBpZiAoIWN0cmwuaW52YWxpZCB8fCAoIWN0cmwuZGlydHkgJiYgIWN0cmwudG91Y2hlZCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZXJyb3JzID0gY3RybC5lcnJvcnM7XG4gICAgaWYgKCFlcnJvcnMpIHJldHVybiAnJztcbiAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgcmV0dXJuIGdldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnKCkudmFsaWRhdGlvbiwgZmlyc3RLZXkpO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './components';
|
|
2
|
+
export { registerBuiltinComponents } from './register-builtins';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzJztcbmV4cG9ydCB7IHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMgfSBmcm9tICcuL3JlZ2lzdGVyLWJ1aWx0aW5zJztcbiJdfQ==
|