@sdcorejs/angular 19.1.5 → 19.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -4
- package/assets/scss/core/menu.scss +18 -0
- package/assets/scss/core/utilities/_misc.scss +15 -0
- package/assets/scss/sd-core.scss +1 -0
- package/components/anchor/src/components/anchor/anchor.component.d.ts +3 -1
- package/components/badge/src/badge.component.d.ts +1 -0
- package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +1 -1
- package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -1
- package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +3 -1
- package/components/form-generic/src/components/form-render/components/item/components/checkbox/checkbox.component.d.ts +34 -0
- package/components/form-generic/src/components/form-render/components/item/components/index.d.ts +1 -0
- package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +6 -1
- package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
- package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
- package/components/form-generic/src/models/form-generic-component.model.d.ts +8 -8
- package/components/form-generic/src/models/form-generic-definition-selection.model.d.ts +5 -5
- package/components/form-generic/src/models/form-generic-expression.model.d.ts +12 -12
- package/components/form-generic/src/models/index.d.ts +1 -0
- package/components/form-generic/src/services/form-generic.service.d.ts +2 -2
- package/components/import-excel/src/import-excel.component.d.ts +1 -0
- package/components/index.d.ts +6 -1
- package/components/mini-editor/src/mini-editor.model.d.ts +1 -1
- package/components/modal/src/modal.component.d.ts +3 -2
- package/components/modal-resizable/src/modal-resizable.component.d.ts +92 -0
- package/components/modal-resizable/src/modal-resizable.registry.d.ts +22 -0
- package/components/org-chart/src/org-chart.component.d.ts +6 -0
- package/components/preview/src/preview-image/preview-image.component.d.ts +1 -0
- package/components/preview/src/preview-pdf/pdf-worker-inline.generated.d.ts +7 -0
- package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +6 -2
- package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +4 -1
- package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +8 -0
- package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +2 -0
- package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +2 -0
- package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +3 -3
- package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +9 -4
- package/components/query-bar/src/query-bar.component.d.ts +32 -5
- package/components/query-bar/src/query-bar.model.d.ts +15 -12
- package/components/query-builder/src/query-builder.component.d.ts +76 -39
- package/components/query-builder/src/query-builder.model.d.ts +59 -52
- package/components/query-builder/src/query-builder.serializer.d.ts +15 -6
- package/components/section/src/section.component.d.ts +3 -0
- package/components/side-drawer/src/body-scroll-lock.service.d.ts +10 -0
- package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +1 -0
- package/components/tab-router/index.d.ts +2 -1
- package/components/tab-router/src/actions/tab-router.action.d.ts +2 -2
- package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +2 -2
- package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +3 -3
- package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -3
- package/components/tab-router/src/decorators/tab.decorator.d.ts +13 -1
- package/components/tab-router/src/events/tab-router.event.d.ts +3 -3
- package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
- package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
- package/components/tab-router/src/services/tab-router.service.d.ts +9 -9
- package/components/table/index.d.ts +1 -0
- package/components/table/src/components/config/config.component.d.ts +6 -1
- package/components/table/src/components/desktop-cell/view/view.component.d.ts +1 -0
- package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +1 -1
- package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +1 -1
- package/components/table/src/components/selector-action/action-filter.pipe.d.ts +8 -1
- package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -0
- package/components/table/src/directives/index.d.ts +1 -0
- package/components/table/src/directives/sd-table-command-header-def.directive.d.ts +24 -0
- package/components/table/src/models/table-column.model.d.ts +30 -13
- package/components/table/src/models/table-item.model.d.ts +30 -1
- package/components/table/src/models/table-option-selector.model.d.ts +5 -4
- package/components/table/src/models/table-option.model.d.ts +12 -0
- package/components/table/src/pipes/sd-group.pipe.d.ts +6 -2
- package/components/table/src/services/table-export/table-export.service.d.ts +3 -1
- package/components/table/src/services/table-filter/table-filter.model.d.ts +15 -15
- package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
- package/components/table/src/services/table-format/table-format.service.d.ts +1 -1
- package/components/table/src/services/table-selection/selection-action.util.d.ts +24 -0
- package/components/table/src/services/table-selection/table-selection.util.d.ts +31 -0
- package/components/table/src/services/tree/tree.util.d.ts +3 -2
- package/components/table/src/table.component.d.ts +52 -6
- package/components/tree/src/tree-item-def.directive.d.ts +1 -1
- package/components/tree/src/tree.component.d.ts +16 -4
- package/components/tree/src/tree.model.d.ts +31 -25
- package/components/upload-file/src/configurations/upload-file.configuration.d.ts +2 -2
- package/components/upload-file/src/upload-file.component.d.ts +4 -1
- package/configurations/src/sd-core.configuration.d.ts +1 -2
- package/fesm2022/sdcorejs-angular-components-anchor.mjs +36 -12
- package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-badge.mjs +15 -2
- package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
- package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
- package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
- package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
- package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
- package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
- package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
- package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
- package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
- package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-preview.mjs +58 -19
- package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
- package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-section.mjs +16 -2
- package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
- package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
- package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
- package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
- package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-table.mjs +556 -254
- package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
- package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
- package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components.mjs +6 -1
- package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
- package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
- package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
- package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
- package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs +233 -63
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date.mjs +208 -41
- package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-datetime.mjs +130 -26
- package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +39 -15
- package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
- package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
- package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
- package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-models.mjs +279 -6
- package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
- package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-select.mjs +135 -37
- package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
- package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
- package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
- package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
- package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
- package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
- package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
- package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-i18n.mjs +510 -68
- package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
- package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
- package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
- package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
- package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-layout.mjs +441 -135
- package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
- package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
- package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
- package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
- package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
- package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
- package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
- package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
- package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
- package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services.mjs +0 -1
- package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
- package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
- package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular.mjs +17 -10
- package/fesm2022/sdcorejs-angular.mjs.map +1 -1
- package/forms/autocomplete/src/autocomplete.component.d.ts +5 -2
- package/forms/chip-calendar/src/chip-calendar.component.d.ts +10 -0
- package/forms/date/src/date-input.util.d.ts +18 -0
- package/forms/date/src/date.component.d.ts +21 -3
- package/forms/date-range/src/date-range.component.d.ts +13 -2
- package/forms/datetime/src/datetime.component.d.ts +13 -2
- package/forms/entity-picker/src/entity-picker.component.d.ts +9 -3
- package/forms/input/src/input.component.d.ts +3 -0
- package/forms/input-color/src/input-color.component.d.ts +4 -0
- package/forms/input-number/src/input-number.component.d.ts +3 -0
- package/forms/models/index.d.ts +4 -0
- package/forms/models/src/sd-form-control-connector.d.ts +12 -0
- package/forms/models/src/sd-model-facing-control.d.ts +43 -0
- package/forms/models/src/sd-search.model.d.ts +1 -1
- package/forms/models/src/sd-selection-data.model.d.ts +1 -1
- package/forms/models/src/sd-strict-date-adapter.d.ts +26 -0
- package/forms/models/src/sd-temporal-transform.d.ts +31 -0
- package/forms/models/src/sd-timer-scope.d.ts +29 -0
- package/forms/select/src/select.component.d.ts +27 -4
- package/forms/src/forms.module.d.ts +22 -13
- package/forms/switch/src/switch.component.d.ts +5 -0
- package/forms/textarea/src/textarea.component.d.ts +5 -3
- package/forms/time-range/src/time-range.component.d.ts +22 -1
- package/forms/tree-select/src/tree-select.component.d.ts +36 -5
- package/i18n/src/en.d.ts +94 -10
- package/i18n/src/i18n.messages.d.ts +1 -1
- package/i18n/src/i18n.pipe.d.ts +3 -3
- package/i18n/src/i18n.service.d.ts +2 -1
- package/i18n/src/i18n.types.d.ts +0 -3
- package/interceptors/no-internet/no-internet.interceptor.d.ts +11 -1
- package/modules/auth/services/auth.model.d.ts +1 -1
- package/modules/keycloak/keycloak.service.d.ts +1 -0
- package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +2 -0
- package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +3 -3
- package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +3 -3
- package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +3 -3
- package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +3 -3
- package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +8 -3
- package/modules/layout/components/sidebar-v1/main.component.d.ts +3 -3
- package/modules/layout/components/sidebar-v2/main.component.d.ts +3 -3
- package/modules/layout/components/sidebar-v3/main.component.d.ts +3 -3
- package/modules/layout/index.d.ts +1 -0
- package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +5 -0
- package/modules/layout/modules/not-found/pages/root/root.component.d.ts +5 -0
- package/modules/layout/services/layout.service.d.ts +21 -0
- package/modules/layout/services/storage/storage.service.d.ts +52 -7
- package/modules/layout/utils/index.d.ts +1 -0
- package/modules/layout/utils/tab-name.util.d.ts +8 -0
- package/modules/permission/src/configurations/permission.configuration.d.ts +11 -0
- package/modules/permission/src/directives/permission.directive.d.ts +2 -1
- package/modules/permission/src/services/permission.service.d.ts +52 -1
- package/package.json +48 -33
- package/pipes/src/safe-html.pipe.d.ts +26 -4
- package/pipes/src/time-different.pipe.d.ts +1 -0
- package/public-api.d.ts +11 -10
- package/services/api/src/api-host.d.ts +15 -0
- package/services/api/src/api.model.d.ts +14 -0
- package/services/api/src/api.module.d.ts +6 -0
- package/services/cache/src/cache.model.d.ts +10 -0
- package/services/index.d.ts +0 -1
- package/services/notify/index.d.ts +1 -1
- package/utilities/extensions/index.d.ts +1 -5
- package/utilities/extensions/src/url-safety.d.ts +72 -0
- package/utilities/extensions/src/utility.extension.d.ts +9 -5
- package/utilities/models/index.d.ts +0 -10
- package/components/base/index.d.ts +0 -1
- package/components/base/src/base-secure.component.d.ts +0 -8
- package/components/document-builder/index.d.ts +0 -4
- package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
- package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
- package/components/document-builder/src/components/index.d.ts +0 -1
- package/components/document-builder/src/document-builder.component.d.ts +0 -53
- package/components/document-builder/src/document-builder.config.d.ts +0 -21
- package/components/document-builder/src/document-builder.model.d.ts +0 -41
- package/components/document-builder/src/document-builder.utils.d.ts +0 -10
- package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
- package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
- package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
- package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
- package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
- package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
- package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
- package/components/document-builder/src/plugins/index.d.ts +0 -11
- package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
- package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
- package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
- package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
- package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
- package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
- package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
- package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
- package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
- package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
- package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
- package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
- package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
- package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
- package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
- package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
- package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
- package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
- package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-models.mjs +0 -6
- package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
- package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
- package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
- package/models/index.d.ts +0 -1
- package/models/src/language.model.d.ts +0 -2
- package/services/docx/index.d.ts +0 -1
- package/services/docx/src/lib/docx.model.d.ts +0 -9
- package/services/docx/src/lib/docx.service.d.ts +0 -14
- package/services/docx/src/lib/pandoc-core.d.ts +0 -11
- package/services/docx/src/public-api.d.ts +0 -2
- package/services/license/index.d.ts +0 -1
- package/services/license/src/license.service.d.ts +0 -9
- package/utilities/extensions/src/array.extension.d.ts +0 -1
- package/utilities/extensions/src/color.extension.d.ts +0 -5
- package/utilities/extensions/src/date.extension.d.ts +0 -1
- package/utilities/extensions/src/number.extension.d.ts +0 -1
- package/utilities/extensions/src/string.extension.d.ts +0 -50
- package/utilities/models/src/color.model.d.ts +0 -4
- package/utilities/models/src/empty.model.d.ts +0 -4
- package/utilities/models/src/filter.model.d.ts +0 -12
- package/utilities/models/src/maybe-async.model.d.ts +0 -10
- package/utilities/models/src/nested-key-of.model.d.ts +0 -4
- package/utilities/models/src/operator.model.d.ts +0 -13
- package/utilities/models/src/order.model.d.ts +0 -4
- package/utilities/models/src/paging.model.d.ts +0 -8
- package/utilities/models/src/pattern.model.d.ts +0 -21
- package/utilities/models/src/size.model.d.ts +0 -4
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-models.mjs","sources":["../../../projects/sdcorejs-angular/models/sdcorejs-angular-models.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;;AAEG"}
|
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Injectable } from '@angular/core';
|
|
3
|
-
import { SdNotifyService } from '@sdcorejs/angular/services/notify';
|
|
4
|
-
import { SdLoadingService } from '@sdcorejs/angular/services/loading';
|
|
5
|
-
import { I18nService } from '@sdcorejs/angular/i18n';
|
|
6
|
-
import { OpenFile, PreopenDirectory, File as File$1, ConsoleStdout, WASI } from '@bjorn3/browser_wasi_shim';
|
|
7
|
-
|
|
8
|
-
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
9
|
-
/* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js
|
|
10
|
-
*
|
|
11
|
-
* This file is a local copy of the environment-agnostic pandoc core.
|
|
12
|
-
* It imports @bjorn3/browser_wasi_shim directly, avoiding the pandoc-wasm
|
|
13
|
-
* package entry points which use top-level await (incompatible with
|
|
14
|
-
* Angular's esbuild/Vite build pipeline).
|
|
15
|
-
*
|
|
16
|
-
* Source: https://github.com/pandoc/pandoc-wasm (GPL-2.0-or-later)
|
|
17
|
-
*/
|
|
18
|
-
// @ts-nocheck
|
|
19
|
-
function createPandocInstance(wasmBinary) {
|
|
20
|
-
const args = ['pandoc.wasm', '+RTS', '-H64m', '-RTS'];
|
|
21
|
-
const env = [];
|
|
22
|
-
const fileSystem = new Map();
|
|
23
|
-
const fds = [
|
|
24
|
-
new OpenFile(new File$1(new Uint8Array(), { readonly: true })),
|
|
25
|
-
ConsoleStdout.lineBuffered(() => undefined),
|
|
26
|
-
ConsoleStdout.lineBuffered((msg) => console.warn(`[WASI stderr] ${msg}`)),
|
|
27
|
-
new PreopenDirectory('/', fileSystem),
|
|
28
|
-
];
|
|
29
|
-
const options = { debug: false };
|
|
30
|
-
const wasi = new WASI(args, env, fds, options);
|
|
31
|
-
return WebAssembly.instantiate(wasmBinary, {
|
|
32
|
-
wasi_snapshot_preview1: wasi.wasiImport,
|
|
33
|
-
}).then(({ instance }) => {
|
|
34
|
-
wasi.initialize(instance);
|
|
35
|
-
instance.exports.__wasm_call_ctors();
|
|
36
|
-
function memory_data_view() {
|
|
37
|
-
return new DataView(instance.exports.memory.buffer);
|
|
38
|
-
}
|
|
39
|
-
const argc_ptr = instance.exports.malloc(4);
|
|
40
|
-
memory_data_view().setUint32(argc_ptr, args.length, true);
|
|
41
|
-
const argv = instance.exports.malloc(4 * (args.length + 1));
|
|
42
|
-
for (let i = 0; i < args.length; ++i) {
|
|
43
|
-
const arg = instance.exports.malloc(args[i].length + 1);
|
|
44
|
-
new TextEncoder().encodeInto(args[i], new Uint8Array(instance.exports.memory.buffer, arg, args[i].length));
|
|
45
|
-
memory_data_view().setUint8(arg + args[i].length, 0);
|
|
46
|
-
memory_data_view().setUint32(argv + 4 * i, arg, true);
|
|
47
|
-
}
|
|
48
|
-
memory_data_view().setUint32(argv + 4 * args.length, 0, true);
|
|
49
|
-
const argv_ptr = instance.exports.malloc(4);
|
|
50
|
-
memory_data_view().setUint32(argv_ptr, argv, true);
|
|
51
|
-
instance.exports.hs_init_with_rtsopts(argc_ptr, argv_ptr);
|
|
52
|
-
async function addFile(filename, data, readonly) {
|
|
53
|
-
let uint8Array;
|
|
54
|
-
if (typeof data === 'string') {
|
|
55
|
-
uint8Array = new TextEncoder().encode(data);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
const buffer = await data.arrayBuffer();
|
|
59
|
-
uint8Array = new Uint8Array(buffer);
|
|
60
|
-
}
|
|
61
|
-
const file = new File$1(uint8Array, { readonly });
|
|
62
|
-
fileSystem.set(filename, file);
|
|
63
|
-
}
|
|
64
|
-
async function convert(options, stdin, files) {
|
|
65
|
-
const opts_str = JSON.stringify(options);
|
|
66
|
-
const encoded = new TextEncoder().encode(opts_str);
|
|
67
|
-
const opts_ptr = instance.exports.malloc(encoded.length);
|
|
68
|
-
new TextEncoder().encodeInto(opts_str, new Uint8Array(instance.exports.memory.buffer, opts_ptr, encoded.length));
|
|
69
|
-
files = { ...files };
|
|
70
|
-
fileSystem.clear();
|
|
71
|
-
const in_file = new File$1(new Uint8Array(), { readonly: true });
|
|
72
|
-
const out_file = new File$1(new Uint8Array(), { readonly: false });
|
|
73
|
-
const err_file = new File$1(new Uint8Array(), { readonly: false });
|
|
74
|
-
const warnings_file = new File$1(new Uint8Array(), { readonly: false });
|
|
75
|
-
fileSystem.set('stdin', in_file);
|
|
76
|
-
fileSystem.set('stdout', out_file);
|
|
77
|
-
fileSystem.set('stderr', err_file);
|
|
78
|
-
fileSystem.set('warnings', warnings_file);
|
|
79
|
-
const knownFiles = new Set(['stdin', 'stdout', 'stderr', 'warnings']);
|
|
80
|
-
for (const filename in files) {
|
|
81
|
-
await addFile(filename, files[filename], true);
|
|
82
|
-
knownFiles.add(filename);
|
|
83
|
-
}
|
|
84
|
-
const outputFileName = options['output-file'] || null;
|
|
85
|
-
const extractMediaPath = options['extract-media'] || null;
|
|
86
|
-
if (outputFileName) {
|
|
87
|
-
await addFile(outputFileName, new Blob(), false);
|
|
88
|
-
knownFiles.add(outputFileName);
|
|
89
|
-
}
|
|
90
|
-
if (extractMediaPath) {
|
|
91
|
-
await addFile(extractMediaPath, new Blob(), false);
|
|
92
|
-
if (extractMediaPath.endsWith('.zip')) {
|
|
93
|
-
knownFiles.add(extractMediaPath);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (stdin) {
|
|
97
|
-
in_file.data = new TextEncoder().encode(stdin);
|
|
98
|
-
}
|
|
99
|
-
instance.exports.convert(opts_ptr, encoded.length);
|
|
100
|
-
if (options['output-file']) {
|
|
101
|
-
const outputFile = fileSystem.get(options['output-file']);
|
|
102
|
-
if (outputFile && outputFile.data && outputFile.data.length > 0) {
|
|
103
|
-
files[options['output-file']] = new Blob([outputFile.data]);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (options['extract-media']) {
|
|
107
|
-
const mediaFile = fileSystem.get(options['extract-media']);
|
|
108
|
-
if (mediaFile && mediaFile.data && mediaFile.data.length > 0) {
|
|
109
|
-
files[options['extract-media']] = new Blob([mediaFile.data], { type: 'application/zip' });
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
const mediaFiles = {};
|
|
113
|
-
for (const [name, fileData] of fileSystem.entries()) {
|
|
114
|
-
if (!knownFiles.has(name) && fileData && fileData.data && fileData.data.length > 0) {
|
|
115
|
-
const blob = new Blob([fileData.data]);
|
|
116
|
-
files[name] = blob;
|
|
117
|
-
if (name !== outputFileName && name !== extractMediaPath) {
|
|
118
|
-
mediaFiles[name] = blob;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
const rawWarnings = new TextDecoder('utf-8', { fatal: true }).decode(warnings_file.data);
|
|
123
|
-
let warnings = [];
|
|
124
|
-
if (rawWarnings) {
|
|
125
|
-
try {
|
|
126
|
-
warnings = JSON.parse(rawWarnings);
|
|
127
|
-
}
|
|
128
|
-
catch (e) {
|
|
129
|
-
console.warn('Failed to parse warnings:', e);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
stdout: new TextDecoder('utf-8', { fatal: true }).decode(out_file.data),
|
|
134
|
-
stderr: new TextDecoder('utf-8', { fatal: true }).decode(err_file.data),
|
|
135
|
-
warnings,
|
|
136
|
-
files,
|
|
137
|
-
mediaFiles,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
return { convert };
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
class SdDocxService {
|
|
145
|
-
notifyService = inject(SdNotifyService);
|
|
146
|
-
loadingService = inject(SdLoadingService);
|
|
147
|
-
#i18n = inject(I18nService);
|
|
148
|
-
#DEFAULT_MAX_SIZE_MB = 50;
|
|
149
|
-
#VALID_EXTENSIONS = ['.doc', '.docx'];
|
|
150
|
-
#PANDOC_WASM_URL = 'https://pandoc.github.io/pandoc-wasm/pandoc.wasm';
|
|
151
|
-
#fileInput = null;
|
|
152
|
-
#pandocInstance = null;
|
|
153
|
-
constructor() { }
|
|
154
|
-
async open(options) {
|
|
155
|
-
return new Promise(resolve => {
|
|
156
|
-
this.#createFileInput();
|
|
157
|
-
if (!this.#fileInput) {
|
|
158
|
-
resolve(null);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
const handleChange = async (event) => {
|
|
162
|
-
const input = event.target;
|
|
163
|
-
const file = input.files?.[0];
|
|
164
|
-
if (!file) {
|
|
165
|
-
resolve(null);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
this.loadingService.start();
|
|
169
|
-
try {
|
|
170
|
-
const result = await this.convertToHtml(file, options);
|
|
171
|
-
resolve(result);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
console.error('[SdDocxService] DocX conversion error:', error);
|
|
175
|
-
this.notifyService.error(this.#i18n.t('core.docx.convert-error'));
|
|
176
|
-
resolve(null);
|
|
177
|
-
}
|
|
178
|
-
finally {
|
|
179
|
-
input.value = '';
|
|
180
|
-
input.removeEventListener('change', handleChange);
|
|
181
|
-
this.loadingService.stop();
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
this.#fileInput.addEventListener('change', handleChange, { once: true });
|
|
185
|
-
this.#fileInput.click();
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
#createFileInput() {
|
|
189
|
-
if (this.#fileInput) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
this.#fileInput = document.createElement('input');
|
|
193
|
-
this.#fileInput.type = 'file';
|
|
194
|
-
this.#fileInput.accept = '.doc,.docx';
|
|
195
|
-
this.#fileInput.style.display = 'none';
|
|
196
|
-
document.body.appendChild(this.#fileInput);
|
|
197
|
-
}
|
|
198
|
-
async #getPandocInstance() {
|
|
199
|
-
if (this.#pandocInstance) {
|
|
200
|
-
return this.#pandocInstance;
|
|
201
|
-
}
|
|
202
|
-
const wasmResponse = await fetch(this.#PANDOC_WASM_URL);
|
|
203
|
-
if (!wasmResponse.ok) {
|
|
204
|
-
throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);
|
|
205
|
-
}
|
|
206
|
-
const wasmBinary = await wasmResponse.arrayBuffer();
|
|
207
|
-
this.#pandocInstance = await createPandocInstance(wasmBinary);
|
|
208
|
-
return this.#pandocInstance;
|
|
209
|
-
}
|
|
210
|
-
async convertToHtml(input, options) {
|
|
211
|
-
const opts = {
|
|
212
|
-
validateFormat: true,
|
|
213
|
-
validateSize: true,
|
|
214
|
-
maxSizeInMb: this.#DEFAULT_MAX_SIZE_MB,
|
|
215
|
-
...options,
|
|
216
|
-
};
|
|
217
|
-
try {
|
|
218
|
-
let fileName;
|
|
219
|
-
let fileSize;
|
|
220
|
-
let blob;
|
|
221
|
-
if (input instanceof File) {
|
|
222
|
-
fileName = input.name;
|
|
223
|
-
fileSize = input.size;
|
|
224
|
-
blob = input;
|
|
225
|
-
}
|
|
226
|
-
else if (input instanceof Blob) {
|
|
227
|
-
fileSize = input.size;
|
|
228
|
-
blob = input;
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
blob = new Blob([input], {
|
|
232
|
-
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
if (opts.validateFormat && fileName) {
|
|
236
|
-
if (!this.#isValidFormat(fileName)) {
|
|
237
|
-
this.notifyService.error(this.#i18n.t('core.docx.invalid-format'));
|
|
238
|
-
return null;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (opts.validateSize && fileSize !== undefined) {
|
|
242
|
-
const maxSizeInBytes = opts.maxSizeInMb * 1024 * 1024;
|
|
243
|
-
if (fileSize > maxSizeInBytes) {
|
|
244
|
-
this.notifyService.error(this.#i18n.t('core.docx.size-exceeded'));
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
const pandoc = await this.#getPandocInstance();
|
|
249
|
-
const pandocOpts = {
|
|
250
|
-
from: 'docx',
|
|
251
|
-
to: 'html',
|
|
252
|
-
'input-files': ['document.docx'],
|
|
253
|
-
standalone: true,
|
|
254
|
-
'embed-resources': true,
|
|
255
|
-
};
|
|
256
|
-
const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });
|
|
257
|
-
return {
|
|
258
|
-
html: result.stdout,
|
|
259
|
-
messages: result.warnings.map((w) => String(w)),
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
catch (error) {
|
|
263
|
-
console.error('[SdDocxService] DocX conversion error:', error);
|
|
264
|
-
this.notifyService.error(this.#i18n.t('core.docx.convert-error'));
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
async convertToHtmlString(input, options) {
|
|
269
|
-
const result = await this.convertToHtml(input, options);
|
|
270
|
-
return result?.html ?? null;
|
|
271
|
-
}
|
|
272
|
-
#isValidFormat(fileName) {
|
|
273
|
-
const lowerCaseName = fileName.toLowerCase();
|
|
274
|
-
return this.#VALID_EXTENSIONS.some(ext => lowerCaseName.endsWith(ext));
|
|
275
|
-
}
|
|
276
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdDocxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
277
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdDocxService, providedIn: 'root' });
|
|
278
|
-
}
|
|
279
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdDocxService, decorators: [{
|
|
280
|
-
type: Injectable,
|
|
281
|
-
args: [{
|
|
282
|
-
providedIn: 'root',
|
|
283
|
-
}]
|
|
284
|
-
}], ctorParameters: () => [] });
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Generated bundle index. Do not edit.
|
|
288
|
-
*/
|
|
289
|
-
|
|
290
|
-
export { SdDocxService };
|
|
291
|
-
//# sourceMappingURL=sdcorejs-angular-services-docx.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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 private notifyService = inject(SdNotifyService);\n private loadingService = inject(SdLoadingService);\n\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 /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\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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"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Injectable } from '@angular/core';
|
|
3
|
-
import { SD_CORE_CONFIGURATION } from '@sdcorejs/angular/configurations';
|
|
4
|
-
|
|
5
|
-
class SdLicenseService {
|
|
6
|
-
#SALT = 'angular-core-976e2fa6f8b44dadbc63f87b057a331f';
|
|
7
|
-
#isValid = false;
|
|
8
|
-
coreConfiguration = inject(SD_CORE_CONFIGURATION, { optional: true });
|
|
9
|
-
constructor() {
|
|
10
|
-
this.#verify();
|
|
11
|
-
}
|
|
12
|
-
enforceLicense = () => {
|
|
13
|
-
if (!this.#isValid) {
|
|
14
|
-
this.#throwSecurityError();
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
#verify = () => {
|
|
18
|
-
const hostname = window.location.hostname; // Ví dụ: store.uat.nexa.mobi
|
|
19
|
-
// 1. Bypass Localhost
|
|
20
|
-
if (this.#isLocalhost(hostname)) {
|
|
21
|
-
this.#isValid = true;
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const configKeys = this.#getConfiguredKeys();
|
|
25
|
-
if (configKeys.length === 0) {
|
|
26
|
-
this.#isValid = false;
|
|
27
|
-
this.#throwSecurityError();
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
// 2. CHECK EXACT MATCH (Ưu tiên khớp chính xác 100%)
|
|
31
|
-
// Hash chuỗi: "store.uat.nexa.mobi" + SALT
|
|
32
|
-
if (this.#checkMatch(hostname, configKeys)) {
|
|
33
|
-
this.#isValid = true;
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
// 3. CHECK WILDCARD MATCH (Thử các trường hợp có dấu *)
|
|
37
|
-
const parts = hostname.split('.'); // ["store", "uat", "nexa", "mobi"]
|
|
38
|
-
// Lặp để cắt dần subdomain bên trái và thêm "*." vào
|
|
39
|
-
// Điều kiện > 2 để đảm bảo không check các case vô nghĩa như *.mobi hay *.com
|
|
40
|
-
while (parts.length > 2) {
|
|
41
|
-
parts.shift(); // Bỏ phần đầu: ["uat", "nexa", "mobi"]
|
|
42
|
-
// Tạo domain wildcard: "*.uat.nexa.mobi"
|
|
43
|
-
const wildcardDomain = '*.' + parts.join('.');
|
|
44
|
-
// Hash chuỗi: "*.uat.nexa.mobi" + SALT
|
|
45
|
-
if (this.#checkMatch(wildcardDomain, configKeys)) {
|
|
46
|
-
this.#isValid = true;
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
// Nếu chạy hết vòng lặp mà không khớp cái nào
|
|
51
|
-
this.#isValid = false;
|
|
52
|
-
this.#throwSecurityError();
|
|
53
|
-
};
|
|
54
|
-
// Helper để check xem hash của input có nằm trong list key không
|
|
55
|
-
#checkMatch = (inputString, validKeys) => {
|
|
56
|
-
const hash = this.#generateHash(inputString + this.#SALT);
|
|
57
|
-
return validKeys.includes(hash);
|
|
58
|
-
};
|
|
59
|
-
#getConfiguredKeys = () => {
|
|
60
|
-
const keyOrKeys = this.coreConfiguration?.licenseKey;
|
|
61
|
-
if (!keyOrKeys)
|
|
62
|
-
return [];
|
|
63
|
-
return Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];
|
|
64
|
-
};
|
|
65
|
-
#isLocalhost = (domain) => {
|
|
66
|
-
return domain === 'localhost' || domain === '127.0.0.1' || domain.includes('localhost');
|
|
67
|
-
};
|
|
68
|
-
#generateHash = (input) => {
|
|
69
|
-
let hash = 0;
|
|
70
|
-
if (input.length === 0)
|
|
71
|
-
return hash.toString();
|
|
72
|
-
for (let i = 0; i < input.length; i++) {
|
|
73
|
-
const char = input.charCodeAt(i);
|
|
74
|
-
hash = (hash << 5) - hash + char;
|
|
75
|
-
hash = hash & hash;
|
|
76
|
-
}
|
|
77
|
-
return btoa(hash.toString() + 'signed');
|
|
78
|
-
};
|
|
79
|
-
#throwSecurityError = () => {
|
|
80
|
-
throw new Error(`[Security] Unauthorized usage of UI Lib on domain: ${window.location.hostname}`);
|
|
81
|
-
};
|
|
82
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
83
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, providedIn: 'root' });
|
|
84
|
-
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdLicenseService, decorators: [{
|
|
86
|
-
type: Injectable,
|
|
87
|
-
args: [{
|
|
88
|
-
providedIn: 'root',
|
|
89
|
-
}]
|
|
90
|
-
}], ctorParameters: () => [] });
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Generated bundle index. Do not edit.
|
|
94
|
-
*/
|
|
95
|
-
|
|
96
|
-
export { SdLicenseService };
|
|
97
|
-
//# sourceMappingURL=sdcorejs-angular-services-license.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-services-license.mjs","sources":["../../../projects/sdcorejs-angular/services/license/src/license.service.ts","../../../projects/sdcorejs-angular/services/license/sdcorejs-angular-services-license.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { ISdCoreConfiguration, SD_CORE_CONFIGURATION } from '@sdcorejs/angular/configurations';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdLicenseService {\n readonly #SALT = 'angular-core-976e2fa6f8b44dadbc63f87b057a331f';\n #isValid = false;\n private readonly coreConfiguration: ISdCoreConfiguration | null = inject(SD_CORE_CONFIGURATION, { optional: true });\n\n constructor() {\n this.#verify();\n }\n\n enforceLicense = () => {\n if (!this.#isValid) {\n this.#throwSecurityError();\n }\n };\n\n #verify = () => {\n const hostname = window.location.hostname; // Ví dụ: store.uat.nexa.mobi\n\n // 1. Bypass Localhost\n if (this.#isLocalhost(hostname)) {\n this.#isValid = true;\n return;\n }\n\n const configKeys = this.#getConfiguredKeys();\n if (configKeys.length === 0) {\n this.#isValid = false;\n this.#throwSecurityError();\n return;\n }\n\n // 2. CHECK EXACT MATCH (Ưu tiên khớp chính xác 100%)\n // Hash chuỗi: \"store.uat.nexa.mobi\" + SALT\n if (this.#checkMatch(hostname, configKeys)) {\n this.#isValid = true;\n return;\n }\n\n // 3. CHECK WILDCARD MATCH (Thử các trường hợp có dấu *)\n const parts = hostname.split('.'); // [\"store\", \"uat\", \"nexa\", \"mobi\"]\n\n // Lặp để cắt dần subdomain bên trái và thêm \"*.\" vào\n // Điều kiện > 2 để đảm bảo không check các case vô nghĩa như *.mobi hay *.com\n while (parts.length > 2) {\n parts.shift(); // Bỏ phần đầu: [\"uat\", \"nexa\", \"mobi\"]\n\n // Tạo domain wildcard: \"*.uat.nexa.mobi\"\n const wildcardDomain = '*.' + parts.join('.');\n\n // Hash chuỗi: \"*.uat.nexa.mobi\" + SALT\n if (this.#checkMatch(wildcardDomain, configKeys)) {\n this.#isValid = true;\n return;\n }\n }\n\n // Nếu chạy hết vòng lặp mà không khớp cái nào\n this.#isValid = false;\n this.#throwSecurityError();\n };\n\n // Helper để check xem hash của input có nằm trong list key không\n #checkMatch = (inputString: string, validKeys: string[]): boolean => {\n const hash = this.#generateHash(inputString + this.#SALT);\n return validKeys.includes(hash);\n };\n\n #getConfiguredKeys = (): string[] => {\n const keyOrKeys = this.coreConfiguration?.licenseKey;\n if (!keyOrKeys) return [];\n return Array.isArray(keyOrKeys) ? keyOrKeys : [keyOrKeys];\n };\n\n #isLocalhost = (domain: string) => {\n return domain === 'localhost' || domain === '127.0.0.1' || domain.includes('localhost');\n };\n\n #generateHash = (input: string): string => {\n let hash = 0;\n if (input.length === 0) return hash.toString();\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return btoa(hash.toString() + 'signed');\n };\n\n #throwSecurityError = () => {\n throw new Error(`[Security] Unauthorized usage of UI Lib on domain: ${window.location.hostname}`);\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,gBAAgB,CAAA;IAClB,KAAK,GAAG,+CAA+C;IAChE,QAAQ,GAAG,KAAK;IACC,iBAAiB,GAAgC,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEnH,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,cAAc,GAAG,MAAK;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AACF,IAAA,CAAC;IAED,OAAO,GAAG,MAAK;QACb,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAG1C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC5C,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrB,IAAI,CAAC,mBAAmB,EAAE;YAC1B;QACF;;;QAIA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB;QACF;;QAGA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;;AAIlC,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,KAAK,CAAC,KAAK,EAAE,CAAC;;YAGd,MAAM,cAAc,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;YAG7C,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB;YACF;QACF;;AAGA,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,mBAAmB,EAAE;AAC5B,IAAA,CAAC;;AAGD,IAAA,WAAW,GAAG,CAAC,WAAmB,EAAE,SAAmB,KAAa;AAClE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;AACzD,QAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,IAAA,CAAC;IAED,kBAAkB,GAAG,MAAe;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU;AACpD,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,EAAE;AACzB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC;AAC3D,IAAA,CAAC;AAED,IAAA,YAAY,GAAG,CAAC,MAAc,KAAI;AAChC,QAAA,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;AACzF,IAAA,CAAC;AAED,IAAA,aAAa,GAAG,CAAC,KAAa,KAAY;QACxC,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI;AAChC,YAAA,IAAI,GAAG,IAAI,GAAG,IAAI;QACpB;QACA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC;AACzC,IAAA,CAAC;IAED,mBAAmB,GAAG,MAAK;QACzB,MAAM,IAAI,KAAK,CAAC,CAAA,mDAAA,EAAsD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAE,CAAC;AACnG,IAAA,CAAC;wGA1FU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACLD;;AAEG;;;;"}
|
package/models/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src/language.model';
|
package/services/docx/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src/public-api';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { SdDocxConvertOptions, SdDocxConvertResult } from './docx.model';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class SdDocxService {
|
|
4
|
-
#private;
|
|
5
|
-
private notifyService;
|
|
6
|
-
private loadingService;
|
|
7
|
-
/** Inserted by Angular inject() migration for backwards compatibility */
|
|
8
|
-
constructor(...args: unknown[]);
|
|
9
|
-
open(options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null>;
|
|
10
|
-
convertToHtml(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null>;
|
|
11
|
-
convertToHtmlString(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<string | null>;
|
|
12
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SdDocxService, never>;
|
|
13
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<SdDocxService>;
|
|
14
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface PandocConvertResult {
|
|
2
|
-
stdout: string;
|
|
3
|
-
stderr: string;
|
|
4
|
-
warnings: any[];
|
|
5
|
-
files: Record<string, any>;
|
|
6
|
-
mediaFiles: Record<string, any>;
|
|
7
|
-
}
|
|
8
|
-
export interface PandocInstance {
|
|
9
|
-
convert(options: Record<string, any>, stdin: string | null, files: Record<string, Blob | string>): Promise<PandocConvertResult>;
|
|
10
|
-
}
|
|
11
|
-
export declare function createPandocInstance(wasmBinary: ArrayBuffer): Promise<PandocInstance>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src/license.service';
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class SdLicenseService {
|
|
3
|
-
#private;
|
|
4
|
-
private readonly coreConfiguration;
|
|
5
|
-
constructor();
|
|
6
|
-
enforceLicense: () => void;
|
|
7
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SdLicenseService, never>;
|
|
8
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<SdLicenseService>;
|
|
9
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { ArrayUtilities } from '@sdcorejs/utils/fns';
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { ColorUtilities } from '@sdcorejs/utils/fns';
|
|
2
|
-
/** @deprecated Use {@link ColorUtilities.hslToHex} from `@sdcorejs/utils/fns` instead */
|
|
3
|
-
export declare const hslToHex: (h: number, s: number, l: number) => string;
|
|
4
|
-
/** @deprecated Use {@link ColorUtilities.rgbToHex} from `@sdcorejs/utils/fns` instead */
|
|
5
|
-
export declare const rgbToHex: (r: number, g: number, b: number) => string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { DateUtilities } from '@sdcorejs/utils/fns';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { NumberUtilities } from '@sdcorejs/utils/fns';
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ValidationUtilities } from '@sdcorejs/utils/fns';
|
|
2
|
-
export { ValidationUtilities };
|
|
3
|
-
export declare const StringUtilities: {
|
|
4
|
-
/** @deprecated Use REGEX_VN_PHONE instead */
|
|
5
|
-
REGEX_PHONE_VN: string;
|
|
6
|
-
/** @deprecated Use REGEX_VN_ID instead */
|
|
7
|
-
REGEX_IDVN: string;
|
|
8
|
-
/** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */
|
|
9
|
-
REGEX_IDVN_OR_PASSPORT: string;
|
|
10
|
-
/** @deprecated Use {@link ValidationUtilities.isEmail} instead */
|
|
11
|
-
isValidEmail: (value: any) => boolean;
|
|
12
|
-
/** @deprecated Use {@link ValidationUtilities.isPhone} instead */
|
|
13
|
-
isValidPhone: (value: any) => boolean;
|
|
14
|
-
/** @deprecated Use {@link ValidationUtilities.isCode} instead */
|
|
15
|
-
isValidCode: (value: any) => boolean;
|
|
16
|
-
REGEX_EMAIL: string;
|
|
17
|
-
REGEX_PHONE: string;
|
|
18
|
-
REGEX_VN_PHONE: string;
|
|
19
|
-
REGEX_VN_ID: string;
|
|
20
|
-
REGEX_PASSPORT: string;
|
|
21
|
-
REGEX_VN_ID_OR_PASSPORT: string;
|
|
22
|
-
REGEX_TIME: string;
|
|
23
|
-
REGEX_URL: string;
|
|
24
|
-
REGEX_DOMAIN: string;
|
|
25
|
-
REGEX_IPV4: string;
|
|
26
|
-
REGEX_IPV6: string;
|
|
27
|
-
REGEX_IMAGE_URL: string;
|
|
28
|
-
REGEX_SLUG: string;
|
|
29
|
-
REGEX_NUMBER: string;
|
|
30
|
-
REGEX_INTEGER: string;
|
|
31
|
-
REGEX_DECIMAL: string;
|
|
32
|
-
REGEX_POSITIVE_NUMBER: string;
|
|
33
|
-
REGEX_UUID: string;
|
|
34
|
-
REGEX_CODE_16: string;
|
|
35
|
-
REGEX_CODE_32: string;
|
|
36
|
-
REGEX_HEX_COLOR: string;
|
|
37
|
-
REGEX_BASE64: string;
|
|
38
|
-
changeAliasLowerCase: (alias: any) => string;
|
|
39
|
-
aliasIncludes: (alias: any, searchText: any) => boolean;
|
|
40
|
-
format: (template: string, ...arr: any[]) => string;
|
|
41
|
-
templateToDisplay: (template: string, entity: Record<string, any>) => string;
|
|
42
|
-
parseExpression: (template: string, entity: Record<string, any>) => any;
|
|
43
|
-
encrypt: (obj: any) => string;
|
|
44
|
-
decrypt: (encripted: string) => any;
|
|
45
|
-
isNullOrEmpty: (value: any) => boolean;
|
|
46
|
-
isNullOrWhiteSpace: (value: any) => boolean;
|
|
47
|
-
convertToSnakeCaseCode: (name: string) => string;
|
|
48
|
-
generateUniqueCode: (name: string, existingCodes: string[]) => string;
|
|
49
|
-
sha256: (input: string) => Promise<string>;
|
|
50
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Filter, FilterHasData, FilterBetween, FilterNoData, FilterAndOr } from '@sdcorejs/utils/models';
|
|
2
|
-
export type { Filter, FilterHasData, FilterBetween, FilterNoData, FilterAndOr };
|
|
3
|
-
/** @deprecated Use {@link Filter} from `@sdcorejs/utils/models` instead */
|
|
4
|
-
export type SdFilter<T = any> = Filter<T>;
|
|
5
|
-
/** @deprecated Use {@link FilterHasData} from `@sdcorejs/utils/models` instead */
|
|
6
|
-
export type SdFilterHasData<T = any> = FilterHasData<T>;
|
|
7
|
-
/** @deprecated Use {@link FilterBetween} from `@sdcorejs/utils/models` instead */
|
|
8
|
-
export type SdFilterBetween<T = any> = FilterBetween<T>;
|
|
9
|
-
/** @deprecated Use {@link FilterNoData} from `@sdcorejs/utils/models` instead */
|
|
10
|
-
export type SdFilterNoData<T = any> = FilterNoData<T>;
|
|
11
|
-
/** @deprecated Use {@link FilterAndOr} from `@sdcorejs/utils/models` instead */
|
|
12
|
-
export type SdFilterAndOr<T = any> = FilterAndOr<T>;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { MaybeAsync } from '@sdcorejs/utils/models';
|
|
2
|
-
import { resolveMaybeAsync, normalizeAsync } from '@sdcorejs/utils/models';
|
|
3
|
-
export type { MaybeAsync };
|
|
4
|
-
export { resolveMaybeAsync, normalizeAsync };
|
|
5
|
-
/** @deprecated Use {@link MaybeAsync} from `@sdcorejs/utils/models` instead */
|
|
6
|
-
export type SdMaybeAsync<T> = MaybeAsync<T>;
|
|
7
|
-
/** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */
|
|
8
|
-
export declare const SdResolveMaybeAsync: <T>(value: MaybeAsync<T>) => Promise<T>;
|
|
9
|
-
/** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */
|
|
10
|
-
export declare const SdNormalizeAsync: <T>(value: MaybeAsync<T>) => import("rxjs").Observable<T>;
|