@dereekb/dbx-web 12.6.21 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/fesm2022/dereekb-dbx-web-calendar.mjs +15 -32
- package/fesm2022/dereekb-dbx-web-calendar.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-web-mapbox.mjs +113 -130
- package/fesm2022/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-web-table.mjs +125 -133
- package/fesm2022/dereekb-dbx-web-table.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-web.mjs +1758 -2081
- package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
- package/lib/button/_button.scss +117 -21
- package/lib/button/progress/spinner.button.component.scss +7 -7
- package/lib/layout/style/_style.scss +30 -81
- package/lib/loading/_loading.scss +11 -9
- package/lib/router/layout/anchorlist/_anchorlist.scss +5 -0
- package/lib/router/layout/sidenav/_sidenav.scss +0 -3
- package/lib/style/_root-variables.scss +2 -2
- package/lib/style/_theming.scss +196 -1
- package/lib/style/_variables.scss +13 -7
- package/package.json +26 -34
- package/types/dereekb-dbx-web-calendar.d.ts +197 -0
- package/types/dereekb-dbx-web-mapbox.d.ts +752 -0
- package/types/dereekb-dbx-web-table.d.ts +600 -0
- package/types/dereekb-dbx-web.d.ts +5655 -0
- package/calendar/index.d.ts +0 -1
- package/calendar/lib/calendar.base.component.d.ts +0 -32
- package/calendar/lib/calendar.component.d.ts +0 -28
- package/calendar/lib/calendar.d.ts +0 -6
- package/calendar/lib/calendar.module.d.ts +0 -11
- package/calendar/lib/calendar.provider.d.ts +0 -5
- package/calendar/lib/calendar.store.d.ts +0 -123
- package/calendar/lib/index.d.ts +0 -6
- package/esm2022/calendar/dereekb-dbx-web-calendar.mjs +0 -5
- package/esm2022/calendar/index.mjs +0 -2
- package/esm2022/calendar/lib/calendar.base.component.mjs +0 -68
- package/esm2022/calendar/lib/calendar.component.mjs +0 -56
- package/esm2022/calendar/lib/calendar.mjs +0 -30
- package/esm2022/calendar/lib/calendar.module.mjs +0 -21
- package/esm2022/calendar/lib/calendar.provider.mjs +0 -11
- package/esm2022/calendar/lib/calendar.store.mjs +0 -174
- package/esm2022/calendar/lib/index.mjs +0 -7
- package/esm2022/dereekb-dbx-web.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/lib/action/action.confirm.directive.mjs +0 -46
- package/esm2022/lib/action/action.module.mjs +0 -22
- package/esm2022/lib/action/index.mjs +0 -6
- package/esm2022/lib/action/key.trigger.directive.mjs +0 -31
- package/esm2022/lib/action/snackbar/action.snackbar.component.mjs +0 -81
- package/esm2022/lib/action/snackbar/action.snackbar.default.mjs +0 -107
- package/esm2022/lib/action/snackbar/action.snackbar.directive.mjs +0 -47
- package/esm2022/lib/action/snackbar/action.snackbar.generator.mjs +0 -44
- package/esm2022/lib/action/snackbar/action.snackbar.mjs +0 -2
- package/esm2022/lib/action/snackbar/action.snackbar.module.mjs +0 -18
- package/esm2022/lib/action/snackbar/action.snackbar.service.mjs +0 -74
- package/esm2022/lib/action/snackbar/index.mjs +0 -8
- package/esm2022/lib/action/transition/action.transition.module.mjs +0 -29
- package/esm2022/lib/action/transition/index.mjs +0 -4
- package/esm2022/lib/action/transition/transition.safety.dialog.component.mjs +0 -53
- package/esm2022/lib/action/transition/transition.safety.directive.mjs +0 -132
- package/esm2022/lib/button/button.component.mjs +0 -141
- package/esm2022/lib/button/button.mjs +0 -2
- package/esm2022/lib/button/button.module.mjs +0 -54
- package/esm2022/lib/button/button.spacer.directive.mjs +0 -20
- package/esm2022/lib/button/icon/icon.button.component.mjs +0 -72
- package/esm2022/lib/button/icon/icon.button.module.mjs +0 -19
- package/esm2022/lib/button/icon/index.mjs +0 -3
- package/esm2022/lib/button/index.mjs +0 -7
- package/esm2022/lib/button/progress/abstract.progress.button.directive.mjs +0 -149
- package/esm2022/lib/button/progress/bar.button.component.mjs +0 -24
- package/esm2022/lib/button/progress/button.progress.config.mjs +0 -3
- package/esm2022/lib/button/progress/button.progress.module.mjs +0 -21
- package/esm2022/lib/button/progress/button.progress.providers.mjs +0 -18
- package/esm2022/lib/button/progress/index.mjs +0 -6
- package/esm2022/lib/button/progress/spinner.button.component.mjs +0 -85
- package/esm2022/lib/dbx-web.module.mjs +0 -17
- package/esm2022/lib/error/default.error.widget.component.mjs +0 -41
- package/esm2022/lib/error/error.action.directive.mjs +0 -26
- package/esm2022/lib/error/error.api.mjs +0 -51
- package/esm2022/lib/error/error.component.mjs +0 -104
- package/esm2022/lib/error/error.details.component.mjs +0 -26
- package/esm2022/lib/error/error.loading.directive.mjs +0 -36
- package/esm2022/lib/error/error.module.mjs +0 -81
- package/esm2022/lib/error/error.popover.component.mjs +0 -45
- package/esm2022/lib/error/error.snackbar.action.directive.mjs +0 -33
- package/esm2022/lib/error/error.snackbar.component.mjs +0 -83
- package/esm2022/lib/error/error.snackbar.service.mjs +0 -39
- package/esm2022/lib/error/error.view.component.mjs +0 -56
- package/esm2022/lib/error/error.widget.component.mjs +0 -59
- package/esm2022/lib/error/error.widget.directive.mjs +0 -18
- package/esm2022/lib/error/error.widget.service.mjs +0 -75
- package/esm2022/lib/error/index.mjs +0 -17
- package/esm2022/lib/error/state.mjs +0 -21
- package/esm2022/lib/extension/download/blob/download.blob.button.component.mjs +0 -86
- package/esm2022/lib/extension/download/blob/index.mjs +0 -2
- package/esm2022/lib/extension/download/index.mjs +0 -3
- package/esm2022/lib/extension/download/text/download.text.component.mjs +0 -94
- package/esm2022/lib/extension/download/text/download.text.mjs +0 -2
- package/esm2022/lib/extension/download/text/download.text.module.mjs +0 -20
- package/esm2022/lib/extension/download/text/index.mjs +0 -4
- package/esm2022/lib/extension/help/absract.help.widget.directive.mjs +0 -20
- package/esm2022/lib/extension/help/help.context.directive.mjs +0 -29
- package/esm2022/lib/extension/help/help.context.mjs +0 -24
- package/esm2022/lib/extension/help/help.context.service.mjs +0 -34
- package/esm2022/lib/extension/help/help.mjs +0 -2
- package/esm2022/lib/extension/help/help.providers.mjs +0 -20
- package/esm2022/lib/extension/help/help.view.list.component.mjs +0 -107
- package/esm2022/lib/extension/help/help.view.list.entry.component.mjs +0 -59
- package/esm2022/lib/extension/help/help.view.popover.button.component.mjs +0 -50
- package/esm2022/lib/extension/help/help.view.popover.component.mjs +0 -53
- package/esm2022/lib/extension/help/help.widget.mjs +0 -6
- package/esm2022/lib/extension/help/help.widget.service.mjs +0 -106
- package/esm2022/lib/extension/help/index.mjs +0 -13
- package/esm2022/lib/extension/index.mjs +0 -10
- package/esm2022/lib/extension/model/index.mjs +0 -9
- package/esm2022/lib/extension/model/model.providers.mjs +0 -42
- package/esm2022/lib/extension/model/model.state.service.mjs +0 -19
- package/esm2022/lib/extension/model/model.tracker.mjs +0 -7
- package/esm2022/lib/extension/model/model.tracker.service.mjs +0 -41
- package/esm2022/lib/extension/model/model.tracker.view.storage.mjs +0 -68
- package/esm2022/lib/extension/model/model.types.mjs +0 -2
- package/esm2022/lib/extension/model/model.types.service.mjs +0 -65
- package/esm2022/lib/extension/model/state/actions/actions.mjs +0 -3
- package/esm2022/lib/extension/model/state/actions/index.mjs +0 -4
- package/esm2022/lib/extension/model/state/actions/model.actions.mjs +0 -3
- package/esm2022/lib/extension/model/state/effects/tracker.effects.mjs +0 -26
- package/esm2022/lib/extension/model/state/index.mjs +0 -6
- package/esm2022/lib/extension/model/state/reducers/index.mjs +0 -13
- package/esm2022/lib/extension/model/state/reducers/model.module.config.mjs +0 -8
- package/esm2022/lib/extension/model/state/state.mjs +0 -2
- package/esm2022/lib/extension/preview/index.mjs +0 -5
- package/esm2022/lib/extension/preview/webfilepreview.component.mjs +0 -35
- package/esm2022/lib/extension/preview/webfilepreview.mjs +0 -2
- package/esm2022/lib/extension/preview/webfilepreview.service.mjs +0 -119
- package/esm2022/lib/extension/preview/webfilepreview.service.preset.mjs +0 -21
- package/esm2022/lib/extension/structure/index.mjs +0 -4
- package/esm2022/lib/extension/structure/structure.body.directive.mjs +0 -29
- package/esm2022/lib/extension/structure/structure.module.mjs +0 -21
- package/esm2022/lib/extension/structure/structure.structure.directive.mjs +0 -25
- package/esm2022/lib/extension/widget/index.mjs +0 -7
- package/esm2022/lib/extension/widget/widget.component.mjs +0 -79
- package/esm2022/lib/extension/widget/widget.directive.mjs +0 -12
- package/esm2022/lib/extension/widget/widget.list.component.mjs +0 -75
- package/esm2022/lib/extension/widget/widget.mjs +0 -2
- package/esm2022/lib/extension/widget/widget.module.mjs +0 -28
- package/esm2022/lib/extension/widget/widget.service.mjs +0 -43
- package/esm2022/lib/extension/zip/index.mjs +0 -5
- package/esm2022/lib/extension/zip/zip.blob.mjs +0 -16
- package/esm2022/lib/extension/zip/zip.blob.preview.component.mjs +0 -156
- package/esm2022/lib/extension/zip/zip.blob.preview.list.component.mjs +0 -121
- package/esm2022/lib/extension/zip/zip.preview.component.mjs +0 -71
- package/esm2022/lib/extension/zip/zip.preview.dialog.component.mjs +0 -31
- package/esm2022/lib/index.mjs +0 -13
- package/esm2022/lib/interaction/dialog/abstract.dialog.directive.mjs +0 -26
- package/esm2022/lib/interaction/dialog/dialog.action.directive.mjs +0 -38
- package/esm2022/lib/interaction/dialog/dialog.content.close.component.mjs +0 -40
- package/esm2022/lib/interaction/dialog/dialog.content.directive.mjs +0 -23
- package/esm2022/lib/interaction/dialog/dialog.content.footer.component.mjs +0 -38
- package/esm2022/lib/interaction/dialog/dialog.content.mjs +0 -9
- package/esm2022/lib/interaction/dialog/dialog.injection.component.mjs +0 -53
- package/esm2022/lib/interaction/dialog/dialog.module.mjs +0 -36
- package/esm2022/lib/interaction/dialog/index.mjs +0 -9
- package/esm2022/lib/interaction/filter/filter.config.mjs +0 -2
- package/esm2022/lib/interaction/filter/filter.menu.mjs +0 -25
- package/esm2022/lib/interaction/filter/filter.module.mjs +0 -24
- package/esm2022/lib/interaction/filter/filter.partial.list.component.mjs +0 -23
- package/esm2022/lib/interaction/filter/filter.partial.menu.component.mjs +0 -31
- package/esm2022/lib/interaction/filter/filter.partial.mjs +0 -50
- package/esm2022/lib/interaction/filter/filter.popover.button.component.mjs +0 -33
- package/esm2022/lib/interaction/filter/filter.popover.button.directive.mjs +0 -28
- package/esm2022/lib/interaction/filter/filter.popover.component.mjs +0 -115
- package/esm2022/lib/interaction/filter/filter.preset.directive.mjs +0 -78
- package/esm2022/lib/interaction/filter/filter.preset.list.component.mjs +0 -23
- package/esm2022/lib/interaction/filter/filter.preset.menu.component.mjs +0 -31
- package/esm2022/lib/interaction/filter/filter.wrapper.component.mjs +0 -46
- package/esm2022/lib/interaction/filter/index.mjs +0 -13
- package/esm2022/lib/interaction/iframe/embed.component.mjs +0 -124
- package/esm2022/lib/interaction/iframe/embed.dialog.component.mjs +0 -34
- package/esm2022/lib/interaction/iframe/iframe.component.mjs +0 -68
- package/esm2022/lib/interaction/iframe/iframe.dialog.component.mjs +0 -23
- package/esm2022/lib/interaction/iframe/index.mjs +0 -5
- package/esm2022/lib/interaction/index.mjs +0 -9
- package/esm2022/lib/interaction/interaction.module.mjs +0 -30
- package/esm2022/lib/interaction/popover/abstract.popover.directive.mjs +0 -21
- package/esm2022/lib/interaction/popover/abstract.popover.ref.directive.mjs +0 -52
- package/esm2022/lib/interaction/popover/index.mjs +0 -17
- package/esm2022/lib/interaction/popover/popover.action.directive.mjs +0 -42
- package/esm2022/lib/interaction/popover/popover.close.component.mjs +0 -29
- package/esm2022/lib/interaction/popover/popover.component.mjs +0 -169
- package/esm2022/lib/interaction/popover/popover.content.component.mjs +0 -50
- package/esm2022/lib/interaction/popover/popover.content.module.mjs +0 -24
- package/esm2022/lib/interaction/popover/popover.controls.directive.mjs +0 -27
- package/esm2022/lib/interaction/popover/popover.coordinator.component.mjs +0 -42
- package/esm2022/lib/interaction/popover/popover.coordinator.service.mjs +0 -44
- package/esm2022/lib/interaction/popover/popover.header.component.mjs +0 -60
- package/esm2022/lib/interaction/popover/popover.mjs +0 -3
- package/esm2022/lib/interaction/popover/popover.module.mjs +0 -20
- package/esm2022/lib/interaction/popover/popover.position.strategy.mjs +0 -60
- package/esm2022/lib/interaction/popover/popover.scroll.content.directive.mjs +0 -41
- package/esm2022/lib/interaction/popover/popover.service.mjs +0 -47
- package/esm2022/lib/interaction/popup/abstract.popup.directive.mjs +0 -18
- package/esm2022/lib/interaction/popup/index.mjs +0 -12
- package/esm2022/lib/interaction/popup/popup.component.mjs +0 -126
- package/esm2022/lib/interaction/popup/popup.content.component.mjs +0 -42
- package/esm2022/lib/interaction/popup/popup.controls.buttons.component.mjs +0 -90
- package/esm2022/lib/interaction/popup/popup.controls.component.mjs +0 -33
- package/esm2022/lib/interaction/popup/popup.coordinator.component.mjs +0 -42
- package/esm2022/lib/interaction/popup/popup.coordinator.service.mjs +0 -44
- package/esm2022/lib/interaction/popup/popup.mjs +0 -8
- package/esm2022/lib/interaction/popup/popup.module.mjs +0 -21
- package/esm2022/lib/interaction/popup/popup.position.strategy.mjs +0 -42
- package/esm2022/lib/interaction/popup/popup.service.mjs +0 -43
- package/esm2022/lib/interaction/prompt/index.mjs +0 -10
- package/esm2022/lib/interaction/prompt/prompt.box.directive.mjs +0 -19
- package/esm2022/lib/interaction/prompt/prompt.button.confirm.directive.mjs +0 -28
- package/esm2022/lib/interaction/prompt/prompt.component.mjs +0 -37
- package/esm2022/lib/interaction/prompt/prompt.confirm.component.mjs +0 -49
- package/esm2022/lib/interaction/prompt/prompt.confirm.dialog.component.mjs +0 -53
- package/esm2022/lib/interaction/prompt/prompt.confirm.directive.mjs +0 -60
- package/esm2022/lib/interaction/prompt/prompt.confirm.mjs +0 -12
- package/esm2022/lib/interaction/prompt/prompt.module.mjs +0 -23
- package/esm2022/lib/interaction/prompt/prompt.page.component.mjs +0 -33
- package/esm2022/lib/interaction/upload/abstract.upload.component.mjs +0 -85
- package/esm2022/lib/interaction/upload/index.mjs +0 -8
- package/esm2022/lib/interaction/upload/upload.accept.mjs +0 -72
- package/esm2022/lib/interaction/upload/upload.action.directive.mjs +0 -36
- package/esm2022/lib/interaction/upload/upload.action.mjs +0 -18
- package/esm2022/lib/interaction/upload/upload.area.component.mjs +0 -138
- package/esm2022/lib/interaction/upload/upload.button.component.mjs +0 -81
- package/esm2022/lib/interaction/upload/upload.component.mjs +0 -119
- package/esm2022/lib/keypress/index.mjs +0 -3
- package/esm2022/lib/keypress/keydown.listener.directive.mjs +0 -49
- package/esm2022/lib/keypress/keypress.module.mjs +0 -19
- package/esm2022/lib/layout/avatar/avatar.component.mjs +0 -79
- package/esm2022/lib/layout/avatar/avatar.mjs +0 -7
- package/esm2022/lib/layout/avatar/avatar.service.mjs +0 -78
- package/esm2022/lib/layout/avatar/avatar.view.component.mjs +0 -109
- package/esm2022/lib/layout/avatar/index.mjs +0 -4
- package/esm2022/lib/layout/bar/bar.directive.mjs +0 -26
- package/esm2022/lib/layout/bar/bar.header.component.mjs +0 -49
- package/esm2022/lib/layout/bar/bar.layout.module.mjs +0 -22
- package/esm2022/lib/layout/bar/bar.mjs +0 -2
- package/esm2022/lib/layout/bar/index.mjs +0 -5
- package/esm2022/lib/layout/bar/pagebar.component.mjs +0 -37
- package/esm2022/lib/layout/block/block.layout.module.mjs +0 -21
- package/esm2022/lib/layout/block/index.mjs +0 -3
- package/esm2022/lib/layout/block/two.block.component.mjs +0 -58
- package/esm2022/lib/layout/card/card.box.component.mjs +0 -64
- package/esm2022/lib/layout/card/card.box.container.directive.mjs +0 -20
- package/esm2022/lib/layout/card/card.box.layout.module.mjs +0 -18
- package/esm2022/lib/layout/card/index.mjs +0 -4
- package/esm2022/lib/layout/column/column.layout.module.mjs +0 -18
- package/esm2022/lib/layout/column/index.mjs +0 -4
- package/esm2022/lib/layout/column/one/index.mjs +0 -3
- package/esm2022/lib/layout/column/one/one.column.component.mjs +0 -43
- package/esm2022/lib/layout/column/one/one.column.module.mjs +0 -19
- package/esm2022/lib/layout/column/two/index.mjs +0 -11
- package/esm2022/lib/layout/column/two/two.column.back.directive.mjs +0 -27
- package/esm2022/lib/layout/column/two/two.column.component.mjs +0 -98
- package/esm2022/lib/layout/column/two/two.column.context.directive.mjs +0 -25
- package/esm2022/lib/layout/column/two/two.column.full.left.directive.mjs +0 -24
- package/esm2022/lib/layout/column/two/two.column.head.directive.mjs +0 -24
- package/esm2022/lib/layout/column/two/two.column.module.mjs +0 -24
- package/esm2022/lib/layout/column/two/two.column.right.component.mjs +0 -110
- package/esm2022/lib/layout/column/two/two.column.sref.directive.mjs +0 -26
- package/esm2022/lib/layout/column/two/two.column.sref.showright.directive.mjs +0 -30
- package/esm2022/lib/layout/column/two/two.column.store.mjs +0 -126
- package/esm2022/lib/layout/compact/compact.directive.mjs +0 -26
- package/esm2022/lib/layout/compact/compact.layout.module.mjs +0 -20
- package/esm2022/lib/layout/compact/compact.mjs +0 -26
- package/esm2022/lib/layout/compact/compact.store.mjs +0 -20
- package/esm2022/lib/layout/compact/index.mjs +0 -5
- package/esm2022/lib/layout/content/content.border.directive.mjs +0 -23
- package/esm2022/lib/layout/content/content.box.directive.mjs +0 -24
- package/esm2022/lib/layout/content/content.container.directive.mjs +0 -28
- package/esm2022/lib/layout/content/content.directive.mjs +0 -20
- package/esm2022/lib/layout/content/content.elevate.directive.mjs +0 -22
- package/esm2022/lib/layout/content/content.layout.module.mjs +0 -51
- package/esm2022/lib/layout/content/content.page.directive.mjs +0 -20
- package/esm2022/lib/layout/content/content.pit.directive.mjs +0 -54
- package/esm2022/lib/layout/content/index.mjs +0 -9
- package/esm2022/lib/layout/flag/flag.component.mjs +0 -35
- package/esm2022/lib/layout/flag/flag.layout.module.mjs +0 -18
- package/esm2022/lib/layout/flag/flag.prompt.component.mjs +0 -35
- package/esm2022/lib/layout/flag/index.mjs +0 -4
- package/esm2022/lib/layout/flex/flex.group.directive.mjs +0 -34
- package/esm2022/lib/layout/flex/flex.layout.module.mjs +0 -21
- package/esm2022/lib/layout/flex/flex.mjs +0 -2
- package/esm2022/lib/layout/flex/flex.size.directive.mjs +0 -22
- package/esm2022/lib/layout/flex/index.mjs +0 -5
- package/esm2022/lib/layout/index.mjs +0 -17
- package/esm2022/lib/layout/item/index.mjs +0 -2
- package/esm2022/lib/layout/item/item.icon.component.mjs +0 -56
- package/esm2022/lib/layout/layout.module.mjs +0 -26
- package/esm2022/lib/layout/list/grid/index.mjs +0 -3
- package/esm2022/lib/layout/list/grid/list.grid.view.component.mjs +0 -98
- package/esm2022/lib/layout/list/grid/list.grid.view.directive.mjs +0 -34
- package/esm2022/lib/layout/list/group/index.mjs +0 -4
- package/esm2022/lib/layout/list/group/list.view.value.group.mjs +0 -32
- package/esm2022/lib/layout/list/group/list.view.value.group.title.directive.mjs +0 -70
- package/esm2022/lib/layout/list/group/list.view.value.group.title.header.component.mjs +0 -60
- package/esm2022/lib/layout/list/group/list.view.value.group.title.mjs +0 -2
- package/esm2022/lib/layout/list/index.mjs +0 -21
- package/esm2022/lib/layout/list/list.component.mjs +0 -232
- package/esm2022/lib/layout/list/list.content.empty.component.mjs +0 -27
- package/esm2022/lib/layout/list/list.directive.mjs +0 -95
- package/esm2022/lib/layout/list/list.layout.module.mjs +0 -99
- package/esm2022/lib/layout/list/list.module.mjs +0 -40
- package/esm2022/lib/layout/list/list.track.mjs +0 -9
- package/esm2022/lib/layout/list/list.view.directive.mjs +0 -79
- package/esm2022/lib/layout/list/list.view.mjs +0 -17
- package/esm2022/lib/layout/list/list.view.selection.directive.mjs +0 -46
- package/esm2022/lib/layout/list/list.view.value.component.mjs +0 -190
- package/esm2022/lib/layout/list/list.view.value.directive.mjs +0 -30
- package/esm2022/lib/layout/list/list.view.value.item.directive.mjs +0 -15
- package/esm2022/lib/layout/list/list.view.value.mjs +0 -67
- package/esm2022/lib/layout/list/list.view.value.modifier.mjs +0 -17
- package/esm2022/lib/layout/list/list.view.value.selection.component.mjs +0 -112
- package/esm2022/lib/layout/list/list.wrapper.mjs +0 -15
- package/esm2022/lib/layout/list/meta/index.mjs +0 -2
- package/esm2022/lib/layout/list/meta/list.view.meta.icon.component.mjs +0 -39
- package/esm2022/lib/layout/list/modifier/index.mjs +0 -5
- package/esm2022/lib/layout/list/modifier/list.modifier.module.mjs +0 -22
- package/esm2022/lib/layout/list/modifier/list.view.value.modifier.directive.mjs +0 -76
- package/esm2022/lib/layout/list/modifier/list.view.value.modifier.ripple.directive.mjs +0 -38
- package/esm2022/lib/layout/list/modifier/list.view.value.modifier.selection.directive.mjs +0 -36
- package/esm2022/lib/layout/section/index.mjs +0 -8
- package/esm2022/lib/layout/section/section.component.mjs +0 -43
- package/esm2022/lib/layout/section/section.header.component.mjs +0 -153
- package/esm2022/lib/layout/section/section.intro.component.mjs +0 -67
- package/esm2022/lib/layout/section/section.layout.module.mjs +0 -24
- package/esm2022/lib/layout/section/section.mjs +0 -2
- package/esm2022/lib/layout/section/section.page.component.mjs +0 -51
- package/esm2022/lib/layout/section/subsection.component.mjs +0 -40
- package/esm2022/lib/layout/step/index.mjs +0 -3
- package/esm2022/lib/layout/step/step.component.mjs +0 -60
- package/esm2022/lib/layout/step/step.layout.module.mjs +0 -20
- package/esm2022/lib/layout/style/index.mjs +0 -10
- package/esm2022/lib/layout/style/spacer.directive.mjs +0 -17
- package/esm2022/lib/layout/style/style.body.directive.mjs +0 -39
- package/esm2022/lib/layout/style/style.color.directive.mjs +0 -23
- package/esm2022/lib/layout/style/style.directive.mjs +0 -30
- package/esm2022/lib/layout/style/style.layout.module.mjs +0 -21
- package/esm2022/lib/layout/style/style.mjs +0 -24
- package/esm2022/lib/layout/style/style.providers.mjs +0 -21
- package/esm2022/lib/layout/style/style.service.mjs +0 -92
- package/esm2022/lib/layout/style/style.set.directive.mjs +0 -52
- package/esm2022/lib/layout/text/address.component.mjs +0 -67
- package/esm2022/lib/layout/text/copy.text.component.mjs +0 -39
- package/esm2022/lib/layout/text/copy.text.directive.mjs +0 -56
- package/esm2022/lib/layout/text/detail.block.component.mjs +0 -43
- package/esm2022/lib/layout/text/detail.block.header.component.mjs +0 -63
- package/esm2022/lib/layout/text/icon.spacer.component.mjs +0 -20
- package/esm2022/lib/layout/text/index.mjs +0 -13
- package/esm2022/lib/layout/text/label.block.component.mjs +0 -29
- package/esm2022/lib/layout/text/linkify.component.mjs +0 -38
- package/esm2022/lib/layout/text/number.limit.component.mjs +0 -82
- package/esm2022/lib/layout/text/text.chip.directive.mjs +0 -27
- package/esm2022/lib/layout/text/text.chips.component.mjs +0 -43
- package/esm2022/lib/layout/text/text.module.mjs +0 -27
- package/esm2022/lib/loading/basic-loading.component.mjs +0 -77
- package/esm2022/lib/loading/index.mjs +0 -7
- package/esm2022/lib/loading/loading-progress.component.mjs +0 -63
- package/esm2022/lib/loading/loading.action.directive.mjs +0 -29
- package/esm2022/lib/loading/loading.component.mjs +0 -94
- package/esm2022/lib/loading/loading.mjs +0 -2
- package/esm2022/lib/loading/loading.module.mjs +0 -20
- package/esm2022/lib/router/index.mjs +0 -3
- package/esm2022/lib/router/layout/anchor/anchor.component.mjs +0 -124
- package/esm2022/lib/router/layout/anchor/anchor.content.component.mjs +0 -49
- package/esm2022/lib/router/layout/anchor/anchor.icon.component.mjs +0 -37
- package/esm2022/lib/router/layout/anchor/anchor.link.component.mjs +0 -53
- package/esm2022/lib/router/layout/anchor/anchor.module.mjs +0 -28
- package/esm2022/lib/router/layout/anchor/anchor.segue.directive.mjs +0 -24
- package/esm2022/lib/router/layout/anchor/index.mjs +0 -7
- package/esm2022/lib/router/layout/anchorlist/anchorlist.component.mjs +0 -29
- package/esm2022/lib/router/layout/anchorlist/anchorlist.module.mjs +0 -19
- package/esm2022/lib/router/layout/anchorlist/index.mjs +0 -3
- package/esm2022/lib/router/layout/index.mjs +0 -7
- package/esm2022/lib/router/layout/layout.module.mjs +0 -19
- package/esm2022/lib/router/layout/list/index.mjs +0 -3
- package/esm2022/lib/router/layout/list/list.module.mjs +0 -19
- package/esm2022/lib/router/layout/list/router.list.directive.mjs +0 -35
- package/esm2022/lib/router/layout/navbar/index.mjs +0 -3
- package/esm2022/lib/router/layout/navbar/navbar.component.mjs +0 -83
- package/esm2022/lib/router/layout/navbar/navbar.module.mjs +0 -19
- package/esm2022/lib/router/layout/sidenav/index.mjs +0 -11
- package/esm2022/lib/router/layout/sidenav/sidenav.button.component.mjs +0 -51
- package/esm2022/lib/router/layout/sidenav/sidenav.component.mjs +0 -144
- package/esm2022/lib/router/layout/sidenav/sidenav.ifdisplaymode.directive.mjs +0 -33
- package/esm2022/lib/router/layout/sidenav/sidenav.mjs +0 -8
- package/esm2022/lib/router/layout/sidenav/sidenav.module.mjs +0 -21
- package/esm2022/lib/router/layout/sidenav/sidenav.page.component.mjs +0 -55
- package/esm2022/lib/router/layout/sidenav/sidenav.pagebar.component.mjs +0 -42
- package/esm2022/lib/router/provider/index.mjs +0 -4
- package/esm2022/lib/router/provider/ngrouter/anchor.component.mjs +0 -25
- package/esm2022/lib/router/provider/ngrouter/angular.router.providers.mjs +0 -23
- package/esm2022/lib/router/provider/ngrouter/index.mjs +0 -3
- package/esm2022/lib/router/provider/router.provider.config.mjs +0 -10
- package/esm2022/lib/router/provider/uirouter/anchor.component.mjs +0 -32
- package/esm2022/lib/router/provider/uirouter/index.mjs +0 -3
- package/esm2022/lib/router/provider/uirouter/uirouter.router.providers.mjs +0 -23
- package/esm2022/lib/screen/index.mjs +0 -6
- package/esm2022/lib/screen/resize.directive.mjs +0 -24
- package/esm2022/lib/screen/resize.mjs +0 -34
- package/esm2022/lib/screen/screen.mjs +0 -22
- package/esm2022/lib/screen/screen.providers.mjs +0 -22
- package/esm2022/lib/screen/screen.service.mjs +0 -101
- package/esm2022/lib/util/cdk.mjs +0 -22
- package/esm2022/lib/util/click.mjs +0 -56
- package/esm2022/lib/util/clipboard.directive.mjs +0 -20
- package/esm2022/lib/util/clipboard.mjs +0 -98
- package/esm2022/lib/util/index.mjs +0 -5
- package/esm2022/mapbox/dereekb-dbx-web-mapbox.mjs +0 -5
- package/esm2022/mapbox/index.mjs +0 -2
- package/esm2022/mapbox/lib/index.mjs +0 -22
- package/esm2022/mapbox/lib/mapbox.change.service.mjs +0 -40
- package/esm2022/mapbox/lib/mapbox.injection.component.mjs +0 -29
- package/esm2022/mapbox/lib/mapbox.injection.store.mjs +0 -39
- package/esm2022/mapbox/lib/mapbox.injection.store.provide.mjs +0 -48
- package/esm2022/mapbox/lib/mapbox.layout.component.mjs +0 -154
- package/esm2022/mapbox/lib/mapbox.layout.drawer.component.mjs +0 -21
- package/esm2022/mapbox/lib/mapbox.layout.resize.sync.directive.mjs +0 -33
- package/esm2022/mapbox/lib/mapbox.marker.component.mjs +0 -127
- package/esm2022/mapbox/lib/mapbox.marker.mjs +0 -16
- package/esm2022/mapbox/lib/mapbox.markers.component.mjs +0 -44
- package/esm2022/mapbox/lib/mapbox.menu.component.mjs +0 -94
- package/esm2022/mapbox/lib/mapbox.mjs +0 -19
- package/esm2022/mapbox/lib/mapbox.module.mjs +0 -73
- package/esm2022/mapbox/lib/mapbox.options.mjs +0 -2
- package/esm2022/mapbox/lib/mapbox.providers.mjs +0 -25
- package/esm2022/mapbox/lib/mapbox.rxjs.mjs +0 -53
- package/esm2022/mapbox/lib/mapbox.service.mjs +0 -41
- package/esm2022/mapbox/lib/mapbox.store.map.directive.mjs +0 -42
- package/esm2022/mapbox/lib/mapbox.store.mjs +0 -549
- package/esm2022/mapbox/lib/mapbox.store.provide.mjs +0 -48
- package/esm2022/mapbox/lib/mapbox.util.mjs +0 -15
- package/esm2022/table/dereekb-dbx-web-table.mjs +0 -5
- package/esm2022/table/index.mjs +0 -2
- package/esm2022/table/lib/date/date.table.column.header.component.mjs +0 -55
- package/esm2022/table/lib/date/daterange.table.cell.input.component.mjs +0 -154
- package/esm2022/table/lib/date/index.mjs +0 -4
- package/esm2022/table/lib/date/table.date.module.mjs +0 -18
- package/esm2022/table/lib/index.mjs +0 -24
- package/esm2022/table/lib/table.cell.action.component.mjs +0 -28
- package/esm2022/table/lib/table.cell.input.component.mjs +0 -31
- package/esm2022/table/lib/table.cell.summaryend.component.mjs +0 -28
- package/esm2022/table/lib/table.cell.summarystart.component.mjs +0 -31
- package/esm2022/table/lib/table.column.directive.mjs +0 -20
- package/esm2022/table/lib/table.column.footer.component.mjs +0 -35
- package/esm2022/table/lib/table.column.header.component.mjs +0 -35
- package/esm2022/table/lib/table.column.size.directive.mjs +0 -103
- package/esm2022/table/lib/table.column.size.mjs +0 -3
- package/esm2022/table/lib/table.component.mjs +0 -179
- package/esm2022/table/lib/table.directive.mjs +0 -30
- package/esm2022/table/lib/table.fullsummaryrow.component.mjs +0 -34
- package/esm2022/table/lib/table.group.directive.mjs +0 -20
- package/esm2022/table/lib/table.group.footer.component.mjs +0 -35
- package/esm2022/table/lib/table.group.header.component.mjs +0 -35
- package/esm2022/table/lib/table.item.action.component.mjs +0 -35
- package/esm2022/table/lib/table.item.cell.component.mjs +0 -29
- package/esm2022/table/lib/table.item.directive.mjs +0 -18
- package/esm2022/table/lib/table.item.header.component.mjs +0 -28
- package/esm2022/table/lib/table.mjs +0 -10
- package/esm2022/table/lib/table.module.mjs +0 -18
- package/esm2022/table/lib/table.reader.mjs +0 -103
- package/esm2022/table/lib/table.store.mjs +0 -70
- package/index.d.ts +0 -1
- package/lib/action/action.confirm.directive.d.ts +0 -32
- package/lib/action/action.module.d.ts +0 -12
- package/lib/action/index.d.ts +0 -5
- package/lib/action/key.trigger.directive.d.ts +0 -15
- package/lib/action/snackbar/action.snackbar.component.d.ts +0 -35
- package/lib/action/snackbar/action.snackbar.d.ts +0 -52
- package/lib/action/snackbar/action.snackbar.default.d.ts +0 -2
- package/lib/action/snackbar/action.snackbar.directive.d.ts +0 -22
- package/lib/action/snackbar/action.snackbar.generator.d.ts +0 -32
- package/lib/action/snackbar/action.snackbar.module.d.ts +0 -8
- package/lib/action/snackbar/action.snackbar.service.d.ts +0 -38
- package/lib/action/snackbar/index.d.ts +0 -7
- package/lib/action/transition/action.transition.module.d.ts +0 -19
- package/lib/action/transition/index.d.ts +0 -3
- package/lib/action/transition/transition.safety.dialog.component.d.ts +0 -15
- package/lib/action/transition/transition.safety.directive.d.ts +0 -45
- package/lib/button/button.component.d.ts +0 -39
- package/lib/button/button.d.ts +0 -20
- package/lib/button/button.module.d.ts +0 -15
- package/lib/button/button.spacer.directive.d.ts +0 -8
- package/lib/button/icon/icon.button.component.d.ts +0 -9
- package/lib/button/icon/icon.button.module.d.ts +0 -10
- package/lib/button/icon/index.d.ts +0 -2
- package/lib/button/index.d.ts +0 -6
- package/lib/button/progress/abstract.progress.button.directive.d.ts +0 -29
- package/lib/button/progress/bar.button.component.d.ts +0 -8
- package/lib/button/progress/button.progress.config.d.ts +0 -83
- package/lib/button/progress/button.progress.module.d.ts +0 -11
- package/lib/button/progress/button.progress.providers.d.ts +0 -9
- package/lib/button/progress/index.d.ts +0 -5
- package/lib/button/progress/spinner.button.component.d.ts +0 -22
- package/lib/dbx-web.module.d.ts +0 -9
- package/lib/error/default.error.widget.component.d.ts +0 -8
- package/lib/error/error.action.directive.d.ts +0 -14
- package/lib/error/error.api.d.ts +0 -13
- package/lib/error/error.component.d.ts +0 -36
- package/lib/error/error.details.component.d.ts +0 -7
- package/lib/error/error.loading.directive.d.ts +0 -18
- package/lib/error/error.module.d.ts +0 -30
- package/lib/error/error.popover.component.d.ts +0 -18
- package/lib/error/error.snackbar.action.directive.d.ts +0 -16
- package/lib/error/error.snackbar.component.d.ts +0 -28
- package/lib/error/error.snackbar.service.d.ts +0 -17
- package/lib/error/error.view.component.d.ts +0 -22
- package/lib/error/error.widget.component.d.ts +0 -14
- package/lib/error/error.widget.directive.d.ts +0 -9
- package/lib/error/error.widget.service.d.ts +0 -60
- package/lib/error/index.d.ts +0 -16
- package/lib/error/state.d.ts +0 -16
- package/lib/extension/download/blob/download.blob.button.component.d.ts +0 -55
- package/lib/extension/download/blob/index.d.ts +0 -1
- package/lib/extension/download/index.d.ts +0 -2
- package/lib/extension/download/text/download.text.component.d.ts +0 -39
- package/lib/extension/download/text/download.text.d.ts +0 -5
- package/lib/extension/download/text/download.text.module.d.ts +0 -10
- package/lib/extension/download/text/index.d.ts +0 -3
- package/lib/extension/help/absract.help.widget.directive.d.ts +0 -13
- package/lib/extension/help/help.context.d.ts +0 -11
- package/lib/extension/help/help.context.directive.d.ts +0 -17
- package/lib/extension/help/help.context.service.d.ts +0 -20
- package/lib/extension/help/help.d.ts +0 -15
- package/lib/extension/help/help.providers.d.ts +0 -22
- package/lib/extension/help/help.view.list.component.d.ts +0 -39
- package/lib/extension/help/help.view.list.entry.component.d.ts +0 -16
- package/lib/extension/help/help.view.popover.button.component.d.ts +0 -32
- package/lib/extension/help/help.view.popover.component.d.ts +0 -81
- package/lib/extension/help/help.widget.d.ts +0 -52
- package/lib/extension/help/help.widget.service.d.ts +0 -74
- package/lib/extension/help/index.d.ts +0 -12
- package/lib/extension/index.d.ts +0 -7
- package/lib/extension/model/index.d.ts +0 -8
- package/lib/extension/model/model.providers.d.ts +0 -13
- package/lib/extension/model/model.state.service.d.ts +0 -12
- package/lib/extension/model/model.tracker.d.ts +0 -32
- package/lib/extension/model/model.tracker.service.d.ts +0 -19
- package/lib/extension/model/model.tracker.view.storage.d.ts +0 -30
- package/lib/extension/model/model.types.d.ts +0 -41
- package/lib/extension/model/model.types.service.d.ts +0 -30
- package/lib/extension/model/state/actions/actions.d.ts +0 -1
- package/lib/extension/model/state/actions/index.d.ts +0 -3
- package/lib/extension/model/state/actions/model.actions.d.ts +0 -9
- package/lib/extension/model/state/effects/tracker.effects.d.ts +0 -13
- package/lib/extension/model/state/index.d.ts +0 -5
- package/lib/extension/model/state/reducers/index.d.ts +0 -15
- package/lib/extension/model/state/reducers/model.module.config.d.ts +0 -5
- package/lib/extension/model/state/state.d.ts +0 -2
- package/lib/extension/preview/index.d.ts +0 -4
- package/lib/extension/preview/webfilepreview.component.d.ts +0 -19
- package/lib/extension/preview/webfilepreview.d.ts +0 -94
- package/lib/extension/preview/webfilepreview.service.d.ts +0 -36
- package/lib/extension/preview/webfilepreview.service.preset.d.ts +0 -6
- package/lib/extension/structure/index.d.ts +0 -3
- package/lib/extension/structure/structure.body.directive.d.ts +0 -9
- package/lib/extension/structure/structure.module.d.ts +0 -11
- package/lib/extension/structure/structure.structure.directive.d.ts +0 -17
- package/lib/extension/widget/index.d.ts +0 -6
- package/lib/extension/widget/widget.component.d.ts +0 -16
- package/lib/extension/widget/widget.d.ts +0 -19
- package/lib/extension/widget/widget.directive.d.ts +0 -6
- package/lib/extension/widget/widget.list.component.d.ts +0 -25
- package/lib/extension/widget/widget.module.d.ts +0 -18
- package/lib/extension/widget/widget.service.d.ts +0 -32
- package/lib/extension/zip/index.d.ts +0 -4
- package/lib/extension/zip/zip.blob.d.ts +0 -9
- package/lib/extension/zip/zip.blob.preview.component.d.ts +0 -54
- package/lib/extension/zip/zip.blob.preview.list.component.d.ts +0 -25
- package/lib/extension/zip/zip.preview.component.d.ts +0 -31
- package/lib/extension/zip/zip.preview.dialog.component.d.ts +0 -17
- package/lib/index.d.ts +0 -12
- package/lib/interaction/dialog/abstract.dialog.directive.d.ts +0 -15
- package/lib/interaction/dialog/dialog.action.directive.d.ts +0 -22
- package/lib/interaction/dialog/dialog.content.close.component.d.ts +0 -11
- package/lib/interaction/dialog/dialog.content.d.ts +0 -4
- package/lib/interaction/dialog/dialog.content.directive.d.ts +0 -12
- package/lib/interaction/dialog/dialog.content.footer.component.d.ts +0 -21
- package/lib/interaction/dialog/dialog.injection.component.d.ts +0 -19
- package/lib/interaction/dialog/dialog.module.d.ts +0 -18
- package/lib/interaction/dialog/index.d.ts +0 -8
- package/lib/interaction/filter/filter.config.d.ts +0 -62
- package/lib/interaction/filter/filter.menu.d.ts +0 -22
- package/lib/interaction/filter/filter.module.d.ts +0 -14
- package/lib/interaction/filter/filter.partial.d.ts +0 -20
- package/lib/interaction/filter/filter.partial.list.component.d.ts +0 -6
- package/lib/interaction/filter/filter.partial.menu.component.d.ts +0 -16
- package/lib/interaction/filter/filter.popover.button.component.d.ts +0 -13
- package/lib/interaction/filter/filter.popover.button.directive.d.ts +0 -17
- package/lib/interaction/filter/filter.popover.component.d.ts +0 -40
- package/lib/interaction/filter/filter.preset.directive.d.ts +0 -23
- package/lib/interaction/filter/filter.preset.list.component.d.ts +0 -7
- package/lib/interaction/filter/filter.preset.menu.component.d.ts +0 -17
- package/lib/interaction/filter/filter.wrapper.component.d.ts +0 -19
- package/lib/interaction/filter/index.d.ts +0 -12
- package/lib/interaction/iframe/embed.component.d.ts +0 -40
- package/lib/interaction/iframe/embed.dialog.component.d.ts +0 -18
- package/lib/interaction/iframe/iframe.component.d.ts +0 -22
- package/lib/interaction/iframe/iframe.dialog.component.d.ts +0 -15
- package/lib/interaction/iframe/index.d.ts +0 -4
- package/lib/interaction/index.d.ts +0 -8
- package/lib/interaction/interaction.module.d.ts +0 -20
- package/lib/interaction/popover/abstract.popover.directive.d.ts +0 -12
- package/lib/interaction/popover/abstract.popover.ref.directive.d.ts +0 -28
- package/lib/interaction/popover/index.d.ts +0 -16
- package/lib/interaction/popover/popover.action.directive.d.ts +0 -25
- package/lib/interaction/popover/popover.close.component.d.ts +0 -10
- package/lib/interaction/popover/popover.component.d.ts +0 -84
- package/lib/interaction/popover/popover.content.component.d.ts +0 -18
- package/lib/interaction/popover/popover.content.module.d.ts +0 -14
- package/lib/interaction/popover/popover.controls.directive.d.ts +0 -12
- package/lib/interaction/popover/popover.coordinator.component.d.ts +0 -16
- package/lib/interaction/popover/popover.coordinator.service.d.ts +0 -16
- package/lib/interaction/popover/popover.d.ts +0 -16
- package/lib/interaction/popover/popover.header.component.d.ts +0 -15
- package/lib/interaction/popover/popover.module.d.ts +0 -10
- package/lib/interaction/popover/popover.position.strategy.d.ts +0 -11
- package/lib/interaction/popover/popover.scroll.content.directive.d.ts +0 -13
- package/lib/interaction/popover/popover.service.d.ts +0 -19
- package/lib/interaction/popup/abstract.popup.directive.d.ts +0 -11
- package/lib/interaction/popup/index.d.ts +0 -11
- package/lib/interaction/popup/popup.component.d.ts +0 -57
- package/lib/interaction/popup/popup.content.component.d.ts +0 -11
- package/lib/interaction/popup/popup.controls.buttons.component.d.ts +0 -18
- package/lib/interaction/popup/popup.controls.component.d.ts +0 -9
- package/lib/interaction/popup/popup.coordinator.component.d.ts +0 -16
- package/lib/interaction/popup/popup.coordinator.service.d.ts +0 -16
- package/lib/interaction/popup/popup.d.ts +0 -26
- package/lib/interaction/popup/popup.module.d.ts +0 -11
- package/lib/interaction/popup/popup.position.strategy.d.ts +0 -14
- package/lib/interaction/popup/popup.service.d.ts +0 -18
- package/lib/interaction/prompt/index.d.ts +0 -9
- package/lib/interaction/prompt/prompt.box.directive.d.ts +0 -6
- package/lib/interaction/prompt/prompt.button.confirm.directive.d.ts +0 -16
- package/lib/interaction/prompt/prompt.component.d.ts +0 -11
- package/lib/interaction/prompt/prompt.confirm.component.d.ts +0 -22
- package/lib/interaction/prompt/prompt.confirm.d.ts +0 -7
- package/lib/interaction/prompt/prompt.confirm.dialog.component.d.ts +0 -22
- package/lib/interaction/prompt/prompt.confirm.directive.d.ts +0 -29
- package/lib/interaction/prompt/prompt.module.d.ts +0 -13
- package/lib/interaction/prompt/prompt.page.component.d.ts +0 -5
- package/lib/interaction/upload/abstract.upload.component.d.ts +0 -54
- package/lib/interaction/upload/index.d.ts +0 -7
- package/lib/interaction/upload/upload.accept.d.ts +0 -87
- package/lib/interaction/upload/upload.action.d.ts +0 -17
- package/lib/interaction/upload/upload.action.directive.d.ts +0 -17
- package/lib/interaction/upload/upload.area.component.d.ts +0 -22
- package/lib/interaction/upload/upload.button.component.d.ts +0 -24
- package/lib/interaction/upload/upload.component.d.ts +0 -60
- package/lib/keypress/index.d.ts +0 -2
- package/lib/keypress/keydown.listener.directive.d.ts +0 -23
- package/lib/keypress/keypress.module.d.ts +0 -10
- package/lib/layout/avatar/avatar.component.d.ts +0 -34
- package/lib/layout/avatar/avatar.d.ts +0 -58
- package/lib/layout/avatar/avatar.service.d.ts +0 -66
- package/lib/layout/avatar/avatar.view.component.d.ts +0 -29
- package/lib/layout/avatar/index.d.ts +0 -3
- package/lib/layout/bar/bar.d.ts +0 -2
- package/lib/layout/bar/bar.directive.d.ts +0 -11
- package/lib/layout/bar/bar.header.component.d.ts +0 -12
- package/lib/layout/bar/bar.layout.module.d.ts +0 -12
- package/lib/layout/bar/index.d.ts +0 -4
- package/lib/layout/bar/pagebar.component.d.ts +0 -8
- package/lib/layout/block/block.layout.module.d.ts +0 -12
- package/lib/layout/block/index.d.ts +0 -2
- package/lib/layout/block/two.block.component.d.ts +0 -20
- package/lib/layout/card/card.box.component.d.ts +0 -10
- package/lib/layout/card/card.box.container.directive.d.ts +0 -8
- package/lib/layout/card/card.box.layout.module.d.ts +0 -8
- package/lib/layout/card/index.d.ts +0 -3
- package/lib/layout/column/column.layout.module.d.ts +0 -8
- package/lib/layout/column/index.d.ts +0 -3
- package/lib/layout/column/one/index.d.ts +0 -2
- package/lib/layout/column/one/one.column.component.d.ts +0 -12
- package/lib/layout/column/one/one.column.module.d.ts +0 -10
- package/lib/layout/column/two/index.d.ts +0 -10
- package/lib/layout/column/two/two.column.back.directive.d.ts +0 -15
- package/lib/layout/column/two/two.column.component.d.ts +0 -58
- package/lib/layout/column/two/two.column.context.directive.d.ts +0 -13
- package/lib/layout/column/two/two.column.full.left.directive.d.ts +0 -12
- package/lib/layout/column/two/two.column.head.directive.d.ts +0 -11
- package/lib/layout/column/two/two.column.module.d.ts +0 -14
- package/lib/layout/column/two/two.column.right.component.d.ts +0 -29
- package/lib/layout/column/two/two.column.sref.directive.d.ts +0 -13
- package/lib/layout/column/two/two.column.sref.showright.directive.d.ts +0 -13
- package/lib/layout/column/two/two.column.store.d.ts +0 -125
- package/lib/layout/compact/compact.d.ts +0 -16
- package/lib/layout/compact/compact.directive.d.ts +0 -14
- package/lib/layout/compact/compact.layout.module.d.ts +0 -10
- package/lib/layout/compact/compact.store.d.ts +0 -13
- package/lib/layout/compact/index.d.ts +0 -4
- package/lib/layout/content/content.border.directive.d.ts +0 -11
- package/lib/layout/content/content.box.directive.d.ts +0 -10
- package/lib/layout/content/content.container.directive.d.ts +0 -14
- package/lib/layout/content/content.directive.d.ts +0 -8
- package/lib/layout/content/content.elevate.directive.d.ts +0 -9
- package/lib/layout/content/content.layout.module.d.ts +0 -16
- package/lib/layout/content/content.page.directive.d.ts +0 -8
- package/lib/layout/content/content.pit.directive.d.ts +0 -15
- package/lib/layout/content/index.d.ts +0 -8
- package/lib/layout/flag/flag.component.d.ts +0 -10
- package/lib/layout/flag/flag.layout.module.d.ts +0 -8
- package/lib/layout/flag/flag.prompt.component.d.ts +0 -12
- package/lib/layout/flag/index.d.ts +0 -3
- package/lib/layout/flex/flex.d.ts +0 -4
- package/lib/layout/flex/flex.group.directive.d.ts +0 -18
- package/lib/layout/flex/flex.layout.module.d.ts +0 -11
- package/lib/layout/flex/flex.size.directive.d.ts +0 -11
- package/lib/layout/flex/index.d.ts +0 -4
- package/lib/layout/index.d.ts +0 -16
- package/lib/layout/item/index.d.ts +0 -1
- package/lib/layout/item/item.icon.component.d.ts +0 -11
- package/lib/layout/layout.module.d.ts +0 -18
- package/lib/layout/list/grid/index.d.ts +0 -2
- package/lib/layout/list/grid/list.grid.view.component.d.ts +0 -50
- package/lib/layout/list/grid/list.grid.view.directive.d.ts +0 -24
- package/lib/layout/list/group/index.d.ts +0 -3
- package/lib/layout/list/group/list.view.value.group.d.ts +0 -44
- package/lib/layout/list/group/list.view.value.group.title.d.ts +0 -53
- package/lib/layout/list/group/list.view.value.group.title.directive.d.ts +0 -15
- package/lib/layout/list/group/list.view.value.group.title.header.component.d.ts +0 -21
- package/lib/layout/list/index.d.ts +0 -20
- package/lib/layout/list/list.component.d.ts +0 -134
- package/lib/layout/list/list.content.empty.component.d.ts +0 -8
- package/lib/layout/list/list.directive.d.ts +0 -54
- package/lib/layout/list/list.layout.module.d.ts +0 -34
- package/lib/layout/list/list.module.d.ts +0 -13
- package/lib/layout/list/list.track.d.ts +0 -6
- package/lib/layout/list/list.view.d.ts +0 -59
- package/lib/layout/list/list.view.directive.d.ts +0 -43
- package/lib/layout/list/list.view.selection.directive.d.ts +0 -25
- package/lib/layout/list/list.view.value.component.d.ts +0 -56
- package/lib/layout/list/list.view.value.d.ts +0 -53
- package/lib/layout/list/list.view.value.directive.d.ts +0 -21
- package/lib/layout/list/list.view.value.item.directive.d.ts +0 -8
- package/lib/layout/list/list.view.value.modifier.d.ts +0 -12
- package/lib/layout/list/list.view.value.selection.component.d.ts +0 -32
- package/lib/layout/list/list.wrapper.d.ts +0 -21
- package/lib/layout/list/meta/index.d.ts +0 -1
- package/lib/layout/list/meta/list.view.meta.icon.component.d.ts +0 -17
- package/lib/layout/list/modifier/index.d.ts +0 -4
- package/lib/layout/list/modifier/list.modifier.module.d.ts +0 -12
- package/lib/layout/list/modifier/list.view.value.modifier.directive.d.ts +0 -36
- package/lib/layout/list/modifier/list.view.value.modifier.ripple.directive.d.ts +0 -15
- package/lib/layout/list/modifier/list.view.value.modifier.selection.directive.d.ts +0 -15
- package/lib/layout/section/index.d.ts +0 -7
- package/lib/layout/section/section.component.d.ts +0 -11
- package/lib/layout/section/section.d.ts +0 -32
- package/lib/layout/section/section.header.component.d.ts +0 -21
- package/lib/layout/section/section.intro.component.d.ts +0 -14
- package/lib/layout/section/section.layout.module.d.ts +0 -14
- package/lib/layout/section/section.page.component.d.ts +0 -25
- package/lib/layout/section/subsection.component.d.ts +0 -9
- package/lib/layout/step/index.d.ts +0 -2
- package/lib/layout/step/step.component.d.ts +0 -10
- package/lib/layout/step/step.layout.module.d.ts +0 -10
- package/lib/layout/style/index.d.ts +0 -9
- package/lib/layout/style/spacer.directive.d.ts +0 -5
- package/lib/layout/style/style.body.directive.d.ts +0 -16
- package/lib/layout/style/style.color.directive.d.ts +0 -12
- package/lib/layout/style/style.d.ts +0 -58
- package/lib/layout/style/style.directive.d.ts +0 -14
- package/lib/layout/style/style.layout.module.d.ts +0 -11
- package/lib/layout/style/style.providers.d.ts +0 -19
- package/lib/layout/style/style.service.d.ts +0 -45
- package/lib/layout/style/style.set.directive.d.ts +0 -33
- package/lib/layout/text/address.component.d.ts +0 -7
- package/lib/layout/text/copy.text.component.d.ts +0 -17
- package/lib/layout/text/copy.text.directive.d.ts +0 -23
- package/lib/layout/text/detail.block.component.d.ts +0 -13
- package/lib/layout/text/detail.block.header.component.d.ts +0 -9
- package/lib/layout/text/icon.spacer.component.d.ts +0 -8
- package/lib/layout/text/index.d.ts +0 -12
- package/lib/layout/text/label.block.component.d.ts +0 -10
- package/lib/layout/text/linkify.component.d.ts +0 -13
- package/lib/layout/text/number.limit.component.d.ts +0 -40
- package/lib/layout/text/text.chip.directive.d.ts +0 -9
- package/lib/layout/text/text.chips.component.d.ts +0 -15
- package/lib/layout/text/text.module.d.ts +0 -17
- package/lib/loading/basic-loading.component.d.ts +0 -32
- package/lib/loading/index.d.ts +0 -6
- package/lib/loading/loading-progress.component.d.ts +0 -23
- package/lib/loading/loading.action.directive.d.ts +0 -16
- package/lib/loading/loading.component.d.ts +0 -46
- package/lib/loading/loading.d.ts +0 -10
- package/lib/loading/loading.module.d.ts +0 -10
- package/lib/router/index.d.ts +0 -2
- package/lib/router/layout/anchor/anchor.component.d.ts +0 -23
- package/lib/router/layout/anchor/anchor.content.component.d.ts +0 -20
- package/lib/router/layout/anchor/anchor.icon.component.d.ts +0 -11
- package/lib/router/layout/anchor/anchor.link.component.d.ts +0 -14
- package/lib/router/layout/anchor/anchor.module.d.ts +0 -23
- package/lib/router/layout/anchor/anchor.segue.directive.d.ts +0 -17
- package/lib/router/layout/anchor/index.d.ts +0 -6
- package/lib/router/layout/anchorlist/anchorlist.component.d.ts +0 -16
- package/lib/router/layout/anchorlist/anchorlist.module.d.ts +0 -10
- package/lib/router/layout/anchorlist/index.d.ts +0 -2
- package/lib/router/layout/index.d.ts +0 -6
- package/lib/router/layout/layout.module.d.ts +0 -11
- package/lib/router/layout/list/index.d.ts +0 -2
- package/lib/router/layout/list/list.module.d.ts +0 -10
- package/lib/router/layout/list/router.list.directive.d.ts +0 -15
- package/lib/router/layout/navbar/index.d.ts +0 -2
- package/lib/router/layout/navbar/navbar.component.d.ts +0 -48
- package/lib/router/layout/navbar/navbar.module.d.ts +0 -10
- package/lib/router/layout/sidenav/index.d.ts +0 -7
- package/lib/router/layout/sidenav/sidenav.button.component.d.ts +0 -18
- package/lib/router/layout/sidenav/sidenav.component.d.ts +0 -36
- package/lib/router/layout/sidenav/sidenav.d.ts +0 -6
- package/lib/router/layout/sidenav/sidenav.ifdisplaymode.directive.d.ts +0 -19
- package/lib/router/layout/sidenav/sidenav.module.d.ts +0 -11
- package/lib/router/layout/sidenav/sidenav.page.component.d.ts +0 -19
- package/lib/router/layout/sidenav/sidenav.pagebar.component.d.ts +0 -11
- package/lib/router/provider/index.d.ts +0 -3
- package/lib/router/provider/ngrouter/anchor.component.d.ts +0 -14
- package/lib/router/provider/ngrouter/angular.router.providers.d.ts +0 -7
- package/lib/router/provider/ngrouter/index.d.ts +0 -2
- package/lib/router/provider/router.provider.config.d.ts +0 -14
- package/lib/router/provider/uirouter/anchor.component.d.ts +0 -19
- package/lib/router/provider/uirouter/index.d.ts +0 -2
- package/lib/router/provider/uirouter/uirouter.router.providers.d.ts +0 -7
- package/lib/screen/index.d.ts +0 -5
- package/lib/screen/resize.d.ts +0 -19
- package/lib/screen/resize.directive.d.ts +0 -14
- package/lib/screen/screen.d.ts +0 -36
- package/lib/screen/screen.providers.d.ts +0 -15
- package/lib/screen/screen.service.d.ts +0 -59
- package/lib/util/cdk.d.ts +0 -9
- package/lib/util/click.d.ts +0 -29
- package/lib/util/clipboard.d.ts +0 -78
- package/lib/util/clipboard.directive.d.ts +0 -12
- package/lib/util/index.d.ts +0 -4
- package/mapbox/index.d.ts +0 -1
- package/mapbox/lib/index.d.ts +0 -21
- package/mapbox/lib/mapbox.change.service.d.ts +0 -20
- package/mapbox/lib/mapbox.d.ts +0 -93
- package/mapbox/lib/mapbox.injection.component.d.ts +0 -11
- package/mapbox/lib/mapbox.injection.store.d.ts +0 -45
- package/mapbox/lib/mapbox.injection.store.provide.d.ts +0 -23
- package/mapbox/lib/mapbox.layout.component.d.ts +0 -56
- package/mapbox/lib/mapbox.layout.drawer.component.d.ts +0 -11
- package/mapbox/lib/mapbox.layout.resize.sync.directive.d.ts +0 -14
- package/mapbox/lib/mapbox.marker.component.d.ts +0 -16
- package/mapbox/lib/mapbox.marker.d.ts +0 -65
- package/mapbox/lib/mapbox.markers.component.d.ts +0 -14
- package/mapbox/lib/mapbox.menu.component.d.ts +0 -29
- package/mapbox/lib/mapbox.module.d.ts +0 -16
- package/mapbox/lib/mapbox.options.d.ts +0 -11
- package/mapbox/lib/mapbox.providers.d.ts +0 -17
- package/mapbox/lib/mapbox.rxjs.d.ts +0 -45
- package/mapbox/lib/mapbox.service.d.ts +0 -24
- package/mapbox/lib/mapbox.store.d.ts +0 -239
- package/mapbox/lib/mapbox.store.map.directive.d.ts +0 -17
- package/mapbox/lib/mapbox.store.provide.d.ts +0 -23
- package/mapbox/lib/mapbox.util.d.ts +0 -27
- package/table/index.d.ts +0 -1
- package/table/lib/date/date.table.column.header.component.d.ts +0 -18
- package/table/lib/date/daterange.table.cell.input.component.d.ts +0 -69
- package/table/lib/date/index.d.ts +0 -3
- package/table/lib/date/table.date.module.d.ts +0 -8
- package/table/lib/index.d.ts +0 -23
- package/table/lib/table.cell.action.component.d.ts +0 -9
- package/table/lib/table.cell.input.component.d.ts +0 -12
- package/table/lib/table.cell.summaryend.component.d.ts +0 -9
- package/table/lib/table.cell.summarystart.component.d.ts +0 -12
- package/table/lib/table.column.directive.d.ts +0 -14
- package/table/lib/table.column.footer.component.d.ts +0 -8
- package/table/lib/table.column.header.component.d.ts +0 -8
- package/table/lib/table.column.size.d.ts +0 -2
- package/table/lib/table.column.size.directive.d.ts +0 -29
- package/table/lib/table.component.d.ts +0 -59
- package/table/lib/table.d.ts +0 -143
- package/table/lib/table.directive.d.ts +0 -16
- package/table/lib/table.fullsummaryrow.component.d.ts +0 -12
- package/table/lib/table.group.directive.d.ts +0 -14
- package/table/lib/table.group.footer.component.d.ts +0 -9
- package/table/lib/table.group.header.component.d.ts +0 -9
- package/table/lib/table.item.action.component.d.ts +0 -9
- package/table/lib/table.item.cell.component.d.ts +0 -12
- package/table/lib/table.item.directive.d.ts +0 -13
- package/table/lib/table.item.header.component.d.ts +0 -8
- package/table/lib/table.module.d.ts +0 -8
- package/table/lib/table.reader.d.ts +0 -102
- package/table/lib/table.store.d.ts +0 -42
|
@@ -1,549 +0,0 @@
|
|
|
1
|
-
import { cleanup, filterMaybe, onTrueToFalse } from '@dereekb/rxjs';
|
|
2
|
-
import { Injectable, inject } from '@angular/core';
|
|
3
|
-
import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction, diffLatLngBoundPoints, latLngBoundCenterPoint, addLatLngPoints, isDefaultLatLngPoint, swMostLatLngPoint, neMostLatLngPoint, latLngBoundWrapsMap, filterUndefinedValues, latLngBoundFromInput, vectorMinimumSizeResizeFunction, isSameVector } from '@dereekb/util';
|
|
4
|
-
import { ComponentStore } from '@ngrx/component-store';
|
|
5
|
-
import { defaultIfEmpty, distinctUntilChanged, filter, map, shareReplay, switchMap, tap, NEVER, of, startWith, interval, first, combineLatest, EMPTY, throttleTime } from 'rxjs';
|
|
6
|
-
import * as MapboxGl from 'mapbox-gl';
|
|
7
|
-
import { DbxMapboxService } from './mapbox.service';
|
|
8
|
-
import { mapboxViewportBoundFunction } from './mapbox.util';
|
|
9
|
-
import { filterByMapboxViewportBound } from './mapbox.rxjs';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
/**
|
|
12
|
-
* Store used for retrieving information.
|
|
13
|
-
*/
|
|
14
|
-
export class DbxMapboxMapStore extends ComponentStore {
|
|
15
|
-
dbxMapboxService = inject(DbxMapboxService);
|
|
16
|
-
safeLatLngPoint = latLngPointFunction({ wrap: true });
|
|
17
|
-
latLngPoint = latLngPointFunction({ wrap: false, validate: false });
|
|
18
|
-
latLngBound = latLngBoundFunction({ pointFunction: this.latLngPoint });
|
|
19
|
-
constructor() {
|
|
20
|
-
super({
|
|
21
|
-
lifecycleState: 'init',
|
|
22
|
-
moveState: 'init',
|
|
23
|
-
zoomState: 'init',
|
|
24
|
-
rotateState: 'init',
|
|
25
|
-
retainContent: true,
|
|
26
|
-
useVirtualBound: true,
|
|
27
|
-
boundRefreshSettings: {
|
|
28
|
-
throttle: 300,
|
|
29
|
-
refreshType: 'always'
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
// MARK: Effects
|
|
34
|
-
setMapService = this.effect((input) => {
|
|
35
|
-
return input.pipe(switchMap((service) => {
|
|
36
|
-
this._setMapService(service);
|
|
37
|
-
if (!service) {
|
|
38
|
-
return NEVER;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
return service.mapLoaded$.pipe(defaultIfEmpty(undefined), map(() => {
|
|
42
|
-
this._setLifecycleState('idle');
|
|
43
|
-
this._setMoveState('idle');
|
|
44
|
-
this._setZoomState('idle');
|
|
45
|
-
this._setRotateState('idle');
|
|
46
|
-
const map = service.mapInstance;
|
|
47
|
-
const listenerPairs = [];
|
|
48
|
-
function addListener(type, listener) {
|
|
49
|
-
map.on(type, listener);
|
|
50
|
-
listenerPairs.push({ type, listener });
|
|
51
|
-
}
|
|
52
|
-
addListener('idle', () => this._setLifecycleState('idle'));
|
|
53
|
-
addListener('render', () => this._setLifecycleState('render'));
|
|
54
|
-
addListener('error', (x) => {
|
|
55
|
-
this._setError(x.error);
|
|
56
|
-
});
|
|
57
|
-
addListener('movestart', () => this._setMoveState('moving'));
|
|
58
|
-
addListener('moveend', () => this._setMoveState('idle'));
|
|
59
|
-
addListener('zoomstart', () => this._setZoomState('zooming'));
|
|
60
|
-
addListener('zoomend', () => this._setZoomState('idle'));
|
|
61
|
-
addListener('rotatestart', () => this._setRotateState('rotating'));
|
|
62
|
-
addListener('rotateend', () => this._setRotateState('idle'));
|
|
63
|
-
addListener('click', (x) => this._setClickEvent(x));
|
|
64
|
-
addListener('dblclick', (x) => this._setDoubleClickEvent(x));
|
|
65
|
-
addListener('contextmenu', (x) => this._setRightClickEvent(x));
|
|
66
|
-
const refreshForResize = () => {
|
|
67
|
-
const { clientWidth: x, clientHeight: y } = map.getCanvas();
|
|
68
|
-
this._setMapCanvasSize({ x, y });
|
|
69
|
-
};
|
|
70
|
-
addListener('resize', refreshForResize);
|
|
71
|
-
refreshForResize();
|
|
72
|
-
const subs = [];
|
|
73
|
-
return {
|
|
74
|
-
service,
|
|
75
|
-
listenerPairs,
|
|
76
|
-
subs
|
|
77
|
-
};
|
|
78
|
-
}));
|
|
79
|
-
}
|
|
80
|
-
}), cleanup(({ service, listenerPairs, subs }) => {
|
|
81
|
-
const map = service.mapInstance;
|
|
82
|
-
if (map) {
|
|
83
|
-
listenerPairs.forEach((x) => {
|
|
84
|
-
map.off(x.type, x.listener);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
subs.forEach((sub) => sub.unsubscribe());
|
|
88
|
-
}));
|
|
89
|
-
});
|
|
90
|
-
setStyle = this.effect((input) => {
|
|
91
|
-
return input.pipe(switchMap((style) => {
|
|
92
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
93
|
-
if (typeof style === 'string') {
|
|
94
|
-
map.setStyle(style);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
map.setStyle(style.style, style.options);
|
|
98
|
-
}
|
|
99
|
-
}));
|
|
100
|
-
}));
|
|
101
|
-
});
|
|
102
|
-
setCenter = this.effect((input) => {
|
|
103
|
-
return input.pipe(switchMap((center) => {
|
|
104
|
-
const centerPoint = this.safeLatLngPoint(center);
|
|
105
|
-
return this.mapInstance$.pipe(tap((map) => map.setCenter(centerPoint)));
|
|
106
|
-
}));
|
|
107
|
-
});
|
|
108
|
-
setZoom = this.effect((input) => {
|
|
109
|
-
return input.pipe(switchMap((zoom) => {
|
|
110
|
-
return this.mapInstance$.pipe(tap((map) => map.setZoom(zoom)));
|
|
111
|
-
}));
|
|
112
|
-
});
|
|
113
|
-
setZoomRange = this.effect((input) => {
|
|
114
|
-
return input.pipe(switchMap((zoomRange) => {
|
|
115
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
116
|
-
map.setMinZoom(zoomRange.min || null);
|
|
117
|
-
map.setMaxZoom(zoomRange.max || null);
|
|
118
|
-
}));
|
|
119
|
-
}));
|
|
120
|
-
});
|
|
121
|
-
setMinZoom = this.effect((input) => {
|
|
122
|
-
return input.pipe(switchMap((zoom) => {
|
|
123
|
-
return this.mapInstance$.pipe(tap((map) => map.setMinZoom(zoom)));
|
|
124
|
-
}));
|
|
125
|
-
});
|
|
126
|
-
setMaxZoom = this.effect((input) => {
|
|
127
|
-
return input.pipe(switchMap((zoom) => {
|
|
128
|
-
return this.mapInstance$.pipe(tap((map) => map.setMaxZoom(zoom)));
|
|
129
|
-
}));
|
|
130
|
-
});
|
|
131
|
-
setKeyboardDisabled = this.effect((input) => {
|
|
132
|
-
return input.pipe(switchMap((disabled) => {
|
|
133
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
134
|
-
if (disabled === false) {
|
|
135
|
-
map.keyboard.enable();
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
map.keyboard.disable();
|
|
139
|
-
}
|
|
140
|
-
}));
|
|
141
|
-
}));
|
|
142
|
-
});
|
|
143
|
-
setDragRotateDisabled = this.effect((input) => {
|
|
144
|
-
return input.pipe(switchMap((disabled) => {
|
|
145
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
146
|
-
if (disabled === false) {
|
|
147
|
-
map.dragRotate.enable();
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
map.dragRotate.disable();
|
|
151
|
-
}
|
|
152
|
-
}));
|
|
153
|
-
}));
|
|
154
|
-
});
|
|
155
|
-
setDragPanDisabled = this.effect((input) => {
|
|
156
|
-
return input.pipe(switchMap((disabled) => {
|
|
157
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
158
|
-
if (disabled === false) {
|
|
159
|
-
map.dragPan.enable();
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
map.dragPan.disable();
|
|
163
|
-
}
|
|
164
|
-
}));
|
|
165
|
-
}));
|
|
166
|
-
});
|
|
167
|
-
setZoomDisabled = this.effect((input) => {
|
|
168
|
-
return input.pipe(switchMap((disabled) => {
|
|
169
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
170
|
-
if (disabled === false) {
|
|
171
|
-
map.scrollZoom.enable();
|
|
172
|
-
map.doubleClickZoom.enable();
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
map.scrollZoom.disable();
|
|
176
|
-
map.doubleClickZoom.disable();
|
|
177
|
-
}
|
|
178
|
-
}));
|
|
179
|
-
}));
|
|
180
|
-
});
|
|
181
|
-
setPitch = this.effect((input) => {
|
|
182
|
-
return input.pipe(switchMap((pitch) => {
|
|
183
|
-
return this.mapInstance$.pipe(tap((map) => map.setPitch(pitch)));
|
|
184
|
-
}));
|
|
185
|
-
});
|
|
186
|
-
setMinPitch = this.effect((input) => {
|
|
187
|
-
return input.pipe(switchMap((pitch) => {
|
|
188
|
-
return this.mapInstance$.pipe(tap((map) => map.setMinPitch(pitch)));
|
|
189
|
-
}));
|
|
190
|
-
});
|
|
191
|
-
setMaxPitch = this.effect((input) => {
|
|
192
|
-
return input.pipe(switchMap((pitch) => {
|
|
193
|
-
return this.mapInstance$.pipe(tap((map) => map.setMaxPitch(pitch)));
|
|
194
|
-
}));
|
|
195
|
-
});
|
|
196
|
-
setBearing = this.effect((input) => {
|
|
197
|
-
return input.pipe(switchMap((bearing) => {
|
|
198
|
-
return this.mapInstance$.pipe(tap((map) => map.setBearing(bearing)));
|
|
199
|
-
}));
|
|
200
|
-
});
|
|
201
|
-
rotateTo = this.effect((input) => {
|
|
202
|
-
return input.pipe(switchMap((rotateInput) => {
|
|
203
|
-
const rotate = typeof rotateInput === 'number' ? { bearing: rotateInput } : rotateInput;
|
|
204
|
-
return this.mapInstance$.pipe(tap((map) => map.rotateTo(rotate.bearing, rotate.options, rotate?.eventData)));
|
|
205
|
-
}));
|
|
206
|
-
});
|
|
207
|
-
resetNorth = this.effect((input) => {
|
|
208
|
-
return input.pipe(switchMap((reset) => {
|
|
209
|
-
return this.mapInstance$.pipe(tap((map) => map.resetNorth(reset?.options, reset?.eventData)));
|
|
210
|
-
}));
|
|
211
|
-
});
|
|
212
|
-
resetNorthPitch = this.effect((input) => {
|
|
213
|
-
return input.pipe(switchMap((reset) => {
|
|
214
|
-
return this.mapInstance$.pipe(tap((map) => map.resetNorthPitch(reset?.options, reset?.eventData)));
|
|
215
|
-
}));
|
|
216
|
-
});
|
|
217
|
-
snapToNorth = this.effect((input) => {
|
|
218
|
-
return input.pipe(switchMap((snap) => {
|
|
219
|
-
return this.mapInstance$.pipe(tap((map) => map.snapToNorth(snap?.options, snap?.eventData)));
|
|
220
|
-
}));
|
|
221
|
-
});
|
|
222
|
-
fitPositions = this.effect((input) => {
|
|
223
|
-
return input.pipe(switchMap((x) => {
|
|
224
|
-
const boundFromInput = latLngBoundFromInput(x.positions);
|
|
225
|
-
if (boundFromInput) {
|
|
226
|
-
const bound = this.latLngBound(boundFromInput);
|
|
227
|
-
return this.mapInstance$.pipe(tap((map) => map.fitBounds(new MapboxGl.LngLatBounds(bound.sw, bound.ne), x.options, x.eventData)));
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
return EMPTY;
|
|
231
|
-
}
|
|
232
|
-
}));
|
|
233
|
-
});
|
|
234
|
-
fitBounds = this.effect((input) => {
|
|
235
|
-
return input.pipe(switchMap((x) => {
|
|
236
|
-
const bound = this.latLngBound(x.bounds);
|
|
237
|
-
return this.mapInstance$.pipe(tap((map) => map.fitBounds(new MapboxGl.LngLatBounds(bound.sw, bound.ne), x.options, x.eventData)));
|
|
238
|
-
}));
|
|
239
|
-
});
|
|
240
|
-
jumpTo = this.effect((input) => {
|
|
241
|
-
return input.pipe(switchMap((x) => {
|
|
242
|
-
const inputCenter = x.center ?? x.to?.center;
|
|
243
|
-
const center = inputCenter ? this.safeLatLngPoint(inputCenter) : undefined;
|
|
244
|
-
return this.mapInstance$.pipe(tap((map) => map.jumpTo(filterUndefinedValues({ ...x.to, center }), x.eventData)));
|
|
245
|
-
}));
|
|
246
|
-
});
|
|
247
|
-
easeTo = this.effect((input) => {
|
|
248
|
-
return input.pipe(switchMap((x) => {
|
|
249
|
-
const inputCenter = x.center ?? x.to?.center;
|
|
250
|
-
const center = inputCenter ? this.safeLatLngPoint(inputCenter) : undefined;
|
|
251
|
-
return this.mapInstance$.pipe(tap((map) => map.easeTo(filterUndefinedValues({ ...x.to, center }), x.eventData)));
|
|
252
|
-
}));
|
|
253
|
-
});
|
|
254
|
-
flyTo = this.effect((input) => {
|
|
255
|
-
return input.pipe(switchMap((x) => {
|
|
256
|
-
const inputCenter = x.center ?? x.to?.center;
|
|
257
|
-
const center = inputCenter ? this.safeLatLngPoint(inputCenter) : undefined;
|
|
258
|
-
return this.mapInstance$.pipe(tap((map) => map.flyTo(filterUndefinedValues({ ...x.to, center }), x.eventData)));
|
|
259
|
-
}));
|
|
260
|
-
});
|
|
261
|
-
resetPitchAndBearing = this.effect((input) => {
|
|
262
|
-
return input.pipe(switchMap(() => {
|
|
263
|
-
return this.mapInstance$.pipe(tap((map) => {
|
|
264
|
-
map.setPitch(0);
|
|
265
|
-
map.setBearing(0);
|
|
266
|
-
}));
|
|
267
|
-
}));
|
|
268
|
-
});
|
|
269
|
-
// MARK: Accessors
|
|
270
|
-
get timerRefreshPeriod() {
|
|
271
|
-
return this.dbxMapboxService.mapboxMapStoreTimerRefreshPeriod;
|
|
272
|
-
}
|
|
273
|
-
movingTimer(period = this.timerRefreshPeriod) {
|
|
274
|
-
return this.moveState$.pipe(switchMap((x) => {
|
|
275
|
-
if (x === 'moving') {
|
|
276
|
-
return interval(period);
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
return of(0);
|
|
280
|
-
}
|
|
281
|
-
}), shareReplay(1));
|
|
282
|
-
}
|
|
283
|
-
lifecycleRenderTimer(period = this.timerRefreshPeriod) {
|
|
284
|
-
return this.lifecycleState$.pipe(switchMap((x) => {
|
|
285
|
-
if (x === 'render') {
|
|
286
|
-
return interval(period);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
return of(0);
|
|
290
|
-
}
|
|
291
|
-
}), shareReplay(1));
|
|
292
|
-
}
|
|
293
|
-
atNextIdle() {
|
|
294
|
-
return this.moveState$.pipe(map((x) => x === 'idle'), first());
|
|
295
|
-
}
|
|
296
|
-
calculateNextCenterWithOffset(inputOffset) {
|
|
297
|
-
const offset = this.latLngPoint(inputOffset);
|
|
298
|
-
return this.atNextIdle().pipe(switchMap(() => this.center$.pipe(first(), map((center) => {
|
|
299
|
-
const newCenter = {
|
|
300
|
-
lat: offset.lat + center.lat,
|
|
301
|
-
lng: offset.lng + center.lng
|
|
302
|
-
};
|
|
303
|
-
return newCenter;
|
|
304
|
-
}))));
|
|
305
|
-
}
|
|
306
|
-
calculateNextCenterOffsetWithScreenMarginChange(sizing) {
|
|
307
|
-
// TODO: Consider calculating this using the viewport() function from @placemarkio/geo-viewport
|
|
308
|
-
return this.atNextIdle().pipe(switchMap(() => this.bound$.pipe(first(), map((bounds) => {
|
|
309
|
-
const diff = diffLatLngBoundPoints(bounds, true);
|
|
310
|
-
const center = latLngBoundCenterPoint(bounds);
|
|
311
|
-
const offsetWidth = sizing.leftMargin + sizing.rightMargin; // 300 + 0
|
|
312
|
-
const newWidth = sizing.fullWidth - offsetWidth; // 1000 - 300 - 0
|
|
313
|
-
const newWidthRatio = newWidth / sizing.fullWidth; // 700 / 1000
|
|
314
|
-
const newCenterLongitudeWidth = diff.lng * newWidthRatio; // 70% offset
|
|
315
|
-
const effectiveOffset = {
|
|
316
|
-
lat: 0,
|
|
317
|
-
lng: newCenterLongitudeWidth / 2
|
|
318
|
-
};
|
|
319
|
-
const newCenter = addLatLngPoints(bounds.sw, effectiveOffset);
|
|
320
|
-
newCenter.lat = center.lat; // retain center position
|
|
321
|
-
// console.log({ sizing, bounds, effectiveOffset, newWidth, offsetWidth, diff, center, newCenter });
|
|
322
|
-
return newCenter;
|
|
323
|
-
}))));
|
|
324
|
-
}
|
|
325
|
-
filterByViewportBound(input) {
|
|
326
|
-
const config = typeof input === 'function' ? { readValue: input } : input;
|
|
327
|
-
return filterByMapboxViewportBound({
|
|
328
|
-
...config,
|
|
329
|
-
boundFunctionObs: this.viewportBoundFunction$,
|
|
330
|
-
boundDecisionObs: this.overlapsBoundFunction$
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
currentMapService$ = this.state$.pipe(map((x) => x.mapService), distinctUntilChanged(), shareReplay(1));
|
|
334
|
-
mapService$ = this.currentMapService$.pipe(filterMaybe());
|
|
335
|
-
currentMapInstance$ = this.currentMapService$.pipe(switchMap((currentMapService) => {
|
|
336
|
-
if (currentMapService) {
|
|
337
|
-
return currentMapService.mapLoaded$.pipe(defaultIfEmpty(undefined), map(() => currentMapService.mapInstance));
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
return of(undefined);
|
|
341
|
-
}
|
|
342
|
-
}), distinctUntilChanged(), shareReplay(1));
|
|
343
|
-
mapInstance$ = this.currentMapInstance$.pipe(filterMaybe());
|
|
344
|
-
boundRefreshSettings$ = this.state$.pipe(map((x) => x.boundRefreshSettings), shareReplay(1));
|
|
345
|
-
moveState$ = this.state$.pipe(map((x) => x.moveState), distinctUntilChanged(), shareReplay(1));
|
|
346
|
-
lifecycleState$ = this.state$.pipe(map((x) => x.lifecycleState), distinctUntilChanged(), shareReplay(1));
|
|
347
|
-
zoomState$ = this.state$.pipe(map((x) => x.zoomState), distinctUntilChanged(), shareReplay(1));
|
|
348
|
-
rotateState$ = this.state$.pipe(map((x) => x.rotateState), distinctUntilChanged(), shareReplay(1));
|
|
349
|
-
isInitialized$ = this.currentMapInstance$.pipe(switchMap((x) => {
|
|
350
|
-
if (!x) {
|
|
351
|
-
return of(false);
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
return combineLatest([this.moveState$.pipe(map((x) => x === 'idle')), this.lifecycleState$.pipe(map((x) => x === 'idle'))]).pipe(filter(([m, l]) => m && l), first(), map(() => true));
|
|
355
|
-
}
|
|
356
|
-
}), shareReplay(1));
|
|
357
|
-
whenInitialized$ = this.isInitialized$.pipe(filter((x) => true), shareReplay(1));
|
|
358
|
-
isRendering$ = this.whenInitialized$.pipe(switchMap(() => this.lifecycleState$.pipe(map((x) => x === 'render'), distinctUntilChanged(), shareReplay(1))));
|
|
359
|
-
isMoving$ = this.whenInitialized$.pipe(switchMap(() => this.moveState$.pipe(map((x) => x === 'moving'), distinctUntilChanged(), shareReplay(1))));
|
|
360
|
-
isZooming$ = this.whenInitialized$.pipe(switchMap(() => this.zoomState$.pipe(map((x) => x === 'zooming'), distinctUntilChanged(), shareReplay(1))));
|
|
361
|
-
isRotating$ = this.whenInitialized$.pipe(switchMap(() => this.rotateState$.pipe(map((x) => x === 'rotating'), distinctUntilChanged(), shareReplay(1))));
|
|
362
|
-
_movingTimer = this.movingTimer();
|
|
363
|
-
_renderingTimer = this.lifecycleRenderTimer();
|
|
364
|
-
centerNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => this.latLngPoint(x.getCenter())))), shareReplay(1))), shareReplay(1));
|
|
365
|
-
center$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
366
|
-
return this.isMoving$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.centerNow$.pipe(first())), distinctUntilChanged(isSameLatLngPoint), shareReplay(1));
|
|
367
|
-
}), shareReplay(1));
|
|
368
|
-
minimumVirtualViewportSize$ = this.state$.pipe(map((x) => x.minimumVirtualViewportSize), distinctUntilChanged(isSameVector), shareReplay(1));
|
|
369
|
-
currentMapCanvasSize$ = this.state$.pipe(map((x) => x.mapCanvasSize), distinctUntilChanged(isSameVector), shareReplay(1));
|
|
370
|
-
/**
|
|
371
|
-
* The map canvas size with consideration to the virtual viewport size.
|
|
372
|
-
*/
|
|
373
|
-
mapCanvasSize$ = this.currentMapCanvasSize$.pipe(filterMaybe());
|
|
374
|
-
minimumMapCanvasSize(minVector) {
|
|
375
|
-
const resizeFn = vectorMinimumSizeResizeFunction(minVector);
|
|
376
|
-
return this.mapCanvasSize$.pipe(map((x) => resizeFn(x)), distinctUntilChanged(isSameVector), shareReplay(1));
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* The map canvas size with consideration to the virtual viewport size.
|
|
380
|
-
*/
|
|
381
|
-
virtualMapCanvasSize$ = this.minimumVirtualViewportSize$.pipe(switchMap((minimumVirtualViewportSize) => {
|
|
382
|
-
if (minimumVirtualViewportSize) {
|
|
383
|
-
return this.minimumMapCanvasSize(minimumVirtualViewportSize);
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
return this.mapCanvasSize$;
|
|
387
|
-
}
|
|
388
|
-
}), distinctUntilChanged(isSameVector), shareReplay(1));
|
|
389
|
-
rawViewportBoundFunction$ = this.mapCanvasSize$.pipe(map((mapCanvasSize) => mapboxViewportBoundFunction({ mapCanvasSize })), shareReplay(1));
|
|
390
|
-
/**
|
|
391
|
-
* Creates a MapboxViewportBoundFunction observable that returns the minimum viewport size.
|
|
392
|
-
*
|
|
393
|
-
* @param minVector
|
|
394
|
-
* @returns
|
|
395
|
-
*/
|
|
396
|
-
viewportBoundFunctionWithMinimumSize(minVector) {
|
|
397
|
-
const resizeFn = vectorMinimumSizeResizeFunction(minVector);
|
|
398
|
-
return this.mapCanvasSize$.pipe(map((x) => resizeFn(x)), distinctUntilChanged(isSameVector), map((mapCanvasSize) => mapboxViewportBoundFunction({ mapCanvasSize })), shareReplay(1));
|
|
399
|
-
}
|
|
400
|
-
viewportBoundFunction$ = this.minimumVirtualViewportSize$.pipe(switchMap((minimumVirtualViewportSize) => {
|
|
401
|
-
if (minimumVirtualViewportSize) {
|
|
402
|
-
return this.viewportBoundFunctionWithMinimumSize(minimumVirtualViewportSize);
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
return this.rawViewportBoundFunction$;
|
|
406
|
-
}
|
|
407
|
-
}), shareReplay(1));
|
|
408
|
-
virtualBound$ = this.viewportBoundFunction$.pipe(switchMap((fn) => {
|
|
409
|
-
return this.boundRefreshSettings$.pipe(switchMap((settings) => {
|
|
410
|
-
const { throttle: throttleMs, refreshType } = settings;
|
|
411
|
-
let obs;
|
|
412
|
-
switch (refreshType) {
|
|
413
|
-
case 'always':
|
|
414
|
-
obs = combineLatest([this.centerNow$, this.zoomNow$]);
|
|
415
|
-
break;
|
|
416
|
-
case 'when_not_rendering':
|
|
417
|
-
case 'only_after_render_finishes':
|
|
418
|
-
obs = this.bound$.pipe(switchMap(() => combineLatest([this.centerNow$, this.zoomNow$]))); // refresh whenever the bound refreshes
|
|
419
|
-
break;
|
|
420
|
-
}
|
|
421
|
-
return obs.pipe(throttleTime(throttleMs, undefined, { leading: true, trailing: true }), map(([center, zoom]) => fn({
|
|
422
|
-
center,
|
|
423
|
-
zoom
|
|
424
|
-
})));
|
|
425
|
-
}));
|
|
426
|
-
}), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
|
|
427
|
-
margin$ = this.state$.pipe(map((x) => x.margin), distinctUntilChanged((a, b) => a != null && b != null && a.fullWidth === b.fullWidth && a.leftMargin === b.leftMargin && a.rightMargin === b.rightMargin), shareReplay(1));
|
|
428
|
-
reverseMargin$ = this.margin$.pipe(map((x) => {
|
|
429
|
-
if (x) {
|
|
430
|
-
return { leftMargin: -x.leftMargin, rightMargin: -x.rightMargin, fullWidth: x.fullWidth };
|
|
431
|
-
}
|
|
432
|
-
else {
|
|
433
|
-
return x;
|
|
434
|
-
}
|
|
435
|
-
}));
|
|
436
|
-
centerGivenMargin$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
437
|
-
return this.reverseMargin$.pipe(switchMap((x) => {
|
|
438
|
-
if (x) {
|
|
439
|
-
return this.center$.pipe(switchMap((_) => this.calculateNextCenterOffsetWithScreenMarginChange(x)));
|
|
440
|
-
}
|
|
441
|
-
else {
|
|
442
|
-
return this.isMoving$.pipe(filter((x) => !x), switchMap(() => this.center$));
|
|
443
|
-
}
|
|
444
|
-
}));
|
|
445
|
-
}), shareReplay(1));
|
|
446
|
-
rawBoundNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => {
|
|
447
|
-
const bound = x.getBounds();
|
|
448
|
-
let result = null;
|
|
449
|
-
if (bound != null) {
|
|
450
|
-
const boundSw = bound.getSouthWest();
|
|
451
|
-
const boundNe = bound.getNorthEast();
|
|
452
|
-
const sw = isDefaultLatLngPoint(boundSw) ? swMostLatLngPoint() : { lat: boundSw.lat, lng: boundSw.lng };
|
|
453
|
-
const ne = isDefaultLatLngPoint(boundNe) ? neMostLatLngPoint() : { lat: boundNe.lat, lng: boundNe.lng };
|
|
454
|
-
result = this.latLngBound(sw, ne);
|
|
455
|
-
}
|
|
456
|
-
return result;
|
|
457
|
-
}), filterMaybe())))), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
|
|
458
|
-
rawBound$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
459
|
-
return this.boundRefreshSettings$.pipe(switchMap((settings) => {
|
|
460
|
-
const { throttle: throttleMs, refreshType } = settings;
|
|
461
|
-
let obs;
|
|
462
|
-
switch (refreshType) {
|
|
463
|
-
case 'always':
|
|
464
|
-
obs = this.rawBoundNow$;
|
|
465
|
-
break;
|
|
466
|
-
case 'when_not_rendering':
|
|
467
|
-
obs = this.isRendering$.pipe(switchMap((x) => (x ? EMPTY : this.rawBoundNow$)));
|
|
468
|
-
break;
|
|
469
|
-
case 'only_after_render_finishes':
|
|
470
|
-
obs = this.isRendering$.pipe(onTrueToFalse(), switchMap((x) => this.rawBoundNow$.pipe(first())));
|
|
471
|
-
break;
|
|
472
|
-
}
|
|
473
|
-
return obs.pipe(throttleTime(throttleMs, undefined, { leading: true, trailing: true }));
|
|
474
|
-
}));
|
|
475
|
-
}), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
|
|
476
|
-
useVirtualBound$ = this.state$.pipe(map((x) => x.useVirtualBound), distinctUntilChanged(), shareReplay(1));
|
|
477
|
-
bound$ = this.useVirtualBound$.pipe(switchMap((useVirtualBound) => {
|
|
478
|
-
if (useVirtualBound) {
|
|
479
|
-
return this.virtualBound$;
|
|
480
|
-
}
|
|
481
|
-
else {
|
|
482
|
-
return this.rawBound$;
|
|
483
|
-
}
|
|
484
|
-
}), shareReplay(1));
|
|
485
|
-
boundSizing$ = this.bound$.pipe(map((x) => diffLatLngBoundPoints(x)), shareReplay(1));
|
|
486
|
-
boundWrapsAroundWorld$ = this.bound$.pipe(map((x) => latLngBoundWrapsMap(x)), distinctUntilChanged(), shareReplay(1));
|
|
487
|
-
isWithinBoundFunction$ = this.bound$.pipe(map((x) => isWithinLatLngBoundFunction(x)), shareReplay(1));
|
|
488
|
-
overlapsBoundFunction$ = this.virtualBound$.pipe(map((x) => overlapsLatLngBoundFunction(x)), shareReplay(1));
|
|
489
|
-
zoomNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => x.getZoom()))), shareReplay(1))));
|
|
490
|
-
zoom$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
491
|
-
return this.isZooming$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.zoomNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
|
|
492
|
-
}));
|
|
493
|
-
pitchNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => x.getPitch()))), shareReplay(1))));
|
|
494
|
-
pitch$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
495
|
-
return this.isRotating$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.pitchNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
|
|
496
|
-
}));
|
|
497
|
-
bearingNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._movingTimer.pipe(map(() => x.getBearing()))), shareReplay(1))));
|
|
498
|
-
bearing$ = this.whenInitialized$.pipe(switchMap(() => {
|
|
499
|
-
return this.isRotating$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.bearingNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
|
|
500
|
-
}));
|
|
501
|
-
drawerContent$ = this.state$.pipe(map((x) => x.drawerContent), distinctUntilChanged(), shareReplay(1));
|
|
502
|
-
hasDrawerContent$ = this.drawerContent$.pipe(map((x) => x != null), distinctUntilChanged(), shareReplay(1));
|
|
503
|
-
clickEvent$ = this.state$.pipe(map((x) => x.clickEvent), distinctUntilChanged(), shareReplay(1));
|
|
504
|
-
doubleClickEvent$ = this.state$.pipe(map((x) => x.doubleClickEvent), distinctUntilChanged(), shareReplay(1));
|
|
505
|
-
rightClickEvent$ = this.state$.pipe(map((x) => x.rightClickEvent), distinctUntilChanged(), shareReplay(1));
|
|
506
|
-
// MARK: State Changes
|
|
507
|
-
setMargin = this.updater((state, margin) => ({ ...state, margin: margin && (margin.rightMargin !== 0 || margin.leftMargin !== 0) ? margin : undefined }));
|
|
508
|
-
setMinimumVirtualViewportSize = this.updater((state, minimumVirtualViewportSize) => ({ ...state, minimumVirtualViewportSize }));
|
|
509
|
-
setUseVirtualBound = this.updater((state, useVirtualBound) => ({ ...state, useVirtualBound }));
|
|
510
|
-
setBoundRefreshSettings = this.updater((state, boundRefreshSettings) => ({ ...state, boundRefreshSettings: { ...state.boundRefreshSettings, ...boundRefreshSettings } }));
|
|
511
|
-
_setMapService = this.updater((state, mapService) => ({ mapService, moveState: 'init', lifecycleState: 'init', zoomState: 'init', rotateState: 'init', retainContent: state.retainContent, drawerContent: state.retainContent ? state.drawerContent : undefined, useVirtualBound: state.useVirtualBound, boundRefreshSettings: state.boundRefreshSettings }));
|
|
512
|
-
_setLifecycleState = this.updater((state, lifecycleState) => ({ ...state, lifecycleState }));
|
|
513
|
-
_setMoveState = this.updater((state, moveState) => ({ ...state, moveState }));
|
|
514
|
-
_setZoomState = this.updater((state, zoomState) => ({ ...state, zoomState }));
|
|
515
|
-
_setRotateState = this.updater((state, rotateState) => ({ ...state, rotateState }));
|
|
516
|
-
_setMapCanvasSize = this.updater((state, mapCanvasSize) => ({ ...state, mapCanvasSize }));
|
|
517
|
-
_setClickEvent = this.updater((state, clickEvent) => ({ ...state, clickEvent }));
|
|
518
|
-
_setDoubleClickEvent = this.updater((state, doubleClickEvent) => ({ ...state, doubleClickEvent }));
|
|
519
|
-
_setRightClickEvent = this.updater((state, rightClickEvent) => ({ ...state, rightClickEvent }));
|
|
520
|
-
_setError = this.updater((state, error) => ({ ...state, error }));
|
|
521
|
-
clearDrawerContent = this.updater((state) => setDrawerContent(state, undefined));
|
|
522
|
-
setDrawerContent = this.updater(setDrawerContent);
|
|
523
|
-
// MARK: Compat
|
|
524
|
-
/**
|
|
525
|
-
* @deprecated use drawerContent$ instead.
|
|
526
|
-
*/
|
|
527
|
-
content$ = this.drawerContent$;
|
|
528
|
-
/**
|
|
529
|
-
* @deprecated use hasDrawerContent$ instead.
|
|
530
|
-
*/
|
|
531
|
-
hasContent$ = this.hasDrawerContent$;
|
|
532
|
-
/**
|
|
533
|
-
* @deprecated use clearDrawerContent instead.
|
|
534
|
-
*/
|
|
535
|
-
clearContent = this.updater((state) => setDrawerContent(state, undefined));
|
|
536
|
-
/**
|
|
537
|
-
* @deprecated use setDrawerContent instead.
|
|
538
|
-
*/
|
|
539
|
-
setContent = this.updater(setDrawerContent);
|
|
540
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
541
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStore });
|
|
542
|
-
}
|
|
543
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStore, decorators: [{
|
|
544
|
-
type: Injectable
|
|
545
|
-
}], ctorParameters: () => [] });
|
|
546
|
-
function setDrawerContent(state, drawerContent) {
|
|
547
|
-
return { ...state, drawerContent };
|
|
548
|
-
}
|
|
549
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDJCQUEyQixFQUUzQixtQkFBbUIsRUFHbkIsbUJBQW1CLEVBR25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFFbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBb0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdOLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFtRSwyQkFBMkIsRUFBRSxNQUFN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c0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xlYW51cCwgZmlsdGVyTWF5YmUsIG9uVHJ1ZVRvRmFsc2UgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBpc1NhbWVMYXRMbmdCb3VuZCxcbiAgaXNTYW1lTGF0TG5nUG9pbnQsXG4gIElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBMYXRMbmdCb3VuZCxcbiAgbGF0TG5nQm91bmRGdW5jdGlvbixcbiAgTGF0TG5nUG9pbnRJbnB1dCxcbiAgTGF0TG5nUG9pbnQsXG4gIGxhdExuZ1BvaW50RnVuY3Rpb24sXG4gIE1heWJlLFxuICBPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgZGlmZkxhdExuZ0JvdW5kUG9pbnRzLFxuICBsYXRMbmdCb3VuZENlbnRlclBvaW50LFxuICBhZGRMYXRMbmdQb2ludHMsXG4gIGlzRGVmYXVsdExhdExuZ1BvaW50LFxuICBzd01vc3RMYXRMbmdQb2ludCxcbiAgbmVNb3N0TGF0TG5nUG9pbnQsXG4gIGxhdExuZ0JvdW5kV3JhcHNNYXAsXG4gIFZlY3RvcixcbiAgZmlsdGVyVW5kZWZpbmVkVmFsdWVzLFxuICBsYXRMbmdCb3VuZEZyb21JbnB1dCxcbiAgdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbixcbiAgaXNTYW1lVmVjdG9yLFxuICBab29tTGV2ZWxcbn0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBNYXBTZXJ2aWNlIH0gZnJvbSAnbmd4LW1hcGJveC1nbCc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAsIE5FVkVSLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCBzdGFydFdpdGgsIGludGVydmFsLCBmaXJzdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIE9wZXJhdG9yRnVuY3Rpb24sIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgTWFwYm94R2wgZnJvbSAnbWFwYm94LWdsJztcbmltcG9ydCB7IERieE1hcGJveENsaWNrRXZlbnQsIEtub3duTWFwYm94U3R5bGUsIE1hcGJveEJlYXJpbmcsIE1hcGJveEVhc2VUbywgTWFwYm94RXZlbnREYXRhLCBNYXBib3hGaXRCb3VuZHMsIE1hcGJveEZpdFBvc2l0aW9ucywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwsIE1hcGJveFpvb21MZXZlbFJhbmdlIH0gZnJvbSAnLi9tYXBib3gnO1xuaW1wb3J0IHsgRGJ4TWFwYm94U2VydmljZSB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uLCBNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24gfSBmcm9tICcuL21hcGJveC51dGlsJztcbmltcG9ydCB7IEZpbHRlck1hcGJveEJvdW5kQ29uZmlnLCBGaWx0ZXJNYXBib3hCb3VuZFJlYWRJdGVtVmFsdWVGdW5jdGlvbiwgZmlsdGVyQnlNYXBib3hWaWV3cG9ydEJvdW5kIH0gZnJvbSAnLi9tYXBib3gucnhqcyc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoVHlwZSA9ICdhbHdheXMnIHwgJ3doZW5fbm90X3JlbmRlcmluZycgfCAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3Mge1xuICAvKipcbiAgICogTWF4IGJvdW5kIHJlZnJlc2ggaW50ZXJ2YWwuXG4gICAqL1xuICB0aHJvdHRsZTogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gd2FpdCB0byB1cGRhdGUgdGhlIGJvdW5kIHVudGlsIGFmdGVyIGl0IGhhcyBmaW5pc2hlZCByZW5kZXJpbmcuXG4gICAqL1xuICByZWZyZXNoVHlwZTogRGJ4TWFwYm94U3RvcmVCb3VuZFJlZnJlc2hUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveFN0b3JlU3RhdGUge1xuICAvKipcbiAgICogQ3VycmVudCBNYXBTZXJ2aWNlIGJlaW5nIHV0aWxpemVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwU2VydmljZT86IE1heWJlPE1hcFNlcnZpY2U+O1xuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZTogTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGU7XG4gIHJlYWRvbmx5IG1vdmVTdGF0ZTogTWFwYm94TWFwTW92ZVN0YXRlO1xuICByZWFkb25seSB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZTtcbiAgcmVhZG9ubHkgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlO1xuICAvKipcbiAgICogVmlzdWFsIGNvbnRhaW5lciBzaXplIG9mIHRoZSBtYXAuXG4gICAqL1xuICByZWFkb25seSBtYXBDYW52YXNTaXplPzogTWF5YmU8VmVjdG9yPjtcbiAgLyoqXG4gICAqIExhdGVzdCBjbGljayBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgY2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGRvdWJsZS1jbGljayBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgZG91YmxlQ2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGNvbnRleHRtZW51IGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmlnaHRDbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byByZXRhaW4gY29udGVudCBiZXR3ZWVuIHJlc2V0cy5cbiAgICpcbiAgICogVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluQ29udGVudDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBkcmF3ZXIgY29udGVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZHJhd2VyQ29udGVudD86IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj47XG4gIC8qKlxuICAgKiBMYXRlc3QgZXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogTWF5YmU8RXJyb3I+O1xuICAvKipcbiAgICogTWFwIG1hcmdpbi9vZmZzZXRcbiAgICovXG4gIHJlYWRvbmx5IG1hcmdpbj86IE1heWJlPERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nPjtcbiAgLyoqXG4gICAqIE1pbmltdW0gdmVjdG9yIHNpemUgdG8gdXNlIGZvciB0aGUgdmlld3BvcnRCb3VuZEZ1bmN0aW9uJC4gSWYgbm90IGRlZmluZWQgdGhlcmUgaXMgbm8gbWluaW11bS5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplPzogTWF5YmU8UGFydGlhbDxWZWN0b3I+PjtcbiAgLyoqXG4gICAqIEJvdW5kIHJlZnJlc2ggc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGJvdW5kUmVmcmVzaFNldHRpbmdzOiBEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFNldHRpbmdzO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIHRoZSB2aXJ0dWFsIGJvdW5kICh2cyByYXcgYm91bmQpIGZvciBhbGwgYm91bmQtcmVsYXRlZCBvYnNlcnZhYmxlcy5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHVzZVZpcnR1YWxCb3VuZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWFwU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxEYnhNYXBib3hTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGJ4TWFwYm94U2VydmljZSA9IGluamVjdChEYnhNYXBib3hTZXJ2aWNlKTtcblxuICBwcml2YXRlIHNhZmVMYXRMbmdQb2ludCA9IGxhdExuZ1BvaW50RnVuY3Rpb24oeyB3cmFwOiB0cnVlIH0pO1xuICBwcml2YXRlIGxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IGZhbHNlLCB2YWxpZGF0ZTogZmFsc2UgfSk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKHsgcG9pbnRGdW5jdGlvbjogdGhpcy5sYXRMbmdQb2ludCB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLFxuICAgICAgbW92ZVN0YXRlOiAnaW5pdCcsXG4gICAgICB6b29tU3RhdGU6ICdpbml0JyxcbiAgICAgIHJvdGF0ZVN0YXRlOiAnaW5pdCcsXG4gICAgICByZXRhaW5Db250ZW50OiB0cnVlLFxuICAgICAgdXNlVmlydHVhbEJvdW5kOiB0cnVlLFxuICAgICAgYm91bmRSZWZyZXNoU2V0dGluZ3M6IHtcbiAgICAgICAgdGhyb3R0bGU6IDMwMCxcbiAgICAgICAgcmVmcmVzaFR5cGU6ICdhbHdheXMnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBNQVJLOiBFZmZlY3RzXG4gIHJlYWRvbmx5IHNldE1hcFNlcnZpY2UgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwU2VydmljZT4+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICAgIHRoaXMuX3NldE1hcFNlcnZpY2Uoc2VydmljZSk7XG5cbiAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBzZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRNb3ZlU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Wm9vbVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdpZGxlJyk7XG5cbiAgICAgICAgICAgICAgY29uc3QgbWFwID0gc2VydmljZS5tYXBJbnN0YW5jZTtcblxuICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lclBhaXJzOiBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXJbXSA9IFtdO1xuXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBNYXBib3hHbC5NYXBFdmVudHM+KHR5cGU6IFQsIGxpc3RlbmVyOiBQYXJhbWV0ZXJzPHR5cGVvZiBtYXAub248VD4+WzJdKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uPFQ+KHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKHgpID0+IHRoaXMuX3NldFJpZ2h0Q2xpY2tFdmVudCh4KSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaEZvclJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoOiB4LCBjbGllbnRIZWlnaHQ6IHkgfSA9IG1hcC5nZXRDYW52YXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXBDYW52YXNTaXplKHsgeCwgeSB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVzaXplJywgcmVmcmVzaEZvclJlc2l6ZSk7XG4gICAgICAgICAgICAgIHJlZnJlc2hGb3JSZXNpemUoKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLnNhZmVMYXRMbmdQb2ludChjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldENlbnRlcihjZW50ZXJQb2ludCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbVJhbmdlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tUmFuZ2U6IFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0TWluWm9vbSh6b29tUmFuZ2UubWluIHx8IG51bGwpO1xuICAgICAgICAgICAgbWFwLnNldE1heFpvb20oem9vbVJhbmdlLm1heCB8fCBudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRLZXlib2FyZERpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdSb3RhdGVEaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1BhbkRpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdFBvc2l0aW9ucyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRQb3NpdGlvbnM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRGcm9tSW5wdXQgPSBsYXRMbmdCb3VuZEZyb21JbnB1dCh4LnBvc2l0aW9ucyk7XG5cbiAgICAgICAgaWYgKGJvdW5kRnJvbUlucHV0KSB7XG4gICAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKGJvdW5kRnJvbUlucHV0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZpdEJvdW5kcyhuZXcgTWFwYm94R2wuTG5nTGF0Qm91bmRzKGJvdW5kLnN3LCBib3VuZC5uZSksIHgub3B0aW9ucywgeC5ldmVudERhdGEpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5qdW1wVG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZWFzZVRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5mbHlUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgbGlmZWN5Y2xlUmVuZGVyVGltZXIocGVyaW9kID0gdGhpcy50aW1lclJlZnJlc2hQZXJpb2QpIHtcbiAgICByZXR1cm4gdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgYXROZXh0SWRsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHggPT09ICdpZGxlJyksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJXaXRoT2Zmc2V0KGlucHV0T2Zmc2V0OiBMYXRMbmdQb2ludElucHV0KTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRPZmZzZXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXROZXh0SWRsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5jZW50ZXIkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGNlbnRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0ge1xuICAgICAgICAgICAgICBsYXQ6IG9mZnNldC5sYXQgKyBjZW50ZXIubGF0LFxuICAgICAgICAgICAgICBsbmc6IG9mZnNldC5sbmcgKyBjZW50ZXIubG5nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJPZmZzZXRXaXRoU2NyZWVuTWFyZ2luQ2hhbmdlKHNpemluZzogRGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmcpOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsY3VsYXRpbmcgdGhpcyB1c2luZyB0aGUgdmlld3BvcnQoKSBmdW5jdGlvbiBmcm9tIEBwbGFjZW1hcmtpby9nZW8tdmlld3BvcnRcbiAgICByZXR1cm4gdGhpcy5hdE5leHRJZGxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLmJvdW5kJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChib3VuZHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmTGF0TG5nQm91bmRQb2ludHMoYm91bmRzLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQoYm91bmRzKTtcblxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBzaXppbmcubGVmdE1hcmdpbiArIHNpemluZy5yaWdodE1hcmdpbjsgLy8gMzAwICsgMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBzaXppbmcuZnVsbFdpZHRoIC0gb2Zmc2V0V2lkdGg7IC8vIDEwMDAgLSAzMDAgLSAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aFJhdGlvID0gbmV3V2lkdGggLyBzaXppbmcuZnVsbFdpZHRoOyAvLyA3MDAgLyAxMDAwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCA9IGRpZmYubG5nICogbmV3V2lkdGhSYXRpbzsgLy8gNzAlIG9mZnNldFxuXG4gICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVPZmZzZXQ6IExhdExuZ1BvaW50ID0ge1xuICAgICAgICAgICAgICBsYXQ6IDAsXG4gICAgICAgICAgICAgIGxuZzogbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggLyAyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBhZGRMYXRMbmdQb2ludHMoYm91bmRzLnN3LCBlZmZlY3RpdmVPZmZzZXQpO1xuICAgICAgICAgICAgbmV3Q2VudGVyLmxhdCA9IGNlbnRlci5sYXQ7IC8vIHJldGFpbiBjZW50ZXIgcG9zaXRpb25cblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBzaXppbmcsIGJvdW5kcywgZWZmZWN0aXZlT2Zmc2V0LCBuZXdXaWR0aCwgb2Zmc2V0V2lkdGgsIGRpZmYsIGNlbnRlciwgbmV3Q2VudGVyIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VudGVyO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZmlsdGVyQnlWaWV3cG9ydEJvdW5kPFQ+KGlucHV0OiBGaWx0ZXJNYXBib3hCb3VuZFJlYWRJdGVtVmFsdWVGdW5jdGlvbjxUPiB8IE9taXQ8RmlsdGVyTWFwYm94Qm91bmRDb25maWc8VD4sICdib3VuZEZ1bmN0aW9uT2JzJyB8ICdib3VuZERlY2lzaW9uT2JzJz4pOiBPcGVyYXRvckZ1bmN0aW9uPFRbXSwgVFtdPiB7XG4gICAgY29uc3QgY29uZmlnID0gdHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nID8geyByZWFkVmFsdWU6IGlucHV0IH0gOiBpbnB1dDtcblxuICAgIHJldHVybiBmaWx0ZXJCeU1hcGJveFZpZXdwb3J0Qm91bmQoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgYm91bmRGdW5jdGlvbk9iczogdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb24kLFxuICAgICAgYm91bmREZWNpc2lvbk9iczogdGhpcy5vdmVybGFwc0JvdW5kRnVuY3Rpb24kXG4gICAgfSk7XG4gIH1cblxuICByZWFkb25seSBjdXJyZW50TWFwU2VydmljZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBTZXJ2aWNlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwU2VydmljZSQgPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94R2wuTWFwPj4gPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY3VycmVudE1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1hcFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXBTZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjdXJyZW50TWFwU2VydmljZS5tYXBJbnN0YW5jZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBJbnN0YW5jZSQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBib3VuZFJlZnJlc2hTZXR0aW5ncyQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5ib3VuZFJlZnJlc2hTZXR0aW5ncyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtb3ZlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubW92ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubGlmZWN5Y2xlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguem9vbVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcm90YXRlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucm90YXRlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKCF4KSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5tb3ZlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKSwgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpXSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKFttLCBsXSkgPT4gbSAmJiBsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgd2hlbkluaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHRydWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSZW5kZXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyZW5kZXInKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNNb3ZpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnbW92aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUm90YXRpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnJvdGF0ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyb3RhdGluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb3ZpbmdUaW1lciA9IHRoaXMubW92aW5nVGltZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyaW5nVGltZXIgPSB0aGlzLmxpZmVjeWNsZVJlbmRlclRpbWVyKCk7XG5cbiAgcmVhZG9ubHkgY2VudGVyTm93JDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4gdGhpcy5sYXRMbmdQb2ludCh4LmdldENlbnRlcigpKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyJDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3ZpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlck5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPExhdExuZ1BvaW50Pihpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZVZlY3RvciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50TWFwQ2FudmFzU2l6ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBDYW52YXNTaXplKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxWZWN0b3I+Pihpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgY2FudmFzIHNpemUgd2l0aCBjb25zaWRlcmF0aW9uIHRvIHRoZSB2aXJ0dWFsIHZpZXdwb3J0IHNpemUuXG4gICAqL1xuICByZWFkb25seSBtYXBDYW52YXNTaXplJCA9IHRoaXMuY3VycmVudE1hcENhbnZhc1NpemUkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgbWluaW11bU1hcENhbnZhc1NpemUobWluVmVjdG9yOiBQYXJ0aWFsPFZlY3Rvcj4pOiBPYnNlcnZhYmxlPFZlY3Rvcj4ge1xuICAgIGNvbnN0IHJlc2l6ZUZuID0gdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbihtaW5WZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHJlc2l6ZUZuKHgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWFwIGNhbnZhcyBzaXplIHdpdGggY29uc2lkZXJhdGlvbiB0byB0aGUgdmlydHVhbCB2aWV3cG9ydCBzaXplLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlydHVhbE1hcENhbnZhc1NpemUkID0gdGhpcy5taW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSA9PiB7XG4gICAgICBpZiAobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluaW11bU1hcENhbnZhc1NpemUobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ2FudmFzU2l6ZSQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8VmVjdG9yPihpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmF3Vmlld3BvcnRCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+ID0gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgIG1hcCgobWFwQ2FudmFzU2l6ZSkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZSB9KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiBvYnNlcnZhYmxlIHRoYXQgcmV0dXJucyB0aGUgbWluaW11bSB2aWV3cG9ydCBzaXplLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmVjdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB2aWV3cG9ydEJvdW5kRnVuY3Rpb25XaXRoTWluaW11bVNpemUobWluVmVjdG9yOiBQYXJ0aWFsPFZlY3Rvcj4pOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4ge1xuICAgIGNvbnN0IHJlc2l6ZUZuID0gdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbihtaW5WZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHJlc2l6ZUZuKHgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICAgIG1hcCgobWFwQ2FudmFzU2l6ZSkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZSB9KSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICByZWFkb25seSB2aWV3cG9ydEJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4gPSB0aGlzLm1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpID0+IHtcbiAgICAgIGlmIChtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb25XaXRoTWluaW11bVNpemUobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3Vmlld3BvcnRCb3VuZEZ1bmN0aW9uJDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZpcnR1YWxCb3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKChmbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRSZWZyZXNoU2V0dGluZ3MkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHRocm90dGxlOiB0aHJvdHRsZU1zLCByZWZyZXNoVHlwZSB9ID0gc2V0dGluZ3M7XG5cbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFtMYXRMbmdQb2ludCwgWm9vbUxldmVsXT47XG5cbiAgICAgICAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICAgICAgICBvYnMgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNlbnRlck5vdyQsIHRoaXMuem9vbU5vdyRdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3aGVuX25vdF9yZW5kZXJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmJvdW5kJC5waXBlKHN3aXRjaE1hcCgoKSA9PiBjb21iaW5lTGF0ZXN0KFt0aGlzLmNlbnRlck5vdyQsIHRoaXMuem9vbU5vdyRdKSkpOyAvLyByZWZyZXNoIHdoZW5ldmVyIHRoZSBib3VuZCByZWZyZXNoZXNcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9icy5waXBlKFxuICAgICAgICAgICAgdGhyb3R0bGVUaW1lKHRocm90dGxlTXMsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgICAgIG1hcCgoW2NlbnRlciwgem9vbV0pID0+XG4gICAgICAgICAgICAgIGZuKHtcbiAgICAgICAgICAgICAgICBjZW50ZXIsXG4gICAgICAgICAgICAgICAgem9vbVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcmdpbiQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXJnaW4pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIGEuZnVsbFdpZHRoID09PSBiLmZ1bGxXaWR0aCAmJiBhLmxlZnRNYXJnaW4gPT09IGIubGVmdE1hcmdpbiAmJiBhLnJpZ2h0TWFyZ2luID09PSBiLnJpZ2h0TWFyZ2luKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJldmVyc2VNYXJnaW4kID0gdGhpcy5tYXJnaW4kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICByZXR1cm4geyBsZWZ0TWFyZ2luOiAteC5sZWZ0TWFyZ2luLCByaWdodE1hcmdpbjogLXgucmlnaHRNYXJnaW4sIGZ1bGxXaWR0aDogeC5mdWxsV2lkdGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyR2l2ZW5NYXJnaW4kOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlTWFyZ2luJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyJC5waXBlKHN3aXRjaE1hcCgoXykgPT4gdGhpcy5jYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZSh4KSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAheCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlciQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByYXdCb3VuZE5vdyQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvdW5kID0geC5nZXRCb3VuZHMoKTtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdDogTGF0TG5nQm91bmQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoYm91bmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kU3cgPSBib3VuZC5nZXRTb3V0aFdlc3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZE5lID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdyA9IGlzRGVmYXVsdExhdExuZ1BvaW50KGJvdW5kU3cpID8gc3dNb3N0TGF0TG5nUG9pbnQoKSA6IHsgbGF0OiBib3VuZFN3LmxhdCwgbG5nOiBib3VuZFN3LmxuZyB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lID0gaXNEZWZhdWx0TGF0TG5nUG9pbnQoYm91bmROZSkgPyBuZU1vc3RMYXRMbmdQb2ludCgpIDogeyBsYXQ6IGJvdW5kTmUubGF0LCBsbmc6IGJvdW5kTmUubG5nIH07XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxhdExuZ0JvdW5kKHN3LCBuZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXJNYXliZSgpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByYXdCb3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmJvdW5kUmVmcmVzaFNldHRpbmdzJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB0aHJvdHRsZTogdGhyb3R0bGVNcywgcmVmcmVzaFR5cGUgfSA9IHNldHRpbmdzO1xuXG4gICAgICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD47XG5cbiAgICAgICAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLnJhd0JvdW5kTm93JDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3aGVuX25vdF9yZW5kZXJpbmcnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKHN3aXRjaE1hcCgoeCkgPT4gKHggPyBFTVBUWSA6IHRoaXMucmF3Qm91bmROb3ckKSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29ubHlfYWZ0ZXJfcmVuZGVyX2ZpbmlzaGVzJzpcbiAgICAgICAgICAgICAgb2JzID0gdGhpcy5pc1JlbmRlcmluZyQucGlwZShcbiAgICAgICAgICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLnJhd0JvdW5kTm93JC5waXBlKGZpcnN0KCkpKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb2JzLnBpcGUodGhyb3R0bGVUaW1lKHRocm90dGxlTXMsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHVzZVZpcnR1YWxCb3VuZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC51c2VWaXJ0dWFsQm91bmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy51c2VWaXJ0dWFsQm91bmQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh1c2VWaXJ0dWFsQm91bmQpID0+IHtcbiAgICAgIGlmICh1c2VWaXJ0dWFsQm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydHVhbEJvdW5kJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd0JvdW5kJDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kU2l6aW5nJDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gZGlmZkxhdExuZ0JvdW5kUG9pbnRzKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kV3JhcHNBcm91bmRXb3JsZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gbGF0TG5nQm91bmRXcmFwc01hcCh4KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzV2l0aGluQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8SXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgb3ZlcmxhcHNCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy52aXJ0dWFsQm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbU5vdyQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFpvb20oKSBhcyBNYXBib3hab29tTGV2ZWwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb20kOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNab29taW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy56b29tTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBwaXRjaE5vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRQaXRjaCgpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBwaXRjaCQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5iZWFyaW5nTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBkcmF3ZXJDb250ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmRyYXdlckNvbnRlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNEcmF3ZXJDb250ZW50JCA9IHRoaXMuZHJhd2VyQ29udGVudCQucGlwZShcbiAgICBtYXAoKHgpID0+IHggIT0gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZG91YmxlQ2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJpZ2h0Q2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yaWdodENsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIHJlYWRvbmx5IHNldE1hcmdpbiA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcmdpbjogTWF5YmU8RGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmc+KSA9PiAoeyAuLi5zdGF0ZSwgbWFyZ2luOiBtYXJnaW4gJiYgKG1hcmdpbi5yaWdodE1hcmdpbiAhPT0gMCB8fCBtYXJnaW4ubGVmdE1hcmdpbiAhPT0gMCkgPyBtYXJnaW4gOiB1bmRlZmluZWQgfSkpO1xuICByZWFkb25seSBzZXRNaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplOiBNYXliZTxQYXJ0aWFsPFZlY3Rvcj4+KSA9PiAoeyAuLi5zdGF0ZSwgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUgfSkpO1xuICByZWFkb25seSBzZXRVc2VWaXJ0dWFsQm91bmQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB1c2VWaXJ0dWFsQm91bmQ6IGJvb2xlYW4pID0+ICh7IC4uLnN0YXRlLCB1c2VWaXJ0dWFsQm91bmQgfSkpO1xuICByZWFkb25seSBzZXRCb3VuZFJlZnJlc2hTZXR0aW5ncyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGJvdW5kUmVmcmVzaFNldHRpbmdzOiBQYXJ0aWFsPERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3M+KSA9PiAoeyAuLi5zdGF0ZSwgYm91bmRSZWZyZXNoU2V0dGluZ3M6IHsgLi4uc3RhdGUuYm91bmRSZWZyZXNoU2V0dGluZ3MsIC4uLmJvdW5kUmVmcmVzaFNldHRpbmdzIH0gfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1hcFNlcnZpY2UgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXBTZXJ2aWNlOiBNYXliZTxNYXBTZXJ2aWNlPikgPT4gKHsgbWFwU2VydmljZSwgbW92ZVN0YXRlOiAnaW5pdCcsIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsIHpvb21TdGF0ZTogJ2luaXQnLCByb3RhdGVTdGF0ZTogJ2luaXQnLCByZXRhaW5Db250ZW50OiBzdGF0ZS5yZXRhaW5Db250ZW50LCBkcmF3ZXJDb250ZW50OiBzdGF0ZS5yZXRhaW5Db250ZW50ID8gc3RhdGUuZHJhd2VyQ29udGVudCA6IHVuZGVmaW5lZCwgdXNlVmlydHVhbEJvdW5kOiBzdGF0ZS51c2VWaXJ0dWFsQm91bmQsIGJvdW5kUmVmcmVzaFNldHRpbmdzOiBzdGF0ZS5ib3VuZFJlZnJlc2hTZXR0aW5ncyB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldExpZmVjeWNsZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgbGlmZWN5Y2xlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNb3ZlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIG1vdmVTdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFpvb21TdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgem9vbVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Um90YXRlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCByb3RhdGVTdGF0ZSB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwQ2FudmFzU2l6ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcENhbnZhc1NpemU6IFZlY3RvcikgPT4gKHsgLi4uc3RhdGUsIG1hcENhbnZhc1NpemUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIGNsaWNrRXZlbnQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXREb3VibGVDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZG91YmxlQ2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSaWdodENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByaWdodENsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCByaWdodENsaWNrRXZlbnQgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldEVycm9yID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZXJyb3I6IEVycm9yKSA9PiAoeyAuLi5zdGF0ZSwgZXJyb3IgfSkpO1xuXG4gIHJlYWRvbmx5IGNsZWFyRHJhd2VyQ29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHNldERyYXdlckNvbnRlbnQoc3RhdGUsIHVuZGVmaW5lZCkpO1xuICByZWFkb25seSBzZXREcmF3ZXJDb250ZW50ID0gdGhpcy51cGRhdGVyKHNldERyYXdlckNvbnRlbnQpO1xuXG4gIC8vIE1BUks6IENvbXBhdFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRyYXdlckNvbnRlbnQkIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50JCA9IHRoaXMuZHJhd2VyQ29udGVudCQ7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBoYXNEcmF3ZXJDb250ZW50JCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzQ29udGVudCQgPSB0aGlzLmhhc0RyYXdlckNvbnRlbnQkO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgY2xlYXJEcmF3ZXJDb250ZW50IGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBjbGVhckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiBzZXREcmF3ZXJDb250ZW50KHN0YXRlLCB1bmRlZmluZWQpKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldERyYXdlckNvbnRlbnQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHNldENvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoc2V0RHJhd2VyQ29udGVudCk7XG59XG5cbmZ1bmN0aW9uIHNldERyYXdlckNvbnRlbnQoc3RhdGU6IERieE1hcGJveFN0b3JlU3RhdGUsIGRyYXdlckNvbnRlbnQ6IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj4pIHtcbiAgcmV0dXJuIHsgLi4uc3RhdGUsIGRyYXdlckNvbnRlbnQgfTtcbn1cbiJdfQ==
|