@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,71 +1,9 @@
|
|
|
1
|
-
import { EMPTY_STR } from '@sdcorejs/utils/constants';
|
|
2
|
-
export { EMPTY_STR, VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';
|
|
3
|
-
import { StringUtilities } from '@sdcorejs/utils/fns';
|
|
4
|
-
import { resolveMaybeAsync, normalizeAsync } from '@sdcorejs/utils/models';
|
|
5
|
-
export { normalizeAsync, resolveMaybeAsync } from '@sdcorejs/utils/models';
|
|
6
|
-
|
|
7
1
|
const DefaultSdIconSet = 'material-icons-outlined';
|
|
8
2
|
const DefaultSdMaterialIconSet = 'material-icons-outlined';
|
|
9
3
|
|
|
10
|
-
// `name` và `errorMessage` chứa i18n KEY (không phải chuỗi đã dịch).
|
|
11
|
-
/** @deprecated Use `VALIDATION_PATTERNS` from `@sdcorejs/utils/constants` instead. */
|
|
12
|
-
const SdPatternCommons = [
|
|
13
|
-
{ type: 'EMAIL', name: 'core.validator.email.name', regex: StringUtilities.REGEX_EMAIL, errorMessage: 'core.validator.email.error' },
|
|
14
|
-
{ type: 'PHONE', name: 'core.validator.phone.name', regex: StringUtilities.REGEX_PHONE, errorMessage: 'core.validator.phone.error' },
|
|
15
|
-
{
|
|
16
|
-
type: 'PHONE_VN',
|
|
17
|
-
name: 'core.validator.phone-vn.name',
|
|
18
|
-
regex: StringUtilities.REGEX_VN_PHONE,
|
|
19
|
-
errorMessage: 'core.validator.phone-vn.error',
|
|
20
|
-
},
|
|
21
|
-
{ type: 'IDVN', name: 'core.validator.cccd.name', regex: StringUtilities.REGEX_VN_ID, errorMessage: 'core.validator.cccd.error' },
|
|
22
|
-
{
|
|
23
|
-
type: 'PASSPORT',
|
|
24
|
-
name: 'core.validator.passport.name',
|
|
25
|
-
regex: StringUtilities.REGEX_PASSPORT,
|
|
26
|
-
errorMessage: 'core.validator.passport.error',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
type: 'IDVN_OR_PASSPORT',
|
|
30
|
-
name: 'core.validator.id-vn.name',
|
|
31
|
-
regex: StringUtilities.REGEX_VN_ID_OR_PASSPORT,
|
|
32
|
-
errorMessage: 'core.validator.id-vn.error',
|
|
33
|
-
},
|
|
34
|
-
{ type: 'TIME', name: 'core.validator.time.name', regex: StringUtilities.REGEX_TIME, errorMessage: 'core.validator.time.error' },
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
/** @deprecated Use {@link EMPTY_STR} from `@sdcorejs/utils/constants` instead */
|
|
38
|
-
const SD_EMPTY_STR = EMPTY_STR;
|
|
39
|
-
|
|
40
|
-
/** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */
|
|
41
|
-
const SdResolveMaybeAsync = resolveMaybeAsync;
|
|
42
|
-
/** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */
|
|
43
|
-
const SdNormalizeAsync = normalizeAsync;
|
|
44
|
-
|
|
45
|
-
// `display` chứa i18n KEY (không phải chuỗi đã dịch).
|
|
46
|
-
// Consumer phải gọi i18n.t(display) trước khi render ra UI.
|
|
47
|
-
// @deprecated Use `OPERATORS` from `@sdcorejs/utils/constants` instead.
|
|
48
|
-
// Note: OPERATORS has translated display labels; SdOperators uses i18n keys.
|
|
49
|
-
const SdOperators = [
|
|
50
|
-
{ value: 'EQUAL', symbol: '=', display: 'core.operator.equal.display' },
|
|
51
|
-
{ value: 'NOT_EQUAL', symbol: '≠', display: 'core.operator.not-equal.display' },
|
|
52
|
-
{ value: 'GREATER_THAN', symbol: '>', display: 'core.operator.greater-than.display' },
|
|
53
|
-
{ value: 'LESS_THAN', symbol: '<', display: 'core.operator.less-than.display' },
|
|
54
|
-
{ value: 'GREATER_OR_EQUAL', symbol: '≥', display: 'core.operator.greater-or-equal.display' },
|
|
55
|
-
{ value: 'LESS_OR_EQUAL', symbol: '≤', display: 'core.operator.less-or-equal.display' },
|
|
56
|
-
{ value: 'CONTAIN', symbol: 'join_inner', display: 'core.operator.contain.display' },
|
|
57
|
-
{ value: 'NOT_CONTAIN', symbol: 'join', display: 'core.operator.not-contain.display' },
|
|
58
|
-
{ value: 'START_WITH', symbol: 'line_start_circle', display: 'core.operator.start-with.display' },
|
|
59
|
-
{ value: 'END_WITH', symbol: 'line_end_circle', display: 'core.operator.end-with.display' },
|
|
60
|
-
{ value: 'IN', symbol: 'checklist_rtl', display: 'core.operator.in.display' },
|
|
61
|
-
{ value: 'NOT_IN', symbol: 'event_list', display: 'core.operator.not-in.display' },
|
|
62
|
-
{ value: 'NULL', symbol: 'motion_photos_off', display: 'core.operator.null.display' },
|
|
63
|
-
{ value: 'NOT_NULL', symbol: 'adjust', display: 'core.operator.not-null.display' },
|
|
64
|
-
];
|
|
65
|
-
|
|
66
4
|
/**
|
|
67
5
|
* Generated bundle index. Do not edit.
|
|
68
6
|
*/
|
|
69
7
|
|
|
70
|
-
export { DefaultSdIconSet, DefaultSdMaterialIconSet
|
|
8
|
+
export { DefaultSdIconSet, DefaultSdMaterialIconSet };
|
|
71
9
|
//# sourceMappingURL=sdcorejs-angular-utilities-models.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-utilities-models.mjs","sources":["../../../projects/sdcorejs-angular/utilities/models/src/icon.model.ts","../../../projects/sdcorejs-angular/utilities/models/
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-utilities-models.mjs","sources":["../../../projects/sdcorejs-angular/utilities/models/src/icon.model.ts","../../../projects/sdcorejs-angular/utilities/models/sdcorejs-angular-utilities-models.ts"],"sourcesContent":["export type SdIconSet = 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp' | 'lucide';\nexport type SdMaterialIconSet = Exclude<SdIconSet, 'lucide'>;\nexport const DefaultSdIconSet: SdIconSet = 'material-icons-outlined';\nexport const DefaultSdMaterialIconSet: SdMaterialIconSet = 'material-icons-outlined';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAEO,MAAM,gBAAgB,GAAc;AACpC,MAAM,wBAAwB,GAAsB;;ACH3D;;AAEG;;;;"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export * from '@sdcorejs/angular/configurations';
|
|
2
|
+
export * from '@sdcorejs/angular/i18n';
|
|
3
|
+
export * from '@sdcorejs/angular/utilities';
|
|
4
|
+
export * from '@sdcorejs/angular/pipes';
|
|
5
|
+
export * from '@sdcorejs/angular/directives';
|
|
6
|
+
export * from '@sdcorejs/angular/services';
|
|
7
|
+
export * from '@sdcorejs/angular/interceptors';
|
|
8
|
+
export * from '@sdcorejs/angular/handlers';
|
|
9
|
+
export * from '@sdcorejs/angular/components';
|
|
10
|
+
export * from '@sdcorejs/angular/forms';
|
|
11
|
+
export * from '@sdcorejs/angular/modules';
|
|
11
12
|
|
|
12
13
|
/*
|
|
13
14
|
* Public API Surface of sd-angular
|
|
15
|
+
*
|
|
16
|
+
* why: these were previously bare `import '...'` statements, which meant the primary
|
|
17
|
+
* entry point re-exported NOTHING — `import { SdButton } from '@sdcorejs/angular'`
|
|
18
|
+
* resolved to nothing for every symbol, and the built FESM bundle was 517 bytes with
|
|
19
|
+
* no `export` statement. Deep imports (`@sdcorejs/angular/components/button`) remain
|
|
20
|
+
* the recommended path for bundle size; this barrel exists so the root import works.
|
|
14
21
|
*/
|
|
15
22
|
|
|
16
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular.mjs","sources":["../../../projects/sdcorejs-angular/src/public-api.ts","../../../projects/sdcorejs-angular/src/sdcorejs-angular.ts"],"sourcesContent":["/*\n * Public API Surface of sd-angular\n */\
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular.mjs","sources":["../../../projects/sdcorejs-angular/src/public-api.ts","../../../projects/sdcorejs-angular/src/sdcorejs-angular.ts"],"sourcesContent":["/*\n * Public API Surface of sd-angular\n *\n * why: these were previously bare `import '...'` statements, which meant the primary\n * entry point re-exported NOTHING — `import { SdButton } from '@sdcorejs/angular'`\n * resolved to nothing for every symbol, and the built FESM bundle was 517 bytes with\n * no `export` statement. Deep imports (`@sdcorejs/angular/components/button`) remain\n * the recommended path for bundle size; this barrel exists so the root import works.\n */\nexport * from '@sdcorejs/angular/configurations';\nexport * from '@sdcorejs/angular/i18n';\nexport * from '@sdcorejs/angular/utilities';\nexport * from '@sdcorejs/angular/pipes';\nexport * from '@sdcorejs/angular/directives';\nexport * from '@sdcorejs/angular/services';\nexport * from '@sdcorejs/angular/interceptors';\nexport * from '@sdcorejs/angular/handlers';\nexport * from '@sdcorejs/angular/components';\nexport * from '@sdcorejs/angular/forms';\nexport * from '@sdcorejs/angular/modules';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;AAQG;;ACRH;;AAEG"}
|
|
@@ -12,9 +12,12 @@ declare class SdAutocompleteErrotStateMatcher implements ErrorStateMatcher {
|
|
|
12
12
|
constructor(formControl: FormControl);
|
|
13
13
|
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;
|
|
14
14
|
}
|
|
15
|
-
export declare class SdAutocomplete<T =
|
|
15
|
+
export declare class SdAutocomplete<T = unknown> implements OnInit, OnDestroy {
|
|
16
16
|
#private;
|
|
17
17
|
id: string;
|
|
18
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
19
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
20
|
+
readonly errorId: string;
|
|
18
21
|
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
19
22
|
autocompleteTrigger: import("@angular/core").Signal<MatAutocompleteTrigger | undefined>;
|
|
20
23
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -71,7 +74,7 @@ export declare class SdAutocomplete<T = any> implements OnInit, OnDestroy {
|
|
|
71
74
|
appearance: import("@angular/core").Signal<MatFormFieldAppearance>;
|
|
72
75
|
valueModel: import("@angular/core").ModelSignal<string | number | null | undefined>;
|
|
73
76
|
sdChange: import("@angular/core").OutputEmitterRef<string | number | null>;
|
|
74
|
-
sdSelection: import("@angular/core").OutputEmitterRef<SdSelectionData<
|
|
77
|
+
sdSelection: import("@angular/core").OutputEmitterRef<SdSelectionData<unknown>>;
|
|
75
78
|
readonly sdAdd: EventEmitter<void>;
|
|
76
79
|
loading: import("@angular/core").WritableSignal<boolean>;
|
|
77
80
|
isFocused: boolean;
|
|
@@ -16,6 +16,9 @@ declare class SdChipCalendarErrorStateMatcher implements ErrorStateMatcher {
|
|
|
16
16
|
}
|
|
17
17
|
export declare class SdChipCalendar implements AfterViewInit, OnDestroy {
|
|
18
18
|
#private;
|
|
19
|
+
/** why: id ổn định của <mat-error> để ô nhập chip trỏ `aria-describedby` sang — thông báo
|
|
20
|
+
* lỗi phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
21
|
+
readonly errorId: string;
|
|
19
22
|
menuTrigger: import("@angular/core").Signal<MatMenuTrigger | undefined>;
|
|
20
23
|
calendar: import("@angular/core").Signal<MatCalendar<Date> | undefined>;
|
|
21
24
|
autoIdInput: import("@angular/core").InputSignalWithTransform<string | undefined, string | null | undefined>;
|
|
@@ -64,6 +67,13 @@ export declare class SdChipCalendar implements AfterViewInit, OnDestroy {
|
|
|
64
67
|
onRemove: (item: string) => void;
|
|
65
68
|
onSelect: (event: MatAutocompleteSelectedEvent) => void;
|
|
66
69
|
onClick: () => void;
|
|
70
|
+
/**
|
|
71
|
+
* why: khi `sdViewDef` đang hiển thị thì bên trong KHÔNG còn phần tử nào focus được, nên
|
|
72
|
+
* click là lối vào DUY NHẤT để chuyển sang chế độ sửa. Bàn phím phải mở được y hệt chuột
|
|
73
|
+
* → Enter/Space chạy chung handler. preventDefault chặn Space cuộn trang (hành vi mặc
|
|
74
|
+
* định của phần tử không phải <button>).
|
|
75
|
+
*/
|
|
76
|
+
onViewKeydown: (event: Event) => void;
|
|
67
77
|
onClear: (evt?: any) => void;
|
|
68
78
|
onSelectDate: (date: Date | null) => void;
|
|
69
79
|
onCloseCalendar: () => void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const DATE_DISPLAY_FORMAT = "dd/MM/yyyy";
|
|
2
|
+
export declare const DATE_DISPLAY_PATTERN: RegExp;
|
|
3
|
+
export declare const DATE_INPUT_MAX_DIGITS = 8;
|
|
4
|
+
/** Chèn `/` vào chuỗi số người dùng đang gõ: `22081991` → `22/08/1991`. */
|
|
5
|
+
export declare function formatDateInput(value: string, addTrailingSeparator: boolean): string;
|
|
6
|
+
/** Chuỗi còn dở dang (đang gõ) — chưa đủ `dd/MM/yyyy` nhưng vẫn đúng khuôn. */
|
|
7
|
+
export declare function isPartialDateInput(value: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Chỉ nhận đúng `dd/MM/yyyy` ĐẦY ĐỦ và có thật trên lịch.
|
|
10
|
+
*
|
|
11
|
+
* WHY chặt tay như vậy: `date-fns.parse(value, 'dd/MM/yyyy')` rất dễ dãi — nó
|
|
12
|
+
* nhận cả năm thiếu chữ số, nên `11/12/2` ra năm 0002 còn `11/12/20` ra năm
|
|
13
|
+
* 0020. Nếu để lọt, người dùng mới gõ nửa chừng đã bị coi là nhập xong.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseDateInput(value: string): Date | null;
|
|
16
|
+
/** Giữ con trỏ đứng đúng chỗ sau khi chuỗi được chèn thêm `/`. */
|
|
17
|
+
export declare function getCaretPosition(value: string, selectionStart: number, formattedValue: string, addTrailingSeparator: boolean): number;
|
|
18
|
+
export declare function dateControlsEqual(left: Date | null, right: Date | null): boolean;
|
|
@@ -3,13 +3,21 @@ import { FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';
|
|
4
4
|
import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdLabelDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';
|
|
6
|
-
import { SdFormControl, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
6
|
+
import { SdFormControl, SdTemporalValueTransform, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
7
7
|
import { Size } from '@sdcorejs/utils/models';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
type SdDateModelValue = string | number | Date | undefined | null;
|
|
10
|
+
type SdDateKeyupEvent = Event | {
|
|
11
|
+
target?: {
|
|
12
|
+
value?: string | null;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
10
15
|
export declare class SdDate implements OnDestroy, OnInit {
|
|
11
16
|
#private;
|
|
12
17
|
id: string;
|
|
18
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
19
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
20
|
+
readonly errorId: string;
|
|
13
21
|
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
14
22
|
datePicker: import("@angular/core").Signal<MatDatepicker<Date> | undefined>;
|
|
15
23
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -62,11 +70,19 @@ export declare class SdDate implements OnDestroy, OnInit {
|
|
|
62
70
|
maxInput: import("@angular/core").InputSignal<any>;
|
|
63
71
|
maxDateInput: import("@angular/core").InputSignal<any>;
|
|
64
72
|
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Output serialization strategy for the committed value. Affects `model` / `modelChange` /
|
|
75
|
+
* `sdChange` and the registered form field only — the input keeps showing `dd/MM/yyyy`.
|
|
76
|
+
* Left unset, the component keeps emitting its canonical `yyyy/MM/dd` string.
|
|
77
|
+
*/
|
|
78
|
+
transform: import("@angular/core").InputSignal<SdTemporalValueTransform | undefined>;
|
|
65
79
|
valueModel: import("@angular/core").ModelSignal<SdDateModelValue>;
|
|
66
80
|
sdChange: import("@angular/core").OutputEmitterRef<any>;
|
|
67
81
|
sdFocus: import("@angular/core").OutputEmitterRef<void>;
|
|
68
82
|
isMobileOrTablet: boolean;
|
|
69
83
|
formControl: SdFormControl;
|
|
84
|
+
/** Control registered in the parent form while a `transform` is active; holds the public model. */
|
|
85
|
+
readonly modelControl: SdFormControl;
|
|
70
86
|
isFocused: boolean;
|
|
71
87
|
isValid?: boolean;
|
|
72
88
|
ngOnInit(): void;
|
|
@@ -80,10 +96,12 @@ export declare class SdDate implements OnDestroy, OnInit {
|
|
|
80
96
|
open: () => void;
|
|
81
97
|
focusInputElement(): void;
|
|
82
98
|
onKeyDown: (event: KeyboardEvent) => boolean;
|
|
83
|
-
|
|
99
|
+
onInput: (event: Event) => void;
|
|
100
|
+
/** Kept as a compatibility entry point for callers that used the old keyup handler. */
|
|
101
|
+
onKeyup: (event: SdDateKeyupEvent) => void;
|
|
84
102
|
onChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
85
103
|
clear: ($event: any) => void;
|
|
86
104
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDate, never>;
|
|
87
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDate, "sd-date", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef", "sdLabelDef"], ["[sdLabel]"], true, never>;
|
|
105
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDate, "sd-date", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef", "sdLabelDef"], ["[sdLabel]"], true, never>;
|
|
88
106
|
}
|
|
89
107
|
export {};
|
|
@@ -3,7 +3,7 @@ import { FormControl, FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { MatDatepickerInputEvent, MatDateRangePicker } from '@angular/material/datepicker';
|
|
4
4
|
import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdLabelDefDirective } from '@sdcorejs/angular/forms/directives';
|
|
6
|
-
import { SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
6
|
+
import { SdTemporalValueTransform, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
7
7
|
import { Size } from '@sdcorejs/utils/models';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export interface SdDateRangeValue {
|
|
@@ -14,6 +14,9 @@ export declare class SdDateRange {
|
|
|
14
14
|
#private;
|
|
15
15
|
id1: string;
|
|
16
16
|
id2: string;
|
|
17
|
+
/** why: id ổn định của <mat-error> để hai ô nhập trỏ `aria-describedby` sang — thông báo
|
|
18
|
+
* lỗi phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
19
|
+
readonly errorId: string;
|
|
17
20
|
picker: import("@angular/core").Signal<MatDateRangePicker<Date> | undefined>;
|
|
18
21
|
sdLabelDef: import("@angular/core").Signal<SdLabelDefDirective | undefined>;
|
|
19
22
|
private cdRef;
|
|
@@ -67,12 +70,20 @@ export declare class SdDateRange {
|
|
|
67
70
|
resolvedMin: import("@angular/core").Signal<Date | null>;
|
|
68
71
|
maxInput: import("@angular/core").InputSignal<any>;
|
|
69
72
|
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Output serialization strategy applied to **each endpoint** of the committed range. Affects
|
|
75
|
+
* `model` / `modelChange` / `sdChange` and the registered form field only — the field keeps
|
|
76
|
+
* showing `dd/MM/yyyy → dd/MM/yyyy`. Left unset, endpoints stay canonical `yyyy/MM/dd` strings.
|
|
77
|
+
*/
|
|
78
|
+
transform: import("@angular/core").InputSignal<SdTemporalValueTransform | undefined>;
|
|
70
79
|
valueModel: import("@angular/core").ModelSignal<SdDateRangeValue | null | undefined>;
|
|
71
80
|
sdChange: import("@angular/core").OutputEmitterRef<SdDateRangeValue | null | undefined>;
|
|
72
81
|
isMobileOrTablet: boolean;
|
|
73
82
|
formControl: FormControl<any>;
|
|
74
83
|
control1: FormControl<any>;
|
|
75
84
|
control2: FormControl<any>;
|
|
85
|
+
/** Control registered in the parent form while a `transform` is active; holds the public model. */
|
|
86
|
+
readonly modelControl: import("@sdcorejs/angular/forms/models").SdFormControl;
|
|
76
87
|
constructor();
|
|
77
88
|
onStartChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
78
89
|
onEndChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
@@ -83,5 +94,5 @@ export declare class SdDateRange {
|
|
|
83
94
|
onClosePicker: () => void;
|
|
84
95
|
onOpenPicker: (event: MouseEvent) => void;
|
|
85
96
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDateRange, never>;
|
|
86
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, ["sdLabelDef", "sdValueTemplate"], never, true, never>;
|
|
97
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, ["sdLabelDef", "sdValueTemplate"], never, true, never>;
|
|
87
98
|
}
|
|
@@ -2,13 +2,16 @@ import { ElementRef, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
3
|
import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
|
|
4
4
|
import { SdViewDefDirective } from '@sdcorejs/angular/forms/directives';
|
|
5
|
-
import { SdFormControl, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
5
|
+
import { SdFormControl, SdTemporalValueTransform, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
6
6
|
import { Size } from '@sdcorejs/utils/models';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
type SdDatetimeModelValue = string | number | Date | undefined | null;
|
|
9
9
|
export declare class SdDatetime implements OnDestroy, OnInit {
|
|
10
10
|
#private;
|
|
11
11
|
id: string;
|
|
12
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
13
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
14
|
+
readonly errorId: string;
|
|
12
15
|
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
13
16
|
private readonly dateTimePicker;
|
|
14
17
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -63,12 +66,20 @@ export declare class SdDatetime implements OnDestroy, OnInit {
|
|
|
63
66
|
maxInput: import("@angular/core").InputSignal<any>;
|
|
64
67
|
maxDateInput: import("@angular/core").InputSignal<any>;
|
|
65
68
|
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Output serialization strategy for the committed value. Affects `model` / `modelChange` /
|
|
71
|
+
* `sdChange` and the registered form field only — the field keeps displaying
|
|
72
|
+
* `dd/MM/yyyy HH:mm[:ss]` per `showSeconds`. Left unset, the canonical string is emitted.
|
|
73
|
+
*/
|
|
74
|
+
transform: import("@angular/core").InputSignal<SdTemporalValueTransform | undefined>;
|
|
66
75
|
valueModel: import("@angular/core").ModelSignal<SdDatetimeModelValue>;
|
|
67
76
|
viewedDate: import("@angular/core").Signal<Date | null>;
|
|
68
77
|
sdChange: import("@angular/core").OutputEmitterRef<any>;
|
|
69
78
|
sdFocus: import("@angular/core").OutputEmitterRef<void>;
|
|
70
79
|
isMobileOrTablet: boolean;
|
|
71
80
|
formControl: SdFormControl;
|
|
81
|
+
/** Control registered in the parent form while a `transform` is active; holds the public model. */
|
|
82
|
+
readonly modelControl: SdFormControl;
|
|
72
83
|
isFocused: boolean;
|
|
73
84
|
isValid?: boolean;
|
|
74
85
|
/** State popup — true khi picker package đang mở. */
|
|
@@ -94,6 +105,6 @@ export declare class SdDatetime implements OnDestroy, OnInit {
|
|
|
94
105
|
onConfirmInput: (event: any) => void;
|
|
95
106
|
clear: ($event: any) => void;
|
|
96
107
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDatetime, never>;
|
|
97
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDatetime, "sd-datetime", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef"], ["[sdLabel]"], true, never>;
|
|
108
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDatetime, "sd-datetime", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef"], ["[sdLabel]"], true, never>;
|
|
98
109
|
}
|
|
99
110
|
export {};
|
|
@@ -58,6 +58,7 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
58
58
|
readonly selectedTemplate: import("@angular/core").Signal<SdEntityPickerSelectedTemplateDirective<any, any> | undefined>;
|
|
59
59
|
readonly rowTemplate: import("@angular/core").Signal<SdEntityPickerRowTemplateDirective<any> | undefined>;
|
|
60
60
|
readonly detailTemplate: import("@angular/core").Signal<SdEntityPickerDetailTemplateDirective<any, any> | undefined>;
|
|
61
|
+
readonly errorId: string;
|
|
61
62
|
readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
|
|
62
63
|
readonly autoId: import("@angular/core").Signal<string | undefined>;
|
|
63
64
|
readonly name: import("@angular/core").InputSignal<string>;
|
|
@@ -78,6 +79,8 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
78
79
|
readonly disabledEntity: import("@angular/core").InputSignal<((item: T) => boolean) | undefined>;
|
|
79
80
|
readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
80
81
|
readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
82
|
+
/** Component-local error text. Set it to force the control invalid and render the message. */
|
|
83
|
+
readonly inlineError: import("@angular/core").InputSignal<string | undefined>;
|
|
81
84
|
readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
82
85
|
readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
83
86
|
readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
@@ -86,11 +89,14 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
86
89
|
readonly model: import("@angular/core").ModelSignal<SdEntityPickerModel<TKey>>;
|
|
87
90
|
readonly sdChange: import("@angular/core").OutputEmitterRef<SdEntityPickerModel<TKey>>;
|
|
88
91
|
readonly sdAdd: import("@angular/core").OutputEmitterRef<void>;
|
|
89
|
-
readonly
|
|
92
|
+
readonly loadError: import("@angular/core").OutputEmitterRef<unknown>;
|
|
90
93
|
readonly formControl: SdFormControl;
|
|
94
|
+
readonly errorMessage: import("@angular/core").Signal<string | undefined>;
|
|
91
95
|
readonly connectorState: import("@angular/core").Signal<import("@sdcorejs/angular/forms/models").ɵSdFormControlConnectorState<SdEntityPickerModel<TKey>>>;
|
|
96
|
+
/** Interaction-gated validation message; `undefined` until the control is touched/dirty. */
|
|
97
|
+
readonly visibleErrorMessage: import("@angular/core").Signal<string | undefined>;
|
|
92
98
|
readonly draftKeys: import("@angular/core").WritableSignal<TKey[]>;
|
|
93
|
-
readonly
|
|
99
|
+
readonly loadErrorState: import("@angular/core").WritableSignal<unknown>;
|
|
94
100
|
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
95
101
|
readonly hydrating: import("@angular/core").WritableSignal<boolean>;
|
|
96
102
|
readonly query: import("@angular/core").WritableSignal<SdQuery<T>>;
|
|
@@ -118,6 +124,6 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
118
124
|
keyOf(item: T): TKey;
|
|
119
125
|
displayEntity(item: T): string;
|
|
120
126
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdEntityPicker<any, any>, never>;
|
|
121
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdEntityPicker<any, any>, "sd-entity-picker", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "provider": { "alias": "provider"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "queryFields": { "alias": "queryFields"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "keySelector": { "alias": "keySelector"; "required": false; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledEntity": { "alias": "disabledEntity"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "addable": { "alias": "addable"; "required": false; "isSignal": true; }; "model": { "alias": "model"; "required": false; "isSignal": true; }; }, { "model": "modelChange"; "sdChange": "sdChange"; "sdAdd": "sdAdd"; "
|
|
127
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdEntityPicker<any, any>, "sd-entity-picker", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "provider": { "alias": "provider"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "queryFields": { "alias": "queryFields"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "keySelector": { "alias": "keySelector"; "required": false; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledEntity": { "alias": "disabledEntity"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "addable": { "alias": "addable"; "required": false; "isSignal": true; }; "model": { "alias": "model"; "required": false; "isSignal": true; }; }, { "model": "modelChange"; "sdChange": "sdChange"; "sdAdd": "sdAdd"; "loadError": "loadError"; }, ["selectedTemplate", "rowTemplate", "detailTemplate"], never, true, never>;
|
|
122
128
|
}
|
|
123
129
|
export declare function normalizePickerKeys<TKey>(value: SdEntityPickerModel<TKey>, multiple: boolean): TKey[];
|
|
@@ -10,6 +10,9 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
export declare class SdInput implements OnDestroy, OnInit, AfterViewInit {
|
|
11
11
|
#private;
|
|
12
12
|
id: string;
|
|
13
|
+
/** why: id ổn định của <mat-error> để `<input>` trỏ `aria-describedby` sang — thông báo lỗi
|
|
14
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
15
|
+
readonly errorId: string;
|
|
13
16
|
control: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
14
17
|
/** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */
|
|
15
18
|
inlineRef: import("@angular/core").Signal<SdInlineText | undefined>;
|
|
@@ -23,6 +23,10 @@ export declare class SdInputColor {
|
|
|
23
23
|
readonly hideInlineError: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
24
24
|
/** Display mode — forwarded to the inner `<sd-input>`. `'inline'` = borderless inline-edit; disabled `'inline'` → static. */
|
|
25
25
|
readonly viewed: import("@angular/core").InputSignalWithTransform<SdViewed, SdViewedInput>;
|
|
26
|
+
/** `true` when `viewed === true` (static view — no editor, no picker). */
|
|
27
|
+
readonly isViewed: import("@angular/core").Signal<boolean>;
|
|
28
|
+
/** `true` when `viewed === 'inline'` and the control is still editable. */
|
|
29
|
+
readonly isInline: import("@angular/core").Signal<boolean>;
|
|
26
30
|
readonly valueModel: import("@angular/core").ModelSignal<string | null | undefined>;
|
|
27
31
|
readonly sdChange: import("@angular/core").OutputEmitterRef<string | null | undefined>;
|
|
28
32
|
readonly picker: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
@@ -15,6 +15,9 @@ declare class SdInputNumberErrotStateMatcher implements ErrorStateMatcher {
|
|
|
15
15
|
export declare class SdInputNumber implements OnDestroy, OnInit, AfterViewInit {
|
|
16
16
|
#private;
|
|
17
17
|
id: string;
|
|
18
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
19
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
20
|
+
readonly errorId: string;
|
|
18
21
|
control: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
19
22
|
/** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */
|
|
20
23
|
inlineRef: import("@angular/core").Signal<SdInlineText | undefined>;
|
package/forms/models/index.d.ts
CHANGED
|
@@ -5,4 +5,8 @@ export type * from './src/sd-selection-data.model';
|
|
|
5
5
|
export type * from './src/sd-search.model';
|
|
6
6
|
export * from './src/form-control-state';
|
|
7
7
|
export * from './src/sd-viewed';
|
|
8
|
+
export * from './src/sd-temporal-transform';
|
|
9
|
+
export * from './src/sd-model-facing-control';
|
|
10
|
+
export * from './src/sd-timer-scope';
|
|
8
11
|
export * from './src/sd-form-control-connector';
|
|
12
|
+
export * from './src/sd-strict-date-adapter';
|
|
@@ -11,6 +11,18 @@ interface ɵSdFormControlConnectorBaseOptions<TControl> {
|
|
|
11
11
|
readonly name: Signal<string | null | undefined>;
|
|
12
12
|
/** Canonical control registered in the parent form. */
|
|
13
13
|
readonly control: Signal<AbstractControl<TControl>>;
|
|
14
|
+
/**
|
|
15
|
+
* Control to register in the parent form **instead of** `control`, when the two must differ.
|
|
16
|
+
*
|
|
17
|
+
* why: `<sd-date>` / `<sd-datetime>` / `<sd-date-range>` bind `control` straight to the Material
|
|
18
|
+
* editor, so it necessarily holds the editor's own representation (a `Date`, or the display
|
|
19
|
+
* string) — not the public model. That is fine until `transform` is set, at which point the
|
|
20
|
+
* consumer is promised that `form.get(name).value` matches `model` and the `sdChange` payload.
|
|
21
|
+
* Yielding a model-facing control here moves only the *registration*; validators, disabled, state
|
|
22
|
+
* and the model binding all stay on `control`, so a `null`/absent signal keeps today's behaviour
|
|
23
|
+
* exactly. The component owning both controls is responsible for mirroring value and validity.
|
|
24
|
+
*/
|
|
25
|
+
readonly registeredControl?: Signal<AbstractControl | null | undefined>;
|
|
14
26
|
readonly validators?: Signal<ValidatorFn | readonly ValidatorFn[] | null | undefined>;
|
|
15
27
|
readonly asyncValidators?: Signal<AsyncValidatorFn | readonly AsyncValidatorFn[] | null | undefined>;
|
|
16
28
|
/** Adds/removes Validators.required while preserving validators supplied above. */
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { AbstractControl } from '@angular/forms';
|
|
3
|
+
import { SdFormControl } from './sd-form-control.model';
|
|
4
|
+
export interface ɵSdModelFacingControlOptions<TModel> {
|
|
5
|
+
/** Whether the model-facing control should be the one registered in the parent form. */
|
|
6
|
+
readonly active: Signal<boolean>;
|
|
7
|
+
/** The component's public model. */
|
|
8
|
+
readonly model: Signal<TModel>;
|
|
9
|
+
/** Applies an external write that arrived through the registered control. */
|
|
10
|
+
readonly writeModel: (value: TModel) => void;
|
|
11
|
+
/** The internal UI control whose validity, disabled and interaction state must be mirrored. */
|
|
12
|
+
readonly source: Signal<AbstractControl>;
|
|
13
|
+
/** Compares two model values; defaults to `Object.is`. */
|
|
14
|
+
readonly modelEquals?: (left: TModel, right: TModel) => boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ɵSdModelFacingControl<TModel> {
|
|
17
|
+
/** The control itself. Holds the public model value, never the editor representation. */
|
|
18
|
+
readonly control: SdFormControl;
|
|
19
|
+
/** Feed straight into `ɵsdFormControlConnector`'s `registeredControl`. */
|
|
20
|
+
readonly registered: Signal<AbstractControl | null>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A second control that carries the **public model** so it can be registered in the parent form in
|
|
24
|
+
* place of the editor-facing control.
|
|
25
|
+
*
|
|
26
|
+
* why: `<sd-date>` and friends bind their control directly to the Material editor, so that control
|
|
27
|
+
* necessarily holds a `Date` or a display string. That is invisible until `transform` is set — at
|
|
28
|
+
* which point the consumer is told `form.get(name).value` equals `model`, and finding a raw `Date`
|
|
29
|
+
* there instead makes the promise false. Rather than reshaping the editor binding (which would
|
|
30
|
+
* change behaviour for every existing consumer), this mirrors the model into a control of its own
|
|
31
|
+
* and hands *that* one to the form.
|
|
32
|
+
*
|
|
33
|
+
* Both directions are wired, and neither can feed back on the other:
|
|
34
|
+
* - model changes are pushed in with `emitEvent: false`, so they raise no `valueChanges`;
|
|
35
|
+
* - a write that arrives on this control goes to `writeModel`, exactly like a write on the editor
|
|
36
|
+
* control would, so `modelChange` / `sdChange` still fire once.
|
|
37
|
+
*
|
|
38
|
+
* Validity, disabled and touched/dirty are mirrored from `source`, so registering this control does
|
|
39
|
+
* not quietly drop the editor's validators (min/max, parse errors, required) from the parent form.
|
|
40
|
+
*
|
|
41
|
+
* Must be called from an injection context.
|
|
42
|
+
*/
|
|
43
|
+
export declare function ɵsdModelFacingControl<TModel>(options: ɵSdModelFacingControlOptions<TModel>): ɵSdModelFacingControl<TModel>;
|
|
@@ -4,4 +4,4 @@ export interface SdSearchReq<TData extends string | number = string> {
|
|
|
4
4
|
searchFields?: string[];
|
|
5
5
|
value?: TData | TData[];
|
|
6
6
|
}
|
|
7
|
-
export type SdSearch<T =
|
|
7
|
+
export type SdSearch<T = unknown> = (args: SdSearchReq) => Promise<T[]>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Provider } from '@angular/core';
|
|
2
|
+
import { DateFnsAdapter } from '@angular/material-date-fns-adapter';
|
|
3
|
+
import { MatDateFormats } from '@angular/material/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* DateAdapter từ chối mọi chuỗi người dùng chưa gõ xong.
|
|
7
|
+
*
|
|
8
|
+
* WHY cần đến mức này: `<input matInput [matDatepicker]>` khiến Material tự
|
|
9
|
+
* `parse()` lại ô nhập SAU MỖI PHÍM GÕ rồi ghi thẳng kết quả vào form control.
|
|
10
|
+
* Adapter mặc định quá dễ dãi trên hai đường:
|
|
11
|
+
*
|
|
12
|
+
* 1. `date-fns.parse` nhận năm thiếu chữ số → `11/12/2` thành năm 0002,
|
|
13
|
+
* `11/12/20` thành năm 0020. Ô nhập vừa gõ dở đã bị coi là hợp lệ (cờ lỗi
|
|
14
|
+
* bị xoá) và control ôm một ngày rác.
|
|
15
|
+
* 2. `parseISO` coi chuỗi 2 chữ số là thế kỷ → xoá lùi còn `11` ra năm 1100.
|
|
16
|
+
*
|
|
17
|
+
* Cả hai đường đều bị chặn ở đây: control chỉ nhận giá trị khi người dùng thực
|
|
18
|
+
* sự gõ xong.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SdStrictDateFnsAdapter extends DateFnsAdapter {
|
|
21
|
+
parse(value: unknown, parseFormat: string | string[]): Date | null;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SdStrictDateFnsAdapter, never>;
|
|
23
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SdStrictDateFnsAdapter>;
|
|
24
|
+
}
|
|
25
|
+
/** `provideDateFnsAdapter` + ép dùng adapter parse chặt ở trên. */
|
|
26
|
+
export declare function provideSdStrictDateFnsAdapter(formats: MatDateFormats): Provider[];
|