@sdcorejs/angular 19.0.8 → 19.0.10
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/README.md +270 -140
- package/assets/scss/core/utilities/_grid.scss +25 -19
- package/components/anchor/src/models/sd-anchor.model.d.ts +1 -1
- package/components/document-builder/src/document-builder.component.d.ts +2 -2
- package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +1 -1
- package/components/editor/src/plugins/image-upload/utils/batch.utils.d.ts +3 -3
- package/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.d.ts +10 -6
- package/components/form-generic/src/components/form-builder/components/attribute-expression/form-expression-query-adapter.d.ts +6 -0
- package/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +2 -4
- package/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +2 -4
- package/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +6 -7
- package/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/html/control/html-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/number/control/number-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/select/control/select-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/table/control/table-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.d.ts +2 -2
- package/components/form-generic/src/components/form-builder/form-builder-layout.d.ts +22 -0
- package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +24 -5
- package/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/html/html.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/number/number.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/select/select.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/components/variable/variable.component.d.ts +2 -2
- package/components/form-generic/src/components/form-render/form-render.component.d.ts +4 -6
- package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +2 -2
- package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
- package/components/form-generic/src/models/form-generic-component.model.d.ts +2 -2
- package/components/form-generic/src/services/form-generic.service.d.ts +1 -3
- package/components/import-excel/src/import-excel.model.d.ts +2 -2
- package/components/mini-editor/src/mini-editor.component.d.ts +4 -4
- package/components/modal/src/modal.component.d.ts +1 -1
- package/components/query-builder/src/query-builder.model.d.ts +4 -4
- package/components/splitter/src/splitter-state.service.d.ts +1 -1
- package/components/tab-router/src/models/tab-router.model.d.ts +2 -1
- package/components/tab-router/src/services/tab-router.service.d.ts +0 -1
- package/components/table/src/components/command/desktop-command.component.d.ts +8 -7
- package/components/table/src/components/command/pipes/command.pipe.d.ts +1 -12
- package/components/table/src/components/command/pipes/filter.pipe.d.ts +1 -8
- package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +1 -1
- package/components/table/src/models/table-column.model.d.ts +3 -2
- package/components/table/src/pipes/selection-disabled.pipe.d.ts +1 -1
- package/components/table/src/services/config.service.d.ts +4 -5
- package/components/table/src/services/table-filter/table-filter.service.d.ts +1 -0
- package/components/table/src/services/table-local/table-local.util.d.ts +19 -0
- package/components/table/src/services/table-reorder/table-reorder.util.d.ts +29 -0
- package/components/table/src/services/table-selection/table-selection.util.d.ts +8 -0
- package/components/table/src/services/tree/tree.util.d.ts +10 -1
- package/components/table/src/table.component.d.ts +6 -10
- package/components/view/src/view.component.d.ts +1 -1
- package/configurations/src/sd-core.configuration.d.ts +2 -2
- package/fesm2022/sdcorejs-angular-components-anchor.mjs +15 -18
- package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-avatar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-badge.mjs +0 -1
- package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-button.mjs +6 -7
- package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-chart.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-code-editor.mjs +1 -1
- package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs +17 -26
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-editor.mjs +7 -2
- package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs +711 -426
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-import-excel.mjs +35 -18
- package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-inform.mjs +0 -1
- package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-modal.mjs +25 -14
- package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-operator.mjs +1 -1
- package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-preview.mjs +33 -29
- package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-query-bar.mjs +15 -28
- package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs +2 -3
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-quick-action.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-section.mjs +0 -1
- package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +3 -3
- package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-splitter.mjs +4 -4
- package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tab-router.mjs +31 -31
- package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-table.mjs +794 -849
- package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-upload-file.mjs +6 -6
- package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-view.mjs +3 -9
- package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-directives.mjs +2 -7
- package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +0 -3
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-chip.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs +11 -5
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date.mjs +2 -4
- package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-datetime.mjs +2 -6
- package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input-color.mjs +3 -3
- package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input-number.mjs +1 -1
- package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-label.mjs +0 -1
- package/fesm2022/sdcorejs-angular-forms-label.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-radio.mjs +12 -2
- package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-select.mjs +45 -14
- package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-textarea.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-handlers.mjs +3 -6
- package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-i18n.mjs +11 -7
- package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-interceptors.mjs +0 -2
- package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-auth.mjs +14 -38
- package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-authom.mjs +14 -14
- package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +22 -11
- package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-layout.mjs +30 -27
- package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-permission.mjs +5 -12
- package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-pipes.mjs +71 -17
- package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-api.mjs +0 -2
- package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-cache.mjs +5 -11
- package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-confirm.mjs +16 -21
- package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-docx.mjs +2 -8
- package/fesm2022/sdcorejs-angular-services-docx.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-excel.mjs +2 -2
- package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-license.mjs +5 -12
- package/fesm2022/sdcorejs-angular-services-license.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-notify.mjs +70 -87
- package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-storage.mjs +6 -15
- package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-utilities-data-state.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +47 -5
- package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-utilities-models.mjs +18 -3
- package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular.mjs.map +1 -1
- package/forms/chip/src/chip.component.d.ts +2 -2
- package/forms/chip-calendar/src/chip-calendar.component.d.ts +2 -2
- package/forms/date-range/src/date-range.component.d.ts +2 -0
- package/forms/input-color/src/input-color.component.d.ts +2 -1
- package/forms/select/src/select-footer-action.directive.d.ts +5 -1
- package/forms/select/src/select.component.d.ts +4 -0
- package/modules/auth/guards/auth.guard.d.ts +2 -4
- package/modules/auth/guards/portal.guard.d.ts +2 -4
- package/modules/auth/services/auth.service.d.ts +3 -4
- package/modules/layout/modules/home/guards/home-redirect.guard.d.ts +3 -5
- package/modules/permission/src/configurations/permission.configuration.d.ts +3 -3
- package/modules/permission/src/guards/permission.guard.d.ts +2 -5
- package/package.json +2 -2
- package/pipes/index.d.ts +3 -0
- package/pipes/src/format-date.pipe.d.ts +8 -0
- package/pipes/src/format-datetime.pipe.d.ts +8 -0
- package/pipes/src/format-number.pipe.d.ts +1 -3
- package/pipes/src/view.pipe.d.ts +7 -0
- package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -3
- package/services/license/src/license.service.d.ts +2 -3
- package/services/notify/src/components/toast/toast.component.d.ts +9 -13
- package/services/notify/src/notify.service.d.ts +4 -5
- package/services/storage/src/storage.service.d.ts +3 -4
- package/utilities/extensions/index.d.ts +1 -0
- package/utilities/extensions/src/object.extension.d.ts +8 -0
- package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +0 -24
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import {
|
|
3
|
+
import { inject, Component, Injectable } from '@angular/core';
|
|
4
4
|
import { FormsModule } from '@angular/forms';
|
|
5
5
|
import * as i1 from '@angular/material/dialog';
|
|
6
|
-
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
6
|
+
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
7
7
|
import * as i2 from '@angular/material/icon';
|
|
8
8
|
import { MatIconModule } from '@angular/material/icon';
|
|
9
9
|
import { SdButton } from '@sdcorejs/angular/components/button';
|
|
@@ -14,25 +14,23 @@ import { Utilities } from '@sdcorejs/utils/fns';
|
|
|
14
14
|
import { I18nService } from '@sdcorejs/angular/i18n';
|
|
15
15
|
|
|
16
16
|
class DialogConfirmComponent {
|
|
17
|
-
dialogRef;
|
|
18
|
-
data;
|
|
19
17
|
value;
|
|
20
18
|
required = false;
|
|
21
19
|
id = `I${Utilities.generateUuid()}`;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (data?.input) {
|
|
26
|
-
this.value = data?.input?.defaultValue ?? '';
|
|
27
|
-
this.required = data?.input?.required || false;
|
|
20
|
+
dialogRef = inject((MatDialogRef));
|
|
21
|
+
data = inject(MAT_DIALOG_DATA);
|
|
22
|
+
constructor() {
|
|
23
|
+
if (this.data?.input) {
|
|
24
|
+
this.value = this.data?.input?.defaultValue ?? '';
|
|
25
|
+
this.required = this.data?.input?.required || false;
|
|
28
26
|
}
|
|
29
|
-
if (data?.date) {
|
|
30
|
-
this.value = data?.date?.defaultValue ?? '';
|
|
31
|
-
this.required = data?.date?.required || false;
|
|
27
|
+
if (this.data?.date) {
|
|
28
|
+
this.value = this.data?.date?.defaultValue ?? '';
|
|
29
|
+
this.required = this.data?.date?.required || false;
|
|
32
30
|
}
|
|
33
|
-
if (data?.radio) {
|
|
34
|
-
this.value = data?.radio?.defaultValue ?? '';
|
|
35
|
-
this.required = data?.radio?.required || false;
|
|
31
|
+
if (this.data?.radio) {
|
|
32
|
+
this.value = this.data?.radio?.defaultValue ?? '';
|
|
33
|
+
this.required = this.data?.radio?.required || false;
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
onCancel = () => {
|
|
@@ -47,16 +45,13 @@ class DialogConfirmComponent {
|
|
|
47
45
|
this.dialogRef.close({ action: 'ACCEPT', value: null });
|
|
48
46
|
}
|
|
49
47
|
};
|
|
50
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: DialogConfirmComponent, deps: [
|
|
48
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: DialogConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51
49
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: DialogConfirmComponent, isStandalone: true, selector: "sd-dialog-confirm", ngImport: i0, template: "<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host .mat-dialog-content{margin:0 -16px 16px!important}:host .mat-button{background-color:#f5f5f5}:host ::ng-deep .mat-dialog-title{display:flex;align-items:center;justify-content:flex-start}:host ::ng-deep .mat-dialog-title .mat-icon{margin-right:5px}:host{display:block}:host ::ng-deep .mat-dialog-title .mat-icon.info{color:var(--sd-info)}:host ::ng-deep .mat-dialog-title .mat-icon.warning{color:var(--sd-warning)}:host ::ng-deep .mat-dialog-title .mat-icon.success{color:var(--sd-success)}:host ::ng-deep .mat-dialog-title .mat-icon.error{color:var(--sd-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SdButton, selector: "sd-button", inputs: ["autoId", "type", "color", "size", "fontSet", "title", "width", "tooltip", "prefixIcon", "suffixIcon", "disabled", "loading", "block", "htmlType"], outputs: ["click"] }, { kind: "component", type: SdDate, selector: "sd-date", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "hideInlineError", "required", "disabled", "viewed", "clearable", "inlineError", "hyperlink", "appearance", "floatLabel", "min", "minDate", "max", "maxDate", "model"], outputs: ["modelChange", "sdChange", "sdFocus"] }, { kind: "component", type: SdRadio, selector: "sd-radio", inputs: ["autoId", "name", "form", "label", "placeholder", "display", "items", "valueField", "displayField", "required", "inlineError", "disabled", "viewed", "color", "hyperlink", "model"], outputs: ["modelChange", "sdChange", "sdSelection"] }, { kind: "component", type: SdTextarea, selector: "sd-textarea", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "rows", "hideInlineError", "required", "disabled", "viewed", "autoHeight", "maxlength", "pattern", "validator", "inlineError", "appearance", "floatLabel", "model"], outputs: ["modelChange", "sdChange"] }] });
|
|
52
50
|
}
|
|
53
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: DialogConfirmComponent, decorators: [{
|
|
54
52
|
type: Component,
|
|
55
53
|
args: [{ selector: 'sd-dialog-confirm', imports: [CommonModule, FormsModule, MatDialogModule, MatIconModule, SdButton, SdDate, SdRadio, SdTextarea], template: "<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host .mat-dialog-content{margin:0 -16px 16px!important}:host .mat-button{background-color:#f5f5f5}:host ::ng-deep .mat-dialog-title{display:flex;align-items:center;justify-content:flex-start}:host ::ng-deep .mat-dialog-title .mat-icon{margin-right:5px}:host{display:block}:host ::ng-deep .mat-dialog-title .mat-icon.info{color:var(--sd-info)}:host ::ng-deep .mat-dialog-title .mat-icon.warning{color:var(--sd-warning)}:host ::ng-deep .mat-dialog-title .mat-icon.success{color:var(--sd-success)}:host ::ng-deep .mat-dialog-title .mat-icon.error{color:var(--sd-error)}\n"] }]
|
|
56
|
-
}], ctorParameters: () => [
|
|
57
|
-
type: Inject,
|
|
58
|
-
args: [MAT_DIALOG_DATA]
|
|
59
|
-
}] }] });
|
|
54
|
+
}], ctorParameters: () => [] });
|
|
60
55
|
|
|
61
56
|
class SdConfirmService {
|
|
62
57
|
dialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-services-confirm.mjs","sources":["../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.html","../../../projects/sdcorejs-angular/services/confirm/src/lib/confirm.service.ts","../../../projects/sdcorejs-angular/services/confirm/src/public-api.ts","../../../projects/sdcorejs-angular/services/confirm/sdcorejs-angular-services-confirm.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdRadio } from '@sdcorejs/angular/forms/radio';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { Color } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\nexport interface DialogData {\n icon?: string;\n title?: string;\n message?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n input?: {\n placeholder?: string;\n minlength?: number;\n maxlength?: number;\n required?: boolean;\n defaultValue?: string;\n };\n date?: {\n required?: boolean;\n placeholder?: string;\n defaultValue?: string | Date;\n min?: string | Date;\n max?: string | Date;\n };\n radio?: {\n required?: boolean;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n };\n}\n\n@Component({\n selector: 'sd-dialog-confirm',\n templateUrl: 'dialog-confirm.component.html',\n styleUrls: ['./dialog-confirm.component.scss'],\n imports: [CommonModule, FormsModule, MatDialogModule, MatIconModule, SdButton, SdDate, SdRadio, SdTextarea],\n})\nexport class DialogConfirmComponent {\n value: any;\n required = false;\n id = `I${Utilities.generateUuid()}`;\n constructor(\n public dialogRef: MatDialogRef<DialogConfirmComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) {\n if (data?.input) {\n this.value = data?.input?.defaultValue ?? '';\n this.required = data?.input?.required || false;\n }\n if (data?.date) {\n this.value = data?.date?.defaultValue ?? '';\n this.required = data?.date?.required || false;\n }\n if (data?.radio) {\n this.value = data?.radio?.defaultValue ?? '';\n this.required = data?.radio?.required || false;\n }\n }\n\n onCancel = () => {\n this.dialogRef.close({ action: 'CANCEL', value: null });\n };\n\n onAccept = () => {\n // Always return an object with action and value for consistency\n if (this.data?.radio || this.data?.input || this.data?.date) {\n this.dialogRef.close({ action: 'ACCEPT', value: this.value });\n } else {\n this.dialogRef.close({ action: 'ACCEPT', value: null });\n }\n };\n}\n","<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogConfirmComponent } from './components/dialog-confirm/dialog-confirm.component';\nimport { Color } from '@sdcorejs/utils/models';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdConfirmService {\n readonly #i18n = inject(I18nService);\n\n constructor(private dialog: MatDialog) {}\n\n confirm = (\n message: string,\n option: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n width?: string;\n disableBackdropClose?: boolean;\n } = {}\n ) => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: option?.width || '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withInput = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n maxlength?: number;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n input: {\n maxlength: option?.maxlength || 255,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withRadio = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n radio: {\n items: option?.items || [],\n valueField: option?.valueField || 'value',\n displayField: option?.displayField || 'label',\n display: option?.display || 'row',\n required: option?.required,\n defaultValue: option?.defaultValue,\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withDate = (\n message?: string,\n option?: {\n title?: string;\n\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | Date;\n placeholder?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n date: {\n placeholder: option?.placeholder,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n}\n","/*\n * Public API Surface of superdev-angular-core\n */\n\nexport * from './lib/components/dialog-confirm/dialog-confirm.component';\nexport * from './lib/confirm.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-services-confirm.mjs","sources":["../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.html","../../../projects/sdcorejs-angular/services/confirm/src/lib/confirm.service.ts","../../../projects/sdcorejs-angular/services/confirm/src/public-api.ts","../../../projects/sdcorejs-angular/services/confirm/sdcorejs-angular-services-confirm.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdRadio } from '@sdcorejs/angular/forms/radio';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { Color } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\nexport interface DialogData {\n icon?: string;\n title?: string;\n message?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n input?: {\n placeholder?: string;\n minlength?: number;\n maxlength?: number;\n required?: boolean;\n defaultValue?: string;\n };\n date?: {\n required?: boolean;\n placeholder?: string;\n defaultValue?: string | Date;\n min?: string | Date;\n max?: string | Date;\n };\n radio?: {\n required?: boolean;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n };\n}\n\n@Component({\n selector: 'sd-dialog-confirm',\n templateUrl: 'dialog-confirm.component.html',\n styleUrl: './dialog-confirm.component.scss',\n imports: [CommonModule, FormsModule, MatDialogModule, MatIconModule, SdButton, SdDate, SdRadio, SdTextarea],\n})\nexport class DialogConfirmComponent {\n value: any;\n required = false;\n id = `I${Utilities.generateUuid()}`;\n public readonly dialogRef = inject(MatDialogRef<DialogConfirmComponent>);\n public readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n\n constructor() {\n if (this.data?.input) {\n this.value = this.data?.input?.defaultValue ?? '';\n this.required = this.data?.input?.required || false;\n }\n if (this.data?.date) {\n this.value = this.data?.date?.defaultValue ?? '';\n this.required = this.data?.date?.required || false;\n }\n if (this.data?.radio) {\n this.value = this.data?.radio?.defaultValue ?? '';\n this.required = this.data?.radio?.required || false;\n }\n }\n\n onCancel = () => {\n this.dialogRef.close({ action: 'CANCEL', value: null });\n };\n\n onAccept = () => {\n // Always return an object with action and value for consistency\n if (this.data?.radio || this.data?.input || this.data?.date) {\n this.dialogRef.close({ action: 'ACCEPT', value: this.value });\n } else {\n this.dialogRef.close({ action: 'ACCEPT', value: null });\n }\n };\n}\n","<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogConfirmComponent } from './components/dialog-confirm/dialog-confirm.component';\nimport { Color } from '@sdcorejs/utils/models';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdConfirmService {\n readonly #i18n = inject(I18nService);\n\n constructor(private dialog: MatDialog) {}\n\n confirm = (\n message: string,\n option: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n width?: string;\n disableBackdropClose?: boolean;\n } = {}\n ) => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: option?.width || '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withInput = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n maxlength?: number;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n input: {\n maxlength: option?.maxlength || 255,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withRadio = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n radio: {\n items: option?.items || [],\n valueField: option?.valueField || 'value',\n displayField: option?.displayField || 'label',\n display: option?.display || 'row',\n required: option?.required,\n defaultValue: option?.defaultValue,\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withDate = (\n message?: string,\n option?: {\n title?: string;\n\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | Date;\n placeholder?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n date: {\n placeholder: option?.placeholder,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n}\n","/*\n * Public API Surface of superdev-angular-core\n */\n\nexport * from './lib/components/dialog-confirm/dialog-confirm.component';\nexport * from './lib/confirm.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { OpenFile, PreopenDirectory, File as File$1, ConsoleStdout, WASI } from
|
|
|
5
5
|
import * as i1 from '@sdcorejs/angular/services/notify';
|
|
6
6
|
import * as i2 from '@sdcorejs/angular/services/loading';
|
|
7
7
|
|
|
8
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
8
9
|
/* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js
|
|
9
10
|
*
|
|
10
11
|
* This file is a local copy of the environment-agnostic pandoc core.
|
|
@@ -21,7 +22,7 @@ function createPandocInstance(wasmBinary) {
|
|
|
21
22
|
const fileSystem = new Map();
|
|
22
23
|
const fds = [
|
|
23
24
|
new OpenFile(new File$1(new Uint8Array(), { readonly: true })),
|
|
24
|
-
ConsoleStdout.lineBuffered((
|
|
25
|
+
ConsoleStdout.lineBuffered(() => undefined),
|
|
25
26
|
ConsoleStdout.lineBuffered((msg) => console.warn(`[WASI stderr] ${msg}`)),
|
|
26
27
|
new PreopenDirectory('/', fileSystem),
|
|
27
28
|
];
|
|
@@ -201,16 +202,12 @@ class SdDocxService {
|
|
|
201
202
|
if (this.#pandocInstance) {
|
|
202
203
|
return this.#pandocInstance;
|
|
203
204
|
}
|
|
204
|
-
console.log('[SdDocxService] Fetching WASM binary from:', this.#PANDOC_WASM_URL);
|
|
205
205
|
const wasmResponse = await fetch(this.#PANDOC_WASM_URL);
|
|
206
206
|
if (!wasmResponse.ok) {
|
|
207
207
|
throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);
|
|
208
208
|
}
|
|
209
|
-
console.log('[SdDocxService] WASM fetched, size:', wasmResponse.headers.get('content-length'));
|
|
210
209
|
const wasmBinary = await wasmResponse.arrayBuffer();
|
|
211
|
-
console.log('[SdDocxService] WASM binary loaded, bytes:', wasmBinary.byteLength);
|
|
212
210
|
this.#pandocInstance = await createPandocInstance(wasmBinary);
|
|
213
|
-
console.log('[SdDocxService] Pandoc instance created successfully');
|
|
214
211
|
return this.#pandocInstance;
|
|
215
212
|
}
|
|
216
213
|
async convertToHtml(input, options) {
|
|
@@ -251,9 +248,7 @@ class SdDocxService {
|
|
|
251
248
|
return null;
|
|
252
249
|
}
|
|
253
250
|
}
|
|
254
|
-
console.log('[SdDocxService] Getting pandoc instance...');
|
|
255
251
|
const pandoc = await this.#getPandocInstance();
|
|
256
|
-
console.log('[SdDocxService] Converting DOCX, blob size:', blob.size);
|
|
257
252
|
const pandocOpts = {
|
|
258
253
|
from: 'docx',
|
|
259
254
|
to: 'html',
|
|
@@ -262,7 +257,6 @@ class SdDocxService {
|
|
|
262
257
|
'embed-resources': true,
|
|
263
258
|
};
|
|
264
259
|
const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });
|
|
265
|
-
console.log('[SdDocxService] Conversion done, stdout length:', result.stdout?.length, 'stderr:', result.stderr);
|
|
266
260
|
return {
|
|
267
261
|
html: result.stdout,
|
|
268
262
|
messages: result.warnings.map((w) => String(w)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-services-docx.mjs","sources":["../../../projects/sdcorejs-angular/services/docx/src/lib/pandoc-core.ts","../../../projects/sdcorejs-angular/services/docx/src/lib/docx.service.ts","../../../projects/sdcorejs-angular/services/docx/sdcorejs-angular-services-docx.ts"],"sourcesContent":["/* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js\n *\n * This file is a local copy of the environment-agnostic pandoc core.\n * It imports @bjorn3/browser_wasi_shim directly, avoiding the pandoc-wasm\n * package entry points which use top-level await (incompatible with\n * Angular's esbuild/Vite build pipeline).\n *\n * Source: https://github.com/pandoc/pandoc-wasm (GPL-2.0-or-later)\n */\n\n// @ts-nocheck\nimport {\n ConsoleStdout,\n File,\n OpenFile,\n PreopenDirectory,\n WASI,\n} from '@bjorn3/browser_wasi_shim';\n\nexport interface PandocConvertResult {\n stdout: string;\n stderr: string;\n warnings: any[];\n files: Record<string, any>;\n mediaFiles: Record<string, any>;\n}\n\nexport interface PandocInstance {\n convert(\n options: Record<string, any>,\n stdin: string | null,\n files: Record<string, Blob | string>\n ): Promise<PandocConvertResult>;\n}\n\nexport function createPandocInstance(wasmBinary: ArrayBuffer): Promise<PandocInstance> {\n const args = ['pandoc.wasm', '+RTS', '-H64m', '-RTS'];\n const env: string[] = [];\n const fileSystem = new Map();\n const fds = [\n new OpenFile(new File(new Uint8Array(), { readonly: true })),\n ConsoleStdout.lineBuffered((msg: string) => console.log(`[WASI stdout] ${msg}`)),\n ConsoleStdout.lineBuffered((msg: string) => console.warn(`[WASI stderr] ${msg}`)),\n new PreopenDirectory('/', fileSystem),\n ];\n const options = { debug: false };\n const wasi = new WASI(args, env, fds, options);\n\n return WebAssembly.instantiate(wasmBinary, {\n wasi_snapshot_preview1: wasi.wasiImport,\n }).then(({ instance }: any) => {\n wasi.initialize(instance);\n instance.exports.__wasm_call_ctors();\n\n function memory_data_view() {\n return new DataView(instance.exports.memory.buffer);\n }\n\n const argc_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argc_ptr, args.length, true);\n const argv = instance.exports.malloc(4 * (args.length + 1));\n for (let i = 0; i < args.length; ++i) {\n const arg = instance.exports.malloc(args[i].length + 1);\n new TextEncoder().encodeInto(\n args[i],\n new Uint8Array(instance.exports.memory.buffer, arg, args[i].length)\n );\n memory_data_view().setUint8(arg + args[i].length, 0);\n memory_data_view().setUint32(argv + 4 * i, arg, true);\n }\n memory_data_view().setUint32(argv + 4 * args.length, 0, true);\n const argv_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argv_ptr, argv, true);\n\n instance.exports.hs_init_with_rtsopts(argc_ptr, argv_ptr);\n\n async function addFile(filename: string, data: Blob | string, readonly: boolean) {\n let uint8Array: Uint8Array;\n if (typeof data === 'string') {\n uint8Array = new TextEncoder().encode(data);\n } else {\n const buffer = await data.arrayBuffer();\n uint8Array = new Uint8Array(buffer);\n }\n const file = new File(uint8Array, { readonly });\n fileSystem.set(filename, file);\n }\n\n async function convert(\n options: Record<string, any>,\n stdin: string | null,\n files: Record<string, Blob | string>\n ): Promise<PandocConvertResult> {\n const opts_str = JSON.stringify(options);\n const encoded = new TextEncoder().encode(opts_str);\n const opts_ptr = instance.exports.malloc(encoded.length);\n new TextEncoder().encodeInto(\n opts_str,\n new Uint8Array(instance.exports.memory.buffer, opts_ptr, encoded.length)\n );\n\n files = { ...files };\n\n fileSystem.clear();\n const in_file = new File(new Uint8Array(), { readonly: true });\n const out_file = new File(new Uint8Array(), { readonly: false });\n const err_file = new File(new Uint8Array(), { readonly: false });\n const warnings_file = new File(new Uint8Array(), { readonly: false });\n fileSystem.set('stdin', in_file);\n fileSystem.set('stdout', out_file);\n fileSystem.set('stderr', err_file);\n fileSystem.set('warnings', warnings_file);\n\n const knownFiles = new Set(['stdin', 'stdout', 'stderr', 'warnings']);\n\n for (const filename in files) {\n await addFile(filename, files[filename], true);\n knownFiles.add(filename);\n }\n\n const outputFileName = options['output-file'] || null;\n const extractMediaPath = options['extract-media'] || null;\n\n if (outputFileName) {\n await addFile(outputFileName, new Blob(), false);\n knownFiles.add(outputFileName);\n }\n\n if (extractMediaPath) {\n await addFile(extractMediaPath, new Blob(), false);\n if (extractMediaPath.endsWith('.zip')) {\n knownFiles.add(extractMediaPath);\n }\n }\n\n if (stdin) {\n in_file.data = new TextEncoder().encode(stdin);\n }\n\n instance.exports.convert(opts_ptr, encoded.length);\n\n if (options['output-file']) {\n const outputFile = fileSystem.get(options['output-file']);\n if (outputFile && outputFile.data && outputFile.data.length > 0) {\n files[options['output-file']] = new Blob([outputFile.data]);\n }\n }\n\n if (options['extract-media']) {\n const mediaFile = fileSystem.get(options['extract-media']);\n if (mediaFile && mediaFile.data && mediaFile.data.length > 0) {\n files[options['extract-media']] = new Blob([mediaFile.data], { type: 'application/zip' });\n }\n }\n\n const mediaFiles: Record<string, Blob> = {};\n for (const [name, fileData] of fileSystem.entries()) {\n if (!knownFiles.has(name) && fileData && fileData.data && fileData.data.length > 0) {\n const blob = new Blob([fileData.data]);\n files[name] = blob;\n if (name !== outputFileName && name !== extractMediaPath) {\n mediaFiles[name] = blob;\n }\n }\n }\n\n const rawWarnings = new TextDecoder('utf-8', { fatal: true }).decode(warnings_file.data);\n let warnings: any[] = [];\n if (rawWarnings) {\n try {\n warnings = JSON.parse(rawWarnings);\n } catch (e) {\n console.warn('Failed to parse warnings:', e);\n }\n }\n\n return {\n stdout: new TextDecoder('utf-8', { fatal: true }).decode(out_file.data),\n stderr: new TextDecoder('utf-8', { fatal: true }).decode(err_file.data),\n warnings,\n files,\n mediaFiles,\n };\n }\n\n return { convert } as PandocInstance;\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SdNotifyService } from '@sdcorejs/angular/services/notify';\nimport { SdLoadingService } from '@sdcorejs/angular/services/loading';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { SdDocxConvertOptions, SdDocxConvertResult } from './docx.model';\nimport { createPandocInstance, PandocInstance } from './pandoc-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdDocxService {\n readonly #i18n = inject(I18nService);\n\n readonly #DEFAULT_MAX_SIZE_MB = 50;\n readonly #VALID_EXTENSIONS = ['.doc', '.docx'];\n\n readonly #PANDOC_WASM_URL = 'https://pandoc.github.io/pandoc-wasm/pandoc.wasm';\n\n #fileInput: HTMLInputElement | null = null;\n #pandocInstance: PandocInstance | null = null;\n\n constructor(\n private notifyService: SdNotifyService,\n private loadingService: SdLoadingService\n ) {}\n\n async open(options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n return new Promise(resolve => {\n this.#createFileInput();\n if (!this.#fileInput) {\n resolve(null);\n return;\n }\n\n const handleChange = async (event: Event) => {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n resolve(null);\n return;\n }\n\n this.loadingService.start();\n try {\n const result = await this.convertToHtml(file, options);\n resolve(result);\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n resolve(null);\n } finally {\n input.value = '';\n input.removeEventListener('change', handleChange);\n this.loadingService.stop();\n }\n };\n\n this.#fileInput.addEventListener('change', handleChange, { once: true });\n this.#fileInput.click();\n });\n }\n\n #createFileInput(): void {\n if (this.#fileInput) {\n return;\n }\n\n this.#fileInput = document.createElement('input');\n this.#fileInput.type = 'file';\n this.#fileInput.accept = '.doc,.docx';\n this.#fileInput.style.display = 'none';\n document.body.appendChild(this.#fileInput);\n }\n\n async #getPandocInstance(): Promise<PandocInstance> {\n if (this.#pandocInstance) {\n return this.#pandocInstance;\n }\n\n console.log('[SdDocxService] Fetching WASM binary from:', this.#PANDOC_WASM_URL);\n const wasmResponse = await fetch(this.#PANDOC_WASM_URL);\n if (!wasmResponse.ok) {\n throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);\n }\n console.log('[SdDocxService] WASM fetched, size:', wasmResponse.headers.get('content-length'));\n const wasmBinary = await wasmResponse.arrayBuffer();\n console.log('[SdDocxService] WASM binary loaded, bytes:', wasmBinary.byteLength);\n this.#pandocInstance = await createPandocInstance(wasmBinary);\n console.log('[SdDocxService] Pandoc instance created successfully');\n return this.#pandocInstance;\n }\n\n async convertToHtml(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n const opts = {\n validateFormat: true,\n validateSize: true,\n maxSizeInMb: this.#DEFAULT_MAX_SIZE_MB,\n ...options,\n };\n\n try {\n let fileName: string | undefined;\n let fileSize: number | undefined;\n let blob: Blob;\n\n if (input instanceof File) {\n fileName = input.name;\n fileSize = input.size;\n blob = input;\n } else if (input instanceof Blob) {\n fileSize = input.size;\n blob = input;\n } else {\n blob = new Blob([input], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n });\n }\n\n if (opts.validateFormat && fileName) {\n if (!this.#isValidFormat(fileName)) {\n this.notifyService.error(this.#i18n.t('core.docx.invalid-format'));\n return null;\n }\n }\n\n if (opts.validateSize && fileSize !== undefined) {\n const maxSizeInBytes = opts.maxSizeInMb! * 1024 * 1024;\n if (fileSize > maxSizeInBytes) {\n this.notifyService.error(this.#i18n.t('core.docx.size-exceeded'));\n return null;\n }\n }\n\n console.log('[SdDocxService] Getting pandoc instance...');\n const pandoc = await this.#getPandocInstance();\n console.log('[SdDocxService] Converting DOCX, blob size:', blob.size);\n\n const pandocOpts: Record<string, any> = {\n from: 'docx',\n to: 'html',\n 'input-files': ['document.docx'],\n standalone: true,\n 'embed-resources': true,\n };\n\n const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });\n console.log('[SdDocxService] Conversion done, stdout length:', result.stdout?.length, 'stderr:', result.stderr);\n\n return {\n html: result.stdout,\n messages: result.warnings.map((w: any) => String(w)),\n };\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n return null;\n }\n }\n\n async convertToHtmlString(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<string | null> {\n const result = await this.convertToHtml(input, options);\n return result?.html ?? null;\n }\n\n #isValidFormat(fileName: string): boolean {\n const lowerCaseName = fileName.toLowerCase();\n return this.#VALID_EXTENSIONS.some(ext => lowerCaseName.endsWith(ext));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["File"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-services-docx.mjs","sources":["../../../projects/sdcorejs-angular/services/docx/src/lib/pandoc-core.ts","../../../projects/sdcorejs-angular/services/docx/src/lib/docx.service.ts","../../../projects/sdcorejs-angular/services/docx/sdcorejs-angular-services-docx.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js\n *\n * This file is a local copy of the environment-agnostic pandoc core.\n * It imports @bjorn3/browser_wasi_shim directly, avoiding the pandoc-wasm\n * package entry points which use top-level await (incompatible with\n * Angular's esbuild/Vite build pipeline).\n *\n * Source: https://github.com/pandoc/pandoc-wasm (GPL-2.0-or-later)\n */\n\n// @ts-nocheck\nimport { ConsoleStdout, File, OpenFile, PreopenDirectory, WASI } from '@bjorn3/browser_wasi_shim';\n\nexport interface PandocConvertResult {\n stdout: string;\n stderr: string;\n warnings: any[];\n files: Record<string, any>;\n mediaFiles: Record<string, any>;\n}\n\nexport interface PandocInstance {\n convert(options: Record<string, any>, stdin: string | null, files: Record<string, Blob | string>): Promise<PandocConvertResult>;\n}\n\nexport function createPandocInstance(wasmBinary: ArrayBuffer): Promise<PandocInstance> {\n const args = ['pandoc.wasm', '+RTS', '-H64m', '-RTS'];\n const env: string[] = [];\n const fileSystem = new Map();\n const fds = [\n new OpenFile(new File(new Uint8Array(), { readonly: true })),\n ConsoleStdout.lineBuffered(() => undefined),\n ConsoleStdout.lineBuffered((msg: string) => console.warn(`[WASI stderr] ${msg}`)),\n new PreopenDirectory('/', fileSystem),\n ];\n const options = { debug: false };\n const wasi = new WASI(args, env, fds, options);\n\n return WebAssembly.instantiate(wasmBinary, {\n wasi_snapshot_preview1: wasi.wasiImport,\n }).then(({ instance }: any) => {\n wasi.initialize(instance);\n instance.exports.__wasm_call_ctors();\n\n function memory_data_view() {\n return new DataView(instance.exports.memory.buffer);\n }\n\n const argc_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argc_ptr, args.length, true);\n const argv = instance.exports.malloc(4 * (args.length + 1));\n for (let i = 0; i < args.length; ++i) {\n const arg = instance.exports.malloc(args[i].length + 1);\n new TextEncoder().encodeInto(args[i], new Uint8Array(instance.exports.memory.buffer, arg, args[i].length));\n memory_data_view().setUint8(arg + args[i].length, 0);\n memory_data_view().setUint32(argv + 4 * i, arg, true);\n }\n memory_data_view().setUint32(argv + 4 * args.length, 0, true);\n const argv_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argv_ptr, argv, true);\n\n instance.exports.hs_init_with_rtsopts(argc_ptr, argv_ptr);\n\n async function addFile(filename: string, data: Blob | string, readonly: boolean) {\n let uint8Array: Uint8Array;\n if (typeof data === 'string') {\n uint8Array = new TextEncoder().encode(data);\n } else {\n const buffer = await data.arrayBuffer();\n uint8Array = new Uint8Array(buffer);\n }\n const file = new File(uint8Array, { readonly });\n fileSystem.set(filename, file);\n }\n\n async function convert(\n options: Record<string, any>,\n stdin: string | null,\n files: Record<string, Blob | string>\n ): Promise<PandocConvertResult> {\n const opts_str = JSON.stringify(options);\n const encoded = new TextEncoder().encode(opts_str);\n const opts_ptr = instance.exports.malloc(encoded.length);\n new TextEncoder().encodeInto(opts_str, new Uint8Array(instance.exports.memory.buffer, opts_ptr, encoded.length));\n\n files = { ...files };\n\n fileSystem.clear();\n const in_file = new File(new Uint8Array(), { readonly: true });\n const out_file = new File(new Uint8Array(), { readonly: false });\n const err_file = new File(new Uint8Array(), { readonly: false });\n const warnings_file = new File(new Uint8Array(), { readonly: false });\n fileSystem.set('stdin', in_file);\n fileSystem.set('stdout', out_file);\n fileSystem.set('stderr', err_file);\n fileSystem.set('warnings', warnings_file);\n\n const knownFiles = new Set(['stdin', 'stdout', 'stderr', 'warnings']);\n\n for (const filename in files) {\n await addFile(filename, files[filename], true);\n knownFiles.add(filename);\n }\n\n const outputFileName = options['output-file'] || null;\n const extractMediaPath = options['extract-media'] || null;\n\n if (outputFileName) {\n await addFile(outputFileName, new Blob(), false);\n knownFiles.add(outputFileName);\n }\n\n if (extractMediaPath) {\n await addFile(extractMediaPath, new Blob(), false);\n if (extractMediaPath.endsWith('.zip')) {\n knownFiles.add(extractMediaPath);\n }\n }\n\n if (stdin) {\n in_file.data = new TextEncoder().encode(stdin);\n }\n\n instance.exports.convert(opts_ptr, encoded.length);\n\n if (options['output-file']) {\n const outputFile = fileSystem.get(options['output-file']);\n if (outputFile && outputFile.data && outputFile.data.length > 0) {\n files[options['output-file']] = new Blob([outputFile.data]);\n }\n }\n\n if (options['extract-media']) {\n const mediaFile = fileSystem.get(options['extract-media']);\n if (mediaFile && mediaFile.data && mediaFile.data.length > 0) {\n files[options['extract-media']] = new Blob([mediaFile.data], { type: 'application/zip' });\n }\n }\n\n const mediaFiles: Record<string, Blob> = {};\n for (const [name, fileData] of fileSystem.entries()) {\n if (!knownFiles.has(name) && fileData && fileData.data && fileData.data.length > 0) {\n const blob = new Blob([fileData.data]);\n files[name] = blob;\n if (name !== outputFileName && name !== extractMediaPath) {\n mediaFiles[name] = blob;\n }\n }\n }\n\n const rawWarnings = new TextDecoder('utf-8', { fatal: true }).decode(warnings_file.data);\n let warnings: any[] = [];\n if (rawWarnings) {\n try {\n warnings = JSON.parse(rawWarnings);\n } catch (e) {\n console.warn('Failed to parse warnings:', e);\n }\n }\n\n return {\n stdout: new TextDecoder('utf-8', { fatal: true }).decode(out_file.data),\n stderr: new TextDecoder('utf-8', { fatal: true }).decode(err_file.data),\n warnings,\n files,\n mediaFiles,\n };\n }\n\n return { convert } as PandocInstance;\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SdNotifyService } from '@sdcorejs/angular/services/notify';\nimport { SdLoadingService } from '@sdcorejs/angular/services/loading';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { SdDocxConvertOptions, SdDocxConvertResult } from './docx.model';\nimport { createPandocInstance, PandocInstance } from './pandoc-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdDocxService {\n readonly #i18n = inject(I18nService);\n\n readonly #DEFAULT_MAX_SIZE_MB = 50;\n readonly #VALID_EXTENSIONS = ['.doc', '.docx'];\n\n readonly #PANDOC_WASM_URL = 'https://pandoc.github.io/pandoc-wasm/pandoc.wasm';\n\n #fileInput: HTMLInputElement | null = null;\n #pandocInstance: PandocInstance | null = null;\n\n constructor(\n private notifyService: SdNotifyService,\n private loadingService: SdLoadingService\n ) {}\n\n async open(options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n return new Promise(resolve => {\n this.#createFileInput();\n if (!this.#fileInput) {\n resolve(null);\n return;\n }\n\n const handleChange = async (event: Event) => {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n resolve(null);\n return;\n }\n\n this.loadingService.start();\n try {\n const result = await this.convertToHtml(file, options);\n resolve(result);\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n resolve(null);\n } finally {\n input.value = '';\n input.removeEventListener('change', handleChange);\n this.loadingService.stop();\n }\n };\n\n this.#fileInput.addEventListener('change', handleChange, { once: true });\n this.#fileInput.click();\n });\n }\n\n #createFileInput(): void {\n if (this.#fileInput) {\n return;\n }\n\n this.#fileInput = document.createElement('input');\n this.#fileInput.type = 'file';\n this.#fileInput.accept = '.doc,.docx';\n this.#fileInput.style.display = 'none';\n document.body.appendChild(this.#fileInput);\n }\n\n async #getPandocInstance(): Promise<PandocInstance> {\n if (this.#pandocInstance) {\n return this.#pandocInstance;\n }\n\n const wasmResponse = await fetch(this.#PANDOC_WASM_URL);\n if (!wasmResponse.ok) {\n throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);\n }\n const wasmBinary = await wasmResponse.arrayBuffer();\n this.#pandocInstance = await createPandocInstance(wasmBinary);\n return this.#pandocInstance;\n }\n\n async convertToHtml(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n const opts = {\n validateFormat: true,\n validateSize: true,\n maxSizeInMb: this.#DEFAULT_MAX_SIZE_MB,\n ...options,\n };\n\n try {\n let fileName: string | undefined;\n let fileSize: number | undefined;\n let blob: Blob;\n\n if (input instanceof File) {\n fileName = input.name;\n fileSize = input.size;\n blob = input;\n } else if (input instanceof Blob) {\n fileSize = input.size;\n blob = input;\n } else {\n blob = new Blob([input], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n });\n }\n\n if (opts.validateFormat && fileName) {\n if (!this.#isValidFormat(fileName)) {\n this.notifyService.error(this.#i18n.t('core.docx.invalid-format'));\n return null;\n }\n }\n\n if (opts.validateSize && fileSize !== undefined) {\n const maxSizeInBytes = opts.maxSizeInMb! * 1024 * 1024;\n if (fileSize > maxSizeInBytes) {\n this.notifyService.error(this.#i18n.t('core.docx.size-exceeded'));\n return null;\n }\n }\n\n const pandoc = await this.#getPandocInstance();\n\n const pandocOpts: Record<string, any> = {\n from: 'docx',\n to: 'html',\n 'input-files': ['document.docx'],\n standalone: true,\n 'embed-resources': true,\n };\n\n const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });\n\n return {\n html: result.stdout,\n messages: result.warnings.map((w: any) => String(w)),\n };\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n return null;\n }\n }\n\n async convertToHtmlString(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<string | null> {\n const result = await this.convertToHtml(input, options);\n return result?.html ?? null;\n }\n\n #isValidFormat(fileName: string): boolean {\n const lowerCaseName = fileName.toLowerCase();\n return this.#VALID_EXTENSIONS.some(ext => lowerCaseName.endsWith(ext));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["File"],"mappings":"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"}
|
|
@@ -212,9 +212,9 @@ class SdExcelService {
|
|
|
212
212
|
};
|
|
213
213
|
const headerLine = columns.map(c => escape(c.title)).join(',');
|
|
214
214
|
const dataLines = items.map(item => columns.map(c => escape(item[c.field])).join(','));
|
|
215
|
-
// Prepend UTF-8 BOM
|
|
215
|
+
// Prepend UTF-8 BOM so Excel opens Vietnamese text with the correct encoding.
|
|
216
216
|
// Dùng CRLF vì Excel trên Windows ưu tiên, macOS Excel cũng chấp nhận.
|
|
217
|
-
const csv = '
|
|
217
|
+
const csv = '\uFEFF' + [headerLine, ...dataLines].join('\r\n');
|
|
218
218
|
BrowserUtilities.downloadBlob(new Blob([csv], { type: 'text/csv;charset=utf-8;' }), filename);
|
|
219
219
|
};
|
|
220
220
|
export = async (option) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-services-excel.mjs","sources":["../../../projects/sdcorejs-angular/services/excel/src/lib/excel.service.ts","../../../projects/sdcorejs-angular/services/excel/sdcorejs-angular-services-excel.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport type { CellValue, Style } from 'exceljs';\n// import hash from 'object-hash';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { BrowserUtilities } from '@sdcorejs/utils/fns';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { SdExcelExportOption, SdExcelTemplate } from './excel.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdExcelService {\n readonly #i18n = inject(I18nService);\n #fieldStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n font: {\n bold: true,\n size: 11,\n color: { argb: '000000' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'FAFAFA',\n },\n },\n };\n #titleColor = 'FFFFFF';\n #titleFgColor = '143180';\n #titleStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n font: {\n bold: true,\n size: 11,\n color: { argb: this.#titleColor },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: this.#titleFgColor,\n },\n },\n };\n\n #requiredStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n font: {\n italic: true,\n size: 11,\n color: { argb: 'FFFFFF' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'FF1744',\n },\n },\n };\n\n #descriptionStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n wrapText: true,\n },\n font: {\n italic: true,\n size: 9,\n color: { argb: '000000' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'CFD8DC',\n },\n },\n };\n\n #cellStyle: Partial<Style> = {\n alignment: {\n vertical: 'middle',\n wrapText: true,\n },\n };\n\n constructor() {}\n\n // exceljs là CJS module — khi dynamic import từ ESM, named export `Workbook`\n // có thể nằm trên `mod.Workbook` hoặc bị bọc trong `mod.default.Workbook` tuỳ bundler.\n // Helper này chuẩn hoá cả hai trường hợp.\n async #loadWorkbook(): Promise<new () => import('exceljs').Workbook> {\n const mod: any = await import('exceljs');\n return mod.Workbook ?? mod.default?.Workbook;\n }\n\n generateTemplate = async (template: SdExcelTemplate) => {\n const { fileName, columns, sheets } = template;\n if (!Array.isArray(columns)) {\n throw new Error('Excel template columns must be an array');\n }\n for (const [idx, column] of columns.entries()) {\n if (!column.field) {\n throw new Error(`Column ${idx + 1}: Field is required`);\n }\n if (!column.title) {\n throw new Error(`Column ${idx + 1}: Title is required`);\n }\n }\n const hasDescription = columns.some(column => column.description);\n const Workbook = await this.#loadWorkbook();\n const workbook = new Workbook();\n const firstSheet = workbook.addWorksheet('template'); // Lấy ra sheet đầu tiên\n columns.forEach((column, index) => {\n const { required, fill, fontColor } = column;\n const cellField = firstSheet.getCell(1, index + 1);\n const cellTitle = firstSheet.getCell(2, index + 1);\n const cellDescription = firstSheet.getCell(3, index + 1);\n let width = 120;\n if (column.width && column.width.endsWith('px')) {\n width = +column.width.replace('px', '');\n }\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\n cellField.style = this.#fieldStyle;\n if (required) {\n cellField.style = this.#requiredStyle;\n } else {\n cellField.style = this.#fieldStyle;\n }\n cellTitle.style = {\n ...this.#titleStyle,\n font: {\n ...this.#titleStyle?.font,\n color: {\n ...this.#titleStyle?.font?.color,\n argb: fontColor || this.#titleStyle?.font?.color?.argb,\n },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: fill || this.#titleFgColor,\n },\n },\n };\n cellField.value = column.field;\n cellTitle.value = column.title;\n if (hasDescription) {\n cellDescription.style = this.#descriptionStyle;\n cellDescription.value = column.description || '';\n }\n });\n if (sheets?.length) {\n for (const sheet of sheets) {\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.headers)) {\n const newSheet = workbook.addWorksheet(sheet.name);\n sheet.headers.forEach((header, index) => {\n newSheet.getColumn(index + 1).width = 30;\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\n newSheet.getCell(1, index + 1).value = header.value;\n newSheet.getCell(2, index + 1).style = this.#titleStyle;\n newSheet.getCell(2, index + 1).value = header.display || header.value;\n });\n sheet.items.forEach((item, idx1) => {\n sheet.headers.forEach((header, idx2) => {\n newSheet.getCell(3 + idx1, 1 + idx2).value = item[header.value];\n newSheet.getCell(3 + idx1, 1 + idx2).style = this.#cellStyle;\n });\n });\n }\n }\n }\n const file = await workbook.xlsx.writeBuffer();\n BrowserUtilities.downloadBlob(\n new Blob([file], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n }),\n fileName\n );\n };\n\n exportCSV = async (option: SdExcelExportOption): Promise<void> => {\n const { columns, items, fileName } = option;\n const filename = `${fileName || 'CSV'}_${DateUtilities.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}.csv`;\n\n // Escape CSV cell: bọc trong dấu \" nếu chứa dấu phẩy / xuống dòng / dấu ngoặc kép.\n // Dấu \" bên trong được nhân đôi theo chuẩn RFC 4180.\n const escape = (v: unknown): string => {\n if (v == null) return '';\n const s = String(v);\n return /[\",\\n\\r]/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n };\n\n const headerLine = columns.map(c => escape(c.title)).join(',');\n const dataLines = items.map(item =>\n columns.map(c => escape((item as Record<string, unknown>)[c.field])).join(','),\n );\n\n // Prepend UTF-8 BOM () để Excel mở đúng encoding cho tiếng Việt có dấu.\n // Dùng CRLF vì Excel trên Windows ưu tiên, macOS Excel cũng chấp nhận.\n const csv = '' + [headerLine, ...dataLines].join('\\r\\n');\n\n BrowserUtilities.downloadBlob(\n new Blob([csv], { type: 'text/csv;charset=utf-8;' }),\n filename,\n );\n };\n\n export = async (option: SdExcelExportOption) => {\n const { columns, items, fileName, sheets } = option;\n let hasDescription = false;\n for (const [idx, column] of columns.entries()) {\n if (!column.field) {\n throw new Error(`Column ${idx + 1}: Field is required`);\n }\n if (!column.title) {\n throw new Error(`Column ${idx + 1}: Title is required`);\n }\n if (column.description) {\n hasDescription = true;\n }\n }\n const Workbook = await this.#loadWorkbook();\n const workbook = new Workbook(); //await XlsxPopulate.fromBlankAsync(); // Đọc file sau khi đã download\n const firstSheet = workbook.addWorksheet('data'); // Lấy ra sheet đầu tiên\n columns.forEach((column, index) => {\n let width = 120;\n if (column.width && column.width.endsWith('px')) {\n width = +column.width.replace('px', '');\n }\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\n firstSheet.getCell(1, index + 1).style = this.#fieldStyle;\n if (column.required) {\n firstSheet.getCell(2, index + 1).style = this.#requiredStyle;\n } else {\n firstSheet.getCell(2, index + 1).style = this.#titleStyle;\n }\n firstSheet.getCell(1, index + 1).value = column.field;\n firstSheet.getCell(2, index + 1).value = column.title;\n if (hasDescription) {\n firstSheet.getCell(3, index + 1).style = this.#descriptionStyle;\n firstSheet.getCell(3, index + 1).value = column.description || '';\n }\n });\n if (sheets?.length) {\n for (const sheet of sheets) {\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.headers)) {\n const newSheet = workbook.addWorksheet(sheet.name);\n sheet.headers.forEach((header, index) => {\n newSheet.getColumn(index + 1).width = 30;\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\n newSheet.getCell(1, index + 1).value = header.value;\n newSheet.getCell(2, index + 1).style = this.#titleStyle;\n newSheet.getCell(2, index + 1).value = header.display || header.value;\n });\n sheet.items.forEach((item, idx1) => {\n sheet.headers.forEach((header, idx2) => {\n newSheet.getCell(3 + idx1, 1 + idx2).value = item[header.value];\n newSheet.getCell(3 + idx1, 1 + idx2).style = this.#cellStyle;\n });\n });\n }\n }\n }\n\n const fromRow = hasDescription ? 4 : 3;\n items.forEach((e, idx1) => {\n columns.forEach((column, idx2) => {\n if (typeof e[column.field] === 'number') {\n // Format mặc định với kiểu số\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = +e[column.field];\n firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = '#';\n } else {\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];\n }\n firstSheet.getCell(fromRow + idx1, 1 + idx2).style = {\n ...this.#cellStyle,\n };\n });\n });\n const file = await workbook.xlsx.writeBuffer();\n BrowserUtilities.downloadBlob(\n new Blob([file], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n }),\n fileName\n );\n };\n\n // Helper để lấy giá trị text chuẩn từ ô Excel (xử lý RichText, Formula, Hyperlink)\n #getCellValue = (value: CellValue): string | number | null | undefined | boolean | Date => {\n if (value && typeof value === 'object') {\n // Xử lý Rich Text (vd: ô bôi đậm)\n if ('richText' in value) {\n return value.richText.map(t => t.text).join('');\n }\n // Xử lý Hyperlink\n if ('text' in value) {\n return value.text as string; // hoặc value.result nếu là công thức\n }\n // Xử lý Formula\n if ('result' in value) {\n return value.result as any;\n }\n }\n return value as any;\n };\n upload = async (): Promise<{ items: Record<string, any>[]; file: File | null }> => {\n try {\n const fileResult = await BrowserUtilities.upload({\n extensions: ['xlsx'],\n maxSizeInMb: 10,\n });\n\n // Chuẩn hóa file đầu vào (nếu upload trả về mảng thì lấy phần tử đầu)\n const file = Array.isArray(fileResult) ? fileResult[0] : fileResult;\n\n if (!file) {\n return { items: [], file: null };\n }\n\n return await this.parse(file);\n } catch (error) {\n console.error('Upload error:', error);\n throw error; // Hoặc return { items: [], file: null } tùy logic nghiệp vụ\n }\n };\n parse = async (file: File): Promise<{ items: Record<string, any>[]; file: File | null }> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async e => {\n try {\n const buffer = e.target?.result as ArrayBuffer;\n if (!buffer) {\n throw new Error(this.#i18n.t('core.excel.cannot-read-file'));\n }\n\n const Workbook = await this.#loadWorkbook();\n const wb = new Workbook();\n await wb.xlsx.load(buffer);\n\n const sheet = wb.worksheets[0];\n if (!sheet) {\n throw new Error(this.#i18n.t('core.excel.no-sheet'));\n }\n\n const items: Record<string, any>[] = [];\n\n // Lấy row Header (Row 1)\n const headerRow = sheet.getRow(1);\n // Map: Column Index (bắt đầu từ 1) -> Tên trường (Key)\n const headerMap: Record<number, string> = {};\n\n // Duyệt qua các ô có dữ liệu thực tế của dòng Header\n headerRow.eachCell((cell, colNumber) => {\n const cellValue = this.#getCellValue(cell.value);\n if (cellValue) {\n // Ép kiểu về string và trim để làm key\n headerMap[colNumber] = String(cellValue).trim();\n }\n });\n\n // Duyệt dữ liệu từ dòng 2 trở đi\n sheet.eachRow((row, rowIndex) => {\n if (rowIndex <= 1 || !row.hasValues) return;\n\n const item: Record<string, any> = {};\n\n // Chỉ duyệt qua các cột đã định nghĩa trong headerMap\n // Cách này an toàn hơn là duyệt mảng values\n Object.keys(headerMap).forEach(colKey => {\n const colNumber = Number(colKey);\n const fieldKey = headerMap[colNumber];\n\n // Lấy giá trị ô tại cột tương ứng\n const rawValue = this.#getCellValue(row.getCell(colNumber).value);\n\n let finalValue = rawValue;\n\n // Xử lý string: trim\n if (typeof finalValue === 'string') {\n finalValue = finalValue.trim();\n }\n\n // Xử lý các keyword đặc biệt\n if (finalValue === '' || finalValue === undefined) {\n finalValue = null;\n } else if (finalValue === 'SET_NULL') {\n finalValue = null;\n } else if (finalValue === 'SET_EMPTY') {\n finalValue = '';\n }\n\n item[fieldKey] = finalValue;\n });\n\n // Chỉ push nếu item có dữ liệu (tùy chọn)\n if (Object.keys(item).length > 0) {\n items.push(item);\n }\n });\n\n resolve({ items, file });\n } catch (err) {\n reject(err);\n }\n };\n\n reader.onerror = error => reject(error);\n reader.readAsArrayBuffer(file);\n });\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-services-excel.mjs","sources":["../../../projects/sdcorejs-angular/services/excel/src/lib/excel.service.ts","../../../projects/sdcorejs-angular/services/excel/sdcorejs-angular-services-excel.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport type { CellValue, Style } from 'exceljs';\n// import hash from 'object-hash';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { BrowserUtilities } from '@sdcorejs/utils/fns';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { SdExcelExportOption, SdExcelTemplate } from './excel.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdExcelService {\n readonly #i18n = inject(I18nService);\n #fieldStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n font: {\n bold: true,\n size: 11,\n color: { argb: '000000' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'FAFAFA',\n },\n },\n };\n #titleColor = 'FFFFFF';\n #titleFgColor = '143180';\n #titleStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n font: {\n bold: true,\n size: 11,\n color: { argb: this.#titleColor },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: this.#titleFgColor,\n },\n },\n };\n\n #requiredStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n vertical: 'middle',\n horizontal: 'center',\n wrapText: true,\n },\n font: {\n italic: true,\n size: 11,\n color: { argb: 'FFFFFF' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'FF1744',\n },\n },\n };\n\n #descriptionStyle: Partial<Style> = {\n border: {\n bottom: { style: 'thin' },\n left: { style: 'thin' },\n right: { style: 'thin' },\n },\n alignment: {\n wrapText: true,\n },\n font: {\n italic: true,\n size: 9,\n color: { argb: '000000' },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: 'CFD8DC',\n },\n },\n };\n\n #cellStyle: Partial<Style> = {\n alignment: {\n vertical: 'middle',\n wrapText: true,\n },\n };\n\n constructor() {}\n\n // exceljs là CJS module — khi dynamic import từ ESM, named export `Workbook`\n // có thể nằm trên `mod.Workbook` hoặc bị bọc trong `mod.default.Workbook` tuỳ bundler.\n // Helper này chuẩn hoá cả hai trường hợp.\n async #loadWorkbook(): Promise<new () => import('exceljs').Workbook> {\n const mod: any = await import('exceljs');\n return mod.Workbook ?? mod.default?.Workbook;\n }\n\n generateTemplate = async (template: SdExcelTemplate) => {\n const { fileName, columns, sheets } = template;\n if (!Array.isArray(columns)) {\n throw new Error('Excel template columns must be an array');\n }\n for (const [idx, column] of columns.entries()) {\n if (!column.field) {\n throw new Error(`Column ${idx + 1}: Field is required`);\n }\n if (!column.title) {\n throw new Error(`Column ${idx + 1}: Title is required`);\n }\n }\n const hasDescription = columns.some(column => column.description);\n const Workbook = await this.#loadWorkbook();\n const workbook = new Workbook();\n const firstSheet = workbook.addWorksheet('template'); // Lấy ra sheet đầu tiên\n columns.forEach((column, index) => {\n const { required, fill, fontColor } = column;\n const cellField = firstSheet.getCell(1, index + 1);\n const cellTitle = firstSheet.getCell(2, index + 1);\n const cellDescription = firstSheet.getCell(3, index + 1);\n let width = 120;\n if (column.width && column.width.endsWith('px')) {\n width = +column.width.replace('px', '');\n }\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\n cellField.style = this.#fieldStyle;\n if (required) {\n cellField.style = this.#requiredStyle;\n } else {\n cellField.style = this.#fieldStyle;\n }\n cellTitle.style = {\n ...this.#titleStyle,\n font: {\n ...this.#titleStyle?.font,\n color: {\n ...this.#titleStyle?.font?.color,\n argb: fontColor || this.#titleStyle?.font?.color?.argb,\n },\n },\n fill: {\n type: 'pattern',\n pattern: 'solid',\n fgColor: {\n argb: fill || this.#titleFgColor,\n },\n },\n };\n cellField.value = column.field;\n cellTitle.value = column.title;\n if (hasDescription) {\n cellDescription.style = this.#descriptionStyle;\n cellDescription.value = column.description || '';\n }\n });\n if (sheets?.length) {\n for (const sheet of sheets) {\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.headers)) {\n const newSheet = workbook.addWorksheet(sheet.name);\n sheet.headers.forEach((header, index) => {\n newSheet.getColumn(index + 1).width = 30;\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\n newSheet.getCell(1, index + 1).value = header.value;\n newSheet.getCell(2, index + 1).style = this.#titleStyle;\n newSheet.getCell(2, index + 1).value = header.display || header.value;\n });\n sheet.items.forEach((item, idx1) => {\n sheet.headers.forEach((header, idx2) => {\n newSheet.getCell(3 + idx1, 1 + idx2).value = item[header.value];\n newSheet.getCell(3 + idx1, 1 + idx2).style = this.#cellStyle;\n });\n });\n }\n }\n }\n const file = await workbook.xlsx.writeBuffer();\n BrowserUtilities.downloadBlob(\n new Blob([file], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n }),\n fileName\n );\n };\n\n exportCSV = async (option: SdExcelExportOption): Promise<void> => {\n const { columns, items, fileName } = option;\n const filename = `${fileName || 'CSV'}_${DateUtilities.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}.csv`;\n\n // Escape CSV cell: bọc trong dấu \" nếu chứa dấu phẩy / xuống dòng / dấu ngoặc kép.\n // Dấu \" bên trong được nhân đôi theo chuẩn RFC 4180.\n const escape = (v: unknown): string => {\n if (v == null) return '';\n const s = String(v);\n return /[\",\\n\\r]/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n };\n\n const headerLine = columns.map(c => escape(c.title)).join(',');\n const dataLines = items.map(item => columns.map(c => escape((item as Record<string, unknown>)[c.field])).join(','));\n\n // Prepend UTF-8 BOM so Excel opens Vietnamese text with the correct encoding.\n // Dùng CRLF vì Excel trên Windows ưu tiên, macOS Excel cũng chấp nhận.\n const csv = '\\uFEFF' + [headerLine, ...dataLines].join('\\r\\n');\n\n BrowserUtilities.downloadBlob(new Blob([csv], { type: 'text/csv;charset=utf-8;' }), filename);\n };\n\n export = async (option: SdExcelExportOption) => {\n const { columns, items, fileName, sheets } = option;\n let hasDescription = false;\n for (const [idx, column] of columns.entries()) {\n if (!column.field) {\n throw new Error(`Column ${idx + 1}: Field is required`);\n }\n if (!column.title) {\n throw new Error(`Column ${idx + 1}: Title is required`);\n }\n if (column.description) {\n hasDescription = true;\n }\n }\n const Workbook = await this.#loadWorkbook();\n const workbook = new Workbook(); //await XlsxPopulate.fromBlankAsync(); // Đọc file sau khi đã download\n const firstSheet = workbook.addWorksheet('data'); // Lấy ra sheet đầu tiên\n columns.forEach((column, index) => {\n let width = 120;\n if (column.width && column.width.endsWith('px')) {\n width = +column.width.replace('px', '');\n }\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\n firstSheet.getCell(1, index + 1).style = this.#fieldStyle;\n if (column.required) {\n firstSheet.getCell(2, index + 1).style = this.#requiredStyle;\n } else {\n firstSheet.getCell(2, index + 1).style = this.#titleStyle;\n }\n firstSheet.getCell(1, index + 1).value = column.field;\n firstSheet.getCell(2, index + 1).value = column.title;\n if (hasDescription) {\n firstSheet.getCell(3, index + 1).style = this.#descriptionStyle;\n firstSheet.getCell(3, index + 1).value = column.description || '';\n }\n });\n if (sheets?.length) {\n for (const sheet of sheets) {\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.headers)) {\n const newSheet = workbook.addWorksheet(sheet.name);\n sheet.headers.forEach((header, index) => {\n newSheet.getColumn(index + 1).width = 30;\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\n newSheet.getCell(1, index + 1).value = header.value;\n newSheet.getCell(2, index + 1).style = this.#titleStyle;\n newSheet.getCell(2, index + 1).value = header.display || header.value;\n });\n sheet.items.forEach((item, idx1) => {\n sheet.headers.forEach((header, idx2) => {\n newSheet.getCell(3 + idx1, 1 + idx2).value = item[header.value];\n newSheet.getCell(3 + idx1, 1 + idx2).style = this.#cellStyle;\n });\n });\n }\n }\n }\n\n const fromRow = hasDescription ? 4 : 3;\n items.forEach((e, idx1) => {\n columns.forEach((column, idx2) => {\n if (typeof e[column.field] === 'number') {\n // Format mặc định với kiểu số\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = +e[column.field];\n firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = '#';\n } else {\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];\n }\n firstSheet.getCell(fromRow + idx1, 1 + idx2).style = {\n ...this.#cellStyle,\n };\n });\n });\n const file = await workbook.xlsx.writeBuffer();\n BrowserUtilities.downloadBlob(\n new Blob([file], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n }),\n fileName\n );\n };\n\n // Helper để lấy giá trị text chuẩn từ ô Excel (xử lý RichText, Formula, Hyperlink)\n #getCellValue = (value: CellValue): string | number | null | undefined | boolean | Date => {\n if (value && typeof value === 'object') {\n // Xử lý Rich Text (vd: ô bôi đậm)\n if ('richText' in value) {\n return value.richText.map(t => t.text).join('');\n }\n // Xử lý Hyperlink\n if ('text' in value) {\n return value.text as string; // hoặc value.result nếu là công thức\n }\n // Xử lý Formula\n if ('result' in value) {\n return value.result as any;\n }\n }\n return value as any;\n };\n upload = async (): Promise<{ items: Record<string, any>[]; file: File | null }> => {\n try {\n const fileResult = await BrowserUtilities.upload({\n extensions: ['xlsx'],\n maxSizeInMb: 10,\n });\n\n // Chuẩn hóa file đầu vào (nếu upload trả về mảng thì lấy phần tử đầu)\n const file = Array.isArray(fileResult) ? fileResult[0] : fileResult;\n\n if (!file) {\n return { items: [], file: null };\n }\n\n return await this.parse(file);\n } catch (error) {\n console.error('Upload error:', error);\n throw error; // Hoặc return { items: [], file: null } tùy logic nghiệp vụ\n }\n };\n parse = async (file: File): Promise<{ items: Record<string, any>[]; file: File | null }> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async e => {\n try {\n const buffer = e.target?.result as ArrayBuffer;\n if (!buffer) {\n throw new Error(this.#i18n.t('core.excel.cannot-read-file'));\n }\n\n const Workbook = await this.#loadWorkbook();\n const wb = new Workbook();\n await wb.xlsx.load(buffer);\n\n const sheet = wb.worksheets[0];\n if (!sheet) {\n throw new Error(this.#i18n.t('core.excel.no-sheet'));\n }\n\n const items: Record<string, any>[] = [];\n\n // Lấy row Header (Row 1)\n const headerRow = sheet.getRow(1);\n // Map: Column Index (bắt đầu từ 1) -> Tên trường (Key)\n const headerMap: Record<number, string> = {};\n\n // Duyệt qua các ô có dữ liệu thực tế của dòng Header\n headerRow.eachCell((cell, colNumber) => {\n const cellValue = this.#getCellValue(cell.value);\n if (cellValue) {\n // Ép kiểu về string và trim để làm key\n headerMap[colNumber] = String(cellValue).trim();\n }\n });\n\n // Duyệt dữ liệu từ dòng 2 trở đi\n sheet.eachRow((row, rowIndex) => {\n if (rowIndex <= 1 || !row.hasValues) return;\n\n const item: Record<string, any> = {};\n\n // Chỉ duyệt qua các cột đã định nghĩa trong headerMap\n // Cách này an toàn hơn là duyệt mảng values\n Object.keys(headerMap).forEach(colKey => {\n const colNumber = Number(colKey);\n const fieldKey = headerMap[colNumber];\n\n // Lấy giá trị ô tại cột tương ứng\n const rawValue = this.#getCellValue(row.getCell(colNumber).value);\n\n let finalValue = rawValue;\n\n // Xử lý string: trim\n if (typeof finalValue === 'string') {\n finalValue = finalValue.trim();\n }\n\n // Xử lý các keyword đặc biệt\n if (finalValue === '' || finalValue === undefined) {\n finalValue = null;\n } else if (finalValue === 'SET_NULL') {\n finalValue = null;\n } else if (finalValue === 'SET_EMPTY') {\n finalValue = '';\n }\n\n item[fieldKey] = finalValue;\n });\n\n // Chỉ push nếu item có dữ liệu (tùy chọn)\n if (Object.keys(item).length > 0) {\n items.push(item);\n }\n });\n\n resolve({ items, file });\n } catch (err) {\n reject(err);\n }\n };\n\n reader.onerror = error => reject(error);\n reader.readAsArrayBuffer(file);\n });\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
3
|
import { SD_CORE_CONFIGURATION } from '@sdcorejs/angular/configurations';
|
|
4
4
|
|
|
5
5
|
class SdLicenseService {
|
|
6
|
-
coreConfiguration;
|
|
7
6
|
#SALT = 'angular-core-976e2fa6f8b44dadbc63f87b057a331f';
|
|
8
7
|
#isValid = false;
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
coreConfiguration = inject(SD_CORE_CONFIGURATION, { optional: true });
|
|
9
|
+
constructor() {
|
|
11
10
|
this.#verify();
|
|
12
11
|
}
|
|
13
12
|
enforceLicense = () => {
|
|
@@ -19,7 +18,6 @@ class SdLicenseService {
|
|
|
19
18
|
const hostname = window.location.hostname; // Ví dụ: store.uat.nexa.mobi
|
|
20
19
|
// 1. Bypass Localhost
|
|
21
20
|
if (this.#isLocalhost(hostname)) {
|
|
22
|
-
console.log('%c [SdAngularCore] Dev Mode ', 'background: #222; color: #bada55');
|
|
23
21
|
this.#isValid = true;
|
|
24
22
|
return;
|
|
25
23
|
}
|
|
@@ -81,7 +79,7 @@ class SdLicenseService {
|
|
|
81
79
|
#throwSecurityError = () => {
|
|
82
80
|
throw new Error(`[Security] Unauthorized usage of UI Lib on domain: ${window.location.hostname}`);
|
|
83
81
|
};
|
|
84
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, deps: [
|
|
82
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
85
83
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, providedIn: 'root' });
|
|
86
84
|
}
|
|
87
85
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, decorators: [{
|
|
@@ -89,12 +87,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
89
87
|
args: [{
|
|
90
88
|
providedIn: 'root',
|
|
91
89
|
}]
|
|
92
|
-
}], ctorParameters: () => [
|
|
93
|
-
type: Inject,
|
|
94
|
-
args: [SD_CORE_CONFIGURATION]
|
|
95
|
-
}, {
|
|
96
|
-
type: Optional
|
|
97
|
-
}] }] });
|
|
90
|
+
}], ctorParameters: () => [] });
|
|
98
91
|
|
|
99
92
|
/**
|
|
100
93
|
* Generated bundle index. Do not edit.
|