structra-ui 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -4
- package/app/_utils/date-pt-br.utils.d.ts +0 -24
- package/app/_utils/decimal-br.utils.d.ts +0 -52
- package/app/_utils/estados-br.data.d.ts +0 -10
- package/app/_utils/integer-br.utils.d.ts +0 -17
- package/app/_utils/integer-value.utils.d.ts +0 -5
- package/app/_utils/scroll/body-scroll-lock.util.d.ts +0 -44
- package/app/app-shell/_models/breadcrumb-item.model.d.ts +0 -13
- package/app/app-shell/app-shell-sidebar-template.directive.d.ts +0 -19
- package/app/app-shell/app-shell.component.d.ts +0 -41
- package/app/app-shell/breadcrumb/breadcrumb.component.d.ts +0 -10
- package/app/app-shell/index.d.ts +0 -19
- package/app/app-shell/sidebar/app-sidebar-toolbar.directive.d.ts +0 -14
- package/app/app-shell/sidebar/shell-sidebar-toggle.component.d.ts +0 -19
- package/app/app-shell/sidebar/sidebar.component.d.ts +0 -36
- package/app/app-shell/sidebar-reveal.constants.d.ts +0 -8
- package/app/app-shell/topbar/topbar.component.d.ts +0 -8
- package/app/app-shell/user-menu/user-menu.component.d.ts +0 -25
- package/app/buttons/base-button/base-button.component.d.ts +0 -43
- package/app/buttons/index.d.ts +0 -1
- package/app/data-display/_models/card-item-view.model.d.ts +0 -8
- package/app/data-display/_models/data-display.models.d.ts +0 -11
- package/app/data-display/_models/data-grid-column.model.d.ts +0 -13
- package/app/data-display/_models/index.d.ts +0 -2
- package/app/data-display/adaptive-data-view/adaptive-data-view.component.d.ts +0 -53
- package/app/data-display/card-list/card-list.component.d.ts +0 -70
- package/app/data-display/dashboard-section/dashboard-section.component.d.ts +0 -12
- package/app/data-display/data-card/data-card.component.d.ts +0 -16
- package/app/data-display/data-grid/data-grid-actions-cell-renderer.component.d.ts +0 -21
- package/app/data-display/data-grid/data-grid.component.d.ts +0 -76
- package/app/data-display/data-list/data-list.component.d.ts +0 -18
- package/app/data-display/data-toolbar/data-toolbar.component.d.ts +0 -6
- package/app/data-display/details-field/details-field.component.d.ts +0 -10
- package/app/data-display/details-view/details-view.component.d.ts +0 -26
- package/app/data-display/empty-state/empty-state-overlay.util.d.ts +0 -5
- package/app/data-display/empty-state/empty-state.component.d.ts +0 -13
- package/app/data-display/index.d.ts +0 -20
- package/app/data-display/list-item/list-item.component.d.ts +0 -22
- package/app/data-display/stat-card/stat-card.component.d.ts +0 -23
- package/app/data-display/status-badge/status-badge.component.d.ts +0 -17
- package/app/data-display/table-empty-state/table-empty-state.component.d.ts +0 -14
- package/app/data-display/table-toolbar/table-toolbar.component.d.ts +0 -11
- package/app/dialogs/_models/lib-dialog-size.model.d.ts +0 -6
- package/app/dialogs/_utils/app-lib-light-block-scroll-strategy.d.ts +0 -12
- package/app/dialogs/_utils/lib-dialog-panel-classes.d.ts +0 -3
- package/app/dialogs/app-dialog/app-dialog.component.d.ts +0 -71
- package/app/dialogs/app-dialog/dialog-footer.directive.d.ts +0 -6
- package/app/dialogs/confirm-dialog/confirm-dialog-data.model.d.ts +0 -13
- package/app/dialogs/confirm-dialog/confirm-dialog.component.d.ts +0 -20
- package/app/dialogs/confirm-dialog/confirm-dialog.service.d.ts +0 -17
- package/app/dialogs/index.d.ts +0 -14
- package/app/dialogs/loading-dialog/loading-dialog-data.model.d.ts +0 -7
- package/app/dialogs/loading-dialog/loading-dialog.component.d.ts +0 -9
- package/app/dialogs/loading-dialog/loading-dialog.service.d.ts +0 -15
- package/app/dialogs/toast/toast-host.component.d.ts +0 -13
- package/app/dialogs/toast/toast.models.d.ts +0 -26
- package/app/dialogs/toast/toast.service.d.ts +0 -17
- package/app/fields/checkbox-fields/_base/boolean-field.directive.d.ts +0 -42
- package/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.d.ts +0 -8
- package/app/fields/checkbox-fields/index.d.ts +0 -3
- package/app/fields/checkbox-fields/switch-field/switch-field.component.d.ts +0 -8
- package/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.d.ts +0 -62
- package/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.d.ts +0 -40
- package/app/fields/dropdown-fields/_base/dropdown-option-field.base.d.ts +0 -47
- package/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.d.ts +0 -18
- package/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.d.ts +0 -13
- package/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.d.ts +0 -7
- package/app/fields/dropdown-fields/_models/index.d.ts +0 -4
- package/app/fields/dropdown-fields/_models/select-option.model.d.ts +0 -5
- package/app/fields/dropdown-fields/_models/select-pagination.model.d.ts +0 -6
- package/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.d.ts +0 -84
- package/app/fields/dropdown-fields/index.d.ts +0 -7
- package/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.d.ts +0 -49
- package/app/fields/dropdown-fields/select-field/select-field.component.d.ts +0 -54
- package/app/fields/input-fields/_base/base-field.component.d.ts +0 -60
- package/app/fields/input-fields/_base/base-field.directive.d.ts +0 -102
- package/app/fields/input-fields/_base/masked-text-field.base.d.ts +0 -34
- package/app/fields/input-fields/_base/ng-control-field.directive.d.ts +0 -43
- package/app/fields/input-fields/_models/field-common-inputs.model.d.ts +0 -49
- package/app/fields/input-fields/_models/index.d.ts +0 -1
- package/app/fields/input-fields/_utils/mask-complete.validators.d.ts +0 -18
- package/app/fields/input-fields/_utils/mask-format.utils.d.ts +0 -13
- package/app/fields/input-fields/cep-field/cep-field.component.d.ts +0 -12
- package/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.d.ts +0 -20
- package/app/fields/input-fields/date-field/date-field.component.d.ts +0 -30
- package/app/fields/input-fields/decimal-field/decimal-field.component.d.ts +0 -17
- package/app/fields/input-fields/index.d.ts +0 -22
- package/app/fields/input-fields/input-mask-field/input-mask-field.component.d.ts +0 -16
- package/app/fields/input-fields/integer-field/integer-field.component.d.ts +0 -17
- package/app/fields/input-fields/password-field/password-field.component.d.ts +0 -30
- package/app/fields/input-fields/phone-field/phone-field.component.d.ts +0 -22
- package/app/fields/input-fields/text-field/text-field.component.d.ts +0 -16
- package/app/fields/input-fields/textarea-field/textarea-field.component.d.ts +0 -31
- package/app/form-layout/_models/form-layout.model.d.ts +0 -41
- package/app/form-layout/_models/form-tabs.model.d.ts +0 -1
- package/app/form-layout/_models/index.d.ts +0 -3
- package/app/form-layout/_models/validation-summary.model.d.ts +0 -8
- package/app/form-layout/form-actions/form-actions.component.d.ts +0 -21
- package/app/form-layout/form-col/form-col.component.d.ts +0 -25
- package/app/form-layout/form-group/form-group.component.d.ts +0 -125
- package/app/form-layout/form-group/form-path.utils.d.ts +0 -16
- package/app/form-layout/form-group/form-root-invalid-ui-refresh.util.d.ts +0 -8
- package/app/form-layout/form-row/form-row.component.d.ts +0 -14
- package/app/form-layout/form-section/form-section.component.d.ts +0 -13
- package/app/form-layout/form-tab/form-tab.component.d.ts +0 -32
- package/app/form-layout/form-tabs/form-tabs.component.d.ts +0 -44
- package/app/form-layout/index.d.ts +0 -14
- package/app/form-layout/layout-stack/layout-stack.component.d.ts +0 -25
- package/app/form-layout/validation-summary/validation-summary.component.d.ts +0 -105
- package/app/loading/skeleton-loading/index.d.ts +0 -6
- package/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.d.ts +0 -15
- package/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.d.ts +0 -10
- package/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.d.ts +0 -21
- package/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.d.ts +0 -17
- package/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.d.ts +0 -16
- package/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.d.ts +0 -17
- package/app/menus/_models/drawer-side.model.d.ts +0 -6
- package/app/menus/_models/drawer-size.model.d.ts +0 -6
- package/app/menus/_models/menu-dropdown-placement.model.d.ts +0 -10
- package/app/menus/_models/menu-item.model.d.ts +0 -47
- package/app/menus/_utils/menu-connected-positions.util.d.ts +0 -4
- package/app/menus/_utils/menu-rows.util.d.ts +0 -22
- package/app/menus/_utils/submenu-connected-positions.util.d.ts +0 -5
- package/app/menus/action-menu/action-menu.component.d.ts +0 -24
- package/app/menus/context-menu/context-menu.component.d.ts +0 -32
- package/app/menus/drawer/drawer.component.d.ts +0 -38
- package/app/menus/dropdown-menu/dropdown-menu.component.d.ts +0 -33
- package/app/menus/index.d.ts +0 -11
- package/app/menus/menu-divider/menu-divider.component.d.ts +0 -8
- package/app/menus/menu-group/menu-group.component.d.ts +0 -13
- package/app/menus/menu-list/menu-list.component.d.ts +0 -77
- package/app/overlay/_models/overlay-placement.model.d.ts +0 -9
- package/app/overlay/_utils/anchored-overlay-positions.util.d.ts +0 -9
- package/app/overlay/anchored-overlay/anchored-overlay.component.d.ts +0 -51
- package/app/overlay/index.d.ts +0 -20
- package/app/overlay/popover/popover-body-template.directive.d.ts +0 -7
- package/app/overlay/popover/popover-footer-template.directive.d.ts +0 -7
- package/app/overlay/popover/popover-trigger.directive.d.ts +0 -6
- package/app/overlay/popover/popover.component.d.ts +0 -38
- package/app/overlay/tooltip/tooltip-panel-template.directive.d.ts +0 -10
- package/app/overlay/tooltip/tooltip.component.d.ts +0 -40
- package/app/theme/app-theme.service.d.ts +0 -25
- package/app/theme/index.d.ts +0 -1
- package/esm2022/app/_utils/date-pt-br.utils.mjs +0 -82
- package/esm2022/app/_utils/decimal-br.utils.mjs +0 -154
- package/esm2022/app/_utils/estados-br.data.mjs +0 -37
- package/esm2022/app/_utils/integer-br.utils.mjs +0 -48
- package/esm2022/app/_utils/integer-value.utils.mjs +0 -19
- package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +0 -97
- package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +0 -2
- package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +0 -29
- package/esm2022/app/app-shell/app-shell.component.mjs +0 -105
- package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +0 -18
- package/esm2022/app/app-shell/index.mjs +0 -19
- package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +0 -23
- package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +0 -36
- package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +0 -84
- package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +0 -9
- package/esm2022/app/app-shell/topbar/topbar.component.mjs +0 -14
- package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +0 -52
- package/esm2022/app/buttons/base-button/base-button.component.mjs +0 -97
- package/esm2022/app/buttons/index.mjs +0 -2
- package/esm2022/app/data-display/_models/card-item-view.model.mjs +0 -2
- package/esm2022/app/data-display/_models/data-display.models.mjs +0 -2
- package/esm2022/app/data-display/_models/data-grid-column.model.mjs +0 -2
- package/esm2022/app/data-display/_models/index.mjs +0 -2
- package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +0 -124
- package/esm2022/app/data-display/card-list/card-list.component.mjs +0 -208
- package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +0 -25
- package/esm2022/app/data-display/data-card/data-card.component.mjs +0 -40
- package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +0 -41
- package/esm2022/app/data-display/data-grid/data-grid.component.mjs +0 -253
- package/esm2022/app/data-display/data-list/data-list.component.mjs +0 -40
- package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +0 -12
- package/esm2022/app/data-display/details-field/details-field.component.mjs +0 -21
- package/esm2022/app/data-display/details-view/details-view.component.mjs +0 -44
- package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +0 -19
- package/esm2022/app/data-display/empty-state/empty-state.component.mjs +0 -30
- package/esm2022/app/data-display/index.mjs +0 -19
- package/esm2022/app/data-display/list-item/list-item.component.mjs +0 -59
- package/esm2022/app/data-display/stat-card/stat-card.component.mjs +0 -59
- package/esm2022/app/data-display/status-badge/status-badge.component.mjs +0 -41
- package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +0 -31
- package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +0 -22
- package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +0 -8
- package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +0 -22
- package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +0 -6
- package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +0 -200
- package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +0 -15
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +0 -2
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +0 -36
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +0 -47
- package/esm2022/app/dialogs/index.mjs +0 -12
- package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +0 -2
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +0 -19
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +0 -38
- package/esm2022/app/dialogs/toast/toast-host.component.mjs +0 -65
- package/esm2022/app/dialogs/toast/toast.models.mjs +0 -2
- package/esm2022/app/dialogs/toast/toast.service.mjs +0 -76
- package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +0 -158
- package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +0 -36
- package/esm2022/app/fields/checkbox-fields/index.mjs +0 -4
- package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +0 -35
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +0 -117
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +0 -152
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +0 -149
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +0 -32
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/index.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +0 -2
- package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +0 -520
- package/esm2022/app/fields/dropdown-fields/index.mjs +0 -7
- package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +0 -379
- package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +0 -359
- package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +0 -151
- package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +0 -224
- package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +0 -135
- package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +0 -127
- package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +0 -2
- package/esm2022/app/fields/input-fields/_models/index.mjs +0 -2
- package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +0 -61
- package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +0 -40
- package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +0 -48
- package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +0 -61
- package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +0 -147
- package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +0 -166
- package/esm2022/app/fields/input-fields/index.mjs +0 -22
- package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +0 -52
- package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +0 -143
- package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +0 -130
- package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +0 -66
- package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +0 -90
- package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +0 -125
- package/esm2022/app/form-layout/_models/form-layout.model.mjs +0 -48
- package/esm2022/app/form-layout/_models/form-tabs.model.mjs +0 -2
- package/esm2022/app/form-layout/_models/index.mjs +0 -2
- package/esm2022/app/form-layout/_models/validation-summary.model.mjs +0 -2
- package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +0 -55
- package/esm2022/app/form-layout/form-col/form-col.component.mjs +0 -76
- package/esm2022/app/form-layout/form-group/form-group.component.mjs +0 -358
- package/esm2022/app/form-layout/form-group/form-path.utils.mjs +0 -65
- package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +0 -54
- package/esm2022/app/form-layout/form-row/form-row.component.mjs +0 -49
- package/esm2022/app/form-layout/form-section/form-section.component.mjs +0 -43
- package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +0 -67
- package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +0 -126
- package/esm2022/app/form-layout/index.mjs +0 -14
- package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +0 -56
- package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +0 -343
- package/esm2022/app/loading/skeleton-loading/index.mjs +0 -7
- package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +0 -43
- package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +0 -23
- package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +0 -34
- package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +0 -38
- package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +0 -37
- package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +0 -45
- package/esm2022/app/menus/_models/drawer-side.model.mjs +0 -8
- package/esm2022/app/menus/_models/drawer-size.model.mjs +0 -8
- package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +0 -12
- package/esm2022/app/menus/_models/menu-item.model.mjs +0 -6
- package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +0 -41
- package/esm2022/app/menus/_utils/menu-rows.util.mjs +0 -39
- package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +0 -23
- package/esm2022/app/menus/action-menu/action-menu.component.mjs +0 -48
- package/esm2022/app/menus/context-menu/context-menu.component.mjs +0 -112
- package/esm2022/app/menus/drawer/drawer.component.mjs +0 -142
- package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +0 -99
- package/esm2022/app/menus/index.mjs +0 -11
- package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +0 -14
- package/esm2022/app/menus/menu-group/menu-group.component.mjs +0 -32
- package/esm2022/app/menus/menu-list/menu-list.component.mjs +0 -399
- package/esm2022/app/overlay/_models/overlay-placement.model.mjs +0 -11
- package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +0 -84
- package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +0 -121
- package/esm2022/app/overlay/index.mjs +0 -21
- package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +0 -17
- package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +0 -17
- package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +0 -15
- package/esm2022/app/overlay/popover/popover.component.mjs +0 -93
- package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +0 -20
- package/esm2022/app/overlay/tooltip/tooltip.component.mjs +0 -118
- package/esm2022/app/theme/app-theme.service.mjs +0 -49
- package/esm2022/app/theme/index.mjs +0 -2
- package/esm2022/structra-public-api.mjs +0 -18
- package/esm2022/structra-ui.mjs +0 -5
- package/esm2022/structra-version.mjs +0 -3
- package/fesm2022/structra-ui.mjs +0 -8971
- package/fesm2022/structra-ui.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/structra-public-api.d.ts +0 -17
- package/structra-version.d.ts +0 -2
package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs
DELETED
|
@@ -1,520 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, forwardRef, inject, numberAttribute, } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { BaseFieldComponent } from '../../input-fields/_base/base-field.component';
|
|
4
|
-
import { DropdownOptionFieldBase } from '../_base/dropdown-option-field.base';
|
|
5
|
-
import { DropdownBaseComponent } from '../_base/dropdown-base/dropdown-base.component';
|
|
6
|
-
import { scheduleCloseDropdownPanelOnTriggerBlur } from '../_base/dropdown-trigger-blur.util';
|
|
7
|
-
import { SkeletonListComponent } from '../../../loading/skeleton-loading';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
var DropdownSearchOpenMode;
|
|
10
|
-
(function (DropdownSearchOpenMode) {
|
|
11
|
-
DropdownSearchOpenMode["Default"] = "default";
|
|
12
|
-
DropdownSearchOpenMode["KeepInput"] = "keepInput";
|
|
13
|
-
})(DropdownSearchOpenMode || (DropdownSearchOpenMode = {}));
|
|
14
|
-
export class DropdownSearchFieldComponent extends DropdownOptionFieldBase {
|
|
15
|
-
constructor() {
|
|
16
|
-
super(...arguments);
|
|
17
|
-
this.hostRef = inject((ElementRef));
|
|
18
|
-
this.pageSize = 5;
|
|
19
|
-
this.hasMore = false;
|
|
20
|
-
this.loadingMore = false;
|
|
21
|
-
/**
|
|
22
|
-
* Após parar de digitar, dispara a mesma pesquisa que Enter (`pageRequested` com `query`).
|
|
23
|
-
* `0` desativa (só Enter pesquisa).
|
|
24
|
-
*/
|
|
25
|
-
this.searchDebounceMs = 350;
|
|
26
|
-
this.pageRequested = new EventEmitter();
|
|
27
|
-
this.searchQuery = '';
|
|
28
|
-
this.committedQuery = '';
|
|
29
|
-
this.panelOpen = false;
|
|
30
|
-
this.panelOverlayWidth = 0;
|
|
31
|
-
this.scrollLoadTimer = null;
|
|
32
|
-
this.searchDebounceTimer = null;
|
|
33
|
-
}
|
|
34
|
-
get hostInvalidClass() {
|
|
35
|
-
return this.uiInvalid;
|
|
36
|
-
}
|
|
37
|
-
afterWriteValue(value) {
|
|
38
|
-
this.searchQuery =
|
|
39
|
-
value == null ? '' : (this.findOptionByValue(value)?.label ?? '');
|
|
40
|
-
this.committedQuery = '';
|
|
41
|
-
this.syncActiveIndexFromValue(value);
|
|
42
|
-
this.cdr.markForCheck();
|
|
43
|
-
}
|
|
44
|
-
get displayValue() {
|
|
45
|
-
const opt = this.findOptionByValue(this.internalValue);
|
|
46
|
-
return opt?.label ?? '';
|
|
47
|
-
}
|
|
48
|
-
get optionsListId() {
|
|
49
|
-
return `${this.controlId}-search-list`;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Com valor selecionado e painel fechado, o texto é só exibição do rótulo;
|
|
53
|
-
* edição só com o painel aberto (pesquisa).
|
|
54
|
-
*/
|
|
55
|
-
get isLockedSelectionDisplay() {
|
|
56
|
-
return (!this.disabled &&
|
|
57
|
-
!this.readonly &&
|
|
58
|
-
this.filledUi &&
|
|
59
|
-
!this.panelOpen);
|
|
60
|
-
}
|
|
61
|
-
/** `readonly` nativo: prop do campo ou bloqueio de exibição da seleção. */
|
|
62
|
-
get isNativeInputReadonly() {
|
|
63
|
-
if (this.disabled) {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
return this.readonly || this.isLockedSelectionDisplay;
|
|
67
|
-
}
|
|
68
|
-
ngOnChanges(changes) {
|
|
69
|
-
super.ngOnChanges(changes);
|
|
70
|
-
if (!this.panelOpen || this.loadingMore) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (changes['loadingMore'] || changes['options']) {
|
|
74
|
-
setTimeout(() => this.tryEmitIfShortList(), 0);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
ngOnDestroy() {
|
|
78
|
-
if (this.scrollLoadTimer != null) {
|
|
79
|
-
clearTimeout(this.scrollLoadTimer);
|
|
80
|
-
}
|
|
81
|
-
this.clearSearchDebounce();
|
|
82
|
-
}
|
|
83
|
-
onDropdownOpenChange(next, openMode = DropdownSearchOpenMode.Default) {
|
|
84
|
-
if (!next) {
|
|
85
|
-
if (!this.panelOpen) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
this.panelOpen = false;
|
|
89
|
-
this.clearSearchDebounce();
|
|
90
|
-
if (this.scrollLoadTimer != null) {
|
|
91
|
-
clearTimeout(this.scrollLoadTimer);
|
|
92
|
-
this.scrollLoadTimer = null;
|
|
93
|
-
}
|
|
94
|
-
setTimeout(() => this.focusMainInputIfFocusLost(), 0);
|
|
95
|
-
this.cdr.markForCheck();
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
if (openMode === DropdownSearchOpenMode.Default) {
|
|
99
|
-
// Não limpar o texto quando já há seleção (comportamento alinhado ao select).
|
|
100
|
-
this.committedQuery = '';
|
|
101
|
-
if (this.filledUi) {
|
|
102
|
-
const opt = this.findOptionByValue(this.internalValue);
|
|
103
|
-
this.searchQuery = opt?.label ?? '';
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
this.searchQuery = '';
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
this.committedQuery = this.searchQuery.trim();
|
|
111
|
-
}
|
|
112
|
-
this.panelOpen = true;
|
|
113
|
-
this.syncActiveIndexFromValue(this.internalValue);
|
|
114
|
-
const w = this.hostRef.nativeElement.getBoundingClientRect().width;
|
|
115
|
-
this.panelOverlayWidth = Math.max(0, Math.ceil(w));
|
|
116
|
-
if (!this.loadingMore) {
|
|
117
|
-
this.pageRequested.emit({
|
|
118
|
-
page: 0,
|
|
119
|
-
pageSize: this.pageSize,
|
|
120
|
-
query: this.committedQuery,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
setTimeout(() => this.tryEmitIfShortList(), 0);
|
|
124
|
-
setTimeout(() => this.tryEmitIfShortList(), 80);
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
document.getElementById(this.controlId)?.focus();
|
|
127
|
-
}, 0);
|
|
128
|
-
this.cdr.markForCheck();
|
|
129
|
-
}
|
|
130
|
-
onMainInput(ev) {
|
|
131
|
-
if (this.isNativeInputReadonly) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const el = ev.target;
|
|
135
|
-
this.searchQuery = el.value;
|
|
136
|
-
this.scheduleDebouncedSearch();
|
|
137
|
-
this.cdr.markForCheck();
|
|
138
|
-
}
|
|
139
|
-
onMainKeydown(ev) {
|
|
140
|
-
if (this.disabled || this.readonly) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (ev.key === 'Delete' || ev.key === 'Backspace') {
|
|
144
|
-
if (this.panelOpen) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
if (this.filledUi) {
|
|
148
|
-
ev.preventDefault();
|
|
149
|
-
ev.stopPropagation();
|
|
150
|
-
this.onClear();
|
|
151
|
-
}
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (ev.key === 'Escape' && this.panelOpen) {
|
|
155
|
-
ev.preventDefault();
|
|
156
|
-
this.onDropdownOpenChange(false);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (this.panelOpen && this.listOptions.length > 0) {
|
|
160
|
-
switch (ev.key) {
|
|
161
|
-
case 'ArrowDown':
|
|
162
|
-
ev.preventDefault();
|
|
163
|
-
this.activeIndex = this.stepActive(1);
|
|
164
|
-
this.cdr.markForCheck();
|
|
165
|
-
return;
|
|
166
|
-
case 'ArrowUp':
|
|
167
|
-
ev.preventDefault();
|
|
168
|
-
this.activeIndex = this.stepActive(-1);
|
|
169
|
-
this.cdr.markForCheck();
|
|
170
|
-
return;
|
|
171
|
-
case 'Home':
|
|
172
|
-
ev.preventDefault();
|
|
173
|
-
this.activeIndex = this.firstEnabledIndex();
|
|
174
|
-
this.cdr.markForCheck();
|
|
175
|
-
return;
|
|
176
|
-
case 'End':
|
|
177
|
-
ev.preventDefault();
|
|
178
|
-
this.activeIndex = this.lastEnabledIndex();
|
|
179
|
-
this.cdr.markForCheck();
|
|
180
|
-
return;
|
|
181
|
-
default:
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
if (ev.key === 'Enter') {
|
|
186
|
-
ev.preventDefault();
|
|
187
|
-
ev.stopPropagation();
|
|
188
|
-
if (!this.panelOpen) {
|
|
189
|
-
if (this.searchQuery.trim() === '' ||
|
|
190
|
-
this.isLockedSelectionDisplay) {
|
|
191
|
-
this.onDropdownOpenChange(true, DropdownSearchOpenMode.Default);
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
this.runSearch();
|
|
195
|
-
}
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
const q = this.searchQuery.trim();
|
|
199
|
-
const dirty = q !== this.committedQuery;
|
|
200
|
-
if (dirty) {
|
|
201
|
-
// Lista pedida com query vazia mas o input mostra o rótulo da seleção — não é pesquisa nova.
|
|
202
|
-
if (this.isDisplayingSelectedLabelWithUnfilteredList()) {
|
|
203
|
-
if (this.listOptions.length > 0) {
|
|
204
|
-
this.commitActiveOption();
|
|
205
|
-
}
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
this.runSearch();
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
if (this.listOptions.length > 0) {
|
|
212
|
-
this.commitActiveOption();
|
|
213
|
-
}
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Ao reabrir, `committedQuery` é '' (lista sem filtro) e o texto do input é o rótulo do valor —
|
|
219
|
-
* `q !== committedQuery` seria true sem o usuário ter pesquisado; Enter deve confirmar opção.
|
|
220
|
-
*/
|
|
221
|
-
isDisplayingSelectedLabelWithUnfilteredList() {
|
|
222
|
-
if (!this.filledUi || this.committedQuery !== '') {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
const label = this.findOptionByValue(this.internalValue)?.label?.trim();
|
|
226
|
-
if (label == null || label.length === 0) {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
return this.searchQuery.trim() === label;
|
|
230
|
-
}
|
|
231
|
-
onMainBlur(ev) {
|
|
232
|
-
const triggerRoot = this.dropdownTriggerRootRef?.nativeElement ?? this.hostRef.nativeElement;
|
|
233
|
-
scheduleCloseDropdownPanelOnTriggerBlur({
|
|
234
|
-
triggerRoot,
|
|
235
|
-
isPanelOpen: () => this.panelOpen,
|
|
236
|
-
closePanel: () => this.onDropdownOpenChange(false),
|
|
237
|
-
notifyTouched: () => this.notifyTouched(),
|
|
238
|
-
blurRelatedTarget: ev?.relatedTarget ?? null,
|
|
239
|
-
afterBlur: () => this.clearOrphanSearchTextAfterBlur(),
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Sem valor no modelo: remove texto livre deixado no input (ex.: pesquisa sem escolha válida).
|
|
244
|
-
* Não altera o `FormControl` — mantém-se `null`/vazio e o estado inválido (ex.: obrigatório) continua visível.
|
|
245
|
-
*/
|
|
246
|
-
clearOrphanSearchTextAfterBlur() {
|
|
247
|
-
if (this.disabled || this.readonly) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
const v = this.internalValue;
|
|
251
|
-
if (v != null && v !== '') {
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
if (this.searchQuery.trim() === '') {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
this.searchQuery = '';
|
|
258
|
-
this.committedQuery = '';
|
|
259
|
-
this.cdr.markForCheck();
|
|
260
|
-
}
|
|
261
|
-
/** Escape com foco no limpar/prefixo do `base-field` (fora do input da origem). */
|
|
262
|
-
onDropdownHostEscape(ev) {
|
|
263
|
-
if (!this.panelOpen || ev.key !== 'Escape') {
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
ev.preventDefault();
|
|
267
|
-
this.onDropdownOpenChange(false);
|
|
268
|
-
}
|
|
269
|
-
onTriggerKeydown(ev) {
|
|
270
|
-
if (this.disabled || this.readonly) {
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
if ((ev.key === 'Delete' || ev.key === 'Backspace') &&
|
|
274
|
-
this.filledUi &&
|
|
275
|
-
!this.panelOpen) {
|
|
276
|
-
ev.preventDefault();
|
|
277
|
-
this.onClear();
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
if (this.panelOpen) {
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
if (ev.key === 'ArrowDown' || ev.key === 'ArrowUp') {
|
|
284
|
-
ev.preventDefault();
|
|
285
|
-
this.onDropdownOpenChange(true, DropdownSearchOpenMode.Default);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/** Enter/Espaço com foco na linha da opção (tabindex). */
|
|
289
|
-
onOptionRowKeydown(ev, opt) {
|
|
290
|
-
if (opt.disabled || this.disabled || this.readonly) {
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
if (ev.key !== 'Enter' && ev.key !== ' ') {
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
ev.preventDefault();
|
|
297
|
-
ev.stopPropagation();
|
|
298
|
-
this.selectOption(opt);
|
|
299
|
-
}
|
|
300
|
-
/** Foco na lista (ex.: Tab): Delete/Backspace limpam a seleção. */
|
|
301
|
-
onSearchListKeydown(ev) {
|
|
302
|
-
if (ev.key === 'Escape') {
|
|
303
|
-
ev.preventDefault();
|
|
304
|
-
this.onDropdownOpenChange(false);
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
if (ev.key !== 'Delete' && ev.key !== 'Backspace') {
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
if (this.disabled || this.readonly || !this.filledUi) {
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
ev.preventDefault();
|
|
314
|
-
ev.stopPropagation();
|
|
315
|
-
this.onClear();
|
|
316
|
-
}
|
|
317
|
-
focusMainInputIfFocusLost() {
|
|
318
|
-
const a = document.activeElement;
|
|
319
|
-
if (a === document.body || a === document.documentElement || a == null) {
|
|
320
|
-
document.getElementById(this.controlId)?.focus({ preventScroll: true });
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
scheduleDebouncedSearch() {
|
|
324
|
-
if (this.searchDebounceMs <= 0) {
|
|
325
|
-
return;
|
|
326
|
-
}
|
|
327
|
-
if (this.searchDebounceTimer != null) {
|
|
328
|
-
clearTimeout(this.searchDebounceTimer);
|
|
329
|
-
}
|
|
330
|
-
this.searchDebounceTimer = setTimeout(() => {
|
|
331
|
-
this.searchDebounceTimer = null;
|
|
332
|
-
this.applyDebouncedSearch();
|
|
333
|
-
}, this.searchDebounceMs);
|
|
334
|
-
}
|
|
335
|
-
clearSearchDebounce() {
|
|
336
|
-
if (this.searchDebounceTimer != null) {
|
|
337
|
-
clearTimeout(this.searchDebounceTimer);
|
|
338
|
-
this.searchDebounceTimer = null;
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Alinha-se ao Enter: só dispara se `query` mudou em relação a `committedQuery`;
|
|
343
|
-
* com painel fechado, só se houver texto pesquisável (como Enter sem abrir vazio).
|
|
344
|
-
*/
|
|
345
|
-
applyDebouncedSearch() {
|
|
346
|
-
if (this.disabled || this.readonly || this.isNativeInputReadonly) {
|
|
347
|
-
return;
|
|
348
|
-
}
|
|
349
|
-
const q = this.searchQuery.trim();
|
|
350
|
-
if (q === this.committedQuery) {
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
if (!this.panelOpen) {
|
|
354
|
-
if (q === '' || this.isLockedSelectionDisplay) {
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
this.runSearch();
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
if (this.isDisplayingSelectedLabelWithUnfilteredList()) {
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
this.runSearch();
|
|
364
|
-
}
|
|
365
|
-
runSearch() {
|
|
366
|
-
this.clearSearchDebounce();
|
|
367
|
-
if (this.disabled || this.readonly) {
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
if (!this.panelOpen) {
|
|
371
|
-
this.onDropdownOpenChange(true, DropdownSearchOpenMode.KeepInput);
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
|
-
const q = this.searchQuery.trim();
|
|
375
|
-
this.committedQuery = q;
|
|
376
|
-
this.pageRequested.emit({
|
|
377
|
-
page: 0,
|
|
378
|
-
pageSize: this.pageSize,
|
|
379
|
-
query: q,
|
|
380
|
-
});
|
|
381
|
-
this.cdr.markForCheck();
|
|
382
|
-
}
|
|
383
|
-
onOptionsListScroll(ev) {
|
|
384
|
-
if (this.loadingMore || !this.hasMore) {
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
const el = ev.target;
|
|
388
|
-
if (this.options.length === 0) {
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
if (this.scrollLoadTimer != null) {
|
|
392
|
-
clearTimeout(this.scrollLoadTimer);
|
|
393
|
-
}
|
|
394
|
-
this.scrollLoadTimer = setTimeout(() => {
|
|
395
|
-
this.scrollLoadTimer = null;
|
|
396
|
-
if (el.scrollHeight <= el.clientHeight + 8) {
|
|
397
|
-
if (this.hasMore && !this.loadingMore && this.options.length > 0) {
|
|
398
|
-
this.emitNextPageRequest();
|
|
399
|
-
}
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
const nearBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= 64;
|
|
403
|
-
if (!nearBottom) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
this.emitNextPageRequest();
|
|
407
|
-
}, 120);
|
|
408
|
-
}
|
|
409
|
-
emitNextPageRequest() {
|
|
410
|
-
if (this.loadingMore || !this.hasMore) {
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
if (this.options.length === 0) {
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
const nextPage = Math.floor(this.options.length / this.pageSize);
|
|
417
|
-
this.pageRequested.emit({
|
|
418
|
-
page: nextPage,
|
|
419
|
-
pageSize: this.pageSize,
|
|
420
|
-
query: this.committedQuery,
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
tryEmitIfShortList() {
|
|
424
|
-
if (!this.panelOpen || this.loadingMore || !this.hasMore) {
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
427
|
-
if (this.options.length === 0) {
|
|
428
|
-
return;
|
|
429
|
-
}
|
|
430
|
-
const el = document.getElementById(this.optionsListId);
|
|
431
|
-
if (!el) {
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
if (el.scrollHeight <= el.clientHeight + 8) {
|
|
435
|
-
this.emitNextPageRequest();
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
openToggle() {
|
|
439
|
-
if (this.disabled || this.readonly || this.loading) {
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
if (this.panelOpen) {
|
|
443
|
-
this.onDropdownOpenChange(false);
|
|
444
|
-
}
|
|
445
|
-
else {
|
|
446
|
-
this.onDropdownOpenChange(true, DropdownSearchOpenMode.Default);
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
commitActiveOption() {
|
|
450
|
-
const opt = this.listOptions[this.activeIndex];
|
|
451
|
-
if (opt && !opt.disabled) {
|
|
452
|
-
this.selectOption(opt);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
selectOption(opt) {
|
|
456
|
-
if (this.disabled || this.readonly || opt.disabled) {
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
this.emitModelValue(opt.value);
|
|
460
|
-
this.searchQuery = opt.label;
|
|
461
|
-
this.committedQuery = '';
|
|
462
|
-
this.onDropdownOpenChange(false);
|
|
463
|
-
this.finishSelectionTouch();
|
|
464
|
-
}
|
|
465
|
-
onClear() {
|
|
466
|
-
if (this.disabled || this.readonly) {
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
this.clearSearchDebounce();
|
|
470
|
-
this.emitModelValue(null);
|
|
471
|
-
this.searchQuery = '';
|
|
472
|
-
this.committedQuery = '';
|
|
473
|
-
this.onDropdownOpenChange(false);
|
|
474
|
-
this.notifyTouched();
|
|
475
|
-
this.cdr.markForCheck();
|
|
476
|
-
}
|
|
477
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownSearchFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
478
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DropdownSearchFieldComponent, isStandalone: true, selector: "app-dropdown-search-field", inputs: { pageSize: ["pageSize", "pageSize", numberAttribute], hasMore: "hasMore", loadingMore: "loadingMore", searchDebounceMs: ["searchDebounceMs", "searchDebounceMs", numberAttribute] }, outputs: { pageRequested: "pageRequested" }, host: { listeners: { "keydown": "onDropdownHostEscape($event)" }, properties: { "class.dropdown-search-field--invalid": "this.hostInvalidClass" } }, providers: [
|
|
479
|
-
{
|
|
480
|
-
provide: NG_VALUE_ACCESSOR,
|
|
481
|
-
useExisting: forwardRef(() => DropdownSearchFieldComponent),
|
|
482
|
-
multi: true,
|
|
483
|
-
},
|
|
484
|
-
], viewQueries: [{ propertyName: "optionsPanelTpl", first: true, predicate: ["optionsPanelTpl"], descendants: true, static: true }, { propertyName: "dropdownTriggerRootRef", first: true, predicate: ["dropdownFieldTriggerRoot"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\" [invalid]=\"uiInvalid\"\n [inputId]=\"controlId\" [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\" [prefixIcon]=\"prefixIcon\"\n [clearable]=\"clearable\" [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <div class=\"dropdown-search-field__wrap\">\n <app-dropdown-base [open]=\"panelOpen\" [panelTemplate]=\"optionsPanelTpl\" [panelWidthPx]=\"panelOverlayWidth\"\n (openChange)=\"onDropdownOpenChange($event)\">\n <div #dropdownFieldTriggerRoot class=\"dropdown-search-field__origin\" appDropdownTrigger\n (keydown)=\"onTriggerKeydown($event)\">\n <input type=\"text\" class=\"dropdown-search-field__input\"\n [class.dropdown-search-field__input--locked]=\"isLockedSelectionDisplay\" [id]=\"controlId\"\n [attr.name]=\"name || null\" [disabled]=\"disabled\" [readonly]=\"isNativeInputReadonly\" [attr.placeholder]=\"''\"\n autocomplete=\"off\" spellcheck=\"false\"\n [attr.aria-expanded]=\"panelOpen\" aria-autocomplete=\"list\" role=\"combobox\"\n [attr.aria-controls]=\"panelOpen ? optionsListId : null\" [attr.aria-invalid]=\"uiInvalid\"\n [attr.aria-describedby]=\"uiAriaDescribedBy\" [attr.aria-label]=\"floatLabelCaption || placeholder || 'Buscar e selecionar'\"\n [value]=\"searchQuery\" (input)=\"onMainInput($event)\" (keydown)=\"onMainKeydown($event)\"\n (blur)=\"onMainBlur($event)\" />\n <button type=\"button\" class=\"dropdown-search-field__chevron-btn\" tabindex=\"-1\" [disabled]=\"disabled || readonly\"\n [attr.aria-expanded]=\"panelOpen\" aria-haspopup=\"listbox\" aria-label=\"Abrir lista\" (click)=\"openToggle()\">\n <i class=\"fa-solid fa-chevron-down dropdown-search-field__chevron-icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </app-dropdown-base>\n </div>\n</app-base-field>\n\n<ng-template #optionsPanelTpl>\n <div class=\"dropdown-search-field__panel-inner\" (mousedown)=\"$event.preventDefault()\">\n <div class=\"dropdown-search-field__list\" [id]=\"optionsListId\" role=\"listbox\" tabindex=\"-1\"\n [attr.aria-label]=\"floatLabelCaption || 'Op\u00E7\u00F5es'\" (blur)=\"onMainBlur($event)\"\n (keydown)=\"onSearchListKeydown($event)\" (scroll)=\"onOptionsListScroll($event)\">\n @if (listOptions.length === 0 && (optionsLoading || loadingMore)) {\n <app-skeleton-list [rows]=\"8\" />\n }\n @for (opt of listOptions; track trackOption($index, opt)) {\n <div role=\"option\" class=\"dropdown-search-field__option\"\n [class.dropdown-search-field__option--disabled]=\"opt.disabled\"\n [class.dropdown-search-field__option--selected]=\"isSelected(opt)\"\n [class.dropdown-search-field__option--active]=\"!opt.disabled && activeIndex === $index\"\n [attr.tabindex]=\"opt.disabled ? null : -1\" [attr.aria-selected]=\"isSelected(opt)\" (click)=\"selectOption(opt)\"\n (keydown)=\"onOptionRowKeydown($event, opt)\">\n {{ opt.label }}\n </div>\n }\n @if (options.length > 0 && loadingMore) {\n <app-skeleton-list [rows]=\"1\" [leading]=\"false\" />\n }\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;box-sizing:border-box}:host ::ng-deep .base-field:not(.base-field--invalid):not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-float-border-focus);box-shadow:0 0 0 3px var(--ui-field-float-focus-ring)}:host ::ng-deep .base-field--invalid:not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-input-invalid-border);box-shadow:0 0 0 3px var(--ui-field-input-invalid-focus-halo)}:host ::ng-deep .base-field.base-field--readonly:not(.base-field--invalid):not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-readonly-border-focus);box-shadow:0 0 0 3px var(--ui-field-readonly-focus-ring)}:host ::ng-deep .base-field.base-field--invalid.base-field--readonly:not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-input-invalid-border);box-shadow:0 0 0 3px var(--ui-field-input-invalid-focus-halo)}.dropdown-search-field__wrap{display:flex;flex:1;align-items:stretch;min-width:0;width:100%;box-sizing:border-box}.dropdown-search-field__origin{display:flex;align-items:center;min-width:0;width:100%;min-height:calc(1.8rem + 1.35em);box-sizing:border-box}.dropdown-search-field__input{flex:1;margin:0;box-sizing:border-box;min-height:calc(1.8rem + 1.35em);padding:1.35rem .35rem .45rem .75rem;font-size:1rem;line-height:1.35;font-family:inherit;text-align:left;color:var(--ui-field-float-input-text);background:transparent;border:0;border-radius:0;box-shadow:none;cursor:text;display:block;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-field__input:focus,.dropdown-search-field__input:focus-visible{outline:none;box-shadow:none}.dropdown-search-field__input:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}.dropdown-search-field__input--locked:read-only:not(:disabled){cursor:default;opacity:1}.dropdown-search-field__input:read-only:not(:disabled):not(.dropdown-search-field__input--locked){cursor:default;opacity:1;color:var(--ui-field-readonly-input-text)}.dropdown-search-field__chevron-btn{display:flex;flex-shrink:0;align-items:center;justify-content:center;box-sizing:border-box;width:2rem;height:2rem;margin:0 .1rem;padding:0;border:0;border-radius:8px;background:transparent;color:var(--ui-field-float-prefix-color);cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,color .15s ease}.dropdown-search-field__chevron-btn:hover:not(:disabled){background:#5a7fa31f;color:var(--ui-field-float-label-top-color)}.dropdown-search-field__chevron-btn:focus,.dropdown-search-field__chevron-btn:focus-visible{outline:none;box-shadow:none}.dropdown-search-field__chevron-btn:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}:host ::ng-deep .base-field--readonly:not(.base-field--disabled) .dropdown-search-field__chevron-btn:disabled{opacity:1;cursor:default;color:var(--ui-field-readonly-prefix-color)}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn{color:var(--ui-field-float-label-invalid-color)}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn .dropdown-search-field__chevron-icon{color:inherit}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn:hover:not(:disabled){background:#b91c1c1f}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn:focus,:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn:focus-visible{outline:none;box-shadow:none}.dropdown-search-field__chevron-icon{display:inline-flex;align-items:center;justify-content:center;padding-top:2px;font-size:.8rem;line-height:1}.dropdown-search-field__panel-inner{display:flex;flex-direction:column;max-height:min(280px,55vh);width:100%;box-sizing:border-box;background:var(--app-color-nav-surface, var(--app-color-surface, #fff))}.dropdown-search-field__list{margin:0;padding:.25rem 0;flex:1;min-height:0;width:100%;max-height:min(260px,52vh);box-sizing:border-box;outline:none;overflow-x:hidden;overflow-y:auto}.dropdown-search-field__loading{padding:.65rem .75rem;font-size:.85rem;line-height:1.35;color:var(--ui-field-float-label-color);text-align:center}.dropdown-search-field__option{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.45rem .75rem;font-size:.95rem;line-height:1.35;cursor:pointer;color:var(--ui-field-float-input-text)}.dropdown-search-field__option--selected:not(.dropdown-search-field__option--disabled){background:var(--app-color-dropdown-option-selected-bg)}.dropdown-search-field__option--active:not(.dropdown-search-field__option--disabled):not(.dropdown-search-field__option--selected){background:var(--app-color-dropdown-option-highlight-bg)}.dropdown-search-field__option.dropdown-search-field__option--active.dropdown-search-field__option--selected:not(.dropdown-search-field__option--disabled){background:var(--app-color-dropdown-option-selected-bg-active)}.dropdown-search-field__option--disabled{opacity:.45;cursor:not-allowed}.dropdown-search-field__option:hover:not(.dropdown-search-field__option--disabled):not(.dropdown-search-field__option--selected){background:var(--app-color-dropdown-option-hover-bg)}.dropdown-search-field__option.dropdown-search-field__option--selected:hover:not(.dropdown-search-field__option--disabled){background:var(--app-color-dropdown-option-selected-hover-bg)}\n"], dependencies: [{ kind: "component", type: BaseFieldComponent, selector: "app-base-field", inputs: ["label", "errorMessage", "required", "showRequiredMark", "invalid", "filled", "disabled", "readonly", "inputId", "errorId", "showPrefixIcon", "prefixIcon", "clearable", "clearAriaLabel", "showSuffixSlot", "valueAlignEnd", "loading", "skeletonVariant", "mostrarMenuContexto", "contextMenuItems", "contextMenuId"], outputs: ["clear", "contextMenuSelect"] }, { kind: "component", type: DropdownBaseComponent, selector: "app-dropdown-base", inputs: ["open", "panelTemplate", "panelWidthPx", "closeOnEscape", "hasBackdrop", "connectedPositions", "pushConnectedOverlay", "bareOverlayPanel"], outputs: ["openChange"] }, { kind: "component", type: SkeletonListComponent, selector: "app-skeleton-list", inputs: ["rows", "leading", "rowGap", "lineHeight", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
485
|
-
}
|
|
486
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownSearchFieldComponent, decorators: [{
|
|
487
|
-
type: Component,
|
|
488
|
-
args: [{ selector: 'app-dropdown-search-field', standalone: true, imports: [BaseFieldComponent, DropdownBaseComponent, SkeletonListComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
489
|
-
{
|
|
490
|
-
provide: NG_VALUE_ACCESSOR,
|
|
491
|
-
useExisting: forwardRef(() => DropdownSearchFieldComponent),
|
|
492
|
-
multi: true,
|
|
493
|
-
},
|
|
494
|
-
], template: "<app-base-field [label]=\"floatLabelCaption\" [filled]=\"filledUi\" [disabled]=\"disabled\" [readonly]=\"readonly\"\n [loading]=\"loading\"\n [errorMessage]=\"uiErrorMessage\" [required]=\"uiRequiredEffective\" [showRequiredMark]=\"showRequiredMark\" [invalid]=\"uiInvalid\"\n [inputId]=\"controlId\" [errorId]=\"errorElementId\" [showPrefixIcon]=\"showPrefixIcon\" [prefixIcon]=\"prefixIcon\"\n [clearable]=\"clearable\" [clearAriaLabel]=\"clearAriaLabel\"\n [mostrarMenuContexto]=\"mostrarMenuContexto\" [contextMenuItems]=\"contextMenuItems\" [contextMenuId]=\"contextMenuId\"\n (clear)=\"onClear()\" (contextMenuSelect)=\"contextMenuSelect.emit($event)\">\n <ng-content select=\"[appFieldPrefix]\" />\n <div class=\"dropdown-search-field__wrap\">\n <app-dropdown-base [open]=\"panelOpen\" [panelTemplate]=\"optionsPanelTpl\" [panelWidthPx]=\"panelOverlayWidth\"\n (openChange)=\"onDropdownOpenChange($event)\">\n <div #dropdownFieldTriggerRoot class=\"dropdown-search-field__origin\" appDropdownTrigger\n (keydown)=\"onTriggerKeydown($event)\">\n <input type=\"text\" class=\"dropdown-search-field__input\"\n [class.dropdown-search-field__input--locked]=\"isLockedSelectionDisplay\" [id]=\"controlId\"\n [attr.name]=\"name || null\" [disabled]=\"disabled\" [readonly]=\"isNativeInputReadonly\" [attr.placeholder]=\"''\"\n autocomplete=\"off\" spellcheck=\"false\"\n [attr.aria-expanded]=\"panelOpen\" aria-autocomplete=\"list\" role=\"combobox\"\n [attr.aria-controls]=\"panelOpen ? optionsListId : null\" [attr.aria-invalid]=\"uiInvalid\"\n [attr.aria-describedby]=\"uiAriaDescribedBy\" [attr.aria-label]=\"floatLabelCaption || placeholder || 'Buscar e selecionar'\"\n [value]=\"searchQuery\" (input)=\"onMainInput($event)\" (keydown)=\"onMainKeydown($event)\"\n (blur)=\"onMainBlur($event)\" />\n <button type=\"button\" class=\"dropdown-search-field__chevron-btn\" tabindex=\"-1\" [disabled]=\"disabled || readonly\"\n [attr.aria-expanded]=\"panelOpen\" aria-haspopup=\"listbox\" aria-label=\"Abrir lista\" (click)=\"openToggle()\">\n <i class=\"fa-solid fa-chevron-down dropdown-search-field__chevron-icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </app-dropdown-base>\n </div>\n</app-base-field>\n\n<ng-template #optionsPanelTpl>\n <div class=\"dropdown-search-field__panel-inner\" (mousedown)=\"$event.preventDefault()\">\n <div class=\"dropdown-search-field__list\" [id]=\"optionsListId\" role=\"listbox\" tabindex=\"-1\"\n [attr.aria-label]=\"floatLabelCaption || 'Op\u00E7\u00F5es'\" (blur)=\"onMainBlur($event)\"\n (keydown)=\"onSearchListKeydown($event)\" (scroll)=\"onOptionsListScroll($event)\">\n @if (listOptions.length === 0 && (optionsLoading || loadingMore)) {\n <app-skeleton-list [rows]=\"8\" />\n }\n @for (opt of listOptions; track trackOption($index, opt)) {\n <div role=\"option\" class=\"dropdown-search-field__option\"\n [class.dropdown-search-field__option--disabled]=\"opt.disabled\"\n [class.dropdown-search-field__option--selected]=\"isSelected(opt)\"\n [class.dropdown-search-field__option--active]=\"!opt.disabled && activeIndex === $index\"\n [attr.tabindex]=\"opt.disabled ? null : -1\" [attr.aria-selected]=\"isSelected(opt)\" (click)=\"selectOption(opt)\"\n (keydown)=\"onOptionRowKeydown($event, opt)\">\n {{ opt.label }}\n </div>\n }\n @if (options.length > 0 && loadingMore) {\n <app-skeleton-list [rows]=\"1\" [leading]=\"false\" />\n }\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;box-sizing:border-box}:host ::ng-deep .base-field:not(.base-field--invalid):not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-float-border-focus);box-shadow:0 0 0 3px var(--ui-field-float-focus-ring)}:host ::ng-deep .base-field--invalid:not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-input-invalid-border);box-shadow:0 0 0 3px var(--ui-field-input-invalid-focus-halo)}:host ::ng-deep .base-field.base-field--readonly:not(.base-field--invalid):not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-readonly-border-focus);box-shadow:0 0 0 3px var(--ui-field-readonly-focus-ring)}:host ::ng-deep .base-field.base-field--invalid.base-field--readonly:not(.base-field--disabled) .base-field__box:focus-within{border-color:var(--ui-field-input-invalid-border);box-shadow:0 0 0 3px var(--ui-field-input-invalid-focus-halo)}.dropdown-search-field__wrap{display:flex;flex:1;align-items:stretch;min-width:0;width:100%;box-sizing:border-box}.dropdown-search-field__origin{display:flex;align-items:center;min-width:0;width:100%;min-height:calc(1.8rem + 1.35em);box-sizing:border-box}.dropdown-search-field__input{flex:1;margin:0;box-sizing:border-box;min-height:calc(1.8rem + 1.35em);padding:1.35rem .35rem .45rem .75rem;font-size:1rem;line-height:1.35;font-family:inherit;text-align:left;color:var(--ui-field-float-input-text);background:transparent;border:0;border-radius:0;box-shadow:none;cursor:text;display:block;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown-search-field__input:focus,.dropdown-search-field__input:focus-visible{outline:none;box-shadow:none}.dropdown-search-field__input:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}.dropdown-search-field__input--locked:read-only:not(:disabled){cursor:default;opacity:1}.dropdown-search-field__input:read-only:not(:disabled):not(.dropdown-search-field__input--locked){cursor:default;opacity:1;color:var(--ui-field-readonly-input-text)}.dropdown-search-field__chevron-btn{display:flex;flex-shrink:0;align-items:center;justify-content:center;box-sizing:border-box;width:2rem;height:2rem;margin:0 .1rem;padding:0;border:0;border-radius:8px;background:transparent;color:var(--ui-field-float-prefix-color);cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,color .15s ease}.dropdown-search-field__chevron-btn:hover:not(:disabled){background:#5a7fa31f;color:var(--ui-field-float-label-top-color)}.dropdown-search-field__chevron-btn:focus,.dropdown-search-field__chevron-btn:focus-visible{outline:none;box-shadow:none}.dropdown-search-field__chevron-btn:disabled{cursor:not-allowed;opacity:var(--ui-field-input-disabled-opacity)}:host ::ng-deep .base-field--readonly:not(.base-field--disabled) .dropdown-search-field__chevron-btn:disabled{opacity:1;cursor:default;color:var(--ui-field-readonly-prefix-color)}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn{color:var(--ui-field-float-label-invalid-color)}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn .dropdown-search-field__chevron-icon{color:inherit}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn:hover:not(:disabled){background:#b91c1c1f}:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn:focus,:host.dropdown-search-field--invalid .dropdown-search-field__chevron-btn:focus-visible{outline:none;box-shadow:none}.dropdown-search-field__chevron-icon{display:inline-flex;align-items:center;justify-content:center;padding-top:2px;font-size:.8rem;line-height:1}.dropdown-search-field__panel-inner{display:flex;flex-direction:column;max-height:min(280px,55vh);width:100%;box-sizing:border-box;background:var(--app-color-nav-surface, var(--app-color-surface, #fff))}.dropdown-search-field__list{margin:0;padding:.25rem 0;flex:1;min-height:0;width:100%;max-height:min(260px,52vh);box-sizing:border-box;outline:none;overflow-x:hidden;overflow-y:auto}.dropdown-search-field__loading{padding:.65rem .75rem;font-size:.85rem;line-height:1.35;color:var(--ui-field-float-label-color);text-align:center}.dropdown-search-field__option{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.45rem .75rem;font-size:.95rem;line-height:1.35;cursor:pointer;color:var(--ui-field-float-input-text)}.dropdown-search-field__option--selected:not(.dropdown-search-field__option--disabled){background:var(--app-color-dropdown-option-selected-bg)}.dropdown-search-field__option--active:not(.dropdown-search-field__option--disabled):not(.dropdown-search-field__option--selected){background:var(--app-color-dropdown-option-highlight-bg)}.dropdown-search-field__option.dropdown-search-field__option--active.dropdown-search-field__option--selected:not(.dropdown-search-field__option--disabled){background:var(--app-color-dropdown-option-selected-bg-active)}.dropdown-search-field__option--disabled{opacity:.45;cursor:not-allowed}.dropdown-search-field__option:hover:not(.dropdown-search-field__option--disabled):not(.dropdown-search-field__option--selected){background:var(--app-color-dropdown-option-hover-bg)}.dropdown-search-field__option.dropdown-search-field__option--selected:hover:not(.dropdown-search-field__option--disabled){background:var(--app-color-dropdown-option-selected-hover-bg)}\n"] }]
|
|
495
|
-
}], propDecorators: { hostInvalidClass: [{
|
|
496
|
-
type: HostBinding,
|
|
497
|
-
args: ['class.dropdown-search-field--invalid']
|
|
498
|
-
}], pageSize: [{
|
|
499
|
-
type: Input,
|
|
500
|
-
args: [{ transform: numberAttribute }]
|
|
501
|
-
}], hasMore: [{
|
|
502
|
-
type: Input
|
|
503
|
-
}], loadingMore: [{
|
|
504
|
-
type: Input
|
|
505
|
-
}], searchDebounceMs: [{
|
|
506
|
-
type: Input,
|
|
507
|
-
args: [{ transform: numberAttribute }]
|
|
508
|
-
}], pageRequested: [{
|
|
509
|
-
type: Output
|
|
510
|
-
}], optionsPanelTpl: [{
|
|
511
|
-
type: ViewChild,
|
|
512
|
-
args: ['optionsPanelTpl', { static: true }]
|
|
513
|
-
}], dropdownTriggerRootRef: [{
|
|
514
|
-
type: ViewChild,
|
|
515
|
-
args: ['dropdownFieldTriggerRoot', { read: ElementRef }]
|
|
516
|
-
}], onDropdownHostEscape: [{
|
|
517
|
-
type: HostListener,
|
|
518
|
-
args: ['keydown', ['$event']]
|
|
519
|
-
}] } });
|
|
520
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2Ryb3Bkb3duLWZpZWxkcy9kcm9wZG93bi1zZWFyY2gtZmllbGQvZHJvcGRvd24tc2VhcmNoLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZmllbGRzL2Ryb3Bkb3duLWZpZWxkcy9kcm9wZG93bi1zZWFyY2gtZmllbGQvZHJvcGRvd24tc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBRTFFLElBQUssc0JBR0o7QUFIRCxXQUFLLHNCQUFzQjtJQUN6Qiw2Q0FBbUIsQ0FBQTtJQUNuQixpREFBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSEksc0JBQXNCLEtBQXRCLHNCQUFzQixRQUcxQjtBQWlCRCxNQUFNLE9BQU8sNEJBQ1gsU0FBUSx1QkFB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LENBQUM7Z0JBQzNELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiw0UEE0QjhDLFVBQVUseUVDekUzRCxxbUhBdURBLDYzS0RwQlksa0JBQWtCLHNhQUFFLHFCQUFxQiw0T0FBRSxxQkFBcUI7OzRGQVkvRCw0QkFBNEI7a0JBZnhDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUCxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLG1CQUcxRCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDOzRCQUMzRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFTRyxnQkFBZ0I7c0JBRG5CLFdBQVc7dUJBQUMsc0NBQXNDO2dCQUtaLFFBQVE7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUM1QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFLaUMsZ0JBQWdCO3NCQUF0RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFFbEIsYUFBYTtzQkFBL0IsTUFBTTtnQkFJUCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk3QixzQkFBc0I7c0JBRHRDLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQW9RM0Qsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIGluamVjdCxcclxuICBudW1iZXJBdHRyaWJ1dGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC1maWVsZHMvX2Jhc2UvYmFzZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbkZpZWxkQmFzZSB9IGZyb20gJy4uL19iYXNlL2Ryb3Bkb3duLW9wdGlvbi1maWVsZC5iYXNlJztcclxuaW1wb3J0IHR5cGUgeyBEcm9wZG93blNlYXJjaFBhZ2VSZXF1ZXN0ZWQgfSBmcm9tICcuLi9fbW9kZWxzL2Ryb3Bkb3duLXNlYXJjaC1wYWdlLXJlcXVlc3RlZC5tb2RlbCc7XHJcbmltcG9ydCB7IFVpU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vX21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRHJvcGRvd25CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vX2Jhc2UvZHJvcGRvd24tYmFzZS9kcm9wZG93bi1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHNjaGVkdWxlQ2xvc2VEcm9wZG93blBhbmVsT25UcmlnZ2VyQmx1ciB9IGZyb20gJy4uL19iYXNlL2Ryb3Bkb3duLXRyaWdnZXItYmx1ci51dGlsJztcclxuaW1wb3J0IHsgU2tlbGV0b25MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vbG9hZGluZy9za2VsZXRvbi1sb2FkaW5nJztcclxuXHJcbmVudW0gRHJvcGRvd25TZWFyY2hPcGVuTW9kZSB7XHJcbiAgRGVmYXVsdCA9ICdkZWZhdWx0JyxcclxuICBLZWVwSW5wdXQgPSAna2VlcElucHV0JyxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHJvcGRvd24tc2VhcmNoLWZpZWxkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtCYXNlRmllbGRDb21wb25lbnQsIERyb3Bkb3duQmFzZUNvbXBvbmVudCwgU2tlbGV0b25MaXN0Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZHJvcGRvd24tc2VhcmNoLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyb3Bkb3duU2VhcmNoRmllbGRDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duU2VhcmNoRmllbGRDb21wb25lbnRcclxuICBleHRlbmRzIERyb3Bkb3duT3B0aW9uRmllbGRCYXNlXHJcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xyXG57XHJcbiAgcHJpdmF0ZSByZWFkb25seSBob3N0UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcm9wZG93bi1zZWFyY2gtZmllbGQtLWludmFsaWQnKVxyXG4gIGdldCBob3N0SW52YWxpZENsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudWlJbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgcGFnZVNpemUgPSA1O1xyXG4gIEBJbnB1dCgpIGhhc01vcmUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBsb2FkaW5nTW9yZSA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEFww7NzIHBhcmFyIGRlIGRpZ2l0YXIsIGRpc3BhcmEgYSBtZXNtYSBwZXNxdWlzYSBxdWUgRW50ZXIgKGBwYWdlUmVxdWVzdGVkYCBjb20gYHF1ZXJ5YCkuXHJcbiAgICogYDBgIGRlc2F0aXZhIChzw7MgRW50ZXIgcGVzcXVpc2EpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHNlYXJjaERlYm91bmNlTXMgPSAzNTA7XHJcblxyXG4gIEBPdXRwdXQoKSByZWFkb25seSBwYWdlUmVxdWVzdGVkID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8RHJvcGRvd25TZWFyY2hQYWdlUmVxdWVzdGVkPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdvcHRpb25zUGFuZWxUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIG9wdGlvbnNQYW5lbFRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBAVmlld0NoaWxkKCdkcm9wZG93bkZpZWxkVHJpZ2dlclJvb3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bkb3duVHJpZ2dlclJvb3RSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgc2VhcmNoUXVlcnkgPSAnJztcclxuICBjb21taXR0ZWRRdWVyeSA9ICcnO1xyXG5cclxuICBwYW5lbE9wZW4gPSBmYWxzZTtcclxuICBwYW5lbE92ZXJsYXlXaWR0aCA9IDA7XHJcbiAgcHJpdmF0ZSBzY3JvbGxMb2FkVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzZWFyY2hEZWJvdW5jZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYWZ0ZXJXcml0ZVZhbHVlKHZhbHVlOiB1bmtub3duIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9XHJcbiAgICAgIHZhbHVlID09IG51bGwgPyAnJyA6ICh0aGlzLmZpbmRPcHRpb25CeVZhbHVlKHZhbHVlKT8ubGFiZWwgPz8gJycpO1xyXG4gICAgdGhpcy5jb21taXR0ZWRRdWVyeSA9ICcnO1xyXG4gICAgdGhpcy5zeW5jQWN0aXZlSW5kZXhGcm9tVmFsdWUodmFsdWUpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBvcHQgPSB0aGlzLmZpbmRPcHRpb25CeVZhbHVlKHRoaXMuaW50ZXJuYWxWYWx1ZSk7XHJcbiAgICByZXR1cm4gb3B0Py5sYWJlbCA/PyAnJztcclxuICB9XHJcblxyXG4gIGdldCBvcHRpb25zTGlzdElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5jb250cm9sSWR9LXNlYXJjaC1saXN0YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbSB2YWxvciBzZWxlY2lvbmFkbyBlIHBhaW5lbCBmZWNoYWRvLCBvIHRleHRvIMOpIHPDsyBleGliacOnw6NvIGRvIHLDs3R1bG87XHJcbiAgICogZWRpw6fDo28gc8OzIGNvbSBvIHBhaW5lbCBhYmVydG8gKHBlc3F1aXNhKS5cclxuICAgKi9cclxuICBnZXQgaXNMb2NrZWRTZWxlY3Rpb25EaXNwbGF5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgIXRoaXMuZGlzYWJsZWQgJiZcclxuICAgICAgIXRoaXMucmVhZG9ubHkgJiZcclxuICAgICAgdGhpcy5maWxsZWRVaSAmJlxyXG4gICAgICAhdGhpcy5wYW5lbE9wZW5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogYHJlYWRvbmx5YCBuYXRpdm86IHByb3AgZG8gY2FtcG8gb3UgYmxvcXVlaW8gZGUgZXhpYmnDp8OjbyBkYSBzZWxlw6fDo28uICovXHJcbiAgZ2V0IGlzTmF0aXZlSW5wdXRSZWFkb25seSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuaXNMb2NrZWRTZWxlY3Rpb25EaXNwbGF5O1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICBpZiAoIXRoaXMucGFuZWxPcGVuIHx8IHRoaXMubG9hZGluZ01vcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmdNb3JlJ10gfHwgY2hhbmdlc1snb3B0aW9ucyddKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cnlFbWl0SWZTaG9ydExpc3QoKSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbExvYWRUaW1lciAhPSBudWxsKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbExvYWRUaW1lcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoRGVib3VuY2UoKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcGRvd25PcGVuQ2hhbmdlKFxyXG4gICAgbmV4dDogYm9vbGVhbixcclxuICAgIG9wZW5Nb2RlOiBEcm9wZG93blNlYXJjaE9wZW5Nb2RlID0gRHJvcGRvd25TZWFyY2hPcGVuTW9kZS5EZWZhdWx0LFxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCFuZXh0KSB7XHJcbiAgICAgIGlmICghdGhpcy5wYW5lbE9wZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbGVhclNlYXJjaERlYm91bmNlKCk7XHJcbiAgICAgIGlmICh0aGlzLnNjcm9sbExvYWRUaW1lciAhPSBudWxsKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsTG9hZFRpbWVyKTtcclxuICAgICAgICB0aGlzLnNjcm9sbExvYWRUaW1lciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTWFpbklucHV0SWZGb2N1c0xvc3QoKSwgMCk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wZW5Nb2RlID09PSBEcm9wZG93blNlYXJjaE9wZW5Nb2RlLkRlZmF1bHQpIHtcclxuICAgICAgLy8gTsOjbyBsaW1wYXIgbyB0ZXh0byBxdWFuZG8gasOhIGjDoSBzZWxlw6fDo28gKGNvbXBvcnRhbWVudG8gYWxpbmhhZG8gYW8gc2VsZWN0KS5cclxuICAgICAgdGhpcy5jb21taXR0ZWRRdWVyeSA9ICcnO1xyXG4gICAgICBpZiAodGhpcy5maWxsZWRVaSkge1xyXG4gICAgICAgIGNvbnN0IG9wdCA9IHRoaXMuZmluZE9wdGlvbkJ5VmFsdWUodGhpcy5pbnRlcm5hbFZhbHVlKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gb3B0Py5sYWJlbCA/PyAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29tbWl0dGVkUXVlcnkgPSB0aGlzLnNlYXJjaFF1ZXJ5LnRyaW0oKTtcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuc3luY0FjdGl2ZUluZGV4RnJvbVZhbHVlKHRoaXMuaW50ZXJuYWxWYWx1ZSk7XHJcbiAgICBjb25zdCB3ID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICB0aGlzLnBhbmVsT3ZlcmxheVdpZHRoID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHcpKTtcclxuICAgIGlmICghdGhpcy5sb2FkaW5nTW9yZSkge1xyXG4gICAgICB0aGlzLnBhZ2VSZXF1ZXN0ZWQuZW1pdCh7XHJcbiAgICAgICAgcGFnZTogMCxcclxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICBxdWVyeTogdGhpcy5jb21taXR0ZWRRdWVyeSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJ5RW1pdElmU2hvcnRMaXN0KCksIDApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyeUVtaXRJZlNob3J0TGlzdCgpLCA4MCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb250cm9sSWQpPy5mb2N1cygpO1xyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uTWFpbklucHV0KGV2OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNOYXRpdmVJbnB1dFJlYWRvbmx5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsID0gZXYudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gZWwudmFsdWU7XHJcbiAgICB0aGlzLnNjaGVkdWxlRGVib3VuY2VkU2VhcmNoKCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uTWFpbktleWRvd24oZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldi5rZXkgPT09ICdEZWxldGUnIHx8IGV2LmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcclxuICAgICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGxlZFVpKSB7XHJcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLm9uQ2xlYXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScgJiYgdGhpcy5wYW5lbE9wZW4pIHtcclxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5vbkRyb3Bkb3duT3BlbkNoYW5nZShmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYW5lbE9wZW4gJiYgdGhpcy5saXN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHN3aXRjaCAoZXYua2V5KSB7XHJcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5zdGVwQWN0aXZlKDEpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuc3RlcEFjdGl2ZSgtMSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjYXNlICdIb21lJzpcclxuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5maXJzdEVuYWJsZWRJbmRleCgpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY2FzZSAnRW5kJzpcclxuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5sYXN0RW5hYmxlZEluZGV4KCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXYua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBpZiAoIXRoaXMucGFuZWxPcGVuKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeS50cmltKCkgPT09ICcnIHx8XHJcbiAgICAgICAgICB0aGlzLmlzTG9ja2VkU2VsZWN0aW9uRGlzcGxheVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5vbkRyb3Bkb3duT3BlbkNoYW5nZSh0cnVlLCBEcm9wZG93blNlYXJjaE9wZW5Nb2RlLkRlZmF1bHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcSA9IHRoaXMuc2VhcmNoUXVlcnkudHJpbSgpO1xyXG4gICAgICBjb25zdCBkaXJ0eSA9IHEgIT09IHRoaXMuY29tbWl0dGVkUXVlcnk7XHJcbiAgICAgIGlmIChkaXJ0eSkge1xyXG4gICAgICAgIC8vIExpc3RhIHBlZGlkYSBjb20gcXVlcnkgdmF6aWEgbWFzIG8gaW5wdXQgbW9zdHJhIG8gcsOzdHVsbyBkYSBzZWxlw6fDo28g4oCUIG7Do28gw6kgcGVzcXVpc2Egbm92YS5cclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlpbmdTZWxlY3RlZExhYmVsV2l0aFVuZmlsdGVyZWRMaXN0KCkpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxpc3RPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb21taXRBY3RpdmVPcHRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGlzdE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuY29tbWl0QWN0aXZlT3B0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW8gcmVhYnJpciwgYGNvbW1pdHRlZFF1ZXJ5YCDDqSAnJyAobGlzdGEgc2VtIGZpbHRybykgZSBvIHRleHRvIGRvIGlucHV0IMOpIG8gcsOzdHVsbyBkbyB2YWxvciDigJRcclxuICAgKiBgcSAhPT0gY29tbWl0dGVkUXVlcnlgIHNlcmlhIHRydWUgc2VtIG8gdXN1w6FyaW8gdGVyIHBlc3F1aXNhZG87IEVudGVyIGRldmUgY29uZmlybWFyIG9ww6fDo28uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc0Rpc3BsYXlpbmdTZWxlY3RlZExhYmVsV2l0aFVuZmlsdGVyZWRMaXN0KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZpbGxlZFVpIHx8IHRoaXMuY29tbWl0dGVkUXVlcnkgIT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5maW5kT3B0aW9uQnlWYWx1ZSh0aGlzLmludGVybmFsVmFsdWUpPy5sYWJlbD8udHJpbSgpO1xyXG4gICAgaWYgKGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnNlYXJjaFF1ZXJ5LnRyaW0oKSA9PT0gbGFiZWw7XHJcbiAgfVxyXG5cclxuICBvbk1haW5CbHVyKGV2PzogRm9jdXNFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgdHJpZ2dlclJvb3QgPVxyXG4gICAgICB0aGlzLmRyb3Bkb3duVHJpZ2dlclJvb3RSZWY/Lm5hdGl2ZUVsZW1lbnQgPz8gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBzY2hlZHVsZUNsb3NlRHJvcGRvd25QYW5lbE9uVHJpZ2dlckJsdXIoe1xyXG4gICAgICB0cmlnZ2VyUm9vdCxcclxuICAgICAgaXNQYW5lbE9wZW46ICgpID0+IHRoaXMucGFuZWxPcGVuLFxyXG4gICAgICBjbG9zZVBhbmVsOiAoKSA9PiB0aGlzLm9uRHJvcGRvd25PcGVuQ2hhbmdlKGZhbHNlKSxcclxuICAgICAgbm90aWZ5VG91Y2hlZDogKCkgPT4gdGhpcy5ub3RpZnlUb3VjaGVkKCksXHJcbiAgICAgIGJsdXJSZWxhdGVkVGFyZ2V0OiBldj8ucmVsYXRlZFRhcmdldCA/PyBudWxsLFxyXG4gICAgICBhZnRlckJsdXI6ICgpID0+IHRoaXMuY2xlYXJPcnBoYW5TZWFyY2hUZXh0QWZ0ZXJCbHVyKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbSB2YWxvciBubyBtb2RlbG86IHJlbW92ZSB0ZXh0byBsaXZyZSBkZWl4YWRvIG5vIGlucHV0IChleC46IHBlc3F1aXNhIHNlbSBlc2NvbGhhIHbDoWxpZGEpLlxyXG4gICAqIE7Do28gYWx0ZXJhIG8gYEZvcm1Db250cm9sYCDigJQgbWFudMOpbS1zZSBgbnVsbGAvdmF6aW8gZSBvIGVzdGFkbyBpbnbDoWxpZG8gKGV4Ljogb2JyaWdhdMOzcmlvKSBjb250aW51YSB2aXPDrXZlbC5cclxuICAgKi9cclxuICBwcml2YXRlIGNsZWFyT3JwaGFuU2VhcmNoVGV4dEFmdGVyQmx1cigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdiA9IHRoaXMuaW50ZXJuYWxWYWx1ZTtcclxuICAgIGlmICh2ICE9IG51bGwgJiYgdiAhPT0gJycpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkudHJpbSgpID09PSAnJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICB0aGlzLmNvbW1pdHRlZFF1ZXJ5ID0gJyc7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKiBFc2NhcGUgY29tIGZvY28gbm8gbGltcGFyL3ByZWZpeG8gZG8gYGJhc2UtZmllbGRgIChmb3JhIGRvIGlucHV0IGRhIG9yaWdlbSkuICovXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25Ecm9wZG93bkhvc3RFc2NhcGUoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5wYW5lbE9wZW4gfHwgZXYua2V5ICE9PSAnRXNjYXBlJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5vbkRyb3Bkb3duT3BlbkNoYW5nZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBvblRyaWdnZXJLZXlkb3duKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgKGV2LmtleSA9PT0gJ0RlbGV0ZScgfHwgZXYua2V5ID09PSAnQmFja3NwYWNlJykgJiZcclxuICAgICAgdGhpcy5maWxsZWRVaSAmJlxyXG4gICAgICAhdGhpcy5wYW5lbE9wZW5cclxuICAgICkge1xyXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9uQ2xlYXIoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChldi5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMub25Ecm9wZG93bk9wZW5DaGFuZ2UodHJ1ZSwgRHJvcGRvd25TZWFyY2hPcGVuTW9kZS5EZWZhdWx0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBFbnRlci9Fc3Bhw6dvIGNvbSBmb2NvIG5hIGxpbmhhIGRhIG9ww6fDo28gKHRhYmluZGV4KS4gKi9cclxuICBvbk9wdGlvblJvd0tleWRvd24oZXY6IEtleWJvYXJkRXZlbnQsIG9wdDogVWlTZWxlY3RPcHRpb248dW5rbm93bj4pOiB2b2lkIHtcclxuICAgIGlmIChvcHQuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChldi5rZXkgIT09ICdFbnRlcicgJiYgZXYua2V5ICE9PSAnICcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zZWxlY3RPcHRpb24ob3B0KTtcclxuICB9XHJcblxyXG4gIC8qKiBGb2NvIG5hIGxpc3RhIChleC46IFRhYik6IERlbGV0ZS9CYWNrc3BhY2UgbGltcGFtIGEgc2VsZcOnw6NvLiAqL1xyXG4gIG9uU2VhcmNoTGlzdEtleWRvd24oZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMub25Ecm9wZG93bk9wZW5DaGFuZ2UoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZXYua2V5ICE9PSAnRGVsZXRlJyAmJiBldi5rZXkgIT09ICdCYWNrc3BhY2UnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgIXRoaXMuZmlsbGVkVWkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vbkNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzTWFpbklucHV0SWZGb2N1c0xvc3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgIGlmIChhID09PSBkb2N1bWVudC5ib2R5IHx8IGEgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBhID09IG51bGwpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb250cm9sSWQpPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjaGVkdWxlRGVib3VuY2VkU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoRGVib3VuY2VNcyA8PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlYXJjaERlYm91bmNlVGltZXIgIT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlYXJjaERlYm91bmNlVGltZXIgPSBudWxsO1xyXG4gICAgICB0aGlzLmFwcGx5RGVib3VuY2VkU2VhcmNoKCk7XHJcbiAgICB9LCB0aGlzLnNlYXJjaERlYm91bmNlTXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclNlYXJjaERlYm91bmNlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lciAhPSBudWxsKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaERlYm91bmNlVGltZXIpO1xyXG4gICAgICB0aGlzLnNlYXJjaERlYm91bmNlVGltZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxpbmhhLXNlIGFvIEVudGVyOiBzw7MgZGlzcGFyYSBzZSBgcXVlcnlgIG11ZG91IGVtIHJlbGHDp8OjbyBhIGBjb21taXR0ZWRRdWVyeWA7XHJcbiAgICogY29tIHBhaW5lbCBmZWNoYWRvLCBzw7Mgc2UgaG91dmVyIHRleHRvIHBlc3F1aXPDoXZlbCAoY29tbyBFbnRlciBzZW0gYWJyaXIgdmF6aW8pLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXBwbHlEZWJvdW5jZWRTZWFyY2goKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuaXNOYXRpdmVJbnB1dFJlYWRvbmx5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFF1ZXJ5LnRyaW0oKTtcclxuICAgIGlmIChxID09PSB0aGlzLmNvbW1pdHRlZFF1ZXJ5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5wYW5lbE9wZW4pIHtcclxuICAgICAgaWYgKHEgPT09ICcnIHx8IHRoaXMuaXNMb2NrZWRTZWxlY3Rpb25EaXNwbGF5KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRGlzcGxheWluZ1NlbGVjdGVkTGFiZWxXaXRoVW5maWx0ZXJlZExpc3QoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgcnVuU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhclNlYXJjaERlYm91bmNlKCk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5wYW5lbE9wZW4pIHtcclxuICAgICAgdGhpcy5vbkRyb3Bkb3duT3BlbkNoYW5nZSh0cnVlLCBEcm9wZG93blNlYXJjaE9wZW5Nb2RlLktlZXBJbnB1dCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHEgPSB0aGlzLnNlYXJjaFF1ZXJ5LnRyaW0oKTtcclxuICAgIHRoaXMuY29tbWl0dGVkUXVlcnkgPSBxO1xyXG4gICAgdGhpcy5wYWdlUmVxdWVzdGVkLmVtaXQoe1xyXG4gICAgICBwYWdlOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgcXVlcnk6IHEsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25PcHRpb25zTGlzdFNjcm9sbChldjogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmxvYWRpbmdNb3JlIHx8ICF0aGlzLmhhc01vcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZWwgPSBldi50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY3JvbGxMb2FkVGltZXIgIT0gbnVsbCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxMb2FkVGltZXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zY3JvbGxMb2FkVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zY3JvbGxMb2FkVGltZXIgPSBudWxsO1xyXG4gICAgICBpZiAoZWwuc2Nyb2xsSGVpZ2h0IDw9IGVsLmNsaWVudEhlaWdodCArIDgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNNb3JlICYmICF0aGlzLmxvYWRpbmdNb3JlICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmVtaXROZXh0UGFnZVJlcXVlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5lYXJCb3R0b20gPVxyXG4gICAgICAgIGVsLnNjcm9sbEhlaWdodCAtIGVsLnNjcm9sbFRvcCAtIGVsLmNsaWVudEhlaWdodCA8PSA2NDtcclxuICAgICAgaWYgKCFuZWFyQm90dG9tKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW1pdE5leHRQYWdlUmVxdWVzdCgpO1xyXG4gICAgfSwgMTIwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdE5leHRQYWdlUmVxdWVzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmxvYWRpbmdNb3JlIHx8ICF0aGlzLmhhc01vcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBNYXRoLmZsb29yKHRoaXMub3B0aW9ucy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgIHRoaXMucGFnZVJlcXVlc3RlZC5lbWl0KHtcclxuICAgICAgcGFnZTogbmV4dFBhZ2UsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBxdWVyeTogdGhpcy5jb21taXR0ZWRRdWVyeSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cnlFbWl0SWZTaG9ydExpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucGFuZWxPcGVuIHx8IHRoaXMubG9hZGluZ01vcmUgfHwgIXRoaXMuaGFzTW9yZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9uc0xpc3RJZCkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gICAgaWYgKCFlbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZWwuc2Nyb2xsSGVpZ2h0IDw9IGVsLmNsaWVudEhlaWdodCArIDgpIHtcclxuICAgICAgdGhpcy5lbWl0TmV4dFBhZ2VSZXF1ZXN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCB0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFuZWxPcGVuKSB7XHJcbiAgICAgIHRoaXMub25Ecm9wZG93bk9wZW5DaGFuZ2UoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkRyb3Bkb3duT3BlbkNoYW5nZSh0cnVlLCBEcm9wZG93blNlYXJjaE9wZW5Nb2RlLkRlZmF1bHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21taXRBY3RpdmVPcHRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcHQgPSB0aGlzLmxpc3RPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdO1xyXG4gICAgaWYgKG9wdCAmJiAhb3B0LmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKG9wdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPcHRpb24ob3B0OiBVaVNlbGVjdE9wdGlvbjx1bmtub3duPik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCBvcHQuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWl0TW9kZWxWYWx1ZShvcHQudmFsdWUpO1xyXG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9IG9wdC5sYWJlbDtcclxuICAgIHRoaXMuY29tbWl0dGVkUXVlcnkgPSAnJztcclxuICAgIHRoaXMub25Ecm9wZG93bk9wZW5DaGFuZ2UoZmFsc2UpO1xyXG4gICAgdGhpcy5maW5pc2hTZWxlY3Rpb25Ub3VjaCgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGVhcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGVhclNlYXJjaERlYm91bmNlKCk7XHJcbiAgICB0aGlzLmVtaXRNb2RlbFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgdGhpcy5jb21taXR0ZWRRdWVyeSA9ICcnO1xyXG4gICAgdGhpcy5vbkRyb3Bkb3duT3BlbkNoYW5nZShmYWxzZSk7XHJcbiAgICB0aGlzLm5vdGlmeVRvdWNoZWQoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxufVxyXG4iLCI8YXBwLWJhc2UtZmllbGQgW2xhYmVsXT1cImZsb2F0TGFiZWxDYXB0aW9uXCIgW2ZpbGxlZF09XCJmaWxsZWRVaVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbZXJyb3JNZXNzYWdlXT1cInVpRXJyb3JNZXNzYWdlXCIgW3JlcXVpcmVkXT1cInVpUmVxdWlyZWRFZmZlY3RpdmVcIiBbc2hvd1JlcXVpcmVkTWFya109XCJzaG93UmVxdWlyZWRNYXJrXCIgW2ludmFsaWRdPVwidWlJbnZhbGlkXCJcbiAgW2lucHV0SWRdPVwiY29udHJvbElkXCIgW2Vycm9ySWRdPVwiZXJyb3JFbGVtZW50SWRcIiBbc2hvd1ByZWZpeEljb25dPVwic2hvd1ByZWZpeEljb25cIiBbcHJlZml4SWNvbl09XCJwcmVmaXhJY29uXCJcbiAgW2NsZWFyYWJsZV09XCJjbGVhcmFibGVcIiBbY2xlYXJBcmlhTGFiZWxdPVwiY2xlYXJBcmlhTGFiZWxcIlxuICBbbW9zdHJhck1lbnVDb250ZXh0b109XCJtb3N0cmFyTWVudUNvbnRleHRvXCIgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiIFtjb250ZXh0TWVudUlkXT1cImNvbnRleHRNZW51SWRcIlxuICAoY2xlYXIpPVwib25DbGVhcigpXCIgKGNvbnRleHRNZW51U2VsZWN0KT1cImNvbnRleHRNZW51U2VsZWN0LmVtaXQoJGV2ZW50KVwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbYXBwRmllbGRQcmVmaXhdXCIgLz5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLXNlYXJjaC1maWVsZF9fd3JhcFwiPlxuICAgIDxhcHAtZHJvcGRvd24tYmFzZSBbb3Blbl09XCJwYW5lbE9wZW5cIiBbcGFuZWxUZW1wbGF0ZV09XCJvcHRpb25zUGFuZWxUcGxcIiBbcGFuZWxXaWR0aFB4XT1cInBhbmVsT3ZlcmxheVdpZHRoXCJcbiAgICAgIChvcGVuQ2hhbmdlKT1cIm9uRHJvcGRvd25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDxkaXYgI2Ryb3Bkb3duRmllbGRUcmlnZ2VyUm9vdCBjbGFzcz1cImRyb3Bkb3duLXNlYXJjaC1maWVsZF9fb3JpZ2luXCIgYXBwRHJvcGRvd25UcmlnZ2VyXG4gICAgICAgIChrZXlkb3duKT1cIm9uVHJpZ2dlcktleWRvd24oJGV2ZW50KVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImRyb3Bkb3duLXNlYXJjaC1maWVsZF9faW5wdXRcIlxuICAgICAgICAgIFtjbGFzcy5kcm9wZG93bi1zZWFyY2gtZmllbGRfX2lucHV0LS1sb2NrZWRdPVwiaXNMb2NrZWRTZWxlY3Rpb25EaXNwbGF5XCIgW2lkXT1cImNvbnRyb2xJZFwiXG4gICAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lIHx8IG51bGxcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwiaXNOYXRpdmVJbnB1dFJlYWRvbmx5XCIgW2F0dHIucGxhY2Vob2xkZXJdPVwiJydcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJwYW5lbE9wZW5cIiBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIiByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwicGFuZWxPcGVuID8gb3B0aW9uc0xpc3RJZCA6IG51bGxcIiBbYXR0ci5hcmlhLWludmFsaWRdPVwidWlJbnZhbGlkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInVpQXJpYURlc2NyaWJlZEJ5XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJmbG9hdExhYmVsQ2FwdGlvbiB8fCBwbGFjZWhvbGRlciB8fCAnQnVzY2FyIGUgc2VsZWNpb25hcidcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hRdWVyeVwiIChpbnB1dCk9XCJvbk1haW5JbnB1dCgkZXZlbnQpXCIgKGtleWRvd24pPVwib25NYWluS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoYmx1cik9XCJvbk1haW5CbHVyKCRldmVudClcIiAvPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLXNlYXJjaC1maWVsZF9fY2hldnJvbi1idG5cIiB0YWJpbmRleD1cIi0xXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInBhbmVsT3BlblwiIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCIgYXJpYS1sYWJlbD1cIkFicmlyIGxpc3RhXCIgKGNsaWNrKT1cIm9wZW5Ub2dnbGUoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1kb3duIGRyb3Bkb3duLXNlYXJjaC1maWVsZF9fY2hldnJvbi1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXBwLWRyb3Bkb3duLWJhc2U+XG4gIDwvZGl2PlxuPC9hcHAtYmFzZS1maWVsZD5cblxuPG5nLXRlbXBsYXRlICNvcHRpb25zUGFuZWxUcGw+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1zZWFyY2gtZmllbGRfX3BhbmVsLWlubmVyXCIgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1zZWFyY2gtZmllbGRfX2xpc3RcIiBbaWRdPVwib3B0aW9uc0xpc3RJZFwiIHJvbGU9XCJsaXN0Ym94XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZsb2F0TGFiZWxDYXB0aW9uIHx8ICdPcMOnw7VlcydcIiAoYmx1cik9XCJvbk1haW5CbHVyKCRldmVudClcIlxuICAgICAgKGtleWRvd24pPVwib25TZWFyY2hMaXN0S2V5ZG93bigkZXZlbnQpXCIgKHNjcm9sbCk9XCJvbk9wdGlvbnNMaXN0U2Nyb2xsKCRldmVudClcIj5cbiAgICAgIEBpZiAobGlzdE9wdGlvbnMubGVuZ3RoID09PSAwICYmIChvcHRpb25zTG9hZGluZyB8fCBsb2FkaW5nTW9yZSkpIHtcbiAgICAgIDxhcHAtc2tlbGV0b24tbGlzdCBbcm93c109XCI4XCIgLz5cbiAgICAgIH1cbiAgICAgIEBmb3IgKG9wdCBvZiBsaXN0T3B0aW9uczsgdHJhY2sgdHJhY2tPcHRpb24oJGluZGV4LCBvcHQpKSB7XG4gICAgICA8ZGl2IHJvbGU9XCJvcHRpb25cIiBjbGFzcz1cImRyb3Bkb3duLXNlYXJjaC1maWVsZF9fb3B0aW9uXCJcbiAgICAgICAgW2NsYXNzLmRyb3Bkb3duLXNlYXJjaC1maWVsZF9fb3B0aW9uLS1kaXNhYmxlZF09XCJvcHQuZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3MuZHJvcGRvd24tc2VhcmNoLWZpZWxkX19vcHRpb24tLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQob3B0KVwiXG4gICAgICAgIFtjbGFzcy5kcm9wZG93bi1zZWFyY2gtZmllbGRfX29wdGlvbi0tYWN0aXZlXT1cIiFvcHQuZGlzYWJsZWQgJiYgYWN0aXZlSW5kZXggPT09ICRpbmRleFwiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIm9wdC5kaXNhYmxlZCA/IG51bGwgOiAtMVwiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChvcHQpXCIgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25PcHRpb25Sb3dLZXlkb3duKCRldmVudCwgb3B0KVwiPlxuICAgICAgICB7eyBvcHQubGFiZWwgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChvcHRpb25zLmxlbmd0aCA+IDAgJiYgbG9hZGluZ01vcmUpIHtcbiAgICAgIDxhcHAtc2tlbGV0b24tbGlzdCBbcm93c109XCIxXCIgW2xlYWRpbmddPVwiZmFsc2VcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|