@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-forms-input.mjs","sources":["../../../projects/sdcorejs-angular/forms/input/src/input-mask.ts","../../../projects/sdcorejs-angular/forms/input/src/input.component.ts","../../../projects/sdcorejs-angular/forms/input/src/input.component.html","../../../projects/sdcorejs-angular/forms/input/sdcorejs-angular-forms-input.ts"],"sourcesContent":["export type SdInputMaskStatus = 'empty' | 'incomplete' | 'valid' | 'invalid';\n\nexport type SdInputMaskInputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n\nexport interface SdInputMaskResult {\n readonly raw: string;\n readonly display: string;\n readonly status: SdInputMaskStatus;\n readonly selectionStart: number;\n readonly selectionEnd: number;\n}\n\nexport interface SdInputMaskAdapter {\n readonly inputMode?: SdInputMaskInputMode;\n readonly maxDisplayLength?: number;\n format(raw: string | null | undefined): SdInputMaskResult;\n parse(display: string, selectionStart?: number | null, selectionEnd?: number | null): SdInputMaskResult;\n}\n\nexport interface SdInputMaskToken {\n readonly pattern: RegExp;\n readonly optional?: boolean;\n readonly transform?: (value: string) => string;\n}\n\nexport interface SdCreateInputMaskOptions {\n readonly tokens?: Readonly<Record<string, SdInputMaskToken>>;\n readonly inputMode?: SdInputMaskInputMode;\n}\n\ninterface MaskSlot {\n readonly unitIndex: number;\n readonly slotIndex: number;\n readonly token: SdInputMaskToken;\n}\n\ninterface MaskLiteral {\n readonly unitIndex: number;\n readonly value: string;\n}\n\ninterface AssignedSlot {\n readonly slotIndex: number;\n readonly unitIndex: number;\n readonly value: string;\n readonly sourceIndex: number;\n}\n\nconst DEFAULT_TOKENS: Readonly<Record<string, SdInputMaskToken>> = {\n '#': { pattern: /[0-9]/ },\n '9': { pattern: /[0-9]/, optional: true },\n A: { pattern: /[A-Za-z]/ },\n a: { pattern: /[A-Za-z]/, optional: true },\n '*': { pattern: /[A-Za-z0-9]/ },\n '?': { pattern: /[A-Za-z0-9]/, optional: true },\n};\n\nfunction tokenAccepts(token: SdInputMaskToken, value: string): boolean {\n token.pattern.lastIndex = 0;\n const accepted = token.pattern.test(value);\n token.pattern.lastIndex = 0;\n return accepted;\n}\n\n/**\n * Creates a dependency-free slot mask.\n *\n * Default tokens: `#` required digit, `9` optional digit, `A`/`a` required/optional\n * letter, and `*`/`?` required/optional alphanumeric. Every other character is a\n * display literal and never leaks into the raw model.\n */\nexport function sdCreateInputMask(pattern: string, options: SdCreateInputMaskOptions = {}): SdInputMaskAdapter {\n if (!pattern) throw new Error('Input mask pattern must not be empty.');\n\n const tokens = { ...DEFAULT_TOKENS, ...options.tokens };\n const slots: MaskSlot[] = [];\n const literals: MaskLiteral[] = [];\n const units = Array.from(pattern, (value, unitIndex) => {\n const token = tokens[value];\n if (token) {\n const slot = { unitIndex, slotIndex: slots.length, token } satisfies MaskSlot;\n slots.push(slot);\n return slot;\n }\n const literal = { unitIndex, value } satisfies MaskLiteral;\n literals.push(literal);\n return literal;\n });\n if (slots.length === 0) throw new Error('Input mask pattern must contain at least one token.');\n\n const literalValues = new Set(literals.map(item => item.value));\n\n const convert = (\n source: string,\n sourceSelectionStart: number,\n sourceSelectionEnd: number,\n sourceIsDisplay: boolean\n ): SdInputMaskResult => {\n const assigned: AssignedSlot[] = [];\n let unitCursor = 0;\n let invalid = false;\n\n for (let sourceIndex = 0; sourceIndex < source.length; sourceIndex += 1) {\n const value = source[sourceIndex];\n let consumed = false;\n\n // why: literals are consumed at the pattern cursor, not filtered globally;\n // a global filter would corrupt raw digits in masks with prefixes such as `+84`.\n while (unitCursor < units.length) {\n const unit = units[unitCursor];\n\n if ('value' in unit) {\n unitCursor += 1;\n if (sourceIsDisplay && value === unit.value) {\n consumed = true;\n break;\n }\n continue;\n }\n\n if (tokenAccepts(unit.token, value)) {\n assigned.push({\n slotIndex: unit.slotIndex,\n unitIndex: unit.unitIndex,\n value: unit.token.transform?.(value) ?? value,\n sourceIndex,\n });\n unitCursor += 1;\n consumed = true;\n break;\n }\n\n if (sourceIsDisplay && literalValues.has(value)) {\n consumed = true;\n break;\n }\n\n if (unit.token.optional) {\n unitCursor += 1;\n continue;\n }\n\n invalid = true;\n consumed = true;\n break;\n }\n\n if (!consumed) invalid = true;\n }\n\n const assignedByUnit = new Map(assigned.map(item => [item.unitIndex, item] as const));\n const lastFilledUnit = assigned.at(-1)?.unitIndex ?? -1;\n let display = '';\n let acceptedCount = 0;\n const displayPositionByAcceptedCount = new Map<number, number>([[0, 0]]);\n\n for (const unit of units) {\n if ('token' in unit) {\n const item = assignedByUnit.get(unit.unitIndex);\n if (!item) continue;\n display += item.value;\n acceptedCount += 1;\n displayPositionByAcceptedCount.set(acceptedCount, display.length);\n } else if (unit.unitIndex < lastFilledUnit) {\n display += unit.value;\n }\n }\n\n const raw = assigned.map(item => item.value).join('');\n const hasEveryRequiredSlot = slots.every((slot, index) => slot.token.optional || assigned.some(item => item.slotIndex === index));\n const status: SdInputMaskStatus = invalid ? 'invalid' : raw.length === 0 ? 'empty' : hasEveryRequiredSlot ? 'valid' : 'incomplete';\n\n const acceptedBefore = (position: number): number => assigned.filter(item => item.sourceIndex < Math.max(0, position)).length;\n const mapSelection = (position: number): number => {\n const count = acceptedBefore(position);\n return displayPositionByAcceptedCount.get(count) ?? display.length;\n };\n\n return {\n raw,\n display,\n status,\n selectionStart: mapSelection(sourceSelectionStart),\n selectionEnd: mapSelection(sourceSelectionEnd),\n };\n };\n\n return {\n inputMode: options.inputMode ?? (slots.every(slot => tokenAccepts(slot.token, '0')) ? 'numeric' : 'text'),\n maxDisplayLength: pattern.length,\n format: raw => {\n const source = raw == null ? '' : String(raw);\n return convert(source, source.length, source.length, false);\n },\n parse: (display, selectionStart = display.length, selectionEnd = selectionStart) =>\n convert(display, selectionStart ?? display.length, selectionEnd ?? selectionStart ?? display.length, true),\n };\n}\n\n/** Common business masks. Models remain raw strings; separators are display-only. */\nexport const SD_INPUT_MASKS = {\n VN_PHONE: sdCreateInputMask('#### ### ###', { inputMode: 'tel' }),\n VN_ID: sdCreateInputMask('#### #### ####', { inputMode: 'numeric' }),\n VN_TAX_CODE: sdCreateInputMask('##########-999', { inputMode: 'numeric' }),\n BANK_ACCOUNT: sdCreateInputMask('######99999999999999', { inputMode: 'numeric' }),\n BUSINESS_CODE: sdCreateInputMask('****-????????????', { inputMode: 'text' }),\n} as const satisfies Readonly<Record<string, SdInputMaskAdapter>>;\n\nexport type SdInputMaskPreset = keyof typeof SD_INPUT_MASKS;\nexport type SdInputMask = SdInputMaskAdapter | SdInputMaskPreset;\n\nexport function sdResolveInputMask(mask: SdInputMask | null | undefined): SdInputMaskAdapter | undefined {\n if (!mask) return undefined;\n return typeof mask === 'string' ? SD_INPUT_MASKS[mask] : mask;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n input,\n model,\n OnDestroy,\n OnInit,\n Output,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { AsyncValidatorFn, FormGroup, FormsModule, NgForm, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { SdInlineText } from '@sdcorejs/angular/forms/inline-text';\nimport { SdSuffixDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport {\n HandleSdCustomValidator,\n SD_FORM_CONFIGURATION,\n SdCustomValidator,\n SdFormControl,\n sdFormControlState,\n SdInlineErrorValidator,\n SdViewed,\n SdViewedInput,\n sdViewedInline,\n sdViewedTransform,\n ɵsdFormControlConnector,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Size } from '@sdcorejs/utils/models';\nimport type { ValidationPatternType } from '@sdcorejs/utils/models';\nimport { VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';\n\n// Back-compat: SdPatternType cũ → ValidationPatternType mới.\n// 3 key đã đổi tên trong @sdcorejs/utils v1.x.\nconst LEGACY_PATTERN_ALIAS: Record<string, ValidationPatternType> = {\n PHONE_VN: 'VN_PHONE',\n IDVN: 'VN_ID',\n IDVN_OR_PASSPORT: 'VN_ID_OR_PASSPORT',\n};\nimport { Subscription } from 'rxjs';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nimport { SdInputMask, SdInputMaskResult, SdInputMaskStatus, sdResolveInputMask } from './input-mask';\n\n@Component({\n selector: 'sd-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: { '[class.sd-has-label]': '!!label()', '[class.sd-viewed]': 'isViewed() || isInline()' },\n imports: [\n SdIcon,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n SdLabel,\n SdView,\n SdInlineText,\n TranslatePipe,\n ],\n})\nexport class SdInput implements OnDestroy, OnInit, AfterViewInit {\n id = `I${Utilities.generateUuid()}`;\n\n // ==========================================\n // 1. SIGNAL QUERIES (Thay thế @ViewChild / @ContentChild)\n // ==========================================\n control = viewChild<ElementRef<HTMLInputElement>>('control');\n /** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */\n inlineRef = viewChild(SdInlineText);\n sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\n sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\n sdSuffixDef = contentChild(SdSuffixDefDirective);\n sdViewDef = contentChild(SdViewDefDirective);\n\n // ==========================================\n // 2. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `forms-input-${this.autoIdInput()}` : undefined));\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'));\n readonly dataValue = computed<string | null>(() => {\n if (this.type() === 'password') return null;\n return sdSerializeDataValue(this.#state().value);\n });\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataMaxLength = computed(() => {\n const v = this.maxlength();\n return v == null ? null : String(v);\n });\n readonly dataMinLength = computed(() => {\n const v = this.minlength();\n return v == null ? null : String(v);\n });\n readonly dataPattern = computed(() => {\n const v = this.pattern();\n return v == null || v === '' ? null : String(v);\n });\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(Utilities.generateUuid());\n\n // ==========================================\n // 3. INJECT (Thay thế Constructor DI)\n // ==========================================\n #ref = inject(ChangeDetectorRef);\n #formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.#formConfig?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n label = input<string | undefined>();\n helperText = input<string | undefined>();\n placeholder = input<string | undefined>();\n type = input<'text' | 'number' | 'password' | 'email'>('text');\n mask = input<SdInputMask | null | undefined>();\n readonly maskAdapter = computed(() => sdResolveInputMask(this.mask()));\n readonly effectiveType = computed(() => (this.maskAdapter() ? 'text' : this.type()));\n readonly inputMode = computed(() => this.maskAdapter()?.inputMode);\n readonly maxDisplayLength = computed(() => this.maskAdapter()?.maxDisplayLength);\n\n hideInlineError = input(false, { transform: booleanAttribute });\n blurOnEnter = input(false, { transform: booleanAttribute });\n /** Whether to show the value-gated clear button in edit and inline modes. */\n clearable = input(false, { transform: booleanAttribute });\n required = input(false, { transform: booleanAttribute });\n readonly = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n /** Display mode: `false` edit · `true` static view · `'inline'` borderless inline-edit (no panel — the input IS the face). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n\n /** Focus whichever input is live: the inline primitive in `'inline'` mode, else the mat input. */\n #focusActiveInput = (): void => {\n const inline = this.inlineRef();\n if (inline) inline.focus();\n else this.control()?.nativeElement?.focus();\n };\n /** View display template: `sdViewDef` overrides the projected `#sdValue` for the static view (unified). */\n readonly viewTemplate = computed<TemplateRef<any> | undefined>(() => this.sdViewDef()?.templateRef ?? this.sdValueTemplate());\n\n minlength = input<number | undefined, unknown>(undefined, { transform: v => (v == null ? undefined : Number(v)) });\n maxlength = input<number | undefined, unknown>(undefined, { transform: v => (v == null ? undefined : Number(v)) });\n\n pattern = input<ValidationPatternType | string | undefined | null>();\n patternErrorMessage = input<string | undefined | null>();\n\n // Bỏ qua nếu val không phải string (number/boolean/object truyền nhầm → tránh validator hỏng)\n #lookupPattern = (val: unknown) => {\n if (typeof val !== 'string') return undefined;\n const key = (LEGACY_PATTERN_ALIAS[val] ?? val) as ValidationPatternType;\n return VALIDATION_PATTERNS.find(e => e.type === key);\n };\n\n resolvedPattern = computed(() => {\n const val = this.pattern();\n if (typeof val !== 'string') return undefined;\n const patternObj = this.#lookupPattern(val);\n return patternObj ? patternObj.pattern : val;\n });\n\n resolvedPatternErrorMsg = computed(() => {\n // patternObj.errorMessage là i18n key (vd 'core.validator.email.error') → wrap qua i18n.t() để hiển thị string đã dịch\n const customMsg = this.patternErrorMessage();\n if (customMsg) return customMsg;\n const patternObj = this.#lookupPattern(this.pattern());\n return patternObj ? this.#i18n.t(patternObj.errorMessage) : undefined;\n });\n\n /**\n * First active error message for tooltip display when `hideInlineError = true`.\n * Re-runs only when `#state` ticks (value / status / touched change) — no longer\n * invoked on every change-detection cycle as a getter would be.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n // Subscribe to form-state changes so the computed re-evaluates correctly.\n void this.#state();\n const errors = this.formControl.errors;\n if (!errors) return undefined;\n\n if (errors['required']) return this.#i18n.t('core.form.input.required');\n if (errors['maxlength']) return this.#i18n.t('core.form.input.maxlength', { max: this.maxlength() ?? '' });\n if (errors['maskIncomplete']) return this.#i18n.t('core.form.input.mask-incomplete');\n if (errors['maskInvalid']) return this.#i18n.t('core.form.input.mask-invalid');\n if (errors['pattern']) return this.resolvedPatternErrorMsg() || this.#i18n.t('core.form.input.invalid-pattern');\n if (errors['customValidator']) return errors['customValidator'] as string;\n if (errors['inlineError']) return this.inlineError();\n return undefined;\n });\n\n validator = input<SdCustomValidator | undefined>();\n inlineError = input<string | undefined>();\n hyperlink = input<string | null | undefined>();\n\n valueModel = model<any>(undefined, { alias: 'model' });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS (Thay thế @Output)\n // ==========================================\n sdChange = output<any>();\n sdFocus = output<void>(); // Đổi sang void vì không truyền data\n sdBlur = output<any>();\n keyupEnter = output<any>();\n // why: sdChange fire per-keystroke nên consumer KHÔNG dùng nó để trigger\n // \"commit filter\" (sẽ over-reload). `cleared` là intent rõ ràng cho action\n // X (clear button) — consumer như column-filter dùng để fire reload ngay.\n cleared = output<void>();\n\n // why: focus handling reads EventEmitter.observed before emitting a forced blur event.\n @Output() readonly sdFocusForceBlur = new EventEmitter<void>();\n\n formControl = new SdFormControl();\n /** Display-only control used by the input element while a mask is active. */\n readonly displayControl = new SdFormControl();\n readonly activeControl = computed(() => (this.maskAdapter() ? this.displayControl : this.formControl));\n readonly maskStatus = signal<SdInputMaskStatus>('empty');\n readonly displayValue = computed(() => {\n const adapter = this.maskAdapter();\n return adapter ? adapter.format(this.formControl.value == null ? '' : String(this.formControl.value)).display : this.formControl.value;\n });\n #subscription = new Subscription();\n #isComposing = false;\n #pendingMaskResult: SdInputMaskResult | undefined;\n isFocused = false;\n readonly #validators = computed<readonly ValidatorFn[]>(() => {\n const validators: ValidatorFn[] = [];\n const min = this.minlength();\n const max = this.maxlength();\n const pattern = this.resolvedPattern();\n\n if (min && min > 0) validators.push(Validators.minLength(min));\n if (max && max > 0) validators.push(Validators.maxLength(max));\n if (pattern) validators.push(Validators.pattern(pattern));\n if (this.maskAdapter()) {\n const maskStatus = this.maskStatus();\n validators.push(() => {\n if (maskStatus === 'invalid') return { maskInvalid: true };\n if (maskStatus === 'incomplete') return { maskIncomplete: true };\n return null;\n });\n }\n if (this.inlineError()) validators.push(SdInlineErrorValidator);\n return validators;\n });\n readonly #asyncValidators = computed<readonly AsyncValidatorFn[]>(() => {\n const validator = this.validator();\n return validator ? [HandleSdCustomValidator(validator)] : [];\n });\n readonly #formConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: this.name,\n control: computed(() => this.formControl),\n validators: this.#validators,\n asyncValidators: this.#asyncValidators,\n required: this.required,\n disabled: this.disabled,\n readonly: this.readonly,\n viewed: this.viewed,\n validationError: computed(() => this.errorMessage()),\n });\n /** Shared reactive form policy consumed by template-facing state below. */\n readonly connectorState = this.#formConnector.state;\n readonly isReadonly = computed(() => this.connectorState().readonly);\n readonly visibleErrorMessage = computed(() => this.connectorState().validationError);\n\n // Tri-state `viewed` — shared primitive. Input has NO panel; in `'inline'` the input is rendered\n // borderless/transparent (looks like text), always editable — clicking/focusing it edits directly.\n readonly #viewedState = sdViewedInline(\n computed(() => this.connectorState().viewed),\n () => this.#focusActiveInput(),\n this.disabled\n );\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no input). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Focus the inline input. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n constructor() {\n effect(() => {\n const val = this.valueModel();\n const adapter = this.maskAdapter();\n untracked(() => {\n if (this.formControl.value !== val) {\n this.formControl.setValue(val, { emitEvent: false });\n }\n if (adapter) {\n const rawValue = val == null ? '' : String(val);\n const result = this.#pendingMaskResult?.raw === rawValue ? this.#pendingMaskResult : adapter.format(rawValue);\n this.#pendingMaskResult = undefined;\n this.maskStatus.set(result.status);\n if (this.displayControl.value !== result.display) {\n this.displayControl.setValue(result.display, { emitEvent: false });\n }\n } else {\n this.maskStatus.set('empty');\n }\n });\n });\n\n effect(() => {\n const masked = !!this.maskAdapter();\n const disabled = this.disabled();\n untracked(() => {\n if (masked && disabled) this.displayControl.disable({ emitEvent: false });\n else this.displayControl.enable({ emitEvent: false });\n });\n });\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.formControl.sdChanges.subscribe(() => {\n this.#ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit() {\n this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\n this.#subscription.add(this.displayControl.valueChanges.subscribe(value => this.#onMaskedDisplayChange(value)));\n\n this.#ref.detectChanges();\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n reValidate = () => {\n this.formControl.updateValueAndValidity();\n };\n\n getCurrentLength = (): number => {\n return (this.formControl.value ?? '').toString().length;\n };\n\n isMaxlengthExceeded = (): boolean => {\n const max = this.maxlength();\n return !!(max && max > 0 && this.getCurrentLength() > max);\n };\n\n #onChange = () => {\n const value = this.formControl.value ?? '';\n\n this.valueModel.set(value);\n this.sdChange.emit(value);\n };\n\n #onMaskedDisplayChange(value: unknown): void {\n const adapter = this.maskAdapter();\n if (!adapter || this.#isComposing) return;\n\n const nativeInput = this.control()?.nativeElement;\n const display = value == null ? '' : String(value);\n const result = adapter.parse(display, nativeInput?.selectionStart, nativeInput?.selectionEnd);\n this.#applyMaskResult(result);\n }\n\n #applyMaskResult(result: SdInputMaskResult): void {\n this.maskStatus.set(result.status);\n if (this.displayControl.value !== result.display) {\n this.displayControl.setValue(result.display, { emitEvent: false });\n }\n if (this.formControl.value !== result.raw) {\n this.#pendingMaskResult = this.valueModel() === result.raw ? undefined : result;\n this.formControl.setValue(result.raw);\n } else {\n this.#pendingMaskResult = undefined;\n this.formControl.updateValueAndValidity({ emitEvent: false });\n }\n\n queueMicrotask(() => {\n const nativeInput = this.control()?.nativeElement;\n if (nativeInput) {\n nativeInput.setSelectionRange(result.selectionStart, result.selectionEnd);\n }\n });\n }\n\n onCompositionStart(): void {\n if (this.maskAdapter()) this.#isComposing = true;\n }\n\n onCompositionEnd(event: CompositionEvent): void {\n const adapter = this.maskAdapter();\n if (!adapter) return;\n this.#isComposing = false;\n const target = event.target as HTMLInputElement | null;\n const display = target?.value ?? String(this.displayControl.value ?? '');\n this.#applyMaskResult(adapter.parse(display, target?.selectionStart, target?.selectionEnd));\n }\n\n // why: dựa trên valueModel() (signal model-input) thay vì formControl.value —\n // khi bị wrap (vd <sd-input-color>) effect set formControl chạy SAU lúc template\n // eval nên formControl.value chưa kịp có; valueModel() thì có ngay. Method (không\n // computed) để re-eval mỗi CD. clearable là opt-in; required không được clear;\n // disabled/readonly ẩn nút.\n showClear = (): boolean => {\n if (!this.clearable() || this.required() || this.disabled() || this.readonly()) return false;\n return !sdIsEmpty(this.valueModel());\n };\n\n clear = ($event?: Event) => {\n $event?.stopPropagation();\n if (sdIsEmpty(this.valueModel()) && sdIsEmpty(this.formControl.value)) return;\n // why: clear là thao tác chủ động → model về null (không phải '' hay undefined).\n // undefined chỉ dành cho trạng thái pristine chưa từng nhập.\n this.formControl.setValue(null, { emitEvent: false });\n this.displayControl.setValue('', { emitEvent: false });\n this.maskStatus.set('empty');\n this.valueModel.set(null);\n this.sdChange.emit(null);\n this.cleared.emit();\n };\n\n onKeyupEnter = () => {\n const val: string = (this.formControl.value ?? '').toString();\n if (!this.maskAdapter() && val.length > val.trim().length) {\n this.formControl.setValue(val.trim());\n }\n this.keyupEnter.emit(this.formControl.value);\n if (this.blurOnEnter()) {\n this.blur();\n }\n };\n\n onFocus = () => {\n this.isFocused = true;\n this.sdFocus.emit(); // Gọi .emit() y hệt như cũ\n\n if (this.sdFocusForceBlur.observed) {\n this.blur();\n this.sdFocusForceBlur.emit();\n }\n };\n\n onBlur = () => {\n this.isFocused = false;\n const val: string = (this.formControl.value ?? '').toString();\n if (!this.maskAdapter() && val.length > val.trim().length) {\n this.formControl.setValue(val.trim());\n }\n this.sdBlur.emit(this.formControl.value);\n };\n\n onClick = () => {\n // 🚨 GỌI SIGNAL: Phải thêm () vào sdViewDef\n if (this.sdViewDef()?.templateRef) {\n if (!this.formControl.disabled && !this.isFocused) {\n this.focus();\n }\n }\n };\n\n blur = () => {\n this.isFocused = false;\n const inline = this.inlineRef();\n if (inline) inline.blur();\n else this.control()?.nativeElement?.blur();\n };\n\n focus = () => {\n this.isFocused = true;\n setTimeout(() => {\n this.#focusActiveInput();\n }, 100);\n };\n}\n","@let _label = label();\n@let _appearance = appearance();\n@let _hideInlineError = hideInlineError();\n@let _helperText = helperText();\n@let _maxLength = maxlength();\n@let _errorMessage = visibleErrorMessage();\n@let _required = required();\n@let _isInline = isInline();\n\n@if (isViewed()) {\n <sd-view\n [label]=\"_label\"\n [labelTemplate]=\"sdLabelTemplate()\"\n [value]=\"formControl.value\"\n [display]=\"displayValue()\"\n [hyperlink]=\"hyperlink()\"\n [valueTemplate]=\"viewTemplate()\">\n </sd-view>\n} @else if (_isInline) {\n <sd-inline-text\n [control]=\"activeControl()\"\n [placeholder]=\"placeholder() || _label || ''\"\n [clearable]=\"clearable() && !_required\"\n [autoId]=\"autoId()\"\n [state]=\"connectorState().invalid ? 'error' : 'auto'\"\n (sdFocus)=\"onFocus()\"\n (sdBlur)=\"onBlur()\"\n (keyupEnter)=\"onKeyupEnter()\"\n (cleared)=\"cleared.emit()\">\n </sd-inline-text>\n} @else {\n @if (!_appearance) {\n <ng-content select=\"[sdLabel]\">\n @if (_label) {\n <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\n }\n </ng-content>\n }\n\n <div\n class=\"d-flex align-items-center sd-input-container\"\n [class.c-focused]=\"isFocused\"\n [class.c-disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n aria-hidden=\"true\">\n <div class=\"sd-input-field-wrap\">\n <mat-form-field\n [class.sd-md]=\"size() === 'md'\"\n [class.sd-sm]=\"size() === 'sm'\"\n [class.hide-inline-error]=\"_hideInlineError\"\n [appearance]=\"_appearance!\"\n [floatLabel]=\"floatLabel()\">\n @if (_appearance && _label) {\n <mat-label class=\"sd-form-field-label\">\n <span>{{ _label }}</span>\n @if (_helperText) {\n <sd-icon [matTooltip]=\"_helperText\" matTooltipPosition=\"below\" name=\"info\"></sd-icon>\n }\n </mat-label>\n }\n\n <input\n aria-hidden=\"true\"\n [id]=\"id\"\n [formControl]=\"activeControl()\"\n [type]=\"effectiveType()\"\n #control\n matInput\n [placeholder]=\"placeholder() || _label || ''\"\n (keyup.enter)=\"onKeyupEnter()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [required]=\"_required\"\n [readonly]=\"isReadonly()\"\n [autocomplete]=\"id\"\n autocorrect=\"off\"\n [step]=\"1\"\n [attr.inputmode]=\"inputMode()\"\n [attr.maxlength]=\"maxDisplayLength()\"\n [attr.data-autoId]=\"autoId()\"\n [attr.data-disabled]=\"dataDisabled()\"\n [attr.data-invalid]=\"dataInvalid()\"\n [attr.data-empty]=\"dataEmpty()\"\n [attr.data-value]=\"dataValue()\"\n [attr.data-required]=\"dataRequired()\"\n [attr.data-maxlength]=\"dataMaxLength()\"\n [attr.data-minlength]=\"dataMinLength()\"\n [attr.data-pattern]=\"dataPattern()\"\n [attr.data-error-message]=\"dataErrorMessage()\"\n (compositionstart)=\"onCompositionStart()\"\n (compositionend)=\"onCompositionEnd($event)\" />\n\n @if (!_hideInlineError && _errorMessage) {\n <mat-error>{{ _errorMessage }}</mat-error>\n }\n\n <!-- why: nút clear render TRƯỚC error icon. Clear hover-gated (visibility:hidden) vẫn\n chiếm chỗ trong layout → nếu đứng sau sẽ đẩy error icon \"tụt vào trong\". Đứng trước\n thì error icon nằm sát mép phải, clear giữ slot vô hình bên trái. -->\n @if (showClear()) {\n <button type=\"button\" class=\"sd-clear-btn sd-hover\" matSuffix (click)=\"clear($event)\" title=\"Xóa\" aria-label=\"Xóa\">\n <sd-icon name=\"close\"></sd-icon>\n </button>\n }\n\n @if (_hideInlineError && _errorMessage) {\n <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\n }\n\n @if (sdSuffixDef()?.templateRef; as suffixRef) {\n <ng-container matSuffix>\n <ng-container *ngTemplateOutlet=\"suffixRef\"></ng-container>\n </ng-container>\n }\n <!-- <ng-container matSuffix>\n <ng-content select=\"[sdSuffix]\"></ng-content>\n </ng-container> -->\n </mat-form-field>\n\n @if (_maxLength && !_hideInlineError && !formControl.disabled) {\n <div\n class=\"sd-maxlength-counter\"\n [class.sd-maxlength-counter--visible]=\"isFocused\"\n [class.sd-maxlength-counter--exceeded]=\"isMaxlengthExceeded()\"\n [attr.title]=\"isMaxlengthExceeded() ? ('core.form.input.exceeded' | translate) : null\">\n {{ getCurrentLength() }}/{{ _maxLength }}\n </div>\n }\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵsdFormControlConnector"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-forms-input.mjs","sources":["../../../projects/sdcorejs-angular/forms/input/src/input-mask.ts","../../../projects/sdcorejs-angular/forms/input/src/input.component.ts","../../../projects/sdcorejs-angular/forms/input/src/input.component.html","../../../projects/sdcorejs-angular/forms/input/sdcorejs-angular-forms-input.ts"],"sourcesContent":["export type SdInputMaskStatus = 'empty' | 'incomplete' | 'valid' | 'invalid';\n\nexport type SdInputMaskInputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n\nexport interface SdInputMaskResult {\n readonly raw: string;\n readonly display: string;\n readonly status: SdInputMaskStatus;\n readonly selectionStart: number;\n readonly selectionEnd: number;\n}\n\nexport interface SdInputMaskAdapter {\n readonly inputMode?: SdInputMaskInputMode;\n readonly maxDisplayLength?: number;\n format(raw: string | null | undefined): SdInputMaskResult;\n parse(display: string, selectionStart?: number | null, selectionEnd?: number | null): SdInputMaskResult;\n}\n\nexport interface SdInputMaskToken {\n readonly pattern: RegExp;\n readonly optional?: boolean;\n readonly transform?: (value: string) => string;\n}\n\nexport interface SdCreateInputMaskOptions {\n readonly tokens?: Readonly<Record<string, SdInputMaskToken>>;\n readonly inputMode?: SdInputMaskInputMode;\n}\n\ninterface MaskSlot {\n readonly unitIndex: number;\n readonly slotIndex: number;\n readonly token: SdInputMaskToken;\n}\n\ninterface MaskLiteral {\n readonly unitIndex: number;\n readonly value: string;\n}\n\ninterface AssignedSlot {\n readonly slotIndex: number;\n readonly unitIndex: number;\n readonly value: string;\n readonly sourceIndex: number;\n}\n\nconst DEFAULT_TOKENS: Readonly<Record<string, SdInputMaskToken>> = {\n '#': { pattern: /[0-9]/ },\n '9': { pattern: /[0-9]/, optional: true },\n A: { pattern: /[A-Za-z]/ },\n a: { pattern: /[A-Za-z]/, optional: true },\n '*': { pattern: /[A-Za-z0-9]/ },\n '?': { pattern: /[A-Za-z0-9]/, optional: true },\n};\n\nfunction tokenAccepts(token: SdInputMaskToken, value: string): boolean {\n token.pattern.lastIndex = 0;\n const accepted = token.pattern.test(value);\n token.pattern.lastIndex = 0;\n return accepted;\n}\n\n/**\n * Creates a dependency-free slot mask.\n *\n * Default tokens: `#` required digit, `9` optional digit, `A`/`a` required/optional\n * letter, and `*`/`?` required/optional alphanumeric. Every other character is a\n * display literal and never leaks into the raw model.\n */\nexport function sdCreateInputMask(pattern: string, options: SdCreateInputMaskOptions = {}): SdInputMaskAdapter {\n if (!pattern) throw new Error('Input mask pattern must not be empty.');\n\n const tokens = { ...DEFAULT_TOKENS, ...options.tokens };\n const slots: MaskSlot[] = [];\n const literals: MaskLiteral[] = [];\n const units = Array.from(pattern, (value, unitIndex) => {\n const token = tokens[value];\n if (token) {\n const slot = { unitIndex, slotIndex: slots.length, token } satisfies MaskSlot;\n slots.push(slot);\n return slot;\n }\n const literal = { unitIndex, value } satisfies MaskLiteral;\n literals.push(literal);\n return literal;\n });\n if (slots.length === 0) throw new Error('Input mask pattern must contain at least one token.');\n\n const literalValues = new Set(literals.map(item => item.value));\n\n const convert = (\n source: string,\n sourceSelectionStart: number,\n sourceSelectionEnd: number,\n sourceIsDisplay: boolean\n ): SdInputMaskResult => {\n const assigned: AssignedSlot[] = [];\n let unitCursor = 0;\n let invalid = false;\n\n for (let sourceIndex = 0; sourceIndex < source.length; sourceIndex += 1) {\n const value = source[sourceIndex];\n let consumed = false;\n\n // why: literals are consumed at the pattern cursor, not filtered globally;\n // a global filter would corrupt raw digits in masks with prefixes such as `+84`.\n while (unitCursor < units.length) {\n const unit = units[unitCursor];\n\n if ('value' in unit) {\n unitCursor += 1;\n if (sourceIsDisplay && value === unit.value) {\n consumed = true;\n break;\n }\n continue;\n }\n\n if (tokenAccepts(unit.token, value)) {\n assigned.push({\n slotIndex: unit.slotIndex,\n unitIndex: unit.unitIndex,\n value: unit.token.transform?.(value) ?? value,\n sourceIndex,\n });\n unitCursor += 1;\n consumed = true;\n break;\n }\n\n if (sourceIsDisplay && literalValues.has(value)) {\n consumed = true;\n break;\n }\n\n if (unit.token.optional) {\n unitCursor += 1;\n continue;\n }\n\n invalid = true;\n consumed = true;\n break;\n }\n\n if (!consumed) invalid = true;\n }\n\n const assignedByUnit = new Map(assigned.map(item => [item.unitIndex, item] as const));\n const lastFilledUnit = assigned.at(-1)?.unitIndex ?? -1;\n let display = '';\n let acceptedCount = 0;\n const displayPositionByAcceptedCount = new Map<number, number>([[0, 0]]);\n\n for (const unit of units) {\n if ('token' in unit) {\n const item = assignedByUnit.get(unit.unitIndex);\n if (!item) continue;\n display += item.value;\n acceptedCount += 1;\n displayPositionByAcceptedCount.set(acceptedCount, display.length);\n } else if (unit.unitIndex < lastFilledUnit) {\n display += unit.value;\n }\n }\n\n const raw = assigned.map(item => item.value).join('');\n const hasEveryRequiredSlot = slots.every((slot, index) => slot.token.optional || assigned.some(item => item.slotIndex === index));\n const status: SdInputMaskStatus = invalid ? 'invalid' : raw.length === 0 ? 'empty' : hasEveryRequiredSlot ? 'valid' : 'incomplete';\n\n const acceptedBefore = (position: number): number => assigned.filter(item => item.sourceIndex < Math.max(0, position)).length;\n const mapSelection = (position: number): number => {\n const count = acceptedBefore(position);\n return displayPositionByAcceptedCount.get(count) ?? display.length;\n };\n\n return {\n raw,\n display,\n status,\n selectionStart: mapSelection(sourceSelectionStart),\n selectionEnd: mapSelection(sourceSelectionEnd),\n };\n };\n\n return {\n inputMode: options.inputMode ?? (slots.every(slot => tokenAccepts(slot.token, '0')) ? 'numeric' : 'text'),\n maxDisplayLength: pattern.length,\n format: raw => {\n const source = raw == null ? '' : String(raw);\n return convert(source, source.length, source.length, false);\n },\n parse: (display, selectionStart = display.length, selectionEnd = selectionStart) =>\n convert(display, selectionStart ?? display.length, selectionEnd ?? selectionStart ?? display.length, true),\n };\n}\n\n/** Common business masks. Models remain raw strings; separators are display-only. */\nexport const SD_INPUT_MASKS = {\n VN_PHONE: sdCreateInputMask('#### ### ###', { inputMode: 'tel' }),\n VN_ID: sdCreateInputMask('#### #### ####', { inputMode: 'numeric' }),\n VN_TAX_CODE: sdCreateInputMask('##########-999', { inputMode: 'numeric' }),\n BANK_ACCOUNT: sdCreateInputMask('######99999999999999', { inputMode: 'numeric' }),\n BUSINESS_CODE: sdCreateInputMask('****-????????????', { inputMode: 'text' }),\n} as const satisfies Readonly<Record<string, SdInputMaskAdapter>>;\n\nexport type SdInputMaskPreset = keyof typeof SD_INPUT_MASKS;\nexport type SdInputMask = SdInputMaskAdapter | SdInputMaskPreset;\n\nexport function sdResolveInputMask(mask: SdInputMask | null | undefined): SdInputMaskAdapter | undefined {\n if (!mask) return undefined;\n return typeof mask === 'string' ? SD_INPUT_MASKS[mask] : mask;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n input,\n model,\n OnDestroy,\n OnInit,\n Output,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { AsyncValidatorFn, FormGroup, FormsModule, NgForm, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { SdInlineText } from '@sdcorejs/angular/forms/inline-text';\nimport { SdSuffixDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport {\n HandleSdCustomValidator,\n SD_FORM_CONFIGURATION,\n SdCustomValidator,\n SdFormControl,\n sdFormControlState,\n SdInlineErrorValidator,\n SdViewed,\n SdViewedInput,\n sdViewedInline,\n sdViewedTransform,\n ɵsdFormControlConnector,\n ɵsdTimerScope,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { I18nService, SdTranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Size } from '@sdcorejs/utils/models';\nimport type { ValidationPatternType } from '@sdcorejs/utils/models';\nimport { VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';\n\n// Back-compat: SdPatternType cũ → ValidationPatternType mới.\n// 3 key đã đổi tên trong @sdcorejs/utils v1.x.\nconst LEGACY_PATTERN_ALIAS: Record<string, ValidationPatternType> = {\n PHONE_VN: 'VN_PHONE',\n IDVN: 'VN_ID',\n IDVN_OR_PASSPORT: 'VN_ID_OR_PASSPORT',\n};\nimport { Subscription } from 'rxjs';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nimport { SdInputMask, SdInputMaskResult, SdInputMaskStatus, sdResolveInputMask } from './input-mask';\n\n@Component({\n selector: 'sd-input',\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: { '[class.sd-has-label]': '!!label()', '[class.sd-viewed]': 'isViewed() || isInline()' },\n imports: [\n SdIcon,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n SdLabel,\n SdView,\n SdInlineText,\n SdTranslatePipe,\n ],\n})\nexport class SdInput implements OnDestroy, OnInit, AfterViewInit {\n id = `I${Utilities.generateUuid()}`;\n /** why: id ổn định của <mat-error> để `<input>` trỏ `aria-describedby` sang — thông báo lỗi\n * phải đọc được từ chính control, không chỉ hiện ra màn hình. */\n readonly errorId = `${this.id}-error`;\n\n // ==========================================\n // 1. SIGNAL QUERIES (Thay thế @ViewChild / @ContentChild)\n // ==========================================\n control = viewChild<ElementRef<HTMLInputElement>>('control');\n /** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */\n inlineRef = viewChild(SdInlineText);\n sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\n sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\n sdSuffixDef = contentChild(SdSuffixDefDirective);\n sdViewDef = contentChild(SdViewDefDirective);\n\n // ==========================================\n // 2. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `forms-input-${this.autoIdInput()}` : undefined));\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'));\n readonly dataValue = computed<string | null>(() => {\n if (this.type() === 'password') return null;\n return sdSerializeDataValue(this.#state().value);\n });\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataMaxLength = computed(() => {\n const v = this.maxlength();\n return v == null ? null : String(v);\n });\n readonly dataMinLength = computed(() => {\n const v = this.minlength();\n return v == null ? null : String(v);\n });\n readonly dataPattern = computed(() => {\n const v = this.pattern();\n return v == null || v === '' ? null : String(v);\n });\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(Utilities.generateUuid());\n\n // ==========================================\n // 3. INJECT (Thay thế Constructor DI)\n // ==========================================\n #ref = inject(ChangeDetectorRef);\n #formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n // why: focus bị hoãn 100ms; handle phải bị clear khi destroy, nếu không timer vẫn chạy\n // trên view đã tháo (đổi route nhanh là đủ tái hiện).\n readonly #timers = ɵsdTimerScope();\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.#formConfig?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n label = input<string | undefined>();\n helperText = input<string | undefined>();\n placeholder = input<string | undefined>();\n type = input<'text' | 'number' | 'password' | 'email'>('text');\n mask = input<SdInputMask | null | undefined>();\n readonly maskAdapter = computed(() => sdResolveInputMask(this.mask()));\n readonly effectiveType = computed(() => (this.maskAdapter() ? 'text' : this.type()));\n readonly inputMode = computed(() => this.maskAdapter()?.inputMode);\n readonly maxDisplayLength = computed(() => this.maskAdapter()?.maxDisplayLength);\n\n hideInlineError = input(false, { transform: booleanAttribute });\n blurOnEnter = input(false, { transform: booleanAttribute });\n /** Whether to show the value-gated clear button in edit and inline modes. */\n clearable = input(false, { transform: booleanAttribute });\n required = input(false, { transform: booleanAttribute });\n readonly = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n /** Display mode: `false` edit · `true` static view · `'inline'` borderless inline-edit (no panel — the input IS the face). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n\n /** Focus whichever input is live: the inline primitive in `'inline'` mode, else the mat input. */\n #focusActiveInput = (): void => {\n const inline = this.inlineRef();\n if (inline) inline.focus();\n else this.control()?.nativeElement?.focus();\n };\n /** View display template: `sdViewDef` overrides the projected `#sdValue` for the static view (unified). */\n readonly viewTemplate = computed<TemplateRef<any> | undefined>(() => this.sdViewDef()?.templateRef ?? this.sdValueTemplate());\n\n minlength = input<number | undefined, unknown>(undefined, { transform: v => (v == null ? undefined : Number(v)) });\n maxlength = input<number | undefined, unknown>(undefined, { transform: v => (v == null ? undefined : Number(v)) });\n\n pattern = input<ValidationPatternType | string | undefined | null>();\n patternErrorMessage = input<string | undefined | null>();\n\n // Bỏ qua nếu val không phải string (number/boolean/object truyền nhầm → tránh validator hỏng)\n #lookupPattern = (val: unknown) => {\n if (typeof val !== 'string') return undefined;\n const key = (LEGACY_PATTERN_ALIAS[val] ?? val) as ValidationPatternType;\n return VALIDATION_PATTERNS.find(e => e.type === key);\n };\n\n resolvedPattern = computed(() => {\n const val = this.pattern();\n if (typeof val !== 'string') return undefined;\n const patternObj = this.#lookupPattern(val);\n return patternObj ? patternObj.pattern : val;\n });\n\n resolvedPatternErrorMsg = computed(() => {\n // patternObj.errorMessage là i18n key (vd 'core.validator.email.error') → wrap qua i18n.t() để hiển thị string đã dịch\n const customMsg = this.patternErrorMessage();\n if (customMsg) return customMsg;\n const patternObj = this.#lookupPattern(this.pattern());\n return patternObj ? this.#i18n.t(patternObj.errorMessage) : undefined;\n });\n\n /**\n * First active error message for tooltip display when `hideInlineError = true`.\n * Re-runs only when `#state` ticks (value / status / touched change) — no longer\n * invoked on every change-detection cycle as a getter would be.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n // Subscribe to form-state changes so the computed re-evaluates correctly.\n void this.#state();\n // why: `#state` KHÔNG đủ. Connector cài/gỡ validator bằng `updateValueAndValidity({\n // emitEvent: false })` → `formControl.errors` đổi mà không phát event nào → `#state` không\n // tick. Nên phải đọc VÔ ĐIỀU KIỆN cả `required` lẫn danh sách validator do component sở hữu\n // (`#validators` gói min/max/pattern/mask/inlineError, mảng mới mỗi lần đổi) làm dependency.\n // Không có 2 dòng này thì bật `[required]` lúc RUNTIME cho ra control invalid + viền đỏ nhưng\n // message giữ nguyên giá trị cũ dưới OnPush.\n void this.required();\n void this.#validators();\n const errors = this.formControl.errors;\n if (!errors) return undefined;\n\n if (errors['required']) return this.#i18n.t('core.form.input.required');\n if (errors['maxlength']) return this.#i18n.t('core.form.input.maxlength', { max: this.maxlength() ?? '' });\n if (errors['maskIncomplete']) return this.#i18n.t('core.form.input.mask-incomplete');\n if (errors['maskInvalid']) return this.#i18n.t('core.form.input.mask-invalid');\n if (errors['pattern']) return this.resolvedPatternErrorMsg() || this.#i18n.t('core.form.input.invalid-pattern');\n if (errors['customValidator']) return errors['customValidator'] as string;\n if (errors['inlineError']) return this.inlineError();\n return undefined;\n });\n\n validator = input<SdCustomValidator | undefined>();\n inlineError = input<string | undefined>();\n hyperlink = input<string | null | undefined>();\n\n valueModel = model<any>(undefined, { alias: 'model' });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS (Thay thế @Output)\n // ==========================================\n sdChange = output<any>();\n sdFocus = output<void>(); // Đổi sang void vì không truyền data\n sdBlur = output<any>();\n keyupEnter = output<any>();\n // why: sdChange fire per-keystroke nên consumer KHÔNG dùng nó để trigger\n // \"commit filter\" (sẽ over-reload). `cleared` là intent rõ ràng cho action\n // X (clear button) — consumer như column-filter dùng để fire reload ngay.\n cleared = output<void>();\n\n // why: focus handling reads EventEmitter.observed before emitting a forced blur event.\n @Output() readonly sdFocusForceBlur = new EventEmitter<void>();\n\n formControl = new SdFormControl();\n /** Display-only control used by the input element while a mask is active. */\n readonly displayControl = new SdFormControl();\n readonly activeControl = computed(() => (this.maskAdapter() ? this.displayControl : this.formControl));\n readonly maskStatus = signal<SdInputMaskStatus>('empty');\n readonly displayValue = computed(() => {\n const adapter = this.maskAdapter();\n return adapter ? adapter.format(this.formControl.value == null ? '' : String(this.formControl.value)).display : this.formControl.value;\n });\n #subscription = new Subscription();\n #isComposing = false;\n #pendingMaskResult: SdInputMaskResult | undefined;\n isFocused = false;\n readonly #validators = computed<readonly ValidatorFn[]>(() => {\n const validators: ValidatorFn[] = [];\n const min = this.minlength();\n const max = this.maxlength();\n const pattern = this.resolvedPattern();\n\n if (min && min > 0) validators.push(Validators.minLength(min));\n if (max && max > 0) validators.push(Validators.maxLength(max));\n if (pattern) validators.push(Validators.pattern(pattern));\n if (this.maskAdapter()) {\n const maskStatus = this.maskStatus();\n validators.push(() => {\n if (maskStatus === 'invalid') return { maskInvalid: true };\n if (maskStatus === 'incomplete') return { maskIncomplete: true };\n return null;\n });\n }\n if (this.inlineError()) validators.push(SdInlineErrorValidator);\n return validators;\n });\n readonly #asyncValidators = computed<readonly AsyncValidatorFn[]>(() => {\n const validator = this.validator();\n return validator ? [HandleSdCustomValidator(validator)] : [];\n });\n readonly #formConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: this.name,\n control: computed(() => this.formControl),\n validators: this.#validators,\n asyncValidators: this.#asyncValidators,\n required: this.required,\n disabled: this.disabled,\n readonly: this.readonly,\n viewed: this.viewed,\n validationError: computed(() => this.errorMessage()),\n });\n /** Shared reactive form policy consumed by template-facing state below. */\n readonly connectorState = this.#formConnector.state;\n readonly isReadonly = computed(() => this.connectorState().readonly);\n // why: KHÔNG lấy `connectorState().validationError`. Cổng hiển thị của connector là\n // `snapshot.invalid` — snapshot đó do sdFormControlState memo hoá và chỉ đổi khi control PHÁT\n // event. Connector lại cài validator im lặng (`emitEvent: false`), nên bật `[required]` lúc\n // runtime làm control invalid thật mà snapshot vẫn \"valid\" → message bị nuốt (viền đỏ, không\n // chữ). Đọc trực tiếp `formControl` cho trạng thái tươi, vẫn giữ nguyên luật interaction-gated\n // (chỉ hiện sau khi người dùng đã chạm/sửa) như connector.\n readonly visibleErrorMessage = computed(() => {\n const message = this.errorMessage();\n if (!message) return undefined;\n void this.#state();\n const control = this.formControl;\n return control.invalid && (control.touched || control.dirty) ? message : undefined;\n });\n\n // Tri-state `viewed` — shared primitive. Input has NO panel; in `'inline'` the input is rendered\n // borderless/transparent (looks like text), always editable — clicking/focusing it edits directly.\n readonly #viewedState = sdViewedInline(\n computed(() => this.connectorState().viewed),\n () => this.#focusActiveInput(),\n this.disabled\n );\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no input). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Focus the inline input. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n constructor() {\n effect(() => {\n const val = this.valueModel();\n const adapter = this.maskAdapter();\n untracked(() => {\n if (this.formControl.value !== val) {\n this.formControl.setValue(val, { emitEvent: false });\n }\n if (adapter) {\n const rawValue = val == null ? '' : String(val);\n const result = this.#pendingMaskResult?.raw === rawValue ? this.#pendingMaskResult : adapter.format(rawValue);\n this.#pendingMaskResult = undefined;\n this.maskStatus.set(result.status);\n if (this.displayControl.value !== result.display) {\n this.displayControl.setValue(result.display, { emitEvent: false });\n }\n } else {\n this.maskStatus.set('empty');\n }\n });\n });\n\n effect(() => {\n const masked = !!this.maskAdapter();\n const disabled = this.disabled();\n untracked(() => {\n if (masked && disabled) this.displayControl.disable({ emitEvent: false });\n else this.displayControl.enable({ emitEvent: false });\n });\n });\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.formControl.sdChanges.subscribe(() => {\n this.#ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit() {\n this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\n this.#subscription.add(this.displayControl.valueChanges.subscribe(value => this.#onMaskedDisplayChange(value)));\n\n this.#ref.detectChanges();\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n reValidate = () => {\n this.formControl.updateValueAndValidity();\n };\n\n getCurrentLength = (): number => {\n return (this.formControl.value ?? '').toString().length;\n };\n\n isMaxlengthExceeded = (): boolean => {\n const max = this.maxlength();\n return !!(max && max > 0 && this.getCurrentLength() > max);\n };\n\n // why: clear() phải để formControl phát event (xem comment ở clear()), nhưng nó ĐÃ tự\n // set model + emit sdChange(null) rồi. Không chặn thì #onChange chạy thêm một vòng với\n // `null ?? ''` → consumer nhận thừa một sdChange('') trước sdChange(null) và model bị\n // nhảy '' → null. Cờ chỉ sống trong đúng lời gọi setValue đồng bộ của clear().\n #isClearing = false;\n\n #onChange = () => {\n if (this.#isClearing) return;\n const value = this.formControl.value ?? '';\n\n this.valueModel.set(value);\n this.sdChange.emit(value);\n };\n\n #onMaskedDisplayChange(value: unknown): void {\n const adapter = this.maskAdapter();\n if (!adapter || this.#isComposing) return;\n\n const nativeInput = this.control()?.nativeElement;\n const display = value == null ? '' : String(value);\n const result = adapter.parse(display, nativeInput?.selectionStart, nativeInput?.selectionEnd);\n this.#applyMaskResult(result);\n }\n\n #applyMaskResult(result: SdInputMaskResult): void {\n this.maskStatus.set(result.status);\n if (this.displayControl.value !== result.display) {\n this.displayControl.setValue(result.display, { emitEvent: false });\n }\n if (this.formControl.value !== result.raw) {\n this.#pendingMaskResult = this.valueModel() === result.raw ? undefined : result;\n this.formControl.setValue(result.raw);\n } else {\n this.#pendingMaskResult = undefined;\n this.formControl.updateValueAndValidity({ emitEvent: false });\n }\n\n queueMicrotask(() => {\n const nativeInput = this.control()?.nativeElement;\n if (nativeInput) {\n nativeInput.setSelectionRange(result.selectionStart, result.selectionEnd);\n }\n });\n }\n\n onCompositionStart(): void {\n if (this.maskAdapter()) this.#isComposing = true;\n }\n\n onCompositionEnd(event: CompositionEvent): void {\n const adapter = this.maskAdapter();\n if (!adapter) return;\n this.#isComposing = false;\n const target = event.target as HTMLInputElement | null;\n const display = target?.value ?? String(this.displayControl.value ?? '');\n this.#applyMaskResult(adapter.parse(display, target?.selectionStart, target?.selectionEnd));\n }\n\n // why: dựa trên valueModel() (signal model-input) thay vì formControl.value —\n // khi bị wrap (vd <sd-input-color>) effect set formControl chạy SAU lúc template\n // eval nên formControl.value chưa kịp có; valueModel() thì có ngay. Method (không\n // computed) để re-eval mỗi CD. clearable là opt-in; required không được clear;\n // disabled/readonly ẩn nút.\n showClear = (): boolean => {\n if (!this.clearable() || this.required() || this.disabled() || this.readonly()) return false;\n return !sdIsEmpty(this.valueModel());\n };\n\n clear = ($event?: Event) => {\n $event?.stopPropagation();\n if (sdIsEmpty(this.valueModel()) && sdIsEmpty(this.formControl.value)) return;\n // why: clear là thao tác chủ động → model về null (không phải '' hay undefined).\n // undefined chỉ dành cho trạng thái pristine chưa từng nhập.\n // why: KHÔNG dùng { emitEvent: false } cho formControl. Control này mang required /\n // pattern / mask validator và cả async validator ([validator] → HandleSdCustomValidator).\n // Chặn event thì AbstractControl.events không phát → #state (sdFormControlState) không\n // tick → errorMessage / dataEmpty / dataValue / visibleErrorMessage giữ nguyên giá trị\n // cũ → xoá xong field rỗng nhưng lỗi required KHÔNG hiện (chỉ còn viền đỏ). Đây đúng là\n // lỗi đã sửa ở #onChange của sd-input-number, chỉ sót nhánh clear().\n // displayControl thì VẪN giữ emitEvent:false — valueChanges của nó có subscriber\n // (#onMaskedDisplayChange) sẽ parse ngược và ghi đè lại formControl.\n this.#isClearing = true;\n try {\n this.formControl.setValue(null);\n } finally {\n this.#isClearing = false;\n }\n this.displayControl.setValue('', { emitEvent: false });\n this.maskStatus.set('empty');\n this.valueModel.set(null);\n this.sdChange.emit(null);\n this.cleared.emit();\n };\n\n onKeyupEnter = () => {\n const val: string = (this.formControl.value ?? '').toString();\n if (!this.maskAdapter() && val.length > val.trim().length) {\n this.formControl.setValue(val.trim());\n }\n this.keyupEnter.emit(this.formControl.value);\n if (this.blurOnEnter()) {\n this.blur();\n }\n };\n\n onFocus = () => {\n this.isFocused = true;\n this.sdFocus.emit(); // Gọi .emit() y hệt như cũ\n\n if (this.sdFocusForceBlur.observed) {\n this.blur();\n this.sdFocusForceBlur.emit();\n }\n };\n\n onBlur = () => {\n this.isFocused = false;\n const val: string = (this.formControl.value ?? '').toString();\n if (!this.maskAdapter() && val.length > val.trim().length) {\n this.formControl.setValue(val.trim());\n }\n this.sdBlur.emit(this.formControl.value);\n };\n\n onClick = () => {\n // 🚨 GỌI SIGNAL: Phải thêm () vào sdViewDef\n if (this.sdViewDef()?.templateRef) {\n if (!this.formControl.disabled && !this.isFocused) {\n this.focus();\n }\n }\n };\n\n blur = () => {\n this.isFocused = false;\n const inline = this.inlineRef();\n if (inline) inline.blur();\n else this.control()?.nativeElement?.blur();\n };\n\n focus = () => {\n this.isFocused = true;\n // why: vẫn 100ms như cũ (chờ Material dựng xong input mới focus) — chỉ khác là handle\n // được scope theo DestroyRef nên không còn chạy sau destroy.\n this.#timers.schedule(() => this.#focusActiveInput(), 100);\n };\n}\n","@let _label = label();\r\n@let _appearance = appearance();\r\n@let _hideInlineError = hideInlineError();\r\n@let _helperText = helperText();\r\n@let _maxLength = maxlength();\r\n@let _errorMessage = visibleErrorMessage();\r\n@let _required = required();\r\n@let _isInline = isInline();\r\n<!-- why: cùng MỘT cổng gate cho cả 3 thứ — hiện <mat-error>, bật aria-invalid, và trỏ\r\n aria-describedby. Trước đây message hiện mà control không hề báo invalid, nên screen\r\n reader đọc xong ô nhập vẫn không biết là đang lỗi. -->\r\n@let _showInlineError = !_hideInlineError && !!_errorMessage;\r\n\r\n@if (isViewed()) {\r\n <sd-view\r\n [label]=\"_label\"\r\n [labelTemplate]=\"sdLabelTemplate()\"\r\n [value]=\"formControl.value\"\r\n [display]=\"displayValue()\"\r\n [hyperlink]=\"hyperlink()\"\r\n [valueTemplate]=\"viewTemplate()\">\r\n </sd-view>\r\n} @else if (_isInline) {\r\n <!-- why: nhánh inline PHẢI project `sdSuffixDef` giống nhánh mat-form-field. Trước đây chỉ\r\n <sd-inline-text> được render, nên <sd-input-color viewed=\"'inline'\"> mất luôn swatch và\r\n <input type=\"color\"> ẩn — openPicker() gọi được nhưng không có element nào để click, tức\r\n là no-op câm. <sd-inline-text> là inline-flex tự hug nội dung nên chỉ cần một hàng flex. -->\r\n <div class=\"sd-input-inline\">\r\n <sd-inline-text\r\n [control]=\"activeControl()\"\r\n [placeholder]=\"placeholder() || _label || ''\"\r\n [clearable]=\"clearable() && !_required\"\r\n [autoId]=\"autoId()\"\r\n [state]=\"connectorState().invalid ? 'error' : 'auto'\"\r\n (sdFocus)=\"onFocus()\"\r\n (sdBlur)=\"onBlur()\"\r\n (keyupEnter)=\"onKeyupEnter()\"\r\n (cleared)=\"cleared.emit()\">\r\n </sd-inline-text>\r\n\r\n @if (sdSuffixDef()?.templateRef; as suffixRef) {\r\n <span class=\"sd-input-inline__suffix\">\r\n <ng-container *ngTemplateOutlet=\"suffixRef\"></ng-container>\r\n </span>\r\n }\r\n </div>\r\n} @else {\r\n @if (!_appearance) {\r\n <ng-content select=\"[sdLabel]\">\r\n @if (_label) {\r\n <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\r\n }\r\n </ng-content>\r\n }\r\n\r\n <!-- why: div này CHỈ là hộp layout. Nó từng mang aria-hidden=\"true\" để dập cảnh báo lint —\r\n và aria-hidden ẩn CẢ cây con, nên label, <input>, <mat-error> lẫn nút clear biến mất\r\n khỏi accessibility tree cùng lúc. role=\"presentation\" chỉ vô hiệu hoá chính div (KHÔNG\r\n lan xuống con), còn (click) chỉ là tiện ích chuột: bàn phím Tab thẳng vào <input> và\r\n nhận đúng kết quả đó, nên không cần thêm key handler. -->\r\n <div\r\n class=\"d-flex align-items-center sd-input-container\"\r\n role=\"presentation\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <div class=\"sd-input-field-wrap\">\r\n <mat-form-field\r\n [class.sd-md]=\"size() === 'md'\"\r\n [class.sd-sm]=\"size() === 'sm'\"\r\n [class.hide-inline-error]=\"_hideInlineError\"\r\n [appearance]=\"_appearance!\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (_appearance && _label) {\r\n <mat-label class=\"sd-form-field-label\">\r\n <span>{{ _label }}</span>\r\n @if (_helperText) {\r\n <sd-icon [matTooltip]=\"_helperText\" matTooltipPosition=\"below\" name=\"info\"></sd-icon>\r\n }\r\n </mat-label>\r\n }\r\n\r\n <!-- why: BỎ aria-hidden trên chính <input>. Input vẫn focus được bằng Tab, nên\r\n aria-hidden khiến screen reader đọc ra… không gì cả — tệ hơn là không làm gì. -->\r\n <input\r\n [id]=\"id\"\r\n [formControl]=\"activeControl()\"\r\n [type]=\"effectiveType()\"\r\n #control\r\n matInput\r\n [placeholder]=\"placeholder() || _label || ''\"\r\n (keyup.enter)=\"onKeyupEnter()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [required]=\"_required\"\r\n [readonly]=\"isReadonly()\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [step]=\"1\"\r\n [attr.inputmode]=\"inputMode()\"\r\n [attr.maxlength]=\"maxDisplayLength()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"dataDisabled()\"\r\n [attr.data-invalid]=\"dataInvalid()\"\r\n [attr.data-empty]=\"dataEmpty()\"\r\n [attr.data-value]=\"dataValue()\"\r\n [attr.data-required]=\"dataRequired()\"\r\n [attr.data-maxlength]=\"dataMaxLength()\"\r\n [attr.data-minlength]=\"dataMinLength()\"\r\n [attr.data-pattern]=\"dataPattern()\"\r\n [attr.data-error-message]=\"dataErrorMessage()\"\r\n [attr.aria-invalid]=\"_errorMessage ? 'true' : null\"\r\n [attr.aria-describedby]=\"_errorMessage ? errorId : null\"\r\n (compositionstart)=\"onCompositionStart()\"\r\n (compositionend)=\"onCompositionEnd($event)\" />\r\n\r\n @if (_showInlineError) {\r\n <mat-error [id]=\"errorId\">{{ _errorMessage }}</mat-error>\r\n }\r\n\r\n <!-- why: nút clear render TRƯỚC error icon. Clear hover-gated (visibility:hidden) vẫn\r\n chiếm chỗ trong layout → nếu đứng sau sẽ đẩy error icon \"tụt vào trong\". Đứng trước\r\n thì error icon nằm sát mép phải, clear giữ slot vô hình bên trái. -->\r\n @if (showClear()) {\r\n <button type=\"button\" class=\"sd-clear-btn sd-hover\" matSuffix (click)=\"clear($event)\" title=\"Xóa\" aria-label=\"Xóa\">\r\n <sd-icon name=\"close\"></sd-icon>\r\n </button>\r\n }\r\n\r\n @if (_hideInlineError && _errorMessage) {\r\n <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\n }\r\n @if (_hideInlineError && _errorMessage) {\r\n <span class=\"sd-visually-hidden\" [id]=\"errorId\" matSuffix>{{ _errorMessage }}</span>\r\r\n }\r\n\r\n @if (sdSuffixDef()?.templateRef; as suffixRef) {\r\n <ng-container matSuffix>\r\n <ng-container *ngTemplateOutlet=\"suffixRef\"></ng-container>\r\n </ng-container>\r\n }\r\n <!-- <ng-container matSuffix>\r\n <ng-content select=\"[sdSuffix]\"></ng-content>\r\n </ng-container> -->\r\n </mat-form-field>\r\n\r\n @if (_maxLength && !_hideInlineError && !formControl.disabled) {\r\n <div\r\n class=\"sd-maxlength-counter\"\r\n [class.sd-maxlength-counter--visible]=\"isFocused\"\r\n [class.sd-maxlength-counter--exceeded]=\"isMaxlengthExceeded()\"\r\n [attr.title]=\"isMaxlengthExceeded() ? ('core.form.input.exceeded' | sdTranslate) : null\">\r\n {{ getCurrentLength() }}/{{ _maxLength }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵsdTimerScope","ɵsdFormControlConnector"],"mappings":"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"}
|