@acorex/components 7.1.0 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action-sheet/index.d.ts +5 -5
- package/action-sheet/public-api.d.ts +3 -3
- package/action-sheet/src/action-sheet.component.d.ts +25 -25
- package/action-sheet/src/action-sheet.interface.d.ts +20 -20
- package/action-sheet/src/action-sheet.module.d.ts +14 -14
- package/action-sheet/src/action-sheet.service.d.ts +13 -13
- package/alert/index.d.ts +5 -5
- package/alert/public-api.d.ts +2 -2
- package/alert/src/alert.component.d.ts +88 -88
- package/alert/src/alert.module.d.ts +9 -9
- package/avatar/index.d.ts +5 -5
- package/avatar/public-api.d.ts +3 -3
- package/avatar/src/avatar-group.component.d.ts +8 -8
- package/avatar/src/avatar.component.d.ts +20 -20
- package/avatar/src/avatar.module.d.ts +9 -9
- package/badge/index.d.ts +5 -5
- package/badge/public-api.d.ts +2 -2
- package/badge/src/badge.component.d.ts +41 -41
- package/badge/src/badge.module.d.ts +8 -8
- package/breadcrumbs/index.d.ts +5 -5
- package/breadcrumbs/public-api.d.ts +4 -4
- package/breadcrumbs/src/breadcrumbs-item.class.d.ts +9 -9
- package/breadcrumbs/src/breadcrumbs-item.component.d.ts +77 -79
- package/breadcrumbs/src/breadcrumbs.component.d.ts +13 -13
- package/breadcrumbs/src/breadcrumbs.module.d.ts +9 -9
- package/button/index.d.ts +5 -5
- package/button/public-api.d.ts +5 -5
- package/button/src/button-group.component.d.ts +86 -86
- package/button/src/button-item.class.d.ts +24 -24
- package/button/src/button-item.component.d.ts +82 -80
- package/button/src/button.component.d.ts +23 -23
- package/button/src/button.module.d.ts +11 -11
- package/calendar/index.d.ts +5 -5
- package/calendar/public-api.d.ts +4 -4
- package/calendar/src/calendar-range.component.d.ts +29 -29
- package/calendar/src/calendar.class.d.ts +100 -100
- package/calendar/src/calendar.component.d.ts +44 -44
- package/calendar/src/calendar.module.d.ts +10 -10
- package/card/index.d.ts +5 -5
- package/card/public-api.d.ts +2 -2
- package/card/src/card.component.d.ts +10 -10
- package/card/src/card.module.d.ts +8 -8
- package/checkbox/index.d.ts +5 -5
- package/checkbox/public-api.d.ts +2 -2
- package/checkbox/src/checkbox.component.d.ts +12 -12
- package/checkbox/src/checkbox.module.d.ts +10 -10
- package/chips/index.d.ts +5 -5
- package/chips/public-api.d.ts +2 -2
- package/chips/src/chips.component.d.ts +72 -72
- package/chips/src/chips.module.d.ts +8 -8
- package/collapse/index.d.ts +5 -5
- package/collapse/public-api.d.ts +3 -3
- package/collapse/src/collapse-group.component.d.ts +15 -15
- package/collapse/src/collapse.component.d.ts +17 -17
- package/collapse/src/collapse.module.d.ts +9 -9
- package/color-palette/index.d.ts +5 -5
- package/color-palette/public-api.d.ts +7 -7
- package/color-palette/src/color-palette-input.component.d.ts +22 -22
- package/color-palette/src/color-palette-picker.component.d.ts +32 -32
- package/color-palette/src/color-palette-preview.component.d.ts +11 -11
- package/color-palette/src/color-palette-swatches.component.d.ts +18 -18
- package/color-palette/src/color-palette.class.d.ts +22 -22
- package/color-palette/src/color-palette.component.d.ts +16 -16
- package/color-palette/src/color-palette.module.d.ts +19 -19
- package/color-picker/index.d.ts +5 -5
- package/color-picker/public-api.d.ts +2 -2
- package/color-picker/src/color-picker.component.d.ts +190 -193
- package/color-picker/src/color-picker.module.d.ts +18 -18
- package/common/index.d.ts +5 -5
- package/common/public-api.d.ts +16 -16
- package/common/src/classes/components.class.d.ts +62 -62
- package/common/src/classes/data.class.d.ts +4 -4
- package/common/src/classes/drawing.class.d.ts +9 -9
- package/common/src/classes/events.class.d.ts +95 -95
- package/common/src/classes/styles.class.d.ts +17 -17
- package/common/src/common.module.d.ts +11 -11
- package/common/src/components/base-component.class.d.ts +28 -28
- package/common/src/components/button-base-component.class.d.ts +36 -36
- package/common/src/components/color-component.class.d.ts +15 -15
- package/common/src/components/colorlook-component.class.d.ts +9 -9
- package/common/src/components/index.d.ts +7 -7
- package/common/src/components/interactive-component.class.d.ts +37 -37
- package/common/src/components/look-component.class.d.ts +15 -15
- package/common/src/components/value-component.class.d.ts +45 -45
- package/common/src/constant/positions.d.ts +75 -75
- package/common/src/directives/auto-focus.directive.d.ts +13 -13
- package/common/src/directives/debounce-time.directive.d.ts +17 -17
- package/common/src/directives/hotkey.directive.d.ts +22 -22
- package/common/src/directives/infinite-scroll.directive.d.ts +25 -25
- package/common/src/directives/responsive.directive.d.ts +10 -10
- package/common/src/services/custom-cdk-overlay.service.d.ts +19 -19
- package/common/src/services/hotkey.service.d.ts +17 -17
- package/common/src/services/overlay.service.d.ts +34 -34
- package/context-menu/index.d.ts +5 -5
- package/context-menu/public-api.d.ts +2 -2
- package/context-menu/src/context-menu.component.d.ts +34 -34
- package/context-menu/src/context-menu.module.d.ts +13 -13
- package/data-pager/index.d.ts +5 -5
- package/data-pager/public-api.d.ts +9 -9
- package/data-pager/src/data-pager-base.component.d.ts +49 -49
- package/data-pager/src/data-pager-info.component.d.ts +15 -15
- package/data-pager/src/data-pager-input-selector.component.d.ts +15 -15
- package/data-pager/src/data-pager-next-buttons.components.d.ts +16 -16
- package/data-pager/src/data-pager-numeric-selector.component.d.ts +18 -18
- package/data-pager/src/data-pager-pagesize-dropdown.component.d.ts +18 -18
- package/data-pager/src/data-pager-prev-buttons.component.d.ts +15 -15
- package/data-pager/src/data-pager.component.d.ts +35 -35
- package/data-pager/src/data-pager.module.d.ts +18 -18
- package/data-table/index.d.ts +5 -5
- package/data-table/public-api.d.ts +4 -4
- package/data-table/src/data-column-cell-template.directive.d.ts +8 -8
- package/data-table/src/data-column.directive.d.ts +16 -16
- package/data-table/src/data-table.component.d.ts +37 -37
- package/data-table/src/data-table.module.d.ts +14 -14
- package/date-picker/index.d.ts +5 -5
- package/date-picker/public-api.d.ts +2 -2
- package/date-picker/src/datepicker.component.d.ts +154 -154
- package/date-picker/src/datepicker.module.d.ts +15 -15
- package/decorators/index.d.ts +5 -5
- package/decorators/public-api.d.ts +14 -14
- package/decorators/src/close-button.component.d.ts +14 -14
- package/decorators/src/content.component.d.ts +8 -8
- package/decorators/src/decorators.module.d.ts +20 -20
- package/decorators/src/footer.component.d.ts +8 -8
- package/decorators/src/form-hint.component.d.ts +8 -8
- package/decorators/src/header.component.d.ts +8 -8
- package/decorators/src/icon.component.d.ts +10 -10
- package/decorators/src/overlay.component.d.ts +6 -6
- package/decorators/src/placeholder.component.d.ts +5 -5
- package/decorators/src/prefix.component.d.ts +8 -8
- package/decorators/src/sub-title.component.d.ts +9 -9
- package/decorators/src/suffix.component.d.ts +8 -8
- package/decorators/src/text.component.d.ts +9 -9
- package/decorators/src/title.component.d.ts +8 -8
- package/dialog/index.d.ts +5 -5
- package/dialog/public-api.d.ts +4 -4
- package/dialog/src/dialog.class.d.ts +13 -13
- package/dialog/src/dialog.component.d.ts +16 -16
- package/dialog/src/dialog.module.d.ts +14 -14
- package/dialog/src/dialog.service.d.ts +38 -38
- package/drawer/index.d.ts +5 -5
- package/drawer/public-api.d.ts +3 -3
- package/drawer/src/drawer-container.component.d.ts +10 -10
- package/drawer/src/drawer.component.d.ts +36 -36
- package/drawer/src/drawer.module.d.ts +9 -9
- package/dropdown/index.d.ts +5 -5
- package/dropdown/public-api.d.ts +2 -2
- package/dropdown/src/dropdown-panel.component.d.ts +30 -30
- package/dropdown/src/dropdown.module.d.ts +14 -14
- package/esm2022/acorex-components.mjs +4 -4
- package/esm2022/action-sheet/acorex-components-action-sheet.mjs +4 -4
- package/esm2022/action-sheet/public-api.mjs +3 -3
- package/esm2022/action-sheet/src/action-sheet.component.mjs +81 -80
- package/esm2022/action-sheet/src/action-sheet.interface.mjs +2 -2
- package/esm2022/action-sheet/src/action-sheet.module.mjs +27 -26
- package/esm2022/action-sheet/src/action-sheet.service.mjs +94 -93
- package/esm2022/alert/acorex-components-alert.mjs +4 -4
- package/esm2022/alert/public-api.mjs +2 -2
- package/esm2022/alert/src/alert.component.mjs +189 -188
- package/esm2022/alert/src/alert.module.mjs +23 -22
- package/esm2022/avatar/acorex-components-avatar.mjs +4 -4
- package/esm2022/avatar/public-api.mjs +3 -3
- package/esm2022/avatar/src/avatar-group.component.mjs +17 -16
- package/esm2022/avatar/src/avatar.component.mjs +44 -43
- package/esm2022/avatar/src/avatar.module.mjs +23 -22
- package/esm2022/badge/acorex-components-badge.mjs +4 -4
- package/esm2022/badge/public-api.mjs +2 -2
- package/esm2022/badge/src/badge.component.mjs +29 -28
- package/esm2022/badge/src/badge.module.mjs +22 -21
- package/esm2022/breadcrumbs/acorex-components-breadcrumbs.mjs +4 -4
- package/esm2022/breadcrumbs/public-api.mjs +4 -4
- package/esm2022/breadcrumbs/src/breadcrumbs-item.class.mjs +1 -1
- package/esm2022/breadcrumbs/src/breadcrumbs-item.component.mjs +51 -50
- package/esm2022/breadcrumbs/src/breadcrumbs.component.mjs +28 -27
- package/esm2022/breadcrumbs/src/breadcrumbs.module.mjs +21 -20
- package/esm2022/button/acorex-components-button.mjs +4 -4
- package/esm2022/button/public-api.mjs +5 -5
- package/esm2022/button/src/button-group.component.mjs +92 -91
- package/esm2022/button/src/button-item.class.mjs +1 -1
- package/esm2022/button/src/button-item.component.mjs +70 -69
- package/esm2022/button/src/button.component.mjs +79 -78
- package/esm2022/button/src/button.module.mjs +33 -32
- package/esm2022/calendar/acorex-components-calendar.mjs +4 -4
- package/esm2022/calendar/public-api.mjs +4 -4
- package/esm2022/calendar/src/calendar-range.component.mjs +175 -174
- package/esm2022/calendar/src/calendar.class.mjs +282 -280
- package/esm2022/calendar/src/calendar.component.mjs +373 -372
- package/esm2022/calendar/src/calendar.module.mjs +24 -23
- package/esm2022/card/acorex-components-card.mjs +4 -4
- package/esm2022/card/public-api.mjs +2 -2
- package/esm2022/card/src/card.component.mjs +19 -18
- package/esm2022/card/src/card.module.mjs +20 -19
- package/esm2022/checkbox/acorex-components-checkbox.mjs +4 -4
- package/esm2022/checkbox/public-api.mjs +2 -2
- package/esm2022/checkbox/src/checkbox.component.mjs +43 -42
- package/esm2022/checkbox/src/checkbox.module.mjs +22 -21
- package/esm2022/chips/acorex-components-chips.mjs +4 -4
- package/esm2022/chips/public-api.mjs +2 -2
- package/esm2022/chips/src/chips.component.mjs +34 -33
- package/esm2022/chips/src/chips.module.mjs +20 -19
- package/esm2022/collapse/acorex-components-collapse.mjs +4 -4
- package/esm2022/collapse/public-api.mjs +3 -3
- package/esm2022/collapse/src/collapse-group.component.mjs +53 -52
- package/esm2022/collapse/src/collapse.component.mjs +48 -47
- package/esm2022/collapse/src/collapse.module.mjs +21 -20
- package/esm2022/color-palette/acorex-components-color-palette.mjs +4 -4
- package/esm2022/color-palette/public-api.mjs +7 -7
- package/esm2022/color-palette/src/color-palette-input.component.mjs +131 -130
- package/esm2022/color-palette/src/color-palette-picker.component.mjs +160 -159
- package/esm2022/color-palette/src/color-palette-preview.component.mjs +57 -56
- package/esm2022/color-palette/src/color-palette-swatches.component.mjs +295 -294
- package/esm2022/color-palette/src/color-palette.class.mjs +19 -17
- package/esm2022/color-palette/src/color-palette.component.mjs +76 -75
- package/esm2022/color-palette/src/color-palette.module.mjs +61 -60
- package/esm2022/color-picker/acorex-components-color-picker.mjs +4 -4
- package/esm2022/color-picker/public-api.mjs +2 -2
- package/esm2022/color-picker/src/color-picker.component.mjs +120 -119
- package/esm2022/color-picker/src/color-picker.module.mjs +62 -61
- package/esm2022/common/acorex-components-common.mjs +4 -4
- package/esm2022/common/public-api.mjs +16 -16
- package/esm2022/common/src/classes/components.class.mjs +78 -72
- package/esm2022/common/src/classes/data.class.mjs +1 -1
- package/esm2022/common/src/classes/drawing.class.mjs +1 -1
- package/esm2022/common/src/classes/events.class.mjs +95 -95
- package/esm2022/common/src/classes/styles.class.mjs +12 -12
- package/esm2022/common/src/common.module.mjs +43 -42
- package/esm2022/common/src/components/base-component.class.mjs +56 -56
- package/esm2022/common/src/components/button-base-component.class.mjs +68 -68
- package/esm2022/common/src/components/color-component.class.mjs +26 -26
- package/esm2022/common/src/components/colorlook-component.class.mjs +10 -10
- package/esm2022/common/src/components/index.mjs +7 -7
- package/esm2022/common/src/components/interactive-component.class.mjs +62 -62
- package/esm2022/common/src/components/look-component.class.mjs +26 -26
- package/esm2022/common/src/components/value-component.class.mjs +207 -206
- package/esm2022/common/src/constant/positions.mjs +74 -74
- package/esm2022/common/src/directives/auto-focus.directive.mjs +58 -57
- package/esm2022/common/src/directives/debounce-time.directive.mjs +50 -49
- package/esm2022/common/src/directives/hotkey.directive.mjs +83 -82
- package/esm2022/common/src/directives/infinite-scroll.directive.mjs +70 -69
- package/esm2022/common/src/directives/responsive.directive.mjs +36 -35
- package/esm2022/common/src/services/custom-cdk-overlay.service.mjs +52 -50
- package/esm2022/common/src/services/hotkey.service.mjs +41 -40
- package/esm2022/common/src/services/overlay.service.mjs +116 -115
- package/esm2022/context-menu/acorex-components-context-menu.mjs +4 -4
- package/esm2022/context-menu/public-api.mjs +2 -2
- package/esm2022/context-menu/src/context-menu.component.mjs +271 -270
- package/esm2022/context-menu/src/context-menu.module.mjs +37 -36
- package/esm2022/data-pager/acorex-components-data-pager.mjs +4 -4
- package/esm2022/data-pager/public-api.mjs +9 -9
- package/esm2022/data-pager/src/data-pager-base.component.mjs +37 -35
- package/esm2022/data-pager/src/data-pager-info.component.mjs +62 -61
- package/esm2022/data-pager/src/data-pager-input-selector.component.mjs +46 -45
- package/esm2022/data-pager/src/data-pager-next-buttons.components.mjs +51 -50
- package/esm2022/data-pager/src/data-pager-numeric-selector.component.mjs +75 -74
- package/esm2022/data-pager/src/data-pager-pagesize-dropdown.component.mjs +67 -66
- package/esm2022/data-pager/src/data-pager-prev-buttons.component.mjs +48 -47
- package/esm2022/data-pager/src/data-pager.component.mjs +147 -146
- package/esm2022/data-pager/src/data-pager.module.mjs +52 -51
- package/esm2022/data-table/acorex-components-data-table.mjs +4 -4
- package/esm2022/data-table/public-api.mjs +4 -4
- package/esm2022/data-table/src/data-column-cell-template.directive.mjs +19 -18
- package/esm2022/data-table/src/data-column.directive.mjs +51 -50
- package/esm2022/data-table/src/data-table.component.mjs +140 -139
- package/esm2022/data-table/src/data-table.module.mjs +28 -27
- package/esm2022/date-picker/acorex-components-date-picker.mjs +4 -4
- package/esm2022/date-picker/public-api.mjs +2 -2
- package/esm2022/date-picker/src/datepicker.component.mjs +241 -240
- package/esm2022/date-picker/src/datepicker.module.mjs +45 -44
- package/esm2022/decorators/acorex-components-decorators.mjs +4 -4
- package/esm2022/decorators/public-api.mjs +14 -14
- package/esm2022/decorators/src/close-button.component.mjs +44 -43
- package/esm2022/decorators/src/content.component.mjs +22 -21
- package/esm2022/decorators/src/decorators.module.mjs +72 -71
- package/esm2022/decorators/src/footer.component.mjs +22 -21
- package/esm2022/decorators/src/form-hint.component.mjs +21 -20
- package/esm2022/decorators/src/header.component.mjs +22 -21
- package/esm2022/decorators/src/icon.component.mjs +31 -30
- package/esm2022/decorators/src/overlay.component.mjs +21 -20
- package/esm2022/decorators/src/placeholder.component.mjs +15 -14
- package/esm2022/decorators/src/prefix.component.mjs +22 -21
- package/esm2022/decorators/src/sub-title.component.mjs +26 -25
- package/esm2022/decorators/src/suffix.component.mjs +22 -21
- package/esm2022/decorators/src/text.component.mjs +23 -22
- package/esm2022/decorators/src/title.component.mjs +21 -20
- package/esm2022/dialog/acorex-components-dialog.mjs +4 -4
- package/esm2022/dialog/public-api.mjs +4 -4
- package/esm2022/dialog/src/dialog.class.mjs +1 -1
- package/esm2022/dialog/src/dialog.component.mjs +56 -55
- package/esm2022/dialog/src/dialog.module.mjs +28 -27
- package/esm2022/dialog/src/dialog.service.mjs +155 -154
- package/esm2022/drawer/acorex-components-drawer.mjs +4 -4
- package/esm2022/drawer/public-api.mjs +3 -3
- package/esm2022/drawer/src/drawer-container.component.mjs +31 -30
- package/esm2022/drawer/src/drawer.component.mjs +139 -138
- package/esm2022/drawer/src/drawer.module.mjs +23 -22
- package/esm2022/dropdown/acorex-components-dropdown.mjs +4 -4
- package/esm2022/dropdown/public-api.mjs +2 -2
- package/esm2022/dropdown/src/dropdown-panel.component.mjs +106 -105
- package/esm2022/dropdown/src/dropdown.module.mjs +26 -25
- package/esm2022/form/acorex-components-form.mjs +4 -4
- package/esm2022/form/public-api.mjs +6 -6
- package/esm2022/form/src/form-field.component.mjs +16 -15
- package/esm2022/form/src/form.component.mjs +164 -163
- package/esm2022/form/src/form.module.mjs +64 -63
- package/esm2022/form/src/validation-rule.widget.mjs +114 -113
- package/esm2022/form/src/validation-summary.component.mjs +82 -81
- package/esm2022/form/src/validation.class.mjs +1 -1
- package/esm2022/image/acorex-components-image.mjs +4 -4
- package/esm2022/image/public-api.mjs +2 -2
- package/esm2022/image/src/image.component.mjs +80 -79
- package/esm2022/image/src/image.module.mjs +20 -19
- package/esm2022/label/acorex-components-label.mjs +4 -4
- package/esm2022/label/public-api.mjs +2 -2
- package/esm2022/label/src/label.component.mjs +49 -48
- package/esm2022/label/src/label.module.mjs +22 -21
- package/esm2022/loading/acorex-components-loading.mjs +4 -4
- package/esm2022/loading/public-api.mjs +5 -5
- package/esm2022/loading/src/loading-spinner.component.mjs +18 -17
- package/esm2022/loading/src/loading.component.mjs +58 -57
- package/esm2022/loading/src/loading.directive.mjs +77 -76
- package/esm2022/loading/src/loading.module.mjs +36 -35
- package/esm2022/loading/src/loading.service.mjs +159 -158
- package/esm2022/menu/acorex-components-menu.mjs +4 -4
- package/esm2022/menu/public-api.mjs +2 -2
- package/esm2022/menu/src/menu.component.mjs +347 -346
- package/esm2022/menu/src/menu.module.mjs +34 -33
- package/esm2022/mixin/acorex-components-mixin.mjs +4 -4
- package/esm2022/mixin/public-api.mjs +17 -17
- package/esm2022/mixin/src/base-components.class.mjs +111 -110
- package/esm2022/mixin/src/base-menu-mixin.class.mjs +133 -133
- package/esm2022/mixin/src/button-mixin.class.mjs +70 -70
- package/esm2022/mixin/src/clickable-mixin.class.mjs +23 -23
- package/esm2022/mixin/src/color-look-mixing.class.mjs +47 -47
- package/esm2022/mixin/src/constratctor.mjs +1 -1
- package/esm2022/mixin/src/datalist-component.class.mjs +150 -150
- package/esm2022/mixin/src/datalist.class.mjs +2 -2
- package/esm2022/mixin/src/dropdown-mixin.class.mjs +98 -98
- package/esm2022/mixin/src/interactive-mixin.class.mjs +80 -80
- package/esm2022/mixin/src/loading-mixin.class.mjs +25 -25
- package/esm2022/mixin/src/mixin.class.mjs +25 -25
- package/esm2022/mixin/src/page-component.class.mjs +10 -10
- package/esm2022/mixin/src/selection-component.class.mjs +182 -182
- package/esm2022/mixin/src/sizable-mixin.class.mjs +21 -21
- package/esm2022/mixin/src/textbox-mixin.class.mjs +65 -65
- package/esm2022/mixin/src/value-mixin.class.mjs +219 -219
- package/esm2022/notification/acorex-components-notification.mjs +4 -4
- package/esm2022/notification/public-api.mjs +4 -4
- package/esm2022/notification/src/notification.class.mjs +1 -1
- package/esm2022/notification/src/notification.component.mjs +93 -92
- package/esm2022/notification/src/notification.module.mjs +24 -23
- package/esm2022/notification/src/notification.service.mjs +110 -109
- package/esm2022/number-box/acorex-components-number-box.mjs +4 -4
- package/esm2022/number-box/public-api.mjs +2 -2
- package/esm2022/number-box/src/number-box.component.mjs +269 -268
- package/esm2022/number-box/src/number-box.module.mjs +36 -35
- package/esm2022/page/acorex-components-page.mjs +4 -4
- package/esm2022/page/public-api.mjs +3 -3
- package/esm2022/page/src/base-page.class.mjs +64 -63
- package/esm2022/page/src/page.component.mjs +47 -46
- package/esm2022/page/src/page.module.mjs +19 -18
- package/esm2022/password-box/acorex-components-password-box.mjs +4 -4
- package/esm2022/password-box/public-api.mjs +2 -2
- package/esm2022/password-box/src/password-box.component.mjs +64 -63
- package/esm2022/password-box/src/password-box.module.mjs +33 -32
- package/esm2022/picker/acorex-components-picker.mjs +4 -4
- package/esm2022/picker/public-api.mjs +3 -3
- package/esm2022/picker/src/picker-column.component.mjs +21 -20
- package/esm2022/picker/src/picker.component.mjs +17 -16
- package/esm2022/picker/src/picker.module.mjs +38 -37
- package/esm2022/popover/acorex-components-popover.mjs +4 -4
- package/esm2022/popover/public-api.mjs +2 -2
- package/esm2022/popover/src/popover.component.mjs +263 -262
- package/esm2022/popover/src/popover.module.mjs +20 -19
- package/esm2022/popup/acorex-components-popup.mjs +4 -4
- package/esm2022/popup/public-api.mjs +3 -3
- package/esm2022/popup/src/popup.component.mjs +146 -145
- package/esm2022/popup/src/popup.module.mjs +28 -27
- package/esm2022/popup/src/popup.service.mjs +117 -116
- package/esm2022/progress-bar/acorex-components-progress-bar.mjs +4 -4
- package/esm2022/progress-bar/public-api.mjs +2 -2
- package/esm2022/progress-bar/src/progress-bar.component.mjs +34 -33
- package/esm2022/progress-bar/src/progress-bar.module.mjs +20 -19
- package/esm2022/public-api.mjs +4 -4
- package/esm2022/radio/acorex-components-radio.mjs +4 -4
- package/esm2022/radio/public-api.mjs +2 -2
- package/esm2022/radio/src/radio.component.mjs +40 -39
- package/esm2022/radio/src/radio.module.mjs +23 -22
- package/esm2022/range-slider/acorex-components-range-slider.mjs +4 -4
- package/esm2022/range-slider/public-api.mjs +2 -2
- package/esm2022/range-slider/src/range-slider.component.mjs +118 -117
- package/esm2022/range-slider/src/range-slider.module.mjs +23 -22
- package/esm2022/rating/acorex-components-rating.mjs +4 -4
- package/esm2022/rating/public-api.mjs +2 -2
- package/esm2022/rating/src/rating.component.mjs +42 -41
- package/esm2022/rating/src/rating.component.module.mjs +20 -19
- package/esm2022/result/acorex-components-result.mjs +4 -4
- package/esm2022/result/public-api.mjs +2 -2
- package/esm2022/result/src/result.component.mjs +27 -26
- package/esm2022/result/src/result.module.mjs +20 -19
- package/esm2022/search-box/acorex-components-search-box.mjs +4 -4
- package/esm2022/search-box/public-api.mjs +2 -2
- package/esm2022/search-box/src/search-box.component.mjs +55 -54
- package/esm2022/search-box/src/search-box.module.mjs +26 -25
- package/esm2022/select-box/acorex-components-select-box.mjs +4 -4
- package/esm2022/select-box/public-api.mjs +2 -2
- package/esm2022/select-box/src/selectbox.component.mjs +392 -391
- package/esm2022/select-box/src/selectbox.module.mjs +65 -64
- package/esm2022/selection-list/acorex-components-selection-list.mjs +4 -4
- package/esm2022/selection-list/public-api.mjs +2 -2
- package/esm2022/selection-list/src/selection-list.component.mjs +60 -60
- package/esm2022/selection-list/src/selection-list.module.mjs +25 -24
- package/esm2022/switch/acorex-components-switch.mjs +4 -4
- package/esm2022/switch/public-api.mjs +3 -3
- package/esm2022/switch/src/switch-content.component.mjs +17 -16
- package/esm2022/switch/src/switch.component.mjs +55 -54
- package/esm2022/switch/src/switch.module.mjs +23 -22
- package/esm2022/tabs/acorex-components-tabs.mjs +4 -4
- package/esm2022/tabs/public-api.mjs +5 -5
- package/esm2022/tabs/src/tab-content.directive.mjs +32 -31
- package/esm2022/tabs/src/tab-item.component.mjs +91 -90
- package/esm2022/tabs/src/tabs.class.mjs +5 -5
- package/esm2022/tabs/src/tabs.component.mjs +103 -102
- package/esm2022/tabs/src/tabs.module.mjs +26 -25
- package/esm2022/tag/acorex-components-tag.mjs +4 -4
- package/esm2022/tag/public-api.mjs +2 -2
- package/esm2022/tag/src/tag.component.mjs +30 -29
- package/esm2022/tag/src/tag.module.mjs +20 -19
- package/esm2022/textarea/acorex-components-textarea.mjs +4 -4
- package/esm2022/textarea/public-api.mjs +2 -2
- package/esm2022/textarea/src/textarea.component.mjs +30 -29
- package/esm2022/textarea/src/textarea.module.mjs +20 -19
- package/esm2022/textbox/acorex-components-textbox.mjs +4 -4
- package/esm2022/textbox/public-api.mjs +3 -3
- package/esm2022/textbox/src/mask-options.directive.mjs +20 -19
- package/esm2022/textbox/src/textbox.component.mjs +96 -95
- package/esm2022/textbox/src/textbox.module.mjs +39 -38
- package/esm2022/time-box/acorex-components-time-box.mjs +4 -4
- package/esm2022/time-box/public-api.mjs +2 -2
- package/esm2022/time-box/src/time-box.component.mjs +306 -305
- package/esm2022/time-box/src/time-box.module.mjs +33 -32
- package/esm2022/toast/acorex-components-toast.mjs +4 -4
- package/esm2022/toast/public-api.mjs +4 -4
- package/esm2022/toast/src/toast.class.mjs +1 -1
- package/esm2022/toast/src/toast.component.mjs +68 -67
- package/esm2022/toast/src/toast.module.mjs +23 -22
- package/esm2022/toast/src/toast.service.mjs +137 -136
- package/esm2022/tooltip/acorex-components-tooltip.mjs +4 -4
- package/esm2022/tooltip/public-api.mjs +3 -3
- package/esm2022/tooltip/src/tooltip.component.mjs +22 -21
- package/esm2022/tooltip/src/tooltip.directive.mjs +164 -163
- package/esm2022/tooltip/src/tooltip.module.mjs +23 -22
- package/esm2022/tree-view/acorex-components-tree-view.mjs +4 -4
- package/esm2022/tree-view/public-api.mjs +2 -2
- package/esm2022/tree-view/src/tree-view.component.mjs +108 -107
- package/esm2022/tree-view/src/tree-view.module.mjs +21 -20
- package/esm2022/uploader/acorex-components-uploader.mjs +4 -4
- package/esm2022/uploader/public-api.mjs +2 -2
- package/esm2022/uploader/src/uploader.component.mjs +102 -101
- package/esm2022/uploader/src/uploader.module.mjs +21 -20
- package/fesm2022/acorex-components-action-sheet.mjs +170 -170
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +196 -196
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +66 -66
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +39 -39
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs +78 -78
- package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +245 -245
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +815 -815
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-card.mjs +28 -28
- package/fesm2022/acorex-components-card.mjs.map +1 -1
- package/fesm2022/acorex-components-checkbox.mjs +51 -51
- package/fesm2022/acorex-components-checkbox.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +42 -42
- package/fesm2022/acorex-components-chips.mjs.map +1 -1
- package/fesm2022/acorex-components-collapse.mjs +102 -102
- package/fesm2022/acorex-components-collapse.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +717 -717
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-color-picker.mjs +153 -153
- package/fesm2022/acorex-components-color-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-common.mjs +1150 -1150
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-context-menu.mjs +287 -287
- package/fesm2022/acorex-components-context-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +487 -487
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +205 -205
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-date-picker.mjs +256 -256
- package/fesm2022/acorex-components-date-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +287 -287
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +207 -207
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +174 -174
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +111 -111
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +392 -392
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +88 -88
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +59 -59
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +308 -308
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +359 -359
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-mixin.mjs +1214 -1214
- package/fesm2022/acorex-components-mixin.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +200 -200
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +284 -284
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-page.mjs +112 -112
- package/fesm2022/acorex-components-page.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +81 -81
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +54 -54
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +266 -266
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +258 -258
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +43 -43
- package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +50 -50
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +127 -127
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rating.mjs +51 -51
- package/fesm2022/acorex-components-rating.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +35 -35
- package/fesm2022/acorex-components-result.mjs.map +1 -1
- package/fesm2022/acorex-components-search-box.mjs +59 -59
- package/fesm2022/acorex-components-search-box.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +422 -422
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +68 -69
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +74 -74
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +227 -227
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +38 -38
- package/fesm2022/acorex-components-tag.mjs.map +1 -1
- package/fesm2022/acorex-components-textarea.mjs +37 -37
- package/fesm2022/acorex-components-textarea.mjs.map +1 -1
- package/fesm2022/acorex-components-textbox.mjs +130 -130
- package/fesm2022/acorex-components-textbox.mjs.map +1 -1
- package/fesm2022/acorex-components-time-box.mjs +319 -319
- package/fesm2022/acorex-components-time-box.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +204 -204
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +187 -187
- package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-components-tree-view.mjs +116 -116
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +109 -109
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components.mjs +5 -5
- package/form/index.d.ts +5 -5
- package/form/public-api.d.ts +6 -6
- package/form/src/form-field.component.d.ts +8 -8
- package/form/src/form.component.d.ts +51 -51
- package/form/src/form.module.d.ts +15 -15
- package/form/src/validation-rule.widget.d.ts +18 -18
- package/form/src/validation-summary.component.d.ts +23 -23
- package/form/src/validation.class.d.ts +18 -18
- package/image/index.d.ts +5 -5
- package/image/public-api.d.ts +2 -2
- package/image/src/image.component.d.ts +27 -27
- package/image/src/image.module.d.ts +8 -8
- package/index.d.ts +5 -5
- package/label/index.d.ts +5 -5
- package/label/public-api.d.ts +2 -2
- package/label/src/label.component.d.ts +17 -17
- package/label/src/label.module.d.ts +8 -8
- package/loading/index.d.ts +5 -5
- package/loading/public-api.d.ts +5 -5
- package/loading/src/loading-spinner.component.d.ts +6 -6
- package/loading/src/loading.component.d.ts +21 -21
- package/loading/src/loading.directive.d.ts +22 -22
- package/loading/src/loading.module.d.ts +13 -13
- package/loading/src/loading.service.d.ts +48 -48
- package/menu/index.d.ts +5 -5
- package/menu/public-api.d.ts +2 -2
- package/menu/src/menu.component.d.ts +39 -39
- package/menu/src/menu.module.d.ts +12 -12
- package/mixin/index.d.ts +5 -5
- package/mixin/public-api.d.ts +17 -17
- package/mixin/src/base-components.class.d.ts +84 -84
- package/mixin/src/base-menu-mixin.class.d.ts +53 -53
- package/mixin/src/button-mixin.class.d.ts +53 -53
- package/mixin/src/clickable-mixin.class.d.ts +36 -36
- package/mixin/src/color-look-mixing.class.d.ts +44 -44
- package/mixin/src/constratctor.d.ts +4 -4
- package/mixin/src/datalist-component.class.d.ts +59 -59
- package/mixin/src/datalist.class.d.ts +11 -11
- package/mixin/src/dropdown-mixin.class.d.ts +47 -47
- package/mixin/src/interactive-mixin.class.d.ts +63 -63
- package/mixin/src/loading-mixin.class.d.ts +40 -40
- package/mixin/src/mixin.class.d.ts +679 -679
- package/mixin/src/page-component.class.d.ts +28 -28
- package/mixin/src/selection-component.class.d.ts +61 -61
- package/mixin/src/sizable-mixin.class.d.ts +34 -34
- package/mixin/src/textbox-mixin.class.d.ts +72 -72
- package/mixin/src/value-mixin.class.d.ts +63 -63
- package/notification/index.d.ts +5 -5
- package/notification/public-api.d.ts +4 -4
- package/notification/src/notification.class.d.ts +18 -18
- package/notification/src/notification.component.d.ts +30 -30
- package/notification/src/notification.module.d.ts +10 -10
- package/notification/src/notification.service.d.ts +16 -16
- package/number-box/index.d.ts +5 -5
- package/number-box/public-api.d.ts +2 -2
- package/number-box/src/number-box.component.d.ts +77 -77
- package/number-box/src/number-box.module.d.ts +12 -12
- package/package.json +8 -8
- package/page/index.d.ts +5 -5
- package/page/public-api.d.ts +3 -3
- package/page/src/base-page.class.d.ts +25 -25
- package/page/src/page.component.d.ts +14 -14
- package/page/src/page.module.d.ts +6 -6
- package/password-box/index.d.ts +5 -5
- package/password-box/public-api.d.ts +2 -2
- package/password-box/src/password-box.component.d.ts +25 -25
- package/password-box/src/password-box.module.d.ts +11 -11
- package/picker/index.d.ts +5 -5
- package/picker/public-api.d.ts +3 -3
- package/picker/src/picker-column.component.d.ts +11 -11
- package/picker/src/picker.component.d.ts +10 -10
- package/picker/src/picker.module.d.ts +14 -14
- package/popover/index.d.ts +5 -5
- package/popover/public-api.d.ts +2 -2
- package/popover/src/popover.component.d.ts +51 -51
- package/popover/src/popover.module.d.ts +8 -8
- package/popup/index.d.ts +5 -5
- package/popup/public-api.d.ts +3 -3
- package/popup/src/popup.component.d.ts +45 -45
- package/popup/src/popup.module.d.ts +14 -14
- package/popup/src/popup.service.d.ts +42 -42
- package/progress-bar/index.d.ts +5 -5
- package/progress-bar/public-api.d.ts +2 -2
- package/progress-bar/src/progress-bar.component.d.ts +18 -18
- package/progress-bar/src/progress-bar.module.d.ts +8 -8
- package/public-api.d.ts +1 -1
- package/radio/index.d.ts +5 -5
- package/radio/public-api.d.ts +2 -2
- package/radio/src/radio.component.d.ts +18 -18
- package/radio/src/radio.module.d.ts +9 -9
- package/range-slider/index.d.ts +5 -5
- package/range-slider/public-api.d.ts +2 -2
- package/range-slider/src/range-slider.component.d.ts +41 -41
- package/range-slider/src/range-slider.module.d.ts +9 -9
- package/rating/index.d.ts +5 -5
- package/rating/public-api.d.ts +2 -2
- package/rating/src/rating.component.d.ts +21 -21
- package/rating/src/rating.component.module.d.ts +8 -8
- package/result/index.d.ts +5 -5
- package/result/public-api.d.ts +2 -2
- package/result/src/result.component.d.ts +12 -12
- package/result/src/result.module.d.ts +8 -8
- package/search-box/index.d.ts +5 -5
- package/search-box/public-api.d.ts +2 -2
- package/search-box/src/search-box.component.d.ts +18 -18
- package/search-box/src/search-box.module.d.ts +12 -12
- package/select-box/index.d.ts +5 -5
- package/select-box/public-api.d.ts +2 -2
- package/select-box/src/selectbox.component.d.ts +66 -66
- package/select-box/src/selectbox.module.d.ts +19 -19
- package/selection-list/index.d.ts +5 -5
- package/selection-list/public-api.d.ts +2 -2
- package/selection-list/src/selection-list.component.d.ts +23 -23
- package/selection-list/src/selection-list.module.d.ts +13 -13
- package/switch/index.d.ts +5 -5
- package/switch/public-api.d.ts +3 -3
- package/switch/src/switch-content.component.d.ts +8 -8
- package/switch/src/switch.component.d.ts +13 -13
- package/switch/src/switch.module.d.ts +11 -11
- package/tabs/index.d.ts +5 -5
- package/tabs/public-api.d.ts +5 -5
- package/tabs/src/tab-content.directive.d.ts +11 -11
- package/tabs/src/tab-item.component.d.ts +48 -48
- package/tabs/src/tabs.class.d.ts +7 -7
- package/tabs/src/tabs.component.d.ts +29 -29
- package/tabs/src/tabs.module.d.ts +12 -12
- package/tag/index.d.ts +5 -5
- package/tag/public-api.d.ts +2 -2
- package/tag/src/tag.component.d.ts +11 -11
- package/tag/src/tag.module.d.ts +8 -8
- package/textarea/index.d.ts +5 -5
- package/textarea/public-api.d.ts +2 -2
- package/textarea/src/textarea.component.d.ts +14 -14
- package/textarea/src/textarea.module.d.ts +9 -9
- package/textbox/index.d.ts +5 -5
- package/textbox/public-api.d.ts +3 -3
- package/textbox/src/mask-options.directive.d.ts +13 -13
- package/textbox/src/textbox.component.d.ts +27 -27
- package/textbox/src/textbox.module.d.ts +13 -13
- package/time-box/index.d.ts +5 -5
- package/time-box/public-api.d.ts +2 -2
- package/time-box/src/time-box.component.d.ts +50 -50
- package/time-box/src/time-box.module.d.ts +11 -11
- package/toast/index.d.ts +5 -5
- package/toast/public-api.d.ts +4 -4
- package/toast/src/toast.class.d.ts +15 -15
- package/toast/src/toast.component.d.ts +25 -25
- package/toast/src/toast.module.d.ts +9 -9
- package/toast/src/toast.service.d.ts +21 -21
- package/tooltip/index.d.ts +5 -5
- package/tooltip/public-api.d.ts +3 -3
- package/tooltip/src/tooltip.component.d.ts +11 -11
- package/tooltip/src/tooltip.directive.d.ts +22 -22
- package/tooltip/src/tooltip.module.d.ts +10 -10
- package/tree-view/index.d.ts +5 -5
- package/tree-view/public-api.d.ts +2 -2
- package/tree-view/src/tree-view.component.d.ts +33 -33
- package/tree-view/src/tree-view.module.d.ts +9 -9
- package/uploader/index.d.ts +5 -5
- package/uploader/public-api.d.ts +2 -2
- package/uploader/src/uploader.component.d.ts +28 -28
- package/uploader/src/uploader.module.d.ts +9 -9
@@ -1,391 +1,392 @@
|
|
1
|
-
import { AXTranslator } from '@acorex/core/translation';
|
2
|
-
import { ChangeDetectionStrategy, Component, ContentChild, HostListener, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
|
3
|
-
import { findLast, findLastIndex, first, last, nth } from 'lodash-es';
|
4
|
-
import { AXClosbaleComponent, AXSearchableComponent, } from '@acorex/components/common';
|
5
|
-
import { AXPopoverComponent } from '@acorex/components/popover';
|
6
|
-
import { AXSearchBoxComponent } from '@acorex/components/search-box';
|
7
|
-
import { AXBaseSelectionDropdownMixin } from '@acorex/components/mixin';
|
8
|
-
import * as i0 from "@angular/core";
|
9
|
-
import * as i1 from "@acorex/core/platform";
|
10
|
-
import * as i2 from "@angular/common";
|
11
|
-
import * as i3 from "@acorex/components/decorators";
|
12
|
-
import * as i4 from "@acorex/components/popover";
|
13
|
-
import * as i5 from "@acorex/components/button";
|
14
|
-
import * as i6 from "@acorex/components/loading";
|
15
|
-
import * as i7 from "@angular/cdk/a11y";
|
16
|
-
import * as i8 from "@acorex/core/translation";
|
17
|
-
/**
|
18
|
-
* The Button is a component which detects user interaction and triggers a corresponding event
|
19
|
-
*
|
20
|
-
* @category Components
|
21
|
-
*/
|
22
|
-
|
23
|
-
_elementRef;
|
24
|
-
_cdr;
|
25
|
-
_zone;
|
26
|
-
_platform;
|
27
|
-
popover;
|
28
|
-
_searchBox;
|
29
|
-
_target;
|
30
|
-
_popoverTitle;
|
31
|
-
_popoverWidth;
|
32
|
-
/**
|
33
|
-
* Defines the clearButton.
|
34
|
-
*/
|
35
|
-
clearButton = false;
|
36
|
-
/**
|
37
|
-
* Defines the checkbox.
|
38
|
-
*/
|
39
|
-
checkbox = false;
|
40
|
-
listContainer;
|
41
|
-
_contentEmptyTemplate;
|
42
|
-
get emptyTemplate() {
|
43
|
-
return this._contentEmptyTemplate;
|
44
|
-
}
|
45
|
-
_isActionSheet = false;
|
46
|
-
_forceFocus = false;
|
47
|
-
/**
|
48
|
-
* @ignore
|
49
|
-
*/
|
50
|
-
constructor(_elementRef, _cdr, _zone, _platform) {
|
51
|
-
super(_elementRef, _cdr);
|
52
|
-
this._elementRef = _elementRef;
|
53
|
-
this._cdr = _cdr;
|
54
|
-
this._zone = _zone;
|
55
|
-
this._platform = _platform;
|
56
|
-
this._isActionSheet = this._platform.is('SM');
|
57
|
-
this._platform.resize.subscribe(() => {
|
58
|
-
this._isActionSheet = this._platform.is('SM');
|
59
|
-
this.popover.dispose();
|
60
|
-
this._detectPopupSize();
|
61
|
-
});
|
62
|
-
}
|
63
|
-
_handleArrowClickEvent(e) {
|
64
|
-
e.stopPropagation();
|
65
|
-
// e.nativeEvent.stopPropagation();
|
66
|
-
this.toggle();
|
67
|
-
}
|
68
|
-
_handleInputClickEvent(e) {
|
69
|
-
e.stopPropagation();
|
70
|
-
this.toggle();
|
71
|
-
}
|
72
|
-
onInit() {
|
73
|
-
super.onInit();
|
74
|
-
this._target = this._elementRef.nativeElement;
|
75
|
-
this._updatePopupTitle();
|
76
|
-
}
|
77
|
-
onViewInit() {
|
78
|
-
super.onViewInit();
|
79
|
-
this._detectPopupSize();
|
80
|
-
}
|
81
|
-
refresh() {
|
82
|
-
this.value = null;
|
83
|
-
super.refresh();
|
84
|
-
}
|
85
|
-
_updatePopupTitle() {
|
86
|
-
const count = this.selectedItems?.length || 0;
|
87
|
-
//this._popoverTitle = count > 1 ? `(${count}) items selected` : (this.placeholder || AXTranslator.get('selectbox.popover.title'));
|
88
|
-
this._popoverTitle =
|
89
|
-
this.placeholder || AXTranslator.get('selectbox.popover.title');
|
90
|
-
}
|
91
|
-
_detectPopupSize() {
|
92
|
-
this._popoverWidth = this._isActionSheet ? 0 : this._target.offsetWidth;
|
93
|
-
}
|
94
|
-
_handleOnItemClick(e, item) {
|
95
|
-
if (this.isItemDisabled(item)) {
|
96
|
-
return;
|
97
|
-
}
|
98
|
-
if (!this.multiple)
|
99
|
-
this.close();
|
100
|
-
this.toggleSelect(item);
|
101
|
-
this._cdr.detectChanges();
|
102
|
-
}
|
103
|
-
_handleListScroll(e) {
|
104
|
-
const list = e.target;
|
105
|
-
if (list.scrollTop < list.scrollHeight - list.clientHeight) {
|
106
|
-
return;
|
107
|
-
}
|
108
|
-
this._fetchData();
|
109
|
-
}
|
110
|
-
_checkForLoadData() {
|
111
|
-
const list = this.listContainer.nativeElement;
|
112
|
-
if (this.loadedCount < this.totalCount &&
|
113
|
-
list.scrollHeight < list.parentElement.clientHeight * 1.5) {
|
114
|
-
this._fetchData();
|
115
|
-
}
|
116
|
-
}
|
117
|
-
_onDataLoaded() {
|
118
|
-
if (this.popover.isOpen) {
|
119
|
-
setTimeout(() => {
|
120
|
-
this._checkForLoadData();
|
121
|
-
this.popover.updatePosition();
|
122
|
-
if (this._forceFocus) {
|
123
|
-
this._focusSelectedItem();
|
124
|
-
this._forceFocus = false;
|
125
|
-
}
|
126
|
-
this._focusSearchBox();
|
127
|
-
}, 100);
|
128
|
-
}
|
129
|
-
}
|
130
|
-
_onValueChanged(oldValue, newValue) {
|
131
|
-
super._onValueChanged(oldValue, newValue);
|
132
|
-
}
|
133
|
-
_handleOnRemoveItemClick(e, item) {
|
134
|
-
this.unselectItems(item);
|
135
|
-
e.stopPropagation();
|
136
|
-
}
|
137
|
-
_handleBadgeRemove(e, item) {
|
138
|
-
this.unselectItems(item);
|
139
|
-
e.stopPropagation();
|
140
|
-
this.close();
|
141
|
-
}
|
142
|
-
_handleKeydown(e) {
|
143
|
-
const isLetter = new RegExp(/[a-zA-Z0-9\-]/).test(String.fromCharCode(e.keyCode));
|
144
|
-
if (e.code === 'Backspace' &&
|
145
|
-
e.type === 'keydown' &&
|
146
|
-
((this.allowNull === true && this.selectedItems.length > 0) ||
|
147
|
-
(this.allowNull !== true && this.selectedItems.length > 1))) {
|
148
|
-
this.isUserInput = true;
|
149
|
-
this.unselectItems(this.selectedItems.pop());
|
150
|
-
e.preventDefault();
|
151
|
-
return;
|
152
|
-
}
|
153
|
-
else if ((e.code === 'ArrowDown' || e.code === 'ArrowUp' || e.code === 'Space') &&
|
154
|
-
!this.popover.isOpen &&
|
155
|
-
e.type === 'keydown') {
|
156
|
-
if (this.multiple) {
|
157
|
-
this.open();
|
158
|
-
}
|
159
|
-
else {
|
160
|
-
this.isUserInput = true;
|
161
|
-
if (e.ctrlKey || e.code === 'Space') {
|
162
|
-
this.open();
|
163
|
-
}
|
164
|
-
else {
|
165
|
-
this._selectedItemByNav(e.key === 'ArrowDown' ? 1 : -1);
|
166
|
-
}
|
167
|
-
}
|
168
|
-
e.preventDefault();
|
169
|
-
return;
|
170
|
-
}
|
171
|
-
else if (isLetter) {
|
172
|
-
this.text = e.key;
|
173
|
-
this.open();
|
174
|
-
e.preventDefault();
|
175
|
-
return;
|
176
|
-
}
|
177
|
-
}
|
178
|
-
_handlePopoverKeydown(e) {
|
179
|
-
if (e.target.tagName == 'INPUT' &&
|
180
|
-
['Space', 'Backspace'].includes(e.code))
|
181
|
-
return;
|
182
|
-
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
|
183
|
-
this.displayItems.length > 0) {
|
184
|
-
this.isUserInput = true;
|
185
|
-
this._focusItemByNav(e.key === 'ArrowDown' ? 1 : -1);
|
186
|
-
e.preventDefault();
|
187
|
-
}
|
188
|
-
else if (e.code === 'Backspace' &&
|
189
|
-
((this.allowNull === true && this.selectedItems.length > 0) ||
|
190
|
-
(this.allowNull !== true && this.selectedItems.length > 1))) {
|
191
|
-
this.isUserInput = true;
|
192
|
-
this.unselectItems(this.selectedItems.pop());
|
193
|
-
e.preventDefault();
|
194
|
-
}
|
195
|
-
else if (e.code === 'Space' || e.code === 'Enter') {
|
196
|
-
e.preventDefault();
|
197
|
-
const focusedItemId = this.listContainer.nativeElement.querySelector('.ax-state-focus')?.dataset?.id;
|
198
|
-
const focusedItem = findLast(this.flatItems, [
|
199
|
-
this.valueField,
|
200
|
-
focusedItemId,
|
201
|
-
]);
|
202
|
-
if (focusedItem) {
|
203
|
-
if (this.isItemDisabled(focusedItem)) {
|
204
|
-
return;
|
205
|
-
}
|
206
|
-
if (this.multiple) {
|
207
|
-
this.isUserInput = true;
|
208
|
-
this.toggleSelect(focusedItem);
|
209
|
-
}
|
210
|
-
else {
|
211
|
-
this.isUserInput = true;
|
212
|
-
this.selectItems(focusedItem);
|
213
|
-
this.close();
|
214
|
-
}
|
215
|
-
}
|
216
|
-
}
|
217
|
-
else if (e.code === 'Tab') {
|
218
|
-
this.close();
|
219
|
-
e.preventDefault();
|
220
|
-
e.stopPropagation();
|
221
|
-
}
|
222
|
-
else if (e.key === 'Escape') {
|
223
|
-
this.close();
|
224
|
-
e.preventDefault();
|
225
|
-
e.stopPropagation();
|
226
|
-
}
|
227
|
-
}
|
228
|
-
async _handlePopupOnOpened(e) {
|
229
|
-
this._detectPopupSize();
|
230
|
-
this.popover.focus();
|
231
|
-
if (this.displayItems.length == 0) {
|
232
|
-
this._forceFocus = true;
|
233
|
-
this._fetchData();
|
234
|
-
}
|
235
|
-
else {
|
236
|
-
this._focusSelectedItem();
|
237
|
-
}
|
238
|
-
this._focusSearchBox();
|
239
|
-
}
|
240
|
-
_handlePopupOnClosed(e) {
|
241
|
-
this.focus();
|
242
|
-
}
|
243
|
-
_focusSearchBox() {
|
244
|
-
if (this._searchBox &&
|
245
|
-
(!this._isActionSheet || this._searchBox.searchExp)) {
|
246
|
-
this._searchBox.focus();
|
247
|
-
}
|
248
|
-
}
|
249
|
-
_focusItemByNav(sign) {
|
250
|
-
const list = this.listContainer.nativeElement;
|
251
|
-
const fn = s => list.querySelector(s);
|
252
|
-
const itemDiv = fn(`.ax-list-item.ax-state-focus`) ||
|
253
|
-
fn(`.ax-list-item.ax-state-selected`) ||
|
254
|
-
fn(`.ax-list-item`);
|
255
|
-
let next = (sign == 1 ? itemDiv.nextElementSibling : itemDiv.previousElementSibling);
|
256
|
-
if (next) {
|
257
|
-
this._focusItemElement(next);
|
258
|
-
}
|
259
|
-
else {
|
260
|
-
const parent = itemDiv.closest('.ax-list-item-group');
|
261
|
-
if (parent) {
|
262
|
-
const lis = (sign == 1 ? parent.nextElementSibling : parent.previousElementSibling)?.querySelectorAll('li');
|
263
|
-
const a = sign == 1 ? first(lis) : last(lis);
|
264
|
-
if (a) {
|
265
|
-
this._focusItemElement(a);
|
266
|
-
}
|
267
|
-
}
|
268
|
-
}
|
269
|
-
}
|
270
|
-
_focusSelectedItem() {
|
271
|
-
this._zone.runOutsideAngular(() => {
|
272
|
-
const list = this.listContainer.nativeElement;
|
273
|
-
const fn = s => list.querySelector(s);
|
274
|
-
const itemDiv = fn(`.ax-list-item.ax-state-selected`) || fn(`.ax-list-item`);
|
275
|
-
if (itemDiv) {
|
276
|
-
this._focusItemElement(itemDiv);
|
277
|
-
}
|
278
|
-
});
|
279
|
-
}
|
280
|
-
_focusItemElement(el) {
|
281
|
-
this._zone.runOutsideAngular(() => {
|
282
|
-
const list = this.listContainer.nativeElement;
|
283
|
-
list.querySelectorAll('.ax-list-item').forEach(c => {
|
284
|
-
if (c == el) {
|
285
|
-
c.classList.add('ax-state-focus');
|
286
|
-
el.scrollIntoView({ behavior: 'auto' });
|
287
|
-
}
|
288
|
-
else {
|
289
|
-
c.classList.remove('ax-state-focus');
|
290
|
-
}
|
291
|
-
});
|
292
|
-
if (!this._isActionSheet && this._searchBox)
|
293
|
-
this._searchBox.focus();
|
294
|
-
else
|
295
|
-
el.focus();
|
296
|
-
});
|
297
|
-
}
|
298
|
-
_selectedItemByNav(sign) {
|
299
|
-
const _last = last(this.selectedItems);
|
300
|
-
let i = 0;
|
301
|
-
if (_last) {
|
302
|
-
i = findLastIndex(this.flatItems, [
|
303
|
-
this.valueField,
|
304
|
-
_last[this.valueField],
|
305
|
-
]);
|
306
|
-
}
|
307
|
-
i += sign;
|
308
|
-
let next = nth(this.flatItems, i);
|
309
|
-
while (next?.children && next?.children.length) {
|
310
|
-
i += sign;
|
311
|
-
next = nth(this.flatItems, i);
|
312
|
-
}
|
313
|
-
if (next) {
|
314
|
-
this.selectItems(next);
|
315
|
-
}
|
316
|
-
else if (next == null && sign == 1) {
|
317
|
-
this._fetchData();
|
318
|
-
}
|
319
|
-
}
|
320
|
-
search(exp) {
|
321
|
-
this.empty();
|
322
|
-
this._forceFocus = true;
|
323
|
-
this._fetchData();
|
324
|
-
}
|
325
|
-
_fetchData() {
|
326
|
-
super._fetchData({ searchQuery: this._searchBox?.searchExp });
|
327
|
-
}
|
328
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.AXPlatform }], target: i0.ɵɵFactoryTarget.Component });
|
329
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { isOpen: "isOpen", fitParent: "fitParent", dropdownWidth: "dropdownWidth", position: "position", disabled: "disabled", tabIndex: "tabIndex", allowNull: "allowNull", value: "value", name: "name", checked: "checked", placeholder: "placeholder", maxLength: "maxLength", type: "type", autoComplete: "autoComplete", readonly: "readonly", pageSize: "pageSize", items: "items", valueField: "valueField", textField: "textField", disabledField: "disabledField", disabledCallback: "disabledCallback", multiple: "multiple", selectionMode: "selectionMode", clearButton: "clearButton", checkbox: "checkbox" }, outputs: { onOpened: "onOpened", onClosed: "onClosed", onBlur: "onBlur", onFocus: "onFocus", valueChange: "valueChange", onValueChanged: "onValueChanged" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, classAttribute: "ax-editor-container ax-drop-down" }, providers: [
|
330
|
-
{ provide: AXClosbaleComponent, useExisting: AXSelectBoxComponent },
|
331
|
-
{ provide: AXSearchableComponent, useExisting: AXSelectBoxComponent },
|
332
|
-
], queries: [{ propertyName: "_searchBox", first: true, predicate: AXSearchBoxComponent, descendants: true, static: true }, { propertyName: "_contentEmptyTemplate", first: true, predicate: ["emptyTemplate"], descendants: true }], viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-prefix\"> </ng-content>\r\n<div\r\n class=\"ax-dropdown-content\"\r\n [class.ax-state-disabled]=\"disabled\"\r\n (click)=\"_handleInputClickEvent($event)\">\r\n <div\r\n class=\"ax-select-box-selection\"\r\n [tabindex]=\"tabIndex\"\r\n (focus)=\"_emitOnFocusEvent($event)\"\r\n (blur)=\"_emitOnBlurEvent($event)\">\r\n <ng-container\r\n *ngIf=\"selectedItems && selectedItems.length; else showPlaceholder\">\r\n <ng-container\r\n *ngIf=\"\r\n !multiple;\r\n then singleSelectedTemplate;\r\n else multipleSelectedTemplate\r\n \"></ng-container>\r\n <ng-template #singleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #multipleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <div class=\"ax-select-multi-item\">\r\n {{ _getItemDisplayTextTemplte(item) }}\r\n <span\r\n class=\"ax-icon ax-icon-close\"\r\n (click)=\"_handleBadgeRemove($event, item)\">\r\n </span>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #showPlaceholder>\r\n <div class=\"ax-placeholder\" role=\"textbox\" area-readonly=\"true\">\r\n {{ placeholder }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n<ax-button\r\n color=\"light\"\r\n look=\"blank\"\r\n (onClick)=\"clear()\"\r\n [tabIndex]=\"-1\"\r\n *ngIf=\"value && clearButton && !(disabled || readonly)\">\r\n <ax-icon icon=\"ax-icon ax-icon-close\"></ax-icon>\r\n</ax-button>\r\n<button\r\n [disabled]=\"disabled\"\r\n [tabIndex]=\"-1\"\r\n class=\"ax-editor-control\"\r\n (click)=\"_handleArrowClickEvent($event)\">\r\n <ng-container *ngIf=\"isLoading && !this.popover.isOpen; else iconTemplate\">\r\n <ax-loading type=\"spinner\"></ax-loading>\r\n </ng-container>\r\n <ng-template #iconTemplate>\r\n <span\r\n class=\"ax-icon ax-icon-chevron-left ax-transition-all\"\r\n [ngClass]=\"{\r\n '-ax-rotation-90': !isOpen,\r\n 'ax-rotation-90': isOpen\r\n }\"></span>\r\n </ng-template>\r\n</button>\r\n<ng-content select=\"ax-validation-rule\"> </ng-content>\r\n<ng-content select=\"ax-suffix\"> </ng-content>\r\n<ax-popover\r\n [target]=\"_target\"\r\n [position]=\"position\"\r\n [openTrigger]=\"'manual'\"\r\n [closeTrigger]=\"'clickout'\"\r\n [adaptivityEnabled]=\"true\"\r\n (onOpened)=\"_handlePopupOnOpened($event)\"\r\n (onClosed)=\"_handlePopupOnClosed($event)\">\r\n <div\r\n class=\"ax-overlay-pane\"\r\n (keydown)=\"_handlePopoverKeydown($event)\"\r\n tabindex=\"0\"\r\n aria-modal=\"true\"\r\n cdkTrapFocus\r\n [class.ax-overlay-actionsheet]=\"_isActionSheet\"\r\n [class.ax-full]=\"_searchBox || isLazy\"\r\n [style.min-width.px]=\"_popoverWidth\">\r\n <div class=\"ax-list\">\r\n <ax-header *ngIf=\"_isActionSheet\">\r\n <ax-title>{{ _popoverTitle }}</ax-title>\r\n <ax-close-button\r\n class=\"ax-icon\"\r\n [icon]=\"\r\n multiple ? 'ax-icon-done !ax-text-primary-500' : 'ax-icon-close'\r\n \"></ax-close-button>\r\n </ax-header>\r\n <div\r\n class=\"ax-search-box-container\"\r\n [class.ax-state-hidden]=\"!_searchBox\"\r\n [cdkTrapFocus]=\"_searchBox != null\">\r\n <ng-content select=\"ax-search-box\"></ng-content>\r\n </div>\r\n <div\r\n class=\"ax-content ax-list-items-container ax-default\"\r\n (scroll)=\"_handleListScroll($event)\"\r\n #listContainer>\r\n <ng-container *ngIf=\"displayItems.length; else tmpEmpty\">\r\n <ul>\r\n <ng-container\r\n *ngTemplateOutlet=\"tmpTree; context: { list: displayItems }\">\r\n </ng-container>\r\n <ng-template #tmpTree let-list=\"list\">\r\n <ng-container\r\n *ngFor=\"\r\n let item of list;\r\n let i = index;\r\n trackBy: _trackByFunction\r\n \">\r\n <ng-container *ngIf=\"itemTemplate; else defualtTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: { $implicit: item, direction: direction }\r\n \">\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-template #defualtTemplate>\r\n <ng-container *ngIf=\"item.children?.length > 0; else tmpItem\">\r\n <li\r\n class=\"ax-list-item-group\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <ul *ngIf=\"item.children?.length > 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tmpTree;\r\n context: { list: item.children }\r\n \">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n <ng-template #tmpItem>\r\n <ng-container *ngIf=\"!multiple; else multipleTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item)\"></span>\r\n </li>\r\n </ng-container>\r\n <ng-template #multipleTemplate>\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [class.ax-state-checkbox]=\"checkbox\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span>\r\n <input\r\n class=\"ax-checkbox\"\r\n type=\"checkbox\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n *ngIf=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n [disabled]=\"isItemDisabled(item)\" />\r\n <span class=\"ax-checkbox-label\">{{\r\n _getItemDisplayTextTemplte(item)\r\n }}</span>\r\n </span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item) && !checkbox\"></span>\r\n </li>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-container *ngIf=\"loadingTemplate; else elseLoadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseLoadingTemplate>\r\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\r\n <ax-loading\r\n text=\"{{ 'layout.loading.text' | trans }}\"></ax-loading>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #tmpEmpty>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngIf=\"emptyTemplate; else elseEmptyTemplate\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseEmptyTemplate>\r\n <div\r\n class=\"ax-flex ax-items-center ax-justify-center ax-p-4\"\r\n [innerHTML]=\"\r\n 'common.no-result-for'\r\n | trans\r\n : {\r\n exp: this._searchBox ? this._searchBox.searchExp : ''\r\n }\r\n \"></div>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <!-- <div class=\"ax-list-items-container ax-vertical ax-default\" [class.ax-full]=\"_isMobile\"\r\n >\r\n \r\n </div> -->\r\n <!-- <div class=\"ax-footer\">footer</div> -->\r\n </div>\r\n </div>\r\n</ax-popover>\r\n", styles: ["ax-select-box .ax-select-multi-item{display:flex;align-items:center;padding:.25rem .5rem;background-color:rgba(var(--ax-color-on-surface));border-radius:var(--ax-rounded-border-default);margin-inline-end:.5rem}ax-select-box .ax-select-multi-item .ax-icon-close{cursor:pointer;margin-inline-start:.5rem}ax-select-box .ax-select-box-selection{display:flex;justify-content:center;align-items:center;outline-color:transparent;padding:0 .5rem;outline:transparent;-webkit-user-select:none;user-select:none}ax-select-box .ax-select-box-selection .ax-selectbox-input{opacity:0;width:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.AXDecoratorHeaderComponent, selector: "ax-header" }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorTitleComponent, selector: "ax-title" }, { kind: "component", type: i3.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["target", "position", "openTrigger", "closeTrigger", "hasBackdrop", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange"] }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "text"], outputs: ["visibleChange"] }, { kind: "directive", type: i7.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
333
|
-
}
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
'
|
339
|
-
'
|
340
|
-
'
|
341
|
-
'
|
342
|
-
'
|
343
|
-
'
|
344
|
-
'
|
345
|
-
'
|
346
|
-
'
|
347
|
-
'
|
348
|
-
'
|
349
|
-
'
|
350
|
-
'
|
351
|
-
'
|
352
|
-
'
|
353
|
-
'
|
354
|
-
'
|
355
|
-
'
|
356
|
-
'
|
357
|
-
'
|
358
|
-
'
|
359
|
-
'
|
360
|
-
|
361
|
-
|
362
|
-
'
|
363
|
-
'
|
364
|
-
'
|
365
|
-
'
|
366
|
-
'
|
367
|
-
|
368
|
-
|
369
|
-
{ provide:
|
370
|
-
], host: { class: 'ax-editor-container ax-drop-down' }, template: "<ng-content select=\"ax-prefix\"> </ng-content>\r\n<div\r\n class=\"ax-dropdown-content\"\r\n [class.ax-state-disabled]=\"disabled\"\r\n (click)=\"_handleInputClickEvent($event)\">\r\n <div\r\n class=\"ax-select-box-selection\"\r\n [tabindex]=\"tabIndex\"\r\n (focus)=\"_emitOnFocusEvent($event)\"\r\n (blur)=\"_emitOnBlurEvent($event)\">\r\n <ng-container\r\n *ngIf=\"selectedItems && selectedItems.length; else showPlaceholder\">\r\n <ng-container\r\n *ngIf=\"\r\n !multiple;\r\n then singleSelectedTemplate;\r\n else multipleSelectedTemplate\r\n \"></ng-container>\r\n <ng-template #singleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #multipleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <div class=\"ax-select-multi-item\">\r\n {{ _getItemDisplayTextTemplte(item) }}\r\n <span\r\n class=\"ax-icon ax-icon-close\"\r\n (click)=\"_handleBadgeRemove($event, item)\">\r\n </span>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #showPlaceholder>\r\n <div class=\"ax-placeholder\" role=\"textbox\" area-readonly=\"true\">\r\n {{ placeholder }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n<ax-button\r\n color=\"light\"\r\n look=\"blank\"\r\n (onClick)=\"clear()\"\r\n [tabIndex]=\"-1\"\r\n *ngIf=\"value && clearButton && !(disabled || readonly)\">\r\n <ax-icon icon=\"ax-icon ax-icon-close\"></ax-icon>\r\n</ax-button>\r\n<button\r\n [disabled]=\"disabled\"\r\n [tabIndex]=\"-1\"\r\n class=\"ax-editor-control\"\r\n (click)=\"_handleArrowClickEvent($event)\">\r\n <ng-container *ngIf=\"isLoading && !this.popover.isOpen; else iconTemplate\">\r\n <ax-loading type=\"spinner\"></ax-loading>\r\n </ng-container>\r\n <ng-template #iconTemplate>\r\n <span\r\n class=\"ax-icon ax-icon-chevron-left ax-transition-all\"\r\n [ngClass]=\"{\r\n '-ax-rotation-90': !isOpen,\r\n 'ax-rotation-90': isOpen\r\n }\"></span>\r\n </ng-template>\r\n</button>\r\n<ng-content select=\"ax-validation-rule\"> </ng-content>\r\n<ng-content select=\"ax-suffix\"> </ng-content>\r\n<ax-popover\r\n [target]=\"_target\"\r\n [position]=\"position\"\r\n [openTrigger]=\"'manual'\"\r\n [closeTrigger]=\"'clickout'\"\r\n [adaptivityEnabled]=\"true\"\r\n (onOpened)=\"_handlePopupOnOpened($event)\"\r\n (onClosed)=\"_handlePopupOnClosed($event)\">\r\n <div\r\n class=\"ax-overlay-pane\"\r\n (keydown)=\"_handlePopoverKeydown($event)\"\r\n tabindex=\"0\"\r\n aria-modal=\"true\"\r\n cdkTrapFocus\r\n [class.ax-overlay-actionsheet]=\"_isActionSheet\"\r\n [class.ax-full]=\"_searchBox || isLazy\"\r\n [style.min-width.px]=\"_popoverWidth\">\r\n <div class=\"ax-list\">\r\n <ax-header *ngIf=\"_isActionSheet\">\r\n <ax-title>{{ _popoverTitle }}</ax-title>\r\n <ax-close-button\r\n class=\"ax-icon\"\r\n [icon]=\"\r\n multiple ? 'ax-icon-done !ax-text-primary-500' : 'ax-icon-close'\r\n \"></ax-close-button>\r\n </ax-header>\r\n <div\r\n class=\"ax-search-box-container\"\r\n [class.ax-state-hidden]=\"!_searchBox\"\r\n [cdkTrapFocus]=\"_searchBox != null\">\r\n <ng-content select=\"ax-search-box\"></ng-content>\r\n </div>\r\n <div\r\n class=\"ax-content ax-list-items-container ax-default\"\r\n (scroll)=\"_handleListScroll($event)\"\r\n #listContainer>\r\n <ng-container *ngIf=\"displayItems.length; else tmpEmpty\">\r\n <ul>\r\n <ng-container\r\n *ngTemplateOutlet=\"tmpTree; context: { list: displayItems }\">\r\n </ng-container>\r\n <ng-template #tmpTree let-list=\"list\">\r\n <ng-container\r\n *ngFor=\"\r\n let item of list;\r\n let i = index;\r\n trackBy: _trackByFunction\r\n \">\r\n <ng-container *ngIf=\"itemTemplate; else defualtTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: { $implicit: item, direction: direction }\r\n \">\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-template #defualtTemplate>\r\n <ng-container *ngIf=\"item.children?.length > 0; else tmpItem\">\r\n <li\r\n class=\"ax-list-item-group\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <ul *ngIf=\"item.children?.length > 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tmpTree;\r\n context: { list: item.children }\r\n \">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n <ng-template #tmpItem>\r\n <ng-container *ngIf=\"!multiple; else multipleTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item)\"></span>\r\n </li>\r\n </ng-container>\r\n <ng-template #multipleTemplate>\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [class.ax-state-checkbox]=\"checkbox\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span>\r\n <input\r\n class=\"ax-checkbox\"\r\n type=\"checkbox\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n *ngIf=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n [disabled]=\"isItemDisabled(item)\" />\r\n <span class=\"ax-checkbox-label\">{{\r\n _getItemDisplayTextTemplte(item)\r\n }}</span>\r\n </span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item) && !checkbox\"></span>\r\n </li>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-container *ngIf=\"loadingTemplate; else elseLoadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseLoadingTemplate>\r\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\r\n <ax-loading\r\n text=\"{{ 'layout.loading.text' | trans }}\"></ax-loading>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #tmpEmpty>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngIf=\"emptyTemplate; else elseEmptyTemplate\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseEmptyTemplate>\r\n <div\r\n class=\"ax-flex ax-items-center ax-justify-center ax-p-4\"\r\n [innerHTML]=\"\r\n 'common.no-result-for'\r\n | trans\r\n : {\r\n exp: this._searchBox ? this._searchBox.searchExp : ''\r\n }\r\n \"></div>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <!-- <div class=\"ax-list-items-container ax-vertical ax-default\" [class.ax-full]=\"_isMobile\"\r\n >\r\n \r\n </div> -->\r\n <!-- <div class=\"ax-footer\">footer</div> -->\r\n </div>\r\n </div>\r\n</ax-popover>\r\n", styles: ["ax-select-box .ax-select-multi-item{display:flex;align-items:center;padding:.25rem .5rem;background-color:rgba(var(--ax-color-on-surface));border-radius:var(--ax-rounded-border-default);margin-inline-end:.5rem}ax-select-box .ax-select-multi-item .ax-icon-close{cursor:pointer;margin-inline-start:.5rem}ax-select-box .ax-select-box-selection{display:flex;justify-content:center;align-items:center;outline-color:transparent;padding:0 .5rem;outline:transparent;-webkit-user-select:none;user-select:none}ax-select-box .ax-select-box-selection .ax-selectbox-input{opacity:0;width:0}\n"] }]
|
371
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.AXPlatform }]; }, propDecorators: { popover: [{
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NlbGVjdC1ib3gvc3JjL3NlbGVjdGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94L3NyYy9zZWxlY3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEUsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQUV4RTs7OztHQUlHO0FBOENILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSw0QkFBNEI7SUF1QzFEO0lBQ0E7SUFDQTtJQUNBO0lBeENWLE9BQU8sQ0FBcUI7SUFHNUIsVUFBVSxDQUF1QjtJQUVqQyxPQUFPLENBQWlCO0lBQ3hCLGFBQWEsQ0FBUztJQUN0QixhQUFhLENBQVM7SUFFdEI7O09BRUc7SUFFSCxXQUFXLEdBQVksS0FBSyxDQUFDO0lBRTdCOztPQUVHO0lBRUgsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUdsQixhQUFhLENBQTZCO0lBRzFDLHFCQUFxQixDQUFtQjtJQUVoRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCOztPQUVHO0lBQ0gsWUFDVSxXQUF1QyxFQUN2QyxJQUF1QixFQUN2QixLQUFhLEVBQ2IsU0FBcUI7UUFFN0IsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUxqQixnQkFBVyxHQUFYLFdBQVcsQ0FBNEI7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFHN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxDQUFhO1FBQ2xDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxDQUFhO1FBQ2xDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU07UUFDSixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBRTlDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVO1FBQ1IsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzlDLG1JQUFtSTtRQUNuSSxJQUFJLENBQUMsYUFBYTtZQUNoQixJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUMxRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsQ0FBYSxFQUFFLElBQVM7UUFDekMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQVE7UUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQXdCLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMxRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLElBQUksR0FBUSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUNuRCxJQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVU7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQ3pEO1lBQ0EsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWEsRUFBRSxRQUFhO1FBQzFDLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxDQUFhLEVBQUUsSUFBUztRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsQ0FBYSxFQUFFLElBQUk7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUdELGNBQWMsQ0FBQyxDQUFnQjtRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQy9DLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUMvQixDQUFDO1FBQ0YsSUFDRSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFDdEIsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3pELENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDN0Q7WUFDQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO2FBQU0sSUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1lBQ3RFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ3BCLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUNwQjtZQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtvQkFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNiO3FCQUFNO29CQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO1lBQ0QsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU87U0FDUjthQUFNLElBQUksUUFBUSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLENBQWdCO1FBQ3BDLElBQ0csQ0FBQyxDQUFDLE1BQXNCLENBQUMsT0FBTyxJQUFJLE9BQU87WUFDNUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFdkMsT0FBTztRQUNULElBQ0UsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQztZQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzVCO1lBQ0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNwQjthQUFNLElBQ0wsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXO1lBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3pELENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDN0Q7WUFDQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDcEI7YUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQ25ELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUM1QyxpQkFBaUIsQ0FDbEIsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsVUFBVTtnQkFDZixhQUFhO2FBQ2QsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNwQyxPQUFPO2lCQUNSO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2Q7YUFDRjtTQUNGO2FBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3JCO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFDbkQ7WUFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFZO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBYyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FDWCxFQUFFLENBQUMsOEJBQThCLENBQUM7WUFDbEMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0QixJQUFJLElBQUksR0FBRyxDQUNULElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUN6RCxDQUFDO1FBQ2pCLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxHQUFHLEdBQUcsQ0FDVixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDdEUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxFQUFFO29CQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFRLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUM5QyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQ1gsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9ELElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEVBQWU7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNYLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ2xDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztpQkFDekM7cUJBQU07b0JBQ0wsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztpQkFDdEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7O2dCQUNoRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBWTtRQUNyQyxNQUFNLEtBQUssR0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksS0FBSyxFQUFFO1lBQ1QsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsVUFBVTtnQkFDZixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN2QixDQUFDLENBQUM7U0FDSjtRQUNELENBQUMsSUFBSSxJQUFJLENBQUM7UUFDVixJQUFJLElBQUksR0FBRyxHQUFHLENBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDOUMsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNWLElBQUksR0FBRyxHQUFHLENBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjthQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVU7UUFDUixLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO3VHQWhXVSxvQkFBb0I7MkZBQXBCLG9CQUFvQixxNUJBTnBCO1lBQ1QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO1lBQ25FLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRTtTQUN0RSxrRUFPYSxvQkFBb0IsZ05BSHZCLGtCQUFrQixvTUM3RS9CLCtsVEF1T0E7OzJGRDNKYSxvQkFBb0I7a0JBN0NoQyxTQUFTOytCQUNFLGVBQWUsVUFHakI7d0JBQ04sUUFBUTt3QkFDUixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsVUFBVTt3QkFDVixVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLE1BQU07d0JBQ04sU0FBUzt3QkFDVCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsTUFBTTt3QkFDTixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixPQUFPO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsVUFBVTt3QkFDVixlQUFlO3FCQUNoQixXQUNRO3dCQUNQLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ2pCLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxzQkFBc0IsRUFBRTt3QkFDbkUsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxzQkFBc0IsRUFBRTtxQkFDdEUsUUFDSyxFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRTsrS0FJbkQsT0FBTztzQkFETixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFXcEQsV0FBVztzQkFEVixLQUFLO2dCQU9OLFFBQVE7c0JBRFAsS0FBSztnQkFJRSxhQUFhO3NCQURwQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSXBDLHFCQUFxQjtzQkFENUIsWUFBWTt1QkFBQyxlQUFlO2dCQTJIN0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xyXG5pbXBvcnQgeyBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmluZExhc3QsIGZpbmRMYXN0SW5kZXgsIGZpcnN0LCBsYXN0LCBudGggfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFYQ2xpY2tFdmVudCxcclxuICBBWENsb3NiYWxlQ29tcG9uZW50LFxyXG4gIEFYU2VhcmNoYWJsZUNvbXBvbmVudCxcclxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcclxuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VhcmNoLWJveCc7XHJcbmltcG9ydCB7IEFYQmFzZVNlbGVjdGlvbkRyb3Bkb3duTWl4aW4gfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbWl4aW4nO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBCdXR0b24gaXMgYSBjb21wb25lbnQgd2hpY2ggZGV0ZWN0cyB1c2VyIGludGVyYWN0aW9uIGFuZCB0cmlnZ2VycyBhIGNvcnJlc3BvbmRpbmcgZXZlbnRcclxuICpcclxuICogQGNhdGVnb3J5IENvbXBvbmVudHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXgtc2VsZWN0LWJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaW5wdXRzOiBbXHJcbiAgICAnaXNPcGVuJyxcclxuICAgICdmaXRQYXJlbnQnLFxyXG4gICAgJ2Ryb3Bkb3duV2lkdGgnLFxyXG4gICAgJ3Bvc2l0aW9uJyxcclxuICAgICdkaXNhYmxlZCcsXHJcbiAgICAndGFiSW5kZXgnLFxyXG4gICAgJ2FsbG93TnVsbCcsXHJcbiAgICAndmFsdWUnLFxyXG4gICAgJ25hbWUnLFxyXG4gICAgJ2NoZWNrZWQnLFxyXG4gICAgJ3BsYWNlaG9sZGVyJyxcclxuICAgICdtYXhMZW5ndGgnLFxyXG4gICAgJ3R5cGUnLFxyXG4gICAgJ2F1dG9Db21wbGV0ZScsXHJcbiAgICAncmVhZG9ubHknLFxyXG4gICAgJ3BhZ2VTaXplJyxcclxuICAgICdpdGVtcycsXHJcbiAgICAndmFsdWVGaWVsZCcsXHJcbiAgICAndGV4dEZpZWxkJyxcclxuICAgICdkaXNhYmxlZEZpZWxkJyxcclxuICAgICdkaXNhYmxlZENhbGxiYWNrJyxcclxuICAgICdtdWx0aXBsZScsXHJcbiAgICAnc2VsZWN0aW9uTW9kZScsXHJcbiAgXSxcclxuICBvdXRwdXRzOiBbXHJcbiAgICAnb25PcGVuZWQnLFxyXG4gICAgJ29uQ2xvc2VkJyxcclxuICAgICdvbkJsdXInLFxyXG4gICAgJ29uRm9jdXMnLFxyXG4gICAgJ3ZhbHVlQ2hhbmdlJyxcclxuICAgICdvblZhbHVlQ2hhbmdlZCcsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBBWENsb3NiYWxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfSxcclxuICAgIHsgcHJvdmlkZTogQVhTZWFyY2hhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfSxcclxuICBdLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICdheC1lZGl0b3ItY29udGFpbmVyIGF4LWRyb3AtZG93bicgfSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94Q29tcG9uZW50IGV4dGVuZHMgQVhCYXNlU2VsZWN0aW9uRHJvcGRvd25NaXhpbiB7XHJcbiAgQFZpZXdDaGlsZChBWFBvcG92ZXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcG9wb3ZlcjogQVhQb3BvdmVyQ29tcG9uZW50O1xyXG5cclxuICBAQ29udGVudENoaWxkKEFYU2VhcmNoQm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIF9zZWFyY2hCb3g6IEFYU2VhcmNoQm94Q29tcG9uZW50O1xyXG5cclxuICBfdGFyZ2V0OiBIVE1MRGl2RWxlbWVudDtcclxuICBfcG9wb3ZlclRpdGxlOiBzdHJpbmc7XHJcbiAgX3BvcG92ZXJXaWR0aDogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiAgRGVmaW5lcyB0aGUgY2xlYXJCdXR0b24uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBjbGVhckJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgRGVmaW5lcyB0aGUgY2hlY2tib3guXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBjaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIGxpc3RDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBAQ29udGVudENoaWxkKCdlbXB0eVRlbXBsYXRlJylcclxuICBwcml2YXRlIF9jb250ZW50RW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgZ2V0IGVtcHR5VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGVudEVtcHR5VGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBfaXNBY3Rpb25TaGVldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIF9mb3JjZUZvY3VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgX3BsYXRmb3JtOiBBWFBsYXRmb3JtXHJcbiAgKSB7XHJcbiAgICBzdXBlcihfZWxlbWVudFJlZiwgX2Nkcik7XHJcbiAgICB0aGlzLl9pc0FjdGlvblNoZWV0ID0gdGhpcy5fcGxhdGZvcm0uaXMoJ1NNJyk7XHJcbiAgICB0aGlzLl9wbGF0Zm9ybS5yZXNpemUuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5faXNBY3Rpb25TaGVldCA9IHRoaXMuX3BsYXRmb3JtLmlzKCdTTScpO1xyXG4gICAgICB0aGlzLnBvcG92ZXIuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLl9kZXRlY3RQb3B1cFNpemUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZUFycm93Q2xpY2tFdmVudChlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gZS5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuICBfaGFuZGxlSW5wdXRDbGlja0V2ZW50KGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcbiAgb25Jbml0KCkge1xyXG4gICAgc3VwZXIub25Jbml0KCk7XHJcbiAgICB0aGlzLl90YXJnZXQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlUG9wdXBUaXRsZSgpO1xyXG4gIH1cclxuXHJcbiAgb25WaWV3SW5pdCgpIHtcclxuICAgIHN1cGVyLm9uVmlld0luaXQoKTtcclxuICAgIHRoaXMuX2RldGVjdFBvcHVwU2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgc3VwZXIucmVmcmVzaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUG9wdXBUaXRsZSgpIHtcclxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zZWxlY3RlZEl0ZW1zPy5sZW5ndGggfHwgMDtcclxuICAgIC8vdGhpcy5fcG9wb3ZlclRpdGxlID0gY291bnQgPiAxID8gYCgke2NvdW50fSkgaXRlbXMgc2VsZWN0ZWRgIDogKHRoaXMucGxhY2Vob2xkZXIgfHwgQVhUcmFuc2xhdG9yLmdldCgnc2VsZWN0Ym94LnBvcG92ZXIudGl0bGUnKSk7XHJcbiAgICB0aGlzLl9wb3BvdmVyVGl0bGUgPVxyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyIHx8IEFYVHJhbnNsYXRvci5nZXQoJ3NlbGVjdGJveC5wb3BvdmVyLnRpdGxlJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXRlY3RQb3B1cFNpemUoKSB7XHJcbiAgICB0aGlzLl9wb3BvdmVyV2lkdGggPSB0aGlzLl9pc0FjdGlvblNoZWV0ID8gMCA6IHRoaXMuX3RhcmdldC5vZmZzZXRXaWR0aDtcclxuICB9XHJcblxyXG4gIF9oYW5kbGVPbkl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlzSXRlbURpc2FibGVkKGl0ZW0pKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkgdGhpcy5jbG9zZSgpO1xyXG4gICAgdGhpcy50b2dnbGVTZWxlY3QoaXRlbSk7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZUxpc3RTY3JvbGwoZTogRXZlbnQpIHtcclxuICAgIGNvbnN0IGxpc3QgPSBlLnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGlmIChsaXN0LnNjcm9sbFRvcCA8IGxpc3Quc2Nyb2xsSGVpZ2h0IC0gbGlzdC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja0ZvckxvYWREYXRhKCkge1xyXG4gICAgY29uc3QgbGlzdDogYW55ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9hZGVkQ291bnQgPCB0aGlzLnRvdGFsQ291bnQgJiZcclxuICAgICAgbGlzdC5zY3JvbGxIZWlnaHQgPCBsaXN0LnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICogMS41XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfb25EYXRhTG9hZGVkKCkge1xyXG4gICAgaWYgKHRoaXMucG9wb3Zlci5pc09wZW4pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fY2hlY2tGb3JMb2FkRGF0YSgpO1xyXG4gICAgICAgIHRoaXMucG9wb3Zlci51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLl9mb3JjZUZvY3VzKSB7XHJcbiAgICAgICAgICB0aGlzLl9mb2N1c1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgICAgICAgdGhpcy5fZm9yY2VGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9mb2N1c1NlYXJjaEJveCgpO1xyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX29uVmFsdWVDaGFuZ2VkKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHN1cGVyLl9vblZhbHVlQ2hhbmdlZChvbGRWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZU9uUmVtb3ZlSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgdGhpcy51bnNlbGVjdEl0ZW1zKGl0ZW0pO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIF9oYW5kbGVCYWRnZVJlbW92ZShlOiBNb3VzZUV2ZW50LCBpdGVtKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0SXRlbXMoaXRlbSk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgX2hhbmRsZUtleWRvd24oZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgaXNMZXR0ZXIgPSBuZXcgUmVnRXhwKC9bYS16QS1aMC05XFwtXS8pLnRlc3QoXHJcbiAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKVxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgZS5jb2RlID09PSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJyAmJlxyXG4gICAgICAoKHRoaXMuYWxsb3dOdWxsID09PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fFxyXG4gICAgICAgICh0aGlzLmFsbG93TnVsbCAhPT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pc1VzZXJJbnB1dCA9IHRydWU7XHJcbiAgICAgIHRoaXMudW5zZWxlY3RJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMucG9wKCkpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIChlLmNvZGUgPT09ICdBcnJvd0Rvd24nIHx8IGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ1NwYWNlJykgJiZcclxuICAgICAgIXRoaXMucG9wb3Zlci5pc09wZW4gJiZcclxuICAgICAgZS50eXBlID09PSAna2V5ZG93bidcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5jb2RlID09PSAnU3BhY2UnKSB7XHJcbiAgICAgICAgICB0aGlzLm9wZW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtQnlOYXYoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9IGUua2V5O1xyXG4gICAgICB0aGlzLm9wZW4oKTtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfaGFuZGxlUG9wb3ZlcktleWRvd24oZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT0gJ0lOUFVUJyAmJlxyXG4gICAgICBbJ1NwYWNlJywgJ0JhY2tzcGFjZSddLmluY2x1ZGVzKGUuY29kZSlcclxuICAgIClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKFxyXG4gICAgICAoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnQXJyb3dVcCcpICYmXHJcbiAgICAgIHRoaXMuZGlzcGxheUl0ZW1zLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzVXNlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fZm9jdXNJdGVtQnlOYXYoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgZS5jb2RlID09PSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAoKHRoaXMuYWxsb3dOdWxsID09PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fFxyXG4gICAgICAgICh0aGlzLmFsbG93TnVsbCAhPT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pc1VzZXJJbnB1dCA9IHRydWU7XHJcbiAgICAgIHRoaXMudW5zZWxlY3RJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMucG9wKCkpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PT0gJ1NwYWNlJyB8fCBlLmNvZGUgPT09ICdFbnRlcicpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb25zdCBmb2N1c2VkSXRlbUlkID1cclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcclxuICAgICAgICAgICcuYXgtc3RhdGUtZm9jdXMnXHJcbiAgICAgICAgKT8uZGF0YXNldD8uaWQ7XHJcbiAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gZmluZExhc3QodGhpcy5mbGF0SXRlbXMsIFtcclxuICAgICAgICB0aGlzLnZhbHVlRmllbGQsXHJcbiAgICAgICAgZm9jdXNlZEl0ZW1JZCxcclxuICAgICAgXSk7XHJcbiAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSXRlbURpc2FibGVkKGZvY3VzZWRJdGVtKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdChmb2N1c2VkSXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RJdGVtcyhmb2N1c2VkSXRlbSk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PT0gJ1RhYicpIHtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIF9oYW5kbGVQb3B1cE9uT3BlbmVkKGUpIHtcclxuICAgIHRoaXMuX2RldGVjdFBvcHVwU2l6ZSgpO1xyXG4gICAgdGhpcy5wb3BvdmVyLmZvY3VzKCk7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5fZm9yY2VGb2N1cyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2ZldGNoRGF0YSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZm9jdXNTZWxlY3RlZEl0ZW0oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2ZvY3VzU2VhcmNoQm94KCk7XHJcbiAgfVxyXG5cclxuICBfaGFuZGxlUG9wdXBPbkNsb3NlZChlKSB7XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb2N1c1NlYXJjaEJveCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fc2VhcmNoQm94ICYmXHJcbiAgICAgICghdGhpcy5faXNBY3Rpb25TaGVldCB8fCB0aGlzLl9zZWFyY2hCb3guc2VhcmNoRXhwKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaEJveC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9jdXNJdGVtQnlOYXYoc2lnbjogLTEgfCAxKTogdm9pZCB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBmbiA9IHMgPT4gbGlzdC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihzKTtcclxuICAgIGNvbnN0IGl0ZW1EaXY6IGFueSA9XHJcbiAgICAgIGZuKGAuYXgtbGlzdC1pdGVtLmF4LXN0YXRlLWZvY3VzYCkgfHxcclxuICAgICAgZm4oYC5heC1saXN0LWl0ZW0uYXgtc3RhdGUtc2VsZWN0ZWRgKSB8fFxyXG4gICAgICBmbihgLmF4LWxpc3QtaXRlbWApO1xyXG4gICAgbGV0IG5leHQgPSAoXHJcbiAgICAgIHNpZ24gPT0gMSA/IGl0ZW1EaXYubmV4dEVsZW1lbnRTaWJsaW5nIDogaXRlbURpdi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgdGhpcy5fZm9jdXNJdGVtRWxlbWVudChuZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IGl0ZW1EaXYuY2xvc2VzdCgnLmF4LWxpc3QtaXRlbS1ncm91cCcpO1xyXG4gICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgY29uc3QgbGlzID0gKFxyXG4gICAgICAgICAgc2lnbiA9PSAxID8gcGFyZW50Lm5leHRFbGVtZW50U2libGluZyA6IHBhcmVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXHJcbiAgICAgICAgKT8ucXVlcnlTZWxlY3RvckFsbCgnbGknKTtcclxuICAgICAgICBjb25zdCBhID0gc2lnbiA9PSAxID8gZmlyc3QobGlzKSA6IGxhc3QobGlzKTtcclxuICAgICAgICBpZiAoYSkge1xyXG4gICAgICAgICAgdGhpcy5fZm9jdXNJdGVtRWxlbWVudChhIGFzIGFueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb2N1c1NlbGVjdGVkSXRlbSgpIHtcclxuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCBsaXN0ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGZuID0gcyA9PiBsaXN0LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHMpO1xyXG4gICAgICBjb25zdCBpdGVtRGl2ID1cclxuICAgICAgICBmbihgLmF4LWxpc3QtaXRlbS5heC1zdGF0ZS1zZWxlY3RlZGApIHx8IGZuKGAuYXgtbGlzdC1pdGVtYCk7XHJcbiAgICAgIGlmIChpdGVtRGl2KSB7XHJcbiAgICAgICAgdGhpcy5fZm9jdXNJdGVtRWxlbWVudChpdGVtRGl2KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb2N1c0l0ZW1FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xyXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgbGlzdC5xdWVyeVNlbGVjdG9yQWxsKCcuYXgtbGlzdC1pdGVtJykuZm9yRWFjaChjID0+IHtcclxuICAgICAgICBpZiAoYyA9PSBlbCkge1xyXG4gICAgICAgICAgYy5jbGFzc0xpc3QuYWRkKCdheC1zdGF0ZS1mb2N1cycpO1xyXG4gICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ2F1dG8nIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjLmNsYXNzTGlzdC5yZW1vdmUoJ2F4LXN0YXRlLWZvY3VzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0aGlzLl9pc0FjdGlvblNoZWV0ICYmIHRoaXMuX3NlYXJjaEJveCkgdGhpcy5fc2VhcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgIGVsc2UgZWwuZm9jdXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtQnlOYXYoc2lnbjogLTEgfCAxKTogdm9pZCB7XHJcbiAgICBjb25zdCBfbGFzdDogYW55ID0gbGFzdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgaWYgKF9sYXN0KSB7XHJcbiAgICAgIGkgPSBmaW5kTGFzdEluZGV4KHRoaXMuZmxhdEl0ZW1zLCBbXHJcbiAgICAgICAgdGhpcy52YWx1ZUZpZWxkLFxyXG4gICAgICAgIF9sYXN0W3RoaXMudmFsdWVGaWVsZF0sXHJcbiAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgaSArPSBzaWduO1xyXG4gICAgbGV0IG5leHQgPSBudGg8YW55Pih0aGlzLmZsYXRJdGVtcywgaSk7XHJcbiAgICB3aGlsZSAobmV4dD8uY2hpbGRyZW4gJiYgbmV4dD8uY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgIGkgKz0gc2lnbjtcclxuICAgICAgbmV4dCA9IG50aDxhbnk+KHRoaXMuZmxhdEl0ZW1zLCBpKTtcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0SXRlbXMobmV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKG5leHQgPT0gbnVsbCAmJiBzaWduID09IDEpIHtcclxuICAgICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWFyY2goZXhwOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZW1wdHkoKTtcclxuICAgIHRoaXMuX2ZvcmNlRm9jdXMgPSB0cnVlO1xyXG4gICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBfZmV0Y2hEYXRhKCkge1xyXG4gICAgc3VwZXIuX2ZldGNoRGF0YSh7IHNlYXJjaFF1ZXJ5OiB0aGlzLl9zZWFyY2hCb3g/LnNlYXJjaEV4cCB9KTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtcHJlZml4XCI+IDwvbmctY29udGVudD5cclxuPGRpdlxyXG4gIGNsYXNzPVwiYXgtZHJvcGRvd24tY29udGVudFwiXHJcbiAgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAoY2xpY2spPVwiX2hhbmRsZUlucHV0Q2xpY2tFdmVudCgkZXZlbnQpXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJheC1zZWxlY3QtYm94LXNlbGVjdGlvblwiXHJcbiAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgKGZvY3VzKT1cIl9lbWl0T25Gb2N1c0V2ZW50KCRldmVudClcIlxyXG4gICAgKGJsdXIpPVwiX2VtaXRPbkJsdXJFdmVudCgkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtcyAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aDsgZWxzZSBzaG93UGxhY2Vob2xkZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAhbXVsdGlwbGU7XHJcbiAgICAgICAgICB0aGVuIHNpbmdsZVNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICAgICAgICBlbHNlIG11bHRpcGxlU2VsZWN0ZWRUZW1wbGF0ZVxyXG4gICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVNlbGVjdGVkVGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCI+XHJcbiAgICAgICAgICA8c3Bhbj4ge3sgX2dldEl0ZW1EaXNwbGF5VGV4dFRlbXBsdGUoaXRlbSkgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVTZWxlY3RlZFRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNlbGVjdC1tdWx0aS1pdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IF9nZXRJdGVtRGlzcGxheVRleHRUZW1wbHRlKGl0ZW0pIH19XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2xvc2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlQmFkZ2VSZW1vdmUoJGV2ZW50LCBpdGVtKVwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNzaG93UGxhY2Vob2xkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJheC1wbGFjZWhvbGRlclwiIHJvbGU9XCJ0ZXh0Ym94XCIgYXJlYS1yZWFkb25seT1cInRydWVcIj5cclxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48YXgtYnV0dG9uXHJcbiAgY29sb3I9XCJsaWdodFwiXHJcbiAgbG9vaz1cImJsYW5rXCJcclxuICAob25DbGljayk9XCJjbGVhcigpXCJcclxuICBbdGFiSW5kZXhdPVwiLTFcIlxyXG4gICpuZ0lmPVwidmFsdWUgJiYgY2xlYXJCdXR0b24gJiYgIShkaXNhYmxlZCB8fCByZWFkb25seSlcIj5cclxuICA8YXgtaWNvbiBpY29uPVwiYXgtaWNvbiBheC1pY29uLWNsb3NlXCI+PC9heC1pY29uPlxyXG48L2F4LWJ1dHRvbj5cclxuPGJ1dHRvblxyXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgW3RhYkluZGV4XT1cIi0xXCJcclxuICBjbGFzcz1cImF4LWVkaXRvci1jb250cm9sXCJcclxuICAoY2xpY2spPVwiX2hhbmRsZUFycm93Q2xpY2tFdmVudCgkZXZlbnQpXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZyAmJiAhdGhpcy5wb3BvdmVyLmlzT3BlbjsgZWxzZSBpY29uVGVtcGxhdGVcIj5cclxuICAgIDxheC1sb2FkaW5nIHR5cGU9XCJzcGlubmVyXCI+PC9heC1sb2FkaW5nPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy10ZW1wbGF0ZSAjaWNvblRlbXBsYXRlPlxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1sZWZ0IGF4LXRyYW5zaXRpb24tYWxsXCJcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICctYXgtcm90YXRpb24tOTAnOiAhaXNPcGVuLFxyXG4gICAgICAgICdheC1yb3RhdGlvbi05MCc6IGlzT3BlblxyXG4gICAgICB9XCI+PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYnV0dG9uPlxyXG48bmctY29udGVudCBzZWxlY3Q9XCJheC12YWxpZGF0aW9uLXJ1bGVcIj4gPC9uZy1jb250ZW50PlxyXG48bmctY29udGVudCBzZWxlY3Q9XCJheC1zdWZmaXhcIj4gPC9uZy1jb250ZW50PlxyXG48YXgtcG9wb3ZlclxyXG4gIFt0YXJnZXRdPVwiX3RhcmdldFwiXHJcbiAgW3Bvc2l0aW9uXT1cInBvc2l0aW9uXCJcclxuICBbb3BlblRyaWdnZXJdPVwiJ21hbnVhbCdcIlxyXG4gIFtjbG9zZVRyaWdnZXJdPVwiJ2NsaWNrb3V0J1wiXHJcbiAgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIlxyXG4gIChvbk9wZW5lZCk9XCJfaGFuZGxlUG9wdXBPbk9wZW5lZCgkZXZlbnQpXCJcclxuICAob25DbG9zZWQpPVwiX2hhbmRsZVBvcHVwT25DbG9zZWQoJGV2ZW50KVwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lXCJcclxuICAgIChrZXlkb3duKT1cIl9oYW5kbGVQb3BvdmVyS2V5ZG93bigkZXZlbnQpXCJcclxuICAgIHRhYmluZGV4PVwiMFwiXHJcbiAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXHJcbiAgICBjZGtUcmFwRm9jdXNcclxuICAgIFtjbGFzcy5heC1vdmVybGF5LWFjdGlvbnNoZWV0XT1cIl9pc0FjdGlvblNoZWV0XCJcclxuICAgIFtjbGFzcy5heC1mdWxsXT1cIl9zZWFyY2hCb3ggfHwgaXNMYXp5XCJcclxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiX3BvcG92ZXJXaWR0aFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImF4LWxpc3RcIj5cclxuICAgICAgPGF4LWhlYWRlciAqbmdJZj1cIl9pc0FjdGlvblNoZWV0XCI+XHJcbiAgICAgICAgPGF4LXRpdGxlPnt7IF9wb3BvdmVyVGl0bGUgfX08L2F4LXRpdGxlPlxyXG4gICAgICAgIDxheC1jbG9zZS1idXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYXgtaWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJcclxuICAgICAgICAgICAgbXVsdGlwbGUgPyAnYXgtaWNvbi1kb25lICFheC10ZXh0LXByaW1hcnktNTAwJyA6ICdheC1pY29uLWNsb3NlJ1xyXG4gICAgICAgICAgXCI+PC9heC1jbG9zZS1idXR0b24+XHJcbiAgICAgIDwvYXgtaGVhZGVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJheC1zZWFyY2gtYm94LWNvbnRhaW5lclwiXHJcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWhpZGRlbl09XCIhX3NlYXJjaEJveFwiXHJcbiAgICAgICAgW2Nka1RyYXBGb2N1c109XCJfc2VhcmNoQm94ICE9IG51bGxcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1zZWFyY2gtYm94XCI+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYXgtY29udGVudCBheC1saXN0LWl0ZW1zLWNvbnRhaW5lciBheC1kZWZhdWx0XCJcclxuICAgICAgICAoc2Nyb2xsKT1cIl9oYW5kbGVMaXN0U2Nyb2xsKCRldmVudClcIlxyXG4gICAgICAgICNsaXN0Q29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5SXRlbXMubGVuZ3RoOyBlbHNlIHRtcEVtcHR5XCI+XHJcbiAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRtcFRyZWU7IGNvbnRleHQ6IHsgbGlzdDogZGlzcGxheUl0ZW1zIH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG1wVHJlZSBsZXQtbGlzdD1cImxpc3RcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgbGlzdDtcclxuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcclxuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlGdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbVRlbXBsYXRlOyBlbHNlIGRlZnVhbHRUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWxpc3QtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVPbkl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cIml0ZW1bdGhpcy52YWx1ZUZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGRpcmVjdGlvbjogZGlyZWN0aW9uIH1cclxuICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZnVhbHRUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgdG1wSXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1saXN0LWl0ZW0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJpdGVtW3RoaXMudmFsdWVGaWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBfZ2V0SXRlbURpc3BsYXlUZXh0VGVtcGx0ZShpdGVtKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBUcmVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBsaXN0OiBpdGVtLmNoaWxkcmVuIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RtcEl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZTsgZWxzZSBtdWx0aXBsZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1saXN0LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVPbkl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJpdGVtW3RoaXMudmFsdWVGaWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IF9nZXRJdGVtRGlzcGxheVRleHRUZW1wbHRlKGl0ZW0pIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWRvbmUgYXgtc2VsZWN0ZWQtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtbGlzdC1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXNlbGVjdGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWNoZWNrYm94XT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlT25JdGVtQ2xpY2soJGV2ZW50LCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaWRdPVwiaXRlbVt0aGlzLnZhbHVlRmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1jaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGl0ZW0pXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWNoZWNrYm94LWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRJdGVtRGlzcGxheVRleHRUZW1wbHRlKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1kb25lIGF4LXNlbGVjdGVkLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSkgJiYgIWNoZWNrYm94XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZTsgZWxzZSBlbHNlTG9hZGluZ1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj4gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUxvYWRpbmdUZW1wbGF0ZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktY2VudGVyIGF4LXAtNFwiPlxyXG4gICAgICAgICAgICAgIDxheC1sb2FkaW5nXHJcbiAgICAgICAgICAgICAgICB0ZXh0PVwie3sgJ2xheW91dC5sb2FkaW5nLnRleHQnIHwgdHJhbnMgfX1cIj48L2F4LWxvYWRpbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RtcEVtcHR5PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVtcHR5VGVtcGxhdGU7IGVsc2UgZWxzZUVtcHR5VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlUZW1wbGF0ZVwiPiA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUVtcHR5VGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlciBheC1wLTRcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcclxuICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5uby1yZXN1bHQtZm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNcclxuICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cDogdGhpcy5fc2VhcmNoQm94ID8gdGhpcy5fc2VhcmNoQm94LnNlYXJjaEV4cCA6ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF4LWxpc3QtaXRlbXMtY29udGFpbmVyIGF4LXZlcnRpY2FsIGF4LWRlZmF1bHRcIiBbY2xhc3MuYXgtZnVsbF09XCJfaXNNb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJheC1mb290ZXJcIj5mb290ZXI8L2Rpdj4gLS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9heC1wb3BvdmVyPlxyXG4iXX0=
|
1
|
+
import { AXTranslator } from '@acorex/core/translation';
|
2
|
+
import { ChangeDetectionStrategy, Component, ContentChild, HostListener, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
|
3
|
+
import { findLast, findLastIndex, first, last, nth } from 'lodash-es';
|
4
|
+
import { AXClosbaleComponent, AXSearchableComponent, } from '@acorex/components/common';
|
5
|
+
import { AXPopoverComponent } from '@acorex/components/popover';
|
6
|
+
import { AXSearchBoxComponent } from '@acorex/components/search-box';
|
7
|
+
import { AXBaseSelectionDropdownMixin } from '@acorex/components/mixin';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
import * as i1 from "@acorex/core/platform";
|
10
|
+
import * as i2 from "@angular/common";
|
11
|
+
import * as i3 from "@acorex/components/decorators";
|
12
|
+
import * as i4 from "@acorex/components/popover";
|
13
|
+
import * as i5 from "@acorex/components/button";
|
14
|
+
import * as i6 from "@acorex/components/loading";
|
15
|
+
import * as i7 from "@angular/cdk/a11y";
|
16
|
+
import * as i8 from "@acorex/core/translation";
|
17
|
+
/**
|
18
|
+
* The Button is a component which detects user interaction and triggers a corresponding event
|
19
|
+
*
|
20
|
+
* @category Components
|
21
|
+
*/
|
22
|
+
class AXSelectBoxComponent extends AXBaseSelectionDropdownMixin {
|
23
|
+
_elementRef;
|
24
|
+
_cdr;
|
25
|
+
_zone;
|
26
|
+
_platform;
|
27
|
+
popover;
|
28
|
+
_searchBox;
|
29
|
+
_target;
|
30
|
+
_popoverTitle;
|
31
|
+
_popoverWidth;
|
32
|
+
/**
|
33
|
+
* Defines the clearButton.
|
34
|
+
*/
|
35
|
+
clearButton = false;
|
36
|
+
/**
|
37
|
+
* Defines the checkbox.
|
38
|
+
*/
|
39
|
+
checkbox = false;
|
40
|
+
listContainer;
|
41
|
+
_contentEmptyTemplate;
|
42
|
+
get emptyTemplate() {
|
43
|
+
return this._contentEmptyTemplate;
|
44
|
+
}
|
45
|
+
_isActionSheet = false;
|
46
|
+
_forceFocus = false;
|
47
|
+
/**
|
48
|
+
* @ignore
|
49
|
+
*/
|
50
|
+
constructor(_elementRef, _cdr, _zone, _platform) {
|
51
|
+
super(_elementRef, _cdr);
|
52
|
+
this._elementRef = _elementRef;
|
53
|
+
this._cdr = _cdr;
|
54
|
+
this._zone = _zone;
|
55
|
+
this._platform = _platform;
|
56
|
+
this._isActionSheet = this._platform.is('SM');
|
57
|
+
this._platform.resize.subscribe(() => {
|
58
|
+
this._isActionSheet = this._platform.is('SM');
|
59
|
+
this.popover.dispose();
|
60
|
+
this._detectPopupSize();
|
61
|
+
});
|
62
|
+
}
|
63
|
+
_handleArrowClickEvent(e) {
|
64
|
+
e.stopPropagation();
|
65
|
+
// e.nativeEvent.stopPropagation();
|
66
|
+
this.toggle();
|
67
|
+
}
|
68
|
+
_handleInputClickEvent(e) {
|
69
|
+
e.stopPropagation();
|
70
|
+
this.toggle();
|
71
|
+
}
|
72
|
+
onInit() {
|
73
|
+
super.onInit();
|
74
|
+
this._target = this._elementRef.nativeElement;
|
75
|
+
this._updatePopupTitle();
|
76
|
+
}
|
77
|
+
onViewInit() {
|
78
|
+
super.onViewInit();
|
79
|
+
this._detectPopupSize();
|
80
|
+
}
|
81
|
+
refresh() {
|
82
|
+
this.value = null;
|
83
|
+
super.refresh();
|
84
|
+
}
|
85
|
+
_updatePopupTitle() {
|
86
|
+
const count = this.selectedItems?.length || 0;
|
87
|
+
//this._popoverTitle = count > 1 ? `(${count}) items selected` : (this.placeholder || AXTranslator.get('selectbox.popover.title'));
|
88
|
+
this._popoverTitle =
|
89
|
+
this.placeholder || AXTranslator.get('selectbox.popover.title');
|
90
|
+
}
|
91
|
+
_detectPopupSize() {
|
92
|
+
this._popoverWidth = this._isActionSheet ? 0 : this._target.offsetWidth;
|
93
|
+
}
|
94
|
+
_handleOnItemClick(e, item) {
|
95
|
+
if (this.isItemDisabled(item)) {
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
if (!this.multiple)
|
99
|
+
this.close();
|
100
|
+
this.toggleSelect(item);
|
101
|
+
this._cdr.detectChanges();
|
102
|
+
}
|
103
|
+
_handleListScroll(e) {
|
104
|
+
const list = e.target;
|
105
|
+
if (list.scrollTop < list.scrollHeight - list.clientHeight) {
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
this._fetchData();
|
109
|
+
}
|
110
|
+
_checkForLoadData() {
|
111
|
+
const list = this.listContainer.nativeElement;
|
112
|
+
if (this.loadedCount < this.totalCount &&
|
113
|
+
list.scrollHeight < list.parentElement.clientHeight * 1.5) {
|
114
|
+
this._fetchData();
|
115
|
+
}
|
116
|
+
}
|
117
|
+
_onDataLoaded() {
|
118
|
+
if (this.popover.isOpen) {
|
119
|
+
setTimeout(() => {
|
120
|
+
this._checkForLoadData();
|
121
|
+
this.popover.updatePosition();
|
122
|
+
if (this._forceFocus) {
|
123
|
+
this._focusSelectedItem();
|
124
|
+
this._forceFocus = false;
|
125
|
+
}
|
126
|
+
this._focusSearchBox();
|
127
|
+
}, 100);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
_onValueChanged(oldValue, newValue) {
|
131
|
+
super._onValueChanged(oldValue, newValue);
|
132
|
+
}
|
133
|
+
_handleOnRemoveItemClick(e, item) {
|
134
|
+
this.unselectItems(item);
|
135
|
+
e.stopPropagation();
|
136
|
+
}
|
137
|
+
_handleBadgeRemove(e, item) {
|
138
|
+
this.unselectItems(item);
|
139
|
+
e.stopPropagation();
|
140
|
+
this.close();
|
141
|
+
}
|
142
|
+
_handleKeydown(e) {
|
143
|
+
const isLetter = new RegExp(/[a-zA-Z0-9\-]/).test(String.fromCharCode(e.keyCode));
|
144
|
+
if (e.code === 'Backspace' &&
|
145
|
+
e.type === 'keydown' &&
|
146
|
+
((this.allowNull === true && this.selectedItems.length > 0) ||
|
147
|
+
(this.allowNull !== true && this.selectedItems.length > 1))) {
|
148
|
+
this.isUserInput = true;
|
149
|
+
this.unselectItems(this.selectedItems.pop());
|
150
|
+
e.preventDefault();
|
151
|
+
return;
|
152
|
+
}
|
153
|
+
else if ((e.code === 'ArrowDown' || e.code === 'ArrowUp' || e.code === 'Space') &&
|
154
|
+
!this.popover.isOpen &&
|
155
|
+
e.type === 'keydown') {
|
156
|
+
if (this.multiple) {
|
157
|
+
this.open();
|
158
|
+
}
|
159
|
+
else {
|
160
|
+
this.isUserInput = true;
|
161
|
+
if (e.ctrlKey || e.code === 'Space') {
|
162
|
+
this.open();
|
163
|
+
}
|
164
|
+
else {
|
165
|
+
this._selectedItemByNav(e.key === 'ArrowDown' ? 1 : -1);
|
166
|
+
}
|
167
|
+
}
|
168
|
+
e.preventDefault();
|
169
|
+
return;
|
170
|
+
}
|
171
|
+
else if (isLetter) {
|
172
|
+
this.text = e.key;
|
173
|
+
this.open();
|
174
|
+
e.preventDefault();
|
175
|
+
return;
|
176
|
+
}
|
177
|
+
}
|
178
|
+
_handlePopoverKeydown(e) {
|
179
|
+
if (e.target.tagName == 'INPUT' &&
|
180
|
+
['Space', 'Backspace'].includes(e.code))
|
181
|
+
return;
|
182
|
+
if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
|
183
|
+
this.displayItems.length > 0) {
|
184
|
+
this.isUserInput = true;
|
185
|
+
this._focusItemByNav(e.key === 'ArrowDown' ? 1 : -1);
|
186
|
+
e.preventDefault();
|
187
|
+
}
|
188
|
+
else if (e.code === 'Backspace' &&
|
189
|
+
((this.allowNull === true && this.selectedItems.length > 0) ||
|
190
|
+
(this.allowNull !== true && this.selectedItems.length > 1))) {
|
191
|
+
this.isUserInput = true;
|
192
|
+
this.unselectItems(this.selectedItems.pop());
|
193
|
+
e.preventDefault();
|
194
|
+
}
|
195
|
+
else if (e.code === 'Space' || e.code === 'Enter') {
|
196
|
+
e.preventDefault();
|
197
|
+
const focusedItemId = this.listContainer.nativeElement.querySelector('.ax-state-focus')?.dataset?.id;
|
198
|
+
const focusedItem = findLast(this.flatItems, [
|
199
|
+
this.valueField,
|
200
|
+
focusedItemId,
|
201
|
+
]);
|
202
|
+
if (focusedItem) {
|
203
|
+
if (this.isItemDisabled(focusedItem)) {
|
204
|
+
return;
|
205
|
+
}
|
206
|
+
if (this.multiple) {
|
207
|
+
this.isUserInput = true;
|
208
|
+
this.toggleSelect(focusedItem);
|
209
|
+
}
|
210
|
+
else {
|
211
|
+
this.isUserInput = true;
|
212
|
+
this.selectItems(focusedItem);
|
213
|
+
this.close();
|
214
|
+
}
|
215
|
+
}
|
216
|
+
}
|
217
|
+
else if (e.code === 'Tab') {
|
218
|
+
this.close();
|
219
|
+
e.preventDefault();
|
220
|
+
e.stopPropagation();
|
221
|
+
}
|
222
|
+
else if (e.key === 'Escape') {
|
223
|
+
this.close();
|
224
|
+
e.preventDefault();
|
225
|
+
e.stopPropagation();
|
226
|
+
}
|
227
|
+
}
|
228
|
+
async _handlePopupOnOpened(e) {
|
229
|
+
this._detectPopupSize();
|
230
|
+
this.popover.focus();
|
231
|
+
if (this.displayItems.length == 0) {
|
232
|
+
this._forceFocus = true;
|
233
|
+
this._fetchData();
|
234
|
+
}
|
235
|
+
else {
|
236
|
+
this._focusSelectedItem();
|
237
|
+
}
|
238
|
+
this._focusSearchBox();
|
239
|
+
}
|
240
|
+
_handlePopupOnClosed(e) {
|
241
|
+
this.focus();
|
242
|
+
}
|
243
|
+
_focusSearchBox() {
|
244
|
+
if (this._searchBox &&
|
245
|
+
(!this._isActionSheet || this._searchBox.searchExp)) {
|
246
|
+
this._searchBox.focus();
|
247
|
+
}
|
248
|
+
}
|
249
|
+
_focusItemByNav(sign) {
|
250
|
+
const list = this.listContainer.nativeElement;
|
251
|
+
const fn = s => list.querySelector(s);
|
252
|
+
const itemDiv = fn(`.ax-list-item.ax-state-focus`) ||
|
253
|
+
fn(`.ax-list-item.ax-state-selected`) ||
|
254
|
+
fn(`.ax-list-item`);
|
255
|
+
let next = (sign == 1 ? itemDiv.nextElementSibling : itemDiv.previousElementSibling);
|
256
|
+
if (next) {
|
257
|
+
this._focusItemElement(next);
|
258
|
+
}
|
259
|
+
else {
|
260
|
+
const parent = itemDiv.closest('.ax-list-item-group');
|
261
|
+
if (parent) {
|
262
|
+
const lis = (sign == 1 ? parent.nextElementSibling : parent.previousElementSibling)?.querySelectorAll('li');
|
263
|
+
const a = sign == 1 ? first(lis) : last(lis);
|
264
|
+
if (a) {
|
265
|
+
this._focusItemElement(a);
|
266
|
+
}
|
267
|
+
}
|
268
|
+
}
|
269
|
+
}
|
270
|
+
_focusSelectedItem() {
|
271
|
+
this._zone.runOutsideAngular(() => {
|
272
|
+
const list = this.listContainer.nativeElement;
|
273
|
+
const fn = s => list.querySelector(s);
|
274
|
+
const itemDiv = fn(`.ax-list-item.ax-state-selected`) || fn(`.ax-list-item`);
|
275
|
+
if (itemDiv) {
|
276
|
+
this._focusItemElement(itemDiv);
|
277
|
+
}
|
278
|
+
});
|
279
|
+
}
|
280
|
+
_focusItemElement(el) {
|
281
|
+
this._zone.runOutsideAngular(() => {
|
282
|
+
const list = this.listContainer.nativeElement;
|
283
|
+
list.querySelectorAll('.ax-list-item').forEach(c => {
|
284
|
+
if (c == el) {
|
285
|
+
c.classList.add('ax-state-focus');
|
286
|
+
el.scrollIntoView({ behavior: 'auto' });
|
287
|
+
}
|
288
|
+
else {
|
289
|
+
c.classList.remove('ax-state-focus');
|
290
|
+
}
|
291
|
+
});
|
292
|
+
if (!this._isActionSheet && this._searchBox)
|
293
|
+
this._searchBox.focus();
|
294
|
+
else
|
295
|
+
el.focus();
|
296
|
+
});
|
297
|
+
}
|
298
|
+
_selectedItemByNav(sign) {
|
299
|
+
const _last = last(this.selectedItems);
|
300
|
+
let i = 0;
|
301
|
+
if (_last) {
|
302
|
+
i = findLastIndex(this.flatItems, [
|
303
|
+
this.valueField,
|
304
|
+
_last[this.valueField],
|
305
|
+
]);
|
306
|
+
}
|
307
|
+
i += sign;
|
308
|
+
let next = nth(this.flatItems, i);
|
309
|
+
while (next?.children && next?.children.length) {
|
310
|
+
i += sign;
|
311
|
+
next = nth(this.flatItems, i);
|
312
|
+
}
|
313
|
+
if (next) {
|
314
|
+
this.selectItems(next);
|
315
|
+
}
|
316
|
+
else if (next == null && sign == 1) {
|
317
|
+
this._fetchData();
|
318
|
+
}
|
319
|
+
}
|
320
|
+
search(exp) {
|
321
|
+
this.empty();
|
322
|
+
this._forceFocus = true;
|
323
|
+
this._fetchData();
|
324
|
+
}
|
325
|
+
_fetchData() {
|
326
|
+
super._fetchData({ searchQuery: this._searchBox?.searchExp });
|
327
|
+
}
|
328
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXSelectBoxComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.AXPlatform }], target: i0.ɵɵFactoryTarget.Component });
|
329
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: { isOpen: "isOpen", fitParent: "fitParent", dropdownWidth: "dropdownWidth", position: "position", disabled: "disabled", tabIndex: "tabIndex", allowNull: "allowNull", value: "value", name: "name", checked: "checked", placeholder: "placeholder", maxLength: "maxLength", type: "type", autoComplete: "autoComplete", readonly: "readonly", pageSize: "pageSize", items: "items", valueField: "valueField", textField: "textField", disabledField: "disabledField", disabledCallback: "disabledCallback", multiple: "multiple", selectionMode: "selectionMode", clearButton: "clearButton", checkbox: "checkbox" }, outputs: { onOpened: "onOpened", onClosed: "onClosed", onBlur: "onBlur", onFocus: "onFocus", valueChange: "valueChange", onValueChanged: "onValueChanged" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, classAttribute: "ax-editor-container ax-drop-down" }, providers: [
|
330
|
+
{ provide: AXClosbaleComponent, useExisting: AXSelectBoxComponent },
|
331
|
+
{ provide: AXSearchableComponent, useExisting: AXSelectBoxComponent },
|
332
|
+
], queries: [{ propertyName: "_searchBox", first: true, predicate: AXSearchBoxComponent, descendants: true, static: true }, { propertyName: "_contentEmptyTemplate", first: true, predicate: ["emptyTemplate"], descendants: true }], viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true, static: true }, { propertyName: "listContainer", first: true, predicate: ["listContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-prefix\"> </ng-content>\r\n<div\r\n class=\"ax-dropdown-content\"\r\n [class.ax-state-disabled]=\"disabled\"\r\n (click)=\"_handleInputClickEvent($event)\">\r\n <div\r\n class=\"ax-select-box-selection\"\r\n [tabindex]=\"tabIndex\"\r\n (focus)=\"_emitOnFocusEvent($event)\"\r\n (blur)=\"_emitOnBlurEvent($event)\">\r\n <ng-container\r\n *ngIf=\"selectedItems && selectedItems.length; else showPlaceholder\">\r\n <ng-container\r\n *ngIf=\"\r\n !multiple;\r\n then singleSelectedTemplate;\r\n else multipleSelectedTemplate\r\n \"></ng-container>\r\n <ng-template #singleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #multipleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <div class=\"ax-select-multi-item\">\r\n {{ _getItemDisplayTextTemplte(item) }}\r\n <span\r\n class=\"ax-icon ax-icon-close\"\r\n (click)=\"_handleBadgeRemove($event, item)\">\r\n </span>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #showPlaceholder>\r\n <div class=\"ax-placeholder\" role=\"textbox\" area-readonly=\"true\">\r\n {{ placeholder }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n<ax-button\r\n color=\"light\"\r\n look=\"blank\"\r\n (onClick)=\"clear()\"\r\n [tabIndex]=\"-1\"\r\n *ngIf=\"value && clearButton && !(disabled || readonly)\">\r\n <ax-icon icon=\"ax-icon ax-icon-close\"></ax-icon>\r\n</ax-button>\r\n<button\r\n [disabled]=\"disabled\"\r\n [tabIndex]=\"-1\"\r\n class=\"ax-editor-control\"\r\n (click)=\"_handleArrowClickEvent($event)\">\r\n <ng-container *ngIf=\"isLoading && !this.popover.isOpen; else iconTemplate\">\r\n <ax-loading type=\"spinner\"></ax-loading>\r\n </ng-container>\r\n <ng-template #iconTemplate>\r\n <span\r\n class=\"ax-icon ax-icon-chevron-left ax-transition-all\"\r\n [ngClass]=\"{\r\n '-ax-rotation-90': !isOpen,\r\n 'ax-rotation-90': isOpen\r\n }\"></span>\r\n </ng-template>\r\n</button>\r\n<ng-content select=\"ax-validation-rule\"> </ng-content>\r\n<ng-content select=\"ax-suffix\"> </ng-content>\r\n<ax-popover\r\n [target]=\"_target\"\r\n [position]=\"position\"\r\n [openTrigger]=\"'manual'\"\r\n [closeTrigger]=\"'clickout'\"\r\n [adaptivityEnabled]=\"true\"\r\n (onOpened)=\"_handlePopupOnOpened($event)\"\r\n (onClosed)=\"_handlePopupOnClosed($event)\">\r\n <div\r\n class=\"ax-overlay-pane\"\r\n (keydown)=\"_handlePopoverKeydown($event)\"\r\n tabindex=\"0\"\r\n aria-modal=\"true\"\r\n cdkTrapFocus\r\n [class.ax-overlay-actionsheet]=\"_isActionSheet\"\r\n [class.ax-full]=\"_searchBox || isLazy\"\r\n [style.min-width.px]=\"_popoverWidth\">\r\n <div class=\"ax-list\">\r\n <ax-header *ngIf=\"_isActionSheet\">\r\n <ax-title>{{ _popoverTitle }}</ax-title>\r\n <ax-close-button\r\n class=\"ax-icon\"\r\n [icon]=\"\r\n multiple ? 'ax-icon-done !ax-text-primary-500' : 'ax-icon-close'\r\n \"></ax-close-button>\r\n </ax-header>\r\n <div\r\n class=\"ax-search-box-container\"\r\n [class.ax-state-hidden]=\"!_searchBox\"\r\n [cdkTrapFocus]=\"_searchBox != null\">\r\n <ng-content select=\"ax-search-box\"></ng-content>\r\n </div>\r\n <div\r\n class=\"ax-content ax-list-items-container ax-default\"\r\n (scroll)=\"_handleListScroll($event)\"\r\n #listContainer>\r\n <ng-container *ngIf=\"displayItems.length; else tmpEmpty\">\r\n <ul>\r\n <ng-container\r\n *ngTemplateOutlet=\"tmpTree; context: { list: displayItems }\">\r\n </ng-container>\r\n <ng-template #tmpTree let-list=\"list\">\r\n <ng-container\r\n *ngFor=\"\r\n let item of list;\r\n let i = index;\r\n trackBy: _trackByFunction\r\n \">\r\n <ng-container *ngIf=\"itemTemplate; else defualtTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: { $implicit: item, direction: direction }\r\n \">\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-template #defualtTemplate>\r\n <ng-container *ngIf=\"item.children?.length > 0; else tmpItem\">\r\n <li\r\n class=\"ax-list-item-group\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <ul *ngIf=\"item.children?.length > 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tmpTree;\r\n context: { list: item.children }\r\n \">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n <ng-template #tmpItem>\r\n <ng-container *ngIf=\"!multiple; else multipleTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item)\"></span>\r\n </li>\r\n </ng-container>\r\n <ng-template #multipleTemplate>\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [class.ax-state-checkbox]=\"checkbox\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span>\r\n <input\r\n class=\"ax-checkbox\"\r\n type=\"checkbox\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n *ngIf=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n [disabled]=\"isItemDisabled(item)\" />\r\n <span class=\"ax-checkbox-label\">{{\r\n _getItemDisplayTextTemplte(item)\r\n }}</span>\r\n </span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item) && !checkbox\"></span>\r\n </li>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-container *ngIf=\"loadingTemplate; else elseLoadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseLoadingTemplate>\r\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\r\n <ax-loading\r\n text=\"{{ 'layout.loading.text' | trans }}\"></ax-loading>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #tmpEmpty>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngIf=\"emptyTemplate; else elseEmptyTemplate\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseEmptyTemplate>\r\n <div\r\n class=\"ax-flex ax-items-center ax-justify-center ax-p-4\"\r\n [innerHTML]=\"\r\n 'common.no-result-for'\r\n | trans\r\n : {\r\n exp: this._searchBox ? this._searchBox.searchExp : ''\r\n }\r\n \"></div>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <!-- <div class=\"ax-list-items-container ax-vertical ax-default\" [class.ax-full]=\"_isMobile\"\r\n >\r\n \r\n </div> -->\r\n <!-- <div class=\"ax-footer\">footer</div> -->\r\n </div>\r\n </div>\r\n</ax-popover>\r\n", styles: ["ax-select-box .ax-select-multi-item{display:flex;align-items:center;padding:.25rem .5rem;background-color:rgba(var(--ax-color-on-surface));border-radius:var(--ax-rounded-border-default);margin-inline-end:.5rem}ax-select-box .ax-select-multi-item .ax-icon-close{cursor:pointer;margin-inline-start:.5rem}ax-select-box .ax-select-box-selection{display:flex;justify-content:center;align-items:center;outline-color:transparent;padding:0 .5rem;outline:transparent;-webkit-user-select:none;user-select:none}ax-select-box .ax-select-box-selection .ax-selectbox-input{opacity:0;width:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.AXDecoratorHeaderComponent, selector: "ax-header" }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorTitleComponent, selector: "ax-title" }, { kind: "component", type: i3.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["target", "position", "openTrigger", "closeTrigger", "hasBackdrop", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange"] }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "text"], outputs: ["visibleChange"] }, { kind: "directive", type: i7.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "trans" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
333
|
+
}
|
334
|
+
export { AXSelectBoxComponent };
|
335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXSelectBoxComponent, decorators: [{
|
336
|
+
type: Component,
|
337
|
+
args: [{ selector: 'ax-select-box', inputs: [
|
338
|
+
'isOpen',
|
339
|
+
'fitParent',
|
340
|
+
'dropdownWidth',
|
341
|
+
'position',
|
342
|
+
'disabled',
|
343
|
+
'tabIndex',
|
344
|
+
'allowNull',
|
345
|
+
'value',
|
346
|
+
'name',
|
347
|
+
'checked',
|
348
|
+
'placeholder',
|
349
|
+
'maxLength',
|
350
|
+
'type',
|
351
|
+
'autoComplete',
|
352
|
+
'readonly',
|
353
|
+
'pageSize',
|
354
|
+
'items',
|
355
|
+
'valueField',
|
356
|
+
'textField',
|
357
|
+
'disabledField',
|
358
|
+
'disabledCallback',
|
359
|
+
'multiple',
|
360
|
+
'selectionMode',
|
361
|
+
], outputs: [
|
362
|
+
'onOpened',
|
363
|
+
'onClosed',
|
364
|
+
'onBlur',
|
365
|
+
'onFocus',
|
366
|
+
'valueChange',
|
367
|
+
'onValueChanged',
|
368
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
369
|
+
{ provide: AXClosbaleComponent, useExisting: AXSelectBoxComponent },
|
370
|
+
{ provide: AXSearchableComponent, useExisting: AXSelectBoxComponent },
|
371
|
+
], host: { class: 'ax-editor-container ax-drop-down' }, template: "<ng-content select=\"ax-prefix\"> </ng-content>\r\n<div\r\n class=\"ax-dropdown-content\"\r\n [class.ax-state-disabled]=\"disabled\"\r\n (click)=\"_handleInputClickEvent($event)\">\r\n <div\r\n class=\"ax-select-box-selection\"\r\n [tabindex]=\"tabIndex\"\r\n (focus)=\"_emitOnFocusEvent($event)\"\r\n (blur)=\"_emitOnBlurEvent($event)\">\r\n <ng-container\r\n *ngIf=\"selectedItems && selectedItems.length; else showPlaceholder\">\r\n <ng-container\r\n *ngIf=\"\r\n !multiple;\r\n then singleSelectedTemplate;\r\n else multipleSelectedTemplate\r\n \"></ng-container>\r\n <ng-template #singleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #multipleSelectedTemplate>\r\n <ng-container *ngFor=\"let item of selectedItems\">\r\n <div class=\"ax-select-multi-item\">\r\n {{ _getItemDisplayTextTemplte(item) }}\r\n <span\r\n class=\"ax-icon ax-icon-close\"\r\n (click)=\"_handleBadgeRemove($event, item)\">\r\n </span>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #showPlaceholder>\r\n <div class=\"ax-placeholder\" role=\"textbox\" area-readonly=\"true\">\r\n {{ placeholder }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n<ax-button\r\n color=\"light\"\r\n look=\"blank\"\r\n (onClick)=\"clear()\"\r\n [tabIndex]=\"-1\"\r\n *ngIf=\"value && clearButton && !(disabled || readonly)\">\r\n <ax-icon icon=\"ax-icon ax-icon-close\"></ax-icon>\r\n</ax-button>\r\n<button\r\n [disabled]=\"disabled\"\r\n [tabIndex]=\"-1\"\r\n class=\"ax-editor-control\"\r\n (click)=\"_handleArrowClickEvent($event)\">\r\n <ng-container *ngIf=\"isLoading && !this.popover.isOpen; else iconTemplate\">\r\n <ax-loading type=\"spinner\"></ax-loading>\r\n </ng-container>\r\n <ng-template #iconTemplate>\r\n <span\r\n class=\"ax-icon ax-icon-chevron-left ax-transition-all\"\r\n [ngClass]=\"{\r\n '-ax-rotation-90': !isOpen,\r\n 'ax-rotation-90': isOpen\r\n }\"></span>\r\n </ng-template>\r\n</button>\r\n<ng-content select=\"ax-validation-rule\"> </ng-content>\r\n<ng-content select=\"ax-suffix\"> </ng-content>\r\n<ax-popover\r\n [target]=\"_target\"\r\n [position]=\"position\"\r\n [openTrigger]=\"'manual'\"\r\n [closeTrigger]=\"'clickout'\"\r\n [adaptivityEnabled]=\"true\"\r\n (onOpened)=\"_handlePopupOnOpened($event)\"\r\n (onClosed)=\"_handlePopupOnClosed($event)\">\r\n <div\r\n class=\"ax-overlay-pane\"\r\n (keydown)=\"_handlePopoverKeydown($event)\"\r\n tabindex=\"0\"\r\n aria-modal=\"true\"\r\n cdkTrapFocus\r\n [class.ax-overlay-actionsheet]=\"_isActionSheet\"\r\n [class.ax-full]=\"_searchBox || isLazy\"\r\n [style.min-width.px]=\"_popoverWidth\">\r\n <div class=\"ax-list\">\r\n <ax-header *ngIf=\"_isActionSheet\">\r\n <ax-title>{{ _popoverTitle }}</ax-title>\r\n <ax-close-button\r\n class=\"ax-icon\"\r\n [icon]=\"\r\n multiple ? 'ax-icon-done !ax-text-primary-500' : 'ax-icon-close'\r\n \"></ax-close-button>\r\n </ax-header>\r\n <div\r\n class=\"ax-search-box-container\"\r\n [class.ax-state-hidden]=\"!_searchBox\"\r\n [cdkTrapFocus]=\"_searchBox != null\">\r\n <ng-content select=\"ax-search-box\"></ng-content>\r\n </div>\r\n <div\r\n class=\"ax-content ax-list-items-container ax-default\"\r\n (scroll)=\"_handleListScroll($event)\"\r\n #listContainer>\r\n <ng-container *ngIf=\"displayItems.length; else tmpEmpty\">\r\n <ul>\r\n <ng-container\r\n *ngTemplateOutlet=\"tmpTree; context: { list: displayItems }\">\r\n </ng-container>\r\n <ng-template #tmpTree let-list=\"list\">\r\n <ng-container\r\n *ngFor=\"\r\n let item of list;\r\n let i = index;\r\n trackBy: _trackByFunction\r\n \">\r\n <ng-container *ngIf=\"itemTemplate; else defualtTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: { $implicit: item, direction: direction }\r\n \">\r\n </ng-container>\r\n </li>\r\n </ng-container>\r\n <ng-template #defualtTemplate>\r\n <ng-container *ngIf=\"item.children?.length > 0; else tmpItem\">\r\n <li\r\n class=\"ax-list-item-group\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <ul *ngIf=\"item.children?.length > 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tmpTree;\r\n context: { list: item.children }\r\n \">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n <ng-template #tmpItem>\r\n <ng-container *ngIf=\"!multiple; else multipleTemplate\">\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span> {{ _getItemDisplayTextTemplte(item) }}</span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item)\"></span>\r\n </li>\r\n </ng-container>\r\n <ng-template #multipleTemplate>\r\n <li\r\n class=\"ax-list-item\"\r\n [class.ax-state-selected]=\"isItemSelected(item)\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n [class.ax-state-checkbox]=\"checkbox\"\r\n [attr.tabindex]=\"i\"\r\n (click)=\"_handleOnItemClick($event, item)\"\r\n [attr.data-id]=\"item[this.valueField]\">\r\n <span>\r\n <input\r\n class=\"ax-checkbox\"\r\n type=\"checkbox\"\r\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\r\n *ngIf=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n [disabled]=\"isItemDisabled(item)\" />\r\n <span class=\"ax-checkbox-label\">{{\r\n _getItemDisplayTextTemplte(item)\r\n }}</span>\r\n </span>\r\n <span\r\n class=\"ax-icon ax-icon-done ax-selected-icon\"\r\n *ngIf=\"isItemSelected(item) && !checkbox\"></span>\r\n </li>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngIf=\"isLoading\">\r\n <ng-container *ngIf=\"loadingTemplate; else elseLoadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseLoadingTemplate>\r\n <div class=\"ax-flex ax-items-center ax-justify-center ax-p-4\">\r\n <ax-loading\r\n text=\"{{ 'layout.loading.text' | trans }}\"></ax-loading>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #tmpEmpty>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <ng-container *ngIf=\"emptyTemplate; else elseEmptyTemplate\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"> </ng-container>\r\n </ng-container>\r\n <ng-template #elseEmptyTemplate>\r\n <div\r\n class=\"ax-flex ax-items-center ax-justify-center ax-p-4\"\r\n [innerHTML]=\"\r\n 'common.no-result-for'\r\n | trans\r\n : {\r\n exp: this._searchBox ? this._searchBox.searchExp : ''\r\n }\r\n \"></div>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <!-- <div class=\"ax-list-items-container ax-vertical ax-default\" [class.ax-full]=\"_isMobile\"\r\n >\r\n \r\n </div> -->\r\n <!-- <div class=\"ax-footer\">footer</div> -->\r\n </div>\r\n </div>\r\n</ax-popover>\r\n", styles: ["ax-select-box .ax-select-multi-item{display:flex;align-items:center;padding:.25rem .5rem;background-color:rgba(var(--ax-color-on-surface));border-radius:var(--ax-rounded-border-default);margin-inline-end:.5rem}ax-select-box .ax-select-multi-item .ax-icon-close{cursor:pointer;margin-inline-start:.5rem}ax-select-box .ax-select-box-selection{display:flex;justify-content:center;align-items:center;outline-color:transparent;padding:0 .5rem;outline:transparent;-webkit-user-select:none;user-select:none}ax-select-box .ax-select-box-selection .ax-selectbox-input{opacity:0;width:0}\n"] }]
|
372
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.AXPlatform }]; }, propDecorators: { popover: [{
|
373
|
+
type: ViewChild,
|
374
|
+
args: [AXPopoverComponent, { static: true }]
|
375
|
+
}], _searchBox: [{
|
376
|
+
type: ContentChild,
|
377
|
+
args: [AXSearchBoxComponent, { static: true }]
|
378
|
+
}], clearButton: [{
|
379
|
+
type: Input
|
380
|
+
}], checkbox: [{
|
381
|
+
type: Input
|
382
|
+
}], listContainer: [{
|
383
|
+
type: ViewChild,
|
384
|
+
args: ['listContainer', { static: true }]
|
385
|
+
}], _contentEmptyTemplate: [{
|
386
|
+
type: ContentChild,
|
387
|
+
args: ['emptyTemplate']
|
388
|
+
}], _handleKeydown: [{
|
389
|
+
type: HostListener,
|
390
|
+
args: ['keydown', ['$event']]
|
391
|
+
}] } });
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NlbGVjdC1ib3gvc3JjL3NlbGVjdGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94L3NyYy9zZWxlY3Rib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEUsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQUV4RTs7OztHQUlHO0FBQ0gsTUE2Q2Esb0JBQXFCLFNBQVEsNEJBQTRCO0lBdUMxRDtJQUNBO0lBQ0E7SUFDQTtJQXhDVixPQUFPLENBQXFCO0lBRzVCLFVBQVUsQ0FBdUI7SUFFakMsT0FBTyxDQUFpQjtJQUN4QixhQUFhLENBQVM7SUFDdEIsYUFBYSxDQUFTO0lBRXRCOztPQUVHO0lBRUgsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUU3Qjs7T0FFRztJ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QUFFO2dCQUkvQyxVQUFVO3NCQURULFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVdwRCxXQUFXO3NCQURWLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQUlFLGFBQWE7c0JBRHBCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJcEMscUJBQXFCO3NCQUQ1QixZQUFZO3VCQUFDLGVBQWU7Z0JBMkg3QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XHJcbmltcG9ydCB7IEFYVHJhbnNsYXRvciB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaW5kTGFzdCwgZmluZExhc3RJbmRleCwgZmlyc3QsIGxhc3QsIG50aCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7XHJcbiAgQVhDbGlja0V2ZW50LFxyXG4gIEFYQ2xvc2JhbGVDb21wb25lbnQsXHJcbiAgQVhTZWFyY2hhYmxlQ29tcG9uZW50LFxyXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xyXG5cclxuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xyXG5pbXBvcnQgeyBBWFNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWFyY2gtYm94JztcclxuaW1wb3J0IHsgQVhCYXNlU2VsZWN0aW9uRHJvcGRvd25NaXhpbiB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9taXhpbic7XHJcblxyXG4vKipcclxuICogVGhlIEJ1dHRvbiBpcyBhIGNvbXBvbmVudCB3aGljaCBkZXRlY3RzIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHRyaWdnZXJzIGEgY29ycmVzcG9uZGluZyBldmVudFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdheC1zZWxlY3QtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3Rib3guY29tcG9uZW50LnNjc3MnXSxcclxuICBpbnB1dHM6IFtcclxuICAgICdpc09wZW4nLFxyXG4gICAgJ2ZpdFBhcmVudCcsXHJcbiAgICAnZHJvcGRvd25XaWR0aCcsXHJcbiAgICAncG9zaXRpb24nLFxyXG4gICAgJ2Rpc2FibGVkJyxcclxuICAgICd0YWJJbmRleCcsXHJcbiAgICAnYWxsb3dOdWxsJyxcclxuICAgICd2YWx1ZScsXHJcbiAgICAnbmFtZScsXHJcbiAgICAnY2hlY2tlZCcsXHJcbiAgICAncGxhY2Vob2xkZXInLFxyXG4gICAgJ21heExlbmd0aCcsXHJcbiAgICAndHlwZScsXHJcbiAgICAnYXV0b0NvbXBsZXRlJyxcclxuICAgICdyZWFkb25seScsXHJcbiAgICAncGFnZVNpemUnLFxyXG4gICAgJ2l0ZW1zJyxcclxuICAgICd2YWx1ZUZpZWxkJyxcclxuICAgICd0ZXh0RmllbGQnLFxyXG4gICAgJ2Rpc2FibGVkRmllbGQnLFxyXG4gICAgJ2Rpc2FibGVkQ2FsbGJhY2snLFxyXG4gICAgJ211bHRpcGxlJyxcclxuICAgICdzZWxlY3Rpb25Nb2RlJyxcclxuICBdLFxyXG4gIG91dHB1dHM6IFtcclxuICAgICdvbk9wZW5lZCcsXHJcbiAgICAnb25DbG9zZWQnLFxyXG4gICAgJ29uQmx1cicsXHJcbiAgICAnb25Gb2N1cycsXHJcbiAgICAndmFsdWVDaGFuZ2UnLFxyXG4gICAgJ29uVmFsdWVDaGFuZ2VkJyxcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7IHByb3ZpZGU6IEFYQ2xvc2JhbGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNlbGVjdEJveENvbXBvbmVudCB9LFxyXG4gICAgeyBwcm92aWRlOiBBWFNlYXJjaGFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNlbGVjdEJveENvbXBvbmVudCB9LFxyXG4gIF0sXHJcbiAgaG9zdDogeyBjbGFzczogJ2F4LWVkaXRvci1jb250YWluZXIgYXgtZHJvcC1kb3duJyB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnQgZXh0ZW5kcyBBWEJhc2VTZWxlY3Rpb25Ecm9wZG93bk1peGluIHtcclxuICBAVmlld0NoaWxkKEFYUG9wb3ZlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwb3BvdmVyOiBBWFBvcG92ZXJDb21wb25lbnQ7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQVhTZWFyY2hCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgX3NlYXJjaEJveDogQVhTZWFyY2hCb3hDb21wb25lbnQ7XHJcblxyXG4gIF90YXJnZXQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gIF9wb3BvdmVyVGl0bGU6IHN0cmluZztcclxuICBfcG9wb3ZlcldpZHRoOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqICBEZWZpbmVzIHRoZSBjbGVhckJ1dHRvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGNsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqICBEZWZpbmVzIHRoZSBjaGVja2JveC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGNoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2xpc3RDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgbGlzdENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2VtcHR5VGVtcGxhdGUnKVxyXG4gIHByaXZhdGUgX2NvbnRlbnRFbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBnZXQgZW1wdHlUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb250ZW50RW1wdHlUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIF9pc0FjdGlvblNoZWV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgX2ZvcmNlRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiAgQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm06IEFYUGxhdGZvcm1cclxuICApIHtcclxuICAgIHN1cGVyKF9lbGVtZW50UmVmLCBfY2RyKTtcclxuICAgIHRoaXMuX2lzQWN0aW9uU2hlZXQgPSB0aGlzLl9wbGF0Zm9ybS5pcygnU00nKTtcclxuICAgIHRoaXMuX3BsYXRmb3JtLnJlc2l6ZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9pc0FjdGlvblNoZWV0ID0gdGhpcy5fcGxhdGZvcm0uaXMoJ1NNJyk7XHJcbiAgICAgIHRoaXMucG9wb3Zlci5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMuX2RldGVjdFBvcHVwU2l6ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfaGFuZGxlQXJyb3dDbGlja0V2ZW50KGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBlLm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy50b2dnbGUoKTtcclxuICB9XHJcblxyXG4gIF9oYW5kbGVJbnB1dENsaWNrRXZlbnQoZTogTW91c2VFdmVudCkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuICBvbkluaXQoKSB7XHJcbiAgICBzdXBlci5vbkluaXQoKTtcclxuICAgIHRoaXMuX3RhcmdldCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLl91cGRhdGVQb3B1cFRpdGxlKCk7XHJcbiAgfVxyXG5cclxuICBvblZpZXdJbml0KCkge1xyXG4gICAgc3VwZXIub25WaWV3SW5pdCgpO1xyXG4gICAgdGhpcy5fZGV0ZWN0UG9wdXBTaXplKCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICBzdXBlci5yZWZyZXNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVQb3B1cFRpdGxlKCkge1xyXG4gICAgY29uc3QgY291bnQgPSB0aGlzLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCB8fCAwO1xyXG4gICAgLy90aGlzLl9wb3BvdmVyVGl0bGUgPSBjb3VudCA+IDEgPyBgKCR7Y291bnR9KSBpdGVtcyBzZWxlY3RlZGAgOiAodGhpcy5wbGFjZWhvbGRlciB8fCBBWFRyYW5zbGF0b3IuZ2V0KCdzZWxlY3Rib3gucG9wb3Zlci50aXRsZScpKTtcclxuICAgIHRoaXMuX3BvcG92ZXJUaXRsZSA9XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgfHwgQVhUcmFuc2xhdG9yLmdldCgnc2VsZWN0Ym94LnBvcG92ZXIudGl0bGUnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RldGVjdFBvcHVwU2l6ZSgpIHtcclxuICAgIHRoaXMuX3BvcG92ZXJXaWR0aCA9IHRoaXMuX2lzQWN0aW9uU2hlZXQgPyAwIDogdGhpcy5fdGFyZ2V0Lm9mZnNldFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZU9uSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoaXRlbSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB0aGlzLmNsb3NlKCk7XHJcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdChpdGVtKTtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBfaGFuZGxlTGlzdFNjcm9sbChlOiBFdmVudCkge1xyXG4gICAgY29uc3QgbGlzdCA9IGUudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaWYgKGxpc3Quc2Nyb2xsVG9wIDwgbGlzdC5zY3JvbGxIZWlnaHQgLSBsaXN0LmNsaWVudEhlaWdodCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mZXRjaERhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrRm9yTG9hZERhdGEoKSB7XHJcbiAgICBjb25zdCBsaXN0OiBhbnkgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2FkZWRDb3VudCA8IHRoaXMudG90YWxDb3VudCAmJlxyXG4gICAgICBsaXN0LnNjcm9sbEhlaWdodCA8IGxpc3QucGFyZW50RWxlbWVudC5jbGllbnRIZWlnaHQgKiAxLjVcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9mZXRjaERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9vbkRhdGFMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5wb3BvdmVyLmlzT3Blbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl9jaGVja0ZvckxvYWREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5wb3BvdmVyLnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZvcmNlRm9jdXMpIHtcclxuICAgICAgICAgIHRoaXMuX2ZvY3VzU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICAgICAgICB0aGlzLl9mb3JjZUZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZvY3VzU2VhcmNoQm94KCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfb25WYWx1ZUNoYW5nZWQob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgc3VwZXIuX29uVmFsdWVDaGFuZ2VkKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBfaGFuZGxlT25SZW1vdmVJdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0SXRlbXMoaXRlbSk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgX2hhbmRsZUJhZGdlUmVtb3ZlKGU6IE1vdXNlRXZlbnQsIGl0ZW0pIHtcclxuICAgIHRoaXMudW5zZWxlY3RJdGVtcyhpdGVtKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBfaGFuZGxlS2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBpc0xldHRlciA9IG5ldyBSZWdFeHAoL1thLXpBLVowLTlcXC1dLykudGVzdChcclxuICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpXHJcbiAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICBlLmNvZGUgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nICYmXHJcbiAgICAgICgodGhpcy5hbGxvd051bGwgPT09IHRydWUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgICAgKHRoaXMuYWxsb3dOdWxsICE9PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzVXNlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy51bnNlbGVjdEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKSk7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgfHwgZS5jb2RlID09PSAnQXJyb3dVcCcgfHwgZS5jb2RlID09PSAnU3BhY2UnKSAmJlxyXG4gICAgICAhdGhpcy5wb3BvdmVyLmlzT3BlbiAmJlxyXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJ1xyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc1VzZXJJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGUuY3RybEtleSB8fCBlLmNvZGUgPT09ICdTcGFjZScpIHtcclxuICAgICAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1CeU5hdihlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgdGhpcy50ZXh0ID0gZS5rZXk7XHJcbiAgICAgIHRoaXMub3BlbigpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9oYW5kbGVQb3BvdmVyS2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PSAnSU5QVVQnICYmXHJcbiAgICAgIFsnU3BhY2UnLCAnQmFja3NwYWNlJ10uaW5jbHVkZXMoZS5jb2RlKVxyXG4gICAgKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpZiAoXHJcbiAgICAgIChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiZcclxuICAgICAgdGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNVc2VySW5wdXQgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9mb2N1c0l0ZW1CeU5hdihlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBlLmNvZGUgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgICgodGhpcy5hbGxvd051bGwgPT09IHRydWUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgICAgKHRoaXMuYWxsb3dOdWxsICE9PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzVXNlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy51bnNlbGVjdEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKSk7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSBpZiAoZS5jb2RlID09PSAnU3BhY2UnIHx8IGUuY29kZSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGNvbnN0IGZvY3VzZWRJdGVtSWQgPVxyXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxyXG4gICAgICAgICAgJy5heC1zdGF0ZS1mb2N1cydcclxuICAgICAgICApPy5kYXRhc2V0Py5pZDtcclxuICAgICAgY29uc3QgZm9jdXNlZEl0ZW0gPSBmaW5kTGFzdCh0aGlzLmZsYXRJdGVtcywgW1xyXG4gICAgICAgIHRoaXMudmFsdWVGaWVsZCxcclxuICAgICAgICBmb2N1c2VkSXRlbUlkLFxyXG4gICAgICBdKTtcclxuICAgICAgaWYgKGZvY3VzZWRJdGVtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtRGlzYWJsZWQoZm9jdXNlZEl0ZW0pKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXNlcklucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0KGZvY3VzZWRJdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW1zKGZvY3VzZWRJdGVtKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZS5jb2RlID09PSAnVGFiJykge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgX2hhbmRsZVBvcHVwT25PcGVuZWQoZSkge1xyXG4gICAgdGhpcy5fZGV0ZWN0UG9wdXBTaXplKCk7XHJcbiAgICB0aGlzLnBvcG92ZXIuZm9jdXMoKTtcclxuICAgIGlmICh0aGlzLmRpc3BsYXlJdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLl9mb3JjZUZvY3VzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fZmV0Y2hEYXRhKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9mb2N1c1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZm9jdXNTZWFyY2hCb3goKTtcclxuICB9XHJcblxyXG4gIF9oYW5kbGVQb3B1cE9uQ2xvc2VkKGUpIHtcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZvY3VzU2VhcmNoQm94KCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9zZWFyY2hCb3ggJiZcclxuICAgICAgKCF0aGlzLl9pc0FjdGlvblNoZWV0IHx8IHRoaXMuX3NlYXJjaEJveC5zZWFyY2hFeHApXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fc2VhcmNoQm94LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb2N1c0l0ZW1CeU5hdihzaWduOiAtMSB8IDEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGZuID0gcyA9PiBsaXN0LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHMpO1xyXG4gICAgY29uc3QgaXRlbURpdjogYW55ID1cclxuICAgICAgZm4oYC5heC1saXN0LWl0ZW0uYXgtc3RhdGUtZm9jdXNgKSB8fFxyXG4gICAgICBmbihgLmF4LWxpc3QtaXRlbS5heC1zdGF0ZS1zZWxlY3RlZGApIHx8XHJcbiAgICAgIGZuKGAuYXgtbGlzdC1pdGVtYCk7XHJcbiAgICBsZXQgbmV4dCA9IChcclxuICAgICAgc2lnbiA9PSAxID8gaXRlbURpdi5uZXh0RWxlbWVudFNpYmxpbmcgOiBpdGVtRGl2LnByZXZpb3VzRWxlbWVudFNpYmxpbmdcclxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAobmV4dCkge1xyXG4gICAgICB0aGlzLl9mb2N1c0l0ZW1FbGVtZW50KG5leHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gaXRlbURpdi5jbG9zZXN0KCcuYXgtbGlzdC1pdGVtLWdyb3VwJyk7XHJcbiAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICBjb25zdCBsaXMgPSAoXHJcbiAgICAgICAgICBzaWduID09IDEgPyBwYXJlbnQubmV4dEVsZW1lbnRTaWJsaW5nIDogcGFyZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmdcclxuICAgICAgICApPy5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xyXG4gICAgICAgIGNvbnN0IGEgPSBzaWduID09IDEgPyBmaXJzdChsaXMpIDogbGFzdChsaXMpO1xyXG4gICAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgICB0aGlzLl9mb2N1c0l0ZW1FbGVtZW50KGEgYXMgYW55KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZvY3VzU2VsZWN0ZWRJdGVtKCkge1xyXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgZm4gPSBzID0+IGxpc3QucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4ocyk7XHJcbiAgICAgIGNvbnN0IGl0ZW1EaXYgPVxyXG4gICAgICAgIGZuKGAuYXgtbGlzdC1pdGVtLmF4LXN0YXRlLXNlbGVjdGVkYCkgfHwgZm4oYC5heC1saXN0LWl0ZW1gKTtcclxuICAgICAgaWYgKGl0ZW1EaXYpIHtcclxuICAgICAgICB0aGlzLl9mb2N1c0l0ZW1FbGVtZW50KGl0ZW1EaXYpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZvY3VzSXRlbUVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgY29uc3QgbGlzdCA9IHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBsaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJy5heC1saXN0LWl0ZW0nKS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgIGlmIChjID09IGVsKSB7XHJcbiAgICAgICAgICBjLmNsYXNzTGlzdC5hZGQoJ2F4LXN0YXRlLWZvY3VzJyk7XHJcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGMuY2xhc3NMaXN0LnJlbW92ZSgnYXgtc3RhdGUtZm9jdXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXRoaXMuX2lzQWN0aW9uU2hlZXQgJiYgdGhpcy5fc2VhcmNoQm94KSB0aGlzLl9zZWFyY2hCb3guZm9jdXMoKTtcclxuICAgICAgZWxzZSBlbC5mb2N1cygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1CeU5hdihzaWduOiAtMSB8IDEpOiB2b2lkIHtcclxuICAgIGNvbnN0IF9sYXN0OiBhbnkgPSBsYXN0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBpZiAoX2xhc3QpIHtcclxuICAgICAgaSA9IGZpbmRMYXN0SW5kZXgodGhpcy5mbGF0SXRlbXMsIFtcclxuICAgICAgICB0aGlzLnZhbHVlRmllbGQsXHJcbiAgICAgICAgX2xhc3RbdGhpcy52YWx1ZUZpZWxkXSxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICBpICs9IHNpZ247XHJcbiAgICBsZXQgbmV4dCA9IG50aDxhbnk+KHRoaXMuZmxhdEl0ZW1zLCBpKTtcclxuICAgIHdoaWxlIChuZXh0Py5jaGlsZHJlbiAmJiBuZXh0Py5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgaSArPSBzaWduO1xyXG4gICAgICBuZXh0ID0gbnRoPGFueT4odGhpcy5mbGF0SXRlbXMsIGkpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RJdGVtcyhuZXh0KTtcclxuICAgIH0gZWxzZSBpZiAobmV4dCA9PSBudWxsICYmIHNpZ24gPT0gMSkge1xyXG4gICAgICB0aGlzLl9mZXRjaERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlYXJjaChleHA6IHN0cmluZykge1xyXG4gICAgdGhpcy5lbXB0eSgpO1xyXG4gICAgdGhpcy5fZm9yY2VGb2N1cyA9IHRydWU7XHJcbiAgICB0aGlzLl9mZXRjaERhdGEoKTtcclxuICB9XHJcblxyXG4gIF9mZXRjaERhdGEoKSB7XHJcbiAgICBzdXBlci5fZmV0Y2hEYXRhKHsgc2VhcmNoUXVlcnk6IHRoaXMuX3NlYXJjaEJveD8uc2VhcmNoRXhwIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJheC1wcmVmaXhcIj4gPC9uZy1jb250ZW50PlxyXG48ZGl2XHJcbiAgY2xhc3M9XCJheC1kcm9wZG93bi1jb250ZW50XCJcclxuICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gIChjbGljayk9XCJfaGFuZGxlSW5wdXRDbGlja0V2ZW50KCRldmVudClcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImF4LXNlbGVjdC1ib3gtc2VsZWN0aW9uXCJcclxuICAgIFt0YWJpbmRleF09XCJ0YWJJbmRleFwiXHJcbiAgICAoZm9jdXMpPVwiX2VtaXRPbkZvY3VzRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJfZW1pdE9uQmx1ckV2ZW50KCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoOyBlbHNlIHNob3dQbGFjZWhvbGRlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICFtdWx0aXBsZTtcclxuICAgICAgICAgIHRoZW4gc2luZ2xlU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgICAgIGVsc2UgbXVsdGlwbGVTZWxlY3RlZFRlbXBsYXRlXHJcbiAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlU2VsZWN0ZWRUZW1wbGF0ZT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cclxuICAgICAgICAgIDxzcGFuPiB7eyBfZ2V0SXRlbURpc3BsYXlUZXh0VGVtcGx0ZShpdGVtKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZVNlbGVjdGVkVGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2VsZWN0LW11bHRpLWl0ZW1cIj5cclxuICAgICAgICAgICAge3sgX2dldEl0ZW1EaXNwbGF5VGV4dFRlbXBsdGUoaXRlbSkgfX1cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jbG9zZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVCYWRnZVJlbW92ZSgkZXZlbnQsIGl0ZW0pXCI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgI3Nob3dQbGFjZWhvbGRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cImF4LXBsYWNlaG9sZGVyXCIgcm9sZT1cInRleHRib3hcIiBhcmVhLXJlYWRvbmx5PVwidHJ1ZVwiPlxyXG4gICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxheC1idXR0b25cclxuICBjb2xvcj1cImxpZ2h0XCJcclxuICBsb29rPVwiYmxhbmtcIlxyXG4gIChvbkNsaWNrKT1cImNsZWFyKClcIlxyXG4gIFt0YWJJbmRleF09XCItMVwiXHJcbiAgKm5nSWY9XCJ2YWx1ZSAmJiBjbGVhckJ1dHRvbiAmJiAhKGRpc2FibGVkIHx8IHJlYWRvbmx5KVwiPlxyXG4gIDxheC1pY29uIGljb249XCJheC1pY29uIGF4LWljb24tY2xvc2VcIj48L2F4LWljb24+XHJcbjwvYXgtYnV0dG9uPlxyXG48YnV0dG9uXHJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICBbdGFiSW5kZXhdPVwiLTFcIlxyXG4gIGNsYXNzPVwiYXgtZWRpdG9yLWNvbnRyb2xcIlxyXG4gIChjbGljayk9XCJfaGFuZGxlQXJyb3dDbGlja0V2ZW50KCRldmVudClcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nICYmICF0aGlzLnBvcG92ZXIuaXNPcGVuOyBlbHNlIGljb25UZW1wbGF0ZVwiPlxyXG4gICAgPGF4LWxvYWRpbmcgdHlwZT1cInNwaW5uZXJcIj48L2F4LWxvYWRpbmc+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLXRlbXBsYXRlICNpY29uVGVtcGxhdGU+XHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnQgYXgtdHJhbnNpdGlvbi1hbGxcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJy1heC1yb3RhdGlvbi05MCc6ICFpc09wZW4sXHJcbiAgICAgICAgJ2F4LXJvdGF0aW9uLTkwJzogaXNPcGVuXHJcbiAgICAgIH1cIj48L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9idXR0b24+XHJcbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXZhbGlkYXRpb24tcnVsZVwiPiA8L25nLWNvbnRlbnQ+XHJcbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LXN1ZmZpeFwiPiA8L25nLWNvbnRlbnQ+XHJcbjxheC1wb3BvdmVyXHJcbiAgW3RhcmdldF09XCJfdGFyZ2V0XCJcclxuICBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxyXG4gIFtvcGVuVHJpZ2dlcl09XCInbWFudWFsJ1wiXHJcbiAgW2Nsb3NlVHJpZ2dlcl09XCInY2xpY2tvdXQnXCJcclxuICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgKG9uT3BlbmVkKT1cIl9oYW5kbGVQb3B1cE9uT3BlbmVkKCRldmVudClcIlxyXG4gIChvbkNsb3NlZCk9XCJfaGFuZGxlUG9wdXBPbkNsb3NlZCgkZXZlbnQpXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJheC1vdmVybGF5LXBhbmVcIlxyXG4gICAgKGtleWRvd24pPVwiX2hhbmRsZVBvcG92ZXJLZXlkb3duKCRldmVudClcIlxyXG4gICAgdGFiaW5kZXg9XCIwXCJcclxuICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcclxuICAgIGNka1RyYXBGb2N1c1xyXG4gICAgW2NsYXNzLmF4LW92ZXJsYXktYWN0aW9uc2hlZXRdPVwiX2lzQWN0aW9uU2hlZXRcIlxyXG4gICAgW2NsYXNzLmF4LWZ1bGxdPVwiX3NlYXJjaEJveCB8fCBpc0xhenlcIlxyXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJfcG9wb3ZlcldpZHRoXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXgtbGlzdFwiPlxyXG4gICAgICA8YXgtaGVhZGVyICpuZ0lmPVwiX2lzQWN0aW9uU2hlZXRcIj5cclxuICAgICAgICA8YXgtdGl0bGU+e3sgX3BvcG92ZXJUaXRsZSB9fTwvYXgtdGl0bGU+XHJcbiAgICAgICAgPGF4LWNsb3NlLWJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJheC1pY29uXCJcclxuICAgICAgICAgIFtpY29uXT1cIlxyXG4gICAgICAgICAgICBtdWx0aXBsZSA/ICdheC1pY29uLWRvbmUgIWF4LXRleHQtcHJpbWFyeS01MDAnIDogJ2F4LWljb24tY2xvc2UnXHJcbiAgICAgICAgICBcIj48L2F4LWNsb3NlLWJ1dHRvbj5cclxuICAgICAgPC9heC1oZWFkZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImF4LXNlYXJjaC1ib3gtY29udGFpbmVyXCJcclxuICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaGlkZGVuXT1cIiFfc2VhcmNoQm94XCJcclxuICAgICAgICBbY2RrVHJhcEZvY3VzXT1cIl9zZWFyY2hCb3ggIT0gbnVsbFwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXNlYXJjaC1ib3hcIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJheC1jb250ZW50IGF4LWxpc3QtaXRlbXMtY29udGFpbmVyIGF4LWRlZmF1bHRcIlxyXG4gICAgICAgIChzY3JvbGwpPVwiX2hhbmRsZUxpc3RTY3JvbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgI2xpc3RDb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlJdGVtcy5sZW5ndGg7IGVsc2UgdG1wRW1wdHlcIj5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidG1wVHJlZTsgY29udGV4dDogeyBsaXN0OiBkaXNwbGF5SXRlbXMgfVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0bXBUcmVlIGxldC1saXN0PVwibGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBsaXN0O1xyXG4gICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeUZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGU7IGVsc2UgZGVmdWFsdFRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtbGlzdC1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU9uSXRlbUNsaWNrKCRldmVudCwgaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaWRdPVwiaXRlbVt0aGlzLnZhbHVlRmllbGRdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmdWFsdFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMDsgZWxzZSB0bXBJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWxpc3QtaXRlbS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cIml0ZW1bdGhpcy52YWx1ZUZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IF9nZXRJdGVtRGlzcGxheVRleHRUZW1wbHRlKGl0ZW0pIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFRyZWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGxpc3Q6IGl0ZW0uY2hpbGRyZW4gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG1wSXRlbT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW11bHRpcGxlOyBlbHNlIG11bHRpcGxlVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWxpc3QtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU9uSXRlbUNsaWNrKCRldmVudCwgaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cIml0ZW1bdGhpcy52YWx1ZUZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgX2dldEl0ZW1EaXNwbGF5VGV4dFRlbXBsdGUoaXRlbSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tZG9uZSBheC1zZWxlY3RlZC1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSXRlbVNlbGVjdGVkKGl0ZW0pXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI211bHRpcGxlVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1saXN0LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtY2hlY2tib3hdPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVPbkl0ZW1DbGljaygkZXZlbnQsIGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJpdGVtW3RoaXMudmFsdWVGaWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaXRlbSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtY2hlY2tib3gtbGFiZWxcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2dldEl0ZW1EaXNwbGF5VGV4dFRlbXBsdGUoaXRlbSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWRvbmUgYXgtc2VsZWN0ZWQtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0l0ZW1TZWxlY3RlZChpdGVtKSAmJiAhY2hlY2tib3hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1RlbXBsYXRlOyBlbHNlIGVsc2VMb2FkaW5nVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdUZW1wbGF0ZVwiPiA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlTG9hZGluZ1RlbXBsYXRlPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1jZW50ZXIgYXgtcC00XCI+XHJcbiAgICAgICAgICAgICAgPGF4LWxvYWRpbmdcclxuICAgICAgICAgICAgICAgIHRleHQ9XCJ7eyAnbGF5b3V0LmxvYWRpbmcudGV4dCcgfCB0cmFucyB9fVwiPjwvYXgtbG9hZGluZz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdG1wRW1wdHk+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZTsgZWxzZSBlbHNlRW1wdHlUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVRlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlRW1wdHlUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktY2VudGVyIGF4LXAtNFwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxyXG4gICAgICAgICAgICAgICAgICAnY29tbW9uLm5vLXJlc3VsdC1mb3InXHJcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwOiB0aGlzLl9zZWFyY2hCb3ggPyB0aGlzLl9zZWFyY2hCb3guc2VhcmNoRXhwIDogJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXgtbGlzdC1pdGVtcy1jb250YWluZXIgYXgtdmVydGljYWwgYXgtZGVmYXVsdFwiIFtjbGFzcy5heC1mdWxsXT1cIl9pc01vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF4LWZvb3RlclwiPmZvb3RlcjwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2F4LXBvcG92ZXI+XHJcbiJdfQ==
|