@sdcorejs/angular 19.1.6 → 19.2.1
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 +10 -0
- 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/api-contract-builder/index.d.ts +8 -0
- package/components/api-contract-builder/src/api-contract-builder.component.d.ts +123 -0
- package/components/api-contract-builder/src/api-contract.configuration.d.ts +41 -0
- package/components/api-contract-builder/src/api-contract.expression.d.ts +43 -0
- package/components/api-contract-builder/src/api-contract.model.d.ts +167 -0
- package/components/api-contract-builder/src/api-contract.samples.d.ts +25 -0
- package/components/api-contract-builder/src/api-contract.schema.d.ts +126 -0
- package/components/api-contract-builder/src/api-contract.serializer.d.ts +17 -0
- package/components/api-contract-builder/src/api-contract.validation.d.ts +12 -0
- package/components/api-contract-builder/src/components/api-contract-diagnostic-list.component.d.ts +18 -0
- package/components/api-contract-builder/src/components/api-contract-node-drawer.component.d.ts +130 -0
- package/components/api-contract-builder/src/components/api-contract-node-editor.component.d.ts +35 -0
- package/components/api-contract-builder/src/components/api-contract-node-summary.component.d.ts +41 -0
- package/components/api-contract-builder/src/components/api-contract-record-editor.component.d.ts +36 -0
- package/components/api-contract-builder/src/components/api-contract-source-editor.component.d.ts +86 -0
- package/components/api-contract-builder/src/components/api-contract-suggestion.model.d.ts +17 -0
- package/components/badge/src/badge.component.d.ts +2 -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 +7 -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/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 +5 -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-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 +51 -5
- 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-api-contract-builder.mjs +3411 -0
- package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs.map +1 -0
- 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 +27 -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-operator.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-operator.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 +27 -17
- 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 +33 -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 +555 -267
- 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 +7 -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 +231 -60
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date.mjs +95 -23
- 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 +227 -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 +895 -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 +342 -111
- 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.component.d.ts +13 -2
- 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 +3 -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-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 +170 -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 +16 -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/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/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 +40 -29
- package/pipes/src/safe-html.pipe.d.ts +26 -4
- package/pipes/src/time-different.pipe.d.ts +1 -0
- package/public-api.d.ts +11 -10
- package/services/api/src/api-host.d.ts +15 -0
- package/services/api/src/api.model.d.ts +14 -0
- package/services/api/src/api.module.d.ts +6 -0
- package/services/cache/src/cache.model.d.ts +10 -0
- package/services/index.d.ts +0 -1
- package/services/notify/index.d.ts +1 -1
- package/utilities/extensions/index.d.ts +1 -5
- package/utilities/extensions/src/url-safety.d.ts +72 -0
- package/utilities/extensions/src/utility.extension.d.ts +9 -5
- package/utilities/models/index.d.ts +0 -10
- package/components/base/index.d.ts +0 -1
- package/components/base/src/base-secure.component.d.ts +0 -8
- package/components/document-builder/index.d.ts +0 -4
- package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
- package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
- package/components/document-builder/src/components/index.d.ts +0 -1
- package/components/document-builder/src/document-builder.component.d.ts +0 -53
- package/components/document-builder/src/document-builder.config.d.ts +0 -21
- package/components/document-builder/src/document-builder.model.d.ts +0 -41
- package/components/document-builder/src/document-builder.utils.d.ts +0 -10
- package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
- package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
- package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
- package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
- package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
- package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
- package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
- package/components/document-builder/src/plugins/index.d.ts +0 -11
- package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
- package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
- package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
- package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
- package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
- package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
- package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
- package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
- package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
- package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
- package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
- package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
- package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
- package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
- package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
- package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
- package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
- package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
- package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
- package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-models.mjs +0 -6
- package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
- package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
- package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
- package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
- package/models/index.d.ts +0 -1
- package/models/src/language.model.d.ts +0 -2
- package/services/docx/index.d.ts +0 -1
- package/services/docx/src/lib/docx.model.d.ts +0 -9
- package/services/docx/src/lib/docx.service.d.ts +0 -14
- package/services/docx/src/lib/pandoc-core.d.ts +0 -11
- package/services/docx/src/public-api.d.ts +0 -2
- package/services/license/index.d.ts +0 -1
- package/services/license/src/license.service.d.ts +0 -9
- package/utilities/extensions/src/array.extension.d.ts +0 -1
- package/utilities/extensions/src/color.extension.d.ts +0 -5
- package/utilities/extensions/src/date.extension.d.ts +0 -1
- package/utilities/extensions/src/number.extension.d.ts +0 -1
- package/utilities/extensions/src/string.extension.d.ts +0 -50
- package/utilities/models/src/color.model.d.ts +0 -4
- package/utilities/models/src/empty.model.d.ts +0 -4
- package/utilities/models/src/filter.model.d.ts +0 -12
- package/utilities/models/src/maybe-async.model.d.ts +0 -10
- package/utilities/models/src/nested-key-of.model.d.ts +0 -4
- package/utilities/models/src/operator.model.d.ts +0 -13
- package/utilities/models/src/order.model.d.ts +0 -4
- package/utilities/models/src/paging.model.d.ts +0 -8
- package/utilities/models/src/pattern.model.d.ts +0 -21
- package/utilities/models/src/size.model.d.ts +0 -4
|
@@ -1,71 +1,9 @@
|
|
|
1
|
-
import { EMPTY_STR } from '@sdcorejs/utils/constants';
|
|
2
|
-
export { EMPTY_STR, VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';
|
|
3
|
-
import { StringUtilities } from '@sdcorejs/utils/fns';
|
|
4
|
-
import { resolveMaybeAsync, normalizeAsync } from '@sdcorejs/utils/models';
|
|
5
|
-
export { normalizeAsync, resolveMaybeAsync } from '@sdcorejs/utils/models';
|
|
6
|
-
|
|
7
1
|
const DefaultSdIconSet = 'material-icons-outlined';
|
|
8
2
|
const DefaultSdMaterialIconSet = 'material-icons-outlined';
|
|
9
3
|
|
|
10
|
-
// `name` và `errorMessage` chứa i18n KEY (không phải chuỗi đã dịch).
|
|
11
|
-
/** @deprecated Use `VALIDATION_PATTERNS` from `@sdcorejs/utils/constants` instead. */
|
|
12
|
-
const SdPatternCommons = [
|
|
13
|
-
{ type: 'EMAIL', name: 'core.validator.email.name', regex: StringUtilities.REGEX_EMAIL, errorMessage: 'core.validator.email.error' },
|
|
14
|
-
{ type: 'PHONE', name: 'core.validator.phone.name', regex: StringUtilities.REGEX_PHONE, errorMessage: 'core.validator.phone.error' },
|
|
15
|
-
{
|
|
16
|
-
type: 'PHONE_VN',
|
|
17
|
-
name: 'core.validator.phone-vn.name',
|
|
18
|
-
regex: StringUtilities.REGEX_VN_PHONE,
|
|
19
|
-
errorMessage: 'core.validator.phone-vn.error',
|
|
20
|
-
},
|
|
21
|
-
{ type: 'IDVN', name: 'core.validator.cccd.name', regex: StringUtilities.REGEX_VN_ID, errorMessage: 'core.validator.cccd.error' },
|
|
22
|
-
{
|
|
23
|
-
type: 'PASSPORT',
|
|
24
|
-
name: 'core.validator.passport.name',
|
|
25
|
-
regex: StringUtilities.REGEX_PASSPORT,
|
|
26
|
-
errorMessage: 'core.validator.passport.error',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
type: 'IDVN_OR_PASSPORT',
|
|
30
|
-
name: 'core.validator.id-vn.name',
|
|
31
|
-
regex: StringUtilities.REGEX_VN_ID_OR_PASSPORT,
|
|
32
|
-
errorMessage: 'core.validator.id-vn.error',
|
|
33
|
-
},
|
|
34
|
-
{ type: 'TIME', name: 'core.validator.time.name', regex: StringUtilities.REGEX_TIME, errorMessage: 'core.validator.time.error' },
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
/** @deprecated Use {@link EMPTY_STR} from `@sdcorejs/utils/constants` instead */
|
|
38
|
-
const SD_EMPTY_STR = EMPTY_STR;
|
|
39
|
-
|
|
40
|
-
/** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */
|
|
41
|
-
const SdResolveMaybeAsync = resolveMaybeAsync;
|
|
42
|
-
/** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */
|
|
43
|
-
const SdNormalizeAsync = normalizeAsync;
|
|
44
|
-
|
|
45
|
-
// `display` chứa i18n KEY (không phải chuỗi đã dịch).
|
|
46
|
-
// Consumer phải gọi i18n.t(display) trước khi render ra UI.
|
|
47
|
-
// @deprecated Use `OPERATORS` from `@sdcorejs/utils/constants` instead.
|
|
48
|
-
// Note: OPERATORS has translated display labels; SdOperators uses i18n keys.
|
|
49
|
-
const SdOperators = [
|
|
50
|
-
{ value: 'EQUAL', symbol: '=', display: 'core.operator.equal.display' },
|
|
51
|
-
{ value: 'NOT_EQUAL', symbol: '≠', display: 'core.operator.not-equal.display' },
|
|
52
|
-
{ value: 'GREATER_THAN', symbol: '>', display: 'core.operator.greater-than.display' },
|
|
53
|
-
{ value: 'LESS_THAN', symbol: '<', display: 'core.operator.less-than.display' },
|
|
54
|
-
{ value: 'GREATER_OR_EQUAL', symbol: '≥', display: 'core.operator.greater-or-equal.display' },
|
|
55
|
-
{ value: 'LESS_OR_EQUAL', symbol: '≤', display: 'core.operator.less-or-equal.display' },
|
|
56
|
-
{ value: 'CONTAIN', symbol: 'join_inner', display: 'core.operator.contain.display' },
|
|
57
|
-
{ value: 'NOT_CONTAIN', symbol: 'join', display: 'core.operator.not-contain.display' },
|
|
58
|
-
{ value: 'START_WITH', symbol: 'line_start_circle', display: 'core.operator.start-with.display' },
|
|
59
|
-
{ value: 'END_WITH', symbol: 'line_end_circle', display: 'core.operator.end-with.display' },
|
|
60
|
-
{ value: 'IN', symbol: 'checklist_rtl', display: 'core.operator.in.display' },
|
|
61
|
-
{ value: 'NOT_IN', symbol: 'event_list', display: 'core.operator.not-in.display' },
|
|
62
|
-
{ value: 'NULL', symbol: 'motion_photos_off', display: 'core.operator.null.display' },
|
|
63
|
-
{ value: 'NOT_NULL', symbol: 'adjust', display: 'core.operator.not-null.display' },
|
|
64
|
-
];
|
|
65
|
-
|
|
66
4
|
/**
|
|
67
5
|
* Generated bundle index. Do not edit.
|
|
68
6
|
*/
|
|
69
7
|
|
|
70
|
-
export { DefaultSdIconSet, DefaultSdMaterialIconSet
|
|
8
|
+
export { DefaultSdIconSet, DefaultSdMaterialIconSet };
|
|
71
9
|
//# sourceMappingURL=sdcorejs-angular-utilities-models.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-utilities-models.mjs","sources":["../../../projects/sdcorejs-angular/utilities/models/src/icon.model.ts","../../../projects/sdcorejs-angular/utilities/models/
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-utilities-models.mjs","sources":["../../../projects/sdcorejs-angular/utilities/models/src/icon.model.ts","../../../projects/sdcorejs-angular/utilities/models/sdcorejs-angular-utilities-models.ts"],"sourcesContent":["export type SdIconSet = 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp' | 'lucide';\nexport type SdMaterialIconSet = Exclude<SdIconSet, 'lucide'>;\nexport const DefaultSdIconSet: SdIconSet = 'material-icons-outlined';\nexport const DefaultSdMaterialIconSet: SdMaterialIconSet = 'material-icons-outlined';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAEO,MAAM,gBAAgB,GAAc;AACpC,MAAM,wBAAwB,GAAsB;;ACH3D;;AAEG;;;;"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export * from '@sdcorejs/angular/configurations';
|
|
2
|
+
export * from '@sdcorejs/angular/i18n';
|
|
3
|
+
export * from '@sdcorejs/angular/utilities';
|
|
4
|
+
export * from '@sdcorejs/angular/pipes';
|
|
5
|
+
export * from '@sdcorejs/angular/directives';
|
|
6
|
+
export * from '@sdcorejs/angular/services';
|
|
7
|
+
export * from '@sdcorejs/angular/interceptors';
|
|
8
|
+
export * from '@sdcorejs/angular/handlers';
|
|
9
|
+
export * from '@sdcorejs/angular/components';
|
|
10
|
+
export * from '@sdcorejs/angular/forms';
|
|
11
|
+
export * from '@sdcorejs/angular/modules';
|
|
11
12
|
|
|
12
13
|
/*
|
|
13
14
|
* Public API Surface of sd-angular
|
|
15
|
+
*
|
|
16
|
+
* why: these were previously bare `import '...'` statements, which meant the primary
|
|
17
|
+
* entry point re-exported NOTHING — `import { SdButton } from '@sdcorejs/angular'`
|
|
18
|
+
* resolved to nothing for every symbol, and the built FESM bundle was 517 bytes with
|
|
19
|
+
* no `export` statement. Deep imports (`@sdcorejs/angular/components/button`) remain
|
|
20
|
+
* the recommended path for bundle size; this barrel exists so the root import works.
|
|
14
21
|
*/
|
|
15
22
|
|
|
16
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular.mjs","sources":["../../../projects/sdcorejs-angular/src/public-api.ts","../../../projects/sdcorejs-angular/src/sdcorejs-angular.ts"],"sourcesContent":["/*\n * Public API Surface of sd-angular\n */\
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular.mjs","sources":["../../../projects/sdcorejs-angular/src/public-api.ts","../../../projects/sdcorejs-angular/src/sdcorejs-angular.ts"],"sourcesContent":["/*\n * Public API Surface of sd-angular\n *\n * why: these were previously bare `import '...'` statements, which meant the primary\n * entry point re-exported NOTHING — `import { SdButton } from '@sdcorejs/angular'`\n * resolved to nothing for every symbol, and the built FESM bundle was 517 bytes with\n * no `export` statement. Deep imports (`@sdcorejs/angular/components/button`) remain\n * the recommended path for bundle size; this barrel exists so the root import works.\n */\nexport * from '@sdcorejs/angular/configurations';\nexport * from '@sdcorejs/angular/i18n';\nexport * from '@sdcorejs/angular/utilities';\nexport * from '@sdcorejs/angular/pipes';\nexport * from '@sdcorejs/angular/directives';\nexport * from '@sdcorejs/angular/services';\nexport * from '@sdcorejs/angular/interceptors';\nexport * from '@sdcorejs/angular/handlers';\nexport * from '@sdcorejs/angular/components';\nexport * from '@sdcorejs/angular/forms';\nexport * from '@sdcorejs/angular/modules';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;AAQG;;ACRH;;AAEG"}
|
|
@@ -12,9 +12,12 @@ declare class SdAutocompleteErrotStateMatcher implements ErrorStateMatcher {
|
|
|
12
12
|
constructor(formControl: FormControl);
|
|
13
13
|
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;
|
|
14
14
|
}
|
|
15
|
-
export declare class SdAutocomplete<T =
|
|
15
|
+
export declare class SdAutocomplete<T = unknown> implements OnInit, OnDestroy {
|
|
16
16
|
#private;
|
|
17
17
|
id: string;
|
|
18
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
19
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
20
|
+
readonly errorId: string;
|
|
18
21
|
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
19
22
|
autocompleteTrigger: import("@angular/core").Signal<MatAutocompleteTrigger | undefined>;
|
|
20
23
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -71,7 +74,7 @@ export declare class SdAutocomplete<T = any> implements OnInit, OnDestroy {
|
|
|
71
74
|
appearance: import("@angular/core").Signal<MatFormFieldAppearance>;
|
|
72
75
|
valueModel: import("@angular/core").ModelSignal<string | number | null | undefined>;
|
|
73
76
|
sdChange: import("@angular/core").OutputEmitterRef<string | number | null>;
|
|
74
|
-
sdSelection: import("@angular/core").OutputEmitterRef<SdSelectionData<
|
|
77
|
+
sdSelection: import("@angular/core").OutputEmitterRef<SdSelectionData<unknown>>;
|
|
75
78
|
readonly sdAdd: EventEmitter<void>;
|
|
76
79
|
loading: import("@angular/core").WritableSignal<boolean>;
|
|
77
80
|
isFocused: boolean;
|
|
@@ -16,6 +16,9 @@ declare class SdChipCalendarErrorStateMatcher implements ErrorStateMatcher {
|
|
|
16
16
|
}
|
|
17
17
|
export declare class SdChipCalendar implements AfterViewInit, OnDestroy {
|
|
18
18
|
#private;
|
|
19
|
+
/** why: id ổn định của <mat-error> để ô nhập chip trỏ `aria-describedby` sang — thông báo
|
|
20
|
+
* lỗi phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
21
|
+
readonly errorId: string;
|
|
19
22
|
menuTrigger: import("@angular/core").Signal<MatMenuTrigger | undefined>;
|
|
20
23
|
calendar: import("@angular/core").Signal<MatCalendar<Date> | undefined>;
|
|
21
24
|
autoIdInput: import("@angular/core").InputSignalWithTransform<string | undefined, string | null | undefined>;
|
|
@@ -64,6 +67,13 @@ export declare class SdChipCalendar implements AfterViewInit, OnDestroy {
|
|
|
64
67
|
onRemove: (item: string) => void;
|
|
65
68
|
onSelect: (event: MatAutocompleteSelectedEvent) => void;
|
|
66
69
|
onClick: () => void;
|
|
70
|
+
/**
|
|
71
|
+
* why: khi `sdViewDef` đang hiển thị thì bên trong KHÔNG còn phần tử nào focus được, nên
|
|
72
|
+
* click là lối vào DUY NHẤT để chuyển sang chế độ sửa. Bàn phím phải mở được y hệt chuột
|
|
73
|
+
* → Enter/Space chạy chung handler. preventDefault chặn Space cuộn trang (hành vi mặc
|
|
74
|
+
* định của phần tử không phải <button>).
|
|
75
|
+
*/
|
|
76
|
+
onViewKeydown: (event: Event) => void;
|
|
67
77
|
onClear: (evt?: any) => void;
|
|
68
78
|
onSelectDate: (date: Date | null) => void;
|
|
69
79
|
onCloseCalendar: () => void;
|
|
@@ -3,7 +3,7 @@ import { FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';
|
|
4
4
|
import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdLabelDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';
|
|
6
|
-
import { SdFormControl, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
6
|
+
import { SdFormControl, SdTemporalValueTransform, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
7
7
|
import { Size } from '@sdcorejs/utils/models';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
type SdDateModelValue = string | number | Date | undefined | null;
|
|
@@ -15,6 +15,9 @@ type SdDateKeyupEvent = Event | {
|
|
|
15
15
|
export declare class SdDate implements OnDestroy, OnInit {
|
|
16
16
|
#private;
|
|
17
17
|
id: string;
|
|
18
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
19
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
20
|
+
readonly errorId: string;
|
|
18
21
|
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
19
22
|
datePicker: import("@angular/core").Signal<MatDatepicker<Date> | undefined>;
|
|
20
23
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -67,11 +70,19 @@ export declare class SdDate implements OnDestroy, OnInit {
|
|
|
67
70
|
maxInput: import("@angular/core").InputSignal<any>;
|
|
68
71
|
maxDateInput: import("@angular/core").InputSignal<any>;
|
|
69
72
|
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Output serialization strategy for the committed value. Affects `model` / `modelChange` /
|
|
75
|
+
* `sdChange` and the registered form field only — the input keeps showing `dd/MM/yyyy`.
|
|
76
|
+
* Left unset, the component keeps emitting its canonical `yyyy/MM/dd` string.
|
|
77
|
+
*/
|
|
78
|
+
transform: import("@angular/core").InputSignal<SdTemporalValueTransform | undefined>;
|
|
70
79
|
valueModel: import("@angular/core").ModelSignal<SdDateModelValue>;
|
|
71
80
|
sdChange: import("@angular/core").OutputEmitterRef<any>;
|
|
72
81
|
sdFocus: import("@angular/core").OutputEmitterRef<void>;
|
|
73
82
|
isMobileOrTablet: boolean;
|
|
74
83
|
formControl: SdFormControl;
|
|
84
|
+
/** Control registered in the parent form while a `transform` is active; holds the public model. */
|
|
85
|
+
readonly modelControl: SdFormControl;
|
|
75
86
|
isFocused: boolean;
|
|
76
87
|
isValid?: boolean;
|
|
77
88
|
ngOnInit(): void;
|
|
@@ -91,6 +102,6 @@ export declare class SdDate implements OnDestroy, OnInit {
|
|
|
91
102
|
onChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
92
103
|
clear: ($event: any) => void;
|
|
93
104
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDate, never>;
|
|
94
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDate, "sd-date", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef", "sdLabelDef"], ["[sdLabel]"], true, never>;
|
|
105
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDate, "sd-date", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef", "sdLabelDef"], ["[sdLabel]"], true, never>;
|
|
95
106
|
}
|
|
96
107
|
export {};
|
|
@@ -3,7 +3,7 @@ import { FormControl, FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { MatDatepickerInputEvent, MatDateRangePicker } from '@angular/material/datepicker';
|
|
4
4
|
import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdLabelDefDirective } from '@sdcorejs/angular/forms/directives';
|
|
6
|
-
import { SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
6
|
+
import { SdTemporalValueTransform, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
7
7
|
import { Size } from '@sdcorejs/utils/models';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export interface SdDateRangeValue {
|
|
@@ -14,6 +14,9 @@ export declare class SdDateRange {
|
|
|
14
14
|
#private;
|
|
15
15
|
id1: string;
|
|
16
16
|
id2: string;
|
|
17
|
+
/** why: id ổn định của <mat-error> để hai ô nhập trỏ `aria-describedby` sang — thông báo
|
|
18
|
+
* lỗi phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
19
|
+
readonly errorId: string;
|
|
17
20
|
picker: import("@angular/core").Signal<MatDateRangePicker<Date> | undefined>;
|
|
18
21
|
sdLabelDef: import("@angular/core").Signal<SdLabelDefDirective | undefined>;
|
|
19
22
|
private cdRef;
|
|
@@ -67,12 +70,20 @@ export declare class SdDateRange {
|
|
|
67
70
|
resolvedMin: import("@angular/core").Signal<Date | null>;
|
|
68
71
|
maxInput: import("@angular/core").InputSignal<any>;
|
|
69
72
|
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Output serialization strategy applied to **each endpoint** of the committed range. Affects
|
|
75
|
+
* `model` / `modelChange` / `sdChange` and the registered form field only — the field keeps
|
|
76
|
+
* showing `dd/MM/yyyy → dd/MM/yyyy`. Left unset, endpoints stay canonical `yyyy/MM/dd` strings.
|
|
77
|
+
*/
|
|
78
|
+
transform: import("@angular/core").InputSignal<SdTemporalValueTransform | undefined>;
|
|
70
79
|
valueModel: import("@angular/core").ModelSignal<SdDateRangeValue | null | undefined>;
|
|
71
80
|
sdChange: import("@angular/core").OutputEmitterRef<SdDateRangeValue | null | undefined>;
|
|
72
81
|
isMobileOrTablet: boolean;
|
|
73
82
|
formControl: FormControl<any>;
|
|
74
83
|
control1: FormControl<any>;
|
|
75
84
|
control2: FormControl<any>;
|
|
85
|
+
/** Control registered in the parent form while a `transform` is active; holds the public model. */
|
|
86
|
+
readonly modelControl: import("@sdcorejs/angular/forms/models").SdFormControl;
|
|
76
87
|
constructor();
|
|
77
88
|
onStartChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
78
89
|
onEndChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
@@ -83,5 +94,5 @@ export declare class SdDateRange {
|
|
|
83
94
|
onClosePicker: () => void;
|
|
84
95
|
onOpenPicker: (event: MouseEvent) => void;
|
|
85
96
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDateRange, never>;
|
|
86
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, ["sdLabelDef", "sdValueTemplate"], never, true, never>;
|
|
97
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, ["sdLabelDef", "sdValueTemplate"], never, true, never>;
|
|
87
98
|
}
|
|
@@ -2,13 +2,16 @@ import { ElementRef, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
3
|
import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
|
|
4
4
|
import { SdViewDefDirective } from '@sdcorejs/angular/forms/directives';
|
|
5
|
-
import { SdFormControl, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
5
|
+
import { SdFormControl, SdTemporalValueTransform, SdViewed, SdViewedInput } from '@sdcorejs/angular/forms/models';
|
|
6
6
|
import { Size } from '@sdcorejs/utils/models';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
type SdDatetimeModelValue = string | number | Date | undefined | null;
|
|
9
9
|
export declare class SdDatetime implements OnDestroy, OnInit {
|
|
10
10
|
#private;
|
|
11
11
|
id: string;
|
|
12
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
13
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
14
|
+
readonly errorId: string;
|
|
12
15
|
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
13
16
|
private readonly dateTimePicker;
|
|
14
17
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -63,12 +66,20 @@ export declare class SdDatetime implements OnDestroy, OnInit {
|
|
|
63
66
|
maxInput: import("@angular/core").InputSignal<any>;
|
|
64
67
|
maxDateInput: import("@angular/core").InputSignal<any>;
|
|
65
68
|
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Output serialization strategy for the committed value. Affects `model` / `modelChange` /
|
|
71
|
+
* `sdChange` and the registered form field only — the field keeps displaying
|
|
72
|
+
* `dd/MM/yyyy HH:mm[:ss]` per `showSeconds`. Left unset, the canonical string is emitted.
|
|
73
|
+
*/
|
|
74
|
+
transform: import("@angular/core").InputSignal<SdTemporalValueTransform | undefined>;
|
|
66
75
|
valueModel: import("@angular/core").ModelSignal<SdDatetimeModelValue>;
|
|
67
76
|
viewedDate: import("@angular/core").Signal<Date | null>;
|
|
68
77
|
sdChange: import("@angular/core").OutputEmitterRef<any>;
|
|
69
78
|
sdFocus: import("@angular/core").OutputEmitterRef<void>;
|
|
70
79
|
isMobileOrTablet: boolean;
|
|
71
80
|
formControl: SdFormControl;
|
|
81
|
+
/** Control registered in the parent form while a `transform` is active; holds the public model. */
|
|
82
|
+
readonly modelControl: SdFormControl;
|
|
72
83
|
isFocused: boolean;
|
|
73
84
|
isValid?: boolean;
|
|
74
85
|
/** State popup — true khi picker package đang mở. */
|
|
@@ -94,6 +105,6 @@ export declare class SdDatetime implements OnDestroy, OnInit {
|
|
|
94
105
|
onConfirmInput: (event: any) => void;
|
|
95
106
|
clear: ($event: any) => void;
|
|
96
107
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDatetime, never>;
|
|
97
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDatetime, "sd-datetime", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef"], ["[sdLabel]"], true, never>;
|
|
108
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDatetime, "sd-datetime", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef"], ["[sdLabel]"], true, never>;
|
|
98
109
|
}
|
|
99
110
|
export {};
|
|
@@ -58,6 +58,7 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
58
58
|
readonly selectedTemplate: import("@angular/core").Signal<SdEntityPickerSelectedTemplateDirective<any, any> | undefined>;
|
|
59
59
|
readonly rowTemplate: import("@angular/core").Signal<SdEntityPickerRowTemplateDirective<any> | undefined>;
|
|
60
60
|
readonly detailTemplate: import("@angular/core").Signal<SdEntityPickerDetailTemplateDirective<any, any> | undefined>;
|
|
61
|
+
readonly errorId: string;
|
|
61
62
|
readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
|
|
62
63
|
readonly autoId: import("@angular/core").Signal<string | undefined>;
|
|
63
64
|
readonly name: import("@angular/core").InputSignal<string>;
|
|
@@ -78,6 +79,8 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
78
79
|
readonly disabledEntity: import("@angular/core").InputSignal<((item: T) => boolean) | undefined>;
|
|
79
80
|
readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
80
81
|
readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
82
|
+
/** Component-local error text. Set it to force the control invalid and render the message. */
|
|
83
|
+
readonly inlineError: import("@angular/core").InputSignal<string | undefined>;
|
|
81
84
|
readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
82
85
|
readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
83
86
|
readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
@@ -86,11 +89,14 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
86
89
|
readonly model: import("@angular/core").ModelSignal<SdEntityPickerModel<TKey>>;
|
|
87
90
|
readonly sdChange: import("@angular/core").OutputEmitterRef<SdEntityPickerModel<TKey>>;
|
|
88
91
|
readonly sdAdd: import("@angular/core").OutputEmitterRef<void>;
|
|
89
|
-
readonly
|
|
92
|
+
readonly loadError: import("@angular/core").OutputEmitterRef<unknown>;
|
|
90
93
|
readonly formControl: SdFormControl;
|
|
94
|
+
readonly errorMessage: import("@angular/core").Signal<string | undefined>;
|
|
91
95
|
readonly connectorState: import("@angular/core").Signal<import("@sdcorejs/angular/forms/models").ɵSdFormControlConnectorState<SdEntityPickerModel<TKey>>>;
|
|
96
|
+
/** Interaction-gated validation message; `undefined` until the control is touched/dirty. */
|
|
97
|
+
readonly visibleErrorMessage: import("@angular/core").Signal<string | undefined>;
|
|
92
98
|
readonly draftKeys: import("@angular/core").WritableSignal<TKey[]>;
|
|
93
|
-
readonly
|
|
99
|
+
readonly loadErrorState: import("@angular/core").WritableSignal<unknown>;
|
|
94
100
|
readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
95
101
|
readonly hydrating: import("@angular/core").WritableSignal<boolean>;
|
|
96
102
|
readonly query: import("@angular/core").WritableSignal<SdQuery<T>>;
|
|
@@ -118,6 +124,6 @@ export declare class SdEntityPicker<T = unknown, TKey = string | number> {
|
|
|
118
124
|
keyOf(item: T): TKey;
|
|
119
125
|
displayEntity(item: T): string;
|
|
120
126
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdEntityPicker<any, any>, never>;
|
|
121
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdEntityPicker<any, any>, "sd-entity-picker", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "provider": { "alias": "provider"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "queryFields": { "alias": "queryFields"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "keySelector": { "alias": "keySelector"; "required": false; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledEntity": { "alias": "disabledEntity"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "addable": { "alias": "addable"; "required": false; "isSignal": true; }; "model": { "alias": "model"; "required": false; "isSignal": true; }; }, { "model": "modelChange"; "sdChange": "sdChange"; "sdAdd": "sdAdd"; "
|
|
127
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdEntityPicker<any, any>, "sd-entity-picker", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "provider": { "alias": "provider"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "queryFields": { "alias": "queryFields"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "keySelector": { "alias": "keySelector"; "required": false; "isSignal": true; }; "displayField": { "alias": "displayField"; "required": false; "isSignal": true; }; "displayWith": { "alias": "displayWith"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "disabledEntity": { "alias": "disabledEntity"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "addable": { "alias": "addable"; "required": false; "isSignal": true; }; "model": { "alias": "model"; "required": false; "isSignal": true; }; }, { "model": "modelChange"; "sdChange": "sdChange"; "sdAdd": "sdAdd"; "loadError": "loadError"; }, ["selectedTemplate", "rowTemplate", "detailTemplate"], never, true, never>;
|
|
122
128
|
}
|
|
123
129
|
export declare function normalizePickerKeys<TKey>(value: SdEntityPickerModel<TKey>, multiple: boolean): TKey[];
|
|
@@ -10,6 +10,9 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
export declare class SdInput implements OnDestroy, OnInit, AfterViewInit {
|
|
11
11
|
#private;
|
|
12
12
|
id: string;
|
|
13
|
+
/** why: id ổn định của <mat-error> để `<input>` trỏ `aria-describedby` sang — thông báo lỗi
|
|
14
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
15
|
+
readonly errorId: string;
|
|
13
16
|
control: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
14
17
|
/** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */
|
|
15
18
|
inlineRef: import("@angular/core").Signal<SdInlineText | undefined>;
|
|
@@ -23,6 +23,10 @@ export declare class SdInputColor {
|
|
|
23
23
|
readonly hideInlineError: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
24
24
|
/** Display mode — forwarded to the inner `<sd-input>`. `'inline'` = borderless inline-edit; disabled `'inline'` → static. */
|
|
25
25
|
readonly viewed: import("@angular/core").InputSignalWithTransform<SdViewed, SdViewedInput>;
|
|
26
|
+
/** `true` when `viewed === true` (static view — no editor, no picker). */
|
|
27
|
+
readonly isViewed: import("@angular/core").Signal<boolean>;
|
|
28
|
+
/** `true` when `viewed === 'inline'` and the control is still editable. */
|
|
29
|
+
readonly isInline: import("@angular/core").Signal<boolean>;
|
|
26
30
|
readonly valueModel: import("@angular/core").ModelSignal<string | null | undefined>;
|
|
27
31
|
readonly sdChange: import("@angular/core").OutputEmitterRef<string | null | undefined>;
|
|
28
32
|
readonly picker: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
@@ -15,6 +15,9 @@ declare class SdInputNumberErrotStateMatcher implements ErrorStateMatcher {
|
|
|
15
15
|
export declare class SdInputNumber implements OnDestroy, OnInit, AfterViewInit {
|
|
16
16
|
#private;
|
|
17
17
|
id: string;
|
|
18
|
+
/** why: id ổn định của <mat-error> để control trỏ `aria-describedby` sang — thông báo lỗi
|
|
19
|
+
* phải đọc được từ chính control, không chỉ hiện ra màn hình. */
|
|
20
|
+
readonly errorId: string;
|
|
18
21
|
control: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
19
22
|
/** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */
|
|
20
23
|
inlineRef: import("@angular/core").Signal<SdInlineText | undefined>;
|
package/forms/models/index.d.ts
CHANGED
|
@@ -5,5 +5,8 @@ export type * from './src/sd-selection-data.model';
|
|
|
5
5
|
export type * from './src/sd-search.model';
|
|
6
6
|
export * from './src/form-control-state';
|
|
7
7
|
export * from './src/sd-viewed';
|
|
8
|
+
export * from './src/sd-temporal-transform';
|
|
9
|
+
export * from './src/sd-model-facing-control';
|
|
10
|
+
export * from './src/sd-timer-scope';
|
|
8
11
|
export * from './src/sd-form-control-connector';
|
|
9
12
|
export * from './src/sd-strict-date-adapter';
|
|
@@ -11,6 +11,18 @@ interface ɵSdFormControlConnectorBaseOptions<TControl> {
|
|
|
11
11
|
readonly name: Signal<string | null | undefined>;
|
|
12
12
|
/** Canonical control registered in the parent form. */
|
|
13
13
|
readonly control: Signal<AbstractControl<TControl>>;
|
|
14
|
+
/**
|
|
15
|
+
* Control to register in the parent form **instead of** `control`, when the two must differ.
|
|
16
|
+
*
|
|
17
|
+
* why: `<sd-date>` / `<sd-datetime>` / `<sd-date-range>` bind `control` straight to the Material
|
|
18
|
+
* editor, so it necessarily holds the editor's own representation (a `Date`, or the display
|
|
19
|
+
* string) — not the public model. That is fine until `transform` is set, at which point the
|
|
20
|
+
* consumer is promised that `form.get(name).value` matches `model` and the `sdChange` payload.
|
|
21
|
+
* Yielding a model-facing control here moves only the *registration*; validators, disabled, state
|
|
22
|
+
* and the model binding all stay on `control`, so a `null`/absent signal keeps today's behaviour
|
|
23
|
+
* exactly. The component owning both controls is responsible for mirroring value and validity.
|
|
24
|
+
*/
|
|
25
|
+
readonly registeredControl?: Signal<AbstractControl | null | undefined>;
|
|
14
26
|
readonly validators?: Signal<ValidatorFn | readonly ValidatorFn[] | null | undefined>;
|
|
15
27
|
readonly asyncValidators?: Signal<AsyncValidatorFn | readonly AsyncValidatorFn[] | null | undefined>;
|
|
16
28
|
/** Adds/removes Validators.required while preserving validators supplied above. */
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { AbstractControl } from '@angular/forms';
|
|
3
|
+
import { SdFormControl } from './sd-form-control.model';
|
|
4
|
+
export interface ɵSdModelFacingControlOptions<TModel> {
|
|
5
|
+
/** Whether the model-facing control should be the one registered in the parent form. */
|
|
6
|
+
readonly active: Signal<boolean>;
|
|
7
|
+
/** The component's public model. */
|
|
8
|
+
readonly model: Signal<TModel>;
|
|
9
|
+
/** Applies an external write that arrived through the registered control. */
|
|
10
|
+
readonly writeModel: (value: TModel) => void;
|
|
11
|
+
/** The internal UI control whose validity, disabled and interaction state must be mirrored. */
|
|
12
|
+
readonly source: Signal<AbstractControl>;
|
|
13
|
+
/** Compares two model values; defaults to `Object.is`. */
|
|
14
|
+
readonly modelEquals?: (left: TModel, right: TModel) => boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ɵSdModelFacingControl<TModel> {
|
|
17
|
+
/** The control itself. Holds the public model value, never the editor representation. */
|
|
18
|
+
readonly control: SdFormControl;
|
|
19
|
+
/** Feed straight into `ɵsdFormControlConnector`'s `registeredControl`. */
|
|
20
|
+
readonly registered: Signal<AbstractControl | null>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A second control that carries the **public model** so it can be registered in the parent form in
|
|
24
|
+
* place of the editor-facing control.
|
|
25
|
+
*
|
|
26
|
+
* why: `<sd-date>` and friends bind their control directly to the Material editor, so that control
|
|
27
|
+
* necessarily holds a `Date` or a display string. That is invisible until `transform` is set — at
|
|
28
|
+
* which point the consumer is told `form.get(name).value` equals `model`, and finding a raw `Date`
|
|
29
|
+
* there instead makes the promise false. Rather than reshaping the editor binding (which would
|
|
30
|
+
* change behaviour for every existing consumer), this mirrors the model into a control of its own
|
|
31
|
+
* and hands *that* one to the form.
|
|
32
|
+
*
|
|
33
|
+
* Both directions are wired, and neither can feed back on the other:
|
|
34
|
+
* - model changes are pushed in with `emitEvent: false`, so they raise no `valueChanges`;
|
|
35
|
+
* - a write that arrives on this control goes to `writeModel`, exactly like a write on the editor
|
|
36
|
+
* control would, so `modelChange` / `sdChange` still fire once.
|
|
37
|
+
*
|
|
38
|
+
* Validity, disabled and touched/dirty are mirrored from `source`, so registering this control does
|
|
39
|
+
* not quietly drop the editor's validators (min/max, parse errors, required) from the parent form.
|
|
40
|
+
*
|
|
41
|
+
* Must be called from an injection context.
|
|
42
|
+
*/
|
|
43
|
+
export declare function ɵsdModelFacingControl<TModel>(options: ɵSdModelFacingControlOptions<TModel>): ɵSdModelFacingControl<TModel>;
|
|
@@ -4,4 +4,4 @@ export interface SdSearchReq<TData extends string | number = string> {
|
|
|
4
4
|
searchFields?: string[];
|
|
5
5
|
value?: TData | TData[];
|
|
6
6
|
}
|
|
7
|
-
export type SdSearch<T =
|
|
7
|
+
export type SdSearch<T = unknown> = (args: SdSearchReq) => Promise<T[]>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output serialization strategy for the temporal form controls (`<sd-date>`, `<sd-datetime>`,
|
|
3
|
+
* `<sd-date-range>`).
|
|
4
|
+
*
|
|
5
|
+
* This names how a committed value leaves the component — through `model` / `modelChange` /
|
|
6
|
+
* `sdChange` and the registered `FormGroup` field. It does **not** touch what the field displays,
|
|
7
|
+
* and it is **not** an Angular input-coercion `transform`.
|
|
8
|
+
*/
|
|
9
|
+
export type SdTemporalValueTransform = 'ISOString' | 'UTCString';
|
|
10
|
+
/** Every supported strategy, derived from the strategy map so the two can never drift. */
|
|
11
|
+
export declare const SD_TEMPORAL_VALUE_TRANSFORMS: readonly SdTemporalValueTransform[];
|
|
12
|
+
export declare function sdIsTemporalValueTransform(value: unknown): value is SdTemporalValueTransform;
|
|
13
|
+
/**
|
|
14
|
+
* Serializes a committed value with the active strategy.
|
|
15
|
+
*
|
|
16
|
+
* Returns `null` for anything that is not a usable `Date`, so an invalid value can never reach a
|
|
17
|
+
* serializer and produce the string `"Invalid Date"`. Callers treat `null` as "keep the existing
|
|
18
|
+
* representation".
|
|
19
|
+
*/
|
|
20
|
+
export declare function sdSerializeTemporalValue(value: Date | null | undefined, transform: SdTemporalValueTransform | null | undefined): string | null;
|
|
21
|
+
/** Local midnight of the given day. Date-only controls serialize this instant, never the raw value. */
|
|
22
|
+
export declare function sdLocalStartOfDay(value: Date): Date;
|
|
23
|
+
/**
|
|
24
|
+
* Parses the wire formats these transforms emit, so a component can read back its own output.
|
|
25
|
+
*
|
|
26
|
+
* Deliberately narrow: only ISO 8601 and the RFC-1123 shape `toUTCString()` produces are accepted.
|
|
27
|
+
* Handing the whole job to `new Date(text)` would make every loosely date-shaped string parse
|
|
28
|
+
* differently per browser, and would swallow the legacy canonical formats the components already
|
|
29
|
+
* parse with their own strict parsers. Returns `null` when the text is not one of these.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sdParseTransformedTemporal(value: unknown): Date | null;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal Macrotask timers owned by a component/directive injector.
|
|
3
|
+
*
|
|
4
|
+
* Every pending handle is cleared when the host is destroyed, so a deferred focus,
|
|
5
|
+
* panel-open or emit can never run against a torn-down view.
|
|
6
|
+
*/
|
|
7
|
+
export interface ɵSdTimerScope {
|
|
8
|
+
/**
|
|
9
|
+
* `setTimeout` with the same observable timing, minus the leak: the handle is tracked
|
|
10
|
+
* and cleared on destroy. Scheduling after destroy is a no-op.
|
|
11
|
+
*/
|
|
12
|
+
schedule(handler: () => void, delayMs?: number): void;
|
|
13
|
+
/** Cancels every pending timer without waiting for destroy. */
|
|
14
|
+
clear(): void;
|
|
15
|
+
/** Number of timers still pending. Test/diagnostics only. */
|
|
16
|
+
readonly pending: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @internal Creates a destroy-scoped timer bag. MUST be called from an injection context
|
|
20
|
+
* (class field initializer or constructor) because it resolves `DestroyRef`.
|
|
21
|
+
*
|
|
22
|
+
* why: gần như mọi form control đều hoãn focus / mở panel bằng `setTimeout(..., 100)` để chờ
|
|
23
|
+
* Material dựng xong DOM. Handle không được giữ lại nên callback vẫn chạy sau khi host view đã
|
|
24
|
+
* destroy — route đổi nhanh hoặc chip bị gỡ giữa lúc focus là đủ để `detectChanges()` ném
|
|
25
|
+
* `ViewDestroyedError`, hoặc để một output bắn ra sau khi consumer đã unsubscribe. Gom vào một
|
|
26
|
+
* scope duy nhất để nơi dùng chỉ cần đổi `setTimeout(fn, ms)` → `#timers.schedule(fn, ms)`,
|
|
27
|
+
* KHÔNG đổi độ trễ (đây là fix vòng đời, không phải fix hành vi).
|
|
28
|
+
*/
|
|
29
|
+
export declare function ɵsdTimerScope(): ɵSdTimerScope;
|