@solidev/data 0.9.1 → 0.10.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.
@@ -0,0 +1,133 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from 'ngx-editor';
6
+ import { Editor, NgxEditorModule } from 'ngx-editor';
7
+ import * as i3 from '@angular/forms';
8
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
9
+ import { firstValueFrom } from 'rxjs';
10
+
11
+ const RichEditToolbars = {
12
+ default: [
13
+ ["bold", "italic"],
14
+ ["underline", "strike"],
15
+ ["code", "blockquote"],
16
+ ["ordered_list", "bullet_list"],
17
+ [{ heading: ["h1", "h2", "h3", "h4", "h5", "h6"] }],
18
+ ["link"],
19
+ ["text_color", "background_color"],
20
+ ["align_left", "align_center", "align_right", "align_justify"],
21
+ ],
22
+ light: [
23
+ ["bold", "italic", "underline"],
24
+ ["ordered_list", "bullet_list"],
25
+ ["text_color"],
26
+ ["align_left", "align_center", "align_right", "align_justify"],
27
+ ],
28
+ none: [],
29
+ };
30
+ class RicheditComponent {
31
+ constructor() {
32
+ this.editable = true;
33
+ this.edit = true;
34
+ this.mode = "dd";
35
+ /** Hide label (for inline forms) */
36
+ this.hideLabel = false;
37
+ /** Hide button (for changed usage) */
38
+ this.hideButton = false;
39
+ /** Toolbar mode */
40
+ this.toolbar = "default";
41
+ this.changed = new EventEmitter();
42
+ this.html = "";
43
+ }
44
+ ngOnInit() {
45
+ this.editor = new Editor();
46
+ if (this.toolbar === "light" || this.toolbar === "default") {
47
+ this.realToolbar = RichEditToolbars[this.toolbar];
48
+ }
49
+ else if (this.toolbar === "none") {
50
+ }
51
+ else {
52
+ this.realToolbar = this.toolbar;
53
+ }
54
+ if (!this.fc) {
55
+ this.fc = new FormControl("");
56
+ if (this.model && this.field) {
57
+ this.manager = this.model.FM(this.field);
58
+ this.required = this.manager?.required || false;
59
+ this.fc.setValue(this.model[this.field] || "", {
60
+ emitEvent: false,
61
+ });
62
+ }
63
+ if (this.edit) {
64
+ this.fc.enable();
65
+ }
66
+ else {
67
+ this.fc.disable();
68
+ }
69
+ this.fc.valueChanges.subscribe((v) => this.changed.emit(v));
70
+ }
71
+ }
72
+ // make sure to destory the editor
73
+ ngOnDestroy() {
74
+ this.editor.destroy();
75
+ }
76
+ toggleEdit() {
77
+ if (this.editable) {
78
+ if (this.edit) {
79
+ this.fc.disable();
80
+ this.edit = false;
81
+ }
82
+ else {
83
+ this.fc.enable();
84
+ this.edit = true;
85
+ }
86
+ }
87
+ else {
88
+ this.fc.disable();
89
+ this.edit = false;
90
+ }
91
+ }
92
+ async save() {
93
+ if (this.model && this.field) {
94
+ this.model.setFV(this.field, this.fc.value);
95
+ if (this.mode === "dd") {
96
+ await firstValueFrom(this.model.update([this.field], { updateModel: true }));
97
+ }
98
+ }
99
+ }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RicheditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: RicheditComponent, isStandalone: true, selector: "data-richedit", inputs: { model: "model", field: "field", editable: "editable", edit: "edit", mode: "mode", hideLabel: "hideLabel", hideButton: "hideButton", fc: "fc", toolbar: "toolbar" }, outputs: { changed: "changed" }, ngImport: i0, template: "\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n @if (edit && toolbar!=='none') {\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\"></ngx-editor-menu>\n }\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n @if (edit && !hideButton) {\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n }\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n@if (mode==='dd') {\n @if (!hideLabel) {\n <dt [class.required]=\"required\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n }\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n }\n <!-- Inline display-->\n @if (mode==='inline') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }\n <!-- Form display-->\n @if (mode==='form') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgxEditorModule }, { kind: "component", type: i2.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i2.NgxEditorMenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RicheditComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: "data-richedit", imports: [CommonModule, NgxEditorModule, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.Eager, template: "\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n @if (edit && toolbar!=='none') {\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\"></ngx-editor-menu>\n }\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n @if (edit && !hideButton) {\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n }\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n@if (mode==='dd') {\n @if (!hideLabel) {\n <dt [class.required]=\"required\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n }\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n }\n <!-- Inline display-->\n @if (mode==='inline') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }\n <!-- Form display-->\n @if (mode==='form') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }" }]
106
+ }], propDecorators: { model: [{
107
+ type: Input
108
+ }], field: [{
109
+ type: Input
110
+ }], editable: [{
111
+ type: Input
112
+ }], edit: [{
113
+ type: Input
114
+ }], mode: [{
115
+ type: Input
116
+ }], hideLabel: [{
117
+ type: Input
118
+ }], hideButton: [{
119
+ type: Input
120
+ }], fc: [{
121
+ type: Input
122
+ }], toolbar: [{
123
+ type: Input
124
+ }], changed: [{
125
+ type: Output
126
+ }] } });
127
+
128
+ /**
129
+ * Generated bundle index. Do not edit.
130
+ */
131
+
132
+ export { RichEditToolbars, RicheditComponent };
133
+ //# sourceMappingURL=solidev-data-richedit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solidev-data-richedit.mjs","sources":["../../../projects/data/richedit/richedit.component.ts","../../../projects/data/richedit/richedit.component.html","../../../projects/data/richedit/solidev-data-richedit.ts"],"sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { Editor, NgxEditorModule, Toolbar } from \"ngx-editor\";\nimport { FormControl, ReactiveFormsModule } from \"@angular/forms\";\nimport { BaseFieldManager, DataModel } from \"@solidev/data\";\nimport { firstValueFrom } from \"rxjs\";\n\nexport const RichEditToolbars: { [index: string]: Toolbar } = {\n default: [\n [\"bold\", \"italic\"],\n [\"underline\", \"strike\"],\n [\"code\", \"blockquote\"],\n [\"ordered_list\", \"bullet_list\"],\n [{ heading: [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] }],\n [\"link\"],\n [\"text_color\", \"background_color\"],\n [\"align_left\", \"align_center\", \"align_right\", \"align_justify\"],\n ],\n light: [\n [\"bold\", \"italic\", \"underline\"],\n [\"ordered_list\", \"bullet_list\"],\n [\"text_color\"],\n [\"align_left\", \"align_center\", \"align_right\", \"align_justify\"],\n ],\n none: [],\n};\n\n@Component({\n selector: \"data-richedit\",\n imports: [CommonModule, NgxEditorModule, ReactiveFormsModule],\n templateUrl: \"./richedit.component.html\",\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: [\"./richedit.component.sass\"],\n})\nexport class RicheditComponent<FT, T extends DataModel>\n implements OnInit, OnDestroy\n{\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public editable: boolean = true;\n @Input() public edit: boolean = true;\n @Input() public mode: \"dd\" | \"inline\" | \"form\" = \"dd\";\n /** Hide label (for inline forms) */\n @Input() public hideLabel: boolean = false;\n /** Hide button (for changed usage) */\n @Input() public hideButton: boolean = false;\n /** Form control, from outside or created */\n @Input() public fc!: FormControl<string | null>;\n /** Toolbar mode */\n @Input() public toolbar: \"none\" | \"default\" | \"light\" | Toolbar = \"default\";\n @Output() public changed = new EventEmitter<string | null>();\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n /** Computed required */\n public required!: boolean;\n public editor!: Editor;\n public html = \"\";\n public realToolbar!: Toolbar;\n\n ngOnInit(): void {\n this.editor = new Editor();\n if (this.toolbar === \"light\" || this.toolbar === \"default\") {\n this.realToolbar = RichEditToolbars[this.toolbar];\n } else if (this.toolbar === \"none\") {\n } else {\n this.realToolbar = this.toolbar as Toolbar;\n }\n if (!this.fc) {\n this.fc = new FormControl<string>(\"\");\n if (this.model && this.field) {\n this.manager = this.model.FM(this.field);\n this.required = this.manager?.required || false;\n this.fc.setValue((this.model as any)[this.field] || \"\", {\n emitEvent: false,\n });\n }\n if (this.edit) {\n this.fc.enable();\n } else {\n this.fc.disable();\n }\n this.fc.valueChanges.subscribe((v) => this.changed.emit(v));\n }\n }\n\n // make sure to destory the editor\n ngOnDestroy(): void {\n this.editor.destroy();\n }\n\n toggleEdit() {\n if (this.editable) {\n if (this.edit) {\n this.fc.disable();\n this.edit = false;\n } else {\n this.fc.enable();\n this.edit = true;\n }\n } else {\n this.fc.disable();\n this.edit = false;\n }\n }\n\n public async save() {\n if (this.model && this.field) {\n this.model.setFV(this.field, this.fc.value);\n if (this.mode === \"dd\") {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true }),\n );\n }\n }\n }\n}\n","\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n @if (edit && toolbar!=='none') {\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\"></ngx-editor-menu>\n }\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n @if (edit && !hideButton) {\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n }\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n@if (mode==='dd') {\n @if (!hideLabel) {\n <dt [class.required]=\"required\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n }\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n }\n <!-- Inline display-->\n @if (mode==='inline') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }\n <!-- Form display-->\n @if (mode==='form') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}