@flywheel-io/vision 2.10.2 → 19.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/README.md +5 -5
- package/components/alert/alert.component.d.ts +1 -1
- package/components/alert/alert.module.d.ts +8 -5
- package/components/app-icon/app-icon.component.d.ts +1 -1
- package/components/app-icon/app-icon.module.d.ts +7 -4
- package/components/avatar/avatar.component.d.ts +1 -1
- package/components/avatar/avatar.module.d.ts +7 -4
- package/components/badge/badge.component.d.ts +1 -1
- package/components/badge/badge.module.d.ts +6 -3
- package/components/breadcrumbs/breadcrumbs.component.d.ts +1 -1
- package/components/breadcrumbs/breadcrumbs.module.d.ts +8 -5
- package/components/breadcrumbs/crumb.component.d.ts +1 -1
- package/components/button/button.component.d.ts +1 -1
- package/components/button/button.directives.d.ts +5 -5
- package/components/button/button.module.d.ts +9 -6
- package/components/button-group/button-group.component.d.ts +1 -1
- package/components/button-group/button-group.module.d.ts +8 -5
- package/components/button-toggle/button-toggle-item/button-toggle-item.component.d.ts +1 -1
- package/components/button-toggle/button-toggle.component.d.ts +1 -1
- package/components/button-toggle/button-toggle.module.d.ts +8 -5
- package/components/card/card-attribute/card-attribute.component.d.ts +1 -1
- package/components/card/card-author/card-author.component.d.ts +1 -1
- package/components/card/card-content/card-content.component.d.ts +1 -1
- package/components/card/card-footer/card-footer.component.d.ts +1 -1
- package/components/card/card-header/card-header.component.d.ts +1 -1
- package/components/card/card.component.d.ts +1 -1
- package/components/card/card.module.d.ts +13 -10
- package/components/checkbox/checkbox.component.d.ts +1 -1
- package/components/checkbox/checkbox.module.d.ts +7 -4
- package/components/chip/chip.component.d.ts +1 -1
- package/components/chip/chip.module.d.ts +8 -5
- package/components/contained-input/contained-input.component.d.ts +1 -1
- package/components/contained-input/contained-input.module.d.ts +10 -7
- package/components/date-input/date-input.component.d.ts +1 -1
- package/components/date-input/date-input.module.d.ts +8 -5
- package/components/dialog/dialog-actions.component.d.ts +1 -1
- package/components/dialog/dialog-confirm.component.d.ts +1 -1
- package/components/dialog/dialog-content.component.d.ts +1 -1
- package/components/dialog/dialog-header.component.d.ts +1 -1
- package/components/dialog/dialog-simple.component.d.ts +1 -1
- package/components/dialog/dialog.component.d.ts +1 -1
- package/components/dialog/dialogs.module.d.ts +16 -13
- package/components/form-heading/form-heading.component.d.ts +1 -1
- package/components/form-heading/form-heading.module.d.ts +9 -6
- package/components/icon/icon.component.d.ts +1 -1
- package/components/icon/icon.module.d.ts +6 -3
- package/components/icon-button/icon-button.component.d.ts +1 -1
- package/components/icon-button/icon-button.module.d.ts +7 -4
- package/components/layouts/context/context.component.d.ts +1 -1
- package/components/layouts/grid/grid.component.d.ts +2 -2
- package/components/layouts/layout-group.component.d.ts +1 -1
- package/components/layouts/layouts.module.d.ts +12 -9
- package/components/layouts/panel/panel.component.d.ts +1 -1
- package/components/layouts/sidebar/sidebar.component.d.ts +1 -1
- package/components/layouts/toolbar/toolbar.component.d.ts +1 -1
- package/components/menu/menu-close-triggers.directive.d.ts +1 -1
- package/components/menu/menu-container/menu-container.component.d.ts +1 -1
- package/components/menu/menu-header/menu-header.component.d.ts +1 -1
- package/components/menu/menu-item/menu-item.component.d.ts +1 -1
- package/components/menu/menu-item-group/menu-item-group.component.d.ts +1 -1
- package/components/menu/menu-separator/menu-separator.component.d.ts +1 -1
- package/components/menu/menu-sub-item/menu-sub-item.component.d.ts +1 -1
- package/components/menu/menu.component.d.ts +1 -1
- package/components/menu/menu.module.d.ts +22 -19
- package/components/navbar/navbar-header/navbar-header.component.d.ts +1 -1
- package/components/navbar/navbar-item/navbar-item.component.d.ts +1 -1
- package/components/navbar/navbar-sub-item/navbar-sub-item.component.d.ts +1 -1
- package/components/navbar/navbar.component.d.ts +1 -1
- package/components/navbar/navbar.module.d.ts +16 -13
- package/components/number-input/number-input.component.d.ts +1 -1
- package/components/number-input/number-input.module.d.ts +8 -5
- package/components/paginator/paginator-advanced/paginator-advanced.component.d.ts +1 -1
- package/components/paginator/paginator.component.d.ts +1 -1
- package/components/paginator/paginator.module.d.ts +12 -9
- package/components/phone-input/phone-input.component.d.ts +1 -1
- package/components/phone-input/phone-input.module.d.ts +11 -8
- package/components/popover/popover-panel/popover-panel.component.d.ts +1 -1
- package/components/popover/popover.component.d.ts +2 -2
- package/components/popover/popover.module.d.ts +9 -6
- package/components/progress/bar/bar.component.d.ts +1 -1
- package/components/progress/progress.module.d.ts +7 -4
- package/components/progress/spinner/spinner.component.d.ts +1 -1
- package/components/radio/radio-group.component.d.ts +1 -1
- package/components/radio/radio.component.d.ts +1 -1
- package/components/radio/radio.module.d.ts +8 -5
- package/components/section-heading/back-button/back-button.component.d.ts +1 -1
- package/components/section-heading/section-heading.component.d.ts +1 -1
- package/components/section-heading/section-heading.module.d.ts +10 -7
- package/components/section-heading/subsection-heading/subsection-heading.component.d.ts +1 -1
- package/components/select-menu/multi-select-menu/multi-select-menu.component.d.ts +1 -1
- package/components/select-menu/select-menu.component.d.ts +1 -1
- package/components/select-menu/select-menu.module.d.ts +15 -12
- package/components/shared/pipes/pipes.module.d.ts +4 -1
- package/components/shared/pipes/translate.pipe.d.ts +1 -1
- package/components/shared/pipes/trusthtml.pipe.d.ts +1 -1
- package/components/snackbar/snackbar/snackbar.component.d.ts +2 -2
- package/components/snackbar/snackbar-container/snackbar-container.component.d.ts +1 -1
- package/components/snackbar/snackbar.module.d.ts +10 -7
- package/components/stepper/step.component.d.ts +2 -2
- package/components/stepper/stepper.component.d.ts +1 -1
- package/components/stepper/stepper.module.d.ts +9 -6
- package/components/switch/switch.component.d.ts +1 -1
- package/components/switch/switch.module.d.ts +6 -3
- package/components/table/row.d.ts +7 -7
- package/components/table/table-dense.component.d.ts +1 -1
- package/components/table/table.component.d.ts +1 -1
- package/components/table/table.module.d.ts +10 -7
- package/components/tabs/tab/tab.component.d.ts +1 -1
- package/components/tabs/tab-panel/tab-panel.component.d.ts +1 -1
- package/components/tabs/tabs.component.d.ts +1 -1
- package/components/tabs/tabs.module.d.ts +9 -6
- package/components/tag/tag.component.d.ts +1 -1
- package/components/tag/tag.module.d.ts +7 -4
- package/components/text-input/text-input.component.d.ts +1 -1
- package/components/text-input/text-input.module.d.ts +9 -6
- package/components/textarea-input/textarea-input.component.d.ts +1 -1
- package/components/textarea-input/textarea-input.module.d.ts +9 -6
- package/components/tooltip/tooltip-panel/tooltip-panel.component.d.ts +1 -1
- package/components/tooltip/tooltip.component.d.ts +1 -1
- package/components/tooltip/tooltip.module.d.ts +11 -8
- package/components/wrapped-input/wrapped-input.component.d.ts +1 -1
- package/components/wrapped-input/wrapped-input.module.d.ts +7 -4
- package/fesm2022/flywheel-io-vision.mjs +1087 -836
- package/fesm2022/flywheel-io-vision.mjs.map +1 -1
- package/package.json +14 -7
- package/scss/icons/_icon-font-face.scss +5 -5
- package/scss/icons/_icon-glyphs.scss +2 -2
- package/scss/icons/_icon-variables.scss +350 -349
- package/styles.css +0 -1
- package/esm2022/color.utils.mjs +0 -27
- package/esm2022/components/alert/alert.component.mjs +0 -34
- package/esm2022/components/alert/alert.module.mjs +0 -32
- package/esm2022/components/app-icon/app-icon.component.mjs +0 -63
- package/esm2022/components/app-icon/app-icon.module.mjs +0 -28
- package/esm2022/components/avatar/avatar.component.mjs +0 -82
- package/esm2022/components/avatar/avatar.module.mjs +0 -28
- package/esm2022/components/avatar-list/avatar-list.component.mjs +0 -87
- package/esm2022/components/badge/badge.component.mjs +0 -45
- package/esm2022/components/badge/badge.module.mjs +0 -24
- package/esm2022/components/breadcrumbs/breadcrumbs.component.mjs +0 -22
- package/esm2022/components/breadcrumbs/breadcrumbs.module.mjs +0 -33
- package/esm2022/components/breadcrumbs/crumb.component.mjs +0 -34
- package/esm2022/components/button/button.component.mjs +0 -59
- package/esm2022/components/button/button.directives.mjs +0 -129
- package/esm2022/components/button/button.module.mjs +0 -53
- package/esm2022/components/button-group/button-group.component.mjs +0 -131
- package/esm2022/components/button-group/button-group.module.mjs +0 -32
- package/esm2022/components/button-toggle/button-toggle-item/button-toggle-item.component.mjs +0 -56
- package/esm2022/components/button-toggle/button-toggle.component.mjs +0 -137
- package/esm2022/components/button-toggle/button-toggle.module.mjs +0 -33
- package/esm2022/components/card/card-attribute/card-attribute.component.mjs +0 -17
- package/esm2022/components/card/card-author/card-author.component.mjs +0 -15
- package/esm2022/components/card/card-content/card-content.component.mjs +0 -11
- package/esm2022/components/card/card-footer/card-footer.component.mjs +0 -29
- package/esm2022/components/card/card-header/card-header.component.mjs +0 -24
- package/esm2022/components/card/card.component.mjs +0 -27
- package/esm2022/components/card/card.module.mjs +0 -57
- package/esm2022/components/checkbox/checkbox.component.mjs +0 -79
- package/esm2022/components/checkbox/checkbox.module.mjs +0 -31
- package/esm2022/components/chip/chip.component.mjs +0 -55
- package/esm2022/components/chip/chip.module.mjs +0 -32
- package/esm2022/components/chip-list/chip-list.component.mjs +0 -96
- package/esm2022/components/contained-input/contained-input.component.mjs +0 -86
- package/esm2022/components/contained-input/contained-input.module.mjs +0 -40
- package/esm2022/components/date-input/date-input.component.mjs +0 -139
- package/esm2022/components/date-input/date-input.module.mjs +0 -32
- package/esm2022/components/dialog/dialog-actions.component.mjs +0 -32
- package/esm2022/components/dialog/dialog-confirm.component.mjs +0 -120
- package/esm2022/components/dialog/dialog-content.component.mjs +0 -38
- package/esm2022/components/dialog/dialog-header.component.mjs +0 -35
- package/esm2022/components/dialog/dialog-simple.component.mjs +0 -105
- package/esm2022/components/dialog/dialog.component.mjs +0 -93
- package/esm2022/components/dialog/dialog.service.mjs +0 -103
- package/esm2022/components/dialog/dialogs.module.mjs +0 -75
- package/esm2022/components/form-heading/form-heading.component.mjs +0 -30
- package/esm2022/components/form-heading/form-heading.module.mjs +0 -36
- package/esm2022/components/forms/validators.mjs +0 -81
- package/esm2022/components/icon/icon.component.mjs +0 -69
- package/esm2022/components/icon/icon.module.mjs +0 -24
- package/esm2022/components/icon/icon.types.mjs +0 -352
- package/esm2022/components/icon-button/icon-button.component.mjs +0 -40
- package/esm2022/components/icon-button/icon-button.module.mjs +0 -28
- package/esm2022/components/layouts/context/context.component.mjs +0 -46
- package/esm2022/components/layouts/grid/grid.component.mjs +0 -62
- package/esm2022/components/layouts/layout-group.component.mjs +0 -36
- package/esm2022/components/layouts/layouts.module.mjs +0 -57
- package/esm2022/components/layouts/panel/panel.component.mjs +0 -32
- package/esm2022/components/layouts/sidebar/sidebar.component.mjs +0 -26
- package/esm2022/components/layouts/toolbar/toolbar.component.mjs +0 -21
- package/esm2022/components/menu/menu-close-triggers.directive.mjs +0 -44
- package/esm2022/components/menu/menu-container/menu-container.component.mjs +0 -126
- package/esm2022/components/menu/menu-header/menu-header.component.mjs +0 -11
- package/esm2022/components/menu/menu-item/menu-item.component.mjs +0 -152
- package/esm2022/components/menu/menu-item-group/menu-item-group.component.mjs +0 -31
- package/esm2022/components/menu/menu-separator/menu-separator.component.mjs +0 -11
- package/esm2022/components/menu/menu-sub-item/menu-sub-item.component.mjs +0 -103
- package/esm2022/components/menu/menu.component.mjs +0 -132
- package/esm2022/components/menu/menu.module.mjs +0 -95
- package/esm2022/components/navbar/navbar-header/navbar-header.component.mjs +0 -11
- package/esm2022/components/navbar/navbar-item/navbar-item.component.mjs +0 -95
- package/esm2022/components/navbar/navbar-sub-item/navbar-sub-item.component.mjs +0 -76
- package/esm2022/components/navbar/navbar.component.mjs +0 -75
- package/esm2022/components/navbar/navbar.module.mjs +0 -67
- package/esm2022/components/number-input/number-input.component.mjs +0 -122
- package/esm2022/components/number-input/number-input.module.mjs +0 -32
- package/esm2022/components/paginator/paginator-advanced/paginator-advanced.component.mjs +0 -123
- package/esm2022/components/paginator/paginator.component.mjs +0 -133
- package/esm2022/components/paginator/paginator.model.mjs +0 -2
- package/esm2022/components/paginator/paginator.module.mjs +0 -49
- package/esm2022/components/phone-input/country-code.data.mjs +0 -495
- package/esm2022/components/phone-input/phone-input.component.mjs +0 -285
- package/esm2022/components/phone-input/phone-input.model.mjs +0 -2
- package/esm2022/components/phone-input/phone-input.module.mjs +0 -47
- package/esm2022/components/popover/popover-panel/popover-panel.component.mjs +0 -32
- package/esm2022/components/popover/popover.component.mjs +0 -164
- package/esm2022/components/popover/popover.module.mjs +0 -42
- package/esm2022/components/progress/bar/bar.component.mjs +0 -83
- package/esm2022/components/progress/progress.module.mjs +0 -29
- package/esm2022/components/progress/spinner/spinner.component.mjs +0 -101
- package/esm2022/components/radio/radio-group.component.mjs +0 -117
- package/esm2022/components/radio/radio.component.mjs +0 -48
- package/esm2022/components/radio/radio.module.mjs +0 -36
- package/esm2022/components/section-heading/back-button/back-button.component.mjs +0 -30
- package/esm2022/components/section-heading/section-heading.component.mjs +0 -31
- package/esm2022/components/section-heading/section-heading.module.mjs +0 -42
- package/esm2022/components/section-heading/subsection-heading/subsection-heading.component.mjs +0 -19
- package/esm2022/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +0 -374
- package/esm2022/components/select-menu/select-menu.component.mjs +0 -343
- package/esm2022/components/select-menu/select-menu.module.mjs +0 -60
- package/esm2022/components/shared/pipes/pipes.module.mjs +0 -36
- package/esm2022/components/shared/pipes/translate.pipe.mjs +0 -40
- package/esm2022/components/shared/pipes/trusthtml.pipe.mjs +0 -21
- package/esm2022/components/shared/services/menu-manager.service.mjs +0 -27
- package/esm2022/components/shared/translation.service.mjs +0 -26
- package/esm2022/components/snackbar/snackbar/snackbar.component.mjs +0 -95
- package/esm2022/components/snackbar/snackbar-container/snackbar-container.component.mjs +0 -63
- package/esm2022/components/snackbar/snackbar-message.model.mjs +0 -2
- package/esm2022/components/snackbar/snackbar-timer.service.mjs +0 -29
- package/esm2022/components/snackbar/snackbar.module.mjs +0 -41
- package/esm2022/components/snackbar/snackbar.service.mjs +0 -36
- package/esm2022/components/stepper/step.component.mjs +0 -113
- package/esm2022/components/stepper/stepper.component.mjs +0 -95
- package/esm2022/components/stepper/stepper.module.mjs +0 -41
- package/esm2022/components/switch/switch.component.mjs +0 -73
- package/esm2022/components/switch/switch.module.mjs +0 -24
- package/esm2022/components/table/cell.mjs +0 -151
- package/esm2022/components/table/row.mjs +0 -164
- package/esm2022/components/table/table-dense.component.mjs +0 -38
- package/esm2022/components/table/table.component.mjs +0 -38
- package/esm2022/components/table/table.module.mjs +0 -91
- package/esm2022/components/tabs/tab/tab.component.mjs +0 -79
- package/esm2022/components/tabs/tab-panel/tab-panel.component.mjs +0 -19
- package/esm2022/components/tabs/tabs.component.mjs +0 -68
- package/esm2022/components/tabs/tabs.module.mjs +0 -38
- package/esm2022/components/tag/tag.component.mjs +0 -25
- package/esm2022/components/tag/tag.module.mjs +0 -28
- package/esm2022/components/text-input/text-input.component.mjs +0 -129
- package/esm2022/components/text-input/text-input.module.mjs +0 -35
- package/esm2022/components/textarea-input/textarea-input.component.mjs +0 -95
- package/esm2022/components/textarea-input/textarea-input.module.mjs +0 -36
- package/esm2022/components/tooltip/tooltip-panel/tooltip-panel.component.mjs +0 -92
- package/esm2022/components/tooltip/tooltip.component.mjs +0 -59
- package/esm2022/components/tooltip/tooltip.directive.mjs +0 -177
- package/esm2022/components/tooltip/tooltip.module.mjs +0 -50
- package/esm2022/components/typeahead/typeahead.component.mjs +0 -264
- package/esm2022/components/wrapped-input/wrapped-input.component.mjs +0 -34
- package/esm2022/components/wrapped-input/wrapped-input.module.mjs +0 -28
- package/esm2022/directives/menu-register.directive.mjs +0 -38
- package/esm2022/flywheel-io-vision.mjs +0 -5
- package/esm2022/public-api.mjs +0 -132
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { Overlay } from '@angular/cdk/overlay';
|
|
2
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
3
|
-
import { computed, Directive, effect, ElementRef, inject, input, model, signal, ViewContainerRef } from '@angular/core';
|
|
4
|
-
import { FwTooltipPanelComponent } from './tooltip-panel/tooltip-panel.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const delayMap = {
|
|
7
|
-
'none': 0,
|
|
8
|
-
'short': 400,
|
|
9
|
-
'long': 700,
|
|
10
|
-
};
|
|
11
|
-
const delayNameToMs = (name) => {
|
|
12
|
-
return delayMap[name];
|
|
13
|
-
};
|
|
14
|
-
const positionMap = {
|
|
15
|
-
'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
|
|
16
|
-
'below': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: -3 },
|
|
17
|
-
'left': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },
|
|
18
|
-
'right': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },
|
|
19
|
-
'none': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: 3 },
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Directive for displaying extra context on hover
|
|
23
|
-
* @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-tooltip--docs)
|
|
24
|
-
*/
|
|
25
|
-
export class FwTooltipDirective {
|
|
26
|
-
constructor() {
|
|
27
|
-
/***** External Context *****/
|
|
28
|
-
this.elementRef = inject(ElementRef);
|
|
29
|
-
this.viewContainerRef = inject(ViewContainerRef);
|
|
30
|
-
this.overlayService = inject(Overlay);
|
|
31
|
-
/***** Internal Refs *****/
|
|
32
|
-
this.overlayRef = signal(undefined);
|
|
33
|
-
this.tooltipRef = signal(undefined);
|
|
34
|
-
/***** Inputs *****/
|
|
35
|
-
// a lot of these ideally wouldn't be models,
|
|
36
|
-
// but it makes it easier to interact with this from derivative directives
|
|
37
|
-
// VS Code pulls the input that shares a name with the directive for giving context
|
|
38
|
-
// so putting the top level comment on this input
|
|
39
|
-
/**
|
|
40
|
-
* Directive for displaying extra context on hover
|
|
41
|
-
* @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/components-tooltip--docs)
|
|
42
|
-
*/
|
|
43
|
-
this.title = model('Placeholder', {
|
|
44
|
-
alias: 'fwTooltip',
|
|
45
|
-
});
|
|
46
|
-
/**
|
|
47
|
-
* direction relative to the parent component that the tooltip will attempt to position itself to
|
|
48
|
-
*/
|
|
49
|
-
this.position = model('above', {
|
|
50
|
-
alias: 'fwTooltipPosition',
|
|
51
|
-
});
|
|
52
|
-
/**
|
|
53
|
-
* maximum width of the tooltip in pixels
|
|
54
|
-
*/
|
|
55
|
-
this.maxWidth = model(200, {
|
|
56
|
-
alias: 'fwTooltipMaxWidthPx',
|
|
57
|
-
});
|
|
58
|
-
/**
|
|
59
|
-
* amount of delay before the tooltip displays
|
|
60
|
-
*
|
|
61
|
-
* none (0ms),
|
|
62
|
-
* short (400ms),
|
|
63
|
-
* long (700ms)
|
|
64
|
-
*/
|
|
65
|
-
this.delayMs = input(400, {
|
|
66
|
-
transform: delayNameToMs,
|
|
67
|
-
alias: 'fwTooltipDelay',
|
|
68
|
-
});
|
|
69
|
-
/**
|
|
70
|
-
* whether or not the tooltip should have a caret
|
|
71
|
-
*/
|
|
72
|
-
this.displayCaret = input(true, {
|
|
73
|
-
alias: 'fwTooltipCaret',
|
|
74
|
-
});
|
|
75
|
-
this.enabled = model(true, {
|
|
76
|
-
alias: 'fwTooltipEnabled',
|
|
77
|
-
});
|
|
78
|
-
/***** Derived State *****/
|
|
79
|
-
this.connectedPositions = computed(() => {
|
|
80
|
-
// falback positions for if it doesn't fit in the specified position
|
|
81
|
-
// tend towards closer first i.e. 'above' will try 'left' and 'right' before resorting to 'below
|
|
82
|
-
const positionPreferenceOrderMap = {
|
|
83
|
-
'above': ['above', 'right', 'left', 'below'],
|
|
84
|
-
'right': ['right', 'below', 'above', 'left'],
|
|
85
|
-
'below': ['below', 'left', 'right', 'above'],
|
|
86
|
-
'left': ['left', 'above', 'below', 'right'],
|
|
87
|
-
};
|
|
88
|
-
const fallbackNamedPositions = positionPreferenceOrderMap[this.position()];
|
|
89
|
-
const connectedPositions = fallbackNamedPositions.map(name => positionMap[name]);
|
|
90
|
-
return connectedPositions;
|
|
91
|
-
});
|
|
92
|
-
this.positionStrategy = computed(() => {
|
|
93
|
-
const positionBuilder = this.overlayService.position();
|
|
94
|
-
const withOrigin = positionBuilder.flexibleConnectedTo(this.elementRef);
|
|
95
|
-
const completedStrategy = withOrigin.withPositions(this.connectedPositions());
|
|
96
|
-
return completedStrategy;
|
|
97
|
-
});
|
|
98
|
-
this.overlayConfig = computed(() => ({
|
|
99
|
-
positionStrategy: this.positionStrategy(),
|
|
100
|
-
maxWidth: Number(this.maxWidth()),
|
|
101
|
-
ScrollStrategyOptions: this.overlayService.scrollStrategies.close(),
|
|
102
|
-
disposeOnNavigation: true,
|
|
103
|
-
}));
|
|
104
|
-
/***** Effects and Methods *****/
|
|
105
|
-
this.addMouseEventListeners = effect(() => {
|
|
106
|
-
const nativeElement = this.elementRef.nativeElement;
|
|
107
|
-
nativeElement.addEventListener('mouseenter', () => {
|
|
108
|
-
this.showTooltip();
|
|
109
|
-
});
|
|
110
|
-
nativeElement.addEventListener('mouseleave', () => {
|
|
111
|
-
this.hideTooltip();
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
// updates the tooltip panel's caret position if a fallback position is used
|
|
115
|
-
this.handlePositionChange = effect(() => {
|
|
116
|
-
this.positionChangeSub?.unsubscribe();
|
|
117
|
-
this.positionChangeSub = this.positionStrategy().positionChanges.subscribe(positionChange => {
|
|
118
|
-
const newPosition = positionChange.connectionPair;
|
|
119
|
-
const positionNames = Object.keys(positionMap);
|
|
120
|
-
const newPositionName = positionNames.find(name => {
|
|
121
|
-
const pos = positionMap[name];
|
|
122
|
-
return pos.originX === newPosition.originX &&
|
|
123
|
-
pos.originY === newPosition.originY &&
|
|
124
|
-
pos.overlayX === newPosition.overlayX &&
|
|
125
|
-
pos.overlayY === newPosition.overlayY;
|
|
126
|
-
});
|
|
127
|
-
if (newPositionName) {
|
|
128
|
-
this.tooltipRef()?.setInput('position', newPositionName);
|
|
129
|
-
this.tooltipRef()?.changeDetectorRef.detectChanges();
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
ngOnInit() {
|
|
135
|
-
this.tooltipPortal = new ComponentPortal(FwTooltipPanelComponent, this.viewContainerRef);
|
|
136
|
-
this.overlayRef.set(this.overlayService.create());
|
|
137
|
-
}
|
|
138
|
-
showTooltip() {
|
|
139
|
-
if (!this.enabled() || !this.title()) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const overlayRef = this.overlayRef();
|
|
143
|
-
overlayRef.updatePositionStrategy(this.positionStrategy());
|
|
144
|
-
if (this.openDelayTimer) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
this.openDelayTimer = window.setTimeout(() => {
|
|
148
|
-
const tooltipRef = overlayRef.attach(this.tooltipPortal);
|
|
149
|
-
this.tooltipRef.set(tooltipRef);
|
|
150
|
-
tooltipRef.setInput('title', this.title());
|
|
151
|
-
tooltipRef.setInput('position', this.position());
|
|
152
|
-
tooltipRef.setInput('maxWidth', this.maxWidth());
|
|
153
|
-
tooltipRef.setInput('displayCaret', this.displayCaret());
|
|
154
|
-
tooltipRef.changeDetectorRef.detectChanges();
|
|
155
|
-
}, this.delayMs());
|
|
156
|
-
}
|
|
157
|
-
hideTooltip() {
|
|
158
|
-
window.clearTimeout(this.openDelayTimer);
|
|
159
|
-
this.openDelayTimer = undefined;
|
|
160
|
-
this.overlayRef()?.detach();
|
|
161
|
-
this.tooltipRef.set(undefined);
|
|
162
|
-
}
|
|
163
|
-
ngOnDestroy() {
|
|
164
|
-
this.positionChangeSub?.unsubscribe();
|
|
165
|
-
this.hideTooltip();
|
|
166
|
-
}
|
|
167
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
168
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.12", type: FwTooltipDirective, isStandalone: true, selector: "[fwTooltip]", inputs: { title: { classPropertyName: "title", publicName: "fwTooltip", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "fwTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "fwTooltipMaxWidthPx", isSignal: true, isRequired: false, transformFunction: null }, delayMs: { classPropertyName: "delayMs", publicName: "fwTooltipDelay", isSignal: true, isRequired: false, transformFunction: null }, displayCaret: { classPropertyName: "displayCaret", publicName: "fwTooltipCaret", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "fwTooltipEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "fwTooltipChange", position: "fwTooltipPositionChange", maxWidth: "fwTooltipMaxWidthPxChange", enabled: "fwTooltipEnabledChange" }, ngImport: i0 }); }
|
|
169
|
-
}
|
|
170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipDirective, decorators: [{
|
|
171
|
-
type: Directive,
|
|
172
|
-
args: [{
|
|
173
|
-
selector: '[fwTooltip]',
|
|
174
|
-
standalone: true,
|
|
175
|
-
}]
|
|
176
|
-
}] });
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsT0FBTyxFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pKLE9BQU8sRUFBRSx1QkFBdUIsRUFBa0IsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFLbEcsTUFBTSxRQUFRLEdBQWE7SUFDekIsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsR0FBRztJQUNaLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQTtBQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBaUIsRUFBVSxFQUFFO0lBQ2xELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQTtBQUdELE1BQU0sV0FBVyxHQUF5QztJQUN4RCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDbEcsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbkcsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtJQUNwRixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0lBQ3JGLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtDQUNsRyxDQUFDO0FBR0Y7OztHQUdHO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjtJQUovQjtRQU1FLDhCQUE4QjtRQUV0QixlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6QywyQkFBMkI7UUFFbkIsZUFBVSxHQUFHLE1BQU0sQ0FBeUIsU0FBUyxDQUFDLENBQUM7UUFDdkQsZUFBVSxHQUFHLE1BQU0sQ0FBb0QsU0FBUyxDQUFDLENBQUM7UUFHMUYsb0JBQW9CO1FBRXBCLDZDQUE2QztRQUM3QywwRUFBMEU7UUFFMUUsbUZBQW1GO1FBQ25GLGlEQUFpRDtRQUVqRDs7O1dBR0c7UUFDSCxVQUFLLEdBQUcsS0FBSyxDQUFTLGFBQWEsRUFBRTtZQUNuQyxLQUFLLEVBQUUsV0FBVztTQUNuQixDQUFDLENBQUE7UUFFRjs7V0FFRztRQUNILGFBQVEsR0FBRyxLQUFLLENBQWlCLE9BQU8sRUFBRTtZQUN4QyxLQUFLLEVBQUUsbUJBQW1CO1NBQzNCLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsYUFBUSxHQUFHLEtBQUssQ0FBUyxHQUFHLEVBQUU7WUFDNUIsS0FBSyxFQUFFLHFCQUFxQjtTQUM3QixDQUFDLENBQUE7UUFFRjs7Ozs7O1dBTUc7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNuQixTQUFTLEVBQUUsYUFBYTtZQUN4QixLQUFLLEVBQUUsZ0JBQWdCO1NBQ3hCLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3pCLEtBQUssRUFBRSxnQkFBZ0I7U0FDeEIsQ0FBQyxDQUFDO1FBR0gsWUFBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDcEIsS0FBSyxFQUFFLGtCQUFrQjtTQUMxQixDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFFM0IsdUJBQWtCLEdBQUcsUUFBUSxDQUFzQixHQUFHLEVBQUU7WUFDdEQsb0VBQW9FO1lBQ3BFLGdHQUFnRztZQUNoRyxNQUFNLDBCQUEwQixHQUFHO2dCQUNqQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7Z0JBQzVDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztnQkFDNUMsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO2dCQUM1QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7YUFDNUMsQ0FBQTtZQUVELE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVqRixPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDOUUsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFhLEdBQUcsUUFBUSxDQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUNuRSxtQkFBbUIsRUFBRSxJQUFJO1NBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUosaUNBQWlDO1FBRWpDLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFFbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7WUFFcEQsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQXFDRiw0RUFBNEU7UUFDNUUseUJBQW9CLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUVqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBRTFGLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUM7Z0JBRWxELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFOUIsT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxPQUFPO3dCQUMxQyxHQUFHLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxPQUFPO3dCQUNuQyxHQUFHLENBQUMsUUFBUSxLQUFLLFdBQVcsQ0FBQyxRQUFRO3dCQUNyQyxHQUFHLENBQUMsUUFBUSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0tBYUg7SUF2RUMsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFekYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFLRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBRUcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRTNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMzQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVoQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqRCxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqRCxVQUFVLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUN6RCxVQUFVLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUE2QkQsV0FBVztRQUNULE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQzsrR0F6TFUsa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGd1Rvb2x0aXBQYW5lbENvbXBvbmVudCwgU2ltcGxlUG9zaXRpb24gfSBmcm9tICcuL3Rvb2x0aXAtcGFuZWwvdG9vbHRpcC1wYW5lbC5jb21wb25lbnQnO1xuXG50eXBlIERlbGF5TGVuZ3RoID0gJ25vbmUnIHwgJ3Nob3J0JyB8ICdsb25nJztcbnR5cGUgRGVsYXlNYXAgPSB7IFtLIGluIERlbGF5TGVuZ3RoXTogbnVtYmVyIH07XG5cbmNvbnN0IGRlbGF5TWFwOiBEZWxheU1hcCA9IHtcbiAgJ25vbmUnOiAwLFxuICAnc2hvcnQnOiA0MDAsXG4gICdsb25nJzogNzAwLFxufVxuXG5jb25zdCBkZWxheU5hbWVUb01zID0gKG5hbWU6IERlbGF5TGVuZ3RoKTogbnVtYmVyID0+IHtcbiAgcmV0dXJuIGRlbGF5TWFwW25hbWVdO1xufVxuXG5cbmNvbnN0IHBvc2l0aW9uTWFwOiB7IFtrZXk6IHN0cmluZ106IENvbm5lY3RlZFBvc2l0aW9uIH0gPSB7XG4gICdhYm92ZSc6IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAnYm90dG9tJywgb2Zmc2V0WTogMyB9LFxuICAnYmVsb3cnOiB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IC0zIH0sXG4gICdsZWZ0JzogeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicgfSxcbiAgJ3JpZ2h0JzogeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicgfSxcbiAgJ25vbmUnOiB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IDMgfSxcbn07XG5cblxuLyoqXG4gKiBEaXJlY3RpdmUgZm9yIGRpc3BsYXlpbmcgZXh0cmEgY29udGV4dCBvbiBob3ZlclxuICogQHNlZSBbVmlzaW9uIERvY3NdKGh0dHBzOi8vY2RuLmZseXdoZWVsLmlvL2RvY3MvdmlzaW9uL21hc3Rlci8/cGF0aD0vZG9jcy9jb21wb25lbnRzLXRvb2x0aXAtLWRvY3MpXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmd1Rvb2x0aXBdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRndUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKiBFeHRlcm5hbCBDb250ZXh0ICoqKioqL1xuXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBvdmVybGF5U2VydmljZSA9IGluamVjdChPdmVybGF5KTtcblxuICAvKioqKiogSW50ZXJuYWwgUmVmcyAqKioqKi9cblxuICBwcml2YXRlIG92ZXJsYXlSZWYgPSBzaWduYWw8T3ZlcmxheVJlZiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxGd1Rvb2x0aXBQYW5lbENvbXBvbmVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdG9vbHRpcFBvcnRhbDogQ29tcG9uZW50UG9ydGFsPEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50PjtcblxuICAvKioqKiogSW5wdXRzICoqKioqL1xuXG4gIC8vIGEgbG90IG9mIHRoZXNlIGlkZWFsbHkgd291bGRuJ3QgYmUgbW9kZWxzLFxuICAvLyBidXQgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIGludGVyYWN0IHdpdGggdGhpcyBmcm9tIGRlcml2YXRpdmUgZGlyZWN0aXZlc1xuXG4gIC8vIFZTIENvZGUgcHVsbHMgdGhlIGlucHV0IHRoYXQgc2hhcmVzIGEgbmFtZSB3aXRoIHRoZSBkaXJlY3RpdmUgZm9yIGdpdmluZyBjb250ZXh0XG4gIC8vIHNvIHB1dHRpbmcgdGhlIHRvcCBsZXZlbCBjb21tZW50IG9uIHRoaXMgaW5wdXRcblxuICAvKipcbiAgICogRGlyZWN0aXZlIGZvciBkaXNwbGF5aW5nIGV4dHJhIGNvbnRleHQgb24gaG92ZXJcbiAgICogQHNlZSBbVmlzaW9uIERvY3NdKGh0dHBzOi8vY2RuLmZseXdoZWVsLmlvL2RvY3MvdmlzaW9uL21hc3Rlci8/cGF0aD0vZG9jcy9jb21wb25lbnRzLXRvb2x0aXAtLWRvY3MpXG4gICAqL1xuICB0aXRsZSA9IG1vZGVsPHN0cmluZz4oJ1BsYWNlaG9sZGVyJywge1xuICAgIGFsaWFzOiAnZndUb29sdGlwJyxcbiAgfSlcblxuICAvKipcbiAgICogZGlyZWN0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHRoYXQgdGhlIHRvb2x0aXAgd2lsbCBhdHRlbXB0IHRvIHBvc2l0aW9uIGl0c2VsZiB0b1xuICAgKi9cbiAgcG9zaXRpb24gPSBtb2RlbDxTaW1wbGVQb3NpdGlvbj4oJ2Fib3ZlJywge1xuICAgIGFsaWFzOiAnZndUb29sdGlwUG9zaXRpb24nLFxuICB9KTtcblxuICAvKipcbiAgICogbWF4aW11bSB3aWR0aCBvZiB0aGUgdG9vbHRpcCBpbiBwaXhlbHNcbiAgICovXG4gIG1heFdpZHRoID0gbW9kZWw8bnVtYmVyPigyMDAsIHtcbiAgICBhbGlhczogJ2Z3VG9vbHRpcE1heFdpZHRoUHgnLFxuICB9KVxuXG4gIC8qKlxuICAgKiBhbW91bnQgb2YgZGVsYXkgYmVmb3JlIHRoZSB0b29sdGlwIGRpc3BsYXlzXG4gICAqXG4gICAqIG5vbmUgKDBtcyksXG4gICAqIHNob3J0ICg0MDBtcyksXG4gICAqIGxvbmcgKDcwMG1zKVxuICAgKi9cbiAgZGVsYXlNcyA9IGlucHV0KDQwMCwge1xuICAgIHRyYW5zZm9ybTogZGVsYXlOYW1lVG9NcyxcbiAgICBhbGlhczogJ2Z3VG9vbHRpcERlbGF5JyxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgb3Igbm90IHRoZSB0b29sdGlwIHNob3VsZCBoYXZlIGEgY2FyZXRcbiAgICovXG4gIGRpc3BsYXlDYXJldCA9IGlucHV0KHRydWUsIHtcbiAgICBhbGlhczogJ2Z3VG9vbHRpcENhcmV0JyxcbiAgfSk7XG5cblxuICBlbmFibGVkID0gbW9kZWwodHJ1ZSwge1xuICAgIGFsaWFzOiAnZndUb29sdGlwRW5hYmxlZCcsXG4gIH0pO1xuXG4gIC8qKioqKiBEZXJpdmVkIFN0YXRlICoqKioqL1xuXG4gIGNvbm5lY3RlZFBvc2l0aW9ucyA9IGNvbXB1dGVkPENvbm5lY3RlZFBvc2l0aW9uW10+KCgpID0+IHtcbiAgICAvLyBmYWxiYWNrIHBvc2l0aW9ucyBmb3IgaWYgaXQgZG9lc24ndCBmaXQgaW4gdGhlIHNwZWNpZmllZCBwb3NpdGlvblxuICAgIC8vIHRlbmQgdG93YXJkcyBjbG9zZXIgZmlyc3QgaS5lLiAnYWJvdmUnIHdpbGwgdHJ5ICdsZWZ0JyBhbmQgJ3JpZ2h0JyBiZWZvcmUgcmVzb3J0aW5nIHRvICdiZWxvd1xuICAgIGNvbnN0IHBvc2l0aW9uUHJlZmVyZW5jZU9yZGVyTWFwID0ge1xuICAgICAgJ2Fib3ZlJzogWydhYm92ZScsICdyaWdodCcsICdsZWZ0JywgJ2JlbG93J10sXG4gICAgICAncmlnaHQnOiBbJ3JpZ2h0JywgJ2JlbG93JywgJ2Fib3ZlJywgJ2xlZnQnXSxcbiAgICAgICdiZWxvdyc6IFsnYmVsb3cnLCAnbGVmdCcsICdyaWdodCcsICdhYm92ZSddLFxuICAgICAgJ2xlZnQnOiBbJ2xlZnQnLCAnYWJvdmUnLCAnYmVsb3cnLCAncmlnaHQnXSxcbiAgICB9XG5cbiAgICBjb25zdCBmYWxsYmFja05hbWVkUG9zaXRpb25zID0gcG9zaXRpb25QcmVmZXJlbmNlT3JkZXJNYXBbdGhpcy5wb3NpdGlvbigpXTtcbiAgICBjb25zdCBjb25uZWN0ZWRQb3NpdGlvbnMgPSBmYWxsYmFja05hbWVkUG9zaXRpb25zLm1hcChuYW1lID0+IHBvc2l0aW9uTWFwW25hbWVdKTtcblxuICAgIHJldHVybiBjb25uZWN0ZWRQb3NpdGlvbnM7XG4gIH0pO1xuXG4gIHBvc2l0aW9uU3RyYXRlZ3kgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25CdWlsZGVyID0gdGhpcy5vdmVybGF5U2VydmljZS5wb3NpdGlvbigpO1xuICAgIGNvbnN0IHdpdGhPcmlnaW4gPSBwb3NpdGlvbkJ1aWxkZXIuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgIGNvbnN0IGNvbXBsZXRlZFN0cmF0ZWd5ID0gd2l0aE9yaWdpbi53aXRoUG9zaXRpb25zKHRoaXMuY29ubmVjdGVkUG9zaXRpb25zKCkpO1xuICAgIHJldHVybiBjb21wbGV0ZWRTdHJhdGVneTtcbiAgfSk7XG5cbiAgb3ZlcmxheUNvbmZpZyA9IGNvbXB1dGVkPE92ZXJsYXlDb25maWc+KCgpID0+ICh7XG4gICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5wb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgbWF4V2lkdGg6IE51bWJlcih0aGlzLm1heFdpZHRoKCkpLFxuICAgIFNjcm9sbFN0cmF0ZWd5T3B0aW9uczogdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCksXG4gICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgfSkpO1xuXG4gIC8qKioqKiBFZmZlY3RzIGFuZCBNZXRob2RzICoqKioqL1xuXG4gIGFkZE1vdXNlRXZlbnRMaXN0ZW5lcnMgPSBlZmZlY3QoKCkgPT4ge1xuXG4gICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgbmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgdGhpcy5zaG93VG9vbHRpcCgpO1xuICAgIH0pO1xuXG4gICAgbmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgIH0pO1xuICB9KVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoRndUb29sdGlwUGFuZWxDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG5cbiAgICB0aGlzLm92ZXJsYXlSZWYuc2V0KHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKCkpO1xuICB9XG5cblxuICBwcml2YXRlIG9wZW5EZWxheVRpbWVyOiBudW1iZXI7XG5cbiAgc2hvd1Rvb2x0aXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSB8fCAhdGhpcy50aXRsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXlSZWYoKTtcbiAgICBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5wb3NpdGlvblN0cmF0ZWd5KCkpO1xuXG4gICAgaWYgKHRoaXMub3BlbkRlbGF5VGltZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZW5EZWxheVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbHRpcFJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKHRoaXMudG9vbHRpcFBvcnRhbCk7XG4gICAgICB0aGlzLnRvb2x0aXBSZWYuc2V0KHRvb2x0aXBSZWYpO1xuXG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCd0aXRsZScsIHRoaXMudGl0bGUoKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdwb3NpdGlvbicsIHRoaXMucG9zaXRpb24oKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdtYXhXaWR0aCcsIHRoaXMubWF4V2lkdGgoKSk7XG4gICAgICB0b29sdGlwUmVmLnNldElucHV0KCdkaXNwbGF5Q2FyZXQnLCB0aGlzLmRpc3BsYXlDYXJldCgpKTtcbiAgICAgIHRvb2x0aXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIHRoaXMuZGVsYXlNcygpKTtcbiAgfVxuXG4gIHBvc2l0aW9uQ2hhbmdlU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLy8gdXBkYXRlcyB0aGUgdG9vbHRpcCBwYW5lbCdzIGNhcmV0IHBvc2l0aW9uIGlmIGEgZmFsbGJhY2sgcG9zaXRpb24gaXMgdXNlZFxuICBoYW5kbGVQb3NpdGlvbkNoYW5nZSA9IGVmZmVjdCgoKSA9PiB7XG5cbiAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VTdWIgPSB0aGlzLnBvc2l0aW9uU3RyYXRlZ3koKS5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKHBvc2l0aW9uQ2hhbmdlID0+IHtcblxuICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSBwb3NpdGlvbkNoYW5nZS5jb25uZWN0aW9uUGFpcjtcblxuICAgICAgY29uc3QgcG9zaXRpb25OYW1lcyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uTWFwKTtcbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uTmFtZSA9IHBvc2l0aW9uTmFtZXMuZmluZChuYW1lID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gcG9zaXRpb25NYXBbbmFtZV07XG5cbiAgICAgICAgcmV0dXJuIHBvcy5vcmlnaW5YID09PSBuZXdQb3NpdGlvbi5vcmlnaW5YICYmXG4gICAgICAgIHBvcy5vcmlnaW5ZID09PSBuZXdQb3NpdGlvbi5vcmlnaW5ZICYmXG4gICAgICAgIHBvcy5vdmVybGF5WCA9PT0gbmV3UG9zaXRpb24ub3ZlcmxheVggJiZcbiAgICAgICAgcG9zLm92ZXJsYXlZID09PSBuZXdQb3NpdGlvbi5vdmVybGF5WTtcbiAgICAgIH0pXG5cbiAgICAgIGlmIChuZXdQb3NpdGlvbk5hbWUpIHtcbiAgICAgICAgdGhpcy50b29sdGlwUmVmKCk/LnNldElucHV0KCdwb3NpdGlvbicsIG5ld1Bvc2l0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJlZigpPy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBoaWRlVG9vbHRpcCgpOiB2b2lkIHtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMub3BlbkRlbGF5VGltZXIpO1xuICAgIHRoaXMub3BlbkRlbGF5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vdmVybGF5UmVmKCk/LmRldGFjaCgpO1xuICAgIHRoaXMudG9vbHRpcFJlZi5zZXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucG9zaXRpb25DaGFuZ2VTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Overlay, OverlayModule } from '@angular/cdk/overlay';
|
|
2
|
-
import { CdkNoDataRow } from '@angular/cdk/table';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { NgModule } from '@angular/core';
|
|
5
|
-
import { FwPopoverModule } from '../popover/popover.module';
|
|
6
|
-
import { FwTooltipComponent } from './tooltip.component';
|
|
7
|
-
import { FwTooltipDirective } from './tooltip.directive';
|
|
8
|
-
import { FwTooltipPanelComponent } from './tooltip-panel/tooltip-panel.component';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class FwTooltipModule {
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, declarations: [FwTooltipComponent,
|
|
13
|
-
FwTooltipPanelComponent], imports: [CommonModule,
|
|
14
|
-
FwPopoverModule,
|
|
15
|
-
OverlayModule,
|
|
16
|
-
CdkNoDataRow,
|
|
17
|
-
FwTooltipDirective], exports: [FwTooltipComponent,
|
|
18
|
-
FwTooltipPanelComponent,
|
|
19
|
-
FwTooltipDirective] }); }
|
|
20
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, providers: [
|
|
21
|
-
Overlay,
|
|
22
|
-
], imports: [CommonModule,
|
|
23
|
-
FwPopoverModule,
|
|
24
|
-
OverlayModule] }); }
|
|
25
|
-
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipModule, decorators: [{
|
|
27
|
-
type: NgModule,
|
|
28
|
-
args: [{
|
|
29
|
-
imports: [
|
|
30
|
-
CommonModule,
|
|
31
|
-
FwPopoverModule,
|
|
32
|
-
OverlayModule,
|
|
33
|
-
CdkNoDataRow,
|
|
34
|
-
FwTooltipDirective,
|
|
35
|
-
],
|
|
36
|
-
exports: [
|
|
37
|
-
FwTooltipComponent,
|
|
38
|
-
FwTooltipPanelComponent,
|
|
39
|
-
FwTooltipDirective,
|
|
40
|
-
],
|
|
41
|
-
declarations: [
|
|
42
|
-
FwTooltipComponent,
|
|
43
|
-
FwTooltipPanelComponent,
|
|
44
|
-
],
|
|
45
|
-
providers: [
|
|
46
|
-
Overlay,
|
|
47
|
-
],
|
|
48
|
-
}]
|
|
49
|
-
}] });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUF1QmxGLE1BQU0sT0FBTyxlQUFlOytHQUFmLGVBQWU7Z0hBQWYsZUFBZSxpQkFQeEIsa0JBQWtCO1lBQ2xCLHVCQUF1QixhQWJ2QixZQUFZO1lBQ1osZUFBZTtZQUNmLGFBQWE7WUFDYixZQUFZO1lBQ1osa0JBQWtCLGFBR2xCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsa0JBQWtCO2dIQVVULGVBQWUsYUFKZjtZQUNULE9BQU87U0FDUixZQWpCQyxZQUFZO1lBQ1osZUFBZTtZQUNmLGFBQWE7OzRGQWlCSixlQUFlO2tCQXJCM0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixrQkFBa0I7cUJBQ3JCO29CQUNDLE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLHVCQUF1Qjt3QkFDdkIsa0JBQWtCO3FCQUNuQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQix1QkFBdUI7cUJBQ3hCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxPQUFPO3FCQUNSO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka05vRGF0YVJvdyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRndQb3BvdmVyTW9kdWxlIH0gZnJvbSAnLi4vcG9wb3Zlci9wb3BvdmVyLm1vZHVsZSc7XG5pbXBvcnQgeyBGd1Rvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL3Rvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3VG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4vdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRndUb29sdGlwUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL3Rvb2x0aXAtcGFuZWwvdG9vbHRpcC1wYW5lbC5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZ3UG9wb3Zlck1vZHVsZSxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIENka05vRGF0YVJvdyxcbiAgICBGd1Rvb2x0aXBEaXJlY3RpdmUsXG5dLFxuICBleHBvcnRzOiBbXG4gICAgRndUb29sdGlwQ29tcG9uZW50LFxuICAgIEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50LFxuICAgIEZ3VG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRndUb29sdGlwQ29tcG9uZW50LFxuICAgIEZ3VG9vbHRpcFBhbmVsQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBPdmVybGF5LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGd1Rvb2x0aXBNb2R1bGUge1xufVxuIl19
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import { CdkMenuModule, CdkMenuTrigger } from '@angular/cdk/menu';
|
|
2
|
-
import { NgClass } from '@angular/common';
|
|
3
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, forwardRef, HostListener, inject, input, model, signal, viewChild, viewChildren, } from '@angular/core';
|
|
4
|
-
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
5
|
-
import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
-
import { combineLatest, map, of, switchMap, tap } from 'rxjs';
|
|
7
|
-
import { MenuRegisterDirective } from '../../directives/menu-register.directive';
|
|
8
|
-
import { FwChipModule } from '../chip/chip.module';
|
|
9
|
-
import { FwChipListComponent } from '../chip-list/chip-list.component';
|
|
10
|
-
import { FwMenuModule } from '../menu/menu.module';
|
|
11
|
-
import { FwMenuItemComponent } from '../menu/menu-item/menu-item.component';
|
|
12
|
-
import { FwProgressModule } from '../progress/progress.module';
|
|
13
|
-
import { FwTextInputModule } from '../text-input/text-input.module';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "../chip/chip.component";
|
|
16
|
-
import * as i2 from "../menu/menu.component";
|
|
17
|
-
import * as i3 from "../menu/menu-container/menu-container.component";
|
|
18
|
-
import * as i4 from "../menu/menu-item/menu-item.component";
|
|
19
|
-
import * as i5 from "@angular/cdk/menu";
|
|
20
|
-
import * as i6 from "../progress/spinner/spinner.component";
|
|
21
|
-
/**
|
|
22
|
-
* Component for having a user select multiple values while also allowing arbitrary values to be added
|
|
23
|
-
* @see [Vision Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/form-controls-typeahead--docs)
|
|
24
|
-
*/
|
|
25
|
-
export class FwTypeaheadComponent {
|
|
26
|
-
constructor() {
|
|
27
|
-
this.trigger = viewChild(CdkMenuTrigger);
|
|
28
|
-
this.changeDetector = inject(ChangeDetectorRef);
|
|
29
|
-
this.loading = model(false);
|
|
30
|
-
this.disabled = model(false);
|
|
31
|
-
this.onChange = (_) => {
|
|
32
|
-
};
|
|
33
|
-
this.onTouched = () => {
|
|
34
|
-
};
|
|
35
|
-
this.value = model([]);
|
|
36
|
-
this.value$ = toObservable(this.value);
|
|
37
|
-
this.optionsInput = input([], { alias: 'options' });
|
|
38
|
-
this.optionsInput$ = toObservable(this.optionsInput);
|
|
39
|
-
this.maxOptionsHeight = input('400px');
|
|
40
|
-
this.minOptionsHeight = input('0px');
|
|
41
|
-
this.optionsWidth = input('');
|
|
42
|
-
this.maxHeight = input('');
|
|
43
|
-
this.notifyOnValueChanges = effect(() => {
|
|
44
|
-
this.onChange(this.value());
|
|
45
|
-
});
|
|
46
|
-
this.searchValue = model('');
|
|
47
|
-
this.searchValueChanges$ = toObservable(this.searchValue);
|
|
48
|
-
this.allowNew = input(true);
|
|
49
|
-
this.placeholder = input('Enter tags...');
|
|
50
|
-
this.showPlaceholder = computed(() => this.value().length === 0);
|
|
51
|
-
/**
|
|
52
|
-
* Options after they've been both filtered for matching the search and already selected
|
|
53
|
-
*/
|
|
54
|
-
this.filteredOptions$ = combineLatest([
|
|
55
|
-
this.searchValueChanges$,
|
|
56
|
-
this.optionsInput$,
|
|
57
|
-
]).pipe(tap(() => this.loading.set(true)),
|
|
58
|
-
// first determine if it's a function or static options
|
|
59
|
-
switchMap(([searchString, optionInput]) => {
|
|
60
|
-
if (typeof optionInput === 'function') {
|
|
61
|
-
const fetchingFunction = optionInput;
|
|
62
|
-
return fetchingFunction(searchString);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// if they're static options we need to do the search filtering
|
|
66
|
-
const filteredOptionInput = optionInput?.filter(opt => opt.toLowerCase().includes(searchString.toLowerCase()));
|
|
67
|
-
return of(filteredOptionInput);
|
|
68
|
-
}
|
|
69
|
-
}),
|
|
70
|
-
// next filter out already selected values
|
|
71
|
-
switchMap(options => combineLatest([of(options), this.value$])), map(([options, currentValue]) => {
|
|
72
|
-
return options?.filter(option => {
|
|
73
|
-
const alreadySelected = currentValue.find(val => val.toLowerCase() === option.toLowerCase());
|
|
74
|
-
return !alreadySelected;
|
|
75
|
-
});
|
|
76
|
-
}), tap(() => this.loading.set(false)));
|
|
77
|
-
/**
|
|
78
|
-
* Options after they've been both filtered for matching the search and already selected
|
|
79
|
-
*/
|
|
80
|
-
this.filteredOptions = toSignal(this.filteredOptions$);
|
|
81
|
-
this.displayNewOption = computed(() => {
|
|
82
|
-
const newValue = this.searchValue();
|
|
83
|
-
if (!newValue) {
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
const directMatch = this.filteredOptions()?.includes?.(newValue);
|
|
87
|
-
const loading = this.loading();
|
|
88
|
-
const alreadySelected = Boolean(this.value().find(val => val.toLowerCase() === newValue.toLowerCase()));
|
|
89
|
-
return this.allowNew() && !alreadySelected && (!directMatch || loading);
|
|
90
|
-
});
|
|
91
|
-
this.addValue = (newValue) => {
|
|
92
|
-
const isInOptions = this.filteredOptions().includes(newValue);
|
|
93
|
-
const isNewWhileDisallowed = !this.allowNew() && !isInOptions;
|
|
94
|
-
const isDuplicate = this.value().includes(newValue.toLowerCase());
|
|
95
|
-
if (isNewWhileDisallowed || isDuplicate) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
this.value.update(prevValue => [
|
|
99
|
-
...prevValue || [],
|
|
100
|
-
newValue,
|
|
101
|
-
]);
|
|
102
|
-
};
|
|
103
|
-
this.handleOptionClick = (optionValue) => {
|
|
104
|
-
this.onTouched();
|
|
105
|
-
this.addValue(optionValue);
|
|
106
|
-
this.focusInput();
|
|
107
|
-
this.searchValue.set('');
|
|
108
|
-
};
|
|
109
|
-
this.resetFocusOnOptionsChange = effect(() => {
|
|
110
|
-
if (this.displayedOptions() || this.searchValue()) {
|
|
111
|
-
this.focusedIndex.set(0);
|
|
112
|
-
}
|
|
113
|
-
}, { allowSignalWrites: true });
|
|
114
|
-
this.displayedOptions = viewChildren(FwMenuItemComponent);
|
|
115
|
-
this.focusedIndex = signal(0);
|
|
116
|
-
this.focusedOption = computed(() => {
|
|
117
|
-
const options = this.displayedOptions();
|
|
118
|
-
const focused = this.focusedIndex();
|
|
119
|
-
const onlyOne = options.length === 1;
|
|
120
|
-
return onlyOne ? this.searchValue() : options[focused]?.value;
|
|
121
|
-
});
|
|
122
|
-
this.inputRef = viewChild.required('input');
|
|
123
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
124
|
-
this.keyHandlerMap = {
|
|
125
|
-
'Enter': () => {
|
|
126
|
-
this.onTouched();
|
|
127
|
-
const newValue = this.focusedOption() || this.searchValue();
|
|
128
|
-
const duplicate = this.value().find(val => val.toLowerCase() === newValue.toLowerCase());
|
|
129
|
-
if (!newValue || duplicate) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
this.addValue(newValue);
|
|
133
|
-
this.searchValue.set('');
|
|
134
|
-
},
|
|
135
|
-
'ArrowDown': () => {
|
|
136
|
-
this.moveFocused('down');
|
|
137
|
-
},
|
|
138
|
-
'ArrowUp': () => {
|
|
139
|
-
this.moveFocused('up');
|
|
140
|
-
},
|
|
141
|
-
'Backspace': () => {
|
|
142
|
-
const searchIsEmpty = !this.searchValue(); // any falsy value is empty
|
|
143
|
-
if (searchIsEmpty && this.value()?.length > 0) {
|
|
144
|
-
this.closeChip(this.value()[this.value().length - 1]);
|
|
145
|
-
}
|
|
146
|
-
return !searchIsEmpty;
|
|
147
|
-
},
|
|
148
|
-
'Tab': () => {
|
|
149
|
-
if (this.trigger().isOpen) {
|
|
150
|
-
this.trigger().close();
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
outsideClick() {
|
|
156
|
-
this.trigger().close();
|
|
157
|
-
}
|
|
158
|
-
setDisabledState(isDisabled) {
|
|
159
|
-
this.disabled.set(isDisabled);
|
|
160
|
-
}
|
|
161
|
-
writeValue(incomingValue) {
|
|
162
|
-
this.value.set(incomingValue);
|
|
163
|
-
}
|
|
164
|
-
registerOnChange(onChangeFn) {
|
|
165
|
-
this.onChange = onChangeFn;
|
|
166
|
-
}
|
|
167
|
-
registerOnTouched(onTouchedFn) {
|
|
168
|
-
this.onTouched = onTouchedFn;
|
|
169
|
-
}
|
|
170
|
-
onClick(event) {
|
|
171
|
-
event.preventDefault();
|
|
172
|
-
event.stopPropagation();
|
|
173
|
-
}
|
|
174
|
-
handleSearchChange(event) {
|
|
175
|
-
if (this.trigger().closed) {
|
|
176
|
-
this.trigger().open();
|
|
177
|
-
}
|
|
178
|
-
const value = event.target.value;
|
|
179
|
-
this.searchValue.set(value);
|
|
180
|
-
}
|
|
181
|
-
closeChip(chipValue) {
|
|
182
|
-
const currentValue = this.value();
|
|
183
|
-
const newValue = currentValue.filter(val => val !== chipValue);
|
|
184
|
-
this.value.set(newValue);
|
|
185
|
-
this.focusInput();
|
|
186
|
-
// eslint-disable-next-line @rx-angular/no-explicit-change-detection-apis
|
|
187
|
-
this.changeDetector.detectChanges();
|
|
188
|
-
}
|
|
189
|
-
focusInput(e = null) {
|
|
190
|
-
e?.preventDefault();
|
|
191
|
-
e?.stopPropagation();
|
|
192
|
-
e?.stopImmediatePropagation();
|
|
193
|
-
// eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
|
|
194
|
-
this.inputRef().nativeElement.focus();
|
|
195
|
-
}
|
|
196
|
-
onFocusLoss(_) {
|
|
197
|
-
this.onTouched();
|
|
198
|
-
}
|
|
199
|
-
/* eslint-enable */
|
|
200
|
-
handleKey(e) {
|
|
201
|
-
const handler = this.keyHandlerMap[e.key];
|
|
202
|
-
handler?.(e);
|
|
203
|
-
}
|
|
204
|
-
setFocusByValue(value) {
|
|
205
|
-
const options = this.displayedOptions();
|
|
206
|
-
const foundIndex = options.findIndex(opt => opt.value === value);
|
|
207
|
-
const finalIndex = foundIndex === -1 ? 0 : foundIndex;
|
|
208
|
-
this.focusedIndex.set(finalIndex);
|
|
209
|
-
}
|
|
210
|
-
moveFocused(direction) {
|
|
211
|
-
const options = this.displayedOptions();
|
|
212
|
-
const index = this.focusedIndex();
|
|
213
|
-
const clampIndex = (n) => {
|
|
214
|
-
if (n < 0) {
|
|
215
|
-
return options.length - 1;
|
|
216
|
-
}
|
|
217
|
-
else if (n >= options.length) {
|
|
218
|
-
return 0;
|
|
219
|
-
}
|
|
220
|
-
return n;
|
|
221
|
-
};
|
|
222
|
-
const indexChange = direction === 'up' ? -1 : 1;
|
|
223
|
-
const newIndex = clampIndex(index + indexChange);
|
|
224
|
-
this.focusedIndex.set(newIndex);
|
|
225
|
-
const newlyFocused = this.displayedOptions()[this.focusedIndex()];
|
|
226
|
-
// eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
|
|
227
|
-
newlyFocused.scrollIntoView();
|
|
228
|
-
}
|
|
229
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTypeaheadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
230
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FwTypeaheadComponent, isStandalone: true, selector: "fw-typeahead", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, optionsInput: { classPropertyName: "optionsInput", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, maxOptionsHeight: { classPropertyName: "maxOptionsHeight", publicName: "maxOptionsHeight", isSignal: true, isRequired: false, transformFunction: null }, minOptionsHeight: { classPropertyName: "minOptionsHeight", publicName: "minOptionsHeight", isSignal: true, isRequired: false, transformFunction: null }, optionsWidth: { classPropertyName: "optionsWidth", publicName: "optionsWidth", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null }, allowNew: { classPropertyName: "allowNew", publicName: "allowNew", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loading: "loadingChange", disabled: "disabledChange", value: "valueChange", searchValue: "searchValueChange" }, host: { listeners: { "document:click": "outsideClick()", "click": "onClick($event)" } }, providers: [
|
|
231
|
-
{
|
|
232
|
-
provide: NG_VALUE_ACCESSOR,
|
|
233
|
-
useExisting: forwardRef(() => FwTypeaheadComponent),
|
|
234
|
-
multi: true,
|
|
235
|
-
},
|
|
236
|
-
], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true, isSignal: true }, { propertyName: "displayedOptions", predicate: FwMenuItemComponent, descendants: true, isSignal: true }, { propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n (click)=\"focusInput($event)\"\n class=\"input-container\"\n [ngClass]=\"{ 'disabled': disabled() }\"\n [style.max-height]=\"maxHeight()\"\n [cdkMenuTriggerFor]=\"menuContent\"\n fwMenuRegister\n #inputContainer>\n <fw-chip-list class=\"chips\" [disableOverflow]=\"!!maxHeight()\">\n @for(val of value(); track val) {\n <fw-chip\n color=\"primary\"\n [showClose]=\"true\"\n [title]=\"val\"\n [selectable]=\"false\"\n (close)=\"closeChip(val)\"\n />\n }\n </fw-chip-list>\n <input\n test-id=\"typeahead-input\"\n [placeholder]=\"showPlaceholder() ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [value]=\"searchValue()\"\n (keyup)=\"handleSearchChange($event)\"\n (keydown)=\"handleKey($event)\"\n (focusout)=\"onFocusLoss($event)\"\n #input\n type=\"text\"\n />\n @if(loading()) {\n <fw-progress-spinner size=\"small\"/>\n }\n</div>\n<ng-template #menuContent>\n <fw-menu-container\n [maxHeight]=\"maxOptionsHeight()\"\n [minHeight]=\"minOptionsHeight()\"\n [width]=\"optionsWidth() || inputContainer.offsetWidth - 2 + 'px'\"\n >\n <fw-menu>\n @if(loading() && !displayNewOption()) {\n <fw-menu-item title=\"Searching...\" [disabled]=\"true\"/>\n } @else if(!loading()) {\n @for (option of filteredOptions(); track option) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(option)\"\n [title]=\"option\"\n [focused]=\"focusedOption() === option\"\n [value]=\"option\"\n />\n }\n @empty {\n @if (!displayNewOption()) {\n <fw-menu-item title=\"No tag suggestions\" [disabled]=\"true\"/>\n }\n }\n }\n @if(displayNewOption()) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(searchValue())\"\n [title]=\"searchValue()\"\n [value]=\"searchValue()\"\n [focused]=\"focusedOption() === searchValue()\">\n <p class=\"new-tag\">New</p>\n </fw-menu-item>\n }\n </fw-menu>\n </fw-menu-container>\n</ng-template>\n", styles: [".new-tag{margin:0;color:var(--typography-light)}:host.disabled{cursor:not-allowed}:host.disabled fw-icon{cursor:not-allowed!important}:host{display:flex;flex-direction:column;width:100%;line-height:21px}:host .chips,:host fw-progress-spinner{margin:-4px 0}:host .input-container{width:100%;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:8px;row-gap:8px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);font-family:Inter,sans-serif;flex-wrap:wrap;overflow-y:auto}:host .input-container:focus-within{border:1px solid var(--primary-base)}:host .input-container input{min-width:80px;font-size:14px;flex:1 1 80px;color:var(--typography-base);background:var(--page-light);border:none}:host .input-container input:focus{outline:none;border:none}:host .input-container input::placeholder{color:var(--typography-light)}:host .input-container .context{color:var(--typography-light)}:host.errored .input-container,:host.ng-touched.ng-invalid .input-container{border:1px solid var(--red-base)}.disabled{opacity:.4;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: FwTextInputModule }, { kind: "ngmodule", type: FwChipModule }, { kind: "component", type: i1.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "textWrap", "selectable"], outputs: ["close", "select"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FwMenuModule }, { kind: "component", type: i2.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value"], outputs: ["change"] }, { kind: "component", type: i3.FwMenuContainerComponent, selector: "fw-menu-container, fw-menu-filter", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "focusFilterOnMount", "offset", "emptyText", "filterFn", "additionalMenuItems", "keyHandler"], outputs: ["filteredMenuItemChange", "filterChanged"] }, { kind: "component", type: i4.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "mouseEnterHandler", "focused", "selected"], outputs: ["mouseEnterHandlerChange", "click"] }, { kind: "ngmodule", type: CdkMenuModule }, { kind: "directive", type: i5.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: MenuRegisterDirective, selector: "[fwMenuRegister]" }, { kind: "ngmodule", type: FwProgressModule }, { kind: "component", type: i6.FwProgressSpinnerComponent, selector: "fw-progress-spinner", inputs: ["mode", "size", "color", "showValue", "value"] }, { kind: "component", type: FwChipListComponent, selector: "fw-chip-list", inputs: ["resizeDebounceMs", "disableOverflow"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
237
|
-
}
|
|
238
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTypeaheadComponent, decorators: [{
|
|
239
|
-
type: Component,
|
|
240
|
-
args: [{ selector: 'fw-typeahead', standalone: true, imports: [
|
|
241
|
-
FwTextInputModule,
|
|
242
|
-
FwChipModule,
|
|
243
|
-
ReactiveFormsModule,
|
|
244
|
-
FwMenuModule,
|
|
245
|
-
CdkMenuModule,
|
|
246
|
-
MenuRegisterDirective,
|
|
247
|
-
FwProgressModule,
|
|
248
|
-
FwChipListComponent,
|
|
249
|
-
NgClass,
|
|
250
|
-
], providers: [
|
|
251
|
-
{
|
|
252
|
-
provide: NG_VALUE_ACCESSOR,
|
|
253
|
-
useExisting: forwardRef(() => FwTypeaheadComponent),
|
|
254
|
-
multi: true,
|
|
255
|
-
},
|
|
256
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n (click)=\"focusInput($event)\"\n class=\"input-container\"\n [ngClass]=\"{ 'disabled': disabled() }\"\n [style.max-height]=\"maxHeight()\"\n [cdkMenuTriggerFor]=\"menuContent\"\n fwMenuRegister\n #inputContainer>\n <fw-chip-list class=\"chips\" [disableOverflow]=\"!!maxHeight()\">\n @for(val of value(); track val) {\n <fw-chip\n color=\"primary\"\n [showClose]=\"true\"\n [title]=\"val\"\n [selectable]=\"false\"\n (close)=\"closeChip(val)\"\n />\n }\n </fw-chip-list>\n <input\n test-id=\"typeahead-input\"\n [placeholder]=\"showPlaceholder() ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [value]=\"searchValue()\"\n (keyup)=\"handleSearchChange($event)\"\n (keydown)=\"handleKey($event)\"\n (focusout)=\"onFocusLoss($event)\"\n #input\n type=\"text\"\n />\n @if(loading()) {\n <fw-progress-spinner size=\"small\"/>\n }\n</div>\n<ng-template #menuContent>\n <fw-menu-container\n [maxHeight]=\"maxOptionsHeight()\"\n [minHeight]=\"minOptionsHeight()\"\n [width]=\"optionsWidth() || inputContainer.offsetWidth - 2 + 'px'\"\n >\n <fw-menu>\n @if(loading() && !displayNewOption()) {\n <fw-menu-item title=\"Searching...\" [disabled]=\"true\"/>\n } @else if(!loading()) {\n @for (option of filteredOptions(); track option) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(option)\"\n [title]=\"option\"\n [focused]=\"focusedOption() === option\"\n [value]=\"option\"\n />\n }\n @empty {\n @if (!displayNewOption()) {\n <fw-menu-item title=\"No tag suggestions\" [disabled]=\"true\"/>\n }\n }\n }\n @if(displayNewOption()) {\n <fw-menu-item\n (click)=\"handleOptionClick($event)\"\n (mouseenter)=\"setFocusByValue(searchValue())\"\n [title]=\"searchValue()\"\n [value]=\"searchValue()\"\n [focused]=\"focusedOption() === searchValue()\">\n <p class=\"new-tag\">New</p>\n </fw-menu-item>\n }\n </fw-menu>\n </fw-menu-container>\n</ng-template>\n", styles: [".new-tag{margin:0;color:var(--typography-light)}:host.disabled{cursor:not-allowed}:host.disabled fw-icon{cursor:not-allowed!important}:host{display:flex;flex-direction:column;width:100%;line-height:21px}:host .chips,:host fw-progress-spinner{margin:-4px 0}:host .input-container{width:100%;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:8px;row-gap:8px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);font-family:Inter,sans-serif;flex-wrap:wrap;overflow-y:auto}:host .input-container:focus-within{border:1px solid var(--primary-base)}:host .input-container input{min-width:80px;font-size:14px;flex:1 1 80px;color:var(--typography-base);background:var(--page-light);border:none}:host .input-container input:focus{outline:none;border:none}:host .input-container input::placeholder{color:var(--typography-light)}:host .input-container .context{color:var(--typography-light)}:host.errored .input-container,:host.ng-touched.ng-invalid .input-container{border:1px solid var(--red-base)}.disabled{opacity:.4;pointer-events:none}\n"] }]
|
|
257
|
-
}], propDecorators: { outsideClick: [{
|
|
258
|
-
type: HostListener,
|
|
259
|
-
args: ['document:click']
|
|
260
|
-
}], onClick: [{
|
|
261
|
-
type: HostListener,
|
|
262
|
-
args: ['click', ['$event']]
|
|
263
|
-
}] } });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3R5cGVhaGVhZC90eXBlYWhlYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHlwZWFoZWFkL3R5cGVhaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENB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QUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLE9BQU87cUJBQ1IsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU07OEJBR2YsWUFBWTtzQkFBM0MsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBK0JLLE9BQU87c0JBQXpDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrTWVudU1vZHVsZSwgQ2RrTWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbWVudSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbiAgdmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBNZW51UmVnaXN0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21lbnUtcmVnaXN0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZ3Q2hpcE1vZHVsZSB9IGZyb20gJy4uL2NoaXAvY2hpcC5tb2R1bGUnO1xuaW1wb3J0IHsgRndDaGlwTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2NoaXAtbGlzdC9jaGlwLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3TWVudU1vZHVsZSB9IGZyb20gJy4uL21lbnUvbWVudS5tb2R1bGUnO1xuaW1wb3J0IHsgRndNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndQcm9ncmVzc01vZHVsZSB9IGZyb20gJy4uL3Byb2dyZXNzL3Byb2dyZXNzLm1vZHVsZSc7XG5pbXBvcnQgeyBGd1RleHRJbnB1dE1vZHVsZSB9IGZyb20gJy4uL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5tb2R1bGUnO1xuXG50eXBlIE9wdGlvbkZldGNoaW5nRm4gPSAoc2VhcmNoU3RyaW5nOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgaGF2aW5nIGEgdXNlciBzZWxlY3QgbXVsdGlwbGUgdmFsdWVzIHdoaWxlIGFsc28gYWxsb3dpbmcgYXJiaXRyYXJ5IHZhbHVlcyB0byBiZSBhZGRlZFxuICogQHNlZSBbVmlzaW9uIERvY3NdKGh0dHBzOi8vY2RuLmZseXdoZWVsLmlvL2RvY3MvdmlzaW9uL21hc3Rlci8/cGF0aD0vZG9jcy9mb3JtLWNvbnRyb2xzLXR5cGVhaGVhZC0tZG9jcylcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctdHlwZWFoZWFkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZ3VGV4dElucHV0TW9kdWxlLFxuICAgIEZ3Q2hpcE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZ3TWVudU1vZHVsZSxcbiAgICBDZGtNZW51TW9kdWxlLFxuICAgIE1lbnVSZWdpc3RlckRpcmVjdGl2ZSxcbiAgICBGd1Byb2dyZXNzTW9kdWxlLFxuICAgIEZ3Q2hpcExpc3RDb21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd1R5cGVhaGVhZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3R5cGVhaGVhZC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGd1R5cGVhaGVhZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKSBvdXRzaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgICB0aGlzLnRyaWdnZXIoKS5jbG9zZSgpO1xuICB9XG5cbiAgdHJpZ2dlciA9IHZpZXdDaGlsZChDZGtNZW51VHJpZ2dlcik7XG4gIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgbG9hZGluZyA9IG1vZGVsKGZhbHNlKTtcbiAgZGlzYWJsZWQgPSBtb2RlbChmYWxzZSk7XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKGluY29taW5nVmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZS5zZXQoaW5jb21pbmdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZSA9IChfOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2VGbik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZUZuO1xuICB9XG5cbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZEZuKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWRGbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICB2YWx1ZSA9IG1vZGVsPHN0cmluZ1tdPihbXSk7XG4gIHZhbHVlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnZhbHVlKTtcbiAgb3B0aW9uc0lucHV0ID0gaW5wdXQ8c3RyaW5nW10gfCBPcHRpb25GZXRjaGluZ0ZuPihbXSwgeyBhbGlhczogJ29wdGlvbnMnIH0pO1xuICBvcHRpb25zSW5wdXQkID0gdG9PYnNlcnZhYmxlKHRoaXMub3B0aW9uc0lucHV0KTtcblxuICBtYXhPcHRpb25zSGVpZ2h0ID0gaW5wdXQoJzQwMHB4Jyk7XG4gIG1pbk9wdGlvbnNIZWlnaHQgPSBpbnB1dCgnMHB4Jyk7XG4gIG9wdGlvbnNXaWR0aCA9IGlucHV0KCcnKTtcbiAgbWF4SGVpZ2h0ID0gaW5wdXQoJycpO1xuXG4gIG5vdGlmeU9uVmFsdWVDaGFuZ2VzID0gZWZmZWN0KCgpID0+IHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUoKSk7XG4gIH0pO1xuXG4gIHNlYXJjaFZhbHVlID0gbW9kZWwoJycpO1xuICBzZWFyY2hWYWx1ZUNoYW5nZXMkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VhcmNoVmFsdWUpO1xuXG4gIGhhbmRsZVNlYXJjaENoYW5nZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXIoKS5jbG9zZWQpIHtcbiAgICAgIHRoaXMudHJpZ2dlcigpLm9wZW4oKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGFsbG93TmV3ID0gaW5wdXQodHJ1ZSk7XG4gIHBsYWNlaG9sZGVyID0gaW5wdXQoJ0VudGVyIHRhZ3MuLi4nKTtcbiAgc2hvd1BsYWNlaG9sZGVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52YWx1ZSgpLmxlbmd0aCA9PT0gMCk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgYWZ0ZXIgdGhleSd2ZSBiZWVuIGJvdGggZmlsdGVyZWQgZm9yIG1hdGNoaW5nIHRoZSBzZWFyY2ggYW5kIGFscmVhZHkgc2VsZWN0ZWRcbiAgICovXG4gIGZpbHRlcmVkT3B0aW9ucyQ6IE9ic2VydmFibGU8c3RyaW5nW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZXMkLFxuICAgIHRoaXMub3B0aW9uc0lucHV0JCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldCh0cnVlKSksXG5cbiAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgaXQncyBhIGZ1bmN0aW9uIG9yIHN0YXRpYyBvcHRpb25zXG4gICAgc3dpdGNoTWFwKChbc2VhcmNoU3RyaW5nLCBvcHRpb25JbnB1dF0pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uSW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hpbmdGdW5jdGlvbiA9IG9wdGlvbklucHV0IGFzIE9wdGlvbkZldGNoaW5nRm47XG4gICAgICAgIHJldHVybiBmZXRjaGluZ0Z1bmN0aW9uKHNlYXJjaFN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGV5J3JlIHN0YXRpYyBvcHRpb25zIHdlIG5lZWQgdG8gZG8gdGhlIHNlYXJjaCBmaWx0ZXJpbmdcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25JbnB1dCA9IG9wdGlvbklucHV0Py5maWx0ZXIob3B0ID0+IG9wdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHJldHVybiBvZihmaWx0ZXJlZE9wdGlvbklucHV0KTtcbiAgICAgIH1cblxuICAgIH0pLFxuXG4gICAgLy8gbmV4dCBmaWx0ZXIgb3V0IGFscmVhZHkgc2VsZWN0ZWQgdmFsdWVzXG4gICAgc3dpdGNoTWFwKG9wdGlvbnMgPT4gY29tYmluZUxhdGVzdChbb2Yob3B0aW9ucyksIHRoaXMudmFsdWUkXSkpLFxuICAgIG1hcCgoW29wdGlvbnMsIGN1cnJlbnRWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBvcHRpb25zPy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gY3VycmVudFZhbHVlLmZpbmQodmFsID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBvcHRpb24udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHJldHVybiAhYWxyZWFkeVNlbGVjdGVkO1xuICAgICAgfSk7XG4gICAgfSksXG5cbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nLnNldChmYWxzZSkpLFxuICApO1xuICAvKipcbiAgICogT3B0aW9ucyBhZnRlciB0aGV5J3ZlIGJlZW4gYm90aCBmaWx0ZXJlZCBmb3IgbWF0Y2hpbmcgdGhlIHNlYXJjaCBhbmQgYWxyZWFkeSBzZWxlY3RlZFxuICAgKi9cbiAgZmlsdGVyZWRPcHRpb25zID0gdG9TaWduYWwodGhpcy5maWx0ZXJlZE9wdGlvbnMkKTtcblxuXG4gIGNsb3NlQ2hpcChjaGlwVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGN1cnJlbnRWYWx1ZS5maWx0ZXIodmFsID0+IHZhbCAhPT0gY2hpcFZhbHVlKTtcbiAgICB0aGlzLnZhbHVlLnNldChuZXdWYWx1ZSk7XG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL25vLWV4cGxpY2l0LWNoYW5nZS1kZXRlY3Rpb24tYXBpc1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZGlzcGxheU5ld09wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUoKTtcblxuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3RNYXRjaCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zKCk/LmluY2x1ZGVzPy4obmV3VmFsdWUpO1xuICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmxvYWRpbmcoKTtcbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSBCb29sZWFuKHRoaXMudmFsdWUoKS5maW5kKHZhbCA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKSkpO1xuXG5cbiAgICByZXR1cm4gdGhpcy5hbGxvd05ldygpICYmICFhbHJlYWR5U2VsZWN0ZWQgJiYgKCFkaXJlY3RNYXRjaCB8fCBsb2FkaW5nKTtcbiAgfSk7XG5cbiAgYWRkVmFsdWUgPSAobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuXG4gICAgY29uc3QgaXNJbk9wdGlvbnMgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmluY2x1ZGVzKG5ld1ZhbHVlKTtcbiAgICBjb25zdCBpc05ld1doaWxlRGlzYWxsb3dlZCA9ICF0aGlzLmFsbG93TmV3KCkgJiYgIWlzSW5PcHRpb25zO1xuXG4gICAgY29uc3QgaXNEdXBsaWNhdGUgPSB0aGlzLnZhbHVlKCkuaW5jbHVkZXMobmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoaXNOZXdXaGlsZURpc2FsbG93ZWQgfHwgaXNEdXBsaWNhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlLnVwZGF0ZShwcmV2VmFsdWUgPT4gW1xuICAgICAgLi4ucHJldlZhbHVlIHx8IFtdLFxuICAgICAgbmV3VmFsdWUsXG4gICAgXSk7XG4gIH07XG5cbiAgaGFuZGxlT3B0aW9uQ2xpY2sgPSAob3B0aW9uVmFsdWUpOiB2b2lkID0+IHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuYWRkVmFsdWUob3B0aW9uVmFsdWUpO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KCcnKTtcbiAgfTtcblxuICByZXNldEZvY3VzT25PcHRpb25zQ2hhbmdlID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRPcHRpb25zKCkgfHwgdGhpcy5zZWFyY2hWYWx1ZSgpKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoMCk7XG4gICAgfVxuICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gIGRpc3BsYXllZE9wdGlvbnMgPSB2aWV3Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCk7XG4gIGZvY3VzZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgZm9jdXNlZE9wdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZEluZGV4KCk7XG5cbiAgICBjb25zdCBvbmx5T25lID0gb3B0aW9ucy5sZW5ndGggPT09IDE7XG4gICAgcmV0dXJuIG9ubHlPbmUgPyB0aGlzLnNlYXJjaFZhbHVlKCkgOiBvcHRpb25zW2ZvY3VzZWRdPy52YWx1ZTtcbiAgfSk7XG5cbiAgaW5wdXRSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2lucHV0Jyk7XG5cbiAgZm9jdXNJbnB1dChlOiBNb3VzZUV2ZW50ID0gbnVsbCk6IHZvaWQge1xuICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZT8uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL3ByZWZlci1uby1sYXlvdXQtc2Vuc2l0aXZlLWFwaXNcbiAgICB0aGlzLmlucHV0UmVmKCkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25Gb2N1c0xvc3MoXzogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG4gIGtleUhhbmRsZXJNYXA6IHsgW2tleWNvZGU6IHN0cmluZ106IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkIH0gPSB7XG4gICAgJ0VudGVyJzogKCkgPT4ge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mb2N1c2VkT3B0aW9uKCkgfHwgdGhpcy5zZWFyY2hWYWx1ZSgpO1xuICAgICAgY29uc3QgZHVwbGljYXRlID0gdGhpcy52YWx1ZSgpLmZpbmQodmFsID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBuZXdWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgaWYgKCFuZXdWYWx1ZSB8fCBkdXBsaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUuc2V0KCcnKTtcbiAgICB9LFxuICAgICdBcnJvd0Rvd24nOiAoKSA9PiB7XG4gICAgICB0aGlzLm1vdmVGb2N1c2VkKCdkb3duJyk7XG4gICAgfSxcbiAgICAnQXJyb3dVcCc6ICgpID0+IHtcbiAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ3VwJyk7XG4gICAgfSxcbiAgICAnQmFja3NwYWNlJzogKCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoSXNFbXB0eSA9ICF0aGlzLnNlYXJjaFZhbHVlKCk7IC8vIGFueSBmYWxzeSB2YWx1ZSBpcyBlbXB0eVxuICAgICAgaWYgKHNlYXJjaElzRW1wdHkgJiYgdGhpcy52YWx1ZSgpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDaGlwKHRoaXMudmFsdWUoKVt0aGlzLnZhbHVlKCkubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFzZWFyY2hJc0VtcHR5O1xuICAgIH0sXG4gICAgJ1RhYic6ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXIoKS5pc09wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCkuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICBoYW5kbGVLZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmtleUhhbmRsZXJNYXBbZS5rZXldO1xuICAgIGhhbmRsZXI/LihlKTtcbiAgfVxuXG4gIHNldEZvY3VzQnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpO1xuICAgIGNvbnN0IGZvdW5kSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHQgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgY29uc3QgZmluYWxJbmRleCA9IGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGZvdW5kSW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KGZpbmFsSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNlZChkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuXG4gICAgY29uc3QgY2xhbXBJbmRleCA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKG4gPj0gb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmRleENoYW5nZSA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGluZGV4Q2hhbmdlKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQobmV3SW5kZXgpO1xuXG4gICAgY29uc3QgbmV3bHlGb2N1c2VkID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKClbdGhpcy5mb2N1c2VkSW5kZXgoKV07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgIG5ld2x5Rm9jdXNlZC5zY3JvbGxJbnRvVmlldygpO1xuICB9XG5cbn1cbiIsIjxkaXZcbiAgKGNsaWNrKT1cImZvY3VzSW5wdXQoJGV2ZW50KVwiXG4gIGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCJcbiAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQnOiBkaXNhYmxlZCgpIH1cIlxuICBbc3R5bGUubWF4LWhlaWdodF09XCJtYXhIZWlnaHQoKVwiXG4gIFtjZGtNZW51VHJpZ2dlckZvcl09XCJtZW51Q29udGVudFwiXG4gIGZ3TWVudVJlZ2lzdGVyXG4gICNpbnB1dENvbnRhaW5lcj5cbiAgPGZ3LWNoaXAtbGlzdCBjbGFzcz1cImNoaXBzXCIgW2Rpc2FibGVPdmVyZmxvd109XCIhIW1heEhlaWdodCgpXCI+XG4gICAgQGZvcih2YWwgb2YgdmFsdWUoKTsgdHJhY2sgdmFsKSB7XG4gICAgICA8ZnctY2hpcFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbc2hvd0Nsb3NlXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVdPVwidmFsXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2UpPVwiY2xvc2VDaGlwKHZhbClcIlxuICAgICAgLz5cbiAgICB9XG4gIDwvZnctY2hpcC1saXN0PlxuICA8aW5wdXRcbiAgICB0ZXN0LWlkPVwidHlwZWFoZWFkLWlucHV0XCJcbiAgICBbcGxhY2Vob2xkZXJdPVwic2hvd1BsYWNlaG9sZGVyKCkgPyBwbGFjZWhvbGRlcigpIDogJydcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWUoKVwiXG4gICAgKGtleXVwKT1cImhhbmRsZVNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXkoJGV2ZW50KVwiXG4gICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNMb3NzKCRldmVudClcIlxuICAgICNpbnB1dFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgLz5cbiAgQGlmKGxvYWRpbmcoKSkge1xuICAgIDxmdy1wcm9ncmVzcy1zcGlubmVyIHNpemU9XCJzbWFsbFwiLz5cbiAgfVxuPC9kaXY+XG48bmctdGVtcGxhdGUgI21lbnVDb250ZW50PlxuICAgIDxmdy1tZW51LWNvbnRhaW5lclxuICAgICAgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0KClcIlxuICAgICAgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0KClcIlxuICAgICAgW3dpZHRoXT1cIm9wdGlvbnNXaWR0aCgpIHx8IGlucHV0Q29udGFpbmVyLm9mZnNldFdpZHRoIC0gMiArICdweCdcIlxuICAgID5cbiAgICAgIDxmdy1tZW51PlxuICAgICAgICBAaWYobG9hZGluZygpICYmICFkaXNwbGF5TmV3T3B0aW9uKCkpIHtcbiAgICAgICAgICA8ZnctbWVudS1pdGVtIHRpdGxlPVwiU2VhcmNoaW5nLi4uXCIgW2Rpc2FibGVkXT1cInRydWVcIi8+XG4gICAgICAgIH0gQGVsc2UgaWYoIWxvYWRpbmcoKSkge1xuICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICA8ZnctbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0Rm9jdXNCeVZhbHVlKG9wdGlvbilcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZE9wdGlvbigpID09PSBvcHRpb25cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbXB0eSB7XG4gICAgICAgICAgICBAaWYgKCFkaXNwbGF5TmV3T3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgPGZ3LW1lbnUtaXRlbSB0aXRsZT1cIk5vIHRhZyBzdWdnZXN0aW9uc1wiIFtkaXNhYmxlZF09XCJ0cnVlXCIvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYoZGlzcGxheU5ld09wdGlvbigpKSB7XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0Rm9jdXNCeVZhbHVlKHNlYXJjaFZhbHVlKCkpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWRPcHRpb24oKSA9PT0gc2VhcmNoVmFsdWUoKVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXctdGFnXCI+TmV3PC9wPlxuICAgICAgICAgIDwvZnctbWVudS1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2Z3LW1lbnU+XG4gICAgPC9mdy1tZW51LWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|