structra-ui 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -6
- package/app/_utils/date-pt-br.utils.d.ts +24 -0
- package/app/_utils/decimal-br.utils.d.ts +52 -0
- package/app/_utils/estados-br.data.d.ts +10 -0
- package/app/_utils/integer-br.utils.d.ts +17 -0
- package/app/_utils/integer-value.utils.d.ts +5 -0
- package/app/_utils/scroll/body-scroll-lock.util.d.ts +22 -0
- package/app/app-shell/_models/breadcrumb-item.model.d.ts +13 -0
- package/app/app-shell/app-shell-sidebar-template.directive.d.ts +19 -0
- package/app/app-shell/app-shell.component.d.ts +41 -0
- package/app/app-shell/breadcrumb/breadcrumb.component.d.ts +10 -0
- package/app/app-shell/index.d.ts +19 -0
- package/app/app-shell/sidebar/app-sidebar-toolbar.directive.d.ts +14 -0
- package/app/app-shell/sidebar/shell-sidebar-toggle.component.d.ts +19 -0
- package/app/app-shell/sidebar/sidebar.component.d.ts +36 -0
- package/app/app-shell/sidebar-reveal.constants.d.ts +8 -0
- package/app/app-shell/topbar/topbar.component.d.ts +8 -0
- package/app/app-shell/user-menu/user-menu.component.d.ts +25 -0
- package/app/buttons/base-button/base-button.component.d.ts +43 -0
- package/app/buttons/index.d.ts +1 -0
- package/app/data-display/_models/card-item-view.model.d.ts +8 -0
- package/app/data-display/_models/data-display.models.d.ts +11 -0
- package/app/data-display/_models/data-grid-column.model.d.ts +13 -0
- package/app/data-display/_models/index.d.ts +2 -0
- package/app/data-display/adaptive-data-view/adaptive-data-view.component.d.ts +53 -0
- package/app/data-display/card-list/card-list.component.d.ts +70 -0
- package/app/data-display/dashboard-section/dashboard-section.component.d.ts +12 -0
- package/app/data-display/data-card/data-card.component.d.ts +16 -0
- package/app/data-display/data-grid/data-grid-actions-cell-renderer.component.d.ts +21 -0
- package/app/data-display/data-grid/data-grid.component.d.ts +76 -0
- package/app/data-display/data-list/data-list.component.d.ts +18 -0
- package/app/data-display/data-toolbar/data-toolbar.component.d.ts +6 -0
- package/app/data-display/details-field/details-field.component.d.ts +10 -0
- package/app/data-display/details-view/details-view.component.d.ts +26 -0
- package/app/data-display/empty-state/empty-state-overlay.util.d.ts +5 -0
- package/app/data-display/empty-state/empty-state.component.d.ts +13 -0
- package/app/data-display/index.d.ts +20 -0
- package/app/data-display/list-item/list-item.component.d.ts +22 -0
- package/app/data-display/stat-card/stat-card.component.d.ts +23 -0
- package/app/data-display/status-badge/status-badge.component.d.ts +17 -0
- package/app/data-display/table-empty-state/table-empty-state.component.d.ts +14 -0
- package/app/data-display/table-toolbar/table-toolbar.component.d.ts +11 -0
- package/app/dialogs/_models/lib-dialog-size.model.d.ts +6 -0
- package/app/dialogs/_utils/lib-dialog-panel-classes.d.ts +3 -0
- package/app/dialogs/app-dialog/app-dialog.component.d.ts +52 -0
- package/app/dialogs/app-dialog/dialog-footer.directive.d.ts +6 -0
- package/app/dialogs/confirm-dialog/confirm-dialog-data.model.d.ts +13 -0
- package/app/dialogs/confirm-dialog/confirm-dialog.component.d.ts +20 -0
- package/app/dialogs/confirm-dialog/confirm-dialog.service.d.ts +17 -0
- package/app/dialogs/index.d.ts +13 -0
- package/app/dialogs/loading-dialog/loading-dialog-data.model.d.ts +7 -0
- package/app/dialogs/loading-dialog/loading-dialog.component.d.ts +9 -0
- package/app/dialogs/loading-dialog/loading-dialog.service.d.ts +15 -0
- package/app/dialogs/toast/toast-host.component.d.ts +13 -0
- package/app/dialogs/toast/toast.models.d.ts +26 -0
- package/app/dialogs/toast/toast.service.d.ts +17 -0
- package/app/fields/checkbox-fields/_base/boolean-field.directive.d.ts +42 -0
- package/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.d.ts +8 -0
- package/app/fields/checkbox-fields/index.d.ts +3 -0
- package/app/fields/checkbox-fields/switch-field/switch-field.component.d.ts +8 -0
- package/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.d.ts +62 -0
- package/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.d.ts +40 -0
- package/app/fields/dropdown-fields/_base/dropdown-option-field.base.d.ts +47 -0
- package/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.d.ts +18 -0
- package/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.d.ts +13 -0
- package/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.d.ts +7 -0
- package/app/fields/dropdown-fields/_models/index.d.ts +4 -0
- package/app/fields/dropdown-fields/_models/select-option.model.d.ts +5 -0
- package/app/fields/dropdown-fields/_models/select-pagination.model.d.ts +6 -0
- package/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.d.ts +84 -0
- package/app/fields/dropdown-fields/index.d.ts +7 -0
- package/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.d.ts +49 -0
- package/app/fields/dropdown-fields/select-field/select-field.component.d.ts +54 -0
- package/app/fields/input-fields/_base/base-field.component.d.ts +60 -0
- package/app/fields/input-fields/_base/base-field.directive.d.ts +102 -0
- package/app/fields/input-fields/_base/masked-text-field.base.d.ts +34 -0
- package/app/fields/input-fields/_base/ng-control-field.directive.d.ts +43 -0
- package/app/fields/input-fields/_models/field-common-inputs.model.d.ts +49 -0
- package/app/fields/input-fields/_models/index.d.ts +1 -0
- package/app/fields/input-fields/_utils/mask-complete.validators.d.ts +18 -0
- package/app/fields/input-fields/_utils/mask-format.utils.d.ts +13 -0
- package/app/fields/input-fields/cep-field/cep-field.component.d.ts +12 -0
- package/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.d.ts +20 -0
- package/app/fields/input-fields/date-field/date-field.component.d.ts +30 -0
- package/app/fields/input-fields/decimal-field/decimal-field.component.d.ts +17 -0
- package/app/fields/input-fields/index.d.ts +22 -0
- package/app/fields/input-fields/input-mask-field/input-mask-field.component.d.ts +16 -0
- package/app/fields/input-fields/integer-field/integer-field.component.d.ts +17 -0
- package/app/fields/input-fields/password-field/password-field.component.d.ts +30 -0
- package/app/fields/input-fields/phone-field/phone-field.component.d.ts +22 -0
- package/app/fields/input-fields/text-field/text-field.component.d.ts +16 -0
- package/app/fields/input-fields/textarea-field/textarea-field.component.d.ts +31 -0
- package/app/form-layout/_models/form-layout.model.d.ts +41 -0
- package/app/form-layout/_models/form-tabs.model.d.ts +1 -0
- package/app/form-layout/_models/index.d.ts +3 -0
- package/app/form-layout/_models/validation-summary.model.d.ts +8 -0
- package/app/form-layout/form-actions/form-actions.component.d.ts +21 -0
- package/app/form-layout/form-col/form-col.component.d.ts +25 -0
- package/app/form-layout/form-group/form-group.component.d.ts +125 -0
- package/app/form-layout/form-group/form-path.utils.d.ts +16 -0
- package/app/form-layout/form-group/form-root-invalid-ui-refresh.util.d.ts +8 -0
- package/app/form-layout/form-row/form-row.component.d.ts +14 -0
- package/app/form-layout/form-section/form-section.component.d.ts +13 -0
- package/app/form-layout/form-tab/form-tab.component.d.ts +32 -0
- package/app/form-layout/form-tabs/form-tabs.component.d.ts +44 -0
- package/app/form-layout/index.d.ts +14 -0
- package/app/form-layout/layout-stack/layout-stack.component.d.ts +25 -0
- package/app/form-layout/validation-summary/validation-summary.component.d.ts +111 -0
- package/app/loading/skeleton-loading/index.d.ts +6 -0
- package/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.d.ts +15 -0
- package/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.d.ts +10 -0
- package/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.d.ts +21 -0
- package/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.d.ts +17 -0
- package/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.d.ts +16 -0
- package/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.d.ts +17 -0
- package/app/menus/_models/drawer-side.model.d.ts +6 -0
- package/app/menus/_models/drawer-size.model.d.ts +6 -0
- package/app/menus/_models/menu-dropdown-placement.model.d.ts +10 -0
- package/app/menus/_models/menu-item.model.d.ts +47 -0
- package/app/menus/_utils/menu-connected-positions.util.d.ts +4 -0
- package/app/menus/_utils/menu-rows.util.d.ts +22 -0
- package/app/menus/_utils/submenu-connected-positions.util.d.ts +5 -0
- package/app/menus/action-menu/action-menu.component.d.ts +24 -0
- package/app/menus/context-menu/context-menu.component.d.ts +32 -0
- package/app/menus/drawer/drawer.component.d.ts +37 -0
- package/app/menus/dropdown-menu/dropdown-menu.component.d.ts +33 -0
- package/app/menus/index.d.ts +11 -0
- package/app/menus/menu-divider/menu-divider.component.d.ts +8 -0
- package/app/menus/menu-group/menu-group.component.d.ts +13 -0
- package/app/menus/menu-list/menu-list.component.d.ts +77 -0
- package/app/overlay/_models/overlay-placement.model.d.ts +9 -0
- package/app/overlay/_utils/anchored-overlay-positions.util.d.ts +9 -0
- package/app/overlay/anchored-overlay/anchored-overlay.component.d.ts +51 -0
- package/app/overlay/index.d.ts +20 -0
- package/app/overlay/popover/popover-body-template.directive.d.ts +7 -0
- package/app/overlay/popover/popover-footer-template.directive.d.ts +7 -0
- package/app/overlay/popover/popover-trigger.directive.d.ts +6 -0
- package/app/overlay/popover/popover.component.d.ts +38 -0
- package/app/overlay/tooltip/tooltip-panel-template.directive.d.ts +10 -0
- package/app/overlay/tooltip/tooltip.component.d.ts +40 -0
- package/app/theme/app-theme.service.d.ts +25 -0
- package/app/theme/index.d.ts +1 -0
- package/esm2022/app/_utils/date-pt-br.utils.mjs +82 -0
- package/esm2022/app/_utils/decimal-br.utils.mjs +154 -0
- package/esm2022/app/_utils/estados-br.data.mjs +37 -0
- package/esm2022/app/_utils/integer-br.utils.mjs +48 -0
- package/esm2022/app/_utils/integer-value.utils.mjs +19 -0
- package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +43 -0
- package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +2 -0
- package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +29 -0
- package/esm2022/app/app-shell/app-shell.component.mjs +105 -0
- package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +18 -0
- package/esm2022/app/app-shell/index.mjs +19 -0
- package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +23 -0
- package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +36 -0
- package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +84 -0
- package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +9 -0
- package/esm2022/app/app-shell/topbar/topbar.component.mjs +14 -0
- package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +52 -0
- package/esm2022/app/buttons/base-button/base-button.component.mjs +97 -0
- package/esm2022/app/buttons/index.mjs +2 -0
- package/esm2022/app/data-display/_models/card-item-view.model.mjs +2 -0
- package/esm2022/app/data-display/_models/data-display.models.mjs +2 -0
- package/esm2022/app/data-display/_models/data-grid-column.model.mjs +2 -0
- package/esm2022/app/data-display/_models/index.mjs +2 -0
- package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +124 -0
- package/esm2022/app/data-display/card-list/card-list.component.mjs +208 -0
- package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +25 -0
- package/esm2022/app/data-display/data-card/data-card.component.mjs +40 -0
- package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +41 -0
- package/esm2022/app/data-display/data-grid/data-grid.component.mjs +253 -0
- package/esm2022/app/data-display/data-list/data-list.component.mjs +40 -0
- package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +12 -0
- package/esm2022/app/data-display/details-field/details-field.component.mjs +21 -0
- package/esm2022/app/data-display/details-view/details-view.component.mjs +44 -0
- package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +19 -0
- package/esm2022/app/data-display/empty-state/empty-state.component.mjs +30 -0
- package/esm2022/app/data-display/index.mjs +19 -0
- package/esm2022/app/data-display/list-item/list-item.component.mjs +59 -0
- package/esm2022/app/data-display/stat-card/stat-card.component.mjs +59 -0
- package/esm2022/app/data-display/status-badge/status-badge.component.mjs +41 -0
- package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +31 -0
- package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +22 -0
- package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +8 -0
- package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +6 -0
- package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +164 -0
- package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +15 -0
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +2 -0
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +36 -0
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +45 -0
- package/esm2022/app/dialogs/index.mjs +11 -0
- package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +2 -0
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +19 -0
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +36 -0
- package/esm2022/app/dialogs/toast/toast-host.component.mjs +65 -0
- package/esm2022/app/dialogs/toast/toast.models.mjs +2 -0
- package/esm2022/app/dialogs/toast/toast.service.mjs +76 -0
- package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +158 -0
- package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +36 -0
- package/esm2022/app/fields/checkbox-fields/index.mjs +4 -0
- package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +35 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +117 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +152 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +149 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +32 -0
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/index.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +520 -0
- package/esm2022/app/fields/dropdown-fields/index.mjs +7 -0
- package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +379 -0
- package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +359 -0
- package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +151 -0
- package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +224 -0
- package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +135 -0
- package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +127 -0
- package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +2 -0
- package/esm2022/app/fields/input-fields/_models/index.mjs +2 -0
- package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +61 -0
- package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +40 -0
- package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +48 -0
- package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +61 -0
- package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +147 -0
- package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +166 -0
- package/esm2022/app/fields/input-fields/index.mjs +22 -0
- package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +52 -0
- package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +143 -0
- package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +130 -0
- package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +66 -0
- package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +90 -0
- package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +125 -0
- package/esm2022/app/form-layout/_models/form-layout.model.mjs +48 -0
- package/esm2022/app/form-layout/_models/form-tabs.model.mjs +2 -0
- package/esm2022/app/form-layout/_models/index.mjs +2 -0
- package/esm2022/app/form-layout/_models/validation-summary.model.mjs +2 -0
- package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +55 -0
- package/esm2022/app/form-layout/form-col/form-col.component.mjs +76 -0
- package/esm2022/app/form-layout/form-group/form-group.component.mjs +358 -0
- package/esm2022/app/form-layout/form-group/form-path.utils.mjs +65 -0
- package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +54 -0
- package/esm2022/app/form-layout/form-row/form-row.component.mjs +49 -0
- package/esm2022/app/form-layout/form-section/form-section.component.mjs +43 -0
- package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +67 -0
- package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +126 -0
- package/esm2022/app/form-layout/index.mjs +14 -0
- package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +56 -0
- package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +392 -0
- package/esm2022/app/loading/skeleton-loading/index.mjs +7 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +43 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +23 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +34 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +38 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +37 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +45 -0
- package/esm2022/app/menus/_models/drawer-side.model.mjs +8 -0
- package/esm2022/app/menus/_models/drawer-size.model.mjs +8 -0
- package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +12 -0
- package/esm2022/app/menus/_models/menu-item.model.mjs +6 -0
- package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +41 -0
- package/esm2022/app/menus/_utils/menu-rows.util.mjs +39 -0
- package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +23 -0
- package/esm2022/app/menus/action-menu/action-menu.component.mjs +48 -0
- package/esm2022/app/menus/context-menu/context-menu.component.mjs +112 -0
- package/esm2022/app/menus/drawer/drawer.component.mjs +140 -0
- package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +99 -0
- package/esm2022/app/menus/index.mjs +11 -0
- package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +14 -0
- package/esm2022/app/menus/menu-group/menu-group.component.mjs +32 -0
- package/esm2022/app/menus/menu-list/menu-list.component.mjs +399 -0
- package/esm2022/app/overlay/_models/overlay-placement.model.mjs +11 -0
- package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +84 -0
- package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +121 -0
- package/esm2022/app/overlay/index.mjs +21 -0
- package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +17 -0
- package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +17 -0
- package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +15 -0
- package/esm2022/app/overlay/popover/popover.component.mjs +93 -0
- package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +20 -0
- package/esm2022/app/overlay/tooltip/tooltip.component.mjs +118 -0
- package/esm2022/app/theme/app-theme.service.mjs +49 -0
- package/esm2022/app/theme/index.mjs +2 -0
- package/esm2022/structra-public-api.mjs +18 -0
- package/esm2022/structra-ui.mjs +2 -2
- package/esm2022/structra-version.mjs +3 -0
- package/fesm2022/structra-ui.mjs +8896 -4
- package/fesm2022/structra-ui.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/package.json +7 -2
- package/structra-public-api.d.ts +17 -0
- package/structra-version.d.ts +2 -0
- package/esm2022/lib/version.mjs +0 -3
- package/esm2022/public-api.mjs +0 -5
- package/lib/version.d.ts +0 -2
- package/public-api.d.ts +0 -1
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, Injector, Output, afterNextRender, booleanAttribute, inject, } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** Evento no host `app-form-group`: expandir grupo sem scroll próprio (navegação a partir do resumo). */
|
|
5
|
+
const UI_REQUEST_EXPAND_FORM_GROUP = 'ui-request-expand';
|
|
6
|
+
export class ValidationSummaryComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
/** Troca de aba (`beforeItemActivate`) + `queueMicrotask` no `app-form-tabs` — o alvo pode ficar em `[hidden]` até o próximo CD. */
|
|
9
|
+
this.navigateToFieldMaxAttempts = 28;
|
|
10
|
+
this.appRef = inject(ApplicationRef);
|
|
11
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
12
|
+
this.injector = inject(Injector);
|
|
13
|
+
this.hostRef = inject((ElementRef));
|
|
14
|
+
this.document = inject(DOCUMENT);
|
|
15
|
+
/**
|
|
16
|
+
* Com `pinned`, o host passa para `document.body` para o `z-index` competir com a shell (ex.: drawer
|
|
17
|
+
* da doc no iPhone). Antes de mover, guardamos o `form` mais próximo — `closest('form')` no body falharia.
|
|
18
|
+
*/
|
|
19
|
+
this.nearestForm = null;
|
|
20
|
+
this.pinnedPortalOriginalParent = null;
|
|
21
|
+
this.pinnedPortalOriginalNext = null;
|
|
22
|
+
/** `id` único para `aria-labelledby` quando há vários resumos na página. */
|
|
23
|
+
this.titleElementId = `validation-summary-title-${++ValidationSummaryComponent.nextTitleUid}`;
|
|
24
|
+
/** `id` da região da lista (acessibilidade do botão recolher / expandir). */
|
|
25
|
+
this.listRegionId = `validation-summary-list-${++ValidationSummaryComponent.nextListRegionUid}`;
|
|
26
|
+
/** Lista simples (retrocompatível). Ignorada se {@link items} tiver entradas. */
|
|
27
|
+
this.messages = null;
|
|
28
|
+
/** Lista rica com `fieldId` opcional para navegação até o controle. */
|
|
29
|
+
this.items = null;
|
|
30
|
+
this.title = '';
|
|
31
|
+
this.visible = true;
|
|
32
|
+
/**
|
|
33
|
+
* `false` (padrão): fluxo em documento (ex.: no topo do formulário) — o consumidor pode fazer scroll até o painel.
|
|
34
|
+
* `true`: painel `position: fixed` no topo do viewport, com fade-in **sem** reservar espaço no formulário
|
|
35
|
+
* nem alterar o scroll da página (útil em formulários muito longos).
|
|
36
|
+
*/
|
|
37
|
+
this.pinned = false;
|
|
38
|
+
this.variant = 'error';
|
|
39
|
+
this.compact = false;
|
|
40
|
+
/**
|
|
41
|
+
* Altura máxima do painel da lista (ex.: `12rem`, `min(40vh, 14rem)`).
|
|
42
|
+
* Quando definido, a lista obtém scroll vertical interno.
|
|
43
|
+
*/
|
|
44
|
+
this.panelMaxHeight = null;
|
|
45
|
+
/** Comportamento de scroll ao centrar o alvo na tela. */
|
|
46
|
+
this.scrollBehavior = 'smooth';
|
|
47
|
+
/** Mostra botão que apenas fecha o painel (não altera validação nem o formulário). */
|
|
48
|
+
this.showCloseButton = false;
|
|
49
|
+
/**
|
|
50
|
+
* Mostra o botão com setas (recolher / expandir) ao lado do título para esconder só a lista
|
|
51
|
+
* e poupar espaço vertical sem fechar o painel.
|
|
52
|
+
*/
|
|
53
|
+
this.showListCollapseToggle = true;
|
|
54
|
+
this.closeButtonLabel = 'Fechar';
|
|
55
|
+
/** Texto da dica nativa (`title`) nas linhas com destino ao campo. */
|
|
56
|
+
this.fieldNavigateHint = 'Clique para ir ao campo.';
|
|
57
|
+
this.panelClose = new EventEmitter();
|
|
58
|
+
/** Com `pinned`: breve fade-in após o painel passar a visível (sem deslocar o layout). */
|
|
59
|
+
this.pinnedOpen = false;
|
|
60
|
+
/** `true`: lista de erros visível; `false`: só cabeçalho + botões (menos altura). */
|
|
61
|
+
this.panelBodyExpanded = true;
|
|
62
|
+
this.wasShown = false;
|
|
63
|
+
}
|
|
64
|
+
static { this.nextTitleUid = 0; }
|
|
65
|
+
static { this.nextListRegionUid = 0; }
|
|
66
|
+
get hostClass() {
|
|
67
|
+
const parts = [
|
|
68
|
+
'validation-summary',
|
|
69
|
+
`validation-summary--${this.variant}`,
|
|
70
|
+
];
|
|
71
|
+
if (this.compact) {
|
|
72
|
+
parts.push('validation-summary--compact');
|
|
73
|
+
}
|
|
74
|
+
if (this.pinned && this.isShown) {
|
|
75
|
+
parts.push('validation-summary--pinned-host');
|
|
76
|
+
}
|
|
77
|
+
return parts.join(' ');
|
|
78
|
+
}
|
|
79
|
+
ngOnChanges(_changes) {
|
|
80
|
+
this.syncPinnedHostToBody();
|
|
81
|
+
const shown = this.isShown;
|
|
82
|
+
if (this.pinned && shown && !this.wasShown) {
|
|
83
|
+
this.pinnedOpen = false;
|
|
84
|
+
this.cdr.markForCheck();
|
|
85
|
+
requestAnimationFrame(() => {
|
|
86
|
+
requestAnimationFrame(() => {
|
|
87
|
+
this.pinnedOpen = true;
|
|
88
|
+
this.cdr.markForCheck();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else if (!shown) {
|
|
93
|
+
this.pinnedOpen = false;
|
|
94
|
+
this.panelBodyExpanded = true;
|
|
95
|
+
}
|
|
96
|
+
this.wasShown = shown;
|
|
97
|
+
}
|
|
98
|
+
ngOnDestroy() {
|
|
99
|
+
this.detachPinnedHostFromBody();
|
|
100
|
+
}
|
|
101
|
+
get hostHidden() {
|
|
102
|
+
return this.isShown ? null : true;
|
|
103
|
+
}
|
|
104
|
+
get resolvedItems() {
|
|
105
|
+
const fromItems = (this.items ?? []).filter((i) => i && typeof i.message === 'string' && i.message.trim().length > 0);
|
|
106
|
+
if (fromItems.length > 0) {
|
|
107
|
+
return fromItems.map((i) => ({
|
|
108
|
+
message: i.message.trim(),
|
|
109
|
+
fieldId: i.fieldId?.trim() || undefined,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
return (this.messages ?? [])
|
|
113
|
+
.filter((m) => typeof m === 'string' && m.trim().length > 0)
|
|
114
|
+
.map((message) => ({ message: message.trim() }));
|
|
115
|
+
}
|
|
116
|
+
get isShown() {
|
|
117
|
+
return this.visible && this.resolvedItems.length > 0;
|
|
118
|
+
}
|
|
119
|
+
onCloseClick() {
|
|
120
|
+
this.panelClose.emit();
|
|
121
|
+
this.cdr.markForCheck();
|
|
122
|
+
}
|
|
123
|
+
toggleListBody() {
|
|
124
|
+
this.panelBodyExpanded = !this.panelBodyExpanded;
|
|
125
|
+
this.cdr.markForCheck();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Chave estável para `@for` — `track $index` reutiliza mal nós quando a lista muda ao vivo
|
|
129
|
+
* e o getter `resolvedItems` devolve novas referências a cada CD.
|
|
130
|
+
*/
|
|
131
|
+
itemTrackKey(row, index) {
|
|
132
|
+
const fid = row.fieldId?.trim();
|
|
133
|
+
if (fid) {
|
|
134
|
+
return fid;
|
|
135
|
+
}
|
|
136
|
+
return `msg-${index}-${row.message}`;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Clique na linha com destino: primeiro alinha a linha no `list-wrap` com scroll
|
|
140
|
+
* (itens parcialmente visíveis passam a ficar totalmente visíveis), depois navega.
|
|
141
|
+
*/
|
|
142
|
+
onSummaryLinkActivate(ev, item) {
|
|
143
|
+
const el = ev.currentTarget;
|
|
144
|
+
if (el) {
|
|
145
|
+
el.scrollIntoView({
|
|
146
|
+
block: 'nearest',
|
|
147
|
+
inline: 'nearest',
|
|
148
|
+
behavior: 'auto',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
this.onItemActivate(item);
|
|
152
|
+
}
|
|
153
|
+
/** Navegação até o controle com `fieldId` (chamado após {@link onSummaryLinkActivate}). */
|
|
154
|
+
onItemActivate(item) {
|
|
155
|
+
const id = item.fieldId?.trim();
|
|
156
|
+
if (!id) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.beforeItemActivate?.(item);
|
|
160
|
+
// 1) `afterNextRender`: após o DOM refletir (ex.: mudança de aba em `beforeItemActivate`).
|
|
161
|
+
// 2) `setTimeout(0)`: fora do ciclo de verificação — evita NG0100 ao expandir `app-form-group`.
|
|
162
|
+
afterNextRender(() => {
|
|
163
|
+
setTimeout(() => this.navigateToFieldId(id), 0);
|
|
164
|
+
}, { injector: this.injector });
|
|
165
|
+
}
|
|
166
|
+
navigateToFieldId(id, attempt = 0) {
|
|
167
|
+
const resolved = document.getElementById(id);
|
|
168
|
+
if (!resolved || !(resolved instanceof HTMLElement)) {
|
|
169
|
+
if (attempt < this.navigateToFieldMaxAttempts) {
|
|
170
|
+
/*
|
|
171
|
+
* Com `destroyOnCollapse`, o controle não existe no DOM enquanto o `app-form-group` está fechado;
|
|
172
|
+
* `expandCollapsedFormGroupAncestors` nunca corre porque depende do elemento já existir.
|
|
173
|
+
* Expandimos todos os grupos colapsados no `<form>` mais próximo e repetimos após um CD.
|
|
174
|
+
*/
|
|
175
|
+
this.expandCollapsedFormGroupsInNearestForm();
|
|
176
|
+
this.appRef.tick();
|
|
177
|
+
queueMicrotask(() => this.navigateToFieldId(id, attempt + 1));
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Separadores inativos (`app-form-tab`) usam `[hidden]` — `getElementById` existe mas foco falha
|
|
182
|
+
// até o painel estar visível; re-tenta após CD (ex.: demo Abas ao saltar de aba).
|
|
183
|
+
if (resolved.closest('[hidden]')) {
|
|
184
|
+
if (attempt < this.navigateToFieldMaxAttempts) {
|
|
185
|
+
this.appRef.tick();
|
|
186
|
+
queueMicrotask(() => this.navigateToFieldId(id, attempt + 1));
|
|
187
|
+
}
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Com `app-form-group` colapsado (corpo `display: none`), `getElementById` ainda encontra o alvo
|
|
192
|
+
* mas o foco falha até o próximo CD — sem reintento parece que é preciso um segundo clique no resumo.
|
|
193
|
+
*/
|
|
194
|
+
if (this.isInsideCollapsedFormGroupBody(resolved)) {
|
|
195
|
+
this.expandCollapsedFormGroupAncestors(resolved);
|
|
196
|
+
this.appRef.tick();
|
|
197
|
+
if (attempt < this.navigateToFieldMaxAttempts) {
|
|
198
|
+
queueMicrotask(() => this.navigateToFieldId(id, attempt + 1));
|
|
199
|
+
}
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
this.expandCollapsedFormGroupAncestors(resolved);
|
|
203
|
+
this.appRef.tick();
|
|
204
|
+
this.scheduleScrollAndFocusAfterDomFlush(id);
|
|
205
|
+
}
|
|
206
|
+
/** Após `tick()`, garante um frame de pintura antes de scroll/foco (evita foco em ramo ainda oculto). */
|
|
207
|
+
scheduleScrollAndFocusAfterDomFlush(id) {
|
|
208
|
+
queueMicrotask(() => {
|
|
209
|
+
requestAnimationFrame(() => {
|
|
210
|
+
requestAnimationFrame(() => this.scrollAndFocusFieldById(id));
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
isInsideCollapsedFormGroupBody(el) {
|
|
215
|
+
let node = el;
|
|
216
|
+
while (node) {
|
|
217
|
+
if (node.classList?.contains('form-group__body--collapsed-hidden')) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
node = node.parentElement;
|
|
221
|
+
}
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
scrollAndFocusFieldById(id) {
|
|
225
|
+
const el = document.getElementById(id);
|
|
226
|
+
if (!el || !(el instanceof HTMLElement)) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const focusable = this.resolveFocusable(el);
|
|
230
|
+
focusable.scrollIntoView({
|
|
231
|
+
behavior: this.scrollBehavior,
|
|
232
|
+
block: 'center',
|
|
233
|
+
inline: 'nearest',
|
|
234
|
+
});
|
|
235
|
+
queueMicrotask(() => {
|
|
236
|
+
try {
|
|
237
|
+
focusable.focus({ preventScroll: true });
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
focusable.focus({ preventScroll: true });
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
this.cdr.markForCheck();
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Dispara `ui-request-expand` em cada `app-form-group` colapsado do formulário que contém este resumo,
|
|
247
|
+
* para montar campos com `destroyOnCollapse` antes de `getElementById(fieldId)`.
|
|
248
|
+
* Ordem do DOM (pais antes dos filhos) alinha a expansão de grupos aninhados.
|
|
249
|
+
*/
|
|
250
|
+
expandCollapsedFormGroupsInNearestForm() {
|
|
251
|
+
const form = this.nearestForm ?? this.hostRef.nativeElement.closest('form');
|
|
252
|
+
if (!(form instanceof HTMLFormElement)) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const hosts = Array.from(form.querySelectorAll('app-form-group.form-group--collapsed'));
|
|
256
|
+
for (const host of hosts) {
|
|
257
|
+
host.dispatchEvent(new CustomEvent(UI_REQUEST_EXPAND_FORM_GROUP, {
|
|
258
|
+
bubbles: false,
|
|
259
|
+
cancelable: true,
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** Expande do mais externo para o mais interno para o conteúdo ficar visível. */
|
|
264
|
+
expandCollapsedFormGroupAncestors(start) {
|
|
265
|
+
const hosts = [];
|
|
266
|
+
let node = start.parentElement;
|
|
267
|
+
while (node) {
|
|
268
|
+
if (node.tagName.toLowerCase() === 'app-form-group' &&
|
|
269
|
+
node.classList.contains('form-group--collapsed')) {
|
|
270
|
+
hosts.push(node);
|
|
271
|
+
}
|
|
272
|
+
node = node.parentElement;
|
|
273
|
+
}
|
|
274
|
+
for (let i = hosts.length - 1; i >= 0; i--) {
|
|
275
|
+
hosts[i].dispatchEvent(new CustomEvent(UI_REQUEST_EXPAND_FORM_GROUP, {
|
|
276
|
+
bubbles: false,
|
|
277
|
+
cancelable: true,
|
|
278
|
+
}));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
resolveFocusable(el) {
|
|
282
|
+
if (this.isFocusableElement(el)) {
|
|
283
|
+
return el;
|
|
284
|
+
}
|
|
285
|
+
const inner = el.querySelector('input, select, textarea, button, [href], [tabindex]:not([tabindex="-1"])');
|
|
286
|
+
return inner ?? el;
|
|
287
|
+
}
|
|
288
|
+
isFocusableElement(el) {
|
|
289
|
+
if (el.hasAttribute('disabled')) {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
const tag = el.tagName;
|
|
293
|
+
if (tag === 'INPUT' ||
|
|
294
|
+
tag === 'SELECT' ||
|
|
295
|
+
tag === 'TEXTAREA' ||
|
|
296
|
+
tag === 'BUTTON') {
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
const tab = el.getAttribute('tabindex');
|
|
300
|
+
return tab != null && tab !== '-1';
|
|
301
|
+
}
|
|
302
|
+
syncPinnedHostToBody() {
|
|
303
|
+
const host = this.hostRef.nativeElement;
|
|
304
|
+
const shouldPortal = this.pinned && this.isShown;
|
|
305
|
+
if (shouldPortal) {
|
|
306
|
+
if (host.parentElement === this.document.body) {
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
this.nearestForm = host.closest('form');
|
|
310
|
+
this.pinnedPortalOriginalParent = host.parentElement;
|
|
311
|
+
this.pinnedPortalOriginalNext = host.nextSibling;
|
|
312
|
+
if (this.pinnedPortalOriginalParent) {
|
|
313
|
+
this.document.body.appendChild(host);
|
|
314
|
+
}
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
this.detachPinnedHostFromBody();
|
|
318
|
+
}
|
|
319
|
+
detachPinnedHostFromBody() {
|
|
320
|
+
const host = this.hostRef.nativeElement;
|
|
321
|
+
if (host.parentElement !== this.document.body || !this.pinnedPortalOriginalParent) {
|
|
322
|
+
this.nearestForm = null;
|
|
323
|
+
this.pinnedPortalOriginalParent = null;
|
|
324
|
+
this.pinnedPortalOriginalNext = null;
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const parent = this.pinnedPortalOriginalParent;
|
|
328
|
+
const next = this.pinnedPortalOriginalNext;
|
|
329
|
+
try {
|
|
330
|
+
if (next?.parentNode === parent) {
|
|
331
|
+
parent.insertBefore(host, next);
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
parent.appendChild(host);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
parent.appendChild(host);
|
|
339
|
+
}
|
|
340
|
+
this.nearestForm = null;
|
|
341
|
+
this.pinnedPortalOriginalParent = null;
|
|
342
|
+
this.pinnedPortalOriginalNext = null;
|
|
343
|
+
}
|
|
344
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
345
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ValidationSummaryComponent, isStandalone: true, selector: "app-validation-summary", inputs: { messages: "messages", items: "items", title: "title", visible: ["visible", "visible", booleanAttribute], pinned: ["pinned", "pinned", booleanAttribute], variant: "variant", compact: ["compact", "compact", booleanAttribute], panelMaxHeight: "panelMaxHeight", scrollBehavior: "scrollBehavior", beforeItemActivate: "beforeItemActivate", showCloseButton: ["showCloseButton", "showCloseButton", booleanAttribute], showListCollapseToggle: ["showListCollapseToggle", "showListCollapseToggle", booleanAttribute], closeButtonLabel: "closeButtonLabel", fieldNavigateHint: "fieldNavigateHint" }, outputs: { panelClose: "panelClose" }, host: { properties: { "class": "this.hostClass", "attr.hidden": "this.hostHidden" } }, usesOnChanges: true, ngImport: i0, template: "@if (isShown) {\r\n<div class=\"validation-summary__panel\" role=\"region\" [attr.aria-labelledby]=\"title.trim() ? titleElementId : null\"\r\n [attr.aria-label]=\"title.trim() ? null : 'Resumo de valida\u00E7\u00E3o'\"\r\n [class.validation-summary__panel--pinned]=\"pinned\"\r\n [class.validation-summary__panel--pinned-open]=\"pinned && pinnedOpen\"\r\n [class.validation-summary__panel--list-collapsed]=\"!panelBodyExpanded\">\r\n <div class=\"validation-summary__head\">\r\n @if (showListCollapseToggle) {\r\n <button type=\"button\" class=\"validation-summary__collapse-toggle\" (click)=\"toggleListBody()\"\r\n [attr.aria-expanded]=\"panelBodyExpanded\" [attr.aria-controls]=\"listRegionId\"\r\n [attr.aria-label]=\"panelBodyExpanded ? 'Recolher lista de erros' : 'Expandir lista de erros'\">\r\n <i class=\"fa-solid\" aria-hidden=\"true\" [class.fa-chevron-up]=\"panelBodyExpanded\"\r\n [class.fa-chevron-down]=\"!panelBodyExpanded\"></i>\r\n </button>\r\n }\r\n @if (title.trim()) {\r\n <h3 class=\"validation-summary__title\" [id]=\"titleElementId\">\r\n {{ title }}\r\n </h3>\r\n }\r\n @if (showCloseButton) {\r\n <button type=\"button\" class=\"validation-summary__close\" (click)=\"onCloseClick()\">\r\n {{ closeButtonLabel }}\r\n </button>\r\n }\r\n </div>\r\n <div class=\"validation-summary__list-wrap\" [id]=\"listRegionId\"\r\n [class.validation-summary__list-wrap--scrollable]=\"!!panelMaxHeight && panelBodyExpanded\"\r\n [class.validation-summary__list-wrap--collapsed]=\"!panelBodyExpanded\"\r\n [style.max-height]=\"panelBodyExpanded ? (panelMaxHeight || null) : null\" [attr.title]=\"fieldNavigateHint\">\r\n <ul class=\"validation-summary__list\" role=\"list\">\r\n @for (row of resolvedItems; track itemTrackKey(row, $index)) {\r\n <li class=\"validation-summary__item\" role=\"listitem\" (click)=\"onSummaryLinkActivate($event, row)\">\r\n @if (row.fieldId) {\r\n <button type=\"button\" class=\"validation-summary__link\" [attr.title]=\"fieldNavigateHint\">\r\n {{ row.message }}\r\n </button>\r\n } @else {\r\n <span class=\"validation-summary__text\">{{ row.message }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>\r\n}", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;flex:0 0 auto;align-self:stretch}:host.validation-summary--pinned-host{position:static;display:block;box-sizing:border-box;flex:0 0 auto!important;width:100%;max-width:100%;height:0!important;min-height:0!important;margin:0!important;padding:0!important;overflow:visible;pointer-events:none}.validation-summary__panel.validation-summary__panel--pinned{position:fixed;z-index:var(--app-z-validation-summary-pinned, 1400);top:max(.65rem,env(safe-area-inset-top,0px));left:1rem;right:1rem;width:auto;max-width:min(100%,52rem);margin-left:auto;margin-right:auto;box-sizing:border-box;pointer-events:auto;box-shadow:0 4px 6px -1px #00000014,0 10px 24px -6px #0000001f;transform:none;opacity:0;transition:opacity .2s ease-out}.validation-summary__panel.validation-summary__panel--pinned.validation-summary__panel--pinned-open{opacity:1}.validation-summary__panel{width:100%;border-radius:10px;padding:.85rem 1rem;box-sizing:border-box;border:1px solid transparent}.validation-summary__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.45rem .75rem;margin-bottom:.55rem}.validation-summary__panel--list-collapsed .validation-summary__head{margin-bottom:0}.validation-summary__collapse-toggle{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:0;padding:0;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.8rem;line-height:1;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__collapse-toggle:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__collapse-toggle:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__title{margin:0;flex:1 1 auto;min-width:0;font-size:1rem;font-weight:600;line-height:1.35;user-select:none;-webkit-user-select:none}.validation-summary__close{flex-shrink:0;margin:0 0 0 auto;padding:.3rem .7rem;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.85rem;font-weight:500;font-family:inherit;line-height:1.3;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__close:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__close:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__list-wrap{min-width:0;user-select:none;-webkit-user-select:none;overflow:hidden;transition:max-height .28s ease,opacity .22s ease,margin .2s ease}.validation-summary__list-wrap--collapsed{max-height:0!important;opacity:0;margin:0;padding:0;pointer-events:none}.validation-summary__list-wrap--scrollable{overflow-y:auto;overflow-x:hidden;padding-right:.15rem;scrollbar-gutter:stable}.validation-summary__list{margin:0;padding:0;list-style:none}.validation-summary__item{display:flex;align-items:flex-start;gap:.4rem;margin:.2rem 0;padding:0;line-height:1.45;color:var(--ui-validation-summary-text, #1a1a1a);user-select:none;-webkit-user-select:none}.validation-summary__item:before{content:\"\\2022\";flex-shrink:0;line-height:inherit;color:var(--ui-validation-summary-text, #1a1a1a)}.validation-summary__text{display:inline;font:inherit;user-select:none;-webkit-user-select:none}.validation-summary__link{flex:1;min-width:0;display:block;margin:0;padding:0;border:none;background:none;font:inherit;color:inherit;text-align:left;text-decoration:underline;text-underline-offset:.12em;cursor:pointer;user-select:none;-webkit-user-select:none}.validation-summary__link:hover{color:var(--ui-validation-summary-link-hover, #0d47a1)}.validation-summary__link:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px;border-radius:4px}:host.validation-summary--error .validation-summary__link:hover{color:var(--app-color-error, #b91c1c)}:host.validation-summary--error .validation-summary__panel{background:var(--ui-validation-summary-bg-error, #ffebee);border-color:var(--ui-validation-summary-border-error, #ffcdd2)}:host.validation-summary--error .validation-summary__title{color:var(--ui-validation-summary-title-error, #b71c1c)}:host.validation-summary--warning .validation-summary__panel{background:var(--ui-validation-summary-bg-warning, #fff8e1);border-color:var(--ui-validation-summary-border-warning, #ffe082)}:host.validation-summary--warning .validation-summary__title{color:var(--ui-validation-summary-title-warning, #e65100)}:host.validation-summary--warning .validation-summary__close{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle:hover{border-color:#e651008c}:host.validation-summary--info .validation-summary__panel{background:var(--ui-validation-summary-bg-info, #e3f2fd);border-color:var(--ui-validation-summary-border-info, #90caf9)}:host.validation-summary--info .validation-summary__title{color:var(--ui-validation-summary-title-info, #0d47a1)}:host.validation-summary--info .validation-summary__close{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle:hover{border-color:#0d47a18c}:host.validation-summary--compact .validation-summary__panel{padding:.55rem .7rem}:host.validation-summary--compact .validation-summary__head{margin-bottom:.35rem}:host.validation-summary--compact .validation-summary__title{font-size:.92rem}:host.validation-summary--compact .validation-summary__list{padding-left:0}:host.validation-summary--compact .validation-summary__item{font-size:.88rem;margin:.12rem 0}:host.validation-summary--compact .validation-summary__collapse-toggle{width:1.75rem;height:1.75rem;font-size:.72rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
346
|
+
}
|
|
347
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationSummaryComponent, decorators: [{
|
|
348
|
+
type: Component,
|
|
349
|
+
args: [{ selector: 'app-validation-summary', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isShown) {\r\n<div class=\"validation-summary__panel\" role=\"region\" [attr.aria-labelledby]=\"title.trim() ? titleElementId : null\"\r\n [attr.aria-label]=\"title.trim() ? null : 'Resumo de valida\u00E7\u00E3o'\"\r\n [class.validation-summary__panel--pinned]=\"pinned\"\r\n [class.validation-summary__panel--pinned-open]=\"pinned && pinnedOpen\"\r\n [class.validation-summary__panel--list-collapsed]=\"!panelBodyExpanded\">\r\n <div class=\"validation-summary__head\">\r\n @if (showListCollapseToggle) {\r\n <button type=\"button\" class=\"validation-summary__collapse-toggle\" (click)=\"toggleListBody()\"\r\n [attr.aria-expanded]=\"panelBodyExpanded\" [attr.aria-controls]=\"listRegionId\"\r\n [attr.aria-label]=\"panelBodyExpanded ? 'Recolher lista de erros' : 'Expandir lista de erros'\">\r\n <i class=\"fa-solid\" aria-hidden=\"true\" [class.fa-chevron-up]=\"panelBodyExpanded\"\r\n [class.fa-chevron-down]=\"!panelBodyExpanded\"></i>\r\n </button>\r\n }\r\n @if (title.trim()) {\r\n <h3 class=\"validation-summary__title\" [id]=\"titleElementId\">\r\n {{ title }}\r\n </h3>\r\n }\r\n @if (showCloseButton) {\r\n <button type=\"button\" class=\"validation-summary__close\" (click)=\"onCloseClick()\">\r\n {{ closeButtonLabel }}\r\n </button>\r\n }\r\n </div>\r\n <div class=\"validation-summary__list-wrap\" [id]=\"listRegionId\"\r\n [class.validation-summary__list-wrap--scrollable]=\"!!panelMaxHeight && panelBodyExpanded\"\r\n [class.validation-summary__list-wrap--collapsed]=\"!panelBodyExpanded\"\r\n [style.max-height]=\"panelBodyExpanded ? (panelMaxHeight || null) : null\" [attr.title]=\"fieldNavigateHint\">\r\n <ul class=\"validation-summary__list\" role=\"list\">\r\n @for (row of resolvedItems; track itemTrackKey(row, $index)) {\r\n <li class=\"validation-summary__item\" role=\"listitem\" (click)=\"onSummaryLinkActivate($event, row)\">\r\n @if (row.fieldId) {\r\n <button type=\"button\" class=\"validation-summary__link\" [attr.title]=\"fieldNavigateHint\">\r\n {{ row.message }}\r\n </button>\r\n } @else {\r\n <span class=\"validation-summary__text\">{{ row.message }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>\r\n}", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;flex:0 0 auto;align-self:stretch}:host.validation-summary--pinned-host{position:static;display:block;box-sizing:border-box;flex:0 0 auto!important;width:100%;max-width:100%;height:0!important;min-height:0!important;margin:0!important;padding:0!important;overflow:visible;pointer-events:none}.validation-summary__panel.validation-summary__panel--pinned{position:fixed;z-index:var(--app-z-validation-summary-pinned, 1400);top:max(.65rem,env(safe-area-inset-top,0px));left:1rem;right:1rem;width:auto;max-width:min(100%,52rem);margin-left:auto;margin-right:auto;box-sizing:border-box;pointer-events:auto;box-shadow:0 4px 6px -1px #00000014,0 10px 24px -6px #0000001f;transform:none;opacity:0;transition:opacity .2s ease-out}.validation-summary__panel.validation-summary__panel--pinned.validation-summary__panel--pinned-open{opacity:1}.validation-summary__panel{width:100%;border-radius:10px;padding:.85rem 1rem;box-sizing:border-box;border:1px solid transparent}.validation-summary__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.45rem .75rem;margin-bottom:.55rem}.validation-summary__panel--list-collapsed .validation-summary__head{margin-bottom:0}.validation-summary__collapse-toggle{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:0;padding:0;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.8rem;line-height:1;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__collapse-toggle:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__collapse-toggle:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__title{margin:0;flex:1 1 auto;min-width:0;font-size:1rem;font-weight:600;line-height:1.35;user-select:none;-webkit-user-select:none}.validation-summary__close{flex-shrink:0;margin:0 0 0 auto;padding:.3rem .7rem;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.85rem;font-weight:500;font-family:inherit;line-height:1.3;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__close:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__close:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__list-wrap{min-width:0;user-select:none;-webkit-user-select:none;overflow:hidden;transition:max-height .28s ease,opacity .22s ease,margin .2s ease}.validation-summary__list-wrap--collapsed{max-height:0!important;opacity:0;margin:0;padding:0;pointer-events:none}.validation-summary__list-wrap--scrollable{overflow-y:auto;overflow-x:hidden;padding-right:.15rem;scrollbar-gutter:stable}.validation-summary__list{margin:0;padding:0;list-style:none}.validation-summary__item{display:flex;align-items:flex-start;gap:.4rem;margin:.2rem 0;padding:0;line-height:1.45;color:var(--ui-validation-summary-text, #1a1a1a);user-select:none;-webkit-user-select:none}.validation-summary__item:before{content:\"\\2022\";flex-shrink:0;line-height:inherit;color:var(--ui-validation-summary-text, #1a1a1a)}.validation-summary__text{display:inline;font:inherit;user-select:none;-webkit-user-select:none}.validation-summary__link{flex:1;min-width:0;display:block;margin:0;padding:0;border:none;background:none;font:inherit;color:inherit;text-align:left;text-decoration:underline;text-underline-offset:.12em;cursor:pointer;user-select:none;-webkit-user-select:none}.validation-summary__link:hover{color:var(--ui-validation-summary-link-hover, #0d47a1)}.validation-summary__link:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px;border-radius:4px}:host.validation-summary--error .validation-summary__link:hover{color:var(--app-color-error, #b91c1c)}:host.validation-summary--error .validation-summary__panel{background:var(--ui-validation-summary-bg-error, #ffebee);border-color:var(--ui-validation-summary-border-error, #ffcdd2)}:host.validation-summary--error .validation-summary__title{color:var(--ui-validation-summary-title-error, #b71c1c)}:host.validation-summary--warning .validation-summary__panel{background:var(--ui-validation-summary-bg-warning, #fff8e1);border-color:var(--ui-validation-summary-border-warning, #ffe082)}:host.validation-summary--warning .validation-summary__title{color:var(--ui-validation-summary-title-warning, #e65100)}:host.validation-summary--warning .validation-summary__close{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle:hover{border-color:#e651008c}:host.validation-summary--info .validation-summary__panel{background:var(--ui-validation-summary-bg-info, #e3f2fd);border-color:var(--ui-validation-summary-border-info, #90caf9)}:host.validation-summary--info .validation-summary__title{color:var(--ui-validation-summary-title-info, #0d47a1)}:host.validation-summary--info .validation-summary__close{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle:hover{border-color:#0d47a18c}:host.validation-summary--compact .validation-summary__panel{padding:.55rem .7rem}:host.validation-summary--compact .validation-summary__head{margin-bottom:.35rem}:host.validation-summary--compact .validation-summary__title{font-size:.92rem}:host.validation-summary--compact .validation-summary__list{padding-left:0}:host.validation-summary--compact .validation-summary__item{font-size:.88rem;margin:.12rem 0}:host.validation-summary--compact .validation-summary__collapse-toggle{width:1.75rem;height:1.75rem;font-size:.72rem}\n"] }]
|
|
350
|
+
}], propDecorators: { messages: [{
|
|
351
|
+
type: Input
|
|
352
|
+
}], items: [{
|
|
353
|
+
type: Input
|
|
354
|
+
}], title: [{
|
|
355
|
+
type: Input
|
|
356
|
+
}], visible: [{
|
|
357
|
+
type: Input,
|
|
358
|
+
args: [{ transform: booleanAttribute }]
|
|
359
|
+
}], pinned: [{
|
|
360
|
+
type: Input,
|
|
361
|
+
args: [{ transform: booleanAttribute }]
|
|
362
|
+
}], variant: [{
|
|
363
|
+
type: Input
|
|
364
|
+
}], compact: [{
|
|
365
|
+
type: Input,
|
|
366
|
+
args: [{ transform: booleanAttribute }]
|
|
367
|
+
}], panelMaxHeight: [{
|
|
368
|
+
type: Input
|
|
369
|
+
}], scrollBehavior: [{
|
|
370
|
+
type: Input
|
|
371
|
+
}], beforeItemActivate: [{
|
|
372
|
+
type: Input
|
|
373
|
+
}], showCloseButton: [{
|
|
374
|
+
type: Input,
|
|
375
|
+
args: [{ transform: booleanAttribute }]
|
|
376
|
+
}], showListCollapseToggle: [{
|
|
377
|
+
type: Input,
|
|
378
|
+
args: [{ transform: booleanAttribute }]
|
|
379
|
+
}], closeButtonLabel: [{
|
|
380
|
+
type: Input
|
|
381
|
+
}], fieldNavigateHint: [{
|
|
382
|
+
type: Input
|
|
383
|
+
}], panelClose: [{
|
|
384
|
+
type: Output
|
|
385
|
+
}], hostClass: [{
|
|
386
|
+
type: HostBinding,
|
|
387
|
+
args: ['class']
|
|
388
|
+
}], hostHidden: [{
|
|
389
|
+
type: HostBinding,
|
|
390
|
+
args: ['attr.hidden']
|
|
391
|
+
}] } });
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZm9ybS1sYXlvdXQvdmFsaWRhdGlvbi1zdW1tYXJ5L3ZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2Zvcm0tbGF5b3V0L3ZhbGlkYXRpb24tc3VtbWFyeS92YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFHUixNQUFNLEVBRU4sZUFBZSxFQUNmLGdCQUFnQixFQUNoQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7O0FBTXZCLHlHQUF5RztBQUN6RyxNQUFNLDRCQUE0QixHQUFHLG1CQUFtQixDQUFDO0FBU3pELE1BQU0sT0FBTywwQkFBMEI7SUFQdkM7UUFXRSxvSUFBb0k7UUFDbkgsK0JBQTBCLEdBQUcsRUFBRSxDQUFDO1FBRWhDLFdBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzFDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0M7OztXQUdHO1FBQ0ssZ0JBQVcsR0FBMkIsSUFBSSxDQUFDO1FBQzNDLCtCQUEwQixHQUF1QixJQUFJ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RE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgVmFsaWRhdGlvblN1bW1hcnlJdGVtLFxuICBWYWxpZGF0aW9uU3VtbWFyeVZhcmlhbnQsXG59IGZyb20gJy4uL19tb2RlbHMvdmFsaWRhdGlvbi1zdW1tYXJ5Lm1vZGVsJztcblxuLyoqIEV2ZW50byBubyBob3N0IGBhcHAtZm9ybS1ncm91cGA6IGV4cGFuZGlyIGdydXBvIHNlbSBzY3JvbGwgcHLDs3ByaW8gKG5hdmVnYcOnw6NvIGEgcGFydGlyIGRvIHJlc3VtbykuICovXG5jb25zdCBVSV9SRVFVRVNUX0VYUEFORF9GT1JNX0dST1VQID0gJ3VpLXJlcXVlc3QtZXhwYW5kJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXZhbGlkYXRpb24tc3VtbWFyeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi92YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyBuZXh0VGl0bGVVaWQgPSAwO1xuICBwcml2YXRlIHN0YXRpYyBuZXh0TGlzdFJlZ2lvblVpZCA9IDA7XG5cbiAgLyoqIFRyb2NhIGRlIGFiYSAoYGJlZm9yZUl0ZW1BY3RpdmF0ZWApICsgYHF1ZXVlTWljcm90YXNrYCBubyBgYXBwLWZvcm0tdGFic2Ag4oCUIG8gYWx2byBwb2RlIGZpY2FyIGVtIGBbaGlkZGVuXWAgYXTDqSBvIHByw7N4aW1vIENELiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hdmlnYXRlVG9GaWVsZE1heEF0dGVtcHRzID0gMjg7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3RSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAvKipcbiAgICogQ29tIGBwaW5uZWRgLCBvIGhvc3QgcGFzc2EgcGFyYSBgZG9jdW1lbnQuYm9keWAgcGFyYSBvIGB6LWluZGV4YCBjb21wZXRpciBjb20gYSBzaGVsbCAoZXguOiBkcmF3ZXJcbiAgICogZGEgZG9jIG5vIGlQaG9uZSkuIEFudGVzIGRlIG1vdmVyLCBndWFyZGFtb3MgbyBgZm9ybWAgbWFpcyBwcsOzeGltbyDigJQgYGNsb3Nlc3QoJ2Zvcm0nKWAgbm8gYm9keSBmYWxoYXJpYS5cbiAgICovXG4gIHByaXZhdGUgbmVhcmVzdEZvcm06IEhUTUxGb3JtRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBpbm5lZFBvcnRhbE9yaWdpbmFsUGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBpbm5lZFBvcnRhbE9yaWdpbmFsTmV4dDogQ2hpbGROb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIGBpZGAgw7puaWNvIHBhcmEgYGFyaWEtbGFiZWxsZWRieWAgcXVhbmRvIGjDoSB2w6FyaW9zIHJlc3Vtb3MgbmEgcMOhZ2luYS4gKi9cbiAgcmVhZG9ubHkgdGl0bGVFbGVtZW50SWQgPSBgdmFsaWRhdGlvbi1zdW1tYXJ5LXRpdGxlLSR7KytWYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudC5uZXh0VGl0bGVVaWR9YDtcblxuICAvKiogYGlkYCBkYSByZWdpw6NvIGRhIGxpc3RhIChhY2Vzc2liaWxpZGFkZSBkbyBib3TDo28gcmVjb2xoZXIgLyBleHBhbmRpcikuICovXG4gIHJlYWRvbmx5IGxpc3RSZWdpb25JZCA9IGB2YWxpZGF0aW9uLXN1bW1hcnktbGlzdC0keysrVmFsaWRhdGlvblN1bW1hcnlDb21wb25lbnQubmV4dExpc3RSZWdpb25VaWR9YDtcblxuICAvKiogTGlzdGEgc2ltcGxlcyAocmV0cm9jb21wYXTDrXZlbCkuIElnbm9yYWRhIHNlIHtAbGluayBpdGVtc30gdGl2ZXIgZW50cmFkYXMuICovXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBMaXN0YSByaWNhIGNvbSBgZmllbGRJZGAgb3BjaW9uYWwgcGFyYSBuYXZlZ2HDp8OjbyBhdMOpIG8gY29udHJvbGUuICovXG4gIEBJbnB1dCgpIGl0ZW1zOiBWYWxpZGF0aW9uU3VtbWFyeUl0ZW1bXSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHZpc2libGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBgZmFsc2VgIChwYWRyw6NvKTogZmx1eG8gZW0gZG9jdW1lbnRvIChleC46IG5vIHRvcG8gZG8gZm9ybXVsw6FyaW8pIOKAlCBvIGNvbnN1bWlkb3IgcG9kZSBmYXplciBzY3JvbGwgYXTDqSBvIHBhaW5lbC5cbiAgICogYHRydWVgOiBwYWluZWwgYHBvc2l0aW9uOiBmaXhlZGAgbm8gdG9wbyBkbyB2aWV3cG9ydCwgY29tIGZhZGUtaW4gKipzZW0qKiByZXNlcnZhciBlc3Bhw6dvIG5vIGZvcm11bMOhcmlvXG4gICAqIG5lbSBhbHRlcmFyIG8gc2Nyb2xsIGRhIHDDoWdpbmEgKMO6dGlsIGVtIGZvcm11bMOhcmlvcyBtdWl0byBsb25nb3MpLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBpbm5lZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFZhbGlkYXRpb25TdW1tYXJ5VmFyaWFudCA9ICdlcnJvcic7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3QgPSBmYWxzZTtcblxuICAvKipcbiAgICogQWx0dXJhIG3DoXhpbWEgZG8gcGFpbmVsIGRhIGxpc3RhIChleC46IGAxMnJlbWAsIGBtaW4oNDB2aCwgMTRyZW0pYCkuXG4gICAqIFF1YW5kbyBkZWZpbmlkbywgYSBsaXN0YSBvYnTDqW0gc2Nyb2xsIHZlcnRpY2FsIGludGVybm8uXG4gICAqL1xuICBASW5wdXQoKSBwYW5lbE1heEhlaWdodDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIENvbXBvcnRhbWVudG8gZGUgc2Nyb2xsIGFvIGNlbnRyYXIgbyBhbHZvIG5hIHRlbGEuICovXG4gIEBJbnB1dCgpIHNjcm9sbEJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnO1xuXG4gIC8qKlxuICAgKiBDaGFtYWRvIGFudGVzIGRlIGxvY2FsaXphciBvIGVsZW1lbnRvIHBvciBgZmllbGRJZGAgKGV4LjogYXRpdmFyIGEgYWJhIG9uZGUgZXN0w6EgbyBjYW1wbykuXG4gICAqIE1hbnTDqW0gbyBjb250cmF0byBkbyByZXN1bW8gY29tbyBmb250ZSDDum5pY2EgZGUgc2Nyb2xsL2ZvY28gZW0gYG5hdmlnYXRlVG9GaWVsZElkYC5cbiAgICovXG4gIEBJbnB1dCgpIGJlZm9yZUl0ZW1BY3RpdmF0ZT86IChpdGVtOiBWYWxpZGF0aW9uU3VtbWFyeUl0ZW0pID0+IHZvaWQ7XG5cbiAgLyoqIE1vc3RyYSBib3TDo28gcXVlIGFwZW5hcyBmZWNoYSBvIHBhaW5lbCAobsOjbyBhbHRlcmEgdmFsaWRhw6fDo28gbmVtIG8gZm9ybXVsw6FyaW8pLiAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE1vc3RyYSBvIGJvdMOjbyBjb20gc2V0YXMgKHJlY29saGVyIC8gZXhwYW5kaXIpIGFvIGxhZG8gZG8gdMOtdHVsbyBwYXJhIGVzY29uZGVyIHPDsyBhIGxpc3RhXG4gICAqIGUgcG91cGFyIGVzcGHDp28gdmVydGljYWwgc2VtIGZlY2hhciBvIHBhaW5lbC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TGlzdENvbGxhcHNlVG9nZ2xlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBjbG9zZUJ1dHRvbkxhYmVsID0gJ0ZlY2hhcic7XG5cbiAgLyoqIFRleHRvIGRhIGRpY2EgbmF0aXZhIChgdGl0bGVgKSBuYXMgbGluaGFzIGNvbSBkZXN0aW5vIGFvIGNhbXBvLiAqL1xuICBASW5wdXQoKSBmaWVsZE5hdmlnYXRlSGludCA9ICdDbGlxdWUgcGFyYSBpciBhbyBjYW1wby4nO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBwYW5lbENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBDb20gYHBpbm5lZGA6IGJyZXZlIGZhZGUtaW4gYXDDs3MgbyBwYWluZWwgcGFzc2FyIGEgdmlzw612ZWwgKHNlbSBkZXNsb2NhciBvIGxheW91dCkuICovXG4gIHBpbm5lZE9wZW4gPSBmYWxzZTtcblxuICAvKiogYHRydWVgOiBsaXN0YSBkZSBlcnJvcyB2aXPDrXZlbDsgYGZhbHNlYDogc8OzIGNhYmXDp2FsaG8gKyBib3TDtWVzIChtZW5vcyBhbHR1cmEpLiAqL1xuICBwYW5lbEJvZHlFeHBhbmRlZCA9IHRydWU7XG5cbiAgcHJpdmF0ZSB3YXNTaG93biA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAndmFsaWRhdGlvbi1zdW1tYXJ5JyxcbiAgICAgIGB2YWxpZGF0aW9uLXN1bW1hcnktLSR7dGhpcy52YXJpYW50fWAsXG4gICAgXTtcbiAgICBpZiAodGhpcy5jb21wYWN0KSB7XG4gICAgICBwYXJ0cy5wdXNoKCd2YWxpZGF0aW9uLXN1bW1hcnktLWNvbXBhY3QnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGlubmVkICYmIHRoaXMuaXNTaG93bikge1xuICAgICAgcGFydHMucHVzaCgndmFsaWRhdGlvbi1zdW1tYXJ5LS1waW5uZWQtaG9zdCcpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLnN5bmNQaW5uZWRIb3N0VG9Cb2R5KCk7XG4gICAgY29uc3Qgc2hvd24gPSB0aGlzLmlzU2hvd247XG4gICAgaWYgKHRoaXMucGlubmVkICYmIHNob3duICYmICF0aGlzLndhc1Nob3duKSB7XG4gICAgICB0aGlzLnBpbm5lZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBpbm5lZE9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXNob3duKSB7XG4gICAgICB0aGlzLnBpbm5lZE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMucGFuZWxCb2R5RXhwYW5kZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLndhc1Nob3duID0gc2hvd247XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRldGFjaFBpbm5lZEhvc3RGcm9tQm9keSgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhpZGRlbicpXG4gIGdldCBob3N0SGlkZGVuKCk6IHRydWUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5pc1Nob3duID8gbnVsbCA6IHRydWU7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRJdGVtcygpOiBWYWxpZGF0aW9uU3VtbWFyeUl0ZW1bXSB7XG4gICAgY29uc3QgZnJvbUl0ZW1zID0gKHRoaXMuaXRlbXMgPz8gW10pLmZpbHRlcihcbiAgICAgIChpKSA9PiBpICYmIHR5cGVvZiBpLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGkubWVzc2FnZS50cmltKCkubGVuZ3RoID4gMCxcbiAgICApO1xuICAgIGlmIChmcm9tSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZyb21JdGVtcy5tYXAoKGkpID0+ICh7XG4gICAgICAgIG1lc3NhZ2U6IGkubWVzc2FnZS50cmltKCksXG4gICAgICAgIGZpZWxkSWQ6IGkuZmllbGRJZD8udHJpbSgpIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm1lc3NhZ2VzID8/IFtdKVxuICAgICAgLmZpbHRlcigobSkgPT4gdHlwZW9mIG0gPT09ICdzdHJpbmcnICYmIG0udHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAubWFwKChtZXNzYWdlKSA9PiAoeyBtZXNzYWdlOiBtZXNzYWdlLnRyaW0oKSB9KSk7XG4gIH1cblxuICBnZXQgaXNTaG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlICYmIHRoaXMucmVzb2x2ZWRJdGVtcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgb25DbG9zZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMucGFuZWxDbG9zZS5lbWl0KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVMaXN0Qm9keSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhbmVsQm9keUV4cGFuZGVkID0gIXRoaXMucGFuZWxCb2R5RXhwYW5kZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhdmUgZXN0w6F2ZWwgcGFyYSBgQGZvcmAg4oCUIGB0cmFjayAkaW5kZXhgIHJldXRpbGl6YSBtYWwgbsOzcyBxdWFuZG8gYSBsaXN0YSBtdWRhIGFvIHZpdm9cbiAgICogZSBvIGdldHRlciBgcmVzb2x2ZWRJdGVtc2AgZGV2b2x2ZSBub3ZhcyByZWZlcsOqbmNpYXMgYSBjYWRhIENELlxuICAgKi9cbiAgaXRlbVRyYWNrS2V5KHJvdzogVmFsaWRhdGlvblN1bW1hcnlJdGVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWQgPSByb3cuZmllbGRJZD8udHJpbSgpO1xuICAgIGlmIChmaWQpIHtcbiAgICAgIHJldHVybiBmaWQ7XG4gICAgfVxuICAgIHJldHVybiBgbXNnLSR7aW5kZXh9LSR7cm93Lm1lc3NhZ2V9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlxdWUgbmEgbGluaGEgY29tIGRlc3Rpbm86IHByaW1laXJvIGFsaW5oYSBhIGxpbmhhIG5vIGBsaXN0LXdyYXBgIGNvbSBzY3JvbGxcbiAgICogKGl0ZW5zIHBhcmNpYWxtZW50ZSB2aXPDrXZlaXMgcGFzc2FtIGEgZmljYXIgdG90YWxtZW50ZSB2aXPDrXZlaXMpLCBkZXBvaXMgbmF2ZWdhLlxuICAgKi9cbiAgb25TdW1tYXJ5TGlua0FjdGl2YXRlKGV2OiBFdmVudCwgaXRlbTogVmFsaWRhdGlvblN1bW1hcnlJdGVtKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSBldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgaW5saW5lOiAnbmVhcmVzdCcsXG4gICAgICAgIGJlaGF2aW9yOiAnYXV0bycsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vbkl0ZW1BY3RpdmF0ZShpdGVtKTtcbiAgfVxuXG4gIC8qKiBOYXZlZ2HDp8OjbyBhdMOpIG8gY29udHJvbGUgY29tIGBmaWVsZElkYCAoY2hhbWFkbyBhcMOzcyB7QGxpbmsgb25TdW1tYXJ5TGlua0FjdGl2YXRlfSkuICovXG4gIG9uSXRlbUFjdGl2YXRlKGl0ZW06IFZhbGlkYXRpb25TdW1tYXJ5SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gaXRlbS5maWVsZElkPy50cmltKCk7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYmVmb3JlSXRlbUFjdGl2YXRlPy4oaXRlbSk7XG5cbiAgICAvLyAxKSBgYWZ0ZXJOZXh0UmVuZGVyYDogYXDDs3MgbyBET00gcmVmbGV0aXIgKGV4LjogbXVkYW7Dp2EgZGUgYWJhIGVtIGBiZWZvcmVJdGVtQWN0aXZhdGVgKS5cbiAgICAvLyAyKSBgc2V0VGltZW91dCgwKWA6IGZvcmEgZG8gY2ljbG8gZGUgdmVyaWZpY2HDp8OjbyDigJQgZXZpdGEgTkcwMTAwIGFvIGV4cGFuZGlyIGBhcHAtZm9ybS1ncm91cGAuXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2aWdhdGVUb0ZpZWxkSWQoaWQpLCAwKTtcbiAgICAgIH0sXG4gICAgICB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGVUb0ZpZWxkSWQoaWQ6IHN0cmluZywgYXR0ZW1wdCA9IDApOiB2b2lkIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIXJlc29sdmVkIHx8ICEocmVzb2x2ZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgIGlmIChhdHRlbXB0IDwgdGhpcy5uYXZpZ2F0ZVRvRmllbGRNYXhBdHRlbXB0cykge1xuICAgICAgICAvKlxuICAgICAgICAgKiBDb20gYGRlc3Ryb3lPbkNvbGxhcHNlYCwgbyBjb250cm9sZSBuw6NvIGV4aXN0ZSBubyBET00gZW5xdWFudG8gbyBgYXBwLWZvcm0tZ3JvdXBgIGVzdMOhIGZlY2hhZG87XG4gICAgICAgICAqIGBleHBhbmRDb2xsYXBzZWRGb3JtR3JvdXBBbmNlc3RvcnNgIG51bmNhIGNvcnJlIHBvcnF1ZSBkZXBlbmRlIGRvIGVsZW1lbnRvIGrDoSBleGlzdGlyLlxuICAgICAgICAgKiBFeHBhbmRpbW9zIHRvZG9zIG9zIGdydXBvcyBjb2xhcHNhZG9zIG5vIGA8Zm9ybT5gIG1haXMgcHLDs3hpbW8gZSByZXBldGltb3MgYXDDs3MgdW0gQ0QuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZENvbGxhcHNlZEZvcm1Hcm91cHNJbk5lYXJlc3RGb3JtKCk7XG4gICAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvRmllbGRJZChpZCwgYXR0ZW1wdCArIDEpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2VwYXJhZG9yZXMgaW5hdGl2b3MgKGBhcHAtZm9ybS10YWJgKSB1c2FtIGBbaGlkZGVuXWAg4oCUIGBnZXRFbGVtZW50QnlJZGAgZXhpc3RlIG1hcyBmb2NvIGZhbGhhXG4gICAgLy8gYXTDqSBvIHBhaW5lbCBlc3RhciB2aXPDrXZlbDsgcmUtdGVudGEgYXDDs3MgQ0QgKGV4LjogZGVtbyBBYmFzIGFvIHNhbHRhciBkZSBhYmEpLlxuICAgIGlmIChyZXNvbHZlZC5jbG9zZXN0KCdbaGlkZGVuXScpKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IHRoaXMubmF2aWdhdGVUb0ZpZWxkTWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgdGhpcy5hcHBSZWYudGljaygpO1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLm5hdmlnYXRlVG9GaWVsZElkKGlkLCBhdHRlbXB0ICsgMSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbSBgYXBwLWZvcm0tZ3JvdXBgIGNvbGFwc2FkbyAoY29ycG8gYGRpc3BsYXk6IG5vbmVgKSwgYGdldEVsZW1lbnRCeUlkYCBhaW5kYSBlbmNvbnRyYSBvIGFsdm9cbiAgICAgKiBtYXMgbyBmb2NvIGZhbGhhIGF0w6kgbyBwcsOzeGltbyBDRCDigJQgc2VtIHJlaW50ZW50byBwYXJlY2UgcXVlIMOpIHByZWNpc28gdW0gc2VndW5kbyBjbGlxdWUgbm8gcmVzdW1vLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzSW5zaWRlQ29sbGFwc2VkRm9ybUdyb3VwQm9keShyZXNvbHZlZCkpIHtcbiAgICAgIHRoaXMuZXhwYW5kQ29sbGFwc2VkRm9ybUdyb3VwQW5jZXN0b3JzKHJlc29sdmVkKTtcbiAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICAgIGlmIChhdHRlbXB0IDwgdGhpcy5uYXZpZ2F0ZVRvRmllbGRNYXhBdHRlbXB0cykge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLm5hdmlnYXRlVG9GaWVsZElkKGlkLCBhdHRlbXB0ICsgMSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5kQ29sbGFwc2VkRm9ybUdyb3VwQW5jZXN0b3JzKHJlc29sdmVkKTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgdGhpcy5zY2hlZHVsZVNjcm9sbEFuZEZvY3VzQWZ0ZXJEb21GbHVzaChpZCk7XG4gIH1cblxuICAvKiogQXDDs3MgYHRpY2soKWAsIGdhcmFudGUgdW0gZnJhbWUgZGUgcGludHVyYSBhbnRlcyBkZSBzY3JvbGwvZm9jbyAoZXZpdGEgZm9jbyBlbSByYW1vIGFpbmRhIG9jdWx0bykuICovXG4gIHByaXZhdGUgc2NoZWR1bGVTY3JvbGxBbmRGb2N1c0FmdGVyRG9tRmx1c2goaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnNjcm9sbEFuZEZvY3VzRmllbGRCeUlkKGlkKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnNpZGVDb2xsYXBzZWRGb3JtR3JvdXBCb2R5KGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGxldCBub2RlOiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbDtcbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0Py5jb250YWlucygnZm9ybS1ncm91cF9fYm9keS0tY29sbGFwc2VkLWhpZGRlbicpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxBbmRGb2N1c0ZpZWxkQnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKCFlbCB8fCAhKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMucmVzb2x2ZUZvY3VzYWJsZShlbCk7XG4gICAgZm9jdXNhYmxlLnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiB0aGlzLnNjcm9sbEJlaGF2aW9yLFxuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgaW5saW5lOiAnbmVhcmVzdCcsXG4gICAgfSk7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9jdXNhYmxlLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBmb2N1c2FibGUuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhcmEgYHVpLXJlcXVlc3QtZXhwYW5kYCBlbSBjYWRhIGBhcHAtZm9ybS1ncm91cGAgY29sYXBzYWRvIGRvIGZvcm11bMOhcmlvIHF1ZSBjb250w6ltIGVzdGUgcmVzdW1vLFxuICAgKiBwYXJhIG1vbnRhciBjYW1wb3MgY29tIGBkZXN0cm95T25Db2xsYXBzZWAgYW50ZXMgZGUgYGdldEVsZW1lbnRCeUlkKGZpZWxkSWQpYC5cbiAgICogT3JkZW0gZG8gRE9NIChwYWlzIGFudGVzIGRvcyBmaWxob3MpIGFsaW5oYSBhIGV4cGFuc8OjbyBkZSBncnVwb3MgYW5pbmhhZG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBleHBhbmRDb2xsYXBzZWRGb3JtR3JvdXBzSW5OZWFyZXN0Rm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtID1cbiAgICAgIHRoaXMubmVhcmVzdEZvcm0gPz8gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnZm9ybScpO1xuICAgIGlmICghKGZvcm0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhvc3RzID0gQXJyYXkuZnJvbShcbiAgICAgIGZvcm0ucXVlcnlTZWxlY3RvckFsbCgnYXBwLWZvcm0tZ3JvdXAuZm9ybS1ncm91cC0tY29sbGFwc2VkJyksXG4gICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgaG9zdCBvZiBob3N0cykge1xuICAgICAgaG9zdC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoVUlfUkVRVUVTVF9FWFBBTkRfRk9STV9HUk9VUCwge1xuICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogRXhwYW5kZSBkbyBtYWlzIGV4dGVybm8gcGFyYSBvIG1haXMgaW50ZXJubyBwYXJhIG8gY29udGXDumRvIGZpY2FyIHZpc8OtdmVsLiAqL1xuICBwcml2YXRlIGV4cGFuZENvbGxhcHNlZEZvcm1Hcm91cEFuY2VzdG9ycyhzdGFydDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBub2RlOiBIVE1MRWxlbWVudCB8IG51bGwgPSBzdGFydC5wYXJlbnRFbGVtZW50O1xuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYXBwLWZvcm0tZ3JvdXAnICYmXG4gICAgICAgIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdmb3JtLWdyb3VwLS1jb2xsYXBzZWQnKVxuICAgICAgKSB7XG4gICAgICAgIGhvc3RzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gaG9zdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGhvc3RzW2ldLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChVSV9SRVFVRVNUX0VYUEFORF9GT1JNX0dST1VQLCB7XG4gICAgICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUZvY3VzYWJsZShlbDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKHRoaXMuaXNGb2N1c2FibGVFbGVtZW50KGVsKSkge1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cbiAgICBjb25zdCBpbm5lciA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICAgJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sIFtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgICApO1xuICAgIHJldHVybiBpbm5lciA/PyBlbDtcbiAgfVxuXG4gIHByaXZhdGUgaXNGb2N1c2FibGVFbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChlbC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdGFnID0gZWwudGFnTmFtZTtcbiAgICBpZiAoXG4gICAgICB0YWcgPT09ICdJTlBVVCcgfHxcbiAgICAgIHRhZyA9PT0gJ1NFTEVDVCcgfHxcbiAgICAgIHRhZyA9PT0gJ1RFWFRBUkVBJyB8fFxuICAgICAgdGFnID09PSAnQlVUVE9OJ1xuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHRhYiA9IGVsLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICByZXR1cm4gdGFiICE9IG51bGwgJiYgdGFiICE9PSAnLTEnO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jUGlubmVkSG9zdFRvQm9keSgpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2hvdWxkUG9ydGFsID0gdGhpcy5waW5uZWQgJiYgdGhpcy5pc1Nob3duO1xuICAgIGlmIChzaG91bGRQb3J0YWwpIHtcbiAgICAgIGlmIChob3N0LnBhcmVudEVsZW1lbnQgPT09IHRoaXMuZG9jdW1lbnQuYm9keSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm5lYXJlc3RGb3JtID0gaG9zdC5jbG9zZXN0KCdmb3JtJyk7XG4gICAgICB0aGlzLnBpbm5lZFBvcnRhbE9yaWdpbmFsUGFyZW50ID0gaG9zdC5wYXJlbnRFbGVtZW50O1xuICAgICAgdGhpcy5waW5uZWRQb3J0YWxPcmlnaW5hbE5leHQgPSBob3N0Lm5leHRTaWJsaW5nO1xuICAgICAgaWYgKHRoaXMucGlubmVkUG9ydGFsT3JpZ2luYWxQYXJlbnQpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRldGFjaFBpbm5lZEhvc3RGcm9tQm9keSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRhY2hQaW5uZWRIb3N0RnJvbUJvZHkoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChob3N0LnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZG9jdW1lbnQuYm9keSB8fCAhdGhpcy5waW5uZWRQb3J0YWxPcmlnaW5hbFBhcmVudCkge1xuICAgICAgdGhpcy5uZWFyZXN0Rm9ybSA9IG51bGw7XG4gICAgICB0aGlzLnBpbm5lZFBvcnRhbE9yaWdpbmFsUGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMucGlubmVkUG9ydGFsT3JpZ2luYWxOZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5waW5uZWRQb3J0YWxPcmlnaW5hbFBhcmVudDtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5waW5uZWRQb3J0YWxPcmlnaW5hbE5leHQ7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChuZXh0Py5wYXJlbnROb2RlID09PSBwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShob3N0LCBuZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChob3N0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChob3N0KTtcbiAgICB9XG4gICAgdGhpcy5uZWFyZXN0Rm9ybSA9IG51bGw7XG4gICAgdGhpcy5waW5uZWRQb3J0YWxPcmlnaW5hbFBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5waW5uZWRQb3J0YWxPcmlnaW5hbE5leHQgPSBudWxsO1xuICB9XG59XG4iLCJAaWYgKGlzU2hvd24pIHtcclxuPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9fcGFuZWxcIiByb2xlPVwicmVnaW9uXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRpdGxlLnRyaW0oKSA/IHRpdGxlRWxlbWVudElkIDogbnVsbFwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0aXRsZS50cmltKCkgPyBudWxsIDogJ1Jlc3VtbyBkZSB2YWxpZGHDp8OjbydcIlxyXG4gIFtjbGFzcy52YWxpZGF0aW9uLXN1bW1hcnlfX3BhbmVsLS1waW5uZWRdPVwicGlubmVkXCJcclxuICBbY2xhc3MudmFsaWRhdGlvbi1zdW1tYXJ5X19wYW5lbC0tcGlubmVkLW9wZW5dPVwicGlubmVkICYmIHBpbm5lZE9wZW5cIlxyXG4gIFtjbGFzcy52YWxpZGF0aW9uLXN1bW1hcnlfX3BhbmVsLS1saXN0LWNvbGxhcHNlZF09XCIhcGFuZWxCb2R5RXhwYW5kZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19oZWFkXCI+XHJcbiAgICBAaWYgKHNob3dMaXN0Q29sbGFwc2VUb2dnbGUpIHtcclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19jb2xsYXBzZS10b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlTGlzdEJvZHkoKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWxCb2R5RXhwYW5kZWRcIiBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImxpc3RSZWdpb25JZFwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGFuZWxCb2R5RXhwYW5kZWQgPyAnUmVjb2xoZXIgbGlzdGEgZGUgZXJyb3MnIDogJ0V4cGFuZGlyIGxpc3RhIGRlIGVycm9zJ1wiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhLXNvbGlkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2NsYXNzLmZhLWNoZXZyb24tdXBdPVwicGFuZWxCb2R5RXhwYW5kZWRcIlxyXG4gICAgICAgIFtjbGFzcy5mYS1jaGV2cm9uLWRvd25dPVwiIXBhbmVsQm9keUV4cGFuZGVkXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKHRpdGxlLnRyaW0oKSkge1xyXG4gICAgPGgzIGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X190aXRsZVwiIFtpZF09XCJ0aXRsZUVsZW1lbnRJZFwiPlxyXG4gICAgICB7eyB0aXRsZSB9fVxyXG4gICAgPC9oMz5cclxuICAgIH1cclxuICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKSB7XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9fY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZUNsaWNrKClcIj5cclxuICAgICAge3sgY2xvc2VCdXR0b25MYWJlbCB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9fbGlzdC13cmFwXCIgW2lkXT1cImxpc3RSZWdpb25JZFwiXHJcbiAgICBbY2xhc3MudmFsaWRhdGlvbi1zdW1tYXJ5X19saXN0LXdyYXAtLXNjcm9sbGFibGVdPVwiISFwYW5lbE1heEhlaWdodCAmJiBwYW5lbEJvZHlFeHBhbmRlZFwiXHJcbiAgICBbY2xhc3MudmFsaWRhdGlvbi1zdW1tYXJ5X19saXN0LXdyYXAtLWNvbGxhcHNlZF09XCIhcGFuZWxCb2R5RXhwYW5kZWRcIlxyXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwicGFuZWxCb2R5RXhwYW5kZWQgPyAocGFuZWxNYXhIZWlnaHQgfHwgbnVsbCkgOiBudWxsXCIgW2F0dHIudGl0bGVdPVwiZmllbGROYXZpZ2F0ZUhpbnRcIj5cclxuICAgIDx1bCBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9fbGlzdFwiIHJvbGU9XCJsaXN0XCI+XHJcbiAgICAgIEBmb3IgKHJvdyBvZiByZXNvbHZlZEl0ZW1zOyB0cmFjayBpdGVtVHJhY2tLZXkocm93LCAkaW5kZXgpKSB7XHJcbiAgICAgIDxsaSBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9faXRlbVwiIHJvbGU9XCJsaXN0aXRlbVwiIChjbGljayk9XCJvblN1bW1hcnlMaW5rQWN0aXZhdGUoJGV2ZW50LCByb3cpXCI+XHJcbiAgICAgICAgQGlmIChyb3cuZmllbGRJZCkge1xyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19saW5rXCIgW2F0dHIudGl0bGVdPVwiZmllbGROYXZpZ2F0ZUhpbnRcIj5cclxuICAgICAgICAgIHt7IHJvdy5tZXNzYWdlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWxpZGF0aW9uLXN1bW1hcnlfX3RleHRcIj57eyByb3cubWVzc2FnZSB9fTwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIH1cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG59Il19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SkeletonBlockComponent } from './skeleton-block/skeleton-block.component';
|
|
2
|
+
export { SkeletonTextComponent } from './skeleton-text/skeleton-text.component';
|
|
3
|
+
export { SkeletonListComponent } from './skeleton-list/skeleton-list.component';
|
|
4
|
+
export { SkeletonCardComponent } from './skeleton-card/skeleton-card.component';
|
|
5
|
+
export { SkeletonTableComponent } from './skeleton-table/skeleton-table.component';
|
|
6
|
+
export { SkeletonFieldShellComponent, } from './skeleton-field-shell/skeleton-field-shell.component';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2xvYWRpbmcvc2tlbGV0b24tbG9hZGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQ0wsMkJBQTJCLEdBRTVCLE1BQU0sdURBQXVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBTa2VsZXRvbkJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9za2VsZXRvbi1ibG9jay9za2VsZXRvbi1ibG9jay5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvblRleHRDb21wb25lbnQgfSBmcm9tICcuL3NrZWxldG9uLXRleHQvc2tlbGV0b24tdGV4dC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL3NrZWxldG9uLWxpc3Qvc2tlbGV0b24tbGlzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvbkNhcmRDb21wb25lbnQgfSBmcm9tICcuL3NrZWxldG9uLWNhcmQvc2tlbGV0b24tY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvblRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9za2VsZXRvbi10YWJsZS9za2VsZXRvbi10YWJsZS5jb21wb25lbnQnO1xyXG5leHBvcnQge1xyXG4gIFNrZWxldG9uRmllbGRTaGVsbENvbXBvbmVudCxcclxuICB0eXBlIFNrZWxldG9uRmllbGRTaGVsbFZhcmlhbnQsXHJcbn0gZnJvbSAnLi9za2VsZXRvbi1maWVsZC1zaGVsbC9za2VsZXRvbi1maWVsZC1zaGVsbC5jb21wb25lbnQnO1xyXG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input, booleanAttribute, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** Bloco genérico de skeleton (linhas, caixas, células). */
|
|
4
|
+
export class SkeletonBlockComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
/** Largura CSS (ex.: `100%`, `6rem`, `40%`). */
|
|
7
|
+
this.width = '100%';
|
|
8
|
+
/** Altura CSS. */
|
|
9
|
+
this.height = '0.75rem';
|
|
10
|
+
/** Raio de canto. */
|
|
11
|
+
this.radius = '8px';
|
|
12
|
+
this.animate = true;
|
|
13
|
+
}
|
|
14
|
+
get hostClass() {
|
|
15
|
+
const parts = ['skeleton-block'];
|
|
16
|
+
if (this.animate) {
|
|
17
|
+
parts.push('skeleton-block--animate');
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
parts.push('skeleton-block--static');
|
|
21
|
+
}
|
|
22
|
+
return parts.join(' ');
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.12", type: SkeletonBlockComponent, isStandalone: true, selector: "app-skeleton-block", inputs: { width: "width", height: "height", radius: "radius", animate: ["animate", "animate", booleanAttribute] }, host: { properties: { "class": "this.hostClass" } }, ngImport: i0, template: "<span class=\"skeleton-block__inner\" aria-hidden=\"true\" [style.width]=\"width\" [style.height]=\"height\"\r\n [style.border-radius]=\"radius\"></span>\r\n", styles: ["@keyframes ui-skeleton-shimmer{to{transform:translate(100%)}}:host{display:block;min-width:0;box-sizing:border-box}.skeleton-block__inner{display:block;min-width:0;box-sizing:border-box}:host(.skeleton-block--animate) .skeleton-block__inner{position:relative;overflow:hidden;background:var(--app-color-skeleton-track, rgba(26, 47, 69, .09))}:host(.skeleton-block--animate) .skeleton-block__inner:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--app-color-skeleton-shine, rgba(255, 255, 255, .22)),transparent);animation:ui-skeleton-shimmer 1.35s ease-in-out infinite}:host(.skeleton-block--static) .skeleton-block__inner{background:var(--app-color-skeleton-track-strong, rgba(26, 47, 69, .12))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonBlockComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'app-skeleton-block', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"skeleton-block__inner\" aria-hidden=\"true\" [style.width]=\"width\" [style.height]=\"height\"\r\n [style.border-radius]=\"radius\"></span>\r\n", styles: ["@keyframes ui-skeleton-shimmer{to{transform:translate(100%)}}:host{display:block;min-width:0;box-sizing:border-box}.skeleton-block__inner{display:block;min-width:0;box-sizing:border-box}:host(.skeleton-block--animate) .skeleton-block__inner{position:relative;overflow:hidden;background:var(--app-color-skeleton-track, rgba(26, 47, 69, .09))}:host(.skeleton-block--animate) .skeleton-block__inner:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--app-color-skeleton-shine, rgba(255, 255, 255, .22)),transparent);animation:ui-skeleton-shimmer 1.35s ease-in-out infinite}:host(.skeleton-block--static) .skeleton-block__inner{background:var(--app-color-skeleton-track-strong, rgba(26, 47, 69, .12))}\n"] }]
|
|
30
|
+
}], propDecorators: { width: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], height: [{
|
|
33
|
+
type: Input
|
|
34
|
+
}], radius: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}], animate: [{
|
|
37
|
+
type: Input,
|
|
38
|
+
args: [{ transform: booleanAttribute }]
|
|
39
|
+
}], hostClass: [{
|
|
40
|
+
type: HostBinding,
|
|
41
|
+
args: ['class']
|
|
42
|
+
}] } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tYmxvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tYmxvY2svc2tlbGV0b24tYmxvY2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tYmxvY2svc2tlbGV0b24tYmxvY2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFDTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7O0FBRXZCLDREQUE0RDtBQVE1RCxNQUFNLE9BQU8sc0JBQXNCO0lBUG5DO1FBUUUsZ0RBQWdEO1FBQ3ZDLFVBQUssR0FBRyxNQUFNLENBQUM7UUFDeEIsa0JBQWtCO1FBQ1QsV0FBTSxHQUFHLFNBQVMsQ0FBQztRQUM1QixxQkFBcUI7UUFDWixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWdCLFlBQU8sR0FBRyxJQUFJLENBQUM7S0FZeEQ7SUFWQyxJQUNJLFNBQVM7UUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzsrR0FuQlUsc0JBQXNCO21HQUF0QixzQkFBc0Isb0pBUWIsZ0JBQWdCLGtGQ3hCdEMsZ0tBRUE7OzRGRGNhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFa0MsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFHbEMsU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqIEJsb2NvIGdlbsOpcmljbyBkZSBza2VsZXRvbiAobGluaGFzLCBjYWl4YXMsIGPDqWx1bGFzKS4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2tlbGV0b24tYmxvY2snLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NrZWxldG9uLWJsb2NrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2tlbGV0b24tYmxvY2suY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2tlbGV0b25CbG9ja0NvbXBvbmVudCB7XHJcbiAgLyoqIExhcmd1cmEgQ1NTIChleC46IGAxMDAlYCwgYDZyZW1gLCBgNDAlYCkuICovXHJcbiAgQElucHV0KCkgd2lkdGggPSAnMTAwJSc7XHJcbiAgLyoqIEFsdHVyYSBDU1MuICovXHJcbiAgQElucHV0KCkgaGVpZ2h0ID0gJzAuNzVyZW0nO1xyXG4gIC8qKiBSYWlvIGRlIGNhbnRvLiAqL1xyXG4gIEBJbnB1dCgpIHJhZGl1cyA9ICc4cHgnO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYW5pbWF0ZSA9IHRydWU7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGdldCBob3N0Q2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhcnRzID0gWydza2VsZXRvbi1ibG9jayddO1xyXG4gICAgaWYgKHRoaXMuYW5pbWF0ZSkge1xyXG4gICAgICBwYXJ0cy5wdXNoKCdza2VsZXRvbi1ibG9jay0tYW5pbWF0ZScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFydHMucHVzaCgnc2tlbGV0b24tYmxvY2stLXN0YXRpYycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcclxuICB9XHJcbn1cclxuIiwiPHNwYW4gY2xhc3M9XCJza2VsZXRvbi1ibG9ja19faW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIiBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgW3N0eWxlLmJvcmRlci1yYWRpdXNdPVwicmFkaXVzXCI+PC9zcGFuPlxyXG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, booleanAttribute, } from '@angular/core';
|
|
2
|
+
import { SkeletonBlockComponent } from '../skeleton-block/skeleton-block.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** Placeholder de cartão (avatar + texto + ações). */
|
|
5
|
+
export class SkeletonCardComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.showActions = true;
|
|
8
|
+
this.animate = true;
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SkeletonCardComponent, isStandalone: true, selector: "app-skeleton-card", inputs: { showActions: ["showActions", "showActions", booleanAttribute], animate: ["animate", "animate", booleanAttribute] }, ngImport: i0, template: "<div class=\"skeleton-card\" aria-hidden=\"true\">\r\n <div class=\"skeleton-card__row\">\r\n <div class=\"skeleton-card__main\">\r\n <app-skeleton-block class=\"skeleton-card__avatar\" width=\"2.35rem\" height=\"2.35rem\" radius=\"999px\"\r\n [animate]=\"animate\" />\r\n <div class=\"skeleton-card__text\">\r\n <app-skeleton-block width=\"72%\" height=\"0.72rem\" radius=\"6px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"48%\" height=\"0.62rem\" radius=\"6px\" [animate]=\"animate\" />\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"skeleton-card__actions\">\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.skeleton-card{box-sizing:border-box;border-radius:10px;border:1px solid rgba(26,47,69,.08);background:#fff;padding:.85rem 1rem}.skeleton-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.skeleton-card__main{display:flex;align-items:flex-start;gap:.65rem;min-width:0;flex:1}.skeleton-card__avatar{flex-shrink:0}.skeleton-card__text{display:flex;flex-direction:column;gap:.45rem;flex:1 1 auto;min-width:0;padding-top:.15rem}.skeleton-card__actions{display:flex;gap:.35rem;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: SkeletonBlockComponent, selector: "app-skeleton-block", inputs: ["width", "height", "radius", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonCardComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'app-skeleton-card', standalone: true, imports: [SkeletonBlockComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"skeleton-card\" aria-hidden=\"true\">\r\n <div class=\"skeleton-card__row\">\r\n <div class=\"skeleton-card__main\">\r\n <app-skeleton-block class=\"skeleton-card__avatar\" width=\"2.35rem\" height=\"2.35rem\" radius=\"999px\"\r\n [animate]=\"animate\" />\r\n <div class=\"skeleton-card__text\">\r\n <app-skeleton-block width=\"72%\" height=\"0.72rem\" radius=\"6px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"48%\" height=\"0.62rem\" radius=\"6px\" [animate]=\"animate\" />\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"skeleton-card__actions\">\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.skeleton-card{box-sizing:border-box;border-radius:10px;border:1px solid rgba(26,47,69,.08);background:#fff;padding:.85rem 1rem}.skeleton-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.skeleton-card__main{display:flex;align-items:flex-start;gap:.65rem;min-width:0;flex:1}.skeleton-card__avatar{flex-shrink:0}.skeleton-card__text{display:flex;flex-direction:column;gap:.45rem;flex:1 1 auto;min-width:0;padding-top:.15rem}.skeleton-card__actions{display:flex;gap:.35rem;flex-shrink:0}\n"] }]
|
|
16
|
+
}], propDecorators: { showActions: [{
|
|
17
|
+
type: Input,
|
|
18
|
+
args: [{ transform: booleanAttribute }]
|
|
19
|
+
}], animate: [{
|
|
20
|
+
type: Input,
|
|
21
|
+
args: [{ transform: booleanAttribute }]
|
|
22
|
+
}] } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2xvYWRpbmcvc2tlbGV0b24tbG9hZGluZy9za2VsZXRvbi1jYXJkL3NrZWxldG9uLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tY2FyZC9za2VsZXRvbi1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBRXBGLHNEQUFzRDtBQVN0RCxNQUFNLE9BQU8scUJBQXFCO0lBUmxDO1FBUzBDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFlBQU8sR0FBRyxJQUFJLENBQUM7S0FDeEQ7K0dBSFkscUJBQXFCO21HQUFyQixxQkFBcUIsMkdBQ1osZ0JBQWdCLG1DQUNoQixnQkFBZ0IsNkJDbkJ0QywyM0JBa0JBLGtuQkROWSxzQkFBc0I7OzRGQUtyQixxQkFBcUI7a0JBUmpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUdQLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNrZWxldG9uQmxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1ibG9jay9za2VsZXRvbi1ibG9jay5jb21wb25lbnQnO1xyXG5cclxuLyoqIFBsYWNlaG9sZGVyIGRlIGNhcnTDo28gKGF2YXRhciArIHRleHRvICsgYcOnw7VlcykuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNrZWxldG9uLWNhcmQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1NrZWxldG9uQmxvY2tDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9za2VsZXRvbi1jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2tlbGV0b24tY2FyZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkNhcmRDb21wb25lbnQge1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QWN0aW9ucyA9IHRydWU7XHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFuaW1hdGUgPSB0cnVlO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJza2VsZXRvbi1jYXJkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNhcmRfX3Jvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNhcmRfX21haW5cIj5cclxuICAgICAgPGFwcC1za2VsZXRvbi1ibG9jayBjbGFzcz1cInNrZWxldG9uLWNhcmRfX2F2YXRhclwiIHdpZHRoPVwiMi4zNXJlbVwiIGhlaWdodD1cIjIuMzVyZW1cIiByYWRpdXM9XCI5OTlweFwiXHJcbiAgICAgICAgW2FuaW1hdGVdPVwiYW5pbWF0ZVwiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJza2VsZXRvbi1jYXJkX190ZXh0XCI+XHJcbiAgICAgICAgPGFwcC1za2VsZXRvbi1ibG9jayB3aWR0aD1cIjcyJVwiIGhlaWdodD1cIjAuNzJyZW1cIiByYWRpdXM9XCI2cHhcIiBbYW5pbWF0ZV09XCJhbmltYXRlXCIgLz5cclxuICAgICAgICA8YXBwLXNrZWxldG9uLWJsb2NrIHdpZHRoPVwiNDglXCIgaGVpZ2h0PVwiMC42MnJlbVwiIHJhZGl1cz1cIjZweFwiIFthbmltYXRlXT1cImFuaW1hdGVcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChzaG93QWN0aW9ucykge1xyXG4gICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNhcmRfX2FjdGlvbnNcIj5cclxuICAgICAgPGFwcC1za2VsZXRvbi1ibG9jayB3aWR0aD1cIjJyZW1cIiBoZWlnaHQ9XCIycmVtXCIgcmFkaXVzPVwiOHB4XCIgW2FuaW1hdGVdPVwiYW5pbWF0ZVwiIC8+XHJcbiAgICAgIDxhcHAtc2tlbGV0b24tYmxvY2sgd2lkdGg9XCIycmVtXCIgaGVpZ2h0PVwiMnJlbVwiIHJhZGl1cz1cIjhweFwiIFthbmltYXRlXT1cImFuaW1hdGVcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|