novo-elements 5.1.1 → 5.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/bundles/novo-elements.umd.js +42693 -42665
- package/bundles/novo-elements.umd.js.map +1 -1
- package/bundles/novo-elements.umd.min.js +2 -2
- package/bundles/novo-elements.umd.min.js.map +1 -1
- package/elements/ace-editor/AceEditor.d.ts +37 -37
- package/elements/ace-editor/AceEditor.module.d.ts +2 -2
- package/elements/ace-editor/AceEditor.scss +5 -0
- package/elements/button/Button.d.ts +9 -9
- package/elements/button/Button.module.d.ts +2 -2
- package/elements/button/Button.scss +397 -0
- package/elements/calendar/Calendar.module.d.ts +2 -2
- package/elements/calendar/common/CalendarDateChange.d.ts +25 -25
- package/elements/calendar/common/CalendarDateChange.scss +23 -0
- package/elements/calendar/common/EventTypeLegend.d.ts +7 -7
- package/elements/calendar/day/CalendarAllDayEvent.d.ts +7 -7
- package/elements/calendar/day/CalendarDayEvent.d.ts +8 -8
- package/elements/calendar/day/CalendarDayView.d.ts +148 -148
- package/elements/calendar/day/CalendarDayView.scss +97 -0
- package/elements/calendar/day/CalendarHourSegment.d.ts +7 -7
- package/elements/calendar/month/CalendarMonthDay.d.ts +14 -14
- package/elements/calendar/month/CalendarMonthHeader.d.ts +14 -14
- package/elements/calendar/month/CalendarMonthView.d.ts +110 -110
- package/elements/calendar/month/CalendarMonthView.scss +169 -0
- package/elements/calendar/pipe/DayOfMonth.pipe.d.ts +6 -6
- package/elements/calendar/pipe/EndOfWeekDisplayPipe.pipe.d.ts +6 -6
- package/elements/calendar/pipe/Hours.pipe.d.ts +6 -6
- package/elements/calendar/pipe/Month.pipe.d.ts +6 -6
- package/elements/calendar/pipe/MonthDay.pipe.d.ts +6 -6
- package/elements/calendar/pipe/Weekday.pipe.d.ts +6 -6
- package/elements/calendar/pipe/Year.pipe.d.ts +6 -6
- package/elements/calendar/week/CalendarWeekEvent.d.ts +8 -8
- package/elements/calendar/week/CalendarWeekHeader.d.ts +14 -14
- package/elements/calendar/week/CalendarWeekView.d.ts +156 -156
- package/elements/calendar/week/CalendarWeekView.scss +86 -0
- package/elements/card/Card.d.ts +28 -28
- package/elements/card/Card.module.d.ts +2 -2
- package/elements/card/Card.scss +104 -0
- package/elements/category-dropdown/CategoryDropdown.d.ts +29 -29
- package/elements/category-dropdown/CategoryDropdown.module.d.ts +2 -2
- package/elements/category-dropdown/CategoryDropdown.scss +157 -0
- package/elements/chips/Chips.d.ts +78 -78
- package/elements/chips/Chips.module.d.ts +2 -2
- package/elements/chips/Chips.scss +373 -0
- package/elements/chips/RowChips.d.ts +12 -12
- package/elements/ckeditor/CKEditor.d.ts +44 -44
- package/elements/ckeditor/CKEditor.module.d.ts +2 -2
- package/elements/ckeditor/CKEditor.scss +37 -0
- package/elements/common/common.module.d.ts +2 -2
- package/elements/common/novo-template/novo-template.directive.d.ts +8 -8
- package/elements/data-table/ListInteractionTypes.d.ts +10 -10
- package/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.d.ts +15 -15
- package/elements/data-table/cell-headers/data-table-expand-header-cell.component.d.ts +13 -13
- package/elements/data-table/cell-headers/data-table-header-cell.component.d.ts +81 -81
- package/elements/data-table/cell-headers/data-table-header-cell.directive.d.ts +11 -11
- package/elements/data-table/cells/data-table-cell.component.d.ts +17 -17
- package/elements/data-table/cells/data-table-checkbox-cell.component.d.ts +17 -17
- package/elements/data-table/cells/data-table-expand-cell.component.d.ts +16 -16
- package/elements/data-table/data-table-clear-button.component.d.ts +15 -15
- package/elements/data-table/data-table-expand.directive.d.ts +18 -18
- package/elements/data-table/data-table.component.d.ts +99 -99
- package/elements/data-table/data-table.component.scss +753 -0
- package/elements/data-table/data-table.module.d.ts +2 -2
- package/elements/data-table/data-table.pipes.d.ts +37 -37
- package/elements/data-table/data-table.source.d.ts +22 -22
- package/elements/data-table/interfaces.d.ts +128 -128
- package/elements/data-table/pagination/data-table-pagination.component.d.ts +52 -52
- package/elements/data-table/rows/data-table-header-row.component.d.ts +6 -6
- package/elements/data-table/rows/data-table-row.component.d.ts +7 -7
- package/elements/data-table/services/data-table-filter-utils.d.ts +3 -3
- package/elements/data-table/services/remote-data-table.service.d.ts +8 -8
- package/elements/data-table/services/static-data-table.service.d.ts +12 -12
- package/elements/data-table/sort-filter/sort-filter.directive.d.ts +8 -8
- package/elements/data-table/state/data-table-state.service.d.ts +32 -32
- package/elements/date-picker/DatePicker.d.ts +79 -79
- package/elements/date-picker/DatePicker.module.d.ts +2 -2
- package/elements/date-picker/DatePicker.scss +414 -0
- package/elements/date-picker/DatePickerInput.d.ts +66 -66
- package/elements/date-time-picker/DateTimePicker.d.ts +45 -45
- package/elements/date-time-picker/DateTimePicker.module.d.ts +2 -2
- package/elements/date-time-picker/DateTimePickerInput.d.ts +46 -46
- package/elements/date-time-picker/_DateTimePicker.scss +93 -0
- package/elements/dragula/Dragula.d.ts +13 -13
- package/elements/dragula/Dragula.module.d.ts +2 -2
- package/elements/dragula/Dragula.scss +18 -0
- package/elements/dragula/DragulaService.d.ts +23 -23
- package/elements/dropdown/Dropdown.d.ts +55 -55
- package/elements/dropdown/Dropdown.module.d.ts +2 -2
- package/elements/dropdown/Dropdown.scss +94 -0
- package/elements/expansion/_expansion-theme.scss +50 -0
- package/elements/expansion/accordion.d.ts +21 -21
- package/elements/expansion/expansion-animations.d.ts +9 -9
- package/elements/expansion/expansion-panel-content.d.ts +9 -9
- package/elements/expansion/expansion-panel-header.d.ts +45 -45
- package/elements/expansion/expansion-panel-header.scss +58 -0
- package/elements/expansion/expansion-panel.d.ts +54 -54
- package/elements/expansion/expansion-panel.scss +68 -0
- package/elements/expansion/expansion.module.d.ts +2 -2
- package/elements/form/Control.d.ts +107 -107
- package/elements/form/ControlGroup.d.ts +89 -83
- package/elements/form/ControlGroup.scss +147 -0
- package/elements/form/ControlTemplates.d.ts +9 -9
- package/elements/form/DynamicForm.d.ts +46 -46
- package/elements/form/FieldInteractionApi.d.ts +160 -160
- package/elements/form/FieldInteractionApiTypes.d.ts +29 -29
- package/elements/form/FieldInteractionModals.d.ts +16 -16
- package/elements/form/Form.d.ts +21 -21
- package/elements/form/Form.module.d.ts +2 -2
- package/elements/form/Form.scss +857 -0
- package/elements/form/FormControls.d.ts +22 -22
- package/elements/form/FormInterfaces.d.ts +36 -36
- package/elements/form/FormValidators.d.ts +22 -22
- package/elements/form/NovoFormControl.d.ts +100 -100
- package/elements/form/NovoFormGroup.d.ts +17 -17
- package/elements/form/controls/BaseControl.d.ts +106 -106
- package/elements/form/controls/ControlFactory.d.ts +4 -4
- package/elements/form/controls/ace-editor/AceEditorControl.d.ts +5 -5
- package/elements/form/controls/address/AddressControl.d.ts +5 -5
- package/elements/form/controls/check-list/CheckListControl.d.ts +5 -5
- package/elements/form/controls/checkbox/CheckboxControl.d.ts +5 -5
- package/elements/form/controls/custom/CustomControl.d.ts +5 -5
- package/elements/form/controls/date/DateControl.d.ts +5 -5
- package/elements/form/controls/date-time/DateTimeControl.d.ts +5 -5
- package/elements/form/controls/editor/EditorControl.d.ts +6 -6
- package/elements/form/controls/file/FileControl.d.ts +5 -5
- package/elements/form/controls/grouped/GroupedControl.d.ts +6 -6
- package/elements/form/controls/index.d.ts +19 -19
- package/elements/form/controls/native-select/NativeSelectControl.d.ts +6 -6
- package/elements/form/controls/picker/PickerControl.d.ts +9 -9
- package/elements/form/controls/quick-note/QuickNoteControl.d.ts +6 -6
- package/elements/form/controls/radio/RadioControl.d.ts +6 -6
- package/elements/form/controls/read-only/ReadOnlyControl.d.ts +5 -5
- package/elements/form/controls/select/SelectControl.d.ts +6 -6
- package/elements/form/controls/text-area/TextAreaControl.d.ts +5 -5
- package/elements/form/controls/textbox/TextBoxControl.d.ts +9 -9
- package/elements/form/controls/tiles/TilesControl.d.ts +6 -6
- package/elements/form/controls/time/TimeControl.d.ts +5 -5
- package/elements/form/extras/FormExtras.module.d.ts +2 -2
- package/elements/form/extras/address/Address.d.ts +65 -65
- package/elements/form/extras/address/Address.scss +152 -0
- package/elements/form/extras/checkbox/CheckList.d.ts +20 -20
- package/elements/form/extras/checkbox/Checkbox.d.ts +24 -24
- package/elements/form/extras/checkbox/Checkbox.scss +87 -0
- package/elements/form/extras/file/FileInput.d.ts +72 -72
- package/elements/form/extras/file/FileInput.scss +118 -0
- package/elements/form/extras/file/extras/file/File.d.ts +22 -22
- package/elements/header/Header.d.ts +22 -22
- package/elements/header/Header.module.d.ts +2 -2
- package/elements/header/Header.scss +96 -0
- package/elements/icon/Icon.d.ts +18 -18
- package/elements/icon/Icon.module.d.ts +2 -2
- package/elements/icon/Icon.scss +82 -0
- package/elements/list/List.d.ts +31 -31
- package/elements/list/List.module.d.ts +2 -2
- package/elements/list/List.scss +134 -0
- package/elements/loading/Loading.d.ts +26 -26
- package/elements/loading/Loading.module.d.ts +2 -2
- package/elements/loading/Loading.scss +56 -0
- package/elements/loading/NovoSpinner.scss +172 -0
- package/elements/modal/Modal.d.ts +45 -45
- package/elements/modal/Modal.module.d.ts +2 -2
- package/elements/modal/Modal.scss +207 -0
- package/elements/modal/ModalService.d.ts +10 -10
- package/elements/multi-picker/MultiPicker.d.ts +107 -107
- package/elements/multi-picker/MultiPicker.module.d.ts +2 -2
- package/elements/multi-picker/_MultiPicker.scss +74 -0
- package/elements/overlay/Overlay.d.ts +57 -57
- package/elements/overlay/Overlay.module.d.ts +2 -2
- package/elements/picker/Picker.d.ts +69 -69
- package/elements/picker/Picker.module.d.ts +2 -2
- package/elements/picker/Picker.scss +438 -0
- package/elements/picker/extras/base-picker-results/BasePickerResults.d.ts +91 -91
- package/elements/picker/extras/checklist-picker-results/ChecklistPickerResults.d.ts +21 -21
- package/elements/picker/extras/distributionlist-picker-results/DistributionListPickerResults.d.ts +13 -13
- package/elements/picker/extras/entity-picker-results/EntityPickerResults.d.ts +29 -29
- package/elements/picker/extras/grouped-multi-picker-results/GroupedMultiPickerResults.d.ts +42 -42
- package/elements/picker/extras/grouped-multi-picker-results/GroupedMultiPickerResults.scss +136 -0
- package/elements/picker/extras/mixed-multi-picker-results/MixedMultiPickerResults.d.ts +43 -43
- package/elements/picker/extras/mixed-multi-picker-results/MixedMultiPickerResults.scss +156 -0
- package/elements/picker/extras/picker-results/PickerResults.d.ts +11 -11
- package/elements/picker/extras/skills-picker-results/SkillsSpecialtyPickerResults.d.ts +21 -21
- package/elements/picker/extras/skills-picker-results/SkillsSpecialtyPickerResults.scss +65 -0
- package/elements/picker/extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults.d.ts +13 -13
- package/elements/picker/extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults.scss +0 -0
- package/elements/places/places.component.d.ts +71 -71
- package/elements/places/places.component.scss +26 -0
- package/elements/places/places.module.d.ts +2 -2
- package/elements/places/places.service.d.ts +22 -22
- package/elements/popover/PopOver.d.ts +30 -30
- package/elements/popover/PopOver.module.d.ts +2 -2
- package/elements/popover/PopOver.scss +179 -0
- package/elements/popover/PopOverContent.d.ts +45 -45
- package/elements/quick-note/QuickNote.d.ts +139 -139
- package/elements/quick-note/QuickNote.module.d.ts +2 -2
- package/elements/quick-note/QuickNote.scss +52 -0
- package/elements/quick-note/extras/quick-note-results/QuickNoteResults.d.ts +30 -30
- package/elements/radio/Radio.d.ts +26 -26
- package/elements/radio/Radio.module.d.ts +2 -2
- package/elements/radio/Radio.scss +94 -0
- package/elements/search/SearchBox.d.ts +59 -59
- package/elements/search/SearchBox.module.d.ts +2 -2
- package/elements/search/SearchBox.scss +67 -0
- package/elements/select/Select.d.ts +62 -62
- package/elements/select/Select.module.d.ts +2 -2
- package/elements/select/Select.scss +226 -0
- package/elements/simple-table/activity-table-renderers.d.ts +4 -4
- package/elements/simple-table/cell-header.d.ts +62 -62
- package/elements/simple-table/cell.d.ts +73 -73
- package/elements/simple-table/interfaces.d.ts +81 -81
- package/elements/simple-table/pagination.d.ts +37 -37
- package/elements/simple-table/row.d.ts +20 -20
- package/elements/simple-table/simple-table.module.d.ts +2 -2
- package/elements/simple-table/sort.d.ts +20 -20
- package/elements/simple-table/state.d.ts +22 -22
- package/elements/simple-table/table-source.d.ts +62 -62
- package/elements/simple-table/table.d.ts +59 -59
- package/elements/simple-table/table.scss +344 -0
- package/elements/slider/Slider.d.ts +18 -18
- package/elements/slider/Slider.module.d.ts +2 -2
- package/elements/slider/Slider.scss +89 -0
- package/elements/stepper/step-header.component.d.ts +45 -45
- package/elements/stepper/step-header.component.scss +78 -0
- package/elements/stepper/step-label.component.d.ts +5 -5
- package/elements/stepper/step-status.component.d.ts +6 -6
- package/elements/stepper/stepper.animations.d.ts +6 -6
- package/elements/stepper/stepper.component.d.ts +39 -39
- package/elements/stepper/stepper.component.scss +200 -0
- package/elements/stepper/stepper.module.d.ts +2 -2
- package/elements/switch/Switch.d.ts +19 -19
- package/elements/switch/Switch.module.d.ts +2 -2
- package/elements/switch/Switch.scss +143 -0
- package/elements/tabbed-group-picker/TabbedGroupPicker.d.ts +122 -122
- package/elements/tabbed-group-picker/TabbedGroupPicker.module.d.ts +2 -2
- package/elements/tabbed-group-picker/TabbedGroupPicker.scss +186 -0
- package/elements/table/Table.d.ts +184 -184
- package/elements/table/Table.module.d.ts +2 -2
- package/elements/table/Table.scss +585 -0
- package/elements/table/extras/TableExtras.module.d.ts +2 -2
- package/elements/table/extras/base-renderer/BaseRenderer.d.ts +5 -5
- package/elements/table/extras/date-cell/DateCell.d.ts +8 -8
- package/elements/table/extras/dropdown-cell/DropdownCell.d.ts +17 -17
- package/elements/table/extras/dropdown-cell/DropdownCell.scss +58 -0
- package/elements/table/extras/keep-filter-focus/KeepFilterFocus.d.ts +6 -6
- package/elements/table/extras/pagination/Pagination.d.ts +39 -39
- package/elements/table/extras/pagination/Pagination.scss +62 -0
- package/elements/table/extras/percentage-cell/PercentageCell.d.ts +3 -3
- package/elements/table/extras/row-details/RowDetails.d.ts +12 -12
- package/elements/table/extras/table-actions/TableActions.d.ts +2 -2
- package/elements/table/extras/table-cell/TableCell.d.ts +18 -18
- package/elements/table/extras/table-filter/TableFilter.d.ts +13 -13
- package/elements/table/extras/table-footer/TableFooter.d.ts +2 -2
- package/elements/table/extras/table-header/TableHeader.d.ts +2 -2
- package/elements/table/extras/th-orderable/ThOrderable.d.ts +30 -30
- package/elements/table/extras/th-sortable/ThSortable.d.ts +7 -7
- package/elements/tabs/Tabs.d.ts +49 -49
- package/elements/tabs/Tabs.module.d.ts +2 -2
- package/elements/tabs/Tabs.scss +287 -0
- package/elements/tiles/Tiles.d.ts +30 -30
- package/elements/tiles/Tiles.module.d.ts +2 -2
- package/elements/tiles/Tiles.scss +68 -0
- package/elements/time-picker/TimePicker.d.ts +38 -38
- package/elements/time-picker/TimePicker.module.d.ts +2 -2
- package/elements/time-picker/TimePicker.scss +388 -0
- package/elements/time-picker/TimePickerInput.d.ts +52 -52
- package/elements/tip-well/TipWell.d.ts +23 -23
- package/elements/tip-well/TipWell.module.d.ts +2 -2
- package/elements/tip-well/TipWell.scss +31 -0
- package/elements/toast/Toast.d.ts +28 -28
- package/elements/toast/Toast.module.d.ts +2 -2
- package/elements/toast/Toast.scss +413 -0
- package/elements/toast/ToastService.d.ts +40 -40
- package/elements/tooltip/Tooltip.component.d.ts +12 -11
- package/elements/tooltip/Tooltip.directive.d.ts +35 -34
- package/elements/tooltip/Tooltip.module.d.ts +2 -2
- package/elements/tooltip/Tooltip.scss +216 -0
- package/elements/unless/Unless.d.ts +12 -12
- package/elements/unless/Unless.module.d.ts +2 -2
- package/elements/value/EntityList.d.ts +13 -13
- package/elements/value/Render.d.ts +66 -66
- package/elements/value/Value.d.ts +40 -40
- package/elements/value/Value.module.d.ts +2 -2
- package/elements/value/Value.scss +57 -0
- package/elements/value/Values.scss +57 -0
- package/esm2015/elements/ace-editor/AceEditor.js +126 -126
- package/esm2015/elements/ace-editor/AceEditor.module.js +15 -15
- package/esm2015/elements/button/Button.js +74 -74
- package/esm2015/elements/button/Button.module.js +15 -15
- package/esm2015/elements/calendar/Calendar.module.js +81 -81
- package/esm2015/elements/calendar/common/CalendarDateChange.js +60 -60
- package/esm2015/elements/calendar/common/EventTypeLegend.js +32 -32
- package/esm2015/elements/calendar/day/CalendarAllDayEvent.js +40 -40
- package/esm2015/elements/calendar/day/CalendarDayEvent.js +41 -41
- package/esm2015/elements/calendar/day/CalendarDayView.js +302 -302
- package/esm2015/elements/calendar/day/CalendarHourSegment.js +34 -34
- package/esm2015/elements/calendar/month/CalendarMonthDay.js +87 -87
- package/esm2015/elements/calendar/month/CalendarMonthHeader.js +55 -55
- package/esm2015/elements/calendar/month/CalendarMonthView.js +171 -171
- package/esm2015/elements/calendar/pipe/DayOfMonth.pipe.js +16 -16
- package/esm2015/elements/calendar/pipe/EndOfWeekDisplayPipe.pipe.js +19 -19
- package/esm2015/elements/calendar/pipe/Hours.pipe.js +16 -16
- package/esm2015/elements/calendar/pipe/Month.pipe.js +16 -16
- package/esm2015/elements/calendar/pipe/MonthDay.pipe.js +16 -16
- package/esm2015/elements/calendar/pipe/Weekday.pipe.js +16 -16
- package/esm2015/elements/calendar/pipe/Year.pipe.js +16 -16
- package/esm2015/elements/calendar/week/CalendarWeekEvent.js +38 -38
- package/esm2015/elements/calendar/week/CalendarWeekHeader.js +46 -46
- package/esm2015/elements/calendar/week/CalendarWeekView.js +311 -311
- package/esm2015/elements/card/Card.js +104 -104
- package/esm2015/elements/card/Card.module.js +18 -18
- package/esm2015/elements/category-dropdown/CategoryDropdown.js +159 -159
- package/esm2015/elements/category-dropdown/CategoryDropdown.module.js +17 -17
- package/esm2015/elements/chips/Chips.js +356 -356
- package/esm2015/elements/chips/Chips.module.js +18 -18
- package/esm2015/elements/chips/RowChips.js +86 -86
- package/esm2015/elements/ckeditor/CKEditor.js +237 -237
- package/esm2015/elements/ckeditor/CKEditor.module.js +16 -16
- package/esm2015/elements/common/common.module.js +13 -13
- package/esm2015/elements/common/novo-template/novo-template.directive.js +22 -22
- package/esm2015/elements/data-table/ListInteractionTypes.js +1 -1
- package/esm2015/elements/data-table/cell-headers/data-table-checkbox-header-cell.component.js +73 -73
- package/esm2015/elements/data-table/cell-headers/data-table-expand-header-cell.component.js +47 -47
- package/esm2015/elements/data-table/cell-headers/data-table-header-cell.component.js +501 -501
- package/esm2015/elements/data-table/cell-headers/data-table-header-cell.directive.js +35 -35
- package/esm2015/elements/data-table/cells/data-table-cell.component.js +62 -62
- package/esm2015/elements/data-table/cells/data-table-checkbox-cell.component.js +65 -65
- package/esm2015/elements/data-table/cells/data-table-expand-cell.component.js +52 -52
- package/esm2015/elements/data-table/data-table-clear-button.component.js +54 -54
- package/esm2015/elements/data-table/data-table-expand.directive.js +57 -57
- package/esm2015/elements/data-table/data-table.component.js +665 -665
- package/esm2015/elements/data-table/data-table.module.js +87 -87
- package/esm2015/elements/data-table/data-table.pipes.js +150 -150
- package/esm2015/elements/data-table/data-table.source.js +62 -62
- package/esm2015/elements/data-table/interfaces.js +1 -1
- package/esm2015/elements/data-table/pagination/data-table-pagination.component.js +249 -249
- package/esm2015/elements/data-table/rows/data-table-header-row.component.js +23 -23
- package/esm2015/elements/data-table/rows/data-table-row.component.js +23 -23
- package/esm2015/elements/data-table/services/data-table-filter-utils.js +35 -35
- package/esm2015/elements/data-table/services/remote-data-table.service.js +3 -3
- package/esm2015/elements/data-table/services/static-data-table.service.js +48 -48
- package/esm2015/elements/data-table/sort-filter/sort-filter.directive.js +57 -57
- package/esm2015/elements/data-table/state/data-table-state.service.js +116 -116
- package/esm2015/elements/date-picker/DatePicker.js +493 -493
- package/esm2015/elements/date-picker/DatePicker.module.js +20 -20
- package/esm2015/elements/date-picker/DatePickerInput.js +255 -255
- package/esm2015/elements/date-time-picker/DateTimePicker.js +195 -195
- package/esm2015/elements/date-time-picker/DateTimePicker.module.js +22 -22
- package/esm2015/elements/date-time-picker/DateTimePickerInput.js +151 -151
- package/esm2015/elements/dragula/Dragula.js +66 -66
- package/esm2015/elements/dragula/Dragula.module.js +13 -13
- package/esm2015/elements/dragula/DragulaService.js +117 -117
- package/esm2015/elements/dropdown/Dropdown.js +284 -284
- package/esm2015/elements/dropdown/Dropdown.module.js +15 -15
- package/esm2015/elements/expansion/accordion.js +42 -42
- package/esm2015/elements/expansion/expansion-animations.js +33 -33
- package/esm2015/elements/expansion/expansion-panel-content.js +19 -19
- package/esm2015/elements/expansion/expansion-panel-header.js +131 -131
- package/esm2015/elements/expansion/expansion-panel.js +141 -141
- package/esm2015/elements/expansion/expansion.module.js +34 -34
- package/esm2015/elements/form/Control.js +645 -645
- package/esm2015/elements/form/ControlGroup.js +264 -247
- package/esm2015/elements/form/ControlTemplates.js +162 -161
- package/esm2015/elements/form/DynamicForm.js +221 -221
- package/esm2015/elements/form/FieldInteractionApi.js +680 -680
- package/esm2015/elements/form/FieldInteractionApiTypes.js +1 -1
- package/esm2015/elements/form/FieldInteractionModals.js +63 -63
- package/esm2015/elements/form/Form.js +93 -93
- package/esm2015/elements/form/Form.module.js +86 -86
- package/esm2015/elements/form/FormControls.js +23 -23
- package/esm2015/elements/form/FormInterfaces.js +1 -1
- package/esm2015/elements/form/FormValidators.js +115 -115
- package/esm2015/elements/form/NovoFormControl.js +154 -154
- package/esm2015/elements/form/NovoFormGroup.js +32 -32
- package/esm2015/elements/form/controls/BaseControl.js +101 -101
- package/esm2015/elements/form/controls/ControlFactory.js +47 -47
- package/esm2015/elements/form/controls/ace-editor/AceEditorControl.js +9 -9
- package/esm2015/elements/form/controls/address/AddressControl.js +11 -11
- package/esm2015/elements/form/controls/check-list/CheckListControl.js +10 -10
- package/esm2015/elements/form/controls/checkbox/CheckboxControl.js +9 -9
- package/esm2015/elements/form/controls/custom/CustomControl.js +10 -10
- package/esm2015/elements/form/controls/date/DateControl.js +9 -9
- package/esm2015/elements/form/controls/date-time/DateTimeControl.js +9 -9
- package/esm2015/elements/form/controls/editor/EditorControl.js +10 -10
- package/esm2015/elements/form/controls/file/FileControl.js +12 -12
- package/esm2015/elements/form/controls/grouped/GroupedControl.js +7 -7
- package/esm2015/elements/form/controls/index.js +20 -20
- package/esm2015/elements/form/controls/native-select/NativeSelectControl.js +11 -11
- package/esm2015/elements/form/controls/picker/PickerControl.js +17 -17
- package/esm2015/elements/form/controls/quick-note/QuickNoteControl.js +11 -11
- package/esm2015/elements/form/controls/radio/RadioControl.js +11 -11
- package/esm2015/elements/form/controls/read-only/ReadOnlyControl.js +10 -10
- package/esm2015/elements/form/controls/select/SelectControl.js +12 -12
- package/esm2015/elements/form/controls/text-area/TextAreaControl.js +9 -9
- package/esm2015/elements/form/controls/textbox/TextBoxControl.js +44 -44
- package/esm2015/elements/form/controls/tiles/TilesControl.js +11 -11
- package/esm2015/elements/form/controls/time/TimeControl.js +9 -9
- package/esm2015/elements/form/extras/FormExtras.module.js +36 -36
- package/esm2015/elements/form/extras/address/Address.js +512 -512
- package/esm2015/elements/form/extras/checkbox/CheckList.js +107 -107
- package/esm2015/elements/form/extras/checkbox/Checkbox.js +80 -80
- package/esm2015/elements/form/extras/file/FileInput.js +320 -320
- package/esm2015/elements/form/extras/file/extras/file/File.js +40 -40
- package/esm2015/elements/header/Header.js +96 -96
- package/esm2015/elements/header/Header.module.js +14 -14
- package/esm2015/elements/icon/Icon.js +53 -53
- package/esm2015/elements/icon/Icon.module.js +11 -11
- package/esm2015/elements/list/List.js +132 -132
- package/esm2015/elements/list/List.module.js +33 -33
- package/esm2015/elements/loading/Loading.js +174 -174
- package/esm2015/elements/loading/Loading.module.js +15 -15
- package/esm2015/elements/modal/Modal.js +138 -138
- package/esm2015/elements/modal/Modal.module.js +16 -16
- package/esm2015/elements/modal/ModalService.js +31 -31
- package/esm2015/elements/multi-picker/MultiPicker.js +600 -600
- package/esm2015/elements/multi-picker/MultiPicker.module.js +18 -18
- package/esm2015/elements/overlay/Overlay.js +238 -238
- package/esm2015/elements/overlay/Overlay.module.js +18 -18
- package/esm2015/elements/picker/Picker.js +343 -343
- package/esm2015/elements/picker/Picker.module.js +50 -50
- package/esm2015/elements/picker/extras/base-picker-results/BasePickerResults.js +353 -353
- package/esm2015/elements/picker/extras/checklist-picker-results/ChecklistPickerResults.js +127 -127
- package/esm2015/elements/picker/extras/distributionlist-picker-results/DistributionListPickerResults.js +63 -63
- package/esm2015/elements/picker/extras/entity-picker-results/EntityPickerResults.js +221 -221
- package/esm2015/elements/picker/extras/grouped-multi-picker-results/GroupedMultiPickerResults.js +264 -264
- package/esm2015/elements/picker/extras/mixed-multi-picker-results/MixedMultiPickerResults.js +193 -193
- package/esm2015/elements/picker/extras/picker-results/PickerResults.js +60 -60
- package/esm2015/elements/picker/extras/skills-picker-results/SkillsSpecialtyPickerResults.js +79 -79
- package/esm2015/elements/picker/extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults.js +79 -79
- package/esm2015/elements/places/places.component.js +369 -369
- package/esm2015/elements/places/places.module.js +18 -18
- package/esm2015/elements/places/places.service.js +248 -248
- package/esm2015/elements/popover/PopOver.js +144 -144
- package/esm2015/elements/popover/PopOver.module.js +14 -14
- package/esm2015/elements/popover/PopOverContent.js +198 -198
- package/esm2015/elements/quick-note/QuickNote.js +572 -572
- package/esm2015/elements/quick-note/QuickNote.module.js +19 -19
- package/esm2015/elements/quick-note/extras/quick-note-results/QuickNoteResults.js +138 -138
- package/esm2015/elements/radio/Radio.js +89 -89
- package/esm2015/elements/radio/Radio.module.js +16 -16
- package/esm2015/elements/search/SearchBox.js +193 -193
- package/esm2015/elements/search/SearchBox.module.js +19 -19
- package/esm2015/elements/select/Select.js +363 -358
- package/esm2015/elements/select/Select.module.js +19 -18
- package/esm2015/elements/simple-table/activity-table-renderers.js +16 -16
- package/esm2015/elements/simple-table/cell-header.js +278 -278
- package/esm2015/elements/simple-table/cell.js +291 -291
- package/esm2015/elements/simple-table/interfaces.js +1 -1
- package/esm2015/elements/simple-table/pagination.js +175 -175
- package/esm2015/elements/simple-table/row.js +66 -66
- package/esm2015/elements/simple-table/simple-table.module.js +92 -92
- package/esm2015/elements/simple-table/sort.js +87 -87
- package/esm2015/elements/simple-table/state.js +38 -38
- package/esm2015/elements/simple-table/table-source.js +70 -70
- package/esm2015/elements/simple-table/table.js +238 -238
- package/esm2015/elements/slider/Slider.js +81 -81
- package/esm2015/elements/slider/Slider.module.js +16 -16
- package/esm2015/elements/stepper/step-header.component.js +90 -90
- package/esm2015/elements/stepper/step-label.component.js +16 -16
- package/esm2015/elements/stepper/step-status.component.js +26 -26
- package/esm2015/elements/stepper/stepper.animations.js +19 -19
- package/esm2015/elements/stepper/stepper.component.js +139 -139
- package/esm2015/elements/stepper/stepper.module.js +21 -21
- package/esm2015/elements/switch/Switch.js +88 -88
- package/esm2015/elements/switch/Switch.module.js +16 -16
- package/esm2015/elements/tabbed-group-picker/TabbedGroupPicker.js +261 -261
- package/esm2015/elements/tabbed-group-picker/TabbedGroupPicker.module.js +33 -33
- package/esm2015/elements/table/Table.js +940 -940
- package/esm2015/elements/table/Table.module.js +40 -40
- package/esm2015/elements/table/extras/TableExtras.module.js +59 -59
- package/esm2015/elements/table/extras/base-renderer/BaseRenderer.js +8 -8
- package/esm2015/elements/table/extras/date-cell/DateCell.js +31 -31
- package/esm2015/elements/table/extras/dropdown-cell/DropdownCell.js +44 -44
- package/esm2015/elements/table/extras/keep-filter-focus/KeepFilterFocus.js +19 -19
- package/esm2015/elements/table/extras/pagination/Pagination.js +125 -125
- package/esm2015/elements/table/extras/percentage-cell/PercentageCell.js +15 -15
- package/esm2015/elements/table/extras/row-details/RowDetails.js +44 -44
- package/esm2015/elements/table/extras/table-actions/TableActions.js +11 -11
- package/esm2015/elements/table/extras/table-cell/TableCell.js +82 -82
- package/esm2015/elements/table/extras/table-filter/TableFilter.js +59 -59
- package/esm2015/elements/table/extras/table-footer/TableFooter.js +11 -11
- package/esm2015/elements/table/extras/table-header/TableHeader.js +11 -11
- package/esm2015/elements/table/extras/th-orderable/ThOrderable.js +125 -125
- package/esm2015/elements/table/extras/th-sortable/ThSortable.js +37 -37
- package/esm2015/elements/tabs/Tabs.js +253 -253
- package/esm2015/elements/tabs/Tabs.module.js +31 -31
- package/esm2015/elements/tiles/Tiles.js +154 -154
- package/esm2015/elements/tiles/Tiles.module.js +16 -16
- package/esm2015/elements/time-picker/TimePicker.js +201 -201
- package/esm2015/elements/time-picker/TimePicker.module.js +21 -21
- package/esm2015/elements/time-picker/TimePickerInput.js +202 -202
- package/esm2015/elements/tip-well/TipWell.js +94 -94
- package/esm2015/elements/tip-well/TipWell.module.js +16 -16
- package/esm2015/elements/toast/Toast.js +111 -111
- package/esm2015/elements/toast/Toast.module.js +15 -15
- package/esm2015/elements/toast/ToastService.js +92 -92
- package/esm2015/elements/tooltip/Tooltip.component.js +37 -34
- package/esm2015/elements/tooltip/Tooltip.directive.js +189 -187
- package/esm2015/elements/tooltip/Tooltip.module.js +16 -16
- package/esm2015/elements/unless/Unless.js +56 -56
- package/esm2015/elements/unless/Unless.module.js +15 -15
- package/esm2015/elements/value/EntityList.js +84 -84
- package/esm2015/elements/value/Render.js +415 -415
- package/esm2015/elements/value/Value.js +160 -160
- package/esm2015/elements/value/Value.module.js +17 -17
- package/esm2015/index.js +221 -221
- package/esm2015/novo-elements.js +25 -25
- package/esm2015/novo-elements.module.js +128 -128
- package/esm2015/novo-elements.providers.js +50 -50
- package/esm2015/pipes/Pipes.module.js +15 -15
- package/esm2015/pipes/decode-uri/DecodeURI.js +18 -18
- package/esm2015/pipes/group-by/GroupBy.js +24 -24
- package/esm2015/pipes/plural/Plural.js +349 -349
- package/esm2015/services/data-provider/ArrayCollection.js +301 -301
- package/esm2015/services/data-provider/Collection.js +1 -1
- package/esm2015/services/data-provider/CollectionEvent.js +21 -21
- package/esm2015/services/data-provider/PagedArrayCollection.js +78 -78
- package/esm2015/services/data-provider/PagedCollection.js +1 -1
- package/esm2015/services/date-format/DateFormat.js +189 -189
- package/esm2015/services/global/global.service.js +18 -18
- package/esm2015/services/novo-label-service.js +279 -279
- package/esm2015/services/options/OptionsService.js +26 -26
- package/esm2015/services/security/Security.js +67 -67
- package/esm2015/services/storage/storage.service.js +16 -16
- package/esm2015/services/template/NovoTemplateService.js +33 -33
- package/esm2015/utils/Helpers.js +395 -395
- package/esm2015/utils/app-bridge/AppBridge.js +710 -710
- package/esm2015/utils/calendar-utils/CalendarUtils.js +321 -321
- package/esm2015/utils/component-utils/ComponentUtils.js +20 -20
- package/esm2015/utils/countries/Countries.js +17538 -17538
- package/esm2015/utils/deferred/Deferred.js +14 -14
- package/esm2015/utils/form-utils/FormUtils.js +793 -788
- package/esm2015/utils/key-codes/KeyCodes.js +95 -95
- package/esm2015/utils/notifier/notifier.util.js +10 -10
- package/esm2015/utils/outside-click/OutsideClick.js +60 -60
- package/fesm2015/novo-elements.js +43328 -43295
- package/fesm2015/novo-elements.js.map +1 -1
- package/index.d.ts +225 -225
- package/novo-elements.d.ts +24 -24
- package/novo-elements.metadata.json +1 -1
- package/novo-elements.module.d.ts +2 -2
- package/novo-elements.providers.d.ts +5 -5
- package/novo-elements.scss +110 -0
- package/package.json +1 -1
- package/pipes/Pipes.module.d.ts +2 -2
- package/pipes/decode-uri/DecodeURI.d.ts +4 -4
- package/pipes/group-by/GroupBy.d.ts +4 -4
- package/pipes/plural/Plural.d.ts +4 -4
- package/services/data-provider/ArrayCollection.d.ts +178 -178
- package/services/data-provider/Collection.d.ts +93 -93
- package/services/data-provider/CollectionEvent.d.ts +17 -17
- package/services/data-provider/PagedArrayCollection.d.ts +18 -18
- package/services/data-provider/PagedCollection.d.ts +15 -15
- package/services/date-format/DateFormat.d.ts +13 -13
- package/services/global/global.service.d.ts +11 -11
- package/services/novo-label-service.d.ts +142 -142
- package/services/options/OptionsService.d.ts +9 -9
- package/services/security/Security.d.ts +19 -19
- package/services/storage/storage.service.d.ts +5 -5
- package/services/template/NovoTemplateService.d.ts +7 -7
- package/styles/content/typography.scss +200 -0
- package/styles/global/cdk.scss +106 -0
- package/styles/global/flex-grid.scss +156 -0
- package/styles/global/functions.scss +174 -0
- package/styles/global/include-media.scss +578 -0
- package/styles/global/layout.scss +3 -0
- package/styles/global/reset.scss +451 -0
- package/styles/global/variables.scss +324 -0
- package/utils/Helpers.d.ts +68 -68
- package/utils/app-bridge/AppBridge.d.ts +178 -178
- package/utils/calendar-utils/CalendarUtils.d.ts +150 -150
- package/utils/component-utils/ComponentUtils.d.ts +6 -6
- package/utils/countries/Countries.d.ts +51 -51
- package/utils/deferred/Deferred.d.ts +4 -4
- package/utils/form-utils/FormUtils.d.ts +77 -77
- package/utils/key-codes/KeyCodes.d.ts +93 -93
- package/utils/notifier/notifier.util.d.ts +1 -1
- package/utils/outside-click/OutsideClick.d.ts +24 -24
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
// NG2
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
5
|
-
// APP
|
|
6
|
-
import { NovoOverlayModule } from '../overlay/Overlay.module';
|
|
7
|
-
import { NovoListModule } from '../list/List.module';
|
|
8
|
-
import { NovoLoadingModule } from '../loading/Loading.module';
|
|
9
|
-
import { NovoSwitchModule } from '../switch/Switch.module';
|
|
10
|
-
import { NovoPickerElement } from './Picker';
|
|
11
|
-
import { PickerResults } from './extras/picker-results/PickerResults';
|
|
12
|
-
import { EntityPickerResult, EntityPickerResults } from './extras/entity-picker-results/EntityPickerResults';
|
|
13
|
-
import { ChecklistPickerResults } from './extras/checklist-picker-results/ChecklistPickerResults';
|
|
14
|
-
import { GroupedMultiPickerResults } from './extras/grouped-multi-picker-results/GroupedMultiPickerResults';
|
|
15
|
-
import { MixedMultiPickerResults } from './extras/mixed-multi-picker-results/MixedMultiPickerResults';
|
|
16
|
-
import { SkillsSpecialtyPickerResults } from './extras/skills-picker-results/SkillsSpecialtyPickerResults';
|
|
17
|
-
import { DistributionListPickerResults } from './extras/distributionlist-picker-results/DistributionListPickerResults';
|
|
18
|
-
import { WorkersCompCodesPickerResults } from './extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults';
|
|
19
|
-
export class NovoPickerModule {
|
|
20
|
-
}
|
|
21
|
-
NovoPickerModule.decorators = [
|
|
22
|
-
{ type: NgModule, args: [{
|
|
23
|
-
imports: [CommonModule, FormsModule, NovoLoadingModule, NovoListModule, NovoOverlayModule, NovoSwitchModule],
|
|
24
|
-
declarations: [
|
|
25
|
-
NovoPickerElement,
|
|
26
|
-
PickerResults,
|
|
27
|
-
EntityPickerResult,
|
|
28
|
-
EntityPickerResults,
|
|
29
|
-
ChecklistPickerResults,
|
|
30
|
-
GroupedMultiPickerResults,
|
|
31
|
-
MixedMultiPickerResults,
|
|
32
|
-
DistributionListPickerResults,
|
|
33
|
-
WorkersCompCodesPickerResults,
|
|
34
|
-
SkillsSpecialtyPickerResults,
|
|
35
|
-
],
|
|
36
|
-
exports: [
|
|
37
|
-
NovoPickerElement,
|
|
38
|
-
PickerResults,
|
|
39
|
-
EntityPickerResult,
|
|
40
|
-
EntityPickerResults,
|
|
41
|
-
ChecklistPickerResults,
|
|
42
|
-
GroupedMultiPickerResults,
|
|
43
|
-
MixedMultiPickerResults,
|
|
44
|
-
DistributionListPickerResults,
|
|
45
|
-
WorkersCompCodesPickerResults,
|
|
46
|
-
SkillsSpecialtyPickerResults,
|
|
47
|
-
],
|
|
48
|
-
},] }
|
|
49
|
-
];
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
// NG2
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
// APP
|
|
6
|
+
import { NovoOverlayModule } from '../overlay/Overlay.module';
|
|
7
|
+
import { NovoListModule } from '../list/List.module';
|
|
8
|
+
import { NovoLoadingModule } from '../loading/Loading.module';
|
|
9
|
+
import { NovoSwitchModule } from '../switch/Switch.module';
|
|
10
|
+
import { NovoPickerElement } from './Picker';
|
|
11
|
+
import { PickerResults } from './extras/picker-results/PickerResults';
|
|
12
|
+
import { EntityPickerResult, EntityPickerResults } from './extras/entity-picker-results/EntityPickerResults';
|
|
13
|
+
import { ChecklistPickerResults } from './extras/checklist-picker-results/ChecklistPickerResults';
|
|
14
|
+
import { GroupedMultiPickerResults } from './extras/grouped-multi-picker-results/GroupedMultiPickerResults';
|
|
15
|
+
import { MixedMultiPickerResults } from './extras/mixed-multi-picker-results/MixedMultiPickerResults';
|
|
16
|
+
import { SkillsSpecialtyPickerResults } from './extras/skills-picker-results/SkillsSpecialtyPickerResults';
|
|
17
|
+
import { DistributionListPickerResults } from './extras/distributionlist-picker-results/DistributionListPickerResults';
|
|
18
|
+
import { WorkersCompCodesPickerResults } from './extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults';
|
|
19
|
+
export class NovoPickerModule {
|
|
20
|
+
}
|
|
21
|
+
NovoPickerModule.decorators = [
|
|
22
|
+
{ type: NgModule, args: [{
|
|
23
|
+
imports: [CommonModule, FormsModule, NovoLoadingModule, NovoListModule, NovoOverlayModule, NovoSwitchModule],
|
|
24
|
+
declarations: [
|
|
25
|
+
NovoPickerElement,
|
|
26
|
+
PickerResults,
|
|
27
|
+
EntityPickerResult,
|
|
28
|
+
EntityPickerResults,
|
|
29
|
+
ChecklistPickerResults,
|
|
30
|
+
GroupedMultiPickerResults,
|
|
31
|
+
MixedMultiPickerResults,
|
|
32
|
+
DistributionListPickerResults,
|
|
33
|
+
WorkersCompCodesPickerResults,
|
|
34
|
+
SkillsSpecialtyPickerResults,
|
|
35
|
+
],
|
|
36
|
+
exports: [
|
|
37
|
+
NovoPickerElement,
|
|
38
|
+
PickerResults,
|
|
39
|
+
EntityPickerResult,
|
|
40
|
+
EntityPickerResults,
|
|
41
|
+
ChecklistPickerResults,
|
|
42
|
+
GroupedMultiPickerResults,
|
|
43
|
+
MixedMultiPickerResults,
|
|
44
|
+
DistributionListPickerResults,
|
|
45
|
+
WorkersCompCodesPickerResults,
|
|
46
|
+
SkillsSpecialtyPickerResults,
|
|
47
|
+
],
|
|
48
|
+
},] }
|
|
49
|
+
];
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9ub3ZvLWVsZW1lbnRzL25vdm8tZWxlbWVudHMvcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvIiwic291cmNlcyI6WyJlbGVtZW50cy9waWNrZXIvUGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNO0FBQ04sT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE1BQU07QUFDTixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNsRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN2SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQTZCekgsTUFBTSxPQUFPLGdCQUFnQjs7O1lBM0I1QixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQzVHLFlBQVksRUFBRTtvQkFDWixpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2Isa0JBQWtCO29CQUNsQixtQkFBbUI7b0JBQ25CLHNCQUFzQjtvQkFDdEIseUJBQXlCO29CQUN6Qix1QkFBdUI7b0JBQ3ZCLDZCQUE2QjtvQkFDN0IsNkJBQTZCO29CQUM3Qiw0QkFBNEI7aUJBQzdCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2Isa0JBQWtCO29CQUNsQixtQkFBbUI7b0JBQ25CLHNCQUFzQjtvQkFDdEIseUJBQXlCO29CQUN6Qix1QkFBdUI7b0JBQ3ZCLDZCQUE2QjtvQkFDN0IsNkJBQTZCO29CQUM3Qiw0QkFBNEI7aUJBQzdCO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBORzJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG4vLyBBUFBcbmltcG9ydCB7IE5vdm9PdmVybGF5TW9kdWxlIH0gZnJvbSAnLi4vb3ZlcmxheS9PdmVybGF5Lm1vZHVsZSc7XG5pbXBvcnQgeyBOb3ZvTGlzdE1vZHVsZSB9IGZyb20gJy4uL2xpc3QvTGlzdC5tb2R1bGUnO1xuaW1wb3J0IHsgTm92b0xvYWRpbmdNb2R1bGUgfSBmcm9tICcuLi9sb2FkaW5nL0xvYWRpbmcubW9kdWxlJztcbmltcG9ydCB7IE5vdm9Td2l0Y2hNb2R1bGUgfSBmcm9tICcuLi9zd2l0Y2gvU3dpdGNoLm1vZHVsZSc7XG5pbXBvcnQgeyBOb3ZvUGlja2VyRWxlbWVudCB9IGZyb20gJy4vUGlja2VyJztcbmltcG9ydCB7IFBpY2tlclJlc3VsdHMgfSBmcm9tICcuL2V4dHJhcy9waWNrZXItcmVzdWx0cy9QaWNrZXJSZXN1bHRzJztcbmltcG9ydCB7IEVudGl0eVBpY2tlclJlc3VsdCwgRW50aXR5UGlja2VyUmVzdWx0cyB9IGZyb20gJy4vZXh0cmFzL2VudGl0eS1waWNrZXItcmVzdWx0cy9FbnRpdHlQaWNrZXJSZXN1bHRzJztcbmltcG9ydCB7IENoZWNrbGlzdFBpY2tlclJlc3VsdHMgfSBmcm9tICcuL2V4dHJhcy9jaGVja2xpc3QtcGlja2VyLXJlc3VsdHMvQ2hlY2tsaXN0UGlja2VyUmVzdWx0cyc7XG5pbXBvcnQgeyBHcm91cGVkTXVsdGlQaWNrZXJSZXN1bHRzIH0gZnJvbSAnLi9leHRyYXMvZ3JvdXBlZC1tdWx0aS1waWNrZXItcmVzdWx0cy9Hcm91cGVkTXVsdGlQaWNrZXJSZXN1bHRzJztcbmltcG9ydCB7IE1peGVkTXVsdGlQaWNrZXJSZXN1bHRzIH0gZnJvbSAnLi9leHRyYXMvbWl4ZWQtbXVsdGktcGlja2VyLXJlc3VsdHMvTWl4ZWRNdWx0aVBpY2tlclJlc3VsdHMnO1xuaW1wb3J0IHsgU2tpbGxzU3BlY2lhbHR5UGlja2VyUmVzdWx0cyB9IGZyb20gJy4vZXh0cmFzL3NraWxscy1waWNrZXItcmVzdWx0cy9Ta2lsbHNTcGVjaWFsdHlQaWNrZXJSZXN1bHRzJztcbmltcG9ydCB7IERpc3RyaWJ1dGlvbkxpc3RQaWNrZXJSZXN1bHRzIH0gZnJvbSAnLi9leHRyYXMvZGlzdHJpYnV0aW9ubGlzdC1waWNrZXItcmVzdWx0cy9EaXN0cmlidXRpb25MaXN0UGlja2VyUmVzdWx0cyc7XG5pbXBvcnQgeyBXb3JrZXJzQ29tcENvZGVzUGlja2VyUmVzdWx0cyB9IGZyb20gJy4vZXh0cmFzL3dvcmtlcnMtY29tcC1jb2Rlcy1waWNrZXItcmVzdWx0cy9Xb3JrZXJzQ29tcENvZGVzUGlja2VyUmVzdWx0cyc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBOb3ZvTG9hZGluZ01vZHVsZSwgTm92b0xpc3RNb2R1bGUsIE5vdm9PdmVybGF5TW9kdWxlLCBOb3ZvU3dpdGNoTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTm92b1BpY2tlckVsZW1lbnQsXG4gICAgUGlja2VyUmVzdWx0cyxcbiAgICBFbnRpdHlQaWNrZXJSZXN1bHQsXG4gICAgRW50aXR5UGlja2VyUmVzdWx0cyxcbiAgICBDaGVja2xpc3RQaWNrZXJSZXN1bHRzLFxuICAgIEdyb3VwZWRNdWx0aVBpY2tlclJlc3VsdHMsXG4gICAgTWl4ZWRNdWx0aVBpY2tlclJlc3VsdHMsXG4gICAgRGlzdHJpYnV0aW9uTGlzdFBpY2tlclJlc3VsdHMsXG4gICAgV29ya2Vyc0NvbXBDb2Rlc1BpY2tlclJlc3VsdHMsXG4gICAgU2tpbGxzU3BlY2lhbHR5UGlja2VyUmVzdWx0cyxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIE5vdm9QaWNrZXJFbGVtZW50LFxuICAgIFBpY2tlclJlc3VsdHMsXG4gICAgRW50aXR5UGlja2VyUmVzdWx0LFxuICAgIEVudGl0eVBpY2tlclJlc3VsdHMsXG4gICAgQ2hlY2tsaXN0UGlja2VyUmVzdWx0cyxcbiAgICBHcm91cGVkTXVsdGlQaWNrZXJSZXN1bHRzLFxuICAgIE1peGVkTXVsdGlQaWNrZXJSZXN1bHRzLFxuICAgIERpc3RyaWJ1dGlvbkxpc3RQaWNrZXJSZXN1bHRzLFxuICAgIFdvcmtlcnNDb21wQ29kZXNQaWNrZXJSZXN1bHRzLFxuICAgIFNraWxsc1NwZWNpYWx0eVBpY2tlclJlc3VsdHMsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdm9QaWNrZXJNb2R1bGUgeyB9XG4iXX0=
|
|
@@ -1,353 +1,353 @@
|
|
|
1
|
-
// NG2
|
|
2
|
-
import { ElementRef, Input, ChangeDetectorRef, Directive } from '@angular/core';
|
|
3
|
-
// APP
|
|
4
|
-
import { Helpers } from '../../../../utils/Helpers';
|
|
5
|
-
// Vendor
|
|
6
|
-
import { from } from 'rxjs';
|
|
7
|
-
/**
|
|
8
|
-
* @description This is the actual list of matches that gets injected into the DOM. It's also the piece that can be
|
|
9
|
-
* overwritten if custom list options are needed.
|
|
10
|
-
*/
|
|
11
|
-
export class BasePickerResults {
|
|
12
|
-
constructor(element, ref) {
|
|
13
|
-
this._term = '';
|
|
14
|
-
this.selected = [];
|
|
15
|
-
this.matches = [];
|
|
16
|
-
this.hasError = false;
|
|
17
|
-
this.isLoading = false;
|
|
18
|
-
this.isStatic = true;
|
|
19
|
-
this.page = 0;
|
|
20
|
-
this.lastPage = false;
|
|
21
|
-
this.autoSelectFirstOption = true;
|
|
22
|
-
this.optionsFunctionHasChanged = false;
|
|
23
|
-
this.selectingMatches = false;
|
|
24
|
-
this.element = element;
|
|
25
|
-
this.ref = ref;
|
|
26
|
-
this.scrollHandler = this.onScrollDown.bind(this);
|
|
27
|
-
}
|
|
28
|
-
cleanUp() {
|
|
29
|
-
const element = this.getListElement();
|
|
30
|
-
if (element && element.hasAttribute('scrollListener')) {
|
|
31
|
-
element.removeAttribute('scrollListener');
|
|
32
|
-
element.removeEventListener('scroll', this.scrollHandler);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
onScrollDown(event) {
|
|
36
|
-
const element = event.target;
|
|
37
|
-
if (element) {
|
|
38
|
-
const offset = element.offsetHeight + element.scrollTop;
|
|
39
|
-
const bottom = element.scrollHeight - 300;
|
|
40
|
-
if (offset >= bottom) {
|
|
41
|
-
event.stopPropagation();
|
|
42
|
-
if (!this.lastPage && !this.isLoading) {
|
|
43
|
-
this.processSearch();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
get term() {
|
|
49
|
-
return this._term;
|
|
50
|
-
}
|
|
51
|
-
set term(value) {
|
|
52
|
-
if (this.shouldSearch(value)) {
|
|
53
|
-
this._term = value;
|
|
54
|
-
this.page = 0;
|
|
55
|
-
this.optionsFunctionHasChanged = false;
|
|
56
|
-
this.matches = [];
|
|
57
|
-
this.processSearch(true);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
this.addScrollListener();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
set config(value) {
|
|
64
|
-
if (this.config && this.config.options !== value.options) {
|
|
65
|
-
this.optionsFunctionHasChanged = true; // reset page so that new options call is used to search
|
|
66
|
-
}
|
|
67
|
-
this._config = value;
|
|
68
|
-
}
|
|
69
|
-
get config() {
|
|
70
|
-
return this._config;
|
|
71
|
-
}
|
|
72
|
-
shouldSearch(value) {
|
|
73
|
-
const termHasChanged = value !== this._term;
|
|
74
|
-
const optionsNotYetCalled = this.page === 0;
|
|
75
|
-
return termHasChanged || optionsNotYetCalled || this.optionsFunctionHasChanged;
|
|
76
|
-
}
|
|
77
|
-
addScrollListener() {
|
|
78
|
-
if (this.config.enableInfiniteScroll) {
|
|
79
|
-
const element = this.getListElement();
|
|
80
|
-
if (element && !element.hasAttribute('scrollListener')) {
|
|
81
|
-
element.setAttribute('scrollListener', 'true');
|
|
82
|
-
element.addEventListener('scroll', this.scrollHandler);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
processSearch(shouldReset) {
|
|
87
|
-
this.hasError = false;
|
|
88
|
-
this.isLoading = true;
|
|
89
|
-
this.ref.markForCheck();
|
|
90
|
-
this.search(this.term).subscribe((results) => {
|
|
91
|
-
if (shouldReset) {
|
|
92
|
-
this.matches = [];
|
|
93
|
-
}
|
|
94
|
-
if (this.isStatic) {
|
|
95
|
-
this.matches = this.filterData(results);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this.matches = this.matches.concat(results);
|
|
99
|
-
this.lastPage = results && !results.length;
|
|
100
|
-
}
|
|
101
|
-
if (this.matches.length > 0 && this.autoSelectFirstOption && !this.selectingMatches) {
|
|
102
|
-
this.nextActiveMatch();
|
|
103
|
-
}
|
|
104
|
-
this.isLoading = false;
|
|
105
|
-
this.ref.markForCheck();
|
|
106
|
-
setTimeout(() => {
|
|
107
|
-
this.overlay.updatePosition();
|
|
108
|
-
this.addScrollListener();
|
|
109
|
-
}); // @bkimball: This was added for Dylan Schulte, 9.18.2017 4:14PM EST, you're welcome!
|
|
110
|
-
}, (err) => {
|
|
111
|
-
this.hasError = this.term && this.term.length !== 0;
|
|
112
|
-
this.isLoading = false;
|
|
113
|
-
this.lastPage = true;
|
|
114
|
-
if (this.term && this.term.length !== 0) {
|
|
115
|
-
console.error(err); // tslint:disable-lineno
|
|
116
|
-
}
|
|
117
|
-
this.ref.markForCheck();
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
search(term, mode) {
|
|
121
|
-
const options = this.config.options;
|
|
122
|
-
return from(new Promise((resolve, reject) => {
|
|
123
|
-
// Check if there is match data
|
|
124
|
-
if (options) {
|
|
125
|
-
// Resolve the data
|
|
126
|
-
if (Array.isArray(options)) {
|
|
127
|
-
this.isStatic = true;
|
|
128
|
-
// Arrays are returned immediately
|
|
129
|
-
resolve(this.structureArray(options));
|
|
130
|
-
}
|
|
131
|
-
else if (this.shouldCallOptionsFunction(term)) {
|
|
132
|
-
if ((options.hasOwnProperty('reject') && options.hasOwnProperty('resolve')) ||
|
|
133
|
-
Object.getPrototypeOf(options).hasOwnProperty('then')) {
|
|
134
|
-
this.isStatic = false;
|
|
135
|
-
// Promises (ES6 or Deferred) are resolved whenever they resolve
|
|
136
|
-
options.then(this.structureArray.bind(this)).then(resolve, reject);
|
|
137
|
-
}
|
|
138
|
-
else if (typeof options === 'function') {
|
|
139
|
-
this.isStatic = false;
|
|
140
|
-
// Promises (ES6 or Deferred) are resolved whenever they resolve
|
|
141
|
-
options(term, ++this.page)
|
|
142
|
-
.then(this.structureArray.bind(this))
|
|
143
|
-
.then(resolve, reject);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
// All other kinds of data are rejected
|
|
147
|
-
reject('The data provided is not an array or a promise');
|
|
148
|
-
throw new Error('The data provided is not an array or a promise');
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
if (this.config.defaultOptions) {
|
|
153
|
-
this.isStatic = false;
|
|
154
|
-
if (typeof this.config.defaultOptions === 'function') {
|
|
155
|
-
const defaultOptions = this.config.defaultOptions(term, ++this.page);
|
|
156
|
-
if (Object.getPrototypeOf(defaultOptions).hasOwnProperty('then')) {
|
|
157
|
-
defaultOptions.then(this.structureArray.bind(this)).then(resolve, reject);
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
resolve(this.structureArray(defaultOptions));
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
resolve(this.structureArray(this.config.defaultOptions));
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
// No search term gets rejected
|
|
169
|
-
reject('No search term');
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
// No data gets rejected
|
|
175
|
-
reject('error');
|
|
176
|
-
}
|
|
177
|
-
}));
|
|
178
|
-
}
|
|
179
|
-
shouldCallOptionsFunction(term) {
|
|
180
|
-
if (this.config && 'minSearchLength' in this.config && Number.isInteger(this.config.minSearchLength)) {
|
|
181
|
-
return typeof term === 'string' && term.length >= this.config.minSearchLength;
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
return !!(term && term.length);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* @param collection - the data once getData resolves it
|
|
189
|
-
*
|
|
190
|
-
* @description This function structures an array of nodes into an array of objects with a
|
|
191
|
-
* 'name' field by default.
|
|
192
|
-
*/
|
|
193
|
-
structureArray(collection) {
|
|
194
|
-
const dataArray = collection.data ? collection.data : collection;
|
|
195
|
-
if (dataArray && (typeof dataArray[0] === 'string' || typeof dataArray[0] === 'number')) {
|
|
196
|
-
return collection.map((item) => {
|
|
197
|
-
return {
|
|
198
|
-
value: item,
|
|
199
|
-
label: item,
|
|
200
|
-
};
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
return dataArray.map((data) => {
|
|
204
|
-
let value = this.config.field ? data[this.config.field] : data.value || data;
|
|
205
|
-
if (this.config.valueFormat) {
|
|
206
|
-
value = Helpers.interpolate(this.config.valueFormat, data);
|
|
207
|
-
}
|
|
208
|
-
const label = this.config.format ? Helpers.interpolate(this.config.format, data) : data.label || String(value);
|
|
209
|
-
return { value, label, data };
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* @param matches - Collection of objects=
|
|
214
|
-
*
|
|
215
|
-
* @description This function loops through the picker options and creates a filtered list of objects that contain
|
|
216
|
-
* the newSearch.
|
|
217
|
-
*/
|
|
218
|
-
filterData(matches) {
|
|
219
|
-
if (this.term && matches) {
|
|
220
|
-
return matches.filter((match) => {
|
|
221
|
-
return ~String(match.label)
|
|
222
|
-
.toLowerCase()
|
|
223
|
-
.indexOf(this.term.toLowerCase());
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
// Show no recent results template
|
|
227
|
-
return matches;
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* @description This function is called when the user presses the enter key to call the selectMatch method.
|
|
231
|
-
*/
|
|
232
|
-
selectActiveMatch() {
|
|
233
|
-
this.selectMatch();
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* @description This function sets activeMatch to the match before the current node.
|
|
237
|
-
*/
|
|
238
|
-
prevActiveMatch() {
|
|
239
|
-
const index = this.matches.indexOf(this.activeMatch);
|
|
240
|
-
this.activeMatch = this.matches[index - 1 < 0 ? this.matches.length - 1 : index - 1];
|
|
241
|
-
this.scrollToActive();
|
|
242
|
-
this.ref.markForCheck();
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* @description This function sets activeMatch to the match after the current node.
|
|
246
|
-
*/
|
|
247
|
-
nextActiveMatch() {
|
|
248
|
-
const index = this.matches.indexOf(this.activeMatch);
|
|
249
|
-
this.activeMatch = this.matches[index + 1 > this.matches.length - 1 ? 0 : index + 1];
|
|
250
|
-
this.scrollToActive();
|
|
251
|
-
this.ref.markForCheck();
|
|
252
|
-
}
|
|
253
|
-
getListElement() {
|
|
254
|
-
return this.element.nativeElement;
|
|
255
|
-
}
|
|
256
|
-
getChildrenOfListElement() {
|
|
257
|
-
let children = [];
|
|
258
|
-
if (this.getListElement()) {
|
|
259
|
-
children = this.getListElement().children;
|
|
260
|
-
}
|
|
261
|
-
return children;
|
|
262
|
-
}
|
|
263
|
-
scrollToActive() {
|
|
264
|
-
const list = this.getListElement();
|
|
265
|
-
const items = this.getChildrenOfListElement();
|
|
266
|
-
const index = this.matches.indexOf(this.activeMatch);
|
|
267
|
-
const item = items[index];
|
|
268
|
-
if (item) {
|
|
269
|
-
list.scrollTop = item.offsetTop;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* @description
|
|
274
|
-
*/
|
|
275
|
-
selectActive(match) {
|
|
276
|
-
this.activeMatch = match;
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* @description
|
|
280
|
-
*/
|
|
281
|
-
isActive(match) {
|
|
282
|
-
return this.activeMatch === match;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* @description
|
|
286
|
-
*/
|
|
287
|
-
selectMatch(event, item) {
|
|
288
|
-
if (event) {
|
|
289
|
-
event.stopPropagation();
|
|
290
|
-
event.preventDefault();
|
|
291
|
-
}
|
|
292
|
-
const selected = this.activeMatch;
|
|
293
|
-
if (selected && this.parent) {
|
|
294
|
-
this.parent.value = selected;
|
|
295
|
-
this.selectingMatches = true;
|
|
296
|
-
if (this.parent.closeOnSelect) {
|
|
297
|
-
this.parent.hideResults();
|
|
298
|
-
this.selectingMatches = false;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
this.ref.markForCheck();
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* @description This function captures the whole query string and replace it with the string that will be used to
|
|
306
|
-
* match.
|
|
307
|
-
*/
|
|
308
|
-
escapeRegexp(queryToEscape) {
|
|
309
|
-
// Ex: if the capture is "a" the result will be \a
|
|
310
|
-
return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* @description This function should return a <strong>-tag wrapped HTML string.
|
|
314
|
-
*/
|
|
315
|
-
highlight(match, query) {
|
|
316
|
-
// Replaces the capture string with a the same string inside of a "strong" tag
|
|
317
|
-
return query ? match.replace(new RegExp(this.escapeRegexp(query.trim()), 'gi'), '<strong>$&</strong>') : match;
|
|
318
|
-
}
|
|
319
|
-
preselected(match) {
|
|
320
|
-
if (this.config.preselected) {
|
|
321
|
-
const preselectedFunc = this.config.preselected;
|
|
322
|
-
return (this.selected.findIndex((item) => {
|
|
323
|
-
return preselectedFunc(match, item);
|
|
324
|
-
}) !== -1);
|
|
325
|
-
}
|
|
326
|
-
return (this.selected.findIndex((item) => {
|
|
327
|
-
let isPreselected = false;
|
|
328
|
-
if (item && item.value && match && match.value) {
|
|
329
|
-
if (item.value.id && match.value.id) {
|
|
330
|
-
isPreselected = item.value.id === match.value.id;
|
|
331
|
-
}
|
|
332
|
-
else if (item.value instanceof Object && item.value.hasOwnProperty('value')) {
|
|
333
|
-
isPreselected = item.value.value === match.value;
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
isPreselected = item.value === match.value;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
return isPreselected;
|
|
340
|
-
}) !== -1);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
BasePickerResults.decorators = [
|
|
344
|
-
{ type: Directive }
|
|
345
|
-
];
|
|
346
|
-
BasePickerResults.ctorParameters = () => [
|
|
347
|
-
{ type: ElementRef },
|
|
348
|
-
{ type: ChangeDetectorRef }
|
|
349
|
-
];
|
|
350
|
-
BasePickerResults.propDecorators = {
|
|
351
|
-
matches: [{ type: Input }]
|
|
352
|
-
};
|
|
353
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVBpY2tlclJlc3VsdHMuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvY2hhcmxlcy5iYXJuZXMvRG9jdW1lbnRzL2Rldi9ub3ZvLWVsZW1lbnRzL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjLyIsInNvdXJjZXMiOlsiZWxlbWVudHMvcGlja2VyL2V4dHJhcy9iYXNlLXBpY2tlci1yZXN1bHRzL0Jhc2VQaWNrZXJSZXN1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU07QUFDTixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsTUFBTTtBQUNOLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUl4Qzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBb0I1QixZQUFZLE9BQW1CLEVBQUUsR0FBc0I7UUFuQnZELFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUNqQixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQVksSUFBSSxDQUFDO1FBTXpCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQiwwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFFdEMsOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUl4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJ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LEtBQUssQ0FBQyxDQUFDLENBQ1YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxDQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQzlDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ25DLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDbEQ7cUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDN0UsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNMLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQzVDO2FBQ0Y7WUFDRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDVixDQUFDO0lBQ0osQ0FBQzs7O1lBNVdGLFNBQVM7OztZQVpELFVBQVU7WUFBUyxpQkFBaUI7OztzQkFnQjFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBORzJcclxuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuLy8gQVBQXHJcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9IZWxwZXJzJztcclxuLy8gVmVuZG9yXHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTm92b0NvbnRyb2xDb25maWcgfSBmcm9tICcuLi8uLi8uLi9mb3JtL2NvbnRyb2xzL0Jhc2VDb250cm9sJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gVGhpcyBpcyB0aGUgYWN0dWFsIGxpc3Qgb2YgbWF0Y2hlcyB0aGF0IGdldHMgaW5qZWN0ZWQgaW50byB0aGUgRE9NLiBJdCdzIGFsc28gdGhlIHBpZWNlIHRoYXQgY2FuIGJlXHJcbiAqIG92ZXJ3cml0dGVuIGlmIGN1c3RvbSBsaXN0IG9wdGlvbnMgYXJlIG5lZWRlZC5cclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgQmFzZVBpY2tlclJlc3VsdHMge1xyXG4gIF90ZXJtOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlZDogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIG1hdGNoZXM6IGFueSA9IFtdO1xyXG4gIGhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdGF0aWM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIF9jb25maWc6IE5vdm9Db250cm9sQ29uZmlnWydjb25maWcnXTtcclxuICBhY3RpdmVNYXRjaDogYW55O1xyXG4gIHBhcmVudDogYW55O1xyXG4gIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZjtcclxuICBwYWdlOiBudW1iZXIgPSAwO1xyXG4gIGxhc3RQYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYXV0b1NlbGVjdEZpcnN0T3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBvdmVybGF5OiBPdmVybGF5UmVmO1xyXG4gIG9wdGlvbnNGdW5jdGlvbkhhc0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNlbGVjdGluZ01hdGNoZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNjcm9sbEhhbmRsZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZiwgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHRoaXMucmVmID0gcmVmO1xyXG4gICAgdGhpcy5zY3JvbGxIYW5kbGVyID0gdGhpcy5vblNjcm9sbERvd24uYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIGNsZWFuVXAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gdGhpcy5nZXRMaXN0RWxlbWVudCgpO1xyXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3Njcm9sbExpc3RlbmVyJykpIHtcclxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3Njcm9sbExpc3RlbmVyJyk7XHJcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsRG93bihldmVudDogV2hlZWxFdmVudCkge1xyXG4gICAgY29uc3QgZWxlbWVudDogYW55ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgKyBlbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgY29uc3QgYm90dG9tID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSAzMDA7XHJcbiAgICAgIGlmIChvZmZzZXQgPj0gYm90dG9tKSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxhc3RQYWdlICYmICF0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2VhcmNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdGVybSgpIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtO1xyXG4gIH1cclxuXHJcbiAgc2V0IHRlcm0odmFsdWUpIHtcclxuICAgIGlmICh0aGlzLnNob3VsZFNlYXJjaCh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5fdGVybSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnBhZ2UgPSAwO1xyXG4gICAgICB0aGlzLm9wdGlvbnNGdW5jdGlvbkhhc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5tYXRjaGVzID0gW107XHJcbiAgICAgIHRoaXMucHJvY2Vzc1NlYXJjaCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldCBjb25maWcodmFsdWU6IE5vdm9Db250cm9sQ29uZmlnWydjb25maWcnXSkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLm9wdGlvbnMgIT09IHZhbHVlLm9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5vcHRpb25zRnVuY3Rpb25IYXNDaGFuZ2VkID0gdHJ1ZTsgLy8gcmVzZXQgcGFnZSBzbyB0aGF0IG5ldyBvcHRpb25zIGNhbGwgaXMgdXNlZCB0byBzZWFyY2hcclxuICAgIH1cclxuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbmZpZygpOiBOb3ZvQ29udHJvbENvbmZpZ1snY29uZmlnJ10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcclxuICB9XHJcblxyXG4gIHNob3VsZFNlYXJjaCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGVybUhhc0NoYW5nZWQgPSB2YWx1ZSAhPT0gdGhpcy5fdGVybTtcclxuICAgIGNvbnN0IG9wdGlvbnNOb3RZZXRDYWxsZWQgPSB0aGlzLnBhZ2UgPT09IDA7XHJcblxyXG4gICAgcmV0dXJuIHRlcm1IYXNDaGFuZ2VkIHx8IG9wdGlvbnNOb3RZZXRDYWxsZWQgfHwgdGhpcy5vcHRpb25zRnVuY3Rpb25IYXNDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgYWRkU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlSW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IHRoaXMuZ2V0TGlzdEVsZW1lbnQoKTtcclxuICAgICAgaWYgKGVsZW1lbnQgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdzY3JvbGxMaXN0ZW5lcicpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Njcm9sbExpc3RlbmVyJywgJ3RydWUnKTtcclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTZWFyY2goc2hvdWxkUmVzZXQ/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuc2VhcmNoKHRoaXMudGVybSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHNob3VsZFJlc2V0KSB7XHJcbiAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcclxuICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IHRoaXMuZmlsdGVyRGF0YShyZXN1bHRzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tYXRjaGVzID0gdGhpcy5tYXRjaGVzLmNvbmNhdChyZXN1bHRzKTtcclxuICAgICAgICAgIHRoaXMubGFzdFBhZ2UgPSByZXN1bHRzICYmICFyZXN1bHRzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF0Y2hlcy5sZW5ndGggPiAwICYmIHRoaXMuYXV0b1NlbGVjdEZpcnN0T3B0aW9uICYmICF0aGlzLnNlbGVjdGluZ01hdGNoZXMpIHtcclxuICAgICAgICAgIHRoaXMubmV4dEFjdGl2ZU1hdGNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm92ZXJsYXkudXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICAgIHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgICB9KTsgLy8gQGJraW1iYWxsOiBUaGlzIHdhcyBhZGRlZCBmb3IgRHlsYW4gU2NodWx0ZSwgOS4xOC4yMDE3IDQ6MTRQTSBFU1QsIHlvdSdyZSB3ZWxjb21lIVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRoaXMudGVybSAmJiB0aGlzLnRlcm0ubGVuZ3RoICE9PSAwO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sYXN0UGFnZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLnRlcm0ubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVub1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2godGVybSwgbW9kZT8pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29uZmlnLm9wdGlvbnM7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIG1hdGNoIGRhdGFcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgZGF0YVxyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1N0YXRpYyA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIEFycmF5cyBhcmUgcmV0dXJuZWQgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnN0cnVjdHVyZUFycmF5KG9wdGlvbnMpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRDYWxsT3B0aW9uc0Z1bmN0aW9uKHRlcm0pKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgncmVqZWN0JykgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgncmVzb2x2ZScpKSB8fFxyXG4gICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihvcHRpb25zKS5oYXNPd25Qcm9wZXJ0eSgndGhlbicpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyBQcm9taXNlcyAoRVM2IG9yIERlZmVycmVkKSBhcmUgcmVzb2x2ZWQgd2hlbmV2ZXIgdGhleSByZXNvbHZlXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy50aGVuKHRoaXMuc3RydWN0dXJlQXJyYXkuYmluZCh0aGlzKSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIFByb21pc2VzIChFUzYgb3IgRGVmZXJyZWQpIGFyZSByZXNvbHZlZCB3aGVuZXZlciB0aGV5IHJlc29sdmVcclxuICAgICAgICAgICAgICBvcHRpb25zKHRlcm0sICsrdGhpcy5wYWdlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4odGhpcy5zdHJ1Y3R1cmVBcnJheS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBBbGwgb3RoZXIga2luZHMgb2YgZGF0YSBhcmUgcmVqZWN0ZWRcclxuICAgICAgICAgICAgICByZWplY3QoJ1RoZSBkYXRhIHByb3ZpZGVkIGlzIG5vdCBhbiBhcnJheSBvciBhIHByb21pc2UnKTtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHByb3ZpZGVkIGlzIG5vdCBhbiBhcnJheSBvciBhIHByb21pc2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnModGVybSwgKyt0aGlzLnBhZ2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihkZWZhdWx0T3B0aW9ucykuaGFzT3duUHJvcGVydHkoJ3RoZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucy50aGVuKHRoaXMuc3RydWN0dXJlQXJyYXkuYmluZCh0aGlzKSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnN0cnVjdHVyZUFycmF5KGRlZmF1bHRPcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zdHJ1Y3R1cmVBcnJheSh0aGlzLmNvbmZpZy5kZWZhdWx0T3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBObyBzZWFyY2ggdGVybSBnZXRzIHJlamVjdGVkXHJcbiAgICAgICAgICAgICAgcmVqZWN0KCdObyBzZWFyY2ggdGVybScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIE5vIGRhdGEgZ2V0cyByZWplY3RlZFxyXG4gICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkQ2FsbE9wdGlvbnNGdW5jdGlvbih0ZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiAnbWluU2VhcmNoTGVuZ3RoJyBpbiB0aGlzLmNvbmZpZyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29uZmlnLm1pblNlYXJjaExlbmd0aCkpIHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiB0ZXJtID09PSAnc3RyaW5nJyAmJiB0ZXJtLmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5taW5TZWFyY2hMZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gISEodGVybSAmJiB0ZXJtLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gY29sbGVjdGlvbiAtIHRoZSBkYXRhIG9uY2UgZ2V0RGF0YSByZXNvbHZlcyBpdFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gc3RydWN0dXJlcyBhbiBhcnJheSBvZiBub2RlcyBpbnRvIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhXHJcbiAgICogJ25hbWUnIGZpZWxkIGJ5IGRlZmF1bHQuXHJcbiAgICovXHJcbiAgc3RydWN0dXJlQXJyYXkoY29sbGVjdGlvbjogYW55KTogYW55IHtcclxuICAgIGNvbnN0IGRhdGFBcnJheSA9IGNvbGxlY3Rpb24uZGF0YSA/IGNvbGxlY3Rpb24uZGF0YSA6IGNvbGxlY3Rpb247XHJcbiAgICBpZiAoZGF0YUFycmF5ICYmICh0eXBlb2YgZGF0YUFycmF5WzBdID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZGF0YUFycmF5WzBdID09PSAnbnVtYmVyJykpIHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3Rpb24ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHZhbHVlOiBpdGVtLFxyXG4gICAgICAgICAgbGFiZWw6IGl0ZW0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YUFycmF5Lm1hcCgoZGF0YSkgPT4ge1xyXG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmNvbmZpZy5maWVsZCA/IGRhdGFbdGhpcy5jb25maWcuZmllbGRdIDogZGF0YS52YWx1ZSB8fCBkYXRhO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcudmFsdWVGb3JtYXQpIHtcclxuICAgICAgICB2YWx1ZSA9IEhlbHBlcnMuaW50ZXJwb2xhdGUodGhpcy5jb25maWcudmFsdWVGb3JtYXQsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jb25maWcuZm9ybWF0ID8gSGVscGVycy5pbnRlcnBvbGF0ZSh0aGlzLmNvbmZpZy5mb3JtYXQsIGRhdGEpIDogZGF0YS5sYWJlbCB8fCBTdHJpbmcodmFsdWUpO1xyXG4gICAgICByZXR1cm4geyB2YWx1ZSwgbGFiZWwsIGRhdGEgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIG1hdGNoZXMgLSBDb2xsZWN0aW9uIG9mIG9iamVjdHM9XHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBsb29wcyB0aHJvdWdoIHRoZSBwaWNrZXIgb3B0aW9ucyBhbmQgY3JlYXRlcyBhIGZpbHRlcmVkIGxpc3Qgb2Ygb2JqZWN0cyB0aGF0IGNvbnRhaW5cclxuICAgKiB0aGUgbmV3U2VhcmNoLlxyXG4gICAqL1xyXG4gIGZpbHRlckRhdGEobWF0Y2hlcyk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKHRoaXMudGVybSAmJiBtYXRjaGVzKSB7XHJcbiAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcigobWF0Y2gpID0+IHtcclxuICAgICAgICByZXR1cm4gflN0cmluZyhtYXRjaC5sYWJlbClcclxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAuaW5kZXhPZih0aGlzLnRlcm0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gU2hvdyBubyByZWNlbnQgcmVzdWx0cyB0ZW1wbGF0ZVxyXG4gICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBlbnRlciBrZXkgdG8gY2FsbCB0aGUgc2VsZWN0TWF0Y2ggbWV0aG9kLlxyXG4gICAqL1xyXG4gIHNlbGVjdEFjdGl2ZU1hdGNoKCkge1xyXG4gICAgdGhpcy5zZWxlY3RNYXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gc2V0cyBhY3RpdmVNYXRjaCB0byB0aGUgbWF0Y2ggYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUuXHJcbiAgICovXHJcbiAgcHJldkFjdGl2ZU1hdGNoKCkge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm1hdGNoZXMuaW5kZXhPZih0aGlzLmFjdGl2ZU1hdGNoKTtcclxuICAgIHRoaXMuYWN0aXZlTWF0Y2ggPSB0aGlzLm1hdGNoZXNbaW5kZXggLSAxIDwgMCA/IHRoaXMubWF0Y2hlcy5sZW5ndGggLSAxIDogaW5kZXggLSAxXTtcclxuICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gc2V0cyBhY3RpdmVNYXRjaCB0byB0aGUgbWF0Y2ggYWZ0ZXIgdGhlIGN1cnJlbnQgbm9kZS5cclxuICAgKi9cclxuICBuZXh0QWN0aXZlTWF0Y2goKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0Y2hlcy5pbmRleE9mKHRoaXMuYWN0aXZlTWF0Y2gpO1xyXG4gICAgdGhpcy5hY3RpdmVNYXRjaCA9IHRoaXMubWF0Y2hlc1tpbmRleCArIDEgPiB0aGlzLm1hdGNoZXMubGVuZ3RoIC0gMSA/IDAgOiBpbmRleCArIDFdO1xyXG4gICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRMaXN0RWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuT2ZMaXN0RWxlbWVudCgpIHtcclxuICAgIGxldCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZ2V0TGlzdEVsZW1lbnQoKSkge1xyXG4gICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdEVsZW1lbnQoKS5jaGlsZHJlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvQWN0aXZlKCkge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0TGlzdEVsZW1lbnQoKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRDaGlsZHJlbk9mTGlzdEVsZW1lbnQoKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tYXRjaGVzLmluZGV4T2YodGhpcy5hY3RpdmVNYXRjaCk7XHJcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXhdO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgbGlzdC5zY3JvbGxUb3AgPSBpdGVtLm9mZnNldFRvcDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqL1xyXG4gIHNlbGVjdEFjdGl2ZShtYXRjaCkge1xyXG4gICAgdGhpcy5hY3RpdmVNYXRjaCA9IG1hdGNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICovXHJcbiAgaXNBY3RpdmUobWF0Y2gpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZU1hdGNoID09PSBtYXRjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqL1xyXG4gIHNlbGVjdE1hdGNoKGV2ZW50PzogYW55LCBpdGVtPzogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmFjdGl2ZU1hdGNoO1xyXG4gICAgaWYgKHNlbGVjdGVkICYmIHRoaXMucGFyZW50KSB7XHJcbiAgICAgIHRoaXMucGFyZW50LnZhbHVlID0gc2VsZWN0ZWQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW5nTWF0Y2hlcyA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnBhcmVudC5jbG9zZU9uU2VsZWN0KSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQuaGlkZVJlc3VsdHMoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGluZ01hdGNoZXMgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBjYXB0dXJlcyB0aGUgd2hvbGUgcXVlcnkgc3RyaW5nIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCB0b1xyXG4gICAqIG1hdGNoLlxyXG4gICAqL1xyXG4gIGVzY2FwZVJlZ2V4cChxdWVyeVRvRXNjYXBlKSB7XHJcbiAgICAvLyBFeDogaWYgdGhlIGNhcHR1cmUgaXMgXCJhXCIgdGhlIHJlc3VsdCB3aWxsIGJlIFxcYVxyXG4gICAgcmV0dXJuIHF1ZXJ5VG9Fc2NhcGUucmVwbGFjZSgvKFsuPyorXiRbXFxdXFxcXCgpe318LV0pL2csICdcXFxcJDEnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSA8c3Ryb25nPi10YWcgd3JhcHBlZCBIVE1MIHN0cmluZy5cclxuICAgKi9cclxuICBoaWdobGlnaHQobWF0Y2gsIHF1ZXJ5KSB7XHJcbiAgICAvLyBSZXBsYWNlcyB0aGUgY2FwdHVyZSBzdHJpbmcgd2l0aCBhIHRoZSBzYW1lIHN0cmluZyBpbnNpZGUgb2YgYSBcInN0cm9uZ1wiIHRhZ1xyXG4gICAgcmV0dXJuIHF1ZXJ5ID8gbWF0Y2gucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMuZXNjYXBlUmVnZXhwKHF1ZXJ5LnRyaW0oKSksICdnaScpLCAnPHN0cm9uZz4kJjwvc3Ryb25nPicpIDogbWF0Y2g7XHJcbiAgfVxyXG5cclxuICBwcmVzZWxlY3RlZChtYXRjaCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnByZXNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHByZXNlbGVjdGVkRnVuYzogRnVuY3Rpb24gPSB0aGlzLmNvbmZpZy5wcmVzZWxlY3RlZDtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHByZXNlbGVjdGVkRnVuYyhtYXRjaCwgaXRlbSk7XHJcbiAgICAgICAgfSkgIT09IC0xXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGxldCBpc1ByZXNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS52YWx1ZSAmJiBtYXRjaCAmJiBtYXRjaC52YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW0udmFsdWUuaWQgJiYgbWF0Y2gudmFsdWUuaWQpIHtcclxuICAgICAgICAgICAgaXNQcmVzZWxlY3RlZCA9IGl0ZW0udmFsdWUuaWQgPT09IG1hdGNoLnZhbHVlLmlkO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGl0ZW0udmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgaXNQcmVzZWxlY3RlZCA9IGl0ZW0udmFsdWUudmFsdWUgPT09IG1hdGNoLnZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXNQcmVzZWxlY3RlZCA9IGl0ZW0udmFsdWUgPT09IG1hdGNoLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNQcmVzZWxlY3RlZDtcclxuICAgICAgfSkgIT09IC0xXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1
|
+
// NG2
|
|
2
|
+
import { ElementRef, Input, ChangeDetectorRef, Directive } from '@angular/core';
|
|
3
|
+
// APP
|
|
4
|
+
import { Helpers } from '../../../../utils/Helpers';
|
|
5
|
+
// Vendor
|
|
6
|
+
import { from } from 'rxjs';
|
|
7
|
+
/**
|
|
8
|
+
* @description This is the actual list of matches that gets injected into the DOM. It's also the piece that can be
|
|
9
|
+
* overwritten if custom list options are needed.
|
|
10
|
+
*/
|
|
11
|
+
export class BasePickerResults {
|
|
12
|
+
constructor(element, ref) {
|
|
13
|
+
this._term = '';
|
|
14
|
+
this.selected = [];
|
|
15
|
+
this.matches = [];
|
|
16
|
+
this.hasError = false;
|
|
17
|
+
this.isLoading = false;
|
|
18
|
+
this.isStatic = true;
|
|
19
|
+
this.page = 0;
|
|
20
|
+
this.lastPage = false;
|
|
21
|
+
this.autoSelectFirstOption = true;
|
|
22
|
+
this.optionsFunctionHasChanged = false;
|
|
23
|
+
this.selectingMatches = false;
|
|
24
|
+
this.element = element;
|
|
25
|
+
this.ref = ref;
|
|
26
|
+
this.scrollHandler = this.onScrollDown.bind(this);
|
|
27
|
+
}
|
|
28
|
+
cleanUp() {
|
|
29
|
+
const element = this.getListElement();
|
|
30
|
+
if (element && element.hasAttribute('scrollListener')) {
|
|
31
|
+
element.removeAttribute('scrollListener');
|
|
32
|
+
element.removeEventListener('scroll', this.scrollHandler);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
onScrollDown(event) {
|
|
36
|
+
const element = event.target;
|
|
37
|
+
if (element) {
|
|
38
|
+
const offset = element.offsetHeight + element.scrollTop;
|
|
39
|
+
const bottom = element.scrollHeight - 300;
|
|
40
|
+
if (offset >= bottom) {
|
|
41
|
+
event.stopPropagation();
|
|
42
|
+
if (!this.lastPage && !this.isLoading) {
|
|
43
|
+
this.processSearch();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
get term() {
|
|
49
|
+
return this._term;
|
|
50
|
+
}
|
|
51
|
+
set term(value) {
|
|
52
|
+
if (this.shouldSearch(value)) {
|
|
53
|
+
this._term = value;
|
|
54
|
+
this.page = 0;
|
|
55
|
+
this.optionsFunctionHasChanged = false;
|
|
56
|
+
this.matches = [];
|
|
57
|
+
this.processSearch(true);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.addScrollListener();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
set config(value) {
|
|
64
|
+
if (this.config && this.config.options !== value.options) {
|
|
65
|
+
this.optionsFunctionHasChanged = true; // reset page so that new options call is used to search
|
|
66
|
+
}
|
|
67
|
+
this._config = value;
|
|
68
|
+
}
|
|
69
|
+
get config() {
|
|
70
|
+
return this._config;
|
|
71
|
+
}
|
|
72
|
+
shouldSearch(value) {
|
|
73
|
+
const termHasChanged = value !== this._term;
|
|
74
|
+
const optionsNotYetCalled = this.page === 0;
|
|
75
|
+
return termHasChanged || optionsNotYetCalled || this.optionsFunctionHasChanged;
|
|
76
|
+
}
|
|
77
|
+
addScrollListener() {
|
|
78
|
+
if (this.config.enableInfiniteScroll) {
|
|
79
|
+
const element = this.getListElement();
|
|
80
|
+
if (element && !element.hasAttribute('scrollListener')) {
|
|
81
|
+
element.setAttribute('scrollListener', 'true');
|
|
82
|
+
element.addEventListener('scroll', this.scrollHandler);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
processSearch(shouldReset) {
|
|
87
|
+
this.hasError = false;
|
|
88
|
+
this.isLoading = true;
|
|
89
|
+
this.ref.markForCheck();
|
|
90
|
+
this.search(this.term).subscribe((results) => {
|
|
91
|
+
if (shouldReset) {
|
|
92
|
+
this.matches = [];
|
|
93
|
+
}
|
|
94
|
+
if (this.isStatic) {
|
|
95
|
+
this.matches = this.filterData(results);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.matches = this.matches.concat(results);
|
|
99
|
+
this.lastPage = results && !results.length;
|
|
100
|
+
}
|
|
101
|
+
if (this.matches.length > 0 && this.autoSelectFirstOption && !this.selectingMatches) {
|
|
102
|
+
this.nextActiveMatch();
|
|
103
|
+
}
|
|
104
|
+
this.isLoading = false;
|
|
105
|
+
this.ref.markForCheck();
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
this.overlay.updatePosition();
|
|
108
|
+
this.addScrollListener();
|
|
109
|
+
}); // @bkimball: This was added for Dylan Schulte, 9.18.2017 4:14PM EST, you're welcome!
|
|
110
|
+
}, (err) => {
|
|
111
|
+
this.hasError = this.term && this.term.length !== 0;
|
|
112
|
+
this.isLoading = false;
|
|
113
|
+
this.lastPage = true;
|
|
114
|
+
if (this.term && this.term.length !== 0) {
|
|
115
|
+
console.error(err); // tslint:disable-lineno
|
|
116
|
+
}
|
|
117
|
+
this.ref.markForCheck();
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
search(term, mode) {
|
|
121
|
+
const options = this.config.options;
|
|
122
|
+
return from(new Promise((resolve, reject) => {
|
|
123
|
+
// Check if there is match data
|
|
124
|
+
if (options) {
|
|
125
|
+
// Resolve the data
|
|
126
|
+
if (Array.isArray(options)) {
|
|
127
|
+
this.isStatic = true;
|
|
128
|
+
// Arrays are returned immediately
|
|
129
|
+
resolve(this.structureArray(options));
|
|
130
|
+
}
|
|
131
|
+
else if (this.shouldCallOptionsFunction(term)) {
|
|
132
|
+
if ((options.hasOwnProperty('reject') && options.hasOwnProperty('resolve')) ||
|
|
133
|
+
Object.getPrototypeOf(options).hasOwnProperty('then')) {
|
|
134
|
+
this.isStatic = false;
|
|
135
|
+
// Promises (ES6 or Deferred) are resolved whenever they resolve
|
|
136
|
+
options.then(this.structureArray.bind(this)).then(resolve, reject);
|
|
137
|
+
}
|
|
138
|
+
else if (typeof options === 'function') {
|
|
139
|
+
this.isStatic = false;
|
|
140
|
+
// Promises (ES6 or Deferred) are resolved whenever they resolve
|
|
141
|
+
options(term, ++this.page)
|
|
142
|
+
.then(this.structureArray.bind(this))
|
|
143
|
+
.then(resolve, reject);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// All other kinds of data are rejected
|
|
147
|
+
reject('The data provided is not an array or a promise');
|
|
148
|
+
throw new Error('The data provided is not an array or a promise');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
if (this.config.defaultOptions) {
|
|
153
|
+
this.isStatic = false;
|
|
154
|
+
if (typeof this.config.defaultOptions === 'function') {
|
|
155
|
+
const defaultOptions = this.config.defaultOptions(term, ++this.page);
|
|
156
|
+
if (Object.getPrototypeOf(defaultOptions).hasOwnProperty('then')) {
|
|
157
|
+
defaultOptions.then(this.structureArray.bind(this)).then(resolve, reject);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
resolve(this.structureArray(defaultOptions));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
resolve(this.structureArray(this.config.defaultOptions));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// No search term gets rejected
|
|
169
|
+
reject('No search term');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// No data gets rejected
|
|
175
|
+
reject('error');
|
|
176
|
+
}
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
shouldCallOptionsFunction(term) {
|
|
180
|
+
if (this.config && 'minSearchLength' in this.config && Number.isInteger(this.config.minSearchLength)) {
|
|
181
|
+
return typeof term === 'string' && term.length >= this.config.minSearchLength;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
return !!(term && term.length);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* @param collection - the data once getData resolves it
|
|
189
|
+
*
|
|
190
|
+
* @description This function structures an array of nodes into an array of objects with a
|
|
191
|
+
* 'name' field by default.
|
|
192
|
+
*/
|
|
193
|
+
structureArray(collection) {
|
|
194
|
+
const dataArray = collection.data ? collection.data : collection;
|
|
195
|
+
if (dataArray && (typeof dataArray[0] === 'string' || typeof dataArray[0] === 'number')) {
|
|
196
|
+
return collection.map((item) => {
|
|
197
|
+
return {
|
|
198
|
+
value: item,
|
|
199
|
+
label: item,
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return dataArray.map((data) => {
|
|
204
|
+
let value = this.config.field ? data[this.config.field] : data.value || data;
|
|
205
|
+
if (this.config.valueFormat) {
|
|
206
|
+
value = Helpers.interpolate(this.config.valueFormat, data);
|
|
207
|
+
}
|
|
208
|
+
const label = this.config.format ? Helpers.interpolate(this.config.format, data) : data.label || String(value);
|
|
209
|
+
return { value, label, data };
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @param matches - Collection of objects=
|
|
214
|
+
*
|
|
215
|
+
* @description This function loops through the picker options and creates a filtered list of objects that contain
|
|
216
|
+
* the newSearch.
|
|
217
|
+
*/
|
|
218
|
+
filterData(matches) {
|
|
219
|
+
if (this.term && matches) {
|
|
220
|
+
return matches.filter((match) => {
|
|
221
|
+
return ~String(match.label)
|
|
222
|
+
.toLowerCase()
|
|
223
|
+
.indexOf(this.term.toLowerCase());
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// Show no recent results template
|
|
227
|
+
return matches;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* @description This function is called when the user presses the enter key to call the selectMatch method.
|
|
231
|
+
*/
|
|
232
|
+
selectActiveMatch() {
|
|
233
|
+
this.selectMatch();
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* @description This function sets activeMatch to the match before the current node.
|
|
237
|
+
*/
|
|
238
|
+
prevActiveMatch() {
|
|
239
|
+
const index = this.matches.indexOf(this.activeMatch);
|
|
240
|
+
this.activeMatch = this.matches[index - 1 < 0 ? this.matches.length - 1 : index - 1];
|
|
241
|
+
this.scrollToActive();
|
|
242
|
+
this.ref.markForCheck();
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* @description This function sets activeMatch to the match after the current node.
|
|
246
|
+
*/
|
|
247
|
+
nextActiveMatch() {
|
|
248
|
+
const index = this.matches.indexOf(this.activeMatch);
|
|
249
|
+
this.activeMatch = this.matches[index + 1 > this.matches.length - 1 ? 0 : index + 1];
|
|
250
|
+
this.scrollToActive();
|
|
251
|
+
this.ref.markForCheck();
|
|
252
|
+
}
|
|
253
|
+
getListElement() {
|
|
254
|
+
return this.element.nativeElement;
|
|
255
|
+
}
|
|
256
|
+
getChildrenOfListElement() {
|
|
257
|
+
let children = [];
|
|
258
|
+
if (this.getListElement()) {
|
|
259
|
+
children = this.getListElement().children;
|
|
260
|
+
}
|
|
261
|
+
return children;
|
|
262
|
+
}
|
|
263
|
+
scrollToActive() {
|
|
264
|
+
const list = this.getListElement();
|
|
265
|
+
const items = this.getChildrenOfListElement();
|
|
266
|
+
const index = this.matches.indexOf(this.activeMatch);
|
|
267
|
+
const item = items[index];
|
|
268
|
+
if (item) {
|
|
269
|
+
list.scrollTop = item.offsetTop;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* @description
|
|
274
|
+
*/
|
|
275
|
+
selectActive(match) {
|
|
276
|
+
this.activeMatch = match;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* @description
|
|
280
|
+
*/
|
|
281
|
+
isActive(match) {
|
|
282
|
+
return this.activeMatch === match;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* @description
|
|
286
|
+
*/
|
|
287
|
+
selectMatch(event, item) {
|
|
288
|
+
if (event) {
|
|
289
|
+
event.stopPropagation();
|
|
290
|
+
event.preventDefault();
|
|
291
|
+
}
|
|
292
|
+
const selected = this.activeMatch;
|
|
293
|
+
if (selected && this.parent) {
|
|
294
|
+
this.parent.value = selected;
|
|
295
|
+
this.selectingMatches = true;
|
|
296
|
+
if (this.parent.closeOnSelect) {
|
|
297
|
+
this.parent.hideResults();
|
|
298
|
+
this.selectingMatches = false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
this.ref.markForCheck();
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* @description This function captures the whole query string and replace it with the string that will be used to
|
|
306
|
+
* match.
|
|
307
|
+
*/
|
|
308
|
+
escapeRegexp(queryToEscape) {
|
|
309
|
+
// Ex: if the capture is "a" the result will be \a
|
|
310
|
+
return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* @description This function should return a <strong>-tag wrapped HTML string.
|
|
314
|
+
*/
|
|
315
|
+
highlight(match, query) {
|
|
316
|
+
// Replaces the capture string with a the same string inside of a "strong" tag
|
|
317
|
+
return query ? match.replace(new RegExp(this.escapeRegexp(query.trim()), 'gi'), '<strong>$&</strong>') : match;
|
|
318
|
+
}
|
|
319
|
+
preselected(match) {
|
|
320
|
+
if (this.config.preselected) {
|
|
321
|
+
const preselectedFunc = this.config.preselected;
|
|
322
|
+
return (this.selected.findIndex((item) => {
|
|
323
|
+
return preselectedFunc(match, item);
|
|
324
|
+
}) !== -1);
|
|
325
|
+
}
|
|
326
|
+
return (this.selected.findIndex((item) => {
|
|
327
|
+
let isPreselected = false;
|
|
328
|
+
if (item && item.value && match && match.value) {
|
|
329
|
+
if (item.value.id && match.value.id) {
|
|
330
|
+
isPreselected = item.value.id === match.value.id;
|
|
331
|
+
}
|
|
332
|
+
else if (item.value instanceof Object && item.value.hasOwnProperty('value')) {
|
|
333
|
+
isPreselected = item.value.value === match.value;
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
isPreselected = item.value === match.value;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return isPreselected;
|
|
340
|
+
}) !== -1);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
BasePickerResults.decorators = [
|
|
344
|
+
{ type: Directive }
|
|
345
|
+
];
|
|
346
|
+
BasePickerResults.ctorParameters = () => [
|
|
347
|
+
{ type: ElementRef },
|
|
348
|
+
{ type: ChangeDetectorRef }
|
|
349
|
+
];
|
|
350
|
+
BasePickerResults.propDecorators = {
|
|
351
|
+
matches: [{ type: Input }]
|
|
352
|
+
};
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVBpY2tlclJlc3VsdHMuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvbm92by1lbGVtZW50cy9ub3ZvLWVsZW1lbnRzL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjLyIsInNvdXJjZXMiOlsiZWxlbWVudHMvcGlja2VyL2V4dHJhcy9iYXNlLXBpY2tlci1yZXN1bHRzL0Jhc2VQaWNrZXJSZXN1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU07QUFDTixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsTUFBTTtBQUNOLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUl4Qzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBb0I1QixZQUFZLE9BQW1CLEVBQUUsR0FBc0I7UUFuQnZELFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUNqQixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQVksSUFBSSxDQUFDO1FBTXpCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQiwwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFFdEMsOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUl4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENB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Q0FBQyxDQUFDLENBQ1YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxDQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQzlDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ25DLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDbEQ7cUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDN0UsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNMLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQzVDO2FBQ0Y7WUFDRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDVixDQUFDO0lBQ0osQ0FBQzs7O1lBNVdGLFNBQVM7OztZQVpELFVBQVU7WUFBUyxpQkFBaUI7OztzQkFnQjFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBORzJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4vLyBBUFBcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9IZWxwZXJzJztcbi8vIFZlbmRvclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE5vdm9Db250cm9sQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vZm9ybS9jb250cm9scy9CYXNlQ29udHJvbCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoaXMgaXMgdGhlIGFjdHVhbCBsaXN0IG9mIG1hdGNoZXMgdGhhdCBnZXRzIGluamVjdGVkIGludG8gdGhlIERPTS4gSXQncyBhbHNvIHRoZSBwaWVjZSB0aGF0IGNhbiBiZVxuICogb3ZlcndyaXR0ZW4gaWYgY3VzdG9tIGxpc3Qgb3B0aW9ucyBhcmUgbmVlZGVkLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBCYXNlUGlja2VyUmVzdWx0cyB7XG4gIF90ZXJtOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWQ6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KCkgbWF0Y2hlczogYW55ID0gW107XG4gIGhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1N0YXRpYzogYm9vbGVhbiA9IHRydWU7XG4gIF9jb25maWc6IE5vdm9Db250cm9sQ29uZmlnWydjb25maWcnXTtcbiAgYWN0aXZlTWF0Y2g6IGFueTtcbiAgcGFyZW50OiBhbnk7XG4gIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHBhZ2U6IG51bWJlciA9IDA7XG4gIGxhc3RQYWdlOiBib29sZWFuID0gZmFsc2U7XG4gIGF1dG9TZWxlY3RGaXJzdE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIG92ZXJsYXk6IE92ZXJsYXlSZWY7XG4gIG9wdGlvbnNGdW5jdGlvbkhhc0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBzZWxlY3RpbmdNYXRjaGVzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgc2Nyb2xsSGFuZGxlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMucmVmID0gcmVmO1xuICAgIHRoaXMuc2Nyb2xsSGFuZGxlciA9IHRoaXMub25TY3JvbGxEb3duLmJpbmQodGhpcyk7XG4gIH1cblxuICBjbGVhblVwKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSB0aGlzLmdldExpc3RFbGVtZW50KCk7XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3Njcm9sbExpc3RlbmVyJykpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzY3JvbGxMaXN0ZW5lcicpO1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2Nyb2xsRG93bihldmVudDogV2hlZWxFdmVudCkge1xuICAgIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2ZW50LnRhcmdldDtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgKyBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gMzAwO1xuICAgICAgaWYgKG9mZnNldCA+PSBib3R0b20pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICghdGhpcy5sYXN0UGFnZSAmJiAhdGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB0ZXJtKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXJtO1xuICB9XG5cbiAgc2V0IHRlcm0odmFsdWUpIHtcbiAgICBpZiAodGhpcy5zaG91bGRTZWFyY2godmFsdWUpKSB7XG4gICAgICB0aGlzLl90ZXJtID0gdmFsdWU7XG4gICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgdGhpcy5vcHRpb25zRnVuY3Rpb25IYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB0aGlzLm1hdGNoZXMgPSBbXTtcbiAgICAgIHRoaXMucHJvY2Vzc1NlYXJjaCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRTY3JvbGxMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBjb25maWcodmFsdWU6IE5vdm9Db250cm9sQ29uZmlnWydjb25maWcnXSkge1xuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5vcHRpb25zICE9PSB2YWx1ZS5vcHRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnNGdW5jdGlvbkhhc0NoYW5nZWQgPSB0cnVlOyAvLyByZXNldCBwYWdlIHNvIHRoYXQgbmV3IG9wdGlvbnMgY2FsbCBpcyB1c2VkIHRvIHNlYXJjaFxuICAgIH1cbiAgICB0aGlzLl9jb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjb25maWcoKTogTm92b0NvbnRyb2xDb25maWdbJ2NvbmZpZyddIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgc2hvdWxkU2VhcmNoKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGVybUhhc0NoYW5nZWQgPSB2YWx1ZSAhPT0gdGhpcy5fdGVybTtcbiAgICBjb25zdCBvcHRpb25zTm90WWV0Q2FsbGVkID0gdGhpcy5wYWdlID09PSAwO1xuXG4gICAgcmV0dXJuIHRlcm1IYXNDaGFuZ2VkIHx8IG9wdGlvbnNOb3RZZXRDYWxsZWQgfHwgdGhpcy5vcHRpb25zRnVuY3Rpb25IYXNDaGFuZ2VkO1xuICB9XG5cbiAgYWRkU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUluZmluaXRlU2Nyb2xsKSB7XG4gICAgICBjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gdGhpcy5nZXRMaXN0RWxlbWVudCgpO1xuICAgICAgaWYgKGVsZW1lbnQgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdzY3JvbGxMaXN0ZW5lcicpKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzY3JvbGxMaXN0ZW5lcicsICd0cnVlJyk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2VhcmNoKHNob3VsZFJlc2V0PzogYm9vbGVhbikge1xuICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zZWFyY2godGhpcy50ZXJtKS5zdWJzY3JpYmUoXG4gICAgICAocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgIGlmIChzaG91bGRSZXNldCkge1xuICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU3RhdGljKSB7XG4gICAgICAgICAgdGhpcy5tYXRjaGVzID0gdGhpcy5maWx0ZXJEYXRhKHJlc3VsdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IHRoaXMubWF0Y2hlcy5jb25jYXQocmVzdWx0cyk7XG4gICAgICAgICAgdGhpcy5sYXN0UGFnZSA9IHJlc3VsdHMgJiYgIXJlc3VsdHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoZXMubGVuZ3RoID4gMCAmJiB0aGlzLmF1dG9TZWxlY3RGaXJzdE9wdGlvbiAmJiAhdGhpcy5zZWxlY3RpbmdNYXRjaGVzKSB7XG4gICAgICAgICAgdGhpcy5uZXh0QWN0aXZlTWF0Y2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vdmVybGF5LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgdGhpcy5hZGRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICB9KTsgLy8gQGJraW1iYWxsOiBUaGlzIHdhcyBhZGRlZCBmb3IgRHlsYW4gU2NodWx0ZSwgOS4xOC4yMDE3IDQ6MTRQTSBFU1QsIHlvdSdyZSB3ZWxjb21lIVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRoaXMudGVybSAmJiB0aGlzLnRlcm0ubGVuZ3RoICE9PSAwO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RQYWdlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMudGVybSAmJiB0aGlzLnRlcm0ubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lbm9cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaCh0ZXJtLCBtb2RlPyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29uZmlnLm9wdGlvbnM7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIG1hdGNoIGRhdGFcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBkYXRhXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgICAgICAgICAgLy8gQXJyYXlzIGFyZSByZXR1cm5lZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnN0cnVjdHVyZUFycmF5KG9wdGlvbnMpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQ2FsbE9wdGlvbnNGdW5jdGlvbih0ZXJtKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgncmVqZWN0JykgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgncmVzb2x2ZScpKSB8fFxuICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3B0aW9ucykuaGFzT3duUHJvcGVydHkoJ3RoZW4nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gUHJvbWlzZXMgKEVTNiBvciBEZWZlcnJlZCkgYXJlIHJlc29sdmVkIHdoZW5ldmVyIHRoZXkgcmVzb2x2ZVxuICAgICAgICAgICAgICBvcHRpb25zLnRoZW4odGhpcy5zdHJ1Y3R1cmVBcnJheS5iaW5kKHRoaXMpKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gUHJvbWlzZXMgKEVTNiBvciBEZWZlcnJlZCkgYXJlIHJlc29sdmVkIHdoZW5ldmVyIHRoZXkgcmVzb2x2ZVxuICAgICAgICAgICAgICBvcHRpb25zKHRlcm0sICsrdGhpcy5wYWdlKVxuICAgICAgICAgICAgICAgIC50aGVuKHRoaXMuc3RydWN0dXJlQXJyYXkuYmluZCh0aGlzKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGtpbmRzIG9mIGRhdGEgYXJlIHJlamVjdGVkXG4gICAgICAgICAgICAgIHJlamVjdCgnVGhlIGRhdGEgcHJvdmlkZWQgaXMgbm90IGFuIGFycmF5IG9yIGEgcHJvbWlzZScpO1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIHByb3ZpZGVkIGlzIG5vdCBhbiBhcnJheSBvciBhIHByb21pc2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5kZWZhdWx0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gdGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnModGVybSwgKyt0aGlzLnBhZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGVmYXVsdE9wdGlvbnMpLmhhc093blByb3BlcnR5KCd0aGVuJykpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zLnRoZW4odGhpcy5zdHJ1Y3R1cmVBcnJheS5iaW5kKHRoaXMpKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zdHJ1Y3R1cmVBcnJheShkZWZhdWx0T3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc3RydWN0dXJlQXJyYXkodGhpcy5jb25maWcuZGVmYXVsdE9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTm8gc2VhcmNoIHRlcm0gZ2V0cyByZWplY3RlZFxuICAgICAgICAgICAgICByZWplY3QoJ05vIHNlYXJjaCB0ZXJtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGRhdGEgZ2V0cyByZWplY3RlZFxuICAgICAgICAgIHJlamVjdCgnZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHNob3VsZENhbGxPcHRpb25zRnVuY3Rpb24odGVybTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29uZmlnICYmICdtaW5TZWFyY2hMZW5ndGgnIGluIHRoaXMuY29uZmlnICYmIE51bWJlci5pc0ludGVnZXIodGhpcy5jb25maWcubWluU2VhcmNoTGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB0ZXJtID09PSAnc3RyaW5nJyAmJiB0ZXJtLmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5taW5TZWFyY2hMZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAhISh0ZXJtICYmIHRlcm0ubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNvbGxlY3Rpb24gLSB0aGUgZGF0YSBvbmNlIGdldERhdGEgcmVzb2x2ZXMgaXRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gc3RydWN0dXJlcyBhbiBhcnJheSBvZiBub2RlcyBpbnRvIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhXG4gICAqICduYW1lJyBmaWVsZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgc3RydWN0dXJlQXJyYXkoY29sbGVjdGlvbjogYW55KTogYW55IHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSBjb2xsZWN0aW9uLmRhdGEgPyBjb2xsZWN0aW9uLmRhdGEgOiBjb2xsZWN0aW9uO1xuICAgIGlmIChkYXRhQXJyYXkgJiYgKHR5cGVvZiBkYXRhQXJyYXlbMF0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBkYXRhQXJyYXlbMF0gPT09ICdudW1iZXInKSkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb24ubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgbGFiZWw6IGl0ZW0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFBcnJheS5tYXAoKGRhdGEpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuY29uZmlnLmZpZWxkID8gZGF0YVt0aGlzLmNvbmZpZy5maWVsZF0gOiBkYXRhLnZhbHVlIHx8IGRhdGE7XG4gICAgICBpZiAodGhpcy5jb25maWcudmFsdWVGb3JtYXQpIHtcbiAgICAgICAgdmFsdWUgPSBIZWxwZXJzLmludGVycG9sYXRlKHRoaXMuY29uZmlnLnZhbHVlRm9ybWF0LCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jb25maWcuZm9ybWF0ID8gSGVscGVycy5pbnRlcnBvbGF0ZSh0aGlzLmNvbmZpZy5mb3JtYXQsIGRhdGEpIDogZGF0YS5sYWJlbCB8fCBTdHJpbmcodmFsdWUpO1xuICAgICAgcmV0dXJuIHsgdmFsdWUsIGxhYmVsLCBkYXRhIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG1hdGNoZXMgLSBDb2xsZWN0aW9uIG9mIG9iamVjdHM9XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGlzIGZ1bmN0aW9uIGxvb3BzIHRocm91Z2ggdGhlIHBpY2tlciBvcHRpb25zIGFuZCBjcmVhdGVzIGEgZmlsdGVyZWQgbGlzdCBvZiBvYmplY3RzIHRoYXQgY29udGFpblxuICAgKiB0aGUgbmV3U2VhcmNoLlxuICAgKi9cbiAgZmlsdGVyRGF0YShtYXRjaGVzKTogQXJyYXk8YW55PiB7XG4gICAgaWYgKHRoaXMudGVybSAmJiBtYXRjaGVzKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoKG1hdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB+U3RyaW5nKG1hdGNoLmxhYmVsKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLmluZGV4T2YodGhpcy50ZXJtLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFNob3cgbm8gcmVjZW50IHJlc3VsdHMgdGVtcGxhdGVcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBlbnRlciBrZXkgdG8gY2FsbCB0aGUgc2VsZWN0TWF0Y2ggbWV0aG9kLlxuICAgKi9cbiAgc2VsZWN0QWN0aXZlTWF0Y2goKSB7XG4gICAgdGhpcy5zZWxlY3RNYXRjaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGlzIGZ1bmN0aW9uIHNldHMgYWN0aXZlTWF0Y2ggdG8gdGhlIG1hdGNoIGJlZm9yZSB0aGUgY3VycmVudCBub2RlLlxuICAgKi9cbiAgcHJldkFjdGl2ZU1hdGNoKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tYXRjaGVzLmluZGV4T2YodGhpcy5hY3RpdmVNYXRjaCk7XG4gICAgdGhpcy5hY3RpdmVNYXRjaCA9IHRoaXMubWF0Y2hlc1tpbmRleCAtIDEgPCAwID8gdGhpcy5tYXRjaGVzLmxlbmd0aCAtIDEgOiBpbmRleCAtIDFdO1xuICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBzZXRzIGFjdGl2ZU1hdGNoIHRvIHRoZSBtYXRjaCBhZnRlciB0aGUgY3VycmVudCBub2RlLlxuICAgKi9cbiAgbmV4dEFjdGl2ZU1hdGNoKCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tYXRjaGVzLmluZGV4T2YodGhpcy5hY3RpdmVNYXRjaCk7XG4gICAgdGhpcy5hY3RpdmVNYXRjaCA9IHRoaXMubWF0Y2hlc1tpbmRleCArIDEgPiB0aGlzLm1hdGNoZXMubGVuZ3RoIC0gMSA/IDAgOiBpbmRleCArIDFdO1xuICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldExpc3RFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGdldENoaWxkcmVuT2ZMaXN0RWxlbWVudCgpIHtcbiAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICBpZiAodGhpcy5nZXRMaXN0RWxlbWVudCgpKSB7XG4gICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdEVsZW1lbnQoKS5jaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgc2Nyb2xsVG9BY3RpdmUoKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0TGlzdEVsZW1lbnQoKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0Q2hpbGRyZW5PZkxpc3RFbGVtZW50KCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm1hdGNoZXMuaW5kZXhPZih0aGlzLmFjdGl2ZU1hdGNoKTtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBsaXN0LnNjcm9sbFRvcCA9IGl0ZW0ub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICovXG4gIHNlbGVjdEFjdGl2ZShtYXRjaCkge1xuICAgIHRoaXMuYWN0aXZlTWF0Y2ggPSBtYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICovXG4gIGlzQWN0aXZlKG1hdGNoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlTWF0Y2ggPT09IG1hdGNoO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKi9cbiAgc2VsZWN0TWF0Y2goZXZlbnQ/OiBhbnksIGl0ZW0/OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYWN0aXZlTWF0Y2g7XG4gICAgaWYgKHNlbGVjdGVkICYmIHRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudC52YWx1ZSA9IHNlbGVjdGVkO1xuICAgICAgdGhpcy5zZWxlY3RpbmdNYXRjaGVzID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnBhcmVudC5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgIHRoaXMucGFyZW50LmhpZGVSZXN1bHRzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW5nTWF0Y2hlcyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gY2FwdHVyZXMgdGhlIHdob2xlIHF1ZXJ5IHN0cmluZyBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG9cbiAgICogbWF0Y2guXG4gICAqL1xuICBlc2NhcGVSZWdleHAocXVlcnlUb0VzY2FwZSkge1xuICAgIC8vIEV4OiBpZiB0aGUgY2FwdHVyZSBpcyBcImFcIiB0aGUgcmVzdWx0IHdpbGwgYmUgXFxhXG4gICAgcmV0dXJuIHF1ZXJ5VG9Fc2NhcGUucmVwbGFjZSgvKFsuPyorXiRbXFxdXFxcXCgpe318LV0pL2csICdcXFxcJDEnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgPHN0cm9uZz4tdGFnIHdyYXBwZWQgSFRNTCBzdHJpbmcuXG4gICAqL1xuICBoaWdobGlnaHQobWF0Y2gsIHF1ZXJ5KSB7XG4gICAgLy8gUmVwbGFjZXMgdGhlIGNhcHR1cmUgc3RyaW5nIHdpdGggYSB0aGUgc2FtZSBzdHJpbmcgaW5zaWRlIG9mIGEgXCJzdHJvbmdcIiB0YWdcbiAgICByZXR1cm4gcXVlcnkgPyBtYXRjaC5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5lc2NhcGVSZWdleHAocXVlcnkudHJpbSgpKSwgJ2dpJyksICc8c3Ryb25nPiQmPC9zdHJvbmc+JykgOiBtYXRjaDtcbiAgfVxuXG4gIHByZXNlbGVjdGVkKG1hdGNoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnByZXNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBwcmVzZWxlY3RlZEZ1bmM6IEZ1bmN0aW9uID0gdGhpcy5jb25maWcucHJlc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmVzZWxlY3RlZEZ1bmMobWF0Y2gsIGl0ZW0pO1xuICAgICAgICB9KSAhPT0gLTFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICBsZXQgaXNQcmVzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnZhbHVlICYmIG1hdGNoICYmIG1hdGNoLnZhbHVlKSB7XG4gICAgICAgICAgaWYgKGl0ZW0udmFsdWUuaWQgJiYgbWF0Y2gudmFsdWUuaWQpIHtcbiAgICAgICAgICAgIGlzUHJlc2VsZWN0ZWQgPSBpdGVtLnZhbHVlLmlkID09PSBtYXRjaC52YWx1ZS5pZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgaXRlbS52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgICAgICAgaXNQcmVzZWxlY3RlZCA9IGl0ZW0udmFsdWUudmFsdWUgPT09IG1hdGNoLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpc1ByZXNlbGVjdGVkID0gaXRlbS52YWx1ZSA9PT0gbWF0Y2gudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1ByZXNlbGVjdGVkO1xuICAgICAgfSkgIT09IC0xXG4gICAgKTtcbiAgfVxufVxuIl19
|