@acorex/platform 19.4.4 → 19.4.6
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/core/lib/types/core.types.d.ts +13 -0
- package/core/lib/types/file.types.d.ts +13 -0
- package/core/lib/types/index.d.ts +1 -0
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +2 -3
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +96 -4
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +3 -3
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-widgets-file-list-popup.component-TNxbcVav.mjs +68 -0
- package/fesm2022/acorex-platform-widgets-file-list-popup.component-TNxbcVav.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-9XMpubtr.mjs → acorex-platform-widgets-page-widget-designer.component-DuKrIkHh.mjs} +2 -1
- package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-9XMpubtr.mjs.map → acorex-platform-widgets-page-widget-designer.component-DuKrIkHh.mjs.map} +1 -1
- package/fesm2022/acorex-platform-widgets.mjs +554 -947
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +6 -2
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/lib/builder/widget-map.d.ts +2 -3
- package/layout/entity/lib/entity-master-list.viewmodel.d.ts +1 -0
- package/layout/entity/lib/workflows/show-file-uploader-popup.workflow.d.ts +10 -0
- package/package.json +12 -12
- package/widgets/lib/properties/layout.props.d.ts +1 -0
- package/widgets/lib/widgets/advance/file-uploader/file-list/file-list.component.d.ts +7 -4
- package/widgets/lib/widgets/advance/file-uploader/file-list-popup/file-list-popup.component.d.ts +17 -0
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-column.component.d.ts +3 -3
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-edit.component.d.ts +6 -1
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-view.component.d.ts +3 -1
- package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget.service.d.ts +13 -11
- package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +0 -1
- package/widgets/lib/widgets/index.d.ts +2 -2
- package/widgets/lib/widgets/layout/block/block-widget-view.component.d.ts +0 -2
- package/widgets/lib/widgets/layout/block/block-widget.config.d.ts +1 -0
- package/widgets/lib/widgets/layout/flex/flex-widget-designer.component.d.ts +10 -0
- package/widgets/lib/widgets/layout/flex/flex-widget-view.component.d.ts +10 -0
- package/widgets/lib/widgets/layout/flex/flex-widget.config.d.ts +28 -0
- package/widgets/lib/widgets/layout/flex/index.d.ts +3 -0
- package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +6 -1
- package/widgets/lib/widgets/property-editors/direction/direction-widget-editor.component.d.ts +13 -0
- package/widgets/lib/widgets/{advance/file/file-box-widget.config.d.ts → property-editors/direction/direction-widget.config.d.ts} +2 -2
- package/widgets/lib/widgets/property-editors/direction/index.d.ts +2 -0
- package/widgets/lib/widgets/property-editors/spacing/spacing-widget-editor.component.d.ts +1 -1
- package/workflow/index.d.ts +1 -0
- package/workflow/lib/task-board.types.d.ts +21 -0
- package/widgets/lib/widgets/advance/file/file-box-widget-column.component.d.ts +0 -6
- package/widgets/lib/widgets/advance/file/file-box-widget-edit.component.d.ts +0 -33
- package/widgets/lib/widgets/advance/file/file-box-widget-filter.component.d.ts +0 -6
- package/widgets/lib/widgets/advance/file/file-box-widget-print.component.d.ts +0 -6
- package/widgets/lib/widgets/advance/file/file-box-widget-view.component.d.ts +0 -31
- package/widgets/lib/widgets/advance/file/file-box-widget.service.d.ts +0 -12
- package/widgets/lib/widgets/advance/file/index.d.ts +0 -7
- package/widgets/lib/widgets/editors/single-file-box/index.d.ts +0 -6
- package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-column.component.d.ts +0 -6
- package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-edit.component.d.ts +0 -19
- package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-filter.component.d.ts +0 -6
- package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-print.component.d.ts +0 -6
- package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-view.component.d.ts +0 -8
- package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget.config.d.ts +0 -9
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class AXPDirectionWidgetEditComponent extends AXPValueWidgetComponent<string> {
|
|
4
|
+
protected direction: import("@angular/core").Signal<string>;
|
|
5
|
+
protected directionOptions: {
|
|
6
|
+
id: string;
|
|
7
|
+
text: string;
|
|
8
|
+
icon: string;
|
|
9
|
+
}[];
|
|
10
|
+
protected setDirection(value: string): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXPDirectionWidgetEditComponent, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AXPDirectionWidgetEditComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
13
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AXPWidgetConfig } from '@acorex/platform/layout/builder';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const AXPDirectionWidget: AXPWidgetConfig;
|
|
3
3
|
declare module '@acorex/platform/layout/builder' {
|
|
4
4
|
interface AXPWidgetTypesMap {
|
|
5
|
-
|
|
5
|
+
direction: 'direction';
|
|
6
6
|
}
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
|
3
3
|
import { AXPPropertyEditorSideValues, AXPSpacingBox, AXPSpacingBoxDefaultValues, AXPSpacingBoxString } from '../property-editor.type';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class AXPSpacingWidgetEditComponent extends AXPValueWidgetComponent<AXPSpacingBoxString> {
|
|
6
|
+
#private;
|
|
6
7
|
private ngZone;
|
|
7
8
|
private rendered;
|
|
8
9
|
private isDragging;
|
|
@@ -20,7 +21,6 @@ export declare class AXPSpacingWidgetEditComponent extends AXPValueWidgetCompone
|
|
|
20
21
|
protected openPopUp(event: Event, type: keyof AXPSpacingBox, side: AXPPropertyEditorSideValues): void;
|
|
21
22
|
protected listenToMove(event: Event, type: keyof AXPSpacingBox, side: AXPPropertyEditorSideValues): void;
|
|
22
23
|
private getClientCoordinates;
|
|
23
|
-
private afterRender;
|
|
24
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSpacingWidgetEditComponent, never>;
|
|
25
25
|
static ɵcmp: i0.ɵɵComponentDeclaration<AXPSpacingWidgetEditComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
26
26
|
}
|
package/workflow/index.d.ts
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AXSchedulerAppointment, AXSchedulerAppointmentDataSourceFilter, AXSchedulerDateRange } from '@acorex/components/scheduler';
|
|
2
|
+
import { AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';
|
|
3
|
+
import { InjectionToken } from '@angular/core';
|
|
4
|
+
export type AXPTask = AXSchedulerAppointment & {
|
|
5
|
+
data?: {
|
|
6
|
+
provider?: string;
|
|
7
|
+
actions?: AXPActionMenuItem[];
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export type AXPTaskFilter = AXSchedulerAppointmentDataSourceFilter & {
|
|
11
|
+
types?: string[];
|
|
12
|
+
};
|
|
13
|
+
export declare abstract class AXPWorkflowTaskProvider {
|
|
14
|
+
abstract get name(): string;
|
|
15
|
+
abstract get title(): string;
|
|
16
|
+
abstract get icon(): string;
|
|
17
|
+
abstract getTasks(options?: AXPTaskFilter): Promise<AXPTask[]>;
|
|
18
|
+
abstract updateTask(id: any, range: AXSchedulerDateRange): Promise<AXPTask>;
|
|
19
|
+
abstract executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult>;
|
|
20
|
+
}
|
|
21
|
+
export declare const AXP_WORKFLOW_TASK_PROVIDER: InjectionToken<AXPWorkflowTaskProvider[]>;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPFileBoxWidgetColumnComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPFileBoxWidgetColumnComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPFileBoxWidgetColumnComponent, "ng-component", never, { "rawValue": { "alias": "rawValue"; "required": false; }; }, {}, never, never, true, never>;
|
|
6
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { AXUploaderChangedEvent, AXUploaderFileCompleteEvent, AXUploaderFilesCompleteEvent } from '@acorex/components/uploader';
|
|
2
|
-
import { AXPFileStorageInfo } from '@acorex/platform/common';
|
|
3
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
4
|
-
import { OnDestroy } from '@angular/core';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class AXPFileBoxWidgetEditComponent extends AXPValueWidgetComponent<AXPFileStorageInfo[]> implements OnDestroy {
|
|
7
|
-
private fileStorage;
|
|
8
|
-
private fileTypeService;
|
|
9
|
-
protected isLoading: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
-
private fileTypes;
|
|
11
|
-
protected multiple: import("@angular/core").Signal<boolean>;
|
|
12
|
-
protected accept: import("@angular/core").Signal<string>;
|
|
13
|
-
protected description: import("@angular/core").Signal<string>;
|
|
14
|
-
protected metaData: import("@angular/core").Signal<string>;
|
|
15
|
-
protected refId: import("@angular/core").Signal<string>;
|
|
16
|
-
protected refType: import("@angular/core").Signal<string>;
|
|
17
|
-
private markedListAsCommitted;
|
|
18
|
-
private markedListAsDeleted;
|
|
19
|
-
ngOnInit(): Promise<void>;
|
|
20
|
-
ngOnDestroy(): Promise<void>;
|
|
21
|
-
handleOnFileRemove(file: AXPFileStorageInfo): Promise<void>;
|
|
22
|
-
handleOnFileUploadComplete(e: AXUploaderFileCompleteEvent): void;
|
|
23
|
-
handleOnFilesUploadComplete(e: AXUploaderFilesCompleteEvent): void;
|
|
24
|
-
protected handleChanged(e: AXUploaderChangedEvent): Promise<void>;
|
|
25
|
-
protected getFileInfo(fileName: string): {
|
|
26
|
-
icon: string;
|
|
27
|
-
type: string;
|
|
28
|
-
};
|
|
29
|
-
private get __class();
|
|
30
|
-
handleFileDownload(event: any, file: AXPFileStorageInfo): Promise<void>;
|
|
31
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPFileBoxWidgetEditComponent, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPFileBoxWidgetEditComponent, "axp-file-widget-edit", never, {}, {}, never, never, true, never>;
|
|
33
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPFileBoxWidgetFilterComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPFileBoxWidgetFilterComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPFileBoxWidgetFilterComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
6
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPFileBoxWidgetPrintComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPFileBoxWidgetPrintComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPFileBoxWidgetPrintComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
6
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { AXPFileStorageInfo } from '@acorex/platform/common';
|
|
2
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
3
|
-
import { WritableSignal } from '@angular/core';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
interface AXPFile {
|
|
6
|
-
name: string;
|
|
7
|
-
type: string;
|
|
8
|
-
value: string;
|
|
9
|
-
size: string;
|
|
10
|
-
}
|
|
11
|
-
export declare class AXPFileBoxWidgetViewComponent extends AXPValueWidgetComponent<any> {
|
|
12
|
-
private fileStorageService;
|
|
13
|
-
private loadingDialog;
|
|
14
|
-
private translateService;
|
|
15
|
-
protected multiple: import("@angular/core").Signal<boolean>;
|
|
16
|
-
protected downloadable: import("@angular/core").Signal<boolean>;
|
|
17
|
-
protected internalValue: WritableSignal<AXPFileStorageInfo[]>;
|
|
18
|
-
private downloadSubscription;
|
|
19
|
-
ngOnInit(): void;
|
|
20
|
-
protected handleDownload(item: AXPFile): Promise<void>;
|
|
21
|
-
private cancelDownload;
|
|
22
|
-
private triggerDownload;
|
|
23
|
-
protected getFileInfo(extension: string): {
|
|
24
|
-
icon: string;
|
|
25
|
-
color: string;
|
|
26
|
-
};
|
|
27
|
-
private updateInternalValue;
|
|
28
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPFileBoxWidgetViewComponent, never>;
|
|
29
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPFileBoxWidgetViewComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { AXUploadRequest } from '@acorex/components/uploader';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
export declare abstract class AXPFileManagementService {
|
|
4
|
-
abstract upload(requests: AXUploadRequest[], metaData?: any): Promise<PromiseSettledResult<{
|
|
5
|
-
result: unknown;
|
|
6
|
-
status: string;
|
|
7
|
-
}>[]>;
|
|
8
|
-
abstract delete(fileId: string): Promise<any>;
|
|
9
|
-
abstract get(fileId: string, name: string): Observable<any>;
|
|
10
|
-
abstract list(): Promise<any>;
|
|
11
|
-
abstract setMetadata(fileId: string, metadata: any): Promise<any>;
|
|
12
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export * from './file-box-widget-column.component';
|
|
2
|
-
export * from './file-box-widget-edit.component';
|
|
3
|
-
export * from './file-box-widget-filter.component';
|
|
4
|
-
export * from './file-box-widget-print.component';
|
|
5
|
-
export * from './file-box-widget-view.component';
|
|
6
|
-
export * from './file-box-widget.config';
|
|
7
|
-
export * from './file-box-widget.service';
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from './single-file-box-widget-column.component';
|
|
2
|
-
export * from './single-file-box-widget-edit.component';
|
|
3
|
-
export * from './single-file-box-widget-filter.component';
|
|
4
|
-
export * from './single-file-box-widget-print.component';
|
|
5
|
-
export * from './single-file-box-widget-view.component';
|
|
6
|
-
export * from './single-file-box-widget.config';
|
package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-column.component.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPSingleFileBoxWidgetColumnComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSingleFileBoxWidgetColumnComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPSingleFileBoxWidgetColumnComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
6
|
-
}
|
package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-edit.component.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPSingleFileBoxWidgetEditComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
#private;
|
|
5
|
-
protected showPreview: import("@angular/core").Signal<boolean>;
|
|
6
|
-
protected refId: import("@angular/core").Signal<string>;
|
|
7
|
-
protected refType: import("@angular/core").Signal<string>;
|
|
8
|
-
private fileService;
|
|
9
|
-
private fileStorage;
|
|
10
|
-
protected url: import("@angular/core").WritableSignal<string | null>;
|
|
11
|
-
protected isEmpty: import("@angular/core").Signal<boolean>;
|
|
12
|
-
private markedAsCommited;
|
|
13
|
-
private markedAsDeleted;
|
|
14
|
-
private chooseFile;
|
|
15
|
-
protected handleChange(): Promise<void>;
|
|
16
|
-
protected handleRemove(): Promise<void>;
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSingleFileBoxWidgetEditComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPSingleFileBoxWidgetEditComponent, "axp-single-file-box-widget", never, {}, {}, never, never, true, never>;
|
|
19
|
-
}
|
package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-filter.component.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPSingleFileBoxWidgetFilterComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSingleFileBoxWidgetFilterComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPSingleFileBoxWidgetFilterComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
6
|
-
}
|
package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-print.component.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPSingleFileBoxWidgetPrintComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSingleFileBoxWidgetPrintComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPSingleFileBoxWidgetPrintComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
6
|
-
}
|
package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-view.component.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { AXPValueWidgetComponent } from '@acorex/platform/layout/builder';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class AXPSingleFileBoxWidgetViewComponent extends AXPValueWidgetComponent<any> {
|
|
4
|
-
protected internalValue: import("@angular/core").Signal<any>;
|
|
5
|
-
protected multiple: import("@angular/core").Signal<boolean>;
|
|
6
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSingleFileBoxWidgetViewComponent, never>;
|
|
7
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AXPSingleFileBoxWidgetViewComponent, "axp-single-file-box-widget", never, {}, {}, never, never, true, never>;
|
|
8
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { AXPWidgetConfig } from '@acorex/platform/layout/builder';
|
|
2
|
-
export declare const AXPSingleFileBoxWidget: AXPWidgetConfig;
|
|
3
|
-
declare module '@acorex/platform/layout/builder' {
|
|
4
|
-
interface AXPWidgetTypesMap {
|
|
5
|
-
singleFileBox: 'single-file-box-editor';
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
export interface AXPSingleFileBoxWidgetOptions {
|
|
9
|
-
}
|