@leanix/components 0.4.531 → 0.4.533

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.
Files changed (157) hide show
  1. package/fesm2022/leanix-components.mjs +365 -365
  2. package/fesm2022/leanix-components.mjs.map +1 -1
  3. package/lib/core-ui/tooltip/tooltip.directive.d.ts +1 -1
  4. package/lib/forms-ui/components/keyboard-select.directive.d.ts +1 -1
  5. package/lib/forms-ui/models/base-select.directive.d.ts +1 -1
  6. package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +1 -1
  7. package/package.json +10 -14
  8. package/esm2022/index.mjs +0 -145
  9. package/esm2022/leanix-components.mjs +0 -5
  10. package/esm2022/lib/core-ui/components/avatar/avatar.component.mjs +0 -40
  11. package/esm2022/lib/core-ui/components/avatar/avatar.helpers.mjs +0 -49
  12. package/esm2022/lib/core-ui/components/avatar/avatar.model.mjs +0 -33
  13. package/esm2022/lib/core-ui/components/avatar-group/avatar-group.component.mjs +0 -75
  14. package/esm2022/lib/core-ui/components/badge/badge.component.mjs +0 -58
  15. package/esm2022/lib/core-ui/components/banner/banner.component.mjs +0 -68
  16. package/esm2022/lib/core-ui/components/banner/banner.models.mjs +0 -12
  17. package/esm2022/lib/core-ui/components/button/button.component.mjs +0 -179
  18. package/esm2022/lib/core-ui/components/button-group/button-group.component.mjs +0 -28
  19. package/esm2022/lib/core-ui/components/card/card.component.mjs +0 -26
  20. package/esm2022/lib/core-ui/components/collapsible/collapsible.component.mjs +0 -52
  21. package/esm2022/lib/core-ui/components/counter/counter.component.mjs +0 -30
  22. package/esm2022/lib/core-ui/components/ellipsis/ellipsis.component.mjs +0 -143
  23. package/esm2022/lib/core-ui/components/empty-state/empty-state.component.mjs +0 -41
  24. package/esm2022/lib/core-ui/components/icon-scale/icon-scale.component.mjs +0 -36
  25. package/esm2022/lib/core-ui/components/skeleton/skeleton.component.mjs +0 -44
  26. package/esm2022/lib/core-ui/components/spinner/spinner.component.mjs +0 -26
  27. package/esm2022/lib/core-ui/components/stepper/stepper.component.mjs +0 -70
  28. package/esm2022/lib/core-ui/components/table/table-header/table-header.component.mjs +0 -128
  29. package/esm2022/lib/core-ui/components/table/table.component.mjs +0 -77
  30. package/esm2022/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +0 -14
  31. package/esm2022/lib/core-ui/components/tokenizer/token/token.component.mjs +0 -20
  32. package/esm2022/lib/core-ui/components/tokenizer/tokenizer-overflow-popover/tokenizer-overflow-popover.component.mjs +0 -44
  33. package/esm2022/lib/core-ui/components/tokenizer/tokenizer.component.mjs +0 -149
  34. package/esm2022/lib/core-ui/core-ui.constants.mjs +0 -240
  35. package/esm2022/lib/core-ui/core-ui.module.mjs +0 -206
  36. package/esm2022/lib/core-ui/directives/after-view-init.directive.mjs +0 -33
  37. package/esm2022/lib/core-ui/directives/autoclose-group.service.mjs +0 -39
  38. package/esm2022/lib/core-ui/directives/autoclose.directive.mjs +0 -43
  39. package/esm2022/lib/core-ui/directives/autofocus.directive.mjs +0 -36
  40. package/esm2022/lib/core-ui/functions/core-css.helpers.mjs +0 -52
  41. package/esm2022/lib/core-ui/functions/highlight-text.function.mjs +0 -80
  42. package/esm2022/lib/core-ui/linkify/linkify.pipe.mjs +0 -146
  43. package/esm2022/lib/core-ui/linkify/unlinkify.pipe.mjs +0 -51
  44. package/esm2022/lib/core-ui/pipes/br.pipe.mjs +0 -24
  45. package/esm2022/lib/core-ui/pipes/contrast-color.pipe.mjs +0 -21
  46. package/esm2022/lib/core-ui/pipes/custom-date.pipe.mjs +0 -28
  47. package/esm2022/lib/core-ui/pipes/display-avatars.pipe.mjs +0 -37
  48. package/esm2022/lib/core-ui/pipes/highlight-range.pipe.mjs +0 -29
  49. package/esm2022/lib/core-ui/pipes/highlight-term.pipe.mjs +0 -57
  50. package/esm2022/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +0 -22
  51. package/esm2022/lib/core-ui/pipes/lx-time-ago.pipe.mjs +0 -29
  52. package/esm2022/lib/core-ui/pipes/lx-translate.pipe.mjs +0 -50
  53. package/esm2022/lib/core-ui/pipes/markdown.pipe.mjs +0 -32
  54. package/esm2022/lib/core-ui/pipes/nbsp.pipe.mjs +0 -17
  55. package/esm2022/lib/core-ui/pipes/sort.pipe.mjs +0 -55
  56. package/esm2022/lib/core-ui/pipes/translation-after.pipe.mjs +0 -29
  57. package/esm2022/lib/core-ui/pipes/translation-before.pipe.mjs +0 -54
  58. package/esm2022/lib/core-ui/pipes/translation-between.pipe.mjs +0 -68
  59. package/esm2022/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +0 -17
  60. package/esm2022/lib/core-ui/services/resize-observer.service.mjs +0 -112
  61. package/esm2022/lib/core-ui/tooltip/to-cdk-position.function.mjs +0 -74
  62. package/esm2022/lib/core-ui/tooltip/tooltip-position.interface.mjs +0 -7
  63. package/esm2022/lib/core-ui/tooltip/tooltip.component.mjs +0 -26
  64. package/esm2022/lib/core-ui/tooltip/tooltip.directive.mjs +0 -117
  65. package/esm2022/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +0 -139
  66. package/esm2022/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +0 -38
  67. package/esm2022/lib/forms-ui/components/breadcrumb/breadcrumb.component.mjs +0 -55
  68. package/esm2022/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +0 -215
  69. package/esm2022/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +0 -135
  70. package/esm2022/lib/forms-ui/components/currency/currency-input.component.mjs +0 -159
  71. package/esm2022/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +0 -105
  72. package/esm2022/lib/forms-ui/components/currency/currency-symbol.component.mjs +0 -24
  73. package/esm2022/lib/forms-ui/components/date-input/date-input.component.mjs +0 -347
  74. package/esm2022/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +0 -8
  75. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +0 -312
  76. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +0 -20
  77. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +0 -206
  78. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +0 -29
  79. package/esm2022/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +0 -319
  80. package/esm2022/lib/forms-ui/components/date-picker-ui/isBs3.mjs +0 -2
  81. package/esm2022/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +0 -149
  82. package/esm2022/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +0 -151
  83. package/esm2022/lib/forms-ui/components/drag-and-drop-list/constants.mjs +0 -5
  84. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +0 -49
  85. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +0 -120
  86. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +0 -39
  87. package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +0 -137
  88. package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +0 -38
  89. package/esm2022/lib/forms-ui/components/error-message/error-message.component.mjs +0 -16
  90. package/esm2022/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.mjs +0 -26
  91. package/esm2022/lib/forms-ui/components/form-error/form-error.component.mjs +0 -44
  92. package/esm2022/lib/forms-ui/components/icon/icon.component.mjs +0 -45
  93. package/esm2022/lib/forms-ui/components/input/input.component.mjs +0 -48
  94. package/esm2022/lib/forms-ui/components/keyboard-select.directive.mjs +0 -126
  95. package/esm2022/lib/forms-ui/components/multi-select/multi-select-selection/multi-select-selection.component.mjs +0 -28
  96. package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +0 -318
  97. package/esm2022/lib/forms-ui/components/option/option.component.mjs +0 -99
  98. package/esm2022/lib/forms-ui/components/option-group/option-group.component.mjs +0 -29
  99. package/esm2022/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +0 -123
  100. package/esm2022/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +0 -297
  101. package/esm2022/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +0 -94
  102. package/esm2022/lib/forms-ui/components/picker/picker-trigger.directive.mjs +0 -47
  103. package/esm2022/lib/forms-ui/components/picker/picker.component.mjs +0 -218
  104. package/esm2022/lib/forms-ui/components/picker-option/picker-option.component.mjs +0 -118
  105. package/esm2022/lib/forms-ui/components/pill-item/pill-item.component.mjs +0 -33
  106. package/esm2022/lib/forms-ui/components/pill-list/pill-list.component.mjs +0 -58
  107. package/esm2022/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +0 -101
  108. package/esm2022/lib/forms-ui/components/select-list/select-list.component.mjs +0 -178
  109. package/esm2022/lib/forms-ui/components/single-select/single-select.component.mjs +0 -290
  110. package/esm2022/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +0 -71
  111. package/esm2022/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +0 -21
  112. package/esm2022/lib/forms-ui/components/switch/switch.component.mjs +0 -51
  113. package/esm2022/lib/forms-ui/directives/contenteditable.directive.mjs +0 -130
  114. package/esm2022/lib/forms-ui/directives/form-error.directive.mjs +0 -121
  115. package/esm2022/lib/forms-ui/directives/form-submit.directive.mjs +0 -29
  116. package/esm2022/lib/forms-ui/directives/keyboard-action-source.directive.mjs +0 -63
  117. package/esm2022/lib/forms-ui/directives/mark-invalid.directive.mjs +0 -39
  118. package/esm2022/lib/forms-ui/directives/max-length-counter.directive.mjs +0 -131
  119. package/esm2022/lib/forms-ui/directives/select-dropdown.directive.mjs +0 -32
  120. package/esm2022/lib/forms-ui/directives/selectable-item.directive.mjs +0 -34
  121. package/esm2022/lib/forms-ui/directives/selected-option.directive.mjs +0 -27
  122. package/esm2022/lib/forms-ui/forms-ui.module.mjs +0 -270
  123. package/esm2022/lib/forms-ui/helpers/key-codes.constants.mjs +0 -13
  124. package/esm2022/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +0 -38
  125. package/esm2022/lib/forms-ui/models/base-select.directive.mjs +0 -183
  126. package/esm2022/lib/forms-ui/models/dropdown-item.interface.mjs +0 -2
  127. package/esm2022/lib/forms-ui/models/single-select-padding.interface.mjs +0 -2
  128. package/esm2022/lib/forms-ui/models/sorting.interface.mjs +0 -7
  129. package/esm2022/lib/forms-ui/pipes/filter-selection.pipe.mjs +0 -33
  130. package/esm2022/lib/forms-ui/pipes/filter-term.pipe.mjs +0 -29
  131. package/esm2022/lib/forms-ui/pipes/format-number.pipe.mjs +0 -66
  132. package/esm2022/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +0 -26
  133. package/esm2022/lib/forms-ui/validators/string-not-in-array.validator.mjs +0 -30
  134. package/esm2022/lib/modal-ui/components/modal/modal.component.mjs +0 -264
  135. package/esm2022/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +0 -16
  136. package/esm2022/lib/modal-ui/components/modal-header/modal-header.component.mjs +0 -19
  137. package/esm2022/lib/modal-ui/directives/modal-content.directive.mjs +0 -14
  138. package/esm2022/lib/modal-ui/modal.constants.mjs +0 -18
  139. package/esm2022/lib/modal-ui/modal.module.mjs +0 -47
  140. package/esm2022/lib/popover-ui/components/popover/popover.component.mjs +0 -228
  141. package/esm2022/lib/popover-ui/directives/popover-click.directive.mjs +0 -52
  142. package/esm2022/lib/popover-ui/directives/popover-content.directive.mjs +0 -17
  143. package/esm2022/lib/popover-ui/directives/popover-hover.directive.mjs +0 -88
  144. package/esm2022/lib/popover-ui/popover-ui.module.mjs +0 -21
  145. package/esm2022/lib/shared/date-helpers.mjs +0 -35
  146. package/esm2022/lib/shared/html-helpers.function.mjs +0 -34
  147. package/esm2022/lib/shared/misc-helpers.mjs +0 -24
  148. package/esm2022/lib/shared/observe.mjs +0 -40
  149. package/esm2022/lib/tab-ui/components/tab/tab.component.mjs +0 -118
  150. package/esm2022/lib/tab-ui/components/tab-group/tab-group-key-codes.enum.mjs +0 -12
  151. package/esm2022/lib/tab-ui/components/tab-group/tab-group.component.mjs +0 -150
  152. package/esm2022/lib/tab-ui/tab-ui.module.mjs +0 -20
  153. package/esm2022/ui5/icons/lx-icons.json +0 -177
  154. package/esm2022/ui5/icons/register-icons.mjs +0 -14
  155. package/esm2022/ui5/index.mjs +0 -8
  156. package/esm2022/ui5/leanix-components-ui5.mjs +0 -5
  157. package/esm2022/ui5/ui5.provider.mjs +0 -29
@@ -1,36 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class AutofocusDirective {
4
- constructor(elementRef, ngZone) {
5
- this.elementRef = elementRef;
6
- this.ngZone = ngZone;
7
- this.lxAutofocus = true;
8
- this.lxAutofocusPreventScroll = false;
9
- this.lxAutofocusTimeout = 0;
10
- }
11
- ngAfterContentInit() {
12
- if (this.lxAutofocus !== false) {
13
- this.ngZone.runOutsideAngular(() => {
14
- setTimeout(() => {
15
- this.elementRef.nativeElement.focus({ preventScroll: this.lxAutofocusPreventScroll });
16
- }, this.lxAutofocusTimeout);
17
- });
18
- }
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AutofocusDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: AutofocusDirective, isStandalone: true, selector: "[lxAutofocus]", inputs: { lxAutofocus: "lxAutofocus", lxAutofocusPreventScroll: "lxAutofocusPreventScroll", lxAutofocusTimeout: "lxAutofocusTimeout" }, ngImport: i0 }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AutofocusDirective, decorators: [{
24
- type: Directive,
25
- args: [{
26
- selector: '[lxAutofocus]',
27
- standalone: true
28
- }]
29
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { lxAutofocus: [{
30
- type: Input
31
- }], lxAutofocusPreventScroll: [{
32
- type: Input
33
- }], lxAutofocusTimeout: [{
34
- type: Input
35
- }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2ZvY3VzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvZGlyZWN0aXZlcy9hdXRvZm9jdXMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFjLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7QUFNdkYsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUNVLFVBQW1DLEVBQ25DLE1BQWM7UUFEZCxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTmYsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFDNUIsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBQzFDLHVCQUFrQixHQUFXLENBQUMsQ0FBQztJQUtyQyxDQUFDO0lBRUosa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDakMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztnQkFDeEYsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBbEJVLGtCQUFrQjtrR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7b0dBRVUsV0FBVztzQkFBbkIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tseEF1dG9mb2N1c10nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9mb2N1c0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBASW5wdXQoKSBseEF1dG9mb2N1czogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGx4QXV0b2ZvY3VzUHJldmVudFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBseEF1dG9mb2N1c1RpbWVvdXQ6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKHRoaXMubHhBdXRvZm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdGhpcy5seEF1dG9mb2N1c1ByZXZlbnRTY3JvbGwgfSk7XG4gICAgICAgIH0sIHRoaXMubHhBdXRvZm9jdXNUaW1lb3V0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,52 +0,0 @@
1
- import Color from 'color';
2
- /**
3
- * Compute the most eligible text color for a given background color (black or white), depending on the luminance of the
4
- * background color. In case the provided color is undefined or invalid, white (#FFFFFF) is returned.
5
- *
6
- * @param colorHex Color string in hexadecimal encoding.
7
- * @returns Equivalent contrast color in hexadecimal encoding.
8
- */
9
- export function getContrastColor(colorHex) {
10
- try {
11
- colorHex = colorHex || '#000';
12
- const backgroundColor = Color(colorHex);
13
- const foregroundColor = Color(backgroundColor.isDark() ? '#FFFFFF' : '#000000');
14
- const backgroundColorLuminance = backgroundColor.luminosity();
15
- const foregroundColorLuminance = foregroundColor.luminosity();
16
- /**
17
- * Use the contrast ratio formula to determine the most eligible text color for the given background color.
18
- * It is possible tha the background color is dark based on the RGB value, but has opacity, which makes it light.
19
- * In such cases, the luminance value is used to determine the color. The solution is based on the following article:
20
- * https://dev.to/alvaromontoro/building-your-own-color-contrast-checker-4j7o
21
- */
22
- const contrastRatio = backgroundColorLuminance > foregroundColorLuminance
23
- ? (foregroundColorLuminance + 0.05) / (backgroundColorLuminance + 0.05)
24
- : (backgroundColorLuminance + 0.05) / (foregroundColorLuminance + 0.05);
25
- /**
26
- * Check contrast ratio for WCAG 2.0 level AA compliance level for small text. If the
27
- * contrast ratio is greater than 1 / 4.5, return the inverted foreground color.
28
- */
29
- if (contrastRatio >= 1 / 4.5) {
30
- return foregroundColor.negate().hex();
31
- }
32
- return foregroundColor.hex();
33
- }
34
- catch {
35
- return '#FFFFFF';
36
- }
37
- }
38
- export function shorthandHexHandle(hex) {
39
- const shorthandRegex = /^(#)([a-f\d])([a-f\d])([a-f\d])$/i;
40
- const shorthand = hex.match(shorthandRegex);
41
- if (shorthand) {
42
- const convertedHex = shorthand[1] + shorthand[2] + shorthand[2] + shorthand[3] + shorthand[3] + shorthand[4] + shorthand[4];
43
- return convertedHex;
44
- }
45
- else {
46
- return hex;
47
- }
48
- }
49
- export function isValidHexColor(color) {
50
- return /^#[0-9A-F]{6}$/i.test(color);
51
- }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jc3MuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvZnVuY3Rpb25zL2NvcmUtY3NzLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFpQjtJQUNoRCxJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQztRQUU5QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoRixNQUFNLHdCQUF3QixHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5RCxNQUFNLHdCQUF3QixHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU5RDs7Ozs7V0FLRztRQUNILE1BQU0sYUFBYSxHQUNqQix3QkFBd0IsR0FBRyx3QkFBd0I7WUFDakQsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7WUFDdkUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUU1RTs7O1dBR0c7UUFDSCxJQUFJLGFBQWEsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDN0IsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLE1BQU0sY0FBYyxHQUFHLG1DQUFtQyxDQUFDO0lBQzNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3SCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2xvciBmcm9tICdjb2xvcic7XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbW9zdCBlbGlnaWJsZSB0ZXh0IGNvbG9yIGZvciBhIGdpdmVuIGJhY2tncm91bmQgY29sb3IgKGJsYWNrIG9yIHdoaXRlKSwgZGVwZW5kaW5nIG9uIHRoZSBsdW1pbmFuY2Ugb2YgdGhlXG4gKiBiYWNrZ3JvdW5kIGNvbG9yLiBJbiBjYXNlIHRoZSBwcm92aWRlZCBjb2xvciBpcyB1bmRlZmluZWQgb3IgaW52YWxpZCwgd2hpdGUgKCNGRkZGRkYpIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBjb2xvckhleCBDb2xvciBzdHJpbmcgaW4gaGV4YWRlY2ltYWwgZW5jb2RpbmcuXG4gKiBAcmV0dXJucyBFcXVpdmFsZW50IGNvbnRyYXN0IGNvbG9yIGluIGhleGFkZWNpbWFsIGVuY29kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJhc3RDb2xvcihjb2xvckhleD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29sb3JIZXggPSBjb2xvckhleCB8fCAnIzAwMCc7XG5cbiAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihjb2xvckhleCk7XG4gICAgY29uc3QgZm9yZWdyb3VuZENvbG9yID0gQ29sb3IoYmFja2dyb3VuZENvbG9yLmlzRGFyaygpID8gJyNGRkZGRkYnIDogJyMwMDAwMDAnKTtcblxuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvckx1bWluYW5jZSA9IGJhY2tncm91bmRDb2xvci5sdW1pbm9zaXR5KCk7XG4gICAgY29uc3QgZm9yZWdyb3VuZENvbG9yTHVtaW5hbmNlID0gZm9yZWdyb3VuZENvbG9yLmx1bWlub3NpdHkoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZSB0aGUgY29udHJhc3QgcmF0aW8gZm9ybXVsYSB0byBkZXRlcm1pbmUgdGhlIG1vc3QgZWxpZ2libGUgdGV4dCBjb2xvciBmb3IgdGhlIGdpdmVuIGJhY2tncm91bmQgY29sb3IuXG4gICAgICogSXQgaXMgcG9zc2libGUgdGhhIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGlzIGRhcmsgYmFzZWQgb24gdGhlIFJHQiB2YWx1ZSwgYnV0IGhhcyBvcGFjaXR5LCB3aGljaCBtYWtlcyBpdCBsaWdodC5cbiAgICAgKiBJbiBzdWNoIGNhc2VzLCB0aGUgbHVtaW5hbmNlIHZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb2xvci4gVGhlIHNvbHV0aW9uIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZTpcbiAgICAgKiBodHRwczovL2Rldi50by9hbHZhcm9tb250b3JvL2J1aWxkaW5nLXlvdXItb3duLWNvbG9yLWNvbnRyYXN0LWNoZWNrZXItNGo3b1xuICAgICAqL1xuICAgIGNvbnN0IGNvbnRyYXN0UmF0aW8gPVxuICAgICAgYmFja2dyb3VuZENvbG9yTHVtaW5hbmNlID4gZm9yZWdyb3VuZENvbG9yTHVtaW5hbmNlXG4gICAgICAgID8gKGZvcmVncm91bmRDb2xvckx1bWluYW5jZSArIDAuMDUpIC8gKGJhY2tncm91bmRDb2xvckx1bWluYW5jZSArIDAuMDUpXG4gICAgICAgIDogKGJhY2tncm91bmRDb2xvckx1bWluYW5jZSArIDAuMDUpIC8gKGZvcmVncm91bmRDb2xvckx1bWluYW5jZSArIDAuMDUpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgY29udHJhc3QgcmF0aW8gZm9yIFdDQUcgMi4wIGxldmVsIEFBIGNvbXBsaWFuY2UgbGV2ZWwgZm9yIHNtYWxsIHRleHQuIElmIHRoZVxuICAgICAqIGNvbnRyYXN0IHJhdGlvIGlzIGdyZWF0ZXIgdGhhbiAxIC8gNC41LCByZXR1cm4gdGhlIGludmVydGVkIGZvcmVncm91bmQgY29sb3IuXG4gICAgICovXG4gICAgaWYgKGNvbnRyYXN0UmF0aW8gPj0gMSAvIDQuNSkge1xuICAgICAgcmV0dXJuIGZvcmVncm91bmRDb2xvci5uZWdhdGUoKS5oZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9yZWdyb3VuZENvbG9yLmhleCgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyNGRkZGRkYnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG9ydGhhbmRIZXhIYW5kbGUoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzaG9ydGhhbmRSZWdleCA9IC9eKCMpKFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xuICBjb25zdCBzaG9ydGhhbmQgPSBoZXgubWF0Y2goc2hvcnRoYW5kUmVnZXgpO1xuICBpZiAoc2hvcnRoYW5kKSB7XG4gICAgY29uc3QgY29udmVydGVkSGV4ID0gc2hvcnRoYW5kWzFdISArIHNob3J0aGFuZFsyXSArIHNob3J0aGFuZFsyXSArIHNob3J0aGFuZFszXSArIHNob3J0aGFuZFszXSArIHNob3J0aGFuZFs0XSArIHNob3J0aGFuZFs0XTtcbiAgICByZXR1cm4gY29udmVydGVkSGV4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBoZXg7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXhDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KGNvbG9yKTtcbn1cbiJdfQ==
@@ -1,80 +0,0 @@
1
- const defaultElement = 'span';
2
- const defaultClassName = 'highlight';
3
- /**
4
- * Highlights all occurrences of search terms in a given element.
5
- * This function will recursively traverse all child nodes of the given element,
6
- * and apply the highlight to text nodes only.
7
- *
8
- * Replaces the 'jquery-highlight' plugin: https://github.com/knownasilya/jquery-highlight/blob/master/jquery.highlight.js
9
- * @param elem The element to highlight
10
- * @param terms The search terms to highlight - string or array of strings
11
- * @param settings Optional settings, @see HighlightTextSettings
12
- */
13
- export function highlightText(elem, terms, settings) {
14
- const node = elem;
15
- if (!isSupportedNode(node))
16
- return;
17
- if (typeof terms === 'string') {
18
- terms = [terms];
19
- }
20
- terms = terms.map((term) => term.trim().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'));
21
- terms = terms.filter((term) => term && term.length > 0);
22
- if (terms.length === 0) {
23
- return;
24
- }
25
- const flag = settings?.caseSensitive ? '' : 'i';
26
- let pattern = '(' + terms.join('|') + ')';
27
- if (settings?.wordsOnly) {
28
- pattern = '\\b' + pattern + '\\b';
29
- }
30
- const regexp = new RegExp(pattern, flag);
31
- processNode(node, regexp, settings);
32
- }
33
- /**
34
- * Recursively process a given node
35
- * @param node The node to process
36
- * @param regexp The regular expression to apply
37
- * @param settings The settings to apply
38
- */
39
- function processNode(node, regexp, settings) {
40
- const nodeName = settings?.element || defaultElement;
41
- const className = settings?.className || defaultClassName;
42
- if (node.nodeType === Node.TEXT_NODE) {
43
- applyHightlightToTextNode(node, regexp, settings);
44
- }
45
- else if (node.nodeType === Node.ELEMENT_NODE &&
46
- node.childNodes && // only element nodes that have children
47
- !/(script|style)/i.test(node.nodeName) && // ignore script and style nodes
48
- !(node.nodeName === nodeName.toUpperCase() && node.className === className) // ignore already highlighted nodes
49
- ) {
50
- node.childNodes.forEach((childNode) => {
51
- processNode(childNode, regexp, settings);
52
- });
53
- }
54
- }
55
- /**
56
- * Apply highlight to a given text node
57
- * @param node The text node to apply highlight to
58
- * @param regexp The regular expression to apply
59
- * @param settings The settings to apply
60
- */
61
- function applyHightlightToTextNode(node, regexp, settings) {
62
- const match = node.data.match(regexp);
63
- if (!match || typeof match.index === 'undefined')
64
- return;
65
- const wrapper = document.createElement(settings?.element || defaultElement);
66
- wrapper.classList.add(settings?.className || defaultClassName);
67
- const wordNode = node.splitText(match.index);
68
- const nextNode = wordNode.splitText(match[0].length);
69
- const wordClone = wordNode.cloneNode(true);
70
- wrapper.appendChild(wordClone);
71
- node.parentNode?.replaceChild(wrapper, wordNode);
72
- if (match.length > 1) {
73
- // recursively apply highlightText if there are multiple matches in the same text node
74
- processNode(nextNode, regexp, settings);
75
- }
76
- }
77
- function isSupportedNode(node) {
78
- return node.nodeType === Node.ELEMENT_NODE && node.nodeName !== 'SCRIPT' && node.nodeName !== 'STYLE';
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRleHQuZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL2Z1bmN0aW9ucy9oaWdobGlnaHQtdGV4dC5mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQkEsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBQzlCLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0FBRXJDOzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBaUIsRUFBRSxLQUF3QixFQUFFLFFBQWdDO0lBQ3pHLE1BQU0sSUFBSSxHQUFHLElBQVksQ0FBQztJQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU87SUFFbkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDaEQsSUFBSSxPQUFPLEdBQUcsR0FBRyxH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QVksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQztBQUN4RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBIaWdobGlnaHRUZXh0U2V0dGluZ3Mge1xuICAvKipcbiAgICogV2hldGhlciB0byBtYXRjaCBjYXNlIHNlbnNpdGl2ZWx5XG4gICAqL1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbWF0Y2ggd2hvbGUgd29yZHMgb25seVxuICAgKi9cbiAgd29yZHNPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIHdyYXAgaGlnaGxpZ2h0ZWQgdGVybXMgaW5cbiAgICovXG4gIGVsZW1lbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgbmFtZSB0byBhcHBseSB0byBoaWdobGlnaHRlZCB0ZXJtc1xuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBkZWZhdWx0RWxlbWVudCA9ICdzcGFuJztcbmNvbnN0IGRlZmF1bHRDbGFzc05hbWUgPSAnaGlnaGxpZ2h0JztcblxuLyoqXG4gKiBIaWdobGlnaHRzIGFsbCBvY2N1cnJlbmNlcyBvZiBzZWFyY2ggdGVybXMgaW4gYSBnaXZlbiBlbGVtZW50LlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFsbCBjaGlsZCBub2RlcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCxcbiAqIGFuZCBhcHBseSB0aGUgaGlnaGxpZ2h0IHRvIHRleHQgbm9kZXMgb25seS5cbiAqXG4gKiBSZXBsYWNlcyB0aGUgJ2pxdWVyeS1oaWdobGlnaHQnIHBsdWdpbjogaHR0cHM6Ly9naXRodWIuY29tL2tub3duYXNpbHlhL2pxdWVyeS1oaWdobGlnaHQvYmxvYi9tYXN0ZXIvanF1ZXJ5LmhpZ2hsaWdodC5qc1xuICogQHBhcmFtIGVsZW0gVGhlIGVsZW1lbnQgdG8gaGlnaGxpZ2h0XG4gKiBAcGFyYW0gdGVybXMgVGhlIHNlYXJjaCB0ZXJtcyB0byBoaWdobGlnaHQgLSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5nc1xuICogQHBhcmFtIHNldHRpbmdzIE9wdGlvbmFsIHNldHRpbmdzLCBAc2VlIEhpZ2hsaWdodFRleHRTZXR0aW5nc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHRUZXh0KGVsZW06IEhUTUxFbGVtZW50LCB0ZXJtczogc3RyaW5nIHwgc3RyaW5nW10sIHNldHRpbmdzPzogSGlnaGxpZ2h0VGV4dFNldHRpbmdzKTogdm9pZCB7XG4gIGNvbnN0IG5vZGUgPSBlbGVtIGFzIE5vZGU7XG4gIGlmICghaXNTdXBwb3J0ZWROb2RlKG5vZGUpKSByZXR1cm47XG5cbiAgaWYgKHR5cGVvZiB0ZXJtcyA9PT0gJ3N0cmluZycpIHtcbiAgICB0ZXJtcyA9IFt0ZXJtc107XG4gIH1cblxuICB0ZXJtcyA9IHRlcm1zLm1hcCgodGVybSkgPT4gdGVybS50cmltKCkucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKSk7XG4gIHRlcm1zID0gdGVybXMuZmlsdGVyKCh0ZXJtKSA9PiB0ZXJtICYmIHRlcm0ubGVuZ3RoID4gMCk7XG4gIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmbGFnID0gc2V0dGluZ3M/LmNhc2VTZW5zaXRpdmUgPyAnJyA6ICdpJztcbiAgbGV0IHBhdHRlcm4gPSAnKCcgKyB0ZXJtcy5qb2luKCd8JykgKyAnKSc7XG4gIGlmIChzZXR0aW5ncz8ud29yZHNPbmx5KSB7XG4gICAgcGF0dGVybiA9ICdcXFxcYicgKyBwYXR0ZXJuICsgJ1xcXFxiJztcbiAgfVxuXG4gIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZyk7XG4gIHByb2Nlc3NOb2RlKG5vZGUsIHJlZ2V4cCwgc2V0dGluZ3MpO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgYSBnaXZlbiBub2RlXG4gKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBwcm9jZXNzXG4gKiBAcGFyYW0gcmVnZXhwIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gYXBwbHlcbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3MgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc05vZGUobm9kZTogTm9kZSwgcmVnZXhwOiBSZWdFeHAsIHNldHRpbmdzPzogSGlnaGxpZ2h0VGV4dFNldHRpbmdzKTogdm9pZCB7XG4gIGNvbnN0IG5vZGVOYW1lID0gc2V0dGluZ3M/LmVsZW1lbnQgfHwgZGVmYXVsdEVsZW1lbnQ7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHNldHRpbmdzPy5jbGFzc05hbWUgfHwgZGVmYXVsdENsYXNzTmFtZTtcblxuICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICBhcHBseUhpZ2h0bGlnaHRUb1RleHROb2RlKG5vZGUgYXMgVGV4dCwgcmVnZXhwLCBzZXR0aW5ncyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICBub2RlLmNoaWxkTm9kZXMgJiYgLy8gb25seSBlbGVtZW50IG5vZGVzIHRoYXQgaGF2ZSBjaGlsZHJlblxuICAgICEvKHNjcmlwdHxzdHlsZSkvaS50ZXN0KG5vZGUubm9kZU5hbWUpICYmIC8vIGlnbm9yZSBzY3JpcHQgYW5kIHN0eWxlIG5vZGVzXG4gICAgIShub2RlLm5vZGVOYW1lID09PSBub2RlTmFtZS50b1VwcGVyQ2FzZSgpICYmIChub2RlIGFzIEVsZW1lbnQpLmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lKSAvLyBpZ25vcmUgYWxyZWFkeSBoaWdobGlnaHRlZCBub2Rlc1xuICApIHtcbiAgICBub2RlLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBwcm9jZXNzTm9kZShjaGlsZE5vZGUsIHJlZ2V4cCwgc2V0dGluZ3MpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQXBwbHkgaGlnaGxpZ2h0IHRvIGEgZ2l2ZW4gdGV4dCBub2RlXG4gKiBAcGFyYW0gbm9kZSBUaGUgdGV4dCBub2RlIHRvIGFwcGx5IGhpZ2hsaWdodCB0b1xuICogQHBhcmFtIHJlZ2V4cCBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGFwcGx5XG4gKiBAcGFyYW0gc2V0dGluZ3MgVGhlIHNldHRpbmdzIHRvIGFwcGx5XG4gKi9cbmZ1bmN0aW9uIGFwcGx5SGlnaHRsaWdodFRvVGV4dE5vZGUobm9kZTogVGV4dCwgcmVnZXhwOiBSZWdFeHAsIHNldHRpbmdzPzogSGlnaGxpZ2h0VGV4dFNldHRpbmdzKSB7XG4gIGNvbnN0IG1hdGNoID0gbm9kZS5kYXRhLm1hdGNoKHJlZ2V4cCk7XG4gIGlmICghbWF0Y2ggfHwgdHlwZW9mIG1hdGNoLmluZGV4ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHNldHRpbmdzPy5lbGVtZW50IHx8IGRlZmF1bHRFbGVtZW50KTtcbiAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKHNldHRpbmdzPy5jbGFzc05hbWUgfHwgZGVmYXVsdENsYXNzTmFtZSk7XG5cbiAgY29uc3Qgd29yZE5vZGUgPSBub2RlLnNwbGl0VGV4dChtYXRjaC5pbmRleCk7XG4gIGNvbnN0IG5leHROb2RlID0gd29yZE5vZGUuc3BsaXRUZXh0KG1hdGNoWzBdLmxlbmd0aCk7XG4gIGNvbnN0IHdvcmRDbG9uZSA9IHdvcmROb2RlLmNsb25lTm9kZSh0cnVlKTtcbiAgd3JhcHBlci5hcHBlbmRDaGlsZCh3b3JkQ2xvbmUpO1xuICBub2RlLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZCh3cmFwcGVyLCB3b3JkTm9kZSk7XG5cbiAgaWYgKG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZWN1cnNpdmVseSBhcHBseSBoaWdobGlnaHRUZXh0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXRjaGVzIGluIHRoZSBzYW1lIHRleHQgbm9kZVxuICAgIHByb2Nlc3NOb2RlKG5leHROb2RlLCByZWdleHAsIHNldHRpbmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N1cHBvcnRlZE5vZGUobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZS5ub2RlTmFtZSAhPT0gJ1NDUklQVCcgJiYgbm9kZS5ub2RlTmFtZSAhPT0gJ1NUWUxFJztcbn1cbiJdfQ==
@@ -1,146 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * This pipe transforms...
5
- * - "raw" http(s) links
6
- * - markdown link syntax
7
- * ... into clickable anchor elements.
8
- *
9
- * The characters "<" and ">" are escaped with their HTML entities &lt; and &gt;.
10
- *
11
- * You have an user interface where you don't want clickable links but also
12
- * don't want users to see the "ugly" markdown link syntax?
13
- * -> Use the 'lxUnlikify' pipe to replace markdown link syntax with just the link name
14
- */
15
- export class LxLinkifyPipe {
16
- /**
17
- * This is not the "one URL regex to rule them all", but a more realistic one which should work
18
- * for any URLs that our customers include in text fields on a Fact Sheet.
19
- *
20
- * Regex rules explained in plain text:
21
- *
22
- * (?:(?:https?):\/\/) -> Links must start with "https://" or "http://"
23
- *
24
- * (?:[^\s/$.?#][^\s]*(?<![\.)])) LET'S SPLIT THIS ONE UP
25
- *
26
- * [^\s/$.?#][^\s]* -> Match any legal URL character until the next whitespace
27
- * (?<![\.)] -> A negative lookahead to prevent matching a dot or parenthesis following a URL
28
- *
29
- * Link to regex101: https://regex101.com/r/d3KtfH/1 (NOTE: please update this link when changing the regex)
30
- */
31
- static { this.HTTP_LINK_REGEX = /(?:(?:https?):\/\/)(?:[^\s/$.?#][^\s]*)/gi; }
32
- /**
33
- * This will match the markdown link syntax: [link name](url)
34
- * Regex rules explained in plain text:
35
- *
36
- * (?:\[([^\]]*)\]) -> Match any characters inside square brackets
37
- * \(([^\s\/$.?#][^\s]*)\) -> Notice that this is the same regex as the HTTP_LINK_REGEX above,
38
- * but without the requirement for the http protocol.
39
- * This allows for links without including the protocol or also "mailto:hello@world.de" links
40
- *
41
- * Link to regex101: https://regex101.com/r/5UMUH8/1
42
- */
43
- static { this.NAMED_LINK_REGEX = /(?:\[([^\]]*)\])\(([^\s\/$.?#][^\s]*)\)/gi; }
44
- transform(text, escape = true) {
45
- if (text && typeof text === 'string') {
46
- const textWithRawLinks = this.wrapRawHttpLinksWithAnchorTags(escape ? this.escapeHtmlInUserProvidedString(text) : text);
47
- const textWithRawAndNamedLinks = this.turnMarkdownStyleLinksIntoAnchorTags(textWithRawLinks);
48
- return textWithRawAndNamedLinks;
49
- }
50
- else {
51
- return text;
52
- }
53
- }
54
- turnMarkdownStyleLinksIntoAnchorTags(text) {
55
- let textWithRawAndNamedLinks = text;
56
- const namedLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.NAMED_LINK_REGEX, text);
57
- namedLinkMatches.forEach((namedLinkMatch) => {
58
- const [source, name, url] = namedLinkMatch;
59
- const urlIsValid = url && !/javascript\:/i.test(url);
60
- if (source && name && urlIsValid) {
61
- textWithRawAndNamedLinks = textWithRawAndNamedLinks.replace(source, `<a href="${url}" target="_blank" rel="noopener noreferrer">${name}</a>`);
62
- }
63
- });
64
- return textWithRawAndNamedLinks;
65
- }
66
- wrapRawHttpLinksWithAnchorTags(text) {
67
- let textWithRawLinks = text;
68
- /**
69
- * Keeping track of this index prevents infinite loops
70
- * where a previously processed link starts with the same characters
71
- * as a second link.
72
- * e.g. https://angular.io/docs followed by https://angular.io
73
- */
74
- let nextIndexToStartReplacingFrom = 0;
75
- const rawLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.HTTP_LINK_REGEX, text);
76
- rawLinkMatches.forEach((rawLinkMatch) => {
77
- const [url] = rawLinkMatch;
78
- const wrapUrlInAnchor = (sanitizedUrlMatch) => {
79
- const firstPart = textWithRawLinks.substring(0, nextIndexToStartReplacingFrom);
80
- const anchorTagHtml = `<a href="${sanitizedUrlMatch}" target="_blank" rel="noopener noreferrer">${sanitizedUrlMatch}</a>`;
81
- const secondPart = textWithRawLinks.substring(nextIndexToStartReplacingFrom).replace(sanitizedUrlMatch, anchorTagHtml);
82
- textWithRawLinks = firstPart + secondPart;
83
- nextIndexToStartReplacingFrom = rawLinkMatch.index + anchorTagHtml.length;
84
- };
85
- if (url) {
86
- /*
87
- * TODO: get rid of all this code once Safari supports negative lookbehinds in regular expressions
88
- * The following is RegExp that handles the same stuff as the JS code below:
89
- *
90
- * /(?:(?:(?<!\]\())(?:https|http):\/\/)(?:[^\s/$.?#][^\s]*(?<![\.)]))/gi;
91
- *
92
- * Demo on regex101: https://regex101.com/r/7Vl9bg/1
93
- *
94
- * Check lookbehind support here: https://caniuse.com/?search=lookbehind
95
- */
96
- const lastUrlCharacterIndex = rawLinkMatch.index + url.length - 1;
97
- const textUsedToPerformMatching = rawLinkMatch.input;
98
- const lastCharacterInUrl = textUsedToPerformMatching[lastUrlCharacterIndex];
99
- const twoCharactersInFrontOfTheLink = rawLinkMatch.index > 3
100
- ? `${textUsedToPerformMatching[rawLinkMatch.index - 2]}${textUsedToPerformMatching[rawLinkMatch.index - 1]}`
101
- : '';
102
- const isMarkdownSyntaxLink = twoCharactersInFrontOfTheLink === '](';
103
- if (!isMarkdownSyntaxLink && lastCharacterInUrl === '.') {
104
- const characterAfterUrl = textUsedToPerformMatching[lastUrlCharacterIndex + 1];
105
- if (!characterAfterUrl || characterAfterUrl === ' ' || characterAfterUrl === '\n') {
106
- const urlWithoutDotAtTheEnd = url.slice(0, -1);
107
- wrapUrlInAnchor(urlWithoutDotAtTheEnd);
108
- }
109
- }
110
- else if (!isMarkdownSyntaxLink) {
111
- wrapUrlInAnchor(url);
112
- }
113
- }
114
- });
115
- return textWithRawLinks;
116
- }
117
- getAllRegexMatches(regex, input) {
118
- let match;
119
- const matches = [];
120
- while ((match = regex.exec(input)) !== null) {
121
- matches.push(match);
122
- }
123
- return matches;
124
- }
125
- /**
126
- * We assume that lxLinkify is exclusively used on user provided strings.
127
- * This is why we want to escape any other HTML tags that are already present in the string.
128
- * The logic implemented here has been used with no issues for three years in our Fact Sheet comments. See https://github.com/gregjacobs/Autolinker.js/pull/313
129
- *
130
- * When using lxLinkify in conjunction with other pipes that add HTML, make sure to use lxLinkify first,
131
- * so that it doesn't escape the HTML of any previous pipes.
132
- */
133
- escapeHtmlInUserProvidedString(input) {
134
- return input.replace(/<|>/gi, (match) => '&' + (match === '>' ? 'g' : 'l') + 't;');
135
- }
136
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LxLinkifyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
137
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: LxLinkifyPipe, isStandalone: true, name: "lxLinkify" }); }
138
- }
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LxLinkifyPipe, decorators: [{
140
- type: Pipe,
141
- args: [{
142
- name: 'lxLinkify',
143
- standalone: true
144
- }]
145
- }] });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2lmeS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvY29yZS11aS9saW5raWZ5L2xpbmtpZnkucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFFcEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQUN4Qjs7Ozs7Ozs7Ozs7Ozs7T0FjRzthQUNvQixvQkFBZSxHQUFHLDJDQUEyQyxBQUE5QyxDQUErQztJQUVyRjs7Ozs7Ozs7OztPQVVHO2FBQ29CLHFCQUFnQixHQUFHLDJDQUEyQyxBQUE5QyxDQUErQztJQUV0RixTQUFTLENBQUMsSUFBb0IsRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUMzQyxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEgsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RixPQUFPLHdCQUF3QixDQUFDO1FBQ2xDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9DQUFvQyxDQUFDLElBQVk7UUFDdkQsSUFBSSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxD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QUFvQixFQUFFLENBQUM7b0JBQ2pDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ3JELElBQUksS0FBNkIsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssOEJBQThCLENBQUMsS0FBYTtRQUNsRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JGLENBQUM7OEdBaklVLGFBQWE7NEdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRoaXMgcGlwZSB0cmFuc2Zvcm1zLi4uXG4gKiAtIFwicmF3XCIgaHR0cChzKSBsaW5rc1xuICogLSBtYXJrZG93biBsaW5rIHN5bnRheFxuICogLi4uIGludG8gY2xpY2thYmxlIGFuY2hvciBlbGVtZW50cy5cbiAqXG4gKiBUaGUgY2hhcmFjdGVycyBcIjxcIiBhbmQgXCI+XCIgYXJlIGVzY2FwZWQgd2l0aCB0aGVpciBIVE1MIGVudGl0aWVzICZsdDsgYW5kICZndDsuXG4gKlxuICogWW91IGhhdmUgYW4gdXNlciBpbnRlcmZhY2Ugd2hlcmUgeW91IGRvbid0IHdhbnQgY2xpY2thYmxlIGxpbmtzIGJ1dCBhbHNvXG4gKiBkb24ndCB3YW50IHVzZXJzIHRvIHNlZSB0aGUgXCJ1Z2x5XCIgbWFya2Rvd24gbGluayBzeW50YXg/XG4gKiAtPiBVc2UgdGhlICdseFVubGlraWZ5JyBwaXBlIHRvIHJlcGxhY2UgbWFya2Rvd24gbGluayBzeW50YXggd2l0aCBqdXN0IHRoZSBsaW5rIG5hbWVcbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnbHhMaW5raWZ5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMeExpbmtpZnlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIG5vdCB0aGUgXCJvbmUgVVJMIHJlZ2V4IHRvIHJ1bGUgdGhlbSBhbGxcIiwgYnV0IGEgbW9yZSByZWFsaXN0aWMgb25lIHdoaWNoIHNob3VsZCB3b3JrXG4gICAqIGZvciBhbnkgVVJMcyB0aGF0IG91ciBjdXN0b21lcnMgaW5jbHVkZSBpbiB0ZXh0IGZpZWxkcyBvbiBhIEZhY3QgU2hlZXQuXG4gICAqXG4gICAqIFJlZ2V4IHJ1bGVzIGV4cGxhaW5lZCBpbiBwbGFpbiB0ZXh0OlxuICAgKlxuICAgKiAoPzooPzpodHRwcz8pOlxcL1xcLykgICAgICAgLT4gICAgTGlua3MgbXVzdCBzdGFydCB3aXRoIFwiaHR0cHM6Ly9cIiBvciBcImh0dHA6Ly9cIlxuICAgKlxuICAgKiAoPzpbXlxccy8kLj8jXVteXFxzXSooPzwhW1xcLildKSkgTEVUJ1MgU1BMSVQgVEhJUyBPTkUgVVBcbiAgICpcbiAgICogW15cXHMvJC4/I11bXlxcc10qICAgLT4gICAgTWF0Y2ggYW55IGxlZ2FsIFVSTCBjaGFyYWN0ZXIgdW50aWwgdGhlIG5leHQgd2hpdGVzcGFjZVxuICAgKiAoPzwhW1xcLildICAgICAgICAgIC0+ICAgIEEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIHByZXZlbnQgbWF0Y2hpbmcgYSBkb3Qgb3IgcGFyZW50aGVzaXMgZm9sbG93aW5nIGEgVVJMXG4gICAqXG4gICAqIExpbmsgdG8gcmVnZXgxMDE6IGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvZDNLdGZILzEgKE5PVEU6IHBsZWFzZSB1cGRhdGUgdGhpcyBsaW5rIHdoZW4gY2hhbmdpbmcgdGhlIHJlZ2V4KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBIVFRQX0xJTktfUkVHRVggPSAvKD86KD86aHR0cHM/KTpcXC9cXC8pKD86W15cXHMvJC4/I11bXlxcc10qKS9naTtcblxuICAvKipcbiAgICogVGhpcyB3aWxsIG1hdGNoIHRoZSBtYXJrZG93biBsaW5rIHN5bnRheDogW2xpbmsgbmFtZV0odXJsKVxuICAgKiBSZWdleCBydWxlcyBleHBsYWluZWQgaW4gcGxhaW4gdGV4dDpcbiAgICpcbiAgICogKD86XFxbKFteXFxdXSopXFxdKSAgICAgICAgICAgIC0+ICAgICBNYXRjaCBhbnkgY2hhcmFjdGVycyBpbnNpZGUgc3F1YXJlIGJyYWNrZXRzXG4gICAqIFxcKChbXlxcc1xcLyQuPyNdW15cXHNdKilcXCkgICAgIC0+ICAgICBOb3RpY2UgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIHJlZ2V4IGFzIHRoZSBIVFRQX0xJTktfUkVHRVggYWJvdmUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHdpdGhvdXQgdGhlIHJlcXVpcmVtZW50IGZvciB0aGUgaHR0cCBwcm90b2NvbC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBmb3IgbGlua3Mgd2l0aG91dCBpbmNsdWRpbmcgdGhlIHByb3RvY29sIG9yIGFsc28gXCJtYWlsdG86aGVsbG9Ad29ybGQuZGVcIiBsaW5rc1xuICAgKlxuICAgKiBMaW5rIHRvIHJlZ2V4MTAxOiBodHRwczovL3JlZ2V4MTAxLmNvbS9yLzVVTVVIOC8xXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUVEX0xJTktfUkVHRVggPSAvKD86XFxbKFteXFxdXSopXFxdKVxcKChbXlxcc1xcLyQuPyNdW15cXHNdKilcXCkvZ2k7XG5cbiAgdHJhbnNmb3JtKHRleHQ/OiBzdHJpbmcgfCBudWxsLCBlc2NhcGUgPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgaWYgKHRleHQgJiYgdHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0ZXh0V2l0aFJhd0xpbmtzID0gdGhpcy53cmFwUmF3SHR0cExpbmtzV2l0aEFuY2hvclRhZ3MoZXNjYXBlID8gdGhpcy5lc2NhcGVIdG1sSW5Vc2VyUHJvdmlkZWRTdHJpbmcodGV4dCkgOiB0ZXh0KTtcbiAgICAgIGNvbnN0IHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcyA9IHRoaXMudHVybk1hcmtkb3duU3R5bGVMaW5rc0ludG9BbmNob3JUYWdzKHRleHRXaXRoUmF3TGlua3MpO1xuICAgICAgcmV0dXJuIHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0dXJuTWFya2Rvd25TdHlsZUxpbmtzSW50b0FuY2hvclRhZ3ModGV4dDogc3RyaW5nKSB7XG4gICAgbGV0IHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcyA9IHRleHQ7XG4gICAgY29uc3QgbmFtZWRMaW5rTWF0Y2hlcyA9IHRoaXMuZ2V0QWxsUmVnZXhNYXRjaGVzKEx4TGlua2lmeVBpcGUuTkFNRURfTElOS19SRUdFWCwgdGV4dCk7XG4gICAgbmFtZWRMaW5rTWF0Y2hlcy5mb3JFYWNoKChuYW1lZExpbmtNYXRjaCkgPT4ge1xuICAgICAgY29uc3QgW3NvdXJjZSwgbmFtZSwgdXJsXSA9IG5hbWVkTGlua01hdGNoO1xuICAgICAgY29uc3QgdXJsSXNWYWxpZCA9IHVybCAmJiAhL2phdmFzY3JpcHRcXDovaS50ZXN0KHVybCk7XG4gICAgICBpZiAoc291cmNlICYmIG5hbWUgJiYgdXJsSXNWYWxpZCkge1xuICAgICAgICB0ZXh0V2l0aFJhd0FuZE5hbWVkTGlua3MgPSB0ZXh0V2l0aFJhd0FuZE5hbWVkTGlua3MucmVwbGFjZShcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgYDxhIGhyZWY9XCIke3VybH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+JHtuYW1lfTwvYT5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcztcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFJhd0h0dHBMaW5rc1dpdGhBbmNob3JUYWdzKHRleHQ6IHN0cmluZykge1xuICAgIGxldCB0ZXh0V2l0aFJhd0xpbmtzID0gdGV4dDtcbiAgICAvKipcbiAgICAgKiBLZWVwaW5nIHRyYWNrIG9mIHRoaXMgaW5kZXggcHJldmVudHMgaW5maW5pdGUgbG9vcHNcbiAgICAgKiB3aGVyZSBhIHByZXZpb3VzbHkgcHJvY2Vzc2VkIGxpbmsgc3RhcnRzIHdpdGggdGhlIHNhbWUgY2hhcmFjdGVyc1xuICAgICAqIGFzIGEgc2Vjb25kIGxpbmsuXG4gICAgICogZS5nLiBodHRwczovL2FuZ3VsYXIuaW8vZG9jcyBmb2xsb3dlZCBieSBodHRwczovL2FuZ3VsYXIuaW9cbiAgICAgKi9cbiAgICBsZXQgbmV4dEluZGV4VG9TdGFydFJlcGxhY2luZ0Zyb20gPSAwO1xuICAgIGNvbnN0IHJhd0xpbmtNYXRjaGVzID0gdGhpcy5nZXRBbGxSZWdleE1hdGNoZXMoTHhMaW5raWZ5UGlwZS5IVFRQX0xJTktfUkVHRVgsIHRleHQpO1xuICAgIHJhd0xpbmtNYXRjaGVzLmZvckVhY2goKHJhd0xpbmtNYXRjaCkgPT4ge1xuICAgICAgY29uc3QgW3VybF0gPSByYXdMaW5rTWF0Y2g7XG4gICAgICBjb25zdCB3cmFwVXJsSW5BbmNob3IgPSAoc2FuaXRpemVkVXJsTWF0Y2g6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSB0ZXh0V2l0aFJhd0xpbmtzLnN1YnN0cmluZygwLCBuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSk7XG4gICAgICAgIGNvbnN0IGFuY2hvclRhZ0h0bWwgPSBgPGEgaHJlZj1cIiR7c2FuaXRpemVkVXJsTWF0Y2h9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPiR7c2FuaXRpemVkVXJsTWF0Y2h9PC9hPmA7XG4gICAgICAgIGNvbnN0IHNlY29uZFBhcnQgPSB0ZXh0V2l0aFJhd0xpbmtzLnN1YnN0cmluZyhuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSkucmVwbGFjZShzYW5pdGl6ZWRVcmxNYXRjaCEsIGFuY2hvclRhZ0h0bWwpO1xuICAgICAgICB0ZXh0V2l0aFJhd0xpbmtzID0gZmlyc3RQYXJ0ICsgc2Vjb25kUGFydDtcbiAgICAgICAgbmV4dEluZGV4VG9TdGFydFJlcGxhY2luZ0Zyb20gPSByYXdMaW5rTWF0Y2guaW5kZXggKyBhbmNob3JUYWdIdG1sLmxlbmd0aDtcbiAgICAgIH07XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRPRE86IGdldCByaWQgb2YgYWxsIHRoaXMgY29kZSBvbmNlIFNhZmFyaSBzdXBwb3J0cyBuZWdhdGl2ZSBsb29rYmVoaW5kcyBpbiByZWd1bGFyIGV4cHJlc3Npb25zXG4gICAgICAgICAqIFRoZSBmb2xsb3dpbmcgaXMgUmVnRXhwIHRoYXQgaGFuZGxlcyB0aGUgc2FtZSBzdHVmZiBhcyB0aGUgSlMgY29kZSBiZWxvdzpcbiAgICAgICAgICpcbiAgICAgICAgICogLyg/Oig/Oig/PCFcXF1cXCgpKSg/Omh0dHBzfGh0dHApOlxcL1xcLykoPzpbXlxccy8kLj8jXVteXFxzXSooPzwhW1xcLildKSkvZ2k7XG4gICAgICAgICAqXG4gICAgICAgICAqIERlbW8gb24gcmVnZXgxMDE6IGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvN1ZsOWJnLzFcbiAgICAgICAgICpcbiAgICAgICAgICogQ2hlY2sgbG9va2JlaGluZCBzdXBwb3J0IGhlcmU6IGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1sb29rYmVoaW5kXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBsYXN0VXJsQ2hhcmFjdGVySW5kZXggPSByYXdMaW5rTWF0Y2guaW5kZXggKyB1cmwubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdGV4dFVzZWRUb1BlcmZvcm1NYXRjaGluZyA9IHJhd0xpbmtNYXRjaC5pbnB1dDtcbiAgICAgICAgY29uc3QgbGFzdENoYXJhY3RlckluVXJsID0gdGV4dFVzZWRUb1BlcmZvcm1NYXRjaGluZ1tsYXN0VXJsQ2hhcmFjdGVySW5kZXhdO1xuICAgICAgICBjb25zdCB0d29DaGFyYWN0ZXJzSW5Gcm9udE9mVGhlTGluayA9XG4gICAgICAgICAgcmF3TGlua01hdGNoLmluZGV4ID4gM1xuICAgICAgICAgICAgPyBgJHt0ZXh0VXNlZFRvUGVyZm9ybU1hdGNoaW5nW3Jhd0xpbmtNYXRjaC5pbmRleCAtIDJdfSR7dGV4dFVzZWRUb1BlcmZvcm1NYXRjaGluZ1tyYXdMaW5rTWF0Y2guaW5kZXggLSAxXX1gXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICBjb25zdCBpc01hcmtkb3duU3ludGF4TGluayA9IHR3b0NoYXJhY3RlcnNJbkZyb250T2ZUaGVMaW5rID09PSAnXSgnO1xuXG4gICAgICAgIGlmICghaXNNYXJrZG93blN5bnRheExpbmsgJiYgbGFzdENoYXJhY3RlckluVXJsID09PSAnLicpIHtcbiAgICAgICAgICBjb25zdCBjaGFyYWN0ZXJBZnRlclVybCA9IHRleHRVc2VkVG9QZXJmb3JtTWF0Y2hpbmdbbGFzdFVybENoYXJhY3RlckluZGV4ICsgMV07XG4gICAgICAgICAgaWYgKCFjaGFyYWN0ZXJBZnRlclVybCB8fCBjaGFyYWN0ZXJBZnRlclVybCA9PT0gJyAnIHx8IGNoYXJhY3RlckFmdGVyVXJsID09PSAnXFxuJykge1xuICAgICAgICAgICAgY29uc3QgdXJsV2l0aG91dERvdEF0VGhlRW5kID0gdXJsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHdyYXBVcmxJbkFuY2hvcih1cmxXaXRob3V0RG90QXRUaGVFbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNNYXJrZG93blN5bnRheExpbmspIHtcbiAgICAgICAgICB3cmFwVXJsSW5BbmNob3IodXJsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0ZXh0V2l0aFJhd0xpbmtzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxSZWdleE1hdGNoZXMocmVnZXg6IFJlZ0V4cCwgaW5wdXQ6IHN0cmluZykge1xuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICBjb25zdCBtYXRjaGVzOiBSZWdFeHBFeGVjQXJyYXlbXSA9IFtdO1xuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKGlucHV0KSkgIT09IG51bGwpIHtcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaCk7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdlIGFzc3VtZSB0aGF0IGx4TGlua2lmeSBpcyBleGNsdXNpdmVseSB1c2VkIG9uIHVzZXIgcHJvdmlkZWQgc3RyaW5ncy5cbiAgICogVGhpcyBpcyB3aHkgd2Ugd2FudCB0byBlc2NhcGUgYW55IG90aGVyIEhUTUwgdGFncyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHN0cmluZy5cbiAgICogVGhlIGxvZ2ljIGltcGxlbWVudGVkIGhlcmUgaGFzIGJlZW4gdXNlZCB3aXRoIG5vIGlzc3VlcyBmb3IgdGhyZWUgeWVhcnMgaW4gb3VyIEZhY3QgU2hlZXQgY29tbWVudHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3JlZ2phY29icy9BdXRvbGlua2VyLmpzL3B1bGwvMzEzXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgbHhMaW5raWZ5IGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgcGlwZXMgdGhhdCBhZGQgSFRNTCwgbWFrZSBzdXJlIHRvIHVzZSBseExpbmtpZnkgZmlyc3QsXG4gICAqIHNvIHRoYXQgaXQgZG9lc24ndCBlc2NhcGUgdGhlIEhUTUwgb2YgYW55IHByZXZpb3VzIHBpcGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBlc2NhcGVIdG1sSW5Vc2VyUHJvdmlkZWRTdHJpbmcoaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC88fD4vZ2ksIChtYXRjaCkgPT4gJyYnICsgKG1hdGNoID09PSAnPicgPyAnZycgOiAnbCcpICsgJ3Q7Jyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,51 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { LxLinkifyPipe } from './linkify.pipe';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * This pipe replaces markdown link syntax with just the link name (omits the link altogether).
6
- * Example: [Angular documentation](http://angular.io/docs) -> Angular documentation
7
- *
8
- * It can also be used for "bridging the gap" until your view is ready to use "lxLinkify"
9
- * and you just want to get rid of the "useless" markdown syntax fast.
10
- *
11
- * While there are views where we want markdown style links to be clickable anchor tags,
12
- * there are other views where this can degrade the UX.
13
- * Example: in the Fact Sheet list on the inventory list view, having an arbitrary number
14
- * of links on the page can slow down the keyboard navigation while navigating through the list.
15
- */
16
- export class LxUnlinkifyPipe {
17
- transform(text) {
18
- if (text && typeof text === 'string') {
19
- let textWhereMarkdownLinkSyntaxIsReplacedWithJustTheLinkName = text;
20
- const markdownLinkSyntaxMatches = this.getAllRegexMatches(LxLinkifyPipe.NAMED_LINK_REGEX, text);
21
- markdownLinkSyntaxMatches.forEach((markdownLinkSyntaxMatch) => {
22
- const [source, name] = markdownLinkSyntaxMatch;
23
- if (source && name) {
24
- textWhereMarkdownLinkSyntaxIsReplacedWithJustTheLinkName = textWhereMarkdownLinkSyntaxIsReplacedWithJustTheLinkName.replace(source, name);
25
- }
26
- });
27
- return textWhereMarkdownLinkSyntaxIsReplacedWithJustTheLinkName;
28
- }
29
- else {
30
- return text;
31
- }
32
- }
33
- getAllRegexMatches(regex, input) {
34
- let match;
35
- const matches = [];
36
- while ((match = regex.exec(input)) !== null) {
37
- matches.push(match);
38
- }
39
- return matches;
40
- }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LxUnlinkifyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
42
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: LxUnlinkifyPipe, isStandalone: true, name: "lxUnlinkify" }); }
43
- }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LxUnlinkifyPipe, decorators: [{
45
- type: Pipe,
46
- args: [{
47
- name: 'lxUnlinkify',
48
- standalone: true
49
- }]
50
- }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5saW5raWZ5LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL2xpbmtpZnkvdW5saW5raWZ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUUvQzs7Ozs7Ozs7Ozs7R0FXRztBQUtILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBQyxJQUFvQjtRQUM1QixJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLHdEQUF3RCxHQUFHLElBQUksQ0FBQztZQUNwRSxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEcseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsRUFBRTtnQkFDNUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztnQkFDL0MsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ25CLHdEQUF3RCxHQUFHLHdEQUF3RCxDQUFDLE9BQU8sQ0FDekgsTUFBTSxFQUNOLElBQUksQ0FDTCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sd0RBQXdELENBQUM7UUFDbEUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBYSxFQUFFLEtBQWE7UUFDckQsSUFBSSxLQUE2QixDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFzQixFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0E1QlUsZUFBZTs0R0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxhQUFhO29CQUNuQixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMeExpbmtpZnlQaXBlIH0gZnJvbSAnLi9saW5raWZ5LnBpcGUnO1xuXG4vKipcbiAqIFRoaXMgcGlwZSByZXBsYWNlcyBtYXJrZG93biBsaW5rIHN5bnRheCB3aXRoIGp1c3QgdGhlIGxpbmsgbmFtZSAob21pdHMgdGhlIGxpbmsgYWx0b2dldGhlcikuXG4gKiBFeGFtcGxlOiBbQW5ndWxhciBkb2N1bWVudGF0aW9uXShodHRwOi8vYW5ndWxhci5pby9kb2NzKSAtPiBBbmd1bGFyIGRvY3VtZW50YXRpb25cbiAqXG4gKiBJdCBjYW4gYWxzbyBiZSB1c2VkIGZvciBcImJyaWRnaW5nIHRoZSBnYXBcIiB1bnRpbCB5b3VyIHZpZXcgaXMgcmVhZHkgdG8gdXNlIFwibHhMaW5raWZ5XCJcbiAqIGFuZCB5b3UganVzdCB3YW50IHRvIGdldCByaWQgb2YgdGhlIFwidXNlbGVzc1wiIG1hcmtkb3duIHN5bnRheCBmYXN0LlxuICpcbiAqIFdoaWxlIHRoZXJlIGFyZSB2aWV3cyB3aGVyZSB3ZSB3YW50IG1hcmtkb3duIHN0eWxlIGxpbmtzIHRvIGJlIGNsaWNrYWJsZSBhbmNob3IgdGFncyxcbiAqIHRoZXJlIGFyZSBvdGhlciB2aWV3cyB3aGVyZSB0aGlzIGNhbiBkZWdyYWRlIHRoZSBVWC5cbiAqIEV4YW1wbGU6IGluIHRoZSBGYWN0IFNoZWV0IGxpc3Qgb24gdGhlIGludmVudG9yeSBsaXN0IHZpZXcsIGhhdmluZyBhbiBhcmJpdHJhcnkgbnVtYmVyXG4gKiBvZiBsaW5rcyBvbiB0aGUgcGFnZSBjYW4gc2xvdyBkb3duIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIHdoaWxlIG5hdmlnYXRpbmcgdGhyb3VnaCB0aGUgbGlzdC5cbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnbHhVbmxpbmtpZnknLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEx4VW5saW5raWZ5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odGV4dD86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICBpZiAodGV4dCAmJiB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCB0ZXh0V2hlcmVNYXJrZG93bkxpbmtTeW50YXhJc1JlcGxhY2VkV2l0aEp1c3RUaGVMaW5rTmFtZSA9IHRleHQ7XG4gICAgICBjb25zdCBtYXJrZG93bkxpbmtTeW50YXhNYXRjaGVzID0gdGhpcy5nZXRBbGxSZWdleE1hdGNoZXMoTHhMaW5raWZ5UGlwZS5OQU1FRF9MSU5LX1JFR0VYLCB0ZXh0KTtcbiAgICAgIG1hcmtkb3duTGlua1N5bnRheE1hdGNoZXMuZm9yRWFjaCgobWFya2Rvd25MaW5rU3ludGF4TWF0Y2gpID0+IHtcbiAgICAgICAgY29uc3QgW3NvdXJjZSwgbmFtZV0gPSBtYXJrZG93bkxpbmtTeW50YXhNYXRjaDtcbiAgICAgICAgaWYgKHNvdXJjZSAmJiBuYW1lKSB7XG4gICAgICAgICAgdGV4dFdoZXJlTWFya2Rvd25MaW5rU3ludGF4SXNSZXBsYWNlZFdpdGhKdXN0VGhlTGlua05hbWUgPSB0ZXh0V2hlcmVNYXJrZG93bkxpbmtTeW50YXhJc1JlcGxhY2VkV2l0aEp1c3RUaGVMaW5rTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGV4dFdoZXJlTWFya2Rvd25MaW5rU3ludGF4SXNSZXBsYWNlZFdpdGhKdXN0VGhlTGlua05hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsUmVnZXhNYXRjaGVzKHJlZ2V4OiBSZWdFeHAsIGlucHV0OiBzdHJpbmcpIHtcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgY29uc3QgbWF0Y2hlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhpbnB1dCkpICE9PSBudWxsKSB7XG4gICAgICBtYXRjaGVzLnB1c2gobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxufVxuIl19
@@ -1,24 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { trimEnd } from 'lodash/fp';
3
- import * as i0 from "@angular/core";
4
- export class BrPipe {
5
- transform(input, options = {}) {
6
- if (input) {
7
- if (options.isTrimEnd) {
8
- input = trimEnd(input);
9
- }
10
- return input.replace(/[\n\r]/g, '<br/>');
11
- }
12
- return input;
13
- }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BrPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
15
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: BrPipe, isStandalone: true, name: "lxBr" }); }
16
- }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BrPipe, decorators: [{
18
- type: Pipe,
19
- args: [{
20
- name: 'lxBr',
21
- standalone: true
22
- }]
23
- }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvcGlwZXMvYnIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQU1wQyxNQUFNLE9BQU8sTUFBTTtJQUNqQixTQUFTLENBQUMsS0FBZ0MsRUFBRSxVQUFtQyxFQUFFO1FBQy9FLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzhHQVRVLE1BQU07NEdBQU4sTUFBTTs7MkZBQU4sTUFBTTtrQkFKbEIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsTUFBTTtvQkFDWixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0cmltRW5kIH0gZnJvbSAnbG9kYXNoL2ZwJztcblxuQFBpcGUoe1xuICBuYW1lOiAnbHhCcicsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQnJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShpbnB1dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgb3B0aW9uczogeyBpc1RyaW1FbmQ/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgaWYgKG9wdGlvbnMuaXNUcmltRW5kKSB7XG4gICAgICAgIGlucHV0ID0gdHJpbUVuZChpbnB1dCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvW1xcblxccl0vZywgJzxici8+Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dDtcbiAgfVxufVxuIl19
@@ -1,21 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { getContrastColor, isValidHexColor, shorthandHexHandle } from '../functions/core-css.helpers';
3
- import * as i0 from "@angular/core";
4
- export class ContrastColorPipe {
5
- transform(color) {
6
- if (color) {
7
- return isValidHexColor(shorthandHexHandle(color)) ? getContrastColor(color) : '';
8
- }
9
- return '';
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ContrastColorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
12
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: ContrastColorPipe, isStandalone: true, name: "lxContrastColor" }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ContrastColorPipe, decorators: [{
15
- type: Pipe,
16
- args: [{
17
- name: 'lxContrastColor',
18
- standalone: true
19
- }]
20
- }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhc3QtY29sb3IucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvcGlwZXMvY29udHJhc3QtY29sb3IucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBS3RHLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sZUFBZSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkYsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs4R0FOVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFKN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRDb250cmFzdENvbG9yLCBpc1ZhbGlkSGV4Q29sb3IsIHNob3J0aGFuZEhleEhhbmRsZSB9IGZyb20gJy4uL2Z1bmN0aW9ucy9jb3JlLWNzcy5oZWxwZXJzJztcbkBQaXBlKHtcbiAgbmFtZTogJ2x4Q29udHJhc3RDb2xvcicsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQ29udHJhc3RDb2xvclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjb2xvcikge1xuICAgICAgcmV0dXJuIGlzVmFsaWRIZXhDb2xvcihzaG9ydGhhbmRIZXhIYW5kbGUoY29sb3IpKSA/IGdldENvbnRyYXN0Q29sb3IoY29sb3IpIDogJyc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIl19
@@ -1,28 +0,0 @@
1
- import { Inject, Optional, Pipe } from '@angular/core';
2
- import { format } from 'date-fns';
3
- import { DATE_FN_LOCALE } from '../core-ui.constants';
4
- import * as i0 from "@angular/core";
5
- export class CustomDatePipe {
6
- constructor(getDateFnLocale) {
7
- this.getDateFnLocale = getDateFnLocale;
8
- }
9
- transform(value, f) {
10
- const locale = this.getDateFnLocale ? this.getDateFnLocale() : null;
11
- return value ? format(value, f, { locale }) : '';
12
- }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CustomDatePipe, deps: [{ token: DATE_FN_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); }
14
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: CustomDatePipe, isStandalone: true, name: "lxDate" }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CustomDatePipe, decorators: [{
17
- type: Pipe,
18
- args: [{
19
- name: 'lxDate',
20
- standalone: true
21
- }]
22
- }], ctorParameters: () => [{ type: Function, decorators: [{
23
- type: Optional
24
- }, {
25
- type: Inject,
26
- args: [DATE_FN_LOCALE]
27
- }] }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWRhdGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvcGlwZXMvY3VzdG9tLWRhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU10RCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUF3RCxlQUEwQjtRQUExQixvQkFBZSxHQUFmLGVBQWUsQ0FBVztJQUFHLENBQUM7SUFFdEYsU0FBUyxDQUFDLEtBQWdELEVBQUUsQ0FBUztRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQzs4R0FOVSxjQUFjLGtCQUNPLGNBQWM7NEdBRG5DLGNBQWM7OzJGQUFkLGNBQWM7a0JBSjFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFFYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIE9wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBEQVRFX0ZOX0xPQ0FMRSB9IGZyb20gJy4uL2NvcmUtdWkuY29uc3RhbnRzJztcblxuQFBpcGUoe1xuICBuYW1lOiAnbHhEYXRlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21EYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KERBVEVfRk5fTE9DQUxFKSBwcml2YXRlIGdldERhdGVGbkxvY2FsZT86IEZ1bmN0aW9uKSB7fVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIGY6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXREYXRlRm5Mb2NhbGUgPyB0aGlzLmdldERhdGVGbkxvY2FsZSgpIDogbnVsbDtcbiAgICByZXR1cm4gdmFsdWUgPyBmb3JtYXQodmFsdWUsIGYsIHsgbG9jYWxlIH0pIDogJyc7XG4gIH1cbn1cbiJdfQ==
@@ -1,37 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class DisplayAvatarsPipe {
4
- transform(users, type, size, userGroupWidth, autoScale, maxLength) {
5
- if (maxLength) {
6
- return users.slice(0, maxLength);
7
- }
8
- if (autoScale) {
9
- if (type === 'group') {
10
- const usersToShow = Math.floor((userGroupWidth - 2 * SIZES[size]) / ((SIZES[size] * 2) / 3)) + 1;
11
- return users.slice(0, usersToShow);
12
- }
13
- else {
14
- const usersToShow = Math.floor(userGroupWidth / (SIZES[size] + 2)) - 1;
15
- return users.slice(0, usersToShow);
16
- }
17
- }
18
- return users;
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DisplayAvatarsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
21
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: DisplayAvatarsPipe, isStandalone: true, name: "displayAvatars" }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DisplayAvatarsPipe, decorators: [{
24
- type: Pipe,
25
- args: [{
26
- name: 'displayAvatars',
27
- standalone: true
28
- }]
29
- }] });
30
- const SIZES = {
31
- XS: 16,
32
- S: 24,
33
- M: 32,
34
- L: 40,
35
- XL: 64
36
- };
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1hdmF0YXJzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL3BpcGVzL2Rpc3BsYXktYXZhdGFycy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFNBQVMsQ0FDUCxLQUE2QyxFQUM3QyxJQUE0QixFQUM1QixJQUFvQixFQUNwQixjQUFzQixFQUN0QixTQUFrQixFQUNsQixTQUFpQjtRQUVqQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0F0QlUsa0JBQWtCOzRHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBSjlCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQTRCRCxNQUFNLEtBQUssR0FBWTtJQUNyQixFQUFFLEVBQUUsRUFBRTtJQUNOLENBQUMsRUFBRSxFQUFFO0lBQ0wsQ0FBQyxFQUFFLEVBQUU7SUFDTCxDQUFDLEVBQUUsRUFBRTtJQUNMLEVBQUUsRUFBRSxFQUFFO0NBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXIsIFVzZXJBdmF0YXJTaXplIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyLm1vZGVsJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZGlzcGxheUF2YXRhcnMnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERpc3BsYXlBdmF0YXJzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oXG4gICAgdXNlcnM6IChVc2VyICYgeyB0ZWNobmljYWxVc2VyPzogYm9vbGVhbiB9KVtdLFxuICAgIHR5cGU6ICdpbmRpdmlkdWFsJyB8ICdncm91cCcsXG4gICAgc2l6ZTogVXNlckF2YXRhclNpemUsXG4gICAgdXNlckdyb3VwV2lkdGg6IG51bWJlcixcbiAgICBhdXRvU2NhbGU6IGJvb2xlYW4sXG4gICAgbWF4TGVuZ3RoOiBudW1iZXJcbiAgKTogKFVzZXIgJiB7IHRlY2huaWNhbFVzZXI/OiBib29sZWFuIH0pW10ge1xuICAgIGlmIChtYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiB1c2Vycy5zbGljZSgwLCBtYXhMZW5ndGgpO1xuICAgIH1cbiAgICBpZiAoYXV0b1NjYWxlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBjb25zdCB1c2Vyc1RvU2hvdyA9IE1hdGguZmxvb3IoKHVzZXJHcm91cFdpZHRoIC0gMiAqIFNJWkVTW3NpemVdKSAvICgoU0laRVNbc2l6ZV0gKiAyKSAvIDMpKSArIDE7XG4gICAgICAgIHJldHVybiB1c2Vycy5zbGljZSgwLCB1c2Vyc1RvU2hvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1c2Vyc1RvU2hvdyA9IE1hdGguZmxvb3IodXNlckdyb3VwV2lkdGggLyAoU0laRVNbc2l6ZV0gKyAyKSkgLSAxO1xuICAgICAgICByZXR1cm4gdXNlcnMuc2xpY2UoMCwgdXNlcnNUb1Nob3cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cbn1cblxudHlwZSBTaXplTWFwID0geyBbSyBpbiBVc2VyQXZhdGFyU2l6ZV06IG51bWJlciB9O1xuXG5jb25zdCBTSVpFUzogU2l6ZU1hcCA9IHtcbiAgWFM6IDE2LFxuICBTOiAyNCxcbiAgTTogMzIsXG4gIEw6IDQwLFxuICBYTDogNjRcbn07XG4iXX0=
@@ -1,29 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import DOMPurify from 'dompurify';
3
- import * as i0 from "@angular/core";
4
- export class HighlightRangePipe {
5
- transform(text, offset = 0, length = 0) {
6
- const highlightedMarkup = this.doTransform(text, offset, length);
7
- return DOMPurify.sanitize(highlightedMarkup, { ALLOWED_TAGS: ['span'], ALLOWED_ATTR: ['class'] });
8
- }
9
- doTransform(text, offset, length) {
10
- if (!text || offset < 0 || length < 0 || offset >= text?.length || offset + length > text?.length) {
11
- return '';
12
- }
13
- const highlightedPart = text.slice(offset, offset + length);
14
- return text.slice(0, offset) + (highlightedPart.length !== 0 ? this.highlight(highlightedPart) : '') + text.slice(offset + length);
15
- }
16
- highlight(text) {
17
- return `<span class="termHighlight">${text}</span>`;
18
- }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HighlightRangePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
20
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: HighlightRangePipe, isStandalone: true, name: "lxHighlightRange" }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HighlightRangePipe, decorators: [{
23
- type: Pipe,
24
- args: [{
25
- name: 'lxHighlightRange',
26
- standalone: true
27
- }]
28
- }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXJhbmdlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL3BpcGVzL2hpZ2hsaWdodC1yYW5nZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQzs7QUFNbEMsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixTQUFTLENBQUMsSUFBWSxFQUFFLFNBQWlCLENBQUMsRUFBRSxTQUFpQixDQUFDO1FBQzVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQW1CLEVBQUUsTUFBYyxFQUFFLE1BQWM7UUFDckUsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDbEcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDckksQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sK0JBQStCLElBQUksU0FBUyxDQUFDO0lBQ3RELENBQUM7OEdBaEJVLGtCQUFrQjs0R0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUo5QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcblxuQFBpcGUoe1xuICBuYW1lOiAnbHhIaWdobGlnaHRSYW5nZScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSGlnaGxpZ2h0UmFuZ2VQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh0ZXh0OiBzdHJpbmcsIG9mZnNldDogbnVtYmVyID0gMCwgbGVuZ3RoOiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICBjb25zdCBoaWdobGlnaHRlZE1hcmt1cCA9IHRoaXMuZG9UcmFuc2Zvcm0odGV4dCwgb2Zmc2V0LCBsZW5ndGgpO1xuICAgIHJldHVybiBET01QdXJpZnkuc2FuaXRpemUoaGlnaGxpZ2h0ZWRNYXJrdXAsIHsgQUxMT1dFRF9UQUdTOiBbJ3NwYW4nXSwgQUxMT1dFRF9BVFRSOiBbJ2NsYXNzJ10gfSk7XG4gIH1cblxuICBwcml2YXRlIGRvVHJhbnNmb3JtKHRleHQ6IHN0cmluZyB8IG51bGwsIG9mZnNldDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0IHx8IG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCB8fCBvZmZzZXQgPj0gdGV4dD8ubGVuZ3RoIHx8IG9mZnNldCArIGxlbmd0aCA+IHRleHQ/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBoaWdobGlnaHRlZFBhcnQgPSB0ZXh0LnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICByZXR1cm4gdGV4dC5zbGljZSgwLCBvZmZzZXQpICsgKGhpZ2hsaWdodGVkUGFydC5sZW5ndGggIT09IDAgPyB0aGlzLmhpZ2hsaWdodChoaWdobGlnaHRlZFBhcnQpIDogJycpICsgdGV4dC5zbGljZShvZmZzZXQgKyBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWdobGlnaHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGVybUhpZ2hsaWdodFwiPiR7dGV4dH08L3NwYW4+YDtcbiAgfVxufVxuIl19