@acorex/platform 21.0.0-next.71 → 21.0.0-next.72
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/fesm2022/acorex-platform-auth.mjs +10 -2
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-Bi1RYif5.mjs → acorex-platform-common-common-settings.provider-Ytey9uhY.mjs} +15 -1
- package/fesm2022/acorex-platform-common-common-settings.provider-Ytey9uhY.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +3792 -1679
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +1112 -103
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +53 -170
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +70 -46
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +199 -126
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs → acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs} +6 -1
- package/fesm2022/acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-entity.mjs +341 -418
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +675 -301
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +115 -74
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs} +2 -2
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +184 -655
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs +48 -0
- package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs +42 -0
- package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +76 -32
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-auth.d.ts +2 -0
- package/types/acorex-platform-common.d.ts +891 -259
- package/types/acorex-platform-core.d.ts +284 -40
- package/types/acorex-platform-layout-builder.d.ts +10 -22
- package/types/acorex-platform-layout-components.d.ts +9 -7
- package/types/acorex-platform-layout-entity.d.ts +37 -41
- package/types/acorex-platform-layout-views.d.ts +125 -67
- package/types/acorex-platform-layout-widget-core.d.ts +53 -61
- package/types/acorex-platform-layout-widgets.d.ts +33 -20
- package/types/acorex-platform-themes-default.d.ts +14 -4
- package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs +0 -31
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs +0 -25
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +0 -1
|
@@ -3,7 +3,7 @@ import { Signal, InjectionToken, ComponentRef, OnInit, EventEmitter, OnChanges,
|
|
|
3
3
|
import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
|
|
4
4
|
import * as _ngrx_signals from '@ngrx/signals';
|
|
5
5
|
import * as _acorex_platform_core from '@acorex/platform/core';
|
|
6
|
-
import { AXPOptionsData, AXPMultiLanguageString, AXPDefinitionCategory, AXPDataType, AXPExpression, AXPWidgetTriggers, AXPMetaData, AXPValueTransformerFunctions, AXPValidationRules, AXPPartialNested,
|
|
6
|
+
import { AXPOptionsData, AXPMultiLanguageString, AXPDefinitionCategory, AXPDataType, AXPExpression, AXPWidgetTriggers, AXPMetaData, AXPValueTransformerFunctions, AXPValidationRules, AXPPartialNested, AXPProperty, AXPContextChangeEvent, AXPExpressionEvaluatorService } from '@acorex/platform/core';
|
|
7
7
|
export { AXPDefinitionCategory, normalizeDefinitionCategories } from '@acorex/platform/core';
|
|
8
8
|
import { AXValueChangedEvent, AXDataSource } from '@acorex/cdk/common';
|
|
9
9
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
@@ -46,9 +46,7 @@ type AXPWidgetCoreElementAction = {
|
|
|
46
46
|
zone?: 'header' | 'footer';
|
|
47
47
|
placement?: 'prefix' | 'suffix';
|
|
48
48
|
scope?: 'primary' | 'secondary';
|
|
49
|
-
/** Keyboard shortcuts that trigger this action (e.g. `'Enter'`, `'ctrl+s'`). */
|
|
50
49
|
shortcuts?: string[];
|
|
51
|
-
/** When `command` is not `widget:<name>.<action>`, widget name used to resolve `api` for `hidden` / `disabled` expressions. */
|
|
52
50
|
predicateApiWidgetName?: string;
|
|
53
51
|
};
|
|
54
52
|
declare abstract class AXPWidgetCoreElement {
|
|
@@ -67,7 +65,6 @@ declare class AXPWidgetCoreService {
|
|
|
67
65
|
readonly status: Signal<AXPPageStatus>;
|
|
68
66
|
readonly isBusy: Signal<boolean>;
|
|
69
67
|
registeredWidgetsCount: _angular_core.WritableSignal<number>;
|
|
70
|
-
/** Bumped when a widget reports dirty-state changes via `api().isDirty()`. */
|
|
71
68
|
private readonly dirtyWidgetsRevision;
|
|
72
69
|
readonly dirtyWidgetsRevisionSignal: Signal<number>;
|
|
73
70
|
get variables(): any;
|
|
@@ -84,22 +81,9 @@ declare class AXPWidgetCoreService {
|
|
|
84
81
|
setFunctions(key: string, value: any): void;
|
|
85
82
|
registerWidget(id: string, widget: AXPWidgetCoreElement): void;
|
|
86
83
|
getWidget(id: string): AXPWidgetCoreElement | undefined;
|
|
87
|
-
/**
|
|
88
|
-
* Waits until a widget with the given id is registered, then resolves with it.
|
|
89
|
-
* If the widget is already registered, resolves immediately.
|
|
90
|
-
* Optionally accepts a timeout (in ms) after which it resolves with undefined.
|
|
91
|
-
*/
|
|
92
84
|
waitForWidget(id: string, timeoutMs?: number): Promise<AXPWidgetCoreElement | undefined>;
|
|
93
|
-
/**
|
|
94
|
-
* Returns a list of registered widget ids (names).
|
|
95
|
-
*/
|
|
96
85
|
listRegisteredWidgetNames(): string[];
|
|
97
|
-
/** Notifies listeners that a widget's composite dirty state may have changed. */
|
|
98
86
|
notifyWidgetDirtyChanged(): void;
|
|
99
|
-
/**
|
|
100
|
-
* Returns whether any registered widget reports dirty state via `api().isDirty()`.
|
|
101
|
-
*/
|
|
102
|
-
hasDirtyWidgets(): boolean;
|
|
103
87
|
ngOnDestroy(): void;
|
|
104
88
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetCoreService, never>;
|
|
105
89
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetCoreService>;
|
|
@@ -405,35 +389,36 @@ declare abstract class AXPBaseWidgetComponent<TOptions extends Record<string, un
|
|
|
405
389
|
protected readonly contextService: {
|
|
406
390
|
data: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
407
391
|
state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
|
|
408
|
-
|
|
409
|
-
previousSnapshot: _angular_core.Signal<
|
|
410
|
-
userDirtyPaths: _angular_core.Signal<string[]>;
|
|
392
|
+
savedSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
393
|
+
previousSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
411
394
|
lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
412
395
|
isChanged: _angular_core.Signal<boolean>;
|
|
413
396
|
isReset: _angular_core.Signal<boolean>;
|
|
414
397
|
isInitiated: _angular_core.Signal<boolean>;
|
|
415
398
|
isEmpty: _angular_core.Signal<boolean>;
|
|
399
|
+
isSavedCommitted: _angular_core.Signal<boolean>;
|
|
416
400
|
isDirty: _angular_core.Signal<boolean>;
|
|
417
|
-
isUserDirty: _angular_core.Signal<boolean>;
|
|
418
401
|
snapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
419
|
-
|
|
420
|
-
|
|
402
|
+
saved: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
403
|
+
initial: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
404
|
+
previous: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
421
405
|
changeEvent: _angular_core.Signal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
422
|
-
update: (path: string, value: any, options?: AXPContextUpdateOptions) => void;
|
|
423
|
-
applyObjectPaths: (obj: Record<string, unknown>, options?: AXPContextUpdateOptions, prefix?: string) => void;
|
|
424
|
-
patch: (context: Record<string, any>,
|
|
406
|
+
update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
407
|
+
applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
|
|
408
|
+
patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
|
|
409
|
+
revertToSaved: () => void;
|
|
425
410
|
reset: () => void;
|
|
426
411
|
set: (initialData: any) => void;
|
|
427
412
|
getValue: (path: string) => any;
|
|
413
|
+
getSavedValue: (path: string) => any;
|
|
428
414
|
hasValue: (path: string) => boolean;
|
|
429
|
-
|
|
430
|
-
|
|
415
|
+
commitSaved: () => void;
|
|
416
|
+
applyParentBind: (merged: _acorex_platform_core.AXPContextData) => void;
|
|
431
417
|
} & _ngrx_signals.StateSource<{
|
|
432
418
|
data: _acorex_platform_core.AXPContextData;
|
|
433
419
|
state: _acorex_platform_core.AXPContextState;
|
|
434
|
-
|
|
435
|
-
previousSnapshot:
|
|
436
|
-
userDirtyPaths: string[];
|
|
420
|
+
savedSnapshot: _acorex_platform_core.AXPContextData;
|
|
421
|
+
previousSnapshot: _acorex_platform_core.AXPContextData;
|
|
437
422
|
lastChange: _acorex_platform_core.AXPContextChangeEvent;
|
|
438
423
|
}>;
|
|
439
424
|
readonly config: _acorex_platform_layout_widget_core.AXPWidgetConfig<any>;
|
|
@@ -493,9 +478,7 @@ declare abstract class AXPValueWidgetComponent<T = any | null, TOptions extends
|
|
|
493
478
|
getValue: _angular_core.Signal<T>;
|
|
494
479
|
protected validationRules: _angular_core.Signal<AXPValidationRules>;
|
|
495
480
|
protected extractValue(path: string): any;
|
|
496
|
-
setValue(value: T | null | undefined
|
|
497
|
-
/** Persists a user-initiated value change into the shared context store. */
|
|
498
|
-
setUserValue(value: T | null | undefined): void;
|
|
481
|
+
setValue(value: T | null | undefined): void;
|
|
499
482
|
protected detectFullPath(): void;
|
|
500
483
|
protected handleValueChanged(e: AXValueChangedEvent<T>): void;
|
|
501
484
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPValueWidgetComponent<any, any>, never>;
|
|
@@ -794,50 +777,57 @@ declare class AXPWidgetContainerComponent {
|
|
|
794
777
|
readonly contextService: {
|
|
795
778
|
data: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
796
779
|
state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
|
|
797
|
-
|
|
798
|
-
previousSnapshot: _angular_core.Signal<
|
|
799
|
-
userDirtyPaths: _angular_core.Signal<string[]>;
|
|
780
|
+
savedSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
781
|
+
previousSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
800
782
|
lastChange: _ngrx_signals.DeepSignal<AXPContextChangeEvent>;
|
|
801
783
|
isChanged: _angular_core.Signal<boolean>;
|
|
802
784
|
isReset: _angular_core.Signal<boolean>;
|
|
803
785
|
isInitiated: _angular_core.Signal<boolean>;
|
|
804
786
|
isEmpty: _angular_core.Signal<boolean>;
|
|
787
|
+
isSavedCommitted: _angular_core.Signal<boolean>;
|
|
805
788
|
isDirty: _angular_core.Signal<boolean>;
|
|
806
|
-
isUserDirty: _angular_core.Signal<boolean>;
|
|
807
789
|
snapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
808
|
-
|
|
809
|
-
|
|
790
|
+
saved: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
791
|
+
initial: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
792
|
+
previous: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
810
793
|
changeEvent: _angular_core.Signal<AXPContextChangeEvent>;
|
|
811
794
|
update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
812
795
|
applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
|
|
813
|
-
patch: (context: Record<string, any>,
|
|
796
|
+
patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
|
|
797
|
+
revertToSaved: () => void;
|
|
814
798
|
reset: () => void;
|
|
815
799
|
set: (initialData: any) => void;
|
|
816
800
|
getValue: (path: string) => any;
|
|
801
|
+
getSavedValue: (path: string) => any;
|
|
817
802
|
hasValue: (path: string) => boolean;
|
|
818
|
-
|
|
819
|
-
|
|
803
|
+
commitSaved: () => void;
|
|
804
|
+
applyParentBind: (merged: _acorex_platform_core.AXPContextData) => void;
|
|
820
805
|
} & _ngrx_signals.StateSource<{
|
|
821
806
|
data: _acorex_platform_core.AXPContextData;
|
|
822
807
|
state: _acorex_platform_core.AXPContextState;
|
|
823
|
-
|
|
824
|
-
previousSnapshot:
|
|
825
|
-
userDirtyPaths: string[];
|
|
808
|
+
savedSnapshot: _acorex_platform_core.AXPContextData;
|
|
809
|
+
previousSnapshot: _acorex_platform_core.AXPContextData;
|
|
826
810
|
lastChange: AXPContextChangeEvent;
|
|
827
811
|
}>;
|
|
828
812
|
readonly builderService: AXPWidgetCoreService;
|
|
829
813
|
readonly onContextChanged: EventEmitter<AXPContextChangeEvent>;
|
|
814
|
+
private lastEmittedFormDirty;
|
|
815
|
+
private savedBaselineTimer?;
|
|
830
816
|
set context(value: any);
|
|
831
817
|
set functions(v: any);
|
|
832
|
-
|
|
818
|
+
readonly isSavedCommitted: _angular_core.Signal<boolean>;
|
|
833
819
|
readonly isFormDirty: _angular_core.Signal<boolean>;
|
|
834
820
|
constructor();
|
|
835
821
|
status: _angular_core.Signal<_acorex_platform_layout_widget_core.AXPPageStatus>;
|
|
836
822
|
isBusy: _angular_core.Signal<boolean>;
|
|
837
823
|
refresh(): void;
|
|
838
824
|
find(name: string): Promise<_acorex_platform_layout_widget_core.AXPWidgetCoreElement | undefined>;
|
|
839
|
-
|
|
840
|
-
|
|
825
|
+
private syncExternalContext;
|
|
826
|
+
/** Commits the current data as saved after widget hydration settles. */
|
|
827
|
+
settleSavedBaseline(): Promise<void>;
|
|
828
|
+
replaceContext(value: unknown): Promise<void>;
|
|
829
|
+
revertAndSettle(): void;
|
|
830
|
+
private clearSavedBaselineTimer;
|
|
841
831
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetContainerComponent, never>;
|
|
842
832
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetContainerComponent, "axp-widgets-container", never, { "context": { "alias": "context"; "required": false; }; "functions": { "alias": "functions"; "required": false; }; }, { "onContextChanged": "onContextChanged"; }, never, ["*"], false, never>;
|
|
843
833
|
}
|
|
@@ -1003,35 +993,36 @@ declare class AXPWidgetRendererDirective {
|
|
|
1003
993
|
protected contextService: {
|
|
1004
994
|
data: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1005
995
|
state: _angular_core.Signal<_acorex_platform_core.AXPContextState>;
|
|
1006
|
-
|
|
1007
|
-
previousSnapshot: _angular_core.Signal<
|
|
1008
|
-
userDirtyPaths: _angular_core.Signal<string[]>;
|
|
996
|
+
savedSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
997
|
+
previousSnapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1009
998
|
lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
1010
999
|
isChanged: _angular_core.Signal<boolean>;
|
|
1011
1000
|
isReset: _angular_core.Signal<boolean>;
|
|
1012
1001
|
isInitiated: _angular_core.Signal<boolean>;
|
|
1013
1002
|
isEmpty: _angular_core.Signal<boolean>;
|
|
1003
|
+
isSavedCommitted: _angular_core.Signal<boolean>;
|
|
1014
1004
|
isDirty: _angular_core.Signal<boolean>;
|
|
1015
|
-
isUserDirty: _angular_core.Signal<boolean>;
|
|
1016
1005
|
snapshot: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1017
|
-
|
|
1018
|
-
|
|
1006
|
+
saved: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1007
|
+
initial: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1008
|
+
previous: _angular_core.Signal<_acorex_platform_core.AXPContextData>;
|
|
1019
1009
|
changeEvent: _angular_core.Signal<_acorex_platform_core.AXPContextChangeEvent>;
|
|
1020
1010
|
update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
|
|
1021
1011
|
applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
|
|
1022
|
-
patch: (context: Record<string, any>,
|
|
1012
|
+
patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
|
|
1013
|
+
revertToSaved: () => void;
|
|
1023
1014
|
reset: () => void;
|
|
1024
1015
|
set: (initialData: any) => void;
|
|
1025
1016
|
getValue: (path: string) => any;
|
|
1017
|
+
getSavedValue: (path: string) => any;
|
|
1026
1018
|
hasValue: (path: string) => boolean;
|
|
1027
|
-
|
|
1028
|
-
|
|
1019
|
+
commitSaved: () => void;
|
|
1020
|
+
applyParentBind: (merged: _acorex_platform_core.AXPContextData) => void;
|
|
1029
1021
|
} & _ngrx_signals.StateSource<{
|
|
1030
1022
|
data: _acorex_platform_core.AXPContextData;
|
|
1031
1023
|
state: _acorex_platform_core.AXPContextState;
|
|
1032
|
-
|
|
1033
|
-
previousSnapshot:
|
|
1034
|
-
userDirtyPaths: string[];
|
|
1024
|
+
savedSnapshot: _acorex_platform_core.AXPContextData;
|
|
1025
|
+
previousSnapshot: _acorex_platform_core.AXPContextData;
|
|
1035
1026
|
lastChange: _acorex_platform_core.AXPContextChangeEvent;
|
|
1036
1027
|
}>;
|
|
1037
1028
|
protected widgetRegistery: AXPWidgetRegistryService;
|
|
@@ -1046,6 +1037,7 @@ declare class AXPWidgetRendererDirective {
|
|
|
1046
1037
|
private expressionEvaluators;
|
|
1047
1038
|
private componentRef;
|
|
1048
1039
|
private renderTimeoutId;
|
|
1040
|
+
private renderGeneration;
|
|
1049
1041
|
private hasInitialRender;
|
|
1050
1042
|
private onContextChanged;
|
|
1051
1043
|
private onLoadEvent;
|
|
@@ -986,7 +986,7 @@ interface AXPDateTimeFilterPresetItem {
|
|
|
986
986
|
id: string;
|
|
987
987
|
title: string;
|
|
988
988
|
}
|
|
989
|
-
declare class AXPDateTimeBoxWidgetEditComponent extends AXPValueWidgetComponent<string |
|
|
989
|
+
declare class AXPDateTimeBoxWidgetEditComponent extends AXPValueWidgetComponent<string | AXPDateTimeFilterValue> implements AfterViewInit {
|
|
990
990
|
#private;
|
|
991
991
|
protected validationService: AXValidationService;
|
|
992
992
|
private settingsService;
|
|
@@ -998,7 +998,6 @@ declare class AXPDateTimeBoxWidgetEditComponent extends AXPValueWidgetComponent<
|
|
|
998
998
|
protected resolvedPresets: Signal<AXPDateTimeFilterPreset[]>;
|
|
999
999
|
protected filterOperations: Signal<AXPFilterOperator[] | undefined>;
|
|
1000
1000
|
protected selectedManualPreset: Signal<AXPDateTimeFilterPreset | undefined>;
|
|
1001
|
-
protected multiple: Signal<boolean>;
|
|
1002
1001
|
protected clearButton: Signal<boolean>;
|
|
1003
1002
|
protected minValue: Signal<string>;
|
|
1004
1003
|
protected maxValue: Signal<string>;
|
|
@@ -1009,7 +1008,6 @@ declare class AXPDateTimeBoxWidgetEditComponent extends AXPValueWidgetComponent<
|
|
|
1009
1008
|
protected format: Signal<"date" | "time" | "datetime">;
|
|
1010
1009
|
/** Passed to `ax-datetime-box` `[depth]` (`AXCalendarViewType`). */
|
|
1011
1010
|
protected inputDepth: Signal<AXCalendarViewType | undefined>;
|
|
1012
|
-
protected internalValue: Signal<string[]>;
|
|
1013
1011
|
protected filterValue: Signal<Date | ''>;
|
|
1014
1012
|
protected filterRangeValue: Signal<{
|
|
1015
1013
|
from: Date | '';
|
|
@@ -1030,9 +1028,7 @@ declare class AXPDateTimeBoxWidgetEditComponent extends AXPValueWidgetComponent<
|
|
|
1030
1028
|
protected calendarFormat: WritableSignal<string>;
|
|
1031
1029
|
constructor();
|
|
1032
1030
|
ngAfterViewInit(): void;
|
|
1033
|
-
protected handleValueChange(e: AXValueChangedEvent
|
|
1034
|
-
protected addItem(): void;
|
|
1035
|
-
protected deleteItem(i: number): void;
|
|
1031
|
+
protected handleValueChange(e: AXValueChangedEvent): void;
|
|
1036
1032
|
protected handlePresetChange(e: AXValueChangedEvent): void;
|
|
1037
1033
|
protected handleOperationChange(operationType: unknown): void;
|
|
1038
1034
|
protected handleFilterValueChange(e: AXValueChangedEvent, type: 'from' | 'to' | 'self'): void;
|
|
@@ -1134,7 +1130,7 @@ declare class AXPLargeTextWidgetColumnComponent extends AXPColumnWidgetComponent
|
|
|
1134
1130
|
|
|
1135
1131
|
declare class AXPLargeTextWidgetEditComponent extends AXPValueWidgetComponent<string | Record<string, string> | undefined> {
|
|
1136
1132
|
protected multiple: _angular_core.Signal<boolean>;
|
|
1137
|
-
protected
|
|
1133
|
+
protected effectiveMultiLanguage: _angular_core.Signal<boolean>;
|
|
1138
1134
|
protected disabled: _angular_core.Signal<boolean>;
|
|
1139
1135
|
protected clearButton: _angular_core.Signal<boolean>;
|
|
1140
1136
|
protected placeholder: _angular_core.Signal<string>;
|
|
@@ -1143,7 +1139,6 @@ declare class AXPLargeTextWidgetEditComponent extends AXPValueWidgetComponent<st
|
|
|
1143
1139
|
private popupService;
|
|
1144
1140
|
private translationService;
|
|
1145
1141
|
private readonly currentLanguage;
|
|
1146
|
-
ngOnInit(): void;
|
|
1147
1142
|
handleValueChange(e: AXValueChangedEvent): void;
|
|
1148
1143
|
protected openMultiLanguagePopup(): void;
|
|
1149
1144
|
protected getCurrentText: _angular_core.Signal<string>;
|
|
@@ -1539,14 +1534,13 @@ declare class AXPRichTextWidgetEditComponent extends AXPValueWidgetComponent<str
|
|
|
1539
1534
|
protected placeholder: _angular_core.Signal<string>;
|
|
1540
1535
|
protected disabled: _angular_core.Signal<boolean>;
|
|
1541
1536
|
protected readonly: _angular_core.Signal<boolean>;
|
|
1542
|
-
protected
|
|
1537
|
+
protected effectiveMultiLanguage: _angular_core.Signal<boolean>;
|
|
1543
1538
|
protected minLineCount: _angular_core.Signal<number>;
|
|
1544
1539
|
protected maxLineCount: _angular_core.Signal<number>;
|
|
1545
1540
|
protected onWysiwygChanged(e: AXValueChangedEvent<string>): void;
|
|
1546
1541
|
private popupService;
|
|
1547
1542
|
private translationService;
|
|
1548
1543
|
currentLanguage: _angular_core.Signal<string>;
|
|
1549
|
-
ngOnInit(): void;
|
|
1550
1544
|
protected getCurrentText: _angular_core.Signal<string>;
|
|
1551
1545
|
protected openMultiLanguagePopup(): Promise<void>;
|
|
1552
1546
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRichTextWidgetEditComponent, never>;
|
|
@@ -1659,7 +1653,6 @@ declare class AXPSelectBoxWidgetEditComponent extends AXPDataListWidgetComponent
|
|
|
1659
1653
|
private lastDataSource;
|
|
1660
1654
|
private hasSeenDataSource;
|
|
1661
1655
|
private shouldFocus;
|
|
1662
|
-
eff: _angular_core.EffectRef;
|
|
1663
1656
|
focus(): void;
|
|
1664
1657
|
protected outputs(): (string | {
|
|
1665
1658
|
name: string;
|
|
@@ -1771,8 +1764,11 @@ declare class AXPSelectionListWidgetEditComponent extends AXPDataListWidgetCompo
|
|
|
1771
1764
|
protected look: _angular_core.Signal<AXSelectionListLook>;
|
|
1772
1765
|
protected showControl: _angular_core.Signal<boolean>;
|
|
1773
1766
|
protected imageMode: _angular_core.Signal<boolean>;
|
|
1767
|
+
protected imageField: _angular_core.Signal<string>;
|
|
1774
1768
|
protected displayItems: _angular_core.WritableSignal<any[]>;
|
|
1775
1769
|
private ef;
|
|
1770
|
+
protected resolveItemImage(item: unknown): string;
|
|
1771
|
+
protected resolveItemAlt(item: unknown): string;
|
|
1776
1772
|
protected handleValueChange(e: AXValueChangedEvent): void;
|
|
1777
1773
|
private get __class();
|
|
1778
1774
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectionListWidgetEditComponent, never>;
|
|
@@ -1781,6 +1777,8 @@ declare class AXPSelectionListWidgetEditComponent extends AXPDataListWidgetCompo
|
|
|
1781
1777
|
|
|
1782
1778
|
declare class AXPSelectionListWidgetViewComponent extends AXPDataListWidgetComponent {
|
|
1783
1779
|
protected imageMode: _angular_core.Signal<boolean>;
|
|
1780
|
+
protected imageField: _angular_core.Signal<string>;
|
|
1781
|
+
protected resolveItemImage(item: Record<string, unknown>): string;
|
|
1784
1782
|
private get __class();
|
|
1785
1783
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSelectionListWidgetViewComponent, never>;
|
|
1786
1784
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSelectionListWidgetViewComponent, "axp-selection-list-widget-view", never, {}, {}, never, never, true, never>;
|
|
@@ -1812,6 +1810,8 @@ interface AXPSelectionListWidgetEditOptions {
|
|
|
1812
1810
|
look?: AXSelectionListLook;
|
|
1813
1811
|
showControl?: boolean;
|
|
1814
1812
|
imageMode?: boolean;
|
|
1813
|
+
/** Image URL field when `imageMode` is true; defaults to `textField`. */
|
|
1814
|
+
imageField?: string;
|
|
1815
1815
|
}
|
|
1816
1816
|
interface AXPSelectionListWidgetColumnOptions {
|
|
1817
1817
|
valueField?: any;
|
|
@@ -1986,7 +1986,7 @@ declare class AXPTextBoxWidgetColumnComponent extends AXPColumnWidgetComponent<s
|
|
|
1986
1986
|
declare class AXPTextBoxWidgetEditComponent extends AXPValueWidgetComponent<string | Record<string, string> | undefined> {
|
|
1987
1987
|
private popupService;
|
|
1988
1988
|
private translationService;
|
|
1989
|
-
protected
|
|
1989
|
+
protected effectiveMultiLanguage: _angular_core.Signal<boolean>;
|
|
1990
1990
|
protected hasClearButton: _angular_core.Signal<boolean>;
|
|
1991
1991
|
protected disabled: _angular_core.Signal<boolean>;
|
|
1992
1992
|
protected readonly: _angular_core.Signal<boolean>;
|
|
@@ -2895,13 +2895,31 @@ declare class AXPSignatureWidgetColumnComponent extends AXPColumnWidgetComponent
|
|
|
2895
2895
|
declare class AXPSignatureWidgetEditComponent extends AXPValueWidgetComponent<string | null> {
|
|
2896
2896
|
#private;
|
|
2897
2897
|
protected disabled: _angular_core.Signal<boolean>;
|
|
2898
|
-
/** When true (default), show click overlay
|
|
2898
|
+
/** When true (default), show click-to-edit overlay over read-only paint. Set false when used inside a dialog. */
|
|
2899
2899
|
protected showOverlay: _angular_core.Signal<boolean>;
|
|
2900
|
-
/**
|
|
2900
|
+
/** Paint editMode: true hides pen/highlighter/eraser toolbars. */
|
|
2901
2901
|
protected editMode: _angular_core.Signal<boolean>;
|
|
2902
|
+
protected hasSignature: _angular_core.Signal<boolean>;
|
|
2903
|
+
protected showSignaturePreview: _angular_core.Signal<boolean>;
|
|
2904
|
+
protected showPaintSurface: _angular_core.Signal<boolean>;
|
|
2905
|
+
protected isInteracting: _angular_core.WritableSignal<boolean>;
|
|
2906
|
+
protected showEmptyHint: _angular_core.Signal<boolean>;
|
|
2907
|
+
protected showDialogHint: _angular_core.Signal<boolean>;
|
|
2908
|
+
protected showDesktopHover: _angular_core.Signal<boolean>;
|
|
2909
|
+
protected hovering: _angular_core.WritableSignal<boolean>;
|
|
2910
|
+
protected emptyHint: _angular_core.Signal<string>;
|
|
2911
|
+
protected signHereHint: _angular_core.Signal<string>;
|
|
2902
2912
|
protected paintContainer: _angular_core.Signal<AXPaintContainerComponent | undefined>;
|
|
2903
2913
|
protected paintView: _angular_core.Signal<AXPaintViewComponent | undefined>;
|
|
2904
2914
|
private readonly layoutBuilder;
|
|
2915
|
+
private readonly deviceService;
|
|
2916
|
+
api(): AXPWidgetCoreElementAPI;
|
|
2917
|
+
protected clearSignaturePad(): void;
|
|
2918
|
+
protected handleMouseEnter(): void;
|
|
2919
|
+
protected handleMouseLeave(): void;
|
|
2920
|
+
protected handleSurfaceClick(event: MouseEvent): void;
|
|
2921
|
+
protected handleOverlayClick(event: MouseEvent): void;
|
|
2922
|
+
protected handleSurfacePointerDown(event: PointerEvent): void;
|
|
2905
2923
|
protected openEditor(): Promise<void>;
|
|
2906
2924
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSignatureWidgetEditComponent, never>;
|
|
2907
2925
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSignatureWidgetEditComponent, "axp-signature-pad-widget-edit", never, {}, {}, never, never, true, never>;
|
|
@@ -3244,18 +3262,12 @@ declare class AXPItemConfiguratorWidgetEditComponent extends AXPValueWidgetCompo
|
|
|
3244
3262
|
protected isInitialized: _angular_core.WritableSignal<boolean>;
|
|
3245
3263
|
/** True while syncing models from shared context (discard/load); writes use system origin. */
|
|
3246
3264
|
private readonly hydratingFromContext;
|
|
3247
|
-
private readonly baseline;
|
|
3248
|
-
private readonly isDirtySignal;
|
|
3249
3265
|
protected selectedItemIdModel: _angular_core.ModelSignal<string>;
|
|
3250
3266
|
protected valuesModel: _angular_core.ModelSignal<Record<string, unknown>>;
|
|
3251
3267
|
private loadNamedDataSourceEffect;
|
|
3252
3268
|
private syncValueToConfigurator;
|
|
3253
3269
|
private syncConfiguratorToValue;
|
|
3254
|
-
private evaluateDirty;
|
|
3255
|
-
api(): AXPWidgetCoreElementAPI;
|
|
3256
3270
|
private buildWidgetNode;
|
|
3257
|
-
private syncBaselineFromModels;
|
|
3258
|
-
private setDirtyState;
|
|
3259
3271
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPItemConfiguratorWidgetEditComponent, never>;
|
|
3260
3272
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPItemConfiguratorWidgetEditComponent, "axp-item-configurator-widget-edit", never, { "selectedItemIdModel": { "alias": "selectedItemIdModel"; "required": false; "isSignal": true; }; "valuesModel": { "alias": "valuesModel"; "required": false; "isSignal": true; }; }, { "selectedItemIdModel": "selectedItemIdModelChange"; "valuesModel": "valuesModelChange"; }, never, never, true, never>;
|
|
3261
3273
|
}
|
|
@@ -4916,6 +4928,7 @@ declare class AXPGridItemOptionsWidgetEditComponent extends AXPValueWidgetCompon
|
|
|
4916
4928
|
|
|
4917
4929
|
declare class AXPSpacingWidgetEditComponent extends AXPValueWidgetComponent<AXPSpacingBoxString> {
|
|
4918
4930
|
private ngZone;
|
|
4931
|
+
protected readonly toggleShortcutKeys: string[];
|
|
4919
4932
|
private isDragging;
|
|
4920
4933
|
protected calculatedValues: _angular_core.WritableSignal<AXPSpacingBox<number>>;
|
|
4921
4934
|
protected originalValues: _angular_core.WritableSignal<AXPSpacingBox<number>>;
|
|
@@ -201,6 +201,8 @@ declare class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponen
|
|
|
201
201
|
private readonly componentDestroyed;
|
|
202
202
|
private isRestoringExpandedRows;
|
|
203
203
|
private restoreExpandedRowsScheduled;
|
|
204
|
+
/** Blocks deferred `replaceUrl` view sync after destroy or once details navigation has started. */
|
|
205
|
+
private listQueryParamSyncDisabled;
|
|
204
206
|
constructor(platform: AXPlatform);
|
|
205
207
|
ngOnInit(): Promise<void>;
|
|
206
208
|
ngAfterViewInit(): Promise<void>;
|
|
@@ -219,6 +221,11 @@ declare class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponen
|
|
|
219
221
|
getPrimaryMenuItems(): Promise<AXPActionMenuItem[]>;
|
|
220
222
|
getSecondaryMenuItems(): Promise<AXPActionMenuItem[]>;
|
|
221
223
|
execute(command: AXPExecuteCommand): Promise<void>;
|
|
224
|
+
/**
|
|
225
|
+
* Syncs the list `view` query param without polluting history.
|
|
226
|
+
* Re-checks the live URL so a deferred call cannot `replaceUrl` over a details entry.
|
|
227
|
+
*/
|
|
228
|
+
private syncListViewQueryParam;
|
|
222
229
|
private reloadListData;
|
|
223
230
|
private grid;
|
|
224
231
|
private updateParentHasChildAfterRefresh;
|
|
@@ -238,8 +245,11 @@ declare class AXPRootLayoutFooterComponent {
|
|
|
238
245
|
}
|
|
239
246
|
|
|
240
247
|
declare class AXPRootLayoutHeaderComponent {
|
|
241
|
-
private config;
|
|
242
|
-
|
|
248
|
+
private readonly config;
|
|
249
|
+
private readonly router;
|
|
250
|
+
private readonly destroyRef;
|
|
251
|
+
private readonly shortcutRegistry;
|
|
252
|
+
protected readonly store: {
|
|
243
253
|
currentMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPThemeMode>;
|
|
244
254
|
currentPalette: _angular_core.Signal<string>;
|
|
245
255
|
systemThemeMode: _angular_core.Signal<_acorex_platform_themes_shared.AXPThemeMode>;
|
|
@@ -297,8 +307,7 @@ declare class AXPRootLayoutHeaderComponent {
|
|
|
297
307
|
menuOrientation: _acorex_platform_themes_shared.AXPMenuOrientation;
|
|
298
308
|
isPrinting: boolean;
|
|
299
309
|
}>;
|
|
300
|
-
|
|
301
|
-
protected logo: {
|
|
310
|
+
protected readonly logo: {
|
|
302
311
|
icon: {
|
|
303
312
|
light: _acorex_platform_core.AXPLogoConfig;
|
|
304
313
|
dark: _acorex_platform_core.AXPLogoConfig;
|
|
@@ -312,6 +321,7 @@ declare class AXPRootLayoutHeaderComponent {
|
|
|
312
321
|
dark: _acorex_platform_core.AXPLogoConfig;
|
|
313
322
|
};
|
|
314
323
|
} | undefined;
|
|
324
|
+
constructor();
|
|
315
325
|
protected toggleSideMenu(): void;
|
|
316
326
|
protected handleLogoClick(): void;
|
|
317
327
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRootLayoutHeaderComponent, never>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-common-common-settings.provider-Bi1RYif5.mjs","sources":["../../../../libs/platform/common/src/lib/configs/common-settings.provider.ts"],"sourcesContent":["import { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPCommonSettings } from './common-settings.key';\n\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPCommonSettingProvider implements AXPSettingDefinitionProvider {\n constructor(private _injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n // Define the 'General Settings' group\n context\n .group('general')\n ?.addSection('notifications', `${I18N}.general.notifications.title`, `${I18N}.general.notifications.description`)\n // Add the 'Enable Operation Toasts' setting\n .addSetting({\n key: AXPCommonSettings.EnableOperationToasts,\n title: `${I18N}.general.notifications.enable-operation-toasts.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n\n description: `${I18N}.general.notifications.enable-operation-toasts.description`,\n })\n\n // End the 'Notifications' section\n .endSection()\n .addSection('entity', `${I18N}.general.entity.title`, `${I18N}.general.entity.description`)\n // Add the 'Enable Operation Toasts' setting\n .addSetting({\n key: AXPCommonSettings.EntityFilterApplyMode,\n title: `${I18N}.general.entity.filter-apply-mode.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: 'auto',\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n label: null,\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'auto', text: `${I18N}.general.entity.filter-apply-mode.options.auto` },\n { value: 'manual', text: `${I18N}.general.entity.filter-apply-mode.options.manual` },\n ],\n },\n },\n\n description: `${I18N}.general.entity.filter-apply-mode.description`,\n })\n .addSetting({\n key: AXPCommonSettings.EntityListPersistenceMode,\n title: `${I18N}.general.entity.list-persistence-mode.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: 'persistent',\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n label: null,\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'none', text: `${I18N}.general.entity.list-persistence-mode.options.none` },\n {\n value: 'persistent',\n text: `${I18N}.general.entity.list-persistence-mode.options.persistent`,\n },\n { value: 'route', text: `${I18N}.general.entity.list-persistence-mode.options.route` },\n ],\n },\n },\n description: `${I18N}.general.entity.list-persistence-mode.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ShowCategoryColumnsByDefault,\n title: `${I18N}.general.entity.show-category-columns-by-default.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: false,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.general.entity.show-category-columns-by-default.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ApplyLayoutOrdering,\n title: `${I18N}.general.entity.apply-layout-ordering.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.general.entity.apply-layout-ordering.description`,\n })\n .addSetting({\n key: AXPCommonSettings.RedirectToDetailsAfterCreate,\n title: `${I18N}.general.entity.redirect-to-details-after-create.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.general.entity.redirect-to-details-after-create.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ShowPageBadge,\n title: `${I18N}.general.entity.show-page-badge.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.general.entity.show-page-badge.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ShowRowIndexColumn,\n title: `${I18N}.general.entity.show-row-index-column.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: false,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.general.entity.show-row-index-column.description`,\n })\n\n // End the 'Entity Settings' section\n .endSection()\n // End the 'General Settings' group\n .endGroup();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs","sources":["../../../../libs/platform/layout/entity/src/lib/features/attachments-plugin/attachments-page/attachments-page.component.ts"],"sourcesContent":["import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPContextChangeEvent,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n type AXPActionMenuItem,\n} from '@acorex/platform/core';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n type AXPLayoutDetailsViewAction,\n} from '@acorex/platform/layout/views';\nimport {\n AXPWidgetContainerComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n type AXPWidgetCoreElement,\n type AXPWidgetCoreElementAPI,\n} from '@acorex/platform/layout/widget-core';\nimport { AXPEntityDefinitionRegistryService } from '../../../entity-registery.service';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n signal,\n Signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { get, merge } from 'lodash-es';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n persistedAttachments,\n type AXPFileUploaderUploadActionDescriptor,\n} from '../../../widgets/file-uploader-widget';\n\nconst ATTACHMENTS_PAGE_SAVE_COMMAND = 'EntityAttachmentsPage:Save';\nconst ATTACHMENTS_PAGE_DISCARD_COMMAND = 'EntityAttachmentsPage:Discard';\nconst ATTACHMENTS_PAGE_UPLOAD_COMMAND = 'EntityAttachmentsPage:Upload';\n\ntype AttachmentsUploaderApi = AXPWidgetCoreElementAPI & {\n onDirtyChange?: Subject<boolean>;\n onUploadActionsChanged?: Subject<void>;\n getUploadActions?: () => AXPFileUploaderUploadActionDescriptor[];\n runUploadAction?: (plugin: string) => void | Promise<void>;\n markSaved?: () => void;\n syncBaseline?: (saved: unknown) => void;\n discardToBaseline?: () => void;\n isDirty?: () => boolean;\n};\n\n//#region ---- Attachments Page Component ----\n\n/**\n * Page component that renders the attachments property using the file-uploader widget.\n * Used when attachments plugin has display: 'page'.\n * Exposes Save/Discard footer actions (same pattern as questionnaire-questions-page).\n */\n@Component({\n selector: 'axm-attachments-page',\n standalone: true,\n imports: [AXPWidgetCoreModule],\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMAttachmentsPageComponent,\n },\n ],\n template: `\n @for (renderKey of [widgetRenderKey()]; track renderKey) {\n <axp-widgets-container #containerRef [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n @if (node(); as n) {\n <ng-container axp-widget-renderer [node]=\"n\" [mode]=\"'edit'\"></ng-container>\n }\n </axp-widgets-container>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.axp-page-layout-base]': 'true',\n },\n})\nexport class AXMAttachmentsPageComponent extends AXPPageLayoutBaseComponent {\n /** Default `{}`: avoid NG0950 before page-component-renderer calls setInput. */\n rootContext = input<Record<string, unknown>>({});\n pageConfig = input<Record<string, unknown>>();\n\n private route = inject(ActivatedRoute);\n private entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n private destroyRef = inject(DestroyRef);\n\n private containerRef = viewChild<AXPWidgetContainerComponent>('containerRef');\n\n private entityDef = signal<AXPEntity | null>(null);\n private localContext = signal<Record<string, unknown> | null>(null);\n protected isDirty = signal(false);\n private isSaving = signal(false);\n private previousRecordId = signal<string | undefined>(undefined);\n /** Recreates the inner widget container on discard so the file list resets. */\n protected widgetRenderKey = signal(0);\n private widgetWireGeneration = 0;\n private dirtySubscription?: Subscription;\n private uploadActionsSubscription?: Subscription;\n\n constructor() {\n super();\n\n effect((onCleanup) => {\n const moduleName = this.route.snapshot.parent?.paramMap.get('module');\n const entityName = this.route.snapshot.paramMap.get('entity');\n if (!moduleName || !entityName) {\n this.entityDef.set(null);\n return;\n }\n let cancelled = false;\n this.entityRegistry.resolve(moduleName, entityName).then((entity) => {\n if (!cancelled) {\n this.entityDef.set(entity);\n }\n });\n onCleanup(() => {\n cancelled = true;\n });\n });\n\n effect(() => {\n const ctx = this.rootContext();\n const recordId = typeof ctx?.['id'] === 'string' && ctx['id'].length > 0 ? ctx['id'] : undefined;\n if (!recordId || recordId === this.previousRecordId()) {\n return;\n }\n this.previousRecordId.set(recordId);\n this.localContext.set(null);\n this.isDirty.set(false);\n this.widgetRenderKey.update((key) => key + 1);\n });\n\n effect(() => {\n const field = this.fieldName();\n const node = this.node();\n const renderKey = this.widgetRenderKey();\n if (!node || !field) {\n return;\n }\n void this.wireUploaderWidget(field, renderKey);\n });\n }\n\n context: Signal<Record<string, unknown>> = computed(() => {\n const local = this.localContext();\n if (local != null) {\n return local;\n }\n return this.rootContext() ?? {};\n });\n\n protected fieldName = computed(() => {\n const config = this.pageConfig();\n return config && typeof (config as { field?: string }).field === 'string'\n ? (config as { field: string }).field\n : 'attachments';\n });\n\n protected recordId = computed((): string | undefined => {\n const id = this.rootContext()?.['id'];\n return typeof id === 'string' && id.length > 0 ? id : undefined;\n });\n\n node = computed<AXPWidgetNode | null>(() => {\n const field = this.fieldName();\n const entity = this.entityDef();\n if (!entity?.properties) {\n return null;\n }\n const prop = entity.properties.find((p: { name: string }) => p.name === field);\n if (!prop?.schema?.interface) {\n return null;\n }\n const widget = prop.schema.interface;\n return {\n type: widget.type,\n path: field,\n name: field,\n children: widget.children,\n valueTransforms: widget.valueTransforms,\n options: merge({}, widget.options),\n } as AXPWidgetNode;\n });\n\n protected showAddItemButton = computed(() => {\n const options = this.node()?.options;\n return options?.['showAddItemButton'] !== false;\n });\n\n override async getPrimaryMenuItems(): Promise<AXPLayoutDetailsViewAction[]> {\n const dirty = this.isDirty();\n const saving = this.isSaving();\n\n const uploadActions = this.showAddItemButton() ? [] : await this.buildUploadPrimaryActions();\n\n const saveTitle = (await this.translateService.translateAsync('@general:actions.save.title')) || 'Save';\n const discardTitle = (await this.translateService.translateAsync('@general:actions.discard.title')) || 'Discard';\n\n return [\n ...uploadActions,\n {\n title: discardTitle,\n icon: 'fa-light fa-rotate-left',\n zone: 'footer',\n priority: 'secondary',\n color: 'default',\n visible: dirty,\n disabled: saving,\n command: { name: ATTACHMENTS_PAGE_DISCARD_COMMAND, options: {} },\n },\n {\n title: saveTitle,\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer',\n priority: 'primary',\n color: 'primary',\n visible: dirty,\n disabled: saving,\n command: { name: ATTACHMENTS_PAGE_SAVE_COMMAND, options: {} },\n },\n ];\n }\n\n onContextChanged(event: AXPContextChangeEvent): void {\n if (event.state !== 'changed' || this.isSaving()) {\n return;\n }\n\n const field = this.fieldName();\n const attachments = get(event.data, field);\n const base = this.localContext() ?? this.rootContext() ?? {};\n this.localContext.set({ ...base, [field]: attachments });\n }\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === ATTACHMENTS_PAGE_DISCARD_COMMAND) {\n this.handleDiscard();\n return;\n }\n if (command.name === ATTACHMENTS_PAGE_UPLOAD_COMMAND) {\n void this.handleUploadAction(command);\n return;\n }\n if (command.name !== ATTACHMENTS_PAGE_SAVE_COMMAND) {\n return;\n }\n return this.handleSave() as unknown as Promise<void>;\n }\n\n private handleDiscard(): void {\n const field = this.fieldName();\n this.localContext.set(null);\n this.isDirty.set(false);\n this.widgetRenderKey.update((key) => key + 1);\n this.recompute();\n }\n\n private async handleSave(): Promise<AXPExecuteCommandResult> {\n const field = this.fieldName();\n const id = this.recordId();\n const entity = this.entityDef();\n const updateExec = entity?.commands?.update?.execute as\n | ((payload: Record<string, unknown>) => Promise<unknown>)\n | undefined;\n const ctx = this.localContext() ?? this.rootContext() ?? {};\n const attachments = get(ctx, field);\n\n if (!field || !id || !updateExec) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n this.isSaving.set(true);\n this.recompute();\n try {\n await updateExec({ id, [field]: attachments });\n\n const persisted = persistedAttachments(attachments);\n\n // Keep displaying saved attachments; drop soft-deleted rows (onContextChanged is skipped while isSaving).\n this.localContext.set({ ...(this.rootContext() ?? {}), [field]: persisted });\n\n const uploader = await this.getUploaderWidget();\n uploader?.markSaved?.();\n this.isDirty.set(false);\n this.recompute();\n\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@general:messages.generic.success.title'),\n content: await this.translateService.translateAsync('@general:messages.generic.success.description'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return { success: true };\n } catch {\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.error.title'),\n content: await this.translateService.translateAsync('@general:messages.entity.update-failed'),\n });\n return { success: false };\n } finally {\n this.isSaving.set(false);\n this.recompute();\n }\n }\n\n private async wireUploaderWidget(field: string, renderKey: number): Promise<void> {\n const generation = ++this.widgetWireGeneration;\n const container = this.containerRef();\n if (!container) {\n return;\n }\n\n const widget = await container.find(field);\n if (!widget || generation !== this.widgetWireGeneration) {\n return;\n }\n\n this.dirtySubscription?.unsubscribe();\n const api = (widget as AXPWidgetCoreElement).api() as AttachmentsUploaderApi;\n const savedAttachments = get(this.rootContext(), field);\n api.syncBaseline?.(savedAttachments);\n\n if (api.onDirtyChange instanceof Subject) {\n this.dirtySubscription = api.onDirtyChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((dirty) => {\n if (generation !== this.widgetWireGeneration) {\n return;\n }\n this.isDirty.set(dirty);\n this.recompute();\n });\n this.isDirty.set(api.isDirty?.() ?? false);\n this.recompute();\n }\n\n if (api.onUploadActionsChanged instanceof Subject) {\n this.uploadActionsSubscription?.unsubscribe();\n this.uploadActionsSubscription = api.onUploadActionsChanged\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (generation !== this.widgetWireGeneration) {\n return;\n }\n this.recompute();\n });\n }\n }\n\n private async buildUploadPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n const uploader = await this.getUploaderWidget();\n const actions = uploader?.getUploadActions?.() ?? [];\n const readonly = Boolean(this.node()?.options?.['readonly']);\n\n if (readonly || actions.length === 0) {\n return [];\n }\n\n const items: AXPActionMenuItem[] = [];\n for (const action of actions) {\n items.push({\n title: action.textKey ?? action.text ?? action.plugin,\n icon: this.normalizePageDropdownIcon(action.icon),\n command: {\n name: ATTACHMENTS_PAGE_UPLOAD_COMMAND,\n options: { plugin: action.plugin },\n },\n });\n }\n\n return [\n {\n title: '@general:actions.add-item.title',\n icon: 'fa-light fa-plus',\n zone: 'header',\n priority: 'primary',\n color: 'primary',\n items,\n },\n ];\n }\n\n /** Page layout dropdown renders `fa-light {{ icon }}`; strip existing style prefix from widget actions. */\n private normalizePageDropdownIcon(icon?: string): string {\n if (!icon) {\n return 'fa-file-arrow-up';\n }\n return icon.replace(/^(fa-light|fa-solid|fa-regular)\\s+/, '');\n }\n\n private async handleUploadAction(command: AXPExecuteCommand): Promise<void> {\n const plugin = command.options?.['plugin'];\n if (typeof plugin !== 'string' || plugin.length === 0) {\n return;\n }\n const uploader = await this.getUploaderWidget();\n await uploader?.runUploadAction?.(plugin);\n }\n\n private async getUploaderWidget(): Promise<AttachmentsUploaderApi | undefined> {\n const container = this.containerRef();\n if (!container) {\n return undefined;\n }\n const widget = await container.find(this.fieldName());\n if (!widget) {\n return undefined;\n }\n return (widget as AXPWidgetCoreElement).api() as AttachmentsUploaderApi;\n }\n\n protected override recompute(): void {\n super.recompute();\n const maybeLayout = this.hostPageLayout as unknown as { recompute?: () => void };\n maybeLayout?.recompute?.();\n }\n}\n\n//#endregion\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import * as i3 from '@acorex/components/button';
|
|
2
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
3
|
-
import { AXPSessionService } from '@acorex/platform/auth';
|
|
4
|
-
import * as i1 from '@angular/common';
|
|
5
|
-
import { CommonModule } from '@angular/common';
|
|
6
|
-
import * as i0 from '@angular/core';
|
|
7
|
-
import { inject, Component } from '@angular/core';
|
|
8
|
-
import { Router } from '@angular/router';
|
|
9
|
-
|
|
10
|
-
class AXPError401Component {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.sessionService = inject(AXPSessionService);
|
|
13
|
-
this.router = inject(Router);
|
|
14
|
-
this.isAuthorized$ = this.sessionService.isAuthorized$;
|
|
15
|
-
}
|
|
16
|
-
handleHomeClick() {
|
|
17
|
-
this.router.navigate([`/${this.sessionService.application?.name}/home`]);
|
|
18
|
-
}
|
|
19
|
-
handleSignInClick() {
|
|
20
|
-
this.router.navigate([`/auth/login`]);
|
|
21
|
-
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPError401Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPError401Component, isStandalone: true, selector: "axp-error-401", ngImport: i0, template: "<div class=\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\">\n <img class=\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/4\" src=\"/assets/images/error/error-401.svg\"\n alt=\"Oops! Error 404. No result found.\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\">\n <h1 class=\"ax-font-bold ax-text-2xl md:ax-text-4xl\">Hold on a second!</h1>\n <p class=\"md:ax-text-lg ax-text-neutral-400\">Sorry, but you are not authorized to view this page.</p>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\">\n @if((isAuthorized$ | async))\n {\n <ax-button (onClick)=\"handleHomeClick()\" class=\"ax-px-4\" color=\"primary\" text=\"Go back to home\"></ax-button>\n } @else {\n <ax-button (onClick)=\"handleSignInClick()\" class=\"ax-px-4\" color=\"primary\" text=\"Sign Up / Sign In\"></ax-button>\n }\n <ax-button class=\"ax-px-4\" [color]=\"'default'\" text=\"Contact us\"></ax-button>\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
|
|
24
|
-
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPError401Component, decorators: [{
|
|
26
|
-
type: Component,
|
|
27
|
-
args: [{ selector: 'axp-error-401', imports: [AXButtonModule, CommonModule], template: "<div class=\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\">\n <img class=\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/4\" src=\"/assets/images/error/error-401.svg\"\n alt=\"Oops! Error 404. No result found.\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\">\n <h1 class=\"ax-font-bold ax-text-2xl md:ax-text-4xl\">Hold on a second!</h1>\n <p class=\"md:ax-text-lg ax-text-neutral-400\">Sorry, but you are not authorized to view this page.</p>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\">\n @if((isAuthorized$ | async))\n {\n <ax-button (onClick)=\"handleHomeClick()\" class=\"ax-px-4\" color=\"primary\" text=\"Go back to home\"></ax-button>\n } @else {\n <ax-button (onClick)=\"handleSignInClick()\" class=\"ax-px-4\" color=\"primary\" text=\"Sign Up / Sign In\"></ax-button>\n }\n <ax-button class=\"ax-px-4\" [color]=\"'default'\" text=\"Contact us\"></ax-button>\n </div>\n</div>" }]
|
|
28
|
-
}] });
|
|
29
|
-
|
|
30
|
-
export { AXPError401Component };
|
|
31
|
-
//# sourceMappingURL=acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs","sources":["../../../../libs/platform/themes/default/src/lib/pages/errors/error-401/error-401.component.ts","../../../../libs/platform/themes/default/src/lib/pages/errors/error-401/error-401.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { CommonModule } from '@angular/common';\n\nimport { Component, OnInit, inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'axp-error-401',\n templateUrl: './error-401.component.html',\n imports: [AXButtonModule, CommonModule]\n})\nexport class AXPError401Component {\n\n private sessionService = inject(AXPSessionService);\n private router = inject(Router);\n protected isAuthorized$ = this.sessionService.isAuthorized$;\n\n protected handleHomeClick() {\n this.router.navigate([`/${this.sessionService.application?.name}/home`]);\n }\n\n protected handleSignInClick() {\n this.router.navigate([`/auth/login`]);\n }\n}\n","<div class=\"ax-h-full ax-flex ax-flex-col ax-gap-8 ax-items-center ax-justify-center\">\n <img class=\"ax-w-3/4 md:ax-w-1/2 lg:ax-w-1/3 xl:ax-w-1/4\" src=\"/assets/images/error/error-401.svg\"\n alt=\"Oops! Error 404. No result found.\">\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 md:ax-gap-4\">\n <h1 class=\"ax-font-bold ax-text-2xl md:ax-text-4xl\">Hold on a second!</h1>\n <p class=\"md:ax-text-lg ax-text-neutral-400\">Sorry, but you are not authorized to view this page.</p>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2 md:ax-gap-4 md:ax-flex-row\">\n @if((isAuthorized$ | async))\n {\n <ax-button (onClick)=\"handleHomeClick()\" class=\"ax-px-4\" color=\"primary\" text=\"Go back to home\"></ax-button>\n } @else {\n <ax-button (onClick)=\"handleSignInClick()\" class=\"ax-px-4\" color=\"primary\" text=\"Sign Up / Sign In\"></ax-button>\n }\n <ax-button class=\"ax-px-4\" [color]=\"'default'\" text=\"Contact us\"></ax-button>\n </div>\n</div>"],"names":["i2"],"mappings":";;;;;;;;;MAYa,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;AAOU,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa;AAS5D,IAAA;IAPW,eAAe,GAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAA,KAAA,CAAO,CAAC,CAAC;IAC1E;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA,WAAA,CAAa,CAAC,CAAC;IACvC;8GAZW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZjC,wiCAgBM,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNQ,cAAc,6XAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAE7B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAEhB,CAAC,cAAc,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,wiCAAA,EAAA;;;;;"}
|