pdm-ui-kit 0.4.2 → 1.0.0
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/accordion/accordion.module.d.ts +8 -0
- package/accordion/index.d.ts +2 -0
- package/accordion/index.mjs +2 -0
- package/alert/alert.module.d.ts +9 -0
- package/alert/index.d.ts +3 -0
- package/alert/index.mjs +3 -0
- package/aspect-ratio/aspect-ratio.module.d.ts +8 -0
- package/aspect-ratio/index.d.ts +2 -0
- package/aspect-ratio/index.mjs +2 -0
- package/avatar/avatar.module.d.ts +8 -0
- package/avatar/index.d.ts +2 -0
- package/avatar/index.mjs +2 -0
- package/badge/badge.module.d.ts +8 -0
- package/badge/index.d.ts +2 -0
- package/badge/index.mjs +2 -0
- package/breadcrumb/breadcrumb.module.d.ts +8 -0
- package/breadcrumb/index.d.ts +2 -0
- package/breadcrumb/index.mjs +2 -0
- package/button/button.module.d.ts +9 -0
- package/button/index.d.ts +3 -0
- package/button/index.mjs +3 -0
- package/calendar/calendar.module.d.ts +11 -0
- package/{lib/components/date-picker → calendar}/date-picker.component.d.ts +1 -1
- package/calendar/index.d.ts +3 -0
- package/calendar/index.mjs +3 -0
- package/card/card.module.d.ts +8 -0
- package/card/index.d.ts +2 -0
- package/card/index.mjs +2 -0
- package/carousel/carousel.module.d.ts +8 -0
- package/carousel/index.d.ts +2 -0
- package/carousel/index.mjs +2 -0
- package/chart/chart.module.d.ts +8 -0
- package/chart/index.d.ts +2 -0
- package/chart/index.mjs +2 -0
- package/checkbox/checkbox.module.d.ts +8 -0
- package/checkbox/index.d.ts +2 -0
- package/checkbox/index.mjs +2 -0
- package/collapsible/collapsible.module.d.ts +8 -0
- package/collapsible/index.d.ts +2 -0
- package/collapsible/index.mjs +2 -0
- package/combobox/combobox.module.d.ts +9 -0
- package/combobox/index.d.ts +2 -0
- package/combobox/index.mjs +2 -0
- package/command/command.module.d.ts +9 -0
- package/command/index.d.ts +2 -0
- package/command/index.mjs +2 -0
- package/context-menu/context-menu.module.d.ts +9 -0
- package/context-menu/index.d.ts +2 -0
- package/context-menu/index.mjs +2 -0
- package/{lib/components/data-table → data-table}/data-table.component.d.ts +1 -1
- package/data-table/data-table.module.d.ts +10 -0
- package/{lib/components/draggable-table → data-table}/draggable-table.component.d.ts +2 -2
- package/data-table/index.d.ts +4 -0
- package/data-table/index.mjs +4 -0
- package/{lib/components/table → data-table}/table.component.d.ts +1 -1
- package/dialog/dialog.module.d.ts +8 -0
- package/dialog/index.d.ts +2 -0
- package/dialog/index.mjs +2 -0
- package/drawer/drawer.module.d.ts +10 -0
- package/drawer/index.d.ts +3 -0
- package/drawer/index.mjs +3 -0
- package/{lib/components/dropdown-menu → dropdown-menu}/dropdown-menu.component.d.ts +1 -1
- package/dropdown-menu/dropdown-menu.module.d.ts +9 -0
- package/dropdown-menu/index.d.ts +2 -0
- package/dropdown-menu/index.mjs +2 -0
- package/empty/empty.module.d.ts +10 -0
- package/empty/index.d.ts +2 -0
- package/empty/index.mjs +2 -0
- package/esm2020/{lib/components/accordion → accordion}/accordion.component.mjs +1 -1
- package/esm2020/accordion/accordion.module.mjs +21 -0
- package/esm2020/{lib/components/alert-dialog → alert}/alert-dialog.component.mjs +1 -1
- package/esm2020/{lib/components/alert → alert}/alert.component.mjs +1 -1
- package/esm2020/alert/alert.module.mjs +25 -0
- package/esm2020/{lib/components/aspect-ratio → aspect-ratio}/aspect-ratio.component.mjs +1 -1
- package/esm2020/aspect-ratio/aspect-ratio.module.mjs +21 -0
- package/esm2020/{lib/components/avatar → avatar}/avatar.component.mjs +1 -1
- package/esm2020/avatar/avatar.module.mjs +21 -0
- package/esm2020/{lib/components/badge → badge}/badge.component.mjs +1 -1
- package/esm2020/badge/badge.module.mjs +21 -0
- package/esm2020/{lib/components/breadcrumb → breadcrumb}/breadcrumb.component.mjs +1 -1
- package/esm2020/breadcrumb/breadcrumb.module.mjs +21 -0
- package/esm2020/button/button-group.component.mjs +236 -0
- package/esm2020/button/button.component.mjs +114 -0
- package/esm2020/button/button.module.mjs +25 -0
- package/esm2020/calendar/calendar.component.mjs +529 -0
- package/esm2020/calendar/calendar.module.mjs +22 -0
- package/esm2020/{lib/components/date-picker → calendar}/date-picker.component.mjs +6 -6
- package/esm2020/{lib/components/card → card}/card.component.mjs +1 -1
- package/esm2020/card/card.module.mjs +21 -0
- package/esm2020/carousel/carousel.component.mjs +102 -0
- package/esm2020/carousel/carousel.module.mjs +21 -0
- package/esm2020/{lib/components/chart → chart}/chart.component.mjs +1 -1
- package/esm2020/chart/chart.module.mjs +21 -0
- package/esm2020/{lib/components/checkbox → checkbox}/checkbox.component.mjs +1 -1
- package/esm2020/checkbox/checkbox.module.mjs +21 -0
- package/esm2020/{lib/components/collapsible → collapsible}/collapsible.component.mjs +1 -1
- package/esm2020/collapsible/collapsible.module.mjs +21 -0
- package/esm2020/combobox/combobox.component.mjs +173 -0
- package/esm2020/combobox/combobox.module.mjs +22 -0
- package/esm2020/command/command.component.mjs +75 -0
- package/esm2020/command/command.module.mjs +20 -0
- package/esm2020/context-menu/context-menu.component.mjs +165 -0
- package/esm2020/context-menu/context-menu.module.mjs +22 -0
- package/esm2020/data-table/data-table.component.mjs +299 -0
- package/esm2020/data-table/data-table.module.mjs +29 -0
- package/esm2020/data-table/draggable-table.component.mjs +300 -0
- package/esm2020/data-table/table.component.mjs +182 -0
- package/esm2020/{lib/components/dialog → dialog}/dialog.component.mjs +3 -3
- package/esm2020/dialog/dialog.module.mjs +21 -0
- package/esm2020/{lib/components/drawer → drawer}/drawer.component.mjs +2 -2
- package/esm2020/drawer/drawer.module.mjs +21 -0
- package/esm2020/drawer/sheet.component.mjs +116 -0
- package/esm2020/dropdown-menu/dropdown-menu.component.mjs +192 -0
- package/esm2020/dropdown-menu/dropdown-menu.module.mjs +22 -0
- package/esm2020/{lib/components/empty → empty}/empty.component.mjs +1 -1
- package/esm2020/empty/empty.module.mjs +21 -0
- package/esm2020/{lib/components/field → field}/field.component.mjs +1 -1
- package/esm2020/field/field.module.mjs +21 -0
- package/esm2020/hover-card/hover-card.component.mjs +205 -0
- package/esm2020/hover-card/hover-card.module.mjs +22 -0
- package/esm2020/icon/icon.component.mjs +144 -0
- package/esm2020/icon/icon.module.mjs +21 -0
- package/esm2020/{lib/components/input-group → input}/input-group.component.mjs +1 -1
- package/esm2020/input/input-otp.component.mjs +144 -0
- package/esm2020/{lib/components/input-password → input}/input-password.component.mjs +1 -1
- package/esm2020/{lib/components/input → input}/input.component.mjs +1 -1
- package/esm2020/input/input.module.mjs +38 -0
- package/esm2020/{lib/components/textarea → input}/textarea.component.mjs +1 -1
- package/esm2020/{lib/components/item → item}/item.component.mjs +1 -1
- package/esm2020/item/item.module.mjs +21 -0
- package/esm2020/{lib/components/kbd → kbd}/kbd.component.mjs +1 -1
- package/esm2020/kbd/kbd.module.mjs +21 -0
- package/esm2020/{lib/components/label → label}/label.component.mjs +1 -1
- package/esm2020/label/label.module.mjs +21 -0
- package/esm2020/menubar/menubar.component.mjs +144 -0
- package/esm2020/menubar/menubar.module.mjs +22 -0
- package/esm2020/{lib/components/native-select → native-select}/native-select.component.mjs +1 -1
- package/esm2020/native-select/native-select.module.mjs +20 -0
- package/esm2020/{lib/components/navigation-menu → navigation-menu}/navigation-menu.component.mjs +1 -1
- package/esm2020/navigation-menu/navigation-menu.module.mjs +21 -0
- package/esm2020/overlay/create-flexible-position-strategy.mjs +54 -0
- package/esm2020/overlay/pdm-outside-click.directive.mjs +86 -0
- package/esm2020/overlay/pdm-outside-click.module.mjs +18 -0
- package/esm2020/overlay/pdm-overlay-options.mjs +2 -0
- package/esm2020/overlay/z-index-helper.mjs +69 -0
- package/esm2020/{lib/components/pagination → pagination}/pagination.component.mjs +1 -1
- package/esm2020/pagination/pagination.module.mjs +21 -0
- package/esm2020/pdm-ui-kit.module.mjs +260 -0
- package/esm2020/popover/popover.component.mjs +162 -0
- package/esm2020/popover/popover.module.mjs +22 -0
- package/esm2020/{lib/components/progress → progress}/progress.component.mjs +1 -1
- package/esm2020/progress/progress.module.mjs +21 -0
- package/esm2020/public-api.mjs +117 -67
- package/esm2020/{lib/components/radio-group → radio-group}/radio-group.component.mjs +1 -1
- package/esm2020/radio-group/radio-group.module.mjs +21 -0
- package/esm2020/{lib/components/scroll-area → scroll-area}/scroll-area.component.mjs +1 -1
- package/esm2020/scroll-area/scroll-area.module.mjs +21 -0
- package/esm2020/select/select-option.directive.mjs +55 -0
- package/esm2020/select/select.component.mjs +164 -0
- package/esm2020/select/select.module.mjs +22 -0
- package/esm2020/{lib/components/separator → separator}/separator.component.mjs +1 -1
- package/esm2020/separator/separator.module.mjs +21 -0
- package/esm2020/{lib/components/sidebar → sidebar}/sidebar.component.mjs +1 -1
- package/esm2020/sidebar/sidebar.module.mjs +21 -0
- package/esm2020/{lib/components/skeleton → skeleton}/skeleton.component.mjs +1 -1
- package/esm2020/skeleton/skeleton.module.mjs +21 -0
- package/esm2020/{lib/components/slider → slider}/slider.component.mjs +1 -1
- package/esm2020/slider/slider.module.mjs +21 -0
- package/esm2020/{lib/components/sonner → sonner}/sonner.component.mjs +1 -1
- package/esm2020/sonner/sonner.module.mjs +20 -0
- package/esm2020/{lib/components/spinner → spinner}/spinner.component.mjs +1 -1
- package/esm2020/spinner/spinner.module.mjs +21 -0
- package/esm2020/switch/switch.component.mjs +58 -0
- package/esm2020/switch/switch.module.mjs +21 -0
- package/esm2020/{lib/components/tabs → tabs}/tabs.component.mjs +1 -1
- package/esm2020/tabs/tabs.module.mjs +21 -0
- package/esm2020/{lib/components/toggle-group → toggle}/toggle-group.component.mjs +1 -1
- package/esm2020/{lib/components/toggle → toggle}/toggle.component.mjs +1 -1
- package/esm2020/toggle/toggle.module.mjs +25 -0
- package/esm2020/tooltip/tooltip.component.mjs +176 -0
- package/esm2020/tooltip/tooltip.module.mjs +22 -0
- package/esm2020/utils/responsive.mjs +143 -0
- package/esm2020/utils/z-index.mjs +90 -0
- package/fesm2015/pdm-ui-kit.mjs +3332 -2492
- package/fesm2015/pdm-ui-kit.mjs.map +1 -1
- package/fesm2020/pdm-ui-kit.mjs +2668 -1828
- package/fesm2020/pdm-ui-kit.mjs.map +1 -1
- package/field/field.module.d.ts +8 -0
- package/field/index.d.ts +2 -0
- package/field/index.mjs +2 -0
- package/hover-card/hover-card.module.d.ts +9 -0
- package/hover-card/index.d.ts +2 -0
- package/hover-card/index.mjs +2 -0
- package/icon/icon.module.d.ts +8 -0
- package/icon/index.d.ts +2 -0
- package/icon/index.mjs +2 -0
- package/input/index.d.ts +6 -0
- package/input/index.mjs +6 -0
- package/input/input.module.d.ts +13 -0
- package/item/index.d.ts +2 -0
- package/item/index.mjs +2 -0
- package/item/item.module.d.ts +8 -0
- package/kbd/index.d.ts +2 -0
- package/kbd/index.mjs +2 -0
- package/kbd/kbd.module.d.ts +8 -0
- package/label/index.d.ts +2 -0
- package/label/index.mjs +2 -0
- package/label/label.module.d.ts +8 -0
- package/menubar/index.d.ts +2 -0
- package/menubar/index.mjs +2 -0
- package/menubar/menubar.module.d.ts +9 -0
- package/native-select/index.d.ts +2 -0
- package/native-select/index.mjs +2 -0
- package/native-select/native-select.module.d.ts +9 -0
- package/navigation-menu/index.d.ts +2 -0
- package/navigation-menu/index.mjs +2 -0
- package/navigation-menu/navigation-menu.module.d.ts +8 -0
- package/overlay/index.d.ts +8 -0
- package/overlay/index.mjs +8 -0
- package/overlay/pdm-outside-click.module.d.ts +8 -0
- package/package.json +198 -2
- package/pagination/index.d.ts +2 -0
- package/pagination/index.mjs +2 -0
- package/pagination/pagination.module.d.ts +10 -0
- package/pdm-ui-kit.module.d.ts +60 -0
- package/popover/index.d.ts +2 -0
- package/popover/index.mjs +2 -0
- package/popover/popover.module.d.ts +9 -0
- package/progress/index.d.ts +2 -0
- package/progress/index.mjs +2 -0
- package/progress/progress.module.d.ts +8 -0
- package/public-api.d.ts +114 -66
- package/radio-group/index.d.ts +2 -0
- package/radio-group/index.mjs +2 -0
- package/radio-group/radio-group.module.d.ts +8 -0
- package/scroll-area/index.d.ts +2 -0
- package/scroll-area/index.mjs +2 -0
- package/scroll-area/scroll-area.module.d.ts +8 -0
- package/select/index.d.ts +3 -0
- package/select/index.mjs +3 -0
- package/{lib/components/select → select}/select.component.d.ts +1 -1
- package/select/select.module.d.ts +11 -0
- package/separator/index.d.ts +2 -0
- package/separator/index.mjs +2 -0
- package/separator/separator.module.d.ts +8 -0
- package/sidebar/index.d.ts +2 -0
- package/sidebar/index.mjs +2 -0
- package/sidebar/sidebar.module.d.ts +8 -0
- package/skeleton/index.d.ts +2 -0
- package/skeleton/index.mjs +2 -0
- package/skeleton/skeleton.module.d.ts +8 -0
- package/slider/index.d.ts +2 -0
- package/slider/index.mjs +2 -0
- package/slider/slider.module.d.ts +8 -0
- package/sonner/index.d.ts +2 -0
- package/sonner/index.mjs +2 -0
- package/sonner/sonner.module.d.ts +9 -0
- package/spinner/index.d.ts +2 -0
- package/spinner/index.mjs +2 -0
- package/spinner/spinner.module.d.ts +8 -0
- package/switch/index.d.ts +2 -0
- package/switch/index.mjs +2 -0
- package/switch/switch.module.d.ts +8 -0
- package/tabs/index.d.ts +2 -0
- package/tabs/index.mjs +2 -0
- package/tabs/tabs.module.d.ts +8 -0
- package/toggle/index.d.ts +3 -0
- package/toggle/index.mjs +3 -0
- package/toggle/toggle.module.d.ts +9 -0
- package/tooltip/index.d.ts +2 -0
- package/tooltip/index.mjs +2 -0
- package/tooltip/tooltip.module.d.ts +9 -0
- package/utils/index.d.ts +3 -0
- package/utils/index.mjs +3 -0
- package/esm2020/lib/components/button/button.component.mjs +0 -114
- package/esm2020/lib/components/button-group/button-group.component.mjs +0 -236
- package/esm2020/lib/components/calendar/calendar.component.mjs +0 -529
- package/esm2020/lib/components/carousel/carousel.component.mjs +0 -102
- package/esm2020/lib/components/combobox/combobox.component.mjs +0 -173
- package/esm2020/lib/components/command/command.component.mjs +0 -75
- package/esm2020/lib/components/context-menu/context-menu.component.mjs +0 -165
- package/esm2020/lib/components/data-table/data-table.component.mjs +0 -299
- package/esm2020/lib/components/draggable-table/draggable-table.component.mjs +0 -300
- package/esm2020/lib/components/dropdown-menu/dropdown-menu.component.mjs +0 -192
- package/esm2020/lib/components/hover-card/hover-card.component.mjs +0 -205
- package/esm2020/lib/components/icon/icon.component.mjs +0 -144
- package/esm2020/lib/components/input-otp/input-otp.component.mjs +0 -144
- package/esm2020/lib/components/menubar/menubar.component.mjs +0 -144
- package/esm2020/lib/components/popover/popover.component.mjs +0 -162
- package/esm2020/lib/components/select/select-option.directive.mjs +0 -55
- package/esm2020/lib/components/select/select.component.mjs +0 -164
- package/esm2020/lib/components/sheet/sheet.component.mjs +0 -116
- package/esm2020/lib/components/switch/switch.component.mjs +0 -58
- package/esm2020/lib/components/table/table.component.mjs +0 -182
- package/esm2020/lib/components/tooltip/tooltip.component.mjs +0 -176
- package/esm2020/lib/overlay/create-flexible-position-strategy.mjs +0 -54
- package/esm2020/lib/overlay/pdm-outside-click.directive.mjs +0 -86
- package/esm2020/lib/overlay/pdm-overlay-options.mjs +0 -2
- package/esm2020/lib/overlay/z-index-helper.mjs +0 -69
- package/esm2020/lib/pdm-ui-kit.module.mjs +0 -258
- package/esm2020/lib/utils/responsive.mjs +0 -143
- package/esm2020/lib/utils/z-index.mjs +0 -90
- package/lib/pdm-ui-kit.module.d.ts +0 -68
- /package/{lib/components/accordion → accordion}/accordion.component.d.ts +0 -0
- /package/{lib/components/alert-dialog → alert}/alert-dialog.component.d.ts +0 -0
- /package/{lib/components/alert → alert}/alert.component.d.ts +0 -0
- /package/{lib/components/aspect-ratio → aspect-ratio}/aspect-ratio.component.d.ts +0 -0
- /package/{lib/components/avatar → avatar}/avatar.component.d.ts +0 -0
- /package/{lib/components/badge → badge}/badge.component.d.ts +0 -0
- /package/{lib/components/breadcrumb → breadcrumb}/breadcrumb.component.d.ts +0 -0
- /package/{lib/components/button-group → button}/button-group.component.d.ts +0 -0
- /package/{lib/components/button → button}/button.component.d.ts +0 -0
- /package/{lib/components/calendar → calendar}/calendar.component.d.ts +0 -0
- /package/{lib/components/card → card}/card.component.d.ts +0 -0
- /package/{lib/components/carousel → carousel}/carousel.component.d.ts +0 -0
- /package/{lib/components/chart → chart}/chart.component.d.ts +0 -0
- /package/{lib/components/checkbox → checkbox}/checkbox.component.d.ts +0 -0
- /package/{lib/components/collapsible → collapsible}/collapsible.component.d.ts +0 -0
- /package/{lib/components/combobox → combobox}/combobox.component.d.ts +0 -0
- /package/{lib/components/command → command}/command.component.d.ts +0 -0
- /package/{lib/components/context-menu → context-menu}/context-menu.component.d.ts +0 -0
- /package/{lib/components/dialog → dialog}/dialog.component.d.ts +0 -0
- /package/{lib/components/drawer → drawer}/drawer.component.d.ts +0 -0
- /package/{lib/components/sheet → drawer}/sheet.component.d.ts +0 -0
- /package/{lib/components/empty → empty}/empty.component.d.ts +0 -0
- /package/{lib/components/field → field}/field.component.d.ts +0 -0
- /package/{lib/components/hover-card → hover-card}/hover-card.component.d.ts +0 -0
- /package/{lib/components/icon → icon}/icon.component.d.ts +0 -0
- /package/{lib/components/input-group → input}/input-group.component.d.ts +0 -0
- /package/{lib/components/input-otp → input}/input-otp.component.d.ts +0 -0
- /package/{lib/components/input-password → input}/input-password.component.d.ts +0 -0
- /package/{lib/components/input → input}/input.component.d.ts +0 -0
- /package/{lib/components/textarea → input}/textarea.component.d.ts +0 -0
- /package/{lib/components/item → item}/item.component.d.ts +0 -0
- /package/{lib/components/kbd → kbd}/kbd.component.d.ts +0 -0
- /package/{lib/components/label → label}/label.component.d.ts +0 -0
- /package/{lib/components/menubar → menubar}/menubar.component.d.ts +0 -0
- /package/{lib/components/native-select → native-select}/native-select.component.d.ts +0 -0
- /package/{lib/components/navigation-menu → navigation-menu}/navigation-menu.component.d.ts +0 -0
- /package/{lib/overlay → overlay}/create-flexible-position-strategy.d.ts +0 -0
- /package/{lib/overlay → overlay}/pdm-outside-click.directive.d.ts +0 -0
- /package/{lib/overlay → overlay}/pdm-overlay-options.d.ts +0 -0
- /package/{lib/overlay → overlay}/z-index-helper.d.ts +0 -0
- /package/{lib/components/pagination → pagination}/pagination.component.d.ts +0 -0
- /package/{lib/components/popover → popover}/popover.component.d.ts +0 -0
- /package/{lib/components/progress → progress}/progress.component.d.ts +0 -0
- /package/{lib/components/radio-group → radio-group}/radio-group.component.d.ts +0 -0
- /package/{lib/components/scroll-area → scroll-area}/scroll-area.component.d.ts +0 -0
- /package/{lib/components/select → select}/select-option.directive.d.ts +0 -0
- /package/{lib/components/separator → separator}/separator.component.d.ts +0 -0
- /package/{lib/components/sidebar → sidebar}/sidebar.component.d.ts +0 -0
- /package/{lib/components/skeleton → skeleton}/skeleton.component.d.ts +0 -0
- /package/{lib/components/slider → slider}/slider.component.d.ts +0 -0
- /package/{lib/components/sonner → sonner}/sonner.component.d.ts +0 -0
- /package/{lib/components/spinner → spinner}/spinner.component.d.ts +0 -0
- /package/src/{lib/styles → styles}/tokens.css +0 -0
- /package/{lib/components/switch → switch}/switch.component.d.ts +0 -0
- /package/{lib/components/tabs → tabs}/tabs.component.d.ts +0 -0
- /package/{lib/components/toggle-group → toggle}/toggle-group.component.d.ts +0 -0
- /package/{lib/components/toggle → toggle}/toggle.component.d.ts +0 -0
- /package/{lib/components/tooltip → tooltip}/tooltip.component.d.ts +0 -0
- /package/{lib/utils → utils}/responsive.d.ts +0 -0
- /package/{lib/utils → utils}/z-index.d.ts +0 -0
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
/**
|
|
5
|
-
* Tabla con funcionalidad de reordenamiento de filas mediante drag & drop
|
|
6
|
-
*
|
|
7
|
-
* Extiende pdm-table agregando la capacidad de reordenar filas.
|
|
8
|
-
* Si no necesitás drag & drop, usá pdm-table directamente (más simple y liviano).
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* <pdm-draggable-table
|
|
12
|
-
* variant="interactive"
|
|
13
|
-
* [reorderRows]="true"
|
|
14
|
-
* (rowOrderChange)="onOrderChange($event)">
|
|
15
|
-
* <tbody>
|
|
16
|
-
* <tr data-row-id="1"><td>Row 1</td></tr>
|
|
17
|
-
* <tr data-row-id="2"><td>Row 2</td></tr>
|
|
18
|
-
* </tbody>
|
|
19
|
-
* </pdm-draggable-table>
|
|
20
|
-
*
|
|
21
|
-
* IMPORTANTE: Cada <tr> debe tener un atributo data-row-id único
|
|
22
|
-
*/
|
|
23
|
-
export class PdmDraggableTableComponent {
|
|
24
|
-
constructor(renderer) {
|
|
25
|
-
this.renderer = renderer;
|
|
26
|
-
this.variant = 'default';
|
|
27
|
-
this.responsiveStrategy = 'scroll';
|
|
28
|
-
this.className = '';
|
|
29
|
-
this.fullBleed = false;
|
|
30
|
-
/**
|
|
31
|
-
* Habilita el reordenamiento de filas mediante drag & drop
|
|
32
|
-
*/
|
|
33
|
-
this.reorderRows = false;
|
|
34
|
-
/**
|
|
35
|
-
* Selector CSS para identificar los handles de drag
|
|
36
|
-
* Por defecto busca: [data-drag-handle], [data-slot=row-drag-handle], .row-drag-handle
|
|
37
|
-
* Si no encuentra ninguno, inserta un handle automático
|
|
38
|
-
*/
|
|
39
|
-
this.dragHandleSelector = '[data-drag-handle],[data-slot=row-drag-handle],.row-drag-handle,[data-auto-drag-handle]';
|
|
40
|
-
/**
|
|
41
|
-
* Emite el nuevo orden de las filas cuando el usuario termina de arrastrar
|
|
42
|
-
* Array de data-row-id en el nuevo orden
|
|
43
|
-
*/
|
|
44
|
-
this.rowOrderChange = new EventEmitter();
|
|
45
|
-
this.cleanupListeners = [];
|
|
46
|
-
this.draggedRow = null;
|
|
47
|
-
}
|
|
48
|
-
ngAfterViewInit() {
|
|
49
|
-
this.syncReorderBehavior();
|
|
50
|
-
}
|
|
51
|
-
// Getters para clases CSS (mismo comportamiento que pdm-table)
|
|
52
|
-
get wrapperClasses() {
|
|
53
|
-
const baseClasses = ['relative', 'w-full'];
|
|
54
|
-
const strategyClasses = this.getResponsiveStrategyClasses();
|
|
55
|
-
const variantClasses = this.getVariantWrapperClasses();
|
|
56
|
-
if (this.fullBleed && this.responsiveStrategy === 'scroll') {
|
|
57
|
-
baseClasses.push('-mx-4', 'px-4', 'sm:mx-0', 'sm:px-0');
|
|
58
|
-
}
|
|
59
|
-
return [
|
|
60
|
-
...baseClasses,
|
|
61
|
-
...strategyClasses,
|
|
62
|
-
...variantClasses,
|
|
63
|
-
this.className
|
|
64
|
-
].filter(Boolean);
|
|
65
|
-
}
|
|
66
|
-
get tableClasses() {
|
|
67
|
-
const baseClasses = ['w-full', 'caption-bottom', 'text-sm'];
|
|
68
|
-
const variantClasses = this.getVariantTableClasses();
|
|
69
|
-
const cellClasses = this.getCellClasses();
|
|
70
|
-
return [...baseClasses, ...variantClasses, ...cellClasses].filter(Boolean);
|
|
71
|
-
}
|
|
72
|
-
getResponsiveStrategyClasses() {
|
|
73
|
-
if (this.responsiveStrategy === 'scroll' || this.responsiveStrategy === 'wrap' || this.responsiveStrategy === 'collapse') {
|
|
74
|
-
return ['overflow-x-auto'];
|
|
75
|
-
}
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
getVariantWrapperClasses() {
|
|
79
|
-
if (this.variant === 'interactive') {
|
|
80
|
-
return ['rounded-xl', 'border border-solid', 'border-border', 'bg-background'];
|
|
81
|
-
}
|
|
82
|
-
if (this.variant === 'data') {
|
|
83
|
-
return ['rounded-md', 'border border-solid', 'border-border', 'bg-background'];
|
|
84
|
-
}
|
|
85
|
-
return [];
|
|
86
|
-
}
|
|
87
|
-
getVariantTableClasses() {
|
|
88
|
-
if (this.variant === 'data') {
|
|
89
|
-
return [
|
|
90
|
-
'border-collapse', 'text-foreground',
|
|
91
|
-
'[&_thead_tr]:border-b', '[&_thead_tr]:border-border',
|
|
92
|
-
'[&_tbody_tr]:border-b', '[&_tbody_tr]:border-border',
|
|
93
|
-
'[&_tbody_tr:last-child]:border-b-0',
|
|
94
|
-
'[&_th]:h-10', '[&_th]:px-2', '[&_th]:text-left', '[&_th]:align-middle', '[&_th]:font-medium',
|
|
95
|
-
'[&_td]:p-2', '[&_td]:align-middle'
|
|
96
|
-
];
|
|
97
|
-
}
|
|
98
|
-
if (this.variant === 'interactive') {
|
|
99
|
-
return [
|
|
100
|
-
'text-foreground',
|
|
101
|
-
'[&_thead]:sticky', '[&_thead]:top-0', '[&_thead]:z-10', '[&_thead]:bg-muted/70',
|
|
102
|
-
'[&_thead_tr]:border-b', '[&_thead_tr]:border-border',
|
|
103
|
-
'[&_th]:h-12', '[&_th]:px-4', '[&_th]:text-left', '[&_th]:align-middle', '[&_th]:text-sm', '[&_th]:font-medium',
|
|
104
|
-
'[&_tbody_tr]:border-b', '[&_tbody_tr]:border-border',
|
|
105
|
-
'[&_tbody_tr]:transition-colors', '[&_tbody_tr:hover]:bg-muted/50',
|
|
106
|
-
'[&_tbody_tr:last-child]:border-b-0',
|
|
107
|
-
'[&_td]:h-14', '[&_td]:px-4', '[&_td]:align-middle', '[&_td]:text-sm',
|
|
108
|
-
'[&_svg]:text-muted-foreground'
|
|
109
|
-
];
|
|
110
|
-
}
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
getCellClasses() {
|
|
114
|
-
if (this.responsiveStrategy === 'scroll') {
|
|
115
|
-
return ['[&_td]:whitespace-normal', '[&_th]:whitespace-normal', 'sm:[&_td]:whitespace-nowrap', 'sm:[&_th]:whitespace-nowrap'];
|
|
116
|
-
}
|
|
117
|
-
if (this.responsiveStrategy === 'wrap') {
|
|
118
|
-
return ['[&_td]:whitespace-normal', '[&_td]:break-words', '[&_th]:whitespace-normal'];
|
|
119
|
-
}
|
|
120
|
-
return [];
|
|
121
|
-
}
|
|
122
|
-
ngOnChanges(changes) {
|
|
123
|
-
if (changes['reorderRows'] || changes['variant']) {
|
|
124
|
-
this.syncReorderBehavior();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
ngOnDestroy() {
|
|
128
|
-
this.cleanupReorderBehavior();
|
|
129
|
-
}
|
|
130
|
-
syncReorderBehavior() {
|
|
131
|
-
this.cleanupReorderBehavior();
|
|
132
|
-
if (!this.reorderRows) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const tbody = this.getTbody();
|
|
136
|
-
if (!tbody) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
this.setRowsDraggable(tbody, true);
|
|
140
|
-
this.cleanupListeners.push(this.renderer.listen(tbody, 'mousedown', (event) => this.armDragFromHandle(event)), this.renderer.listen(tbody, 'dragstart', (event) => this.onDragStart(event)), this.renderer.listen(tbody, 'dragover', (event) => this.onDragOver(event, tbody)), this.renderer.listen(tbody, 'drop', (event) => this.onDrop(event)), this.renderer.listen(tbody, 'dragend', () => this.onDragEnd()));
|
|
141
|
-
// Observer para detectar cambios en el DOM (filas agregadas/removidas)
|
|
142
|
-
this.observer = new MutationObserver(() => this.setRowsDraggable(tbody, true));
|
|
143
|
-
this.observer.observe(tbody, { childList: true });
|
|
144
|
-
}
|
|
145
|
-
cleanupReorderBehavior() {
|
|
146
|
-
this.cleanupListeners.forEach((dispose) => dispose());
|
|
147
|
-
this.cleanupListeners = [];
|
|
148
|
-
if (this.observer) {
|
|
149
|
-
this.observer.disconnect();
|
|
150
|
-
this.observer = undefined;
|
|
151
|
-
}
|
|
152
|
-
const tbody = this.getTbody();
|
|
153
|
-
if (tbody) {
|
|
154
|
-
this.setRowsDraggable(tbody, false);
|
|
155
|
-
}
|
|
156
|
-
this.draggedRow = null;
|
|
157
|
-
}
|
|
158
|
-
getTbody() {
|
|
159
|
-
return this.tableElement?.nativeElement.tBodies.item(0) ?? null;
|
|
160
|
-
}
|
|
161
|
-
setRowsDraggable(tbody, enabled) {
|
|
162
|
-
const rows = Array.from(tbody.rows);
|
|
163
|
-
rows.forEach((row) => {
|
|
164
|
-
this.syncAutoDragHandle(row, enabled);
|
|
165
|
-
row.draggable = false;
|
|
166
|
-
if (!enabled) {
|
|
167
|
-
delete row.dataset['dragging'];
|
|
168
|
-
delete row.dataset['dragArmed'];
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Inserta un handle de drag automático si no existe uno custom
|
|
174
|
-
*/
|
|
175
|
-
syncAutoDragHandle(row, enabled) {
|
|
176
|
-
const firstCell = row.cells.item(0);
|
|
177
|
-
if (!firstCell) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
const existingAutoHandle = firstCell.querySelector('[data-auto-drag-handle]');
|
|
181
|
-
if (!enabled) {
|
|
182
|
-
existingAutoHandle?.remove();
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
const hasCustomHandle = !!firstCell.querySelector('[data-drag-handle],[data-slot=row-drag-handle],.row-drag-handle');
|
|
186
|
-
if (hasCustomHandle || existingAutoHandle) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
// Crear handle automático
|
|
190
|
-
const button = this.renderer.createElement('button');
|
|
191
|
-
this.renderer.setAttribute(button, 'type', 'button');
|
|
192
|
-
this.renderer.setAttribute(button, 'aria-label', 'Drag row');
|
|
193
|
-
this.renderer.setAttribute(button, 'data-auto-drag-handle', 'true');
|
|
194
|
-
this.renderer.addClass(button, 'inline-flex');
|
|
195
|
-
this.renderer.addClass(button, 'h-7');
|
|
196
|
-
this.renderer.addClass(button, 'w-7');
|
|
197
|
-
this.renderer.addClass(button, 'items-center');
|
|
198
|
-
this.renderer.addClass(button, 'justify-center');
|
|
199
|
-
this.renderer.addClass(button, 'cursor-grab');
|
|
200
|
-
this.renderer.addClass(button, 'active:cursor-grabbing');
|
|
201
|
-
this.renderer.addClass(button, 'text-muted-foreground');
|
|
202
|
-
const dots = this.renderer.createElement('span');
|
|
203
|
-
this.renderer.addClass(dots, 'text-sm');
|
|
204
|
-
this.renderer.addClass(dots, 'leading-none');
|
|
205
|
-
this.renderer.setProperty(dots, 'textContent', '⋮⋮');
|
|
206
|
-
this.renderer.appendChild(button, dots);
|
|
207
|
-
this.renderer.insertBefore(firstCell, button, firstCell.firstChild);
|
|
208
|
-
}
|
|
209
|
-
onDragStart(event) {
|
|
210
|
-
const target = event.target;
|
|
211
|
-
const row = target?.closest('tr');
|
|
212
|
-
if (!row) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
const handle = target?.closest(this.dragHandleSelector);
|
|
216
|
-
const isArmed = row.dataset['dragArmed'] === 'true';
|
|
217
|
-
if ((!handle || !row.contains(handle)) && !isArmed) {
|
|
218
|
-
event.preventDefault();
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
this.draggedRow = row;
|
|
222
|
-
this.draggedRow.dataset['dragging'] = 'true';
|
|
223
|
-
if (event.dataTransfer) {
|
|
224
|
-
event.dataTransfer.effectAllowed = 'move';
|
|
225
|
-
event.dataTransfer.setData('text/plain', '');
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
onDragOver(event, tbody) {
|
|
229
|
-
if (!this.draggedRow) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
event.preventDefault();
|
|
233
|
-
const target = event.target;
|
|
234
|
-
const targetRow = target?.closest('tr');
|
|
235
|
-
if (!targetRow || targetRow === this.draggedRow) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
const rect = targetRow.getBoundingClientRect();
|
|
239
|
-
const shouldInsertBefore = event.clientY < rect.top + rect.height / 2;
|
|
240
|
-
tbody.insertBefore(this.draggedRow, shouldInsertBefore ? targetRow : targetRow.nextSibling);
|
|
241
|
-
}
|
|
242
|
-
onDrop(event) {
|
|
243
|
-
event.preventDefault();
|
|
244
|
-
}
|
|
245
|
-
onDragEnd() {
|
|
246
|
-
const tbody = this.getTbody();
|
|
247
|
-
if (tbody) {
|
|
248
|
-
Array.from(tbody.rows).forEach((row) => {
|
|
249
|
-
row.draggable = false;
|
|
250
|
-
delete row.dataset['dragArmed'];
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
if (this.draggedRow) {
|
|
254
|
-
delete this.draggedRow.dataset['dragging'];
|
|
255
|
-
this.draggedRow = null;
|
|
256
|
-
}
|
|
257
|
-
if (!tbody) {
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
const order = Array.from(tbody.rows).map((row, index) => row.getAttribute('data-row-id') || String(index));
|
|
261
|
-
this.rowOrderChange.emit(order);
|
|
262
|
-
}
|
|
263
|
-
armDragFromHandle(event) {
|
|
264
|
-
const target = event.target;
|
|
265
|
-
const handle = target?.closest(this.dragHandleSelector);
|
|
266
|
-
if (!handle) {
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
const row = handle.closest('tr');
|
|
270
|
-
if (!row) {
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
row.draggable = true;
|
|
274
|
-
row.dataset['dragArmed'] = 'true';
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
PdmDraggableTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDraggableTableComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
278
|
-
PdmDraggableTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDraggableTableComponent, selector: "pdm-draggable-table", inputs: { variant: "variant", responsiveStrategy: "responsiveStrategy", className: "className", fullBleed: "fullBleed", reorderRows: "reorderRows", dragHandleSelector: "dragHandleSelector" }, outputs: { rowOrderChange: "rowOrderChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["tableElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
279
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDraggableTableComponent, decorators: [{
|
|
280
|
-
type: Component,
|
|
281
|
-
args: [{ selector: 'pdm-draggable-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"wrapperClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table-container' : null\">\n <table #tableElement [ngClass]=\"tableClasses\" [attr.data-slot]=\"variant === 'interactive' ? 'table' : null\">\n <ng-content></ng-content>\n </table>\n</div>\n" }]
|
|
282
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { variant: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], responsiveStrategy: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], className: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], fullBleed: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], reorderRows: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], dragHandleSelector: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], rowOrderChange: [{
|
|
295
|
-
type: Output
|
|
296
|
-
}], tableElement: [{
|
|
297
|
-
type: ViewChild,
|
|
298
|
-
args: ['tableElement']
|
|
299
|
-
}] } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kcmFnZ2FibGUtdGFibGUvZHJhZ2dhYmxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kcmFnZ2FibGUtdGFibGUvZHJhZ2dhYmxlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7O0FBSXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFNSCxNQUFNLE9BQU8sMEJBQTBCO0lBOEJyQyxZQUE2QixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBN0J2QyxZQUFPLEdBQW9CLFNBQVMsQ0FBQztRQUNyQyx1QkFBa0IsR0FBNEIsUUFBUSxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0I7Ozs7V0FJRztRQUNNLHVCQUFrQixHQUFHLHlGQUF5RixDQUFDO1FBRXhIOzs7V0FHRztRQUNPLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUloRCxxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBRXpDLGVBQVUsR0FBK0IsSUFBSSxDQUFDO0lBRUgsQ0FBQztJQUVwRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxJQUFJLGNBQWM7UUFDaEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7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LDBCQUEwQiw2YUN6Q3ZDLHVSQUtBOzJGRG9DYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UscUJBQXFCLG1CQUVkLHVCQUF1QixDQUFDLE1BQU07Z0dBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU1JLGNBQWM7c0JBQXZCLE1BQU07Z0JBRW9CLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGRtVGFibGVWYXJpYW50IH0gZnJvbSAnLi4vdGFibGUvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUmVzcG9uc2l2ZVN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzcG9uc2l2ZSc7XG5cbi8qKlxuICogVGFibGEgY29uIGZ1bmNpb25hbGlkYWQgZGUgcmVvcmRlbmFtaWVudG8gZGUgZmlsYXMgbWVkaWFudGUgZHJhZyAmIGRyb3BcbiAqIFxuICogRXh0aWVuZGUgcGRtLXRhYmxlIGFncmVnYW5kbyBsYSBjYXBhY2lkYWQgZGUgcmVvcmRlbmFyIGZpbGFzLlxuICogU2kgbm8gbmVjZXNpdMOhcyBkcmFnICYgZHJvcCwgdXPDoSBwZG0tdGFibGUgZGlyZWN0YW1lbnRlIChtw6FzIHNpbXBsZSB5IGxpdmlhbm8pLlxuICogXG4gKiBAZXhhbXBsZVxuICogPHBkbS1kcmFnZ2FibGUtdGFibGUgXG4gKiAgIHZhcmlhbnQ9XCJpbnRlcmFjdGl2ZVwiXG4gKiAgIFtyZW9yZGVyUm93c109XCJ0cnVlXCJcbiAqICAgKHJvd09yZGVyQ2hhbmdlKT1cIm9uT3JkZXJDaGFuZ2UoJGV2ZW50KVwiPlxuICogICA8dGJvZHk+XG4gKiAgICAgPHRyIGRhdGEtcm93LWlkPVwiMVwiPjx0ZD5Sb3cgMTwvdGQ+PC90cj5cbiAqICAgICA8dHIgZGF0YS1yb3ctaWQ9XCIyXCI+PHRkPlJvdyAyPC90ZD48L3RyPlxuICogICA8L3Rib2R5PlxuICogPC9wZG0tZHJhZ2dhYmxlLXRhYmxlPlxuICogXG4gKiBJTVBPUlRBTlRFOiBDYWRhIDx0cj4gZGViZSB0ZW5lciB1biBhdHJpYnV0byBkYXRhLXJvdy1pZCDDum5pY29cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLWRyYWdnYWJsZS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmFnZ2FibGUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EcmFnZ2FibGVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmFyaWFudDogUGRtVGFibGVWYXJpYW50ID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSByZXNwb25zaXZlU3RyYXRlZ3k6IFRhYmxlUmVzcG9uc2l2ZVN0cmF0ZWd5ID0gJ3Njcm9sbCc7XG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuICBASW5wdXQoKSBmdWxsQmxlZWQgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBIYWJpbGl0YSBlbCByZW9yZGVuYW1pZW50byBkZSBmaWxhcyBtZWRpYW50ZSBkcmFnICYgZHJvcFxuICAgKi9cbiAgQElucHV0KCkgcmVvcmRlclJvd3MgPSBmYWxzZTtcbiAgXG4gIC8qKlxuICAgKiBTZWxlY3RvciBDU1MgcGFyYSBpZGVudGlmaWNhciBsb3MgaGFuZGxlcyBkZSBkcmFnXG4gICAqIFBvciBkZWZlY3RvIGJ1c2NhOiBbZGF0YS1kcmFnLWhhbmRsZV0sIFtkYXRhLXNsb3Q9cm93LWRyYWctaGFuZGxlXSwgLnJvdy1kcmFnLWhhbmRsZVxuICAgKiBTaSBubyBlbmN1ZW50cmEgbmluZ3VubywgaW5zZXJ0YSB1biBoYW5kbGUgYXV0b23DoXRpY29cbiAgICovXG4gIEBJbnB1dCgpIGRyYWdIYW5kbGVTZWxlY3RvciA9ICdbZGF0YS1kcmFnLWhhbmRsZV0sW2RhdGEtc2xvdD1yb3ctZHJhZy1oYW5kbGVdLC5yb3ctZHJhZy1oYW5kbGUsW2RhdGEtYXV0by1kcmFnLWhhbmRsZV0nO1xuICBcbiAgLyoqXG4gICAqIEVtaXRlIGVsIG51ZXZvIG9yZGVuIGRlIGxhcyBmaWxhcyBjdWFuZG8gZWwgdXN1YXJpbyB0ZXJtaW5hIGRlIGFycmFzdHJhclxuICAgKiBBcnJheSBkZSBkYXRhLXJvdy1pZCBlbiBlbCBudWV2byBvcmRlblxuICAgKi9cbiAgQE91dHB1dCgpIHJvd09yZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBAVmlld0NoaWxkKCd0YWJsZUVsZW1lbnQnKSB0YWJsZUVsZW1lbnQ/OiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgY2xlYW51cExpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgcHJpdmF0ZSBvYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZHJhZ2dlZFJvdzogSFRNTFRhYmxlUm93RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zeW5jUmVvcmRlckJlaGF2aW9yKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzIHBhcmEgY2xhc2VzIENTUyAobWlzbW8gY29tcG9ydGFtaWVudG8gcXVlIHBkbS10YWJsZSlcbiAgZ2V0IHdyYXBwZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9IFsncmVsYXRpdmUnLCAndy1mdWxsJ107XG4gICAgY29uc3Qgc3RyYXRlZ3lDbGFzc2VzID0gdGhpcy5nZXRSZXNwb25zaXZlU3RyYXRlZ3lDbGFzc2VzKCk7XG4gICAgY29uc3QgdmFyaWFudENsYXNzZXMgPSB0aGlzLmdldFZhcmlhbnRXcmFwcGVyQ2xhc3NlcygpO1xuICAgIFxuICAgIGlmICh0aGlzLmZ1bGxCbGVlZCAmJiB0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgIGJhc2VDbGFzc2VzLnB1c2goJy1teC00JywgJ3B4LTQnLCAnc206bXgtMCcsICdzbTpweC0wJyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBbXG4gICAgICAuLi5iYXNlQ2xhc3NlcyxcbiAgICAgIC4uLnN0cmF0ZWd5Q2xhc3NlcyxcbiAgICAgIC4uLnZhcmlhbnRDbGFzc2VzLFxuICAgICAgdGhpcy5jbGFzc05hbWVcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIGdldCB0YWJsZUNsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gWyd3LWZ1bGwnLCAnY2FwdGlvbi1ib3R0b20nLCAndGV4dC1zbSddO1xuICAgIGNvbnN0IHZhcmlhbnRDbGFzc2VzID0gdGhpcy5nZXRWYXJpYW50VGFibGVDbGFzc2VzKCk7XG4gICAgY29uc3QgY2VsbENsYXNzZXMgPSB0aGlzLmdldENlbGxDbGFzc2VzKCk7XG4gICAgXG4gICAgcmV0dXJuIFsuLi5iYXNlQ2xhc3NlcywgLi4udmFyaWFudENsYXNzZXMsIC4uLmNlbGxDbGFzc2VzXS5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc3BvbnNpdmVTdHJhdGVneUNsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gJ3Njcm9sbCcgfHwgdGhpcy5yZXNwb25zaXZlU3RyYXRlZ3kgPT09ICd3cmFwJyB8fCB0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gJ2NvbGxhcHNlJykge1xuICAgICAgcmV0dXJuIFsnb3ZlcmZsb3cteC1hdXRvJ107XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFyaWFudFdyYXBwZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnaW50ZXJhY3RpdmUnKSB7XG4gICAgICByZXR1cm4gWydyb3VuZGVkLXhsJywgJ2JvcmRlciBib3JkZXItc29saWQnLCAnYm9yZGVyLWJvcmRlcicsICdiZy1iYWNrZ3JvdW5kJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdkYXRhJykge1xuICAgICAgcmV0dXJuIFsncm91bmRlZC1tZCcsICdib3JkZXIgYm9yZGVyLXNvbGlkJywgJ2JvcmRlci1ib3JkZXInLCAnYmctYmFja2dyb3VuZCddO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIGdldFZhcmlhbnRUYWJsZUNsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdkYXRhJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ2JvcmRlci1jb2xsYXBzZScsICd0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgICAnWyZfdGhlYWRfdHJdOmJvcmRlci1iJywgJ1smX3RoZWFkX3RyXTpib3JkZXItYm9yZGVyJyxcbiAgICAgICAgJ1smX3Rib2R5X3RyXTpib3JkZXItYicsICdbJl90Ym9keV90cl06Ym9yZGVyLWJvcmRlcicsXG4gICAgICAgICdbJl90Ym9keV90cjpsYXN0LWNoaWxkXTpib3JkZXItYi0wJyxcbiAgICAgICAgJ1smX3RoXTpoLTEwJywgJ1smX3RoXTpweC0yJywgJ1smX3RoXTp0ZXh0LWxlZnQnLCAnWyZfdGhdOmFsaWduLW1pZGRsZScsICdbJl90aF06Zm9udC1tZWRpdW0nLFxuICAgICAgICAnWyZfdGRdOnAtMicsICdbJl90ZF06YWxpZ24tbWlkZGxlJ1xuICAgICAgXTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2ludGVyYWN0aXZlJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ3RleHQtZm9yZWdyb3VuZCcsXG4gICAgICAgICdbJl90aGVhZF06c3RpY2t5JywgJ1smX3RoZWFkXTp0b3AtMCcsICdbJl90aGVhZF06ei0xMCcsICdbJl90aGVhZF06YmctbXV0ZWQvNzAnLFxuICAgICAgICAnWyZfdGhlYWRfdHJdOmJvcmRlci1iJywgJ1smX3RoZWFkX3RyXTpib3JkZXItYm9yZGVyJyxcbiAgICAgICAgJ1smX3RoXTpoLTEyJywgJ1smX3RoXTpweC00JywgJ1smX3RoXTp0ZXh0LWxlZnQnLCAnWyZfdGhdOmFsaWduLW1pZGRsZScsICdbJl90aF06dGV4dC1zbScsICdbJl90aF06Zm9udC1tZWRpdW0nLFxuICAgICAgICAnWyZfdGJvZHlfdHJdOmJvcmRlci1iJywgJ1smX3Rib2R5X3RyXTpib3JkZXItYm9yZGVyJyxcbiAgICAgICAgJ1smX3Rib2R5X3RyXTp0cmFuc2l0aW9uLWNvbG9ycycsICdbJl90Ym9keV90cjpob3Zlcl06YmctbXV0ZWQvNTAnLFxuICAgICAgICAnWyZfdGJvZHlfdHI6bGFzdC1jaGlsZF06Ym9yZGVyLWItMCcsXG4gICAgICAgICdbJl90ZF06aC0xNCcsICdbJl90ZF06cHgtNCcsICdbJl90ZF06YWxpZ24tbWlkZGxlJywgJ1smX3RkXTp0ZXh0LXNtJyxcbiAgICAgICAgJ1smX3N2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJ1xuICAgICAgXTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMucmVzcG9uc2l2ZVN0cmF0ZWd5ID09PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuIFsnWyZfdGRdOndoaXRlc3BhY2Utbm9ybWFsJywgJ1smX3RoXTp3aGl0ZXNwYWNlLW5vcm1hbCcsICdzbTpbJl90ZF06d2hpdGVzcGFjZS1ub3dyYXAnLCAnc206WyZfdGhdOndoaXRlc3BhY2Utbm93cmFwJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTdHJhdGVneSA9PT0gJ3dyYXAnKSB7XG4gICAgICByZXR1cm4gWydbJl90ZF06d2hpdGVzcGFjZS1ub3JtYWwnLCAnWyZfdGRdOmJyZWFrLXdvcmRzJywgJ1smX3RoXTp3aGl0ZXNwYWNlLW5vcm1hbCddO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3Jlb3JkZXJSb3dzJ10gfHwgY2hhbmdlc1sndmFyaWFudCddKSB7XG4gICAgICB0aGlzLnN5bmNSZW9yZGVyQmVoYXZpb3IoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBSZW9yZGVyQmVoYXZpb3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1Jlb3JkZXJCZWhhdmlvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBSZW9yZGVyQmVoYXZpb3IoKTtcblxuICAgIGlmICghdGhpcy5yZW9yZGVyUm93cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRib2R5ID0gdGhpcy5nZXRUYm9keSgpO1xuICAgIGlmICghdGJvZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJvd3NEcmFnZ2FibGUodGJvZHksIHRydWUpO1xuXG4gICAgdGhpcy5jbGVhbnVwTGlzdGVuZXJzLnB1c2goXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0Ym9keSwgJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4gdGhpcy5hcm1EcmFnRnJvbUhhbmRsZShldmVudCkpLFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGJvZHksICdkcmFnc3RhcnQnLCAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdGhpcy5vbkRyYWdTdGFydChldmVudCkpLFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGJvZHksICdkcmFnb3ZlcicsIChldmVudDogRHJhZ0V2ZW50KSA9PiB0aGlzLm9uRHJhZ092ZXIoZXZlbnQsIHRib2R5KSksXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0Ym9keSwgJ2Ryb3AnLCAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdGhpcy5vbkRyb3AoZXZlbnQpKSxcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRib2R5LCAnZHJhZ2VuZCcsICgpID0+IHRoaXMub25EcmFnRW5kKCkpXG4gICAgKTtcblxuICAgIC8vIE9ic2VydmVyIHBhcmEgZGV0ZWN0YXIgY2FtYmlvcyBlbiBlbCBET00gKGZpbGFzIGFncmVnYWRhcy9yZW1vdmlkYXMpXG4gICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMuc2V0Um93c0RyYWdnYWJsZSh0Ym9keSwgdHJ1ZSkpO1xuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0Ym9keSwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBSZW9yZGVyQmVoYXZpb3IoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwTGlzdGVuZXJzLmZvckVhY2goKGRpc3Bvc2UpID0+IGRpc3Bvc2UoKSk7XG4gICAgdGhpcy5jbGVhbnVwTGlzdGVuZXJzID0gW107XG5cbiAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLm9ic2VydmVyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRib2R5ID0gdGhpcy5nZXRUYm9keSgpO1xuICAgIGlmICh0Ym9keSkge1xuICAgICAgdGhpcy5zZXRSb3dzRHJhZ2dhYmxlKHRib2R5LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkUm93ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGJvZHkoKTogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQudEJvZGllcy5pdGVtKDApID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldFJvd3NEcmFnZ2FibGUodGJvZHk6IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGJvZHkucm93cyk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIHRoaXMuc3luY0F1dG9EcmFnSGFuZGxlKHJvdywgZW5hYmxlZCk7XG4gICAgICByb3cuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgZGVsZXRlIHJvdy5kYXRhc2V0WydkcmFnZ2luZyddO1xuICAgICAgICBkZWxldGUgcm93LmRhdGFzZXRbJ2RyYWdBcm1lZCddO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydGEgdW4gaGFuZGxlIGRlIGRyYWcgYXV0b23DoXRpY28gc2kgbm8gZXhpc3RlIHVubyBjdXN0b21cbiAgICovXG4gIHByaXZhdGUgc3luY0F1dG9EcmFnSGFuZGxlKHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCwgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHJvdy5jZWxscy5pdGVtKDApO1xuICAgIGlmICghZmlyc3RDZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdBdXRvSGFuZGxlID0gZmlyc3RDZWxsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWF1dG8tZHJhZy1oYW5kbGVdJyk7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBleGlzdGluZ0F1dG9IYW5kbGU/LnJlbW92ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0N1c3RvbUhhbmRsZSA9ICEhZmlyc3RDZWxsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRyYWctaGFuZGxlXSxbZGF0YS1zbG90PXJvdy1kcmFnLWhhbmRsZV0sLnJvdy1kcmFnLWhhbmRsZScpO1xuICAgIGlmIChoYXNDdXN0b21IYW5kbGUgfHwgZXhpc3RpbmdBdXRvSGFuZGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXIgaGFuZGxlIGF1dG9tw6F0aWNvXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdidXR0b24nKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShidXR0b24sICd0eXBlJywgJ2J1dHRvbicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGJ1dHRvbiwgJ2FyaWEtbGFiZWwnLCAnRHJhZyByb3cnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShidXR0b24sICdkYXRhLWF1dG8tZHJhZy1oYW5kbGUnLCAndHJ1ZScpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLCAnaW5saW5lLWZsZXgnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbiwgJ2gtNycpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLCAndy03Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhidXR0b24sICdpdGVtcy1jZW50ZXInKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJ1dHRvbiwgJ2p1c3RpZnktY2VudGVyJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhidXR0b24sICdjdXJzb3ItZ3JhYicpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLCAnYWN0aXZlOmN1cnNvci1ncmFiYmluZycpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYnV0dG9uLCAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyk7XG5cbiAgICBjb25zdCBkb3RzID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb3RzLCAndGV4dC1zbScpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG90cywgJ2xlYWRpbmctbm9uZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoZG90cywgJ3RleHRDb250ZW50JywgJ+KLruKLricpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoYnV0dG9uLCBkb3RzKTtcblxuICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGZpcnN0Q2VsbCwgYnV0dG9uLCBmaXJzdENlbGwuZmlyc3RDaGlsZCk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IHJvdyA9IHRhcmdldD8uY2xvc2VzdCgndHInKTtcbiAgICBpZiAoIXJvdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZSA9IHRhcmdldD8uY2xvc2VzdCh0aGlzLmRyYWdIYW5kbGVTZWxlY3Rvcik7XG4gICAgY29uc3QgaXNBcm1lZCA9IHJvdy5kYXRhc2V0WydkcmFnQXJtZWQnXSA9PT0gJ3RydWUnO1xuICAgIGlmICgoIWhhbmRsZSB8fCAhcm93LmNvbnRhaW5zKGhhbmRsZSkpICYmICFpc0FybWVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ2dlZFJvdyA9IHJvdyBhcyBIVE1MVGFibGVSb3dFbGVtZW50O1xuICAgIHRoaXMuZHJhZ2dlZFJvdy5kYXRhc2V0WydkcmFnZ2luZyddID0gJ3RydWUnO1xuXG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsICcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCwgdGJvZHk6IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWdnZWRSb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgdGFyZ2V0Um93ID0gdGFyZ2V0Py5jbG9zZXN0KCd0cicpIGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKCF0YXJnZXRSb3cgfHwgdGFyZ2V0Um93ID09PSB0aGlzLmRyYWdnZWRSb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0Um93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHNob3VsZEluc2VydEJlZm9yZSA9IGV2ZW50LmNsaWVudFkgPCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICB0Ym9keS5pbnNlcnRCZWZvcmUodGhpcy5kcmFnZ2VkUm93LCBzaG91bGRJbnNlcnRCZWZvcmUgPyB0YXJnZXRSb3cgOiB0YXJnZXRSb3cubmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICBjb25zdCB0Ym9keSA9IHRoaXMuZ2V0VGJvZHkoKTtcbiAgICBpZiAodGJvZHkpIHtcbiAgICAgIEFycmF5LmZyb20odGJvZHkucm93cykuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIHJvdy5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgICAgICAgZGVsZXRlIHJvdy5kYXRhc2V0WydkcmFnQXJtZWQnXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRyYWdnZWRSb3cpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmRyYWdnZWRSb3cuZGF0YXNldFsnZHJhZ2dpbmcnXTtcbiAgICAgIHRoaXMuZHJhZ2dlZFJvdyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCF0Ym9keSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyID0gQXJyYXkuZnJvbSh0Ym9keS5yb3dzKS5tYXAoKHJvdywgaW5kZXgpID0+IHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93LWlkJykgfHwgU3RyaW5nKGluZGV4KSk7XG4gICAgdGhpcy5yb3dPcmRlckNoYW5nZS5lbWl0KG9yZGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJtRHJhZ0Zyb21IYW5kbGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGhhbmRsZSA9IHRhcmdldD8uY2xvc2VzdCh0aGlzLmRyYWdIYW5kbGVTZWxlY3Rvcik7XG4gICAgaWYgKCFoYW5kbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3cgPSBoYW5kbGUuY2xvc2VzdCgndHInKSBhcyBIVE1MVGFibGVSb3dFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXJvdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJvdy5kcmFnZ2FibGUgPSB0cnVlO1xuICAgIHJvdy5kYXRhc2V0WydkcmFnQXJtZWQnXSA9ICd0cnVlJztcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJ3cmFwcGVyQ2xhc3Nlc1wiIFthdHRyLmRhdGEtc2xvdF09XCJ2YXJpYW50ID09PSAnaW50ZXJhY3RpdmUnID8gJ3RhYmxlLWNvbnRhaW5lcicgOiBudWxsXCI+XG4gIDx0YWJsZSAjdGFibGVFbGVtZW50IFtuZ0NsYXNzXT1cInRhYmxlQ2xhc3Nlc1wiIFthdHRyLmRhdGEtc2xvdF09XCJ2YXJpYW50ID09PSAnaW50ZXJhY3RpdmUnID8gJ3RhYmxlJyA6IG51bGxcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvdGFibGU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { TemplatePortal } from '@angular/cdk/portal';
|
|
3
|
-
import { createFlexiblePositionStrategy } from '../../overlay/create-flexible-position-strategy';
|
|
4
|
-
import { Z_INDEX } from '../../utils/z-index';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
export class PdmDropdownMenuComponent {
|
|
9
|
-
constructor(elementRef, cdr, overlay, viewContainerRef) {
|
|
10
|
-
this.elementRef = elementRef;
|
|
11
|
-
this.cdr = cdr;
|
|
12
|
-
this.overlay = overlay;
|
|
13
|
-
this.viewContainerRef = viewContainerRef;
|
|
14
|
-
this.triggerText = 'Open';
|
|
15
|
-
this.variant = 'default';
|
|
16
|
-
this.items = [];
|
|
17
|
-
this.closeOnSelect = true;
|
|
18
|
-
/**
|
|
19
|
-
* Additional CSS classes applied to the trigger wrapper element.
|
|
20
|
-
* Preserved for backward compatibility.
|
|
21
|
-
*/
|
|
22
|
-
this.className = '';
|
|
23
|
-
/**
|
|
24
|
-
* Additional CSS classes applied to the overlay panel.
|
|
25
|
-
* Backward-compatible: mapped to `overlayOptions.panelClass` when `overlayOptions` is not set.
|
|
26
|
-
* When both are supplied, `overlayOptions.panelClass` takes precedence.
|
|
27
|
-
*/
|
|
28
|
-
this.panelClassName = '';
|
|
29
|
-
this.itemSelect = new EventEmitter();
|
|
30
|
-
this.itemsChange = new EventEmitter();
|
|
31
|
-
this.open = false;
|
|
32
|
-
this.overlayRef = null;
|
|
33
|
-
this.backdropSub = null;
|
|
34
|
-
}
|
|
35
|
-
ngOnDestroy() {
|
|
36
|
-
this.destroyOverlay();
|
|
37
|
-
}
|
|
38
|
-
toggle() {
|
|
39
|
-
if (this.open) {
|
|
40
|
-
this.closePanel();
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
this.openPanel();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
get resolvedItems() {
|
|
47
|
-
if (this.items.length) {
|
|
48
|
-
return this.items;
|
|
49
|
-
}
|
|
50
|
-
if (this.variant === 'checkboxes') {
|
|
51
|
-
return [
|
|
52
|
-
{ type: 'label', label: 'Appearance' },
|
|
53
|
-
{ type: 'separator' },
|
|
54
|
-
{ type: 'item', label: 'Status Bar', value: 'status-bar', checked: true },
|
|
55
|
-
{ type: 'item', label: 'Activity Bar', value: 'activity-bar', checked: false },
|
|
56
|
-
{ type: 'item', label: 'Panel', value: 'panel', checked: false }
|
|
57
|
-
];
|
|
58
|
-
}
|
|
59
|
-
if (this.variant === 'radio-group') {
|
|
60
|
-
return [
|
|
61
|
-
{ type: 'label', label: 'Panel Position' },
|
|
62
|
-
{ type: 'separator' },
|
|
63
|
-
{ type: 'item', label: 'Top', value: 'top', radioSelected: true },
|
|
64
|
-
{ type: 'item', label: 'Bottom', value: 'bottom', radioSelected: false },
|
|
65
|
-
{ type: 'item', label: 'Right', value: 'right', radioSelected: false }
|
|
66
|
-
];
|
|
67
|
-
}
|
|
68
|
-
return [
|
|
69
|
-
{ type: 'label', label: 'My Account', inset: true },
|
|
70
|
-
{ type: 'separator' },
|
|
71
|
-
{ type: 'item', label: 'Profile', value: 'profile', shortcut: '⇧⌘P' },
|
|
72
|
-
{ type: 'item', label: 'Billing', value: 'billing', shortcut: '⌘B' },
|
|
73
|
-
{ type: 'item', label: 'Settings', value: 'settings', shortcut: '⌘S' },
|
|
74
|
-
{ type: 'item', label: 'Keyboard shortcuts', value: 'shortcuts', shortcut: '⌘K' },
|
|
75
|
-
{ type: 'separator' },
|
|
76
|
-
{ type: 'item', label: 'Team', value: 'team' },
|
|
77
|
-
{ type: 'item', label: 'Invite users', value: 'invite', showChevron: true },
|
|
78
|
-
{ type: 'item', label: 'New Team', value: 'new-team', shortcut: '⌘+T' },
|
|
79
|
-
{ type: 'separator' },
|
|
80
|
-
{ type: 'item', label: 'GitHub', value: 'github' },
|
|
81
|
-
{ type: 'item', label: 'Support', value: 'support' },
|
|
82
|
-
{ type: 'item', label: 'API', value: 'api', disabled: true },
|
|
83
|
-
{ type: 'separator' },
|
|
84
|
-
{ type: 'item', label: 'Log out', value: 'logout', shortcut: '⇧⌘Q' }
|
|
85
|
-
];
|
|
86
|
-
}
|
|
87
|
-
select(item) {
|
|
88
|
-
if (item.disabled || item.type === 'separator' || item.type === 'label' || !item.value)
|
|
89
|
-
return;
|
|
90
|
-
if (this.variant === 'checkboxes') {
|
|
91
|
-
const updated = this.resolvedItems.map((entry) => entry.value === item.value ? { ...entry, checked: !entry.checked } : entry);
|
|
92
|
-
this.itemsChange.emit(updated);
|
|
93
|
-
}
|
|
94
|
-
if (this.variant === 'radio-group') {
|
|
95
|
-
const updated = this.resolvedItems.map((entry) => entry.type === 'item'
|
|
96
|
-
? { ...entry, radioSelected: entry.value === item.value }
|
|
97
|
-
: entry);
|
|
98
|
-
this.itemsChange.emit(updated);
|
|
99
|
-
}
|
|
100
|
-
this.itemSelect.emit(item.value);
|
|
101
|
-
const shouldClose = this.variant === 'default' ? this.closeOnSelect : false;
|
|
102
|
-
if (shouldClose) {
|
|
103
|
-
this.closePanel();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
onEsc() {
|
|
107
|
-
if (this.open) {
|
|
108
|
-
this.closePanel();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
openPanel() {
|
|
112
|
-
if (this.overlayRef)
|
|
113
|
-
return;
|
|
114
|
-
const triggerEl = this.triggerRef?.nativeElement;
|
|
115
|
-
if (!triggerEl)
|
|
116
|
-
return;
|
|
117
|
-
this.open = true;
|
|
118
|
-
this.cdr.markForCheck();
|
|
119
|
-
const positionStrategy = createFlexiblePositionStrategy(this.overlay, triggerEl, 8);
|
|
120
|
-
// Resolve panelClass: overlayOptions.panelClass wins; otherwise map panelClassName.
|
|
121
|
-
const resolvedPanelClass = this.overlayOptions?.panelClass
|
|
122
|
-
?? (this.panelClassName ? [Z_INDEX.popover, this.panelClassName] : [Z_INDEX.popover]);
|
|
123
|
-
this.overlayRef = this.overlay.create({
|
|
124
|
-
positionStrategy,
|
|
125
|
-
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
126
|
-
// Consumer overrides are spread last — they win over every default above.
|
|
127
|
-
...this.overlayOptions,
|
|
128
|
-
// panelClass always overrides last: it already merges panelClassName + overlayOptions.
|
|
129
|
-
panelClass: resolvedPanelClass
|
|
130
|
-
});
|
|
131
|
-
const portal = new TemplatePortal(this.panelTemplateRef, this.viewContainerRef);
|
|
132
|
-
this.overlayRef.attach(portal);
|
|
133
|
-
this.backdropSub = this.overlayRef.outsidePointerEvents().subscribe((event) => {
|
|
134
|
-
const target = event.target;
|
|
135
|
-
if (!triggerEl.contains(target)) {
|
|
136
|
-
this.closePanel();
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
this.cdr.markForCheck();
|
|
140
|
-
}
|
|
141
|
-
closePanel() {
|
|
142
|
-
if (!this.overlayRef)
|
|
143
|
-
return;
|
|
144
|
-
this.open = false;
|
|
145
|
-
this.destroyOverlay();
|
|
146
|
-
this.cdr.markForCheck();
|
|
147
|
-
}
|
|
148
|
-
destroyOverlay() {
|
|
149
|
-
if (this.backdropSub) {
|
|
150
|
-
this.backdropSub.unsubscribe();
|
|
151
|
-
this.backdropSub = null;
|
|
152
|
-
}
|
|
153
|
-
if (this.overlayRef) {
|
|
154
|
-
this.overlayRef.dispose();
|
|
155
|
-
this.overlayRef = null;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
PdmDropdownMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDropdownMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
-
PdmDropdownMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDropdownMenuComponent, selector: "pdm-dropdown-menu", inputs: { triggerText: "triggerText", variant: "variant", items: "items", closeOnSelect: "closeOnSelect", className: "className", panelClassName: "panelClassName", overlayOptions: "overlayOptions" }, outputs: { itemSelect: "itemSelect", itemsChange: "itemsChange" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<button\n #triggerEl\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n ]\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggle()\"\n>\n {{ triggerText }}\n</button>\n\n<ng-template #panelTemplate>\n <div\n class=\"min-w-32 overflow-hidden rounded-md border border-solid border-border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n <ng-container *ngFor=\"let item of resolvedItems\">\n <div *ngIf=\"item.type === 'separator'\" class=\"-mx-1 my-1 h-px bg-muted\"></div>\n\n <div\n *ngIf=\"item.type === 'label'\"\n [ngClass]=\"['px-2 py-1.5 text-sm font-semibold text-foreground', item.inset ? 'pl-8' : '']\"\n >\n {{ item.label }}\n </div>\n\n <button\n *ngIf=\"!item.type || item.type === 'item'\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative flex w-full appearance-none box-border cursor-default select-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm text-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',\n item.inset ? 'pl-8' : ''\n ]\"\n (click)=\"select(item)\"\n >\n <span class=\"inline-flex h-4 w-4 shrink-0 items-center justify-center\">\n <svg\n *ngIf=\"item.checked\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5 12.5L9.2 16.7L19 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n <span *ngIf=\"item.radioSelected\" class=\"h-2 w-2 rounded-full bg-foreground\"></span>\n </span>\n <span class=\"min-w-0 flex-1 truncate\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n <span *ngIf=\"item.showChevron\" class=\"text-sm text-muted-foreground\">\u203A</span>\n </button>\n </ng-container>\n </div>\n</ng-template>\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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDropdownMenuComponent, decorators: [{
|
|
162
|
-
type: Component,
|
|
163
|
-
args: [{ selector: 'pdm-dropdown-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n #triggerEl\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n ]\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggle()\"\n>\n {{ triggerText }}\n</button>\n\n<ng-template #panelTemplate>\n <div\n class=\"min-w-32 overflow-hidden rounded-md border border-solid border-border bg-popover p-1 text-popover-foreground shadow-md\"\n >\n <ng-container *ngFor=\"let item of resolvedItems\">\n <div *ngIf=\"item.type === 'separator'\" class=\"-mx-1 my-1 h-px bg-muted\"></div>\n\n <div\n *ngIf=\"item.type === 'label'\"\n [ngClass]=\"['px-2 py-1.5 text-sm font-semibold text-foreground', item.inset ? 'pl-8' : '']\"\n >\n {{ item.label }}\n </div>\n\n <button\n *ngIf=\"!item.type || item.type === 'item'\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"[\n 'relative flex w-full appearance-none box-border cursor-default select-none items-center gap-2 rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm text-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground disabled:pointer-events-none disabled:opacity-50',\n item.inset ? 'pl-8' : ''\n ]\"\n (click)=\"select(item)\"\n >\n <span class=\"inline-flex h-4 w-4 shrink-0 items-center justify-center\">\n <svg\n *ngIf=\"item.checked\"\n viewBox=\"0 0 24 24\"\n class=\"h-3.5 w-3.5 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M5 12.5L9.2 16.7L19 7\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n <span *ngIf=\"item.radioSelected\" class=\"h-2 w-2 rounded-full bg-foreground\"></span>\n </span>\n <span class=\"min-w-0 flex-1 truncate\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"text-xs text-muted-foreground\">{{ item.shortcut }}</span>\n <span *ngIf=\"item.showChevron\" class=\"text-sm text-muted-foreground\">\u203A</span>\n </button>\n </ng-container>\n </div>\n</ng-template>\n" }]
|
|
164
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { triggerText: [{
|
|
165
|
-
type: Input
|
|
166
|
-
}], variant: [{
|
|
167
|
-
type: Input
|
|
168
|
-
}], items: [{
|
|
169
|
-
type: Input
|
|
170
|
-
}], closeOnSelect: [{
|
|
171
|
-
type: Input
|
|
172
|
-
}], className: [{
|
|
173
|
-
type: Input
|
|
174
|
-
}], panelClassName: [{
|
|
175
|
-
type: Input
|
|
176
|
-
}], overlayOptions: [{
|
|
177
|
-
type: Input
|
|
178
|
-
}], itemSelect: [{
|
|
179
|
-
type: Output
|
|
180
|
-
}], itemsChange: [{
|
|
181
|
-
type: Output
|
|
182
|
-
}], triggerRef: [{
|
|
183
|
-
type: ViewChild,
|
|
184
|
-
args: ['triggerEl']
|
|
185
|
-
}], panelTemplateRef: [{
|
|
186
|
-
type: ViewChild,
|
|
187
|
-
args: ['panelTemplate']
|
|
188
|
-
}], onEsc: [{
|
|
189
|
-
type: HostListener,
|
|
190
|
-
args: ['document:keydown.escape']
|
|
191
|
-
}] } });
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi1tZW51L2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHckQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBcUI5QyxNQUFNLE9BQU8sd0JBQXdCO0lBa0NuQyxZQUNtQixVQUFtQyxFQUNuQyxHQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBa0M7UUFIbEMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBckM1QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQztRQUNyQixZQUFPLEdBQTJCLFNBQVMsQ0FBQztRQUM1QyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUMxQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUM5Qjs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCOzs7O1dBSUc7UUFDTSxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQVFuQixlQUFVLEdBQUcsSUFBSSxZ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O3VCQUFDLFdBQVc7Z0JBQ2MsZ0JBQWdCO3NCQUFuRCxTQUFTO3VCQUFDLGVBQWU7Z0JBaUcxQixLQUFLO3NCQURKLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZG1PdmVybGF5T3B0aW9ucyB9IGZyb20gJy4uLy4uL292ZXJsYXkvcGRtLW92ZXJsYXktb3B0aW9ucyc7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJsZVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9vdmVybGF5L2NyZWF0ZS1mbGV4aWJsZS1wb3NpdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBaX0lOREVYIH0gZnJvbSAnLi4vLi4vdXRpbHMvei1pbmRleCc7XG5cbmV4cG9ydCB0eXBlIFBkbURyb3Bkb3duTWVudVZhcmlhbnQgPSAnZGVmYXVsdCcgfCAnY2hlY2tib3hlcycgfCAncmFkaW8tZ3JvdXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBkbU1lbnVJdGVtIHtcbiAgdHlwZT86ICdpdGVtJyB8ICdsYWJlbCcgfCAnc2VwYXJhdG9yJztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBzaG9ydGN1dD86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnNldD86IGJvb2xlYW47XG4gIHNob3dDaGV2cm9uPzogYm9vbGVhbjtcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIHJhZGlvU2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwZG0tZHJvcGRvd24tbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGRtRHJvcGRvd25NZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdHJpZ2dlclRleHQgPSAnT3Blbic7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFBkbURyb3Bkb3duTWVudVZhcmlhbnQgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIGl0ZW1zOiBQZG1NZW51SXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZSB0cmlnZ2VyIHdyYXBwZXIgZWxlbWVudC5cbiAgICogUHJlc2VydmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAqIEJhY2t3YXJkLWNvbXBhdGlibGU6IG1hcHBlZCB0byBgb3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzc2Agd2hlbiBgb3ZlcmxheU9wdGlvbnNgIGlzIG5vdCBzZXQuXG4gICAqIFdoZW4gYm90aCBhcmUgc3VwcGxpZWQsIGBvdmVybGF5T3B0aW9ucy5wYW5lbENsYXNzYCB0YWtlcyBwcmVjZWRlbmNlLlxuICAgKi9cbiAgQElucHV0KCkgcGFuZWxDbGFzc05hbWUgPSAnJztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIENESyBPdmVybGF5Q29uZmlnIG92ZXJyaWRlcy5cbiAgICogU2hhbGxvdy1tZXJnZWQgb24gdG9wIG9mIGNvbXBvbmVudCBkZWZhdWx0cyDigJQgY29uc3VtZXIgYWx3YXlzIHdpbnMuXG4gICAqIFByb3ZpZGluZyBgcG9zaXRpb25TdHJhdGVneWAgb3IgYHNjcm9sbFN0cmF0ZWd5YCByZXBsYWNlcyB0aGUgY29tcG9uZW50IGRlZmF1bHQgZW50aXJlbHkuXG4gICAqL1xuICBASW5wdXQoKSBvdmVybGF5T3B0aW9ucz86IFBkbU92ZXJsYXlPcHRpb25zO1xuXG4gIEBPdXRwdXQoKSBpdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGRtTWVudUl0ZW1bXT4oKTtcblxuICBvcGVuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlckVsJykgcHJpdmF0ZSB0cmlnZ2VyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhbmVsVGVtcGxhdGUnKSBwcml2YXRlIHBhbmVsVGVtcGxhdGVSZWYhOiBhbnk7XG5cbiAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFja2Ryb3BTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRJdGVtcygpOiBQZG1NZW51SXRlbVtdIHtcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdjaGVja2JveGVzJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyB0eXBlOiAnbGFiZWwnLCBsYWJlbDogJ0FwcGVhcmFuY2UnIH0sXG4gICAgICAgIHsgdHlwZTogJ3NlcGFyYXRvcicgfSxcbiAgICAgICAgeyB0eXBlOiAnaXRlbScsIGxhYmVsOiAnU3RhdHVzIEJhcicsIHZhbHVlOiAnc3RhdHVzLWJhcicsIGNoZWNrZWQ6IHRydWUgfSxcbiAgICAgICAgeyB0eXBlOiAnaXRlbScsIGxhYmVsOiAnQWN0aXZpdHkgQmFyJywgdmFsdWU6ICdhY3Rpdml0eS1iYXInLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdQYW5lbCcsIHZhbHVlOiAncGFuZWwnLCBjaGVja2VkOiBmYWxzZSB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdyYWRpby1ncm91cCcpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgdHlwZTogJ2xhYmVsJywgbGFiZWw6ICdQYW5lbCBQb3NpdGlvbicgfSxcbiAgICAgICAgeyB0eXBlOiAnc2VwYXJhdG9yJyB9LFxuICAgICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdUb3AnLCB2YWx1ZTogJ3RvcCcsIHJhZGlvU2VsZWN0ZWQ6IHRydWUgfSxcbiAgICAgICAgeyB0eXBlOiAnaXRlbScsIGxhYmVsOiAnQm90dG9tJywgdmFsdWU6ICdib3R0b20nLCByYWRpb1NlbGVjdGVkOiBmYWxzZSB9LFxuICAgICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdSaWdodCcsIHZhbHVlOiAncmlnaHQnLCByYWRpb1NlbGVjdGVkOiBmYWxzZSB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7IHR5cGU6ICdsYWJlbCcsIGxhYmVsOiAnTXkgQWNjb3VudCcsIGluc2V0OiB0cnVlIH0sXG4gICAgICB7IHR5cGU6ICdzZXBhcmF0b3InIH0sXG4gICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdQcm9maWxlJywgdmFsdWU6ICdwcm9maWxlJywgc2hvcnRjdXQ6ICfih6fijJhQJyB9LFxuICAgICAgeyB0eXBlOiAnaXRlbScsIGxhYmVsOiAnQmlsbGluZycsIHZhbHVlOiAnYmlsbGluZycsIHNob3J0Y3V0OiAn4oyYQicgfSxcbiAgICAgIHsgdHlwZTogJ2l0ZW0nLCBsYWJlbDogJ1NldHRpbmdzJywgdmFsdWU6ICdzZXR0aW5ncycsIHNob3J0Y3V0OiAn4oyYUycgfSxcbiAgICAgIHsgdHlwZTogJ2l0ZW0nLCBsYWJlbDogJ0tleWJvYXJkIHNob3J0Y3V0cycsIHZhbHVlOiAnc2hvcnRjdXRzJywgc2hvcnRjdXQ6ICfijJhLJyB9LFxuICAgICAgeyB0eXBlOiAnc2VwYXJhdG9yJyB9LFxuICAgICAgeyB0eXBlOiAnaXRlbScsIGxhYmVsOiAnVGVhbScsIHZhbHVlOiAndGVhbScgfSxcbiAgICAgIHsgdHlwZTogJ2l0ZW0nLCBsYWJlbDogJ0ludml0ZSB1c2VycycsIHZhbHVlOiAnaW52aXRlJywgc2hvd0NoZXZyb246IHRydWUgfSxcbiAgICAgIHsgdHlwZTogJ2l0ZW0nLCBsYWJlbDogJ05ldyBUZWFtJywgdmFsdWU6ICduZXctdGVhbScsIHNob3J0Y3V0OiAn4oyYK1QnIH0sXG4gICAgICB7IHR5cGU6ICdzZXBhcmF0b3InIH0sXG4gICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdHaXRIdWInLCB2YWx1ZTogJ2dpdGh1YicgfSxcbiAgICAgIHsgdHlwZTogJ2l0ZW0nLCBsYWJlbDogJ1N1cHBvcnQnLCB2YWx1ZTogJ3N1cHBvcnQnIH0sXG4gICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdBUEknLCB2YWx1ZTogJ2FwaScsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICB7IHR5cGU6ICdzZXBhcmF0b3InIH0sXG4gICAgICB7IHR5cGU6ICdpdGVtJywgbGFiZWw6ICdMb2cgb3V0JywgdmFsdWU6ICdsb2dvdXQnLCBzaG9ydGN1dDogJ+KHp+KMmFEnIH1cbiAgICBdO1xuICB9XG5cbiAgc2VsZWN0KGl0ZW06IFBkbU1lbnVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgaXRlbS50eXBlID09PSAnc2VwYXJhdG9yJyB8fCBpdGVtLnR5cGUgPT09ICdsYWJlbCcgfHwgIWl0ZW0udmFsdWUpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdjaGVja2JveGVzJykge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IHRoaXMucmVzb2x2ZWRJdGVtcy5tYXAoKGVudHJ5KSA9PlxuICAgICAgICBlbnRyeS52YWx1ZSA9PT0gaXRlbS52YWx1ZSA/IHsgLi4uZW50cnksIGNoZWNrZWQ6ICFlbnRyeS5jaGVja2VkIH0gOiBlbnRyeVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh1cGRhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAncmFkaW8tZ3JvdXAnKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gdGhpcy5yZXNvbHZlZEl0ZW1zLm1hcCgoZW50cnkpID0+XG4gICAgICAgIGVudHJ5LnR5cGUgPT09ICdpdGVtJ1xuICAgICAgICAgID8geyAuLi5lbnRyeSwgcmFkaW9TZWxlY3RlZDogZW50cnkudmFsdWUgPT09IGl0ZW0udmFsdWUgfVxuICAgICAgICAgIDogZW50cnlcbiAgICAgICk7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodXBkYXRlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtU2VsZWN0LmVtaXQoaXRlbS52YWx1ZSk7XG5cbiAgICBjb25zdCBzaG91bGRDbG9zZSA9IHRoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnID8gdGhpcy5jbG9zZU9uU2VsZWN0IDogZmFsc2U7XG4gICAgaWYgKHNob3VsZENsb3NlKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXG4gIG9uRXNjKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHJldHVybjtcblxuICAgIGNvbnN0IHRyaWdnZXJFbCA9IHRoaXMudHJpZ2dlclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIXRyaWdnZXJFbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSBjcmVhdGVGbGV4aWJsZVBvc2l0aW9uU3RyYXRlZ3koXG4gICAgICB0aGlzLm92ZXJsYXksXG4gICAgICB0cmlnZ2VyRWwsXG4gICAgICA4XG4gICAgKTtcblxuICAgIC8vIFJlc29sdmUgcGFuZWxDbGFzczogb3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzcyB3aW5zOyBvdGhlcndpc2UgbWFwIHBhbmVsQ2xhc3NOYW1lLlxuICAgIGNvbnN0IHJlc29sdmVkUGFuZWxDbGFzcyA9IHRoaXMub3ZlcmxheU9wdGlvbnM/LnBhbmVsQ2xhc3NcbiAgICAgID8/ICh0aGlzLnBhbmVsQ2xhc3NOYW1lID8gW1pfSU5ERVgucG9wb3ZlciwgdGhpcy5wYW5lbENsYXNzTmFtZV0gOiBbWl9JTkRFWC5wb3BvdmVyXSk7XG5cbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgLy8gQ29uc3VtZXIgb3ZlcnJpZGVzIGFyZSBzcHJlYWQgbGFzdCDigJQgdGhleSB3aW4gb3ZlciBldmVyeSBkZWZhdWx0IGFib3ZlLlxuICAgICAgLi4udGhpcy5vdmVybGF5T3B0aW9ucyxcbiAgICAgIC8vIHBhbmVsQ2xhc3MgYWx3YXlzIG92ZXJyaWRlcyBsYXN0OiBpdCBhbHJlYWR5IG1lcmdlcyBwYW5lbENsYXNzTmFtZSArIG92ZXJsYXlPcHRpb25zLlxuICAgICAgcGFuZWxDbGFzczogcmVzb2x2ZWRQYW5lbENsYXNzXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5wYW5lbFRlbXBsYXRlUmVmLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuICAgIHRoaXMuYmFja2Ryb3BTdWIgPSB0aGlzLm92ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZTtcbiAgICAgIGlmICghdHJpZ2dlckVsLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3ZlcmxheVJlZikgcmV0dXJuO1xuXG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iYWNrZHJvcFN1Yikge1xuICAgICAgdGhpcy5iYWNrZHJvcFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5iYWNrZHJvcFN1YiA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvblxuICAjdHJpZ2dlckVsXG4gIHR5cGU9XCJidXR0b25cIlxuICBbbmdDbGFzc109XCJbXG4gICAgJ2lubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgIGNsYXNzTmFtZVxuICBdXCJcbiAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcbiAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbj5cbiAge3sgdHJpZ2dlclRleHQgfX1cbjwvYnV0dG9uPlxuXG48bmctdGVtcGxhdGUgI3BhbmVsVGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1pbi13LTMyIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc29saWQgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIHAtMSB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXNvbHZlZEl0ZW1zXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09PSAnc2VwYXJhdG9yJ1wiIGNsYXNzPVwiLW14LTEgbXktMSBoLXB4IGJnLW11dGVkXCI+PC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdsYWJlbCdcIlxuICAgICAgICBbbmdDbGFzc109XCJbJ3B4LTIgcHktMS41IHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWZvcmVncm91bmQnLCBpdGVtLmluc2V0ID8gJ3BsLTgnIDogJyddXCJcbiAgICAgID5cbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXRlbS50eXBlIHx8IGl0ZW0udHlwZSA9PT0gJ2l0ZW0nXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICdyZWxhdGl2ZSBmbGV4IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBjdXJzb3ItZGVmYXVsdCBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHB5LTEuNSB0ZXh0LWxlZnQgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6YmctYWNjZW50IGZvY3VzLXZpc2libGU6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICAgIGl0ZW0uaW5zZXQgPyAncGwtOCcgOiAnJ1xuICAgICAgICBdXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdChpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggaC00IHctNCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uY2hlY2tlZFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaC0zLjUgdy0zLjUgdGV4dC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMi41TDkuMiAxNi43TDE5IDdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnJhZGlvU2VsZWN0ZWRcIiBjbGFzcz1cImgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLWZvcmVncm91bmRcIj48L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtaW4tdy0wIGZsZXgtMSB0cnVuY2F0ZVwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBpdGVtLnNob3J0Y3V0IH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvd0NoZXZyb25cIiBjbGFzcz1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+4oC6PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|