@sd-angular/core 19.0.0-beta.99 → 19.0.3
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 +9 -11
- package/assets/images/coming-soon.svg +23 -0
- package/assets/images/data-empty.svg +21 -0
- package/assets/images/expired.svg +22 -0
- package/assets/images/file-error.svg +28 -0
- package/assets/images/filter-empty.svg +20 -0
- package/assets/images/filter-required.svg +21 -0
- package/assets/images/forbidden.svg +15 -0
- package/assets/images/image-error.svg +27 -0
- package/assets/images/maintenance.svg +23 -0
- package/assets/images/not-found.svg +20 -0
- package/assets/images/offline.svg +20 -0
- package/assets/images/submitted.svg +18 -0
- package/assets/images/success.svg +18 -0
- package/assets/images/unauthorized.svg +22 -0
- package/assets/images/unknown-error.svg +18 -0
- package/assets/scss/README.md +433 -353
- package/assets/scss/core/_inline-edit.scss +105 -0
- package/assets/scss/core/form.scss +58 -1
- package/assets/scss/core/image.scss +35 -0
- package/assets/scss/core/utilities/_base.scss +6 -6
- package/assets/scss/core/utilities/_grid.scss +4 -3
- package/assets/scss/core/utilities/_index.scss +1 -1
- package/assets/scss/core/utilities/_sizing.scss +2 -2
- package/assets/scss/sd-core.scss +1 -2
- package/components/autoid-inspector/src/autoid-inspector.component.d.ts +18 -0
- package/components/autoid-inspector/src/models/autoid-element.model.d.ts +45 -1
- package/components/autoid-inspector/src/models/autoid-export-format.model.d.ts +19 -0
- package/components/autoid-inspector/src/services/autoid-export.service.d.ts +10 -2
- package/components/autoid-inspector/src/services/autoid-scanner.service.d.ts +26 -3
- package/components/badge/src/badge.component.d.ts +20 -3
- package/components/button/src/button.component.d.ts +2 -1
- package/components/ckeditor-styles/index.d.ts +1 -0
- package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +25 -0
- package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +12 -13
- package/components/form-generic/src/models/form-generic-component.model.d.ts +5 -6
- package/components/form-generic/src/models/form-generic-expression.model.d.ts +1 -1
- package/components/history/models/history.model.d.ts +2 -2
- package/components/index.d.ts +2 -0
- package/components/inform/index.d.ts +2 -0
- package/components/inform/src/inform-action.directive.d.ts +9 -0
- package/components/inform/src/inform.component.d.ts +59 -0
- package/components/modal/src/modal.component.d.ts +2 -1
- package/components/modal-resizable/index.d.ts +1 -0
- package/components/modal-resizable/src/modal-resizable.component.d.ts +29 -0
- package/components/operator/index.d.ts +1 -0
- package/components/operator/src/operator.component.d.ts +34 -0
- package/components/query-bar/index.d.ts +2 -0
- package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +28 -0
- package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +67 -0
- package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +73 -0
- package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +37 -0
- package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +76 -0
- package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +67 -0
- package/components/query-bar/src/components/popover-chip/popover-chip.component.d.ts +35 -0
- package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +39 -0
- package/components/query-bar/src/query-bar.component.d.ts +137 -0
- package/components/query-bar/src/query-bar.model.d.ts +136 -0
- package/components/section/src/section.component.d.ts +2 -1
- package/components/stepper/index.d.ts +2 -0
- package/components/stepper/src/step.component.d.ts +17 -0
- package/components/stepper/src/stepper.component.d.ts +33 -0
- package/components/tab/index.d.ts +2 -0
- package/components/tab/src/tab-group.component.d.ts +37 -0
- package/components/tab/src/tab.component.d.ts +13 -0
- package/components/tab-router/src/decorators/tab.decorator.d.ts +2 -2
- package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
- package/components/table/index.d.ts +1 -0
- package/components/table/src/components/column-title/column-title.component.d.ts +1 -1
- package/components/table/src/components/config/config.component.d.ts +3 -1
- package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts +3 -3
- package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +3 -7
- package/components/table/src/components/selector-action/selector-action.component.d.ts +3 -1
- package/components/table/src/configurations/table.configuration.d.ts +3 -3
- package/components/table/src/directives/index.d.ts +1 -0
- package/components/table/src/directives/sd-table-cell-def.directive.d.ts +12 -4
- package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +12 -4
- package/components/table/src/directives/sd-table-expand-def.directive.d.ts +10 -4
- package/components/table/src/directives/sd-table-filter-def.directive.d.ts +3 -3
- package/components/table/src/directives/sd-table-footer-def.directive.d.ts +12 -4
- package/components/table/src/directives/sd-table-group-def.directive.d.ts +44 -0
- package/components/table/src/directives/sd-table-title-def.directive.d.ts +10 -4
- package/components/table/src/models/index.d.ts +1 -0
- package/components/table/src/models/table-column.model.d.ts +13 -13
- package/components/table/src/models/table-command.model.d.ts +3 -2
- package/components/table/src/models/table-item.model.d.ts +19 -4
- package/components/table/src/models/table-option-export.model.d.ts +3 -3
- package/components/table/src/models/table-option-group.model.d.ts +19 -2
- package/components/table/src/models/table-option-selector.model.d.ts +17 -1
- package/components/table/src/models/table-option-tree.model.d.ts +96 -8
- package/components/table/src/models/table-option.model.d.ts +11 -2
- package/components/table/src/pipes/sd-group.pipe.d.ts +15 -1
- package/components/table/src/services/table-filter/table-filter.model.d.ts +9 -9
- package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
- package/components/table/src/services/tree/tree.util.d.ts +43 -2
- package/components/table/src/table.component.d.ts +36 -11
- package/components/view/src/view.component.d.ts +35 -1
- package/directives/src/sd-desktop.directive.d.ts +2 -4
- package/directives/src/sd-mobile.directive.d.ts +2 -4
- package/fesm2022/sd-angular-core-components-anchor.mjs +75 -49
- package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-autoid-inspector.mjs +254 -29
- package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-avatar.mjs +2 -2
- package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-badge.mjs +18 -3
- package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-button.mjs +2 -2
- package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs +38 -0
- package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-document-builder.mjs +10 -8
- package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-editor.mjs +3 -2
- package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-form-generic.mjs +149 -235
- package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-history.mjs +3 -2
- package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-inform.mjs +190 -0
- package/fesm2022/sd-angular-core-components-inform.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-mini-editor.mjs +4 -3
- package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs +158 -0
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-modal.mjs +2 -2
- package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-operator.mjs +77 -0
- package/fesm2022/sd-angular-core-components-operator.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-preview.mjs +4 -4
- package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-bar.mjs +1384 -0
- package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-quick-action.mjs +2 -2
- package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-side-drawer.mjs +2 -2
- package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-splitter.mjs +5 -2
- package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-stepper.mjs +140 -0
- package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-tab-router.mjs +3 -3
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab.mjs +145 -0
- package/fesm2022/sd-angular-core-components-tab.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components-table.mjs +576 -222
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-upload-file.mjs +23 -23
- package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-view.mjs +44 -9
- package/fesm2022/sd-angular-core-components-view.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components.mjs +2 -0
- package/fesm2022/sd-angular-core-components.mjs.map +1 -1
- package/fesm2022/sd-angular-core-directives.mjs +19 -21
- package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs +38 -14
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-checkbox.mjs +97 -87
- package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +92 -61
- package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-chip.mjs +89 -52
- package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date-range.mjs +63 -10
- package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date.mjs +39 -15
- package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-datetime.mjs +33 -14
- package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-directives.mjs +18 -24
- package/fesm2022/sd-angular-core-forms-directives.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-inline-text.mjs +167 -0
- package/fesm2022/sd-angular-core-forms-inline-text.mjs.map +1 -0
- package/fesm2022/sd-angular-core-forms-input-color.mjs +119 -0
- package/fesm2022/sd-angular-core-forms-input-color.mjs.map +1 -0
- package/fesm2022/sd-angular-core-forms-input-number.mjs +66 -14
- package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input.mjs +86 -29
- package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-models.mjs +44 -2
- package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-radio.mjs +130 -175
- package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +66 -23
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-switch.mjs +95 -98
- package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-textarea.mjs +33 -12
- package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
- package/fesm2022/sd-angular-core-i18n.mjs +65 -0
- package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-auth.mjs +4 -4
- package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-authom.mjs +1 -1
- package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +23 -23
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-permission.mjs +3 -3
- package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
- package/fesm2022/sd-angular-core-pipes.mjs +2 -2
- package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-api.mjs +3 -3
- package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-cache.mjs +3 -2
- package/fesm2022/sd-angular-core-services-cache.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-confirm.mjs +1 -1
- package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-excel.mjs +6 -5
- package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-notify.mjs +18 -5
- package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-storage.mjs +2 -2
- package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
- package/forms/autocomplete/src/autocomplete.component.d.ts +24 -10
- package/forms/checkbox/src/checkbox.component.d.ts +21 -20
- package/forms/chip/src/chip.component.d.ts +25 -20
- package/forms/chip-calendar/src/chip-calendar.component.d.ts +27 -22
- package/forms/date/src/date.component.d.ts +23 -9
- package/forms/date-range/src/date-range.component.d.ts +28 -5
- package/forms/datetime/src/datetime.component.d.ts +21 -8
- package/forms/directives/src/item-def.directive.d.ts +10 -5
- package/forms/directives/src/label-def.directive.d.ts +3 -2
- package/forms/directives/src/suffix-def.directive.d.ts +3 -2
- package/forms/directives/src/view-def.directive.d.ts +9 -9
- package/forms/inline-text/index.d.ts +1 -0
- package/forms/inline-text/src/inline-text.component.d.ts +76 -0
- package/forms/input/src/input.component.d.ts +31 -13
- package/forms/input-color/index.d.ts +1 -0
- package/forms/input-color/src/input-color.component.d.ts +34 -0
- package/forms/input-number/src/input-number.component.d.ts +25 -9
- package/forms/models/index.d.ts +1 -0
- package/forms/models/src/sd-custom-validator.model.d.ts +13 -1
- package/forms/models/src/sd-viewed.d.ts +38 -0
- package/forms/radio/src/radio.component.d.ts +37 -38
- package/forms/select/src/select.component.d.ts +36 -14
- package/forms/switch/src/switch.component.d.ts +22 -23
- package/forms/textarea/src/textarea.component.d.ts +18 -8
- package/i18n/src/en.d.ts +11 -0
- package/modules/auth/configurations/auth.configuration.d.ts +4 -4
- package/modules/layout/configurations/layout.configuration.d.ts +3 -3
- package/modules/permission/src/configurations/permission.configuration.d.ts +3 -3
- package/package.json +92 -56
- package/sd-angular-core-19.0.3.tgz +0 -0
- package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -3
- package/services/confirm/src/lib/confirm.service.d.ts +9 -9
- package/services/notify/src/components/toast/toast.component.d.ts +4 -0
- package/utilities/models/src/icon.model.d.ts +1 -1
- package/assets/scss/bootstrap-4.6.2/_alert.scss +0 -52
- package/assets/scss/bootstrap-4.6.2/_badge.scss +0 -54
- package/assets/scss/bootstrap-4.6.2/_breadcrumb.scss +0 -42
- package/assets/scss/bootstrap-4.6.2/_button-group.scss +0 -163
- package/assets/scss/bootstrap-4.6.2/_buttons.scss +0 -142
- package/assets/scss/bootstrap-4.6.2/_card.scss +0 -286
- package/assets/scss/bootstrap-4.6.2/_carousel.scss +0 -200
- package/assets/scss/bootstrap-4.6.2/_close.scss +0 -40
- package/assets/scss/bootstrap-4.6.2/_code.scss +0 -48
- package/assets/scss/bootstrap-4.6.2/_custom-forms.scss +0 -526
- package/assets/scss/bootstrap-4.6.2/_dropdown.scss +0 -192
- package/assets/scss/bootstrap-4.6.2/_forms.scss +0 -347
- package/assets/scss/bootstrap-4.6.2/_functions.scss +0 -190
- package/assets/scss/bootstrap-4.6.2/_grid.scss +0 -73
- package/assets/scss/bootstrap-4.6.2/_images.scss +0 -42
- package/assets/scss/bootstrap-4.6.2/_input-group.scss +0 -211
- package/assets/scss/bootstrap-4.6.2/_jumbotron.scss +0 -17
- package/assets/scss/bootstrap-4.6.2/_list-group.scss +0 -154
- package/assets/scss/bootstrap-4.6.2/_media.scss +0 -8
- package/assets/scss/bootstrap-4.6.2/_mixins.scss +0 -47
- package/assets/scss/bootstrap-4.6.2/_modal.scss +0 -240
- package/assets/scss/bootstrap-4.6.2/_nav.scss +0 -125
- package/assets/scss/bootstrap-4.6.2/_navbar.scss +0 -332
- package/assets/scss/bootstrap-4.6.2/_pagination.scss +0 -74
- package/assets/scss/bootstrap-4.6.2/_popover.scss +0 -170
- package/assets/scss/bootstrap-4.6.2/_print.scss +0 -132
- package/assets/scss/bootstrap-4.6.2/_progress.scss +0 -47
- package/assets/scss/bootstrap-4.6.2/_reboot.scss +0 -484
- package/assets/scss/bootstrap-4.6.2/_root.scss +0 -19
- package/assets/scss/bootstrap-4.6.2/_spinners.scss +0 -65
- package/assets/scss/bootstrap-4.6.2/_tables.scss +0 -185
- package/assets/scss/bootstrap-4.6.2/_toasts.scss +0 -46
- package/assets/scss/bootstrap-4.6.2/_tooltip.scss +0 -115
- package/assets/scss/bootstrap-4.6.2/_transitions.scss +0 -26
- package/assets/scss/bootstrap-4.6.2/_type.scss +0 -125
- package/assets/scss/bootstrap-4.6.2/_utilities.scss +0 -18
- package/assets/scss/bootstrap-4.6.2/_variables.scss +0 -1150
- package/assets/scss/bootstrap-4.6.2/bootstrap-grid.scss +0 -30
- package/assets/scss/bootstrap-4.6.2/bootstrap-reboot.scss +0 -12
- package/assets/scss/bootstrap-4.6.2/bootstrap.scss +0 -44
- package/assets/scss/bootstrap-4.6.2/mixins/_alert.scss +0 -13
- package/assets/scss/bootstrap-4.6.2/mixins/_background-variant.scss +0 -23
- package/assets/scss/bootstrap-4.6.2/mixins/_badge.scss +0 -17
- package/assets/scss/bootstrap-4.6.2/mixins/_border-radius.scss +0 -76
- package/assets/scss/bootstrap-4.6.2/mixins/_box-shadow.scss +0 -20
- package/assets/scss/bootstrap-4.6.2/mixins/_breakpoints.scss +0 -123
- package/assets/scss/bootstrap-4.6.2/mixins/_buttons.scss +0 -110
- package/assets/scss/bootstrap-4.6.2/mixins/_caret.scss +0 -62
- package/assets/scss/bootstrap-4.6.2/mixins/_clearfix.scss +0 -7
- package/assets/scss/bootstrap-4.6.2/mixins/_deprecate.scss +0 -10
- package/assets/scss/bootstrap-4.6.2/mixins/_float.scss +0 -14
- package/assets/scss/bootstrap-4.6.2/mixins/_forms.scss +0 -195
- package/assets/scss/bootstrap-4.6.2/mixins/_gradients.scss +0 -45
- package/assets/scss/bootstrap-4.6.2/mixins/_grid-framework.scss +0 -80
- package/assets/scss/bootstrap-4.6.2/mixins/_grid.scss +0 -69
- package/assets/scss/bootstrap-4.6.2/mixins/_hover.scss +0 -37
- package/assets/scss/bootstrap-4.6.2/mixins/_image.scss +0 -36
- package/assets/scss/bootstrap-4.6.2/mixins/_list-group.scss +0 -21
- package/assets/scss/bootstrap-4.6.2/mixins/_lists.scss +0 -7
- package/assets/scss/bootstrap-4.6.2/mixins/_nav-divider.scss +0 -11
- package/assets/scss/bootstrap-4.6.2/mixins/_pagination.scss +0 -22
- package/assets/scss/bootstrap-4.6.2/mixins/_reset-text.scss +0 -17
- package/assets/scss/bootstrap-4.6.2/mixins/_resize.scss +0 -6
- package/assets/scss/bootstrap-4.6.2/mixins/_screen-reader.scss +0 -34
- package/assets/scss/bootstrap-4.6.2/mixins/_size.scss +0 -7
- package/assets/scss/bootstrap-4.6.2/mixins/_table-row.scss +0 -39
- package/assets/scss/bootstrap-4.6.2/mixins/_text-emphasis.scss +0 -17
- package/assets/scss/bootstrap-4.6.2/mixins/_text-hide.scss +0 -11
- package/assets/scss/bootstrap-4.6.2/mixins/_text-truncate.scss +0 -8
- package/assets/scss/bootstrap-4.6.2/mixins/_transition.scss +0 -26
- package/assets/scss/bootstrap-4.6.2/mixins/_visibility.scss +0 -8
- package/assets/scss/bootstrap-4.6.2/utilities/_align.scss +0 -8
- package/assets/scss/bootstrap-4.6.2/utilities/_background.scss +0 -19
- package/assets/scss/bootstrap-4.6.2/utilities/_borders.scss +0 -75
- package/assets/scss/bootstrap-4.6.2/utilities/_clearfix.scss +0 -3
- package/assets/scss/bootstrap-4.6.2/utilities/_display.scss +0 -26
- package/assets/scss/bootstrap-4.6.2/utilities/_embed.scss +0 -39
- package/assets/scss/bootstrap-4.6.2/utilities/_flex.scss +0 -51
- package/assets/scss/bootstrap-4.6.2/utilities/_float.scss +0 -11
- package/assets/scss/bootstrap-4.6.2/utilities/_interactions.scss +0 -5
- package/assets/scss/bootstrap-4.6.2/utilities/_overflow.scss +0 -5
- package/assets/scss/bootstrap-4.6.2/utilities/_position.scss +0 -32
- package/assets/scss/bootstrap-4.6.2/utilities/_screenreaders.scss +0 -11
- package/assets/scss/bootstrap-4.6.2/utilities/_shadows.scss +0 -6
- package/assets/scss/bootstrap-4.6.2/utilities/_sizing.scss +0 -20
- package/assets/scss/bootstrap-4.6.2/utilities/_spacing.scss +0 -73
- package/assets/scss/bootstrap-4.6.2/utilities/_stretched-link.scss +0 -19
- package/assets/scss/bootstrap-4.6.2/utilities/_text.scss +0 -72
- package/assets/scss/bootstrap-4.6.2/utilities/_visibility.scss +0 -13
- package/assets/scss/bootstrap-4.6.2/vendor/_rfs.scss +0 -228
- package/assets/scss/core/bootstrap.scss +0 -13
- package/components/table/index.d.ts.map +0 -1
- package/components/table/sd-angular-core-components-table.d.ts.map +0 -1
- package/components/table/src/components/column-title/column-title.component.d.ts.map +0 -1
- package/components/table/src/components/command/desktop-command.component.d.ts.map +0 -1
- package/components/table/src/components/command/pipes/command.pipe.d.ts.map +0 -1
- package/components/table/src/components/command/pipes/filter.pipe.d.ts.map +0 -1
- package/components/table/src/components/config/config.component.d.ts.map +0 -1
- package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts.map +0 -1
- package/components/table/src/components/desktop-cell/view/view.component.d.ts.map +0 -1
- package/components/table/src/components/filter/column-filter/column-filter.component.d.ts.map +0 -1
- package/components/table/src/components/filter/external-filter/external-filter.component.d.ts.map +0 -1
- package/components/table/src/components/filter/index.d.ts.map +0 -1
- package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts.map +0 -1
- package/components/table/src/components/index.d.ts.map +0 -1
- package/components/table/src/components/popup-export/popup-export.component.d.ts.map +0 -1
- package/components/table/src/components/selector-action/action-filter.pipe.d.ts.map +0 -1
- package/components/table/src/components/selector-action/selector-action.component.d.ts.map +0 -1
- package/components/table/src/configurations/index.d.ts.map +0 -1
- package/components/table/src/configurations/table.configuration.d.ts.map +0 -1
- package/components/table/src/directives/index.d.ts.map +0 -1
- package/components/table/src/directives/sd-column-resize.directive.d.ts.map +0 -1
- package/components/table/src/directives/sd-table-cell-def.directive.d.ts.map +0 -1
- package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts.map +0 -1
- package/components/table/src/directives/sd-table-expand-def.directive.d.ts.map +0 -1
- package/components/table/src/directives/sd-table-filter-def.directive.d.ts.map +0 -1
- package/components/table/src/directives/sd-table-footer-def.directive.d.ts.map +0 -1
- package/components/table/src/directives/sd-table-title-def.directive.d.ts.map +0 -1
- package/components/table/src/directives/sticky-shadow.directive.d.ts.map +0 -1
- package/components/table/src/models/index.d.ts.map +0 -1
- package/components/table/src/models/table-column.model.d.ts.map +0 -1
- package/components/table/src/models/table-command.model.d.ts.map +0 -1
- package/components/table/src/models/table-item.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-config.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-expand.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-export.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-group.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-paginate.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-reload.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-selector.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-sort.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-style.model.d.ts.map +0 -1
- package/components/table/src/models/table-option-tree.model.d.ts.map +0 -1
- package/components/table/src/models/table-option.model.d.ts.map +0 -1
- package/components/table/src/pipes/filter-values.pipe.d.ts.map +0 -1
- package/components/table/src/pipes/index.d.ts.map +0 -1
- package/components/table/src/pipes/sd-group.pipe.d.ts.map +0 -1
- package/components/table/src/pipes/sd-tree.pipe.d.ts.map +0 -1
- package/components/table/src/pipes/selection-disabled.pipe.d.ts.map +0 -1
- package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts.map +0 -1
- package/components/table/src/pipes/selection-visible.pipe.d.ts.map +0 -1
- package/components/table/src/services/column-width.util.d.ts.map +0 -1
- package/components/table/src/services/config.service.d.ts.map +0 -1
- package/components/table/src/services/index.d.ts.map +0 -1
- package/components/table/src/services/table-export/table-export.service.d.ts.map +0 -1
- package/components/table/src/services/table-filter/table-filter.model.d.ts.map +0 -1
- package/components/table/src/services/table-filter/table-filter.service.d.ts.map +0 -1
- package/components/table/src/services/table-format/table-format.service.d.ts.map +0 -1
- package/components/table/src/services/tree/tree.util.d.ts.map +0 -1
- package/components/table/src/table.component.d.ts.map +0 -1
- package/sd-angular-core-19.0.0-beta.99.tgz +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
2
|
import { SdSearch } from '@sd-angular/core/forms';
|
|
3
|
-
import {
|
|
3
|
+
import { NestedKeyOf, Operator, Order, PagingReq } from '@sdcorejs/utils/models';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { SdTableColumn } from '../../models/table-column.model';
|
|
6
6
|
export interface SdTableQuickFilter {
|
|
@@ -12,20 +12,20 @@ export interface TableFilterConfiguration {
|
|
|
12
12
|
inlineExternal: Record<string, boolean>;
|
|
13
13
|
}
|
|
14
14
|
export interface TableFilterValue {
|
|
15
|
-
columnOperator?: Record<string,
|
|
15
|
+
columnOperator?: Record<string, Operator>;
|
|
16
16
|
columnFilter?: Record<string, any>;
|
|
17
17
|
externalFilter?: Record<string, any>;
|
|
18
18
|
notReload?: boolean;
|
|
19
19
|
filtered?: boolean;
|
|
20
20
|
}
|
|
21
21
|
export interface SdTableFilterRequest<T = any> {
|
|
22
|
-
columnOperator: Record<
|
|
23
|
-
rawColumnFilter: Record<
|
|
22
|
+
columnOperator: Record<NestedKeyOf<T>, Operator>;
|
|
23
|
+
rawColumnFilter: Record<NestedKeyOf<T>, any>;
|
|
24
24
|
rawExternalFilter: Record<string, any>;
|
|
25
25
|
pageNumber: number;
|
|
26
26
|
pageSize: number;
|
|
27
27
|
orderBy?: string;
|
|
28
|
-
orderDirection?:
|
|
28
|
+
orderDirection?: Order['direction'];
|
|
29
29
|
isExported?: boolean;
|
|
30
30
|
visibledColumns?: SdTableColumn[];
|
|
31
31
|
}
|
|
@@ -39,7 +39,7 @@ export interface SdTableOptionFilter<T = any> {
|
|
|
39
39
|
/** Ẩn tất cả inline filter (chỉ còn external), nếu chọn auto thì sẽ ẩn khi total row <= 10, phù hợp cho các màn detail có ít dữ liệu */
|
|
40
40
|
hideInlineFilter?: boolean | 'auto';
|
|
41
41
|
/** Hàm xử lý khi đổi Operator của filter column */
|
|
42
|
-
operatorChange?: (column?: SdTableColumn, operator?:
|
|
42
|
+
operatorChange?: (column?: SdTableColumn, operator?: Operator) => void;
|
|
43
43
|
/** Danh sách external filter */
|
|
44
44
|
externalFilters?: SdTableExternalFilter[];
|
|
45
45
|
/** Số lượng cột external filter trên mỗi hàng (mặc định: 6) */
|
|
@@ -57,8 +57,8 @@ export declare const SdConvertToPagingReq: (filterRequest: SdTableFilterRequest,
|
|
|
57
57
|
columns?: SdTableColumn[];
|
|
58
58
|
externalFilters?: SdTableExternalFilter[];
|
|
59
59
|
fieldMapping?: Record<string, string>;
|
|
60
|
-
orders?:
|
|
61
|
-
}) =>
|
|
60
|
+
orders?: Order[];
|
|
61
|
+
}) => PagingReq;
|
|
62
62
|
export declare type SdTableExternalFilter<TData = any> = TextFilter<TData> | DateFilter<TData> | DateTimeFilter<TData> | DateRangeFilter<TData> | NumberFilter<TData> | ValuesFilter<TData> | LazyValuesFilter<TData> | BooleanFilter<TData> | CustomFilter<TData>;
|
|
63
63
|
interface BaseFilter<TData = any> {
|
|
64
64
|
field: string;
|
|
@@ -66,7 +66,7 @@ interface BaseFilter<TData = any> {
|
|
|
66
66
|
defaultShowing?: boolean;
|
|
67
67
|
required?: boolean;
|
|
68
68
|
hidden?: boolean;
|
|
69
|
-
defaultOperator?:
|
|
69
|
+
defaultOperator?: Operator;
|
|
70
70
|
data?: TData;
|
|
71
71
|
onChange?: (value: any) => void;
|
|
72
72
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SdStorageService } from '@sd-angular/core/services';
|
|
2
|
-
import {
|
|
2
|
+
import { Operator } from '@sdcorejs/utils/models';
|
|
3
3
|
import { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';
|
|
4
4
|
import { SdTableColumn } from '../../models/table-column.model';
|
|
5
5
|
import { SdTableExternalFilter, SdTableOptionFilter, TableFilterRegister } from './table-filter.model';
|
|
@@ -13,7 +13,7 @@ export declare class SdTableFilterService {
|
|
|
13
13
|
columns: SdTableColumn[] | undefined;
|
|
14
14
|
externalFilters: SdTableExternalFilter[] | undefined;
|
|
15
15
|
filterDefs: SdTableFilterDefDirective[] | undefined;
|
|
16
|
-
columnOperator?: Record<string,
|
|
16
|
+
columnOperator?: Record<string, Operator>;
|
|
17
17
|
}) => TableFilterRegister;
|
|
18
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdTableFilterService, never>;
|
|
19
19
|
static ɵprov: i0.ɵɵInjectableDeclaration<SdTableFilterService>;
|
|
@@ -1,10 +1,51 @@
|
|
|
1
|
-
import { SdTableOptionTree } from '../../models/table-option-tree.model';
|
|
1
|
+
import { SdTableOptionTree, TableOptionTreeLazy } from '../../models/table-option-tree.model';
|
|
2
2
|
import { SdTableItem } from '../../models/table-item.model';
|
|
3
|
+
/**
|
|
4
|
+
* Type-guard: tree có nạp children lười (lazy) hay không.
|
|
5
|
+
* Dùng để narrow discriminated union `SdTableOptionTree` một cách an toàn —
|
|
6
|
+
* thay vì truy cập `option.onExpandChildren` trực tiếp trên union (chỉ tồn tại
|
|
7
|
+
* ở nhánh lazy).
|
|
8
|
+
*/
|
|
9
|
+
export declare const isLazyTree: <T = any>(option?: SdTableOptionTree<T>) => option is TableOptionTreeLazy<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Key chứa mảng children trên object row.
|
|
12
|
+
* - `static`: lấy `childrenKey` đã cấu hình, mặc định `'children'`.
|
|
13
|
+
* - `lazy`: không có `childrenKey` riêng → luôn dùng `'children'` làm nơi lưu
|
|
14
|
+
* kết quả nạp lười.
|
|
15
|
+
*/
|
|
3
16
|
export declare const getChildrenKey: (option?: SdTableOptionTree) => string;
|
|
4
17
|
export declare const getChildrenFromData: <T>(data: T, option?: SdTableOptionTree) => T[];
|
|
18
|
+
/**
|
|
19
|
+
* Trạng thái bung mặc định cho một cấp.
|
|
20
|
+
* Chỉ `static` mới có `defaultExpanded`; lazy luôn trả `false` (không thể bung
|
|
21
|
+
* mặc định nhánh chưa nạp).
|
|
22
|
+
*/
|
|
5
23
|
export declare const resolveDefaultExpanded: (level: number, option?: SdTableOptionTree) => boolean;
|
|
6
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Row có khả năng có children hay không (để hiện nút bung).
|
|
26
|
+
* - Có children embedded → true.
|
|
27
|
+
* - Lazy tree: dùng `hasChildren(row.data)` nếu được cấu hình; không thì luôn
|
|
28
|
+
* true (chưa biết cho tới khi nạp).
|
|
29
|
+
*/
|
|
30
|
+
export declare const resolveHasChildren: <T>(row: SdTableItem<T>, option?: SdTableOptionTree<T>) => boolean;
|
|
31
|
+
/** Row cần nạp lười (lazy) khi bung: là lazy tree và chưa có children embedded. */
|
|
7
32
|
export declare const hasLazyChildren: <T>(row: SdTableItem<T>, option?: SdTableOptionTree) => boolean;
|
|
33
|
+
/**
|
|
34
|
+
* True nếu `data` HOẶC bất kỳ hậu duệ nào (theo `childrenKey`) thoả `predicate`.
|
|
35
|
+
*
|
|
36
|
+
* Dùng cho search ở cấp con (static tree, table `type: 'local'`): một nhánh
|
|
37
|
+
* gốc được giữ lại trong kết quả lọc nếu subtree của nó có ít nhất một node
|
|
38
|
+
* khớp từ khoá. `visited` chống đệ quy vô hạn khi data có circular reference.
|
|
39
|
+
*/
|
|
40
|
+
export declare const subtreeMatches: <T>(data: T, predicate: (data: T) => boolean, option?: SdTableOptionTree, visited?: Set<unknown>) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Lọc mảng children: chỉ giữ child có subtree khớp `predicate`.
|
|
43
|
+
*
|
|
44
|
+
* Trả về MẢNG MỚI nhưng GIỮ NGUYÊN object reference của từng child (không clone)
|
|
45
|
+
* — nhờ vậy `meta.id` (hash từ data) ổn định, selection / trạng thái bung không
|
|
46
|
+
* bị mất khi từ khoá search đổi. Đây là bước "prune" của tính năng search-con.
|
|
47
|
+
*/
|
|
48
|
+
export declare const filterMatchingChildren: <T>(children: T[], predicate: (data: T) => boolean, option?: SdTableOptionTree) => T[];
|
|
8
49
|
export declare const flattenTree: <T>(roots: SdTableItem<T>[], option?: SdTableOptionTree, visited?: Set<string>) => SdTableItem<T>[];
|
|
9
50
|
/** Thu thập mọi SdTableItem đã format trong cây (kể cả node đang collapse). */
|
|
10
51
|
export declare const collectFormattedTreeRows: <T>(roots: SdTableItem<T>[]) => SdTableItem<T>[];
|
|
@@ -5,6 +5,7 @@ import { MatTable } from '@angular/material/table';
|
|
|
5
5
|
import { SdExcelColumn } from '@sd-angular/core/services';
|
|
6
6
|
import { SdTableCellDefDirective } from './directives/sd-table-cell-def.directive';
|
|
7
7
|
import { SdTableExpandDefDirective } from './directives/sd-table-expand-def.directive';
|
|
8
|
+
import { SdTableGroupDefDirective, SdTableGroupDefContext } from './directives/sd-table-group-def.directive';
|
|
8
9
|
import { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';
|
|
9
10
|
import { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';
|
|
10
11
|
import { SdTableTitleDefDirective } from './directives/sd-table-title-def.directive';
|
|
@@ -15,7 +16,7 @@ import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
|
|
|
15
16
|
import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
|
|
16
17
|
import { SdQuickAction } from '@sd-angular/core/components/quick-action';
|
|
17
18
|
import { SdScrollDirective } from '@sd-angular/core/directives';
|
|
18
|
-
import {
|
|
19
|
+
import { Operator } from '@sdcorejs/utils/models';
|
|
19
20
|
import { ExternalFilterComponent, MobileFilterComponent } from './components';
|
|
20
21
|
import { ConfigComponent } from './components/config/config.component';
|
|
21
22
|
import { SdPopupExport } from './components/popup-export/popup-export.component';
|
|
@@ -48,15 +49,16 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
|
|
|
48
49
|
mobileFilter: import("@angular/core").Signal<MobileFilterComponent | undefined>;
|
|
49
50
|
paginator: import("@angular/core").Signal<MatPaginator | undefined>;
|
|
50
51
|
sort: import("@angular/core").Signal<MatSort | undefined>;
|
|
51
|
-
sdSubInformation: import("@angular/core").Signal<SdTableExpandDefDirective | undefined>;
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
sdSubInformation: import("@angular/core").Signal<SdTableExpandDefDirective<any> | undefined>;
|
|
53
|
+
sdGroupDef: import("@angular/core").Signal<SdTableGroupDefDirective<any> | undefined>;
|
|
54
|
+
sdCellDefs: import("@angular/core").Signal<readonly SdTableCellDefDirective<any>[]>;
|
|
55
|
+
sdFooterDefs: import("@angular/core").Signal<readonly SdMaterialFooterDefDirective<any>[]>;
|
|
54
56
|
sdFilterDefs: import("@angular/core").Signal<readonly SdTableFilterDefDirective[]>;
|
|
55
|
-
sdTitleDefs: import("@angular/core").Signal<readonly SdTableTitleDefDirective[]>;
|
|
56
|
-
cellDef: import("@angular/core").Signal<Record<string, SdTableCellDefDirective
|
|
57
|
-
footerDef: import("@angular/core").Signal<Record<string, SdMaterialFooterDefDirective
|
|
57
|
+
sdTitleDefs: import("@angular/core").Signal<readonly SdTableTitleDefDirective<any>[]>;
|
|
58
|
+
cellDef: import("@angular/core").Signal<Record<string, SdTableCellDefDirective<any>>>;
|
|
59
|
+
footerDef: import("@angular/core").Signal<Record<string, SdMaterialFooterDefDirective<any>>>;
|
|
58
60
|
hasFooter: import("@angular/core").Signal<boolean>;
|
|
59
|
-
titleDef: import("@angular/core").Signal<Record<string, SdTableTitleDefDirective
|
|
61
|
+
titleDef: import("@angular/core").Signal<Record<string, SdTableTitleDefDirective<any>>>;
|
|
60
62
|
tableOption: import("@angular/core").WritableSignal<SdTableOption<T> | undefined>;
|
|
61
63
|
configuration: import("@angular/core").WritableSignal<ConfiguredTableResult | undefined>;
|
|
62
64
|
items: import("@angular/core").WritableSignal<SdTableItem<T>[]>;
|
|
@@ -68,7 +70,7 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
|
|
|
68
70
|
requireFiltered: import("@angular/core").WritableSignal<boolean>;
|
|
69
71
|
filterRegister: TableFilterRegister;
|
|
70
72
|
key: string;
|
|
71
|
-
columnOperator: Record<string,
|
|
73
|
+
columnOperator: Record<string, Operator>;
|
|
72
74
|
columnFilter?: Record<string, any>;
|
|
73
75
|
cacheValues: Record<string, any[]>;
|
|
74
76
|
treeRevision: import("@angular/core").WritableSignal<number>;
|
|
@@ -91,6 +93,29 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
|
|
|
91
93
|
onSelect: (rowData: SdTableItem<T>) => void;
|
|
92
94
|
onSelectAll: () => void;
|
|
93
95
|
onClearSelection: (items?: SdTableItem<T>[]) => void;
|
|
96
|
+
/** true nếu MỌI selectable child trong group đều selected. Group rỗng (không child) → false. */
|
|
97
|
+
isGroupAllSelected: (header: SdTableItem<T>) => boolean;
|
|
98
|
+
/** true nếu CÓ MỘT VÀI selectable child selected nhưng KHÔNG phải tất cả. */
|
|
99
|
+
isGroupIndeterminate: (header: SdTableItem<T>) => boolean;
|
|
100
|
+
/** Toggle select-all cho 1 group: set isSelected cho mọi selectable child, sync state. */
|
|
101
|
+
onSelectGroup: (header: SdTableItem<T>, checked: boolean) => void;
|
|
102
|
+
groupExpandState: Map<string, boolean>;
|
|
103
|
+
/** Toggle expand/collapse cho 1 group (chỉ ý nghĩa khi option.group.collapsible). */
|
|
104
|
+
toggleGroupExpand: (header: SdTableItem<T>) => void;
|
|
105
|
+
/**
|
|
106
|
+
* Predicate cho matRowDef.when — phân biệt group header row vs data row.
|
|
107
|
+
* Group header row dùng matRowDef riêng với column list ['sdGroupHeader'] (1 cell duy nhất).
|
|
108
|
+
* Data row dùng displayedColumns nguyên vẹn.
|
|
109
|
+
*/
|
|
110
|
+
isGroupHeaderRow: (_idx: number, row: SdTableItem<T>) => boolean;
|
|
111
|
+
isDataRow: (_idx: number, row: SdTableItem<T>) => boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Colspan cho cell sdGroupHeader trên group row = displayedColumns.length.
|
|
114
|
+
* Span TOÀN BỘ width data row vì group row chỉ có 1 cell.
|
|
115
|
+
*/
|
|
116
|
+
sdGroupColspan: import("@angular/core").Signal<number>;
|
|
117
|
+
/** Build context object truyền vào SdTableGroupDefDirective template. */
|
|
118
|
+
groupContext: (header: SdTableItem<T>) => SdTableGroupDefContext<T>;
|
|
94
119
|
rowStyle: (row: SdTableItem<T>, index?: number) => Record<string, string> | null;
|
|
95
120
|
clearFilter: () => void;
|
|
96
121
|
setFilter: (args: {
|
|
@@ -101,12 +126,12 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
|
|
|
101
126
|
get selectedItems(): T[];
|
|
102
127
|
detectChanges: () => void;
|
|
103
128
|
onColumnResize: (field: string, width: string) => void;
|
|
104
|
-
onOperatorChange: (column: SdTableColumn, operator:
|
|
129
|
+
onOperatorChange: (column: SdTableColumn, operator: Operator | undefined) => void;
|
|
105
130
|
trackBy: (index: number, item: SdTableItem) => string;
|
|
106
131
|
pageOffset: import("@angular/core").Signal<number>;
|
|
107
132
|
isReorderDisabled(item: SdTableItem<T>): boolean;
|
|
108
133
|
reorderSortPredicate: (index: number, drag: CdkDrag<SdTableItem<T>>, drop: CdkDropList<SdTableItem<T>[]>) => boolean;
|
|
109
134
|
onReorderDrop(event: CdkDragDrop<SdTableItem<T>[]>): void;
|
|
110
135
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdTable<any>, never>;
|
|
111
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": true; "isSignal": true; }; }, {}, ["sdSubInformation", "sdCellDefs", "sdFooterDefs", "sdFilterDefs", "sdTitleDefs"], ["[sdTableTop]"], true, never>;
|
|
136
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": true; "isSignal": true; }; }, {}, ["sdSubInformation", "sdGroupDef", "sdCellDefs", "sdFooterDefs", "sdFilterDefs", "sdTitleDefs"], ["[sdTableTop]"], true, never>;
|
|
112
137
|
}
|
|
@@ -1,16 +1,50 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* `<sd-view>` — pure read-only display of a value (text, hyperlink, or a custom template).
|
|
5
|
+
*
|
|
6
|
+
* Presentational proxy with no state of its own: the parent form control (`<sd-select>`,
|
|
7
|
+
* `<sd-input>`, …) computes the display string + resolved selection and passes them in;
|
|
8
|
+
* `<sd-view>` only decides WHICH template renders. It is the single rendering path for every
|
|
9
|
+
* "viewed" state across the form controls (DETAIL `viewed=true` and the `viewed='inline'`
|
|
10
|
+
* text face), so a custom `valueTemplate` (e.g. `sdViewDef` / `#sdValue`) looks identical in
|
|
11
|
+
* both. OnPush — re-renders only when an input signal changes.
|
|
12
|
+
*/
|
|
3
13
|
export declare class SdView {
|
|
14
|
+
/** Optional label rendered above the value (omitted when a parent supplies its own label). */
|
|
4
15
|
label: import("@angular/core").InputSignal<string | null | undefined>;
|
|
16
|
+
/** Raw selected value — NOT rendered directly; only exposed in the `valueTemplate` context as `value`. */
|
|
5
17
|
value: import("@angular/core").InputSignal<any>;
|
|
18
|
+
/**
|
|
19
|
+
* Display string — what shows when no custom value template is bound.
|
|
20
|
+
* why: `input.required()` forces the parent to bind `[display]` (compile error otherwise),
|
|
21
|
+
* so the component never has to guess a fallback string from `value`.
|
|
22
|
+
*/
|
|
6
23
|
display: import("@angular/core").InputSignal<string | null | undefined>;
|
|
24
|
+
/** When set, the value renders as a link (`<a [sdHref]>`) instead of plain text. */
|
|
7
25
|
hyperlink: import("@angular/core").InputSignal<string | null | undefined>;
|
|
26
|
+
/** Label template handed down by a parent control (wins over `label` + `#sdLabel`). */
|
|
8
27
|
labelTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
28
|
+
/** Value template handed down by a parent control (wins over `display` + `#sdValue`). */
|
|
9
29
|
valueTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
|
|
30
|
+
/**
|
|
31
|
+
* Resolved selected-item objects passed by the parent (e.g. `<sd-select>`).
|
|
32
|
+
* why: the parent owns option/lazy resolution — `<sd-view>` is a proxy and must NOT rebuild
|
|
33
|
+
* the list. Exposed in the value-template context so a "head +N" template can read `displayField`.
|
|
34
|
+
*/
|
|
35
|
+
selectedItems: import("@angular/core").InputSignal<any[] | undefined>;
|
|
36
|
+
/** `#sdLabel` template projected directly into `<sd-view>` (fallback when no `[labelTemplate]`). */
|
|
10
37
|
contentLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
38
|
+
/** `#sdValue` template projected directly into `<sd-view>` (fallback when no `[valueTemplate]`). */
|
|
11
39
|
contentValueTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* Effective label template: input from parent wins, else the projected `#sdLabel`.
|
|
42
|
+
* why: `computed` caches the choice so the template's `@if (activeLabelTemplate())` doesn't
|
|
43
|
+
* re-evaluate two content-child reads on every change-detection pass.
|
|
44
|
+
*/
|
|
12
45
|
activeLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
46
|
+
/** Effective value template: input from parent wins, else the projected `#sdValue`. Cached for the same reason. */
|
|
13
47
|
activeValueTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
14
48
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdView, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdView, "sd-view", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": true; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "labelTemplate": { "alias": "labelTemplate"; "required": false; "isSignal": true; }; "valueTemplate": { "alias": "valueTemplate"; "required": false; "isSignal": true; }; }, {}, ["contentLabelTemplate", "contentValueTemplate"], never, true, never>;
|
|
49
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdView, "sd-view", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": true; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "labelTemplate": { "alias": "labelTemplate"; "required": false; "isSignal": true; }; "valueTemplate": { "alias": "valueTemplate"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": false; "isSignal": true; }; }, {}, ["contentLabelTemplate", "contentValueTemplate"], never, true, never>;
|
|
16
50
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { ViewContainerRef, TemplateRef } from '@angular/core';
|
|
2
1
|
import * as i0 from "@angular/core";
|
|
3
2
|
export declare class SdDesktopDirective {
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef);
|
|
3
|
+
#private;
|
|
4
|
+
constructor();
|
|
7
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDesktopDirective, never>;
|
|
8
6
|
static ɵdir: i0.ɵɵDirectiveDeclaration<SdDesktopDirective, "[sdDesktop]", never, {}, {}, never, never, true, never>;
|
|
9
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
1
|
import * as i0 from "@angular/core";
|
|
3
2
|
export declare class SdMobileDirective {
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef);
|
|
3
|
+
#private;
|
|
4
|
+
constructor();
|
|
7
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdMobileDirective, never>;
|
|
8
6
|
static ɵdir: i0.ɵɵDirectiveDeclaration<SdMobileDirective, "[sdMobile]", never, {}, {}, never, never, true, never>;
|
|
9
7
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as i1$1 from '@angular/common';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { input, inject, ElementRef, effect, Component, computed, output, ChangeDetectionStrategy, viewChild, contentChildren, booleanAttribute, signal, afterNextRender } from '@angular/core';
|
|
4
|
+
import { input, inject, ElementRef, effect, Component, computed, output, ChangeDetectionStrategy, viewChild, contentChildren, booleanAttribute, signal, afterNextRender, untracked } from '@angular/core';
|
|
5
5
|
import { v4 } from 'uuid';
|
|
6
6
|
import { BrowserUtilities } from '@sdcorejs/utils/fns';
|
|
7
|
-
import { Subject, Subscription, debounceTime, fromEvent,
|
|
7
|
+
import { Subject, Subscription, debounceTime, fromEvent, take } from 'rxjs';
|
|
8
8
|
import * as i1 from '@angular/material/icon';
|
|
9
9
|
import { MatIconModule } from '@angular/material/icon';
|
|
10
10
|
|
|
@@ -63,11 +63,11 @@ class AnchorNav {
|
|
|
63
63
|
this.#subscription.unsubscribe();
|
|
64
64
|
}
|
|
65
65
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AnchorNav, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
66
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: AnchorNav, isStandalone: true, selector: "anchor-nav", inputs: { sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: true, transformFunction: null }, activeSectionId: { classPropertyName: "activeSectionId", publicName: "activeSectionId", isSignal: true, isRequired: false, transformFunction: null }, ellipsis: { classPropertyName: "ellipsis", publicName: "ellipsis", isSignal: true, isRequired: false, transformFunction: null }, sidebarWidth: { classPropertyName: "sidebarWidth", publicName: "sidebarWidth", isSignal: true, isRequired: false, transformFunction: null }, parentAutoId: { classPropertyName: "parentAutoId", publicName: "parentAutoId", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickSection: "clickSection" }, ngImport: i0, template: "<div\r\n class=\"c-anchor-list\"\r\n [style.width]=\"sidebarWidth()\"\r\n [style.--anchor-active-color]=\"cssActiveVar()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n [attr.data-autoId]=\"itemAutoId(section)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.c-anchor-list{height:100%;display:flex;flex-direction:column}.c-anchor-list .c-anchor-list-item{border-left:2px solid var(--sd-secondary-light);color:var(--sd-black500);padding:.5rem 1.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c-anchor-list .c-anchor-list-item.active{border-left:2px solid var(--anchor-active-color, var(--sd-primary));color:var(--anchor-active-color, var(--sd-primary));font-weight:700}.c-anchor-list .c-anchor-list-item.active .c-anchor-list-item-icon{color:var(--anchor-active-color, var(--sd-primary))}.c-anchor-list .c-anchor-list-item:not(.active){border-left:2px solid var(--sd-secondary-light);font-weight:400}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
66
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: AnchorNav, isStandalone: true, selector: "anchor-nav", inputs: { sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: true, transformFunction: null }, activeSectionId: { classPropertyName: "activeSectionId", publicName: "activeSectionId", isSignal: true, isRequired: false, transformFunction: null }, ellipsis: { classPropertyName: "ellipsis", publicName: "ellipsis", isSignal: true, isRequired: false, transformFunction: null }, sidebarWidth: { classPropertyName: "sidebarWidth", publicName: "sidebarWidth", isSignal: true, isRequired: false, transformFunction: null }, parentAutoId: { classPropertyName: "parentAutoId", publicName: "parentAutoId", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickSection: "clickSection" }, ngImport: i0, template: "<div\r\n class=\"c-anchor-list\"\r\n [style.width]=\"sidebarWidth()\"\r\n [style.--anchor-active-color]=\"cssActiveVar()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n [attr.data-autoId]=\"itemAutoId(section)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.c-anchor-list{height:100%;display:flex;flex-direction:column}.c-anchor-list .c-anchor-list-item{border-left:2px solid var(--sd-secondary-light);color:var(--sd-black500);padding:.5rem 1.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;min-width:0;overflow:hidden}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-icon{flex:0 0 auto}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text{flex:1 1 0;min-width:0;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c-anchor-list .c-anchor-list-item.active{border-left:2px solid var(--anchor-active-color, var(--sd-primary));color:var(--anchor-active-color, var(--sd-primary));font-weight:700}.c-anchor-list .c-anchor-list-item.active .c-anchor-list-item-icon{color:var(--anchor-active-color, var(--sd-primary))}.c-anchor-list .c-anchor-list-item:not(.active){border-left:2px solid var(--sd-secondary-light);font-weight:400}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
67
67
|
}
|
|
68
68
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AnchorNav, decorators: [{
|
|
69
69
|
type: Component,
|
|
70
|
-
args: [{ selector: 'anchor-nav', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MatIconModule], standalone: true, template: "<div\r\n class=\"c-anchor-list\"\r\n [style.width]=\"sidebarWidth()\"\r\n [style.--anchor-active-color]=\"cssActiveVar()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n [attr.data-autoId]=\"itemAutoId(section)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.c-anchor-list{height:100%;display:flex;flex-direction:column}.c-anchor-list .c-anchor-list-item{border-left:2px solid var(--sd-secondary-light);color:var(--sd-black500);padding:.5rem 1.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c-anchor-list .c-anchor-list-item.active{border-left:2px solid var(--anchor-active-color, var(--sd-primary));color:var(--anchor-active-color, var(--sd-primary));font-weight:700}.c-anchor-list .c-anchor-list-item.active .c-anchor-list-item-icon{color:var(--anchor-active-color, var(--sd-primary))}.c-anchor-list .c-anchor-list-item:not(.active){border-left:2px solid var(--sd-secondary-light);font-weight:400}\n"] }]
|
|
70
|
+
args: [{ selector: 'anchor-nav', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MatIconModule], standalone: true, template: "<div\r\n class=\"c-anchor-list\"\r\n [style.width]=\"sidebarWidth()\"\r\n [style.--anchor-active-color]=\"cssActiveVar()\">\r\n @for (section of sections(); track section.id) {\r\n <div\r\n class=\"c-anchor-list-item\"\r\n [class.active]=\"section.id === activeSectionId()\"\r\n (click)=\"onClickSection(section.id)\"\r\n (keydown.enter)=\"onClickSection(section.id)\"\r\n [attr.data-autoId]=\"itemAutoId(section)\"\r\n tabindex=\"0\">\r\n @if (section.icon()) {\r\n <mat-icon class=\"c-anchor-list-item-icon\">{{ section.icon() }}</mat-icon>\r\n }\r\n <div class=\"c-anchor-list-item-text\" [class.ellipsis]=\"ellipsis()\">\r\n {{ section.title() }}\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.c-anchor-list{height:100%;display:flex;flex-direction:column}.c-anchor-list .c-anchor-list-item{border-left:2px solid var(--sd-secondary-light);color:var(--sd-black500);padding:.5rem 1.5rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;min-width:0;overflow:hidden}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-icon{flex:0 0 auto}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text{flex:1 1 0;min-width:0;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.c-anchor-list .c-anchor-list-item .c-anchor-list-item-text.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c-anchor-list .c-anchor-list-item.active{border-left:2px solid var(--anchor-active-color, var(--sd-primary));color:var(--anchor-active-color, var(--sd-primary));font-weight:700}.c-anchor-list .c-anchor-list-item.active .c-anchor-list-item-icon{color:var(--anchor-active-color, var(--sd-primary))}.c-anchor-list .c-anchor-list-item:not(.active){border-left:2px solid var(--sd-secondary-light);font-weight:400}\n"] }]
|
|
71
71
|
}], ctorParameters: () => [] });
|
|
72
72
|
|
|
73
73
|
class SdAnchor {
|
|
@@ -84,76 +84,102 @@ class SdAnchor {
|
|
|
84
84
|
// Màu highlight active nav (text + icon + vertical bar). Default 'primary'.
|
|
85
85
|
color = input('primary');
|
|
86
86
|
activeSectionId = signal('');
|
|
87
|
-
#
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
#
|
|
87
|
+
#initialized = false;
|
|
88
|
+
#isClickScrolling = false;
|
|
89
|
+
#clickScrollSubscription = null;
|
|
90
|
+
#intersectionObserver = null;
|
|
91
|
+
#visibleSections = new Set();
|
|
91
92
|
#timeoutId = null;
|
|
93
|
+
#timeoutScrollFallback = 200;
|
|
92
94
|
constructor() {
|
|
93
95
|
afterNextRender(() => {
|
|
96
|
+
this.#initialized = true;
|
|
94
97
|
if (!this.hideNav()) {
|
|
95
|
-
this
|
|
96
|
-
|
|
98
|
+
this.#registerIntersectionObserver();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
// Lắng nghe thay đổi sections để đăng ký lại observe section
|
|
102
|
+
effect(() => {
|
|
103
|
+
this.sections();
|
|
104
|
+
if (!this.hideNav() && this.#initialized) {
|
|
105
|
+
untracked(() => this.#registerIntersectionObserver());
|
|
97
106
|
}
|
|
98
107
|
});
|
|
99
108
|
}
|
|
100
|
-
#
|
|
101
|
-
this.#
|
|
109
|
+
#registerIntersectionObserver() {
|
|
110
|
+
this.#cleanIntersectionObserver();
|
|
102
111
|
const wrapperEl = this.wrapper().nativeElement;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
// Brower API IntersectionObserver sẽ hỗ trợ khi nào 1 section được hiện ra trong wrapperEl
|
|
113
|
+
this.#intersectionObserver = new IntersectionObserver(entries => {
|
|
114
|
+
for (const entry of entries) {
|
|
115
|
+
if (entry.isIntersecting) {
|
|
116
|
+
// Nếu section mới đi vào vùng nhìn thấy -> add vào set
|
|
117
|
+
this.#visibleSections.add(entry.target);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Nếu section đã đi ra khỏi vùng nhìn thấy -> xóa khỏi Set
|
|
121
|
+
this.#visibleSections.delete(entry.target);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Nếu đang scroll bởi click section thì return luôn, k phải quét qua tìm vùng section được active
|
|
125
|
+
if (this.#isClickScrolling) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
108
128
|
for (const section of this.sections()) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
129
|
+
// Kiểm tra xem DOM của section nào đang nằm trong danh sách đang nhìn thấy để active chính xác
|
|
130
|
+
if (this.#visibleSections.has(section.elementRef.nativeElement)) {
|
|
131
|
+
if (this.activeSectionId() !== section.id) {
|
|
132
|
+
this.activeSectionId.set(section.id);
|
|
133
|
+
}
|
|
114
134
|
break;
|
|
115
135
|
}
|
|
116
136
|
}
|
|
117
|
-
});
|
|
118
|
-
|
|
137
|
+
}, { root: wrapperEl, threshold: 0 });
|
|
138
|
+
// Đăng ký theo dõi từng section có trong anchor
|
|
139
|
+
for (const section of this.sections()) {
|
|
140
|
+
this.#intersectionObserver.observe(section.elementRef.nativeElement);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
119
143
|
scrollSectionByClick(idSectionTarget) {
|
|
120
144
|
this.activeSectionId.set(idSectionTarget);
|
|
121
145
|
const targetSection = this.sections().find(s => s.id === idSectionTarget)?.elementRef;
|
|
122
|
-
if (!targetSection)
|
|
146
|
+
if (!targetSection) {
|
|
123
147
|
return;
|
|
124
|
-
|
|
148
|
+
}
|
|
149
|
+
this.#cleanScrollSectionByClickObserver();
|
|
150
|
+
this.#isClickScrolling = true;
|
|
125
151
|
const wrapperEl = this.wrapper().nativeElement;
|
|
126
152
|
const targetElement = targetSection.nativeElement;
|
|
127
|
-
const prevScrollTop =
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}), filter(Boolean), debounceTime(this.#delay + 100), take(1))
|
|
137
|
-
.subscribe(() => this.#registerScrollSubscription());
|
|
153
|
+
const prevScrollTop = wrapperEl.scrollTop; // Lưu lại vị trí cuộn hiện tại của container
|
|
154
|
+
const scrollTop = prevScrollTop + targetElement.getBoundingClientRect().top - wrapperEl.getBoundingClientRect().top; // Vị trí section cần scroll tới
|
|
155
|
+
// Đăng ký sự kiện nếu đã được scroll xong
|
|
156
|
+
this.#clickScrollSubscription = fromEvent(wrapperEl, 'scrollend')
|
|
157
|
+
.pipe(take(1))
|
|
158
|
+
.subscribe(() => {
|
|
159
|
+
this.#isClickScrolling = false;
|
|
160
|
+
});
|
|
161
|
+
// Nếu sectionTarget đã ở đúng vị trí (click nhưng không scroll) thì sau #timeoutScrollFallback kích hoạt lại IntersectionObserver
|
|
138
162
|
this.#timeoutId = setTimeout(() => {
|
|
139
|
-
if (
|
|
140
|
-
this.#
|
|
163
|
+
if (wrapperEl.scrollTop === prevScrollTop) {
|
|
164
|
+
this.#isClickScrolling = false;
|
|
165
|
+
this.#clickScrollSubscription?.unsubscribe();
|
|
141
166
|
}
|
|
142
|
-
}, this.#
|
|
143
|
-
wrapperEl.scrollTo({ top:
|
|
144
|
-
}
|
|
145
|
-
#updateCurrentScroll(el) {
|
|
146
|
-
const style = getComputedStyle(el);
|
|
147
|
-
return el.scrollTop + parseFloat(style.paddingTop) + parseFloat(style.borderTopWidth);
|
|
167
|
+
}, this.#timeoutScrollFallback);
|
|
168
|
+
wrapperEl.scrollTo({ top: scrollTop, behavior: 'smooth' });
|
|
148
169
|
}
|
|
149
|
-
#
|
|
150
|
-
if (this.#timeoutId)
|
|
170
|
+
#cleanScrollSectionByClickObserver = () => {
|
|
171
|
+
if (this.#timeoutId) {
|
|
151
172
|
clearTimeout(this.#timeoutId);
|
|
152
|
-
|
|
173
|
+
}
|
|
153
174
|
this.#clickScrollSubscription?.unsubscribe();
|
|
154
175
|
};
|
|
176
|
+
#cleanIntersectionObserver = () => {
|
|
177
|
+
this.#intersectionObserver?.disconnect();
|
|
178
|
+
this.#visibleSections.clear();
|
|
179
|
+
};
|
|
155
180
|
ngOnDestroy() {
|
|
156
|
-
this.#
|
|
181
|
+
this.#cleanScrollSectionByClickObserver();
|
|
182
|
+
this.#cleanIntersectionObserver();
|
|
157
183
|
}
|
|
158
184
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdAnchor, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
159
185
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdAnchor, isStandalone: true, selector: "sd-anchor", inputs: { autoIdInput: { classPropertyName: "autoIdInput", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null }, sidebarWidth: { classPropertyName: "sidebarWidth", publicName: "sidebarWidth", isSignal: true, isRequired: false, transformFunction: null }, ellipsis: { classPropertyName: "ellipsis", publicName: "ellipsis", isSignal: true, isRequired: false, transformFunction: null }, overScroll: { classPropertyName: "overScroll", publicName: "overScroll", isSignal: true, isRequired: false, transformFunction: null }, hideNav: { classPropertyName: "hideNav", publicName: "hideNav", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "sections", predicate: SdAnchorItem, isSignal: true }], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"c-anchor-vertical\" [ngClass]=\"{ 'c-stop-scroll-propagation': !overScroll() }\" #wrapper>\r\n <div class=\"c-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (!hideNav()) {\r\n <div class=\"c-anchor-list\" [style.flex-basis]=\"sidebarWidth()\">\r\n <anchor-nav\r\n [sections]=\"sections()\"\r\n [ellipsis]=\"ellipsis()\"\r\n [sidebarWidth]=\"sidebarWidth()\"\r\n [activeSectionId]=\"activeSectionId()\"\r\n [parentAutoId]=\"autoId()\"\r\n [color]=\"color()\"\r\n (clickSection)=\"scrollSectionByClick($event)\">\r\n </anchor-nav>\r\n </div>\r\n }\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.c-anchor-vertical{position:relative;display:flex;height:100%;width:100%;gap:16px;overflow-y:auto}.c-anchor-vertical.c-stop-scroll-propagation{overscroll-behavior:contain}.c-anchor-vertical .c-anchor-content{flex:1 1 auto;min-width:0}.c-anchor-vertical .c-anchor-list{flex:0 0 auto;position:sticky;top:0;right:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AnchorNav, selector: "anchor-nav", inputs: ["sections", "activeSectionId", "ellipsis", "sidebarWidth", "parentAutoId", "color"], outputs: ["clickSection"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|