structra-ui 0.1.13 → 0.1.15
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/package.json +6 -4
- package/app/_utils/date-pt-br.utils.d.ts +0 -24
- package/app/_utils/decimal-br.utils.d.ts +0 -52
- package/app/_utils/estados-br.data.d.ts +0 -10
- package/app/_utils/integer-br.utils.d.ts +0 -17
- package/app/_utils/integer-value.utils.d.ts +0 -5
- package/app/_utils/scroll/body-scroll-lock.util.d.ts +0 -44
- package/app/app-shell/_models/breadcrumb-item.model.d.ts +0 -13
- package/app/app-shell/app-shell-sidebar-template.directive.d.ts +0 -19
- package/app/app-shell/app-shell.component.d.ts +0 -41
- package/app/app-shell/breadcrumb/breadcrumb.component.d.ts +0 -10
- package/app/app-shell/index.d.ts +0 -19
- package/app/app-shell/sidebar/app-sidebar-toolbar.directive.d.ts +0 -14
- package/app/app-shell/sidebar/shell-sidebar-toggle.component.d.ts +0 -19
- package/app/app-shell/sidebar/sidebar.component.d.ts +0 -36
- package/app/app-shell/sidebar-reveal.constants.d.ts +0 -8
- package/app/app-shell/topbar/topbar.component.d.ts +0 -8
- package/app/app-shell/user-menu/user-menu.component.d.ts +0 -25
- package/app/buttons/base-button/base-button.component.d.ts +0 -43
- package/app/buttons/index.d.ts +0 -1
- package/app/data-display/_models/card-item-view.model.d.ts +0 -8
- package/app/data-display/_models/data-display.models.d.ts +0 -11
- package/app/data-display/_models/data-grid-column.model.d.ts +0 -13
- package/app/data-display/_models/index.d.ts +0 -2
- package/app/data-display/adaptive-data-view/adaptive-data-view.component.d.ts +0 -53
- package/app/data-display/card-list/card-list.component.d.ts +0 -70
- package/app/data-display/dashboard-section/dashboard-section.component.d.ts +0 -12
- package/app/data-display/data-card/data-card.component.d.ts +0 -16
- package/app/data-display/data-grid/data-grid-actions-cell-renderer.component.d.ts +0 -21
- package/app/data-display/data-grid/data-grid.component.d.ts +0 -76
- package/app/data-display/data-list/data-list.component.d.ts +0 -18
- package/app/data-display/data-toolbar/data-toolbar.component.d.ts +0 -6
- package/app/data-display/details-field/details-field.component.d.ts +0 -10
- package/app/data-display/details-view/details-view.component.d.ts +0 -26
- package/app/data-display/empty-state/empty-state-overlay.util.d.ts +0 -5
- package/app/data-display/empty-state/empty-state.component.d.ts +0 -13
- package/app/data-display/index.d.ts +0 -20
- package/app/data-display/list-item/list-item.component.d.ts +0 -22
- package/app/data-display/stat-card/stat-card.component.d.ts +0 -23
- package/app/data-display/status-badge/status-badge.component.d.ts +0 -17
- package/app/data-display/table-empty-state/table-empty-state.component.d.ts +0 -14
- package/app/data-display/table-toolbar/table-toolbar.component.d.ts +0 -11
- package/app/dialogs/_models/lib-dialog-size.model.d.ts +0 -6
- package/app/dialogs/_utils/app-lib-light-block-scroll-strategy.d.ts +0 -12
- package/app/dialogs/_utils/lib-dialog-panel-classes.d.ts +0 -3
- package/app/dialogs/app-dialog/app-dialog.component.d.ts +0 -71
- package/app/dialogs/app-dialog/dialog-footer.directive.d.ts +0 -6
- package/app/dialogs/confirm-dialog/confirm-dialog-data.model.d.ts +0 -13
- package/app/dialogs/confirm-dialog/confirm-dialog.component.d.ts +0 -20
- package/app/dialogs/confirm-dialog/confirm-dialog.service.d.ts +0 -17
- package/app/dialogs/index.d.ts +0 -14
- package/app/dialogs/loading-dialog/loading-dialog-data.model.d.ts +0 -7
- package/app/dialogs/loading-dialog/loading-dialog.component.d.ts +0 -9
- package/app/dialogs/loading-dialog/loading-dialog.service.d.ts +0 -15
- package/app/dialogs/toast/toast-host.component.d.ts +0 -13
- package/app/dialogs/toast/toast.models.d.ts +0 -26
- package/app/dialogs/toast/toast.service.d.ts +0 -17
- package/app/fields/checkbox-fields/_base/boolean-field.directive.d.ts +0 -42
- package/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.d.ts +0 -8
- package/app/fields/checkbox-fields/index.d.ts +0 -3
- package/app/fields/checkbox-fields/switch-field/switch-field.component.d.ts +0 -8
- package/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.d.ts +0 -62
- package/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.d.ts +0 -40
- package/app/fields/dropdown-fields/_base/dropdown-option-field.base.d.ts +0 -47
- package/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.d.ts +0 -18
- package/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.d.ts +0 -13
- package/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.d.ts +0 -7
- package/app/fields/dropdown-fields/_models/index.d.ts +0 -4
- package/app/fields/dropdown-fields/_models/select-option.model.d.ts +0 -5
- package/app/fields/dropdown-fields/_models/select-pagination.model.d.ts +0 -6
- package/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.d.ts +0 -84
- package/app/fields/dropdown-fields/index.d.ts +0 -7
- package/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.d.ts +0 -49
- package/app/fields/dropdown-fields/select-field/select-field.component.d.ts +0 -54
- package/app/fields/input-fields/_base/base-field.component.d.ts +0 -60
- package/app/fields/input-fields/_base/base-field.directive.d.ts +0 -102
- package/app/fields/input-fields/_base/masked-text-field.base.d.ts +0 -34
- package/app/fields/input-fields/_base/ng-control-field.directive.d.ts +0 -43
- package/app/fields/input-fields/_models/field-common-inputs.model.d.ts +0 -49
- package/app/fields/input-fields/_models/index.d.ts +0 -1
- package/app/fields/input-fields/_utils/mask-complete.validators.d.ts +0 -18
- package/app/fields/input-fields/_utils/mask-format.utils.d.ts +0 -13
- package/app/fields/input-fields/cep-field/cep-field.component.d.ts +0 -12
- package/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.d.ts +0 -20
- package/app/fields/input-fields/date-field/date-field.component.d.ts +0 -30
- package/app/fields/input-fields/decimal-field/decimal-field.component.d.ts +0 -17
- package/app/fields/input-fields/index.d.ts +0 -22
- package/app/fields/input-fields/input-mask-field/input-mask-field.component.d.ts +0 -16
- package/app/fields/input-fields/integer-field/integer-field.component.d.ts +0 -17
- package/app/fields/input-fields/password-field/password-field.component.d.ts +0 -30
- package/app/fields/input-fields/phone-field/phone-field.component.d.ts +0 -22
- package/app/fields/input-fields/text-field/text-field.component.d.ts +0 -16
- package/app/fields/input-fields/textarea-field/textarea-field.component.d.ts +0 -31
- package/app/form-layout/_models/form-layout.model.d.ts +0 -41
- package/app/form-layout/_models/form-tabs.model.d.ts +0 -1
- package/app/form-layout/_models/index.d.ts +0 -3
- package/app/form-layout/_models/validation-summary.model.d.ts +0 -8
- package/app/form-layout/form-actions/form-actions.component.d.ts +0 -21
- package/app/form-layout/form-col/form-col.component.d.ts +0 -25
- package/app/form-layout/form-group/form-group.component.d.ts +0 -125
- package/app/form-layout/form-group/form-path.utils.d.ts +0 -16
- package/app/form-layout/form-group/form-root-invalid-ui-refresh.util.d.ts +0 -8
- package/app/form-layout/form-row/form-row.component.d.ts +0 -14
- package/app/form-layout/form-section/form-section.component.d.ts +0 -13
- package/app/form-layout/form-tab/form-tab.component.d.ts +0 -32
- package/app/form-layout/form-tabs/form-tabs.component.d.ts +0 -44
- package/app/form-layout/index.d.ts +0 -14
- package/app/form-layout/layout-stack/layout-stack.component.d.ts +0 -25
- package/app/form-layout/validation-summary/validation-summary.component.d.ts +0 -105
- package/app/loading/skeleton-loading/index.d.ts +0 -6
- package/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.d.ts +0 -15
- package/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.d.ts +0 -10
- package/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.d.ts +0 -21
- package/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.d.ts +0 -17
- package/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.d.ts +0 -16
- package/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.d.ts +0 -17
- package/app/menus/_models/drawer-side.model.d.ts +0 -6
- package/app/menus/_models/drawer-size.model.d.ts +0 -6
- package/app/menus/_models/menu-dropdown-placement.model.d.ts +0 -10
- package/app/menus/_models/menu-item.model.d.ts +0 -47
- package/app/menus/_utils/menu-connected-positions.util.d.ts +0 -4
- package/app/menus/_utils/menu-rows.util.d.ts +0 -22
- package/app/menus/_utils/submenu-connected-positions.util.d.ts +0 -5
- package/app/menus/action-menu/action-menu.component.d.ts +0 -24
- package/app/menus/context-menu/context-menu.component.d.ts +0 -32
- package/app/menus/drawer/drawer.component.d.ts +0 -38
- package/app/menus/dropdown-menu/dropdown-menu.component.d.ts +0 -33
- package/app/menus/index.d.ts +0 -11
- package/app/menus/menu-divider/menu-divider.component.d.ts +0 -8
- package/app/menus/menu-group/menu-group.component.d.ts +0 -13
- package/app/menus/menu-list/menu-list.component.d.ts +0 -77
- package/app/overlay/_models/overlay-placement.model.d.ts +0 -9
- package/app/overlay/_utils/anchored-overlay-positions.util.d.ts +0 -9
- package/app/overlay/anchored-overlay/anchored-overlay.component.d.ts +0 -51
- package/app/overlay/index.d.ts +0 -20
- package/app/overlay/popover/popover-body-template.directive.d.ts +0 -7
- package/app/overlay/popover/popover-footer-template.directive.d.ts +0 -7
- package/app/overlay/popover/popover-trigger.directive.d.ts +0 -6
- package/app/overlay/popover/popover.component.d.ts +0 -38
- package/app/overlay/tooltip/tooltip-panel-template.directive.d.ts +0 -10
- package/app/overlay/tooltip/tooltip.component.d.ts +0 -40
- package/app/theme/app-theme.service.d.ts +0 -25
- package/app/theme/index.d.ts +0 -1
- package/esm2022/app/_utils/date-pt-br.utils.mjs +0 -82
- package/esm2022/app/_utils/decimal-br.utils.mjs +0 -154
- package/esm2022/app/_utils/estados-br.data.mjs +0 -37
- package/esm2022/app/_utils/integer-br.utils.mjs +0 -48
- package/esm2022/app/_utils/integer-value.utils.mjs +0 -19
- package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +0 -97
- package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +0 -2
- package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +0 -29
- package/esm2022/app/app-shell/app-shell.component.mjs +0 -105
- package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +0 -18
- package/esm2022/app/app-shell/index.mjs +0 -19
- package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +0 -23
- package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +0 -36
- package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +0 -84
- package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +0 -9
- package/esm2022/app/app-shell/topbar/topbar.component.mjs +0 -14
- package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +0 -52
- package/esm2022/app/buttons/base-button/base-button.component.mjs +0 -97
- package/esm2022/app/buttons/index.mjs +0 -2
- package/esm2022/app/data-display/_models/card-item-view.model.mjs +0 -2
- package/esm2022/app/data-display/_models/data-display.models.mjs +0 -2
- package/esm2022/app/data-display/_models/data-grid-column.model.mjs +0 -2
- package/esm2022/app/data-display/_models/index.mjs +0 -2
- package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +0 -124
- package/esm2022/app/data-display/card-list/card-list.component.mjs +0 -208
- package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +0 -25
- package/esm2022/app/data-display/data-card/data-card.component.mjs +0 -40
- package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +0 -41
- package/esm2022/app/data-display/data-grid/data-grid.component.mjs +0 -253
- package/esm2022/app/data-display/data-list/data-list.component.mjs +0 -40
- package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +0 -12
- package/esm2022/app/data-display/details-field/details-field.component.mjs +0 -21
- package/esm2022/app/data-display/details-view/details-view.component.mjs +0 -44
- package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +0 -19
- package/esm2022/app/data-display/empty-state/empty-state.component.mjs +0 -30
- package/esm2022/app/data-display/index.mjs +0 -19
- package/esm2022/app/data-display/list-item/list-item.component.mjs +0 -59
- package/esm2022/app/data-display/stat-card/stat-card.component.mjs +0 -59
- package/esm2022/app/data-display/status-badge/status-badge.component.mjs +0 -41
- package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +0 -31
- package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +0 -22
- package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +0 -8
- package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +0 -22
- package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +0 -6
- package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +0 -200
- package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +0 -15
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +0 -2
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +0 -36
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +0 -47
- package/esm2022/app/dialogs/index.mjs +0 -12
- package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +0 -2
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +0 -19
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +0 -38
- package/esm2022/app/dialogs/toast/toast-host.component.mjs +0 -65
- package/esm2022/app/dialogs/toast/toast.models.mjs +0 -2
- package/esm2022/app/dialogs/toast/toast.service.mjs +0 -76
- package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +0 -158
- package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +0 -36
- package/esm2022/app/fields/checkbox-fields/index.mjs +0 -4
- package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +0 -35
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +0 -117
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +0 -152
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +0 -149
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +0 -32
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/index.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +0 -520
- package/esm2022/app/fields/dropdown-fields/index.mjs +0 -7
- package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +0 -379
- package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +0 -359
- package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +0 -151
- package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +0 -224
- package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +0 -135
- package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +0 -127
- package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +0 -2
- package/esm2022/app/fields/input-fields/_models/index.mjs +0 -2
- package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +0 -61
- package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +0 -40
- package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +0 -48
- package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +0 -61
- package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +0 -147
- package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +0 -166
- package/esm2022/app/fields/input-fields/index.mjs +0 -22
- package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +0 -52
- package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +0 -143
- package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +0 -130
- package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +0 -66
- package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +0 -90
- package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +0 -125
- package/esm2022/app/form-layout/_models/form-layout.model.mjs +0 -48
- package/esm2022/app/form-layout/_models/form-tabs.model.mjs +0 -2
- package/esm2022/app/form-layout/_models/index.mjs +0 -2
- package/esm2022/app/form-layout/_models/validation-summary.model.mjs +0 -2
- package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +0 -55
- package/esm2022/app/form-layout/form-col/form-col.component.mjs +0 -76
- package/esm2022/app/form-layout/form-group/form-group.component.mjs +0 -358
- package/esm2022/app/form-layout/form-group/form-path.utils.mjs +0 -65
- package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +0 -54
- package/esm2022/app/form-layout/form-row/form-row.component.mjs +0 -49
- package/esm2022/app/form-layout/form-section/form-section.component.mjs +0 -43
- package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +0 -67
- package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +0 -126
- package/esm2022/app/form-layout/index.mjs +0 -14
- package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +0 -56
- package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +0 -343
- package/esm2022/app/loading/skeleton-loading/index.mjs +0 -7
- package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +0 -43
- package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +0 -23
- package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +0 -34
- package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +0 -38
- package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +0 -37
- package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +0 -45
- package/esm2022/app/menus/_models/drawer-side.model.mjs +0 -8
- package/esm2022/app/menus/_models/drawer-size.model.mjs +0 -8
- package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +0 -12
- package/esm2022/app/menus/_models/menu-item.model.mjs +0 -6
- package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +0 -41
- package/esm2022/app/menus/_utils/menu-rows.util.mjs +0 -39
- package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +0 -23
- package/esm2022/app/menus/action-menu/action-menu.component.mjs +0 -48
- package/esm2022/app/menus/context-menu/context-menu.component.mjs +0 -112
- package/esm2022/app/menus/drawer/drawer.component.mjs +0 -142
- package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +0 -99
- package/esm2022/app/menus/index.mjs +0 -11
- package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +0 -14
- package/esm2022/app/menus/menu-group/menu-group.component.mjs +0 -32
- package/esm2022/app/menus/menu-list/menu-list.component.mjs +0 -399
- package/esm2022/app/overlay/_models/overlay-placement.model.mjs +0 -11
- package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +0 -84
- package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +0 -121
- package/esm2022/app/overlay/index.mjs +0 -21
- package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +0 -17
- package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +0 -17
- package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +0 -15
- package/esm2022/app/overlay/popover/popover.component.mjs +0 -93
- package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +0 -20
- package/esm2022/app/overlay/tooltip/tooltip.component.mjs +0 -118
- package/esm2022/app/theme/app-theme.service.mjs +0 -49
- package/esm2022/app/theme/index.mjs +0 -2
- package/esm2022/structra-public-api.mjs +0 -18
- package/esm2022/structra-ui.mjs +0 -5
- package/esm2022/structra-version.mjs +0 -3
- package/fesm2022/structra-ui.mjs +0 -8971
- package/fesm2022/structra-ui.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/structra-public-api.d.ts +0 -17
- package/structra-version.d.ts +0 -2
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, Input, Output, inject, } from '@angular/core';
|
|
3
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { DataGridComponent } from '../data-grid/data-grid.component';
|
|
5
|
-
import { CardListComponent } from '../card-list/card-list.component';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
/** Limite de largura para tratar como “mobile” na escolha grid vs card. */
|
|
8
|
-
export const ADAPTIVE_DATA_VIEW_MOBILE_QUERY = '(max-width: 767.98px)';
|
|
9
|
-
/**
|
|
10
|
-
* Escolhe **um** de `app-data-grid` ou `app-card-list` conforme breakpoint e preferências.
|
|
11
|
-
* Nunca renderiza os dois em simultâneo.
|
|
12
|
-
*/
|
|
13
|
-
export class AdaptiveDataViewComponent {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.bp = inject(BreakpointObserver);
|
|
16
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
17
|
-
this.destroyRef = inject(DestroyRef);
|
|
18
|
-
this.pageSize = 15;
|
|
19
|
-
this.gridHeight = 'min(28rem, 50vh)';
|
|
20
|
-
this.cardScrollMaxHeight = 'min(28rem, 50vh)';
|
|
21
|
-
this.emptyMessageGrid = 'Sem registros para mostrar.';
|
|
22
|
-
this.emptyMessageCard = 'Sem itens para mostrar.';
|
|
23
|
-
this.pagination = true;
|
|
24
|
-
this.showActionsColumn = true;
|
|
25
|
-
this.showCardItemActions = true;
|
|
26
|
-
this.scrollBatchSize = 10;
|
|
27
|
-
this.showCardFooter = false;
|
|
28
|
-
/** Estado de carregamento reposto no grid ou na lista conforme a vista ativa. */
|
|
29
|
-
this.loading = false;
|
|
30
|
-
/**
|
|
31
|
-
* Mostra uma linha de contagem **abaixo** da grade ou da lista (incluindo paginação interna).
|
|
32
|
-
* Texto padrão em português; use `{count}` como marcador do número de linhas em `items`.
|
|
33
|
-
*/
|
|
34
|
-
this.showResultCount = true;
|
|
35
|
-
this.resultCountTemplate = '{count} registro(s)';
|
|
36
|
-
/** Vista quando `ADAPTIVE_DATA_VIEW_MOBILE_QUERY` corresponde. Por padrão `card`. */
|
|
37
|
-
this.mobileView = 'card';
|
|
38
|
-
/** Vista quando a tela é maior. Por padrão `grid`. */
|
|
39
|
-
this.desktopView = 'grid';
|
|
40
|
-
this.edit = new EventEmitter();
|
|
41
|
-
this.remove = new EventEmitter();
|
|
42
|
-
this.loadMore = new EventEmitter();
|
|
43
|
-
/** Corresponde ao breakpoint mobile. */
|
|
44
|
-
this.isMobileLayout = false;
|
|
45
|
-
}
|
|
46
|
-
ngOnInit() {
|
|
47
|
-
this.bp
|
|
48
|
-
.observe([ADAPTIVE_DATA_VIEW_MOBILE_QUERY])
|
|
49
|
-
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
50
|
-
.subscribe((state) => {
|
|
51
|
-
this.isMobileLayout = state.matches;
|
|
52
|
-
this.cdr.markForCheck();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
get effectiveKind() {
|
|
56
|
-
return this.isMobileLayout ? this.mobileView : this.desktopView;
|
|
57
|
-
}
|
|
58
|
-
get showGrid() {
|
|
59
|
-
return this.effectiveKind === 'grid';
|
|
60
|
-
}
|
|
61
|
-
get showCard() {
|
|
62
|
-
return this.effectiveKind === 'card';
|
|
63
|
-
}
|
|
64
|
-
get resultCountDisplay() {
|
|
65
|
-
const tpl = (this.resultCountTemplate ?? '').trim();
|
|
66
|
-
if (!tpl) {
|
|
67
|
-
return '';
|
|
68
|
-
}
|
|
69
|
-
const n = this.items?.length ?? 0;
|
|
70
|
-
return tpl.replaceAll('{count}', String(n));
|
|
71
|
-
}
|
|
72
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AdaptiveDataViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
73
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AdaptiveDataViewComponent, isStandalone: true, selector: "app-adaptive-data-view", inputs: { items: "items", gridColumns: "gridColumns", mapItem: "mapItem", pageSize: "pageSize", gridHeight: "gridHeight", cardScrollMaxHeight: "cardScrollMaxHeight", emptyMessageGrid: "emptyMessageGrid", emptyMessageCard: "emptyMessageCard", pagination: "pagination", showActionsColumn: "showActionsColumn", showCardItemActions: "showCardItemActions", scrollBatchSize: "scrollBatchSize", showCardFooter: "showCardFooter", loading: "loading", showResultCount: "showResultCount", resultCountTemplate: "resultCountTemplate", mobileView: "mobileView", desktopView: "desktopView" }, outputs: { edit: "edit", remove: "remove", loadMore: "loadMore" }, ngImport: i0, template: "<div class=\"adaptive-data-view\">\r\n <div class=\"adaptive-data-view__main\">\r\n @if (showGrid) {\r\n <app-data-grid\r\n [rows]=\"items\"\r\n [columns]=\"gridColumns\"\r\n [pageSize]=\"pageSize\"\r\n [pagination]=\"pagination\"\r\n [height]=\"gridHeight\"\r\n [emptyMessage]=\"emptyMessageGrid\"\r\n [showActionsColumn]=\"showActionsColumn\"\r\n [loading]=\"loading\"\r\n (edit)=\"edit.emit($event)\"\r\n (remove)=\"remove.emit($event)\"\r\n />\r\n }\r\n @if (showCard) {\r\n <app-card-list\r\n [items]=\"items\"\r\n [mapItem]=\"mapItem\"\r\n [scrollBatchSize]=\"scrollBatchSize\"\r\n [showItemActions]=\"showCardItemActions\"\r\n [showFooter]=\"showCardFooter\"\r\n [scrollMaxHeight]=\"cardScrollMaxHeight\"\r\n [emptyMessage]=\"emptyMessageCard\"\r\n [loading]=\"loading\"\r\n (edit)=\"edit.emit($event)\"\r\n (remove)=\"remove.emit($event)\"\r\n (loadMore)=\"loadMore.emit()\"\r\n />\r\n }\r\n </div>\r\n @if (showResultCount && resultCountDisplay) {\r\n <div class=\"adaptive-data-view__result-count\" aria-live=\"polite\">\r\n {{ resultCountDisplay }}\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.adaptive-data-view{display:flex;flex-direction:column;align-items:stretch;gap:.5rem;width:100%;min-width:0}.adaptive-data-view__main{display:block;flex:1 1 auto;min-width:0;min-height:0}.adaptive-data-view__result-count{flex:0 0 auto;width:100%;box-sizing:border-box;font-size:.875rem;line-height:1.35;color:#525252}\n"], dependencies: [{ kind: "component", type: DataGridComponent, selector: "app-data-grid", inputs: ["rows", "columns", "pageSize", "loading", "initialPaginationPage", "height", "emptyMessage", "pagination", "showActionsColumn"], outputs: ["edit", "remove", "selectionChange", "paginationChanged"] }, { kind: "component", type: CardListComponent, selector: "app-card-list", inputs: ["items", "loading", "loadingMore", "emptyMessage", "variant", "mapItem", "showItemActions", "trackByProp", "dataMode", "scrollBatchSize", "scrollLoadThresholdPx", "showFooter", "scrollMaxHeight", "totalCountRemote", "hasNextPage"], outputs: ["loadMore", "edit", "remove"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
74
|
-
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AdaptiveDataViewComponent, decorators: [{
|
|
76
|
-
type: Component,
|
|
77
|
-
args: [{ selector: 'app-adaptive-data-view', standalone: true, imports: [DataGridComponent, CardListComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"adaptive-data-view\">\r\n <div class=\"adaptive-data-view__main\">\r\n @if (showGrid) {\r\n <app-data-grid\r\n [rows]=\"items\"\r\n [columns]=\"gridColumns\"\r\n [pageSize]=\"pageSize\"\r\n [pagination]=\"pagination\"\r\n [height]=\"gridHeight\"\r\n [emptyMessage]=\"emptyMessageGrid\"\r\n [showActionsColumn]=\"showActionsColumn\"\r\n [loading]=\"loading\"\r\n (edit)=\"edit.emit($event)\"\r\n (remove)=\"remove.emit($event)\"\r\n />\r\n }\r\n @if (showCard) {\r\n <app-card-list\r\n [items]=\"items\"\r\n [mapItem]=\"mapItem\"\r\n [scrollBatchSize]=\"scrollBatchSize\"\r\n [showItemActions]=\"showCardItemActions\"\r\n [showFooter]=\"showCardFooter\"\r\n [scrollMaxHeight]=\"cardScrollMaxHeight\"\r\n [emptyMessage]=\"emptyMessageCard\"\r\n [loading]=\"loading\"\r\n (edit)=\"edit.emit($event)\"\r\n (remove)=\"remove.emit($event)\"\r\n (loadMore)=\"loadMore.emit()\"\r\n />\r\n }\r\n </div>\r\n @if (showResultCount && resultCountDisplay) {\r\n <div class=\"adaptive-data-view__result-count\" aria-live=\"polite\">\r\n {{ resultCountDisplay }}\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.adaptive-data-view{display:flex;flex-direction:column;align-items:stretch;gap:.5rem;width:100%;min-width:0}.adaptive-data-view__main{display:block;flex:1 1 auto;min-width:0;min-height:0}.adaptive-data-view__result-count{flex:0 0 auto;width:100%;box-sizing:border-box;font-size:.875rem;line-height:1.35;color:#525252}\n"] }]
|
|
78
|
-
}], propDecorators: { items: [{
|
|
79
|
-
type: Input,
|
|
80
|
-
args: [{ required: true }]
|
|
81
|
-
}], gridColumns: [{
|
|
82
|
-
type: Input,
|
|
83
|
-
args: [{ required: true }]
|
|
84
|
-
}], mapItem: [{
|
|
85
|
-
type: Input,
|
|
86
|
-
args: [{ required: true }]
|
|
87
|
-
}], pageSize: [{
|
|
88
|
-
type: Input
|
|
89
|
-
}], gridHeight: [{
|
|
90
|
-
type: Input
|
|
91
|
-
}], cardScrollMaxHeight: [{
|
|
92
|
-
type: Input
|
|
93
|
-
}], emptyMessageGrid: [{
|
|
94
|
-
type: Input
|
|
95
|
-
}], emptyMessageCard: [{
|
|
96
|
-
type: Input
|
|
97
|
-
}], pagination: [{
|
|
98
|
-
type: Input
|
|
99
|
-
}], showActionsColumn: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}], showCardItemActions: [{
|
|
102
|
-
type: Input
|
|
103
|
-
}], scrollBatchSize: [{
|
|
104
|
-
type: Input
|
|
105
|
-
}], showCardFooter: [{
|
|
106
|
-
type: Input
|
|
107
|
-
}], loading: [{
|
|
108
|
-
type: Input
|
|
109
|
-
}], showResultCount: [{
|
|
110
|
-
type: Input
|
|
111
|
-
}], resultCountTemplate: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], mobileView: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], desktopView: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], edit: [{
|
|
118
|
-
type: Output
|
|
119
|
-
}], remove: [{
|
|
120
|
-
type: Output
|
|
121
|
-
}], loadMore: [{
|
|
122
|
-
type: Output
|
|
123
|
-
}] } });
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1kaXNwbGF5L2FkYXB0aXZlLWRhdGEtdmlldy9hZGFwdGl2ZS1kYXRhLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLWRpc3BsYXkvYWRhcHRpdmUtZGF0YS12aWV3L2FkYXB0aXZlLWRhdGEtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFJckUsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLHVCQUF1QixDQUFDO0FBSXZFOzs7R0FHRztBQVNILE1BQU0sT0FBTyx5QkFBeUI7SUFSdEM7UUFTbUIsT0FBRSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTXhDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxlQUFVLEdBQWtCLGtCQUFrQixDQUFDO1FBQy9DLHdCQUFtQixHQUFrQixrQkFBa0IsQ0FBQztR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Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFYSxJQUFJO3NCQUF0QixNQUFNO2dCQUNZLE1BQU07c0JBQXhCLE1BQU07Z0JBQ1ksUUFBUTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0YUdyaWRDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLWdyaWQvZGF0YS1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJkTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2NhcmQtbGlzdC9jYXJkLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgRGF0YUdyaWRDb2x1bW4gfSBmcm9tICcuLi9fbW9kZWxzL2RhdGEtZ3JpZC1jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBDYXJkTGlzdE1hcEZuIH0gZnJvbSAnLi4vX21vZGVscy9jYXJkLWl0ZW0tdmlldy5tb2RlbCc7XG5cbi8qKiBMaW1pdGUgZGUgbGFyZ3VyYSBwYXJhIHRyYXRhciBjb21vIOKAnG1vYmlsZeKAnSBuYSBlc2NvbGhhIGdyaWQgdnMgY2FyZC4gKi9cbmV4cG9ydCBjb25zdCBBREFQVElWRV9EQVRBX1ZJRVdfTU9CSUxFX1FVRVJZID0gJyhtYXgtd2lkdGg6IDc2Ny45OHB4KSc7XG5cbmV4cG9ydCB0eXBlIEFkYXB0aXZlRGF0YVZpZXdNb2RlID0gJ2dyaWQnIHwgJ2NhcmQnO1xuXG4vKipcbiAqIEVzY29saGUgKip1bSoqIGRlIGBhcHAtZGF0YS1ncmlkYCBvdSBgYXBwLWNhcmQtbGlzdGAgY29uZm9ybWUgYnJlYWtwb2ludCBlIHByZWZlcsOqbmNpYXMuXG4gKiBOdW5jYSByZW5kZXJpemEgb3MgZG9pcyBlbSBzaW11bHTDom5lby5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFkYXB0aXZlLWRhdGEtdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtEYXRhR3JpZENvbXBvbmVudCwgQ2FyZExpc3RDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRhcHRpdmUtZGF0YS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FkYXB0aXZlLWRhdGEtdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBZGFwdGl2ZURhdGFWaWV3Q29tcG9uZW50PFQgPSB1bmtub3duPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnAgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaXRlbXMhOiBUW107XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGdyaWRDb2x1bW5zITogRGF0YUdyaWRDb2x1bW48VD5bXTtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbWFwSXRlbSE6IENhcmRMaXN0TWFwRm48VD47XG5cbiAgQElucHV0KCkgcGFnZVNpemUgPSAxNTtcbiAgQElucHV0KCkgZ3JpZEhlaWdodDogc3RyaW5nIHwgbnVsbCA9ICdtaW4oMjhyZW0sIDUwdmgpJztcbiAgQElucHV0KCkgY2FyZFNjcm9sbE1heEhlaWdodDogc3RyaW5nIHwgbnVsbCA9ICdtaW4oMjhyZW0sIDUwdmgpJztcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlR3JpZCA9ICdTZW0gcmVnaXN0cm9zIHBhcmEgbW9zdHJhci4nO1xuICBASW5wdXQoKSBlbXB0eU1lc3NhZ2VDYXJkID0gJ1NlbSBpdGVucyBwYXJhIG1vc3RyYXIuJztcbiAgQElucHV0KCkgcGFnaW5hdGlvbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBY3Rpb25zQ29sdW1uID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NhcmRJdGVtQWN0aW9ucyA9IHRydWU7XG4gIEBJbnB1dCgpIHNjcm9sbEJhdGNoU2l6ZSA9IDEwO1xuICBASW5wdXQoKSBzaG93Q2FyZEZvb3RlciA9IGZhbHNlO1xuICAvKiogRXN0YWRvIGRlIGNhcnJlZ2FtZW50byByZXBvc3RvIG5vIGdyaWQgb3UgbmEgbGlzdGEgY29uZm9ybWUgYSB2aXN0YSBhdGl2YS4gKi9cbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBNb3N0cmEgdW1hIGxpbmhhIGRlIGNvbnRhZ2VtICoqYWJhaXhvKiogZGEgZ3JhZGUgb3UgZGEgbGlzdGEgKGluY2x1aW5kbyBwYWdpbmHDp8OjbyBpbnRlcm5hKS5cbiAgICogVGV4dG8gcGFkcsOjbyBlbSBwb3J0dWd1w6pzOyB1c2UgYHtjb3VudH1gIGNvbW8gbWFyY2Fkb3IgZG8gbsO6bWVybyBkZSBsaW5oYXMgZW0gYGl0ZW1zYC5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dSZXN1bHRDb3VudCA9IHRydWU7XG4gIEBJbnB1dCgpIHJlc3VsdENvdW50VGVtcGxhdGUgPSAne2NvdW50fSByZWdpc3RybyhzKSc7XG5cbiAgLyoqIFZpc3RhIHF1YW5kbyBgQURBUFRJVkVfREFUQV9WSUVXX01PQklMRV9RVUVSWWAgY29ycmVzcG9uZGUuIFBvciBwYWRyw6NvIGBjYXJkYC4gKi9cbiAgQElucHV0KCkgbW9iaWxlVmlldzogQWRhcHRpdmVEYXRhVmlld01vZGUgPSAnY2FyZCc7XG4gIC8qKiBWaXN0YSBxdWFuZG8gYSB0ZWxhIMOpIG1haW9yLiBQb3IgcGFkcsOjbyBgZ3JpZGAuICovXG4gIEBJbnB1dCgpIGRlc2t0b3BWaWV3OiBBZGFwdGl2ZURhdGFWaWV3TW9kZSA9ICdncmlkJztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGxvYWRNb3JlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBDb3JyZXNwb25kZSBhbyBicmVha3BvaW50IG1vYmlsZS4gKi9cbiAgaXNNb2JpbGVMYXlvdXQgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmJwXG4gICAgICAub2JzZXJ2ZShbQURBUFRJVkVfREFUQV9WSUVXX01PQklMRV9RVUVSWV0pXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVMYXlvdXQgPSBzdGF0ZS5tYXRjaGVzO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZUtpbmQoKTogQWRhcHRpdmVEYXRhVmlld01vZGUge1xuICAgIHJldHVybiB0aGlzLmlzTW9iaWxlTGF5b3V0ID8gdGhpcy5tb2JpbGVWaWV3IDogdGhpcy5kZXNrdG9wVmlldztcbiAgfVxuXG4gIGdldCBzaG93R3JpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVLaW5kID09PSAnZ3JpZCc7XG4gIH1cblxuICBnZXQgc2hvd0NhcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWZmZWN0aXZlS2luZCA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IHJlc3VsdENvdW50RGlzcGxheSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRwbCA9ICh0aGlzLnJlc3VsdENvdW50VGVtcGxhdGUgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIXRwbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBuID0gdGhpcy5pdGVtcz8ubGVuZ3RoID8/IDA7XG4gICAgcmV0dXJuIHRwbC5yZXBsYWNlQWxsKCd7Y291bnR9JywgU3RyaW5nKG4pKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkYXB0aXZlLWRhdGEtdmlld1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJhZGFwdGl2ZS1kYXRhLXZpZXdfX21haW5cIj5cclxuICAgIEBpZiAoc2hvd0dyaWQpIHtcclxuICAgIDxhcHAtZGF0YS1ncmlkXHJcbiAgICAgIFtyb3dzXT1cIml0ZW1zXCJcclxuICAgICAgW2NvbHVtbnNdPVwiZ3JpZENvbHVtbnNcIlxyXG4gICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcclxuICAgICAgW2hlaWdodF09XCJncmlkSGVpZ2h0XCJcclxuICAgICAgW2VtcHR5TWVzc2FnZV09XCJlbXB0eU1lc3NhZ2VHcmlkXCJcclxuICAgICAgW3Nob3dBY3Rpb25zQ29sdW1uXT1cInNob3dBY3Rpb25zQ29sdW1uXCJcclxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgIChlZGl0KT1cImVkaXQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgKHJlbW92ZSk9XCJyZW1vdmUuZW1pdCgkZXZlbnQpXCJcclxuICAgIC8+XHJcbiAgICB9XHJcbiAgICBAaWYgKHNob3dDYXJkKSB7XHJcbiAgICA8YXBwLWNhcmQtbGlzdFxyXG4gICAgICBbaXRlbXNdPVwiaXRlbXNcIlxyXG4gICAgICBbbWFwSXRlbV09XCJtYXBJdGVtXCJcclxuICAgICAgW3Njcm9sbEJhdGNoU2l6ZV09XCJzY3JvbGxCYXRjaFNpemVcIlxyXG4gICAgICBbc2hvd0l0ZW1BY3Rpb25zXT1cInNob3dDYXJkSXRlbUFjdGlvbnNcIlxyXG4gICAgICBbc2hvd0Zvb3Rlcl09XCJzaG93Q2FyZEZvb3RlclwiXHJcbiAgICAgIFtzY3JvbGxNYXhIZWlnaHRdPVwiY2FyZFNjcm9sbE1heEhlaWdodFwiXHJcbiAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiZW1wdHlNZXNzYWdlQ2FyZFwiXHJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChyZW1vdmUpPVwicmVtb3ZlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgIChsb2FkTW9yZSk9XCJsb2FkTW9yZS5lbWl0KClcIlxyXG4gICAgLz5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICBAaWYgKHNob3dSZXN1bHRDb3VudCAmJiByZXN1bHRDb3VudERpc3BsYXkpIHtcclxuICA8ZGl2IGNsYXNzPVwiYWRhcHRpdmUtZGF0YS12aWV3X19yZXN1bHQtY291bnRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cclxuICAgIHt7IHJlc3VsdENvdW50RGlzcGxheSB9fVxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { NgStyle } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, booleanAttribute, inject, } from '@angular/core';
|
|
3
|
-
import { DataCardComponent } from '../data-card/data-card.component';
|
|
4
|
-
import { EmptyStateComponent } from '../empty-state/empty-state.component';
|
|
5
|
-
import { SkeletonCardComponent } from '../../loading/skeleton-loading';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class CardListComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
10
|
-
this.loading = false;
|
|
11
|
-
/**
|
|
12
|
-
* Com itens já visíveis: mostra **um** skeleton no fundo (próxima página remota)
|
|
13
|
-
* para não saltar o scroll nem ocupar altura de vários cartões. O carregamento inicial
|
|
14
|
-
* continua a usar só {@link loading} (lista vazia ou refresh completo com `loading` e sem `loadingMore`).
|
|
15
|
-
*/
|
|
16
|
-
this.loadingMore = false;
|
|
17
|
-
this.emptyMessage = 'Sem itens para mostrar.';
|
|
18
|
-
this.variant = 'default';
|
|
19
|
-
this.showItemActions = true;
|
|
20
|
-
this.trackByProp = 'id';
|
|
21
|
-
this.dataMode = 'memory';
|
|
22
|
-
/** Em modo `memory`: quantos itens revelar por cada passo de scroll. Por omissão `10`. */
|
|
23
|
-
this.scrollBatchSize = 10;
|
|
24
|
-
this.scrollLoadThresholdPx = 80;
|
|
25
|
-
/** Mostra o rodapé com o resumo (“X de Y”) e dica. Por omissão `true`; com `false` oculta o footer. */
|
|
26
|
-
this.showFooter = true;
|
|
27
|
-
this.scrollMaxHeight = 'min(28rem, 50vh)';
|
|
28
|
-
/**
|
|
29
|
-
* Modo **remote**: total de registros no servidor (ex.: COUNT SQL), para o texto “X de Y”.
|
|
30
|
-
* Se `null`, usa `items.length`.
|
|
31
|
-
*/
|
|
32
|
-
this.totalCountRemote = null;
|
|
33
|
-
/** Modo **remote**: existe página seguinte para pedir ao backend. */
|
|
34
|
-
this.hasNextPage = false;
|
|
35
|
-
/** Modo **remote**: pedido de mais dados (próxima página). */
|
|
36
|
-
this.loadMore = new EventEmitter();
|
|
37
|
-
this.edit = new EventEmitter();
|
|
38
|
-
this.remove = new EventEmitter();
|
|
39
|
-
/** Modo memory: quantos cartões renderizar (fatia inicial = scrollBatchSize). */
|
|
40
|
-
this.visibleCount = 0;
|
|
41
|
-
this.loadMorePending = false;
|
|
42
|
-
this.trackFn = (index, item) => {
|
|
43
|
-
if (item != null && typeof item === 'object') {
|
|
44
|
-
const key = this.trackByProp;
|
|
45
|
-
if (key in item) {
|
|
46
|
-
return item[key];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return index;
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
/** Skeleton que ocupa a lista inteira (carregamento inicial / refresh com `loading`). */
|
|
53
|
-
get showFullSkeleton() {
|
|
54
|
-
return this.loading && !this.loadingMore;
|
|
55
|
-
}
|
|
56
|
-
ngOnChanges(changes) {
|
|
57
|
-
if (changes['items']) {
|
|
58
|
-
this.loadMorePending = false;
|
|
59
|
-
}
|
|
60
|
-
if (changes['items'] ||
|
|
61
|
-
changes['dataMode'] ||
|
|
62
|
-
changes['scrollBatchSize']) {
|
|
63
|
-
this.resetVisibleWindow();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
get totalItemCount() {
|
|
67
|
-
return this.items?.length ?? 0;
|
|
68
|
-
}
|
|
69
|
-
/** Total para o rodapé “X de Y”. */
|
|
70
|
-
get totalForStatus() {
|
|
71
|
-
if (this.dataMode === 'remote' && this.totalCountRemote != null) {
|
|
72
|
-
return this.totalCountRemote;
|
|
73
|
-
}
|
|
74
|
-
return this.totalItemCount;
|
|
75
|
-
}
|
|
76
|
-
get visibleItems() {
|
|
77
|
-
const list = this.items ?? [];
|
|
78
|
-
if (this.dataMode === 'remote') {
|
|
79
|
-
return list;
|
|
80
|
-
}
|
|
81
|
-
return list.slice(0, this.visibleCount);
|
|
82
|
-
}
|
|
83
|
-
get scrollStatusLabel() {
|
|
84
|
-
if (this.totalForStatus === 0) {
|
|
85
|
-
return '';
|
|
86
|
-
}
|
|
87
|
-
if (this.dataMode === 'remote') {
|
|
88
|
-
const loaded = this.totalItemCount;
|
|
89
|
-
return `${loaded} de ${this.totalForStatus} registro(s)`;
|
|
90
|
-
}
|
|
91
|
-
const shown = Math.min(this.visibleCount, this.totalItemCount);
|
|
92
|
-
return `${shown} de ${this.totalForStatus} registro(s)`;
|
|
93
|
-
}
|
|
94
|
-
get scrollAreaStyle() {
|
|
95
|
-
const h = this.scrollMaxHeight;
|
|
96
|
-
if (h === null || h === undefined || h.trim() === '') {
|
|
97
|
-
return {};
|
|
98
|
-
}
|
|
99
|
-
// Carregamento inicial (skeleton em lista vazia): sem barra de scroll; só com itens reais
|
|
100
|
-
// é que `auto` entra em efeito se o conteúdo exceder `max-height`.
|
|
101
|
-
return {
|
|
102
|
-
'max-height': h,
|
|
103
|
-
'overflow-y': this.showFullSkeleton ? 'hidden' : 'auto',
|
|
104
|
-
'overflow-x': 'hidden',
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/** Há mais linhas para mostrar (memória) ou para pedir à API (remote). */
|
|
108
|
-
get hasMoreToReveal() {
|
|
109
|
-
if (this.dataMode === 'remote') {
|
|
110
|
-
return this.hasNextPage;
|
|
111
|
-
}
|
|
112
|
-
return (this.visibleCount < this.totalItemCount && this.totalItemCount > 0);
|
|
113
|
-
}
|
|
114
|
-
viewFor(item) {
|
|
115
|
-
return this.mapItem(item);
|
|
116
|
-
}
|
|
117
|
-
skeletonCardIndices() {
|
|
118
|
-
const n = Math.min(8, Math.max(3, this.scrollBatchSize));
|
|
119
|
-
return Array.from({ length: n }, (_, i) => i);
|
|
120
|
-
}
|
|
121
|
-
/** Um único cartão skeleton no fundo durante `loadingMore` (mantém o scroll estável). */
|
|
122
|
-
skeletonTailIndices() {
|
|
123
|
-
return [0];
|
|
124
|
-
}
|
|
125
|
-
onScroll(ev) {
|
|
126
|
-
const el = ev.target;
|
|
127
|
-
const remaining = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
128
|
-
if (remaining > this.scrollLoadThresholdPx) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
if (this.dataMode === 'remote') {
|
|
132
|
-
this.requestRemotePage();
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
this.loadMoreMemoryChunk();
|
|
136
|
-
}
|
|
137
|
-
requestRemotePage() {
|
|
138
|
-
if (!this.hasNextPage || this.loading || this.loadingMore || this.loadMorePending) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
this.loadMorePending = true;
|
|
142
|
-
this.loadMore.emit();
|
|
143
|
-
this.cdr.markForCheck();
|
|
144
|
-
}
|
|
145
|
-
loadMoreMemoryChunk() {
|
|
146
|
-
if (this.visibleCount >= this.totalItemCount) {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
this.visibleCount = Math.min(this.visibleCount + this.scrollBatchSize, this.totalItemCount);
|
|
150
|
-
this.cdr.markForCheck();
|
|
151
|
-
}
|
|
152
|
-
resetVisibleWindow() {
|
|
153
|
-
if (this.dataMode === 'remote') {
|
|
154
|
-
this.visibleCount = this.totalItemCount;
|
|
155
|
-
this.cdr.markForCheck();
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
const total = this.totalItemCount;
|
|
159
|
-
this.visibleCount = Math.min(this.scrollBatchSize, total);
|
|
160
|
-
this.cdr.markForCheck();
|
|
161
|
-
}
|
|
162
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
163
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CardListComponent, isStandalone: true, selector: "app-card-list", inputs: { items: "items", loading: "loading", loadingMore: ["loadingMore", "loadingMore", booleanAttribute], emptyMessage: "emptyMessage", variant: "variant", mapItem: "mapItem", showItemActions: "showItemActions", trackByProp: "trackByProp", dataMode: "dataMode", scrollBatchSize: "scrollBatchSize", scrollLoadThresholdPx: "scrollLoadThresholdPx", showFooter: "showFooter", scrollMaxHeight: "scrollMaxHeight", totalCountRemote: "totalCountRemote", hasNextPage: "hasNextPage" }, outputs: { loadMore: "loadMore", edit: "edit", remove: "remove" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card-list\" [attr.data-variant]=\"variant\">\r\n @if (showFullSkeleton) {\r\n <div class=\"card-list__body\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n <span class=\"card-list__visually-hidden\">A carregar lista\u2026</span>\r\n <div class=\"card-list__scroll\" [ngStyle]=\"scrollAreaStyle\">\r\n <div class=\"card-list__stack\">\r\n @for (_ of skeletonCardIndices(); track $index) {\r\n <app-skeleton-card [showActions]=\"showItemActions\" />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!showFullSkeleton && totalItemCount === 0 && !loadingMore) {\r\n <app-empty-state [message]=\"emptyMessage\" />\r\n }\r\n\r\n @if (!showFullSkeleton && totalItemCount > 0) {\r\n <div class=\"card-list__body\">\r\n <div class=\"card-list__scroll\" [ngStyle]=\"scrollAreaStyle\" (scroll)=\"onScroll($event)\"\r\n [attr.aria-busy]=\"loadingMore ? true : null\">\r\n <div class=\"card-list__stack\">\r\n @for (item of visibleItems; track trackFn($index, item)) {\r\n <app-data-card [title]=\"viewFor(item).title\" [subtitle]=\"viewFor(item).subtitle\"\r\n [avatarText]=\"viewFor(item).avatarText\" [variant]=\"variant\" [showActions]=\"showItemActions\"\r\n (edit)=\"edit.emit(item)\" (remove)=\"remove.emit(item)\" />\r\n }\r\n @if (loadingMore) {\r\n <span class=\"card-list__visually-hidden\">A carregar mais itens\u2026</span>\r\n @for (_ of skeletonTailIndices(); track $index) {\r\n <app-skeleton-card [showActions]=\"showItemActions\" />\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showFooter) {\r\n <div class=\"card-list__status\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"card-list__status-text\">{{ scrollStatusLabel }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.card-list{position:relative;width:100%;min-height:5rem;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));background:var(--app-color-surface, #fff);overflow:hidden}.card-list__body{display:flex;flex-direction:column;min-width:0}.card-list__scroll{min-height:0;box-sizing:border-box;-webkit-overflow-scrolling:touch}.card-list__stack{display:flex;flex-direction:column;gap:.75rem;padding:.75rem;box-sizing:border-box}.card-list__status{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.35rem .75rem;padding:.45rem .75rem .55rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .08));font-size:.8rem;color:var(--app-color-tab-inactive-text, #51667a);background:var(--app-color-background, #fafbfc)}.card-list__status-text{font-weight:500}.card-list__status-hint{font-size:.78rem;color:var(--app-color-text-muted, #6b8299)}.card-list__visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: DataCardComponent, selector: "app-data-card", inputs: ["title", "subtitle", "avatarText", "variant", "showActions"], outputs: ["edit", "remove"] }, { kind: "component", type: EmptyStateComponent, selector: "app-empty-state", inputs: ["message", "description", "iconClass", "variant", "embed"] }, { kind: "component", type: SkeletonCardComponent, selector: "app-skeleton-card", inputs: ["showActions", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
164
|
-
}
|
|
165
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CardListComponent, decorators: [{
|
|
166
|
-
type: Component,
|
|
167
|
-
args: [{ selector: 'app-card-list', standalone: true, imports: [NgStyle, DataCardComponent, EmptyStateComponent, SkeletonCardComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"card-list\" [attr.data-variant]=\"variant\">\r\n @if (showFullSkeleton) {\r\n <div class=\"card-list__body\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n <span class=\"card-list__visually-hidden\">A carregar lista\u2026</span>\r\n <div class=\"card-list__scroll\" [ngStyle]=\"scrollAreaStyle\">\r\n <div class=\"card-list__stack\">\r\n @for (_ of skeletonCardIndices(); track $index) {\r\n <app-skeleton-card [showActions]=\"showItemActions\" />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!showFullSkeleton && totalItemCount === 0 && !loadingMore) {\r\n <app-empty-state [message]=\"emptyMessage\" />\r\n }\r\n\r\n @if (!showFullSkeleton && totalItemCount > 0) {\r\n <div class=\"card-list__body\">\r\n <div class=\"card-list__scroll\" [ngStyle]=\"scrollAreaStyle\" (scroll)=\"onScroll($event)\"\r\n [attr.aria-busy]=\"loadingMore ? true : null\">\r\n <div class=\"card-list__stack\">\r\n @for (item of visibleItems; track trackFn($index, item)) {\r\n <app-data-card [title]=\"viewFor(item).title\" [subtitle]=\"viewFor(item).subtitle\"\r\n [avatarText]=\"viewFor(item).avatarText\" [variant]=\"variant\" [showActions]=\"showItemActions\"\r\n (edit)=\"edit.emit(item)\" (remove)=\"remove.emit(item)\" />\r\n }\r\n @if (loadingMore) {\r\n <span class=\"card-list__visually-hidden\">A carregar mais itens\u2026</span>\r\n @for (_ of skeletonTailIndices(); track $index) {\r\n <app-skeleton-card [showActions]=\"showItemActions\" />\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showFooter) {\r\n <div class=\"card-list__status\" role=\"status\" aria-live=\"polite\">\r\n <span class=\"card-list__status-text\">{{ scrollStatusLabel }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.card-list{position:relative;width:100%;min-height:5rem;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));background:var(--app-color-surface, #fff);overflow:hidden}.card-list__body{display:flex;flex-direction:column;min-width:0}.card-list__scroll{min-height:0;box-sizing:border-box;-webkit-overflow-scrolling:touch}.card-list__stack{display:flex;flex-direction:column;gap:.75rem;padding:.75rem;box-sizing:border-box}.card-list__status{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.35rem .75rem;padding:.45rem .75rem .55rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .08));font-size:.8rem;color:var(--app-color-tab-inactive-text, #51667a);background:var(--app-color-background, #fafbfc)}.card-list__status-text{font-weight:500}.card-list__status-hint{font-size:.78rem;color:var(--app-color-text-muted, #6b8299)}.card-list__visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
|
|
168
|
-
}], propDecorators: { items: [{
|
|
169
|
-
type: Input,
|
|
170
|
-
args: [{ required: true }]
|
|
171
|
-
}], loading: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], loadingMore: [{
|
|
174
|
-
type: Input,
|
|
175
|
-
args: [{ transform: booleanAttribute }]
|
|
176
|
-
}], emptyMessage: [{
|
|
177
|
-
type: Input
|
|
178
|
-
}], variant: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], mapItem: [{
|
|
181
|
-
type: Input,
|
|
182
|
-
args: [{ required: true }]
|
|
183
|
-
}], showItemActions: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], trackByProp: [{
|
|
186
|
-
type: Input
|
|
187
|
-
}], dataMode: [{
|
|
188
|
-
type: Input
|
|
189
|
-
}], scrollBatchSize: [{
|
|
190
|
-
type: Input
|
|
191
|
-
}], scrollLoadThresholdPx: [{
|
|
192
|
-
type: Input
|
|
193
|
-
}], showFooter: [{
|
|
194
|
-
type: Input
|
|
195
|
-
}], scrollMaxHeight: [{
|
|
196
|
-
type: Input
|
|
197
|
-
}], totalCountRemote: [{
|
|
198
|
-
type: Input
|
|
199
|
-
}], hasNextPage: [{
|
|
200
|
-
type: Input
|
|
201
|
-
}], loadMore: [{
|
|
202
|
-
type: Output
|
|
203
|
-
}], edit: [{
|
|
204
|
-
type: Output
|
|
205
|
-
}], remove: [{
|
|
206
|
-
type: Output
|
|
207
|
-
}] } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1kaXNwbGF5L2NhcmQtbGlzdC9jYXJkLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLWRpc3BsYXkvY2FyZC1saXN0L2NhcmQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLGdCQUFnQixFQUNoQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBbUJ2RSxNQUFNLE9BQU8saUJBQWlCO0lBUjlCO1FBU21CLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUd4QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCOzs7O1dBSUc7UUFDcUMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDbkQsaUJBQVksR0FBRyx5QkFBeUIsQ0FBQztRQUN6QyxZQUFPLEdBQWMsU0FBUyxDQUFDO1FBRS9CLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQXFCLElBQWUsQ0FBQztRQUVoRCxhQUFRLEdBQXFCLFFBQVEsQ0FBQztRQUUvQywwRkFBMEY7UUFDakYsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLHVHQUF1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SztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVhLFFBQVE7c0JBQTFCLE1BQU07Z0JBRVksSUFBSTtzQkFBdEIsTUFBTTtnQkFDWSxNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtY2FyZC9kYXRhLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2tlbGV0b25DYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbG9hZGluZy9za2VsZXRvbi1sb2FkaW5nJztcbmltcG9ydCB0eXBlIHsgQ2FyZEl0ZW1WaWV3LCBDYXJkTGlzdE1hcEZuIH0gZnJvbSAnLi4vX21vZGVscy9jYXJkLWl0ZW0tdmlldy5tb2RlbCc7XG5cbi8qKlxuICogLSAqKm1lbW9yeSoqOiBgaXRlbXNgIHRlbSBhIGxpc3RhIGNvbXBsZXRhIChleC46IDUwMCBlbSBtZW3Ds3JpYSk7IHPDsyBzZSBtb3N0cmFtXG4gKiAgIGBzY3JvbGxCYXRjaFNpemVgIGRlIGNhZGEgdmV6IGF0w6kgbyB1c3XDoXJpbyBmYXplciBzY3JvbGwgKGZhdGlhIGxvY2FsKS5cbiAqIC0gKipyZW1vdGUqKjogYGl0ZW1zYCBzw6NvIHPDsyBhcyBsaW5oYXMgasOhIGRldm9sdmlkYXMgcGVsYSBBUEk7IGFvIGZpbSBkbyBzY3JvbGxcbiAqICAgZW1pdGUgYGxvYWRNb3JlYCBwYXJhIHBlZGlyIGEgcHLDs3hpbWEgcMOhZ2luYSAoU1FMIE9GRlNFVC9GRVRDSCBubyBiYWNrZW5kKS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FyZExpc3REYXRhTW9kZSA9ICdtZW1vcnknIHwgJ3JlbW90ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jYXJkLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdTdHlsZSwgRGF0YUNhcmRDb21wb25lbnQsIEVtcHR5U3RhdGVDb21wb25lbnQsIFNrZWxldG9uQ2FyZENvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY2FyZC1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRMaXN0Q29tcG9uZW50PFQgPSB1bmtub3duPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBpdGVtcyE6IFRbXTtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICAvKipcbiAgICogQ29tIGl0ZW5zIGrDoSB2aXPDrXZlaXM6IG1vc3RyYSAqKnVtKiogc2tlbGV0b24gbm8gZnVuZG8gKHByw7N4aW1hIHDDoWdpbmEgcmVtb3RhKVxuICAgKiBwYXJhIG7Do28gc2FsdGFyIG8gc2Nyb2xsIG5lbSBvY3VwYXIgYWx0dXJhIGRlIHbDoXJpb3MgY2FydMO1ZXMuIE8gY2FycmVnYW1lbnRvIGluaWNpYWxcbiAgICogY29udGludWEgYSB1c2FyIHPDsyB7QGxpbmsgbG9hZGluZ30gKGxpc3RhIHZhemlhIG91IHJlZnJlc2ggY29tcGxldG8gY29tIGBsb2FkaW5nYCBlIHNlbSBgbG9hZGluZ01vcmVgKS5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsb2FkaW5nTW9yZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eU1lc3NhZ2UgPSAnU2VtIGl0ZW5zIHBhcmEgbW9zdHJhci4nO1xuICBASW5wdXQoKSB2YXJpYW50OiAnZGVmYXVsdCcgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG1hcEl0ZW0hOiBDYXJkTGlzdE1hcEZuPFQ+O1xuICBASW5wdXQoKSBzaG93SXRlbUFjdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSB0cmFja0J5UHJvcDoga2V5b2YgVCB8IHN0cmluZyA9ICdpZCcgYXMga2V5b2YgVDtcblxuICBASW5wdXQoKSBkYXRhTW9kZTogQ2FyZExpc3REYXRhTW9kZSA9ICdtZW1vcnknO1xuXG4gIC8qKiBFbSBtb2RvIGBtZW1vcnlgOiBxdWFudG9zIGl0ZW5zIHJldmVsYXIgcG9yIGNhZGEgcGFzc28gZGUgc2Nyb2xsLiBQb3Igb21pc3PDo28gYDEwYC4gKi9cbiAgQElucHV0KCkgc2Nyb2xsQmF0Y2hTaXplID0gMTA7XG4gIEBJbnB1dCgpIHNjcm9sbExvYWRUaHJlc2hvbGRQeCA9IDgwO1xuICAvKiogTW9zdHJhIG8gcm9kYXDDqSBjb20gbyByZXN1bW8gKOKAnFggZGUgWeKAnSkgZSBkaWNhLiBQb3Igb21pc3PDo28gYHRydWVgOyBjb20gYGZhbHNlYCBvY3VsdGEgbyBmb290ZXIuICovXG4gIEBJbnB1dCgpIHNob3dGb290ZXIgPSB0cnVlO1xuICBASW5wdXQoKSBzY3JvbGxNYXhIZWlnaHQ6IHN0cmluZyB8IG51bGwgPSAnbWluKDI4cmVtLCA1MHZoKSc7XG5cbiAgLyoqXG4gICAqIE1vZG8gKipyZW1vdGUqKjogdG90YWwgZGUgcmVnaXN0cm9zIG5vIHNlcnZpZG9yIChleC46IENPVU5UIFNRTCksIHBhcmEgbyB0ZXh0byDigJxYIGRlIFnigJ0uXG4gICAqIFNlIGBudWxsYCwgdXNhIGBpdGVtcy5sZW5ndGhgLlxuICAgKi9cbiAgQElucHV0KCkgdG90YWxDb3VudFJlbW90ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBNb2RvICoqcmVtb3RlKio6IGV4aXN0ZSBww6FnaW5hIHNlZ3VpbnRlIHBhcmEgcGVkaXIgYW8gYmFja2VuZC4gKi9cbiAgQElucHV0KCkgaGFzTmV4dFBhZ2UgPSBmYWxzZTtcbiAgLyoqIE1vZG8gKipyZW1vdGUqKjogcGVkaWRvIGRlIG1haXMgZGFkb3MgKHByw7N4aW1hIHDDoWdpbmEpLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgLyoqIE1vZG8gbWVtb3J5OiBxdWFudG9zIGNhcnTDtWVzIHJlbmRlcml6YXIgKGZhdGlhIGluaWNpYWwgPSBzY3JvbGxCYXRjaFNpemUpLiAqL1xuICB2aXNpYmxlQ291bnQgPSAwO1xuXG4gIHByaXZhdGUgbG9hZE1vcmVQZW5kaW5nID0gZmFsc2U7XG5cbiAgLyoqIFNrZWxldG9uIHF1ZSBvY3VwYSBhIGxpc3RhIGludGVpcmEgKGNhcnJlZ2FtZW50byBpbmljaWFsIC8gcmVmcmVzaCBjb20gYGxvYWRpbmdgKS4gKi9cbiAgZ2V0IHNob3dGdWxsU2tlbGV0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZyAmJiAhdGhpcy5sb2FkaW5nTW9yZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSkge1xuICAgICAgdGhpcy5sb2FkTW9yZVBlbmRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snaXRlbXMnXSB8fFxuICAgICAgY2hhbmdlc1snZGF0YU1vZGUnXSB8fFxuICAgICAgY2hhbmdlc1snc2Nyb2xsQmF0Y2hTaXplJ11cbiAgICApIHtcbiAgICAgIHRoaXMucmVzZXRWaXNpYmxlV2luZG93KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRvdGFsSXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXM/Lmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgLyoqIFRvdGFsIHBhcmEgbyByb2RhcMOpIOKAnFggZGUgWeKAnS4gKi9cbiAgZ2V0IHRvdGFsRm9yU3RhdHVzKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZGF0YU1vZGUgPT09ICdyZW1vdGUnICYmIHRoaXMudG90YWxDb3VudFJlbW90ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy50b3RhbENvdW50UmVtb3RlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b3RhbEl0ZW1Db3VudDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlSXRlbXMoKTogVFtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5pdGVtcyA/PyBbXTtcbiAgICBpZiAodGhpcy5kYXRhTW9kZSA9PT0gJ3JlbW90ZScpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cbiAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLnZpc2libGVDb3VudCk7XG4gIH1cblxuICBnZXQgc2Nyb2xsU3RhdHVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50b3RhbEZvclN0YXR1cyA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhTW9kZSA9PT0gJ3JlbW90ZScpIHtcbiAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMudG90YWxJdGVtQ291bnQ7XG4gICAgICByZXR1cm4gYCR7bG9hZGVkfSBkZSAke3RoaXMudG90YWxGb3JTdGF0dXN9IHJlZ2lzdHJvKHMpYDtcbiAgICB9XG4gICAgY29uc3Qgc2hvd24gPSBNYXRoLm1pbih0aGlzLnZpc2libGVDb3VudCwgdGhpcy50b3RhbEl0ZW1Db3VudCk7XG4gICAgcmV0dXJuIGAke3Nob3dufSBkZSAke3RoaXMudG90YWxGb3JTdGF0dXN9IHJlZ2lzdHJvKHMpYDtcbiAgfVxuXG4gIGdldCBzY3JvbGxBcmVhU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgaCA9IHRoaXMuc2Nyb2xsTWF4SGVpZ2h0O1xuICAgIGlmIChoID09PSBudWxsIHx8IGggPT09IHVuZGVmaW5lZCB8fCBoLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgLy8gQ2FycmVnYW1lbnRvIGluaWNpYWwgKHNrZWxldG9uIGVtIGxpc3RhIHZhemlhKTogc2VtIGJhcnJhIGRlIHNjcm9sbDsgc8OzIGNvbSBpdGVucyByZWFpc1xuICAgIC8vIMOpIHF1ZSBgYXV0b2AgZW50cmEgZW0gZWZlaXRvIHNlIG8gY29udGXDumRvIGV4Y2VkZXIgYG1heC1oZWlnaHRgLlxuICAgIHJldHVybiB7XG4gICAgICAnbWF4LWhlaWdodCc6IGgsXG4gICAgICAnb3ZlcmZsb3cteSc6IHRoaXMuc2hvd0Z1bGxTa2VsZXRvbiA/ICdoaWRkZW4nIDogJ2F1dG8nLFxuICAgICAgJ292ZXJmbG93LXgnOiAnaGlkZGVuJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEjDoSBtYWlzIGxpbmhhcyBwYXJhIG1vc3RyYXIgKG1lbcOzcmlhKSBvdSBwYXJhIHBlZGlyIMOgIEFQSSAocmVtb3RlKS4gKi9cbiAgZ2V0IGhhc01vcmVUb1JldmVhbCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kYXRhTW9kZSA9PT0gJ3JlbW90ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc05leHRQYWdlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy52aXNpYmxlQ291bnQgPCB0aGlzLnRvdGFsSXRlbUNvdW50ICYmIHRoaXMudG90YWxJdGVtQ291bnQgPiAwXG4gICAgKTtcbiAgfVxuXG4gIHZpZXdGb3IoaXRlbTogVCk6IENhcmRJdGVtVmlldyB7XG4gICAgcmV0dXJuIHRoaXMubWFwSXRlbShpdGVtKTtcbiAgfVxuXG4gIHNrZWxldG9uQ2FyZEluZGljZXMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG4gPSBNYXRoLm1pbig4LCBNYXRoLm1heCgzLCB0aGlzLnNjcm9sbEJhdGNoU2l6ZSkpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBuIH0sIChfLCBpKSA9PiBpKTtcbiAgfVxuXG4gIC8qKiBVbSDDum5pY28gY2FydMOjbyBza2VsZXRvbiBubyBmdW5kbyBkdXJhbnRlIGBsb2FkaW5nTW9yZWAgKG1hbnTDqW0gbyBzY3JvbGwgZXN0w6F2ZWwpLiAqL1xuICBza2VsZXRvblRhaWxJbmRpY2VzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gWzBdO1xuICB9XG5cbiAgdHJhY2tGbiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBUKTogdW5rbm93biA9PiB7XG4gICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMudHJhY2tCeVByb3AgYXMgc3RyaW5nO1xuICAgICAgaWYgKGtleSBpbiAoaXRlbSBhcyBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiAoaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuXG4gIG9uU2Nyb2xsKGV2OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXYudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IGVsLnNjcm9sbEhlaWdodCAtIGVsLnNjcm9sbFRvcCAtIGVsLmNsaWVudEhlaWdodDtcbiAgICBpZiAocmVtYWluaW5nID4gdGhpcy5zY3JvbGxMb2FkVGhyZXNob2xkUHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhTW9kZSA9PT0gJ3JlbW90ZScpIHtcbiAgICAgIHRoaXMucmVxdWVzdFJlbW90ZVBhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRNb3JlTWVtb3J5Q2h1bmsoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdFJlbW90ZVBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc05leHRQYWdlIHx8IHRoaXMubG9hZGluZyB8fCB0aGlzLmxvYWRpbmdNb3JlIHx8IHRoaXMubG9hZE1vcmVQZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZE1vcmVQZW5kaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRNb3JlLmVtaXQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE1vcmVNZW1vcnlDaHVuaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aXNpYmxlQ291bnQgPj0gdGhpcy50b3RhbEl0ZW1Db3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpc2libGVDb3VudCA9IE1hdGgubWluKFxuICAgICAgdGhpcy52aXNpYmxlQ291bnQgKyB0aGlzLnNjcm9sbEJhdGNoU2l6ZSxcbiAgICAgIHRoaXMudG90YWxJdGVtQ291bnQsXG4gICAgKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRWaXNpYmxlV2luZG93KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFNb2RlID09PSAncmVtb3RlJykge1xuICAgICAgdGhpcy52aXNpYmxlQ291bnQgPSB0aGlzLnRvdGFsSXRlbUNvdW50O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbEl0ZW1Db3VudDtcbiAgICB0aGlzLnZpc2libGVDb3VudCA9IE1hdGgubWluKHRoaXMuc2Nyb2xsQmF0Y2hTaXplLCB0b3RhbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWxpc3RcIiBbYXR0ci5kYXRhLXZhcmlhbnRdPVwidmFyaWFudFwiPlxyXG4gIEBpZiAoc2hvd0Z1bGxTa2VsZXRvbikge1xyXG4gIDxkaXYgY2xhc3M9XCJjYXJkLWxpc3RfX2JvZHlcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1idXN5PVwidHJ1ZVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxpc3RfX3Zpc3VhbGx5LWhpZGRlblwiPkEgY2FycmVnYXIgbGlzdGHigKY8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0X19zY3JvbGxcIiBbbmdTdHlsZV09XCJzY3JvbGxBcmVhU3R5bGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGlzdF9fc3RhY2tcIj5cclxuICAgICAgICBAZm9yIChfIG9mIHNrZWxldG9uQ2FyZEluZGljZXMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPGFwcC1za2VsZXRvbi1jYXJkIFtzaG93QWN0aW9uc109XCJzaG93SXRlbUFjdGlvbnNcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoIXNob3dGdWxsU2tlbGV0b24gJiYgdG90YWxJdGVtQ291bnQgPT09IDAgJiYgIWxvYWRpbmdNb3JlKSB7XHJcbiAgPGFwcC1lbXB0eS1zdGF0ZSBbbWVzc2FnZV09XCJlbXB0eU1lc3NhZ2VcIiAvPlxyXG4gIH1cclxuXHJcbiAgQGlmICghc2hvd0Z1bGxTa2VsZXRvbiAmJiB0b3RhbEl0ZW1Db3VudCA+IDApIHtcclxuICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0X19ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0X19zY3JvbGxcIiBbbmdTdHlsZV09XCJzY3JvbGxBcmVhU3R5bGVcIiAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWJ1c3ldPVwibG9hZGluZ01vcmUgPyB0cnVlIDogbnVsbFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0X19zdGFja1wiPlxyXG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgdmlzaWJsZUl0ZW1zOyB0cmFjayB0cmFja0ZuKCRpbmRleCwgaXRlbSkpIHtcclxuICAgICAgICA8YXBwLWRhdGEtY2FyZCBbdGl0bGVdPVwidmlld0ZvcihpdGVtKS50aXRsZVwiIFtzdWJ0aXRsZV09XCJ2aWV3Rm9yKGl0ZW0pLnN1YnRpdGxlXCJcclxuICAgICAgICAgIFthdmF0YXJUZXh0XT1cInZpZXdGb3IoaXRlbSkuYXZhdGFyVGV4dFwiIFt2YXJpYW50XT1cInZhcmlhbnRcIiBbc2hvd0FjdGlvbnNdPVwic2hvd0l0ZW1BY3Rpb25zXCJcclxuICAgICAgICAgIChlZGl0KT1cImVkaXQuZW1pdChpdGVtKVwiIChyZW1vdmUpPVwicmVtb3ZlLmVtaXQoaXRlbSlcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYgKGxvYWRpbmdNb3JlKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxpc3RfX3Zpc3VhbGx5LWhpZGRlblwiPkEgY2FycmVnYXIgbWFpcyBpdGVuc+KApjwvc3Bhbj5cclxuICAgICAgICBAZm9yIChfIG9mIHNrZWxldG9uVGFpbEluZGljZXMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPGFwcC1za2VsZXRvbi1jYXJkIFtzaG93QWN0aW9uc109XCJzaG93SXRlbUFjdGlvbnNcIiAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmIChzaG93Rm9vdGVyKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0X19zdGF0dXNcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1saXN0X19zdGF0dXMtdGV4dFwiPnt7IHNjcm9sbFN0YXR1c0xhYmVsIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
let dashboardSectionSeq = 0;
|
|
4
|
-
/**
|
|
5
|
-
* Bloco de dashboard: título, ações opcionais e conteúdo (stat-cards, listas, grades).
|
|
6
|
-
* Superfície alinhada aos cartões da lib.
|
|
7
|
-
*/
|
|
8
|
-
export class DashboardSectionComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.subtitle = '';
|
|
11
|
-
this.titleId = `app-dashboard-section-title-${++dashboardSectionSeq}`;
|
|
12
|
-
}
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashboardSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DashboardSectionComponent, isStandalone: true, selector: "app-dashboard-section", inputs: { title: "title", subtitle: "subtitle" }, ngImport: i0, template: "<section class=\"dashboard-section\" [attr.aria-labelledby]=\"titleId\">\r\n <header class=\"dashboard-section__header\">\r\n <div class=\"dashboard-section__headline\">\r\n <h2 class=\"dashboard-section__title\" [id]=\"titleId\">{{ title }}</h2>\r\n @if (subtitle.trim()) {\r\n <p class=\"dashboard-section__subtitle\">{{ subtitle }}</p>\r\n }\r\n </div>\r\n <div class=\"dashboard-section__actions\">\r\n <ng-content select=\"[dashboard-section-actions]\" />\r\n </div>\r\n </header>\r\n <div class=\"dashboard-section__body\">\r\n <ng-content />\r\n </div>\r\n</section>\r\n", styles: [":host{display:block;width:100%;min-width:0}.dashboard-section{box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .1));background:var(--app-color-surface, #fff);padding:0;transition:border-color .15s ease,box-shadow .15s ease;display:flex;flex-direction:column;min-width:0;overflow:hidden}.dashboard-section__header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.5rem .75rem;padding:.85rem 1rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09))}.dashboard-section__headline{flex:1 1 12rem;min-width:0}.dashboard-section__title{margin:0;font-size:1rem;font-weight:600;line-height:1.35;color:var(--app-color-text-primary, #1a2f45)}.dashboard-section__subtitle{margin:.25rem 0 0;font-size:.84rem;line-height:1.4;color:var(--app-color-text-muted, #6b8299)}.dashboard-section__actions{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.dashboard-section__actions:empty{display:none}.dashboard-section__body{padding:.85rem 1rem 1rem;min-width:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
15
|
-
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashboardSectionComponent, decorators: [{
|
|
17
|
-
type: Component,
|
|
18
|
-
args: [{ selector: 'app-dashboard-section', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"dashboard-section\" [attr.aria-labelledby]=\"titleId\">\r\n <header class=\"dashboard-section__header\">\r\n <div class=\"dashboard-section__headline\">\r\n <h2 class=\"dashboard-section__title\" [id]=\"titleId\">{{ title }}</h2>\r\n @if (subtitle.trim()) {\r\n <p class=\"dashboard-section__subtitle\">{{ subtitle }}</p>\r\n }\r\n </div>\r\n <div class=\"dashboard-section__actions\">\r\n <ng-content select=\"[dashboard-section-actions]\" />\r\n </div>\r\n </header>\r\n <div class=\"dashboard-section__body\">\r\n <ng-content />\r\n </div>\r\n</section>\r\n", styles: [":host{display:block;width:100%;min-width:0}.dashboard-section{box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .1));background:var(--app-color-surface, #fff);padding:0;transition:border-color .15s ease,box-shadow .15s ease;display:flex;flex-direction:column;min-width:0;overflow:hidden}.dashboard-section__header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.5rem .75rem;padding:.85rem 1rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09))}.dashboard-section__headline{flex:1 1 12rem;min-width:0}.dashboard-section__title{margin:0;font-size:1rem;font-weight:600;line-height:1.35;color:var(--app-color-text-primary, #1a2f45)}.dashboard-section__subtitle{margin:.25rem 0 0;font-size:.84rem;line-height:1.4;color:var(--app-color-text-muted, #6b8299)}.dashboard-section__actions{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.dashboard-section__actions:empty{display:none}.dashboard-section__body{padding:.85rem 1rem 1rem;min-width:0}\n"] }]
|
|
19
|
-
}], propDecorators: { title: [{
|
|
20
|
-
type: Input,
|
|
21
|
-
args: [{ required: true }]
|
|
22
|
-
}], subtitle: [{
|
|
23
|
-
type: Input
|
|
24
|
-
}] } });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLWRpc3BsYXkvZGFzaGJvYXJkLXNlY3Rpb24vZGFzaGJvYXJkLXNlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLWRpc3BsYXkvZGFzaGJvYXJkLXNlY3Rpb24vZGFzaGJvYXJkLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTFFLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBRTVCOzs7R0FHRztBQVFILE1BQU0sT0FBTyx5QkFBeUI7SUFQdEM7UUFVVyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsWUFBTyxHQUFHLCtCQUErQixFQUFFLG1CQUFtQixFQUFFLENBQUM7S0FDM0U7K0dBTlkseUJBQXlCO21HQUF6Qix5QkFBeUIsbUlDZnRDLGluQkFnQkE7OzRGRERhLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNOzhCQUdwQixLQUFLO3NCQUEvQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFaEIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5sZXQgZGFzaGJvYXJkU2VjdGlvblNlcSA9IDA7XHJcblxyXG4vKipcclxuICogQmxvY28gZGUgZGFzaGJvYXJkOiB0w610dWxvLCBhw6fDtWVzIG9wY2lvbmFpcyBlIGNvbnRlw7pkbyAoc3RhdC1jYXJkcywgbGlzdGFzLCBncmFkZXMpLlxyXG4gKiBTdXBlcmbDrWNpZSBhbGluaGFkYSBhb3MgY2FydMO1ZXMgZGEgbGliLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZGFzaGJvYXJkLXNlY3Rpb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGFzaGJvYXJkLXNlY3Rpb24uY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkU2VjdGlvbkNvbXBvbmVudCB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdGl0bGUhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHN1YnRpdGxlID0gJyc7XHJcblxyXG4gIHJlYWRvbmx5IHRpdGxlSWQgPSBgYXBwLWRhc2hib2FyZC1zZWN0aW9uLXRpdGxlLSR7KytkYXNoYm9hcmRTZWN0aW9uU2VxfWA7XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJkYXNoYm9hcmQtc2VjdGlvblwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aXRsZUlkXCI+XHJcbiAgPGhlYWRlciBjbGFzcz1cImRhc2hib2FyZC1zZWN0aW9uX19oZWFkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtc2VjdGlvbl9faGVhZGxpbmVcIj5cclxuICAgICAgPGgyIGNsYXNzPVwiZGFzaGJvYXJkLXNlY3Rpb25fX3RpdGxlXCIgW2lkXT1cInRpdGxlSWRcIj57eyB0aXRsZSB9fTwvaDI+XHJcbiAgICAgIEBpZiAoc3VidGl0bGUudHJpbSgpKSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJkYXNoYm9hcmQtc2VjdGlvbl9fc3VidGl0bGVcIj57eyBzdWJ0aXRsZSB9fTwvcD5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLXNlY3Rpb25fX2FjdGlvbnNcIj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Rhc2hib2FyZC1zZWN0aW9uLWFjdGlvbnNdXCIgLz5cclxuICAgIDwvZGl2PlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtc2VjdGlvbl9fYm9keVwiPlxyXG4gICAgPG5nLWNvbnRlbnQgLz5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class DataCardComponent {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.variant = 'default';
|
|
6
|
-
this.showActions = true;
|
|
7
|
-
this.edit = new EventEmitter();
|
|
8
|
-
this.remove = new EventEmitter();
|
|
9
|
-
}
|
|
10
|
-
onEditClick(ev) {
|
|
11
|
-
ev.stopPropagation();
|
|
12
|
-
this.edit.emit();
|
|
13
|
-
}
|
|
14
|
-
onRemoveClick(ev) {
|
|
15
|
-
ev.stopPropagation();
|
|
16
|
-
this.remove.emit();
|
|
17
|
-
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DataCardComponent, isStandalone: true, selector: "app-data-card", inputs: { title: "title", subtitle: "subtitle", avatarText: "avatarText", variant: "variant", showActions: "showActions" }, outputs: { edit: "edit", remove: "remove" }, ngImport: i0, template: "<article\r\n class=\"data-card\"\r\n [class.data-card--default]=\"variant === 'default'\"\r\n [attr.data-variant]=\"variant\"\r\n>\r\n <div class=\"data-card__row\">\r\n <div class=\"data-card__main\">\r\n @if (avatarText?.trim()) {\r\n <div class=\"data-card__avatar\" aria-hidden=\"true\">\r\n {{ avatarText!.trim().slice(0, 2) }}\r\n </div>\r\n }\r\n <div class=\"data-card__text\">\r\n <h4 class=\"data-card__title\">{{ title }}</h4>\r\n @if (subtitle?.trim()) {\r\n <p class=\"data-card__subtitle\">{{ subtitle }}</p>\r\n }\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"data-card__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"data-card__icon-btn\"\r\n title=\"Editar\"\r\n aria-label=\"Editar\"\r\n (click)=\"onEditClick($event)\"\r\n >\r\n <span class=\"fa-solid fa-arrows-rotate\" aria-hidden=\"true\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"data-card__icon-btn data-card__icon-btn--danger\"\r\n title=\"Remover\"\r\n aria-label=\"Remover\"\r\n (click)=\"onRemoveClick($event)\"\r\n >\r\n <span class=\"fa-solid fa-trash-can\" aria-hidden=\"true\"></span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</article>\r\n", styles: [":host{display:block;min-width:0}.data-card{box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .1));background:var(--app-color-surface, #fff);padding:.85rem 1rem;transition:border-color .15s ease,box-shadow .15s ease}.data-card--default:hover{border-color:var(--app-color-selected-border, rgba(43, 127, 217, .28));box-shadow:0 1px 0 var(--app-color-border-subtle, rgba(26, 47, 69, .04))}.data-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.data-card__main{display:flex;align-items:flex-start;gap:.65rem;min-width:0;flex:1}.data-card__avatar{flex-shrink:0;width:2.35rem;height:2.35rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;letter-spacing:.02em;color:var(--app-color-text-primary, #2a4a66);background:linear-gradient(145deg,var(--app-color-avatar-gradient-start, rgba(43, 127, 217, .14)),var(--app-color-avatar-gradient-end, rgba(26, 47, 69, .06)));border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .08));text-transform:uppercase}.data-card__text{min-width:0}.data-card__title{margin:0;font-size:.95rem;font-weight:600;line-height:1.3;color:var(--ui-field-float-input-text, #0f1b28);word-break:break-word}.data-card__subtitle{margin:.2rem 0 0;font-size:.8rem;line-height:1.35;color:var(--app-color-text-muted, #5a6e82)}.data-card__actions{display:flex;flex-shrink:0;align-items:center;gap:.35rem}.data-card__icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;min-width:2rem;height:2rem;margin:0;padding:0;border:1px solid rgba(43,127,217,.45);border-radius:6px;background:#fff;color:var(--ui-field-float-border-focus, #2b7fd9);font-size:.95rem;line-height:1;cursor:pointer;transition:background .15s ease,border-color .15s ease}.data-card__icon-btn:hover{background:#2b7fd914}.data-card__icon-btn:focus-visible{outline:2px solid var(--ui-field-float-border-focus, #2b7fd9);outline-offset:2px}.data-card__icon-btn--danger{border-color:#b71c1c73;color:var(--ui-field-input-invalid-border, #b91c1c)}.data-card__icon-btn--danger:hover{background:#b71c1c0f}.data-card__icon-btn--danger:focus-visible{outline-color:var(--ui-field-input-invalid-border, #b91c1c)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
20
|
-
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataCardComponent, decorators: [{
|
|
22
|
-
type: Component,
|
|
23
|
-
args: [{ selector: 'app-data-card', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<article\r\n class=\"data-card\"\r\n [class.data-card--default]=\"variant === 'default'\"\r\n [attr.data-variant]=\"variant\"\r\n>\r\n <div class=\"data-card__row\">\r\n <div class=\"data-card__main\">\r\n @if (avatarText?.trim()) {\r\n <div class=\"data-card__avatar\" aria-hidden=\"true\">\r\n {{ avatarText!.trim().slice(0, 2) }}\r\n </div>\r\n }\r\n <div class=\"data-card__text\">\r\n <h4 class=\"data-card__title\">{{ title }}</h4>\r\n @if (subtitle?.trim()) {\r\n <p class=\"data-card__subtitle\">{{ subtitle }}</p>\r\n }\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"data-card__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"data-card__icon-btn\"\r\n title=\"Editar\"\r\n aria-label=\"Editar\"\r\n (click)=\"onEditClick($event)\"\r\n >\r\n <span class=\"fa-solid fa-arrows-rotate\" aria-hidden=\"true\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"data-card__icon-btn data-card__icon-btn--danger\"\r\n title=\"Remover\"\r\n aria-label=\"Remover\"\r\n (click)=\"onRemoveClick($event)\"\r\n >\r\n <span class=\"fa-solid fa-trash-can\" aria-hidden=\"true\"></span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n</article>\r\n", styles: [":host{display:block;min-width:0}.data-card{box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .1));background:var(--app-color-surface, #fff);padding:.85rem 1rem;transition:border-color .15s ease,box-shadow .15s ease}.data-card--default:hover{border-color:var(--app-color-selected-border, rgba(43, 127, 217, .28));box-shadow:0 1px 0 var(--app-color-border-subtle, rgba(26, 47, 69, .04))}.data-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.data-card__main{display:flex;align-items:flex-start;gap:.65rem;min-width:0;flex:1}.data-card__avatar{flex-shrink:0;width:2.35rem;height:2.35rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;letter-spacing:.02em;color:var(--app-color-text-primary, #2a4a66);background:linear-gradient(145deg,var(--app-color-avatar-gradient-start, rgba(43, 127, 217, .14)),var(--app-color-avatar-gradient-end, rgba(26, 47, 69, .06)));border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .08));text-transform:uppercase}.data-card__text{min-width:0}.data-card__title{margin:0;font-size:.95rem;font-weight:600;line-height:1.3;color:var(--ui-field-float-input-text, #0f1b28);word-break:break-word}.data-card__subtitle{margin:.2rem 0 0;font-size:.8rem;line-height:1.35;color:var(--app-color-text-muted, #5a6e82)}.data-card__actions{display:flex;flex-shrink:0;align-items:center;gap:.35rem}.data-card__icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;min-width:2rem;height:2rem;margin:0;padding:0;border:1px solid rgba(43,127,217,.45);border-radius:6px;background:#fff;color:var(--ui-field-float-border-focus, #2b7fd9);font-size:.95rem;line-height:1;cursor:pointer;transition:background .15s ease,border-color .15s ease}.data-card__icon-btn:hover{background:#2b7fd914}.data-card__icon-btn:focus-visible{outline:2px solid var(--ui-field-float-border-focus, #2b7fd9);outline-offset:2px}.data-card__icon-btn--danger{border-color:#b71c1c73;color:var(--ui-field-input-invalid-border, #b91c1c)}.data-card__icon-btn--danger:hover{background:#b71c1c0f}.data-card__icon-btn--danger:focus-visible{outline-color:var(--ui-field-input-invalid-border, #b91c1c)}\n"] }]
|
|
24
|
-
}], propDecorators: { title: [{
|
|
25
|
-
type: Input,
|
|
26
|
-
args: [{ required: true }]
|
|
27
|
-
}], subtitle: [{
|
|
28
|
-
type: Input
|
|
29
|
-
}], avatarText: [{
|
|
30
|
-
type: Input
|
|
31
|
-
}], variant: [{
|
|
32
|
-
type: Input
|
|
33
|
-
}], showActions: [{
|
|
34
|
-
type: Input
|
|
35
|
-
}], edit: [{
|
|
36
|
-
type: Output
|
|
37
|
-
}], remove: [{
|
|
38
|
-
type: Output
|
|
39
|
-
}] } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1kaXNwbGF5L2RhdGEtY2FyZC9kYXRhLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLWRpc3BsYXkvZGF0YS1jYXJkL2RhdGEtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7QUFTdkIsTUFBTSxPQUFPLGlCQUFpQjtJQVA5QjtRQVlXLFlBQU8sR0FBYyxTQUFTLENBQUM7UUFDL0IsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFVCxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNoQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQVd0RDtJQVRDLFdBQVcsQ0FBQyxFQUFTO1FBQ25CLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBUztRQUNyQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQW5CVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixrUENmOUIsbTJDQTJDQTs7NEZENUJhLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNOzhCQUdwQixLQUFLO3NCQUEvQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVhLElBQUk7c0JBQXRCLE1BQU07Z0JBQ1ksTUFBTTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kYXRhLWNhcmQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2RhdGEtY2FyZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhQ2FyZENvbXBvbmVudCB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdGl0bGUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3VidGl0bGU/OiBzdHJpbmc7XHJcbiAgLyoqIDHigJMyIGNhcmFjdGVyZXMgcGFyYSBvIGPDrXJjdWxvIGRlIGluaWNpYWlzLiAqL1xyXG4gIEBJbnB1dCgpIGF2YXRhclRleHQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdmFyaWFudDogJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25zID0gdHJ1ZTtcclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgb25FZGl0Q2xpY2soZXY6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZWRpdC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZUNsaWNrKGV2OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnJlbW92ZS5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxhcnRpY2xlXHJcbiAgY2xhc3M9XCJkYXRhLWNhcmRcIlxyXG4gIFtjbGFzcy5kYXRhLWNhcmQtLWRlZmF1bHRdPVwidmFyaWFudCA9PT0gJ2RlZmF1bHQnXCJcclxuICBbYXR0ci5kYXRhLXZhcmlhbnRdPVwidmFyaWFudFwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiZGF0YS1jYXJkX19yb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXRhLWNhcmRfX21haW5cIj5cclxuICAgICAgQGlmIChhdmF0YXJUZXh0Py50cmltKCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImRhdGEtY2FyZF9fYXZhdGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAge3sgYXZhdGFyVGV4dCEudHJpbSgpLnNsaWNlKDAsIDIpIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWNhcmRfX3RleHRcIj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJkYXRhLWNhcmRfX3RpdGxlXCI+e3sgdGl0bGUgfX08L2g0PlxyXG4gICAgICAgIEBpZiAoc3VidGl0bGU/LnRyaW0oKSkge1xyXG4gICAgICAgIDxwIGNsYXNzPVwiZGF0YS1jYXJkX19zdWJ0aXRsZVwiPnt7IHN1YnRpdGxlIH19PC9wPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoc2hvd0FjdGlvbnMpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJkYXRhLWNhcmRfX2FjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwiZGF0YS1jYXJkX19pY29uLWJ0blwiXHJcbiAgICAgICAgdGl0bGU9XCJFZGl0YXJcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0YXJcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkVkaXRDbGljaygkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmEtc29saWQgZmEtYXJyb3dzLXJvdGF0ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImRhdGEtY2FyZF9faWNvbi1idG4gZGF0YS1jYXJkX19pY29uLWJ0bi0tZGFuZ2VyXCJcclxuICAgICAgICB0aXRsZT1cIlJlbW92ZXJcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJSZW1vdmVyXCJcclxuICAgICAgICAoY2xpY2spPVwib25SZW1vdmVDbGljaygkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2FydGljbGU+XHJcbiJdfQ==
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class DataGridActionsCellRendererComponent {
|
|
4
|
-
agInit(params) {
|
|
5
|
-
this.params = params;
|
|
6
|
-
}
|
|
7
|
-
refresh() {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
/** `params.context` nem sempre vem preenchido; o grid guarda o mesmo objeto em `gridOptions.context`. */
|
|
11
|
-
get actionsContext() {
|
|
12
|
-
const p = this.params;
|
|
13
|
-
if (p.context?.onEditRow && p.context?.onRemoveRow) {
|
|
14
|
-
return p.context;
|
|
15
|
-
}
|
|
16
|
-
const api = p.api;
|
|
17
|
-
const fromGrid = api?.getGridOption?.('context');
|
|
18
|
-
return fromGrid;
|
|
19
|
-
}
|
|
20
|
-
edit() {
|
|
21
|
-
const row = this.params.data;
|
|
22
|
-
const ctx = this.actionsContext;
|
|
23
|
-
if (row != null && ctx) {
|
|
24
|
-
ctx.onEditRow(row);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
remove() {
|
|
28
|
-
const row = this.params.data;
|
|
29
|
-
const ctx = this.actionsContext;
|
|
30
|
-
if (row != null && ctx) {
|
|
31
|
-
ctx.onRemoveRow(row);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataGridActionsCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DataGridActionsCellRendererComponent, isStandalone: true, selector: "app-data-grid-actions-cell-renderer", ngImport: i0, template: "<div class=\"data-grid-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"data-grid-actions__icon-btn\"\r\n title=\"Editar\"\r\n aria-label=\"Editar\"\r\n (click)=\"edit()\"\r\n >\r\n <span class=\"fa-solid fa-arrows-rotate\" aria-hidden=\"true\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"data-grid-actions__icon-btn data-grid-actions__icon-btn--danger\"\r\n title=\"Remover\"\r\n aria-label=\"Remover\"\r\n (click)=\"remove()\"\r\n >\r\n <span class=\"fa-solid fa-trash-can\" aria-hidden=\"true\"></span>\r\n </button>\r\n</div>\r\n", styles: [".data-grid-actions{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:.35rem;padding:.1rem 0}.data-grid-actions__icon-btn{display:inline-flex;align-items:center;justify-content:center;margin:0;width:2rem;min-width:2rem;height:2rem;padding:0;border:1px solid rgba(43,127,217,.45);border-radius:6px;background:#fff;color:var(--ui-field-float-border-focus, #2b7fd9);font-size:.95rem;line-height:1;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease,color .15s ease}.data-grid-actions__icon-btn:hover{background:#2b7fd914}.data-grid-actions__icon-btn:focus-visible{outline:2px solid var(--ui-field-float-border-focus, #2b7fd9);outline-offset:2px}.data-grid-actions__icon-btn--danger{border-color:#b71c1c73;color:var(--ui-field-input-invalid-border, #b91c1c)}.data-grid-actions__icon-btn--danger:hover{background:#b71c1c0f}.data-grid-actions__icon-btn--danger:focus-visible{outline-color:var(--ui-field-input-invalid-border, #b91c1c)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
36
|
-
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataGridActionsCellRendererComponent, decorators: [{
|
|
38
|
-
type: Component,
|
|
39
|
-
args: [{ selector: 'app-data-grid-actions-cell-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"data-grid-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"data-grid-actions__icon-btn\"\r\n title=\"Editar\"\r\n aria-label=\"Editar\"\r\n (click)=\"edit()\"\r\n >\r\n <span class=\"fa-solid fa-arrows-rotate\" aria-hidden=\"true\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"data-grid-actions__icon-btn data-grid-actions__icon-btn--danger\"\r\n title=\"Remover\"\r\n aria-label=\"Remover\"\r\n (click)=\"remove()\"\r\n >\r\n <span class=\"fa-solid fa-trash-can\" aria-hidden=\"true\"></span>\r\n </button>\r\n</div>\r\n", styles: [".data-grid-actions{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:.35rem;padding:.1rem 0}.data-grid-actions__icon-btn{display:inline-flex;align-items:center;justify-content:center;margin:0;width:2rem;min-width:2rem;height:2rem;padding:0;border:1px solid rgba(43,127,217,.45);border-radius:6px;background:#fff;color:var(--ui-field-float-border-focus, #2b7fd9);font-size:.95rem;line-height:1;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease,color .15s ease}.data-grid-actions__icon-btn:hover{background:#2b7fd914}.data-grid-actions__icon-btn:focus-visible{outline:2px solid var(--ui-field-float-border-focus, #2b7fd9);outline-offset:2px}.data-grid-actions__icon-btn--danger{border-color:#b71c1c73;color:var(--ui-field-input-invalid-border, #b91c1c)}.data-grid-actions__icon-btn--danger:hover{background:#b71c1c0f}.data-grid-actions__icon-btn--danger:focus-visible{outline-color:var(--ui-field-input-invalid-border, #b91c1c)}\n"] }]
|
|
40
|
-
}] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLWFjdGlvbnMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RhdGEtZGlzcGxheS9kYXRhLWdyaWQvZGF0YS1ncmlkLWFjdGlvbnMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RhdGEtZGlzcGxheS9kYXRhLWdyaWQvZGF0YS1ncmlkLWFjdGlvbnMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWlCbkUsTUFBTSxPQUFPLG9DQUFvQztJQUsvQyxNQUFNLENBQUMsTUFBMkI7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUViLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHlHQUF5RztJQUN6RyxJQUFZLGNBQWM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BRWQsQ0FBQztRQUNGLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUEwQixDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBRWxDLENBQUM7UUFDZCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSTtRQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0E1Q1Usb0NBQW9DO21HQUFwQyxvQ0FBb0MsK0ZDakJqRCw2bEJBb0JBOzs0RkRIYSxvQ0FBb0M7a0JBUGhELFNBQVM7K0JBQ0UscUNBQXFDLGNBQ25DLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHR5cGUgeyBJQ2VsbFJlbmRlcmVyQW5ndWxhckNvbXAgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xyXG5pbXBvcnQgdHlwZSB7IEdyaWRBcGksIElDZWxsUmVuZGVyZXJQYXJhbXMgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcblxyXG4vKiogQ29udGV4dG8gaW5qZXRhZG8gcGVsbyB7QGxpbmsgRGF0YUdyaWRDb21wb25lbnR9IChuw6NvIGV4cG9ydGFkbyBwYXJhIGNvbnN1bWlkb3JlcykuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUdyaWRBY3Rpb25zQ29udGV4dDxUID0gdW5rbm93bj4ge1xyXG4gIG9uRWRpdFJvdzogKHJvdzogVCkgPT4gdm9pZDtcclxuICBvblJlbW92ZVJvdzogKHJvdzogVCkgPT4gdm9pZDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZGF0YS1ncmlkLWFjdGlvbnMtY2VsbC1yZW5kZXJlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLWFjdGlvbnMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2RhdGEtZ3JpZC1hY3Rpb25zLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRBY3Rpb25zQ2VsbFJlbmRlcmVyQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBJQ2VsbFJlbmRlcmVyQW5ndWxhckNvbXBcclxue1xyXG4gIHBhcmFtcyE6IElDZWxsUmVuZGVyZXJQYXJhbXMgJiB7IGNvbnRleHQ/OiBEYXRhR3JpZEFjdGlvbnNDb250ZXh0IH07XHJcblxyXG4gIGFnSW5pdChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMpOiB2b2lkIHtcclxuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zIGFzIElDZWxsUmVuZGVyZXJQYXJhbXMgJiB7XHJcbiAgICAgIGNvbnRleHQ/OiBEYXRhR3JpZEFjdGlvbnNDb250ZXh0O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKiogYHBhcmFtcy5jb250ZXh0YCBuZW0gc2VtcHJlIHZlbSBwcmVlbmNoaWRvOyBvIGdyaWQgZ3VhcmRhIG8gbWVzbW8gb2JqZXRvIGVtIGBncmlkT3B0aW9ucy5jb250ZXh0YC4gKi9cclxuICBwcml2YXRlIGdldCBhY3Rpb25zQ29udGV4dCgpOiBEYXRhR3JpZEFjdGlvbnNDb250ZXh0IHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IHAgPSB0aGlzLnBhcmFtcyBhcyBJQ2VsbFJlbmRlcmVyUGFyYW1zICYge1xyXG4gICAgICBjb250ZXh0PzogRGF0YUdyaWRBY3Rpb25zQ29udGV4dDtcclxuICAgIH07XHJcbiAgICBpZiAocC5jb250ZXh0Py5vbkVkaXRSb3cgJiYgcC5jb250ZXh0Py5vblJlbW92ZVJvdykge1xyXG4gICAgICByZXR1cm4gcC5jb250ZXh0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBpID0gcC5hcGkgYXMgR3JpZEFwaSB8IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGZyb21HcmlkID0gYXBpPy5nZXRHcmlkT3B0aW9uPy4oJ2NvbnRleHQnKSBhc1xyXG4gICAgICB8IERhdGFHcmlkQWN0aW9uc0NvbnRleHRcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gZnJvbUdyaWQ7XHJcbiAgfVxyXG5cclxuICBlZGl0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93ID0gdGhpcy5wYXJhbXMuZGF0YTtcclxuICAgIGNvbnN0IGN0eCA9IHRoaXMuYWN0aW9uc0NvbnRleHQ7XHJcbiAgICBpZiAocm93ICE9IG51bGwgJiYgY3R4KSB7XHJcbiAgICAgIGN0eC5vbkVkaXRSb3cocm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyYW1zLmRhdGE7XHJcbiAgICBjb25zdCBjdHggPSB0aGlzLmFjdGlvbnNDb250ZXh0O1xyXG4gICAgaWYgKHJvdyAhPSBudWxsICYmIGN0eCkge1xyXG4gICAgICBjdHgub25SZW1vdmVSb3cocm93KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRhdGEtZ3JpZC1hY3Rpb25zXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBjbGFzcz1cImRhdGEtZ3JpZC1hY3Rpb25zX19pY29uLWJ0blwiXHJcbiAgICB0aXRsZT1cIkVkaXRhclwiXHJcbiAgICBhcmlhLWxhYmVsPVwiRWRpdGFyXCJcclxuICAgIChjbGljayk9XCJlZGl0KClcIlxyXG4gID5cclxuICAgIDxzcGFuIGNsYXNzPVwiZmEtc29saWQgZmEtYXJyb3dzLXJvdGF0ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZGF0YS1ncmlkLWFjdGlvbnNfX2ljb24tYnRuIGRhdGEtZ3JpZC1hY3Rpb25zX19pY29uLWJ0bi0tZGFuZ2VyXCJcclxuICAgIHRpdGxlPVwiUmVtb3ZlclwiXHJcbiAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlclwiXHJcbiAgICAoY2xpY2spPVwicmVtb3ZlKClcIlxyXG4gID5cclxuICAgIDxzcGFuIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19
|