@leanix/components 0.4.20 → 0.4.22
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/{esm2020 → esm2022}/lib/core-ui/components/badge/badge.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/button/button.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/button-group/button-group.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/card/card.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/collapsible/collapsible.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/colored-label/colored-label.component.mjs +4 -4
- package/esm2022/lib/core-ui/components/ellipsis/ellipsis.component.mjs +139 -0
- package/{esm2020 → esm2022}/lib/core-ui/components/file-download-button/file-download-button.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/icon-scale/icon-scale.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/spinner/spinner.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/table/table-header/table-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/table/table.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/core-ui.module.mjs +72 -72
- package/{esm2020 → esm2022}/lib/core-ui/directives/after-view-init.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/autoclose-group.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/autoclose.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/autofocus.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/html.directive.mjs +4 -4
- package/esm2022/lib/core-ui/linkify/linkify.pipe.mjs +144 -0
- package/{esm2020 → esm2022}/lib/core-ui/linkify/unlinkify.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/br.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/contrast-color.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/custom-date.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/highlight-range.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/highlight-term.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-time-ago.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-translate.pipe.mjs +5 -5
- package/{esm2020 → esm2022}/lib/core-ui/pipes/markdown.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/nbsp.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/sort.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-after.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-before.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-between.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/services/resize-observer.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip.component.mjs +4 -4
- package/esm2022/lib/core-ui/tooltip/tooltip.directive.mjs +105 -0
- package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip.module.mjs +5 -5
- package/esm2022/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +120 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/breadcrumb/breadcrumb.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +216 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/copy-button/copy-button.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/currency/currency-input.component.mjs +145 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/currency/currency-symbol.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-input/date-input.component.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +6 -6
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +27 -0
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +205 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +6 -6
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +6 -6
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +6 -6
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +5 -5
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +134 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/error-message/error-message.component.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/form-error/form-error.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/icon/icon.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/input/input.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/keyboard-select.directive.mjs +4 -4
- package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +255 -0
- package/esm2022/lib/forms-ui/components/option/option.component.mjs +84 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/option-group/option-group.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +185 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/picker/picker-trigger.directive.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/components/picker/picker.component.mjs +19 -19
- package/esm2022/lib/forms-ui/components/picker-option/picker-option.component.mjs +118 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/pill-item/pill-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/pill-list/pill-list.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +100 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/select-list/select-list.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/single-select/single-select.component.mjs +279 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/slider-toggle/slider-toggle.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +4 -4
- package/esm2022/lib/forms-ui/directives/contenteditable.directive.mjs +129 -0
- package/esm2022/lib/forms-ui/directives/form-error.directive.mjs +109 -0
- package/{esm2020 → esm2022}/lib/forms-ui/directives/form-submit.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/keyboard-action-source.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/mark-invalid.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/select-dropdown.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/selectable-item.directive.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/directives/selected-option.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/forms-ui.module.mjs +102 -102
- package/{esm2020 → esm2022}/lib/forms-ui/models/base-select.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/pipes/filter-selection.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/pipes/filter-term.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/pipes/format-number.pipe.mjs +4 -4
- package/esm2022/lib/modal-ui/components/modal/modal.component.mjs +213 -0
- package/{esm2020 → esm2022}/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modal-ui/components/modal-header/modal-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modal-ui/directives/modal-content.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modal-ui/modal.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/popover-ui/components/popover/popover.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/popover-ui/directives/popover-click.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/popover-ui/directives/popover-content.directive.mjs +4 -4
- package/esm2022/lib/popover-ui/directives/popover-hover.directive.mjs +87 -0
- package/{esm2020 → esm2022}/lib/popover-ui/popover-ui.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/tab-ui/components/tab/tab.component.mjs +14 -14
- package/esm2022/lib/tab-ui/components/tab-group/tab-group.component.mjs +71 -0
- package/{esm2020 → esm2022}/lib/tab-ui/tab-ui.module.mjs +5 -5
- package/{fesm2020 → fesm2022}/leanix-components.mjs +767 -768
- package/fesm2022/leanix-components.mjs.map +1 -0
- package/lib/core-ui/components/badge/badge.component.d.ts +1 -1
- package/lib/core-ui/components/button/button.component.d.ts +1 -1
- package/lib/core-ui/components/button-group/button-group.component.d.ts +1 -1
- package/lib/core-ui/components/card/card.component.d.ts +1 -1
- package/lib/core-ui/components/collapsible/collapsible.component.d.ts +1 -1
- package/lib/core-ui/components/colored-label/colored-label.component.d.ts +1 -1
- package/lib/core-ui/components/ellipsis/ellipsis.component.d.ts +1 -1
- package/lib/core-ui/components/file-download-button/file-download-button.component.d.ts +1 -1
- package/lib/core-ui/components/icon-scale/icon-scale.component.d.ts +1 -1
- package/lib/core-ui/components/spinner/spinner.component.d.ts +1 -1
- package/lib/core-ui/components/table/table-header/table-header.component.d.ts +1 -1
- package/lib/core-ui/components/table/table.component.d.ts +1 -1
- package/lib/core-ui/directives/autoclose.directive.d.ts +1 -1
- package/lib/core-ui/directives/autofocus.directive.d.ts +1 -1
- package/lib/core-ui/directives/html.directive.d.ts +1 -1
- package/lib/core-ui/pipes/sort.pipe.d.ts +1 -1
- package/lib/core-ui/services/resize-observer.service.d.ts +1 -1
- package/lib/core-ui/tooltip/tooltip.component.d.ts +1 -1
- package/lib/core-ui/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.d.ts +1 -1
- package/lib/forms-ui/components/breadcrumb/breadcrumb.component.d.ts +2 -2
- package/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/copy-button/copy-button.component.d.ts +1 -1
- package/lib/forms-ui/components/currency/currency-input.component.d.ts +4 -4
- package/lib/forms-ui/components/currency/currency-symbol.component.d.ts +1 -1
- package/lib/forms-ui/components/date-input/date-input.component.d.ts +2 -2
- package/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.d.ts +1 -1
- package/lib/forms-ui/components/date-picker-ui/datepicker.component.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.d.ts +1 -1
- package/lib/forms-ui/components/error-message/error-message.component.d.ts +1 -1
- package/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/form-error/form-error.component.d.ts +1 -1
- package/lib/forms-ui/components/icon/icon.component.d.ts +2 -2
- package/lib/forms-ui/components/input/input.component.d.ts +1 -1
- package/lib/forms-ui/components/keyboard-select.directive.d.ts +1 -1
- package/lib/forms-ui/components/multi-select/multi-select.component.d.ts +3 -3
- package/lib/forms-ui/components/option/option.component.d.ts +1 -1
- package/lib/forms-ui/components/option-group/option-group.component.d.ts +1 -1
- package/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.d.ts +3 -3
- package/lib/forms-ui/components/options-dropdown/options-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/picker/picker.component.d.ts +1 -1
- package/lib/forms-ui/components/picker-option/picker-option.component.d.ts +1 -1
- package/lib/forms-ui/components/pill-item/pill-item.component.d.ts +1 -1
- package/lib/forms-ui/components/pill-list/pill-list.component.d.ts +1 -1
- package/lib/forms-ui/components/select-list/select-list.component.d.ts +1 -1
- package/lib/forms-ui/components/single-select/single-select.component.d.ts +2 -2
- package/lib/forms-ui/components/slider-toggle/slider-toggle.component.d.ts +1 -1
- package/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.d.ts +1 -1
- package/lib/forms-ui/directives/contenteditable.directive.d.ts +2 -2
- package/lib/forms-ui/directives/form-error.directive.d.ts +2 -2
- package/lib/forms-ui/directives/mark-invalid.directive.d.ts +1 -1
- package/lib/forms-ui/directives/selectable-item.directive.d.ts +1 -1
- package/lib/forms-ui/models/base-select.directive.d.ts +1 -1
- package/lib/forms-ui/models/single-select-padding.interface.d.ts +1 -1
- package/lib/forms-ui/models/sorting.interface.d.ts +1 -1
- package/lib/modal-ui/components/modal/modal.component.d.ts +1 -1
- package/lib/modal-ui/components/modal-footer/modal-footer.component.d.ts +1 -1
- package/lib/modal-ui/components/modal-header/modal-header.component.d.ts +1 -1
- package/lib/popover-ui/components/popover/popover.component.d.ts +1 -1
- package/lib/popover-ui/directives/popover-click.directive.d.ts +1 -1
- package/lib/popover-ui/directives/popover-hover.directive.d.ts +1 -1
- package/lib/tab-ui/components/tab/tab.component.d.ts +1 -1
- package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +1 -1
- package/package.json +13 -19
- package/esm2020/lib/core-ui/components/ellipsis/ellipsis.component.mjs +0 -139
- package/esm2020/lib/core-ui/linkify/linkify.pipe.mjs +0 -144
- package/esm2020/lib/core-ui/tooltip/tooltip.directive.mjs +0 -105
- package/esm2020/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +0 -120
- package/esm2020/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +0 -216
- package/esm2020/lib/forms-ui/components/currency/currency-input.component.mjs +0 -145
- package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +0 -28
- package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +0 -205
- package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +0 -49
- package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +0 -134
- package/esm2020/lib/forms-ui/components/multi-select/multi-select.component.mjs +0 -255
- package/esm2020/lib/forms-ui/components/option/option.component.mjs +0 -84
- package/esm2020/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +0 -185
- package/esm2020/lib/forms-ui/components/picker-option/picker-option.component.mjs +0 -118
- package/esm2020/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +0 -100
- package/esm2020/lib/forms-ui/components/single-select/single-select.component.mjs +0 -279
- package/esm2020/lib/forms-ui/directives/contenteditable.directive.mjs +0 -129
- package/esm2020/lib/forms-ui/directives/form-error.directive.mjs +0 -109
- package/esm2020/lib/modal-ui/components/modal/modal.component.mjs +0 -213
- package/esm2020/lib/popover-ui/directives/popover-hover.directive.mjs +0 -87
- package/esm2020/lib/tab-ui/components/tab-group/tab-group.component.mjs +0 -71
- package/fesm2015/leanix-components.mjs +0 -8448
- package/fesm2015/leanix-components.mjs.map +0 -1
- package/fesm2020/leanix-components.mjs.map +0 -1
- package/src/lib/forms-ui/components/date-picker-ui/README.md +0 -8
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/leanix-components.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/annotations/required.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/core-ui.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/functions/core-css.helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/tooltip/to-cdk-position.function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip-position.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/isBs3.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/helpers/key-codes.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/models/dropdown-item.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/models/single-select-padding.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/models/sorting.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/validators/string-not-in-array.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modal-ui/modal.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/date-helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/html-helpers.function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/misc-helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/observe.mjs +0 -0
|
@@ -28,5 +28,5 @@ export declare class PillListComponent extends KeyboardSelectDirective implement
|
|
|
28
28
|
removePillViaKeyboard(pill: any): void;
|
|
29
29
|
trackByProp(prop?: string): (index: number, pill: any) => any;
|
|
30
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<PillListComponent, never>;
|
|
31
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PillListComponent, "lx-pill-list", never, { "pills": "pills"; "labelKey": "labelKey"; "itemKey": "itemKey"; "disabled": "disabled"; }, { "remove": "remove"; }, ["pillTemplate", "contentItems"], never, false, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PillListComponent, "lx-pill-list", never, { "pills": { "alias": "pills"; "required": false; }; "labelKey": { "alias": "labelKey"; "required": false; }; "itemKey": { "alias": "itemKey"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "remove": "remove"; }, ["pillTemplate", "contentItems"], never, false, never>;
|
|
32
32
|
}
|
|
@@ -25,5 +25,5 @@ export declare class SelectListComponent extends BaseSelectDirective implements
|
|
|
25
25
|
searchKeyChanged(event: any): void;
|
|
26
26
|
private determineHighlightIndex;
|
|
27
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<SelectListComponent, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SelectListComponent, "lx-select-list", never, { "searchPlaceholder": "searchPlaceholder"; "options": "options"; "selection": "selection"; }, { "selectionChange": "selectionChange"; "onChooseItem": "onChooseItem"; }, ["explicitDropdown", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SelectListComponent, "lx-select-list", never, { "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; }, { "selectionChange": "selectionChange"; "onChooseItem": "onChooseItem"; }, ["explicitDropdown", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
|
|
29
29
|
}
|
|
@@ -5,7 +5,7 @@ import { BaseSelectDirective } from '../../models/base-select.directive';
|
|
|
5
5
|
import { SingleSelectPadding } from '../../models/single-select-padding.interface';
|
|
6
6
|
import { KeyboardSelectAction } from '../keyboard-select.directive';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
export
|
|
8
|
+
export type SingleSelectSize = 'default' | 'small' | 'select2' | 'large';
|
|
9
9
|
export declare class SingleSelectComponent extends BaseSelectDirective implements OnDestroy, AfterViewInit, ControlValueAccessor {
|
|
10
10
|
private cd;
|
|
11
11
|
static calculateNewCursorPostionOnKeyboardNavigation(cursorPosition: number, keyCode: number): number;
|
|
@@ -48,5 +48,5 @@ export declare class SingleSelectComponent extends BaseSelectDirective implement
|
|
|
48
48
|
focusedViaTab(): void;
|
|
49
49
|
private determineHighlightIndex;
|
|
50
50
|
static ɵfac: i0.ɵɵFactoryDeclaration<SingleSelectComponent, never>;
|
|
51
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SingleSelectComponent, "lx-single-select", never, { "selection": "selection"; "selectionBackground": "selectionBackground"; "size": "size"; "dropdownWidthScale": "dropdownWidthScale"; "padding": "padding"; "allowClear": "allowClear"; "tabIndex": "tabIndex"; "markInvalid": "markInvalid"; }, { "selectionChange": "selectionChange"; "blur": "blur"; }, ["explicitDropdown", "explicitSelectedOption", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
|
|
51
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SingleSelectComponent, "lx-single-select", never, { "selection": { "alias": "selection"; "required": false; }; "selectionBackground": { "alias": "selectionBackground"; "required": false; }; "size": { "alias": "size"; "required": false; }; "dropdownWidthScale": { "alias": "dropdownWidthScale"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "markInvalid": { "alias": "markInvalid"; "required": false; }; }, { "selectionChange": "selectionChange"; "blur": "blur"; }, ["explicitDropdown", "explicitSelectedOption", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
|
|
52
52
|
}
|
|
@@ -12,5 +12,5 @@ export declare class SliderToggleComponent {
|
|
|
12
12
|
get id(): string | null;
|
|
13
13
|
focus(checkbox: HTMLInputElement): void;
|
|
14
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<SliderToggleComponent, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SliderToggleComponent, "lx-slider-toggle", never, { "value": "value"; "size": "size"; "disabled": "disabled"; "label": "label"; "labelInFront": "labelInFront"; "elementId": "elementId"; }, { "toggle": "toggle"; }, never, never, false, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SliderToggleComponent, "lx-slider-toggle", never, { "value": { "alias": "value"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "label": { "alias": "label"; "required": false; }; "labelInFront": { "alias": "labelInFront"; "required": false; }; "elementId": { "alias": "elementId"; "required": false; }; }, { "toggle": "toggle"; }, never, never, false, never>;
|
|
16
16
|
}
|
|
@@ -19,5 +19,5 @@ export declare class SortingDropdownComponent implements OnInit {
|
|
|
19
19
|
applySortingDirection(sortDirection: SortingOrder): void;
|
|
20
20
|
getSortLabel(key: string | undefined): string;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<SortingDropdownComponent, never>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownComponent, "lx-sorting-dropdown", never, { "currentSorting": "currentSorting"; "sortingOptions": "sortingOptions"; "showDirectionOptions": "showDirectionOptions"; }, { "apply": "apply"; }, never, never, false, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownComponent, "lx-sorting-dropdown", never, { "currentSorting": { "alias": "currentSorting"; "required": false; }; "sortingOptions": { "alias": "sortingOptions"; "required": false; }; "showDirectionOptions": { "alias": "showDirectionOptions"; "required": false; }; }, { "apply": "apply"; }, never, never, false, never>;
|
|
23
23
|
}
|
package/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export declare class SortingDropdownTriggerComponent {
|
|
|
4
4
|
currentSortingLabel: string;
|
|
5
5
|
disabled: boolean;
|
|
6
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<SortingDropdownTriggerComponent, never>;
|
|
7
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownTriggerComponent, "lx-sorting-dropdown-trigger", never, { "label": "label"; "currentSortingLabel": "currentSortingLabel"; "disabled": "disabled"; }, {}, never, never, false, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownTriggerComponent, "lx-sorting-dropdown-trigger", never, { "label": { "alias": "label"; "required": false; }; "currentSortingLabel": { "alias": "currentSortingLabel"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, false, never>;
|
|
8
8
|
}
|
|
@@ -18,11 +18,11 @@ export declare class ContenteditableDirective implements OnChanges {
|
|
|
18
18
|
* @param event {ClipboardEvent}
|
|
19
19
|
*/
|
|
20
20
|
onPaste(event: any): void;
|
|
21
|
-
onDrop(event: MouseEvent):
|
|
21
|
+
onDrop(event: MouseEvent): boolean;
|
|
22
22
|
private cleanContent;
|
|
23
23
|
private refreshView;
|
|
24
24
|
private getProperty;
|
|
25
25
|
private sanitize;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContenteditableDirective, never>;
|
|
27
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ContenteditableDirective, "[lxContenteditableModel]", never, { "lxContenteditableModel": "lxContenteditableModel"; "lxContenteditableHtml": "lxContenteditableHtml"; "lxContenteditableHtmlPaste": "lxContenteditableHtmlPaste"; }, { "lxContenteditableModelChange": "lxContenteditableModelChange"; }, never, never, false, never>;
|
|
27
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ContenteditableDirective, "[lxContenteditableModel]", never, { "lxContenteditableModel": { "alias": "lxContenteditableModel"; "required": false; }; "lxContenteditableHtml": { "alias": "lxContenteditableHtml"; "required": false; }; "lxContenteditableHtmlPaste": { "alias": "lxContenteditableHtmlPaste"; "required": false; }; }, { "lxContenteditableModelChange": "lxContenteditableModelChange"; }, never, never, false, never>;
|
|
28
28
|
}
|
|
@@ -2,7 +2,7 @@ import { ComponentFactoryResolver, InjectionToken, OnDestroy, OnInit, ViewContai
|
|
|
2
2
|
import { AbstractControl, NgControl } from '@angular/forms';
|
|
3
3
|
import { FormSubmitDirective } from './form-submit.directive';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export
|
|
5
|
+
export type FormControlErrorDisplayStrategy = (obj: {
|
|
6
6
|
control: AbstractControl;
|
|
7
7
|
submitted?: boolean;
|
|
8
8
|
}) => boolean;
|
|
@@ -36,5 +36,5 @@ export declare class FormErrorDirective implements OnInit, OnDestroy {
|
|
|
36
36
|
private setError;
|
|
37
37
|
ngOnDestroy(): void;
|
|
38
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormErrorDirective, [null, null, { optional: true; self: true; }, { optional: true; host: true; }, { optional: true; }, { optional: true; }]>;
|
|
39
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FormErrorDirective, "[lxFormError]", never, { "ctrl": "lxFormError"; "controlName": "controlName"; }, {}, never, never, false, never>;
|
|
39
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FormErrorDirective, "[lxFormError]", never, { "ctrl": { "alias": "lxFormError"; "required": false; }; "controlName": { "alias": "controlName"; "required": false; }; }, {}, never, never, false, never>;
|
|
40
40
|
}
|
|
@@ -11,5 +11,5 @@ export declare class MarkInvalidDirective implements OnInit, OnDestroy {
|
|
|
11
11
|
ngOnInit(): void;
|
|
12
12
|
ngOnDestroy(): void;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<MarkInvalidDirective, never>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<MarkInvalidDirective, "[lxMarkInvalid]", never, { "lxMarkInvalid": "lxMarkInvalid"; }, {}, never, never, false, never>;
|
|
14
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<MarkInvalidDirective, "[lxMarkInvalid]", never, { "lxMarkInvalid": { "alias": "lxMarkInvalid"; "required": false; }; }, {}, never, never, false, never>;
|
|
15
15
|
}
|
|
@@ -11,5 +11,5 @@ export declare class SelectableItemDirective implements OnDestroy, DropdownItem
|
|
|
11
11
|
ngOnDestroy(): void;
|
|
12
12
|
scrollToItem(): void;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<SelectableItemDirective, never>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<SelectableItemDirective, "[lxSelectableItem]", never, { "scrollInContainer": "scrollInContainer"; "lxSelectableItem": "lxSelectableItem"; }, { "select": "select"; }, never, never, false, never>;
|
|
14
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<SelectableItemDirective, "[lxSelectableItem]", never, { "scrollInContainer": { "alias": "scrollInContainer"; "required": false; }; "lxSelectableItem": { "alias": "lxSelectableItem"; "required": false; }; }, { "select": "select"; }, never, never, false, never>;
|
|
15
15
|
}
|
|
@@ -52,5 +52,5 @@ export declare abstract class BaseSelectDirective implements AfterViewInit, OnCh
|
|
|
52
52
|
protected selectFirstOption(): void;
|
|
53
53
|
private notifyDropdownBase;
|
|
54
54
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseSelectDirective, never>;
|
|
55
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseSelectDirective, never, never, { "placeholder": "placeholder"; "disabled": "disabled"; "focusOnInit": "focusOnInit"; "dropdownMaxHeight": "dropdownMaxHeight"; "allowQuery": "allowQuery"; }, { "query": "query"; "close": "close"; "open": "open"; }, ["dropdownBase"], never, false, never>;
|
|
55
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseSelectDirective, never, never, { "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "focusOnInit": { "alias": "focusOnInit"; "required": false; }; "dropdownMaxHeight": { "alias": "dropdownMaxHeight"; "required": false; }; "allowQuery": { "alias": "allowQuery"; "required": false; }; }, { "query": "query"; "close": "close"; "open": "open"; }, ["dropdownBase"], never, false, never>;
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type SingleSelectPadding = 'default' | 'narrow';
|
|
@@ -59,5 +59,5 @@ export declare class ModalComponent implements OnChanges, OnInit, OnDestroy, Aft
|
|
|
59
59
|
closeModal(closeLocation: ModalCloseClickLocation | boolean): Promise<void>;
|
|
60
60
|
private trapFocusInModal;
|
|
61
61
|
static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, [null, null, { optional: true; }, null]>;
|
|
62
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "lx-modal", never, { "open": "open"; "showCloseButton": "showCloseButton"; "showBackButton": "showBackButton"; "verticalScroll": "verticalScroll"; "size": "size"; "minWidth": "minWidth"; "isFocusTrap": "isFocusTrap"; "canModalBeClosed": "canModalBeClosed"; }, { "close": "close"; "back": "back"; }, ["header", "footer", "explicitContent"], ["lx-modal-header", "lx-modal-footer", "*"], false, never>;
|
|
62
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "lx-modal", never, { "open": { "alias": "open"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "showBackButton": { "alias": "showBackButton"; "required": false; }; "verticalScroll": { "alias": "verticalScroll"; "required": false; }; "size": { "alias": "size"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "isFocusTrap": { "alias": "isFocusTrap"; "required": false; }; "canModalBeClosed": { "alias": "canModalBeClosed"; "required": false; }; }, { "close": "close"; "back": "back"; }, ["header", "footer", "explicitContent"], ["lx-modal-header", "lx-modal-footer", "*"], false, never>;
|
|
63
63
|
}
|
|
@@ -2,5 +2,5 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
export declare class ModalFooterComponent {
|
|
3
3
|
border: boolean;
|
|
4
4
|
static ɵfac: i0.ɵɵFactoryDeclaration<ModalFooterComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ModalFooterComponent, "lx-modal-footer", never, { "border": "border"; }, {}, never, ["*"], false, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalFooterComponent, "lx-modal-footer", never, { "border": { "alias": "border"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
6
6
|
}
|
|
@@ -3,5 +3,5 @@ export declare class ModalHeaderComponent {
|
|
|
3
3
|
title: string;
|
|
4
4
|
bottomBorder: boolean;
|
|
5
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<ModalHeaderComponent, never>;
|
|
6
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ModalHeaderComponent, "lx-modal-header", never, { "title": "title"; "bottomBorder": "bottomBorder"; }, {}, never, ["*"], false, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalHeaderComponent, "lx-modal-header", never, { "title": { "alias": "title"; "required": false; }; "bottomBorder": { "alias": "bottomBorder"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
7
7
|
}
|
|
@@ -93,5 +93,5 @@ export declare class PopoverComponent implements OnChanges {
|
|
|
93
93
|
private getMarginClassesForClassList;
|
|
94
94
|
private getDefaultMarginClasses;
|
|
95
95
|
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverComponent, never>;
|
|
96
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "lx-popover", never, { "trigger": "trigger"; "horizontalAlign": "horizontalAlign"; "verticalAlign": "verticalAlign"; "noMargin": "noMargin"; "allowOverflow": "allowOverflow"; "autoFocus": "autoFocus"; "restoreFocus": "restoreFocus"; "adaptMarginsForViewportAlignChange": "adaptMarginsForViewportAlignChange"; }, { "opened": "opened"; "closed": "closed"; }, ["explicitContent"], ["*"], false, never>;
|
|
96
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "lx-popover", never, { "trigger": { "alias": "trigger"; "required": false; }; "horizontalAlign": { "alias": "horizontalAlign"; "required": false; }; "verticalAlign": { "alias": "verticalAlign"; "required": false; }; "noMargin": { "alias": "noMargin"; "required": false; }; "allowOverflow": { "alias": "allowOverflow"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "restoreFocus": { "alias": "restoreFocus"; "required": false; }; "adaptMarginsForViewportAlignChange": { "alias": "adaptMarginsForViewportAlignChange"; "required": false; }; }, { "opened": "opened"; "closed": "closed"; }, ["explicitContent"], ["*"], false, never>;
|
|
97
97
|
}
|
|
@@ -19,5 +19,5 @@ export declare class PopoverClickDirective implements PopoverTriggerDirective, A
|
|
|
19
19
|
showPopover(): void;
|
|
20
20
|
closePopover(): void;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverClickDirective, never>;
|
|
22
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverClickDirective, "[lxPopoverClick]", ["clickAnchor"], { "lxPopoverPinned": "lxPopoverPinned"; }, {}, never, never, false, never>;
|
|
22
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverClickDirective, "[lxPopoverClick]", ["clickAnchor"], { "lxPopoverPinned": { "alias": "lxPopoverPinned"; "required": false; }; }, {}, never, never, false, never>;
|
|
23
23
|
}
|
|
@@ -34,5 +34,5 @@ export declare class PopoverHoverDirective implements AfterViewInit, OnDestroy {
|
|
|
34
34
|
showPopover(skipDelay?: boolean): void;
|
|
35
35
|
closePopover(skipDelay?: boolean): void;
|
|
36
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverHoverDirective, never>;
|
|
37
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverHoverDirective, "[lxPopoverHover]", ["hoverAnchor"], { "lxPopoverHover": "lxPopoverHover"; "skipCloseDelay": "skipCloseDelay"; }, {}, never, never, false, never>;
|
|
37
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverHoverDirective, "[lxPopoverHover]", ["hoverAnchor"], { "lxPopoverHover": { "alias": "lxPopoverHover"; "required": false; }; "skipCloseDelay": { "alias": "skipCloseDelay"; "required": false; }; }, {}, never, never, false, never>;
|
|
38
38
|
}
|
|
@@ -30,5 +30,5 @@ export declare class TabComponent {
|
|
|
30
30
|
private _isActive;
|
|
31
31
|
constructor(cd: ChangeDetectorRef);
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
|
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "lx-tab", never, { "icon": "icon"; "label": "label"; "title": "title"; "tabLink": "tabLink"; "counter": "counter"; "routerLinkActiveOptions": "routerLinkActiveOptions"; "counterBadgeSize": "counterBadgeSize"; "noMargin": "noMargin"; "noLeftMarginForFirstTab": "noLeftMarginForFirstTab"; "background": "background"; "disabled": "disabled"; }, { "switch": "switch"; }, never, ["*"], false, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "lx-tab", never, { "icon": { "alias": "icon"; "required": false; }; "label": { "alias": "label"; "required": false; }; "title": { "alias": "title"; "required": false; }; "tabLink": { "alias": "tabLink"; "required": false; }; "counter": { "alias": "counter"; "required": false; }; "routerLinkActiveOptions": { "alias": "routerLinkActiveOptions"; "required": false; }; "counterBadgeSize": { "alias": "counterBadgeSize"; "required": false; }; "noMargin": { "alias": "noMargin"; "required": false; }; "noLeftMarginForFirstTab": { "alias": "noLeftMarginForFirstTab"; "required": false; }; "background": { "alias": "background"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "switch": "switch"; }, never, ["*"], false, never>;
|
|
34
34
|
}
|
|
@@ -17,5 +17,5 @@ export declare class TabGroupComponent implements OnChanges, AfterContentInit, O
|
|
|
17
17
|
ngOnDestroy(): void;
|
|
18
18
|
switchTo(tab: TabComponent): void;
|
|
19
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<TabGroupComponent, never>;
|
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "lx-tab-group", never, { "isCentered": "isCentered"; "selectedIndex": "selectedIndex"; }, { "indexChange": "indexChange"; }, ["tabsQueryList"], ["*"], false, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "lx-tab-group", never, { "isCentered": { "alias": "isCentered"; "required": false; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; }; }, { "indexChange": "indexChange"; }, ["tabsQueryList"], ["*"], false, never>;
|
|
21
21
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leanix/components",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.22",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "LeanIX GmbH",
|
|
6
6
|
"repository": {
|
|
@@ -18,26 +18,22 @@
|
|
|
18
18
|
"tslib": "^2.3.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"@angular/animations": "^
|
|
22
|
-
"@angular/cdk": "^
|
|
23
|
-
"@angular/common": "^
|
|
24
|
-
"@angular/core": "^
|
|
25
|
-
"@angular/forms": "^
|
|
26
|
-
"@angular/platform-browser": "^
|
|
27
|
-
"@angular/router": "^
|
|
21
|
+
"@angular/animations": "^16.1.5",
|
|
22
|
+
"@angular/cdk": "^16.1.5",
|
|
23
|
+
"@angular/common": "^16.1.5",
|
|
24
|
+
"@angular/core": "^16.1.5",
|
|
25
|
+
"@angular/forms": "^16.1.5",
|
|
26
|
+
"@angular/platform-browser": "^16.1.5",
|
|
27
|
+
"@angular/router": "^16.1.5",
|
|
28
28
|
"@ngx-translate/core": "^11.0.1",
|
|
29
29
|
"@types/marked": "4.0.2",
|
|
30
30
|
"dompurify": "2.3.10",
|
|
31
31
|
"rxjs": "^6.5.5",
|
|
32
32
|
"lodash": "4.17.21",
|
|
33
33
|
"lodash-es": "4.17.21",
|
|
34
|
-
"@angular/platform-browser-dynamic": "
|
|
34
|
+
"@angular/platform-browser-dynamic": "16.1.5"
|
|
35
35
|
},
|
|
36
|
-
"module": "
|
|
37
|
-
"es2020": "fesm2020/leanix-components.mjs",
|
|
38
|
-
"esm2020": "esm2020/leanix-components.mjs",
|
|
39
|
-
"fesm2020": "fesm2020/leanix-components.mjs",
|
|
40
|
-
"fesm2015": "fesm2015/leanix-components.mjs",
|
|
36
|
+
"module": "fesm2022/leanix-components.mjs",
|
|
41
37
|
"typings": "index.d.ts",
|
|
42
38
|
"exports": {
|
|
43
39
|
"./package.json": {
|
|
@@ -45,11 +41,9 @@
|
|
|
45
41
|
},
|
|
46
42
|
".": {
|
|
47
43
|
"types": "./index.d.ts",
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"node": "./fesm2015/leanix-components.mjs",
|
|
52
|
-
"default": "./fesm2020/leanix-components.mjs"
|
|
44
|
+
"esm2022": "./esm2022/leanix-components.mjs",
|
|
45
|
+
"esm": "./esm2022/leanix-components.mjs",
|
|
46
|
+
"default": "./fesm2022/leanix-components.mjs"
|
|
53
47
|
}
|
|
54
48
|
},
|
|
55
49
|
"sideEffects": false
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, Component, ElementRef, Inject, InjectionToken, Input, ViewChild } from '@angular/core';
|
|
3
|
-
import { escape } from 'lodash/fp';
|
|
4
|
-
import { BehaviorSubject, combineLatest, concat, merge, Subject } from 'rxjs';
|
|
5
|
-
import { debounceTime, distinctUntilChanged, filter, map, pairwise, skip, startWith, switchMap, take, takeUntil, withLatestFrom } from 'rxjs/operators';
|
|
6
|
-
import { Observe } from '../../../shared/observe';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../services/resize-observer.service";
|
|
9
|
-
import * as i2 from "@ngx-translate/core";
|
|
10
|
-
import * as i3 from "@angular/common";
|
|
11
|
-
import * as i4 from "../button/button.component";
|
|
12
|
-
export const LX_ELLIPSIS_DEBOUNCE_ON_RESIZE = new InjectionToken('LX_ELLIPSIS_DEBOUNCE_ON_RESIZE', {
|
|
13
|
-
providedIn: 'root',
|
|
14
|
-
factory: () => EllipsisComponent.DEFAULT_RESIZE_DEBOUNCE_MS
|
|
15
|
-
});
|
|
16
|
-
/**
|
|
17
|
-
* You can set a custom max-width CSS property on your lx-ellipsis host element
|
|
18
|
-
* if you want its content to never exceed a specific width,
|
|
19
|
-
* e.g. <lx-ellipsis style="max-width: 300px" content="Hello World[..]"></lx-ellipsis>.
|
|
20
|
-
*/
|
|
21
|
-
export class EllipsisComponent {
|
|
22
|
-
constructor(debounceMsAfterResize, cdRef, hostEl, resizeObserverService, translateService) {
|
|
23
|
-
this.debounceMsAfterResize = debounceMsAfterResize;
|
|
24
|
-
this.cdRef = cdRef;
|
|
25
|
-
this.hostEl = hostEl;
|
|
26
|
-
this.resizeObserverService = resizeObserverService;
|
|
27
|
-
this.translateService = translateService;
|
|
28
|
-
this.content = '';
|
|
29
|
-
/**
|
|
30
|
-
* Only set this to false if the content is not a user provided string
|
|
31
|
-
* or if you sanitize the provided content yourself.
|
|
32
|
-
*/
|
|
33
|
-
this.escapeHtmlInContent = true;
|
|
34
|
-
this.isShowingMore$ = new BehaviorSubject(false);
|
|
35
|
-
this.destroyed$ = new Subject();
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
|
-
this.sanitizedContent$ = this.content$.pipe(map((content) => {
|
|
39
|
-
if (this.escapeHtmlInContent && typeof content === 'string') {
|
|
40
|
-
return escape(content);
|
|
41
|
-
}
|
|
42
|
-
return content;
|
|
43
|
-
}));
|
|
44
|
-
this.showMoreButtonLabel$ = this.isShowingMore$.pipe(switchMap((isShowingMore) => {
|
|
45
|
-
const translationKey = isShowingMore ? 'common.showLess' : 'common.showMore';
|
|
46
|
-
return this.translateService.get(translationKey);
|
|
47
|
-
}));
|
|
48
|
-
const newWidthOnResize$ = new Subject();
|
|
49
|
-
const newHeightOnResize$ = new Subject();
|
|
50
|
-
this.resizeObserverService.observe(this.hostEl.nativeElement, (resizedElement) => {
|
|
51
|
-
newWidthOnResize$.next(resizedElement.contentRect.width);
|
|
52
|
-
newHeightOnResize$.next(resizedElement.contentRect.height);
|
|
53
|
-
});
|
|
54
|
-
const containerWidthChangedSignificantlyAfterResize$ = newWidthOnResize$.pipe(startWith(0), pairwise(), filter(([previousWidth, newWidth]) => Math.abs(newWidth - previousWidth) > 1), map(([, newWidth]) => newWidth));
|
|
55
|
-
const userTriggeredTriggeredShowLess$ = this.isShowingMore$.pipe(filter((isShowingMore) => !isShowingMore));
|
|
56
|
-
const reevaluateIfContentIsOverflowing$ = combineLatest([
|
|
57
|
-
this.contentSpanEl$,
|
|
58
|
-
userTriggeredTriggeredShowLess$,
|
|
59
|
-
containerWidthChangedSignificantlyAfterResize$
|
|
60
|
-
]);
|
|
61
|
-
const isContentOverflowing$ = merge(concat(reevaluateIfContentIsOverflowing$.pipe(take(1)), // debounce all but the first output
|
|
62
|
-
reevaluateIfContentIsOverflowing$.pipe(debounceTime(this.debounceMsAfterResize))), this.content$.pipe(skip(1)) // immediately reevaluate on subsequent content changes
|
|
63
|
-
).pipe(withLatestFrom(this.contentSpanEl$), map(([, contentSpanRef]) => this.isContentOverflowing(contentSpanRef)));
|
|
64
|
-
const userTriggeredTriggeredShowMore$ = this.isShowingMore$.pipe(filter((isShowingMore) => isShowingMore));
|
|
65
|
-
const buttonHeight$ = this.showMoreButtonEl$.pipe(filter((showMoreButtonEl) => !!showMoreButtonEl), map((showMoreButtonEl) => showMoreButtonEl.nativeElement.offsetHeight), distinctUntilChanged());
|
|
66
|
-
const userIncreasedBrowserWindowSizeToThePointOfNoTruncationNecessary$ = combineLatest([
|
|
67
|
-
buttonHeight$,
|
|
68
|
-
newHeightOnResize$.pipe(distinctUntilChanged())
|
|
69
|
-
]).pipe(withLatestFrom(this.isShowingMore$), filter(([, isShowingMore]) => isShowingMore), map(([[buttonHeight, newHeight]]) => {
|
|
70
|
-
const heightOfOneLine = buttonHeight;
|
|
71
|
-
const showLessButtonMarginTop = 4;
|
|
72
|
-
const heightOfSpanInShowMoreMode = newHeight - buttonHeight - showLessButtonMarginTop;
|
|
73
|
-
const thresholdToDetectContentInSingleLine = 4;
|
|
74
|
-
const differenceBetweenContentSpanAndButtonHeight = Math.abs(heightOfOneLine - heightOfSpanInShowMoreMode);
|
|
75
|
-
const isSpanContentDisplayedInOneLineAgain = differenceBetweenContentSpanAndButtonHeight < thresholdToDetectContentInSingleLine;
|
|
76
|
-
return isSpanContentDisplayedInOneLineAgain;
|
|
77
|
-
}));
|
|
78
|
-
const contentFitsInOneLineAgainWhileShowMoreIsEnabled$ = userIncreasedBrowserWindowSizeToThePointOfNoTruncationNecessary$.pipe(startWith(false), pairwise(), filter(([previousTextIsNowInOneLineAgain]) => !previousTextIsNowInOneLineAgain), map(([, textIsNowInOneLineAgain]) => !textIsNowInOneLineAgain));
|
|
79
|
-
const contentIsOverflowingAndShowMoreIsNotEnabled$ = isContentOverflowing$.pipe(withLatestFrom(this.isShowingMore$), filter(([, isShowingMore]) => !isShowingMore), map(([isContentLongerThanContainerWidth]) => {
|
|
80
|
-
return isContentLongerThanContainerWidth;
|
|
81
|
-
}));
|
|
82
|
-
this.showButton$ = merge(userTriggeredTriggeredShowMore$, contentFitsInOneLineAgainWhileShowMoreIsEnabled$, contentIsOverflowingAndShowMoreIsNotEnabled$);
|
|
83
|
-
// As long as no parent component is listening on resize events,
|
|
84
|
-
// the ChangeDetectorRef.markForCheck() call done by the async pipe
|
|
85
|
-
// will not result in a change detection cycle in this component when its size changes.
|
|
86
|
-
// This is the least amount of ChangeDetectorRef.detectChanges() calls
|
|
87
|
-
// I was able to come up with. The Angular profiler shows acceptable numbers of change detection.
|
|
88
|
-
this.detectChangesWhenObservableEmits(isContentOverflowing$);
|
|
89
|
-
this.detectChangesWhenObservableEmits(this.showButton$);
|
|
90
|
-
this.detectChangesWhenObservableEmits(this.content$);
|
|
91
|
-
this.detectChangesWhenObservableEmits(contentIsOverflowingAndShowMoreIsNotEnabled$);
|
|
92
|
-
this.detectChangesWhenObservableEmits(isContentOverflowing$);
|
|
93
|
-
}
|
|
94
|
-
onShowMoreToggle() {
|
|
95
|
-
this.isShowingMore$.next(!this.isShowingMore$.getValue());
|
|
96
|
-
this.cdRef.detectChanges();
|
|
97
|
-
}
|
|
98
|
-
ngOnDestroy() {
|
|
99
|
-
this.resizeObserverService.unobserve(this.hostEl.nativeElement);
|
|
100
|
-
}
|
|
101
|
-
detectChangesWhenObservableEmits(observable$) {
|
|
102
|
-
observable$.pipe(takeUntil(this.destroyed$)).subscribe(() => this.cdRef.detectChanges());
|
|
103
|
-
}
|
|
104
|
-
isContentOverflowing(contentSpanElRef) {
|
|
105
|
-
const scrollWidth = contentSpanElRef.nativeElement.scrollWidth;
|
|
106
|
-
const offsetWidth = contentSpanElRef.nativeElement.clientWidth;
|
|
107
|
-
return offsetWidth < scrollWidth;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
EllipsisComponent.DEFAULT_RESIZE_DEBOUNCE_MS = 500;
|
|
111
|
-
EllipsisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: EllipsisComponent, deps: [{ token: LX_ELLIPSIS_DEBOUNCE_ON_RESIZE }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.ResizeObserverService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
112
|
-
EllipsisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: EllipsisComponent, selector: "lx-ellipsis", inputs: { content: "content", escapeHtmlInContent: "escapeHtmlInContent" }, viewQueries: [{ propertyName: "contentSpanEl", first: true, predicate: ["contentEl"], descendants: true }, { propertyName: "showMoreButtonEl", first: true, predicate: ["showMoreButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<span\n #contentEl\n [class.showMore]=\"isShowingMore$ | async\"\n class=\"content truncate lx-margin-right\"\n [innerHtml]=\"sanitizedContent$ | async\"\n></span>\n<button *ngIf=\"showButton$ | async\" (click)=\"onShowMoreToggle()\" lx-button #showMoreButton size=\"auto\" mode=\"link\" color=\"primary\">\n {{ showMoreButtonLabel$ | async }}\n</button>\n", styles: [":host{display:block}.content{display:inline-block;word-break:break-word}.truncate:not(.showMore){width:calc(100% - 140px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.content.showMore+button{margin-top:4px;display:block}button{white-space:nowrap;vertical-align:top}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[lx-button]", inputs: ["size", "color", "mode", "pressed", "selected", "square", "circle", "disabled", "showSpinner"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
113
|
-
__decorate([
|
|
114
|
-
Observe('contentSpanEl')
|
|
115
|
-
], EllipsisComponent.prototype, "contentSpanEl$", void 0);
|
|
116
|
-
__decorate([
|
|
117
|
-
Observe('showMoreButtonEl')
|
|
118
|
-
], EllipsisComponent.prototype, "showMoreButtonEl$", void 0);
|
|
119
|
-
__decorate([
|
|
120
|
-
Observe('content')
|
|
121
|
-
], EllipsisComponent.prototype, "content$", void 0);
|
|
122
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: EllipsisComponent, decorators: [{
|
|
123
|
-
type: Component,
|
|
124
|
-
args: [{ selector: 'lx-ellipsis', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n #contentEl\n [class.showMore]=\"isShowingMore$ | async\"\n class=\"content truncate lx-margin-right\"\n [innerHtml]=\"sanitizedContent$ | async\"\n></span>\n<button *ngIf=\"showButton$ | async\" (click)=\"onShowMoreToggle()\" lx-button #showMoreButton size=\"auto\" mode=\"link\" color=\"primary\">\n {{ showMoreButtonLabel$ | async }}\n</button>\n", styles: [":host{display:block}.content{display:inline-block;word-break:break-word}.truncate:not(.showMore){width:calc(100% - 140px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.content.showMore+button{margin-top:4px;display:block}button{white-space:nowrap;vertical-align:top}\n"] }]
|
|
125
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
126
|
-
type: Inject,
|
|
127
|
-
args: [LX_ELLIPSIS_DEBOUNCE_ON_RESIZE]
|
|
128
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.ResizeObserverService }, { type: i2.TranslateService }]; }, propDecorators: { content: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], escapeHtmlInContent: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], contentSpanEl$: [], contentSpanEl: [{
|
|
133
|
-
type: ViewChild,
|
|
134
|
-
args: ['contentEl']
|
|
135
|
-
}], showMoreButtonEl$: [], showMoreButtonEl: [{
|
|
136
|
-
type: ViewChild,
|
|
137
|
-
args: ['showMoreButton', { read: ElementRef }]
|
|
138
|
-
}], content$: [] } });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzaXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvY29yZS11aS9jb21wb25lbnRzL2VsbGlwc2lzL2VsbGlwc2lzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvY29tcG9uZW50cy9lbGxpcHNpcy9lbGxpcHNpcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFGLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsY0FBYyxFQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFHbEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQVMsZ0NBQWdDLEVBQUU7SUFDekcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQjtDQUM1RCxDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJ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aUJBQWlCLDJUQWFTLFVBQVUsNkJDNURqRCwyV0FTQTtBRGdENEI7SUFBekIsT0FBTyxDQUFDLGVBQWUsQ0FBQzt5REFBa0U7QUFFOUQ7SUFBNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDOzREQUF1RTtBQVVuRztJQURDLE9BQU8sQ0FBQyxTQUFTLENBQUM7bURBQ21COzJGQXRCM0IsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs7MEJBNkI1QyxNQUFNOzJCQUFDLDhCQUE4Qjt3S0F4Qi9CLE9BQU87c0JBQWYsS0FBSztnQkFLRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRTRCLGNBQWMsTUFDeEIsYUFBYTtzQkFBcEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNlLGlCQUFpQixNQUNILGdCQUFnQjtzQkFBbEUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBU3pDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBlc2NhcGUgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBjb25jYXQsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgcGFpcndpc2UsXG4gIHNraXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHdpdGhMYXRlc3RGcm9tXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2ZSc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXNpemUtb2JzZXJ2ZXIuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBMWF9FTExJUFNJU19ERUJPVU5DRV9PTl9SRVNJWkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPignTFhfRUxMSVBTSVNfREVCT1VOQ0VfT05fUkVTSVpFJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IEVsbGlwc2lzQ29tcG9uZW50LkRFRkFVTFRfUkVTSVpFX0RFQk9VTkNFX01TXG59KTtcblxuLyoqXG4gKiBZb3UgY2FuIHNldCBhIGN1c3RvbSBtYXgtd2lkdGggQ1NTIHByb3BlcnR5IG9uIHlvdXIgbHgtZWxsaXBzaXMgaG9zdCBlbGVtZW50XG4gKiBpZiB5b3Ugd2FudCBpdHMgY29udGVudCB0byBuZXZlciBleGNlZWQgYSBzcGVjaWZpYyB3aWR0aCxcbiAqIGUuZy4gPGx4LWVsbGlwc2lzIHN0eWxlPVwibWF4LXdpZHRoOiAzMDBweFwiIGNvbnRlbnQ9XCJIZWxsbyBXb3JsZFsuLl1cIj48L2x4LWVsbGlwc2lzPi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHgtZWxsaXBzaXMnLFxuICB0ZW1wbGF0ZVVybDogJ2VsbGlwc2lzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbYGVsbGlwc2lzLmNvbXBvbmVudC5zY3NzYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEVsbGlwc2lzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgREVGQVVMVF9SRVNJWkVfREVCT1VOQ0VfTVMgPSA1MDA7XG5cbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nID0gJyc7XG4gIC8qKlxuICAgKiBPbmx5IHNldCB0aGlzIHRvIGZhbHNlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIHVzZXIgcHJvdmlkZWQgc3RyaW5nXG4gICAqIG9yIGlmIHlvdSBzYW5pdGl6ZSB0aGUgcHJvdmlkZWQgY29udGVudCB5b3Vyc2VsZi5cbiAgICovXG4gIEBJbnB1dCgpIGVzY2FwZUh0bWxJbkNvbnRlbnQgPSB0cnVlO1xuXG4gIEBPYnNlcnZlKCdjb250ZW50U3BhbkVsJykgcHJpdmF0ZSBjb250ZW50U3BhbkVsJCE6IE9ic2VydmFibGU8RWxlbWVudFJlZjxIVE1MU3BhbkVsZW1lbnQ+PjtcbiAgQFZpZXdDaGlsZCgnY29udGVudEVsJykgY29udGVudFNwYW5FbCE6IEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50PjtcbiAgQE9ic2VydmUoJ3Nob3dNb3JlQnV0dG9uRWwnKSBwcml2YXRlIHNob3dNb3JlQnV0dG9uRWwkITogT2JzZXJ2YWJsZTxFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50Pj47XG4gIEBWaWV3Q2hpbGQoJ3Nob3dNb3JlQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNob3dNb3JlQnV0dG9uRWwhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICBpc1Nob3dpbmdNb3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHNob3dCdXR0b24kITogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2hvd01vcmVCdXR0b25MYWJlbCQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgc2FuaXRpemVkQ29udGVudCQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBPYnNlcnZlKCdjb250ZW50JylcbiAgcHJpdmF0ZSBjb250ZW50JCE6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTFhfRUxMSVBTSVNfREVCT1VOQ0VfT05fUkVTSVpFKVxuICAgIHByaXZhdGUgZGVib3VuY2VNc0FmdGVyUmVzaXplOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBob3N0RWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCQgPSB0aGlzLmNvbnRlbnQkLnBpcGUoXG4gICAgICBtYXAoKGNvbnRlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXNjYXBlSHRtbEluQ29udGVudCAmJiB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zaG93TW9yZUJ1dHRvbkxhYmVsJCA9IHRoaXMuaXNTaG93aW5nTW9yZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoaXNTaG93aW5nTW9yZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbktleSA9IGlzU2hvd2luZ01vcmUgPyAnY29tbW9uLnNob3dMZXNzJyA6ICdjb21tb24uc2hvd01vcmUnO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0cmFuc2xhdGlvbktleSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgbmV3V2lkdGhPblJlc2l6ZSQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgY29uc3QgbmV3SGVpZ2h0T25SZXNpemUkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCwgKHJlc2l6ZWRFbGVtZW50KSA9PiB7XG4gICAgICBuZXdXaWR0aE9uUmVzaXplJC5uZXh0KHJlc2l6ZWRFbGVtZW50LmNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICAgIG5ld0hlaWdodE9uUmVzaXplJC5uZXh0KHJlc2l6ZWRFbGVtZW50LmNvbnRlbnRSZWN0LmhlaWdodCk7XG4gICAgfSk7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGhDaGFuZ2VkU2lnbmlmaWNhbnRseUFmdGVyUmVzaXplJCA9IG5ld1dpZHRoT25SZXNpemUkLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgZmlsdGVyKChbcHJldmlvdXNXaWR0aCwgbmV3V2lkdGhdKSA9PiBNYXRoLmFicyhuZXdXaWR0aCAtIHByZXZpb3VzV2lkdGgpID4gMSksXG4gICAgICBtYXAoKFssIG5ld1dpZHRoXSkgPT4gbmV3V2lkdGgpXG4gICAgKTtcbiAgICBjb25zdCB1c2VyVHJpZ2dlcmVkVHJpZ2dlcmVkU2hvd0xlc3MkID0gdGhpcy5pc1Nob3dpbmdNb3JlJC5waXBlKGZpbHRlcigoaXNTaG93aW5nTW9yZSkgPT4gIWlzU2hvd2luZ01vcmUpKTtcblxuICAgIGNvbnN0IHJlZXZhbHVhdGVJZkNvbnRlbnRJc092ZXJmbG93aW5nJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb250ZW50U3BhbkVsJCxcbiAgICAgIHVzZXJUcmlnZ2VyZWRUcmlnZ2VyZWRTaG93TGVzcyQsXG4gICAgICBjb250YWluZXJXaWR0aENoYW5nZWRTaWduaWZpY2FudGx5QWZ0ZXJSZXNpemUkXG4gICAgXSk7XG5cbiAgICBjb25zdCBpc0NvbnRlbnRPdmVyZmxvd2luZyQgPSBtZXJnZShcbiAgICAgIGNvbmNhdChcbiAgICAgICAgcmVldmFsdWF0ZUlmQ29udGVudElzT3ZlcmZsb3dpbmckLnBpcGUodGFrZSgxKSksIC8vIGRlYm91bmNlIGFsbCBidXQgdGhlIGZpcnN0IG91dHB1dFxuICAgICAgICByZWV2YWx1YXRlSWZDb250ZW50SXNPdmVyZmxvd2luZyQucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZU1zQWZ0ZXJSZXNpemUpKVxuICAgICAgKSxcbiAgICAgIHRoaXMuY29udGVudCQucGlwZShza2lwKDEpKSAvLyBpbW1lZGlhdGVseSByZWV2YWx1YXRlIG9uIHN1YnNlcXVlbnQgY29udGVudCBjaGFuZ2VzXG4gICAgKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb250ZW50U3BhbkVsJCksXG4gICAgICBtYXAoKFssIGNvbnRlbnRTcGFuUmVmXSkgPT4gdGhpcy5pc0NvbnRlbnRPdmVyZmxvd2luZyhjb250ZW50U3BhblJlZikpXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJUcmlnZ2VyZWRUcmlnZ2VyZWRTaG93TW9yZSQgPSB0aGlzLmlzU2hvd2luZ01vcmUkLnBpcGUoZmlsdGVyKChpc1Nob3dpbmdNb3JlKSA9PiBpc1Nob3dpbmdNb3JlKSk7XG5cbiAgICBjb25zdCBidXR0b25IZWlnaHQkID0gdGhpcy5zaG93TW9yZUJ1dHRvbkVsJC5waXBlKFxuICAgICAgZmlsdGVyKChzaG93TW9yZUJ1dHRvbkVsKSA9PiAhIXNob3dNb3JlQnV0dG9uRWwpLFxuICAgICAgbWFwKChzaG93TW9yZUJ1dHRvbkVsKSA9PiBzaG93TW9yZUJ1dHRvbkVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbmNyZWFzZWRCcm93c2VyV2luZG93U2l6ZVRvVGhlUG9pbnRPZk5vVHJ1bmNhdGlvbk5lY2Vzc2FyeSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGJ1dHRvbkhlaWdodCQsXG4gICAgICBuZXdIZWlnaHRPblJlc2l6ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgIF0pLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlzU2hvd2luZ01vcmUkKSxcbiAgICAgIGZpbHRlcigoWywgaXNTaG93aW5nTW9yZV0pID0+IGlzU2hvd2luZ01vcmUpLFxuICAgICAgbWFwKChbW2J1dHRvbkhlaWdodCwgbmV3SGVpZ2h0XV0pID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0T2ZPbmVMaW5lID0gYnV0dG9uSGVpZ2h0O1xuICAgICAgICBjb25zdCBzaG93TGVzc0J1dHRvbk1hcmdpblRvcCA9IDQ7XG4gICAgICAgIGNvbnN0IGhlaWdodE9mU3BhbkluU2hvd01vcmVNb2RlID0gbmV3SGVpZ2h0IC0gYnV0dG9uSGVpZ2h0IC0gc2hvd0xlc3NCdXR0b25NYXJnaW5Ub3A7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZFRvRGV0ZWN0Q29udGVudEluU2luZ2xlTGluZSA9IDQ7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VCZXR3ZWVuQ29udGVudFNwYW5BbmRCdXR0b25IZWlnaHQgPSBNYXRoLmFicyhoZWlnaHRPZk9uZUxpbmUgLSBoZWlnaHRPZlNwYW5JblNob3dNb3JlTW9kZSk7XG4gICAgICAgIGNvbnN0IGlzU3BhbkNvbnRlbnREaXNwbGF5ZWRJbk9uZUxpbmVBZ2FpbiA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29udGVudFNwYW5BbmRCdXR0b25IZWlnaHQgPCB0aHJlc2hvbGRUb0RldGVjdENvbnRlbnRJblNpbmdsZUxpbmU7XG4gICAgICAgIHJldHVybiBpc1NwYW5Db250ZW50RGlzcGxheWVkSW5PbmVMaW5lQWdhaW47XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgY29udGVudEZpdHNJbk9uZUxpbmVBZ2FpbldoaWxlU2hvd01vcmVJc0VuYWJsZWQkID0gdXNlckluY3JlYXNlZEJyb3dzZXJXaW5kb3dTaXplVG9UaGVQb2ludE9mTm9UcnVuY2F0aW9uTmVjZXNzYXJ5JC5waXBlKFxuICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBmaWx0ZXIoKFtwcmV2aW91c1RleHRJc05vd0luT25lTGluZUFnYWluXSkgPT4gIXByZXZpb3VzVGV4dElzTm93SW5PbmVMaW5lQWdhaW4pLFxuICAgICAgbWFwKChbLCB0ZXh0SXNOb3dJbk9uZUxpbmVBZ2Fpbl0pID0+ICF0ZXh0SXNOb3dJbk9uZUxpbmVBZ2FpbilcbiAgICApO1xuICAgIGNvbnN0IGNvbnRlbnRJc092ZXJmbG93aW5nQW5kU2hvd01vcmVJc05vdEVuYWJsZWQkID0gaXNDb250ZW50T3ZlcmZsb3dpbmckLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlzU2hvd2luZ01vcmUkKSxcbiAgICAgIGZpbHRlcigoWywgaXNTaG93aW5nTW9yZV0pID0+ICFpc1Nob3dpbmdNb3JlKSxcbiAgICAgIG1hcCgoW2lzQ29udGVudExvbmdlclRoYW5Db250YWluZXJXaWR0aF0pID0+IHtcbiAgICAgICAgcmV0dXJuIGlzQ29udGVudExvbmdlclRoYW5Db250YWluZXJXaWR0aDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNob3dCdXR0b24kID0gbWVyZ2UoXG4gICAgICB1c2VyVHJpZ2dlcmVkVHJpZ2dlcmVkU2hvd01vcmUkLFxuICAgICAgY29udGVudEZpdHNJbk9uZUxpbmVBZ2FpbldoaWxlU2hvd01vcmVJc0VuYWJsZWQkLFxuICAgICAgY29udGVudElzT3ZlcmZsb3dpbmdBbmRTaG93TW9yZUlzTm90RW5hYmxlZCRcbiAgICApO1xuXG4gICAgLy8gQXMgbG9uZyBhcyBubyBwYXJlbnQgY29tcG9uZW50IGlzIGxpc3RlbmluZyBvbiByZXNpemUgZXZlbnRzLFxuICAgIC8vIHRoZSBDaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSBjYWxsIGRvbmUgYnkgdGhlIGFzeW5jIHBpcGVcbiAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gYSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIGluIHRoaXMgY29tcG9uZW50IHdoZW4gaXRzIHNpemUgY2hhbmdlcy5cbiAgICAvLyBUaGlzIGlzIHRoZSBsZWFzdCBhbW91bnQgb2YgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpIGNhbGxzXG4gICAgLy8gSSB3YXMgYWJsZSB0byBjb21lIHVwIHdpdGguIFRoZSBBbmd1bGFyIHByb2ZpbGVyIHNob3dzIGFjY2VwdGFibGUgbnVtYmVycyBvZiBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1doZW5PYnNlcnZhYmxlRW1pdHMoaXNDb250ZW50T3ZlcmZsb3dpbmckKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXNXaGVuT2JzZXJ2YWJsZUVtaXRzKHRoaXMuc2hvd0J1dHRvbiQpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1doZW5PYnNlcnZhYmxlRW1pdHModGhpcy5jb250ZW50JCk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzV2hlbk9ic2VydmFibGVFbWl0cyhjb250ZW50SXNPdmVyZmxvd2luZ0FuZFNob3dNb3JlSXNOb3RFbmFibGVkJCk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzV2hlbk9ic2VydmFibGVFbWl0cyhpc0NvbnRlbnRPdmVyZmxvd2luZyQpO1xuICB9XG5cbiAgb25TaG93TW9yZVRvZ2dsZSgpIHtcbiAgICB0aGlzLmlzU2hvd2luZ01vcmUkLm5leHQoIXRoaXMuaXNTaG93aW5nTW9yZSQuZ2V0VmFsdWUoKSk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdENoYW5nZXNXaGVuT2JzZXJ2YWJsZUVtaXRzKG9ic2VydmFibGUkOiBPYnNlcnZhYmxlPGFueT4pIHtcbiAgICBvYnNlcnZhYmxlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbnRlbnRPdmVyZmxvd2luZyhjb250ZW50U3BhbkVsUmVmOiBFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD4pIHtcbiAgICBjb25zdCBzY3JvbGxXaWR0aCA9IGNvbnRlbnRTcGFuRWxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICBjb25zdCBvZmZzZXRXaWR0aCA9IGNvbnRlbnRTcGFuRWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gb2Zmc2V0V2lkdGggPCBzY3JvbGxXaWR0aDtcbiAgfVxufVxuIiwiPHNwYW5cbiAgI2NvbnRlbnRFbFxuICBbY2xhc3Muc2hvd01vcmVdPVwiaXNTaG93aW5nTW9yZSQgfCBhc3luY1wiXG4gIGNsYXNzPVwiY29udGVudCB0cnVuY2F0ZSBseC1tYXJnaW4tcmlnaHRcIlxuICBbaW5uZXJIdG1sXT1cInNhbml0aXplZENvbnRlbnQkIHwgYXN5bmNcIlxuPjwvc3Bhbj5cbjxidXR0b24gKm5nSWY9XCJzaG93QnV0dG9uJCB8IGFzeW5jXCIgKGNsaWNrKT1cIm9uU2hvd01vcmVUb2dnbGUoKVwiIGx4LWJ1dHRvbiAjc2hvd01vcmVCdXR0b24gc2l6ZT1cImF1dG9cIiBtb2RlPVwibGlua1wiIGNvbG9yPVwicHJpbWFyeVwiPlxuICB7eyBzaG93TW9yZUJ1dHRvbkxhYmVsJCB8IGFzeW5jIH19XG48L2J1dHRvbj5cbiJdfQ==
|